<?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>106274</bug_id>
          
          <creation_ts>2013-01-07 16:30:48 -0800</creation_ts>
          <short_desc>[ANGLE] Update ANGLE in WebKit</short_desc>
          <delta_ts>2013-01-26 16:54:07 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>106798</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Max Vujovic">mvujovic</reporter>
          <assigned_to name="Max Vujovic">mvujovic</assigned_to>
          <cc>achicu</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jdiggs</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>rakuco</cc>
    
    <cc>svillar</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>801801</commentid>
    <comment_count>0</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-07 16:30:48 -0800</bug_when>
    <thetext>Let&apos;s roll in the latest ANGLE sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801855</commentid>
    <comment_count>1</comment_count>
      <attachid>181607</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-07 17:09:04 -0800</bug_when>
    <thetext>Created attachment 181607
Patch (for bots, not for review)

Let&apos;s see what the bots dislike in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801865</commentid>
    <comment_count>2</comment_count>
      <attachid>181607</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-07 17:18:22 -0800</bug_when>
    <thetext>Comment on attachment 181607
Patch (for bots, not for review)

Attachment 181607 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15734909</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801906</commentid>
    <comment_count>3</comment_count>
      <attachid>181607</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-07 18:17:34 -0800</bug_when>
    <thetext>Comment on attachment 181607
Patch (for bots, not for review)

Attachment 181607 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15735950</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801941</commentid>
    <comment_count>4</comment_count>
      <attachid>181607</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-07 19:39:11 -0800</bug_when>
    <thetext>Comment on attachment 181607
Patch (for bots, not for review)

Attachment 181607 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15732931</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802592</commentid>
    <comment_count>5</comment_count>
      <attachid>181750</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-08 13:54:58 -0800</bug_when>
    <thetext>Created attachment 181750
Patch (for bots, not for review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802606</commentid>
    <comment_count>6</comment_count>
      <attachid>181750</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-08 14:05:07 -0800</bug_when>
    <thetext>Comment on attachment 181750
Patch (for bots, not for review)

Attachment 181750 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15762211</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802608</commentid>
    <comment_count>7</comment_count>
      <attachid>181750</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-08 14:05:35 -0800</bug_when>
    <thetext>Comment on attachment 181750
Patch (for bots, not for review)

Attachment 181750 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15763232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802650</commentid>
    <comment_count>8</comment_count>
      <attachid>181750</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-08 14:27:46 -0800</bug_when>
    <thetext>Comment on attachment 181750
Patch (for bots, not for review)

Attachment 181750 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15758260</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803476</commentid>
    <comment_count>9</comment_count>
      <attachid>181947</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-09 10:43:18 -0800</bug_when>
    <thetext>Created attachment 181947
Patch (for bots, not for review)

Attempt Qt bot fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803545</commentid>
    <comment_count>10</comment_count>
      <attachid>181947</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-09 11:47:35 -0800</bug_when>
    <thetext>Comment on attachment 181947
Patch (for bots, not for review)

Attachment 181947 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15758625</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803718</commentid>
    <comment_count>11</comment_count>
      <attachid>181983</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-09 14:40:43 -0800</bug_when>
    <thetext>Created attachment 181983
Patch (for bots, not for review)

Attempt EFL build fix. Refactor Qt build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803759</commentid>
    <comment_count>12</comment_count>
      <attachid>181983</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-09 15:03:44 -0800</bug_when>
    <thetext>Comment on attachment 181983
Patch (for bots, not for review)

Attachment 181983 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15762670</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803830</commentid>
    <comment_count>13</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2013-01-09 16:49:11 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 181983 [details])
&gt; Attachment 181983 [details] did not pass efl-ews (efl):
&gt; Output: http://queues.webkit.org/results/15762670

It&apos;s failing because &quot;${THIRDPARTY_DIR}/ANGLE/include&quot; is part of WebCore_INCLUDE_DIRECTORIES, while ShaderLang.h ends up being included indirectly in Source/WebKit/efl.

You need to add that include directory to Source/WebKit/PlatformEfl.cmake (you may have to do that to WebKit2 too).

BTW, are you sure you need to include &quot;${THIRDPARTY_DIR}/ANGLE/include/KHR&quot; as well (I didn&apos;t look at the whole patch)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803838</commentid>
    <comment_count>14</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-09 16:56:30 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 181983 [details] [details])
&gt; &gt; Attachment 181983 [details] [details] did not pass efl-ews (efl):
&gt; &gt; Output: http://queues.webkit.org/results/15762670
&gt; 
&gt; It&apos;s failing because &quot;${THIRDPARTY_DIR}/ANGLE/include&quot; is part of WebCore_INCLUDE_DIRECTORIES, while ShaderLang.h ends up being included indirectly in Source/WebKit/efl.
&gt; 
&gt; You need to add that include directory to Source/WebKit/PlatformEfl.cmake (you may have to do that to WebKit2 too).

Ah ok. I will give that a try tomorrow.

&gt; 
&gt; BTW, are you sure you need to include &quot;${THIRDPARTY_DIR}/ANGLE/include/KHR&quot; as well (I didn&apos;t look at the whole patch)?

No, including KHR directly is wrong, but I figured I&apos;d try it just in case :). I will remove it from the next patch.

Thanks for the help!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804558</commentid>
    <comment_count>15</comment_count>
      <attachid>182174</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-10 11:11:35 -0800</bug_when>
    <thetext>Created attachment 182174
Patch (for bots, not for review)

Attempt EFL fix. Add &quot;${THIRDPARTY_DIR}/ANGLE/include&quot; to PlatformEfl.cmake in WebKit and WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804724</commentid>
    <comment_count>16</comment_count>
      <attachid>182208</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-10 14:25:58 -0800</bug_when>
    <thetext>Created attachment 182208
Patch (ready for review)

Setting r?, but cq- because this patch will need to be landed manually due to bug 91556. 

Since this is a massive patch, I&apos;ll point out that the important details are described in:
- Source/ThirdParty/ANGLE/ChangeLog

I have additional small ChangeLog entries in:
- Source/WebCore/ChangeLog
- Source/WebKit/ChangeLog
- Source/WebKit2/ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804730</commentid>
    <comment_count>17</comment_count>
      <attachid>182209</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-10 14:29:40 -0800</bug_when>
    <thetext>Created attachment 182209
Patch (ready for review)

Oops, uploaded the wrong patch. Uploading the right one now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806635</commentid>
    <comment_count>18</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-14 14:37:23 -0800</bug_when>
    <thetext>Manually committed r139665: http://trac.webkit.org/changeset/139665</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806873</commentid>
    <comment_count>19</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-01-14 18:43:06 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806874</commentid>
    <comment_count>20</comment_count>
      <attachid>182676</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-01-14 18:43:13 -0800</bug_when>
    <thetext>Created attachment 182676
Attempted build fix - testing EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806876</commentid>
    <comment_count>21</comment_count>
      <attachid>182676</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-14 18:47:35 -0800</bug_when>
    <thetext>Comment on attachment 182676
Attempted build fix - testing EWS

Attachment 182676 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15872693</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806878</commentid>
    <comment_count>22</comment_count>
      <attachid>182676</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-14 18:49:28 -0800</bug_when>
    <thetext>Comment on attachment 182676
Attempted build fix - testing EWS

Attachment 182676 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15868714</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806884</commentid>
    <comment_count>23</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-01-14 18:56:36 -0800</bug_when>
    <thetext>Committed http://trac.webkit.org/changeset/139702

But this broke the build :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806947</commentid>
    <comment_count>24</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-14 21:13:44 -0800</bug_when>
    <thetext>Dean and I made some build fixes this evening:

Fix internal Mac build: http://trac.webkit.org/changeset/139702
Fix Qt build: http://trac.webkit.org/changeset/139705
Fix EFL build: http://trac.webkit.org/changeset/139706
Fix GTK build: http://trac.webkit.org/changeset/139710</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807432</commentid>
    <comment_count>25</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2013-01-15 10:29:07 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Dean and I made some build fixes this evening:
&gt; 
&gt; Fix internal Mac build: http://trac.webkit.org/changeset/139702
&gt; Fix Qt build: http://trac.webkit.org/changeset/139705
&gt; Fix EFL build: http://trac.webkit.org/changeset/139706
&gt; Fix GTK build: http://trac.webkit.org/changeset/139710


A clean build of GTK issues linking errors:

  CCLD     Programs/unittests/testwebhistoryitem
  CCLD     Programs/unittests/testwindow
  CCLD     Programs/unittests/testdownload
./.libs/libwebkit2gtk-3.0.so: undefined reference to `VariablePacker::CheckVariablesWithinPackingLimits(int, std::vector&lt;TVariableInfo, std::allocator&lt;TVariableInfo&gt; &gt; const&amp;)&apos;
collect2: error: ld returned 1 exit status
make[1]: *** [Programs/WebKitWebProcess] Error 1
make[1]: *** Waiting for unfinished jobs....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807441</commentid>
    <comment_count>26</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2013-01-15 10:34:45 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; Dean and I made some build fixes this evening:
&gt; &gt; 
&gt; &gt; Fix internal Mac build: http://trac.webkit.org/changeset/139702
&gt; &gt; Fix Qt build: http://trac.webkit.org/changeset/139705
&gt; &gt; Fix EFL build: http://trac.webkit.org/changeset/139706
&gt; &gt; Fix GTK build: http://trac.webkit.org/changeset/139710
&gt; 
&gt; 
&gt; A clean build of GTK issues linking errors:
&gt; 
&gt;   CCLD     Programs/unittests/testwebhistoryitem
&gt;   CCLD     Programs/unittests/testwindow
&gt;   CCLD     Programs/unittests/testdownload
&gt; ./.libs/libwebkit2gtk-3.0.so: undefined reference to `VariablePacker::CheckVariablesWithinPackingLimits(int, std::vector&lt;TVariableInfo, std::allocator&lt;TVariableInfo&gt; &gt; const&amp;)&apos;
&gt; collect2: error: ld returned 1 exit status
&gt; make[1]: *** [Programs/WebKitWebProcess] Error 1
&gt; make[1]: *** Waiting for unfinished jobs....

Beh, mvujovic just told me about https://bugs.webkit.org/show_bug.cgi?id=106917

Thx for the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807446</commentid>
    <comment_count>27</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-01-15 10:37:11 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; Dean and I made some build fixes this evening:
&gt; &gt; &gt; 
&gt; &gt; &gt; Fix internal Mac build: http://trac.webkit.org/changeset/139702
&gt; &gt; &gt; Fix Qt build: http://trac.webkit.org/changeset/139705
&gt; &gt; &gt; Fix EFL build: http://trac.webkit.org/changeset/139706
&gt; &gt; &gt; Fix GTK build: http://trac.webkit.org/changeset/139710
&gt; &gt; 
&gt; &gt; 
&gt; &gt; A clean build of GTK issues linking errors:
&gt; &gt; 
&gt; &gt;   CCLD     Programs/unittests/testwebhistoryitem
&gt; &gt;   CCLD     Programs/unittests/testwindow
&gt; &gt;   CCLD     Programs/unittests/testdownload
&gt; &gt; ./.libs/libwebkit2gtk-3.0.so: undefined reference to `VariablePacker::CheckVariablesWithinPackingLimits(int, std::vector&lt;TVariableInfo, std::allocator&lt;TVariableInfo&gt; &gt; const&amp;)&apos;
&gt; &gt; collect2: error: ld returned 1 exit status
&gt; &gt; make[1]: *** [Programs/WebKitWebProcess] Error 1
&gt; &gt; make[1]: *** Waiting for unfinished jobs....
&gt; 
&gt; Beh, mvujovic just told me about https://bugs.webkit.org/show_bug.cgi?id=106917
&gt; 
&gt; Thx for the fix.

Sorry, should have linked that bug sooner. It just landed.

Fix GTK build, part 2: http://trac.webkit.org/changeset/139755</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817286</commentid>
    <comment_count>28</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-26 16:54:07 -0800</bug_when>
    <thetext>This updated ANGLE to upstream r1641 per Bug 106798 Comment #10.

Note that I also committed a fix to remove nonexistent files from the Xcode project in r139717.
&lt;http://trac.webkit.org/changeset/139717&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181607</attachid>
            <date>2013-01-07 17:09:04 -0800</date>
            <delta_ts>2013-01-08 13:54:58 -0800</delta_ts>
            <desc>Patch (for bots, not for review)</desc>
            <filename>106274-1.patch</filename>
            <type>text/plain</type>
            <size>1778167</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNWJjOWZmOC4uODA5ODkxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTEsMjIgKzEsMjIgQEAKIDw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICIt
Ly9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1By
b3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotICAgIDxhcnJheT4K
LSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+
Ci0gICAgICAgICAgICA8c3RyaW5nPkFOR0xFPC9zdHJpbmc+Ci0gICAgICAgICAgICA8a2V5Pk9w
ZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0gICAgICAgICAgICA8c3RyaW5nPnIxMTcwPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0gICAgICAgICAg
ICA8c3RyaW5nPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VTQ008L2tleT4KLSAgICAgICAgICAgIDxzdHJp
bmc+c3ZuIGNvIC1yMTE3MCBodHRwOi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL3N2bi90
cnVuay88L3N0cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUltcG9ydERhdGU8L2tl
eT4KLSAgICAgICAgICAgIDxzdHJpbmc+MjAxMi0wNi0xNzwvc3RyaW5nPgotICAgICAgICAgICAg
PGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotICAgICAgICAgICAgPHN0cmluZz5CU0Q8L3N0
cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+Ci0gICAg
ICAgICAgICA8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5nPgotICAgICAgICA8L2RpY3Q+Ci0gICAg
PC9hcnJheT4KLTwvcGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGFycmF5Pgor
CTxkaWN0PgorCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CisJCTxzdHJpbmc+QU5HTEU8
L3N0cmluZz4KKwkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgorCQk8c3RyaW5nPnIxNjQx
PC9zdHJpbmc+CisJCTxrZXk+T3BlblNvdXJjZVdlYnNpdGVVUkw8L2tleT4KKwkJPHN0cmluZz5o
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCQk8a2V5Pk9w
ZW5Tb3VyY2VTQ008L2tleT4KKwkJPHN0cmluZz5zdm4gY28gLXIxNjQxIGh0dHA6Ly9hbmdsZXBy
b2plY3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rLzwvc3RyaW5nPgorCQk8a2V5Pk9wZW5Tb3Vy
Y2VJbXBvcnREYXRlPC9rZXk+CisJCTxzdHJpbmc+MjAxMy0wMS0wNDwvc3RyaW5nPgorCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlPC9rZXk+CisJCTxzdHJpbmc+QlNEPC9zdHJpbmc+CisJCTxrZXk+
T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+CisJCTxzdHJpbmc+QU5HTEUudHh0PC9zdHJpbmc+
CisJPC9kaWN0PgorPC9hcnJheT4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS5wcmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wcmkK
aW5kZXggMmY3YjcwMC4uMmJjN2ZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUucHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnByaQpAQCAt
OCw1ICs4LDYgQEAKIFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFCiAKIElOQ0xVREVQQVRIICs9IFwKLSAgICAkJFNPVVJDRV9ESVIvaW5jbHVk
ZS9HTFNMQU5HCisgICAgJCRTT1VSQ0VfRElSL2luY2x1ZGUvR0xTTEFORyBcCisgICAgJCRTT1VS
Q0VfRElSL2luY2x1ZGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzIwN2VjYS4uNTExM2I3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00Miw2ICs0MiwzNSBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsK
IAkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi87IH07CisJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4OTMxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEy
NjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk0MTY5NzRERUQwMDZGQUE1
QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCAqLzsgfTsKKwkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjRGOEFGMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NEY4OTYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggKi87IH07CisJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OTcxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNjRG
OEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAv
KiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4QjIxNjk3NERFRDAwNkZBQTVBIC8q
IEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NEY4OTkxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwICovOyB9OworCQlBMjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4
QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5j
cHAgKi87IH07CisJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUMxNjk3NERFRDAw
NkZBQTVBIC8qIElucHV0LmggKi87IH07CisJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY0Rjg5RDE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjY0RjhCNzE2
OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oICovOyB9
OworCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUYxNjk3NERFRDAwNkZBQTVB
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhB
MDE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCAqLzsgfTsKKwkJQTI2NEY4QkExNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5k
ZXIuY3BwICovOyB9OworCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCAqLzsgfTsKKwkJQTI2NEY4QkMx
Njk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJp
Y19sZXguaCAqLzsgfTsKKwkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNDE2
OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NEY4QkUxNjk3NERFRDAw
NkZBQTVBIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLzsgfTsKKwkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTYx
Njk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5oICovOyB9OworCQlBMjY0RjhDMDE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEE3MTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovOyB9OworCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgx
Njk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzIxNjk3NERFRDAw
NkZBQTVBIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2
NEY4QzMxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OworCQlBMjY0RjhDODE2
OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVz
LmggKi87IH07CisJCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhD
NjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9OworCQlBMjY0RjhD
QTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBW
YXJpYWJsZVBhY2tlci5oICovOyB9OworCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hy
cGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owog
CQlBMjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUz
OSAvKiBEaWFnbm9zdGljcy5oICovOyB9OwogCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi87IH07CkBAIC00OSwzMCArNzgsNiBAQAogCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CiAJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKIAkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKLQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKLQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07Ci0JCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owot
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OwotCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owot
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OwotCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKLQkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07Ci0JCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07Ci0JCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKLQkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07Ci0JCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07Ci0JCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKLQkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKLQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07Ci0JCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07Ci0JCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07Ci0JCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKLQkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKIAkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKIAkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OwogCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CkBAIC04NCw2ICs4OSw3IEBACiAJCUEyNjU2ODQxMTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OwogCQlBMjY1Njg0MjE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKIAkJQTI2NTY4NDMx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI5QjE1RTgx
Njk3ODQ1NzAwMTExRDk3IC8qIGtocnBsYXRmb3JtLmggaW4gQ29weUZpbGVzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJw
bGF0Zm9ybS5oICovOyB9OwogCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBG
MzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwpAQCAtOTcsMTMgKzEwMyw2IEBACiAJ
CUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKIAkJRkIzOUQyOEYxMjAwRjM1QTAwMDg4RTY5IC8q
IFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07
CiAJCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi87IH07Ci0JCUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAv
KiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovOyB9OwotCQlGQjM5RDI5NjEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi87IH07Ci0JCUZC
MzlEMjk4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRBMTIwMEYzNUEwMDA4OEU2OSAvKiBj
cHBzdHJ1Y3QuYyAqLzsgfTsKLQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNEIx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjM5RDI5RDEyMDBGMzVBMDAw
ODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyNEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJ
RkIzOUQyQTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgKi87IH07Ci0JCUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU0MTIw
MEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLzsgfTsKIAkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4
RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5jcHAgKi87IH07CiAJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQTgxMjAw
RjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovOyB9OwpAQCAtMTMzLDYgKzEzMiwxNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwogCQl9OworCQlBMjlCMTVFNjE2OTc4NDQ1MDAx
MTFEOTcgLyogQ29weUZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOworCQkJZHN0UGF0aCA9IHVzci9sb2NhbC9pbmNs
dWRlL0tIUjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJCUEy
OUIxNUU4MTY5Nzg0NTcwMDExMUQ5NyAvKiBraHJwbGF0Zm9ybS5oIGluIENvcHlGaWxlcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
IC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCkBAIC0xNzUsOCArMTg0LDM1IEBACiAJCUEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBB
QUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4
OTQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTYxNjk3NERF
RDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTgxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTkx
Njk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVB
IC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAv
KiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1
QSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0Rjg5RjE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEg
LyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFj
cm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEEyMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NEY4QTMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG51bWVyaWNfbGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjRGOEE0MTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE2MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVw
cm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE3MTY5NzRERUQwMDZGQUE1
QSAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
b3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBODE2
OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhB
OTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QUExNjk3
NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFy
aWFibGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQ
YWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4Q0MxNjk3NjJBQTAw
NkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0IwMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NCwzMiArMjIwLDYgQEAKIAkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyMiw2OSArMjMyLDYgQEAKIAkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
R2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTg4MTIwMEYy
NjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxODkxMjAwRjI2MjAwMDg4RTY5IC8qIENvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5p
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyog
ZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4RjEy
MDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6
ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk0MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
OTUxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQYXJz
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOTcxMjAwRjI2
MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk4MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1l
ZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAv
KiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDE5QTEyMDBGMjYyMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRl
cm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTlCMTIw
MEYyNjIwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMTlFMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291
cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOUYxMjAw
RjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRw
dXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUExMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQTIxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRI
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTMxMjAwRjI2MjAw
MDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNDEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTgxMjAwRjI2MjAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29s
QWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUExMjAwRjI2MjAw
MDg4RTY5IC8qIGF0b20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gYXRvbS5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkg
LyogYXRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBhdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21w
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUQxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUUxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjExMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzbGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjcxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCODEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI5MTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFs
aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkMxMjAwRjI2MjAw
MDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJFMTIwMEYyNjIwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lt
Ym9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDMjEyMDBG
MjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0Yx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDExMjAw
RjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxNSwyMyArMjYyLDYgQEAKIAkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xB
bGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjQzMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0NTEyMDBG
MzVBMDAwODhFNjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBh
dG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQ2MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8q
IGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyog
Y3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJB
bGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI1ODEyMDBGMzVBMDAw
ODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3Niwz
NSArMzA2LDEzIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OwotCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovID0g
eworCQlBMjY0RjhDQjE2OTc2MkFBMDA2RkFBNUEgLyogS0hSICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyog
cHBfdXRpbHMuaCAqLywKLQkJCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3NCYXNlLmNwcCAqLywKLQkJCQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3MuaCAqLywKLQkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovLAotCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5jcHAgKi8sCi0JCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovLAotCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLywKLQkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBh
cnNlci5oICovLAotCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8s
Ci0JCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi8sCi0JCQkJQTI2NTY3
RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjY1NjdENTE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uY3BwICovLAotCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oICov
LAotCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLywK
LQkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovLAotCQkJ
CUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJCUEy
NjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjY1NjdFNDE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAotCQkJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oICovLAotCQkJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwICovLAotCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIu
aCAqLywKKwkJCQlBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCAqLywK
IAkJCSk7Ci0JCQlwYXRoID0gbmV3OworCQkJbmFtZSA9IEtIUjsKKwkJCXBhdGggPSBpbmNsdWRl
L0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUEyNjU2ODJDMTU5QzIz
RTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKQEAgLTQzMiwyNCArMzQwLDMyIEBACiAJCQlw
YXRoID0gdGltaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI5QjE1
RTkxNjk3OEI3RDAwMTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5H
ICovLAorCQkJCUEyNjRGOENCMTY5NzYyQUEwMDZGQUE1QSAvKiBLSFIgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGQjM5
RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovLAogCQkJCTMx
MkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovLAotCQkJCUZCMzlEMjIwMTIwMEYzNUEw
MDA4OEU2OSAvKiBjb21waWxlciAqLywKLQkJCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyog
U291cmNlICovLAorCQkJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAvKiBzcmMgKi8sCiAJCQkJ
NUQ3QzU5QzQxMjA4QzY4QjAwMUM4NzNFIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCUZCMzlE
MENDMTIwMEVGOUIwMDA4OEU2OSAvKiBQcm9kdWN0cyAqLywKIAkJCSk7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNl
ICovID0geworCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogc3JjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCisJCQkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJ
KTsKLQkJCW5hbWUgPSBTb3VyY2U7CisJCQluYW1lID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKIAkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICov
ID0gewpAQCAtNDYwLDk0ICszNzYsMTIgQEAKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKLQkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCi0JCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAotCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAot
CQkJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAq
LywKLQkJCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5o
ICovLAotCQkJCUZCMzlEMThGMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCi0J
CQkJRkIzOUQxOTAxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCi0JCQkJRkIzOUQx
OTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLAotCQkJCUZCMzlEMTkyMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8sCi0JCQkJRkIzOUQxOTMxMjAwRjI2MjAw
MDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAotCQkJCUZCMzlEMTk0MTIwMEYyNjIwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCi0JCQkJRkIzOUQxOTUxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQxOTYxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDE5NzEyMDBGMjYyMDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhF
NjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQxOTkxMjAwRjI2MjAwMDg4RTY5IC8q
IGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQxOUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxp
bnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5o
ICovLAotCQkJCUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJ
CQlGQjM5RDE5RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJ
CUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAotCQkJCUZC
MzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDFB
MTEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAotCQkJCUZCMzlEMUEyMTIwMEYy
NjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQlGQjM5RDFBMzEyMDBGMjYyMDAw
ODhFNjkgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlEMUE0MTIwMEYyNjIwMDA4OEU2OSAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuY3BwICovLAotCQkJCUZCMzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5oICovLAotCQkJCUZCMzlEMUE3MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3Bw
ICovLAotCQkJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKLQkJ
CQlGQjM5RDFBOTEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAotCQkJCUZCMzlE
MUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQx
QkMxMjAwRjI2MjAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCi0JCQkJRkIzOUQxQkQx
MjAwRjI2MjAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAotCQkJCUZCMzlEMUJFMTIwMEYy
NjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCi0JCQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAv
KiBTaEhhbmRsZS5oICovLAotCQkJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi8sCi0JCQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmggKi8sCi0JCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCAqLywKLQkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAq
LywKLQkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICov
LAotCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAot
CQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUEyNjU2N0I3
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyNjU2
N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCSk7Ci0J
CQlpbmNsdWRlSW5JbmRleCA9IDA7Ci0JCQluYW1lID0gY29tcGlsZXI7Ci0JCQlwYXRoID0gc3Jj
L2NvbXBpbGVyOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQxQTkx
MjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQxQUExMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20u
YyAqLywKLQkJCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkgLyogYXRvbS5oICovLAotCQkJCUZC
MzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCi0JCQkJRkIzOUQxQUQxMjAw
RjI2MjAwMDg4RTY5IC8qIGNwcC5jICovLAotCQkJCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAv
KiBjcHAuaCAqLywKLQkJCQlGQjM5RDFBRjEyMDBGMjYyMDAwODhFNjkgLyogY3Bwc3RydWN0LmMg
Ki8sCi0JCQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAotCQkJCUZC
MzlEMUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLywKLQkJCQlGQjM5RDFCMjEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCi0JCQkJRkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nh
bm5lci5jICovLAotCQkJCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8s
Ci0JCQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAotCQkJCUZC
MzlEMUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywKLQkJCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhF
NjkgLyogdG9rZW5zLmMgKi8sCi0JCQkJRkIzOUQxQkExMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vu
cy5oICovLAotCQkJKTsKLQkJCWluY2x1ZGVJbkluZGV4ID0gMDsKLQkJCXBhdGggPSBwcmVwcm9j
ZXNzb3I7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAq
LywKKwkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICov
LAorCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAog
CQkJCTMxNThFQTBDMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICov
LAogCQkJCTMxNThFQTBEMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAq
LywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCkBAIC02
NDAsMjUgKzQ3NCwzMiBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vz
c29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1
NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAotCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmMgKi8sCi0JCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20u
aCAqLywKLQkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLAotCQkJ
CUZCMzlEMjQ4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuYyAqLywKLQkJCQlGQjM5RDI0OTEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmggKi8sCi0JCQkJRkIzOUQyNEExMjAwRjM1QTAwMDg4RTY5IC8q
IGNwcHN0cnVjdC5jICovLAorCQkJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuaCAqLywKKwkJCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjRGODk2MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oICovLAorCQkJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5OTE2OTc0REVEMDA2RkFBNUEgLyogRXhw
cmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTI2NEY4OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5QjE2OTc0REVEMDA2RkFBNUEgLyogSW5w
dXQuY3BwICovLAorCQkJCUEyNjRGODlDMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oICovLAor
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCisJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uaCAqLywKKwkJCQlBMjY0RjhBMTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5jcHAgKi8sCisJCQkJQTI2NEY4QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLywKKwkJCQlBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXguaCAqLywK
KwkJCQlBMjY0RjhBNDE2OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY0
RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjY0RjhB
NjE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTI2NEY4QTcxNjk3
NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTI2NEY4QTgxNjk3NERF
RDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEg
LyogVG9rZW4uaCAqLywKKwkJCQlBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8s
CiAJCQkJNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKLQkJ
CQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8sCi0JCQkJRkIzOUQyNEMx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5oICovLAotCQkJCUZCMzlEMjREMTIwMEYzNUEwMDA4
OEU2OSAvKiBwYXJzZXIuaCAqLywKLQkJCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJl
cHJvY2Vzcy5oICovLAotCQkJCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMg
Ki8sCi0JCQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLywKLQkJCQlG
QjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQyNTIx
MjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLywKLQkJCQlGQjM5RDI1MzEyMDBGMzVBMDAw
ODhFNjkgLyogc3ltYm9scy5oICovLAotCQkJCUZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAvKiB0
b2tlbnMuYyAqLywKLQkJCQlGQjM5RDI1NTEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03MDAsMjUgKzU0MSwyOSBAQAogCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMDE1OUMyMUIx
MDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMTE1OUMyMUIx
MDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2
NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUEyNjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgwODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODBCMTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODJCMTU5
QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1
Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxNThFQTBGMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY0RjhCQzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXgu
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGls
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8q
IFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM4MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOENBMTY5NzRF
MkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcz
NCw2ICs1NzksNyBAQAogCQkJCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtz
ICovLAogCQkJCTMxMkJEQjBCMTVGRUNBQjAwMDk3RUJDNyAvKiBDb3B5RmlsZXMgKi8sCiAJCQkJ
MzEyQkRCMEQxNUZFQ0FDRTAwOTdFQkM3IC8qIENvcHlGaWxlcyAqLywKKwkJCQlBMjlCMTVFNjE2
OTc4NDQ1MDAxMTFEOTcgLyogQ29weUZpbGVzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAo
CiAJCQkpOwpAQCAtNzg5LDEzICs2MzUsNiBAQAogCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMjhGMTIwMEYzNUEw
MDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDI5MTEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
NjEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5ODEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
OTEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQy
QTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlE
MkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOSwxNyArNjU4LDYgQEAKIAkJCQlBMjY1NjdCQjE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY3QkQxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RjAxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAv
KiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1Mzkg
LyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4M0Ix
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgzNyw2ICs2NjUsMTggQEAKIAkJCQlBMjY1Njg0MDE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1OEVBMEUxNjMwOTY4RDAwNkJF
NUVFIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhB
QzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEIyMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEI0MTY5NzRE
RUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCNjE2OTc0
REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NEY4QjgxNjk3
NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEJBMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjRGOEJFMTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjRGOEMzMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NEY4QzkxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVy
aXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVyaXZlZFNvdXJjZXMu
cHJpCmluZGV4IGIzYTg5ZmMuLjhmOTUwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9E
ZXJpdmVkU291cmNlcy5wcmkKQEAgLTEzLDcgKzEzLDcgQEAgZXF1YWxzKHNhbml0aXplZEZpbGUs
ICQkdG9TYW5pdGl6ZWRQYXRoKCQkX1BST19GSUxFXykpOlRFTVBMQVRFID0gZGVyaXZlZAogCiBB
TkdMRV9GTEVYX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBc
Ci0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKKyAg
ICAkJFBXRC9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCiAKIGFuZ2xlZmxl
eC5vdXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX1fbGV4LmNwcAogYW5nbGVmbGV4LmlucHV0ID0g
QU5HTEVfRkxFWF9TT1VSQ0VTCkBAIC0yMiw3ICsyMiw3IEBAIEdFTkVSQVRPUlMgKz0gYW5nbGVm
bGV4CiAKIEFOR0xFX0JJU09OX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2ds
c2xhbmcueSBcCi0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci55CisgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLnkKIAogYW5nbGViaXNvbl9kZWNsLm91dHB1dCA9ICR7UU1BS0VfRklMRV9CQVNF
fV90YWIuaAogYW5nbGViaXNvbl9kZWNsLmlucHV0ID0gQU5HTEVfQklTT05fU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKaW5kZXggZWFhOTM2ZC4uMGU3ZGY2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9UYXJnZXQucHJpCkBAIC0xMyw3ICsxMyw3IEBAIENPTkZJRyArPSBzdGF0aWNs
aWIKIAogSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9zcmMgXAotICAgICQkU09V
UkNFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldyBcCisgICAgJCRTT1VSQ0VfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IgXAogICAgICQkU09VUkNFX0RJUi9pbmNsdWRlCiAK
IEhFQURFUlMgKz0gXApAQCAtMzMsNiArMzMsNyBAQCBIRUFERVJTICs9IFwKICAgICBzcmMvY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCisgICAgc3JjL2NvbXBpbGVyL0hh
c2hOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCiAgICAgc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVEbGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmggXApAQCAtNDQsMjggKzQ1LDE5IEBAIEhFQURFUlMgKz0gXAogICAgIHNyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggXAog
ICAgIHNyYy9jb21waWxlci9QcmFnbWEuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKLSAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5w
dXQuaCBcCiAgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAot
ICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xl
eGVyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAotICAg
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0gICAgc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAotICAgIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNl
ci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCi0gICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXAotICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIFwKKyAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmggXAorICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvTWFjcm8uaCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXgu
aCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisgICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIFwKKyAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRFU1NMLmggXAogICAgIHNy
Yy9jb21waWxlci9PdXRwdXRHTFNMLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5oIFwKQEAgLTg4LDYgKzgwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL3V0
aWwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKKyAgICBzcmMvY29tcGlsZXIvVmFyaWFibGVQaWNr
ZXIuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKIAogU09VUkNFUyArPSBcCkBA
IC0xMzQsMjMgKzEyNywxNyBAQCBTT1VSQ0VTICs9IFwKICAgICBzcmMvY29tcGlsZXIvdXRpbC5j
cHAgXAogICAgIHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgXAorICAgIHNyYy9jb21waWxlci9WYXJpYWJsZVBp
Y2tlci5jcHAgXAogICAgIHNyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwK
LSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
RXhwYW5kZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAg
XAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKLSAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYworICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NC
YXNlLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorICAgIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL01hY3JvLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNz
b3IuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcCBcCiAKIHdp
bjMyOiBTT1VSQ0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCiBlbHNlOiBTT1VS
Q0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4IGQ4Mjkz
MWUuLjQ2MjM3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMjMsNiArMjMsOCBAQAogI2RlZmluZSBDT01QSUxF
Ul9FWFBPUlQKICNlbmRpZgogCisjaW5jbHVkZSAiS0hSL2tocnBsYXRmb3JtLmgiCisKIC8vCiAv
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCkBAIC0xMTAs
NyArMTEyLDEwIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggICA9ICAweDhCODcsCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhC
ODksCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX01B
UFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDhCOEIKKyAgU0hfTUFQUEVEX05BTUVfTUFY
X0xFTkdUSCAgICAgID0gIDB4NjAwMCwKKyAgU0hfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgICAg
ID0gIDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgID0gIDB4NjAwMiwK
KyAgU0hfSEFTSEVEX05BTUVTX0NPVU5UICAgICAgICAgID0gIDB4NjAwMwogfSBTaFNoYWRlcklu
Zm87CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4KQEAgLTE0NCwxMSArMTQ5LDE0IEBAIHR5cGVkZWYg
ZW51bSB7CiAgIC8vIC0gVGhlIHNoYWRlciB0eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KICAg
U0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMCwKIAorICAvLyBFbmZvcmNlIHRoZSBHTFNMIDEu
MDE3IEFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhY2tpbmcgcmVzdHJpY3Rpb25zLgorICBTSF9FTkZP
UkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TID0gMHgwODAwLAorCiAgIC8vIFRoaXMgZmxhZyBlbnN1
cmVzIGFsbCBpbmRpcmVjdCAoZXhwcmVzc2lvbi1iYXNlZCkgYXJyYXkgaW5kZXhpbmcKICAgLy8g
aXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gVGhpcyBlbnN1cmVzLCBmb3Ig
ZXhhbXBsZSwKICAgLy8gdGhhdCB5b3UgY2Fubm90IHJlYWQgb2ZmIHRoZSBlbmQgb2YgYSB1bmlm
b3JtLCB3aGV0aGVyIGFuIGFycmF5CiAgIC8vIHZlYzIzNCwgb3IgbWF0MjM0IHR5cGUuCi0gIFNI
X0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyA9IDB4MDgwMAorICBTSF9DTEFNUF9JTkRJUkVD
VF9BUlJBWV9CT1VORFMgPSAweDEwMDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAogLy8KQEAgLTE2
Myw2ICsxNzEsMTAgQEAgQ09NUElMRVJfRVhQT1JUIGludCBTaEluaXRpYWxpemUoKTsKIC8vCiBD
T01QSUxFUl9FWFBPUlQgaW50IFNoRmluYWxpemUoKTsKIAorLy8gVGhlIDY0IGJpdHMgaGFzaCBm
dW5jdGlvbi4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgaW5wdXQgc3RyaW5nOyB0aGUKKy8v
IHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIHN0cmluZyBsZW5ndGguCit0eXBlZGVmIGtocm9ub3Nf
dWludDY0X3QgKCpTaEhhc2hGdW5jdGlvbjY0KShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KTsK
KwogLy8KIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiByZXNvdXJjZXMgKGNv
bnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCiAvLyBUaGUgbmFtZXMgZm9yIHRoZXNlIHJlc291cmNl
cyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcgZ2xfL0dMXy4KQEAgLTE4NCw2ICsxOTYs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBpbnQgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwog
ICAgIGludCBPRVNfRUdMX2ltYWdlX2V4dGVybmFsOwogICAgIGludCBBUkJfdGV4dHVyZV9yZWN0
YW5nbGU7CisKKyAgICAvLyBOYW1lIEhhc2hpbmcuCisgICAgLy8gU2V0IGEgNjQgYml0IGhhc2gg
ZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCisgICAgLy8gRGVm
YXVsdCBpcyBOVUxMLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgSGFzaEZ1bmN0aW9uOwogfSBTaEJ1
aWx0SW5SZXNvdXJjZXM7CiAKIC8vCkBAIC0yNzAsNiArMjg3LDExIEBAIENPTVBJTEVSX0VYUE9S
VCBpbnQgU2hDb21waWxlKAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWlu
YXRpb24gY2hhcmFjdGVyLgogLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIGxlbmd0
aCBvZiB0aGUgbWFwcGVkIHZhcmlhYmxlIG5hbWUgaW5jbHVkaW5nCiAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9OQU1F
X01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgdXNlci1kZWZpbmVkIG5hbWUgaW5jbHVk
aW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rl
ci4KKy8vIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgaGFz
aGVkIG5hbWUgaW5jbHVkaW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6IHRoZSBu
dW1iZXIgb2YgaGFzaGVkIG5hbWVzIGZyb20gdGhlIGxhdGVzdCBjb21waWxlLgogLy8gCiAvLyBw
YXJhbXM6IFJlcXVlc3RlZCBwYXJhbWV0ZXIKIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoR2V0SW5m
byhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zNTAsNiArMzcyLDI0IEBAIENPTVBJTEVSX0VY
UE9SVCB2b2lkIFNoR2V0QWN0aXZlVW5pZm9ybShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKTsKIAorLy8g
UmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIG5hbWUgaGFzaGluZyBlbnRyeSBmcm9tIHRoZSBs
YXRlc3QgY29tcGlsZS4KKy8vIFBhcmFtZXRlcnM6CisvLyBoYW5kbGU6IFNwZWNpZmllcyB0aGUg
Y29tcGlsZXIKKy8vIGluZGV4OiBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBuYW1lIGhhc2hp
bmcgZW50cnkgdG8gYmUgcXVlcmllZC4KKy8vIG5hbWU6IFJldHVybnMgYSBudWxsIHRlcm1pbmF0
ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHVzZXIgZGVmaW5lZCBuYW1lLgorLy8gICAgICAgSXQg
aXMgYXNzdW1lZCB0aGF0IG5hbWUgaGFzIGVub3VnaCBtZW1vcnkgdG8gYWNjb21vZGF0ZSB0aGUg
bmFtZS4KKy8vICAgICAgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8gc3RvcmUg
dGhlIHVzZXIgZGVmaW5lZCBuYW1lIGNhbgorLy8gICAgICAgYmUgb2J0YWluZWQgYnkgY2FsbGlu
ZyBTaEdldEluZm8gd2l0aCBTSF9OQU1FX01BWF9MRU5HVEguCisvLyBoYXNoZWROYW1lOiBSZXR1
cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBoYXNoZWQgbmFtZSBv
ZgorLy8gICAgICAgICAgICAgdGhlIHVuaWZvcm0gdmFyaWFibGUsIEl0IGlzIGFzc3VtZWQgdGhh
dCBoYXNoZWROYW1lIGhhcyBlbm91Z2gKKy8vICAgICAgICAgICAgIG1lbW9yeSB0byBhY2NvbW9k
YXRlIHRoZSBuYW1lLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJlcXVpcmVkCisvLyAgICAgICAg
ICAgICB0byBzdG9yZSB0aGUgbmFtZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBTaEdldElu
Zm8gd2l0aAorLy8gICAgICAgICAgICAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSC4KK0NPTVBJ
TEVSX0VYUE9SVCB2b2lkIFNoR2V0TmFtZUhhc2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5k
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVk
TmFtZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjVkYjdkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8v
ICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9Owot
CW9iamVjdFZlcnNpb24gPSA0NTsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhBZ2dyZWdh
dGVUYXJnZXQgc2VjdGlvbiAqLwotCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICov
ID0gewotCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAot
CQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlBMTVFNzhCRUNERkYyMEJDM0ZGRjA0MEEg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gQWxsOwotCQkJcHJv
ZHVjdE5hbWUgPSBBbGw7Ci0JCX07Ci0vKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMDU1NjNBREZFQTE1MTE2
RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi87IH07Ci0JCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTEx
OEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3BwICovOyB9OwotCQkwQTIxNjk0OTEw
M0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5p
dGlhbGl6ZURsbC5jcHAgKi87IH07Ci0JCTBBQzE4OTdFNDYxQTBENDc1OEUzRENFMyAvKiBWZXJz
aW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3BwICovOyB9OwotCQkw
RTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQ4RDk2N0I4RDI4OEE4
MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi87IH07Ci0JCTBFQzA5QjNCMjU0
ODI5RjhGMUQ5NTJEMyAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEQzlCNjQ3RTEwRjY1RjY2MTQyRUNDMSAvKiBGb3JM
b29wVW5yb2xsLmNwcCAqLzsgfTsKLQkJMUVEMUQyQzdDNzRDNkI2MjVBRkIxQ0NGIC8qIFZhcmlh
YmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKLQkJ
Mjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhBNkRFRERGMDhEQjM3MDM5NEE3
QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLzsgfTsKLQkJMkU3QzBEMzgwNEI4MzA4QTQ5M0Q5QjRC
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi87
IH07Ci0JCTMwMjFFMEJGMUJDODQ0MkZGMUYyRjJCNCAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0E1N0M2RDQxMzc3M0FF
QkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OwotCQkzMDY1RDI5RTk3RkFDNkUxMjcz
ODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAg
Ki87IH07Ci0JCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2
REMgLyogYXRvbS5jICovOyB9OwotCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3Ry
dWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4
QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07Ci0JCTNBOTZFOUNBQzhB
MjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsg
fTsKLQkJM0YxODM4OUJDQjg5MzcwQTkzMDY2N0Y0IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjcwREM3NEEyMUZC
Q0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07Ci0JCTQwRkMxODlCOEEyNDZF
REYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5j
cHAgKi87IH07Ci0JCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2VuSExTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDk1NDlEQ0NB
RjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovOyB9OwotCQk1MERGMDAwMDVDQzQy
MTJGNkZCMTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovOyB9OwotCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi87IH07Ci0JCTVGN0I1MkE1NERDRTgxNTVFRDk0
RUNGOCAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAq
LzsgfTsKLQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlGRjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUw
MDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07Ci0JCTg4OEYxMzgyNDk4RTJENzRB
RjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovOyB9Owot
CQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdDRjFGODNFODQy
OTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJOTNBNDFB
RjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3Bw
ICovOyB9OwotCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VG
RjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07Ci0JCUEyMDEwODNCMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3Mu
Y3BwICovOyB9OwotCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEy
MDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07Ci0JCUEyMDEwODNFMTU5QzMxQTAwMEU1
N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5
MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07Ci0JCUEyMDEwODQxMTU5QzMxQTAw
MEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9Owot
CQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8q
IE1hY3JvLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OwotCQlB
MjAxMDg0NDE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JC
RSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OwotCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9r
ZW5pemVyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgKi87IH07Ci0JCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07Ci0J
CUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKLQkJQTIw
MTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NjYx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1
N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUEyMDEwODY3MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
dGVjdFJlY3Vyc2lvbi5jcHAgKi87IH07Ci0JCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owot
CQlBMjAxMDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEyMDEwODZBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NkIxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OwotCQlBMjAxMDg2QzE1
OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NzExNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3
QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovOyB9OwotCQlBMjAxMDg3MjE1OUMzMjYy
MDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwICovOyB9OwotCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyog
UmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07Ci0J
CUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyog
c3ltYm9scy5jICovOyB9OwotCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKLQkJ
QjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUw
IC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwotCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKLQkJQzRB
QUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8q
IE91dHB1dEVTU0wuY3BwICovOyB9OwotCQlDNzVFQjkyOTJBMEREQTQ1NTkyQThBQ0YgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07Ci0JCUNC
N0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAq
LzsgfTsKLQkJRDU2RjdEMDBFOUIxNjJFNDE2RDM3REYwIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdDNzVCNTc2
RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07Ci0JCUUxQzdDNURGRjBCMkRGRUMw
OTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07Ci0JCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzRE
MDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKLQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRy
YW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87
IH07Ci0JCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovOyB9OwotCQlGNUFFMkEyOTJERkFGOEMxNTg0MTJBQTIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsg
fTsKLQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3RTVCMEYwNDYzNUU2MDkw
RjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KLQkJ
MUY3MjQyNDk2MTAzRURGMjlDQzI1RDg3IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
LQkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IERB
MTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlw
ZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MTsKLQkJCXJlbW90ZUluZm8gPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCX07Ci0JCTU1RDVGOUJGNzI3
RTRBM0I2NjM3ODAyQiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgw
NzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJ
cmVtb3RlR2xvYmFsSURTdHJpbmcgPSA2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzI7Ci0JCQlyZW1v
dGVJbmZvID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCX07Ci0JCTYwRDM1NDZBQzI3QjA5NEQ2Q0Ew
NENENiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1Mzkx
MzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xv
YmFsSURTdHJpbmcgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQ7Ci0JCQlyZW1vdGVJbmZvID0g
dHJhbnNsYXRvcl9nbHNsOwotCQl9OwotLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkwNTZGRUFE
QzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBMTE4RTUwMDNFNUMwRTI1M0M1MzgzOSAv
KiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9t
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTEyRUFGMDI4MzEx
RUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAv
KiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxODJCQUQ1MEQ0RTU4Qjg4NEY1RUI5RjMg
LyogRm9yTG9vcFVucm9sbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JMb29wVW5yb2xsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFy
Y2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlh
YmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5z
bGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTNF
RTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0
aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjY4QTZBQTgxMTQ5NTcxOEE2
OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2
MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBD
NyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkg
LyogZ2xzbGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBn
bHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MjhGRjIwMTgzOUM2
RjIzM0UyNkZGREEgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1QTIxNTk5QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdXRwdXRITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEOTkz
NTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEQzlCNjQ3RTEwRjY1
RjY2MTQyRUNDMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvckxv
b3BVbnJvbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2MEMzOTk4QzlDRTY2
REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0
aWFsaXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJCNjZBQjU4NzM4
NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QkJDODIyNEI5RDhFMjM0RDExN0ZBMEMg
LyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3RDlDRjM3NkRD
NTc5OUI0QzZCMzMzMUUgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBj
cHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVO
YW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1ODQ1RkZGNUE4RTYz
MzY0MzA4MjM2RCAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
aXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODlB
NkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzbGds
b2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTAyNTQ4NDJENzI5NzU2NzJD
MkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsaWRhdGVM
aW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0Q2MUNCMEJDRTU0
RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAv
KiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMg
LyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIElu
aXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMTY0NEIwMEU5MzA0QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNs
YXRvcl9nbHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3Jf
Z2xzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSAibGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hIjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjAx
NTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODIzMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Np
b25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVz
c2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI2MTU5
QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMwMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3QkJFIC8q
IHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAv
KiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzMx
NTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEyMDEwODM3MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODQ4MTU5QzMyMDkwMEU1N0JCRSAvKiBsZW5n
dGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1p
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NDkxNTlDMzI0RjAwRTU3
QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODRD
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEUxNTlDMzI0RjAwRTU3QkJFIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODRGMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NTAxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MjE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0
ZWN0UmVjdXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
dGVjdFJlY3Vyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU0
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU2MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIw
MTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JCRSAvKiBQcmFnbWEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg2MTE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg3
MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRvcl9o
bHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfaGxzbC5h
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBNTFDNzI4QjYxNUI0MUUx
RDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUU2NUUxMzlBRTEw
REU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIxNDhEOTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRV
bmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNzU3
MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29k
ZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9s
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xT
TEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJh
bnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyog
Q29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxkX2FuZ2xlLmd5cCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBidWls
ZF9hbmdsZS5neXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNGRDEyQzZFNDZFQkUw
ODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENDBG
NzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQ1M0RERDBDREYxNUVFMURE
MDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRB
NzUgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRFU1NMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8q
IFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRl
cm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFM0EyOUI2
RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjAxM0E3MjQwQkRB
RThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2Vh
cmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGN0IyOTcx
RDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1Npbmsu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjk5RTczN0QzRkZEMzBDQTVFMzU0MTUw
IC8qIGNvbW1vbi5neXBpICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IGNvbW1vbi5neXBpOyBwYXRoID0gLi4vYnVpbGQvY29tbW9u
Lmd5cGk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZGM0FBNjk0REY5QTQ0NTVBODEz
MjM0RCAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQlBMjAxMDdGQjE1OUMz
MTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9
OwotCQlBNUM5OTRFNzREQjFFNjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwotCQl9OwotCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyogRnJhbWV3
b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlGRTM2NzlBMDk1NUIyNUVC
N0JGMTE2RTYgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
R3JvdXAgc2VjdGlvbiAqLwotCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vz
c29yICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkwQzlC
NDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovLAotCQkJCTlDRUQzQUZGMUU2MUI0NUVF
MTAwNTY1NiAvKiBhdG9tLmggKi8sCi0JCQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLywKLQkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCi0J
CQkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAotCQkJCTgwNThBMEEyQTBB
MDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKLQkJCQlBMjAxMDg0ODE1OUMzMjA5MDBF
NTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAotCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4
RSAvKiBtZW1vcnkuYyAqLywKLQkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5
LmggKi8sCi0JCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKLQkJCQlDRkQx
MkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCi0JCQkJNkJCQzgyMjRCOUQ4RTIz
NEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovLAotCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2Fu
bmVyLmggKi8sCi0JCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICov
LAotCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJN0Q5
Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKLQkJCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCi0JCQkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRB
IC8qIHRva2Vucy5oICovLAotCQkJKTsKLQkJCXBhdGggPSBwcmVwcm9jZXNzb3I7Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyog
U291cmNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
N0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCi0JCQkJQTIwMTA4NDkx
NTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKLQkJCQlB
MjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywK
LQkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAotCQkJ
CUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCi0JCQkJRjc0
NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAotCQkJCTBBMTE4RTUwMDNFNUMw
RTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCi0JCQkJQjJGNUNBMTFFRUE5MkRGMjM4NEVG
RDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIg
LyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5o
ICovLAotCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywKLQkJCQlB
MjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCi0J
CQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywK
LQkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywK
LQkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCi0J
CQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKLQkJCQlB
MjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKLQkJCQlBMjAxMDg1
NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCi0JCQkJQTIwMTA4
NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKLQkJCQlBMjAxMDg1
OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKLQkJCQk1REM5QjY0
N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCi0JCQkJMTgyQkFENTBE
NEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKLQkJCQk0OTdDNUMyNEVFRjQ2
NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdB
NiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8q
IGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xz
bGFuZ190YWIuaCAqLywKLQkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1Npbmsu
Y3BwICovLAotCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAot
CQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywKLQkJCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovLAotCQkJCTYwQzM5OThD
OUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJCQlBMENFNDM2MzE4
NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAotCQkJCTJFN0M5QjZFNkRCNzUx
RTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAotCQkJCUEyMDEwODVBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQk4NTg0NUZG
RjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCTNG
N0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCTc5OURD
OTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlDNEZFOTg4RUY5QTI5Mzg2
N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCTE1M0JGMDZCRjEyQzZGNTA0
OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCTU3Q0YxRjgzRTg0MjkwMUM0
MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJODFDQzQyNDVBOEU1
QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJREVFQUZDNjE4
QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1
MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9z
c291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRBNzUgLyogT3V0
cHV0RVNTTC5jcHAgKi8sCi0JCQkJNkJCNjZBQjU4NzM4NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVT
U0wuaCAqLywKLQkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAg
Ki8sCi0JCQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLywKLQkJ
CQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJ
CUI1NUIzNTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCTlB
NUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQk1QTIxNTk5
QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUQyQzlDOEVCNEE3RUZG
NUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQk5NzZDODMxQTc1RUJFMDA5QTk4
NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovLAotCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcx
MSAvKiBQYXJzZUhlbHBlci5oICovLAotCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQ
b29sQWxsb2MuY3BwICovLAotCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxs
b2MuaCAqLywKLQkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCi0J
CQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKLQkJCQk0ODU3
RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAotCQkJCTlENDdC
MUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAotCQkJCUI0MzZFRkYw
NjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKLQkJCQlENDBGNzhDQjlCQTBD
ODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAotCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1
N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAotCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdB
RCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAotCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAv
KiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi8sCi0JCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxl
LmggKi8sCi0JCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAq
LywKLQkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJ
CQlBMjAxMDg1RDE1OUMzMjRGMDBFNTdCQkUgLyogdGltaW5nICovLAotCQkJCTBBM0EyNjBGNTM3
OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJRDUzREREMENERjE1
RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJNkZCNzBEQzc0QTIxRkJD
RDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKLQkJCQlEREQzQjdFM0I3QjM1QTBC
ODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKLQkJCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0
RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAotCQkJCUUzQTI5QjZFOUMyMUI2N0MyNUZG
MEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAotCQkJCUFBNTNCNjYzMkM3NkY5MDVERjA4RTU2
NCAvKiBUeXBlcy5oICovLAotCQkJCUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRT
aG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5p
c3RkLmggKi8sCi0JCQkJM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAot
CQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCi0JCQkJQjE0OEQ5NjdC
OEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAotCQkJCTkwMjU0
ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCi0JCQkJMjdD
MTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCi0JCQkJNUQ5OTM1
NEM0RDgxODdEMzg0QzgxMjA3IC8qIFZhcmlhYmxlSW5mby5oICovLAotCQkJCUY3MjdBRUM5MDY3
MTJFQzIzODA0MTQ2NCAvKiBWZXJzaW9uR0xTTC5jcHAgKi8sCi0JCQkJMTIwQUQwQTNCNzY0MkZC
NUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IFNvdXJjZTsK
LQkJCXBhdGggPSBjb21waWxlcjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RCA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMTk2REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLywKLQkJ
CQlFMEVEQzQxMzBFN0QzNzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8sCi0JCQkJQjJDMTg0QzM1
NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07Ci0JCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCi0JCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCi0JCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAotCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCi0JCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCi0JCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAotCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKLQkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAotCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCi0JCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
Ci0JCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAotCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAotCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKLQkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAotCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAot
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAotCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAotCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAotCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbmV3OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewot
CQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKLQkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCi0JCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAotCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCi0JCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCi0JCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAot
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGRlcGdyYXBoOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
LQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAotCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCi0JCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKLQkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gdGltaW5nOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlD
RjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovLAotCQkJCUY5OUU3
MzdEM0ZGRDMwQ0E1RTM1NDE1MCAvKiBjb21tb24uZ3lwaSAqLywKLQkJCSk7Ci0JCQluYW1lID0g
QnVpbGQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlFMEVEQzQxMzBFN0Qz
NzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9y
X2NvbW1vbi5hICovLAotCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xh
dG9yX2dsc2wuYSAqLywKLQkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNs
YXRvcl9obHNsLmEgKi8sCi0JCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJNTg5MkM3QTM2OTUzMzA0
MzdBRkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA4Qjg4MTVDQTJFRkU2MEZEMEMwMzYx
QkYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5z
bGF0b3JfZ2xzbCIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlCQUJDRTcyMTEwNkI1QzE1
MjdFRkVGMEQgLyogU291cmNlcyAqLywKLQkJCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyog
RnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVu
ZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gdHJhbnNsYXRvcl9nbHNsOwotCQkJcHJvZHVj
dE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gQTE2NDRCMDBF
OTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovOwotCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCTZG
NEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhF
M0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRp
dmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovLAotCQkJCUE1Qzk5NEU3NERC
MUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAo
Ci0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSB0cmFuc2xhdG9y
X2NvbW1vbjsKLQkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQlwcm9kdWN0
UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29t
bW9uLmEgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJh
cnkuc3RhdGljIjsKLQkJfTsKLQkJQTIwMTA3REMxNTlDMzEzQzAwRTU3QkJFIC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdCQkUgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXByb2Nlc3NvciIgKi87Ci0JCQlidWlsZFBo
YXNlcyA9ICgKLQkJCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLywKLQkJ
CQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQli
dWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1l
ID0gcHJlcHJvY2Vzc29yOwotCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNs
YXRvcl9jb21tb24gY29weS5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1
Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCUE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hs
c2wiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMDVGM0JDQTk1MTg3NzBCRTNGMUUwQTM4
IC8qIFNvdXJjZXMgKi8sCi0JCQkJRkUzNjc5QTA5NTVCMjVFQjdCRjExNkU2IC8qIEZyYW1ld29y
a3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMg
PSAoCi0JCQkpOwotCQkJbmFtZSA9IHRyYW5zbGF0b3JfaGxzbDsKLQkJCXByb2R1Y3ROYW1lID0g
dHJhbnNsYXRvcl9obHNsOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEE0NDdGNzVGMzNEQTRDNEMx
MjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlCdWlsZEluZGVwZW5kZW50
VGFyZ2V0c0luUGFyYWxsZWwgPSBZRVM7Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENFNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9u
ID0gIlhjb2RlIDMuMSI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJ
CSk7Ci0JCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7Ci0JCQlwcm9qZWN0
RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJ
MTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKLQkJCQk2RjRGRDM1Q0IzREZDODlE
NzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCi0JCQkJNTg5MkM3QTM2OTUzMzA0MzdB
RkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLywKLQkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovLAotCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAv
KiBwcmVwcm9jZXNzb3IgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTA1RjNC
Q0E5NTE4NzcwQkUzRjFFMEEzOCAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJNEI0QkRFN0FENjI2NkIzOUVENDNDMkQ0IC8qIENvZGVHZW5ITFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTVGN0I1MkE1NERDRTgxNTVFRDk0RUNGOCAvKiBPdXRwdXRITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUU5OUQ2RDgwREJGMDVFQ0U3MTA4QjI2RCAvKiBUcmFuc2xh
dG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyOTY0NjY1NjZEOEMwRjAyM0E1NTM3NjAg
LyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODcxMTU5QzMyNjIw
MEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEy
MDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
Ci0JCX07Ci0JCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAvKiBTb3VyY2VzICovID0gewotCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJQTIwMTA4M0IxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdu
b3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNDMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIw
MTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyog
VG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDYxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJQkFCQ0U3MjExMDZCNUMxNTI3RUZFRjBE
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQlENTZGN0QwMEU5
QjE2MkU0MTZEMzdERjAgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEVD
MDlCM0IyNTQ4MjlGOEYxRDk1MkQzIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQzRBQUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOUIxMTFCODNGQjYzNkZENUNERUMzMkEwIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUM3NUVCOTI5MkEwRERBNDU1OTJBOEFDRiAvKiBPdXRwdXRH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2MyAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzRjE4Mzg5QkNCODkzNzBBOTMw
NjY3RjQgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEFDMTg5N0U0
NjFBMEQ0NzU4RTNEQ0UzIC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsK
LQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlFQUEy
MkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMzAyMUUwQkYxQkM4NDQyRkYxRjJGMkI0IC8qIGdsc2xhbmdfbGV4LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTJFN0MwRDM4MDRCODMwOEE0OTNEOUI0QiAvKiBnbHNsYW5n
X3RhYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1
IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEEyMTY5NDkxMDNFMUUyMjhG
OUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTBERjAwMDA1
Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0
MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8q
IHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlG
RjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzdDNURGRjBCMkRG
RUMwOTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDU1NjNBREZF
QTE1MTE2RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUI4QkQyNjg1QTE2QjE4OENDREZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUY2QUJENThGOENBQjc2NDFEOEJGRTkzNSAvKiBTeW1ib2xUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxRUQxRDJDN0M3NEM2QjYyNUFGQjFD
Q0YgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMyQjFEQkNENkI4M0Yy
MTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlDQjdGMEVGMEQ2QTg5RkE4
QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2
MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQkzQTk2RTlDQUM4QTI1QUYx
NTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGMDk4RjQ2M0VEQUJDRjA3
NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ4NTUxN0YwODZGRENF
RjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUU4QzcyN0FBOEU5REM1
RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAotCQkJCUI0ODU4NDE3RTU0MzY1
QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NTE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0
UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2OTE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2QzE1OUMzMjRGMDBF
NTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0v
KiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhUYXJn
ZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KLQkJQTE1RTc4QkVDREZGMjBCQzNGRkYwNDBBIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5Owot
CQkJdGFyZ2V0ID0gNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9u
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA1NUQ1RjlCRjcyN0U0QTNCNjYzNzgwMkIgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQgLyogdHJhbnNsYXRvcl9nbHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA2MEQzNTQ2QUMyN0IwOTRENkNBMDRDRDYgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSBBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9obHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSAxRjcyNDI0OTYxMDNFREYyOUNDMjVEODcgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTMy
MkE4QzYyNDIzQjU5NUUxMUJBRDQyRCAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSBB
bGw7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQk0REE0MkE3OEQzQjg1NUM5Q0Q4
RjY1OEQgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlH
Q0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RS
QUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJCQlIRUFERVJfU0VBUkNIX1BB
VEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9O
QU1FID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07
Ci0JCTRGODUxRjVCQTVGQTQzRTlFMEI5Q0I4NiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9IEFsbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJODhBREM5Mjg1
NTE5QTY2ODgwOEI1MUVFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGli
OwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJ
U0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
PUQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQ
Uk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwot
CQl9OwotCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJN
RURJQVRFX0RJUiA9ICIkKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9O
KSI7Ci0JCQkJU0hBUkVEX0lOVEVSTUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291
cmNlcy8kKENPTkZJR1VSQVRJT04pIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0J
CUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BS
RUZJWCA9IGxpYjsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQki
XCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJ
CQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJ
CSk7Ci0JCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9uIGNvcHkiOwotCQkJfTsK
LQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJQTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJl
bGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0
dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NF
U1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJ
CQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJ
CQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFu
c2xhdG9yX2NvbW1vbiBjb3B5IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJ
QUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0J
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJ
CQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfZ2xzbDsKLQkJCX07Ci0JCQluYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLQkJQjA5NkZBRjAzMkRCMTlBQjYzN0QzOEYwIC8qIFJlbGVhc2Ug
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3Mg
PSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9E
RUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwi
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwK
LQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3Jf
aGxzbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJQzQ1NDZCMTRCMEVCNUVC
OEM1RDM5REMyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJNRURJQVRFX0RJUiA9ICIkKFBST0pF
Q1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9OKSI7Ci0JCQkJU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291cmNlcy8kKENPTkZJR1VSQVRJT04p
IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJRjAyOUUwRDM2OUZBRkVBNDZC
REFGQ0VFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJCUdD
Q19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJB
Q0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFU
SFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQUk9EVUNUX05B
TUUgPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQlG
RjAxQ0RGNDU5NEUwRkY5RTU4MUIzMTkgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwi
QU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJ
SEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkp
OwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQkJfTsKLQkJCW5hbWUg
PSBEZWJ1ZzsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkwRTU5RjhGRTRBODA5
OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJi
dWlsZF9hbmdsZSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVi
dWcgKi8sCi0JCQkJQzQ1NDZCMTRCMEVCNUVCOEM1RDM5REMyIC8qIFJlbGVhc2UgKi8sCi0JCQkp
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0JCTM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRv
cl9jb21tb24iICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCi0JCQkJRkYwMUNERjQ1OTRFMEZGOUU1ODFCMzE5IC8qIERlYnVn
ICovLAotCQkJCTREQTQyQTc4RDNCODU1QzlDRDhGNjU4RCAvKiBSZWxlYXNlICovLAotCQkJKTsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9OwotCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
cyA9ICgKLQkJCQkzMjJBOEM2MjQyM0I1OTVFMTFCQUQ0MkQgLyogRGVidWcgKi8sCi0JCQkJNEY4
NTFGNUJBNUZBNDNFOUUwQjlDQjg2IC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
RGVidWc7Ci0JCX07Ci0JCThCODgxNUNBMkVGRTYwRkQwQzAzNjFCRiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9nbHNsIiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTg4QURDOTI4NTUxOUE2Njg4MDhCNTFFRSAvKiBEZWJ1ZyAqLywKLQkJCQlBRjdDMkNE
MTBDNkZFQTA3NkIxNDFFNkUgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1
ZzsKLQkJfTsKLQkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0gewotCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJ
QTIwMTA3RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAotCQkJCUEyMDEwN0ZFMTU5QzMx
M0MwMEU1N0JCRSAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9
OwotCQlDNzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQlGMDI5
RTBEMzY5RkFGRUE0NkJEQUZDRUUgLyogRGVidWcgKi8sCi0JCQkJQjA5NkZBRjAzMkRCMTlBQjYz
N0QzOEYwIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0v
KiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0g
REExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAppbmRleCA3ZDkz
NDlhLi5mZjk3MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2FuZ2xldXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2FuZ2xldXRpbHMuaApAQCAtMTksNCArMTksOCBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmlu
dGYKICNlbmRpZgogCisjZGVmaW5lIFZFTkRPUl9JRF9BTUQgMHgxMDAyCisjZGVmaW5lIFZFTkRP
Ul9JRF9JTlRFTCAweDgwODYKKyNkZWZpbmUgVkVORE9SX0lEX05WSURJQSAweDEwREUKKwogI2Vu
ZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZGVidWcuY3BwCmluZGV4IGIyMjM4ZjkuLmM0NWIyYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCkBAIC04NCw2ICs4NCwxMiBAQCBi
b29sIHBlcmZBY3RpdmUoKQogU2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRI
ZWxwZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7CiAjaWYgIWRlZmluZWQoQU5HTEVfRElT
QUJMRV9QRVJGKQorI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyAgICBpZiAoIXBl
cmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICB2
YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CiAgICAgb3V0cHV0
KHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2lu
RXZlbnQpLCBmb3JtYXQsIHZhcmFyZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKaW5kZXggOTgyOGVjZi4uNWY4ZjYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaApAQCAtNDIsMjggKzQyLDMwIEBAIG5hbWVzcGFjZSBn
bAogI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNB
QkxFX1BFUkYpCiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQot
I2RlZmluZSBUUkFDRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSh0cnVlLCAidHJhY2U6ICVzKCVk
KTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UodHJ1ZSwgInRyYWNlOiAlcyglZCk6
ICIgbWVzc2FnZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQog
I2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFy
Z3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4gbmVlZCBv
ZiBmaXhpbmcuCiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfUEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkK
ICNlbHNlCi0jZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZml4
bWU6ICVzKCVkKTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJmaXht
ZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZB
X0FSR1NfXykKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3Iu
CiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FC
TEVfUEVSRikKICNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQotI2Rl
ZmluZSBFUlIobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJlcnI6ICVzKCVkKTogIm1l
c3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg
RVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6ICIgbWVzc2Fn
ZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQogI2VuZGlmCiAK
IC8vIEEgbWFjcm8gdG8gbG9nIGEgcGVyZm9ybWFuY2UgZXZlbnQgYXJvdW5kIGEgc2NvcGUuCiAj
aWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikKICNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4pIGdsOjpTY29w
ZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyICMjIF9fTElORV9fKF9fRlVO
Q1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKKyNlbHNlCisjZGVmaW5lIEVWRU5U
KG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29wZWRQZXJmRXZlbnRI
ZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKICNlbmRpZgogCiAvLyBBIG1hY3Jv
IGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVi
dWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3Zl
cnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCmlu
ZGV4IGJkZDE2MjQuLmRiZThjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdmVyc2lvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vdmVyc2lvbi5oCkBAIC0xLDEwICsxLDEyIEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04g
MQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVm
aW5lIEJVSUxEX1JFVklTSU9OIDExNjYKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTY0MQogCiAj
ZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5H
SUZZKHgpCiAKICNkZWZpbmUgUkVWSVNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9S
RVZJU0lPTikKICNkZWZpbmUgVkVSU0lPTl9TVFJJTkcgTUFDUk9fU1RSSU5HSUZZKE1BSk9SX1ZF
UlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoTUlOT1JfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklO
R0lGWShCVUlMRF9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKEJVSUxEX1JFVklTSU9OKQor
CisjZGVmaW5lIFZFUlNJT05fRFdPUkQgKChNQUpPUl9WRVJTSU9OIDw8IDI0KSB8IChNSU5PUl9W
RVJTSU9OIDw8IDE2KSB8IEJVSUxEX1JFVklTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKaW5kZXggZGI1ZjcyOS4uZGNlOGM2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Zh
bGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCkBAIC0xMTQs
NiArMTE1LDkgQEAgVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIAogYm9vbCBUQ29tcGlsZXI6Oklu
aXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCiB7CisgICAgbWF4VW5pZm9y
bVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CisgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CisgICAgICAgIHJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzOwogICAgIFRTY29wZWRQb29sQWxsb2NhdG9yIHNjb3BlZEFs
bG9jKCZhbGxvY2F0b3IsIGZhbHNlKTsKIAogICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5bWJv
bCB0YWJsZS4KQEAgLTEyMSw2ICsxMjUsOCBAQCBib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEluaXRFeHRlbnNpb25CZWhhdmlvcihyZXNvdXJjZXMsIGV4dGVuc2lvbkJlaGF2aW9yKTsKIAor
ICAgIGhhc2hGdW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTk0LDExICsyMDAsMTkgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUo
Y29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICAvLyBDYWxsIG1hcExv
bmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgog
ICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBt
YXBwZWQgc3ltYm9sIG5hbWVzIGFuZAogICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFw
cGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpKQorICAgICAgICAv
LyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlz
IGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCiAg
ICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKIAotICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKSkKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQVRUUklCVVRFU19VTklGT1JN
UykpIHsKICAgICAgICAgICAgIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMocm9vdCk7CisgICAgICAg
ICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
KSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25z
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsICJ0b28gbWFueSB1bmlmb3JtcyIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkK
ICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwpAQCAtMjI4LDYgKzI0
Miw3IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVp
bHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogCiB2b2lkIFRDb21waWxlcjo6Y2xlYXJSZXN1bHRz
KCkKIHsKKyAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51cCgpOwogICAgIGluZm9TaW5rLmlu
Zm8uZXJhc2UoKTsKICAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKICAgICBpbmZvU2luay5kZWJ1
Zy5lcmFzZSgpOwpAQCAtMjM2LDcgKzI1MSw4IEBAIHZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3Vs
dHMoKQogICAgIHVuaWZvcm1zLmNsZWFyKCk7CiAKICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5DbGVhbnVwKCk7Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKworICAgIG5h
bWVNYXAuY2xlYXIoKTsKIH0KIAogYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50
ZXJtTm9kZSogcm9vdCkKQEAgLTMxMiwxMCArMzI4LDE2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZv
cmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQogCiB2
b2lkIFRDb21waWxlcjo6Y29sbGVjdEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkK
IHsKLSAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMp
OworICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcywg
aGFzaEZ1bmN0aW9uKTsKICAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7CiB9CiAKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCit7CisgICAgVmFyaWFibGVQ
YWNrZXIgcGFja2VyOworICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNr
aW5nTGltaXRzKG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Cit9CisKIHZvaWQgVENvbXBp
bGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAKaW5kZXggNWY5M2EwMy4uMDZmMzcwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
CkBAIC02LDEwICs2LDE0IEBACiAKICNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgog
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAot
VERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOiBtSW5mb1Np
bmsoaW5mb1NpbmspCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6CisgICAgbUluZm9TaW5rKGluZm9TaW5rKSwKKyAgICBtTnVtRXJyb3JzKDApLAorICAg
IG1OdW1XYXJuaW5ncygwKQogewogfQogCkBAIC0yMyw5ICsyNywyMyBAQCB2b2lkIFREaWFnbm9z
dGljczo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKIHsKLSAgICBUSW5mb1NpbmtCYXNlJiBz
aW5rID0gbUluZm9TaW5rLmluZm87Ci0gICAgVFByZWZpeFR5cGUgcHJlZml4ID0gc2V2ZXJpdHkg
PT0gRVJST1IgPyBFUHJlZml4RXJyb3IgOiBFUHJlZml4V2FybmluZzsKKyAgICBUUHJlZml4VHlw
ZSBwcmVmaXggPSBFUHJlZml4Tm9uZTsKKyAgICBzd2l0Y2ggKHNldmVyaXR5KQorICAgIHsKKyAg
ICAgIGNhc2UgRVJST1I6CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgcHJlZml4ID0g
RVByZWZpeEVycm9yOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgV0FSTklORzoKKyAgICAg
ICAgKyttTnVtV2FybmluZ3M7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIAorICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1Npbmsu
aW5mbzsKICAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tl
bicgOiBleHRyYWluZm8gKi8KICAgICBzaW5rLnByZWZpeChwcmVmaXgpOwogICAgIHNpbmsubG9j
YXRpb24oRW5jb2RlU291cmNlTG9jKGxvYy5maWxlLCBsb2MubGluZSkpOwpAQCAtNDEsNCArNTks
NSBAQCB2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCiB7CisgICAgd3JpdGVJbmZvKHNldmVyaXR5
KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAppbmRleCA0M2ExMzA2Li5j
YjcxYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJ
Q1NfSF8KICNkZWZpbmUgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KIAotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgiCiAKIGNsYXNzIFRJbmZvU2luazsKIApAQCAt
MTksNiArMTksOSBAQCBjbGFzcyBURGlhZ25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNz
CiAKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9CiAKKyAg
ICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorICAgIGludCBu
dW1XYXJuaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1OdW1XYXJuaW5nczsgfQorCiAgICAgdm9pZCB3
cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHJlYXNvbiwKQEAgLTM0LDYgKzM3LDggQEAgY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGlj
IHBwOjpEaWFnbm9zdGljcwogCiAgIHByaXZhdGU6CiAgICAgVEluZm9TaW5rJiBtSW5mb1Npbms7
CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgaW50IG1OdW1XYXJuaW5nczsKIH07CiAKICNlbmRp
ZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmluZGV4IDIxZDNkZmMu
Ljk1Y2E1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgImNv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgi
CiAKIGNsYXNzIFREaWFnbm9zdGljczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQyMTQxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0hB
U0hfTkFNRVNfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhB
U0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3Ry
aW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNI
X05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwCmluZGV4IDkyYzQ1MDUuLjkwMzJiM2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCkBA
IC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCisjaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5hbWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
bG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKQEAgLTE0NDUsMyArMTQ0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNp
Y1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJtQwogICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSks
IG5vZGUtPmdldExpbmUoKSk7CiB9CiAKKy8vIHN0YXRpYworVFN0cmluZyBUSW50ZXJtVHJhdmVy
c2VyOjpoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uKQoreworICAgIGlmIChoYXNoRnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIGtocm9ub3NfdWludDY0X3QgbnVtYmVyID0gKCpoYXNo
RnVuY3Rpb24pKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgVFN0cmluZ1N0cmVh
bSBzdHJlYW07CisgICAgc3RyZWFtIDw8IEhBU0hFRF9OQU1FX1BSRUZJWCA8PCBzdGQ6OmhleCA8
PCBudW1iZXI7CisgICAgVFN0cmluZyBoYXNoZWROYW1lID0gc3RyZWFtLnN0cigpOworICAgIHJl
dHVybiBoYXNoZWROYW1lOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmluZGV4IDY0ZWU5MmQuLjAzMzE3NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAK
QEAgLTYsOCArNiwxMSBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0RVNTTC5oIgogCi1U
T3V0cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rKQorVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
ICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3lt
Ym9sVGFibGUpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0RVNTTC5oCmluZGV4IDRmYTczYzguLmRkOGM1YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaApAQCAtMTIsNyAr
MTIsMTAgQEAKIGNsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQogewog
cHVibGljOgotICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworICAgIFRP
dXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcAppbmRleCBkZDMxYjRiLi41ODczMDQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCkBAIC02LDgg
KzYsMTEgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKIAotVE91dHB1dEdM
U0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspCi0gICAgOiBUT3V0cHV0R0xT
TEJhc2Uob2JqU2luaykKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuaAppbmRleCAwZmUyMzU2Li45MDMwMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKQEAgLTEyLDcgKzEyLDEwIEBA
CiBjbGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKIHsKIHB1YmxpYzoK
LSAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xT
TChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuY3BwCmluZGV4IDIxMDBlYWEuLjNjM2M5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApAQCAtOSwzNSAr
OSw2IEBACiAKIG5hbWVzcGFjZQogewotVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYg
dHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsKLSAgICBpZiAodHlwZS5pc01hdHJpeCgp
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQiOwotICAgICAgICBvdXQgPDwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJv
b2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNp
emUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmco
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOwotfQotCiBUU3RyaW5n
IGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCiB7CiAgICAgQVNTRVJUKHR5cGUuaXNB
cnJheSgpKTsKQEAgLTY2LDEwICszNywxNiBAQCBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlKiBub2RlKSB7CiB9CiB9ICAvLyBuYW1lc3BhY2UKIAotVE91dHB1dEdMU0xCYXNlOjpU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaykKK1RPdXRwdXRHTFNMQmFzZTo6
VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKICAgICAgIG1PYmpTaW5rKG9ialNpbmsp
LAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKKyAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMoZmFsc2UpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAg
bU5hbWVNYXAobmFtZU1hcCksCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiB7CiB9
CiAKQEAgLTEwMSw3ICs3OCw3IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSAmJgogICAgICAgICAobURlY2xhcmVkU3RydWN0cy5maW5kKHR5cGUuZ2V0VHlw
ZU5hbWUoKSkgPT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCiAgICAgewotICAgICAgICBvdXQg
PDwgInN0cnVjdCAiIDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAie1xuIjsKKyAgICAgICAgb3V0
IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICJ7XG4iOwog
ICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAgLTExMCw3ICs4Nyw3IEBAIHZvaWQg
VE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAg
ICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CiAgICAgICAgICAgICBpZiAod3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZFR5cGUtPmdldFByZWNpc2lvbigpKSkKICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVs
ZFR5cGUpIDw8ICIgIiA8PCBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAg
b3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZFR5cGUpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZFR5
cGUtPmdldEZpZWxkTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXko
KSkKICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKICAg
ICAgICAgICAgIG91dCA8PCAiO1xuIjsKQEAgLTE0MCw3ICsxMTcsNyBAQCB2b2lkIFRPdXRwdXRH
TFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBh
cmdzKQogCiAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOwog
ICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgbmFt
ZTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobmFtZSk7CiAgICAgICAgIGlm
ICh0eXBlLmlzQXJyYXkoKSkKICAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKHR5cGUp
OwogCkBAIC0xNTcsNyArMTM0LDcgQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0xC
YXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCiAKICAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAgICAgewotICAgICAgICBvdXQgPDwgdHlw
ZS5nZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUuZ2V0
VHlwZU5hbWUoKSkgPDwgIigiOwogICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAg
LTE5Niw3ICsxNzMsNyBAQCB2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCogbm9kZSkKICAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VTeW1ib2xX
aXRoVmFsdWUobm9kZSkpCiAgICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29wSW5kZXhW
YWx1ZShub2RlKTsKICAgICBlbHNlCi0gICAgICAgIG91dCA8PCBub2RlLT5nZXRTeW1ib2woKTsK
KyAgICAgICAgb3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCiAg
ICAgaWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkK
ICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKQEAgLTI3Miw3
ICsyNDksNyBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIuIjsKICAgICAgICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogQVNTRVJUCi0gICAgICAg
ICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgaGFzaE5hbWUobm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ5Niw3ICs0NzMsNyBAQCBib29sIFRPdXRwdXRHTFNMQmFz
ZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgIEFTU0VSVCh2
aXNpdCA9PSBQcmVWaXNpdCk7CiAgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBub2RlLT5nZXROYW1lKCk7Cisg
ICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAKICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CiAgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVy
cyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKQEAgLTUwOSw3ICs0ODYsNyBAQCBib29sIFRPdXRwdXRH
TFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCiAgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgogICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5v
ZGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhh
c2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAogICAgICAgICAgICAgaW5jcmVtZW50
RGVwdGgoKTsKICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlu
cyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCkBAIC01MzksOCArNTE2LDcgQEAgYm9vbCBUT3V0
cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQogICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KICAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5n
IGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAg
ICAgICAgICAgewpAQCAtNjAxLDcgKzU3Nyw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpOwotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOwor
ICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICIo
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CiAgICAgICAgICAgICB7CkBAIC03NDcsMyArNzIzLDU5IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgewogICAgICAgICBvdXQgPDwgIntc
bn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgogICAgIH0KIH0KKworVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
b3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2
ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNM
QmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobUhhc2hGdW5j
dGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAg
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5kKG5hbWUuY19zdHIoKSk7
CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhh
c2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFtZS5jX3N0cigpXSA9IGhh
c2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgICAg
IHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHJl
dHVybiBoYXNoTmFtZShuYW1lKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmgKaW5kZXggZWZkMGI1Zi4uMDFlOWQ0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0xCYXNlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEdMU0xCYXNlLmgKQEAgLTE2LDcgKzE2LDEwIEBACiBjbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgogewogcHVibGljOgotICAgIFRPdXRwdXRHTFNMQmFzZShU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFz
ZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
VEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CkBAIC0yNSw2ICsy
OCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbikgPSAwOwogICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKTsKICAgICBjb25zdCBDb25zdGFudFVu
aW9uKiB3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50
VW5pb24qIHBDb25zdFVuaW9uKTsKKyAgICBUU3RyaW5nIGdldFR5cGVOYW1lKGNvbnN0IFRUeXBl
JiB0eXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKTsKQEAgLTM3LDYgKzQxLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQg
dmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpOwogCisKKyAgICAvLyBSZXR1cm4gdGhl
IG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7CisgICAgLy8g
b3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUuCisgICAgVFN0cmluZyBoYXNoTmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRo
b3V0IGhhc2hpbmcgYnVpbHQtaW4gdmFyaWFibGVzLgorICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxl
TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1
dCB3aXRob3V0IGhhc2hpbmcgYnVpbHQtaW4gZnVuY3Rpb25zLgorICAgIFRTdHJpbmcgaGFzaEZ1
bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworCiBwcml2YXRlOgogICAg
IFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOwogICAgIGJvb2wgbURlY2xhcmluZ1ZhcmlhYmxlczsK
QEAgLTQ4LDYgKzYxLDEyIEBAIHByaXZhdGU6CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJl
ZFN0cnVjdHM7CiAKICAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworCisgICAgLy8gbmFt
ZSBoYXNoaW5nLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKKyAgICBOYW1l
TWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwogfTsKIAog
I2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCmluZGV4
IGQ3ZTY5ZDMuLmE0MzA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTg3LDYgKzg3LDggQEAgT3V0cHV0SExTTDo6
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1
ZSwgdHJ1ZSwgdHIKICAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOwogICAg
IG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKICAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSBmYWxzZTsKKworICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwogfQogCiBPdXRw
dXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC00MjAsMjYgKzQyMiwxMiBAQCB2b2lkIE91dHB1dEhM
U0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICBvdXQgPDwgIHVuaWZv
cm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICAvLyBUaGUgdGV4dHVyZSBmZXRj
aCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBhbm90aGVy
LiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9tIGxlZnQi
LCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAgICAgIC8v
IGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zIGV4
cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAgICAgICAg
Ly8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25z
IGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBz
aW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+IDEtWSwg
d2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUg
dGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUg
cHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwotICAgICAg
ICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1osIHdoaWNo
IGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9y
IGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBbLTEsIDFd
IC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3IgdGhlCi0g
ICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndyb25nIHNp
ZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFuZ2luZyB0
aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJvdWdob3V0
IHRoZSBjb2RlLgogICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMs
IGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngs
IHQueSwgMCwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtNDQ4LDcgKzQzNiw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJETG9kKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgbG9kKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKICAg
ICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAg
IH0KQEAgLTQ1NywxMiArNDQ1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVy
MkQgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCAxIC0gdC55
IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAg
ICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ3MSwxMiArNDU5LDEyIEBAIHZvaWQg
T3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIGxvZCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1c
biIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgbG9kKVxuIgog
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgbG9kKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgog
ICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ4NSw3ICs0NzMsNyBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgogICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VC
RWxvZChzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC00OTQsNyArNDgyLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQo
dC54LCAtdC55LCB0LnosIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MTM1Miw3ICsxMzQwLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgog
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUt
PmdldE5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+
Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgpKSA8PCAobU91dHB1
dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwogCiAgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAKQEAgLTEzNzQsNiArMTM2
MiwxNCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQogCiAgICAgICAgICAgICBvdXQgPDwgIik7XG4iOwogCisgICAg
ICAgICAgICAvLyBBbHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAorICAg
ICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rp
b24gPSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
MTg2Miw3ICsxODU4LDIxIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkK
ICAgICB7CiAgICAgICBjYXNlIEVPcEtpbGw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlz
Y2FyZDtcbiIsICIiLCAiIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQnJlYWs6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJicmVhaztcbiIsICIiLCAiIik7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BCcmVhazoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CisgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxv
b3BJbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0cnVl
OyBicmVhazt9XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0cHV0
VHJpcGxldCh2aXNpdCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7CiAgICAgICBjYXNl
IEVPcFJldHVybjoKICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQpAQCAtMjA1MiwxMyAr
MjA2MiwzNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNl
c3NpdmUgbG9vcAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpy
ZXN0b3JlSW5kZXggPSBtRXhjZXNzaXZlTG9vcEluZGV4OworICAgICAgICAgICAgbUV4Y2Vzc2l2
ZUxvb3BJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgIntpbnQgIjsKKyAgICAg
ICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgor
ICAgICAgICAgICAgICAgICAgICJib29sIEJyZWFrIjsKKyAgICAgICAgICAgIGluZGV4LT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiID0gZmFsc2U7XG4iOworCisgICAgICAg
ICAgICBib29sIGZpcnN0TG9vcEZyYWdtZW50ID0gdHJ1ZTsKKwogICAgICAgICAgICAgd2hpbGUg
KGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBjbGFt
cGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFU
SU9OUywgaXRlcmF0aW9ucyk7CiAKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdt
ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJpZigh
QnJlYWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8g
TGFzdCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVh
ayBmbGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5k
ZXggKz0gaW5jcmVtZW50KQogCi0gICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoaW50ICI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKICAgICAgICAgICAgICAgICBpbmRleC0+dHJh
dmVyc2UodGhpcyk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwogICAgICAgICAgICAg
ICAgIG91dCA8PCBpbml0aWFsOwpAQCAtMjA4NSw5ICsyMTE5LDIwIEBAIGJvb2wgT3V0cHV0SExT
TDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAg
b3V0IDw8ICI7fVxuIjsKIAorICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBm
YWxzZTsKKwogICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAq
IGluY3JlbWVudDsKICAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJB
VElPTlM7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAi
fSI7CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7CiAK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAppbmRleCBlYTI4YTNjLi5kYzg0
M2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKQEAgLTE0NCw2ICsxNDQsOCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwogICAg
IGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKICAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3Vz
TG9vcDsKKworICAgIFRJbnRlcm1TeW1ib2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7CiB9OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAppbmRleCBiMzExNTI2Li43ZTVmY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEwLDcgKzEwLDcg
QEAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAogLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KIC8vCkBAIC0xODQsNyArMTg0LDYgQEAgdm9pZCBUUGFyc2VDb250ZXh0OjplcnJv
cihUU291cmNlTG9jIGxvYywKICAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0
aWNzOjpFUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRv
a2VuLCBleHRyYUluZm8pOwogCi0gICAgKytudW1FcnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29u
dGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKQEAgLTg0NywxNCArODQ2LDI2IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBl
KiB0eXBlLCBpbnQgc2l6ZSwKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCitib29sIFRQYXJz
ZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewotICAgIC8vCi0gICAgLy8g
TWFrZSB0aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCi0gICAgLy8KLSAgICBpZiAodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KICAgICAg
ICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNv
bnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzU3RydWN0dXJlQ29udGFp
bmluZ0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAic3RydWN0
dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNl
IHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTUxMCw3ICsxNTIxLDcgQEAgaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKIAogICAgIGds
c2xhbmdfZmluYWxpemUoY29udGV4dCk7CiAKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChj
b250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKKyAgICByZXR1cm4gKGVycm9yID09IDAp
ICYmIChjb250ZXh0LT5udW1FcnJvcnMoKSA9PSAwKSA/IDAgOiAxOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKaW5kZXgg
OGRlZThmZC4uNjY4ZTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIv
RGlhZ25vc3RpY3MuaCIKICNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKQEAgLTMzLDcgKzMzLDYgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCiAgICAgICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAogICAgICAgICAgICAgdHJl
ZVJvb3QoMCksCi0gICAgICAgICAgICBudW1FcnJvcnMoMCksCiAgICAgICAgICAgICBsZXhBZnRl
clR5cGUoZmFsc2UpLAogICAgICAgICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKICAgICAgICAg
ICAgIHN0cnVjdE5lc3RpbmdMZXZlbCgwKSwKQEAgLTUyLDcgKzUxLDYgQEAgc3RydWN0IFRQYXJz
ZUNvbnRleHQgewogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25zdCBjaGFyKiBzb3Vy
Y2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KICAgICBUSW50ZXJt
Tm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVk
Ci0gICAgaW50IG51bUVycm9yczsKICAgICBib29sIGxleEFmdGVyVHlwZTsgICAgICAgICAgIC8v
IHRydWUgaWYgd2UndmUgcmVjb2duaXplZCBhIHR5cGUsIHNvIGNhbiBvbmx5IGJlIGxvb2tpbmcg
Zm9yIGFuIGlkZW50aWZpZXIKICAgICBpbnQgbG9vcE5lc3RpbmdMZXZlbDsgICAgICAgIC8vIDAg
aWYgb3V0c2lkZSBhbGwgbG9vcHMKICAgICBpbnQgc3RydWN0TmVzdGluZ0xldmVsOyAgICAgIC8v
IGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1Y3QgZGVjbGFyYXRpb24KQEAgLTY3LDYg
KzY1LDcgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJl
cHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7CiAKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KICAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwpAQCAtOTgsNyArOTcs
NyBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwog
ICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1Ymxp
Y1R5cGUmIHBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGludCBs
aW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wg
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOwog
ICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBUU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCmluZGV4IDljZDZlNWUuLjM5MDhi
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5h
bWVGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCkBAIC0yMCw3ICsyMCw3IEBAIHB1YmxpYzoKICAgICAsIG1PbGRGdW5j
dGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQogICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5j
dGlvbk5hbWUpIHt9CiAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQogICAgIHsKICAgICAgICAgVE9wZXJh
dG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKICAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8
fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rp
b25OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAppbmRleCAzZWFmMTlmLi5hMmM1ZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUg
ImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZp
b3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9IYXNoTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCkBAIC02OSw2ICs3MCwxMCBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1cm4g
dW5pZm9ybXM7IH0KICAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0OwogCisg
ICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBoYXNo
RnVuY3Rpb247IH0KKyAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1cm4gbmFtZU1hcDsg
fQorICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVybiBzeW1ib2xUYWJs
ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgU2hTaGFkZXJUeXBlIGdldFNoYWRlclR5cGUoKSBjb25z
dCB7IHJldHVybiBzaGFkZXJUeXBlOyB9CiAgICAgU2hTaGFkZXJTcGVjIGdldFNoYWRlclNwZWMo
KSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9CkBAIC04OSw2ICs5NCw5IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIg
YXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYworICAgIC8v
IEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkg
dW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCiAgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCkBAIC0xMDYs
NiArMTE0LDggQEAgcHJpdmF0ZToKICAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsKICAgICBT
aFNoYWRlclNwZWMgc2hhZGVyU3BlYzsKIAorICAgIGludCBtYXhVbmlmb3JtVmVjdG9yczsKKwog
ICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVj
LCBhbmQgcmVzb3VyY2VzLgogICAgIC8vIEl0IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8t
Y29tcGlsZS4KICAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGU7CkBAIC0xMjIsNiArMTMyLDEw
IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2lu
Z2xldG9uLgogICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsKKworICAgIC8vIG5hbWUgaGFz
aGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbjsKKyAgICBOYW1lTWFwIG5h
bWVNYXA7CiB9OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4IDU2ZjVjN2YuLmFiNTY1MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAg
LTEyNSw2ICsxMjUsOSBAQCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVz
b3VyY2VzKiByZXNvdXJjZXMpCiAgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMgPSAwOwogICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7CiAgICAg
cmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworCisgICAgLy8gRGlzYWJsZSBu
YW1lIGhhc2hpbmcgYnkgZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkhhc2hGdW5jdGlvbiA9IE5V
TEw7CiB9CiAKIC8vCkBAIC0yMjQsNiArMjI3LDIyIEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNo
SGFuZGxlIGhhbmRsZSwgU2hTaGFkZXJJbmZvIHBuYW1lLCBpbnQqIHBhcmFtcykKICAgICAgICAg
Ly8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgogICAgICAgICAqcGFyYW1z
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hf
TkFNRV9NQVhfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoK
KyAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDY0
IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKKyAgICAgICAg
ICAgIC8vIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1l
UHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAqcGFyYW1zID0gMTYg
KyBzaXplb2YoSGFzaGVkTmFtZVByZWZpeCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxl
ci0+Z2V0TmFtZU1hcCgpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CiB9CkBAIC0yODMsMyArMzAyLDQ2IEBAIHZvaWQgU2hHZXRBY3Rp
dmVVbmlmb3JtKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKICAgICBnZXRWYXJpYWJsZUluZm8oU0hf
QUNUSVZFX1VOSUZPUk1TLAogICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGluZGV4LCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUpOwogfQorCit2b2lkIFNoR2V0TmFtZUhh
c2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKK3sKKyAgICBpZiAo
IWhhbmRsZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21w
aWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIGNvbnN0IE5hbWVNYXAm
IG5hbWVNYXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOworICAgIGlmIChpbmRleCA+PSBzdGF0
aWNfY2FzdDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBpbmRleDsgKytpKQorICAgICAgICArK2l0OworCisgICAgc2l6ZV90IGxlbiA9
IGl0LT5maXJzdC5sZW5ndGgoKSArIDE7CisgICAgaW50IG1heF9sZW4gPSAwOworICAgIFNoR2V0
SW5mbyhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KGxlbikgPiBtYXhfbGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgIGxlbiA9IG1heF9sZW47CisgICAgfQorICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0
LmNfc3RyKCksIGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRo
ZSBzb3VyY2UgaXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgbmFtZVtsZW5dID0gJ1wwJzsK
KworICAgIGxlbiA9IGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAxOworICAgIG1heF9sZW4gPSAwOwor
ICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVu
KTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsZW4pID4gbWF4X2xlbikgeworICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAgICBzdHJuY3B5
KGhhc2hlZE5hbWUsIGl0LT5zZWNvbmQuY19zdHIoKSwgbGVuKTsKKyAgICAvLyBUbyBiZSBvbiB0
aGUgc2FmZSBzaWRlIGluIGNhc2UgdGhlIHNvdXJjZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZC4K
KyAgICBoYXNoZWROYW1lW2xlbl0gPSAnXDAnOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKaW5kZXggNjhmMDI5ZC4uODQ3
YzFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5
bWJvbFRhYmxlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0yMCw5ICsyMCwxNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKIAotLy8KLS8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNlIHRv
IGxpdmUuCi0vLworVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6CisgICAgICAg
ICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihwLnF1
YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJheSks
IGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAgICAgICBtYXhBcnJheVNpemUoMCksIGFy
cmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIGRl
ZXBlc3RTdHJ1Y3ROZXN0aW5nKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1l
KDApCit7CisgICAgaWYgKHAudXNlckRlZikgeworICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJE
ZWYtPmdldFN0cnVjdCgpOworICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNl
ckRlZi0+Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgY29tcHV0ZURlZXBlc3RTdHJ1
Y3ROZXN0aW5nKCk7CisgICAgfQorfQogCiAvLwogLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFu
Z2xlZCBuYW1lcy4KQEAgLTkyLDYgKzk5LDI1IEBAIHZvaWQgVFR5cGU6OmNvbXB1dGVEZWVwZXN0
U3RydWN0TmVzdGluZygpCiAgICAgZGVlcGVzdFN0cnVjdE5lc3RpbmcgPSAxICsgbWF4TmVzdGlu
ZzsKIH0KIAorYm9vbCBUVHlwZTo6aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyID0gc3RydWN0
dXJlLT5iZWdpbigpOyBtZW1iZXIgIT0gc3RydWN0dXJlLT5lbmQoKTsgbWVtYmVyKyspCisgICAg
eworICAgICAgICBpZiAobWVtYmVyLT50eXBlLT5pc0FycmF5KCkgfHwKKyAgICAgICAgICAgIG1l
bWJlci0+dHlwZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gRHVtcCBmdW5jdGlvbnMuCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAppbmRleCAzMzYxNmRjLi5h
ODk0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaApAQCAtMjk4LDYgKzI5OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzeW1ib2w7CiAgICAgfQogCisgICAgVFN5bWJvbCAqZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsKKyAg
ICB9CisKICAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xvYmFsTGV2ZWwoKSB7CiAgICAgICAg
IGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CiAgICAgICAgIHJldHVybiB0YWJsZVsxXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwCmluZGV4IGQ5MGM3MGMuLmE0ZjA0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcApAQCAtMjYs
NyArMjYsNyBAQCB2b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJv
b3QpIHsKICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9u
RGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAg
IFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luayk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNT
TChzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgp
KTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0RVNTTCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCmlu
ZGV4IGJhMzgxMTIuLjVmM2RiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcApAQCAtMzksNiArMzksNiBAQCB2
b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBn
ZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihz
aW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNM
IG91dHB1dEdMU0woc2luayk7CisgICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKICAgICByb290
LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UeXBlcy5oCmluZGV4IGUxYTE4ZmQuLmQ0NTc2NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSwxMCArMTEsMTIgQEAKICNp
bmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgog
CitjbGFzcyBUVHlwZTsKK3N0cnVjdCBUUHVibGljVHlwZTsKKwogLy8KIC8vIE5lZWQgdG8gaGF2
ZSBhc3NvY2lhdGlvbiBvZiBsaW5lIG51bWJlcnMgdG8gdHlwZXMgaW4gYSBsaXN0IGZvciBidWls
ZGluZyBzdHJ1Y3RzLgogLy8KLWNsYXNzIFRUeXBlOwogc3RydWN0IFRUeXBlTGluZSB7CiAgICAg
VFR5cGUqIHR5cGU7CiAgICAgaW50IGxpbmU7CkBAIC0yNyw1OSArMjksMTQgQEAgaW5saW5lIFRU
eXBlTGlzdCogTmV3UG9vbFRUeXBlTGlzdCgpCiAgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRUeXBl
TGlzdDsKIH0KIAotLy8KLS8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gd2l0
aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKLS8vIHR5cGVzIHRoYXQgaXQgdGhpbmtz
IGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hvdWxkCi0vLyBqdXN0IGJlIHVz
ZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBhbnl0aGluZyBlbHNlLiAgUG9p
bnRlcnMKLS8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWluZyB0byBhdm9pZCBsb3RzIG9m
IG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgotLy8KLS8vIE5vdCBhcyBiYWQgYXMgaXQgbG9v
a3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpZWxkcwotLy8gbWF0
Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgotLy8KLWNs
YXNzIFRQdWJsaWNUeXBlIHsKLXB1YmxpYzoKLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci0gICAgVFF1
YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgaW50IHNp
emU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJy
YXkKLSAgICBib29sIG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7
Ci0gICAgVFR5cGUqIHVzZXJEZWY7Ci0gICAgaW50IGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2lj
KFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIgcSwgaW50IGxuID0gMCkKLSAgICB7Ci0gICAgICAg
IHR5cGUgPSBidDsKLSAgICAgICAgcXVhbGlmaWVyID0gcTsKLSAgICAgICAgcHJlY2lzaW9uID0g
RWJwVW5kZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7
Ci0gICAgICAgIGFycmF5ID0gZmFsc2U7Ci0gICAgICAgIGFycmF5U2l6ZSA9IDA7Ci0gICAgICAg
IHVzZXJEZWYgPSAwOwotICAgICAgICBsaW5lID0gbG47Ci0gICAgfQotCi0gICAgdm9pZCBzZXRB
Z2dyZWdhdGUoaW50IHMsIGJvb2wgbSA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7
Ci0gICAgICAgIG1hdHJpeCA9IG07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShib29sIGEs
IGludCBzID0gMCkKLSAgICB7Ci0gICAgICAgIGFycmF5ID0gYTsKLSAgICAgICAgYXJyYXlTaXpl
ID0gczsKLSAgICB9Ci19OwotCiB0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj4g
VFN0cnVjdHVyZU1hcDsKIHR5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlwZUxpc3QqPjo6aXRl
cmF0b3IgVFN0cnVjdHVyZU1hcEl0ZXJhdG9yOworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhp
bmdzIHRoYXQgaGF2ZSBhIHR5cGUuCiAvLwotY2xhc3MgVFR5cGUgeworY2xhc3MgVFR5cGUKK3sK
IHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0
b3IpCiAgICAgVFR5cGUoKSB7fQpAQCAtODgsMTYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgc3RydWN0dXJlKDAp
LCBzdHJ1Y3R1cmVTaXplKDApLCBkZWVwZXN0U3RydWN0TmVzdGluZygwKSwgZmllbGROYW1lKDAp
LCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgVFR5
cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJl
Y2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUp
LCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXpl
KSwKLSAgICAgICAgICAgIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCks
IHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCks
IGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKLSAgICB7Ci0gICAgICAgIGlm
IChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3Ry
dWN0KCk7Ci0gICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+
Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbXB1dGVEZWVwZXN0U3RydWN0
TmVzdGluZygpOwotICAgICAgICB9Ci0gICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQ
dWJsaWNUeXBlICZwKTsKICAgICBUVHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJp
bmcmIG4sIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgogICAgICAgICAgICAgdHlwZShF
YnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEp
LCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKICAgICAgICAgICAg
IG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIHN0cnVjdHVyZSh1c2Vy
RGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCksIGZpZWxkTmFt
ZSgwKSwgbWFuZ2xlZCgwKQpAQCAtMjg0LDYgKzIzMiw4IEBAIHB1YmxpYzoKICAgICAvLyBkZWVw
ZXN0IGZpZWxkIChuZXN0aW5nMi5maWVsZDEucG9zaXRpb24pLgogICAgIGludCBnZXREZWVwZXN0
U3RydWN0TmVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGRlZXBlc3RTdHJ1Y3ROZXN0aW5nOyB9CiAK
KyAgICBib29sIGlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpIGNvbnN0OworCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcmKTsKICAgICBpbnQgZ2V0U3Ry
dWN0U2l6ZSgpIGNvbnN0OwpAQCAtMzA4LDQgKzI1OCw2MSBAQCBwcm90ZWN0ZWQ6CiAgICAgVFN0
cmluZyAqdHlwZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgdHlwZSBuYW1l
CiB9OwogCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRo
ZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2
ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3
aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVy
cworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVt
b3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywg
dGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1
cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworc3RydWN0
IFRQdWJsaWNUeXBlCit7CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAgICAg
ICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgYm9v
bCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRUeXBl
KiB1c2VyRGVmOworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBl
IGJ0LCBUUXVhbGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0gYnQ7
CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5l
ZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBh
cnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0g
MDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKGlu
dCBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBt
YXRyaXggPSBtOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDAp
CisgICAgeworICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAg
fQorCisgICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCF1c2VyRGVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVDb250
YWluaW5nQXJyYXlzKCk7CisgICAgfQorfTsKKwogI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAKaW5kZXggMTc4MmViYy4uZTIyYTc1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5jcHAKQEAgLTk1LDkgKzk1LDkgQEAgYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKaW5kZXggMWU5NDg2
Zi4uZWI2YmVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZhcmlhYmxlSW5mby5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKQEAgLTc3LDIzICs3NywyNSBAQCBzdGF0aWMgdm9pZCBn
ZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogc3RhdGljIHZvaWQgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0
JiBpbmZvTGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CiAKIC8vIFJldHVybnMgaW5m
byBmb3IgYW4gYXR0cmlidXRlIG9yIHVuaWZvcm0uCiBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUlu
Zm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rp
b242NCBoYXNoRnVuY3Rpb24pCiB7CiAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CiAgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7CiAgICAgICAgICAg
ICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJyYWNrZXRzKGkp
OwotICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIGxuYW1l
LCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVk
VmFyaWFibGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5j
dGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnZXRV
c2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7
CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBw
ZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwg
aW5mb0xpc3QpOwpAQCAtMTI0LDcgKzEyNiw4IEBAIHZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5m
byhjb25zdCBUVHlwZSYgdHlwZSwKIHZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29u
c3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKICAgICBBU1NFUlQodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwogCkBAIC0xMzMsMTUgKzEzNiwyOCBAQCB2b2lkIGdl
dFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogICAgICAgICBjb25z
dCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CiAgICAgICAgIGdldFZh
cmlhYmxlSW5mbygqZmllbGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIu
IiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBt
YXBwZWROYW1lICsgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9MaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZE5h
bWUgKyAiLiIgKyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKGZpZWxkVHlwZS0+Z2V0RmllbGROYW1l
KCksIGhhc2hGdW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc2hGdW5jdGlvbik7CiAgICAgfQogfQogCitUVmFyaWFi
bGVJbmZvOjpUVmFyaWFibGVJbmZvKCkKK3sKK30KKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxl
SW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKQorICAgIDogdHlwZSh0eXBlKSwKKyAgICAg
IHNpemUoc2l6ZSkKK3sKK30KKwogQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6Q29sbGVjdEF0dHJp
YnNVbmlmb3JtcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1z
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogICAgIDogbUF0dHJp
YnMoYXR0cmlicyksCi0gICAgICBtVW5pZm9ybXModW5pZm9ybXMpCisgICAgICBtVW5pZm9ybXMo
dW5pZm9ybXMpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pCiB7CiB9CiAKQEAg
LTE5NiwxMCArMjEyLDE2IEBAIGJvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGluaXRpYWxpemVkIGluIGEgc2hhZGVyLCB3ZSBtdXN0IGhhdmUgb25seQogICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZXMgaW4gdGhlIHNlcXVlbmNlLgogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBU
U3RyaW5nIHByb2Nlc3NlZFN5bWJvbDsKKyAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlv
biA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJs
ZS0+Z2V0U3ltYm9sKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRP
cmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJp
YWJsZUluZm8odmFyaWFibGUtPmdldFR5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRTeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaAppbmRleCA2NjdhY2FmLi40
MTMwYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVJbmZvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oCkBAIC0xMyw2ICsxMyw5IEBACiAvLyBQcm92aWRlcyBpbmZvcm1hdGlv
biBhYm91dCBhIHZhcmlhYmxlLgogLy8gSXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3Rv
cmUgaW5mbyBhYm91dCBhY3RpdmUgYXR0cmlicyBhbmQgdW5pZm9ybXMuCiBzdHJ1Y3QgVFZhcmlh
YmxlSW5mbyB7CisgICAgVFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKTsK
KyAgICBUVmFyaWFibGVJbmZvKCk7CisKICAgICBUUGVyc2lzdFN0cmluZyBuYW1lOwogICAgIFRQ
ZXJzaXN0U3RyaW5nIG1hcHBlZE5hbWU7CiAgICAgU2hEYXRhVHlwZSB0eXBlOwpAQCAtMjQsNyAr
MjcsOCBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9M
aXN0OwogY2xhc3MgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKIHB1YmxpYzoKICAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zKFRWYXJpYWJsZUluZm9M
aXN0JiBhdHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xp
c3QmIHVuaWZvcm1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiopOwpAQCAtMzgsNiArNDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRW
YXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKICAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVVuaWZv
cm1zOworCisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOwogfTsKIAogI2VuZGlm
ICAvLyBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBjNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApAQCAtMCww
ICsxLDI5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJs
ZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgImNvbXBpbGVyL1No
SGFuZGxlLmgiCisKK25hbWVzcGFjZSB7CitpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0Ogor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNh
c2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHJldHVy
biAzOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAg
ICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9JTlQ6CisgICAgICAgIGNhc2UgU0hfQk9P
TDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJf
Q1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKKyAgICAgICAgY2Fz
ZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
IDc7CisgICAgfQorfQorfSAgICAvLyBuYW1lc3BhY2UKKworaW50IFZhcmlhYmxlUGFja2VyOjpH
ZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRf
VkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gNDsK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6
CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgor
ICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAg
ICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAg
ICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9J
TlQ6CisgICAgICAgIGNhc2UgU0hfQk9PTDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgor
ICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VY
VEVSTkFMX09FUzoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgfQorfQorCitpbnQgVmFyaWFibGVQYWNr
ZXI6OkdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAg
ICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUM0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hf
SU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIFNIX0ZM
T0FUX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfQk9P
TF9WRUMyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAg
ICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAg
IGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxf
T0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm4gMTAwMDAwOworICAgIH0KK30KKworc3RydWN0IFRWYXJpYWJsZUlu
Zm9Db21wYXJlciB7CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxo
cywgY29uc3QgVFZhcmlhYmxlSW5mbyYgcmhzKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGxo
c1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihsaHMudHlwZSk7CisgICAgICAgIGludCByaHNTb3J0
T3JkZXIgPSBHZXRTb3J0T3JkZXIocmhzLnR5cGUpOworICAgICAgICBpZiAobGhzU29ydE9yZGVy
ICE9IHJoc1NvcnRPcmRlcikgeworICAgICAgICAgICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJo
c1NvcnRPcmRlcjsKKyAgICAgICAgfQorICAgICAgICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3Qu
CisgICAgICAgIHJldHVybiBsaHMuc2l6ZSA+IHJocy5zaXplOworICAgIH0KK307CisKK3Vuc2ln
bmVkIFZhcmlhYmxlUGFja2VyOjptYWtlQ29sdW1uRmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNv
bXBvbmVudHNQZXJSb3cpCit7CisgICAgcmV0dXJuICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1
bW5zIC0gbnVtQ29tcG9uZW50c1BlclJvdykpICYKKyAgICAgICAgICAgICAgICAgICAga0NvbHVt
bk1hc2spID4+IGNvbHVtbjsKK30KKwordm9pZCBWYXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMo
aW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVy
Um93KQoreworICAgIHVuc2lnbmVkIGNvbHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVt
biwgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dz
OyArK3IpIHsKKyAgICAgICAgaW50IHJvdyA9IHRvcFJvdyArIHI7CisgICAgICAgIEFTU0VSVCgo
cm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAwKTsKKyAgICAgICAgcm93c19bcm93XSB8PSBj
b2x1bW5GbGFnczsKKyAgICB9Cit9CisKK2Jvb2wgVmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVt
bihpbnQgY29sdW1uLCBpbnQgbnVtUm93cywgaW50KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQor
eworICAgIEFTU0VSVChkZXN0Um93KTsKKworICAgIGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1h
eFJvd3NfICYmIHJvd3NfW3RvcE5vbkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAg
ICsrdG9wTm9uRnVsbFJvd18pIHsKKyAgICB9CisKKyAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJv
d18gPj0gMCAmJiByb3dzX1tib3R0b21Ob25GdWxsUm93X10gPT0ga0NvbHVtbk1hc2s7CisgICAg
ICAgICAtLWJvdHRvbU5vbkZ1bGxSb3dfKSB7CisgICAgfQorCisgICAgaWYgKGJvdHRvbU5vbkZ1
bGxSb3dfIC0gdG9wTm9uRnVsbFJvd18gKyAxIDwgbnVtUm93cykgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgY29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxh
Z3MoY29sdW1uLCAxKTsKKyAgICBpbnQgdG9wR29vZFJvdyA9IDA7CisgICAgaW50IHNtYWxsZXN0
R29vZFRvcCA9IC0xOworICAgIGludCBzbWFsbGVzdEdvb2RTaXplID0gbWF4Um93c18gKyAxOwor
ICAgIGludCBib3R0b21Sb3cgPSBib3R0b21Ob25GdWxsUm93XyArIDE7CisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgIGZvciAoaW50IHJvdyA9IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90
dG9tUm93OyArK3JvdykgeworICAgICAgICBib29sIHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93
ID8gKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApIDogZmFsc2U7CisgICAgICAgIGlm
IChyb3dFbXB0eSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAg
IHRvcEdvb2RSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSByb3cgLSB0b3BHb29kUm93OworICAgICAgICAgICAgICAg
IGlmIChzaXplID49IG51bVJvd3MgJiYgc2l6ZSA8IHNtYWxsZXN0R29vZFNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc21hbGxlc3RHb29kU2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAg
ICAgIHNtYWxsZXN0R29vZFRvcCA9IHRvcEdvb2RSb3c7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoc21hbGxlc3RHb29kVG9wIDwgMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKmRlc3RSb3cgPSBzbWFsbGVzdEdvb2RUb3A7CisgICAgaWYgKGRlc3RTaXpl
KSB7CisgICAgICAgICpkZXN0U2l6ZSA9IHNtYWxsZXN0R29vZFNpemU7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFZhcmlhYmxlUGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMoaW50IG1heFZlY3RvcnMsIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpCit7CisgICAgQVNTRVJUKG1heFZlY3RvcnMgPiAwKTsKKyAgICBtYXhSb3dz
XyA9IG1heFZlY3RvcnM7CisgICAgdG9wTm9uRnVsbFJvd18gPSAwOworICAgIGJvdHRvbU5vbkZ1
bGxSb3dfID0gbWF4Um93c18gLSAxOworICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhp
bl92YXJpYWJsZXMpOworCisgICAgLy8gQXMgcGVyIEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2Vj
dGlvbiA3IHZhcmlhYmxlcyBhcmUgcGFja2VkIGluIHNwZWNpZmljCisgICAgLy8gb3JkZXIgYnkg
dHlwZSwgdGhlbiBieSBzaXplIG9mIGFycmF5LCBsYXJnZXN0IGZpcnN0LgorICAgIHN0ZDo6c29y
dCh2YXJpYWJsZXMuYmVnaW4oKSwgdmFyaWFibGVzLmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFy
ZXIoKSk7CisgICAgcm93c18uY2xlYXIoKTsKKyAgICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywg
MCk7CisKKyAgICAvLyBQYWNrcyB0aGUgNCBjb2x1bW4gdmFyaWFibGVzLgorICAgIHNpemVfdCBp
aSA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07CisgICAgICAg
IGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDQpIHsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51
bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAgIGlmICh0
b3BOb25GdWxsUm93XyA+IG1heFJvd3NfKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBQYWNrcyB0aGUgMyBjb2x1bW4gdmFyaWFibGVzLgorICAgIGludCBudW0zQ29s
dW1uUm93cyA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Cisg
ICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG51bTNDb2x1bW5Sb3dzICs9
IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAg
IGlmICh0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzID4gbWF4Um93c18pIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3df
LCBudW0zQ29sdW1uUm93cywgMCwgMyk7CisKKyAgICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFy
aWFibGVzLgorICAgIGludCB0b3AyQ29sdW1uUm93ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29s
dW1uUm93czsKKyAgICBpbnQgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9w
MkNvbHVtblJvdzsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1u
Um93c0F2YWlsYWJsZTsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29s
dW1uUm93c0F2YWlsYWJsZTsKKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lp
KSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lp
XTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0g
MikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IG51bVJvd3Mg
PSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICAgICAgaWYg
KG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczAxKSB7CisgICAgICAgICAgICByb3dz
QXZhaWxhYmxlSW5Db2x1bW5zMDEgLT0gbnVtUm93czsKKyAgICAgICAgfSBlbHNlIGlmIChudW1S
b3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMykgeworICAgICAgICAgICAgcm93c0F2YWls
YWJsZUluQ29sdW1uczIzIC09IG51bVJvd3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgbnVtUm93c1VzZWRJ
bkNvbHVtbnMwMSA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxh
YmxlSW5Db2x1bW5zMDE7CisgICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMjMgPQorICAgICAg
ICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzOworICAg
IGZpbGxDb2x1bW5zKHRvcDJDb2x1bW5Sb3csIG51bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIp
OworICAgIGZpbGxDb2x1bW5zKG1heFJvd3NfIC0gbnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVt
Um93c1VzZWRJbkNvbHVtbnMyMywKKyAgICAgICAgICAgICAgICAyLCAyKTsKKworICAgIC8vIFBh
Y2tzIHRoZSAxIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNp
emUoKTsgKytpaSkgeworICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZh
cmlhYmxlc1tpaV07CisgICAgICAgIEFTU0VSVCgxID09IEdldE51bUNvbXBvbmVudHNQZXJSb3co
dmFyaWFibGUudHlwZSkpOworICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFi
bGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAt
MTsKKyAgICAgICAgaW50IHNtYWxsZXN0U2l6ZSA9IG1heFJvd3NfICsgMTsKKyAgICAgICAgaW50
IHRvcFJvdyA9IC0xOworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVt
Q29sdW1uczsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgIGludCByb3cgPSAwOworICAgICAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICAgICAgaWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51
bVJvd3MsICZyb3csICZzaXplKSkgeworICAgICAgICAgICAgICAgIGlmIChzaXplIDwgc21hbGxl
c3RTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0U2l6ZSA9IHNpemU7CisgICAg
ICAgICAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1uID0gY29sdW1uOworICAgICAgICAgICAgICAg
ICAgICB0b3BSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNtYWxsZXN0Q29sdW1uIDwgMCkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmlsbENvbHVtbnModG9wUm93LCBu
dW1Sb3dzLCBzbWFsbGVzdENvbHVtbiwgMSk7CisgICAgfQorCisgICAgQVNTRVJUKHZhcmlhYmxl
cy5zaXplKCkgPT0gaWkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODcwNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIu
aApAQCAtMCwwICsxLDQxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9WQVJJQUJM
RVBBQ0tFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworCisj
aW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNz
IFZhcmlhYmxlUGFja2VyIHsKKyBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXNzZWQgaW4gdmFyaWFibGVzIHBhY2sgaW4gbWF4VmVjdG9ycyBmb2xsb3dpbmcKKyAgICAvLyB0
aGUgcGFja2luZyBydWxlcyBmcm9tIHRoZSBHTFNMIDEuMDE3IHNwZWMsIEFwcGVuZGl4IEEsIHNl
Y3Rpb24gNy4KKyAgICBib29sIENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAg
ICAgICAgaW50IG1heFZlY3RvcnMsCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpOworCisgICAgLy8gR2V0cyBob3cgbWFueSBjb21wb25lbnRzIGluIGEgcm93
IGEgZGF0YSB0eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtQ29tcG9uZW50c1BlclJv
dyhTaERhdGFUeXBlIHR5cGUpOworCisgICAgLy8gR2V0cyBob3cgbWFueSByb3dzIGEgZGF0YSB0
eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpOwor
CisgcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1Db2x1bW5zID0gNDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga0NvbHVtbk1hc2sgPSAoMSA8PCBrTnVtQ29sdW1ucykgLSAx
OworCisgICAgdW5zaWduZWQgbWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGludCBudW1Db21w
b25lbnRzUGVyUm93KTsKKyAgICB2b2lkIGZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1S
b3dzLCBpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgYm9vbCBzZWFy
Y2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywgaW50KiBkZXN0
U2l6ZSk7CisKKyAgICBpbnQgdG9wTm9uRnVsbFJvd187CisgICAgaW50IGJvdHRvbU5vbkZ1bGxS
b3dfOworICAgIGludCBtYXhSb3dzXzsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZD4gcm93c187
Cit9OworCisjZW5kaWYgLy8gX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKaW5kZXgg
MjZjZWUwNS4uN2E4MmJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDE3ICs5LDIyIEBACiBzdGF0aWMgY29uc3Qg
aW50IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7CiBzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lP
Tl8xMjAgPSAxMjA7CiAKLS8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhyZWUgdGhpbmdzOgorLy8g
V2UgbmVlZCB0byBzY2FuIGZvciB0aGUgZm9sbG93aW5nOgogLy8gMS4gImludmFyaWFudCIga2V5
d29yZDogVGhpcyBjYW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cwogLy8gICAgYnV0IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KIC8vIDIuICJnbF9Qb2ludENv
b3JkIiBidWlsdC1pbiB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBz
aGFkZXIKIC8vICAgIGJ1dCBpbnNpZGUgYW55IHNjb3BlLgogLy8gMy4gQ2FsbCB0byBhIG1hdHJp
eCBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAgKFRo
ZXNlIGNvbnN0cnVjdG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8v
Ci0vLyBJZiBpdCB3ZXJlbid0IGZvciAoMykgdGhlbiB3ZSB3b3VsZCBvbmx5IG5lZWQgdG8gc2Nh
biB0aGUgZ2xvYmFsCi0vLyBzY29wZSBvZiB0aGUgdmVydGV4IHNoYWRlci4gSG93ZXZlciwgd2Ug
bmVlZCB0byBzY2FuIHRoZSBlbnRpcmUKLS8vIHNoYWRlciBpbiBib3RoIGNhc2VzLgorLy8gNC4g
QXJyYXlzIGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisvLyAgICBHTFNMIHNwZWMgc2Vj
dGlvbiA2LjEuMTogIldoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLCBleHByZXNzaW9ucyB0aGF0IGRv
CisvLyAgICBub3QgZXZhbHVhdGUgdG8gbC12YWx1ZXMgY2Fubm90IGJlIHBhc3NlZCB0byBwYXJh
bWV0ZXJzIGRlY2xhcmVkIGFzCisvLyAgICBvdXQgb3IgaW5vdXQuIgorLy8gICAgR0xTTCAxLjEg
c2VjdGlvbiA1Ljg6ICJPdGhlciBiaW5hcnkgb3IgdW5hcnkgZXhwcmVzc2lvbnMsCisvLyAgICBu
b24tZGVyZWZlcmVuY2VkIGFycmF5cywgZnVuY3Rpb24gbmFtZXMsIHN3aXp6bGVzIHdpdGggcmVw
ZWF0ZWQgZmllbGRzLAorLy8gICAgYW5kIGNvbnN0YW50cyBjYW5ub3QgYmUgbC12YWx1ZXMuIgor
Ly8gICAgR0xTTCAxLjIgcmVsYXhlZCB0aGUgcmVzdHJpY3Rpb24gb24gYXJyYXlzLCBzZWN0aW9u
IDUuODogIlZhcmlhYmxlcyB0aGF0CisvLyAgICBhcmUgYnVpbHQtaW4gdHlwZXMsIGVudGlyZSBz
dHJ1Y3R1cmVzIG9yIGFycmF5cy4uLiBhcmUgYWxsIGwtdmFsdWVzLiIKIC8vCiAvLyBUT0RPKGFs
b2twKTogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgb2YgaW52YXJpYW50IGRlY2FsYXJhdGlvbiBn
ZXQgbG9zdAogLy8gZHVyaW5nIHBhcnNpbmcgLSB0aGV5IGRvIG5vdCBnZXQgY2FycmllZCBvdmVy
IHRvIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KQEAgLTc5LDYgKzg0LDI2IEBAIGJvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIH0KKyAgICAgIGNhc2UgRU9wUGFyYW1ldGVy
czogeworICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gcGFyYW1zLmJlZ2luKCk7CisgICAgICAgICAgICAgaXRlciAhPSBwYXJhbXMuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiBwYXJh
bSA9ICgqaXRlciktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS0+aXNBcnJh
eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gcGFyYW0tPmdldFF1YWxpZmllcigpOworICAgICAgICAgICAgICAgIGlmICgocXVhbGlmaWVy
ID09IEV2cU91dCkgfHwgKHF1YWxpZmllciA9PSAgRXZxSW5PdXQpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZC4gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzoKICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAppbmRl
eCAzNzZmY2I4Li4xYzFjYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaApAQCAtMjIsMTQgKzIyLDE4IEBACiAvLyAgIC0gYysr
IHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgogLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxlIGdsX1Bv
aW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9y
cyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0
aW9uIHBhcmFtZXRlcnMKIC8vCiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CiBwdWJsaWM6CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsK
IAotICAgIC8vIFJldHVybnMgMTIwIGlmICJpbnZhcmlhbnQiIGtleXdvcmQsICJnbF9Qb2ludENv
b3JkIiwgb3IKLSAgICAvLyBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCBpbiB0
aGUgc2hhZGVyLiBFbHNlIDExMCBpcwotICAgIC8vIHJldHVybmVkLgorICAgIC8vIFJldHVybnMg
MTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUgc2hhZGVyOgorICAgIC8vIC0gImludmFy
aWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIsCisgICAgLy8gLSBtYXRyaXgvbWF0cml4
IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91dCIgcGFyYW1ldGVycworICAgIC8vIEVs
c2UgMTEwIGlzIHJldHVybmVkLgogICAgIGludCBnZXRWZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNp
b247IH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5s
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAppbmRleCBi
OWEzMDJkLi44MzAwZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwKQEAgLTM4LDcgKzM4LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogJXsKICNpbmNsdWRlICJjb21waWxlci9nbHNs
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImds
c2xhbmdfdGFiLmgiCiAKQEAgLTI3MiwxNDggKzI3MiwxMyBAQCBPICAgICAgICAgICBbMC03XQog
CiAlJQogCi0jaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi1leHRlcm4gIkMiIHsKLS8v
IFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaCIKLQotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4g
aW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNy
byhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotCi0jZGVmaW5lIFNFVFVQX0NPTlRFWFQo
cHApIFwKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+
cEM7IFwKLSAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250
ZXh0LT5zY2FubmVyOwotCi0vLyBQcmVwcm9jZXNzb3IgY2FsbGJhY2tzLgotdm9pZCBDUFBEZWJ1
Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPnRyYWNlKG1zZyk7Ci19Ci0KLXZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndh
cm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwotfQotCi12b2lkIENQUFNoSW5mb0xvZ01zZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7Ci0gICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotfQotCi12b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAwOwotICAgIERlY29kZVNv
dXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVT
b3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotdm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0
cmluZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAg
IERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwgJmxpbmUpOwotICAgIHl5bGluZW5vID0g
RW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7Ci19Ci0KLWludCBHZXRTdHJpbmdOdW1iZXIo
KQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMDsKLSAgICBE
ZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwpOwotICAgIHJldHVybiBzdHJp
bmc7Ci19Ci0KLWludCBHZXRMaW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwg
JmxpbmUpOwotICAgIHJldHVybiBsaW5lOwotfQotCi12b2lkIEluY0xpbmVOdW1iZXIoKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7Ci0g
ICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7Ci0gICAgeXlsaW5l
bm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCArK2xpbmUpOwotfQotCi12b2lkIERlY0xpbmVO
dW1iZXIoKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7
Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCAtLWxpbmUpOwotfQotCi12
b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLQotICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJu
OwotICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKLSAgICBpZiAo
c3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5oYW5k
bGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKLX0KLQot
dm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIFRTdHJpbmcgc3RyU3JjOwotICAgIHN0clNyYyA9IFRTdHJpbmcoc3RyaW5nKTsK
LQotICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnICsgIiAiICsg
c3RyU3JjOwotfQotCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQotewotICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjcHAtPkVyck1zZyA9IGNvbnRleHQtPkhhc2hFcnJNc2cu
Y19zdHIoKTsKLSAgICByZXR1cm4gY3BwLT5FcnJNc2c7Ci19Ci0KLXZvaWQgUmVzZXRUU3RyaW5n
KHZvaWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPkhhc2hFcnJN
c2cgPSAiIjsKLX0KLQotdm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBl
eHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgY29udGV4dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1l
LCBiZWhhdmlvcik7Ci19Ci19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vICFBTkdMRV9VU0Vf
TkVXX1BSRVBST0NFU1NPUgotCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9z
aXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuID0gMDsKLQotI2lmIEFOR0xF
X1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgcHA6OlRva2VuIHRva2VuOwogICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICBsZW4gPSB0b2tl
bi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAg
aW50IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQu
c2l6ZSgpOwogICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKLSAgICAgICAg
bWVtY3B5KGJ1ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3Vy
Y2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSksIHl5c2Nhbm5l
cik7Ci0jZWxzZQotICAgIGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKTsKLSNlbmRpZiAg
Ly8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIGlmIChsZW4gPj0gbWF4X3NpemUp
CiAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKQEAgLTQ3
Myw5ICszMzgsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXlsZXhfZGVzdHJveShzY2Fu
bmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgotICAgIEZpbmFsaXplUHJl
cHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDg2LDI3ICszNDgs
MTQgQEAgaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsK
IAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgotI2lmIEFOR0xFX1VTRV9ORVdfUFJF
UFJPQ0VTU09SCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSNlbHNlCi0gICAgaWYgKEluaXRQcmVw
cm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0g
ICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIGlmIChJbml0U2Nhbm5lcklucHV0
KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICAvLyBEZWZpbmUgZXh0ZW5zaW9u
IG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7CiAgICAgICAgICBpdGVy
ICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBS
T0NFU1NPUgogICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0jZWxzZQotICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhp
dGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gMDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IDNjYWQzMzUuLjdjZDQ5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtMzQwLDE4ICszNDAsMTAgQEAgcG9zdGZpeF9leHByZXNzaW9u
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChp
bnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOwotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGlu
ZGV4LCAkMi5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEt
PmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkg
dmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7CisgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxk
cywgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKICAgICAgICAg
ICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwpAQCAtMTIxMSw3ICsxMjAzLDcgQEAgaW5pdF9kZWNs
YXJhdG9yX2xpc3QKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDMubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQz
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
QEAgLTEyMjQsNyArMTIxNiw3IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25J
bml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB0cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAg
ICAgICAkJCA9ICQxOwpAQCAtMTI0Miw3ICsxMjM0LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QK
ICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwg
JDEudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEu
dHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxp
bmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICQkID0gJDE7CkBAIC0xMjk2LDcgKzEyODgsNyBAQCBzaW5nbGVf
ZGVjbGFyYXRpb24KICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDIubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQy
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgJCQudHlwZSA9
ICQxOwpAQCAtMTMyNyw3ICsxMzE5LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCB0
cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJC50eXBl
ID0gJDE7CkBAIC0yMDM3LDYgKzIwMjksMTUgQEAgZXh0ZXJuYWxfZGVjbGFyYXRpb24KIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFRT
eW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlv
bi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJbikKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJ1aWx0LWluIGZ1
bmN0aW9ucyBjYW5ub3QgYmUgcmVkZWZpbmVkIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAg
ICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicg
aWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRl
eCBhM2JmYTEzLi5mNjUxZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBp
bnQxNl90IGZsZXhfaW50MTZfdDsKIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKIHR5
cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMy
X3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CiAjZWxzZQogdHlwZWRlZiBzaWdu
ZWQgY2hhciBmbGV4X2ludDhfdDsKIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKQEAg
LTM3OCw3ICszNzksNyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
IG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVf
QUNUSU9OIFwKIAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXplX3Qp
ICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAogCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCiAJKnl5X2NwID0gJ1wwJzsgXAog
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwpAQCAtODA3LDcgKzgwOCw3IEBAIFdISUNIIEdFTkVS
QVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAj
aW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtMjk0NywxNDggKzI5NDgsMTMgQEAgdm9pZCB5
eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAKICNkZWZpbmUgWVlUQUJM
RVNfTkFNRSAieXl0YWJsZXMiCiAKLSNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKLWV4
dGVybiAiQyIgewotLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgotCi1leHRlcm4gaW50IEluaXRQcmVwcm9jZXNz
b3IoKTsKLWV4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiB2b2lkIFBy
ZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci0KLSNkZWZpbmUg
U0VUVVBfQ09OVEVYVChwcCkgXAotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBhcnNl
Q29udGV4dCopIHBwLT5wQzsgXAotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7Ci0KLS8vIFByZXByb2Nlc3NvciBjYWxsYmFja3Mu
Ci12b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05U
RVhUKGNwcCk7Ci0gICAgY29udGV4dC0+dHJhY2UobXNnKTsKLX0KLQotdm9pZCBDUFBXYXJuaW5n
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIik7Ci19Ci0KLXZvaWQgQ1BQU2hJ
bmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwotICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLX0KLQotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2cs
ICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZvaWQgU2V0TGluZU51bWJlcihp
bnQgbGluZSkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IHN0cmluZyA9IDA7
Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKLSAgICB5eWxp
bmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOwotfQotCi12b2lkIFNldFN0cmlu
Z051bWJlcihpbnQgc3RyaW5nKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0g
ICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotaW50IEdl
dFN0cmluZ051bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJp
bmcgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0g
ICAgcmV0dXJuIHN0cmluZzsKLX0KLQotaW50IEdldExpbmVOdW1iZXIoKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5
bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0gICAgcmV0dXJuIGxpbmU7Ci19Ci0KLXZvaWQgSW5jTGlu
ZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAw
LCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsICZsaW5l
KTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsICsrbGluZSk7Ci19Ci0K
LXZvaWQgRGVjTGluZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlu
dCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZz
dHJpbmcsICZsaW5lKTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIC0t
bGluZSk7Ci19Ci0KLXZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBu
dW1Ub2tlbnMpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotCi0gICAgaWYgKG51bVRva2Vu
cyAhPSA0KSByZXR1cm47Ci0gICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0
dXJuOwotICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKLQotICAg
IGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tl
bnNbMl0pOwotfQotCi12b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgVFN0cmluZyBzdHJTcmM7Ci0gICAgc3RyU3JjID0gVFN0
cmluZyhzdHJpbmcpOwotCi0gICAgY29udGV4dC0+SGFzaEVyck1zZyA9IGNvbnRleHQtPkhhc2hF
cnJNc2cgKyAiICIgKyBzdHJTcmM7Ci19Ci0KLWNvbnN0IGNoYXIqIEdldFN0cmZyb21UU3RyKHZv
aWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNwcC0+RXJyTXNnID0gY29udGV4
dC0+SGFzaEVyck1zZy5jX3N0cigpOwotICAgIHJldHVybiBjcHAtPkVyck1zZzsKLX0KLQotdm9p
ZCBSZXNldFRTdHJpbmcodm9pZCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29u
dGV4dC0+SGFzaEVyck1zZyA9ICIiOwotfQotCi12b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9y
KGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXls
aW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKLX0KLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZiAg
Ly8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi0KIGludCBzdHJpbmdfaW5wdXQoY2hhciog
YnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW4gPSAw
OwotCi0jaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBwcDo6VG9rZW4gdG9rZW47
CiAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOwot
ICAgIGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVl
LnNpemUoKTsKKyAgICBpbnQgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAw
IDogdG9rZW4udGV4dC5zaXplKCk7CiAgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQotICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7CiAgICAgeXlzZXRfbGlu
ZW5vKEVuY29kZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5s
aW5lKSx5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6
ZSk7Ci0jZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICBpZiAobGVu
ID49IG1heF9zaXplKQogICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJm
bG93Iik7CkBAIC0zMTQ4LDkgKzMwMTQsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXls
ZXhfZGVzdHJveShzY2FubmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgot
ICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtMzE2MSwyNyArMzAyNCwxNCBAQCBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICBjb250ZXh0LT5B
ZnRlckVPRiA9IGZhbHNlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0jaWYg
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nv
ci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotI2Vsc2UK
LSAgICBpZiAoSW5pdFByZXByb2Nlc3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBjcHAt
PnBDID0gY29udGV4dDsKLSAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgaWYg
KEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gMTsKLSNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIC8v
IERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwogICAgIGZvciAoVEV4
dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4o
KTsKICAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotI2lmIEFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5w
cmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbHNlCi0gICAgICAgIFBy
ZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotI2VuZGlmCiAgICAgfQog
ICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggNDZiNTE0YS4uNzJjYzg0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
CkBAIC03NTIsMjYgKzc1MiwyNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAg
IDE2OCwgICAxNjgsICAgMjAzLCAgIDIwNiwgICAyMTksICAgMjI0LCAgIDIyOSwgICAyMzUsICAg
MjM4LAotICAgICAzMTcsICAgMzIwLCAgIDQyOSwgICA0MzksICAgNDUyLCAgIDQ2MCwgICA1NjAs
ICAgNTYzLCAgIDU3MSwgICA1NzUsCi0gICAgIDU4MiwgICA1ODYsICAgNTkzLCAgIDU5OSwgICA2
MDgsICAgNjE2LCAgIDY3MSwgICA2NzgsICAgNjg4LCAgIDY5MSwKLSAgICAgNzAxLCAgIDcxMSwg
ICA3MzIsICAgNzMzLCAgIDczNCwgICA3MzksICAgNzQwLCAgIDc0OSwgICA3NjEsICAgNzYyLAot
ICAgICA3NzAsICAgNzgxLCAgIDc4NSwgICA3ODYsICAgNzk2LCAgIDgwNiwgICA4MTYsICAgODI5
LCAgIDgzMCwgICA4NDAsCi0gICAgIDg1MywgICA4NTcsICAgODYxLCAgIDg2NSwgICA4NjYsICAg
ODc5LCAgIDg4MCwgICA4OTMsICAgODk0LCAgIDkwNywKLSAgICAgOTA4LCAgIDkyNSwgICA5MjYs
ICAgOTM5LCAgIDk0MCwgICA5NDEsICAgOTQyLCAgIDk0MywgICA5NDcsICAgOTUwLAotICAgICA5
NjEsICAgOTY5LCAgIDk5NiwgIDEwMDEsICAxMDA4LCAgMTA0NiwgIDEwNDksICAxMDU2LCAgMTA2
NCwgIDEwODUsCi0gICAgMTEwNiwgIDExMTcsICAxMTQ2LCAgMTE1MSwgIDExNjEsICAxMTY2LCAg
MTE3NiwgIDExNzksICAxMTgyLCAgMTE4NSwKLSAgICAxMTkxLCAgMTE5OCwgIDEyMDEsICAxMjIz
LCAgMTI0MSwgIDEyNjUsICAxMjg4LCAgMTI5MiwgIDEzMTAsICAxMzE4LAotICAgIDEzNTAsICAx
MzcwLCAgMTQ1OSwgIDE0NjgsICAxNDkxLCAgMTQ5NCwgIDE1MDAsICAxNTA4LCAgMTUxNiwgIDE1
MjQsCi0gICAgMTUzNCwgIDE1NDEsICAxNTQ0LCAgMTU0NywgIDE1NTMsICAxNTU2LCAgMTU3MSwg
IDE1NzUsICAxNTc5LCAgMTU4MywKLSAgICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYx
MiwgIDE2MTcsICAxNjIyLCAgMTYyNywgIDE2MzIsICAxNjM3LAotICAgIDE2NDMsICAxNjQ5LCAg
MTY1NSwgIDE2NjAsICAxNjY1LCAgMTY3NCwgIDE2ODMsICAxNjg4LCAgMTcwMSwgIDE3MDEsCi0g
ICAgMTcxNSwgIDE3MTUsICAxNzI0LCAgMTcyNywgIDE3NDIsICAxNzc4LCAgMTc4MiwgIDE3ODgs
ICAxNzk2LCAgMTgxMiwKLSAgICAxODE2LCAgMTgyMCwgIDE4MjEsICAxODI3LCAgMTgyOCwgIDE4
MjksICAxODMwLCAgMTgzMSwgIDE4MzUsICAxODM2LAotICAgIDE4MzYsICAxODM2LCAgMTg0Niwg
IDE4NDcsICAxODUxLCAgMTg1MSwgIDE4NTIsICAxODUyLCAgMTg1NywgIDE4NjAsCi0gICAgMTg3
MCwgIDE4NzMsICAxODc5LCAgMTg4MCwgIDE4ODQsICAxODkyLCAgMTg5NiwgIDE5MDYsICAxOTEx
LCAgMTkyOCwKLSAgICAxOTI4LCAgMTkzMywgIDE5MzMsICAxOTQwLCAgMTk0MCwgIDE5NDgsICAx
OTUxLCAgMTk1NywgIDE5NjAsICAxOTY2LAotICAgIDE5NzAsICAxOTc3LCAgMTk4NCwgIDE5OTEs
ICAxOTk4LCAgMjAwOSwgIDIwMTgsICAyMDIyLCAgMjAyOSwgIDIwMzIsCi0gICAgMjAzOCwgIDIw
MzgKKyAgICAgMzE3LCAgIDMyMCwgICA0MjEsICAgNDMxLCAgIDQ0NCwgICA0NTIsICAgNTUyLCAg
IDU1NSwgICA1NjMsICAgNTY3LAorICAgICA1NzQsICAgNTc4LCAgIDU4NSwgICA1OTEsICAgNjAw
LCAgIDYwOCwgICA2NjMsICAgNjcwLCAgIDY4MCwgICA2ODMsCisgICAgIDY5MywgICA3MDMsICAg
NzI0LCAgIDcyNSwgICA3MjYsICAgNzMxLCAgIDczMiwgICA3NDEsICAgNzUzLCAgIDc1NCwKKyAg
ICAgNzYyLCAgIDc3MywgICA3NzcsICAgNzc4LCAgIDc4OCwgICA3OTgsICAgODA4LCAgIDgyMSwg
ICA4MjIsICAgODMyLAorICAgICA4NDUsICAgODQ5LCAgIDg1MywgICA4NTcsICAgODU4LCAgIDg3
MSwgICA4NzIsICAgODg1LCAgIDg4NiwgICA4OTksCisgICAgIDkwMCwgICA5MTcsICAgOTE4LCAg
IDkzMSwgICA5MzIsICAgOTMzLCAgIDkzNCwgICA5MzUsICAgOTM5LCAgIDk0MiwKKyAgICAgOTUz
LCAgIDk2MSwgICA5ODgsICAgOTkzLCAgMTAwMCwgIDEwMzgsICAxMDQxLCAgMTA0OCwgIDEwNTYs
ICAxMDc3LAorICAgIDEwOTgsICAxMTA5LCAgMTEzOCwgIDExNDMsICAxMTUzLCAgMTE1OCwgIDEx
NjgsICAxMTcxLCAgMTE3NCwgIDExNzcsCisgICAgMTE4MywgIDExOTAsICAxMTkzLCAgMTIxNSwg
IDEyMzMsICAxMjU3LCAgMTI4MCwgIDEyODQsICAxMzAyLCAgMTMxMCwKKyAgICAxMzQyLCAgMTM2
MiwgIDE0NTEsICAxNDYwLCAgMTQ4MywgIDE0ODYsICAxNDkyLCAgMTUwMCwgIDE1MDgsICAxNTE2
LAorICAgIDE1MjYsICAxNTMzLCAgMTUzNiwgIDE1MzksICAxNTQ1LCAgMTU0OCwgIDE1NjMsICAx
NTY3LCAgMTU3MSwgIDE1NzUsCisgICAgMTU4NCwgIDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQs
ICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAgMTYyOSwKKyAgICAxNjM1LCAgMTY0MSwgIDE2
NDcsICAxNjUyLCAgMTY1NywgIDE2NjYsICAxNjc1LCAgMTY4MCwgIDE2OTMsICAxNjkzLAorICAg
IDE3MDcsICAxNzA3LCAgMTcxNiwgIDE3MTksICAxNzM0LCAgMTc3MCwgIDE3NzQsICAxNzgwLCAg
MTc4OCwgIDE4MDQsCisgICAgMTgwOCwgIDE4MTIsICAxODEzLCAgMTgxOSwgIDE4MjAsICAxODIx
LCAgMTgyMiwgIDE4MjMsICAxODI3LCAgMTgyOCwKKyAgICAxODI4LCAgMTgyOCwgIDE4MzgsICAx
ODM5LCAgMTg0MywgIDE4NDMsICAxODQ0LCAgMTg0NCwgIDE4NDksICAxODUyLAorICAgIDE4NjIs
ICAxODY1LCAgMTg3MSwgIDE4NzIsICAxODc2LCAgMTg4NCwgIDE4ODgsICAxODk4LCAgMTkwMywg
IDE5MjAsCisgICAgMTkyMCwgIDE5MjUsICAxOTI1LCAgMTkzMiwgIDE5MzIsICAxOTQwLCAgMTk0
MywgIDE5NDksICAxOTUyLCAgMTk1OCwKKyAgICAxOTYyLCAgMTk2OSwgIDE5NzYsICAxOTgzLCAg
MTk5MCwgIDIwMDEsICAyMDEwLCAgMjAxNCwgIDIwMjEsICAyMDI0LAorICAgIDIwMzAsICAyMDMw
CiB9OwogI2VuZGlmCiAKQEAgLTIzNjAsMTggKzIzNjAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
LSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmc7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRTdHJp
bmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZp
ZWxkczsKQEAgLTM0MzAsNyArMzQyMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKQEAgLTM0NDcs
NyArMzQzOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKQEAgLTM0NjksNyArMzQ2MSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNw
WygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkp
CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50
ZXJtKTsKQEAgLTM1MzIsNyArMzUyNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikg
LSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlw
ZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKQEAgLTM1NzEsNyArMzU2Myw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5l
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHRydWUpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7CkBAIC00NTE3LDYgKzQ1MDksMTUgQEAgeXlyZWR1Y2U6
CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVp
bHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBi
ZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVk
aWF0ZS5oCmluZGV4IGU2M2Q0MjUuLjc1ODEyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTE2LDYgKzE2LDggQEAK
ICNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAogI2RlZmluZSBfX0lOVEVSTUVESUFURV9ICiAKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwogI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1v
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQ29u
c3RhbnRVbmlvbi5oIgpAQCAtNTUxLDYgKzU1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNy
ZW1lbnREZXB0aCgpIHtkZXB0aCsrO30KICAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRo
LS07fQogCisgICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24g
cG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1l
LgorICAgIHN0YXRpYyBUU3RyaW5nIGhhc2goY29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVu
Y3Rpb242NCBoYXNoRnVuY3Rpb24pOworCiAgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKICAgICBj
b25zdCBib29sIGluVmlzaXQ7CiAgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKaW5kZXggMWQ5NTkw
Ny4uYWRmMWEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9vc2luY2x1ZGUuaApAQCAtMjQsOSArMjQsNyBAQAogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRm
b3JtLgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEFOR0xFX1VTRV9OU1BSKQotI2luY2x1ZGUgInBy
dGhyZWFkLmgiCi0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKICNkZWZpbmUgU1RSSUNUCiAjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgpAQCAtMzQsNyArMzIsNyBAQAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdM
RV9VU0VfTlNQUgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KIAogCiAjaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKQEAgLTQyLDE2ICs0MCwxMyBAQAogLy8KIC8vIFRocmVhZCBMb2NhbCBTdG9y
YWdlIE9wZXJhdGlvbnMKIC8vCi0jaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKLXR5cGVkZWYg
UFJVaW50biBPU19UTFNJbmRleDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZG
RkZGRgotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjaWYgZGVmaW5lZChBTkdMRV9PU19X
SU4pCiB0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RMU19J
TkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQogI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkK
IHR5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RM
U19JTkRFWCAweEZGRkZGRkZGCi0jZW5kaWYgIC8vIEFOR0xFX1VTRV9OU1BSCisjZW5kaWYgIC8v
IEFOR0xFX09TX1dJTgogCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7CiBib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOwpAQCAtNjAs
OSArNTUsNyBAQCBib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOwogaW5s
aW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKIHsKICAgICBBU1NF
UlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1VT
RV9OU1BSKQotICAgIHJldHVybiBQUl9HZXRUaHJlYWRQcml2YXRlKG5JbmRleCk7Ci0jZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKICAgICByZXR1
cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKICNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCiAg
ICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcAppbmRleCBm
NjNkODFlLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwCkBAIC0xLDQzICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5zcHIgc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0vLwotLy8g
VGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9j
VExTSW5kZXgoKQotewotICAgIFBSVWludG4gaW5kZXg7Ci0gICAgUFJTdGF0dXMgc3RhdHVzID0g
UFJfTmV3VGhyZWFkUHJpdmF0ZUluZGV4KCZpbmRleCwgTlVMTCk7Ci0KLSAgICBpZiAoc3RhdHVz
KSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBh
bGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIE9TX1Nl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0gICAgaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBQUl9TZXRUaHJlYWRQcml2YXRlKG5JbmRleCwgbHB2
VmFsdWUpID09IDA7Ci19Ci0KLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRl
eCkKLXsKLSAgICAvLyBDYW4ndCBkZWxldGUgVExTIGtleXMgd2l0aCBuc3ByCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTIyZTFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFn
bm9zdGljc0Jhc2UuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNl
IHBwCit7CisKK0RpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIERpYWdu
b3N0aWNzOjpyZXBvcnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogS2VlcCBhIGNvdW50IG9mIGVycm9y
cyBhbmQgd2FybmluZ3MuCisgICAgcHJpbnQoaWQsIGxvYywgdGV4dCk7Cit9CisKK0RpYWdub3N0
aWNzOjpTZXZlcml0eSBEaWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCit7CisgICAgaWYgKChp
ZCA+IEVSUk9SX0JFR0lOKSAmJiAoaWQgPCBFUlJPUl9FTkQpKQorICAgICAgICByZXR1cm4gRVJS
T1I7CisKKyAgICBpZiAoKGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlkIDwgV0FSTklOR19FTkQp
KQorICAgICAgICByZXR1cm4gV0FSTklORzsKKworICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0
dXJuIEVSUk9SOworfQorCitzdGQ6OnN0cmluZyBEaWFnbm9zdGljczo6bWVzc2FnZShJRCBpZCkK
K3sKKyAgICBzd2l0Y2ggKGlkKQorICAgIHsKKyAgICAgIC8vIEVycm9ycyBiZWdpbi4KKyAgICAg
IGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICAgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7
CisgICAgICBjYXNlIE9VVF9PRl9NRU1PUlk6CisgICAgICAgICAgcmV0dXJuICJvdXQgb2YgbWVt
b3J5IjsKKyAgICAgIGNhc2UgSU5WQUxJRF9DSEFSQUNURVI6CisgICAgICAgICAgcmV0dXJuICJp
bnZhbGlkIGNoYXJhY3RlciI7CisgICAgICBjYXNlIElOVkFMSURfTlVNQkVSOgorICAgICAgICAg
IHJldHVybiAiaW52YWxpZCBudW1iZXIiOworICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgor
ICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7CisgICAgICBjYXNlIEZMT0FUX09W
RVJGTE9XOgorICAgICAgICAgIHJldHVybiAiZmxvYXQgb3ZlcmZsb3ciOworICAgICAgY2FzZSBU
T0tFTl9UT09fTE9ORzoKKyAgICAgICAgICByZXR1cm4gInRva2VuIHRvbyBsb25nIjsKKyAgICAg
IGNhc2UgSU5WQUxJRF9FWFBSRVNTSU9OOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHBy
ZXNzaW9uIjsKKyAgICAgIGNhc2UgRElWSVNJT05fQllfWkVSTzoKKyAgICAgICAgICByZXR1cm4g
ImRpdmlzaW9uIGJ5IHplcm8iOworICAgICAgY2FzZSBFT0ZfSU5fQ09NTUVOVDoKKyAgICAgICAg
ICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gY29tbWVudCI7CisgICAg
ICBjYXNlIFVORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIjsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lOVkFMSURfTkFNRToKKyAgICAgICAgICByZXR1
cm4gImludmFsaWQgZGlyZWN0aXZlIG5hbWUiOworICAgICAgY2FzZSBNQUNST19OQU1FX1JFU0VS
VkVEOgorICAgICAgICAgIHJldHVybiAibWFjcm8gbmFtZSBpcyByZXNlcnZlZCI7CisgICAgICBj
YXNlIE1BQ1JPX1JFREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gIm1hY3JvIHJlZGVmaW5lZCI7
CisgICAgICBjYXNlIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVEOgorICAgICAgICAgIHJldHVy
biAicHJlZGVmaW5lZCBtYWNybyByZWRlZmluZWQiOworICAgICAgY2FzZSBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5kZWZp
bmVkIjsKKyAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAgICAg
ICAgcmV0dXJuICJ1bnRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbiI7CisgICAgICBjYXNlIE1B
Q1JPX1RPT19GRVdfQVJHUzoKKyAgICAgICAgICByZXR1cm4gIk5vdCBlbm91Z2ggYXJndW1lbnRz
IGZvciBtYWNybyI7CisgICAgICBjYXNlIE1BQ1JPX1RPT19NQU5ZX0FSR1M6CisgICAgICAgICAg
cmV0dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKKyAgICAgIGNhc2UgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vu
ZGlmIGZvdW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05B
TF9FTFNFX1dJVEhPVVRfSUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZv
dW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNF
X0FGVEVSX0VMU0U6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZvdW5kIGFm
dGVyIGFub3RoZXIgI2Vsc2UiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIHdpdGhvdXQgYSBt
YXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6Cisg
ICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIGFmdGVyICNlbHNlIjsKKyAg
ICAgIGNhc2UgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVEOgorICAgICAgICAgIHJldHVybiAidW5l
eHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb25kaXRpb25hbCBibG9jayI7CisgICAgICBj
YXNlIElOVkFMSURfRVhURU5TSU9OX05BTUU6CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4
dGVuc2lvbiBuYW1lIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1I6Cisg
ICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBiZWhhdmlvciI7CisgICAgICBjYXNl
IElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQg
ZXh0ZW5zaW9uIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9OVU1CRVI6
CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIHZlcnNpb24gbnVtYmVyIjsKKyAgICAgIGNhc2Ug
SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgdmVy
c2lvbiBkaXJlY3RpdmUiOworICAgICAgY2FzZSBWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6
CisgICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVmb3JlIGFu
eXRoaW5nIGVsc2UsICIKKyAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRzIGFuZCB3
aGl0ZSBzcGFjZSI7CisgICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIGxpbmUgbnVtYmVyIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05V
TUJFUjoKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgZmlsZSBudW1iZXIiOworICAgICAgY2Fz
ZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5l
IGRpcmVjdGl2ZSI7CisgICAgICAvLyBFcnJvcnMgZW5kLgorICAgICAgLy8gV2FybmluZ3MgYmVn
aW4uCisgICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICAgICAgcmV0dXJuICJ1bmV4
cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIENPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOworICAgICAgY2FzZSBVTlJFQ09HTkla
RURfUFJBR01BOgorICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CisgICAg
ICAvLyBXYXJuaW5ncyBlbmQuCisgICAgICBkZWZhdWx0OgorICAgICAgICAgIGFzc2VydChmYWxz
ZSk7CisgICAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHBw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wN2JjNDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApA
QCAtMCwwICsxLDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGluZyBkaWFnbm9z
dGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IgZm9y
bWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25vc3RpY3MKK3sK
KyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAg
ICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9C
RUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisg
ICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAg
ICAgSU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgRkxPQVRfT1ZFUkZMT1csCisgICAgICAgIFRP
S0VOX1RPT19MT05HLAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBNQUNST19O
QU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BS
RURFRklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwK
KyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RP
T19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VU
X0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJ
VElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9F
TFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIElOVkFMSURf
RVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lP
Tl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFZF
UlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwK
KyAgICAgICAgSU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVD
VElWRSwKKyAgICAgICAgRVJST1JfRU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAg
ICAgIEVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdBUk5JTkdfRU5ECisg
ICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2b2lkIHJlcG9ydChJ
RCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQp
OworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisgICAgc3Rk
OjpzdHJpbmcgbWVzc2FnZShJRCBpZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzVjNmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisKK25hbWVzcGFjZSBwcAor
eworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFz
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5j
bHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9u
OworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vz
c29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgor
Ly8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2li
bGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNz
IERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhh
bmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFt
ZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9j
YXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGZkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5j
cHAKQEAgLTAsMCArMSw5MzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5j
bHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUg
IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgor
I2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUg
IlRva2VuaXplci5oIgorCituYW1lc3BhY2UgeworZW51bSBEaXJlY3RpdmVUeXBlCit7CisgICAg
RElSRUNUSVZFX05PTkUsCisgICAgRElSRUNUSVZFX0RFRklORSwKKyAgICBESVJFQ1RJVkVfVU5E
RUYsCisgICAgRElSRUNUSVZFX0lGLAorICAgIERJUkVDVElWRV9JRkRFRiwKKyAgICBESVJFQ1RJ
VkVfSUZOREVGLAorICAgIERJUkVDVElWRV9FTFNFLAorICAgIERJUkVDVElWRV9FTElGLAorICAg
IERJUkVDVElWRV9FTkRJRiwKKyAgICBESVJFQ1RJVkVfRVJST1IsCisgICAgRElSRUNUSVZFX1BS
QUdNQSwKKyAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAorICAgIERJUkVDVElWRV9WRVJTSU9OLAor
ICAgIERJUkVDVElWRV9MSU5FCit9OworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBEaXJlY3Rp
dmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5lKCJkZWZpbmUiKTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9uIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5lIik7CisKKyAgICBpZiAodG9rZW4t
PnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X05PTkU7CisKKyAgICBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9ERUZJTkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0g
a0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVs
c2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9JRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlSWZkZWYpCisg
ICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQg
PT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUVsc2UpCisgICAgICAgIHJldHVy
biBESVJFQ1RJVkVfRUxTRTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZl
RWxpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2Vu
LT50ZXh0ID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJ
RjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAg
IHJldHVybiBESVJFQ1RJVkVfRVJST1I7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0Rp
cmVjdGl2ZVByYWdtYSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxz
ZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVj
dGl2ZVZlcnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKKyAgICBlbHNl
IGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9MSU5FOworCisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMgYm9v
bCBpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQoreworICAg
IHN3aXRjaCAoZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAg
ICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Cisg
ICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdG9rZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJvb2wg
aXNFT0QoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50eXBl
ID09ICdcbicpIHx8ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitzdGF0
aWMgdm9pZCBza2lwVW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikK
K3sKKyAgICB3aGlsZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxleCh0
b2tlbik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIg
YXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2
ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0
JiBtYWNyb1NldCkKK3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YWNyb1NldC5maW5kKG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8g
aXRlci0+c2Vjb25kLnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERl
ZmluZWRQYXJzZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6CisgICAgICAgIG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1NldCks
CisgICAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4tPnRl
eHQgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJl
biA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tl
bi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisKKyAgICAg
ICAgaWYgKHBhcmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIs
IHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAg
ICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgor
ICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT50
ZXh0ID0gZXhwcmVzc2lvbjsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxleGVy
OworICAgIGNvbnN0IE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFn
bm9zdGljczsKK307CisKK0RpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQq
IG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQoZmFs
c2UpLAorICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQp
LAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZUhhbmRsZXIo
ZGlyZWN0aXZlSGFuZGxlcikKK3sKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tl
biogdG9rZW4pCit7CisgICAgZG8KKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgICAgICAgICBtUGFz
dEZpcnN0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05B
TF9VTlRFUk1JTkFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2subG9jYXRpb24sIGJsb2NrLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBl
ID09ICdcbicpKTsKKworICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQgPSB0cnVlOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIGlmIChpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICAvLyBFbXB0
eSBEaXJlY3RpdmUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEaXJlY3RpdmVUeXBl
IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBl
eGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9ncm91cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNv
bmRpdGlvbmFsIGRpcmVjdGl2ZXMuCisgICAgaWYgKHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9u
YWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKKyAgICB7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGly
ZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2Vu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAg
cGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVf
SUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAg
ICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6Cisg
ICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZl
cnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6
CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0g
VG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVk
KHRva2VuLT50ZXh0LCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnRl
eHQpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFj
cm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5u
YW1lID0gdG9rZW4tPnRleHQ7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICB7
CisgICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgorICAg
ICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVuYzsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRva2VuLT50ZXh0KTsKKworICAgICAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUg
KHRva2VuLT50eXBlID09ICcsJyk7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykK
KyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dGV4
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlw
ZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAg
ICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3Nhcnkg
aW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dz
IHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jv
cy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAg
bWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50
IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1l
bnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2Vt
ZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8g
Q2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBt
TWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8p
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQor
eworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT50ZXh0
KTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1N
YWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lG
KTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9r
ZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYp
OworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRp
b25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxv
Y2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tp
cCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXAp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxz
ZUdyb3VwID0gdHJ1ZTsKKyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3Jv
dXA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYg
dGhlcmUgYXJlIGV4dHJhIHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1D
b25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFj
aygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisgICAgeworICAgICAgICAvLyBObyBkaWFn
bm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5lLgorICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9j
ay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChibG9jay5mb3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3QgcGFy
c2UgdGhlIGV4cHJlc3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1p
dCBhIGRpYWdub3N0aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICBi
bG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxpZEdy
b3VwID0gZXhwcmVzc2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
bmRpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX0VORElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3Rh
Y2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAj
ZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2Vu
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05E
SVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVy
cm9yKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfRVJST1IpOworCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8
PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1E
aXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIo
KSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSld
Lgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAg
IGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BB
UkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsK
KworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOwor
ICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnRl
eHQ7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExFRlRfUEFS
RU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAg
ICAgICB2YWx1ZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYg
KHRva2VuLT50eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFs
aWQgPSB2YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJh
Z21hLgorICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAg
IC8vIFdpdGhvdXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hU
X1BBUkVOICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFH
TUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7
CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90
aWZ5IGZvciBlbXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+
aGFuZGxlUHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKKwor
ICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwK
KyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1F
OworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBl
ICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgor
ICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklF
UikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2
YWxpZCkgbmFtZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBDT0xPTjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzon
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05f
QkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dGV4
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElS
RUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2Nh
dGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VW
ZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBpZiAobVBhc3RGaXJzdFN0YXRlbWVudCkKKyAg
ICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpWRVJTSU9OX05P
VF9GSVJTVF9TVEFURU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW51bSBTdGF0ZQorICAgIHsK
KyAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7
CisgICAgaW50IHZlcnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwor
CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9
ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVS
OgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1Rf
SU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZ2ZXJzaW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVS
RkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAg
ICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
dmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5s
b2NhdGlvbiwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9MSU5FKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIExJTkVfTlVNQkVS
LAorICAgICAgICBGSUxFX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsK
KyAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOworICAgIGludCBzdGF0ZSA9IExJTkVfTlVNQkVS
OworCisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1Nl
dCwgbURpYWdub3N0aWNzKTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBMSU5FX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1CRVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmbGluZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRklM
RV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmZpbGUpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09W
RVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Cisg
ICAgfQorCisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRl
ICE9IEZJTEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHZhbGlk
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6
ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJF
UiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29s
IERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9u
YWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJs
b2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2su
c2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9j
ayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnRleHQ7CisgICAgYmxvY2subG9jYXRp
b24gPSB0b2tlbi0+bG9jYXRpb247CisKKyAgICBpZiAoc2tpcHBpbmcoKSkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9u
YWwgZ3JvdXAKKyAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0
aGlzIHdob2xlIGJsb2NrIGlzIHNraXBwZWQuCisgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRv
IHBhcnNlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKKyAgICAgICAgLy8g
ZW1pdCBhIGRpYWdub3N0aWMuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2Vu
KTsKKworICAgICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAgICAgIHN3aXRjaCAoZGlyZWN0
aXZlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgICAg
ICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4
cHJlc3Npb24gPT0gMDsKKyAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lv
biAhPSAwOworICAgIH0KKyAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwor
fQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4p
Cit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwK
KyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKKwor
ICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1E
aWFnbm9zdGljcyk7CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFy
c2VyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgRXhwcmVzc2lvblBhcnNlciBleHBy
ZXNzaW9uUGFyc2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOworCisgICAgaW50IGV4
cHJlc3Npb24gPSAwOworICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICBleHByZXNz
aW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7CisKKyAgICAvLyBXYXJuIGlmIHRo
ZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCisgICAgaWYgKCFpc0VPRCh0b2tl
bikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09O
RElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK2lu
dCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAor
ICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnRleHQpOworICAg
IGludCBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7CisKKyAg
ICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3ZjAwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmgKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9u
LmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVj
dGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisg
ICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAg
ICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJl
Y3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
RW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVu
c2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmco
KSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAg
IGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJl
c3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sK
KyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAgYm9vbCBza2lwR3Jv
dXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBib29sIGZvdW5kRWxz
ZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAgICAgICAgICBza2lw
QmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAg
IGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBib29sIG1QYXN0Rmlyc3RTdGF0
ZW1lbnQ7CisgICAgc3RkOjp2ZWN0b3I8Q29uZGl0aW9uYWxCbG9jaz4gbUNvbmRpdGlvbmFsU3Rh
Y2s7CisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7
CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVyKiBt
RGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42OTgxZGZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDE5NDggQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAq
LworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAw
MSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u
KQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogQXMg
YSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNv
bnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBk
aXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxv
bmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5n
IHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJz
ZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9u
KSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg
bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2Fz
IGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4y
IG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5
IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2Fs
bGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxv
dyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24g
dXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAg
dmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1h
Y3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGlu
Y2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5
IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8K
KworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8q
IEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKworLyog
U2tlbGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisv
KiBQdXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBVc2luZyBsb2NhdGlv
bnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJzdGl0dXRlIHRoZSB2YXJp
YWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKKyNk
ZWZpbmUgeXlsZXggICBwcGxleAorI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKKyNkZWZpbmUgeXls
dmFsICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyBwcGRl
YnVnCisjZGVmaW5lIHl5bmVycnMgcHBuZXJycworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVm
IFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisg
ICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRP
S19DT05TVF9JTlQgPSAyNTgsCisgICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FO
RCA9IDI2MCwKKyAgICAgVE9LX09QX05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisg
ICAgIFRPS19PUF9HRSA9IDI2MywKKyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1Bf
UklHSFQgPSAyNjUsCisgICAgIFRPS19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAy
NjcKKyAgIH07CisjZW5kaWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIFRPS19DT05TVF9JTlQg
MjU4CisjZGVmaW5lIFRPS19PUF9PUiAyNTkKKyNkZWZpbmUgVE9LX09QX0FORCAyNjAKKyNkZWZp
bmUgVE9LX09QX05FIDI2MQorI2RlZmluZSBUT0tfT1BfRVEgMjYyCisjZGVmaW5lIFRPS19PUF9H
RSAyNjMKKyNkZWZpbmUgVE9LX09QX0xFIDI2NAorI2RlZmluZSBUT0tfT1BfUklHSFQgMjY1Cisj
ZGVmaW5lIFRPS19PUF9MRUZUIDI2NgorI2RlZmluZSBUT0tfVU5BUlkgMjY3CisKKworCisKKy8q
IENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorLy8gVHJpZ2dlcmVkIGJ5
IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyB3YXJu
aW5nICItV3Vua25vd24tcHJhZ21hcyIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNz
aW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisK
KyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1
ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZ
U1RZUEU7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNU
WVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVOQUJMRV9OTFMgMAorI2RlZmlu
ZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2Rl
ZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0
Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxl
eGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8g
bmFtZXNwYWNlCisKKworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCog
Y29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHJlYXNvbik7CisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJV
RworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJv
ciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1Jf
VkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVS
Uk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICov
CisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlm
CisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJF
RAordHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNv
bGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFS
RUQgMQorIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKworLyogQ29w
eSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8qIExpbmUg
MjE2IG9mIHlhY2MuYy4gICovCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5k
aWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3Vp
bnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYK
KworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4Owor
I2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWdu
ZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50
ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2
IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBl
X3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9J
TlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2
OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAg
ZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAg
ZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNp
emVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisj
ZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRl
ZiBZWV8KKyMgaWYgWVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8
bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5l
IFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgor
IyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRp
ZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNp
bmciIEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVm
aW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVt
cHR5ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mg
d2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMg
ZGVmaW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCBpKQorI2Vsc2UKK3N0YXRpYyBpbnQK
K1lZSUQgKGkpCisgICAgaW50IGk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIGk7Cit9CisjZW5kaWYK
KworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisvKiBUaGUg
cGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3lt
Ym9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VT
RV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBf
X2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgor
IyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxs
b2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxvY2EgX2Fs
bG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgIGlm
ICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERMSUJfSAor
IyAgICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBl
bmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQ
YWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RB
Q0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUg
b25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBh
bmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5u
b3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBV
c2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBj
b21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisj
ICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
KyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRp
ZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCisg
ICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkgICAg
ICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRs
aWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBfU1RE
TElCX0gKKyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBp
Zm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZp
bmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlG
UkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBk
ZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Cit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVy
ZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93
IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVkIFlZU1RZ
UEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQg
aXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFs
bG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNzOworICBZWVNUWVBFIHl5dnM7CisgIH07CisKKy8q
IFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFu
ZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVu
aW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5v
dWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAgKi8KKyMg
ZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2lu
dDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkK
KworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5k
IGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlmbmRlZiBZWUNPUFkKKyMg
IGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAgZGVmaW5lIFlZQ09QWShU
bywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291
bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBG
cm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAorCSAgWVlTSVpFX1QgeXlp
OwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJICAgIChU
bylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlIChZWUlEICgw
KSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBs
b2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBh
bmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50
cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQor
ICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBm
b3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3Rh
Y2spCQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9U
IHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6
ZSk7CQkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5
eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5
eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJ
CQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0gU3Rh
dGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwg
IDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlM
QVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNk
ZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMu
ICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4g
ICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRl
cy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0t
IEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5l
IFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlUUkFO
U0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/
IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0g
LS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAgICAg
IDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYsICAg
ICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhT
W1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlO
IGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0K
K3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1LCAg
ICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAgIDQ3
LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUsICAg
IDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEn
LXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAgICAt
MSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAg
ICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjksCisg
ICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAgMjks
ICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwgICAg
MjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAgICAt
MSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAgIC0x
LCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjksICAg
IC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwgICAg
LTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAgICAy
OSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlSTElO
RVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwg
ICAgOTAsICAgIDkwLCAgICA5NywgICAgOTgsICAgMTAxLCAgIDEwNCwgICAxMDcsICAgMTEwLCAg
IDExMywKKyAgICAgMTE2LCAgIDExOSwgICAxMjIsICAgMTI1LCAgIDEyOCwgICAxMzEsICAgMTM0
LCAgIDEzNywgICAxNDAsICAgMTQzLAorICAgICAxNTYsICAgMTY5LCAgIDE3MiwgICAxNzUsICAg
MTc4LCAgIDE4MSwgICAxODQKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9W
RVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5n
IG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMs
IHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBj
b25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5k
ZWZpbmVkIiwgIlRPS19DT05TVF9JTlQiLCAiVE9LX09QX09SIiwKKyAgIlRPS19PUF9BTkQiLCAi
J3wnIiwgIideJyIsICInJiciLCAiVE9LX09QX05FIiwgIlRPS19PUF9FUSIsICInPCciLAorICAi
Jz4nIiwgIlRPS19PUF9HRSIsICJUT0tfT1BfTEUiLCAiVE9LX09QX1JJR0hUIiwgIlRPS19PUF9M
RUZUIiwgIicrJyIsCisgICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVE9LX1VOQVJZIiwg
IichJyIsICInficiLCAiJygnIiwgIicpJyIsCisgICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJl
c3Npb24iLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlM
RVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9r
ZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10g
PQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQs
ICAgIDk0LCAgICAzOCwgICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2MywgICAy
NjQsICAgMjY1LCAgIDI2NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAzNywg
ICAyNjcsICAgIDMzLCAgIDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZWVIx
W1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNv
bXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywK
KyAgICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9Owor
CisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGgg
aW4gc3RhdGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0
aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3Iu
ICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAw
LCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIs
ICAgIDI1LAorICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LAorICAgICAgMTAsICAgIDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAg
IDE4LCAgICAxNywgICAgMjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09UT1tO
VEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7
CisgICAgICAtMSwgICAgIDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJ
bmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4g
ICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5
eXBhY3RbXSA9Cit7CisgICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LCAgICA0NiwgICAgMTIsICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEsICAg
IDI3LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYs
ICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAgIDEx
NiwgICAxMzAsICAgMTQzLCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEwLCAg
IC0xMCwgICAgMzcsICAgIDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAgLTEx
Cit9OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQ4IHl5cGdvdG9bXSA9Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZWVRB
QkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAg
SWYKKyAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0
aGUgcnVsZSB3aGljaAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdo
YXQgWVlERUZBQ1Qgc2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8K
KyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFi
bGVbXSA9Cit7CisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAg
NTAsCisgICAgICA1MSwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAg
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MgorfTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAxNywgICAgMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywKKyAg
ICAgIDI0LCAgICAyNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAgIDcs
ICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAgICA5
LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlTVE9T
W1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAg
IHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXN0b3NbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAg
IDI5Cit9OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5
Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmlu
ZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUg
WVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxh
YgorCisKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1h
aW5zIGhlcmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5l
dyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFz
IHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisKKyNkZWZpbmUgWVlGQUlM
CQlnb3RvIHl5ZXJybGFiCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVz
KQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJCQkJCQlcCisg
IGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgewkJCQkJCQkJ
XAorICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwgPSAoVmFsdWUp
OwkJCQkJCVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAg
ICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisg
ICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXll
cnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisg
ICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQor
CisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlM
TE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0u
CisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdo
aWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQp
LiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlM
TE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJ
XAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1
cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkg
IChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47
CVwKKwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xp
bmU7CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFz
dF9jb2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJ
XAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlc
CisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZp
cnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChS
aHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgw
KSkKKyNlbmRpZgorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlv
biBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFs
bHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTog
d2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRlZiBZWV9M
T0NBVElPTl9QUklOVAorIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NB
VElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQu
JWQiLAkJCVwKKwkgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwK
KwkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAg
ZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgor
I2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFy
Z3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXgg
KCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXls
dmFsLCBjb250ZXh0KQorI2VuZGlmCisKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVk
LiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3Rk
aW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBS
SU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2Rv
IHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlc
Cit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBU
eXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRl
YnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRl
cnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJy
LAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRG
IChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZ
SUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlv
dXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4
dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5
eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsK
KyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAg
ICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0
dXJuOworICBZWVVTRSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8
IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5
dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2gg
KHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBv
biBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlf
c3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAq
IGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5
eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAg
IEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNv
bnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5
dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIs
IHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRl
cm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5
eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRw
dXQsICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0
aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVk
ZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0
eXBlX2ludDE2ICp0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50IChib3R0
b20sIHRvcCkKKyAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnRv
cDsKKyNlbmRpZgoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3Ig
KDsgYm90dG9tIDw9IHRvcDsgKytib3R0b20pCisgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQi
LCAqYm90dG9tKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZ
WV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlk
ZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlc
Cit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0
byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVs
ZSwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50
ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5
eXJ1bGU7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0g
eXlyMlt5eXJ1bGVdOworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5
cmxpbmVbeXlydWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBy
dWxlICVkIChsaW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBU
aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5y
aHM7IHl5aSsrKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5
aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1
bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkg
ICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7
CisgICAgfQorfQorCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxl
LCBjb250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJp
bnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVs
dGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZ
WURFQlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9Q
UklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJ
TlQoQm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAv
KiAhWVlERUJVRyAqLworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUg
cGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5J
VERFUFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBz
dGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3Rh
Y2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1
ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0
aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZ
WU1BWERFUFRICisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworDAorCisjaWYg
WVlFUlJPUl9WRVJCT1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJ
QkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMg
IGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChj
b25zdCBjaGFyICp5eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0
cikKKyAgICBjb25zdCBjaGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsK
KyAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsK
KyAgcmV0dXJuIHl5bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBj
cHkKKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmlu
ZWQgX0dOVV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBD
b3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5h
dGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNv
bnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3Qs
IHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRp
ZgoreworICBjaGFyICp5eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOwor
CisgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisg
IHJldHVybiB5eWQgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFt
ZXJyCisvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBp
bmcgYXdheSB1bm5lY2Vzc2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBp
dCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3Vi
bGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMg
YW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNr
c2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVT
IGlzCisgICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Yg
d2hhdCB0aGUgcmVzdWx0CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9U
Cit5eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5
eXN0ciA9PSAnIicpCisgICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIg
Y29uc3QgKnl5cCA9IHl5c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQor
CSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlw
X3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAg
ICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLwor
CSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOwor
CSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMp
CisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAg
ZG9fbm90X3N0cmlwX3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1
cm4geXlzdHJsZW4gKHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikg
LSB5eXJlczsKK30KKyMgZW5kaWYKKworLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1l
c3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0
ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVk
aW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBu
b3QKKyAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhh
dCB3b3VsZCBiZQorICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFu
IG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCisgICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlT
SVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlv
bi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwg
aW50IHl5c3RhdGUsIGludCB5eWNoYXIpCit7CisgIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07
CisKKyAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJl
dHVybiAwOworICBlbHNlCisgICAgeworICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5
eWNoYXIpOworICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5
eXR5cGVdKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVf
VCB5eXNpemUxOworICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsg
WVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5
YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAgICAgaW50IHl5eDsKKworIyBp
ZiAwCisgICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBm
b3JtYXRzIHRoYXQgYXJlCisJIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLworICAgICAgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9y
LCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9y
LCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4
IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAg
IFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3Ig
JXMgb3IgJXMiKTsKKyMgZW5kaWYKKyAgICAgIGNoYXIgKnl5Zm10OworICAgICAgY2hhciBjb25z
dCAqeXlmOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4
IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0
aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltd
ID0gIiBvciAlcyI7CisgICAgICBjaGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJ
ICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQorCQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9B
UkdTX01BWElNVU0gLSAyKQorCQkgICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAg
Y2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVjdGluZzsKKworICAgICAgLyogU3RhcnQgWVlY
IGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNI
RUNLLiAgKi8KKyAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKworICAg
ICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICov
CisgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4
ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Cisg
ICAgICBpbnQgeXljb3VudCA9IDE7CisKKyAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVd
OworICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAg
ICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hl
Y2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAo
eXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXlj
b3VudCA9IDE7CisJCXl5c2l6ZSA9IHl5c2l6ZTA7CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhw
ZWN0ZWQgLSAxXSA9ICdcMCc7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3Vu
dCsrXSA9IHl5dG5hbWVbeXl4XTsKKwkgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAo
MCwgeXl0bmFtZVt5eXhdKTsKKwkgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlz
aXplKTsKKwkgICAgeXlzaXplID0geXlzaXplMTsKKwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlm
bXQsIHl5cHJlZml4KTsKKwkgICAgeXlwcmVmaXggPSB5eW9yOworCSAgfQorCisgICAgICB5eWYg
PSBZWV8oeXlmb3JtYXQpOworICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYp
OworICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5
c2l6ZSA9IHl5c2l6ZTE7CisKKyAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZ
U0laRV9NQVhJTVVNOworCisgICAgICBpZiAoeXlyZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3By
aW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAg
RG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkg
ICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICov
CisJICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKKwkgIGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgq
eXlwID0gKnl5ZikgIT0gJ1wwJykKKwkgICAgeworCSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5
eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJy
ICh5eXAsIHl5YXJnW3l5aSsrXSk7CisJCSAgeXlmICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJ
CXsKKwkJICB5eXArKzsKKwkJICB5eWYrKzsKKwkJfQorCSAgICB9CisJfQorICAgICAgcmV0dXJu
IHl5c2l6ZTsKKyAgICB9Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVh
c2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5
ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVl
cCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXlt
c2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgY29uc3QgY2hhciAqeXltc2c7Cisg
ICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250
ZXh0OworI2VuZGlmCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZVVNFIChjb250ZXh0KTsK
KworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BS
SU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAo
eXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisMCisK
Ky8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisKKyNp
ZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5
cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQg
KmNvbnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZ
WVBBUlNFX1BBUkFNICovCisKKworCisKKworCisvKi0tLS0tLS0tLS0uCit8IHl5cGFyc2UuICB8
CitgLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBB
UlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKENvbnRleHQg
KmNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIENvbnRleHQgKmNv
bnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAq
LworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFk
IHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworLyogTnVtYmVyIG9mIHN5bnRheCBlcnJv
cnMgc28gZmFyLiAgKi8KK2ludCB5eW5lcnJzOworCisgIGludCB5eXN0YXRlOworICBpbnQgeXlu
OworICBpbnQgeXlyZXN1bHQ7CisgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3Jl
IGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICBpbnQgeXllcnJzdGF0dXM7CisgIC8qIExv
b2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4g
ICovCisgIGludCB5eXRva2VuID0gMDsKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVy
IGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIg
eXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXlt
c2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5kaWYKKworICAvKiBUaHJlZSBzdGFja3Mg
YW5kIHRoZWlyIHRvb2xzOgorICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAorICAgICBg
eXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorICAgICBgeXlscyc6IHJlbGF0ZWQg
dG8gbG9jYXRpb25zLgorCisgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBw
b2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxz
ZXdoZXJlLiAgKi8KKworICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICB5eXR5cGVfaW50MTYg
eXlzc2FbWVlJTklUREVQVEhdOworICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKKyAgeXl0
eXBlX2ludDE2ICp5eXNzcDsKKworICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwor
ICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwor
ICBZWVNUWVBFICp5eXZzcDsKKworCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAt
PSAoTiksIHl5c3NwIC09IChOKSkKKworICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERF
UFRIOworCisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUg
YW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZ
UEUgeXl2YWw7CisKKworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0
aGUgcmVkdWNlZCBydWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxk
IGJlIHBvcHBlZC4gICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJy
LCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMg
PSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9r
ZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAg
ICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNv
IHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAg
ICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworCisgIHl5
c3NwID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOworCisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4g
eXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hl
biB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUg
anVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFj
a3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsK
KworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAv
KiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1l
bnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNp
ZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxs
b2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYn
cyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZ
UEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworCisJLyog
RWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhl
CisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8g
YmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0
IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAg
Ki8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwg
eXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eXZzcCksCisKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2
cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYg
WVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAg
ICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhE
RVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFj
a3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFj
a3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5
c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFD
S19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkg
IGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7CisJWVlTVEFD
S19SRUxPQ0FURSAoeXl2cyk7CisKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlz
czEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYK
KyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6
ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisKKyAgICAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5z
aWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFj
a3NpemUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgZ290byB5eWJhY2t1
cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXli
YWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVu
dCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFu
ZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRl
IHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCisg
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAgICBn
b3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tl
biBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBZWUNIQVIgaXMgZWl0aGVy
IFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJS
ZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBp
ZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVP
RjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7
CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBz
ZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVy
cm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4g
PCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3Rv
IHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAg
eworICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVy
cmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKwor
ICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogQ291bnQgdG9rZW5z
IHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorICAgICBz
dGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsKKworICAv
KiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNo
aWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUg
c2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVP
RikKKyAgICB5eWNoYXIgPSBZWUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNw
ID0geXlsdmFsOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQg
LS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDAp
CisgICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRo
ZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5
bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZh
bHVlIG9mIHRoZSBhY3Rpb246CisgICAgIGAkJCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRo
ZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZp
b3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkg
dXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMg
dGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5p
bmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5
eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5
eW4pCisgICAgeworICAgICAgICBjYXNlIDI6CisKKyAgICB7CisgICAgICAgICooY29udGV4dC0+
cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
WVlBQ0NFUFQ7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MSkgLSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBe
ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEz
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNw
WygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyld
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSArICh5
eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAg
ICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAg
c3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3Bb
KDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAg
c3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9j
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19z
dHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6Om9zdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyld
KSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAg
ICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNw
WygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygy
KSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAo
MyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisKKy8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAq
LworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+
ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxl
bik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAq
Kyt5eXZzcCA9IHl5dmFsOworCisKKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUg
cmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNl
ZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJl
ciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5
cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5
eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0
YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9b
eXluIC0gWVlOVE9LRU5TXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0
aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXll
cnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVw
b3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsr
eXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwg
WVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorICAgICAgeworCVlZU0laRV9UIHl5c2l6ZSA9
IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOworCWlmICh5eW1zZ19hbGxvYyA8
IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKKwkgIHsKKwkg
ICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7CisJICAgIGlmICghICh5eXNpemUgPD0g
eXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisJICAgICAgeXlh
bGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKwkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVm
KQorCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworCSAgICB5eW1zZyA9IChjaGFyICopIFlZ
U1RBQ0tfQUxMT0MgKHl5YWxsb2MpOworCSAgICBpZiAoeXltc2cpCisJICAgICAgeXltc2dfYWxs
b2MgPSB5eWFsbG9jOworCSAgICBlbHNlCisJICAgICAgeworCQl5eW1zZyA9IHl5bXNnYnVmOwor
CQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKwkgICAgICB9CisJICB9CisKKwlpZiAo
MCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCisJICB7CisJICAgICh2b2lkKSB5
eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7CisJICAgIHl5ZXJyb3IgKGNv
bnRleHQsIHl5bXNnKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQs
IFlZXygic3ludGF4IGVycm9yIikpOworCSAgICBpZiAoeXlzaXplICE9IDApCisJICAgICAgZ290
byB5eWV4aGF1c3RlZGxhYjsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworCisKKyAg
aWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQg
ZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2Nh
cmQgaXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVy
biBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9G
KQorCSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJy
b3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkg
IHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJl
dXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2Vu
LiAgKi8KKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2Vk
IGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29t
cGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZ
RVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGlu
IHVzZXIKKyAgICAgY29kZS4gICovCisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8g
eXllcnJvcmxhYjsKKworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVs
ZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9Q
U1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlz
c3ApOworICB5eXN0YXRlID0gKnl5c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZ
RVJST1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFj
aCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQor
ICAgIHsKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQ
QUNUX05JTkYpCisJeworCSAgeXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5
biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAg
eXluID0geXl0YWJsZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAg
fQorCX0KKworICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90
IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJ
WVlBQk9SVDsKKworCisgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5
c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7Cisg
ICAgICB5eXN0YXRlID0gKnl5c3NwOworICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgICor
K3l5dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsK
KworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBj
b21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXlhY2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JU
IGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXlhYm9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWZuZGVm
IHl5b3ZlcmZsb3cKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVy
ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhh
dXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRp
ZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBU
WSkKKyAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKwkJ
IHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3lt
Ym9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9S
VCBvciBZWUFDQ0VQVC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJ
TlQgKHl5c3MsIHl5c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAg
eXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZz
cCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3Zl
cmZsb3cKKyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNl
bmRpZgorI2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAg
WVlTVEFDS19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNl
ZC4gICovCisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4
KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsK
KworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRv
a2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGludCB2YWwgPSAwOworICAgICAgICBpZiAoIXRva2VuLT51
VmFsdWUoJnZhbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgfQorICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwp
OworICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBUT0tfT1BfT1I7IGJyZWFrOwor
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9IFRPS19PUF9BTkQ7IGJyZWFrOwor
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gVE9LX09QX05FOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9FUTogdHlwZSA9IFRPS19PUF9FUTsgYnJlYWs7CisgICAg
ICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBUT0tfT1BfR0U7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gVE9LX09QX0xFOyBicmVhazsKKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IFRPS19PUF9SSUdIVDsgYnJlYWs7CisgICAg
ICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IFRPS19PUF9MRUZUOyBicmVhazsKKyAg
ICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0g
J14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNh
c2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBi
cmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysn
OiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsK
KyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBl
ID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAg
IGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygn
OyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBp
ZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+
bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9y
KENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNw
YWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4
ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAg
bURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6
OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0
OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5s
ZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5y
ZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3
aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBi
cmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+
bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9
PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJkMDU5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VS
X0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwor
CisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdu
b3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25Q
YXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4s
IGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25v
c3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVz
c2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2E3ZjUzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEs
Mjg0IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBn
cmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9E
SUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitX
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2Vy
LgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19H
TlVDX18pCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFz
IgorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisj
cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgorI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyB3YXJuaW5nICItV3Vua25vd24tcHJhZ21hcyIKKyNlbGlmIGRlZmluZWQo
X01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisK
KyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2lu
Y2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRl
ICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQor
dHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlw
ZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVO
QUJMRV9OTFMgMAorI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBF
X0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNl
IHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsK
KyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiBy
ZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCislfQorCislcHVyZS1wYXJzZXIKKyVuYW1lLXBy
ZWZpeD0icHAiCislcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CislbGV4LXBhcmFtIHtD
b250ZXh0ICpjb250ZXh0fQorCisleworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwg
Q29udGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIHJlYXNvbik7CislfQorCisldG9rZW4gVE9LX0NPTlNUX0lOVAorJWxlZnQg
VE9LX09QX09SCislbGVmdCBUT0tfT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQg
JyYnCislbGVmdCBUT0tfT1BfRVEgVE9LX09QX05FCislbGVmdCAnPCcgJz4nIFRPS19PUF9MRSBU
T0tfT1BfR0UKKyVsZWZ0IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAorJWxlZnQgJysnICctJwor
JWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBUT0tfVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6
IGV4cHJlc3Npb24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxp
bnQ+KCQxKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAg
OiBUT0tfQ09OU1RfSU5UCisgICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSB8fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9B
TkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhw
cmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOwor
ICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gJDEgIT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfRVEg
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiBUT0tfT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAg
fQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0g
JDEgPD0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgPiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc8JyBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSA8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09Q
X1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0KKyAgICB8
IGV4cHJlc3Npb24gVE9LX09QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwg
JDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Np
b24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3Ry
ZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllf
WkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICQkID0gJDEgJSAkMzsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJy8nIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAg
ICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8
PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAg
ICAgICAgJCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFRPS19V
TkFSWSB7CisgICAgICAgICQkID0gfiAkMjsKKyAgICB9CisgICAgfCAnLScgZXhwcmVzc2lvbiAl
cHJlYyBUT0tfVU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4
cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAg
ICB8ICcoJyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCisl
JQorCitpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAg
aW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOwor
ICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNP
TlNUX0lOVDoKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CisgICAgICAg
IGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1cs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB9CisgICAgICAgICpsdmFscCA9IHN0YXRpY19jYXN0
PFlZU1RZUEU+KHZhbCk7CisgICAgICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19P
UF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09Q
X0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1Bf
TkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VR
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hU
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xF
RlQ7IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2Fz
ZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJy
ZWFrOworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6
IHR5cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwor
ICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUg
PSAnJSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAg
Y2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7
IGJyZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAn
KCc6IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFr
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRo
ZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAh
PSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQor
Cit2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQorewor
ICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElE
X0VYUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50
b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24p
OworfQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFy
c2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVy
KGxleGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhw
cmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBD
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsK
KyAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsK
KyAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29u
dGV4dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2Fz
ZSAxOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAi
Iik7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFs
c2UpOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxf
RVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lu
cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg2OGMxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9JbnB1dC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJJbnB1dC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+
CisjaW5jbHVkZSA8Y3N0cmluZz4KKworbmFtZXNwYWNlIHBwCit7CisKK0lucHV0OjpJbnB1dCgp
IDogbUNvdW50KDApLCBtU3RyaW5nKDApCit7Cit9CisKK0lucHV0OjpJbnB1dChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBt
Q291bnQoY291bnQpLAorICAgIG1TdHJpbmcoc3RyaW5nKQoreworICAgIGFzc2VydChtQ291bnQg
Pj0gMCk7CisgICAgbUxlbmd0aC5yZXNlcnZlKG1Db3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGludCBsZW4gPSBsZW5ndGggPyBsZW5n
dGhbaV0gOiAtMTsKKyAgICAgICAgbUxlbmd0aC5wdXNoX2JhY2sobGVuIDwgMCA/IHN0ZDo6c3Ry
bGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9Cit9CisKK2ludCBJbnB1dDo6cmVhZChjaGFy
KiBidWYsIGludCBtYXhTaXplKQoreworICAgIGludCBuUmVhZCA9IDA7CisgICAgd2hpbGUgKChu
UmVhZCA8IG1heFNpemUpICYmIChtUmVhZExvYy5zSW5kZXggPCBtQ291bnQpKQorICAgIHsKKyAg
ICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5k
ZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgc3Rk
OjptZW1jcHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9j
LmNJbmRleCwgc2l6ZSk7CisgICAgICAgIG5SZWFkICs9IHNpemU7CisgICAgICAgIG1SZWFkTG9j
LmNJbmRleCArPSBzaXplOworCisgICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNo
ZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0cmluZy4KKyAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRl
eCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCisgICAgICAgIHsKKyAgICAgICAgICAgICsr
bVJlYWRMb2Muc0luZGV4OworICAgICAgICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gblJlYWQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0lucHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFj
NzM0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuaApAQCAtMCwwICsxLDQ4IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KKyNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFj
ZSBwcAoreworCisvLyBIb2xkcyBhbmQgcmVhZHMgaW5wdXQgZm9yIExleGVyLgorY2xhc3MgSW5w
dXQKK3sKKyAgcHVibGljOgorICAgIElucHV0KCk7CisgICAgSW5wdXQoaW50IGNvdW50LCBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKworICAgIGludCBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0
aChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGhbaW5kZXhdOyB9CisKKyAgICBpbnQg
cmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKKworICAgIHN0cnVjdCBMb2NhdGlvbgorICAg
IHsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50IGNJ
bmRleDsgIC8vIENoYXIgaW5kZXguCisKKyAgICAgICAgTG9jYXRpb24oKSA6IHNJbmRleCgwKSwg
Y0luZGV4KDApIHsgfQorICAgIH07CisgICAgY29uc3QgTG9jYXRpb24mIHJlYWRMb2MoKSBjb25z
dCB7IHJldHVybiBtUmVhZExvYzsgfQorCisgIHByaXZhdGU6CisgICAgLy8gSW5wdXQuCisgICAg
aW50IG1Db3VudDsKKyAgICBjb25zdCBjaGFyKiBjb25zdCogbVN0cmluZzsKKyAgICBzdGQ6OnZl
Y3RvcjxpbnQ+IG1MZW5ndGg7CisKKyAgICBMb2NhdGlvbiBtUmVhZExvYzsKK307CisKK30gIC8v
IG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9MZXhlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6
On5MZXhlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xl
eGVyLmgKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhF
Ul9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhlcgor
eworICBwdWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBs
ZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlMzA4OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
TWFjcm8uY3BwCkBAIC0wLDAgKzEsMjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFj
cm8uaCIKKworI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSBwcAoreworCitib29sIE1h
Y3JvOjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAodHlw
ZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAmJgor
ICAgICAgICAgICAocGFyYW1ldGVycyA9PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAgICAg
ICAocmVwbGFjZW1lbnRzID09IG90aGVyLnJlcGxhY2VtZW50cyk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL01hY3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2VjMDE0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaApAQCAtMCwwICsxLDQ0IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KKyNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIHBwCit7CisKK3N0
cnVjdCBUb2tlbjsKKworc3RydWN0IE1hY3JvCit7CisgICAgZW51bSBUeXBlCisgICAgeworICAg
ICAgICBrVHlwZU9iaiwKKyAgICAgICAga1R5cGVGdW5jCisgICAgfTsKKyAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0
b3I8VG9rZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNl
KSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhj
b25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OworCisgICAgYm9vbCBwcmVkZWZpbmVkOworICAgIG11
dGFibGUgYm9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBu
YW1lOworICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBSZXBsYWNlbWVudHMgcmVwbGFj
ZW1lbnRzOworfTsKKwordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3Jv
U2V0OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VT
U09SX01BQ1JPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE2YzUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4
cGFuZGVyLmNwcApAQCAtMCwwICsxLDM3MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJN
YWNyb0V4cGFuZGVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3N0cmVh
bT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisK
K25hbWVzcGFjZSBwcAoreworCitjbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExleGVyCit7Cisg
cHVibGljOgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9yOworCisg
ICAgVG9rZW5MZXhlcihUb2tlblZlY3RvciogdG9rZW5zKQorICAgIHsKKyAgICAgICAgdG9rZW5z
LT5zd2FwKG1Ub2tlbnMpOworICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIGlm
IChtSXRlciA9PSBtVG9rZW5zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+
cmVzZXQoKTsKKyAgICAgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqdG9rZW4gPSAqbUl0ZXIr
KzsKKyAgICAgICAgfQorICAgIH0KKworIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRva2VuTGV4ZXIpOworCisgICAgVG9rZW5WZWN0b3IgbVRva2VuczsKKyAgICBU
b2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4cGFuZGVyOjpN
YWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldCht
YWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitNYWNyb0V4
cGFuZGVyOjp+TWFjcm9FeHBhbmRlcigpCit7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsg
aSA8IG1Db250ZXh0U3RhY2suc2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBkZWxldGUgbUNv
bnRleHRTdGFja1tpXTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2Vu
KiB0b2tlbikKK3sKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRva2VuKHRv
a2VuKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2FibGVk
KCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIGlmIChpdGVy
ID09IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25z
dCBNYWNybyYgbWFjcm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5v
dCBleHBhbmRlZCwgaXQgaXMgbmV2ZXIgZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0
RXhwYW5zaW9uRGlzYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoKG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRv
a2VuTGVmdFBhcmVuKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBp
bW1lZGlhdGVseSBhZnRlciB0aGUgbWFjcm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAg
ICAvLyB0aGlzIG1hY3JvIHNob3VsZCBub3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9
Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAg
IGlmIChtUmVzZXJ2ZVRva2VuLmdldCgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNl
cnZlVG9rZW47CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZpcnN0IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisg
ICAgd2hpbGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCkt
PmVtcHR5KCkpCisgICAgeworICAgICAgICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICgh
bUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRT
dGFjay5iYWNrKCktPmdldCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4
ZXItPmxleCh0b2tlbik7CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9r
ZW4oY29uc3QgVG9rZW4mIHRva2VuKQoreworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5i
YWNrKCk7CisgICAgICAgIGNvbnRleHQtPnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0
LT5yZXBsYWNlbWVudHNbY29udGV4dC0+aW5kZXhdID09IHRva2VuKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFtUmVzZXJ2ZVRva2VuLmdldCgpKTsKKyAgICAgICAg
bVJlc2VydmVUb2tlbi5yZXNldChuZXcgVG9rZW4odG9rZW4pKTsKKyAgICB9Cit9CisKK2Jvb2wg
TWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9rZW5MZWZ0UGFyZW4oKQoreworICAgIFRva2VuIHRva2Vu
OworICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICBib29sIGxwYXJlbiA9IHRva2VuLnR5cGUg
PT0gJygnOworICAgIHVuZ2V0VG9rZW4odG9rZW4pOworCisgICAgcmV0dXJuIGxwYXJlbjsKK30K
KworYm9vbCBNYWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25z
dCBUb2tlbiYgaWRlbnRpZmllcikKK3sKKyAgICBhc3NlcnQoIW1hY3JvLmRpc2FibGVkKTsKKyAg
ICBhc3NlcnQoIWlkZW50aWZpZXIuZXhwYW5zaW9uRGlzYWJsZWQoKSk7CisgICAgYXNzZXJ0KGlk
ZW50aWZpZXIudHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgYXNzZXJ0KGlkZW50aWZp
ZXIudGV4dCA9PSBtYWNyby5uYW1lKTsKKworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNl
bWVudHM7CisgICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2Vt
ZW50cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE1hY3JvIGlzIGRpc2FibGVk
IGZvciBleHBhbnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCisgICAgbWFj
cm8uZGlzYWJsZWQgPSB0cnVlOworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1h
Y3JvQ29udGV4dDsKKyAgICBjb250ZXh0LT5tYWNybyA9ICZtYWNybzsKKyAgICBjb250ZXh0LT5y
ZXBsYWNlbWVudHMuc3dhcChyZXBsYWNlbWVudHMpOworICAgIG1Db250ZXh0U3RhY2sucHVzaF9i
YWNrKGNvbnRleHQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6
OnBvcE1hY3JvKCkKK3sKKyAgICBhc3NlcnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7CisKKyAg
ICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKKyAgICBtQ29u
dGV4dFN0YWNrLnBvcF9iYWNrKCk7CisKKyAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7Cisg
ICAgYXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7CisgICAgY29udGV4dC0+bWFjcm8t
PmRpc2FibGVkID0gZmFsc2U7CisgICAgZGVsZXRlIGNvbnRleHQ7Cit9CisKK2Jvb2wgTWFjcm9F
eHBhbmRlcjo6ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7Cisg
ICAgcmVwbGFjZW1lbnRzLT5jbGVhcigpOworICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjpr
VHlwZU9iaikKKyAgICB7CisgICAgICAgIHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxh
Y2VtZW50cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBs
YWNlbWVudHMuZW5kKCkpOworCisgICAgICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5F
X18iOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklM
RV9fIjsKKworICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOwor
ICAgICAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmZyb250KCk7CisgICAgICAg
ICAgICBpZiAobWFjcm8ubmFtZSA9PSBrTGluZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8
PCBpZGVudGlmaWVyLmxvY2F0aW9uLmxpbmU7CisgICAgICAgICAgICAgICAgcmVwbC50ZXh0ID0g
c3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8u
bmFtZSA9PSBrRmlsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9zdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxv
Y2F0aW9uLmZpbGU7CisgICAgICAgICAgICAgICAgcmVwbC50ZXh0ID0gc3RyZWFtLnN0cigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGFzc2VydChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpOworICAgICAgICBzdGQ6OnZl
Y3RvcjxNYWNyb0FyZz4gYXJnczsKKyAgICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRl
cnMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlm
aWVyLCAmYXJncykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVwbGFj
ZU1hY3JvUGFyYW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVudHMpOworICAgIH0KKworICAgIGZv
ciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQorICAg
IHsKKyAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmF0KGkpOworICAgICAgICBp
ZiAoaSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaW4g
dGhlIHJlcGxhY2VtZW50IGxpc3QgaW5oZXJpdHMgdGhlIHBhZGRpbmcKKyAgICAgICAgICAgIC8v
IHByb3BlcnRpZXMgb2YgdGhlIGlkZW50aWZpZXIgdG9rZW4uCisgICAgICAgICAgICByZXBsLnNl
dEF0U3RhcnRPZkxpbmUoaWRlbnRpZmllci5hdFN0YXJ0T2ZMaW5lKCkpOworICAgICAgICAgICAg
cmVwbC5zZXRIYXNMZWFkaW5nU3BhY2UoaWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmVwbC5sb2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RN
YWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncykKK3sKKyAgICBUb2tl
biB0b2tlbjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworICAgIGFzc2VydCh0b2tlbi50eXBlID09
ICcoJyk7CisKKyAgICBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgZm9yIChpbnQg
b3BlblBhcmVucyA9IDE7IG9wZW5QYXJlbnMgIT0gMDsgKQorICAgIHsKKyAgICAgICAgZ2V0VG9r
ZW4oJnRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci50ZXh0KTsKKyAgICAgICAgICAg
IC8vIERvIG5vdCBsb3NlIEVPRiB0b2tlbi4KKyAgICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4p
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBp
c0FyZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHRva2VuIGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYXJn
dW1lbnQuCisgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgJygnOgorICAgICAgICAgICAgKytvcGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcg
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAg
ICAgICAtLW9wZW5QYXJlbnM7CisgICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgLy8g
VGhlIGluZGl2aWR1YWwgYXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWEgdG9rZW5zLCBi
dXQKKyAgICAgICAgICAgIC8vIHRoZSBjb21tYSB0b2tlbnMgYmV0d2VlbiBtYXRjaGluZyBpbm5l
ciBwYXJlbnRoZXNlcyBkbyBub3QKKyAgICAgICAgICAgIC8vIHNlcGVyYXRlIGFyZ3VtZW50cy4K
KyAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zID09IDEpIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0Fy
ZygpKTsKKyAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpc0FyZykKKyAgICAgICAg
eworICAgICAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmJhY2soKTsKKyAgICAgICAgICAg
IC8vIEluaXRpYWwgd2hpdGVzcGFjZSBpcyBub3QgcGFydCBvZiB0aGUgYXJndW1lbnQuCisgICAg
ICAgICAgICBpZiAoYXJnLmVtcHR5KCkpIHRva2VuLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7
CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNvbnN0IE1hY3JvOjpQYXJhbWV0ZXJzJiBwYXJhbXMgPSBtYWNyby5wYXJhbWV0ZXJzOwor
ICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGVtcHR5IGFyZ3VtZW50LCBpdCBpcyBlcXVpdmFs
ZW50IHRvIG5vIGFyZ3VtZW50LgorICAgIGlmIChwYXJhbXMuZW1wdHkoKSAmJiAoYXJncy0+c2l6
ZSgpID09IDEpICYmIGFyZ3MtPmZyb250KCkuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGFyZ3Mt
PmNsZWFyKCk7CisgICAgfQorICAgIC8vIFZhbGlkYXRlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRz
LgorICAgIGlmIChhcmdzLT5zaXplKCkgIT0gcGFyYW1zLnNpemUoKSkKKyAgICB7CisgICAgICAg
IERpYWdub3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNpemUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6
ZSgpID8KKyAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fRkVXX0FSR1MgOgorICAg
ICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19NQU5ZX0FSR1M7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KGlkLCBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnRleHQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUHJlLWV4cGFuZCBlYWNo
IGFyZ3VtZW50IGJlZm9yZSBzdWJzdGl0dXRpb24uCisgICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMg
ZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkgYXJlCisgICAgLy8gaW5zZXJ0
ZWQgaW50byB0aGUgbWFjcm8gYm9keS4KKyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwg
YXJncy0+c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+
YXQoaSk7CisgICAgICAgIFRva2VuTGV4ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAgIE1hY3JvRXhw
YW5kZXIgZXhwYW5kZXIoJmxleGVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisKKyAgICAg
ICAgYXJnLmNsZWFyKCk7CisgICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB3
aGlsZSAodG9rZW4udHlwZSAhPSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAg
YXJnLnB1c2hfYmFjayh0b2tlbik7CisgICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFu
ZGVyOjpyZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBh
cmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8
VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8
IG1hY3JvLnJlcGxhY2VtZW50cy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRv
a2VuJiByZXBsID0gbWFjcm8ucmVwbGFjZW1lbnRzW2ldOworICAgICAgICBpZiAocmVwbC50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVu
dHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IE9wdGltaXplIHRoaXMuCisgICAgICAgIC8vIFRoZXJl
IGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBtYWNybyBwYXJhbXMgZXZlcnkgdGltZS4KKyAgICAg
ICAgLy8gVGhlIHBhcmFtIGluZGV4IGNhbiBiZSBjYWNoZWQgd2l0aCB0aGUgcmVwbGFjZW1lbnQg
dG9rZW4uCisgICAgICAgIE1hY3JvOjpQYXJhbWV0ZXJzOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
c3RkOjpmaW5kKAorICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBtYWNyby5w
YXJhbWV0ZXJzLmVuZCgpLCByZXBsLnRleHQpOworICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5w
YXJhbWV0ZXJzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1
c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgc3RkOjpzaXplX3QgaUFyZyA9IHN0ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdp
bigpLCBpdGVyKTsKKyAgICAgICAgY29uc3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107Cisg
ICAgICAgIGlmIChhcmcuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpzaXplX3QgaVJlcGwgPSByZXBsYWNlbWVudHMtPnNp
emUoKTsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNlcnQocmVwbGFjZW1lbnRzLT5lbmQoKSwg
YXJnLmJlZ2luKCksIGFyZy5lbmQoKSk7CisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCB0b2tl
biBpbmhlcml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJvbQorICAgICAgICAvLyBtYWNybyByZXBs
YWNlbWVudCB0b2tlbi4KKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hdChpUmVwbCkuc2V0SGFzTGVh
ZGluZ1NwYWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgIH0KK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiNjc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRl
ci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTUFDUk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8bWVt
b3J5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xh
c3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sK
KyAgcHVibGljOgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFj
cm9TZXQsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBh
bmRlcigpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZh
dGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisg
ICAgdm9pZCBnZXRUb2tlbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25z
dCBUb2tlbiYgdG9rZW4pOworICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAg
IGJvb2wgcHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIpOworICAgIHZvaWQgcG9wTWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3Qg
TWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50
cyk7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29s
IGNvbGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1Bh
cmFtcyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNy
b0NvbnRleHQKKyAgICB7CisgICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc3Rk
OjpzaXplX3QgaW5kZXg7CisgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7
CisKKyAgICAgICAgTWFjcm9Db250ZXh0KCkgOiBtYWNybygwKSwgaW5kZXgoMCkgeyB9CisgICAg
ICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBpbmRleCA9PSByZXBsYWNlbWVudHMuc2l6
ZSgpOyB9CisgICAgICAgIGNvbnN0IFRva2VuJiBnZXQoKSB7IHJldHVybiByZXBsYWNlbWVudHNb
aW5kZXgrK107IH0KKyAgICAgICAgdm9pZCB1bmdldCgpIHsgYXNzZXJ0KGluZGV4ID4gMCk7IC0t
aW5kZXg7IH0KKyAgICB9OworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1h
Y3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7CisKKyAgICBzdGQ6OmF1dG9f
cHRyPFRva2VuPiBtUmVzZXJ2ZVRva2VuOworICAgIHN0ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+
IG1Db250ZXh0U3RhY2s7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29y
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
UHJlcHJvY2Vzc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTAy
NGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgIlByZXByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSA8Y2Fzc2Vy
dD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3NCYXNlLmgiCisj
aW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRl
ICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6
ZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCit7Cisg
ICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAg
IFRva2VuaXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNl
cjsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJ
bXBsKERpYWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFu
ZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAg
ICAgICAgdG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXpl
ciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBh
bmRlcigmZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0KK307
CisKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhh
bmRsZXIpCit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywg
ZGlyZWN0aXZlSGFuZGxlcik7Cit9CisKK1ByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCit7
CisgICAgZGVsZXRlIG1JbXBsOworfQorCitib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBzdGF0
aWMgY29uc3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBw
cmUtZGVmaW5lZCBtYWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7Cisg
ICAgcHJlZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9f
VkVSU0lPTl9fIiwga0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAx
KTsKKworICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKTsKK30KKwordm9pZCBQcmVwcm9jZXNzb3I6OnByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIq
IG5hbWUsIGludCB2YWx1ZSkKK3sKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAg
IHN0cmVhbSA8PCB2YWx1ZTsKKworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUgPSBU
b2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnRleHQgPSBzdHJlYW0uc3RyKCk7CisKKyAgICBN
YWNybyBtYWNybzsKKyAgICBtYWNyby5wcmVkZWZpbmVkID0gdHJ1ZTsKKyAgICBtYWNyby50eXBl
ID0gTWFjcm86OmtUeXBlT2JqOworICAgIG1hY3JvLm5hbWUgPSBuYW1lOworICAgIG1hY3JvLnJl
cGxhY2VtZW50cy5wdXNoX2JhY2sodG9rZW4pOworCisgICAgbUltcGwtPm1hY3JvU2V0W25hbWVd
ID0gbWFjcm87Cit9CisKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQorewor
ICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAg
ICB7CisgICAgICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90
IGJlIHJldHVybmluZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAv
LyBDb252ZXJ0IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBv
cnQKKyAgICAgICAgICAvLyBkaWFnbm9zdGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9I
QVNIOgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgVG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBp
bnQgdmFsID0gMDsKKyAgICAgICAgICAgIGlmICghdG9rZW4tPmlWYWx1ZSgmdmFsKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBEbyBub3QgbWFyayB0aGUgdG9rZW4gYXMgaW52
YWxpZC4KKyAgICAgICAgICAgICAgICAvLyBKdXN0IGVtaXQgdGhlIGRpYWdub3N0aWMgYW5kIHJl
c2V0IHZhbHVlIHRvIDAuCisgICAgICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgICAgICAgICAgdG9rZW4tPnRleHQuYXNzaWduKCIwIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IH0KKyAgICAgICAgICBjYXNlIFRva2VuOjpDT05TVF9GTE9BVDoKKyAgICAgICAgICB7CisgICAg
ICAgICAgICBmbG9hdCB2YWwgPSAwOworICAgICAgICAgICAgaWYgKCF0b2tlbi0+ZlZhbHVlKCZ2
YWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSB0
b2tlbiBhcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIC8vIEp1c3QgZW1pdCB0aGUgZGlhZ25v
c3RpYyBhbmQgcmVzZXQgdmFsdWUgdG8gMC4wLgorICAgICAgICAgICAgICAgIG1JbXBsLT5kaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpGTE9BVF9PVkVSRkxPVywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKKyAgICAgICAgICAgICAgICB0b2tlbi0+dGV4dC5hc3NpZ24oIjAuMCIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFsaWRUb2tlbiA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgorICAgICAg
ICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTlVN
QkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRv
a2VuOjpQUF9PVEhFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41ZmUzNWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaApA
QCAtMCwwICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfUFJFUFJPQ0VTU09SX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQ
Uk9DRVNTT1JfSF8KKworI2luY2x1ZGUgInBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAorewor
CitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitzdHJ1Y3QgUHJl
cHJvY2Vzc29ySW1wbDsKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgUHJlcHJvY2Vzc29yCit7Cisg
IHB1YmxpYzoKKyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJl
Y3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKKyAgICB+UHJlcHJvY2Vzc29yKCk7CisK
KyAgICAvLyBjb3VudDogc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0
cmluZyBhbmQgbGVuZ3RoIGFycmF5cy4KKyAgICAvLyBzdHJpbmc6IHNwZWNpZmllcyBhbiBhcnJh
eSBvZiBwb2ludGVycyB0byBzdHJpbmdzLgorICAgIC8vIGxlbmd0aDogc3BlY2lmaWVzIGFuIGFy
cmF5IG9mIHN0cmluZyBsZW5ndGhzLgorICAgIC8vIElmIGxlbmd0aCBpcyBOVUxMLCBlYWNoIHN0
cmluZyBpcyBhc3N1bWVkIHRvIGJlIG51bGwgdGVybWluYXRlZC4KKyAgICAvLyBJZiBsZW5ndGgg
aXMgYSB2YWx1ZSBvdGhlciB0aGFuIE5VTEwsIGl0IHBvaW50cyB0byBhbiBhcnJheSBjb250YWlu
aW5nCisgICAgLy8gYSBzdHJpbmcgbGVuZ3RoIGZvciBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5n
IGVsZW1lbnRzIG9mIHN0cmluZy4KKyAgICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGxlbmd0aCBh
cnJheSBtYXkgY29udGFpbiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcg
c3RyaW5nIG9yIGEgdmFsdWUgbGVzcyB0aGFuIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5n
CisgICAgLy8gaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworICAgIC8vIEFk
ZHMgYSBwcmUtZGVmaW5lZCBtYWNyby4KKyAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNo
YXIqIG5hbWUsIGludCB2YWx1ZSk7CisKKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisg
IHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7
CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKiBtSW1wbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBw
cAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42OTgyNjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oCkBAIC0wLDAg
KzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9T
T1VSQ0VfTE9DQVRJT05fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9M
T0NBVElPTl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7
CisgICAgU291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNl
TG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29s
IGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7Cisg
ICAgfQorCisgICAgaW50IGZpbGU7CisgICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlv
biYgcmhzKQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1l
c3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElP
Tl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42N2Y1MGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKQEAgLTAsMCArMSw4MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKwor
I2luY2x1ZGUgIm51bWVyaWNfbGV4LmgiCisKK25hbWVzcGFjZSBwcAoreworCit2b2lkIFRva2Vu
OjpyZXNldCgpCit7CisgICAgdHlwZSA9IDA7CisgICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9u
ID0gU291cmNlTG9jYXRpb24oKTsKKyAgICB0ZXh0LmNsZWFyKCk7Cit9CisKK2Jvb2wgVG9rZW46
OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICh0eXBlID09
IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKKyAg
ICAgICAgICAgKGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgorICAgICAgICAgICAodGV4
dCA9PSBvdGhlci50ZXh0KTsKK30KKwordm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29s
IHN0YXJ0KQoreworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0Zf
TElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOworfQor
Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAo
c3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAg
ICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRF
eHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAg
ICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7Cit9CisKK2Jvb2wgVG9rZW46OmlWYWx1ZShpbnQqIHZh
bHVlKSBjb25zdAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0lOVCk7CisgICAgcmV0dXJu
IG51bWVyaWNfbGV4X2ludCh0ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wgVG9rZW46OnVWYWx1ZSh1
bnNpZ25lZCBpbnQqIHZhbHVlKSBjb25zdAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0lO
VCk7CisgICAgcmV0dXJuIG51bWVyaWNfbGV4X2ludCh0ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wg
VG9rZW46OmZWYWx1ZShmbG9hdCogdmFsdWUpIGNvbnN0Cit7CisgICAgYXNzZXJ0KHR5cGUgPT0g
Q09OU1RfRkxPQVQpOworICAgIHJldHVybiBudW1lcmljX2xleF9mbG9hdCh0ZXh0LCB2YWx1ZSk7
Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3Qg
VG9rZW4mIHRva2VuKQoreworICAgIGlmICh0b2tlbi5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICAg
ICAgb3V0IDw8ICIgIjsKKworICAgIG91dCA8PCB0b2tlbi50ZXh0OworICAgIHJldHVybiBvdXQ7
Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTUzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgKQEAgLTAs
MCArMSwxMDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9UT0tFTl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KKworI2lu
Y2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiU291cmNlTG9j
YXRpb24uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBUb2tlbgoreworICAgIGVudW0g
VHlwZQorICAgIHsKKyAgICAgICAgTEFTVCA9IDAsICAvLyBFT0YuCisKKyAgICAgICAgSURFTlRJ
RklFUiA9IDI1OCwKKworICAgICAgICBDT05TVF9JTlQsCisgICAgICAgIENPTlNUX0ZMT0FULAor
CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAg
ICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBP
UF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAor
ICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FT
U0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAg
ICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9Q
X1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FT
U0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOLAorCisgICAgICAgIC8vIFByZXByb2Nlc3Npbmcg
dG9rZW4gdHlwZXMuCisgICAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSB1c2VkIGJ5IHRoZSBwcmVw
cm9jZXNzb3IgaW50ZXJuYWxseS4KKyAgICAgICAgLy8gUHJlcHJvY2Vzc29yIGNsaWVudHMgbXVz
dCBub3QgZGVwZW5kIG9yIGNoZWNrIGZvciB0aGVtLgorICAgICAgICBQUF9IQVNILAorICAgICAg
ICBQUF9OVU1CRVIsCisgICAgICAgIFBQX09USEVSCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisg
ICAgeworICAgICAgICBBVF9TVEFSVF9PRl9MSU5FICAgPSAxIDw8IDAsCisgICAgICAgIEhBU19M
RUFESU5HX1NQQUNFICA9IDEgPDwgMSwKKyAgICAgICAgRVhQQU5TSU9OX0RJU0FCTEVEID0gMSA8
PCAyCisgICAgfTsKKworICAgIFRva2VuKCkgOiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAg
IHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0
OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxp
bmUuCisgICAgLy8gSXQgZGlzcmVnYXJkcyBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJv
b2wgYXRTdGFydE9mTGluZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJ
TkUpICE9IDA7IH0KKyAgICB2b2lkIHNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAg
ICBib29sIGhhc0xlYWRpbmdTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFE
SU5HX1NQQUNFKSAhPSAwOyB9CisgICAgdm9pZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFj
ZSk7CisKKyAgICBib29sIGV4cGFuc2lvbkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gKGZsYWdz
ICYgRVhQQU5TSU9OX0RJU0FCTEVEKSAhPSAwOyB9CisgICAgdm9pZCBzZXRFeHBhbnNpb25EaXNh
YmxlZChib29sIGRpc2FibGUpOworCisgICAgLy8gQ29udmVydHMgdGV4dCBpbnRvIG51bWVyaWMg
dmFsdWUgZm9yIENPTlNUX0lOVCBhbmQgQ09OU1RfRkxPQVQgdG9rZW4uCisgICAgLy8gUmV0dXJu
cyBmYWxzZSBpZiB0aGUgcGFyc2VkIHZhbHVlIGNhbm5vdCBmaXQgaW50byBhbiBpbnQgb3IgZmxv
YXQuCisgICAgYm9vbCBpVmFsdWUoaW50KiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCB1VmFsdWUo
dW5zaWduZWQgaW50KiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCBmVmFsdWUoZmxvYXQqIHZhbHVl
KSBjb25zdDsKKworICAgIGludCB0eXBlOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBT
b3VyY2VMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICBzdGQ6OnN0cmluZyB0ZXh0OworfTsKKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQor
eworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxo
cy5lcXVhbHMocmhzKTsKK30KKworZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6
Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKKworfSAgLy8gbmFtZXBzYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTc2
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzU2IEBACisjbGluZSAx
NiAiLi9Ub2tlbml6ZXIubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1n
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5l
IDEzICIuL1Rva2VuaXplci5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGlu
dAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5l
IEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZ
WV9GTEVYX01JTk9SX1ZFUlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04g
MzUKKyNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQor
I2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNv
bXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJz
LiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVy
cy4gKi8KKworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBG
TEVYSU5UX0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5
cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVk
IChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyog
Qzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBz
dGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBp
bnQgdHlwZXMuIAorICovCisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19T
VERDX0xJTUlUX01BQ1JPUyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBl
ZGVmIGludDhfdCBmbGV4X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0
eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQx
Nl90OwordHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxl
eF91aW50MzJfdDsKK3R5cGVkZWYgdWludDY0X3QgZmxleF91aW50NjRfdDsKKyNlbHNlCit0eXBl
ZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQx
Nl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZs
ZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90Owor
dHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5OSAqLwor
CisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVm
aW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZf
TUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisj
aWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4
MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAg
ICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZf
TUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVm
aW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYg
VUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYK
KyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUz
NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAg
ICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8K
KworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9k
aWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkvKiAhIF9f
Y3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFz
IDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisK
KyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVz
ICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAorI2Vsc2UK
KyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUu
ICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZl
LCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBmb3IgdXNl
IGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAorICog
d2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhl
bmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1
bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9pbnRlci4g
Ki8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9Z
WV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyogRm9yIGNv
bnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKKyAg
IGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5eWluIHl5
Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4dHJhIHl5
Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5lIHl5dGV4
dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9k
ZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkg
b3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGlu
ZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBv
ZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgorCisv
KiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2Fu
IGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRo
ZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZp
bmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZ
X1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQg
c3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIg
KyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3Np
bmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5
eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUg
b2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisjZGVmaW5l
IFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxh
cmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1
ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAy
KSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZF
Ul9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZ
WV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRl
ZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9T
Q0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFT
VF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCisgICAgCisvKiBSZXR1
cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBp
bnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyog
VW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxl
c3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNy
b19hcmcpO1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxl
c3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyog
c2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUg
dW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lm
bmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZG
RVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmls
ZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1
Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6
ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJ
ICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1i
ZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgor
CSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0
aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJ
ICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQg
dG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBX
aGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQK
KwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2Ug
Z2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRj
aGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50
ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJl
Z2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBv
biB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9i
b2w7CisKKyAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAg
IGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBX
aGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUK
KwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1
ZmZlcl9zdGF0dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZF
Ul9OT1JNQUwgMQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxs
IHNvbWUgdGV4dCB0byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlf
RU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRp
bmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBo
YXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBw
b3NzaWJsZSBiYWNraW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVP
Riwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHBwcmVzdGFydCgpKSwg
c28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50
aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VP
Rl9QRU5ESU5HIDIKKworCX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUg
Ki8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGlu
IGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMg
aW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVG
RkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8s
IGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAq
IE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5Lgor
ICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFj
a1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCisKK3ZvaWQgcHByZXN0YXJ0IChGSUxFICppbnB1
dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVG
RkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NU
QVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZ
WV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBw
cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBw
cF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBw
cF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9D
VVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZm
ZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlf
QlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBj
aGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAq
cHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnBwcmVhbGxv
YyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwZnJlZSAo
dm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBw
X2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3Rp
dmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICBwcGVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpF
ICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19p
bnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2wo
YXRfYm9sKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9h
dF9ib2wgPSBhdF9ib2w7IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNk
ZWZpbmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNp
Z25lZCBjaGFyIFlZX0NIQVI7CisKK3R5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZp
bmUgeXl0ZXh0X3B0ciB5eXRleHRfcgorCitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUg
eXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRl
cm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rp
b24gLSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwK
Kwl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9j
cCAtIHl5X2JwKTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0g
J1wwJzsgXAorCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxF
UyAzNworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4CisvKiBUaGlzIHN0cnVjdCBpcyBub3Qg
dXNlZCBpbiB0aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4g
Ki8KK3N0cnVjdCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJ
ZmxleF9pbnQzMl90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2FjY2VwdFs4NF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
IDM4LCAgIDM2LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAorICAgICAgICA3LCAgIDMzLCAgIDMz
LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAorICAgICAgICA5LCAg
IDMzLCAgIDMzLCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAorICAg
ICAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAg
IDIzLAorICAgICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5
LCAgIDExLCAgIDExLAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAg
IDE3LCAgIDE1LCAgICA4LCAgIDMxLAorICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1
LCAgICA2LCAgIDExLCAgIDEwLCAgIDExLCAgICAxLAorICAgICAgIDEwLCAgIDExLCAgICAwLCAg
IDEwLCAgICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgIDEw
LCAgICAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZd
ID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKKyAgICAg
ICAgOSwgICAxMCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAx
NiwKKyAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwg
ICAgOSwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAy
MSwgICAyMSwgICAyMiwgICAyMSwKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKKyAgICAgICAgOSwgICAgMSwg
ICAgOSwgICAyNSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAg
IDIyLCAgIDIxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDI0LAorICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9
IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KKyAgICB7ICAg
MCwKKyAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAg
NSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwg
ICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0g
PQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAg
MTUwLCAgMTU5LCAgMTQ1LCAgMTI4LAorICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTEx
LCAgIDIxLCAgIDI1LCAgIDMwLCAgIDI5LCAgIDM2LAorICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAg
IDQ1LCAgICAwLCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAorICAgICAgIDY1LCAgIDcz
LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAorICAgICAg
MTU5LCAgMTU5LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgz
LAorICAgICAgIDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAg
ICAwLCAgMTU5LAorICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4
LCAgICAwLCAgMTEwLCAgICAwLAorICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAg
MTU5LCAgMTU5LCAgMTAxLCAgIDk3LCAgMTEyLAorICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQw
LCAgIDI4LCAgMTQ1LCAgMTUwLCAgMTUyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9kZWZbODldID0KKyAgICB7ICAgMCwKKyAgICAgICA4MywgICAgMSwgICA4NCwg
ICA4NCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAg
ICAyMCwgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4
MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4
MywgICAyMCwgICAyMCwgICA0NywKKyAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4
NiwgICA4MywgICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKKyAgICAgICA0NywgICA1MCwg
ICA4MywgICA1MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKKyAgICAgICA4
MywgICA4MywgICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQorICAgIHsgICAwLAorICAg
ICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAg
IDE1LAorICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIy
LCAgIDIzLCAgIDI0LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAg
IDI5LCAgIDMwLCAgIDI5LCAgIDMwLAorICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYw
LCAgIDMxLCAgIDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAorICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAg
IDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAorICAgICAgIDQ4LCAgIDQ4
LCAgIDQ5LCAgIDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAorICAgICAg
IDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUw
LAorICAgICAgIDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAg
IDY2LCAgIDUwLAorICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1
LCAgIDcxLCAgIDcxLCAgIDcxLAorICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAg
IDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgODMsICAgODMsICAgNTAsICAg
NTAsICAgNTAsICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCisgICAgICAgNzQsICAgNzQs
ICAgNjcsICAgNjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCisgICAgICAg
NzgsICAgNzgsICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgs
CisgICAgICAgMzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAg
ODIsICAgODIsCisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQs
ICAgMzMsICAgNjQsICAgNjQsCisgICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAg
NzUsICAgNzUsICAgODMsICAgIDUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Noa1sxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAg
NCwKKyAgICAgICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwg
ICAxOSwgICAxNiwKKyAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAx
OCwgICAxOSwgICAyMCwgICA1NCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwg
ICA0OCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMSwgICAyMSwgICAyMSwgICAy
NCwgICAyNCwgICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKKyAgICAgICA0OSwgICA0OSwg
ICAyNywgICA0MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKKyAgICAgICA1
MiwgICA0MywgICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywK
KyAgICAgICA1MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1
MCwgICA1MCwKKworICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUx
LCAgIDc5LCAgIDc5LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAg
IDc4LCAgIDc4LCAgIDc4LCAgIDIzLCAgIDY3LAorICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgw
LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAorICAgICAgIDEyLCAgIDcyLCAg
IDcyLCAgIDcyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAor
ICAgICAgIDg3LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgz
LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzCisgICAgfSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0
aGF0IGl0J2xsIGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQu
CisgKi8KKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZp
bmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JF
X0FESiAwCisjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBH
TFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIw
MTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxT
TyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisjaW5jbHVkZSAiVG9rZW5p
emVyLmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJUb2tlbi5o
IgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5l
cmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5n
IFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2Ug
dGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJl
ci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAg
ICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxp
bmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3Bh
Y2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAor
ICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0g
Jnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+
c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkg
XAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxl
bmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5
bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0g
eXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgw
KTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3Vs
dCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFM
IDAKKyNkZWZpbmUgQ09NTUVOVCAxCisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5p
emVyOjpDb250ZXh0KgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJh
bnQgc2Nhbm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVm
aW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFf
cjsKKworICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJl
ZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5
b3V0X3I7CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9w
IG9mIHN0YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFj
aXR5IG9mIHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsg
LyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICB5
eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7CisgICAgY2hhciAq
eXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7CisgICAgaW50
IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRy
OworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNr
OworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAgY2hhciog
eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGludCB5eWxpbmVub19yOworICAgIGludCB5
eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlfbW9yZV9m
bGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKKwor
ICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKKworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3Qg
Ki8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CisgICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFy
ZSBpbmNsdWRlZAorICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLworICAg
ICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCisgICAgCisgICAgIyAgICBkZWZpbmUg
eXlsbG9jIHl5Zy0+eXlsbG9jX3IKKyAgICAKK2ludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nh
bm5lcik7CisKK2ludCBwcGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5l
ZCx5eXNjYW5fdCogc2Nhbm5lcik7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4K
KyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3Ig
Y29udmVuaWVuY2UuICovCisKK2ludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKworaW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNl
dF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWV9FWFRS
QV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9l
eHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CitGSUxFICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfaW4g
IChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfb3V0
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3l5X3NpemVfdCBwcGdldF9sZW5nICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworY2hhciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK2ludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0
X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQ
RSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2x2YWwg
KFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgICAg
WVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisgICAgICAg
IHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJy
aWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlvbiAxLgorICovCisKKyNpZm5k
ZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgcHB3
cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitleHRlcm4gaW50IHBwd3JhcCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIK
K3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAs
eXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0
YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5u
ZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVz
CitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRp
YyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisKKyNlbmRpZgorCisv
KiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVm
IFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYK
KworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJk
IG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCks
IGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNl
IGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwg
eXlvdXQgKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYi
LiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVk
IGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1
ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQl5eV9zaXplX3Qg
bjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRj
KCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFy
KSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAor
CQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1Io
ICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJ
fSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZy
ZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsg
XAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1Io
ICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9
IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKK1wK
KworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdl
IGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2FudCBhbiBleHRy
YSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgKiBzb21l
IGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgorICov
CisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05V
TEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRp
b24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUg
WVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFsIGVycm9y
LiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cp
IHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5kaWYKKworLyogZW5kIHRhYmxl
cyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVs
dCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2Vy
IGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNk
ZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCBwcGxleCBcCisgICAgICAgICAg
ICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNj
YW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwKKyAgICAgICAg
ICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwg
eXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisKKy8qIENvZGUgZXhl
Y3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXls
ZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VTRVJfQUNUSU9OCisj
ZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUg
ZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUgWVlfQlJFQUsg
YnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElP
TgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29y
ay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9h
Y3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisgICAgLyogTGluZSBjb21tZW50ICovCisKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFy
YW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CisKKwlpZiAoICF5eWctPnl5X2luaXQg
KQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlf
VVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55
eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQor
CQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsK
KworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQlwcGVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXBwX2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwkJfQorCisJCXBwX2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CisKKwl3aGlsZSAoIDEgKQkJLyogbG9v
cHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5
X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJ
eXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKK3l5
X21hdGNoOgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlf
U0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
CisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0
YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJCX0KKwkJ
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQor
CQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9z
dGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2Zp
bmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJ
WVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQg
b25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7
IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFj
ayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICov
CisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9SVUxF
X1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxvY2sgY29tbWVudCAqLworLyogTGluZSBicmVha3Mg
YXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKy8qIFRoZSBjb21tZW50IGlzIHJl
cGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sg
QkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorCisJ
WVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDU6Cisv
KiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyArK3l5bGluZW5vOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWV4dHJhLT5sZWFk
aW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCVlZX0JSRUFLCitjYXNl
IDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9m
IGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6
UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwlZWV9CUkVBSworY2FzZSA5OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCVlZX0JSRUFLCisvKiBBbnl0aGluZyB0
aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAq
LworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLwor
Y2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOworfQorCVlZX0JSRUFLCitj
YXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoK
K1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9B
TkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsK
K30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJ
R047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9B
U1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01P
RF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVy
biB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5
ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1
bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87
CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwg
eXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKwlZWV9CUkVB
SworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5U
KToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcg
RU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAg
ICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9j
YXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0g
c3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4
ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUg
aWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUg
aW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0lu
ZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAg
ICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXls
aW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1F
TlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgp
OworfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVB
SworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1h
dGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJ
LyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZF
Ul9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBz
b3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0
aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxs
ZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICog
Y29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9i
YWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRo
aXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNr
LXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJ
CQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7
CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05P
Uk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9w
ICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZl
ciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVu
dGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0
cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29u
dHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAo
IHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJ
CXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9r
YXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlv
bi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFo
ZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0
byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9u
J3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAor
CQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUg
PSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJ
eXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0
X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0g
Kyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7
CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJ
CQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOworCisJCQkJaWYgKCBwcHdyYXAoeXlz
Y2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2Fy
ZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkg
KiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBp
ZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwor
CQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlf
TlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdl
dCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFS
VCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJ
CQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05F
V19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIg
KyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJ
CWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+
eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJ
CXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5k
X2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VS
Uk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZv
dW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nh
bm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBwcGxleCAqLworCisvKiB5eV9nZXRfbmV4
dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEg
Y29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAq
CUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBw
b3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRp
YyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lz
dGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwly
ZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51
bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3Ag
PiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsg
MV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBl
cnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwg
dGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9w
IC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBt
YXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMg
YXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwor
CQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRv
IHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9C
X0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEu
ICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwor
CW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0
cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihk
ZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBk
byB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBq
dXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90
IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUg
LSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJ
CXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkv
KiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JV
RkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29m
ZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJ
CWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6
ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWIt
Pnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkv
KiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJlYWxsb2MoKHZv
aWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJ
fQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJ
CQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9G
QVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVy
ZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9w
X29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAo
IG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JF
QURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAo
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJ
CQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+
eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVf
QURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0
YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwg
PSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJ
ZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXpl
X3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBw
bHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9
IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAx
KTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJl
YWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3Np
emUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlf
Z2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90
b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
KworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0
ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7
IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9D
SEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJ
aWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICgg
eXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGlu
dCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlf
Y3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEg
dHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0
X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3Rh
dGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3Vy
cmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNf
amFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAq
LworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIg
WVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJ
CXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJ
CXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVso
dW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2ph
bSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDog
eXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3Bs
dXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxz
ZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKwor
eworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwor
CWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJ
CS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0
dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRo
ZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5k
IG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRo
aXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJ
CWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0g
eXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7
CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsK
KwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1
c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJ
CQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGlu
ZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCks
CisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNv
bnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9G
SUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQlw
cHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJ
CWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHBwd3JhcCh5eXNj
YW5uZXIgKSApCisJCQkJCQlyZXR1cm4gMDsKKworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisjaWZkZWYgX19jcGx1c3Bs
dXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKKyNlbHNlCisJCQkJCXJldHVybiBp
bnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKworCQkJCWNhc2UgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZz
ZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJYyA9ICoodW5zaWduZWQgY2hh
ciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLworCSp5eWct
Pnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5X2hvbGRf
Y2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCXJldHVybiBjOworfQorI2VuZGlmCS8qIGlm
bmRlZiBZWV9OT19JTlBVVCAqLworCisvKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVy
ZW50IGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFt
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAbm90ZSBUaGlz
IGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElB
TCAuCisgKi8KKyAgICB2b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAg
ICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9CisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7CisJfQorCisJcHBfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5w
dXRfZmlsZSAseXlzY2FubmVyKTsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
K30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0g
bmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlf
QlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCS8q
IFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24g
Ym9keQorCSAqIHdpdGgKKwkgKgkJcHBwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXBwcHVzaF9i
dWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisgICAgICovCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCisJ
CXJldHVybjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91
dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3Mg
PSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFy
cyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
bmV3X2J1ZmZlcjsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdl
IGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJ
ICogRU9GIChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFn
CisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBz
YWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9
IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsK
Kwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+
eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBp
bml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFi
bGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBi
eXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVy
IHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgIChGSUxF
ICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9T
VEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIg
KTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUg
MiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBu
ZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9j
aF9idWYgPSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZm
ZXIgPSAxOworCisJcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCisJcmV0dXJu
IGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBj
cmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBiICkKKwkJcmV0
dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ug
c2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVG
RkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJcHBmcmVlKCh2
b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisKKwlwcGZyZWUoKHZvaWQgKikgYiAs
eXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZm
ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ug
b24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBh
dCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9T
VEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vy
cm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisJcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7CisKKwliLT55
eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJ
ZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2Jh
Ymx5XworICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25l
eHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0
aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JV
RkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2Nv
bHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAg
ICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJh
Y3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBh
cmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJF
TlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
KyAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMg
PSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4g
IFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIg
c3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICov
CisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1
ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlf
Y2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXBwX2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogUHVzaGVzIHRoZSBuZXcgc3Rh
dGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcworICogIHRoZSBjdXJyZW50
IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCisgKiAgaWYgbmVj
ZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCisgKiAgQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwdXNoX2J1ZmZlcl9z
dGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCWlmIChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKworCXBwZW5zdXJlX2J1ZmZl
cl9zdGFjayh5eXNjYW5uZXIpOworCisJLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9z
d2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8q
IEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyogT25seSBwdXNoIGlmIHRv
cCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZl
ci4gKi8KKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eWctPnl5X2RpZF9i
dWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVj
b21lcyB0aGUgbmV3IHRvcC4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJcHBfZGVsZXRlX2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQlwcF9s
b2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOworCX0KK30KKworLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2Vz
IG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4K
KyAqLworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoIXl5Zy0+eXlfYnVmZmVy
X3N0YWNrKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRz
LCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVl
ZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRp
YXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51bV90b19hbGxv
YyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
KilwcGFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXlnLT55eV9i
dWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAo
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0g
MSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxl
IHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87
CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXpl
OworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBy
ZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2Fs
bG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5l
cik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwor
CQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJf
c3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBu
dW1fdG9fYWxsb2M7CisJfQorfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0
byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgor
ICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBz
aXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAo
Y2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZ
WV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3Np
emUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBm
b3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBw
cGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlp
ZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBw
X3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAy
IiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVm
ID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0g
MDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3Rp
dmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWIt
Pnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJcHBfc3dpdGNoX3RvX2J1ZmZl
cihiICx5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0
IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkg
d2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIg
YSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkg
Y29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGlu
c3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCisJcmV0dXJuIHBwX3NjYW5f
Ynl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKK30KKworLyoqIFNldHVwIHRo
ZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNh
bGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgor
ICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gbGVuIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVSX1NUQVRF
IHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5
dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwlj
aGFyICpidWY7CisJeXlfc2l6ZV90IG4sIGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVs
bCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9IF95
eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgcHBhbGxvYyhuICx5eXNjYW5uZXIgKTsK
KwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47
ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1
ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0gcHBfc2Nh
bl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJP
UiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRv
IGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkg
d2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0
dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJ
TFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hh
ciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3Rk
ZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBS
ZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3Vu
ZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8g
ZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21h
Y3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJn
KTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9j
X2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hh
ciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJ
eXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBB
Y2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAq
LworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUg
cHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWV4dHJh
OworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9saW5lbm8gICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWxpbmVubzsKK30KKwor
LyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWNvbHVtbjsKK30KKworLyoqIEdl
dCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCisgKi8KK0ZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9vdXQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eW91dDsKK30KKworLyoqIEdldCB0aGUg
bGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK3l5X3NpemVfdCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRv
a2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKworY2hh
ciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5dGV4
dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZl
ciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0
YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZ
UEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlleHRyYSA9
IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisg
KiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCit2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4g
aW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIg
KQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBu
byBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5lX251bWJl
cjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGluZV9udW1i
ZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBw
c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisg
ICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMu
ICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0
YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5l
cik7IAorICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBp
bnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQg
YnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVy
CisgKi8KK3ZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCBwcHNldF9vdXQgKEZJTEUgKiAg
b3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3RyIDsK
K30KKworaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1
cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQor
CisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNUWVBF
ICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bHZh
bDsKK30KKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZWUxU
WVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXls
bG9jOworfQorICAgIAordm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworfQor
ICAgIAorLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiBwcGxleF9pbml0IGlzIHNwZWNpYWwg
YmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBP
TkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0
aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhl
IGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50IHBw
bGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95eV9n
bG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICgg
c2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlfZ2xv
YmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4g
eXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1z
ZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisgICAg
cmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiBwcGxl
eF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1
dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhl
IGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2ludGVy
KiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5k
CisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5k
bGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRo
ZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCisgKiB0aGUg
eXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBF
IHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2Rl
ZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwp
eworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCQor
ICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0
IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxz
ID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4K
KyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAg
IG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Cisg
ICAgCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsK
KyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9
CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFu
dCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVz
dHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisgICAg
eXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hh
ciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7CisK
KyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFj
a19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBEZWZp
bmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47Cisg
ICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAgIHl5
b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6
IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHBwbGV4
X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiBwcGxleF9kZXN0cm95IGlz
IGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCBw
cGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0aGUg
YnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9DVVJS
RU5UX0JVRkZFUil7CisJCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQlwcHBvcF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYu
ICovCisJcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+eXlf
YnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlv
biBzdGFjay4gKi8KKyAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5l
ciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0
IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5l
ciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0
aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisg
ICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICBw
cGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOwor
ICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAq
LworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hh
ciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0g
czJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5
X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
CXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1
cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOworfQor
Cit2b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2lu
ZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBn
ZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBv
aW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kg
QyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVy
IHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBh
cyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVh
bGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgcHBmcmVlICh2b2lkICogcHRy
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUg
cHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19O
QU1FICJ5eXRhYmxlcyIKKworbmFtZXNwYWNlIHBwIHsKKworLy8gVE9ETyhhbG9rcCk6IE1heGlt
dW0gdG9rZW4gbGVuZ3RoIHNob3VsZCBpZGVhbGx5IGJlIHNwZWNpZmllZCBieQorLy8gdGhlIHBy
ZXByb2Nlc3NvciBjbGllbnQsIGkuZS4sIHRoZSBjb21waWxlci4KK2NvbnN0IHNpemVfdCBUb2tl
bml6ZXI6OmtNYXhUb2tlbkxlbmd0aCA9IDI1NjsKKworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFn
bm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQorewor
ICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3Vu
dCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAg
ICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDApICYmIChz
dHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQo
Y291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwor
dm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8gV2UgdXNl
IGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5v
LgorICAgIHBwc2V0X2NvbHVtbihmaWxlLG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6
c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICBwcHNldF9saW5lbm8obGluZSxtSGFuZGxl
KTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4t
PnR5cGUgPSBwcGxleCgmdG9rZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKKyAg
ICBpZiAodG9rZW4tPnRleHQuc2l6ZSgpID4ga01heFRva2VuTGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xP
TkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0
aCk7CisgICAgfQorCisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0
YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0g
dG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNv
bnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsK
K30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUg
PT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAo
bUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1I
YW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvVG9rZW5pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzYwMzEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1OCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwor
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJ
bnB1dC5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBw
dWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAg
ICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7Cisg
ICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2Nh
dGlvbiBzaG91bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0Ojpt
UmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0
ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAg
SW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7Cisg
ICAgICAgIGJvb2wgbGluZVN0YXJ0OworICAgIH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6
ZV90IGtNYXhUb2tlbkxlbmd0aDsKKworICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisgICAgdm9p
ZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxp
bmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6
CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7CisgICAgYm9vbCBp
bml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKworICAgIHZvaWQqIG1I
YW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8gU2Nh
bm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OWFlNjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5sCkBAIC0wLDAgKzEsMzQwIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhp
cyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9j
ZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3Nv
ciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5
czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4g
Z2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworJXRvcHsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlz
IGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJ
VCEKK30KKworJXsKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzQmFzZS5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQor
Ly8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlv
bi4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgor
I2VuZGlmCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJj
ZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxl
IHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVt
bgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0
cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZ
WV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0
ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBw
OjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAg
IFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1
dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAg
XAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlm
aWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxs
b2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1Ziwg
cmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYs
IG1heFNpemUpOworCislfQorCislb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJh
Y3RpdmUKKyVvcHRpb24gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKKyVv
cHRpb24gcHJlZml4PSJwcCIKKyVvcHRpb24gZXh0cmEtdHlwZT0icHA6OlRva2VuaXplcjo6Q29u
dGV4dCoiCisleCBDT01NRU5UCisKK05FV0xJTkUgICAgIFxufFxyfFxyXG4KK0lERU5USUZJRVIg
IFtfYS16QS1aXVtfYS16QS1aMC05XSoKK1BVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49
ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTldKgorT0NUQUxfQ09OU1RB
TlQgICAgICAgIDBbMC03XSoKK0hFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZd
KworCitESUdJVCAgICAgICAgICAgICAgICBbMC05XQorRVhQT05FTlRfUEFSVCAgICAgICAgW2VF
XVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0r
KXwoe0RJR0lUfSsiLiIpCisKKyUlCisKKyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKyIvLyJbXlxy
XG5dKgorCisgICAgLyogQmxvY2sgY29tbWVudCAqLworICAgIC8qIExpbmUgYnJlYWtzIGFyZSBq
dXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisgICAgLyogVGhlIGNvbW1lbnQgaXMgcmVw
bGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorIi8qIiB7IEJFR0lOKENPTU1FTlQpOyB9Cis8
Q09NTUVOVD5bXipcclxuXSsKKzxDT01NRU5UPiIqIgorPENPTU1FTlQ+e05FV0xJTkV9IHsgKyt5
eWxpbmVubzsgfQorPENPTU1FTlQ+IiovIiB7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0g
dHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKworIyB7CisgICAgLy8gIyBpcyBvbmx5IHZh
bGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5
bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFy
dCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKK3tJREVO
VElGSUVSfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisKK3tERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxf
Q09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0geworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisKKyh7
RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9Q
QVJUfT8pIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisKKyAgICAvKiBBbnl0aGluZyB0aGF0IHN0YXJ0
cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworICAgIC8q
IFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KKyh7RElH
SVR9K1tfYS16QS1aMC05Ll0qKXwoIi4ie0RJR0lUfStbX2EtekEtWjAtOS5dKikgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9O
VU1CRVI7Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQor
Ijw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorIl5eIiB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsK
K30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIv
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9Cisi
PDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047
Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJePSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdO
OworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5
eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisK
K1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJ
TkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAg
IHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOworfQorCis8Kj48PEVPRj4+IHsKKyAg
ICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAg
IC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5w
dXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNj
YW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgo
MCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRl
eE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUg
YXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisg
ICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsK
KyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAg
eXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87Cisg
ICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAg
eworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6
RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6
OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCisl
JQorCituYW1lc3BhY2UgcHAgeworCisvLyBUT0RPKGFsb2twKTogTWF4aW11bSB0b2tlbiBsZW5n
dGggc2hvdWxkIGlkZWFsbHkgYmUgc3BlY2lmaWVkIGJ5CisvLyB0aGUgcHJlcHJvY2Vzc29yIGNs
aWVudCwgaS5lLiwgdGhlIGNvbXBpbGVyLgorY29uc3Qgc2l6ZV90IFRva2VuaXplcjo6a01heFRv
a2VuTGVuZ3RoID0gMjU2OworCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlh
Z25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNj
YW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8
IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkg
cmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5n
LCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXpl
cjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJl
ciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCisgICAgeXlzZXRf
Y29sdW1uKGZpbGUsIG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJl
cihpbnQgbGluZSkKK3sKKyAgICB5eXNldF9saW5lbm8obGluZSwgbUhhbmRsZSk7Cit9CisKK3Zv
aWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXls
ZXgoJnRva2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKKyAgICBpZiAodG9r
ZW4tPnRleHQuc2l6ZSgpID4ga01heFRva2VuTGVuZ3RoKQorICAgIHsKKyAgICAgICAgbUNvbnRl
eHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0aCk7CisgICAg
fQorCisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5l
KG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5
cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVh
ZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9v
bCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkg
JiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZtSGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxl
ID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHl5bGV4X2Rlc3Ryb3kobUhhbmRsZSk7
CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
YXRvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTE1OGQyLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRv
bS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
XAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jw
b3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlv
dXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2Yg
dGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVy
bXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90
IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdh
cmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3Jh
bnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEn
cyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklE
SUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRl
IHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4g
c291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3Ry
aWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0
IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFu
ZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBT
b2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9y
IGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBh
cyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGlj
ZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwg
aW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkg
YmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3Mg
aW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFy
ZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBC
RUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNM
VURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElU
TEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBP
UiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hB
TEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRB
TCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQ
Uk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJ
QSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENP
TlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9S
IE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vCi0vLyBh
dG9tLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNs
dWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKLQotI3VuZGVmIG1hbGxvYwotI3VuZGVmIHJlYWxsb2MKLSN1bmRlZiBmcmVl
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0gICAgaW50IHZhbDsKLSAgICBjb25z
dCBjaGFyICpzdHI7Ci19IHRva2Vuc1tdID0gewotICAgIHsgQ1BQX0FORF9PUCwgICAgICAgICAi
JiYiIH0sCi0gICAgeyBDUFBfQU5EX0FTU0lHTiwgICAgICImPSIgfSwKLSAgICB7IENQUF9TVUJf
QVNTSUdOLCAgICAgIi09IiB9LAotICAgIHsgQ1BQX01PRF9BU1NJR04sICAgICAiJT0iIH0sCi0g
ICAgeyBDUFBfQUREX0FTU0lHTiwgICAgICIrPSIgfSwKLSAgICB7IENQUF9ESVZfQVNTSUdOLCAg
ICAgIi89IiB9LAotICAgIHsgQ1BQX01VTF9BU1NJR04sICAgICAiKj0iIH0sCi0gICAgeyBDUFBf
UklHSFRfQlJBQ0tFVCwgICI6PiIgfSwKLSAgICB7IENQUF9FUV9PUCwgICAgICAgICAgIj09IiB9
LAotICAgIHsgQ1BQX1hPUl9PUCwgICAgICAgICAiXl4iIH0sIAotICAgIHsgQ1BQX1hPUl9BU1NJ
R04sICAgICAiXj0iIH0sIAotICAgIHsgQ1BQX0ZMT0FUQ09OU1RBTlQsICAiPGZsb2F0LWNvbnN0
PiIgfSwKLSAgICB7IENQUF9HRV9PUCwgICAgICAgICAgIj49IiB9LAotICAgIHsgQ1BQX1JJR0hU
X09QLCAgICAgICAiPj4iIH0sCi0gICAgeyBDUFBfUklHSFRfQVNTSUdOLCAgICI+Pj0iIH0sIAot
ICAgIHsgQ1BQX0lERU5USUZJRVIsICAgICAiPGlkZW50PiIgfSwKLSAgICB7IENQUF9JTlRDT05T
VEFOVCwgICAgIjxpbnQtY29uc3Q+IiB9LAotICAgIHsgQ1BQX0xFX09QLCAgICAgICAgICAiPD0i
IH0sCi0gICAgeyBDUFBfTEVGVF9PUCwgICAgICAgICI8PCIgfSwKLSAgICB7IENQUF9MRUZUX0FT
U0lHTiwgICAgIjw8PSIgfSwKLSAgICB7IENQUF9MRUZUX0JSQUNLRVQsICAgIjw6IiB9LAotICAg
IHsgQ1BQX0xFRlRfQlJBQ0UsICAgICAiPCUiIH0sIAotICAgIHsgQ1BQX0RFQ19PUCwgICAgICAg
ICAiLS0iIH0sCi0gICAgeyBDUFBfUklHSFRfQlJBQ0UsICAgICIlPiIgfSwgCi0gICAgeyBDUFBf
TkVfT1AsICAgICAgICAgICIhPSIgfSwKLSAgICB7IENQUF9PUl9PUCwgICAgICAgICAgInx8IiB9
LAotICAgIHsgQ1BQX09SX0FTU0lHTiwgICAgICAifD0iIH0sIAotICAgIHsgQ1BQX0lOQ19PUCwg
ICAgICAgICAiKysiIH0sCi0gICAgeyBDUFBfU1RSQ09OU1RBTlQsICAgICI8c3RyaW5nLWNvbnN0
PiIgfSwKLSAgICB7IENQUF9UWVBFSURFTlRJRklFUiwgIjx0eXBlLWlkZW50PiIgfSwKLX07Ci0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotI2RlZmluZSBJTklUX1NUUklOR19UQUJMRV9TSVpFIDE2Mzg0Ci0KLXR5cGVkZWYg
c3RydWN0IFN0cmluZ1RhYmxlX1JlYyB7Ci0gICAgY2hhciAqc3RyaW5nczsKLSAgICBpbnQgbmV4
dEZyZWU7Ci0gICAgaW50IHNpemU7Ci19IFN0cmluZ1RhYmxlOwotCi0vKgotICogSW5pdFN0cmlu
Z1RhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBzdHJpbmcgdGFibGUuCi0gKgotICovCi0KLXN0YXRp
YyBpbnQgSW5pdFN0cmluZ1RhYmxlKFN0cmluZ1RhYmxlICpzdGFibGUpCi17Ci0gICAgc3RhYmxl
LT5zdHJpbmdzID0gKGNoYXIgKikgbWFsbG9jKElOSVRfU1RSSU5HX1RBQkxFX1NJWkUpOwotICAg
IGlmICghc3RhYmxlLT5zdHJpbmdzKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBaZXJvLXRo
IG9mZnNldCBtZWFucyAiZW1wdHkiIHNvIGRvbid0IHVzZSBpdC4KLSAgICBzdGFibGUtPm5leHRG
cmVlID0gMTsKLSAgICBzdGFibGUtPnNpemUgPSBJTklUX1NUUklOR19UQUJMRV9TSVpFOwotICAg
IHJldHVybiAxOwotfSAvLyBJbml0U3RyaW5nVGFibGUKLQotLyoKLSAqIEZyZWVTdHJpbmdUYWJs
ZSgpIC0gRnJlZSB0aGUgc3RyaW5nIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBGcmVl
U3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKLXsKLSAgICBpZiAoc3RhYmxlLT5zdHJp
bmdzKQotICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7Ci0gICAgc3RhYmxlLT5zdHJpbmdz
ID0gTlVMTDsKLSAgICBzdGFibGUtPm5leHRGcmVlID0gMDsKLSAgICBzdGFibGUtPnNpemUgPSAw
OwotfSAvLyBGcmVlU3RyaW5nVGFibGUKLQotLyoKLSAqIEhhc2hTdHJpbmcoKSAtIEhhc2ggYSBz
dHJpbmcgd2l0aCB0aGUgYmFzZSBoYXNoIGZ1bmN0aW9uLgotICoKLSAqLwotCi1zdGF0aWMgaW50
IEhhc2hTdHJpbmcoY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0KLSAgICB3
aGlsZSAoKnMpIHsKLSAgICAgICAgaHZhbCA9IChodmFsKjEzNTA3ICsgKnMqMTk3KSBeIChodmFs
ID4+IDIpOwotICAgICAgICBzKys7Ci0gICAgfQotICAgIHJldHVybiBodmFsICYgMHg3ZmZmZmZm
ZjsKLX0gLy8gSGFzaFN0cmluZwotCi0vKgotICogSGFzaFN0cmluZzIoKSAtIEhhc2ggYSBzdHJp
bmcgd2l0aCB0aGUgaW5jcmltZW50aW5nIGhhc2ggZnVuY3Rpb24uCi0gKgotICovCi0KLXN0YXRp
YyBpbnQgSGFzaFN0cmluZzIoY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0K
LSAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgaHZhbCA9IChodmFsKjcyOSArICpzKjM3KSBeICho
dmFsID4+IDEpOwotICAgICAgICBzKys7Ci0gICAgfQotICAgIHJldHVybiBodmFsOwotfSAvLyBI
YXNoU3RyaW5nMgotCi0vKgotICogQWRkU3RyaW5nKCkgLSBBZGQgYSBzdHJpbmcgdG8gYSBzdHJp
bmcgdGFibGUuICBSZXR1cm4gaXQncyBvZmZzZXQuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgQWRk
U3RyaW5nKFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGxl
biwgbG9jOwotICAgIGNoYXIgKnN0cjsKLQotICAgIGxlbiA9IChpbnQpIHN0cmxlbihzKTsKLSAg
ICB3aGlsZSAoc3RhYmxlLT5uZXh0RnJlZSArIGxlbiArIDEgPj0gc3RhYmxlLT5zaXplKSB7Ci0g
ICAgICAgIGFzc2VydChzdGFibGUtPnNpemUgPCAxMDAwMDAwKTsKLSAgICAgICAgc3RyID0gKGNo
YXIgKikgbWFsbG9jKHN0YWJsZS0+c2l6ZSoyKTsKLSAgICAgICAgbWVtY3B5KHN0ciwgc3RhYmxl
LT5zdHJpbmdzLCBzdGFibGUtPnNpemUpOwotICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7
Ci0gICAgICAgIHN0YWJsZS0+c3RyaW5ncyA9IHN0cjsKLSAgICAgICAgc3RhYmxlLT5zaXplID0g
c3RhYmxlLT5zaXplKjI7Ci0gICAgfQotICAgIGxvYyA9IHN0YWJsZS0+bmV4dEZyZWU7Ci0gICAg
c3RyY3B5KCZzdGFibGUtPnN0cmluZ3NbbG9jXSwgcyk7Ci0gICAgc3RhYmxlLT5uZXh0RnJlZSAr
PSBsZW4gKyAxOwotICAgIHJldHVybiBsb2M7Ci19IC8vIEFkZFN0cmluZwotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLyBIYXNoIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNk
ZWZpbmUgSU5JVF9IQVNIX1RBQkxFX1NJWkUgMjA0NwotI2RlZmluZSBIQVNIX1RBQkxFX01BWF9D
T0xMSVNJT05TIDMKLQotdHlwZWRlZiBzdHJ1Y3QgSGFzaEVudHJ5X1JlYyB7Ci0gICAgaW50IGlu
ZGV4OyAgICAgIC8vIFN0cmluZyB0YWJsZSBvZmZzZXQgb2Ygc3RyaW5nIHJlcHJlc2VudGF0aW9u
Ci0gICAgaW50IHZhbHVlOyAgICAgIC8vIEF0b20gKHN5bWJvbCkgdmFsdWUKLX0gSGFzaEVudHJ5
OwotCi10eXBlZGVmIHN0cnVjdCBIYXNoVGFibGVfUmVjIHsKLSAgICBIYXNoRW50cnkgKmVudHJ5
OwotICAgIGludCBzaXplOwotICAgIGludCBlbnRyaWVzOwotICAgIGludCBjb3VudHNbSEFTSF9U
QUJMRV9NQVhfQ09MTElTSU9OUyArIDFdOwotfSBIYXNoVGFibGU7Ci0KLS8qCi0gKiBJbml0SGFz
aFRhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMg
aW50IEluaXRIYXNoVGFibGUoSGFzaFRhYmxlICpodGFibGUsIGludCBmc2l6ZSkKLXsKLSAgICBp
bnQgaWk7Ci0KLSAgICBodGFibGUtPmVudHJ5ID0gKEhhc2hFbnRyeSAqKSBtYWxsb2Moc2l6ZW9m
KEhhc2hFbnRyeSkqZnNpemUpOwotICAgIGlmICghaHRhYmxlLT5lbnRyeSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaHRhYmxlLT5zaXplID0gZnNpemU7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDwg
ZnNpemU7IGlpKyspIHsKLSAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0uaW5kZXggPSAwOwotICAg
ICAgICBodGFibGUtPmVudHJ5W2lpXS52YWx1ZSA9IDA7Ci0gICAgfQotICAgIGh0YWJsZS0+ZW50
cmllcyA9IDA7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lP
TlM7IGlpKyspCi0gICAgICAgIGh0YWJsZS0+Y291bnRzW2lpXSA9IDA7Ci0gICAgcmV0dXJuIDE7
Ci19IC8vIEluaXRIYXNoVGFibGUKLQotLyoKLSAqIEZyZWVIYXNoVGFibGUoKSAtIEZyZWUgdGhl
IGhhc2ggdGFibGUuCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIEZyZWVIYXNoVGFibGUoSGFzaFRh
YmxlICpodGFibGUpCi17Ci0gICAgaWYgKGh0YWJsZS0+ZW50cnkpCi0gICAgICAgIGZyZWUoaHRh
YmxlLT5lbnRyeSk7Ci0gICAgaHRhYmxlLT5lbnRyeSA9IE5VTEw7Ci0gICAgaHRhYmxlLT5zaXpl
ID0gMDsKLSAgICBodGFibGUtPmVudHJpZXMgPSAwOwotfSAvLyBGcmVlSGFzaFRhYmxlCi0KLS8q
Ci0gKiBFbXB0eSgpIC0gU2VlIGlmIGEgaGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4KLSAqCi0g
Ki8KLQotc3RhdGljIGludCBFbXB0eShIYXNoVGFibGUgKmh0YWJsZSwgaW50IGhhc2hsb2MpCi17
Ci0gICAgYXNzZXJ0KGhhc2hsb2MgPj0gMCAmJiBoYXNobG9jIDwgaHRhYmxlLT5zaXplKTsKLSAg
ICBpZiAoaHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleCA9PSAwKSB7Ci0gICAgICAgIHJldHVy
biAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0gLy8gRW1wdHkK
LQotLyoKLSAqIE1hdGNoKCkgLSBTZWUgaWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlzIG1hdGNoZXMg
YSBzdHJpbmcuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgTWF0Y2goSGFzaFRhYmxlICpodGFibGUs
IFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBoYXNobG9jKQotewotICAg
IGludCBzdHJsb2M7Ci0KLSAgICBzdHJsb2MgPSBodGFibGUtPmVudHJ5W2hhc2hsb2NdLmluZGV4
OwotICAgIGlmICghc3RyY21wKHMsICZzdGFibGUtPnN0cmluZ3Nbc3RybG9jXSkpIHsKLSAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfSAv
LyBNYXRjaAotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBBdG9tIHRhYmxlOiAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLSNkZWZpbmUgSU5JVF9BVE9NX1RBQkxFX1NJWkUgMTAyNAotCi0K
LXN0cnVjdCBBdG9tVGFibGVfUmVjIHsKLSAgICBTdHJpbmdUYWJsZSBzdGFibGU7IC8vIFN0cmlu
ZyB0YWJsZS4KLSAgICBIYXNoVGFibGUgaHRhYmxlOyAgIC8vIEhhc2hlcyBzdHJpbmcgdG8gYXRv
bSBudW1iZXIgYW5kIHRva2VuIHZhbHVlLiAgTXVsdGlwbGUgc3RyaW5ncyBjYW4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhdmUgdGhlIHNhbWUgdG9rZW4gdmFsdWUgYnV0IGVhY2ggdW5p
cXVlIHN0cmluZyBpcyBhIHVuaXF1ZSBhdG9tLgotICAgIGludCAqYW1hcDsgICAgICAgICAgLy8g
TWFwcyBhdG9tIHZhbHVlIHRvIG9mZnNldCBpbiBzdHJpbmcgdGFibGUuICBBdG9tcyBhbGwgbWFw
IHRvIHVuaXF1ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5ncyBleGNlcHQgZm9y
IHNvbWUgdW5kZWZpbmVkIHZhbHVlcyBpbiB0aGUgbG93ZXIsIGZpeGVkIHBhcnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBhdG9tIHRhYmxlIHRoYXQgbWFwIHRvICI8dW5kZWZp
bmVkPiIuICBUaGUgbG93ZXN0IDI1NiBhdG9tcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y29ycmVzcG9uZCB0byBzaW5nbGUgY2hhcmFjdGVyIEFTQ0lJIHZhbHVlcyBleGNlcHQgZm9yIGFs
cGhhbnVtZXJpYwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBhbmQgJ18n
LCB3aGljaCBjYW4gYmUgb3RoZXIgdG9rZW5zLiAgTmV4dCBjb21lIHRoZQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbGFuZ3VhZ2UgdG9rZW5zIHdpdGggdGhlaXIgYXRvbSB2YWx1ZXMgZXF1
YWwgdG8gdGhlIHRva2VuIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBj
b21lIHByZWRlZmluZWQgYXRvbXMsIGZvbGxvd2VkIGJ5IHVzZXIgc3BlY2lmaWVkIGlkZW50aWZp
ZXJzLgotICAgIGludCAqYXJldjsgICAgICAgICAgLy8gUmV2ZXJzZWQgYXRvbSBmb3Igc3ltYm9s
IHRhYmxlIHVzZS4KLSAgICBpbnQgbmV4dEZyZWU7Ci0gICAgaW50IHNpemU7Ci19OwotCi1zdGF0
aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHsw
fSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07Ci1BdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwot
Ci1zdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAq
cywgaW50IGF0b20pOwotCi0vKgotICogR3Jvd0F0b21UYWJsZSgpIC0gR3JvdyB0aGUgYXRvbSB0
YWJsZSB0byBhdCBsZWFzdCAic2l6ZSIgaWYgaXQncyBzbWFsbGVyLgotICoKLSAqLwotCi1zdGF0
aWMgaW50IEdyb3dBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBzaXplKQotewotICAg
IGludCAqbmV3bWFwLCAqbmV3cmV2OwotCi0gICAgaWYgKGF0YWJsZS0+c2l6ZSA8IHNpemUpIHsK
LSAgICAgICAgaWYgKGF0YWJsZS0+YW1hcCkgewotICAgICAgICAgICAgbmV3bWFwID0gcmVhbGxv
YyhhdGFibGUtPmFtYXAsIHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgbmV3cmV2ID0g
cmVhbGxvYyhhdGFibGUtPmFyZXYsIHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbmV3bWFwID0gbWFsbG9jKHNpemVvZihpbnQpKnNpemUpOwotICAgICAg
ICAgICAgbmV3cmV2ID0gbWFsbG9jKHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgYXRh
YmxlLT5zaXplID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW5ld21hcCB8fCAhbmV3cmV2
KSB7Ci0gICAgICAgICAgICAvKiBmYWlsZWQgdG8gZ3JvdyAtLSBlcnJvciAqLwotICAgICAgICAg
ICAgaWYgKG5ld21hcCkKLSAgICAgICAgICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdtYXA7Ci0g
ICAgICAgICAgICBpZiAobmV3cmV2KQotICAgICAgICAgICAgICAgIGF0YWJsZS0+YXJldiA9IG5l
d3JldjsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQo
Jm5ld21hcFthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2Yo
aW50KSk7Ci0gICAgICAgIG1lbXNldCgmbmV3cmV2W2F0YWJsZS0+c2l6ZV0sIDAsIChzaXplIC0g
YXRhYmxlLT5zaXplKSAqIHNpemVvZihpbnQpKTsKLSAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3
bWFwOwotICAgICAgICBhdGFibGUtPmFyZXYgPSBuZXdyZXY7Ci0gICAgICAgIGF0YWJsZS0+c2l6
ZSA9IHNpemU7Ci0gICAgfQotICAgIHJldHVybiAwOwotfSAvLyBHcm93QXRvbVRhYmxlCi0KLS8q
Ci0gKiBsUmV2ZXJzZSgpIC0gUmV2ZXJzZSB0aGUgYm90dG9tIDIwIGJpdHMgb2YgYSAzMiBiaXQg
aW50LgotICoKLSAqLwotCi1zdGF0aWMgaW50IGxSZXZlcnNlKGludCBmdmFsKQotewotICAgIHVu
c2lnbmVkIGludCBpbiA9IGZ2YWw7Ci0gICAgaW50IHJlc3VsdCA9IDAsIGNudCA9IDA7Ci0KLSAg
ICB3aGlsZShpbikgewotICAgICAgICByZXN1bHQgPDw9IDE7Ci0gICAgICAgIHJlc3VsdCB8PSBp
biYxOwotICAgICAgICBpbiA+Pj0gMTsKLSAgICAgICAgY250Kys7Ci0gICAgfQotCi0gICAgLy8g
RG9uJ3QgdXNlIGFsbCAzMSBiaXRzLiAgT25lIG1pbGxpb24gYXRvbXMgaXMgcGxlbnR5IGFuZCBz
b21ldGltZXMgdGhlCi0gICAgLy8gdXBwZXIgYml0cyBhcmUgdXNlZCBmb3Igb3RoZXIgdGhpbmdz
LgotCi0gICAgaWYgKGNudCA8IDIwKQotICAgICAgICByZXN1bHQgPDw9IDIwIC0gY250OwotICAg
IHJldHVybiByZXN1bHQ7Ci19IC8vIGxSZXZlcnNlCi0KLS8qCi0gKiBBbGxvY2F0ZUF0b20oKSAt
IEFsbG9jYXRlIGEgbmV3IGF0b20uICBBc3NvY2lhdGVkIHdpdGggdGhlICJ1bmRlZmluZWQiIHZh
bHVlIG9mIC0xLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEFsbG9jYXRlQXRvbShBdG9tVGFibGUg
KmF0YWJsZSkKLXsKLSAgICBpZiAoYXRhYmxlLT5uZXh0RnJlZSA+PSBhdGFibGUtPnNpemUpCi0g
ICAgICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBhdGFibGUtPm5leHRGcmVlKjIpOwotICAgIGF0
YWJsZS0+YW1hcFthdGFibGUtPm5leHRGcmVlXSA9IC0xOwotICAgIGF0YWJsZS0+YXJldlthdGFi
bGUtPm5leHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOwotICAgIGF0YWJsZS0+
bmV4dEZyZWUrKzsKLSAgICByZXR1cm4gYXRhYmxlLT5uZXh0RnJlZSAtIDE7Ci19IC8vIEFsbG9j
YXRlQXRvbQotCi0vKgotICogU2V0QXRvbVZhbHVlKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tIGFz
c29jaWF0ZWQgd2l0aCAiaGFzaGluZGV4Ii4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgU2V0QXRv
bVZhbHVlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbW51bWJlciwgaW50IGhhc2hpbmRleCkK
LXsKLSAgICBhdGFibGUtPmFtYXBbYXRvbW51bWJlcl0gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVto
YXNoaW5kZXhdLmluZGV4OwotICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFs
dWUgPSBhdG9tbnVtYmVyOwotfSAvLyBTZXRBdG9tVmFsdWUKLQotLyoKLSAqIEZpbmRIYXNoTG9j
KCkgLSBGaW5kIHRoZSBoYXNoIGxvY2F0aW9uIGZvciB0aGlzIHN0cmluZy4gIFJldHVybiAtMSBp
dCBoYXNoIHRhYmxlIGlzIGZ1bGwuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgRmluZEhhc2hMb2Mo
QXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGhhc2hsb2MsIGhh
c2hkZWx0YSwgY291bnQ7Ci0gICAgaW50IEZvdW5kRW1wdHlTbG90ID0gMDsKLSAgICBpbnQgY29s
bGlzaW9uW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsKLQotICAgIGhhc2hsb2MgPSBI
YXNoU3RyaW5nKHMpICUgYXRhYmxlLT5odGFibGUuc2l6ZTsKLSAgICBpZiAoIUVtcHR5KCZhdGFi
bGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKLSAgICAgICAgaWYgKE1hdGNoKCZhdGFibGUtPmh0YWJs
ZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBoYXNobG9jKSkKLSAgICAgICAgICAgIHJldHVybiBoYXNo
bG9jOwotICAgICAgICBjb2xsaXNpb25bMF0gPSBoYXNobG9jOwotICAgICAgICBoYXNoZGVsdGEg
PSBIYXNoU3RyaW5nMihzKTsKLSAgICAgICAgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAoY291
bnQgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKSB7Ci0gICAgICAgICAgICBoYXNobG9jID0g
KChoYXNobG9jICsgaGFzaGRlbHRhKSAmIDB4N2ZmZmZmZmYpICUgYXRhYmxlLT5odGFibGUuc2l6
ZTsKLSAgICAgICAgICAgIGlmICghRW1wdHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkgewot
ICAgICAgICAgICAgICAgIGlmIChNYXRjaCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJs
ZSwgcywgaGFzaGxvYykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hsb2M7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBG
b3VuZEVtcHR5U2xvdCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgY29sbGlzaW9uW2NvdW50XSA9IGhh
c2hsb2M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIUZvdW5kRW1wdHlTbG90KSB7Ci0gICAg
ICAgICAgICBpZiAoY3BwLT5vcHRpb25zLkR1bXBBdG9tVGFibGUpIHsKLSAgICAgICAgICAgICAg
ICBpbnQgaWk7Ci0gICAgICAgICAgICAgICAgY2hhciBzdHJbMjAwXTsKLSAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0
aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAot
ICAgICAgICAgICAgICAgICAgICAgICBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKTsKLSAgICAg
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKLQotICAgICAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwg
ZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKLSAgICAgICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKLSAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkg
PD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgewotICAgICAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIENvbGxpZGVzIG9uIHRyeSAlZCBhdCBo
YXNoIGVudHJ5ICUwNHggd2l0aCBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWkgKyAxLCBjb2xsaXNpb25baWldLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRhYmxlLT5odGFi
bGUuZW50cnlbY29sbGlzaW9uW2lpXV0udmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKHN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXRhYmxl
LT5odGFibGUuY291bnRzW2NvdW50XSsrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBo
YXNobG9jOwotfSAvLyBGaW5kSGFzaExvYwotCi0vKgotICogSW5jcmVhc2VIYXNoVGFibGVTaXpl
KCkKLSAqCi0gKi8KLQotc3RhdGljIGludCBJbmNyZWFzZUhhc2hUYWJsZVNpemUoQXRvbVRhYmxl
ICphdGFibGUpCi17Ci0gICAgaW50IGlpLCBzdHJsb2MsIG9sZGhhc2hsb2MsIHZhbHVlLCBzaXpl
OwotICAgIEF0b21UYWJsZSBvbGR0YWJsZTsKLSAgICBjaGFyICpzOwotCi0gICAgLy8gU2F2ZSB0
aGUgb2xkIGF0b20gdGFibGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmU6Ci0KLSAgICBvbGR0YWJsZSA9
ICphdGFibGU7Ci0gICAgc2l6ZSA9IG9sZHRhYmxlLmh0YWJsZS5zaXplKjIgKyAxOwotICAgIGlm
ICghSW5pdEF0b21UYWJsZShhdGFibGUsIHNpemUpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IC8vIEFkZCBhbGwgdGhlIGV4aXN0aW5nIHZhbHVlcyB0byB0aGUgbmV3IGF0b20gdGFibGUgcHJl
c2VydmluZyB0aGVpciBhdG9tIHZhbHVlczoKLQotICAgIGZvciAoaWkgPSBhdGFibGUtPm5leHRG
cmVlOyBpaSA8IG9sZHRhYmxlLm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHN0cmxvYyA9IG9s
ZHRhYmxlLmFtYXBbaWldOwotICAgICAgICBzID0gJm9sZHRhYmxlLnN0YWJsZS5zdHJpbmdzW3N0
cmxvY107Ci0gICAgICAgIG9sZGhhc2hsb2MgPSBGaW5kSGFzaExvYygmb2xkdGFibGUsIHMpOwot
ICAgICAgICBhc3NlcnQob2xkaGFzaGxvYyA+PSAwKTsKLSAgICAgICAgdmFsdWUgPSBvbGR0YWJs
ZS5odGFibGUuZW50cnlbb2xkaGFzaGxvY10udmFsdWU7Ci0gICAgICAgIEFkZEF0b21GaXhlZChh
dGFibGUsIHMsIHZhbHVlKTsKLSAgICB9Ci0gICAgRnJlZUF0b21UYWJsZSgmb2xkdGFibGUpOwot
ICAgIHJldHVybiAxOwotfSAvLyBJbmNyZWFzZUhhc2hUYWJsZVNpemUKLQotLyoKLSAqIExvb2tV
cEFkZFN0cmluZ0hhc2goKSAtIExvb2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElm
IGl0J3Mgbm90IHRoZXJlLCBhZGQgaXQgYW5kCi0gKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRv
bSB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZSB0byAwLiAgUmV0dXJuIHRoZSBoYXNoIHRhYmxlIGlu
ZGV4LgotICovCi0KLXN0YXRpYyBpbnQgTG9va1VwQWRkU3RyaW5nSGFzaChBdG9tVGFibGUgKmF0
YWJsZSwgY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaGFzaGxvYywgc3RybG9jOwotCi0gICAg
d2hpbGUoMSkgewotICAgICAgICBoYXNobG9jID0gRmluZEhhc2hMb2MoYXRhYmxlLCBzKTsKLSAg
ICAgICAgaWYgKGhhc2hsb2MgPj0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBJbmNy
ZWFzZUhhc2hUYWJsZVNpemUoYXRhYmxlKTsKLSAgICB9Ci0KLSAgICBpZiAoRW1wdHkoJmF0YWJs
ZS0+aHRhYmxlLCBoYXNobG9jKSkgewotICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKys7
Ci0gICAgICAgIHN0cmxvYyA9IEFkZFN0cmluZygmYXRhYmxlLT5zdGFibGUsIHMpOwotICAgICAg
ICBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNobG9jXS5pbmRleCA9IHN0cmxvYzsKLSAgICAgICAg
YXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGxvY10udmFsdWUgPSAwOwotICAgIH0KLSAgICByZXR1
cm4gaGFzaGxvYzsKLX0gLy8gTG9va1VwQWRkU3RyaW5nSGFzaAotCi0vKgotICogTG9va1VwQWRk
U3RyaW5nKCkgLSBMb29rdXAgYSBzdHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5v
dCB0aGVyZSwgYWRkIGl0IGFuZAotICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUg
aW4gdGhlIGhhc2ggdGFibGUgdG8gdGhlIG5leHQgYXRvbSBudW1iZXIuCi0gKiAgICAgICAgUmV0
dXJuIHRoZSBhdG9tIHZhbHVlIG9mIHN0cmluZy4KLSAqLwotCi1pbnQgTG9va1VwQWRkU3RyaW5n
KEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQotewotICAgIGludCBoYXNoaW5kZXgs
IGF0b207Ci0KLSAgICBoYXNoaW5kZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7
Ci0gICAgYXRvbSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWU7Ci0gICAg
aWYgKGF0b20gPT0gMCkgewotICAgICAgICBhdG9tID0gQWxsb2NhdGVBdG9tKGF0YWJsZSk7Ci0g
ICAgICAgIFNldEF0b21WYWx1ZShhdGFibGUsIGF0b20sIGhhc2hpbmRleCk7Ci0gICAgfQotICAg
IHJldHVybiBhdG9tOwotfSAvLyBMb29rVXBBZGRTdHJpbmcKLQotLyoKLSAqIEdldEF0b21TdHJp
bmcoKQotICoKLSAqLwotCi1jb25zdCAgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUgKmF0
YWJsZSwgaW50IGF0b20pCi17Ci0gICAgaW50IHNvZmZzZXQ7Ci0KLSAgICBpZiAoYXRvbSA+IDAg
JiYgYXRvbSA8IGF0YWJsZS0+bmV4dEZyZWUpIHsKLSAgICAgICAgc29mZnNldCA9IGF0YWJsZS0+
YW1hcFthdG9tXTsKLSAgICAgICAgaWYgKHNvZmZzZXQgPiAwICYmIHNvZmZzZXQgPCBhdGFibGUt
PnN0YWJsZS5uZXh0RnJlZSkgewotICAgICAgICAgICAgcmV0dXJuICZhdGFibGUtPnN0YWJsZS5z
dHJpbmdzW3NvZmZzZXRdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICI8
aW50ZXJuYWwgZXJyb3I6IGJhZCBzb2Zmc2V0PiI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoYXRvbSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gIjxudWxsIGF0b20+
IjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdG9tID09IEVPRikgewotICAg
ICAgICAgICAgICAgIHJldHVybiAiPEVPRj4iOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIjxpbnZhbGlkIGF0b20+IjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0gLy8gR2V0QXRvbVN0cmluZwotCi0vKgotICogR2V0UmV2ZXJzZWRBdG9t
KCkKLSAqCi0gKi8KLQotaW50IEdldFJldmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50
IGF0b20pCi17Ci0gICAgaWYgKGF0b20gPiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7
Ci0gICAgICAgIHJldHVybiBhdGFibGUtPmFyZXZbYXRvbV07Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfSAvLyBHZXRSZXZlcnNlZEF0b20KLQotLyoKLSAqIEFkZEF0
b20oKSAtIEFkZCBhIHN0cmluZyB0byB0aGUgYXRvbSwgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBp
ZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlLgotICogICAgICAgICBSZXR1cm4gaXQncyBhdG9tIGlu
ZGV4LgotICovCi0KLWludCBBZGRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpz
KQotewotICAgIGludCBhdG9tOwotCi0gICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHMpOwotICAgIHJldHVybiBhdG9tOwotfSAvLyBBZGRBdG9tCi0KLS8qCi0gKiBBZGRBdG9tRml4
ZWQoKSAtIEFkZCBhbiBhdG9tIHRvIHRoZSBoYXNoIGFuZCBzdHJpbmcgdGFibGVzIGlmIGl0IGlz
bid0IGFscmVhZHkgdGhlcmUuCi0gKiAgICAgICAgIEFzc2lnbiBpdCB0aGUgYXRvbSB2YWx1ZSBv
ZiAiYXRvbSIuCi0gKi8KLQotc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFi
bGUsIGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKQotewotICAgIGludCBoYXNoaW5kZXgsIGxzaXpl
OwotCi0gICAgaGFzaGluZGV4ID0gTG9va1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOwotICAg
IGlmIChhdGFibGUtPm5leHRGcmVlID49IGF0YWJsZS0+c2l6ZSB8fCBhdG9tID49IGF0YWJsZS0+
c2l6ZSkgewotICAgICAgICBsc2l6ZSA9IGF0YWJsZS0+c2l6ZSoyOwotICAgICAgICBpZiAobHNp
emUgPD0gYXRvbSkKLSAgICAgICAgICAgIGxzaXplID0gYXRvbSArIDE7Ci0gICAgICAgIEdyb3dB
dG9tVGFibGUoYXRhYmxlLCBsc2l6ZSk7Ci0gICAgfQotICAgIGF0YWJsZS0+YW1hcFthdG9tXSA9
IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0uaW5kZXg7Ci0gICAgYXRhYmxlLT5odGFi
bGUuZW50cnlbaGFzaGluZGV4XS52YWx1ZSA9IGF0b207Ci0gICAgLy9pZiAoYXRvbSA+PSBhdGFi
bGUtPm5leHRGcmVlKQotICAgIC8vICAgIGF0YWJsZS0+bmV4dEZyZWUgPSBhdG9tICsgMTsKLSAg
ICB3aGlsZSAoYXRvbSA+PSBhdGFibGUtPm5leHRGcmVlKSB7Ci0gICAgICAgIGF0YWJsZS0+YXJl
dlthdGFibGUtPm5leHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOwotICAgICAg
ICBhdGFibGUtPm5leHRGcmVlKys7Ci0gICAgfQotICAgIHJldHVybiBhdG9tOwotfSAvLyBBZGRB
dG9tRml4ZWQKLQotLyoKLSAqIEluaXRBdG9tVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGF0b20g
dGFibGUuCi0gKgotICovCi0KLWludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBp
bnQgaHRzaXplKQotewotICAgIHVuc2lnbmVkIGludCBpaTsKLQotICAgIGh0c2l6ZSA9IGh0c2l6
ZSA8PSAwID8gSU5JVF9IQVNIX1RBQkxFX1NJWkUgOiBodHNpemU7Ci0gICAgaWYgKCFJbml0U3Ry
aW5nVGFibGUoJmF0YWJsZS0+c3RhYmxlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFJ
bml0SGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSwgaHRzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBhdGFibGUtPm5leHRGcmVlID0gMDsKLSAgICBhdGFibGUtPmFtYXAgPSBOVUxMOwot
ICAgIGF0YWJsZS0+c2l6ZSA9IDA7Ci0gICAgR3Jvd0F0b21UYWJsZShhdGFibGUsIElOSVRfQVRP
TV9UQUJMRV9TSVpFKTsKLSAgICBpZiAoIWF0YWJsZS0+YW1hcCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLyBJbml0aWFsaXplIGxvd2VyIHBhcnQgb2YgYXRvbSB0YWJsZSB0byAiPHVuZGVm
aW5lZD4iIGF0b206Ci0KLSAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCAiPHVuZGVmaW5lZD4iLCAw
KTsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBGSVJTVF9VU0VSX1RPS0VOX1NZOyBpaSsrKQotICAg
ICAgICBhdGFibGUtPmFtYXBbaWldID0gYXRhYmxlLT5hbWFwWzBdOwotCi0gICAgLy8gQWRkIHNp
bmdsZSBjaGFyYWN0ZXIgdG9rZW5zIHRvIHRoZSBhdG9tIHRhYmxlOgotCi0gICAgewotCQljb25z
dCBjaGFyICpzID0gIn4hJV4mKigpLSs9fCwuPD4vPzs6W117fSMiOwotICAgICAgICBjaGFyIHRb
Ml07Ci0KLSAgICAgICAgdFsxXSA9ICdcMCc7Ci0gICAgICAgIHdoaWxlICgqcykgewotICAgICAg
ICAgICAgdFswXSA9ICpzOwotICAgICAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdCwgc1sw
XSk7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBZGQgbXVs
dGlwbGUgY2hhcmFjdGVyIHNjYW5uZXIgdG9rZW5zIDoKLQotICAgIGZvciAoaWkgPSAwOyBpaSA8
IHNpemVvZih0b2tlbnMpL3NpemVvZih0b2tlbnNbMF0pOyBpaSsrKQotICAgICAgICBBZGRBdG9t
Rml4ZWQoYXRhYmxlLCB0b2tlbnNbaWldLnN0ciwgdG9rZW5zW2lpXS52YWwpOwotCi0gICAgLy8g
QWRkIGVycm9yIHN5bWJvbCBpZiBydW5uaW5nIGluIGVycm9yIG1vZGU6Ci0KLSAgICBpZiAoY3Bw
LT5vcHRpb25zLkVycm9yTW9kZSkKLSAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgImVycm9y
IiwgRVJST1JfU1kpOwotCi0gICAgQWRkQXRvbShhdGFibGUsICI8KioqIGVuZCBmaXhlZCBhdG9t
cyAqKio+Iik7Ci0KLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdEF0b21UYWJsZQotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLyBEZWJ1ZyBQcmludGluZyBGdW5jdGlvbnM6IC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0K
LS8qCi0gKiBQcmludEF0b21UYWJsZSgpCi0gKgotICovCi0KLXZvaWQgUHJpbnRBdG9tVGFibGUo
QXRvbVRhYmxlICphdGFibGUpCi17Ci0gICAgaW50IGlpOwotICAgIGNoYXIgc3RyWzIwMF07Ci0K
LSAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAg
IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0
YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKLSAgICAgICAgQ1BQRGVidWdMb2dNc2co
c3RyKTsKLSAgICB9Ci0gICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6
IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKLSAgICAgICAgICAgYXRhYmxlLT5o
dGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7Ci0gICAgQ1BQRGVidWdMb2dNc2co
c3RyKTsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBp
aSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUt
Pmh0YWJsZS5jb3VudHNbaWldKTsKLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9
Ci0KLX0gLy8gUHJpbnRBdG9tVGFibGUKLQotCi0vKgotICogR2V0U3RyaW5nT2ZBdG9tKCkKLSAq
Ci0gKi8KLQotY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRv
bSkKLXsKLQkgY2hhciogY2hyX3N0cjsKLQkgY2hyX3N0cj0mYXRhYmxlLT5zdGFibGUuc3RyaW5n
c1thdGFibGUtPmFtYXBbYXRvbV1dOwotCSByZXR1cm4gY2hyX3N0cjsKLX0gLy8gR2V0U3RyaW5n
T2ZBdG9tCi0KLS8qCi0gKiBGcmVlQXRvbVRhYmxlKCkgLSBGcmVlIHRoZSBhdG9tIHRhYmxlIGFu
ZCBhc3NvY2lhdGVkIG1lbW9yeQotICoKLSAqLwotCi12b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRh
YmxlICphdGFibGUpCi17Ci0gICAgRnJlZVN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSk7Ci0g
ICAgRnJlZUhhc2hUYWJsZSgmYXRhYmxlLT5odGFibGUpOwotICAgIGlmIChhdGFibGUtPmFtYXAp
Ci0gICAgICAgIGZyZWUoYXRhYmxlLT5hbWFwKTsKLSAgICBpZiAoYXRhYmxlLT5hcmV2KQotICAg
ICAgICBmcmVlKGF0YWJsZS0+YXJldik7Ci0gICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKLSAgICBh
dGFibGUtPmFyZXYgPSBOVUxMOwotICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOwotICAgIGF0YWJs
ZS0+c2l6ZSA9IDA7Ci19IC8vIEZyZWVBdG9tVGFibGUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIEVuZCBvZiBhdG9tLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDg0YzMyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
Ci1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQot
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1O
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwot
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
LVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
Ci1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBhdG9tLmgKLS8v
Ci0KLSNpZiAhZGVmaW5lZChfX0FUT01fSCkKLSNkZWZpbmUgX19BVE9NX0ggMQotCi10eXBlZGVm
IHN0cnVjdCBBdG9tVGFibGVfUmVjIEF0b21UYWJsZTsKLQotZXh0ZXJuIEF0b21UYWJsZSAqYXRh
YmxlOwotCi1pbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7
Ci12b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOwotaW50IEFkZEF0b20oQXRv
bVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpOwotdm9pZCBQcmludEF0b21UYWJsZShBdG9t
VGFibGUgKmF0YWJsZSk7Ci1pbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBj
b25zdCBjaGFyICpzKTsKLWNvbnN0IGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFi
bGUsIGludCBhdG9tKTsKLWludCBHZXRSZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGlu
dCBhdG9tKTsKLWNoYXIqIEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0
b20pOwotI2VuZGlmIC8vICFkZWZpbmVkKF9fQVRPTV9IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4MDg1My4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNv
cHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRp
b24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVz
ZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMg
TlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAg
SWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2Us
IGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgot
Ci1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5
b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29w
eXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNv
ZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUK
LU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJj
ZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRl
IHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3Rp
Y2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlz
Y2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdh
cmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dv
cyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhw
cmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2Vz
Ci1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1
ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGlu
ZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdo
aWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJl
IGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcg
UFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5H
IFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAot
Tk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4g
Q09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5W
SURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVY
RU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVD
VElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09G
VFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFD
VCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhF
UldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGNvbXBpbGUu
aAotLy8KLQotI2lmICFkZWZpbmVkKF9fQ09NUElMRV9IKQotI2RlZmluZSBfX0NPTVBJTEVfSCAx
Ci0KLWludCBJbml0Q1BQU3RydWN0KHZvaWQpOwotCi10eXBlZGVmIHN0cnVjdCBPcHRpb25zX1Jl
Y3sKLSAgICBjb25zdCBjaGFyICpwcm9maWxlU3RyaW5nOwotICAgIGludCBFcnJvck1vZGU7Ci0g
ICAgaW50IFF1aWV0OwotCQotICAgIC8vIERlYnVnIFRoZSBDb21waWxlciBvcHRpb25zOgotICAg
IGludCBEdW1wQXRvbVRhYmxlOwotfSBPcHRpb25zOwotCi0jZGVmaW5lIE1BWF9JRl9ORVNUSU5H
ICA2NAotc3RydWN0IENQUFN0cnVjdF9SZWMgewotICAgIC8vIFB1YmxpYyBtZW1iZXJzCi0gICAg
U291cmNlTG9jICpwTGFzdFNvdXJjZUxvYzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBz
dGF0ZW1lbnQgYnkgdGhlIHRyZWUgd2Fsa2VycwotICAgIE9wdGlvbnMgb3B0aW9uczsgICAgICAg
ICAgICAvLyBDb21waWxlIG9wdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQotICAgIC8vIFByaXZhdGUg
bWVtYmVycwotICAgIFNvdXJjZUxvYyBsYXN0U291cmNlTG9jOwotCi0gICAgLy8gU2Nhbm5lciBk
YXRhOgotCi0gICAgU291cmNlTG9jICp0b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2NhdGlv
biBvZiBtb3N0IHJlY2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCi0gICAgaW50IG1vc3RS
ZWNlbnRUb2tlbjsgICAgICAgIC8vIE1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5u
ZXIKLSAgICBJbnB1dFNyYyAqY3VycmVudElucHV0OwotICAgIGludCBwcmV2aW91c190b2tlbjsK
LSAgICBpbnQgcGFzdEZpcnN0U3RhdGVtZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUgdGhh
dCAjdmVyc2lvbiBpcyB0aGUgZmlyc3Qgc3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlmIHBy
ZXNlbnQKLSAgICAKLQl2b2lkICpwQzsgICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0aGUg
cGFyc2VDb250ZXh0IG9mIHRoZSBjb21waWxlIG9iamVjdCBpbiBjcHAuICAKLSAgICAgCi0gICAg
Ly8gUHJpdmF0ZSBtZW1iZXJzOgotICAgIFNvdXJjZUxvYyBsdG9rZW5Mb2M7Ci0JaW50IGlmZGVw
dGg7ICAgICAgICAgICAgICAgIC8vY3VycmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3RpbmcgaW4g
dGhlIGNwcC5jIGZpbGUgKHByZS1wcm9jZXNzb3IpICAgIAotICAgIGludCBlbHNlZGVwdGhbTUFY
X0lGX05FU1RJTkddOy8vS2VlcCBhIHRyYWNrIG9mICNpZiBkZXB0aC4uTWF4IGFsbG93ZWQgaXMg
NjQuCi0gICAgaW50IGVsc2V0cmFja2VyOyAgICAgICAgICAgIC8vI2lmLSNlbHNlIGFuZCAjZW5k
aWYgY29uc3RydWN0cy4uLkNvdW50ZXIuCi0gICAgY29uc3QgY2hhciAqRXJyTXNnOwotICAgIGlu
dCBDb21waWxlRXJyb3I7ICAgICAgICAgICAvL0luZGljYXRlIGNvbXBpbGUgZXJyb3Igd2hlbiAj
ZXJyb3IsICNlbHNlLCNlbGlmIG1pc21hdGNoLgotCi0gICAgLy8KLSAgICAvLyBHbG9iYWxzIHVz
ZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiBQYVBhcnNlU3RyaW5ncygpIGFuZCB5eV9pbnB1dCgp
YW5kIAotICAgIC8vIGFsc28gYWNyb3NzIHRoZSBmaWxlcy4oZ2VuX2dsc2xhbmcuY3BwIGFuZCBz
Y2FubmVyLmMpCi0gICAgLy8KLSAgICBpbnQgUGFXaGljaFN0cjsgICAgICAgICAgICAgLy8gd2hp
Y2ggc3RyaW5nIHdlJ3JlIHBhcnNpbmcKLSAgICBjb25zdCBpbnQqIFBhU3RyTGVuOyAgICAgICAg
Ly8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0aGUgUGFBcmd2IHN0cmluZ3MKLSAgICBpbnQgUGFBcmdj
OyAgICAgICAgICAgICAgICAgLy8gY291bnQgb2Ygc3RyaW5ncyBpbiB0aGUgYXJyYXkKLSAgICBj
b25zdCBjaGFyKiBjb25zdCogUGFBcmd2OyAgLy8gb3VyIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFy
c2UgICAgCi0gICAgdW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVPRiA6IDE7Ci19OwotCi0jZW5k
aWYgLy8gIWRlZmluZWQoX19DT01QSUxFX0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOGExMDc2Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCisrKyAvZGV2L251bGwKQEAgLTEs
MTExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBs
aWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwg
bW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1j
b25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3Jl
ZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBv
ciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAot
c3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9u
LWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9y
aWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwg
cmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwg
d2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1m
b3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdh
cmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlz
IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1
Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBu
YW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBv
cmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0
aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxp
ZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1p
dGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRl
cml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29m
dHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1
bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFT
IElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElP
TiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwg
TUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlU
UyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBP
VEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9S
IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklU
UzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgot
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9O
IEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FV
U0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5W
SURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGNwcC5jCi0vLwotCi0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0K
LSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNTQpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE1MikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NzA2KQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApOwot
Ci0vKiBEb24ndCB1c2UgbWVtb3J5LmMncyByZXBsYWNlbWVudHMsIGFzIHdlIGNsZWFuIHVwIHBy
b3Blcmx5IGhlcmUgKi8KLSN1bmRlZiBtYWxsb2MKLSN1bmRlZiBmcmVlCi0KLXN0YXRpYyBpbnQg
YmluZEF0b20gPSAwOwotc3RhdGljIGludCBjb25zdEF0b20gPSAwOwotc3RhdGljIGludCBkZWZh
dWx0QXRvbSA9IDA7Ci1zdGF0aWMgaW50IGRlZmluZUF0b20gPSAwOwotc3RhdGljIGludCBkZWZp
bmVkQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVsc2VBdG9tID0gMDsKLXN0YXRpYyBpbnQgZWxpZkF0
b20gPSAwOwotc3RhdGljIGludCBlbmRpZkF0b20gPSAwOwotc3RhdGljIGludCBpZkF0b20gPSAw
Owotc3RhdGljIGludCBpZmRlZkF0b20gPSAwOwotc3RhdGljIGludCBpZm5kZWZBdG9tID0gMDsK
LXN0YXRpYyBpbnQgaW5jbHVkZUF0b20gPSAwOwotc3RhdGljIGludCBsaW5lQXRvbSA9IDA7Ci1z
dGF0aWMgaW50IHByYWdtYUF0b20gPSAwOwotc3RhdGljIGludCB0ZXh1bml0QXRvbSA9IDA7Ci1z
dGF0aWMgaW50IHVuZGVmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVycm9yQXRvbSA9IDA7Ci1zdGF0
aWMgaW50IF9fTElORV9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IF9fRklMRV9fQXRvbSA9IDA7Ci1z
dGF0aWMgaW50IF9fVkVSU0lPTl9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IHZlcnNpb25BdG9tID0g
MDsKLXN0YXRpYyBpbnQgZXh0ZW5zaW9uQXRvbSA9IDA7Ci0KLXN0YXRpYyBTY29wZSAqbWFjcm9z
ID0gMDsKLSNkZWZpbmUgTUFYX01BQ1JPX0FSR1MgIDY0Ci0KLXN0YXRpYyBTb3VyY2VMb2MgaWZs
b2M7IC8qIG91dGVybW9zdCAjaWYgKi8KLQotaW50IEluaXRDUFAodm9pZCkKLXsKLSAgICBjaGFy
ICAgICAgICBidWZmZXJbNjRdLCAqdDsKLSAgICBjb25zdCBjaGFyICAqZjsKLQotICAgIC8vIEFk
ZCB2YXJpb3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKLSAgICBiaW5k
QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJiaW5kIik7Ci0gICAgY29uc3RBdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImNvbnN0Iik7Ci0gICAgZGVmYXVsdEF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmYXVsdCIpOwotICAgIGRlZmluZUF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5lIik7Ci0gICAgZGVmaW5lZEF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiZGVmaW5lZCIpOwotICAgIGVsaWZBdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgImVsaWYiKTsKLSAgICBlbHNlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJlbHNlIik7Ci0gICAgZW5kaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVuZGlm
Iik7Ci0gICAgaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmIik7Ci0gICAgaWZk
ZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmZGVmIik7Ci0gICAgaWZuZGVmQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZm5kZWYiKTsKLSAgICBpbmNsdWRlQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpbmNsdWRlIik7Ci0gICAgbGluZUF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAibGluZSIpOwotICAgIHByYWdtYUF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAicHJhZ21hIik7Ci0gICAgdGV4dW5pdEF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCAidGV4dW5pdCIpOwotICAgIHVuZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhh
dGFibGUsICJ1bmRlZiIpOwotCWVycm9yQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJl
cnJvciIpOwotICAgIF9fTElORV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0xJ
TkVfXyIpOwotICAgIF9fRklMRV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0ZJ
TEVfXyIpOwotCV9fVkVSU0lPTl9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX1ZF
UlNJT05fXyIpOwotICAgIHZlcnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInZl
cnNpb24iKTsKLSAgICBleHRlbnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImV4
dGVuc2lvbiIpOwotICAgIG1hY3JvcyA9IE5ld1Njb3BlSW5Qb29sKG1lbV9DcmVhdGVQb29sKDAs
IDApKTsKLSAgICBzdHJjcHkoYnVmZmVyLCAiUFJPRklMRV8iKTsKLSAgICB0ID0gYnVmZmVyICsg
c3RybGVuKGJ1ZmZlcik7Ci0gICAgZiA9IGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nOwotICAg
IHdoaWxlICgoaXNhbG51bSgqZikgfHwgKmYgPT0gJ18nKSAmJiB0IDwgYnVmZmVyICsgc2l6ZW9m
KGJ1ZmZlcikgLSAxKQotICAgICAgICAqdCsrID0gdG91cHBlcigqZisrKTsKLSAgICAqdCA9IDA7
Ci0KLSAgICBQcmVkZWZpbmVJbnRNYWNybygiR0xfRVMiLCAxKTsKLSAgICBQcmVkZWZpbmVJbnRN
YWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKLQotCXJldHVybiAxOwotfSAv
LyBJbml0Q1BQCi0KLWludCBGcmVlQ1BQKHZvaWQpCi17Ci0gICAgaWYgKG1hY3JvcykKLSAgICB7
Ci0gICAgICAgIG1lbV9GcmVlUG9vbChtYWNyb3MtPnBvb2wpOwotICAgICAgICBtYWNyb3MgPSAw
OwotICAgIH0KLQotICAgIHJldHVybiAxOwotfQotCi1pbnQgRmluYWxDUFAodm9pZCkKLXsKLQlp
ZiAoY3BwLT5pZmRlcHRoKQotCQlDUFBFcnJvclRvSW5mb0xvZygiI2lmIG1pc21hdGNoIik7Ci0g
ICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgQ1BQZGVmaW5lKHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQotewotICAgIGludCB0b2tlbiwgbmFtZSwgYXJnc1tNQVhfTUFDUk9fQVJHU10sIGFyZ2M7
Ci0gICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgU3lt
Ym9sICpzeW1iOwotICAgIFNvdXJjZUxvYyBkdW1teUxvYzsKLSAgICBtZW1zZXQoJm1hYywgMCwg
c2l6ZW9mKG1hYykpOwotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIp
IHsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKLSAgICAgICAgcmV0dXJu
IHRva2VuOwotICAgIH0KLSAgICBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICBpZiAodG9rZW4gPT0gJygnICYmICF5eWx2YWxwcC0+c2NfaW50KSB7Ci0gICAgICAgIC8v
IGdhdGhlciBhcmd1bWVudHMKLSAgICAgICAgYXJnYyA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChhcmdjID09IDAgJiYgdG9rZW4gPT0gJyknKSBi
cmVhazsKLSAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgewotCQkJCUNQ
UEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyZ2MgPCBNQVhfTUFDUk9fQVJHUykK
LSAgICAgICAgICAgICAgICBhcmdzW2FyZ2MrK10gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Ci0gICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gd2hpbGUgKHRva2VuID09ICcsJyk7Ci0gICAgICAgIGlm
ICh0b2tlbiAhPSAnKScpIHsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5l
Iik7Ci0gICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIH0KLSAgICAgICAgbWFjLmFy
Z2MgPSBhcmdjOwotICAgICAgICBtYWMuYXJncyA9IG1lbV9BbGxvYyhtYWNyb3MtPnBvb2wsIGFy
Z2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgIG1lbWNweShtYWMuYXJncywgYXJncywgYXJnYyAq
IHNpemVvZihpbnQpKTsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCX0KLSAgICBtYWMuYm9keSA9IE5ld1Rva2Vu
U3RyZWFtKEdldEF0b21TdHJpbmcoYXRhYmxlLCBuYW1lKSwgbWFjcm9zLT5wb29sKTsKLSAgICB3
aGlsZSAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykgewotICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0
ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA8PSAw
KSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhw
ZWN0ZWQgZW5kIG9mIGlucHV0IGluICNkZWZpbmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4
cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgUmVjb3JkVG9rZW4obWFjLmJvZHksIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICB9OwotCi0gICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOwotICAg
IGlmIChzeW1iKSB7Ci0gICAgICAgIGlmICghc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYpIHsKLSAg
ICAgICAgICAgIC8vIGFscmVhZHkgZGVmaW5lZCAtLSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5IGFy
ZSBpZGVudGljYWwKLSAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdjICE9IG1h
Yy5hcmdjKSBnb3RvIGVycm9yOwotICAgICAgICAgICAgZm9yIChhcmdjPTA7IGFyZ2MgPCBtYWMu
YXJnYzsgYXJnYysrKQotICAgICAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdz
W2FyZ2NdICE9IG1hYy5hcmdzW2FyZ2NdKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9y
OwotICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSk7
Ci0gICAgICAgICAgICBSZXdpbmRUb2tlblN0cmVhbShtYWMuYm9keSk7Ci0gICAgICAgICAgICBk
byB7Ci0gICAgICAgICAgICAgICAgaW50IG9sZF9sdmFsLCBvbGRfdG9rZW47Ci0gICAgICAgICAg
ICAgICAgb2xkX3Rva2VuID0gUmVhZFRva2VuKHN5bWItPmRldGFpbHMubWFjLmJvZHksIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgICAgICBvbGRfbHZhbCA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAg
ICAgICAgICAgICAgdG9rZW4gPSBSZWFkVG9rZW4obWFjLmJvZHksIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gIT0gb2xkX3Rva2VuIHx8IHl5bHZhbHBwLT5zY19pbnQgIT0g
b2xkX2x2YWwpIHsgCi0gICAgICAgICAgICAgICAgZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAg
IFN0b3JlU3RyKCJNYWNybyBSZWRlZmluZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVT
dHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxuYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgRGVjTGluZU51bWJl
cigpOwotICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVz
ZXRUU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyB9Ci0gICAgICAgICAgICB9
IHdoaWxlICh0b2tlbiA+IDApOwotICAgICAgICB9Ci0gICAgICAgIC8vRnJlZU1hY3JvKCZzeW1i
LT5kZXRhaWxzLm1hYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHVtbXlMb2MuZmlsZSA9IDA7
Ci0gICAgICAgIGR1bW15TG9jLmxpbmUgPSAwOwotICAgICAgICBzeW1iID0gQWRkU3ltYm9sKCZk
dW1teUxvYywgbWFjcm9zLCBuYW1lLCBNQUNST19TKTsKLSAgICB9Ci0gICAgc3ltYi0+ZGV0YWls
cy5tYWMgPSBtYWM7Ci0gICAgcmV0dXJuICdcbic7Ci19IC8vIENQUGRlZmluZQotCi1zdGF0aWMg
aW50IENQUHVuZGVmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
U3ltYm9sICpzeW1iOwotCWlmKHRva2VuID09ICdcbicpewotCQlDUFBFcnJvclRvSW5mb0xvZygi
I3VuZGVmIik7Ci0JICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgaWYgKHRva2VuICE9IENQ
UF9JREVOVElGSUVSKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc3ltYiA9IExvb2tVcFN5
bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgaWYgKHN5bWIpIHsKLSAgICAg
ICAgc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYgPSAxOwotICAgIH0KLSAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYg
KHRva2VuICE9ICdcbicpIHsKLSAgICBlcnJvcjoKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IiN1bmRlZiIpOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUHVuZGVmCi0KLS8q
IENQUGVsc2UgLS0gc2tpcCBmb3J3YXJkIHRvIGFwcHJvcHJpYXRlIHNwb3QuICBUaGlzIGlzIGFj
dHVhbGx5IHVzZWQKLSoqIHRvIHNraXAgdG8gYW5kICNlbmRpZiBhZnRlciBzZWVpbmcgYW4gI2Vs
c2UsIEFORCB0byBza2lwIHRvIGEgI2Vsc2UsCi0qKiAjZWxpZiwgb3IgI2VuZGlmIGFmdGVyIGEg
I2lmLyNpZmRlZi8jaWZuZGVmLyNlbGlmIHRlc3Qgd2FzIGZhbHNlCi0qLwotCi1zdGF0aWMgaW50
IENQUGVsc2UoaW50IG1hdGNoZWxzZSwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50
IGF0b20sZGVwdGg9MDsKLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQotCXdoaWxlICh0b2tlbiA+IDApIHsKLSAg
ICAgICAgaWYgKHRva2VuICE9ICcjJykgewotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdc
bicpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9
IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0
aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0JCWlmICgodG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApKSAhPSBDUFBfSURFTlRJ
RklFUikKLQkJCWNvbnRpbnVlOwotICAgICAgICBhdG9tID0geXlsdmFscHAtPnNjX2lkZW50Owot
ICAgICAgICBpZiAoYXRvbSA9PSBpZkF0b20gfHwgYXRvbSA9PSBpZmRlZkF0b20gfHwgYXRvbSA9
PSBpZm5kZWZBdG9tKXsKLSAgICAgICAgICAgIGRlcHRoKys7IGNwcC0+aWZkZXB0aCsrOyBjcHAt
PmVsc2V0cmFja2VyKys7Ci0gICAgICAgICAgICBpZiAoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05F
U1RJTkcpIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0
aW5nIGRlcHRoIGV4Y2VlZGVkIik7Ci0gICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3Ig
PSAxOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgLy8gc2FuaXR5IGNoZWNrIGVsc2V0cmFja2VyCi0gICAgICAgICAgICBpZiAoY3BwLT5lbHNl
dHJhY2tlciA8IDAgfHwgY3BwLT5lbHNldHJhY2tlciA+PSBNQVhfSUZfTkVTVElORykgewotICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtaXNtYXRjaGVkICNpZi8jZW5kaWYgc3Rh
dGVtZW50cyIpOwotICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNwcC0+ZWxz
ZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChhdG9tID09IGVuZGlmQXRvbSkgewotICAgICAgICAgICAgaWYoLS1kZXB0aDwwKXsKLSAgICAg
ICAgICAgICAgICBpZiAoY3BwLT5lbHNldHJhY2tlcikKLSAgICAgICAgICAgICAgICAgICAgLS1j
cHAtPmVsc2V0cmFja2VyOwotICAgICAgICAgICAgICAgIGlmIChjcHAtPmlmZGVwdGgpIAotICAg
ICAgICAgICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNr
ZXI7Ci0gICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmICgoKGludCkobWF0Y2hlbHNlKSAhPSAwKSYmIGRlcHRoPT0wKSB7Ci0JCQlpZiAoYXRvbSA9
PSBlbHNlQXRvbSApIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xv
ZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3Rp
dmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRv
a2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBp
bnB1dCBmb2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEg
bmV3bGluZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSAKLQkJCQlicmVhazsKLQkJCX0gCi0JCQllbHNlIGlmIChhdG9tID09IGVsaWZBdG9tKSB7
Ci0gICAgICAgICAgICAgICAgLyogd2UgZGVjcmVtZW50IGNwcC0+aWZkZXB0aCBoZXJlLCBiZWNh
dXNlIENQUGlmIHdpbGwgaW5jcmVtZW50Ci0gICAgICAgICAgICAgICAgICogaXQgYW5kIHdlIHJl
YWxseSB3YW50IHRvIGxlYXZlIGl0IGFsb25lICovCi0JCQkJaWYgKGNwcC0+aWZkZXB0aCl7Ci0J
CQkJCS0tY3BwLT5pZmRlcHRoOwotCQkJCSAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7Ci0JCQkJfQot
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBpZih5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0J
CX0KLSAgICAgICAgZWxzZSBpZigoYXRvbT09ZWxzZUF0b20pICYmICghQ2hrQ29ycmVjdEVsc2VO
ZXN0aW5nKCkpKXsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBh
ICNlbHNlIik7Ci0gICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KLQl9OwotICAgIHJldHVybiB0b2tlbjsKLX0KLQotZW51bSBl
dmFsX3ByZWMgewotICAgIE1JTl9QUkVDLAotICAgIENPTkQsIExPR09SLCBMT0dBTkQsIE9SLCBY
T1IsIEFORCwgRVFVQUwsIFJFTEFUSU9OLCBTSElGVCwgQURELCBNVUwsIFVOQVJZLAotICAgIE1B
WF9QUkVDCi19OwotCi1zdGF0aWMgaW50IG9wX2xvZ29yKGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSB8fCBiOyB9Ci1zdGF0aWMgaW50IG9wX2xvZ2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEg
JiYgYjsgfQotc3RhdGljIGludCBvcF9vcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgfCBiOyB9
Ci1zdGF0aWMgaW50IG9wX3hvcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgXiBiOyB9Ci1zdGF0
aWMgaW50IG9wX2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiBiOyB9Ci1zdGF0aWMgaW50
IG9wX2VxKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci1zdGF0aWMgaW50IG9wX25l
KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAhPSBiOyB9Ci1zdGF0aWMgaW50IG9wX2dlKGludCBh
LCBpbnQgYikgeyByZXR1cm4gYSA+PSBiOyB9Ci1zdGF0aWMgaW50IG9wX2xlKGludCBhLCBpbnQg
YikgeyByZXR1cm4gYSA8PSBiOyB9Ci1zdGF0aWMgaW50IG9wX2d0KGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSA+IGI7IH0KLXN0YXRpYyBpbnQgb3BfbHQoaW50IGEsIGludCBiKSB7IHJldHVybiBh
IDwgYjsgfQotc3RhdGljIGludCBvcF9zaGwoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw8IGI7
IH0KLXN0YXRpYyBpbnQgb3Bfc2hyKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PiBiOyB9Ci1z
dGF0aWMgaW50IG9wX2FkZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9Ci1zdGF0aWMg
aW50IG9wX3N1YihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgLSBiOyB9Ci1zdGF0aWMgaW50IG9w
X211bChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKiBiOyB9Ci1zdGF0aWMgaW50IG9wX2Rpdihp
bnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgLyBiOyB9Ci1zdGF0aWMgaW50IG9wX21vZChpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgJSBiOyB9Ci1zdGF0aWMgaW50IG9wX3BvcyhpbnQgYSkgeyByZXR1
cm4gYTsgfQotc3RhdGljIGludCBvcF9uZWcoaW50IGEpIHsgcmV0dXJuIC1hOyB9Ci1zdGF0aWMg
aW50IG9wX2NtcGwoaW50IGEpIHsgcmV0dXJuIH5hOyB9Ci1zdGF0aWMgaW50IG9wX25vdChpbnQg
YSkgeyByZXR1cm4gIWE7IH0KLQotc3RydWN0IHsKLSAgICBpbnQgdG9rZW4sIHByZWMsICgqb3Ap
KGludCwgaW50KTsKLX0gYmlub3BbXSA9IHsKLSAgICB7IENQUF9PUl9PUCwgTE9HT1IsIG9wX2xv
Z29yIH0sCi0gICAgeyBDUFBfQU5EX09QLCBMT0dBTkQsIG9wX2xvZ2FuZCB9LAotICAgIHsgJ3wn
LCBPUiwgb3Bfb3IgfSwKLSAgICB7ICdeJywgWE9SLCBvcF94b3IgfSwKLSAgICB7ICcmJywgQU5E
LCBvcF9hbmQgfSwKLSAgICB7IENQUF9FUV9PUCwgRVFVQUwsIG9wX2VxIH0sCi0gICAgeyBDUFBf
TkVfT1AsIEVRVUFMLCBvcF9uZSB9LAotICAgIHsgJz4nLCBSRUxBVElPTiwgb3BfZ3QgfSwKLSAg
ICB7IENQUF9HRV9PUCwgUkVMQVRJT04sIG9wX2dlIH0sCi0gICAgeyAnPCcsIFJFTEFUSU9OLCBv
cF9sdCB9LAotICAgIHsgQ1BQX0xFX09QLCBSRUxBVElPTiwgb3BfbGUgfSwKLSAgICB7IENQUF9M
RUZUX09QLCBTSElGVCwgb3Bfc2hsIH0sCi0gICAgeyBDUFBfUklHSFRfT1AsIFNISUZULCBvcF9z
aHIgfSwKLSAgICB7ICcrJywgQURELCBvcF9hZGQgfSwKLSAgICB7ICctJywgQURELCBvcF9zdWIg
fSwKLSAgICB7ICcqJywgTVVMLCBvcF9tdWwgfSwKLSAgICB7ICcvJywgTVVMLCBvcF9kaXYgfSwK
LSAgICB7ICclJywgTVVMLCBvcF9tb2QgfSwKLX07Ci0KLXN0cnVjdCB7Ci0gICAgaW50IHRva2Vu
LCAoKm9wKShpbnQpOwotfSB1bm9wW10gPSB7Ci0gICAgeyAnKycsIG9wX3BvcyB9LAotICAgIHsg
Jy0nLCBvcF9uZWcgfSwKLSAgICB7ICd+Jywgb3BfY21wbCB9LAotICAgIHsgJyEnLCBvcF9ub3Qg
fSwKLX07Ci0KLSNkZWZpbmUgQUxFTihBKSAoc2l6ZW9mKEEpL3NpemVvZihBWzBdKSkKLQotc3Rh
dGljIGludCBldmFsKGludCB0b2tlbiwgaW50IHByZWMsIGludCAqcmVzLCBpbnQgKmVyciwgeXlz
dHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50ICAgICAgICAgaSwgdmFsOwotICAgIFN5bWJv
bCAgICAgICpzOwotICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewotICAgICAgICBp
ZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZWRBdG9tKSB7Ci0gICAgICAgICAgICBpbnQg
bmVlZGNsb3NlID0gMDsKLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9
PSAnKCcpIHsKLSAgICAgICAgICAgICAgICBuZWVkY2xvc2UgPSAxOwotICAgICAgICAgICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJ
RklFUikKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgKnJlcyA9IChz
ID0gTG9va1VwU3ltYm9sKG1hY3JvcywgeXlsdmFscHAtPnNjX2lkZW50KSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgID8gIXMtPmRldGFpbHMubWFjLnVuZGVmIDogMDsKLSAgICAgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgIGlmIChuZWVkY2xvc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9r
ZW4gIT0gJyknKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgIH0KLQkJfSBlbHNlIGlmIChNYWNyb0V4cGFuZCh5eWx2YWxw
cC0+c2NfaWRlbnQsIHl5bHZhbHBwKSkgewotCQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgcmV0dXJuIGV2
YWwodG9rZW4sIHByZWMsIHJlcywgZXJyLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0JfSBlbHNlIGlmICh0b2tlbiA9PSBD
UFBfSU5UQ09OU1RBTlQpIHsKLSAgICAgICAgKnJlcyA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICB9IGVsc2UgaWYgKHRva2VuID09ICcoJykgewotICAgICAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgTUlOX1BSRUMsIHJlcywgZXJyLCB5eWx2YWxwcCk7
Ci0gICAgICAgIGlmICghKmVycikgewotICAgICAgICAgICAgaWYgKHRva2VuICE9ICcpJykKLSAg
ICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gQUxFTih1bm9wKSAtIDE7IGkgPj0gMDsgaS0t
KSB7Ci0gICAgICAgICAgICBpZiAodW5vcFtpXS50b2tlbiA9PSB0b2tlbikKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIFVOQVJZLCByZXMsIGVyciwg
eXlsdmFscHApOwotICAgICAgICAgICAgKnJlcyA9IHVub3BbaV0ub3AoKnJlcyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotICAg
IHdoaWxlICghKmVycikgewotICAgICAgICBpZiAodG9rZW4gPT0gJyknIHx8IHRva2VuID09ICdc
bicpIGJyZWFrOwotICAgICAgICBmb3IgKGkgPSBBTEVOKGJpbm9wKSAtIDE7IGkgPj0gMDsgaS0t
KSB7Ci0gICAgICAgICAgICBpZiAoYmlub3BbaV0udG9rZW4gPT0gdG9rZW4pCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPCAwIHx8IGJpbm9wW2ldLnBy
ZWMgPD0gcHJlYykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB2YWwgPSAqcmVzOwotICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgYmlub3BbaV0ucHJlYywgcmVz
LCBlcnIsIHl5bHZhbHBwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiaW5vcFtpXS5vcCA9PSBv
cF9kaXYgfHwgYmlub3BbaV0ub3AgPT0gb3BfbW9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoKnJlcyA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJwcmVwcm9jZXNzb3IgZGl2aWRlIG9yIG1vZHVsbyBieSB6ZXJvIik7Ci0gICAgICAg
ICAgICAgICAgKmVyciA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKnJlcyA9IGJpbm9wW2ldLm9wKHZhbCwgKnJl
cyk7Ci0gICAgfQotICAgIHJldHVybiB0b2tlbjsKLWVycm9yOgotICAgIENQUEVycm9yVG9JbmZv
TG9nKCJpbmNvcnJlY3QgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSIpOwotICAgICplcnIgPSAxOwot
ICAgICpyZXMgPSAwOwotICAgIHJldHVybiB0b2tlbjsKLX0gLy8gZXZhbAotCi1zdGF0aWMgaW50
IENQUGlmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpbnQgcmVz
ID0gMCwgZXJyID0gMDsKLQotICAgIGlmICghY3BwLT5pZmRlcHRoKyspCi0gICAgICAgIGlmbG9j
ID0gKmNwcC0+dG9rZW5Mb2M7Ci0gICAgaWYoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05FU1RJTkcp
ewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4Y2Vl
ZGVkIik7Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIGNwcC0+ZWxzZXRyYWNrZXIrKzsKLSAgICAvLyBzYW5pdHkgY2hlY2sgZWxz
ZXRyYWNrZXIKLSAgICBpZiAoY3BwLT5lbHNldHJhY2tlciA8IDAgfHwgY3BwLT5lbHNldHJhY2tl
ciA+PSBNQVhfSUZfTkVTVElORykgewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWlzbWF0
Y2hlZCAjaWYvI2VuZGlmIHN0YXRlbWVudHMiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3Ig
PSAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5l
bHNldHJhY2tlcl0gPSAwOwotCi0gICAgdG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywgJnJl
cywgJmVyciwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgIENQ
UFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjaWYgcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICB3aGlsZSAo
dG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKHRva2Vu
IDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluICNpZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
IC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IAotICAgIGlmICghcmVzICYmICFlcnIpIHsKLSAg
ICAgICAgdG9rZW4gPSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dG9rZW47Ci19IC8vIENQUGlmCi0KLXN0YXRpYyBpbnQgQ1BQaWZkZWYoaW50IGRlZmluZWQsIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaW50IG5hbWUgPSB5eWx2
YWxwcC0+c2NfaWRlbnQ7Ci0gICAgaWYoKytjcHAtPmlmZGVwdGggPiBNQVhfSUZfTkVTVElORyl7
Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVk
ZWQiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgY3BwLT5lbHNldHJhY2tlcisrOwotICAgIC8vIHNhbml0eSBjaGVjayBlbHNl
dHJhY2tlcgotICAgIGlmIChjcHAtPmVsc2V0cmFja2VyIDwgMCB8fCBjcHAtPmVsc2V0cmFja2Vy
ID49IE1BWF9JRl9ORVNUSU5HKSB7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtaXNtYXRj
aGVkICNpZi8jZW5kaWYgc3RhdGVtZW50cyIpOwotICAgICAgICBjcHAtPkNvbXBpbGVFcnJvciA9
IDE7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVs
c2V0cmFja2VyXSA9IDA7Ci0KLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAg
ICAgICAgICAgIGRlZmluZWQgPyBDUFBFcnJvclRvSW5mb0xvZygiaWZkZWYiKTpDUFBFcnJvclRv
SW5mb0xvZygiaWZuZGVmIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3ltYm9sICpzID0gTG9v
a1VwU3ltYm9sKG1hY3JvcywgbmFtZSk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2Vu
ICE9ICdcbicpIHsKLSAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQg
dG9rZW5zIGZvbGxvd2luZyAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVk
IGEgbmV3bGluZSIpOwotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9G
IG9yIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVj
dGVkIGVuZCBvZiBpbnB1dCBpbiAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVj
dGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgocyAmJiAh
cy0+ZGV0YWlscy5tYWMudW5kZWYpID8gMSA6IDApICE9IGRlZmluZWQpCi0gICAgICAgICAgICB0
b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19
IC8vIENQUGlmZGVmCi0KLXN0YXRpYyBpbnQgQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkg
Ci17Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLQlpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1iZXIoKTsK
LSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0gICAgICAgIEluY0xpbmVOdW1i
ZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQllbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09O
U1RBTlQpIHsKLQkJeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7
Ci0JCVNldExpbmVOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7Ci0gICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgCi0JCWlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKLSAgICAgICAgICAgIHl5bHZh
bHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotCQkJU2V0U3RyaW5nTnVt
YmVyKHl5bHZhbHBwLT5zY19pbnQpOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQkJaWYodG9rZW4hPSdc
bicpCi0JCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0gICAgICAgIH0KLQkJZWxzZSBp
ZiAodG9rZW4gPT0gJ1xuJyl7Ci0JCQlyZXR1cm4gdG9rZW47Ci0JCX0KLQkJZWxzZXsKLSAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOwotCQl9Ci0JfQotCWVsc2V7Ci0gICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0JfQotICAgIHJldHVybiB0b2tlbjsK
LX0KLQotc3RhdGljIGludCBDUFBlcnJvcih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotCi0JaW50
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICBjb25zdCBjaGFyICptZXNzYWdlOwotCQotICAgIHdoaWxlICh0b2tlbiAhPSAn
XG4nKSB7Ci0gICAgICAgIGlmICh0b2tlbiA8PSAwKXsKLSAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZXJyb3IgcHJlcHJvY2Vzc29yIGRp
cmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIH1lbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9PSBD
UFBfSU5UQ09OU1RBTlQpewotICAgICAgICAgICAgU3RvcmVTdHIoeXlsdmFscHAtPnN5bWJvbF9u
YW1lKTsKLQkJfWVsc2UgaWYodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgfHwgdG9rZW4gPT0gQ1BQ
X1NUUkNPTlNUQU5UKXsKLQkJCVN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFs
cHAtPnNjX2lkZW50KSk7Ci0JCX1lbHNlIHsKLQkJICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRv
bShhdGFibGUsdG9rZW4pKTsKLQkJfQotCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotCURlY0xpbmVOdW1iZXIoKTsKLQkv
L3N0b3JlIHRoaXMgbXNnIGludG8gdGhlIHNoYWRlcidzIGluZm9ybWF0aW9uIGxvZy4uc2V0IHRo
ZSBDb21waWxlIEVycm9yIGZsYWchISEhCi0JbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAg
IENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICBSZXNldFRTdHJpbmcoKTsKLSAgICBjcHAt
PkNvbXBpbGVFcnJvcj0xOwotICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICByZXR1cm4gJ1xuJzsK
LX0vL0NQUGVycm9yCi0KLXN0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQotewotCWNoYXIgU3JjU3RyTmFtZVsyXTsKLQljaGFyKiogYWxsVG9rZW5zOwotCWludCB0b2tl
bkNvdW50ID0gMDsKLQlpbnQgbWF4VG9rZW5Db3VudCA9IDEwOwotCWNvbnN0IGNoYXIqIFNyY1N0
cjsKLQlpbnQgaTsKLQotCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JCi0JaWYgKHRva2VuPT0nXG4nKSB7Ci0JCURlY0xp
bmVOdW1iZXIoKTsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNwcmFnbWEiKTsKLSAgICAg
ICAgSW5jTGluZU51bWJlcigpOwotCSAgICByZXR1cm4gdG9rZW47Ci0JfQotCQotCWFsbFRva2Vu
cyA9IChjaGFyKiopbWFsbG9jKHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsJCi0KLQl3
aGlsZSAodG9rZW4gIT0gJ1xuJykgewotCQlpZiAodG9rZW5Db3VudCA+PSBtYXhUb2tlbkNvdW50
KSB7Ci0JCQltYXhUb2tlbkNvdW50ICo9IDI7Ci0JCQlhbGxUb2tlbnMgPSAoY2hhcioqKXJlYWxs
b2MoKGNoYXIqKilhbGxUb2tlbnMsIHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsKLQkJ
fQotCQlzd2l0Y2ggKHRva2VuKSB7Ci0JCWNhc2UgQ1BQX0lERU5USUZJRVI6Ci0JCQlTcmNTdHIg
PSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKLQkJCWFsbFRva2Vu
c1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJCXN0
cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQljYXNl
IENQUF9JTlRDT05TVEFOVDoKLQkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKLQkJ
CWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAx
KTsKLQkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFr
OwotCQljYXNlIENQUF9GTE9BVENPTlNUQU5UOgotCQkJU3JjU3RyID0geXlsdmFscHAtPnN5bWJv
bF9uYW1lOwotCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4o
U3JjU3RyKSArIDEpOwotCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIp
OwotCQkJYnJlYWs7Ci0JCWNhc2UgLTE6Ci0gICAgICAgICAgICAvLyBFT0YKLSAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0aCBhIG5ld2xp
bmUiKTsJCQkKLQkJCWdvdG8gZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOwotCQlkZWZhdWx0Ogot
CQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOwotCQkJU3JjU3RyTmFtZVsxXSA9ICdcMCc7Ci0JCQlh
bGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKDIpOwotCQkJc3RyY3B5KGFsbFRv
a2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHJOYW1lKTsKLQkJfQotCQl0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotCi0JSGFu
ZGxlUHJhZ21hKChjb25zdCBjaGFyKiopYWxsVG9rZW5zLCB0b2tlbkNvdW50KTsKLQkKLWZyZWVN
ZW1vcnlBbmRSZXR1cm5Ub2tlbjoKLQlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7
Ci0JCWZyZWUgKGFsbFRva2Vuc1tpXSk7Ci0JfQotCWZyZWUgKGFsbFRva2Vucyk7CQotCi0JcmV0
dXJuIHRva2VuOyAgICAKLX0gLy8gQ1BQcHJhZ21hCi0KLSNkZWZpbmUgRVNTTF9WRVJTSU9OX05V
TUJFUiAxMDAKLSNkZWZpbmUgRVNTTF9WRVJTSU9OX1NUUklORyAiMTAwIgotCi1zdGF0aWMgaW50
IENQUHZlcnNpb24oeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCi0g
ICAgaWYgKGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID09IDEpCi0gICAgICAgIENQUFNoSW5mb0xv
Z01zZygiI3ZlcnNpb24gbXVzdCBvY2N1ciBiZWZvcmUgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0
aGUgcHJvZ3JhbSIpOwotCi0gICAgaWYodG9rZW49PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7
Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotICAgICAgICBJbmNMaW5l
TnVtYmVyKCk7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0gICAgaWYgKHRva2VuICE9IENQUF9JTlRD
T05TVEFOVCkKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7Ci0JCi0gICAg
eXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JLy9TZXRWZXJz
aW9uTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOwotICAgIAotICAgIGlmICh5eWx2YWxwcC0+c2Nf
aW50ICE9IEVTU0xfVkVSU0lPTl9OVU1CRVIpCi0gICAgICAgIENQUFNoSW5mb0xvZ01zZygiVmVy
c2lvbiBudW1iZXIgbm90IHN1cHBvcnRlZCBieSBFU1NMIik7Ci0KLSAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgCi0J
aWYgKHRva2VuID09ICdcbicpewotCQlyZXR1cm4gdG9rZW47Ci0JfQotCWVsc2V7Ci0gICAgICAg
IENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19
IC8vIENQUHZlcnNpb24KLQotc3RhdGljIGludCBDUFBleHRlbnNpb24oeXlzdHlwZXBwICogeXls
dmFscHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGNoYXIgZXh0ZW5zaW9uTmFtZVtNQVhfU1lN
Qk9MX05BTUVfTEVOICsgMV07Ci0KLSAgICBpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1i
ZXIoKTsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gbmFtZSBub3Qgc3BlY2lm
aWVkIik7Ci0gICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQot
ICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIiNleHRlbnNpb24iKTsKLSAgICAKLSAgICBzdHJuY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0
b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpLCBNQVhfU1lNQk9MX05BTUVfTEVO
KTsKLSAgICBleHRlbnNpb25OYW1lW01BWF9TWU1CT0xfTkFNRV9MRU5dID0gJ1wwJzsKLQkgICAg
Ci0gICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSAnOicpIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKCInOicgbWlzc2luZyBhZnRlciBleHRlbnNpb24gbmFtZSIpOwotICAgICAgICByZXR1cm4g
dG9rZW47Ci0gICAgfQotICAgIAotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5U
SUZJRVIpIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJiZWhhdmlvciBmb3IgZXh0ZW5zaW9u
IG5vdCBzcGVjaWZpZWQiKTsKLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIHVw
ZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxl
LCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLQotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQlpZiAodG9rZW4gPT0gJ1xuJyl7
Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0JZWxzZXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IiNleHRlbnNpb24iKTsKLQl9Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBDUFBleHRlbnNpb24K
LQotaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLQotICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJ
RklFUikgewotICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsK
LSAgICAgICAgICAgICB0b2tlbiA9IENQUGRlZmluZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVsc2VBdG9tKSB7Ci0JCQkgaWYoQ2hrQ29ycmVj
dEVsc2VOZXN0aW5nKCkpewotICAgICAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCApewot
ICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIG1pc21hdGNoIik7
Ci0gICAgICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAg
ICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5n
ICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAw
KSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gI2lmZGVmIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICB9Ci0JCQkgICAgIHRva2VuID0gQ1BQZWxz
ZSgwLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7Ci0gICAgICAgICAgICAgICAg
IGNwcC0+aWZkZXB0aCA9IDA7Ci0gICAgICAgICAgICAgICAgIGNwcC0+ZWxzZXRyYWNrZXIgPSAw
OwotICAgICAgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0gICAgICAg
ICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgfQotCQl9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBl
bGlmQXRvbSkgewotICAgICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpewotICAgICAgICAgICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VsaWYgbWlzbWF0Y2giKTsKLSAgICAgICAgICAgICAg
ICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9IAotICAgICAgICAgICAgLy8gdGhpcyB0b2tlbiBpcyByZWFsbHkgYSBkb250IGNh
cmUsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGVhdCB0aGUgdG9rZW5zCi0gICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
IAotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0g
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdCB0b2tlbnMgZm9s
bG93aW5nICNlbGlmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUi
KTsKLSAgICAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0J
CSAgICB0b2tlbiA9IENQUGVsc2UoMCwgeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5
bHZhbHBwLT5zY19pZGVudCA9PSBlbmRpZkF0b20pIHsKLSAgICAgICAgICAgICBpZiAoIWNwcC0+
aWZkZXB0aCl7Ci0gICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlz
bWF0Y2giKTsKLSAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgLS1jcHAtPmlmZGVwdGg7Ci0KLSAgICAgICAgICAgICBpZiAoY3BwLT5l
bHNldHJhY2tlcikKLSAgICAgICAgICAgICAgICAgLS1jcHAtPmVsc2V0cmFja2VyOwotCi0JICAg
IH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlmQXRvbSkgewotICAgICAgICAgICAg
IHRva2VuID0gQ1BQaWYoeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBpZmRlZkF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDEs
IHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZu
ZGVmQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQaWZkZWYoMCwgeXlsdmFscHApOwot
ICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBsaW5lQXRvbSkgewotICAg
ICAgICAgICAgIHRva2VuID0gQ1BQbGluZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
eXlsdmFscHAtPnNjX2lkZW50ID09IHByYWdtYUF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9
IENQUHByYWdtYSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lk
ZW50ID09IHVuZGVmQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQdW5kZWYoeXlsdmFs
cHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlcnJvckF0b20p
IHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUGVycm9yKHl5bHZhbHBwKTsKLSAgICAgICAgfSBl
bHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gdmVyc2lvbkF0b20pIHsKLSAgICAgICAgICAg
IHRva2VuID0gQ1BQdmVyc2lvbih5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFs
cHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKLSAgICAgICAgICAgIHRva2VuID0gQ1BQ
ZXh0ZW5zaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0b3Jl
U3RyKCJJbnZhbGlkIERpcmVjdGl2ZSIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5n
T2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIG1lc3NhZ2U9
R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsK
LSAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxl
ICh0b2tlbiAhPSAnXG4nICYmIHRva2VuICE9IDAgJiYgdG9rZW4gIT0gRU9GKSB7Ci0JCXRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LQl9Ci0gICAgICAgIAotICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKLQotICAgIHJl
dHVybiB0b2tlbjsKLX0gLy8gcmVhZENQUGxpbmUKLQotdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1i
b2wgKnMpIHsKLSAgICBEZWxldGVUb2tlblN0cmVhbShzLT5ib2R5KTsKLX0KLQotdm9pZCBQcmVk
ZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VM
b2MgbG9jYXRpb24gPSB7MCwgMH07Ci0gICAgU3ltYm9sICpzeW1ib2wgPSBOVUxMOwotICAgIE1h
Y3JvU3ltYm9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OwotICAgIHl5c3R5cGVwcCB2
YWwgPSB7MCwgMC4wLCAwLCB7MH19OwotICAgIGludCBhdG9tID0gMDsKLQotICAgIG1hY3JvLmJv
ZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwotICAgIHZhbC5zY19pbnQg
PSB2YWx1ZTsKLSAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9M
RU4rMSwgIiVkIiwgdmFsdWUpOwotICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRD
T05TVEFOVCwgJnZhbCk7Ci0gICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUp
OwotICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9f
Uyk7Ci0gICAgc3ltYm9sLT5kZXRhaWxzLm1hYyA9IG1hY3JvOwotfQotCi1zdGF0aWMgaW50IGVv
Zl9zY2FuKElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgcmV0dXJuIC0xOyB9
Ci1zdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2
YWxwcCkgeyB9Ci0KLXN0YXRpYyB2b2lkIFB1c2hFb2ZTcmMoKSB7Ci0gICAgSW5wdXRTcmMgKmlu
ID0gbWFsbG9jKHNpemVvZihJbnB1dFNyYykpOwotICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKElu
cHV0U3JjKSk7Ci0gICAgaW4tPnNjYW4gPSBlb2Zfc2NhbjsKLSAgICBpbi0+Z2V0Y2ggPSBlb2Zf
c2NhbjsKLSAgICBpbi0+dW5nZXRjaCA9IG5vb3A7Ci0gICAgaW4tPnByZXYgPSBjcHAtPmN1cnJl
bnRJbnB1dDsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOwotfQotCi1zdGF0aWMgdm9pZCBQ
b3BFb2ZTcmMoKSB7Ci0gICAgaWYgKGNwcC0+Y3VycmVudElucHV0LT5zY2FuID09IGVvZl9zY2Fu
KSB7Ci0gICAgICAgIElucHV0U3JjICppbiA9IGNwcC0+Y3VycmVudElucHV0OwotICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dCA9IGluLT5wcmV2OwotICAgICAgICBmcmVlKGluKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBUb2tlblN0cmVhbSAqUHJlc2Nhbk1hY3JvQXJnKFRva2VuU3RyZWFtICphLCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAgIGludCB0b2tlbjsKLSAgICBUb2tlblN0cmVhbSAq
bjsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShhKTsKLSAgICBkbyB7Ci0gICAgICAgIHRva2VuID0g
UmVhZFRva2VuKGEsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElG
SUVSICYmIExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICB9IHdoaWxlICh0b2tlbiA+IDApOwotICAgIGlmICh0b2tlbiA8PSAw
KSByZXR1cm4gYTsKLSAgICBuID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwotICAg
IFB1c2hFb2ZTcmMoKTsKLSAgICBSZWFkRnJvbVRva2VuU3RyZWFtKGEsIDAsIDApOwotICAgIHdo
aWxlICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApKSA+IDApIHsKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYm
IE1hY3JvRXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIFJlY29yZFRva2VuKG4sIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAg
fQotICAgIFBvcEVvZlNyYygpOwotICAgIERlbGV0ZVRva2VuU3RyZWFtKGEpOwotICAgIHJldHVy
biBuOwotfSAvLyBQcmVzY2FuTWFjcm9BcmcKLQotdHlwZWRlZiBzdHJ1Y3QgTWFjcm9JbnB1dFNy
YyB7Ci0gICAgSW5wdXRTcmMgICAgYmFzZTsKLSAgICBNYWNyb1N5bWJvbCAqbWFjOwotICAgIFRv
a2VuU3RyZWFtICoqYXJnczsKLX0gTWFjcm9JbnB1dFNyYzsKLQotLyogbWFjcm9fc2NhbiAtLS0K
LSoqIHJldHVybiB0aGUgbmV4dCB0b2tlbiBmb3IgYSBtYWNybyBleHBhbmlvbiwgaGFuZGxpbmcg
bWFjcm8gYXJncyAKLSovCi1zdGF0aWMgaW50IG1hY3JvX3NjYW4oTWFjcm9JbnB1dFNyYyAqaW4s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IGk7Ci0gICAgaW50IHRva2VuID0gUmVh
ZFRva2VuKGluLT5tYWMtPmJvZHksIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gPT0gQ1BQX0lE
RU5USUZJRVIpIHsKLSAgICAgICAgZm9yIChpID0gaW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0p
Ci0gICAgICAgICAgICBpZiAoaW4tPm1hYy0+YXJnc1tpXSA9PSB5eWx2YWxwcC0+c2NfaWRlbnQp
IGJyZWFrOwotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICBSZWFkRnJvbVRva2Vu
U3RyZWFtKGluLT5hcmdzW2ldLCB5eWx2YWxwcC0+c2NfaWRlbnQsIDApOwotICAgICAgICAgICAg
cmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2VuOwot
ICAgIGluLT5tYWMtPmJ1c3kgPSAwOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2Uu
cHJldjsKLSAgICBpZiAoaW4tPmFyZ3MpIHsKLSAgICAgICAgZm9yIChpPWluLT5tYWMtPmFyZ2Mt
MTsgaT49MDsgaS0tKQotICAgICAgICAgICAgRGVsZXRlVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0p
OwotICAgICAgICBmcmVlKGluLT5hcmdzKTsKLSAgICB9Ci0gICAgZnJlZShpbik7Ci0gICAgcmV0
dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci19IC8vIG1hY3JvX3NjYW4KLQotLyogTWFjcm9FeHBhbmQKLSoqIGNoZWNrIGFuIGlkZW50aWZp
ZXIgKGF0b20pIHRvIHNlZSBpZiBpdCBhIG1hY3JvIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgot
KiogSWYgaXQgaXMsIHB1c2ggYW4gSW5wdXRTcmMgdGhhdCB3aWxsIHByb2R1Y2UgdGhlIGFwcHJv
cHJpYXRlIGV4cGFuc2lvbgotKiogYW5kIHJldHVybiBUUlVFLiAgSWYgbm90LCByZXR1cm4gRkFM
U0UuCi0qLwotCi1pbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQotewotICAgIFN5bWJvbCAgICAgICAgICAgICAgKnN5bSA9IExvb2tVcFN5bWJvbChtYWNyb3Ms
IGF0b20pOwotICAgIE1hY3JvSW5wdXRTcmMgICAgICAgKmluOwotICAgIGludCBpLGosIHRva2Vu
LCBkZXB0aD0wOwotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0JaWYgKGF0b20gPT0gX19MSU5F
X19BdG9tKSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0g
ICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xF
TisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5U
Q09OU1RBTlQsIHl5bHZhbHBwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmIChh
dG9tID09IF9fRklMRV9fQXRvbSkgewotICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3Ry
aW5nTnVtYmVyKCk7Ci0gICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFY
X1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgVW5n
ZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgfQotCWlmIChhdG9tID09IF9fVkVSU0lPTl9fQXRvbSkgewotICAgICAgICBzdHJjcHkoeXls
dmFscHAtPnN5bWJvbF9uYW1lLEVTU0xfVkVSU0lPTl9TVFJJTkcpOwotICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gYXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotICAgICAgICBVbmdldFRv
a2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0gICAgaWYgKCFzeW0gfHwgc3ltLT5kZXRhaWxzLm1hYy51bmRlZikgcmV0dXJuIDA7Ci0gICAg
aWYgKHN5bS0+ZGV0YWlscy5tYWMuYnVzeSkgcmV0dXJuIDA7ICAgICAgICAvLyBubyByZWN1cnNp
dmUgZXhwYW5zaW9ucwotICAgIGluID0gbWFsbG9jKHNpemVvZigqaW4pKTsKLSAgICBtZW1zZXQo
aW4sIDAsIHNpemVvZigqaW4pKTsKLSAgICBpbi0+YmFzZS5zY2FuID0gKHZvaWQgKiltYWNyb19z
Y2FuOwotICAgIGluLT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICBp
bi0+YmFzZS5uYW1lID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7Ci0gICAgaW4tPm1hYyA9ICZz
eW0tPmRldGFpbHMubWFjOwotICAgIGlmIChzeW0tPmRldGFpbHMubWFjLmFyZ3MpIHsKLSAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotCQlpZiAodG9rZW4gIT0gJygnKSB7Ci0gICAgICAgICAgICBVbmdldFRva2VuKHRv
a2VuLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBhdG9tOwot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaW4tPmFyZ3MgPSBtYWxs
b2MoaW4tPm1hYy0+YXJnYyAqIHNpemVvZihUb2tlblN0cmVhbSAqKSk7Ci0gICAgICAgIGZvciAo
aT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0gTmV3
VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwotCQlpPTA7aj0wOwotICAgICAgICBkb3sKLSAg
ICAgICAgICAgIGRlcHRoID0gMDsKLQkJCXdoaWxlKDEpIHsKLSAgICAgICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
U3RvcmVTdHIoIkVPRiBpbiBNYWNybyAiKTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIo
R2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmKChpbi0+bWFjLT5hcmdjPT0wKSAmJiAodG9rZW4hPScpJykpIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGlmIChkZXB0aCA9PSAwICYmICh0b2tlbiA9PSAnLCcgfHwgdG9rZW4gPT0gJyknKSkg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKLSAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOwotICAgICAgICAgICAgICAgIFJl
Y29yZFRva2VuKGluLT5hcmdzW2ldLCB0b2tlbiwgeXlsdmFscHApOwotICAgICAgICAgICAgICAg
IGo9MTsKLQkJCX0KLSAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIHsKLSAgICAgICAgICAg
ICAgICBpZigoaW4tPm1hYy0+YXJnYz09MSkgJiZqPT0wKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpKys7Ci0JCX13aGlsZShpIDwgaW4tPm1hYy0+YXJnYyk7
Ci0KLSAgICAgICAgaWYgKGkgPCBpbi0+bWFjLT5hcmdjKSB7Ci0gICAgICAgICAgICBTdG9yZVN0
cigiVG9vIGZldyBhcmdzIGluIE1hY3JvICIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3Ry
aW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21U
U3RyKCk7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAg
ICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAhPSAnKScpIHsKLSAg
ICAgICAgICAgIGRlcHRoPTA7Ci0JCQl3aGlsZSAodG9rZW4gPj0gMCAmJiAoZGVwdGggPiAwIHx8
IHRva2VuICE9ICcpJykpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0
aC0tOwotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0g
JygnKSBkZXB0aCsrOwotICAgICAgICAgICAgfQotCQkJCi0gICAgICAgICAgICBpZiAodG9rZW4g
PD0gMCkgewotICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7Ci0gICAg
ICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAg
ICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0
b3JlU3RyKCJUb28gbWFueSBhcmdzIGluIE1hY3JvICIpOwotICAgICAgICAgICAgU3RvcmVTdHIo
R2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0
cmZyb21UU3RyKCk7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAg
ICAgICAgICBSZXNldFRTdHJpbmcoKTsKLQkJfQotCQlmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdj
OyBpKyspIHsKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0gUHJlc2Nhbk1hY3JvQXJnKGluLT5h
cmdzW2ldLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgMAotICAgIHByaW50Zigi
ICA8JXM6JWQ+Zm91bmQgbWFjcm8gJXNcbiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBsb2MuZmls
ZSksCi0gICAgICAgICAgIGxvYy5saW5lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRvbSkpOwot
ICAgIGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykgewotICAgICAgICBwcmludGYoIlx0
YXJnICVzID0gJyIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBpbi0+bWFjLT5hcmdzW2ldKSk7Ci0g
ICAgICAgIER1bXBUb2tlblN0cmVhbShzdGRvdXQsIGluLT5hcmdzW2ldKTsKLSAgICAgICAgcHJp
bnRmKCInXG4iKTsKLSAgICB9Ci0jZW5kaWYKLQkvKnJldGFpbiB0aGUgaW5wdXQgc291cmNlKi8K
LSAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgc3ltLT5kZXRhaWxz
Lm1hYy5idXN5ID0gMTsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShzeW0tPmRldGFpbHMubWFjLmJv
ZHkpOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVybiAxOwot
fSAvLyBNYWNyb0V4cGFuZAotCi1pbnQgQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZvaWQpCi17Ci0g
ICAgLy8gc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBlbHNldHJhY2tlciBpcyBpbiBhIHZhbGlk
IHJhbmdlCi0gICAgaWYgKGNwcC0+ZWxzZXRyYWNrZXIgPCAwIHx8IGNwcC0+ZWxzZXRyYWNrZXIg
Pj0gTUFYX0lGX05FU1RJTkcpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYg
KGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID09IDApIHsKLSAgICAgICAgY3BwLT5l
bHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAxOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDgwMmUyM2UuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICsw
LDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
LQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1Q
Uk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0vLwotLy8gY3BwLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX0NQUF9I
KQotI2RlZmluZSBfX0NQUF9IIDEKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
YXJzZXIuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0KLWlu
dCBJbml0Q1BQKHZvaWQpOwotaW50IEZpbmFsQ1BQKHZvaWQpOwotaW50ICByZWFkQ1BQbGluZSh5
eXN0eXBlcHAgKiB5eWx2YWxwcCk7Ci1pbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKTsKLWludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9pZCk7Ci0KLXR5cGVk
ZWYgc3RydWN0IE1hY3JvU3ltYm9sIHsKLSAgICBpbnQgYXJnYzsKLSAgICBpbnQgKmFyZ3M7Ci0g
ICAgVG9rZW5TdHJlYW0gKmJvZHk7Ci0gICAgdW5zaWduZWQgYnVzeToxOwotICAgIHVuc2lnbmVk
IHVuZGVmOjE7Ci19IE1hY3JvU3ltYm9sOwotCi12b2lkIEZyZWVNYWNybyhNYWNyb1N5bWJvbCAq
KTsKLXZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsK
LQotdm9pZCAgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKTsgICAgICAvLyBQcmludHMg
aW5mb3JtYXRpb24gaW50byBkZWJ1ZyBsb2cKLXZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBj
aGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvZwotdm9p
ZCAgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpOyAvLyBQcmludHMgd2Fybmlu
ZyBtZXNzYWdlcyBpbnRvIGluZm8gbG9nCi12b2lkICBIYW5kbGVQcmFnbWEoY29uc3QgY2hhcioq
LCBpbnQgbnVtVG9rZW5zKTsgIC8vICNwcmFnbWEgZGlyZWN0aXZlIGNvbnRhaW5lci4KLXZvaWQg
IFJlc2V0VFN0cmluZyh2b2lkKTsgICAgICAgICAgICAgICAgICAgLy8gI2Vycm9yIE1lc3NhZ2Ug
YXMgVFN0cmluZy4KLXZvaWQgIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIqKTsgICAgICAg
Ly8gU3RpY2sgYWxsIGNwcCBlcnJvcnMgaW50byBTaC5JbmZvLmxvZy4KLXZvaWQgIFN0b3JlU3Ry
KGNvbnN0IGNoYXIqKTsgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIFRTdHJpbmcgaW4gUGFy
c2UgQ29udGV4dC4KLXZvaWQgIFNldExpbmVOdW1iZXIoaW50KTsgICAgICAgICAgICAgICAgICAg
Ly8gU2V0IGxpbmUgbnVtYmVyLiAgCi12b2lkICBTZXRTdHJpbmdOdW1iZXIoaW50KTsgICAgICAg
ICAgICAgICAgIC8vIFNldCBzdHJpbmcgbnVtYmVyLiAgICAKLWludCAgIEdldExpbmVOdW1iZXIo
dm9pZCk7ICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIu
IAotaW50ICAgR2V0U3RyaW5nTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAvLyBHZXQgdGhl
IGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lk
KTsgICAgICAgICAgIC8vIENvbnZlcnQgVFN0cmluZyB0byBTdHJpbmcuICAKLXZvaWQgIHVwZGF0
ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2
aW9yKTsKLWludCAgIEZyZWVDUFAodm9pZCk7Ci0KLSNlbmRpZiAvLyAhKGRlZmluZWQoX19DUFBf
SCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3Bwc3RydWN0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1OGNmZjMxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAs
MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlz
IHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNh
dGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0
ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0
aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3Qg
dG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNp
dmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBO
VklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVj
ZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHBy
b3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3Ug
bXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2Ug
YW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlz
dHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJh
ZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
ZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3Rp
Y2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUg
Z3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBh
bnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZl
Ci13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1h
eSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAot
Ci1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFT
SVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFO
RCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBS
T0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BF
Q0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFO
WSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1Ig
RElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQg
V0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8vCi0vLyBjcHBzdHJ1Y3QuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmgiCi0KLUNQUFN0cnVjdCAgKmNwcCAgICAgID0gTlVMTDsKLXN0YXRpYyBp
bnQgIHJlZkNvdW50ID0gMDsKLQotaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1pbnQgUmVz
ZXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1pbnQgRnJlZUNQUFN0cnVjdCh2b2lkKTsKLWludCBGaW5h
bGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKLQotLyoKLSAqIEluaXRDUFBTdHJ1Y3QoKSAtIEluaXRp
bGFpemUgdGhlIENQUCBzdHJ1Y3R1cmUuCi0gKgotICovCi0KLWludCBJbml0Q1BQU3RydWN0KHZv
aWQpCi17Ci0gICAgaW50IGxlbjsKLSAgICBjaGFyICpwOwotCi0gICAgY3BwID0gKENQUFN0cnVj
dCAqKSBtYWxsb2Moc2l6ZW9mKENQUFN0cnVjdCkpOwotICAgIGlmIChjcHAgPT0gTlVMTCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZWZDb3VudCsrOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBw
dWJsaWMgbWVtYmVyczoKLSAgICBjcHAtPnBMYXN0U291cmNlTG9jID0gJmNwcC0+bGFzdFNvdXJj
ZUxvYzsKLSAgICAKLQlwID0gKGNoYXIgKikgJmNwcC0+b3B0aW9uczsKLSAgICBsZW4gPSBzaXpl
b2YoY3BwLT5vcHRpb25zKTsKLSAgICB3aGlsZSAoLS1sZW4gPj0gMCkKLSAgICAgICAgcFtsZW5d
ID0gMDsKLSAgICAgCi0gICAgUmVzZXRQcmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gMTsKLX0g
Ly8gSW5pdENQUFN0cnVjdAotCi1pbnQgUmVzZXRQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICAv
LyBJbml0aWFsaXplIHByaXZhdGUgbWVtYmVyczoKLQotICAgIGNwcC0+bGFzdFNvdXJjZUxvYy5m
aWxlID0gMDsKLSAgICBjcHAtPmxhc3RTb3VyY2VMb2MubGluZSA9IDA7Ci0gICAgY3BwLT5wQyA9
IDA7Ci0gICAgY3BwLT5Db21waWxlRXJyb3IgPSAwOwotICAgIGNwcC0+aWZkZXB0aCA9IDA7Ci0g
ICAgZm9yKGNwcC0+ZWxzZXRyYWNrZXIgPSAwOyBjcHAtPmVsc2V0cmFja2VyIDwgTUFYX0lGX05F
U1RJTkc7IGNwcC0+ZWxzZXRyYWNrZXIrKykKLSAgICAgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5l
bHNldHJhY2tlcl0gPSAwOwotICAgIGNwcC0+ZWxzZXRyYWNrZXIgPSAwOwotICAgIGNwcC0+dG9r
ZW5zQmVmb3JlRU9GID0gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotLy9JbnRpYWxpemluZyB0aGUg
UHJlcHJvY2Vzc29yLgotCi1pbnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKQotewotICAgIyAgZGVm
aW5lIENQUF9TVFVGRiB0cnVlCi0gICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgotICAgICAgICAg
ICAgRnJlZUNQUFN0cnVjdCgpOwotICAgICAgICAgICAgSW5pdENQUFN0cnVjdCgpOwotICAgICAg
ICAgICAgY3BwLT5vcHRpb25zLlF1aWV0ID0gMTsKLSAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5w
cm9maWxlU3RyaW5nID0gImdlbmVyaWMiOwotICAgICAgICAgICAgaWYgKCFJbml0QXRvbVRhYmxl
KGF0YWJsZSwgMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAo
IUluaXRTY2FubmVyKGNwcCkpCi0JICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIyAgZW5k
aWYKLSAgcmV0dXJuIDA7IAotfQotCi0vL0ZyZWVDUFBTdHJ1Y3QoKSAtIEZyZWUgdGhlIENQUCBz
dHJ1Y3R1cmUuCi0KLWludCBGcmVlQ1BQU3RydWN0KHZvaWQpCi17Ci0gICAgaWYgKHJlZkNvdW50
KQotICAgIHsKLSAgICAgICBmcmVlKGNwcCk7Ci0gICAgICAgcmVmQ291bnQtLTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIDE7Ci19Ci0KLS8vRmluYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgot
Ci1pbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICMgIGRlZmluZSBDUFBfU1RV
RkYgdHJ1ZQotICAgICAgICAjICBpZmRlZiBDUFBfU1RVRkYKLSAgICAgICAgICAgIEZyZWVBdG9t
VGFibGUoYXRhYmxlKTsKLSAgICAgICAgICAgIEZyZWVDUFBTdHJ1Y3QoKTsKLSAgICAgICAgICAg
IEZyZWVTY2FubmVyKCk7Ci0gICAgICAgIyAgZW5kaWYKLSAgcmV0dXJuIDA7IAotfQotCi0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgY3Bwc3RydWN0LmMgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2dlbmVyYXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvZ2VuZXJhdGVfcGFyc2VyLnNoCm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5YzcwYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2dlbmVyYXRlX3BhcnNl
ci5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyB2YXJp
b3VzIGNvbXBvbmVudHMgb2YgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCisKK3J1bl9mbGV4KCkKK3sK
K2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIK
K2ZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0
X2ZpbGUKK30KKworcnVuX2Jpc29uKCkKK3sKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291
dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15
YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK30KKworc2NyaXB0X2Rp
cj0kKGRpcm5hbWUgJDApCisKKyMgR2VuZXJhdGUgcHJlcHJvY2Vzc29yCitydW5fZmxleCBUb2tl
bml6ZXIubCBUb2tlbml6ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJl
c3Npb25QYXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDI5NTIxYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU4
ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklE
SUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMg
dGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2Rp
ZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0
aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdp
dGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJl
ZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJq
ZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhj
bHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2lu
YWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXBy
b2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRo
IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1z
OyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwg
eW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90
aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCBy
ZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUs
IHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRp
b24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMg
bm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwg
YXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQg
dG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZh
dGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2Fy
ZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVy
LiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMi
IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJ
VEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJD
SEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVT
RSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVS
Ci1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5Z
IFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJ
TiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5E
L09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQg
QU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0vLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZuZGVmIF9NU0NfVkVSCi0jaW5jbHVk
ZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9t
ZW1vcnkuaCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcwNikKLSNlbmRpZgotCi0vLyBkZWZhdWx0IGFsaWdubWVudCBhbmQgY2h1bmtzaXplLCBp
ZiBjYWxsZWQgd2l0aCAwIGFyZ3VtZW50cwotI2RlZmluZSBDSFVOS1NJWkUgICAgICAgKDY0KjEw
MjQpCi0jZGVmaW5lIEFMSUdOICAgICAgICAgICA4Ci0KLS8vIHdlIG5lZWQgdG8gY2FsbCB0aGUg
YHJlYWwnIG1hbGxvYyBhbmQgZnJlZSwgbm90IG91ciByZXBsYWNlbWVudHMKLSN1bmRlZiBtYWxs
b2MKLSN1bmRlZiBmcmVlCi0KLXN0cnVjdCBjaHVuayB7Ci0gICAgc3RydWN0IGNodW5rICAgICAg
ICAqbmV4dDsKLX07Ci0KLXN0cnVjdCBjbGVhbnVwIHsKLSAgICBzdHJ1Y3QgY2xlYW51cCAgICAg
ICpuZXh0OwotICAgIHZvaWQgICAgICAgICAgICAgICAgKCpmbikodm9pZCAqKTsKLSAgICB2b2lk
ICAgICAgICAgICAgICAgICphcmc7Ci19OwotCi1zdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgewotICAg
IHN0cnVjdCBjaHVuayAgICAgICAgKm5leHQ7Ci0gICAgdWludHB0cl90ICAgICAgICAgICBmcmVl
LCBlbmQ7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICBjaHVua3NpemU7Ci0gICAgdWludHB0cl90
ICAgICAgICAgICBhbGlnbm1hc2s7Ci0gICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsK
LX07Ci0KLU1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2ln
bmVkIGludCBhbGlnbikKLXsKLSAgICBNZW1vcnlQb29sICAqcG9vbDsKLQotICAgIGlmIChhbGln
biA9PSAwKSBhbGlnbiA9IEFMSUdOOwotICAgIGlmIChjaHVua3NpemUgPT0gMCkgY2h1bmtzaXpl
ID0gQ0hVTktTSVpFOwotICAgIGlmIChhbGlnbiAmIChhbGlnbi0xKSkgcmV0dXJuIDA7Ci0gICAg
aWYgKGNodW5rc2l6ZSA8IHNpemVvZihNZW1vcnlQb29sKSkgcmV0dXJuIDA7Ci0gICAgaWYgKGNo
dW5rc2l6ZSAmIChhbGlnbi0xKSkgcmV0dXJuIDA7Ci0gICAgaWYgKCEocG9vbCA9IG1hbGxvYyhj
aHVua3NpemUpKSkgcmV0dXJuIDA7Ci0gICAgcG9vbC0+bmV4dCA9IDA7Ci0gICAgcG9vbC0+Y2h1
bmtzaXplID0gY2h1bmtzaXplOwotICAgIHBvb2wtPmFsaWdubWFzayA9ICh1aW50cHRyX3QpKGFs
aWduKS0xOyAgCi0gICAgcG9vbC0+ZnJlZSA9ICgodWludHB0cl90KShwb29sICsgMSkgKyBwb29s
LT5hbGlnbm1hc2spICYgfnBvb2wtPmFsaWdubWFzazsKLSAgICBwb29sLT5lbmQgPSAodWludHB0
cl90KXBvb2wgKyBjaHVua3NpemU7Ci0gICAgcG9vbC0+Y2xlYW51cCA9IDA7Ci0gICAgcmV0dXJu
IHBvb2w7Ci19Ci0KLXZvaWQgbWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0gICAg
c3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsKLSAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpw
LCAqbmV4dDsKLQotICAgIGZvciAoY2xlYW51cCA9IHBvb2wtPmNsZWFudXA7IGNsZWFudXA7IGNs
ZWFudXAgPSBjbGVhbnVwLT5uZXh0KSB7Ci0gICAgICAgIGNsZWFudXAtPmZuKGNsZWFudXAtPmFy
Zyk7Ci0gICAgfQotICAgIGZvciAocCA9IChzdHJ1Y3QgY2h1bmsgKilwb29sOyBwOyBwID0gbmV4
dCkgewotICAgICAgICBuZXh0ID0gcC0+bmV4dDsKLSAgICAgICAgZnJlZShwKTsKLSAgICB9Ci19
Ci0KLXZvaWQgKm1lbV9BbGxvYyhNZW1vcnlQb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBzdHJ1Y3QgY2h1bmsgKmNoOwotICAgIHZvaWQgKnJ2ID0gKHZvaWQgKilwb29sLT5mcmVlOwot
ICAgIHNpemUgPSAoc2l6ZSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOwot
ICAgIGlmIChzaXplIDw9IDApIHNpemUgPSBwb29sLT5hbGlnbm1hc2s7Ci0gICAgcG9vbC0+ZnJl
ZSArPSBzaXplOwotICAgIGlmIChwb29sLT5mcmVlID4gcG9vbC0+ZW5kIHx8IHBvb2wtPmZyZWUg
PCAodWludHB0cl90KXJ2KSB7Ci0gICAgICAgIHNpemVfdCBtaW5yZXEgPSAoc2l6ZSArIHNpemVv
ZihzdHJ1Y3QgY2h1bmspICsgcG9vbC0+YWxpZ25tYXNrKQotICAgICAgICAgICAgICAgICAgICAg
ICYgfnBvb2wtPmFsaWdubWFzazsKLSAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpcnY7
Ci0gICAgICAgIGlmIChtaW5yZXEgPj0gcG9vbC0+Y2h1bmtzaXplKSB7Ci0gICAgICAgICAgICAv
LyByZXF1ZXN0IHNpemUgaXMgdG9vIGJpZyBmb3IgdGhlIGNodW5rc2l6ZSwgc28gYWxsb2NhdGUg
aXQgYXMKLSAgICAgICAgICAgIC8vIGEgc2luZ2xlIGNodW5rIG9mIHRoZSByaWdodCBzaXplCi0g
ICAgICAgICAgICBjaCA9IG1hbGxvYyhtaW5yZXEpOwotICAgICAgICAgICAgaWYgKCFjaCkgcmV0
dXJuIDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaCA9IG1hbGxvYyhwb29sLT5j
aHVua3NpemUpOwotICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICBw
b29sLT5mcmVlID0gKHVpbnRwdHJfdCljaCArIG1pbnJlcTsKLSAgICAgICAgICAgIHBvb2wtPmVu
ZCA9ICh1aW50cHRyX3QpY2ggKyBwb29sLT5jaHVua3NpemU7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2gtPm5leHQgPSBwb29sLT5uZXh0OwotICAgICAgICBwb29sLT5uZXh0ID0gY2g7Ci0gICAgICAg
IHJ2ID0gKHZvaWQgKikoKCh1aW50cHRyX3QpKGNoKzEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5w
b29sLT5hbGlnbm1hc2spOwotICAgIH0KLSAgICByZXR1cm4gcnY7Ci19Ci0KLWludCBtZW1fQWRk
Q2xlYW51cChNZW1vcnlQb29sICpwb29sLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykg
ewotICAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOwotCi0gICAgcG9vbC0+ZnJlZSA9IChwb29s
LT5mcmVlICsgc2l6ZW9mKHZvaWQgKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQgKiktMSk7Ci0gICAg
Y2xlYW51cCA9IG1lbV9BbGxvYyhwb29sLCBzaXplb2Yoc3RydWN0IGNsZWFudXApKTsKLSAgICBp
ZiAoIWNsZWFudXApIHJldHVybiAtMTsKLSAgICBjbGVhbnVwLT5uZXh0ID0gcG9vbC0+Y2xlYW51
cDsKLSAgICBjbGVhbnVwLT5mbiA9IGZuOwotICAgIGNsZWFudXAtPmFyZyA9IGFyZzsKLSAgICBw
b29sLT5jbGVhbnVwID0gY2xlYW51cDsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmNhZGIzLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
LUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJl
LgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLSNpZm5kZWYg
X19NRU1PUllfSAotI2RlZmluZSBfX01FTU9SWV9ICi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQot
dHlwZWRlZiBzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKLQotZXh0ZXJuIE1lbW9y
eVBvb2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGln
bik7Ci1leHRlcm4gdm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5UG9vbCAqKTsKLWV4dGVybiB2b2lk
ICptZW1fQWxsb2MoTWVtb3J5UG9vbCAqcCwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIHZvaWQgKm1l
bV9SZWFsbG9jKE1lbW9yeVBvb2wgKnAsIHZvaWQgKm9sZCwgc2l6ZV90IG9sZHNpemUsIHNpemVf
dCBuZXdzaXplKTsKLWV4dGVybiBpbnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcCwgdm9p
ZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcpOwotCi0jZW5kaWYgLyogX19NRU1PUllfSCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFhNzVhOWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaAorKysgL2Rldi9udWxs
CkBAIC0xLDgyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESUFHTk9TVElDU19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElB
R05PU1RJQ1NfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0
cnVjdCBTb3VyY2VMb2NhdGlvbjsKLQotLy8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5nIGRpYWdu
b3N0aWMgbWVzc2FnZXMuCi0vLyBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBm
b3JtYXR0aW5nIGFuZCBwcmludGluZyB0aGUgbWVzc2FnZXMuCi1jbGFzcyBEaWFnbm9zdGljcwot
ewotICBwdWJsaWM6Ci0gICAgZW51bSBTZXZlcml0eQotICAgIHsKLSAgICAgICAgRVJST1IsCi0g
ICAgICAgIFdBUk5JTkcKLSAgICB9OwotICAgIGVudW0gSUQKLSAgICB7Ci0gICAgICAgIEVSUk9S
X0JFR0lOLAotICAgICAgICBJTlRFUk5BTF9FUlJPUiwKLSAgICAgICAgT1VUX09GX01FTU9SWSwK
LSAgICAgICAgSU5WQUxJRF9DSEFSQUNURVIsCi0gICAgICAgIElOVkFMSURfTlVNQkVSLAotICAg
ICAgICBJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgIERJVklTSU9OX0JZX1pFUk8sCi0gICAg
ICAgIEVPRl9JTl9DT01NRU5ULAotICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICBV
TkVYUEVDVEVEX1RPS0VOLAotICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAg
ICBNQUNST19OQU1FX1JFU0VSVkVELAotICAgICAgICBNQUNST19SRURFRklORUQsCi0gICAgICAg
IE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1VO
REVGSU5FRCwKLSAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAg
IE1BQ1JPX1RPT19GRVdfQVJHUywKLSAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKLSAgICAg
ICAgQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxT
RV9XSVRIT1VUX0lGLAotICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCi0gICAg
ICAgIENPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJ
Rl9BRlRFUl9FTFNFLAotICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAgICAg
IElOVkFMSURfRVhURU5TSU9OX05BTUUsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFW
SU9SLAotICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFM
SURfVkVSU0lPTl9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCi0g
ICAgICAgIElOVkFMSURfTElORV9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfRklMRV9OVU1CRVIs
Ci0gICAgICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCi0gICAgICAgIEVSUk9SX0VORCwKLQot
ICAgICAgICBXQVJOSU5HX0JFR0lOLAotICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RP
S0VOLAotICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAgICBXQVJOSU5HX0VORAot
ICAgIH07Ci0KLSAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOwotCi0gICAgdm9pZCByZXBvcnQo
SUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0
KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgU2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOwotCi0gICAg
dmlydHVhbCB2b2lkIHByaW50KElEIGlkLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NC
YXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdiMzI1NDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIK
LQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1EaWFnbm9zdGljczo6
fkRpYWdub3N0aWNzKCkKLXsKLX0KLQotdm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgLy8g
VE9ETyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgotICAgIHBy
aW50KGlkLCBsb2MsIHRleHQpOwotfQotCi1EaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3Rp
Y3M6OnNldmVyaXR5KElEIGlkKQotewotICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlk
IDwgRVJST1JfRU5EKSkKLSAgICAgICAgcmV0dXJuIEVSUk9SOwotCi0gICAgaWYgKChpZCA+IFdB
Uk5JTkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKLSAgICAgICAgcmV0dXJuIFdBUk5J
Tkc7Ci0KLSAgICBhc3NlcnQoZmFsc2UpOwotICAgIHJldHVybiBFUlJPUjsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYWVlYzIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGly
ZWN0aXZlSGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hf
Ci0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFNvdXJjZUxvY2F0
aW9uOwotCi0vLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgotLy8gUHJlcHJv
Y2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFp
bgotLy8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9u
c2libGUgZm9yCi0vLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KLWNs
YXNzIERpcmVjdGl2ZUhhbmRsZXIKLXsKLSAgcHVibGljOgotICAgIHZpcnR1YWwgfkRpcmVjdGl2
ZUhhbmRsZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VM
b2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbXNnKSA9IDA7Ci0KLSAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEg
bmFtZVsodmFsdWUpXQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNl
TG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNv
bnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IGhhbmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNl
IHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkxZTFjLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5oIgotCi1uYW1lc3BhY2Ug
cHAKLXsKLQotRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVjdGl2ZUhhbmRsZXIoKQotewotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQ
YXJzZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODVhOTBlLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTkgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKLQotI2luY2x1ZGUg
PGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5j
bHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCi0jaW5j
bHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgotI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKLSNp
bmNsdWRlICJUb2tlbi5oIgotI2luY2x1ZGUgIlRva2VuaXplci5oIgotCi1uYW1lc3BhY2Ugewot
ZW51bSBEaXJlY3RpdmVUeXBlCi17Ci0gICAgRElSRUNUSVZFX05PTkUsCi0gICAgRElSRUNUSVZF
X0RFRklORSwKLSAgICBESVJFQ1RJVkVfVU5ERUYsCi0gICAgRElSRUNUSVZFX0lGLAotICAgIERJ
UkVDVElWRV9JRkRFRiwKLSAgICBESVJFQ1RJVkVfSUZOREVGLAotICAgIERJUkVDVElWRV9FTFNF
LAotICAgIERJUkVDVElWRV9FTElGLAotICAgIERJUkVDVElWRV9FTkRJRiwKLSAgICBESVJFQ1RJ
VkVfRVJST1IsCi0gICAgRElSRUNUSVZFX1BSQUdNQSwKLSAgICBESVJFQ1RJVkVfRVhURU5TSU9O
LAotICAgIERJUkVDVElWRV9WRVJTSU9OLAotICAgIERJUkVDVElWRV9MSU5FCi19OwotfSAgLy8g
bmFtZXNwYWNlCi0KLXN0YXRpYyBEaXJlY3RpdmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6
VG9rZW4qIHRva2VuKQotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
RGVmaW5lKCJkZWZpbmUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZVVuZGVmKCJ1bmRlZiIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
SWYoImlmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigi
aWZkZWYiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigi
aWZuZGVmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJl
bHNlIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlm
Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYi
KTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIp
OwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEi
KTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0
ZW5zaW9uIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9u
KCJ2ZXJzaW9uIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5l
KCJsaW5lIik7Ci0KLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVS
KQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Ci0KLSAgICBpZiAodG9rZW4tPnZhbHVl
ID09IGtEaXJlY3RpdmVEZWZpbmUpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfREVGSU5FOwot
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCi0gICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfVU5ERUY7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJl
Y3RpdmVJZikKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRjsKLSAgICBlbHNlIGlmICh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmZGVmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lG
REVGOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQotICAg
ICAgICByZXR1cm4gRElSRUNUSVZFX0lGTkRFRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZUVsc2UpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRUxTRTsKLSAgICBl
bHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCi0gICAgICAgIHJldHVybiBE
SVJFQ1RJVkVfRUxJRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVu
ZGlmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VORElGOwotICAgIGVsc2UgaWYgKHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVJS
T1I7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCi0gICAg
ICAgIHJldHVybiBESVJFQ1RJVkVfUFJBR01BOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9
PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VYVEVOU0lP
TjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24pCi0gICAg
ICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZUxpbmUpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfTElORTsKLQotICAg
IHJldHVybiBESVJFQ1RJVkVfTk9ORTsKLX0KLQotc3RhdGljIGJvb2wgaXNDb25kaXRpb25hbERp
cmVjdGl2ZShEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSkKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGl2
ZSkKLSAgICB7Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRjoKLSAgICAgIGNhc2UgRElSRUNUSVZF
X0lGREVGOgotICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgotICAgICAgY2FzZSBESVJFQ1RJ
VkVfRUxTRToKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6Ci0gICAgICBjYXNlIERJUkVDVElW
RV9FTkRJRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIHJl
cHJlc2VudHMgRW5kIE9mIERpcmVjdGl2ZS4KLXN0YXRpYyBib29sIGlzRU9EKGNvbnN0IHBwOjpU
b2tlbiogdG9rZW4pCi17Ci0gICAgcmV0dXJuICh0b2tlbi0+dHlwZSA9PSAnXG4nKSB8fCAodG9r
ZW4tPnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUKTsKLX0KLQotc3RhdGljIHZvaWQgc2tpcFVudGls
RU9EKHBwOjpMZXhlciogbGV4ZXIsIHBwOjpUb2tlbiogdG9rZW4pCi17Ci0gICAgd2hpbGUoIWlz
RU9EKHRva2VuKSkKLSAgICB7Ci0gICAgICAgIGxleGVyLT5sZXgodG9rZW4pOwotICAgIH0KLX0K
LQotc3RhdGljIGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSkKLXsKLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSByZXNlcnZlZC4KLSAg
ICBpZiAobmFtZS5zdWJzdHIoMCwgMykgPT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJl
IHJlc2VydmVkLgotICAgIGlmIChuYW1lLmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMg
Ym9vbCBpc01hY3JvUHJlZGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpNYWNyb1NldCYgbWFjcm9TZXQpCi17Ci0g
ICAgcHA6Ok1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFjcm9TZXQuZmluZChuYW1l
KTsKLSAgICByZXR1cm4gaXRlciAhPSBtYWNyb1NldC5lbmQoKSA/IGl0ZXItPnNlY29uZC5wcmVk
ZWZpbmVkIDogZmFsc2U7Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBEZWZpbmVkUGFy
c2VyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBEZWZpbmVkUGFyc2VyKExleGVy
KiBsZXhlciwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvU2V0KiBtYWNyb1NldCwKLSAg
ICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgotICAgICAgICBtTGV4
ZXIobGV4ZXIpLAotICAgICAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAotICAgICAgICBtRGlhZ25v
c3RpY3MoZGlhZ25vc3RpY3MpCi0gICAgewotICAgIH0KLQotICBwcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RlZmluZWQoImRlZmluZWQiKTsKLQotICAgICAgICBtTGV4ZXItPmxleCh0
b2tlbik7Ci0gICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRva2VuLT52YWx1ZSAhPSBrRGVmaW5lZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBib29sIHBhcmVuID0gZmFsc2U7Ci0gICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKLSAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcoJykK
LSAgICAgICAgewotICAgICAgICAgICAgcGFyZW4gPSB0cnVlOwotICAgICAgICAgICAgbUxleGVy
LT5sZXgodG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAg
IHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+
ZmluZCh0b2tlbi0+dmFsdWUpOwotICAgICAgICBzdGQ6OnN0cmluZyBleHByZXNzaW9uID0gaXRl
ciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gIjEiIDogIjAiOwotCi0gICAgICAgIGlmIChwYXJlbikK
LSAgICAgICAgewotICAgICAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOwotICAgICAgICAgICAg
aWYgKHRva2VuLT50eXBlICE9ICcpJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFdlIGhhdmUgYSB2YWxpZCBkZWZpbmVkIG9wZXJhdG9yLgotICAgICAgICAvLyBDb252ZXJ0
IHRoZSBjdXJyZW50IHRva2VuIGludG8gYSBDT05TVF9JTlQgdG9rZW4uCi0gICAgICAgIHRva2Vu
LT50eXBlID0gVG9rZW46OkNPTlNUX0lOVDsKLSAgICAgICAgdG9rZW4tPnZhbHVlID0gZXhwcmVz
c2lvbjsKLSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAgICBMZXhlciogbUxleGVyOwotICAgIGNvbnN0
IE1hY3JvU2V0KiBtTWFjcm9TZXQ7Ci0gICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKLX07
Ci0KLURpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGly
ZWN0aXZlSGFuZGxlcikgOgotICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKLSAgICBtTWFjcm9T
ZXQobWFjcm9TZXQpLAotICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCi0gICAgbURpcmVj
dGl2ZUhhbmRsZXIoZGlyZWN0aXZlSGFuZGxlcikKLXsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OmxleChUb2tlbiogdG9rZW4pCi17Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9I
QVNIKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghbUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1D
b25kaXRpb25hbFN0YWNrLmJhY2soKTsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5URVJNSU5BVEVELAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxvY2F0aW9uLCBibG9jay50eXBlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICB9IHdoaWxl
IChza2lwcGluZygpIHx8ICh0b2tlbi0+dHlwZSA9PSAnXG4nKSk7Ci19Ci0KLXZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KHRv
a2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7Ci0gICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4pOwot
Ci0gICAgLy8gV2hpbGUgaW4gYW4gZXhjbHVkZWQgY29uZGl0aW9uYWwgYmxvY2svZ3JvdXAsCi0g
ICAgLy8gd2Ugb25seSBwYXJzZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzLgotICAgIGlmIChza2lw
cGluZygpICYmICFpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKGRpcmVjdGl2ZSkpCi0gICAgewotICAg
ICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgc3dpdGNoKGRpcmVjdGl2ZSkKLSAgICB7Ci0gICAgICBjYXNlIERJUkVDVElW
RV9OT05FOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RElSRUNU
SVZFX0lOVkFMSURfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0RFRklORToKLSAg
ICAgICAgcGFyc2VEZWZpbmUodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElS
RUNUSVZFX1VOREVGOgotICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRjoKLSAgICAgICAgcGFyc2VJZih0b2tlbik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6Ci0gICAgICAgIHBhcnNlSWZk
ZWYodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoK
LSAgICAgICAgcGFyc2VJZm5kZWYodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RElSRUNUSVZFX0VMU0U6Ci0gICAgICAgIHBhcnNlRWxzZSh0b2tlbik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKLSAgICAgICAgcGFyc2VFbGlmKHRva2VuKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9FTkRJRjoKLSAgICAgICAgcGFy
c2VFbmRpZih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfRVJS
T1I6Ci0gICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRElSRUNUSVZFX1BSQUdNQToKLSAgICAgICAgcGFyc2VQcmFnbWEodG9rZW4pOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VYVEVOU0lPTjoKLSAgICAgICAgcGFyc2VF
eHRlbnNpb24odG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX1ZF
UlNJT046Ci0gICAgICAgIHBhcnNlVmVyc2lvbih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBESVJFQ1RJVkVfTElORToKLSAgICAgICAgcGFyc2VMaW5lKHRva2VuKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwot
ICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6TEFTVCkKLSAgICB7Ci0gICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAg
fQotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQot
ewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOwot
Ci0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9r
ZW46OklERU5USUZJRVIpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChpc01hY3JvUHJlZGVmaW5lZCh0b2tlbi0+dmFsdWUsICptTWFjcm9TZXQpKQotICAg
IHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURF
RklORURfUkVERUZJTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlz
TWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnZhbHVlKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19OQU1FX1JFU0VSVkVELAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNYWNybyBtYWNybzsKLSAgICBtYWNyby50eXBlID0g
TWFjcm86OmtUeXBlT2JqOwotICAgIG1hY3JvLm5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0KLSAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRv
a2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKLSAgICB7Ci0gICAgICAgIC8vIEZ1bmN0aW9uLWxpa2Ug
bWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgotICAgICAgICBtYWNyby50eXBlID0gTWFjcm86OmtU
eXBlRnVuYzsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKLSAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9i
YWNrKHRva2VuLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
ICAvLyBHZXQgJywnLgotICAgICAgICB9IHdoaWxlICh0b2tlbi0+dHlwZSA9PSAnLCcpOwotCi0g
ICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcpJy4K
LSAgICB9Ci0KLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9j
YXRpb24gYmVjYXVzZSBpdCBpcyB1bm5lY2Vzc2FyeSBpbiByZXBsYWNlbWVudAotICAgICAgICAv
LyBsaXN0LiBSZXNldHRpbmcgaXQgYWxzbyBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFs
cygpIHRvCi0gICAgICAgIC8vIGNvbXBhcmUgbWFjcm9zLgotICAgICAgICB0b2tlbi0+bG9jYXRp
b24gPSBTb3VyY2VMb2NhdGlvbigpOwotICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9i
YWNrKCp0b2tlbik7Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgfQotICAg
IGlmICghbWFjcm8ucmVwbGFjZW1lbnRzLmVtcHR5KCkpCi0gICAgewotICAgICAgICAvLyBXaGl0
ZXNwYWNlIHByZWNlZGluZyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpcyBub3QgY29uc2lkZXJlZCBw
YXJ0IG9mCi0gICAgICAgIC8vIHRoZSByZXBsYWNlbWVudCBsaXN0IGZvciBlaXRoZXIgZm9ybSBv
ZiBtYWNyby4KLSAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmZyb250KCkuc2V0SGFzTGVhZGlu
Z1NwYWNlKGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBmb3IgbWFjcm8gcmVkZWZpbml0
aW9uLgotICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5k
KG1hY3JvLm5hbWUpOwotICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgJiYgIW1hY3Jv
LmVxdWFscyhpdGVyLT5zZWNvbmQpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1JFREVGSU5FRCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNy
by5uYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtTWFjcm9TZXQtPmluc2VydChz
dGQ6Om1ha2VfcGFpcihtYWNyby5uYW1lLCBtYWNybykpOwotfQotCi12b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VVbmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX1VOREVGKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7Ci0gICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgIHsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1hY3JvU2V0OjppdGVyYXRvciBp
dGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7Ci0gICAgaWYgKGl0ZXIgIT0gbU1h
Y3JvU2V0LT5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChpdGVyLT5zZWNvbmQucHJlZGVmaW5l
ZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6Ok1BQ1JPX1BSRURFRklORURfVU5ERUZJTkVELAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbU1hY3JvU2V0LT5lcmFzZShpdGVyKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci19Ci0KLXZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpOwotICAgIHBhcnNlQ29uZGl0aW9u
YWxJZih0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmZGVmKFRva2Vu
KiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
SUZERUYpOwotICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERp
cmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGTkRFRik7Ci0gICAgcGFyc2VDb25kaXRpb25h
bElmKHRva2VuKTsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZShUb2tlbiog
dG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VM
U0UpOwotCi0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9XSVRI
T1VUX0lGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1D
b25kaXRpb25hbFN0YWNrLmJhY2soKTsKLSAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQotICAgIHsK
LSAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KLSAg
ICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCi0gICAgewotICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBibG9jay5mb3VuZEVsc2VHcm91cCA9IHRydWU7Ci0gICAg
YmxvY2suc2tpcEdyb3VwID0gYmxvY2suZm91bmRWYWxpZEdyb3VwOwotICAgIGJsb2NrLmZvdW5k
VmFsaWRHcm91cCA9IHRydWU7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSBleHRyYSB0b2tl
bnMgYWZ0ZXIgI2Vsc2UuCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAoIWlz
RU9EKHRva2VuKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgfQotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFbGlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfRUxJRik7Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1w
dHkoKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpD
T05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1U
b2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbmRpdGlv
bmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgIGlmIChibG9j
ay5za2lwQmxvY2spCi0gICAgewotICAgICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lw
IHRoZSB3aG9sZSBsaW5lLgotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkK
LSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9FTElGX0FGVEVSX0VMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYmxvY2suZm91bmRW
YWxpZEdyb3VwKQotICAgIHsKLSAgICAgICAgLy8gRG8gbm90IHBhcnNlIHRoZSBleHByZXNzaW9u
LgotICAgICAgICAvLyBBbHNvIGJlIGNhcmVmdWwgbm90IHRvIGVtaXQgYSBkaWFnbm9zdGljLgot
ICAgICAgICBibG9jay5za2lwR3JvdXAgPSB0cnVlOwotICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGV4cHJl
c3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZih0b2tlbik7Ci0gICAgYmxvY2suc2tpcEdyb3VwID0g
ZXhwcmVzc2lvbiA9PSAwOwotICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24g
IT0gMDsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2Vu
KQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTkRJRik7
Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VU
X0lGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtQ29uZGl0aW9uYWxTdGFjay5wb3BfYmFjaygpOwot
Ci0gICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNlbmRpZi4KLSAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICghaXNFT0QodG9rZW4pKQotICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNU
RURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKFRva2VuKiB0b2tl
bikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVJST1Ip
OwotCi0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3RyZWFtIDw8ICp0b2tlbjsKLSAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB9Ci0gICAgbURpcmVjdGl2ZUhhbmRsZXIt
PmhhbmRsZUVycm9yKHRva2VuLT5sb2NhdGlvbiwgc3RyZWFtLnN0cigpKTsKLX0KLQotLy8gUGFy
c2VzIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0uCi12b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJl
Y3RpdmUodG9rZW4pID09IERJUkVDVElWRV9QUkFHTUEpOwotCi0gICAgZW51bSBTdGF0ZQotICAg
IHsKLSAgICAgICAgUFJBR01BX05BTUUsCi0gICAgICAgIExFRlRfUEFSRU4sCi0gICAgICAgIFBS
QUdNQV9WQUxVRSwKLSAgICAgICAgUklHSFRfUEFSRU4KLSAgICB9OwotCi0gICAgYm9vbCB2YWxp
ZCA9IHRydWU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7Ci0gICAgaW50IHN0YXRlID0g
UFJBR01BX05BTUU7Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIHdoaWxlICgo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaChzdGF0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBQ
UkFHTUFfTkFNRToKLSAgICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgICAgICAg
ICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIExFRlRfUEFSRU46Ci0gICAgICAgICAg
ICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6Ci0gICAgICAgICAgICB2YWx1ZSA9IHRv
a2VuLT52YWx1ZTsKLSAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09
IFRva2VuOjpJREVOVElGSUVSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
UklHSFRfUEFSRU46Ci0gICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9
PSAnKScpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0KLQotICAgIHZhbGlkID0gdmFsaWQgJiYg
KChzdGF0ZSA9PSBQUkFHTUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KLSAgICAgICAg
ICAgICAgICAgICAgICAoc3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZh
bHVlLgotICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsg
IC8vIFdpdGggdmFsdWUuCi0gICAgaWYgKCF2YWxpZCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOwotICAgIH0KLSAgICBl
bHNlIGlmIChzdGF0ZSA+IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkg
cHJhZ21hLgotICAgIHsKLSAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0
b2tlbi0+bG9jYXRpb24sIG5hbWUsIHZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERp
cmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VYVEVOU0lPTik7Ci0KLSAgICBlbnVtIFN0YXRl
Ci0gICAgewotICAgICAgICBFWFRfTkFNRSwKLSAgICAgICAgQ09MT04sCi0gICAgICAgIEVYVF9C
RUhBVklPUgotICAgIH07Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBzdGQ6OnN0cmlu
ZyBuYW1lLCBiZWhhdmlvcjsKLSAgICBpbnQgc3RhdGUgPSBFWFRfTkFNRTsKLQotICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAo
dG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0
ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFWFRfTkFNRToKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0VYVEVOU0lPTl9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZhbGlkKSBuYW1lID0g
dG9rZW4tPnZhbHVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDT0xPTjoK
LSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzonKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RVhUX0JFSEFWSU9SOgotICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6SURFTlRJRklFUikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHZhbGlkKSBiZWhhdmlvciA9IHRva2VuLT52YWx1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsaWQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAg
IHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAodmFs
aWQgJiYgKHN0YXRlICE9IEVYVF9CRUhBVklPUiArIDEpKQotICAgIHsKLSAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFs
dWUpOwotICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAg
ICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFeHRlbnNpb24odG9rZW4tPmxvY2F0aW9uLCBu
YW1lLCBiZWhhdmlvcik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24o
VG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9WRVJTSU9OKTsKLQotICAgIGVudW0gU3RhdGUKLSAgICB7Ci0gICAgICAgIFZFUlNJT05f
TlVNQkVSCi0gICAgfTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIGludCB2ZXJzaW9u
ID0gMDsKLSAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05VTUJFUjsKLQotICAgIG1Ub2tlbml6ZXIt
PmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VkFMSURfVkVSU0lPTl9OVU1CRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIHZlcnNpb24g
PSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURf
VE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJ
T05fTlVNQkVSICsgMSkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB2YWxpZCA9
IGZhbHNlOwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAgICAgIG1EaXJlY3RpdmVIYW5kbGVy
LT5oYW5kbGVWZXJzaW9uKHRva2VuLT5sb2NhdGlvbiwgdmVyc2lvbik7Ci19Ci0KLXZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXRE
aXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9MSU5FKTsKLQotICAgIGVudW0gU3RhdGUKLSAg
ICB7Ci0gICAgICAgIExJTkVfTlVNQkVSLAotICAgICAgICBGSUxFX05VTUJFUgotICAgIH07Ci0K
LSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAg
IGludCBzdGF0ZSA9IExJTkVfTlVNQkVSOwotCi0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFu
ZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKLSAgICBtYWNyb0V4cGFu
ZGVyLmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBMSU5FX05VTUJFUjoKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VkFMSURfTElORV9OVU1CRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIGxpbmUgPSBhdG9p
KHRva2VuLT52YWx1ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRklMRV9OVU1CRVI6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpDT05TVF9JTlQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHZhbGlkKSBmaWxlID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHZh
bGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwotICAgIH0KLQotICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05V
TUJFUiArIDEpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfTElORV9ESVJFQ1RJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgdmFsaWQgPSBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHZhbGlkKQotICAgIHsKLSAgICAgICAgbVRva2VuaXplci0+c2V0TGlu
ZU51bWJlcihsaW5lKTsKLSAgICAgICAgaWYgKHN0YXRlID09IEZJTEVfTlVNQkVSICsgMSkgbVRv
a2VuaXplci0+c2V0RmlsZU51bWJlcihmaWxlKTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlyZWN0aXZl
UGFyc2VyOjpza2lwcGluZygpIGNvbnN0Ci17Ci0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVt
cHR5KCkpIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2Nr
ID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgIHJldHVybiBibG9jay5za2lwQmxvY2sg
fHwgYmxvY2suc2tpcEdyb3VwOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VDb25k
aXRpb25hbElmKFRva2VuKiB0b2tlbikKLXsKLSAgICBDb25kaXRpb25hbEJsb2NrIGJsb2NrOwot
ICAgIGJsb2NrLnR5cGUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgYmxvY2subG9jYXRpb24gPSB0b2tl
bi0+bG9jYXRpb247Ci0KLSAgICBpZiAoc2tpcHBpbmcoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRo
aXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9uYWwgZ3JvdXAK
LSAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0aGlzIHdob2xl
IGJsb2NrIGlzIHNraXBwZWQuCi0gICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRvIHBhcnNlIHRo
ZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gZW1pdCBhIGRp
YWdub3N0aWMuCi0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAg
ICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKLQotICAg
ICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7Ci0gICAgICAgIHN3aXRjaCAoZGlyZWN0aXZlKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6Ci0gICAgICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6Ci0gICAgICAgICAgICBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBESVJFQ1RJVkVfSUZOREVGOgotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhw
cmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24g
PT0gMDsKLSAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lvbiAhPSAwOwot
ICAgIH0KLSAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwotfQotCi1pbnQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pCi17Ci0gICAg
YXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwKLSAgICAgICAg
ICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKLQotICAgIERlZmlu
ZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGlj
cyk7Ci0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFyc2VyLCBtTWFj
cm9TZXQsIG1EaWFnbm9zdGljcyk7Ci0gICAgRXhwcmVzc2lvblBhcnNlciBleHByZXNzaW9uUGFy
c2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOwotCi0gICAgaW50IGV4cHJlc3Npb24g
PSAwOwotICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKLSAgICBleHByZXNzaW9uUGFyc2Vy
LnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0
b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0VPRCh0b2tlbikpCi0gICAg
ewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwotICAgIH0KLQotICAgIHJldHVybiBleHByZXNzaW9uOwotfQotCi1pbnQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNz
ZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRkRFRikgfHwKLSAgICAgICAg
ICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGTkRFRikpOwotCi0gICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5U
SUZJRVIpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBNYWNyb1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOwotICAgIGludCBl
eHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7Ci0KLSAgICAvLyBX
YXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCi0gICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAoIWlzRU9EKHRva2VuKSkKLSAgICB7Ci0gICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVD
VEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7
Ci0gICAgfQotICAgIHJldHVybiBleHByZXNzaW9uOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDExNWEwMWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXwotI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXwotCi0jaW5jbHVkZSAiTGV4ZXIuaCIK
LSNpbmNsdWRlICJNYWNyby5oIgotI2luY2x1ZGUgInBwX3V0aWxzLmgiCi0jaW5jbHVkZSAiU291
cmNlTG9jYXRpb24uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwot
Y2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKLWNsYXNzIFRva2VuaXplcjsKLQotY2xhc3MgRGlyZWN0
aXZlUGFyc2VyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBEaXJlY3RpdmVQYXJz
ZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBt
YWNyb1NldCwKLSAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAot
ICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAg
IFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOwotCi0gICAgdm9p
ZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9r
ZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lk
IHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2Vu
KTsKLSAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUVs
c2UoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOwotICAg
IHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VFcnJvcihUb2tl
biogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lk
IHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZVZlcnNpb24oVG9r
ZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOwotCi0gICAgYm9v
bCBza2lwcGluZygpIGNvbnN0OwotICAgIHZvaWQgcGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0
b2tlbik7Ci0gICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbik7Ci0gICAgaW50
IHBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7Ci0KLSAgICBzdHJ1Y3QgQ29uZGl0
aW9uYWxCbG9jawotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgdHlwZTsKLSAgICAgICAgU291
cmNlTG9jYXRpb24gbG9jYXRpb247Ci0gICAgICAgIGJvb2wgc2tpcEJsb2NrOwotICAgICAgICBi
b29sIHNraXBHcm91cDsKLSAgICAgICAgYm9vbCBmb3VuZFZhbGlkR3JvdXA7Ci0gICAgICAgIGJv
b2wgZm91bmRFbHNlR3JvdXA7Ci0KLSAgICAgICAgQ29uZGl0aW9uYWxCbG9jaygpIDoKLSAgICAg
ICAgICAgIHNraXBCbG9jayhmYWxzZSksCi0gICAgICAgICAgICBza2lwR3JvdXAoZmFsc2UpLAot
ICAgICAgICAgICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKLSAgICAgICAgICAgIGZvdW5kRWxz
ZUdyb3VwKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHN0ZDo6dmVj
dG9yPENvbmRpdGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOwotICAgIFRva2VuaXplciog
bVRva2VuaXplcjsKLSAgICBNYWNyb1NldCogbU1hY3JvU2V0OwotICAgIERpYWdub3N0aWNzKiBt
RGlhZ25vc3RpY3M7Ci0gICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0RJUkVDVElWRV9QQVJTRVJfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhOWNlOS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NDAg
KzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0K
LS8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJz
IGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAy
MDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0g
ICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNw
ZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFp
bnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3Ry
aWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBh
cyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhl
IHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBz
a2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0g
ICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJl
bW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tl
bGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNl
bnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhp
cyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRk
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2Yg
Qmlzb24uICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmlj
aGFyZCBTdGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQg
InNlbWFudGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNo
b3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2Vy
IG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJp
YWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9z
LgotICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVk
ZSBmaWxlcyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJl
IG5vdGVkICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0v
KiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlz
b24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2Vs
ZXRvbiBuYW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1
cmUgcGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4g
ICovCi0jZGVmaW5lIFlZTFNQX05FRURFRCAwCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxl
IGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmlu
ZSB5eWxleCAgIHBwbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwg
IHBwbHZhbAotI2RlZmluZSB5eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcK
LSNkZWZpbmUgeXluZXJycyBwcG5lcnJzCi0KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlU
T0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRv
IHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAg
IGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgVE9LX0NP
TlNUX0lOVCA9IDI1OCwKLSAgICAgVE9LX09QX09SID0gMjU5LAotICAgICBUT0tfT1BfQU5EID0g
MjYwLAotICAgICBUT0tfT1BfTkUgPSAyNjEsCi0gICAgIFRPS19PUF9FUSA9IDI2MiwKLSAgICAg
VE9LX09QX0dFID0gMjYzLAotICAgICBUT0tfT1BfTEUgPSAyNjQsCi0gICAgIFRPS19PUF9SSUdI
VCA9IDI2NSwKLSAgICAgVE9LX09QX0xFRlQgPSAyNjYsCi0gICAgIFRPS19VTkFSWSA9IDI2Nwot
ICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgVE9LX0NPTlNUX0lOVCAyNTgK
LSNkZWZpbmUgVE9LX09QX09SIDI1OQotI2RlZmluZSBUT0tfT1BfQU5EIDI2MAotI2RlZmluZSBU
T0tfT1BfTkUgMjYxCi0jZGVmaW5lIFRPS19PUF9FUSAyNjIKLSNkZWZpbmUgVE9LX09QX0dFIDI2
MwotI2RlZmluZSBUT0tfT1BfTEUgMjY0Ci0jZGVmaW5lIFRPS19PUF9SSUdIVCAyNjUKLSNkZWZp
bmUgVE9LX09QX0xFRlQgMjY2Ci0jZGVmaW5lIFRPS19VTkFSWSAyNjcKLQotCi0KLQotLyogQ29w
eSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIu
c2guIERPIE5PVCBFRElUIQotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLS8vIFRyaWdnZXJlZCBi
eSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3Rk
bGliPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2lu
Y2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQotI2lmIGRlZmluZWQoX01TQ19W
RVIpCi10eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKLSNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQK
LSNlbHNlCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci10eXBlZGVmIGludG1heF90IFlZU1RZUEU7Ci0j
ZW5kaWYgIC8vIF9NU0NfVkVSCi0jZGVmaW5lIFlZRU5BQkxFX05MUyAwCi0jZGVmaW5lIFlZTFRZ
UEVfSVNfVFJJVklBTCAxCi0jZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZGVmaW5lIFlZ
U1RZUEVfSVNfREVDTEFSRUQgMQotCi1uYW1lc3BhY2Ugewotc3RydWN0IENvbnRleHQKLXsKLSAg
ICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOwotICAgIHBwOjpMZXhlciogbGV4ZXI7Ci0g
ICAgcHA6OlRva2VuKiB0b2tlbjsKLSAgICBpbnQqIHJlc3VsdDsKLX07Ci19ICAvLyBuYW1lc3Bh
Y2UKLQotCi1zdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0
KTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVh
c29uKTsKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRl
ZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3Nh
Z2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NF
Ci0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVS
Qk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5k
ZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lm
ICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBl
ZGVmIGludCBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0vKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLyogTGluZSAyMTYgb2Yg
eWFjYy5jLiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0j
aWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0j
ZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZk
ZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFy
IHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2Vu
ZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBl
X3VpbnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2
OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5
dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5k
aWYKLQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUg
WVlTSVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUg
WVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0j
IGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgot
Ci0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwot
IyBpZiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRs
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1z
Z2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlm
Ci0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCi0jIGVuZGlmCi0jZW5k
aWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4g
ICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlV
U0UoZSkgKCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8K
LSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5n
cyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUg
WVlJRChuKSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAo
aSkKLSAgICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsKLX0KLSNlbmRpZgotCi0jaWYg
ISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJzZXIg
aW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAg
Ki8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9D
QQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRp
bl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGlu
Y2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAg
ZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMg
ICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0j
ICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZp
bmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAg
ZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBH
Q0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVF
KFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlT
VEFDS19BTExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9u
ZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBh
Z2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZl
bHkKLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNs
aWdodGx5IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVy
LWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNL
X0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlm
Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlT
VEFDS19GUkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRl
ZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBp
ZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKLSAgICAgICAm
JiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotCSAgICAgJiYgKGRl
ZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAot
IyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZ
WU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFs
bG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMg
ICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQg
X1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQg
ZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVu
ZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8
IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAg
ICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLQkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19U
UklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9w
ZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsK
LSAgeXl0eXBlX2ludDE2IHl5c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgfTsKLQotLyogVGhlIHNp
emUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBu
ZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlh
bGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8g
aG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUg
WVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsg
c2l6ZW9mIChZWVNUWVBFKSkgXAotICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0vKiBD
b3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGlu
YXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZuZGVmIFlZQ09QWQotIyAgaWYgZGVm
aW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9t
LCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBz
aXplb2YgKCooRnJvbSkpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENv
dW50KQkJXAotICAgICAgZG8JCQkJCVwKLQl7CQkJCQlcCi0JICBZWVNJWkVfVCB5eWk7CQkJCVwK
LQkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKLQkgICAgKFRvKVt5eWld
ID0gKEZyb20pW3l5aV07CQlcCi0JfQkJCQkJXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAg
ZW5kaWYKLSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9u
IHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNU
QUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRo
ZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFj
ay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUg
bmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJ
CVwKLSAgICBkbwkJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWVlTSVpFX1QgeXluZXdi
eXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJ
XAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCi0JeXluZXdieXRlcyA9IHl5c3RhY2tz
aXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotCXl5cHRyICs9
IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0g
ICAgd2hpbGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1i
ZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMTQKLS8q
IFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAx
NzUKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZ
WU5UT0tFTlMgIDI3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0j
ZGVmaW5lIFlZTk5UUyAgMwotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNk
ZWZpbmUgWVlOUlVMRVMgIDI2Ci0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8K
LSNkZWZpbmUgWVlOU1RBVEVTICA1MgotCi0vKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24g
c3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRF
RlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAyNjcKLQotI2RlZmluZSBZWVRSQU5TTEFURShZ
WVgpCQkJCQkJXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFu
c2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNv
biBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIz
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMSwgICAgIDgsICAgICAyLAotICAgICAgMjUsICAg
IDI2LCAgICAxOSwgICAgMTcsICAgICAyLCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIsICAg
IDI0LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMjIKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAt
LSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAg
IFlZUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAg
ICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAg
ICAyMywgICAgMjcsCi0gICAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUx
LCAgICA1NSwgICAgNTksICAgIDYzLCAgICA2NywKLSAgICAgIDcxLCAgICA3NSwgICAgNzksICAg
IDgyLCAgICA4NSwgICAgODgsICAgIDkxCi19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJh
dGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5cmhzW10gPQotewotICAgICAgMjgsICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAg
MywgICAgLTEsICAgIDI5LCAgICAgNCwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgICA1LCAg
ICAyOSwgICAgLTEsICAgIDI5LCAgICAgNiwgICAgMjksICAgIC0xLCAgICAyOSwKLSAgICAgICA3
LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDks
ICAgIDI5LAotICAgICAgLTEsICAgIDI5LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAg
MTMsICAgIDI5LCAgICAtMSwgICAgMjksCi0gICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwg
ICAgMTIsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDExLCAgICAyOSwKLSAgICAgIC0xLCAgICAy
OSwgICAgMTUsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5
LAotICAgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAyMSwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAxOSwgICAgMjksICAgIC0xLCAgICAyMywKLSAgICAgIDI5LCAgICAtMSwgICAg
MjQsICAgIDI5LCAgICAtMSwgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAotICAg
ICAgLTEsICAgIDI1LCAgICAyOSwgICAgMjYsICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0g
LS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtdID0KLXsKLSAgICAgICAwLCAgICA4OSwg
ICAgODksICAgIDk2LCAgICA5NywgICAxMDAsICAgMTAzLCAgIDEwNiwgICAxMDksICAgMTEyLAot
ICAgICAxMTUsICAgMTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LCAgIDEzMCwgICAxMzMsICAgMTM2
LCAgIDEzOSwgICAxNDIsCi0gICAgIDE1NSwgICAxNjgsICAgMTcxLCAgIDE3NCwgICAxNzcsICAg
MTgwLCAgIDE4MwotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0Ug
fHwgWVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBv
ZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwg
c3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNo
YXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQi
LCAiVE9LX0NPTlNUX0lOVCIsICJUT0tfT1BfT1IiLAotICAiVE9LX09QX0FORCIsICInfCciLCAi
J14nIiwgIicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VRIiwgIic8JyIsCi0gICInPiciLCAi
VE9LX09QX0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklHSFQiLCAiVE9LX09QX0xFRlQiLCAi
JysnIiwKLSAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJUT0tfVU5BUlkiLCAiJyEnIiwg
Iid+JyIsICInKCciLCAiJyknIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIs
IDAKLX07Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1d
IC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxF
WC1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0g
ICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQs
ICAgIDM4LCAgIDI2MSwKLSAgICAgMjYyLCAgICA2MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAy
NjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAotICAgICAgNDcsICAgIDM3LCAgIDI2Nywg
ICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKLX07Ci0jIGVuZGlmCi0KLS8qIFlZUjFbWVlOXSAt
LSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5n
IHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAgICAg
IDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMKLX07Ci0KLS8qIFlZ
REVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0
ZQotICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVs
c2UgdG8gZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDAsICAgICAz
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgMjUs
Ci0gICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAg
ICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAgIDE1LCAgICAxNiwgICAgMTgsICAg
IDE3LCAgICAyMSwKLSAgICAgIDIwLCAgICAxOQotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5V
TV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAg
IC0xLCAgICAgNywgICAgIDgKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGlu
IFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNk
ZWZpbmUgWVlQQUNUX05JTkYgLTExCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtd
ID0KLXsKLSAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LCAgICAxMiwgICAgNjgsICAgLTExLAotICAgICAtMTEsICAgLTExLCAgIC0xMSwgICAgMjcsICAg
LTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCi0gICAgICA0NiwgICAgNDYs
ICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwK
LSAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAgICA4NSwgICAxMDEsICAgMTE2LCAgIDEz
MCwgICAxNDMsICAgMTU0LAotICAgICAxNTQsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgLTEwLCAg
ICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEsCi0gICAgIC0xMSwgICAtMTEKLX07Ci0K
LS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlw
Z290b1tdID0KLXsKLSAgICAgLTExLCAgIC0xMSwgICAgLTIKLX07Ci0KLS8qIFlZVEFCTEVbWVlQ
QUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgotICAg
cG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxl
IHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURF
RkFDVCBzYXlzLgotICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmlu
ZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0K
LXsKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAxNCwgICAgMzQsICAgIDM1
LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwKLSAg
ICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IDE3LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCi19Owot
Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAgICAgICAyLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LAotICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgIDMsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIzLAotICAgICAgMjQs
ICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsCi0gICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA2LCAgICAgNywgICAgIDgs
Ci0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgOCwgICAgIDksCi0gICAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCi19OwotCi0vKiBZWVNUT1NbU1RBVEUt
TlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3ltYm9s
IG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rv
c1tdID0KLXsKLSAgICAgICAwLCAgICAgMywgICAgMTcsICAgIDE4LCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyOCwgICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjkKLX07
Ci0KLSNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmlu
CSh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZCQkoLTIpCi0jZGVmaW5lIFlZRU9G
CQkwCi0KLSNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JU
CQlnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCi0KLQot
LyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVy
ZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5p
bmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxh
bnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwJCWdvdG8g
eXllcnJsYWIKLQotI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNk
ZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAotZG8JCQkJCQkJCVwKLSAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAg
ICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJ
XAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCi0gICAgICBZWVBP
UFNUQUNLICgxKTsJCQkJCQlcCi0gICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKLSAgICB9CQkJ
CQkJCQlcCi0gIGVsc2UJCQkJCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAgICB5eWVycm9yIChj
b250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZ
RVJST1I7CQkJCQkJCVwKLSAgICB9CQkJCQkJCQlcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2Rl
ZmluZSBZWVRFUlJPUgkxCi0jZGVmaW5lIFlZRVJSQ09ERQkyNTYKLQotCi0vKiBZWUxMT0NfREVG
QVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KLSAgIElm
IE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5k
cwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwot
Ci0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxMT0NfREVG
QVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCi0gICAg
ZG8JCQkJCQkJCQlcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCku
Zmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAotCSAgKEN1cnJl
bnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAotCSAg
KEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwK
LQkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVt
bjsJXAotCX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAo
Q3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKLQkgICAg
WVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfY29s
dW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCku
bGFzdF9jb2x1bW47CQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2Vu
ZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRo
ZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVm
aW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRo
ZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9O
X1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykJCQlcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJ
XAotCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAotCSAgICAg
IChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQotIyBlbHNlCi0jICBkZWZpbmUg
WVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYK
LQotCi0vKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRz
LiAgKi8KLQotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZh
bCwgWVlMRVhfUEFSQU0pCi0jZWxzZQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNv
bnRleHQpCi0jZW5kaWYKLQotLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwot
I2lmIFlZREVCVUcKLQotIyBpZm5kZWYgWVlGUFJJTlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZw
cmludGYKLSMgZW5kaWYKLQotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAotZG8gewkJCQkJ
CVwKLSAgaWYgKHl5ZGVidWcpCQkJCQlcCi0gICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKLX0gd2hp
bGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikJCQkgIFwKLWRvIHsJCQkJCQkJCQkgIFwKLSAgaWYgKHl5ZGVidWcpCQkJ
CQkJCQkgIFwKLSAgICB7CQkJCQkJCQkJICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVz
ICIsIFRpdGxlKTsJCQkJCSAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJ
ICBcCi0JCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CQkJCQkJICBcCi0gICAgfQkJCQkJCQkJCSAgXAotfSB3aGlsZSAoWVlJRCAoMCkp
Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBz
eW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGlu
dCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIENvbnRl
eHQgKmNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47Ci0g
IFlZVVNFIChjb250ZXh0KTsKLSMgaWZkZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9L
RU5TKQotICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXAp
OwotIyBlbHNlCi0gIFlZVVNFICh5eW91dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBl
KQotICAgIHsKLSAgICAgIGRlZmF1bHQ6Ci0JYnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJv
bF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCi0gICAgRklMRSAq
eXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7Ci0gICAgQ29udGV4dCAqY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoeXl0eXBlIDwg
WVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFt
ZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAo
IiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiki
KTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0
ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0
aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50
MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9w
KQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2Vu
ZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0
b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0
b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNL
X1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJ
CQkJCQlcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKLX0gd2hp
bGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJl
ZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRp
YyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250
ZXh0ICpjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNw
LCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgaW50IHl5cnVsZTsK
LSAgICBDb250ZXh0ICpjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5
cnVsZV07Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5
eXJ1bGVdOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQg
KGxpbmUgJWx1KTpcbiIsCi0JICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1i
b2xzIGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlp
KyspCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7
Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5
eWldLAotCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0JCSAgICAgICAJ
CSAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9
Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAotZG8gewkJCQkJXAotICBp
ZiAoeXlkZWJ1ZykJCQkJXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRl
eHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJz
ZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBw
YXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcg
Ki8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRp
dGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0
b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURF
QlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIn
cyBzdGFja3MuICAqLwotI2lmbmRlZglZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEgg
MjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBj
YW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRl
bnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBs
YXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJ
TVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmlu
aXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQ
VEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVSUk9S
X1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYm
IGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQot
LyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNo
YXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAg
IGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3Ig
KHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1
cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAg
aWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05V
X1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlT
UkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdc
MCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hh
ciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMp
Ci0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0g
IGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hp
bGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJu
IHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8q
IENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5
IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3Vp
dGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90
aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9z
dHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1i
YWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAg
IG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRo
ZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5h
bWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09
ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAq
eXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0Jc3dpdGNoICgqKyt5eXApCi0JICB7Ci0J
ICBjYXNlICdcJyc6Ci0JICBjYXNlICcsJzoKLQkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OwotCi0JICBjYXNlICdcXCc6Ci0JICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLQkgICAgICBnb3Rv
IGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0JICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0JICBkZWZh
dWx0OgotCSAgICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0JICAgIHl5
bisrOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnIic6Ci0JICAgIGlmICh5eXJlcykKLQkgICAg
ICB5eXJlc1t5eW5dID0gJ1wwJzsKLQkgICAgcmV0dXJuIHl5bjsKLQkgIH0KLSAgICBkb19ub3Rf
c3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0
cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVz
OwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBh
Ym91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RB
VEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhl
IHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAg
Y29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxk
IGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5h
cnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFY
SU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8K
LXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlz
dGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBp
ZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7
Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7
Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0p
OwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6
ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAg
ICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMg
dGhhdCBhcmUKLQkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRh
eCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAl
cyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7
Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9
ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9y
ICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotCQkgICAgKyBz
aXplb2YgeXlleHBlY3RpbmcgLSAxCi0JCSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFY
SU1VTSAtIDIpCi0JCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNv
bnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZ
TiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0JIFlZQ0hFQ0suICAq
LwotICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBT
dGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAg
IGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5
eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGlu
dCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAg
ICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9y
ICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLQlpZiAoeXljaGVja1t5eXgg
KyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0JICB7Ci0JICAgIGlmICh5eWNvdW50
ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0JICAgICAgewotCQl5eWNvdW50ID0g
MTsKLQkJeXlzaXplID0geXlzaXplMDsKLQkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAt
IDFdID0gJ1wwJzsKLQkJYnJlYWs7Ci0JICAgICAgfQotCSAgICB5eWFyZ1t5eWNvdW50KytdID0g
eXl0bmFtZVt5eXhdOwotCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRu
YW1lW3l5eF0pOwotCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwot
CSAgICB5eXNpemUgPSB5eXNpemUxOwotCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlw
cmVmaXgpOwotCSAgICB5eXByZWZpeCA9IHl5b3I7Ci0JICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5
eWZvcm1hdCk7Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAg
ICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0g
eXlzaXplMTsKLQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLQlyZXR1cm4gWVlTSVpFX01B
WElNVU07Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLQl7Ci0JICAvKiBBdm9pZCBzcHJpbnRmLCBh
cyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0JICAgICBEb24ndCBo
YXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotCSAgICAgcHJv
ZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLQkgIGNo
YXIgKnl5cCA9IHl5cmVzdWx0OwotCSAgaW50IHl5aSA9IDA7Ci0JICB3aGlsZSAoKCp5eXAgPSAq
eXlmKSAhPSAnXDAnKQotCSAgICB7Ci0JICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9
PSAncycgJiYgeXlpIDwgeXljb3VudCkKLQkJewotCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwg
eXlhcmdbeXlpKytdKTsKLQkJICB5eWYgKz0gMjsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkg
IHl5cCsrOwotCQkgIHl5ZisrOwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgICByZXR1cm4geXlzaXpl
OwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUg
bWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVj
dCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250
ZXh0ICpjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0
eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQg
eXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0j
ZW5kaWYKLXsKLSAgWVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0gIGlm
ICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQgKHl5
bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5cGUp
Ci0gICAgewotCi0gICAgICBkZWZhdWx0OgotCWJyZWFrOwotICAgIH0KLX0KLQwKLQotLyogUHJl
dmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lmZGVmIFlZ
UEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMK
LWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAo
KTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4
dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0t
LS0tLS0tKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0j
ZWxzZQotaW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFS
QU07Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAoQ29udGV4dCAqY29udGV4
dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgQ29udGV4dCAqY29udGV4dDsK
LSNlbmRpZgotI2VuZGlmCi17Ci0gIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQg
eXljaGFyOwotCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9s
LiAgKi8KLVlZU1RZUEUgeXlsdmFsOwotCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBm
YXIuICAqLwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGlu
dCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3Ig
bWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVh
ZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAg
aW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVy
cm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1
ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxv
YyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhl
aXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzog
cmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2Nh
dGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJz
LCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUu
ICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZ
WUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50
MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZ
UEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZ
UEUgKnl5dnNwOwotCi0KLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0K
LSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9j
YXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZh
bDsKLQotCi0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1
Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9w
cGVkLiAgKi8KLSAgaW50IHl5bGVuID0gMDsKLQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFy
dGluZyBwYXJzZVxuIikpOwotCi0gIHl5c3RhdGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0g
IHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBi
ZSByZWFkLiAgKi8KLQotICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0
ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0
aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUg
d2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5
eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBn
ZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJl
ZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICov
Ci0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlm
ICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0
aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAq
LwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5
b3ZlcmZsb3cKLSAgICAgIHsKLQkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0
aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0JICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0
IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwotCSAgIG1lbW9yeS4gICovCi0JWVlTVFlQRSAqeXl2
czEgPSB5eXZzOwotCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotCi0KLQkvKiBFYWNoIHN0
YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBk
YXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0J
ICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBt
aWdodAotCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5
b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUg
KiBzaXplb2YgKCp5eXNzcCksCi0JCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNw
KSwKLQotCQkgICAgJnl5c3RhY2tzaXplKTsKLQotCXl5c3MgPSB5eXNzMTsKLQl5eXZzID0geXl2
czE7Ci0gICAgICB9Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNL
X1JFTE9DQVRFCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBF
eHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9
IHl5c3RhY2tzaXplKQotCWdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAq
PSAyOwotICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLQl5eXN0YWNrc2l6ZSA9
IFlZTUFYREVQVEg7Ci0KLSAgICAgIHsKLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLQl1
bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0JICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9D
IChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotCWlmICghIHl5cHRyKQotCSAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9D
QVRFICh5eXZzKTsKLQotIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQotCWlmICh5eXNzMSAhPSB5
eXNzYSkKLQkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlm
IC8qIG5vIHl5b3ZlcmZsb3cgKi8KLQotICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsK
LSAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7Ci0KLQotICAgICAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAotCQkgICh1bnNpZ25lZCBs
b25nIGludCkgeXlzdGFja3NpemUpKTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAt
IDEgPD0geXlzc3ApCi0JWVlBQk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
RW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwotCi0v
Ki0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoK
LQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRl
LiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0
IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0
byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXluID0g
eXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8geXlk
ZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRv
bid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBU
WSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hh
ciA9PSBZWUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcg
YSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNo
YXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9
Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0g
ICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwg
Jnl5bGxvYyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0
b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRh
a2UgdGhhdCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwg
WVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZh
dWx0OwotICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAg
ICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKLQlnb3RvIHl5ZXJybGFiOwot
ICAgICAgeXluID0gLXl5bjsKLSAgICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5
eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRl
ZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4g
ICovCi0gIGlmICh5eWVycnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0
IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmci
LCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVk
IHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAg
IHl5Y2hhciA9IFlZRU1QVFk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2
YWw7Ci0KLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0
aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVm
YXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBn
b3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJl
ciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQot
ICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2Yg
dGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxv
d2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1
bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0
LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFy
c2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0
IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEt
eXlsZW5dOwotCi0KLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwotICBzd2l0Y2ggKHl5bikKLSAg
ICB7Ci0gICAgICAgIGNhc2UgMjoKLQotICAgIHsKLSAgICAgICAgKihjb250ZXh0LT5yZXN1bHQp
ID0gc3RhdGljX2Nhc3Q8aW50PigoeXl2c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICBZWUFDQ0VQ
VDsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pIHwgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3
OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNw
WygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0p
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDEyOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5
eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPiAoeXl2c3BbKDMpIC0g
KDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
LSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE4Ogot
Ci0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygz
KSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOToKLQotICAgIHsKLSAg
ICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgz
KV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwot
ICAgICAgICAgICAgWVlBQk9SVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgIH0K
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjA6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgo
eXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8g
IiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0g
c3RyZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAg
IFlZQUJPUlQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOwotICAgICAgICB9Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDIxOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyMjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgy
KV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAyNDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0p
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5
eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5
bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9
IHl5dmFsOwotCi0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9u
LiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUg
c3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciByZWR1Y2Vk
IGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXlu
IC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9
IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0
YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlO
VE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9y
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWI6Ci0g
IC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMg
ZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXluZXJyczsK
LSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50
YXggZXJyb3IiKSk7Ci0jZWxzZQotICAgICAgewotCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4
X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwotCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAm
JiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKLQkgIHsKLQkgICAgWVlTSVpF
X1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7Ci0JICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAm
JiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0JICAgICAgeXlhbGxvYyA9IFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTTsKLQkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotCSAgICAg
IFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxM
T0MgKHl5YWxsb2MpOwotCSAgICBpZiAoeXltc2cpCi0JICAgICAgeXltc2dfYWxsb2MgPSB5eWFs
bG9jOwotCSAgICBlbHNlCi0JICAgICAgewotCQl5eW1zZyA9IHl5bXNnYnVmOwotCQl5eW1zZ19h
bGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLQkgICAgICB9Ci0JICB9Ci0KLQlpZiAoMCA8IHl5c2l6
ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCi0JICB7Ci0JICAgICh2b2lkKSB5eXN5bnRheF9l
cnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5
bXNnKTsKLQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3lu
dGF4IGVycm9yIikpOwotCSAgICBpZiAoeXlzaXplICE9IDApCi0JICAgICAgZ290byB5eWV4aGF1
c3RlZGxhYjsKLQkgIH0KLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotCi0KLSAgaWYgKHl5ZXJy
c3RhdHVzID09IDMpCi0gICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRv
IHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAq
LwotCi0gICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotCXsKLQkgIC8qIFJldHVybiBmYWlsdXJl
IGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0JICBpZiAoeXljaGFyID09IFlZRU9GKQotCSAgICBZ
WUFCT1JUOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2Nh
cmRpbmciLAotCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKLQkgIHl5Y2hhciA9
IFlZRU1QVFk7Ci0JfQotICAgIH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2st
YWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCi0gICAgIHRva2VuLiAgKi8KLSAg
Z290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0
bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwoteXllcnJvcmxhYjoKLQotICAvKiBQYWNpZnkgY29tcGlsZXJzIGxp
a2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCi0gICAgIFlZRVJST1IgYW5k
IHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKLSAg
ICAgY29kZS4gICovCi0gIGlmICgvKkNPTlNUQ09ORCovIDApCi0gICAgIGdvdG8geXllcnJvcmxh
YjsKLQotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBh
Y3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RBQ0sgKHl5
bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB5
eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJy
bGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRv
a2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAgIHsKLSAg
ICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYp
Ci0JewotCSAgeXluICs9IFlZVEVSUk9SOwotCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxB
U1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotCSAgICB7Ci0JICAgICAgeXluID0geXl0
YWJsZVt5eW5dOwotCSAgICAgIGlmICgwIDwgeXluKQotCQlicmVhazsKLQkgICAgfQotCX0KLQot
ICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0
aGUgZXJyb3IgdG9rZW4uICAqLwotICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0JWVlBQk9SVDsK
LQotCi0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1t5eXN0
YXRlXSwgeXl2c3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0
YXRlID0gKnl5c3NwOwotICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9
Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gICorK3l5dnNwID0g
eXlsdmFsOwotCi0KLSAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9M
X1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0
YXRlID0geXluOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRs
YWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAgZ290byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhl
cmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxh
YjoKLSAgeXlyZXN1bHQgPSAxOwotICBnb3RvIHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZs
b3cKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXho
YXVzdGVkbGFiOgotICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7
Ci0gIHl5cmVzdWx0ID0gMjsKLSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJl
dHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAg
eXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLQkJIHl5dG9rZW4s
ICZ5eWx2YWwsIGNvbnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0
aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFD
Q0VQVC4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3Ms
IHl5c3NwKTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0cnVj
dCAoIkNsZWFudXA6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4
dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAg
aWYgKHl5c3MgIT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lm
IFlZRVJST1JfVkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19G
UkVFICh5eW1zZyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0g
IHJldHVybiBZWUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotaW50IHl5bGV4KFlZU1RZUEUq
IGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQotewotICAgIGludCB0eXBlID0gMDsKLQotICAgIHBw
OjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKLSAgICBzd2l0Y2ggKHRva2VuLT50eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6Ci0gICAgICAgICpsdmFs
cCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOwotICAgICAgICB0eXBl
ID0gVE9LX0NPTlNUX0lOVDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9H
RTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6
IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hU
OiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9M
RUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOwotICAgICAgY2FzZSAnfCc6IHR5cGUgPSAn
fCc7IGJyZWFrOwotICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOwotICAgICAgY2Fz
ZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOwotICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJy
ZWFrOwotICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwotICAgICAgY2FzZSAnLSc6
IHR5cGUgPSAnLSc7IGJyZWFrOwotICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOwot
ICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOwotICAgICAgY2FzZSAnLyc6IHR5cGUg
PSAnLyc7IGJyZWFrOwotICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOwotICAgICAg
Y2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOwotICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7
IGJyZWFrOwotICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFrOwotICAgICAgY2FzZSAn
KSc6IHR5cGUgPSAnKSc7IGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0K
LSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2
YWxpZC4KLSAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKLQot
ICAgIHJldHVybiB0eXBlOwotfQotCi12b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29u
c3QgY2hhciogcmVhc29uKQotewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWFzb24pOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1FeHByZXNzaW9u
UGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3Rp
Y3MpCi17Ci19Ci0KLWJvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBp
bnQqIHJlc3VsdCkKLXsKLSAgICBDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5kaWFnbm9z
dGljcyA9IG1EaWFnbm9zdGljczsKLSAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOwotICAgIGNv
bnRleHQudG9rZW4gPSB0b2tlbjsKLSAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKLSAgICBp
bnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7Ci0gICAgc3dpdGNoIChyZXQpCi0gICAgewotICAg
ICAgY2FzZSAwOgotICAgICAgY2FzZSAxOgotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAy
OgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9S
WSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0ID09IDA7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MmQwNTkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCi0j
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwotCi0jaW5j
bHVkZSAicHBfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNz
OwotY2xhc3MgTGV4ZXI7Ci1zdHJ1Y3QgVG9rZW47Ci0KLWNsYXNzIEV4cHJlc3Npb25QYXJzZXIK
LXsKLSAgcHVibGljOgotICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpOwotCi0gICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCog
cmVzdWx0KTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihF
eHByZXNzaW9uUGFyc2VyKTsKLQotICAgIExleGVyKiBtTGV4ZXI7Ci0gICAgRGlhZ25vc3RpY3Mq
IG1EaWFnbm9zdGljczsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTdjOWYwNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkKKysrIC9kZXYvbnVsbApA
QCAtMSwyODEgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMg
dGhlIFlhY2MgZ3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbi4KLQot
SUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFy
c2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNz
aW9uIHBhcnNlci4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpZiBk
ZWZpbmVkKF9fR05VQ19fKQotLy8gVG9nZ2xlIHRoZSB3YXJuaW5nIGZvciAtV3ByYWdtYXMgdG8g
ZW5zdXJlIHdlIGRvIG5vdCBicmVhayB0aGUgYnVpbGQKLS8vIHdpdGggZWFybGllciBjb21waWxl
ciB2ZXJzaW9ucyBiZWNhdXNlIG9mIHVua25vd24gcHJhZ21hIG9wdGlvbnMuCi0jcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcHJhZ21hcyIKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0
by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VuaW5pdGlhbGl6ZWQiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
bWF5YmUtdW5pbml0aWFsaXplZCIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgd2FybmluZyAiLVdw
cmFnbWFzIgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MDY1IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKLQot
I2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFt
PgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJMZXhlci5oIgotI2luY2x1
ZGUgIlRva2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBfX2ludDY0IFlZ
U1RZUEU7Ci0jZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGlu
dC5oPgotdHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOwotI2VuZGlmICAvLyBfTVNDX1ZFUgotI2Rl
ZmluZSBZWUVOQUJMRV9OTFMgMAotI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2RlZmlu
ZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLQot
bmFtZXNwYWNlIHsKLXN0cnVjdCBDb250ZXh0Ci17Ci0gICAgcHA6OkRpYWdub3N0aWNzKiBkaWFn
bm9zdGljczsKLSAgICBwcDo6TGV4ZXIqIGxleGVyOwotICAgIHBwOjpUb2tlbiogdG9rZW47Ci0g
ICAgaW50KiByZXN1bHQ7Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0lfQotCi0lcHVyZS1wYXJzZXIK
LSVuYW1lLXByZWZpeD0icHAiCi0lcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9Ci0lbGV4
LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQotCi0lewotc3RhdGljIGludCB5eWxleChZWVNUWVBF
KiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0lfQotCi0ldG9rZW4gVE9LX0NPTlNUX0lO
VAotJWxlZnQgVE9LX09QX09SCi0lbGVmdCBUT0tfT1BfQU5ECi0lbGVmdCAnfCcKLSVsZWZ0ICde
JwotJWxlZnQgJyYnCi0lbGVmdCBUT0tfT1BfRVEgVE9LX09QX05FCi0lbGVmdCAnPCcgJz4nIFRP
S19PUF9MRSBUT0tfT1BfR0UKLSVsZWZ0IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAotJWxlZnQg
JysnICctJwotJWxlZnQgJyonICcvJyAnJScKLSVyaWdodCBUT0tfVU5BUlkKLQotJSUKLQotaW5w
dXQKLSAgICA6IGV4cHJlc3Npb24gewotICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0
aWNfY2FzdDxpbnQ+KCQxKTsKLSAgICAgICAgWVlBQ0NFUFQ7Ci0gICAgfQotOwotCi1leHByZXNz
aW9uCi0gICAgOiBUT0tfQ09OU1RfSU5UCi0gICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHBy
ZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSB8fCAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9u
IFRPS19PUF9BTkQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgJiYgJDM7Ci0gICAgfQot
ICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgfCAkMzsK
LSAgICB9Ci0gICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAk
MSBeICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24gewotICAgICAg
ICAkJCA9ICQxICYgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVz
c2lvbiB7Ci0gICAgICAgICQkID0gJDEgIT0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBU
T0tfT1BfRVEgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPT0gJDM7Ci0gICAgfQotICAg
IHwgZXhwcmVzc2lvbiBUT0tfT1BfR0UgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPj0g
JDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7Ci0gICAg
ICAgICQkID0gJDEgPD0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lv
biB7Ci0gICAgICAgICQkID0gJDEgPiAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICc8JyBl
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSA8ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Np
b24gVE9LX09QX1JJR0hUIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxID4+ICQzOwotICAg
IH0KLSAgICB8IGV4cHJlc3Npb24gVE9LX09QX0xFRlQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQk
ID0gJDEgPDwgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7Ci0g
ICAgICAgICQkID0gJDEgLSAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICcrJyBleHByZXNz
aW9uIHsKLSAgICAgICAgJCQgPSAkMSArICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyUn
IGV4cHJlc3Npb24gewotICAgICAgICBpZiAoJDMgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpz
dHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8
ICQzOwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJ
U0lPTl9CWV9aRVJPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT50b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQuY19zdHIoKSk7Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgJCQgPSAkMSAlICQzOwotICAgICAgICB9Ci0gICAgfQotICAg
IHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmICgkMyA9PSAwKSB7Ci0g
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0g
PDwgJDEgPDwgIiAvICIgPDwgJDM7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3Ry
ZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZ
QUJPUlQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkJCA9ICQxIC8gJDM7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKLSAgICAgICAg
JCQgPSAkMSAqICQzOwotICAgIH0KLSAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFS
WSB7Ci0gICAgICAgICQkID0gISAkMjsKLSAgICB9Ci0gICAgfCAnficgZXhwcmVzc2lvbiAlcHJl
YyBUT0tfVU5BUlkgewotICAgICAgICAkJCA9IH4gJDI7Ci0gICAgfQotICAgIHwgJy0nIGV4cHJl
c3Npb24gJXByZWMgVE9LX1VOQVJZIHsKLSAgICAgICAgJCQgPSAtICQyOwotICAgIH0KLSAgICB8
ICcrJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7Ci0gICAgICAgICQkID0gKyAkMjsKLSAg
ICB9Ci0gICAgfCAnKCcgZXhwcmVzc2lvbiAnKScgewotICAgICAgICAkJCA9ICQyOwotICAgIH0K
LTsKLQotJSUKLQotaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQot
ewotICAgIGludCB0eXBlID0gMDsKLQotICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50
b2tlbjsKLSAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgcHA6OlRv
a2VuOjpDT05TVF9JTlQ6Ci0gICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNf
c3RyKCksIE5VTEwsIDApOwotICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsg
YnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsg
YnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJy
ZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVh
azsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7
Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOwot
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVh
azsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJy
ZWFrOwotICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOwotICAgICAgY2FzZSAnXic6
IHR5cGUgPSAnXic7IGJyZWFrOwotICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOwot
ICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOwotICAgICAgY2FzZSAnPCc6IHR5cGUg
PSAnPCc7IGJyZWFrOwotICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwotICAgICAg
Y2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOwotICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7
IGJyZWFrOwotICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOwotICAgICAgY2FzZSAn
Kic6IHR5cGUgPSAnKic7IGJyZWFrOwotICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFr
OwotICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOwotICAgICAgY2FzZSAnKCc6IHR5
cGUgPSAnKCc7IGJyZWFrOwotICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOwotCi0g
ICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0
IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KLSAgICBpZiAodHlwZSAhPSAwKSBj
b250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKLQotICAgIHJldHVybiB0eXBlOwotfQotCi12b2lk
IHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIGNv
bnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJF
U1NJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwotfQot
Ci1uYW1lc3BhY2UgcHAgewotCi1FeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExl
eGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVy
KSwKLSAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCi17Ci19Ci0KLWJvb2wgRXhwcmVzc2lv
blBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKLXsKLSAgICBDb250ZXh0
IGNvbnRleHQ7Ci0gICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKLSAgICBj
b250ZXh0LmxleGVyID0gbUxleGVyOwotICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKLSAgICBj
b250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKLSAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7
Ci0gICAgc3dpdGNoIChyZXQpCi0gICAgewotICAgICAgY2FzZSAwOgotICAgICAgY2FzZSAxOgot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwot
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1Is
IHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmV0ID09IDA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
SW5wdXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2RlOTVmLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0lucHV0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaW5jbHVkZSAiSW5wdXQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRl
IDxjYXNzZXJ0PgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1JbnB1
dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQotewotfQotCi1JbnB1dDo6SW5wdXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KSA6Ci0gICAgbUNvdW50KGNvdW50KSwKLSAgICBtU3RyaW5nKHN0cmluZykKLXsKLSAgICBhc3Nl
cnQobUNvdW50ID49IDApOwotICAgIG1MZW5ndGgucmVzZXJ2ZShtQ291bnQpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbUNvdW50OyArK2kpCi0gICAgewotICAgICAgICBpbnQgbGVuID0gbGVu
Z3RoID8gbGVuZ3RoW2ldIDogLTE7Ci0gICAgICAgIG1MZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAg
PyBzdHJsZW4obVN0cmluZ1tpXSkgOiBsZW4pOwotICAgIH0KLX0KLQotaW50IElucHV0OjpyZWFk
KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0gICAgaW50IG5SZWFkID0gMDsKLSAgICB3aGls
ZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCi0gICAg
ewotICAgICAgICBpbnQgc2l6ZSA9IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFkTG9j
LmNJbmRleDsKLSAgICAgICAgc2l6ZSA9IHN0ZDo6bWluKHNpemUsIG1heFNpemUpOwotICAgICAg
ICBtZW1jcHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9j
LmNJbmRleCwgc2l6ZSk7Ci0gICAgICAgIG5SZWFkICs9IHNpemU7Ci0gICAgICAgIG1SZWFkTG9j
LmNJbmRleCArPSBzaXplOwotCi0gICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNo
ZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0cmluZy4KLSAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRl
eCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCi0gICAgICAgIHsKLSAgICAgICAgICAgICsr
bVJlYWRMb2Muc0luZGV4OwotICAgICAgICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gblJlYWQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGFjNzM0Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hf
Ci0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwotCi0jaW5jbHVkZSA8dmVj
dG9yPgotCi1uYW1lc3BhY2UgcHAKLXsKLQotLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBM
ZXhlci4KLWNsYXNzIElucHV0Ci17Ci0gIHB1YmxpYzoKLSAgICBJbnB1dCgpOwotICAgIElucHV0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7Ci0KLSAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KLSAgICBjb25z
dCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsg
fQotICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4
XTsgfQotCi0gICAgaW50IHJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7Ci0KLSAgICBzdHJ1
Y3QgTG9jYXRpb24KLSAgICB7Ci0gICAgICAgIGludCBzSW5kZXg7ICAvLyBTdHJpbmcgaW5kZXg7
Ci0gICAgICAgIGludCBjSW5kZXg7ICAvLyBDaGFyIGluZGV4LgotCi0gICAgICAgIExvY2F0aW9u
KCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KLSAgICB9OwotICAgIGNvbnN0IExvY2F0aW9u
JiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KLQotICBwcml2YXRlOgotICAg
IC8vIElucHV0LgotICAgIGludCBtQ291bnQ7Ci0gICAgY29uc3QgY2hhciogY29uc3QqIG1TdHJp
bmc7Ci0gICAgc3RkOjp2ZWN0b3I8aW50PiBtTGVuZ3RoOwotCi0gICAgTG9jYXRpb24gbVJlYWRM
b2M7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJP
Q0VTU09SX0lOUFVUX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggN2M2NjNlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkxleGVy
LmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1MZXhlcjo6fkxleGVyKCkKLXsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWI4NWNlYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0xFWEVSX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwotCi1u
YW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFRva2VuOwotCi1jbGFzcyBMZXhlcgotewotICBwdWJs
aWM6Ci0gICAgdmlydHVhbCB+TGV4ZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4q
IHRva2VuKSA9IDA7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlMzA4OC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1
ZGUgIk1hY3JvLmgiCi0KLSNpbmNsdWRlICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQot
Ym9vbCBNYWNybzo6ZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1
cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKLSAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIubmFt
ZSkgJiYKLSAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYKLSAg
ICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwotfQotCi19ICAv
LyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdlYzAxNDkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAorKysgL2Rldi9udWxs
CkBAIC0xLDQ0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9NQUNST19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8K
LQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFRva2VuOwotCi1zdHJ1Y3QgTWFjcm8KLXsKLSAg
ICBlbnVtIFR5cGUKLSAgICB7Ci0gICAgICAgIGtUeXBlT2JqLAotICAgICAgICBrVHlwZUZ1bmMK
LSAgICB9OwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7
Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gUmVwbGFjZW1lbnRzOwotCi0gICAgTWFj
cm8oKSA6IHByZWRlZmluZWQoZmFsc2UpLCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmop
IHsgfQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBi
b29sIHByZWRlZmluZWQ7Ci0gICAgbXV0YWJsZSBib29sIGRpc2FibGVkOwotCi0gICAgVHlwZSB0
eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwot
ICAgIFJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7Ci19OwotCi10eXBlZGVmIHN0ZDo6bWFwPHN0
ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9TZXQ7Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZl
NWE3YWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NjggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxzc3Ry
ZWFtPgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi1u
YW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgVG9rZW5MZXhlciA6IHB1YmxpYyBMZXhlcgotewotIHB1
YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBUb2tlblZlY3RvcjsKLQotICAg
IFRva2VuTGV4ZXIoVG9rZW5WZWN0b3IqIHRva2VucykKLSAgICB7Ci0gICAgICAgIHRva2Vucy0+
c3dhcChtVG9rZW5zKTsKLSAgICAgICAgbUl0ZXIgPSBtVG9rZW5zLmJlZ2luKCk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCi0gICAgewotICAgICAgICBpZiAo
bUl0ZXIgPT0gbVRva2Vucy5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdG9rZW4tPnJl
c2V0KCk7Ci0gICAgICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpMQVNUOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgKnRva2VuID0gKm1JdGVyKys7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUb2tlbkxleGVyKTsKLQotICAgIFRva2VuVmVjdG9yIG1Ub2tlbnM7Ci0gICAgVG9r
ZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1JdGVyOwotfTsKLQotTWFjcm9FeHBhbmRlcjo6TWFj
cm9FeHBhbmRlcihMZXhlciogbGV4ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvU2V0KiBtYWNyb1NldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAgICBtTWFjcm9TZXQobWFj
cm9TZXQpLAotICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsKLX0KLQotTWFjcm9FeHBh
bmRlcjo6fk1hY3JvRXhwYW5kZXIoKQotewotICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0
eSgpKSBwb3BNYWNybygpOwotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9r
ZW4pCi17Ci0gICAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgICBnZXRUb2tlbih0b2tlbik7
Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHRva2VuLT5leHBhbnNpb25EaXNhYmxlZCgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0g
bU1hY3JvU2V0LT5lbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNvbnN0IE1h
Y3JvJiBtYWNybyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgaWYgKG1hY3JvLmRpc2FibGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBhIHBhcnRpY3VsYXIgdG9rZW4gaXMgbm90IGV4
cGFuZGVkLCBpdCBpcyBuZXZlciBleHBhbmRlZC4KLSAgICAgICAgICAgIHRva2VuLT5zZXRFeHBh
bnNpb25EaXNhYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICgobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5jKSAmJiAhaXNOZXh0VG9rZW5M
ZWZ0UGFyZW4oKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgdGhlIHRva2VuIGltbWVk
aWF0ZWx5IGFmdGVyIHRoZSBtYWNybyBuYW1lIGlzIG5vdCBhICcoJywKLSAgICAgICAgICAgIC8v
IHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBiZSBleHBhbmRlZC4KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVzaE1hY3JvKG1hY3JvLCAqdG9rZW4pOwotICAgIH0KLX0K
LQotdm9pZCBNYWNyb0V4cGFuZGVyOjpnZXRUb2tlbihUb2tlbiogdG9rZW4pCi17Ci0gICAgaWYg
KG1SZXNlcnZlVG9rZW4uZ2V0KCkpCi0gICAgewotICAgICAgICAqdG9rZW4gPSAqbVJlc2VydmVU
b2tlbjsKLSAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRmlyc3QgcG9wIGFsbCBlbXB0eSBtYWNybyBjb250ZXh0cy4KLSAgICB3
aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSAmJiBtQ29udGV4dFN0YWNrLmJhY2soKS0+ZW1w
dHkoKSkKLSAgICB7Ci0gICAgICAgIHBvcE1hY3JvKCk7Ci0gICAgfQotCi0gICAgaWYgKCFtQ29u
dGV4dFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAgICAqdG9rZW4gPSBtQ29udGV4dFN0YWNr
LmJhY2soKS0+Z2V0KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1MZXhlci0+
bGV4KHRva2VuKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6dW5nZXRUb2tlbihj
b25zdCBUb2tlbiYgdG9rZW4pCi17Ci0gICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCi0g
ICAgewotICAgICAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2so
KTsKLSAgICAgICAgY29udGV4dC0+dW5nZXQoKTsKLSAgICAgICAgYXNzZXJ0KGNvbnRleHQtPnJl
cGxhY2VtZW50c1tjb250ZXh0LT5pbmRleF0gPT0gdG9rZW4pOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBhc3NlcnQoIW1SZXNlcnZlVG9rZW4uZ2V0KCkpOwotICAgICAgICBtUmVz
ZXJ2ZVRva2VuLnJlc2V0KG5ldyBUb2tlbih0b2tlbikpOwotICAgIH0KLX0KLQotYm9vbCBNYWNy
b0V4cGFuZGVyOjppc05leHRUb2tlbkxlZnRQYXJlbigpCi17Ci0gICAgVG9rZW4gdG9rZW47Ci0g
ICAgZ2V0VG9rZW4oJnRva2VuKTsKLQotICAgIGJvb2wgbHBhcmVuID0gdG9rZW4udHlwZSA9PSAn
KCc7Ci0gICAgdW5nZXRUb2tlbih0b2tlbik7Ci0KLSAgICByZXR1cm4gbHBhcmVuOwotfQotCi1i
b29sIE1hY3JvRXhwYW5kZXI6OnB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRv
a2VuJiBpZGVudGlmaWVyKQotewotICAgIGFzc2VydCghbWFjcm8uZGlzYWJsZWQpOwotICAgIGFz
c2VydCghaWRlbnRpZmllci5leHBhbnNpb25EaXNhYmxlZCgpKTsKLSAgICBhc3NlcnQoaWRlbnRp
Zmllci50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKLSAgICBhc3NlcnQoaWRlbnRpZmllci52
YWx1ZSA9PSBtYWNyby5uYW1lKTsKLQotICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVu
dHM7Ci0gICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZv
ciBleHBhbnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCi0gICAgbWFjcm8u
ZGlzYWJsZWQgPSB0cnVlOwotCi0gICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3Jv
Q29udGV4dDsKLSAgICBjb250ZXh0LT5tYWNybyA9ICZtYWNybzsKLSAgICBjb250ZXh0LT5yZXBs
YWNlbWVudHMuc3dhcChyZXBsYWNlbWVudHMpOwotICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNr
KGNvbnRleHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OnBv
cE1hY3JvKCkKLXsKLSAgICBhc3NlcnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7Ci0KLSAgICBN
YWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKLSAgICBtQ29udGV4
dFN0YWNrLnBvcF9iYWNrKCk7Ci0KLSAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7Ci0gICAg
YXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7Ci0gICAgY29udGV4dC0+bWFjcm8tPmRp
c2FibGVkID0gZmFsc2U7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci19Ci0KLWJvb2wgTWFjcm9FeHBh
bmRlcjo6ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCi17Ci0gICAg
cmVwbGFjZW1lbnRzLT5jbGVhcigpOwotICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlw
ZU9iaikKLSAgICB7Ci0gICAgICAgIHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2Vt
ZW50cy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNl
bWVudHMuZW5kKCkpOwotCi0gICAgICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18i
OwotICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9f
IjsKLQotICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOwotICAg
ICAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmZyb250KCk7Ci0gICAgICAgICAg
ICBpZiAobWFjcm8ubmFtZSA9PSBrTGluZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlk
ZW50aWZpZXIubG9jYXRpb24ubGluZTsKLSAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3Ry
ZWFtLnN0cigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFt
ZSA9PSBrRmlsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRp
b24uZmlsZTsKLSAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGFz
c2VydChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpOwotICAgICAgICBzdGQ6OnZlY3Rv
cjxNYWNyb0FyZz4gYXJnczsKLSAgICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMu
c2l6ZSgpKTsKLSAgICAgICAgaWYgKCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVy
LCAmYXJncykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmVwbGFjZU1h
Y3JvUGFyYW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVudHMpOwotICAgIH0KLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVwbGFjZW1lbnRzLT5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAg
ICAgIFRva2VuJiByZXBsID0gcmVwbGFjZW1lbnRzLT5hdChpKTsKLSAgICAgICAgaWYgKGkgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSByZXBs
YWNlbWVudCBsaXN0IGluaGVyaXRzIHRoZSBwYWRkaW5nCi0gICAgICAgICAgICAvLyBwcm9wZXJ0
aWVzIG9mIHRoZSBpZGVudGlmaWVyIHRva2VuLgotICAgICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0
T2ZMaW5lKGlkZW50aWZpZXIuYXRTdGFydE9mTGluZSgpKTsKLSAgICAgICAgICAgIHJlcGwuc2V0
SGFzTGVhZGluZ1NwYWNlKGlkZW50aWZpZXIuaGFzTGVhZGluZ1NwYWNlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIHJlcGwubG9jYXRpb24gPSBpZGVudGlmaWVyLmxvY2F0aW9uOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9Bcmdz
KGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4qIGFyZ3MpCi17Ci0gICAgVG9rZW4gdG9rZW47
Ci0gICAgZ2V0VG9rZW4oJnRva2VuKTsKLSAgICBhc3NlcnQodG9rZW4udHlwZSA9PSAnKCcpOwot
Ci0gICAgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOwotICAgIGZvciAoaW50IG9wZW5QYXJl
bnMgPSAxOyBvcGVuUGFyZW5zICE9IDA7ICkKLSAgICB7Ci0gICAgICAgIGdldFRva2VuKCZ0b2tl
bik7Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRF
Uk1JTkFURURfSU5WT0NBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOwotICAgICAgICAgICAgLy8gRG8g
bm90IGxvc2UgRU9GIHRva2VuLgotICAgICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzQXJnID0g
ZmFsc2U7IC8vIFRydWUgaWYgdG9rZW4gaXMgcGFydCBvZiB0aGUgY3VycmVudCBhcmd1bWVudC4K
LSAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAn
KCc6Ci0gICAgICAgICAgICArK29wZW5QYXJlbnM7Ci0gICAgICAgICAgICBpc0FyZyA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICcpJzoKLSAgICAgICAgICAgIC0t
b3BlblBhcmVuczsKLSAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAwOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnLCc6Ci0gICAgICAgICAgICAvLyBUaGUgaW5k
aXZpZHVhbCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBjb21tYSB0b2tlbnMsIGJ1dAotICAg
ICAgICAgICAgLy8gdGhlIGNvbW1hIHRva2VucyBiZXR3ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVu
dGhlc2VzIGRvIG5vdAotICAgICAgICAgICAgLy8gc2VwZXJhdGUgYXJndW1lbnRzLgotICAgICAg
ICAgICAgaWYgKG9wZW5QYXJlbnMgPT0gMSkgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOwot
ICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDE7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaXNBcmcgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQXJnKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YmFjaygpOwotICAgICAgICAgICAgLy8gSW5p
dGlhbCB3aGl0ZXNwYWNlIGlzIG5vdCBwYXJ0IG9mIHRoZSBhcmd1bWVudC4KLSAgICAgICAgICAg
IGlmIChhcmcuZW1wdHkoKSkgdG9rZW4uc2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKLSAgICAg
ICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29u
c3QgTWFjcm86OlBhcmFtZXRlcnMmIHBhcmFtcyA9IG1hY3JvLnBhcmFtZXRlcnM7Ci0gICAgLy8g
SWYgdGhlcmUgaXMgb25seSBvbmUgZW1wdHkgYXJndW1lbnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8g
bm8gYXJndW1lbnQuCi0gICAgaWYgKHBhcmFtcy5lbXB0eSgpICYmIChhcmdzLT5zaXplKCkgPT0g
MSkgJiYgYXJncy0+ZnJvbnQoKS5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgYXJncy0+Y2xlYXIo
KTsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCi0gICAg
aWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJhbXMuc2l6ZSgpKQotICAgIHsKLSAgICAgICAgRGlhZ25v
c3RpY3M6OklEIGlkID0gYXJncy0+c2l6ZSgpIDwgbWFjcm8ucGFyYW1ldGVycy5zaXplKCkgPwot
ICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19GRVdfQVJHUyA6Ci0gICAgICAgICAg
ICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX01BTllfQVJHUzsKLSAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3Vt
ZW50IGJlZm9yZSBzdWJzdGl0dXRpb24uCi0gICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBh
cmd1bWVudCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkgYXJlCi0gICAgLy8gaW5zZXJ0ZWQgaW50
byB0aGUgbWFjcm8gYm9keS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3MtPnNpemUo
KTsgKytpKQotICAgIHsKLSAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmF0KGkpOwotICAg
ICAgICBUb2tlbkxleGVyIGxleGVyKCZhcmcpOwotICAgICAgICBNYWNyb0V4cGFuZGVyIGV4cGFu
ZGVyKCZsZXhlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwotCi0gICAgICAgIGFyZy5jbGVh
cigpOwotICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKLSAgICAgICAgd2hpbGUgKHRva2Vu
LnR5cGUgIT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFyZy5wdXNoX2Jh
Y2sodG9rZW4pOwotICAgICAgICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFj
ZU1hY3JvUGFyYW1zKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVw
bGFjZW1lbnRzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1l
bnRzLnNpemUoKTsgKytpKQotICAgIHsKLSAgICAgICAgY29uc3QgVG9rZW4mIHJlcGwgPSBtYWNy
by5yZXBsYWNlbWVudHNbaV07Ci0gICAgICAgIGlmIChyZXBsLnR5cGUgIT0gVG9rZW46OklERU5U
SUZJRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJl
cGwpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUT0RP
KGFsb2twKTogT3B0aW1pemUgdGhpcy4KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBz
ZWFyY2ggZm9yIG1hY3JvIHBhcmFtcyBldmVyeSB0aW1lLgotICAgICAgICAvLyBUaGUgcGFyYW0g
aW5kZXggY2FuIGJlIGNhY2hlZCB3aXRoIHRoZSByZXBsYWNlbWVudCB0b2tlbi4KLSAgICAgICAg
TWFjcm86OlBhcmFtZXRlcnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdGQ6OmZpbmQoCi0gICAg
ICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLmJlZ2luKCksIG1hY3JvLnBhcmFtZXRlcnMuZW5kKCks
IHJlcGwudmFsdWUpOwotICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGlBcmcg
PSBzdGQ6OmRpc3RhbmNlKG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgaXRlcik7Ci0gICAgICAg
IGNvbnN0IE1hY3JvQXJnJiBhcmcgPSBhcmdzW2lBcmddOwotICAgICAgICBpZiAoYXJnLmVtcHR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IHNpemVfdCBpUmVwbCA9IHJlcGxhY2VtZW50cy0+c2l6ZSgpOwotICAgICAgICByZXBsYWNlbWVu
dHMtPmluc2VydChyZXBsYWNlbWVudHMtPmVuZCgpLCBhcmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsK
LSAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IHRva2VuIGluaGVyaXRzIHBhZGRpbmcgcHJvcGVy
dGllcyBmcm9tCi0gICAgICAgIC8vIG1hY3JvIHJlcGxhY2VtZW50IHRva2VuLgotICAgICAgICBy
ZXBsYWNlbWVudHMtPmF0KGlSZXBsKS5zZXRIYXNMZWFkaW5nU3BhY2UocmVwbC5oYXNMZWFkaW5n
U3BhY2UoKSk7Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0NTA0ZWJhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9NQUNST19FWFBBTkRFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9f
RVhQQU5ERVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNp
bmNsdWRlICJMZXhlci5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMu
aCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBNYWNy
b0V4cGFuZGVyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBNYWNyb0V4cGFuZGVy
KExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpOwotICAgIHZpcnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBs
ZXgoVG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihNYWNyb0V4cGFuZGVyKTsKLQotICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2Vu
KTsKLSAgICB2b2lkIHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKLSAgICBib29sIGlz
TmV4dFRva2VuTGVmdFBhcmVuKCk7Ci0KLSAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYg
bWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKTsKLSAgICB2b2lkIHBvcE1hY3JvKCk7Ci0K
LSAgICBib29sIGV4cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbj4gTWFjcm9Bcmc7Ci0gICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3Jv
JiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJn
cyk7Ci0gICAgdm9pZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJn
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxh
Y2VtZW50cyk7Ci0KLSAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0Ci0gICAgewotICAgICAgICBjb25z
dCBNYWNybyogbWFjcm87Ci0gICAgICAgIHNpemVfdCBpbmRleDsKLSAgICAgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKLQotICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3Jv
KDApLCBpbmRleCgwKSB7IH0KLSAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4ID09IHJlcGxhY2VtZW50cy5zaXplKCk7IH0KLSAgICAgICAgY29uc3QgVG9rZW4mIGdldCgp
IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tpbmRleCsrXTsgfQotICAgICAgICB2b2lkIHVuZ2V0KCkg
eyAtLWluZGV4OyB9Ci0gICAgfTsKLQotICAgIExleGVyKiBtTGV4ZXI7Ci0gICAgTWFjcm9TZXQq
IG1NYWNyb1NldDsKLSAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOwotCi0gICAgc3RkOjph
dXRvX3B0cjxUb2tlbj4gbVJlc2VydmVUb2tlbjsKLSAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRl
eHQqPiBtQ29udGV4dFN0YWNrOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjE5MDFmYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTE0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiUHJlcHJvY2Vzc29yLmgi
Ci0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJE
aWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgotI2luY2x1ZGUgIk1h
Y3JvLmgiCi0jaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0j
aW5jbHVkZSAiVG9rZW5pemVyLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgUHJlcHJv
Y2Vzc29ySW1wbAotewotICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKLSAgICBNYWNyb1Nl
dCBtYWNyb1NldDsKLSAgICBUb2tlbml6ZXIgdG9rZW5pemVyOwotICAgIERpcmVjdGl2ZVBhcnNl
ciBkaXJlY3RpdmVQYXJzZXI7Ci0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyOwotCi0g
ICAgUHJlcHJvY2Vzc29ySW1wbChEaWFnbm9zdGljcyogZGlhZywKLSAgICAgICAgICAgICAgICAg
ICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKLSAgICAgICAgZGlhZ25v
c3RpY3MoZGlhZyksCi0gICAgICAgIHRva2VuaXplcihkaWFnKSwKLSAgICAgICAgZGlyZWN0aXZl
UGFyc2VyKCZ0b2tlbml6ZXIsICZtYWNyb1NldCwgZGlhZywgZGlyZWN0aXZlSGFuZGxlciksCi0g
ICAgICAgIG1hY3JvRXhwYW5kZXIoJmRpcmVjdGl2ZVBhcnNlciwgJm1hY3JvU2V0LCBkaWFnKQot
ICAgIHsKLSAgICB9Ci19OwotCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcihEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKQotewotICAgIG1JbXBsID0gbmV3IFByZXByb2Nlc3Nvcklt
cGwoZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpOwotfQotCi1QcmVwcm9jZXNzb3I6On5Q
cmVwcm9jZXNzb3IoKQotewotICAgIGRlbGV0ZSBtSW1wbDsKLX0KLQotYm9vbCBQcmVwcm9jZXNz
b3I6OmluaXQoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3Ro
W10pCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBrR0xTTFZlcnNpb24gPSAxMDA7Ci0KLSAgICAv
LyBBZGQgc3RhbmRhcmQgcHJlLWRlZmluZWQgbWFjcm9zLgotICAgIHByZWRlZmluZU1hY3JvKCJf
X0xJTkVfXyIsIDApOwotICAgIHByZWRlZmluZU1hY3JvKCJfX0ZJTEVfXyIsIDApOwotICAgIHBy
ZWRlZmluZU1hY3JvKCJfX1ZFUlNJT05fXyIsIGtHTFNMVmVyc2lvbik7Ci0gICAgcHJlZGVmaW5l
TWFjcm8oIkdMX0VTIiwgMSk7Ci0KLSAgICByZXR1cm4gbUltcGwtPnRva2VuaXplci5pbml0KGNv
dW50LCBzdHJpbmcsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVN
YWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpzdHJpbmdzdHJl
YW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCB2YWx1ZTsKLQotICAgIFRva2VuIHRva2VuOwotICAg
IHRva2VuLnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOwotICAgIHRva2VuLnZhbHVlID0gc3RyZWFt
LnN0cigpOwotCi0gICAgTWFjcm8gbWFjcm87Ci0gICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7
Ci0gICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKLSAgICBtYWNyby5uYW1lID0gbmFt
ZTsKLSAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsKLQotICAgIG1JbXBs
LT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwotfQotCi12b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRv
a2VuKiB0b2tlbikKLXsKLSAgICBib29sIHZhbGlkVG9rZW4gPSBmYWxzZTsKLSAgICB3aGlsZSAo
IXZhbGlkVG9rZW4pCi0gICAgewotICAgICAgICBtSW1wbC0+bWFjcm9FeHBhbmRlci5sZXgodG9r
ZW4pOwotICAgICAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG5vdCBiZSByZXR1cm5pbmcgaW50ZXJuYWwgcHJlcHJvY2Vzc2luZyB0b2tl
bnMuCi0gICAgICAgICAgLy8gQ29udmVydCBwcmVwcm9jZXNzaW5nIHRva2VucyB0byBjb21waWxl
ciB0b2tlbnMgb3IgcmVwb3J0Ci0gICAgICAgICAgLy8gZGlhZ25vc3RpY3MuCi0gICAgICAgICAg
Y2FzZSBUb2tlbjo6UFBfSEFTSDoKLSAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRva2VuOjpQUF9OVU1CRVI6Ci0gICAgICAgICAg
ICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9OVU1CRVIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRva2Vu
OjpQUF9PVEhFUjoKLSAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3Bh
Y2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWZlMzViMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXwotCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQotbmFt
ZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotY2xhc3MgRGlyZWN0aXZlSGFuZGxl
cjsKLXN0cnVjdCBQcmVwcm9jZXNzb3JJbXBsOwotc3RydWN0IFRva2VuOwotCi1jbGFzcyBQcmVw
cm9jZXNzb3IKLXsKLSAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwotICAgIH5QcmVw
cm9jZXNzb3IoKTsKLQotICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVt
ZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgotICAgIC8vIHN0cmluZzogc3Bl
Y2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCi0gICAgLy8gbGVuZ3RoOiBz
cGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCi0gICAgLy8gSWYgbGVuZ3RoIGlz
IE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgotICAg
IC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFu
IGFycmF5IGNvbnRhaW5pbmcKLSAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhl
IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgotICAgIC8vIEVhY2ggZWxlbWVudCBp
biB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCi0gICAgLy8g
Y29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0
aGF0IHRoZSBzdHJpbmcKLSAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0gICAgYm9vbCBpbml0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7Ci0gICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgotICAgIHZvaWQgcHJlZGVmaW5l
TWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLQotICAgIHZvaWQgbGV4KFRva2Vu
KiB0b2tlbik7Ci0KLSAgcHJpdmF0ZToKLSAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UHJlcHJvY2Vzc29yKTsKLQotICAgIFByZXByb2Nlc3NvckltcGwqIG1JbXBsOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9D
RVNTT1JfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ODI2MTMuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KLSNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwotCi1uYW1lc3BhY2UgcHAK
LXsKLQotc3RydWN0IFNvdXJjZUxvY2F0aW9uCi17Ci0gICAgU291cmNlTG9jYXRpb24oKSA6IGZp
bGUoMCksIGxpbmUoMCkgeyB9Ci0gICAgU291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZp
bGUoZiksIGxpbmUobCkgeyB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlv
biYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmls
ZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7Ci0gICAgfQotCi0gICAgaW50IGZpbGU7Ci0gICAg
aW50IGxpbmU7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCi17Ci0gICAgcmV0dXJuIGxocy5l
cXVhbHMocmhzKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQotewotICAgIHJldHVybiAhbGhz
LmVxdWFscyhyaHMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjAzODBjLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiVG9rZW4uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLXZvaWQgVG9rZW46OnJl
c2V0KCkKLXsKLSAgICB0eXBlID0gMDsKLSAgICBmbGFncyA9IDA7Ci0gICAgbG9jYXRpb24gPSBT
b3VyY2VMb2NhdGlvbigpOwotICAgIHZhbHVlLmNsZWFyKCk7Ci19Ci0KLWJvb2wgVG9rZW46OmVx
dWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICh0eXBlID09IG90
aGVyLnR5cGUpICYmCi0gICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKLSAgICAg
ICAgICAgKGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgotICAgICAgICAgICAodmFsdWUg
PT0gb3RoZXIudmFsdWUpOwotfQotCi12b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wg
c3RhcnQpCi17Ci0gICAgaWYgKHN0YXJ0KQotICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9M
SU5FOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7Ci19Ci0K
LXZvaWQgVG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKQotewotICAgIGlmIChz
cGFjZSkKLSAgICAgICAgZmxhZ3MgfD0gSEFTX0xFQURJTkdfU1BBQ0U7Ci0gICAgZWxzZQotICAg
ICAgICBmbGFncyAmPSB+SEFTX0xFQURJTkdfU1BBQ0U7Ci19Ci0KLXZvaWQgVG9rZW46OnNldEV4
cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSkKLXsKLSAgICBpZiAoZGlzYWJsZSkKLSAgICAg
ICAgZmxhZ3MgfD0gRVhQQU5TSU9OX0RJU0FCTEVEOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3Mg
Jj0gfkVYUEFOU0lPTl9ESVNBQkxFRDsKLX0KLQotc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0
ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4pCi17Ci0gICAgaWYgKHRva2VuLmhh
c0xlYWRpbmdTcGFjZSgpKQotICAgICAgICBvdXQgPDwgIiAiOwotCi0gICAgb3V0IDw8IHRva2Vu
LnZhbHVlOwotICAgIHJldHVybiBvdXQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzEwMjEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLSNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCi0KLSNpbmNsdWRlIDxvc3RyZWFtPgot
I2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCi0KLW5hbWVz
cGFjZSBwcAotewotCi1zdHJ1Y3QgVG9rZW4KLXsKLSAgICBlbnVtIFR5cGUKLSAgICB7Ci0gICAg
ICAgIExBU1QgPSAwLCAgLy8gRU9GLgotCi0gICAgICAgIElERU5USUZJRVIgPSAyNTgsCi0KLSAg
ICAgICAgQ09OU1RfSU5ULAotICAgICAgICBDT05TVF9GTE9BVCwKLQotICAgICAgICBPUF9JTkMs
Ci0gICAgICAgIE9QX0RFQywKLSAgICAgICAgT1BfTEVGVCwKLSAgICAgICAgT1BfUklHSFQsCi0g
ICAgICAgIE9QX0xFLAotICAgICAgICBPUF9HRSwKLSAgICAgICAgT1BfRVEsCi0gICAgICAgIE9Q
X05FLAotICAgICAgICBPUF9BTkQsCi0gICAgICAgIE9QX1hPUiwKLSAgICAgICAgT1BfT1IsCi0g
ICAgICAgIE9QX0FERF9BU1NJR04sCi0gICAgICAgIE9QX1NVQl9BU1NJR04sCi0gICAgICAgIE9Q
X01VTF9BU1NJR04sCi0gICAgICAgIE9QX0RJVl9BU1NJR04sCi0gICAgICAgIE9QX01PRF9BU1NJ
R04sCi0gICAgICAgIE9QX0xFRlRfQVNTSUdOLAotICAgICAgICBPUF9SSUdIVF9BU1NJR04sCi0g
ICAgICAgIE9QX0FORF9BU1NJR04sCi0gICAgICAgIE9QX1hPUl9BU1NJR04sCi0gICAgICAgIE9Q
X09SX0FTU0lHTiwKLQotICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgotICAg
ICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFs
bHkuCi0gICAgICAgIC8vIFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBj
aGVjayBmb3IgdGhlbS4KLSAgICAgICAgUFBfSEFTSCwKLSAgICAgICAgUFBfTlVNQkVSLAotICAg
ICAgICBQUF9PVEhFUgotICAgIH07Ci0gICAgZW51bSBGbGFncwotICAgIHsKLSAgICAgICAgQVRf
U1RBUlRfT0ZfTElORSAgID0gMSA8PCAwLAotICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAx
IDw8IDEsCi0gICAgICAgIEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgotICAgIH07Ci0KLSAg
ICBUb2tlbigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKLQotICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgotICAgIC8vIEl0IGRp
c3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICBib29sIGF0U3RhcnRPZkxpbmUo
KSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9Ci0gICAg
dm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOwotCi0gICAgYm9vbCBoYXNMZWFkaW5n
U3BhY2UoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsg
fQotICAgIHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOwotCi0gICAgYm9vbCBl
eHBhbnNpb25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNB
QkxFRCkgIT0gMDsgfQotICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxl
KTsKLQotICAgIGludCB0eXBlOwotICAgIHVuc2lnbmVkIGludCBmbGFnczsKLSAgICBTb3VyY2VM
b2NhdGlvbiBsb2NhdGlvbjsKLSAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKLX07Ci0KLWlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKLXsKLSAg
ICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCi17Ci0gICAgcmV0dXJuICFsaHMuZXF1
YWxzKHJocyk7Ci19Ci0KLWV4dGVybiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3Ry
ZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbik7Ci0KLX0gIC8vIG5hbWVwc2FjZSBwcAotI2Vu
ZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbml6ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmMzZDFj
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQ0ICswLDAg
QEAKLSNsaW5lIDE2ICIuL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwiCi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi0KLQotCi0jbGluZSAxMyAiLi9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxl
eGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5F
UgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9S
X1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8q
IEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNp
ZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyog
ZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNk
ZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24t
Qzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVS
U0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8g
ZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAq
IGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAot
ICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01B
Q1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBm
bGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2
X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRl
ZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsK
LSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBp
bnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4
X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAv
KiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElO
VDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNp
Zm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0x
KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAg
ICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElO
VDhfTUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNk
ZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5U
MzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5k
aWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1
NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAg
ICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5U
MzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBG
TEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3Jh
Z2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0j
ZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCi0KLS8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBi
ZSBkZWZpbmVkIGFzIDEuICovCi0jaWYgZGVmaW5lZCAoX19TVERDX18pCi0KLSNkZWZpbmUgWVlf
VVNFX0NPTlNUCi0KLSNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZgkvKiAh
IF9fY3BsdXNwbHVzICovCi0KLSNpZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBj
b25zdAotI2Vsc2UKLSNkZWZpbmUgeXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24g
ZW5kLW9mLWZpbGUuICovCi0jZGVmaW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3Np
Ymx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50
ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5l
Z2F0aXZlLAotICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2ln
bmVkIGNoYXIsIGhlbmNlIHRoZQotICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0Nf
VE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFx
dWUgcG9pbnRlci4gKi8KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYK
LQotLyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZh
ciBiZWxvdykKLSAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2Rl
ZmluZSB5eWluIHl5Zy0+eXlpbl9yCi0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmlu
ZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0j
ZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5
Zy0+eXlfZmxleF9kZWJ1Z19yCi0KLS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBt
YWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0
aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICog
ZGVmaW5pdGlvbiBvZiBCRUdJTi4KLSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0g
MSArIDIgKgotCi0vKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZh
bHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRo
ZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHku
Ci0gKi8KLSNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmlu
ZSBZWVNUQVRFIFlZX1NUQVJUCi0KLS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEg
Z2l2ZW4gc3RhcnQgc3RhdGUuICovCi0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VO
RF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0
YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVz
dGFydCh5eWluICx5eXNjYW5uZXIgKQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAw
Ci0KLS8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9T
SVpFCi0jZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1
ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGlu
IHRoZSBtYWluIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlf
QlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQot
dHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYK
LQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJ
WkVfVAotdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FD
VF9DT05USU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5l
IEVPQl9BQ1RfTEFTVF9NQVRDSCAyCi0KLSAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCi0g
ICAgCi0vKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBi
YWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAot
CQl7IFwKLQkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAg
ICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5P
KHl5bGVzc19tYWNyb19hcmcpO1wKLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJ
WVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0JCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0g
eXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLQkJWVlfRE9fQkVGT1JF
X0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0JCX0gXAotCXdoaWxlICggMCAp
Ci0KLSNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2Fu
bmVyICkKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NU
UlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAq
eXlfaW5wdXRfZmlsZTsKLQotCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwot
CWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAq
LwotCi0JLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9v
bSBmb3IgRU9CCi0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7
Ci0KLQkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5j
bHVkaW5nIEVPQgotCSAqIGNoYXJhY3RlcnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X25fY2hhcnM7
Ci0KLQkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNy
ZWF0ZWQgaXQsCi0JICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3Vs
ZCBmcmVlKCkgaXQgdG8KLQkgKiBkZWxldGUgaXQuCi0JICovCi0JaW50IHl5X2lzX291cl9idWZm
ZXI7Ci0KLQkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7
IGlmIHNvLCBhbmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ug
d2FudCB0byB1c2UgZ2V0YygpCi0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUg
d2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotCSAqIGVhY2ggbmV3bGluZS4KLQkgKi8KLQlp
bnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8g
YmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0JICogSWYgc28sICdeJyBydWxlcyB3aWxs
IGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0JICogbm90LgotCSAqLwot
CWludCB5eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNv
dW50LiAqLwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8K
LSAgICAKLQkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3
ZSByZWFjaCB0aGUKLQkgKiBlbmQgb2YgaXQuCi0JICovCi0JaW50IHl5X2ZpbGxfYnVmZmVyOwot
Ci0JaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVm
aW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0
aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0JICogdGhlbiB3ZSBtYXJrIHRoZSBi
dWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLQkgKiBzaG91bGRu
J3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQK
LQkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1
c2Ugb2YKLQkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotCSAqCi0JICogV2hlbiB3ZSBhY3R1YWxs
eSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHBw
cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLQkg
KiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLQkgKi8KLSNkZWZpbmUg
WVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKLQotCX07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9C
VUZGRVJfU1RBVEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZm
ZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1
ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0g
KiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZ
X0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cF0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJl
dmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFj
ayBpcyBub3QKLSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFs
IHVzZSBvbmx5LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5
X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0
IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNo
X3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNp
emUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVm
ZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0
YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNo
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5
X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRl
cyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZv
aWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12
b2lkIHBwZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9u
ZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUo
aXNfaW50ZXJhY3RpdmUpIFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAot
ICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5l
IHl5X3NldF9ib2woYXRfYm9sKSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7
XAotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLQl9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkg
KFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNl
Y3QzICovCi0KLSNkZWZpbmUgcHB3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQot
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5
cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlw
ZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRl
ICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0
IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBj
dXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVz
cG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZP
UkVfQUNUSU9OIFwKLQl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXpl
X3QpICh5eV9jcCAtIHl5X2JwKTsgXAotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0J
Knl5X2NwID0gJ1wwJzsgXAotCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZ
X05VTV9SVUxFUyAzNwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4Ci0vKiBUaGlzIHN0cnVj
dCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5l
Y2Vzc2FyeS4gKi8KLXN0cnVjdCB5eV90cmFuc19pbmZvCi0JewotCWZsZXhfaW50MzJfdCB5eV92
ZXJpZnk7Ci0JZmxleF9pbnQzMl90IHl5X254dDsKLQl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs4NF0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgIDM4LCAgIDM2LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAotICAgICAgICA3LCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAotICAg
ICAgICA5LCAgIDMzLCAgIDMzLCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAg
ICA1LAotICAgICAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1
LCAgIDEyLCAgIDIzLAotICAgICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAg
IDEwLCAgICA5LCAgIDExLCAgIDExLAotICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2
LCAgIDE4LCAgIDE3LCAgIDE1LCAgICA4LCAgIDMxLAotICAgICAgIDIxLCAgIDMyLCAgIDIyLCAg
ICAzLCAgICA1LCAgICA2LCAgIDExLCAgIDEwLCAgIDExLCAgICAxLAotICAgICAgIDEwLCAgIDEx
LCAgICAwLCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAotICAgICAg
IDEwLCAgIDEwLCAgICAwCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKLSAgICAgICAgMiwgICAgMiwgICAgNCwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAg
OSwKLSAgICAgICAgOSwgICAxMCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwg
ICAxNiwgICAxNiwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAx
NywgICAgOSwgICAgOSwgICAxOCwKLSAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwg
ICAyMSwgICAyMSwgICAyMSwgICAyMiwgICAyMSwKLSAgICAgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKLSAgICAgICAg
OSwgICAgMSwgICAgOSwgICAyNSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwK
LQotICAgICAgIDIyLCAgIDIxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDI0LAotICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAg
ICA5LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0K
LSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMywKLSAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwg
ICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YmFzZVs4OV0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4
LCAgMTU5LCAgMTUwLCAgMTU5LCAgMTQ1LCAgMTI4LAotICAgICAgMTU5LCAgMTEyLCAgIDIzLCAg
MTU5LCAgMTExLCAgIDIxLCAgIDI1LCAgIDMwLCAgIDI5LCAgIDM2LAotICAgICAgIDQ2LCAgIDM2
LCAgMTAwLCAgIDQ1LCAgICAwLCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAotICAgICAg
IDY1LCAgIDczLCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5
LAotICAgICAgMTU5LCAgMTU5LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAg
IDU2LCAgIDgzLAotICAgICAgIDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5
LCAgIDE5LCAgICAwLCAgMTU5LAotICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAg
MTU5LCAgIDk4LCAgICAwLCAgMTEwLCAgICAwLAotICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkw
LCAgIDgwLCAgMTU5LCAgMTU5LCAgMTAxLCAgIDk3LCAgMTEyLAotICAgICAgMTIwLCAgMTIzLCAg
MTU5LCAgMTQwLCAgIDI4LCAgMTQ1LCAgMTUwLCAgMTUyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbODldID0KLSAgICB7ICAgMCwKLSAgICAgICA4MywgICAg
MSwgICA4NCwgICA4NCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywKLSAgICAgICAyMCwgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4Niwg
ICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4Nywg
ICA4MywgICA4MywgICAyMCwgICAyMCwgICA0NywKLSAgICAgICA1MCwgICA4OCwgICAyMSwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywKLSAgICAgICA4MywgICA4Mywg
ICA4MywgICA4NiwgICA4MywgICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKLSAgICAgICA0
NywgICA1MCwgICA4MywgICA1MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwK
LSAgICAgICA4MywgICA4MywgICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MwotICAg
IH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQotICAgIHsg
ICAwLAotICAgICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEz
LCAgIDE0LCAgIDE1LAotICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAg
IDIxLCAgIDIyLCAgIDIzLCAgIDI0LAotICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2
LCAgIDI3LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMwLAotICAgICAgIDM2LCAgIDM5LCAgIDU5LCAg
IDMxLCAgIDYwLCAgIDMxLCAgIDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAotICAgICAgIDYxLCAgIDM3
LCAgIDQ1LCAgIDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAotICAgICAg
IDQ4LCAgIDQ4LCAgIDQ5LCAgIDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUy
LAotICAgICAgIDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAg
IDgxLCAgIDUwLAotICAgICAgIDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4
LCAgIDY4LCAgIDY2LCAgIDUwLAotICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAg
IDUwLCAgIDY1LCAgIDcxLCAgIDcxLCAgIDcxLAotICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUw
LCAgIDcyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAotCi0gICAgICAgODMsICAgODMs
ICAgNTAsICAgNTAsICAgNTAsICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCi0gICAgICAg
NzQsICAgNzQsICAgNjcsICAgNjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcs
Ci0gICAgICAgNzgsICAgNzgsICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAg
NzgsICAgMzgsCi0gICAgICAgMzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEs
ICAgODIsICAgODIsICAgODIsCi0gICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAg
NjQsICAgMzQsICAgMzMsICAgNjQsICAgNjQsCi0gICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAs
ICAgNzAsICAgNzUsICAgNzUsICAgODMsICAgIDUsICAgODMsCi0gICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0g
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2Noa1sxODZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywg
ICAgNCwgICAgNCwKLSAgICAgICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAx
NywgICA1OCwgICAxOSwgICAxNiwKLSAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwg
ICAxOCwgICAxOCwgICAxOSwgICAyMCwgICA1NCwKLSAgICAgICAyMCwgICAyMCwgICAyMCwgICAy
MiwgICAyMiwgICA0OCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKLSAgICAgICAyMSwgICAyMSwg
ICAyMSwgICAyNCwgICAyNCwgICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKLSAgICAgICA0
OSwgICA0OSwgICAyNywgICA0MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwK
LSAgICAgICA1MiwgICA0MywgICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0
NywgICA0NywKLSAgICAgICA1MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0Nywg
ICA1MCwgICA1MCwgICA1MCwKLQotICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAg
IDUxLCAgIDUxLCAgIDc5LCAgIDc5LCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3
LCAgIDY3LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDIzLCAgIDY3LAotICAgICAgIDY5LCAgIDY5LCAg
IDgwLCAgIDgwLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAotICAgICAgIDEy
LCAgIDcyLCAgIDcyLCAgIDcyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAot
ICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2
LCAgIDg2LAotICAgICAgIDg3LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAg
ICA1LCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzCi0gICAgfSA7Ci0KLS8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5p
dGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxl
eCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0
ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmlu
ZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLS8qCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0
aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklM
RSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0jaW5jbHVk
ZSAiVG9rZW5pemVyLmgiCi0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIlRv
a2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRv
LWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KLSNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgotI2VuZGlmCi0KLXR5cGVkZWYgc3RkOjpz
dHJpbmcgWVlTVFlQRTsKLXR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7Ci0KLS8v
IFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykg
bnVtYmVyLgotI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgotCi0jZGVmaW5lIFlZX1VTRVJfSU5J
VCAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IGZhbHNlOyBcCi0gICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAg
ICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5M
b2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKLSAgICAgICAgd2hpbGUgKChzY2Fu
TG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRl
eCkpKSBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1
dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAotICAgICAgICAgICAgKyt5eWZpbGVu
bzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHNjYW5Mb2MtPmNJbmRl
eCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdo
aWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAg
cmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOwotCi0jZGVmaW5lIElO
SVRJQUwgMAotI2RlZmluZSBDT01NRU5UIDEKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpU
b2tlbml6ZXI6OkNvbnRleHQqCi0KLS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJl
ZW50cmFudCBzY2FubmVyLiAqLwotc3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNl
ci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXll
eHRyYV9yOwotCi0gICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRl
Y2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9y
LCAqeXlvdXRfcjsKLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBv
ZiB0b3Agb2Ygc3RhY2suICovCi0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwg
Y2FwYWNpdHkgb2Ygc3RhY2suICovCi0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0
YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwot
ICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOwotICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKLSAgICBj
aGFyICp5eV9jX2J1Zl9wOwotICAgIGludCB5eV9pbml0OwotICAgIGludCB5eV9zdGFydDsKLSAg
ICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOwotICAgIGludCB5eV9zdGFydF9zdGFj
a19wdHI7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOwotICAgIGludCAqeXlfc3RhcnRf
c3RhY2s7Ci0gICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBj
aGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCi0gICAgaW50IHl5bGluZW5vX3I7Ci0gICAg
aW50IHl5X2ZsZXhfZGVidWdfcjsKLQotICAgIGNoYXIgKnl5dGV4dF9yOwotICAgIGludCB5eV9t
b3JlX2ZsYWc7Ci0gICAgaW50IHl5X21vcmVfbGVuOwotCi0gICAgWVlTVFlQRSAqIHl5bHZhbF9y
OwotCi0gICAgWVlMVFlQRSAqIHl5bGxvY19yOwotCi0gICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1
dHNfdCAqLwotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLSAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZ
UEUgYXJlIGluY2x1ZGVkCi0gICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiov
Ci0gICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKLSAgICAKLSAgICAjICAgIGRl
ZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgotICAgIAotaW50IHBwbGV4X2luaXQgKHl5c2Nhbl90
KiBzY2FubmVyKTsKLQotaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9k
ZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKLQotLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9i
YWxzLgotICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJz
IGZvciBjb252ZW5pZW5jZS4gKi8KLQotaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotCi1pbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lk
IHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZ
X0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBw
c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLUZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNl
dF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdl
dF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X291dCAgKEZJTEUgKiBv
dXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQoteXlfc2l6ZV90IHBwZ2V0X2xlbmcgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi1jaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQg
cHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1Z
WVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRf
bHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAg
ICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAg
ICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLSAgICAKLS8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUg
b3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQot
I2lmbmRlZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGlu
dCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLWV4dGVybiBpbnQgcHB3cmFw
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgeXl0ZXh0
X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICos
aW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxF
Tgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5
c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1
c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQot
c3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLQotI2VuZGlm
Ci0KLS8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNp
Zm5kZWYgWVlfUkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNl
bmRpZgotCi0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3Rh
bmRhcmQgb3V0cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1
dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5v
dyB1c2UgZndyaXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5n
LCAxLCB5eW91dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8g
ImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0
dXJuZWQgaW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5Q
VVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9pc19pbnRlcmFjdGl2ZSApIFwKLQkJeyBcCi0JCWludCBjID0gJyonOyBcCi0JCXl5X3Np
emVfdCBuOyBcCi0JCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAotCQkJICAgICAoYyA9
IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAotCQkJYnVmW25dID0g
KGNoYXIpIGM7IFwKLQkJaWYgKCBjID09ICdcbicgKSBcCi0JCQlidWZbbisrXSA9IChjaGFyKSBj
OyBcCi0JCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0JCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJcmVzdWx0ID0gbjsg
XAotCQl9IFwKLQllbHNlIFwKLQkJeyBcCi0JCWVycm5vPTA7IFwKLQkJd2hpbGUgKCAocmVzdWx0
ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAot
CQkJeyBcCi0JCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKLQkJCQl7IFwKLQkJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJCQlicmVhazsgXAot
CQkJCX0gXAotCQkJZXJybm89MDsgXAotCQkJY2xlYXJlcnIoeXlpbik7IFwKLQkJCX0gXAotCQl9
XAotXAotCi0jZW5kaWYKLQotLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3Qg
dXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFu
IGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAq
IHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMu
Ci0gKi8KLSNpZm5kZWYgeXl0ZXJtaW5hdGUKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4g
WVlfTlVMTAotI2VuZGlmCi0KLS8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNv
bmRpdGlvbiBzdGFjayBncm93cy4gKi8KLSNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2Rl
ZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwg
ZXJyb3IuICovCi0jaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9S
KG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQg
dGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBE
ZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhl
IHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVD
TAotI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQotCi1leHRlcm4gaW50IHBwbGV4IFwKLSAgICAg
ICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAotICAg
ICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFy
YW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29k
ZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFu
ZCB5eWxlbmcKLSAqIGhhdmUgYmVlbiBzZXQgdXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJ
T04KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KLSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0
IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLwotI2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9C
UkVBSyBicmVhazsKLSNlbmRpZgotCi0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotCVlZX1VTRVJf
QUNUSU9OCi0KLS8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRo
ZSB3b3JrLgotICovCi1ZWV9ERUNMCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0JcmVnaXN0ZXIgaW50
IHl5X2FjdDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLSAgICAvKiBMaW5lIGNvbW1lbnQgKi8KLQotICAgIHl5bHZhbCA9IHl5bHZh
bF9wYXJhbTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLQotCWlmICggIXl5Zy0+eXlf
aW5pdCApCi0JCXsKLQkJeXlnLT55eV9pbml0ID0gMTsKLQotI2lmZGVmIFlZX1VTRVJfSU5JVAot
CQlZWV9VU0VSX0lOSVQ7Ci0jZW5kaWYKLQotCQlpZiAoICEgeXlnLT55eV9zdGFydCApCi0JCQl5
eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotCQlpZiAoICEgeXlp
biApCi0JCQl5eWluID0gc3RkaW47Ci0KLQkJaWYgKCAhIHl5b3V0ICkKLQkJCXl5b3V0ID0gc3Rk
b3V0OwotCi0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLQkJCXBwZW5zdXJlX2J1ZmZl
cl9zdGFjayAoeXlzY2FubmVyKTsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0JCQkJ
cHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotCQl9Ci0KLQkJ
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0JCX0KLQotCXdoaWxlICggMSApCQkv
KiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCi0JCXsKLQkJeXlfY3AgPSB5
eWctPnl5X2NfYnVmX3A7Ci0KLQkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0JCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0JCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24g
aW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotCQkgKiB0aGUgY3VycmVudCBydW4uCi0JCSAq
LwotCQl5eV9icCA9IHl5X2NwOwotCi0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0
OwoteXlfbWF0Y2g6Ci0JCWRvCi0JCQl7Ci0JCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9l
Y1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLQkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdICkKLQkJCQl7Ci0JCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJl
bnRfc3RhdGU7Ci0JCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCQkJ
fQotCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9
IHl5X2N1cnJlbnRfc3RhdGUgKQotCQkJCXsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkg
eXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4
NCApCi0JCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJCX0KLQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJKyt5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jdXJy
ZW50X3N0YXRlICE9IDgzICk7Ci0JCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
OwotCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQot
eXlfZmluZF9hY3Rpb246Ci0JCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsK
LQotCQlZWV9ET19CRUZPUkVfQUNUSU9OOwotCi1kb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMg
dXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotCQlzd2l0Y2ggKCB5eV9hY3Qg
KQotCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLQkJCWNhc2UgMDogLyogbXVz
dCBiYWNrIHVwICovCi0JCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04gKi8KLQkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQkJeXlfY3AgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0JCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLQkJCWdvdG8geXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZ
X1JVTEVfU0VUVVAKLQotCVlZX0JSRUFLCi0vKiBCbG9jayBjb21tZW50ICovCi0vKiBMaW5lIGJy
ZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLwotLyogVGhlIGNvbW1lbnQg
aXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAotY2FzZSAyOgotWVlfUlVMRV9TRVRV
UAoteyBCRUdJTihDT01NRU5UKTsgfQotCVlZX0JSRUFLCi1jYXNlIDM6Ci1ZWV9SVUxFX1NFVFVQ
Ci0KLQlZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAotCi0JWVlfQlJFQUsKLWNhc2Ug
NToKLS8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17ICsreXlsaW5l
bm87IH0KLQlZWV9CUkVBSwotY2FzZSA2OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IHRydWU7Ci0gICAgQkVHSU4oSU5JVElBTCk7Ci19Ci0JWVlfQlJFQUsK
LWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3Rh
cnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCi0gICAgeXlsdmFsLT5hc3Np
Z24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4geXlleHRyYS0+bGluZVN0YXJ0ID8gcHA6OlRv
a2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKLX0KLQlZWV9CUkVBSwotY2FzZSA4
OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwotfQotCVlZX0JSRUFLCi1jYXNlIDk6
Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwot
ICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxMDoK
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Ci19Ci0JWVlfQlJFQUsKLS8qIEFueXRo
aW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1i
ZXIuICovCi0vKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMu
ICovCi1jYXNlIDExOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Ci19Ci0JWVlfQlJF
QUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKLX0KLQlZWV9CUkVBSwot
Y2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOwotfQotCVlZX0JSRUFLCi1jYXNl
IDE0OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOwotfQotCVlZX0JSRUFLCi1jYXNlIDE1
OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxNjoK
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9S
VUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0dFOwotfQotCVlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9T
RVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9FUTsKLX0KLQlZWV9CUkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VUVVAK
LXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTkU7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0FORDsKLX0KLQlZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
WE9SOwotfQotCVlZX0JSRUFLCi1jYXNlIDIyOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsK
LX0KLQlZWV9CUkVBSwotY2FzZSAyMzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lH
TjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNDoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FT
U0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVM
X0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
RElWX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTU9EX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyODoKLVlZX1JVTEVfU0VUVVAKLXsK
LSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfTEVGVF9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjk6Ci1ZWV9SVUxFX1NFVFVQ
Ci17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMDoKLVlZX1JVTEVf
U0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMToKLVlZX1JV
TEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMjoKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDMzOgot
WVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Ci0gICAg
cmV0dXJuIHl5dGV4dFswXTsKLX0KLQlZWV9CUkVBSwotY2FzZSAzNDoKLVlZX1JVTEVfU0VUVVAK
LXsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQotCVlZX0JSRUFLCi1jYXNlIDM1Ogot
LyogcnVsZSAzNSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxp
bmVubzsKLSAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0K
LQlZWV9CUkVBSwotY2FzZSAzNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2ln
bigxLCB5eXRleHRbMF0pOwotICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOwotfQotCVlZ
X0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLWNhc2UgWVlfU1RBVEVfRU9GKENP
TU1FTlQpOgotewotICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5k
bGluZyBFT0YuCi0gICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5
LgotICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7Ci0gICAgcHA6OklucHV0
OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOwotICAgIGludCBzSW5kZXhN
YXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOwotICAgIGlmIChzY2FuTG9jLT5z
SW5kZXggIT0gc0luZGV4TWF4KQotICAgIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2gg
aGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKLSAgICAgICAgLy8gZW5kIG9m
IHRoZSBpbnB1dC4KLSAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9j
LT5jSW5kZXggPSAwOwotICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAx
OwotICAgIH0KLSAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKLSAgICB5eWxsb2MtPmxpbmUg
PSB5eWxpbmVubzsKLSAgICB5eWx2YWwtPmNsZWFyKCk7Ci0KLSAgICBpZiAoWVlfU1RBUlQgPT0g
Q09NTUVOVCkKLSAgICB7Ci0gICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7Ci0gICAgfQotICAgIHl5dGVybWlu
YXRlKCk7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMzc6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotCVlZ
X0JSRUFLCi0KLQljYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0JCXsKLQkJLyogQW1vdW50IG9mIHRl
eHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLQkJaW50IHl5X2Ftb3Vu
dF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
LQotCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0JCSp5
eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0K
LQkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlf
QlVGRkVSX05FVyApCi0JCQl7Ci0JCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlu
cHV0IHNvdXJjZS4gIEl0J3MKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNh
dXNlIHRoZSB1c2VyCi0JCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5k
IGNhbGxlZAotCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0J
CQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLQkJCSAq
IGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotCQkJ
ICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLQkJCSAq
IGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0JCQkg
Ki8KLQkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFyczsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47
Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZG
RVJfTk9STUFMOwotCQkJfQotCi0JCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2Nf
YnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KLQkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUg
YnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLQkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5j
cmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBt
YWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLQkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSku
ICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLQkJICogaW4gaW5wdXQoKS4KLQkJICovCi0J
CWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LwotCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0JCQl5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0JCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJ
LyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0JCQkgKiB0cmFu
c2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkg
Z28gYWhlYWQgYW5kIGRvIGl0Ci0JCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cg
aG93IHRvIGRlYWwKLQkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3
ZSBkb24ndAotCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVu
IGl0Ci0JCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0JCQkgKi8KLQotCQkJeXlfbmV4dF9z
dGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwot
Ci0JCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0JCQlpZiAoIHl5
X25leHRfc3RhdGUgKQotCQkJCXsKLQkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCi0JCQkJeXlf
Y3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9z
dGF0ZTsKLQkJCQlnb3RvIHl5X21hdGNoOwotCQkJCX0KLQotCQkJZWxzZQotCQkJCXsKLQkJCQl5
eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9u
OwotCQkJCX0KLQkJCX0KLQotCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlz
Y2FubmVyICkgKQotCQkJewotCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCXsKLQkJ
CQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLQkJCQlpZiAoIHBwd3Jh
cCh5eXNjYW5uZXIgKSApCi0JCQkJCXsKLQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtl
biBjYXJlIGluCi0JCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0J
CQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKLQkJCQkJICogeXlfY19idWZfcCBzbyB0
aGF0IGlmIHNvbWUgdG90YWwKLQkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRz
IHRvCi0JCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotCQkJCQkg
KiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotCQkJCQkgKiBZWV9OVUxMIHdp
bGwgZ2V0IHJldHVybmVkLgotCQkJCQkgKi8KLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZ
X1NUQVJUKTsKLQkJCQkJZ290byBkb19hY3Rpb247Ci0JCQkJCX0KLQotCQkJCWVsc2UKLQkJCQkJ
ewotCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJCQkJ
WVlfTkVXX0ZJTEU7Ci0JCQkJCX0KLQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgRU9CX0FD
VF9DT05USU5VRV9TQ0FOOgotCQkJCXl5Zy0+eXlfY19idWZfcCA9Ci0JCQkJCXl5Zy0+eXl0ZXh0
X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLQkJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwotCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7
Ci0JCQkJZ290byB5eV9tYXRjaDsKLQotCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJ
eXlnLT55eV9jX2J1Zl9wID0KLQkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzXTsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7
Ci0JCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOwotCQkJfQotCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJWVlfRkFU
QUxfRVJST1IoCi0JCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rp
b24gZm91bmQiICk7Ci0JfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQl9IC8qIGVuZCBv
ZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dl
dF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVy
bnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1RfTUFUQ0gg
LQotICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJy
ZW50IHBvc2l0aW9uCi0gKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwot
c3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0J
cmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
OwotCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLQlyZWdpc3RlciBp
bnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0JaW50IHJldF92YWw7Ci0KLQlpZiAoIHl5Zy0+eXlfY19i
dWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnMgKyAxXSApCi0JCVlZX0ZBVEFMX0VSUk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVy
bmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0cnkgdG8g
ZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLQkJaWYgKCB5eWctPnl5X2Nf
YnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsKLQkJCS8q
IFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICogdHJlYXQg
dGhpcyBhcyBhIGZpbmFsIEVPRi4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJ
TEU7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJp
b3IgdG8gdGhlIEVPQiwgZmlyc3QKLQkJCSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXJldHVy
biBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0JCQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFkIG1vcmUg
ZGF0YS4gKi8KLQotCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIu
ICovCi0JbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRl
eHRfcHRyKSAtIDE7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQot
CQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0JCS8qIGRv
bid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0J
CSAqIGp1c3QgZm9yY2UgYW4gRU9GCi0JCSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0JZWxzZQotCQl7Ci0JCQl5eV9z
aXplX3QgbnVtX3RvX3JlYWQgPQotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
c2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAg
KQotCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0K
LQkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJ
WVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5X2NfYnVm
X3Bfb2Zmc2V0ID0KLQkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsK
LQotCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLQkJCQl7Ci0JCQkJeXlfc2l6ZV90IG5l
d19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0JCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkK
LQkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotCQkJCWVsc2UKLQkJ
CQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0J
CQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0JCQkJCXBwcmVhbGxv
Yygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsK
LQkJCQl9Ci0JCQllbHNlCi0JCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAq
LwotCQkJCWItPnl5X2NoX2J1ZiA9IDA7Ci0KLQkJCWlmICggISBiLT55eV9jaF9idWYgKQotCQkJ
CVlZX0ZBVEFMX0VSUk9SKAotCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVy
IG92ZXJmbG93IiApOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2Nf
YnVmX3Bfb2Zmc2V0XTsKLQotCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0KLQkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKLQotCQkJfQotCi0J
CWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLQkJCW51bV90b19yZWFkID0g
WVlfUkVBRF9CVUZfU0laRTsKLQotCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLQkJWVlfSU5Q
VVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVd
KSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKLQotCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCWlmICgg
eXlnLT55eV9uX2NoYXJzID09IDAgKQotCQl7Ci0JCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlf
TU9SRV9BREogKQotCQkJewotCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQlw
cHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJcmV0
X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9Ci0JCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJfQotCQl9
Ci0KLQllbHNlCi0JCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlpZiAoKHl5
X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1
MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLQkJeXlfc2l6ZV90IG5ld19z
aXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJz
ID4+IDEpOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICop
IHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zixu
ZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZiApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKLQl9Ci0KLQl5eWctPnl5X25fY2hhcnMgKz0gbnVt
YmVyX3RvX21vdmU7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKLQotCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZlswXTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNf
c3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hl
ZCAqLwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eWctPnl5X3N0YXJ0OwotCi0JZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JF
X0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotCQl7Ci0JCXJlZ2lzdGVy
IFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEp
OwotCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCQl7Ci0JCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCXl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQkJfQotCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCQl7Ci0J
CQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJ
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKLQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWdu
ZWQgaW50KSB5eV9jXTsKLQkJCX0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQotCXJldHVy
biB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1h
a2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICogc3lub3BzaXMKLSAq
CW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAg
ICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5
eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCB5
eV9pc19qYW07Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlv
bnMuICovCi0JcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLQlyZWdp
c3RlciBZWV9DSEFSIHl5X2MgPSAxOwotCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKLQkJewotCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKLQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCX0KLQl3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCi0JCXsKLQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKLQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQl9Ci0JeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlf
aXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOwotCi0JcmV0dXJuIHl5X2lzX2phbSA/
IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRp
ZgotCi17Ci0JaW50IGM7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotCi0JaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0J
CXsKLQkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0
byByZXR1cm4uCi0JCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVy
cywgdGhlbiBpdCdzIGEKLQkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRo
ZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLQkJICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJ
LyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7
Ci0KLQkJZWxzZQotCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCXl5X3NpemVfdCBvZmZz
ZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0JCQkrK3l5Zy0+eXlfY19i
dWZfcDsKLQotCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0J
CQkJewotCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCQkvKiBUaGlzIGhhcHBlbnMg
YmVjYXVzZSB5eV9nX25fYigpCi0JCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBh
Ci0JCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLQkJCQkJICogdHJ5IG1h
dGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLQkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5w
dXQoKSwKLQkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLQkJCQkJICog
U28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0JCQkJCSAqIHRvIEVPQl9BQ1RfRU5E
X09GX0ZJTEUuCi0JCQkJCSAqLwotCi0JCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0J
CQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIpOwotCi0JCQkJCS8qRkFMTFRIUk9VR0gqLwot
Ci0JCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlmICggcHB3cmFw
KHl5c2Nhbm5lciApICkKLQkJCQkJCXJldHVybiAwOwotCi0JCQkJCWlmICggISB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0JCQkJCQlZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2Nw
bHVzcGx1cwotCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLQkJCQkJcmV0
dXJuIGlucHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQkJCQkJfQotCi0JCQkJY2FzZSBFT0JfQUNU
X0NPTlRJTlVFX1NDQU46Ci0JCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IG9mZnNldDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQljID0gKih1bnNpZ25l
ZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0J
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLwotCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJ
LyogaWZuZGVmIFlZX05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBk
aWZmZXJlbnQgaW5wdXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBz
dHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3Rl
IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJ
TklUSUFMIC4KLSAqLwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0g
ICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLQkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsKLQl9Ci0KLQlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBw
YXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0JLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5j
dGlvbiBib2R5Ci0JICogd2l0aAotCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJcHBw
dXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8KLQlwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVy
ICkKLQkJcmV0dXJuOwotCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1
c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBuZXdfYnVmZmVyOwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0J
LyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJp
bmcKLQkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlz
IGZsYWcKLQkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBp
dCdzIHNhZmUKLQkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQl5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xv
YWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQl5eWctPnl5X25fY2hh
cnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0JeXlnLT55eXRleHRf
cHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zOwotCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0J
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUg
YW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSBy
ZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXpl
IGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUuCi0gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAg
KEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVG
RkVSX1NUQVRFIGI7Ci0gICAgCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9m
KCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZl
cigpIiApOwotCi0JYi0+eXlfYnVmX3NpemUgPSBzaXplOwotCi0JLyogeXlfY2hfYnVmIGhhcyB0
byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotCSAq
IHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotCSAqLwotCWIt
Pnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5u
ZXIgKTsKLQlpZiAoICEgYi0+eXlfY2hfYnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDE7Ci0KLQlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLQly
ZXR1cm4gYjsKLX0KLQotLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVm
ZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIGIgKQot
CQlyZXR1cm47Ci0KLQlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBp
ZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZ
WV9CVUZGRVJfU1RBVEUpIDA7Ci0KLQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQlwcGZy
ZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKLQotCXBwZnJlZSgodm9pZCAq
KSBiICx5eXNjYW5uZXIgKTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBh
IGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4g
b25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgp
IG9yIGF0IEVPRi4KLSAqLwotICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVG
RkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotCWlu
dCBvZXJybm8gPSBlcnJubzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQot
CWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAg
IC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBf
cHJvYmFibHlfCi0gICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9n
ZXRfbmV4dF9idWZmZXIuCi0gICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJl
c2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJF
TlRfQlVGRkVSKXsKLSAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlf
YnNfY29sdW1uID0gMDsKLSAgICB9Ci0KLSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAw
OwotICAgIAotCWVycm5vID0gb2Vycm5vOwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQg
Y2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0g
KiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlf
Q1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCWlmICggISBiICkKLQkJcmV0dXJuOwotCi0JYi0+eXlfbl9j
aGFycyA9IDA7Ci0KLQkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0
ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwotCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1
ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4K
LQkgKi8KLQliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JYi0+eXlf
Y2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0JYi0+eXlfYnVmX3BvcyA9ICZi
LT55eV9jaF9idWZbMF07Ci0KLQliLT55eV9hdF9ib2wgPSAxOwotCWItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0JaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJ
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5l
dyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1
cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBp
ZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHB1c2hfYnVm
ZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0JaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JcHBlbnN1cmVf
YnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7Ci0KLQkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9t
IHBwX3N3aXRjaF90b19idWZmZXIuICovCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsK
LQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQkvKiBPbmx5IHB1c2gg
aWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KLQlpZiAoWVlfQ1VSUkVO
VF9CVUZGRVIpCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOwotCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0KLQkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9f
YnVmZmVyLiAqLwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCXl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0
ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVu
dCBiZWNvbWVzIHRoZSBuZXcgdG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICovCi12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLQlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotCQlyZXR1cm47Ci0KLQlwcF9kZWxldGVf
YnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwotCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IE5VTEw7Ci0JaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0JCS0t
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0J
CXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCQl5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiA9IDE7Ci0JfQotfQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0
IGRvZXMgbm90IGV4aXN0LgotICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBw
dXNoLgotICovCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLQl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCWlmICgheXlnLT55eV9i
dWZmZXJfc3RhY2spIHsKLQotCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxl
bWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZl
biBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBp
bW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLQkJbnVtX3Rv
X2FsbG9jID0gMTsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSoqKXBwYWxsb2MKLQkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJLCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9i
dWZmZXJfc3RhY2sgKQotCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0JCQkJCQkJCSAgCi0JCW1lbXNldCh5eWct
Pnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7Ci0JCQkJCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19h
bGxvYzsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLQkJcmV0dXJuOwotCX0KLQot
CWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCkgLSAxKXsKLQotCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9z
c2libGUgcHVzaC4gKi8KLQkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6
ZSAqLzsKLQotCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93
X3NpemU7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
KilwcHJlYWxsb2MKLQkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotCQkJCQkJCQludW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlz
Y2FubmVyKTsKLQkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwotCi0JCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0JCW1lbXNldCh5eWctPnl5X2J1
ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6
ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCA9IG51bV90b19hbGxvYzsKLQl9Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0
YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZm
ZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUg
dGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZm
ZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotCVlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJh
c2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0x
XSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSBy
b29tIGZvciB0aGUgRU9CJ3MuICovCi0JCXJldHVybiAwOwotCi0JYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OwotCWlmICggISBiICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKLQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8q
ICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9j
aF9idWYgPSBiYXNlOwotCWItPnl5X2lzX291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2Zp
bGUgPSAwOwotCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRl
cmFjdGl2ZSA9IDA7Ci0JYi0+eXlfYXRfYm9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7
Ci0JYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQlwcF9zd2l0Y2hfdG9f
YnVmZmVyKGIgLHl5c2Nhbm5lciApOwotCi0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUg
aW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBs
ZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5
eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0
IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVz
KCkgaW5zdGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0
IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLQlyZXR1cm4gcHBf
c2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0
dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5l
eHQgY2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0
ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBs
ZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0
ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4g
dGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJf
U1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAg
X3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBi
OwotCWNoYXIgKmJ1ZjsKLQl5eV9zaXplX3QgbiwgaTsKLSAgICAKLQkvKiBHZXQgbWVtb3J5IGZv
ciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLQlu
ID0gX3l5Ynl0ZXNfbGVuICsgMjsKLQlidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5l
ciApOwotCWlmICggISBidWYgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVz
X2xlbjsgKytpICkKLQkJYnVmW2ldID0geXlieXRlc1tpXTsKLQotCWJ1ZltfeXlieXRlc19sZW5d
ID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIgPSBw
cF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFM
X0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9r
YXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICog
YXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0JICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0K
LQlyZXR1cm4gYjsKLX0KLQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJ
VF9GQUlMVVJFIDIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25z
dCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCSh2b2lkKSBmcHJpbnRm
KCBzdGRlcnIsICIlc1xuIiwgbXNnICk7Ci0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0K
LS8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwot
Ci0jdW5kZWYgeXlsZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyog
VW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxl
c3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNy
b19hcmcpO1wKLQkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotCQl5eWct
Pnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCi0JCXl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAotCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsg
XAotCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0K
LS8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJl
cnMuICovCi0KLS8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIu
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFf
VFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5
ZXh0cmE7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwot
fQotCi0vKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0v
KiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHJldHVybiB5eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0
IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwoteXlfc2l6ZV90IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJl
bnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
Ci1jaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4g
eXl0ZXh0OwotfQotCi0vKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlz
IG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRo
ZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhU
UkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4
dHJhID0gdXNlcl9kZWZpbmVkIDsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJl
ci4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBp
ZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JV
RkZFUiApCi0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVf
bnVtYmVyOwotfQotCi0vKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5l
X251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZv
aWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0KLSAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4
aXN0cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5
eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlz
Y2FubmVyKTsgCi0gICAgCi0gICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQg
dGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBp
bnB1dCBidWZmZXIuCi0gKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19i
dWZmZXIKLSAqLwotdm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHl5aW4gPSBpbl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklM
RSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9z
dHIgOwotfQotCi1pbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHJldHVybiB5eV9mbGV4X2RlYnVnOwotfQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1
ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7
Ci19Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZ
U1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4g
eXlsdmFsOwotfQotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0K
LVlZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eWxsb2M7Ci19Ci0gICAgCi12b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3Bh
cmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07
Ci19Ci0gICAgCi0vKiBVc2VyLXZpc2libGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3Bl
Y2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICog
dGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVy
IGFzIHRoZSBsYXN0IGFyZ3VtZW50LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRs
ZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1p
bnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRy
X3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxs
b2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95
eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgfQotCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVn
cyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAg
IG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0K
LSAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8q
IHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5p
dCwgYnV0IGZvbGxvd3MgdGhlCi0gKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBh
cyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBv
aW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxs
IChhbmQKLSAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0
IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUg
aW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAq
IHRoZSB5eWV4dHJhIGZpZWxkLgotICovCi0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJB
X1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3Vz
ZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0g
TlVMTCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0JCi0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBz
dHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotCQotICAgIGlmICgqcHRyX3l5X2ds
b2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4g
MTsKLSAgICB9Ci0gICAgCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVn
cyBpbgotICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICov
Ci0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3Qp
KTsKLSAgICAKLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2Jh
bHMpOwotICAgIAotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMg
KTsKLX0KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVl
bnRyYW50IHNjYW5uZXIuCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxl
eF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWct
Pnl5X2J1ZmZlcl9zdGFjayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsK
LSAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9
IChjaGFyICopIDA7Ci0gICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0g
MDsKLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrX2RlcHRoID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8q
IERlZmluZWQgaW4gbWFpbi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRp
bjsKLSAgICB5eW91dCA9IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0g
ICAgeXlvdXQgPSAoRklMRSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVy
ZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICog
cHBsZXhfaW5pdCgpCi0gICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4X2Rlc3Ry
b3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwot
aW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9w
IHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdoaWxlKFlZ
X0NVUlJFTlRfQlVGRkVSKXsKLQkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAs
eXlzY2FubmVyICk7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JCXBwcG9w
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotCX0KLQotCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0
c2VsZi4gKi8KLQlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0JeXln
LT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29u
ZGl0aW9uIHN0YWNrLiAqLwotICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlz
Y2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyog
UmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBz
Y2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKLSAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlh
bGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KLSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7
Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwot
ICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5V
TEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVz
LgotICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5
IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotCXJlZ2lzdGVyIGludCBpOwotCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLQkJczFb
aV0gPSBzMltpXTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBp
bnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0JcmVnaXN0ZXIgaW50IG47Ci0JZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQot
CXJldHVybiBuOwotfQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7
Ci19Ci0KLXZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9s
bG93aW5nIGFjY29tbW9kYXRlcyBib3RoCi0JICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNo
YXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVy
aWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLQkgKiBiZWNhdXNlIGJvdGgg
QU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0JICogYW55IHBv
aW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwot
CSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotCSAqLwotCXJldHVybiAodm9pZCAq
KSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKLX0KLQotdm9pZCBwcGZyZWUgKHZvaWQg
KiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8q
IHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFC
TEVTX05BTUUgInl5dGFibGVzIgotCi1uYW1lc3BhY2UgcHAgewotCi1Ub2tlbml6ZXI6OlRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQotewotICAgIG1Db250
ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Ci19Ci0KLVRva2VuaXplcjo6flRva2VuaXpl
cigpCi17Ci0gICAgZGVzdHJveVNjYW5uZXIoKTsKLX0KLQotYm9vbCBUb2tlbml6ZXI6OmluaXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KQotewotICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKLSAgICBpZiAoKGNvdW50ID4g
MCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgbUNvbnRleHQuaW5wdXQg
PSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIHJldHVybiBpbml0U2Nhbm5lcigp
OwotfQotCi12b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKLXsKLSAgICAv
LyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KLSAgICAvLyBTZWUgbWFjcm8g
eXlmaWxlbm8uCi0gICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Ci19Ci0KLXZvaWQgVG9r
ZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQotewotICAgIHBwc2V0X2xpbmVubyhsaW5l
LG1IYW5kbGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKLXsKLSAg
ICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFu
ZGxlKTsKLSAgICB0b2tlbi0+ZmxhZ3MgPSAwOwotCi0gICAgdG9rZW4tPnNldEF0U3RhcnRPZkxp
bmUobUNvbnRleHQubGluZVN0YXJ0KTsKLSAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+
dHlwZSA9PSAnXG4nOwotCi0gICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5s
ZWFkaW5nU3BhY2UpOwotICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwotfQotCi1i
b29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQotewotICAgIGlmICgobUhhbmRsZSA9PSBOVUxM
KSAmJiBwcGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQotewotICAgIGlmIChtSGFuZGxl
ID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7
Ci0gICAgbUhhbmRsZSA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
NjRhMjg4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VO
SVpFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCi0KLSNp
bmNsdWRlICJJbnB1dC5oIgotI2luY2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMu
aCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBUb2tl
bml6ZXIgOiBwdWJsaWMgTGV4ZXIKLXsKLSAgcHVibGljOgotICAgIHN0cnVjdCBDb250ZXh0Ci0g
ICAgewotICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7Ci0KLSAgICAgICAgSW5wdXQg
aW5wdXQ7Ci0gICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBU
b2tlbiBsb2NhdGlvbiBzaG91bGQgdHJhY2sKLSAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9m
IElucHV0OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQotICAgICAg
ICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4K
LSAgICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7Ci0KLSAgICAgICAgYm9vbCBsZWFkaW5n
U3BhY2U7Ci0gICAgICAgIGJvb2wgbGluZVN0YXJ0OwotICAgIH07Ci0KLSAgICBUb2tlbml6ZXIo
RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKLSAgICB+VG9rZW5pemVyKCk7Ci0KLSAgICBib29s
IGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdKTsKLQotICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7Ci0gICAgdm9pZCBz
ZXRMaW5lTnVtYmVyKGludCBsaW5lKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRv
a2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tl
bml6ZXIpOwotICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lTY2FubmVy
KCk7Ci0KLSAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCi0gICAgQ29udGV4
dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCi19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAK
LSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
MDFjNzMyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICsw
LDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExl
eCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jv
c29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9E
SUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0q
LwotCi0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRl
ZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUg
IlRva2VuaXplci5oIgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tl
bi5oIgotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1n
ZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKLSNlbmRpZgotCi10eXBlZGVmIHN0ZDo6c3Ry
aW5nIFlZU1RZUEU7Ci10eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOwotCi0vLyBV
c2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51
bWJlci4KLSNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KLQotI2RlZmluZSBZWV9VU0VSX0lOSVQg
ICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5
eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWV4dHJhLT5sZWFkaW5n
U3BhY2UgPSBmYWxzZTsgXAotICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAg
XAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9j
ID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCi0gICAgICAgIHdoaWxlICgoc2Nhbkxv
Yy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgp
KSkgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQt
Pmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKLSAgICAgICAgICAgICsreXlmaWxlbm87
IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzY2FuTG9jLT5jSW5kZXgg
Kz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGls
ZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJl
c3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKLQotJX0KLQotJW9wdGlv
biBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHJlZW50cmFudCBi
aXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9u
IGV4dHJhLXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgotJXggQ09NTUVOVAotCi1ORVdM
SU5FICAgICBcbnxccnxcclxuCi1JREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCi1Q
VU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NPTlNUQU5U
ICAgICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVD
SU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAgICAgICAg
WzAtOV0KLUVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFDVElPTkFM
X0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0lJQotCi0g
ICAgLyogTGluZSBjb21tZW50ICovCi0iLy8iW15cclxuXSoKLQotICAgIC8qIEJsb2NrIGNvbW1l
bnQgKi8KLSAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVk
LiAqLwotICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAq
LyAKLSIvKiIgeyBCRUdJTihDT01NRU5UKTsgfQotPENPTU1FTlQ+W14qXHJcbl0rCi08Q09NTUVO
VD4iKiIKLTxDT01NRU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87IH0KLTxDT01NRU5UPiIqLyIg
ewotICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7Ci0gICAgQkVHSU4oSU5JVElBTCk7
Ci19Ci0KLSMgewotICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBw
cmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KLSAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OwotICAgIHJldHVybiB5eWV4dHJhLT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBw
cDo6VG9rZW46OlBQX09USEVSOwotfQotCi17SURFTlRJRklFUn0gewotICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwot
fQotCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09O
U1RBTlR9IHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6Q09OU1RfSU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7
RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwot
fQotCi0gICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJ
VH0gbXVzdCBiZSBhIG51bWJlci4gKi8KLSAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlk
IGludGVnZXJzIGFuZCBmbG9hdHMuICovCi0oe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntE
SUdJVH0rW19hLXpBLVowLTkuXSopIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOwotfQotCi0iKysiIHsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
SU5DOwotfQotIi0tIiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKLX0KLSI8PCIgewotICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOwotfQotIj4+
IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1JJR0hUOwotfQotIjw9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOwotfQotIj49IiB7Ci0gICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dF
OwotfQotIj09IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0VROwotfQotIiE9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOwotfQotIiYmIiB7Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0FORDsKLX0KLSJeXiIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Ci19Ci0ifHwiIHsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Ci19Ci0i
Kz0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfQUREX0FTU0lHTjsKLX0KLSItPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOwotfQot
Iio9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX01VTF9BU1NJR047Ci19Ci0iLz0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKLX0K
LSIlPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOwotfQotIjw8PSIgewotICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsK
LX0KLSI+Pj0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOwotfQotIiY9IiB7Ci0gICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJ
R047Ci19Ci0iXj0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKLX0KLSJ8PSIgewotICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJ
R047Ci19Ci0KLXtQVU5DVFVBVE9SfSB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBd
KTsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi1bIFx0XHZcZl0rICAgeyB5eWV4dHJhLT5s
ZWFkaW5nU3BhY2UgPSB0cnVlOyB9Ci0KLXtORVdMSU5FfSB7Ci0gICAgKyt5eWxpbmVubzsKLSAg
ICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0KLQotLiB7Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQ
UF9PVEhFUjsKLX0KLQotPCo+PDxFT0Y+PiB7Ci0gICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90
IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KLSAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBF
T0YgdG9rZW4gbWFudWFsbHkuCi0gICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1
dDsKLSAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7
Ci0gICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7Ci0g
ICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCi0gICAgewotICAgICAgICAvLyBX
ZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQot
ICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgotICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBz
SW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7Ci0gICAgICAgIHl5ZmlsZW5vID0gc0luZGV4
TWF4OyB5eWxpbmVubyA9IDE7Ci0gICAgfQotICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOwot
ICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOwotICAgIHl5bHZhbC0+Y2xlYXIoKTsKLQotICAg
IGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQotICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywg
eXlsaW5lbm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAg
ICB9Ci0gICAgeXl0ZXJtaW5hdGUoKTsKLX0KLQotJSUKLQotbmFtZXNwYWNlIHBwIHsKLQotVG9r
ZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkK
LXsKLSAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOwotfQotCi1Ub2tlbml6
ZXI6On5Ub2tlbml6ZXIoKQotewotICAgIGRlc3Ryb3lTY2FubmVyKCk7Ci19Ci0KLWJvb2wgVG9r
ZW5pemVyOjppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSkKLXsKLSAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKChjb3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKLQotICAgIG1D
b250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICByZXR1cm4g
aW5pdFNjYW5uZXIoKTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZp
bGUpCi17Ci0gICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCi0gICAg
Ly8gU2VlIG1hY3JvIHl5ZmlsZW5vLgotICAgIHl5c2V0X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsK
LX0KLQotdm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0gICAgeXlz
ZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6bGV4KFRva2Vu
KiB0b2tlbikKLXsKLSAgICB0b2tlbi0+dHlwZSA9IHl5bGV4KCZ0b2tlbi0+dmFsdWUsICZ0b2tl
bi0+bG9jYXRpb24sIG1IYW5kbGUpOwotICAgIHRva2VuLT5mbGFncyA9IDA7Ci0KLSAgICB0b2tl
bi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOwotICAgIG1Db250ZXh0Lmxp
bmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7Ci0KLSAgICB0b2tlbi0+c2V0SGFzTGVhZGlu
Z1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7Ci0gICAgbUNvbnRleHQubGVhZGluZ1NwYWNl
ID0gZmFsc2U7Ci19Ci0KLWJvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCi17Ci0gICAgaWYg
KChtSGFuZGxlID09IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRs
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkK
LXsKLSAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICB5eWxl
eF9kZXN0cm95KG1IYW5kbGUpOwotICAgIG1IYW5kbGUgPSBOVUxMOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNo
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlOWM3MGIxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVy
YXRlX3BhcnNlci5zaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMhL2Jpbi9iYXNo
Ci0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0KLSMgR2VuZXJhdGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nl
c3Nvci4KLQotcnVuX2ZsZXgoKQotewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQotb3V0cHV0
X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgotZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0Zmls
ZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1ydW5fYmlzb24oKQotewotaW5wdXRf
ZmlsZT0kc2NyaXB0X2Rpci8kMQotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgotYmlzb24g
LS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5w
dXRfZmlsZQotfQotCi1zY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKLQotIyBHZW5lcmF0ZSBwcmVw
cm9jZXNzb3IKLXJ1bl9mbGV4IFRva2VuaXplci5sIFRva2VuaXplci5jcHAKLXJ1bl9iaXNvbiBF
eHByZXNzaW9uUGFyc2VyLnkgRXhwcmVzc2lvblBhcnNlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxl
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L25ld19maWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFhNWZkOC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9uZXdfZmlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0gICAg
U29tZSBuZXcgY29kZSB0aGF0IHVzZXMgdGFicwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L25ld19maWxlMi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9uZXdfZmlsZTIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMGUxNmRmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlMi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1zb21lIG90aGVyIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91
dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzE2NGVhLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKLQotI2lmbmRl
ZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfUFBVVElMU19IXwotCi0vLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNv
bnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCi0vLyBUaGlzIG11c3QgYmUgdXNlZCBp
biB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgotI2RlZmluZSBQUF9ESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKLSAgVHlwZU5hbWUoY29uc3QgVHlwZU5h
bWUmKTsgICAgICAgICAgICAgICBcCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikK
LQotI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cmVwcm9jZXNzb3IudmNwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzZhOTc1OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCisrKyAv
ZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
IldpbmRvd3MtMTI1MiI/PgotPFZpc3VhbFN0dWRpb1Byb2plY3QKLQlQcm9qZWN0VHlwZT0iVmlz
dWFsIEMrKyIKLQlWZXJzaW9uPSI5LjAwIgotCU5hbWU9InByZXByb2Nlc3NvciIKLQlQcm9qZWN0
R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX0iCi0JUm9vdE5hbWVz
cGFjZT0icHJlcHJvY2Vzc29yIgotCUtleXdvcmQ9IldpbjMyUHJvaiIKLQlUYXJnZXRGcmFtZXdv
cmtWZXJzaW9uPSIxOTY2MTMiCi0JPgotCTxQbGF0Zm9ybXM+Ci0JCTxQbGF0Zm9ybQotCQkJTmFt
ZT0iV2luMzIiCi0JCS8+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0ieDY0IgotCQkvPgotCTwvUGxh
dGZvcm1zPgotCTxUb29sRmlsZXM+Ci0JPC9Ub29sRmlsZXM+Ci0JPENvbmZpZ3VyYXRpb25zPgot
CQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rv
cnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjQi
Ci0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVp
bGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgotCQkJCU1pbmltYWxS
ZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGli
cmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9
IjQiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0i
NCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmln
dXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChT
b2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9y
eT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKLQkJCUNo
YXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2Vi
U2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
TUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgot
CQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUi
Ci0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgotCQkJCVJ1
bnRpbWVMaWJyYXJ5PSIwIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgot
CQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlX
YXJuQXNFcnJvcj0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCURp
c2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
TGlicmFyaWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRU
b29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFt
ZT0iRGVidWd8eDY0IgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZv
cm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0i
JChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5
cGU9IjQiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1
aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRv
clRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdl
dEVudmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9
IldJTjMyO19ERUJVRztfTElCIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2lj
UnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21w
aWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJV2FybkFzRXJyb3I9InRy
dWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlEaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaWJy
YXJpYW5Ub29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
Ci0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJS
ZWxlYXNlfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3Jt
TmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQo
UGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBl
PSI0IgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIx
IgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIy
IgotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKLQkJCQlQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0J
CQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCi0JCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgot
CQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01h
bmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxp
bmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0J
CTwvQ29uZmlndXJhdGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwv
UmVmZXJlbmNlcz4KLQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyIK
LQkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCi0J
CQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZG
fSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3Rp
dmVIYW5kbGVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuY3BwIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmNwcCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhw
YW5kZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXFByZXByb2Nlc3Nvci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8
L0ZpbHRlcj4KLQkJPEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJo
O2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAt
ODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJz
ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxJ
bnB1dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XExleGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cTWFjcm8uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlxNYWNyb0V4cGFuZGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQk8L0ZpbGVzPgotCTxHbG9iYWxzPgotCTwv
R2xvYmFscz4KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19s
ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDQxMjVkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9udW1lcmljX2xleC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBu
dW1lcmljX2xleC5oOiBGdW5jdGlvbnMgdG8gZXh0cmFjdCBudW1lcmljIHZhbHVlcyBmcm9tIHN0
cmluZy4KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTlVNRVJJQ19MRVhfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX05VTUVSSUNfTEVYX0hfCisKKyNpbmNsdWRlIDxz
c3RyZWFtPgorCituYW1lc3BhY2UgcHAgeworCitpbmxpbmUgc3RkOjppb3M6OmZtdGZsYWdzIG51
bWVyaWNfYmFzZV9pbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBpZiAoKHN0ci5z
aXplKCkgPj0gMikgJiYKKyAgICAgICAgKHN0clswXSA9PSAnMCcpICYmCisgICAgICAgIChzdHJb
MV0gPT0gJ3gnIHx8IHN0clsxXSA9PSAnWCcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
aW9zOjpoZXg7CisgICAgfQorICAgIGVsc2UgaWYgKChzdHIuc2l6ZSgpID49IDEpICYmIChzdHJb
MF0gPT0gJzAnKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Omlvczo6b2N0OworICAgIH0K
KyAgICByZXR1cm4gc3RkOjppb3M6OmRlYzsKK30KKworLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlv
bnMgcGFyc2UgdGhlIGdpdmVuIHN0cmluZyB0byBleHRyYWN0IGEgbnVtZXJpY2FsCisvLyB2YWx1
ZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gVGhlc2UgZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBzdHJp
bmcgaXMKKy8vIG9mIHRoZSBjb3JyZWN0IGZvcm0uIFRoZXkgY2FuIG9ubHkgZmFpbCBpZiB0aGUg
cGFyc2VkIHZhbHVlIGlzIHRvbyBiaWcsCisvLyBpbiB3aGljaCBjYXNlIGZhbHNlIGlzIHJldHVy
bmVkLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPgorYm9vbCBudW1lcmljX2xleF9pbnQo
Y29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgSW50VHlwZSogdmFsdWUpCit7CisgICAgc3RkOjppc3Ry
aW5nc3RyZWFtIHN0cmVhbShzdHIpOworICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3Nh
cnksIGJ1dCBNU1ZTIGhhcyBhIGJ1Z2d5IGltcGxlbWVudGF0aW9uLgorICAgIC8vIEl0IHJldHVy
bnMgaW5jb3JyZWN0IHJlc3VsdHMgaWYgdGhlIGJhc2UgaXMgbm90IHNwZWNpZmllZC4KKyAgICBz
dHJlYW0uc2V0ZihudW1lcmljX2Jhc2VfaW50KHN0ciksIHN0ZDo6aW9zOjpiYXNlZmllbGQpOwor
CisgICAgc3RyZWFtID4+ICgqdmFsdWUpOworICAgIHJldHVybiAhc3RyZWFtLmZhaWwoKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgorYm9vbCBudW1lcmljX2xleF9mbG9hdChj
b25zdCBzdGQ6OnN0cmluZyYgc3RyLCBGbG9hdFR5cGUqIHZhbHVlKQoreworICAgIHN0ZDo6aXN0
cmluZ3N0cmVhbSBzdHJlYW0oc3RyKTsKKyAgICAvLyBGb3JjZSAiQyIgbG9jYWxlIHNvIHRoYXQg
ZGVjaW1hbCBjaGFyYWN0ZXIgaXMgYWx3YXlzICcuJywgYW5kCisgICAgLy8gbm90IGRlcGVuZGVu
dCBvbiB0aGUgY3VycmVudCBsb2NhbGUuCisgICAgc3RyZWFtLmltYnVlKHN0ZDo6bG9jYWxlOjpj
bGFzc2ljKCkpOworCisgICAgc3RyZWFtID4+ICgqdmFsdWUpOworICAgIHJldHVybiAhc3RyZWFt
LmZhaWwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgcHAuCisjZW5kaWYgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX05VTUVSSUNfTEVYX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjY3MzQyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIw
MDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBz
dXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRp
b24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2Fy
ZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3Qg
YWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWws
IG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhp
cyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1
c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdh
cmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFy
eQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNv
ZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwg
dGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFs
bCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0
aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1D
b3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQg
aW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBp
bXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAot
bGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91
ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElB
IFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBo
ZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlU
QVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1F
TlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9S
Ci1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJ
VEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxF
IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBS
T0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBB
UklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNB
VElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVS
IENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElG
Ci1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBCSVNPTl9QQVJTRVJfSAotIyBk
ZWZpbmUgQklTT05fUEFSU0VSX0gKLQotI2lmbmRlZiB5eXN0eXBlcHAKLXR5cGVkZWYgc3RydWN0
IHsKLSAgICBpbnQgICAgc2NfaW50OwotICAgIGZsb2F0ICBzY19mdmFsOwotICAgIGludCAgICBz
Y19pZGVudDsKLQljaGFyICAgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTisxXTsKLX0g
eXlzdHlwZXBwOwotCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0jIGRl
ZmluZQlDUFBfQU5EX09QCSAgICAgICAgMjU3Ci0jIGRlZmluZQlDUFBfU1VCX0FTU0lHTgkgICAg
MjU5Ci0jIGRlZmluZQlDUFBfTU9EX0FTU0lHTgkgICAgMjYwCi0jIGRlZmluZQlDUFBfQUREX0FT
U0lHTgkyNjEKLSMgZGVmaW5lCUNQUF9ESVZfQVNTSUdOCTI2MgotIyBkZWZpbmUJQ1BQX01VTF9B
U1NJR04JMjYzCi0jIGRlZmluZQlDUFBfRVFfT1AJICAgICAgICAyNjQKLSMgZGVmaW5lICAgIENQ
UF9YT1JfT1AgICAgICAgICAyNjUgCi0jIGRlZmluZQlFUlJPUl9TWQkgICAgMjY2Ci0jIGRlZmlu
ZQlDUFBfRkxPQVRDT05TVEFOVAkyNjcKLSMgZGVmaW5lCUNQUF9HRV9PUAkgICAgICAgIDI2OAot
IyBkZWZpbmUJQ1BQX1JJR0hUX09QICAgICAgICAyNjkKLSMgZGVmaW5lCUNQUF9JREVOVElGSUVS
CSAgICAyNzAKLSMgZGVmaW5lCUNQUF9JTlRDT05TVEFOVAkgICAgMjcxCi0jIGRlZmluZQlDUFBf
TEVfT1AJICAgICAgICAyNzIKLSMgZGVmaW5lCUNQUF9MRUZUX09QCSAgICAgICAgMjczCi0jIGRl
ZmluZQlDUFBfREVDX09QCTI3NAotIyBkZWZpbmUJQ1BQX05FX09QCSAgICAgICAgMjc1Ci0jIGRl
ZmluZQlDUFBfT1JfT1AJICAgICAgICAyNzYKLSMgZGVmaW5lCUNQUF9JTkNfT1AJICAgIDI3Nwot
IyBkZWZpbmUJQ1BQX1NUUkNPTlNUQU5UCSAgICAyNzgKLSMgZGVmaW5lCUNQUF9UWVBFSURFTlRJ
RklFUgkyNzkKLQotIyBkZWZpbmUJRklSU1RfVVNFUl9UT0tFTl9TWQkyODkKLQotIyBkZWZpbmUJ
Q1BQX1JJR0hUX0FTU0lHTgkgICAgMjgwCi0jIGRlZmluZQlDUFBfTEVGVF9BU1NJR04JICAgIDI4
MQotIyBkZWZpbmUJQ1BQX0FORF9BU1NJR04JMjgyCi0jIGRlZmluZQlDUFBfT1JfQVNTSUdOICAJ
MjgzCi0jIGRlZmluZQlDUFBfWE9SX0FTU0lHTgkyODQKLSMgZGVmaW5lCUNQUF9MRUZUX0JSQUNL
RVQJMjg1Ci0jIGRlZmluZQlDUFBfUklHSFRfQlJBQ0tFVAkyODYKLSMgZGVmaW5lCUNQUF9MRUZU
X0JSQUNFCTI4NwotIyBkZWZpbmUJQ1BQX1JJR0hUX0JSQUNFCTI4OAotCi0jZW5kaWYgLyogbm90
IEJJU09OX1BBUlNFUl9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNjRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaApAQCAt
MCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXBy
b2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElM
U19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1h
Y3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rp
b25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZv
ciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUp
IFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNTA1NmRhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMp
IDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEi
KSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxs
YXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0
d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBu
b3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBt
b2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1z
LCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29u
YWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4g
dGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0
byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29m
dHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJp
bmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElB
IFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJ
QSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGlu
IGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhl
ciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElB
Ci1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0
ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBv
ciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5v
dAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkg
eW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJ
RElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNl
ZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9O
IEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5H
RU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Us
IE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9O
IFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElB
QkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NU
IFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBP
UiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElG
SUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dF
VkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVO
IElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zbGdsb2JhbHMuaCIKLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKLWludCBJbml0Q1BQ
U3RydWN0KHZvaWQpOwotaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsKLWludCBJbml0
QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXplKTsKLWNoYXIqIEdldFN0cmlu
Z09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlODUzYy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
YworKysgL2Rldi9udWxsCkBAIC0xLDY5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
LUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJl
LgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIHNjYW5u
ZXIuYwotLy8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+
Ci0KLSNpZiAwCi0gICAgI2luY2x1ZGUgPGllZWVmcC5oPgotI2Vsc2UKLSAgICAjZGVmaW5lIGlz
aW5mZih4KSAoKCgqKGludCAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBMKSAmJiBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICgoKihpbnQgKikmKHgpICYgMHgwMDdmZmZmZkwpPT0w
MDAwMDAwMDAwTCkpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCi0KLXR5cGVkZWYgc3RydWN0
IFN0cmluZ0lucHV0U3JjIHsKLSAgICBJbnB1dFNyYyBiYXNlOwotICAgIGNoYXIgKnA7Ci19IFN0
cmluZ0lucHV0U3JjOwotCi1zdGF0aWMgaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMp
OwotCi1zdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppcywgeXlzdHlwZXBwICogeXlsdmFs
cHApCi17Ci0gICAgcmV0dXJuIEVPRjsKLX0gLy8gZW9mX3NjYW4KLQotc3RhdGljIHZvaWQgbm9v
cChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9Ci0KLXN0YXRp
YyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9v
cCwgMCwgMCB9OwotCi1zdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCk7Ci0KLSNkZWZpbmUgRU9MX1NZICdcbicKLQotI2lmIGRlZmluZWQoX01TQ19W
RVIpCi0gICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIF9fYXNtIGludCAzCi0jZWxpZiBkZWZp
bmVkKF9NX0FNRDY0KQotICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQoKSBhc3NlcnQoISJEYmdf
QnJlYWtwb2ludCIpOwotI2Vsc2UKLSAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkKLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX01fQU1ENjQpCi0gICAgX19p
bnQ2NCBSRFRTQyAoIHZvaWQgKSB7Ci0KLSAgICAgICAgX19pbnQ2NCB2OwotICAgIAotICAgICAg
ICBfX2FzbSBfX2VtaXQgMHgwZgotICAgICAgICBfX2FzbSBfX2VtaXQgMHgzMQotICAgICAgICBf
X2FzbSBtb3YgZHdvcmQgcHRyIHYsIGVheAotICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYr
NCwgZWR4Ci0gICAgCi0gICAgICAgIHJldHVybiB2OwotICAgIH0KLSNlbmRpZgotCi0KLWludCBJ
bml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCkKLXsKLSAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBu
ZWVkZWQgYnkgdGhlIENQUCBsaW5lIHNjYW5uZXI6Ci0gICAgaWYgKCFJbml0Q1BQKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgY3BwLT5tb3N0UmVjZW50VG9rZW4gPSAwOwotICAgIGNwcC0+
dG9rZW5Mb2MgPSAmY3BwLT5sdG9rZW5Mb2M7Ci0KLSAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0g
MDsKLSAgICBjcHAtPmx0b2tlbkxvYy5saW5lID0gMDsKLQotICAgIGNwcC0+Y3VycmVudElucHV0
ID0gJmVvZl9pbnB1dHNyYzsKLSAgICBjcHAtPnByZXZpb3VzX3Rva2VuID0gJ1xuJzsKLSAgICBj
cHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0KLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdFNj
YW5uZXIKLQotaW50IEZyZWVTY2FubmVyKHZvaWQpCi17Ci0gICAgcmV0dXJuIChGcmVlQ1BQKCkp
OwotfQotCi1pbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIGNw
cC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNw
cC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKLSAg
ICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICog
c3RyX2dldGNoKCkKLSAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmlu
Z3MuCi0gKiByZXR1cm5zIHRoZSBuZXh0LWNoYXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgotICog
cmV0dXJucyBFT0Ygd2hlbiB0aGUgY29tcGxldGUgc2hhZGVyIGlzIHBhcnNlZC4KLSAqLwotc3Rh
dGljIGludCBzdHJfZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluKQotewotICAgIGZvcig7Oyl7Ci0g
ICAgICAgaWYgKCppbi0+cCl7Ci0gICAgICAgICAgaWYgKCppbi0+cCA9PSAnXG4nKSB7Ci0gICAg
ICAgICAgICAgaW4tPmJhc2UubGluZSsrOwotICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuICppbi0+cCsrOwotICAgICAgIH0KLSAgICAg
ICBpZigrKyhjcHAtPlBhV2hpY2hTdHIpIDwgY3BwLT5QYUFyZ2MpewotICAgICAgICAgIGZyZWUo
aW4pOwotICAgICAgICAgIFNldFN0cmluZ051bWJlcihjcHAtPlBhV2hpY2hTdHIpOwotICAgICAg
ICAgIFNldExpbmVOdW1iZXIoMSk7Ci0gICAgICAgICAgU2NhbkZyb21TdHJpbmcoY3BwLT5QYUFy
Z3ZbY3BwLT5QYVdoaWNoU3RyXSk7Ci0gICAgICAgICAgaW49KFN0cmluZ0lucHV0U3JjKiljcHAt
PmN1cnJlbnRJbnB1dDsKLSAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgCi0gICAgICAg
fQotICAgICAgIGVsc2V7Ci0gICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5w
cmV2OwotICAgICAgICAgIGNwcC0+UGFXaGljaFN0cj0wOwotICAgICAgICAgIGZyZWUoaW4pOwot
ICAgICAgICAgIHJldHVybiBFT0Y7Ci0gICAgICAgfSAgCi0gICAgfQotfSAvLyBzdHJfZ2V0Y2gK
LQotc3RhdGljIHZvaWQgc3RyX3VuZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5
c3R5cGVwcCAqdHlwZSkgewotICAgIGlmIChpbi0+cFstMV0gPT0gY2gpaW4tPnAtLTsKLSAgICBl
bHNlIHsKLSAgICAgICAgKihpbi0+cCk9J1wwJzsgLy90aGlzIHdvdWxkIHRha2UgY2FyZSBvZiBz
aGlmdGluZyB0byB0aGUgcHJldmlvdXMgc3RyaW5nLgotICAgICAgICBjcHAtPlBhV2hpY2hTdHIt
LTsKLSAgICB9ICAKLSAgICBpZiAoY2ggPT0gJ1xuJykgewotICAgICAgICBpbi0+YmFzZS5saW5l
LS07Ci0gICAgICAgIERlY0xpbmVOdW1iZXIoKTsKLSAgICB9Ci19IC8vIHN0cl91bmdldGNoCi0K
LWludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKQotewotICAgIAotICAgIFN0cmluZ0lu
cHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoU3RyaW5nSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQo
aW4sIDAsIHNpemVvZihTdHJpbmdJbnB1dFNyYykpOwotICAgIGluLT5wID0gKGNoYXIqKSBzOwot
ICAgIGluLT5iYXNlLmxpbmUgPSAxOwotICAgIGluLT5iYXNlLnNjYW4gPSBieXRlX3NjYW47Ci0g
ICAgaW4tPmJhc2UuZ2V0Y2ggPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc3Ry
X2dldGNoOwotICAgIGluLT5iYXNlLnVuZ2V0Y2ggPSAodm9pZCAoKikoSW5wdXRTcmMgKiwgaW50
LCB5eXN0eXBlcHAgKikpc3RyX3VuZ2V0Y2g7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3Vy
cmVudElucHV0OwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotCi0gICAgcmV0
dXJuIDE7Ci19IC8vIFNjYW5Gcm9tU3RyaW5nOwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGbG9h
dGluZyBwb2ludCBjb25zdGFudHM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2RlZmluZSBBUFBFTkRf
Q0hBUl9TKGNoLCBzdHIsIGxlbiwgbWF4X2xlbikgXAotICAgICAgaWYgKGxlbiA8IG1heF9sZW4p
IHsgXAotICAgICAgICAgIHN0cltsZW4rK10gPSBjaDsgXAotICAgICAgfSBlbHNlIGlmICghYWxy
ZWFkeUNvbXBsYWluZWQpIHsgXAotICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJCVUZGRVIg
T1ZFUkZMT1ciKTsgXAotICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVkID0gMTsgXAotICAgICAg
fQotCi0vKgotICogbEZsb2F0Q29uc3QoKSAtIFNjYW4gYSBmbG9hdGluZyBwb2ludCBjb25zdGFu
dC4gIEFzc3VtZXMgdGhhdCB0aGUgc2Nhbm5lcgotICogICAgICAgICBoYXMgc2VlbiBhdCBsZWFz
dCBvbmUgZGlnaXQsIGZvbGxvd2VkIGJ5IGVpdGhlciBhIGRlY2ltYWwgJy4nIG9yIHRoZQotICog
ICAgICAgICBsZXR0ZXIgJ2UnLgotICogY2ggLSAnLicgb3IgJ2UnCi0gKiBsZW4gLSBsZW5ndGgg
b2Ygc3RyaW5nIGFscmVhZHkgY29waWVkIGludG8geXlsdmFscHAtPnN5bWJvbF9uYW1lLgotICov
Ci0KLXN0YXRpYyBpbnQgbEZsb2F0Q29uc3QoaW50IGNoLCBpbnQgbGVuLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKLXsKLSAgICBpbnQgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwotICAgIGFzc2VydCgo
Y2ggPT0gJy4nKSB8fCAoY2ggPT0gJ2UnKSB8fCAoY2ggPT0gJ0UnKSk7Ci0KLSAgICBpZiAoY2gg
PT0gJy4nKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwotICAgIH0K
LQotICAgIC8vIEV4cG9uZW50OgotICAgIGlmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7Ci0g
ICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhf
U1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKGNoID09ICcrJykgewot
ICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4s
IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlm
IChjaCA9PSAnLScpIHsKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAg
ICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgQVBQ
RU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFN
RV9MRU4pOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVhQT05FTlQgSU5WQUxJRCIpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOwotCi0gICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9M
X05BTUVfTEVOKTsKLSAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAg
eXlsdmFscHAtPnNjX2Z2YWwgPSAoZmxvYXQpIGF0b2ZfZG90KHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZSk7Ci0gICAgaWYgKGlzaW5mZih5eWx2YWxwcC0+c2NfZnZhbCkpIHsKLSAgICAgICAgQ1BQRXJy
b3JUb0luZm9Mb2coIkZMT0FUIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgfQotICAgIHJldHVy
biBDUFBfRkxPQVRDT05TVEFOVDsKLX0gLy8gbEZsb2F0Q29uc3QKLQotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vIE5vcm1hbCBTY2FubmVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAotc3Rh
dGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsK
LSAgICBjaGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKLSAgICBpbnQgYWxyZWFk
eUNvbXBsYWluZWQgPSAwOwotICAgIGludCBsZW4sIGNoLCBpaSwgaXZhbCA9IDA7Ci0KLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAwOwotICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotIAot
ICAgICAgICB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xyJykgewot
ICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IDE7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0gY3BwLT5jdXJyZW50
SW5wdXQtPm5hbWU7Ci0gICAgICAgIGNwcC0+bHRva2VuTG9jLmxpbmUgPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+bGluZTsKLSAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwotICAgICAgICBsZW4g
PSAwOwotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gY2g7IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KLSAgICAgICAgY2FzZSBFT0Y6
Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2Fz
ZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKLSAgICAgICAgY2FzZSAnRic6IGNhc2UgJ0cnOiBj
YXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOgotICAgICAgICBjYXNlICdLJzogY2FzZSAnTCc6
IGNhc2UgJ00nOiBjYXNlICdOJzogY2FzZSAnTyc6Ci0gICAgICAgIGNhc2UgJ1AnOiBjYXNlICdR
JzogY2FzZSAnUic6IGNhc2UgJ1MnOiBjYXNlICdUJzoKLSAgICAgICAgY2FzZSAnVSc6IGNhc2Ug
J1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOgotICAgICAgICBjYXNlICdaJzogY2Fz
ZSAnXyc6Ci0gICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBj
YXNlICdlJzoKLSAgICAgICAgY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6
IGNhc2UgJ2onOgotICAgICAgICBjYXNlICdrJzogY2FzZSAnbCc6IGNhc2UgJ20nOiBjYXNlICdu
JzogY2FzZSAnbyc6Ci0gICAgICAgIGNhc2UgJ3AnOiBjYXNlICdxJzogY2FzZSAncic6IGNhc2Ug
J3MnOiBjYXNlICd0JzoKLSAgICAgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2Fz
ZSAneCc6IGNhc2UgJ3knOgotICAgICAgICBjYXNlICd6JzogICAgICAgICAgICAKLSAgICAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3lt
Ym9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fAotICAgICAg
ICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAg
IGNoID09ICdfJyk7Ci0gICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1BWF9TWU1CT0xfTkFNRV9M
RU4pOwotICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotICAgICAgICAgICAgcmV0dXJu
IENQUF9JREVOVElGSUVSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJzAnOgot
ICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4s
IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChj
aCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7ICAvLyBoZXhhZGVjaW1hbCBpbnRlZ2VyIGNvbnN0YW50
cwotICAgICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICAgICAgICAgIGlmICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAg
ICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChj
aCA+PSAnYScgJiYgY2ggPD0gJ2YnKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGl2YWwgPSAwOwotICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoKGl2YWwgPD0gMHgwZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+
PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlp
ID0gY2ggLSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+
PSAnQScgJiYgY2ggPD0gJ0YnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlp
ID0gY2ggLSAnQScgKyAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJ2EnICsgMTA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2
YWwgPSAoaXZhbCA8PCA0KSB8IGlpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghYWxyZWFkeUNvbXBsYWluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiSEVYIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfSB3
aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJIRVggQ09OU1RBTlQg
SU5WQUxJRCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhc3NlcnQobGVu
IDw9IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1i
b2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+
dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAg
ICB5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lO
VENPTlNUQU5UOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcn
KSB7IC8vIG9jdGFsIGludGVnZXIgY29uc3RhbnRzCi0gICAgICAgICAgICAgICAgaXZhbCA9IDA7
Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBpZiAoKGl2YWwgPD0g
MHgxZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICAgICAg
aXZhbCA9IChpdmFsIDw8IDMpIHwgaWk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IWFscmVhZHlDb21wbGFpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiT0NUIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhbHJlYWR5Q29tcGxhaW5lZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2gg
PD0gJzcnKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBj
aCA9PSAnZicgfHwgY2ggPT0gJ2gnIHx8IGNoID09ICd4J3x8IGNoID09ICdFJykgCi0gICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoY2gsIGxlbiwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAg
ICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAg
ICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOwotICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfSU5UQ09OU1RBTlQ7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGNoID0gJzAnOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLi4uCi0gICAgICAgIGNhc2UgJzEnOiBj
YXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6
IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1B
WF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IHdo
aWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnLicg
fHwgY2ggPT0gJ2UnIHx8IGNoID09ICdFJykgewotICAgICAgICAgICAgICAgIHJldHVybiBsRmxv
YXRDb25zdChjaCwgbGVuLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAg
ICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAg
IGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgIGl2YWwgPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaWkg
PSAwOyBpaSA8IGxlbjsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICBjaCA9IHl5bHZhbHBw
LT5zeW1ib2xfbmFtZVtpaV0gLSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgIGl2YWwgPSBpdmFs
KjEwICsgY2g7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoaXZhbCA+IDIxNDc0ODM2NCkgfHwg
KGl2YWwgPT0gMjE0NzQ4MzY0ICYmIGNoID49IDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiSU5URUdFUiBDT05TVEFOVCBPVkVSRkxPVyIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Ci0gICAg
ICAgICAgICAgICAgaWYoaXZhbD09MCkKLSAgICAgICAgICAgICAgICAgICBzdHJjcHkoeXlsdmFs
cHAtPnN5bWJvbF9uYW1lLCIwIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05T
VEFOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICct
JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9ERUNfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09
ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1VCX0FTU0lHTjsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICctJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgaWYgKGNoID09ICcrJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
SU5DX09QOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0FERF9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnKyc7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9
PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01VTF9BU1NJR047Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVy
biAnKic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X01PRF9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jyl7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9CUkFDRTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclJzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYg
KGNoID09ICc+JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJBQ0tFVDsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICc6JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnXic6Ci0gICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICdeJykgewotICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfWE9SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9BU1NJR047
Ci0gICAgICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgICAgICAgcmV0dXJuICdeJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBp
ZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9FUV9PUDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICc9JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnISc6Ci0gICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfTkVfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgIHJldHVybiAnISc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ3wn
OgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnfCcpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gQ1BQX09SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09S
X0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICAgICAgICByZXR1cm4gJ3wnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYg
KGNoID09ICcmJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5EX09QOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX0FORF9BU1NJR047Ci0gICAgICAgICAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJzsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJzwnOgotICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKLSAgICAgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgICAgICAgICAgICAgIGlmKGNoID09ICc9JykKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9MRUZUX0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAg
ICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX09QOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoID09ICc9JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFX09QOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnJScp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0U7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICc6JykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfTEVGVF9CUkFDS0VUOwotICAgICAgICAgICAgICAgICAgICBlbHNlewotICAg
ICAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
JzwnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAo
Y2ggPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaCA9
PSAnPScpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQVNTSUdOOwotICAg
ICAgICAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX09QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX0dFX09QOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz4nOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnLic6Ci0gICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAg
ICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoJy4n
LCAwLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBTcGVjaWFs
IEVPRiBoYWNrCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLic7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICBpZiAoY2ggPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0g
RU9GKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdcbic7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGNoID09ICcqJykgewotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgZG8gewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVPRiBJTiBDT01NRU5UIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9GIElOIENPTU1FTlQiKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICcvJyk7Ci0gICAgICAgICAgICAgICAg
Ly8gR28gdHJ5IGl0IGFnYWluLi4uCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9Jykg
ewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfRElWX0FTU0lHTjsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcvJzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAg
ICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyInICYmIGNoICE9ICdcbicg
JiYgY2ggIT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICdcXCcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBj
aGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3Vh
Z2UiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCBzdHJpbmdfdmFsLCBsZW4sIE1BWF9T
VFJJTkdfTEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIGFzc2VydChsZW4gPD0gTUFYX1NUUklOR19MRU4pOwotICAgICAgICAgICAgc3RyaW5nX3Zh
bFtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnIicpIHsKLSAgICAgICAgICAg
ICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdf
dmFsKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1NUUkNPTlNUQU5UOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9MIElOIFNU
UklORyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9TWTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBieXRlX3NjYW4KLQot
aW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKQoteyAgICAKLSAgICB5eXN0eXBl
cHAgeXlsdmFscHA7Ci0gICAgaW50IHRva2VuID0gJ1xuJzsgICAKLQotICAgIGZvcig7Oykgewot
Ci0gICAgICAgIGNoYXIqIHRva2VuU3RyaW5nID0gMDsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKLSAgICAgICAg
aWYoY2hlY2tfRU9GKHRva2VuKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAo
dG9rZW4gPCAwKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNrIG1heSBuZWVkIHRvIGJlIGlt
cHJvdmVkIHRvIHN1cHBvcnQgVVRGLTgKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgaW4gY29t
bWVudHMuCi0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGVuY291
bnRlcmVkIG5vbi1BU0NJSSBjaGFyYWN0ZXIgaW4gc2hhZGVyIHNvdXJjZSIpOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuID09ICcjJykgewotICAg
ICAgICAgICAgaWYgKGNwcC0+cHJldmlvdXNfdG9rZW4gPT0gJ1xuJ3x8IGNwcC0+cHJldmlvdXNf
dG9rZW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHRva2VuID0gcmVhZENQUGxpbmUoJnl5bHZh
bHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaGVja19FT0YodG9rZW4pKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInByZXByb2Nlc3Nv
ciBjb21tYW5kIG11c3Qgbm90IGJlIHByZWNlZGVkIGJ5IGFueSBvdGhlciBzdGF0ZW1lbnQgaW4g
dGhhdCBsaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgY3BwLT5wcmV2aW91c190b2tlbiA9IHRva2VuOwotICAgICAgICAv
LyBleHBhbmQgbWFjcm9zCi0gICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBN
YWNyb0V4cGFuZCh5eWx2YWxwcC5zY19pZGVudCwgJnl5bHZhbHBwKSkgewotICAgICAgICAgICAg
Y3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAodG9rZW4gPT0gJ1xuJykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0KLSAgICAgICAgaWYgKHRv
a2VuID09IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0
cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAuc2NfaWRlbnQpOwotICAgICAgICB9IGVsc2UgaWYg
KHRva2VuID09IENQUF9GTE9BVENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7
Ci0gICAgICAgICAgICB0b2tlblN0cmluZyA9IHl5bHZhbHBwLnN5bWJvbF9uYW1lOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRh
YmxlLHRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlblN0cmluZykgewotICAg
ICAgICAgICAgaW50IGxlbiA9IHN0cmxlbih0b2tlblN0cmluZyk7Ci0gICAgICAgICAgICBjcHAt
PnRva2Vuc0JlZm9yZUVPRiA9IDE7Ci0gICAgICAgICAgICBpZiAobGVuID49IG1heFNpemUpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbWF4U2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZSAgaWYg
KGxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGxlbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIHl5bGV4Ci0KLS8vQ2hlY2tzIGlmIHRo
ZSB0b2tlbiBqdXN0IHJlYWQgaXMgRU9GIG9yIG5vdC4KLWludCBjaGVja19FT0YoaW50IHRva2Vu
KQotewotICAgaWYodG9rZW49PS0xKXsKLSAgICAgICBpZihjcHAtPmlmZGVwdGggPjApewotICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VuZGlmIG1pc3NpbmchISBDb21waWxhdGlvbiBzdG9w
cGVkIik7Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAgICAgfQotICAgICAgcmV0
dXJuIDE7Ci0gICB9Ci0gICByZXR1cm4gMDsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBF
bmQgb2Ygc2Nhbm5lci5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5l
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdjMWQ2Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5l
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
Ci1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBv
cmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91
ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0
aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJt
cy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3Qg
dXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2Fy
ZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFu
dHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdz
IGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJ
QSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUg
dGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBz
b3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJp
YnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQg
bm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5k
IGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNv
ZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3Ig
bG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFz
IGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNl
bnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBp
bmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBi
ZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBp
biB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJk
d2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJF
SU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xV
RElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRM
RSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9S
IElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFM
TCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFM
LCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBS
T0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElB
IFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09O
VFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1Ig
T1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBzY2Fu
bmVyLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX1NDQU5ORVJfSCkKLSNkZWZpbmUgX19TQ0FOTkVS
X0ggMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCIK
LSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCi0KLS8vIE5vdCByZWFs
bHkgYXRvbSB0YWJsZSBzdHVmZiBidXQgbmVlZGVkIGZpcnN0Li4uCi0KLXR5cGVkZWYgc3RydWN0
IFNvdXJjZUxvY19SZWMgewotICAgIHVuc2lnbmVkIHNob3J0IGZpbGUsIGxpbmU7Ci19IFNvdXJj
ZUxvYzsKLQotaW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLQotdHlwZWRl
ZiBzdHJ1Y3QgSW5wdXRTcmMgewotICAgIHN0cnVjdCBJbnB1dFNyYwkqcHJldjsKLSAgICBpbnQJ
CQkoKnNjYW4pKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7Ci0gICAgaW50CQkJKCpn
ZXRjaCkoc3RydWN0IElucHV0U3JjICosIHl5c3R5cGVwcCAqKTsKLSAgICB2b2lkCQkoKnVuZ2V0
Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCBpbnQsIHl5c3R5cGVwcCAqKTsKLSAgICBpbnQJCQluYW1l
OyAgLyogYXRvbSAqLwotICAgIGludAkJCWxpbmU7Ci19IElucHV0U3JjOwotCi1pbnQgSW5pdFNj
YW5uZXIoQ1BQU3RydWN0ICpjcHApOyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAot
aW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hh
ciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci1pbnQgY2hlY2tfRU9GKGlu
dCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lk
IENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxs
aW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCi12b2lkIFNldExpbmVOdW1iZXIoaW50KTsK
LXZvaWQgU2V0U3RyaW5nTnVtYmVyKGludCk7Ci12b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7Ci12
b2lkIERlY0xpbmVOdW1iZXIodm9pZCk7Ci1pbnQgRnJlZVNjYW5uZXIodm9pZCk7ICAgICAgICAg
ICAgICAgICAvLyBGcmVlIHRoZSBjcHAgc2Nhbm5lcgotI2VuZGlmIC8vICEoZGVmaW5lZChfX1ND
QU5ORVJfSCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQ2MzQ2MjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBO
VklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxp
ZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBt
b2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNv
bnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVl
IHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9y
IHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1z
dWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24t
ZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3Jp
Z2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCBy
ZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZv
cm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2Fy
ZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3Vj
aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5h
bWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9y
YXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRo
aXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGll
ZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0
ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVy
aXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0
d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVu
ZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9O
LCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBN
RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRT
IFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9U
SEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1Ig
QU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRT
OyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1V
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lO
RyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04g
QU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVT
RUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gc2xnbG9iYWxzLmgKLS8vCi0KLSNpZiAhZGVm
aW5lZChfX1NMR0xPQkFMU19IKQotI2RlZmluZSBfX1NMR0xPQkFMU19IIDEKLQotdHlwZWRlZiBz
dHJ1Y3QgQ1BQU3RydWN0X1JlYyBDUFBTdHJ1Y3Q7Ci0KLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsK
LQotI3VuZGVmICBDUFBDX0RFQlVHX1RIRV9DT01QSUxFUgotI2lmIGRlZmluZWQoX0RFQlVHKQot
I2RlZmluZSBDUFBDX0RFQlVHX1RIRV9DT01QSUxFUiAxCi0jZW5kaWYKLQotI3VuZGVmICBDUFBD
X0VOQUJMRV9UT09MUwotI2RlZmluZSBDUFBDX0VOQUJMRV9UT09MUyAxCi0KLSNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5o
IgotI2lmICFkZWZpbmVkKE5PX1BBUlNFUikKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvcGFyc2VyLmgiCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKE5VTEwpCi0jZGVmaW5lIE5VTEwg
MAotI2VuZGlmCi0KLSNlbmRpZiAvLyAhKGRlZmluZWQoX19TTEdMT0JBTFNfSCkKLQotCi0gICAg
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc3ltYm9scy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYx
OGIyNTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3
YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBv
ciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNj
ZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQot
dGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
IHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhl
c2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxp
Y2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEg
c29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9k
aWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91
dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVk
IHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAot
cmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRo
ZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0
aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJr
cywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJ
RElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZy
b20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5v
IG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRl
ZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0
ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3Jr
cyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQot
aW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUg
TlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJ
VEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF
U1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElU
WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVS
QVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RT
LgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg
SU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkK
LU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJ
QlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhF
UiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSks
IFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KLS8vCi0vLyBzeW1ib2xzLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzA2KQotI2VuZGlmCi0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LyBTeW1ib2wgVGFibGUgVmFyaWFibGVzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotU2NvcGUgKlNj
b3BlTGlzdCA9IE5VTEw7Ci1TY29wZSAqQ3VycmVudFNjb3BlID0gTlVMTDsKLVNjb3BlICpHbG9i
YWxTY29wZSA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkg
ewotICAgIFNjb3BlICpzY29wZSA9IF9zY29wZTsKLQotICAgIGlmIChzY29wZS0+bmV4dCkKLSAg
ICAgICAgc2NvcGUtPm5leHQtPnByZXYgPSBzY29wZS0+cHJldjsKLSAgICBpZiAoc2NvcGUtPnBy
ZXYpCi0gICAgICAgIHNjb3BlLT5wcmV2LT5uZXh0ID0gc2NvcGUtPm5leHQ7Ci0gICAgZWxzZQot
ICAgICAgICBTY29wZUxpc3QgPSBzY29wZS0+bmV4dDsKLX0KLQotLyoKLSAqIE5ld1Njb3BlKCkK
LSAqCi0gKi8KLVNjb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICpwb29sKQotewotICAg
IFNjb3BlICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNj
b3BlKSk7Ci0gICAgbFNjb3BlLT5wb29sID0gcG9vbDsKLSAgICBsU2NvcGUtPnBhcmVudCA9IE5V
TEw7Ci0gICAgbFNjb3BlLT5mdW5TY29wZSA9IE5VTEw7Ci0gICAgbFNjb3BlLT5zeW1ib2xzID0g
TlVMTDsKLSAgICAKLSAgICBsU2NvcGUtPmxldmVsID0gMDsKLQotICAgIGxTY29wZS0+cHJvZ3Jh
bXMgPSBOVUxMOwotICAgIGlmICgobFNjb3BlLT5uZXh0ID0gU2NvcGVMaXN0KSkKLSAgICAgICAg
U2NvcGVMaXN0LT5wcmV2ID0gbFNjb3BlOwotICAgIGxTY29wZS0+cHJldiA9IDA7Ci0gICAgU2Nv
cGVMaXN0ID0gbFNjb3BlOwotICAgIG1lbV9BZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBs
U2NvcGUpOwotICAgIHJldHVybiBsU2NvcGU7Ci19IC8vIE5ld1Njb3BlCi0KLS8qCi0gKiBQdXNo
U2NvcGUoKQotICoKLSAqLwotCi12b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3BlKQotewotICAg
IFNjb3BlICpsU2NvcGU7Ci0KLSAgICBpZiAoQ3VycmVudFNjb3BlKSB7Ci0gICAgICAgIGZTY29w
ZS0+bGV2ZWwgPSBDdXJyZW50U2NvcGUtPmxldmVsICsgMTsKLSAgICAgICAgaWYgKGZTY29wZS0+
bGV2ZWwgPT0gMSkgewotICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZSkgewotICAgICAgICAg
ICAgICAgIC8qIEhBQ0sgLSBDVEQgLS0gaWYgR2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0x
LCB3ZSdyZQotICAgICAgICAgICAgICAgICAqIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1
cGVyZ2xvYmFsIHNjb3BlLiAgVGhpbmdzCi0gICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBp
ZiB3ZSBsZWF2ZSB0aGUgbGV2ZWwgYXMgMSwgc28gd2UgYXJiaXRyYXJpbHkKLSAgICAgICAgICAg
ICAgICAgKiBzZXQgaXQgdG8gMiAqLwotICAgICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAy
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49
IDIpIHsKLSAgICAgICAgICAgIGxTY29wZSA9IGZTY29wZTsKLSAgICAgICAgICAgIHdoaWxlIChs
U2NvcGUtPmxldmVsID4gMikKLSAgICAgICAgICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7
Ci0gICAgICAgICAgICBmU2NvcGUtPmZ1blNjb3BlID0gbFNjb3BlOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDA7Ci0gICAgfQotICAgIGZTY29wZS0+
cGFyZW50ID0gQ3VycmVudFNjb3BlOwotICAgIEN1cnJlbnRTY29wZSA9IGZTY29wZTsKLX0gLy8g
UHVzaFNjb3BlCi0KLS8qCi0gKiBQb3BTY29wZSgpCi0gKgotICovCi0KLVNjb3BlICpQb3BTY29w
ZSh2b2lkKQotewotICAgIFNjb3BlICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBDdXJyZW50U2Nv
cGU7Ci0gICAgaWYgKEN1cnJlbnRTY29wZSkKLSAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVu
dFNjb3BlLT5wYXJlbnQ7Ci0gICAgcmV0dXJuIGxTY29wZTsKLX0gLy8gUG9wU2NvcGUKLQotLyoK
LSAqIE5ld1N5bWJvbCgpIC0gQWxsb2NhdGUgYSBuZXcgc3ltYm9sIG5vZGU7Ci0gKgotICovCi0K
LVN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFt
ZSwgc3ltYm9sa2luZCBraW5kKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgY2hhciAqcGNo
OwotICAgIHVuc2lnbmVkIGludCBpaTsKLQotICAgIGxTeW1iID0gKFN5bWJvbCAqKSBtZW1fQWxs
b2MoZlNjb3BlLT5wb29sLCBzaXplb2YoU3ltYm9sKSk7Ci0gICAgbFN5bWItPmxlZnQgPSBOVUxM
OwotICAgIGxTeW1iLT5yaWdodCA9IE5VTEw7Ci0gICAgbFN5bWItPm5leHQgPSBOVUxMOwotICAg
IGxTeW1iLT5uYW1lID0gbmFtZTsKLSAgICBsU3ltYi0+bG9jID0gKmxvYzsKLSAgICBsU3ltYi0+
a2luZCA9IGtpbmQ7Ci0gICAgCi0gICAgLy8gQ2xlYXIgdW5pb24gYXJlYToKLQotICAgIHBjaCA9
IChjaGFyICopICZsU3ltYi0+ZGV0YWlsczsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2Yo
bFN5bWItPmRldGFpbHMpOyBpaSsrKQotICAgICAgICAqcGNoKysgPSAwOwotICAgIHJldHVybiBs
U3ltYjsKLX0gLy8gTmV3U3ltYm9sCi0KLS8qCi0gKiBsQWRkVG9UcmVlKCkgLSBVc2luZyBhIGJp
bmFyeSB0cmVlIGlzIG5vdCBhIGdvb2QgaWRlYSBmb3IgYmFzaWMgYXRvbSB2YWx1ZXMgYmVjYXVz
ZSB0aGV5Ci0gKiAgICAgICAgIGFyZSBnZW5lcmF0ZWQgaW4gb3JkZXIuICBXZSdsbCBmaXggdGhp
cyBsYXRlciAoYnkgcmV2ZXJzaW5nIHRoZSBiaXQgcGF0dGVybikuCi0gKi8KLQotc3RhdGljIHZv
aWQgbEFkZFRvVHJlZShTeW1ib2wgKipmU3ltYm9scywgU3ltYm9sICpmU3ltYikKLXsKLSAgICBT
eW1ib2wgKmxTeW1iOwotICAgIGludCBscmV2LCBmcmV2OwotCi0gICAgbFN5bWIgPSAqZlN5bWJv
bHM7Ci0gICAgaWYgKGxTeW1iKSB7Ci0gICAgICAgIGZyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRh
YmxlLCBmU3ltYi0+bmFtZSk7Ci0gICAgICAgIHdoaWxlIChsU3ltYikgewotICAgICAgICAgICAg
bHJldiA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKLSAgICAgICAgICAg
IGlmIChscmV2ID09IGZyZXYpIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
R2V0QXRvbVN0cmluZyhhdGFibGUsIGZTeW1iLT5uYW1lKSIpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobHJldiA+IGZy
ZXYpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5sZWZ0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWItPmxlZnQgPSBmU3ltYjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5yaWdo
dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+
cmlnaHQgPSBmU3ltYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKmZTeW1ib2xzID0gZlN5bWI7Ci0gICAgfQotfSAvLyBs
QWRkVG9UcmVlCi0KLQotLyoKLSAqIEFkZFN5bWJvbCgpIC0gQWRkIGEgdmFyaWFibGUsIHR5cGUs
IG9yIGZ1bmN0aW9uIG5hbWUgdG8gYSBzY29wZS4KLSAqCi0gKi8KLQotU3ltYm9sICpBZGRTeW1i
b2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtp
bmQpCi17Ci0gICAgU3ltYm9sICpsU3ltYjsKLQotICAgIGlmICghZlNjb3BlKQotICAgICAgICBm
U2NvcGUgPSBDdXJyZW50U2NvcGU7Ci0gICAgbFN5bWIgPSBOZXdTeW1ib2wobG9jLCBmU2NvcGUs
IGF0b20sIGtpbmQpOwotICAgIGxBZGRUb1RyZWUoJmZTY29wZS0+c3ltYm9scywgbFN5bWIpOwot
ICAgIHJldHVybiBsU3ltYjsKLX0gLy8gQWRkU3ltYm9sCi0KLQotLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiogU3ltYm9sIFNlbWFudGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTG9v
a1VwTG9jYWxTeW1ib2woKQotICoKLSAqLwotCi1TeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNj
b3BlICpmU2NvcGUsIGludCBhdG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgaW50IHJu
YW1lLCByYXRvbTsKLQotICAgIHJhdG9tID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgYXRvbSk7
Ci0gICAgaWYgKCFmU2NvcGUpCi0gICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKLSAgICBs
U3ltYiA9IGZTY29wZS0+c3ltYm9sczsKLSAgICB3aGlsZSAobFN5bWIpIHsKLSAgICAgICAgcm5h
bWUgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+bmFtZSk7Ci0gICAgICAgIGlmIChy
bmFtZSA9PSByYXRvbSkgewotICAgICAgICAgICAgcmV0dXJuIGxTeW1iOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKHJuYW1lID4gcmF0b20pIHsKLSAgICAgICAgICAgICAgICBs
U3ltYiA9IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBsU3ltYiA9IGxTeW1iLT5yaWdodDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwTG9jYWxTeW1ib2wKLQotLyoKLSAqIExvb2tV
cFN5bWJvbCgpCi0gKgotICovCi0KLVN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUs
IGludCBhdG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0KLSAgICBpZiAoIWZTY29wZSkKLSAg
ICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOwotICAgIHdoaWxlIChmU2NvcGUpIHsKLSAgICAg
ICAgbFN5bWIgPSBMb29rVXBMb2NhbFN5bWJvbChmU2NvcGUsIGF0b20pOwotICAgICAgICBpZiAo
bFN5bWIpCi0gICAgICAgICAgICByZXR1cm4gbFN5bWI7Ci0gICAgICAgIGZTY29wZSA9IGZTY29w
ZS0+cGFyZW50OwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwU3ltYm9sCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc3ltYm9scy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zeW1ib2xzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZDBi
MDcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zeW1ib2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJl
IHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBy
ZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0
YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVy
bXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRo
aXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2Ug
dGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vu
c2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29m
dHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5
IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBt
b2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRo
YXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0
YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9u
cyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywg
c2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElB
IFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20g
TlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90
aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBi
eSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50
IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBv
ciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5j
b3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJ
RElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhP
VVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg
T1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJ
T04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgot
Ci1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5E
SVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9V
VCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVU
SU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBV
TkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNU
UklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLS8vCi0vLyBzeW1ib2xzLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX1NZTUJPTFNfSCkK
LSNkZWZpbmUgX19TWU1CT0xTX0ggMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oIgotCi10eXBlZGVmIGVudW0gc3ltYm9sa2luZCB7Ci0gICBNQUNST19TCi19IHN5
bWJvbGtpbmQ7Ci0KLS8vIFR5cGVkZWZzIGZvciB0aGluZ3MgZGVmaW5lZCBoZXJlIGluICJzeW1i
b2xzLmgiOgotCi10eXBlZGVmIHN0cnVjdCBTY29wZV9SZWMgU2NvcGU7Ci10eXBlZGVmIHN0cnVj
dCBTeW1ib2xfUmVjIFN5bWJvbDsKLQotdHlwZWRlZiBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgewot
ICAgIHN0cnVjdCBTeW1ib2xMaXN0X1JlYyAqbmV4dDsKLSAgICBTeW1ib2wgKnN5bWI7Ci19IFN5
bWJvbExpc3Q7Ci0KLXN0cnVjdCBTY29wZV9SZWMgewotICAgIFNjb3BlICpuZXh0LCAqcHJldjsg
ICAgIC8vIGRvdWJseS1saW5rZWQgbGlzdCBvZiBhbGwgc2NvcGVzCi0gICAgU2NvcGUgKnBhcmVu
dDsKLSAgICBTY29wZSAqZnVuU2NvcGU7ICAgICAgICAvLyBQb2ludHMgdG8gYmFzZSBzY29wZSBv
ZiBlbmNsb3NpbmcgZnVuY3Rpb24KLSAgICBNZW1vcnlQb29sICpwb29sOyAgICAgICAvLyBwb29s
IHVzZWQgZm9yIGFsbG9jYXRpb24gaW4gdGhpcyBzY29wZQotICAgIFN5bWJvbCAqc3ltYm9sczsK
LSAgICAKLQlpbnQgbGV2ZWw7ICAgICAgICAgICAgICAvLyAwID0gc3VwZXIgZ2xvYmFscywgMSA9
IGdsb2JhbHMsIGV0Yy4KLQotICAgIC8vIE9ubHkgdXNlZCBhdCBnbG9iYWwgc2NvcGUgKGxldmVs
IDEpOgotICAgIFN5bWJvbExpc3QgKnByb2dyYW1zOyAgIC8vIExpc3Qgb2YgcHJvZ3JhbXMgZm9y
IHRoaXMgY29tcGlsYXRpb24uCi19OwotCi0KLS8vIFN5bWJvbCB0YWJsZSBpcyBhIHNpbXBsZSBi
aW5hcnkgdHJlZS4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIgICAg
ICAgIC8vIHRvIGdldCBNYWNyb1N5bWJvbCBkZWYKLQotc3RydWN0IFN5bWJvbF9SZWMgewotICAg
IFN5bWJvbCAqbGVmdCwgKnJpZ2h0OwotICAgIFN5bWJvbCAqbmV4dDsKLSAgICBpbnQgbmFtZTsg
ICAgICAgLy8gTmFtZSBhdG9tCi0gICAgU291cmNlTG9jIGxvYzsKLSAgICBzeW1ib2xraW5kIGtp
bmQ7Ci0gICAgdW5pb24gewotICAgICAgICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgfSBkZXRhaWxz
OwotfTsKLQotZXh0ZXJuIFNjb3BlICpDdXJyZW50U2NvcGU7Ci1leHRlcm4gU2NvcGUgKkdsb2Jh
bFNjb3BlOwotZXh0ZXJuIFNjb3BlICpTY29wZUxpc3Q7Ci0KLVNjb3BlICpOZXdTY29wZUluUG9v
bChNZW1vcnlQb29sICopOwotI2RlZmluZSBOZXdTY29wZSgpICAgICAgTmV3U2NvcGVJblBvb2wo
Q3VycmVudFNjb3BlLT5wb29sKQotdm9pZCBQdXNoU2NvcGUoU2NvcGUgKmZTY29wZSk7Ci1TY29w
ZSAqUG9wU2NvcGUodm9pZCk7Ci1TeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2Nv
cGUgKmZTY29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCk7Ci1TeW1ib2wgKkFkZFN5bWJv
bChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2lu
ZCk7Ci1TeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsK
LVN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLQotCi0jZW5k
aWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTRjMDVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKysrIC9kZXYv
bnVsbApAQCAtMSw0NjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQg
KGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklE
SUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5
b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0
YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBz
b2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBk
byBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxs
LCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRl
cm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVy
c29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMg
aW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIp
LCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEg
U29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29y
IGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJ
RElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5W
SURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJz
IGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVp
dGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJ
RElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBz
dGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVz
cyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0
IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQg
YnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUg
TlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNl
bnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVE
IE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VU
IExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZS
SU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFU
SU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUg
TElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlks
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBM
T1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1P
RElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBI
T1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBF
VkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyB0b2tlbnMuYwotLy8KLQot
I2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgotCi0jaWYgZGVm
aW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDU0KQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQxNTIpCi0jZW5kaWYKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBQcmVwcm9jZXNzb3IgYW5k
IFRva2VuIFJlY29yZGVyIGFuZCBQbGF5YmFjazogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogaWRzdHIoKQot
ICogQ29weSBhIHN0cmluZyB0byBhIG1hbGxvYydlZCBibG9jayBhbmQgY29udmVydCBpdCBpbnRv
IHNvbWV0aGluZyBzdWl0YWJsZQotICogZm9yIGFuIElECi0gKgotICovCi0KLXN0YXRpYyBjaGFy
ICppZHN0cihjb25zdCBjaGFyICpmc3RyLCBNZW1vcnlQb29sICpwb29sKQotewotICAgIHNpemVf
dCBsZW47Ci0gICAgY2hhciAqc3RyLCAqdDsKLSAgICBjb25zdCBjaGFyICpmOwotCi0gICAgbGVu
ID0gc3RybGVuKGZzdHIpOwotICAgIGlmICghcG9vbCkKLSAgICAgICAgc3RyID0gKGNoYXIgKikg
bWFsbG9jKGxlbiArIDEpOwotICAgIGVsc2UKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWVtX0Fs
bG9jKHBvb2wsIGxlbiArIDEpOwotICAgIAotICAgIGZvciAoZj1mc3RyLCB0PXN0cjsgKmY7IGYr
KykgewotICAgICAgICBpZiAoaXNhbG51bSgqZikpICp0KysgPSAqZjsKLSAgICAgICAgZWxzZSBp
ZiAoKmYgPT0gJy4nIHx8ICpmID09ICcvJykgKnQrKyA9ICdfJzsKLSAgICB9Ci0gICAgKnQgPSAw
OwotICAgIHJldHVybiBzdHI7Ci19IC8vIGlkc3RyCi0KLQotLyoKLSAqIGxOZXdCbG9jaygpCi0g
KgotICovCi0KLXN0YXRpYyBUb2tlbkJsb2NrICpsTmV3QmxvY2soVG9rZW5TdHJlYW0gKmZUb2ss
IE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0gICAgVG9rZW5CbG9jayAqbEJsb2NrOwotCi0gICAgaWYg
KCFwb29sKQotICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtYWxsb2Moc2l6ZW9mKFRv
a2VuQmxvY2spICsgMjU2KTsKLSAgICBlbHNlCi0gICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2Nr
ICopIG1lbV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOwotICAgIGxCbG9j
ay0+Y291bnQgPSAwOwotICAgIGxCbG9jay0+Y3VycmVudCA9IDA7Ci0gICAgbEJsb2NrLT5kYXRh
ID0gKHVuc2lnbmVkIGNoYXIgKikgbEJsb2NrICsgc2l6ZW9mKFRva2VuQmxvY2spOwotICAgIGxC
bG9jay0+bWF4ID0gMjU2OwotICAgIGxCbG9jay0+bmV4dCA9IE5VTEw7Ci0gICAgaWYgKGZUb2st
PmhlYWQpIHsKLSAgICAgICAgZlRvay0+Y3VycmVudC0+bmV4dCA9IGxCbG9jazsKLSAgICB9IGVs
c2UgewotICAgICAgICBmVG9rLT5oZWFkID0gbEJsb2NrOwotICAgIH0KLSAgICBmVG9rLT5jdXJy
ZW50ID0gbEJsb2NrOwotICAgIHJldHVybiBsQmxvY2s7Ci19IC8vIGxOZXdCbG9jawotCi0vKgot
ICogbEFkZEJ5dGUoKQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBsQWRkQnl0ZShUb2tlblN0cmVh
bSAqZlRvaywgdW5zaWduZWQgY2hhciBmVmFsKQotewotICAgIFRva2VuQmxvY2sgKmxCbG9jazsK
LSAgICBsQmxvY2sgPSBmVG9rLT5jdXJyZW50OwotICAgIGlmIChsQmxvY2stPmNvdW50ID49IGxC
bG9jay0+bWF4KQotICAgICAgICBsQmxvY2sgPSBsTmV3QmxvY2soZlRvaywgMCk7Ci0gICAgbEJs
b2NrLT5kYXRhW2xCbG9jay0+Y291bnQrK10gPSBmVmFsOwotfSAvLyBsQWRkQnl0ZQotCi0KLQot
LyoKLSAqIGxSZWFkQnl0ZSgpIC0gR2V0IHRoZSBuZXh0IGJ5dGUgZnJvbSBhIHN0cmVhbS4KLSAq
Ci0gKi8KLQotc3RhdGljIGludCBsUmVhZEJ5dGUoVG9rZW5TdHJlYW0gKnBUb2spCi17Ci0gICAg
VG9rZW5CbG9jayAqbEJsb2NrOwotICAgIGludCBsdmFsID0gLTE7Ci0KLSAgICBsQmxvY2sgPSBw
VG9rLT5jdXJyZW50OwotICAgIGlmIChsQmxvY2spIHsKLSAgICAgICAgaWYgKGxCbG9jay0+Y3Vy
cmVudCA+PSBsQmxvY2stPmNvdW50KSB7Ci0gICAgICAgICAgICBsQmxvY2sgPSBsQmxvY2stPm5l
eHQ7Ci0gICAgICAgICAgICBpZiAobEJsb2NrKQotICAgICAgICAgICAgICAgIGxCbG9jay0+Y3Vy
cmVudCA9IDA7Ci0gICAgICAgICAgICBwVG9rLT5jdXJyZW50ID0gbEJsb2NrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsQmxvY2spCi0gICAgICAgICAgICBsdmFsID0gbEJsb2NrLT5kYXRhW2xC
bG9jay0+Y3VycmVudCsrXTsKLSAgICB9Ci0gICAgcmV0dXJuIGx2YWw7Ci19IC8vIGxSZWFkQnl0
ZQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gR2xvYmFsIEZ1bmN0
aW9uczovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogTmV3
VG9rZW5TdHJlYW0oKQotICoKLSAqLwotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29u
c3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCkKLXsKLSAgICBUb2tlblN0cmVhbSAqcFRv
azsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSAqKSBtYWxs
b2Moc2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgZWxzZQotICAgICAgICBwVG9rID0gKFRva2Vu
U3RyZWFtKiltZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgcFRvay0+
bmV4dCA9IE5VTEw7Ci0gICAgcFRvay0+bmFtZSA9IGlkc3RyKG5hbWUsIHBvb2wpOwotICAgIHBU
b2stPmhlYWQgPSBOVUxMOwotICAgIHBUb2stPmN1cnJlbnQgPSBOVUxMOwotICAgIGxOZXdCbG9j
ayhwVG9rLCBwb29sKTsKLSAgICByZXR1cm4gcFRvazsKLX0gLy8gTmV3VG9rZW5TdHJlYW0KLQot
LyoKLSAqIERlbGV0ZVRva2VuU3RyZWFtKCkKLSAqCi0gKi8KLQotdm9pZCBEZWxldGVUb2tlblN0
cmVhbShUb2tlblN0cmVhbSAqcFRvaykKLXsKLSAgICBUb2tlbkJsb2NrICpwQmxvY2ssICpuQmxv
Y2s7Ci0KLSAgICBpZiAocFRvaykgewotICAgICAgICBwQmxvY2sgPSBwVG9rLT5oZWFkOwotICAg
ICAgICB3aGlsZSAocEJsb2NrKSB7Ci0gICAgICAgICAgICBuQmxvY2sgPSBwQmxvY2stPm5leHQ7
Ci0gICAgICAgICAgICBmcmVlKHBCbG9jayk7Ci0gICAgICAgICAgICBwQmxvY2sgPSBuQmxvY2s7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBUb2stPm5hbWUpCi0gICAgICAgICAgICBmcmVlKHBU
b2stPm5hbWUpOwotICAgICAgICBmcmVlKHBUb2spOwotICAgIH0KLX0gLy8gRGVsZXRlVG9rZW5T
dHJlYW0KLQotLyoKLSAqIFJlY29yZFRva2VuKCkgLSBBZGQgYSB0b2tlbiB0byB0aGUgZW5kIG9m
IGEgbGlzdCBmb3IgbGF0ZXIgcGxheWJhY2sgb3IgcHJpbnRvdXQuCi0gKgotICovCi0KLXZvaWQg
UmVjb3JkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXls
dmFscHApCi17Ci0gICAgY29uc3QgY2hhciAqczsKLSAgICBjaGFyICpzdHI9TlVMTDsKLQotICAg
IGlmICh0b2tlbiA+IDI1NikKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIp
KCh0b2tlbiAmIDB4N2YpICsgMHg4MCkpOwotICAgIGVsc2UKLSAgICAgICAgbEFkZEJ5dGUocFRv
aywgKHVuc2lnbmVkIGNoYXIpKHRva2VuICYgMHg3ZikpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIENQUF9JREVOVElGSUVSOgotICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgot
ICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICBzID0gR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHl5bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgICAgIHdoaWxlICgqcykKLSAgICAgICAgICAg
IGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSAqcysrKTsKLSAgICAgICAgbEFkZEJ5dGUo
cFRvaywgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0g
ICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6Ci0gICAgICAgICBzdHI9eXlsdmFscHAtPnN5bWJvbF9u
YW1lOwotICAgICAgICAgd2hpbGUgKCpzdHIpewotICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywg
KHVuc2lnbmVkIGNoYXIpICpzdHIrKyk7Ci0gICAgICAgICB9Ci0gICAgICAgICBsQWRkQnl0ZShw
VG9rLCAwKTsKLSAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgJygnOgotICAgICAgICBsQWRkQnl0
ZShwVG9rLCAodW5zaWduZWQgY2hhcikoeXlsdmFscHAtPnNjX2ludCA/IDEgOiAwKSk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfSAvLyBSZWNvcmRUb2tlbgotCi0vKgot
ICogUmV3aW5kVG9rZW5TdHJlYW0oKSAtIFJlc2V0IGEgdG9rZW4gc3RyZWFtIGluIHByZXBlcmF0
aW9uIGZvciByZWFkaW5nLgotICoKLSAqLwotCi12b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2Vu
U3RyZWFtICpwVG9rKQotewotICAgIGlmIChwVG9rLT5oZWFkKSB7Ci0gICAgICAgIHBUb2stPmN1
cnJlbnQgPSBwVG9rLT5oZWFkOwotICAgICAgICBwVG9rLT5jdXJyZW50LT5jdXJyZW50ID0gMDsK
LSAgICB9Ci19IC8vIFJld2luZFRva2VuU3RyZWFtCi0KLS8qCi0gKiBSZWFkVG9rZW4oKSAtIFJl
YWQgdGhlIG5leHQgdG9rZW4gZnJvbSBhIHN0cmVhbS4KLSAqCi0gKi8KLQotaW50IFJlYWRUb2tl
bihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgY2hhciBz
eW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07Ci0gICAgY2hhciBzdHJpbmdfdmFs
W01BWF9TVFJJTkdfTEVOICsgMV07Ci0gICAgaW50IGx0b2tlbiwgbGVuOwotICAgIGNoYXIgY2g7
Ci0gICAgaW50IGJhc2UsIGFjY3VtOwotICAgIGNoYXIgY2hfdmFsOwotCi0gICAgbHRva2VuID0g
bFJlYWRCeXRlKHBUb2spOwotICAgIGlmIChsdG9rZW4gPj0gMCkgewotICAgICAgICBpZiAobHRv
a2VuID4gMTI3KQotICAgICAgICAgICAgbHRva2VuICs9IDEyODsKLSAgICAgICAgc3dpdGNoIChs
dG9rZW4pIHsKLSAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBf
VFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBsZW4gPSAwOwotICAgICAgICAgICAgY2ggPSBs
UmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAn
eicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwK
LSAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAotICAgICAg
ICAgICAgICAgICAgICAgY2ggPT0gJ18nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5
bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0
ZShwVG9rKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
eW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsK
LSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKLSAgICAgICAgICAg
IGxlbiA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAw
KQotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1RSSU5HX0xFTikKLSAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nX3ZhbFtsZW4rK10gPSBjaDsKLSAgICAgICAgICAgIHN0cmluZ192YWxb
bGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENQUF9GTE9BVENPTlNUQU5UOgotICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAg
IGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKXx8KGNoPT0nZSd8fGNoPT0nRSd8fGNoPT0nLicpfHwoY2g9PScrJ3x8Y2g9PSct
JykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7
Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAn
OwotICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+
c2NfZnZhbD0oZmxvYXQpYXRvZl9kb3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKLSAgICAgICAgICAgIGxl
biA9IDA7Ci0JICAgIGFjY3VtID0gMDsKLSAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2sp
OwotICAgICAgICAgICAgaWYgKGNoID09ICcwJykgewotICAgICAgICAgICAgICAgIHN5bWJvbF9u
YW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwot
ICAgICAgICAgICAgICAgIGlmIChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBi
YXNlID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSA4OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYmFz
ZSA9IDEwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAobGVuIDwgTUFYX1NZ
TUJPTF9OQU1FX0xFTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaF92YWwgPSAt
MTsKLSAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdChjaCkpCi0gICAgICAgICAgICAgICAgICAg
IGNoX3ZhbCA9IGNoIC0gJzAnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzeGRpZ2l0KGNo
KSkKLSAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gdG9sb3dlcihjaCkgLSAnYScgKyAxMDsK
LQotICAgICAgICAgICAgICAgIGlmIChjaF92YWwgPCAwIHx8IGNoX3ZhbCA+PSBiYXNlKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bisrXSA9IGNoOwotICAgICAgICAgICAgICAgIGFjY3VtID0gYWNjdW0gKiBiYXNlICsgY2hfdmFs
OwotICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICBhc3NlcnQo
Y2ggPT0gJ1wwJyk7Ci0gICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBz
eW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnKCc6Ci0gICAgICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGx0b2tlbjsKLSAgICB9Ci0gICAgcmV0dXJuIEVPRl9TWTsKLX0gLy8g
UmVhZFRva2VuCi0KLXR5cGVkZWYgc3RydWN0IFRva2VuSW5wdXRTcmMgewotICAgIElucHV0U3Jj
ICAgICAgICAgICAgYmFzZTsKLSAgICBUb2tlblN0cmVhbSAgICAgICAgICp0b2tlbnM7Ci0gICAg
aW50ICAgICAgICAgICAgICAgICAoKmZpbmFsKShDUFBTdHJ1Y3QgKik7Ci19IFRva2VuSW5wdXRT
cmM7Ci0KLXN0YXRpYyBpbnQgc2Nhbl90b2tlbihUb2tlbklucHV0U3JjICppbiwgeXlzdHlwZXBw
ICogeXlsdmFscHApCi17Ci0gICAgaW50IHRva2VuID0gUmVhZFRva2VuKGluLT50b2tlbnMsIHl5
bHZhbHBwKTsKLSAgICBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopOwotICAgIGNwcC0+dG9rZW5M
b2MtPmZpbGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICBjcHAtPnRva2VuTG9jLT5s
aW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Ci0gICAgaWYgKHRva2VuID09ICdcbicpIHsK
LSAgICAgICAgaW4tPmJhc2UubGluZSsrOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQot
ICAgIGlmICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9
IGluLT5iYXNlLnByZXY7Ci0gICAgZmluYWwgPSBpbi0+ZmluYWw7Ci0gICAgZnJlZShpbik7Ci0g
ICAgaWYgKGZpbmFsICYmICFmaW5hbChjcHApKSByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci19Ci0KLWlu
dCBSZWFkRnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICp0cywgaW50IG5hbWUsIGludCAoKmZp
bmFsKShDUFBTdHJ1Y3QgKikpCi17Ci0gICAgVG9rZW5JbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6
ZW9mKFRva2VuSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihUb2tlbklucHV0
U3JjKSk7Ci0gICAgaW4tPmJhc2UubmFtZSA9IG5hbWU7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNw
cC0+Y3VycmVudElucHV0OwotICAgIGluLT5iYXNlLnNjYW4gPSAoaW50ICgqKShJbnB1dFNyYyAq
LCB5eXN0eXBlcHAgKikpc2Nhbl90b2tlbjsKLSAgICBpbi0+YmFzZS5saW5lID0gMTsKLSAgICBp
bi0+dG9rZW5zID0gdHM7Ci0gICAgaW4tPmZpbmFsID0gZmluYWw7Ci0gICAgUmV3aW5kVG9rZW5T
dHJlYW0odHMpOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVy
biAxOwotfQotCi10eXBlZGVmIHN0cnVjdCBVbmdvdFRva2VuIHsKLSAgICBJbnB1dFNyYyAgICBi
YXNlOwotICAgIGludCAgICAgICAgIHRva2VuOwotICAgIHl5c3R5cGVwcCAgICAgbHZhbDsKLX0g
VW5nb3RUb2tlbjsKLQotc3RhdGljIGludCByZWdldF90b2tlbihVbmdvdFRva2VuICp0LCB5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4gPSB0LT50b2tlbjsKLSAgICAqeXls
dmFscHAgPSB0LT5sdmFsOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gdC0+YmFzZS5wcmV2Owot
ICAgIGZyZWUodCk7Ci0gICAgcmV0dXJuIHRva2VuOwotfQotCi12b2lkIFVuZ2V0VG9rZW4oaW50
IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAgIFVuZ290VG9rZW4gKnQgPSBtYWxs
b2Moc2l6ZW9mKFVuZ290VG9rZW4pKTsKLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKFVuZ290VG9r
ZW4pKTsKLSAgICB0LT50b2tlbiA9IHRva2VuOwotICAgIHQtPmx2YWwgPSAqeXlsdmFscHA7Ci0g
ICAgdC0+YmFzZS5zY2FuID0gKHZvaWQgKilyZWdldF90b2tlbjsKLSAgICB0LT5iYXNlLnByZXYg
PSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAgICB0LT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1
dC0+bmFtZTsKLSAgICB0LT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAg
ICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZ0LT5iYXNlOwotfQotCi0KLXZvaWQgRHVtcFRva2VuU3Ry
ZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAg
ICBpbnQgdG9rZW47Ci0gICAgY2hhciBzdHJbMTAwXTsKLQotICAgIGlmIChmcCA9PSAwKSBmcCA9
IHN0ZG91dDsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShzKTsKLSAgICB3aGlsZSAoKHRva2VuID0g
UmVhZFRva2VuKHMsIHl5bHZhbHBwKSkgPiAwKSB7Ci0gICAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5U
SUZJRVI6Ci0gICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICAgICAgc25wcmludGYo
c3RyLCBzaXplb2Yoc3RyKSwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxw
cC0+c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9GTE9B
VENPTlNUQU5UOgotICAgICAgICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19m
dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoK
LSAgICAgICAgICAgIC8vcHJpbnRmKCIlZCAiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHRva2VuID49IDEy
NykKLSAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9
Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHRva2Vucy5jIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkYmY0YTJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCww
IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMg
c29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0
aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRl
cyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRo
ZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0
byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2
ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5W
SURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNl
LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3
aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJv
dmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBt
dXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0
cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFk
ZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhl
Ci1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGlj
ZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBn
cmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFu
eSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUK
LXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5
IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0K
LVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJ
UywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5E
IE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJP
RFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5Z
IFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBE
SVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBX
SEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotLy8KLS8vIHRva2Vucy5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19UT0tF
TlNfSCkKLSNkZWZpbmUgX19UT0tFTlNfSCAxCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKLQotI2RlZmluZSBFT0ZfU1kgKC0x
KQotCi10eXBlZGVmIHN0cnVjdCBUb2tlbkJsb2NrX1JlYyBUb2tlbkJsb2NrOwotCi10eXBlZGVm
IHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgewotICAgIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgKm5l
eHQ7Ci0gICAgY2hhciAqbmFtZTsKLSAgICBUb2tlbkJsb2NrICpoZWFkOwotICAgIFRva2VuQmxv
Y2sgKmN1cnJlbnQ7Ci19IFRva2VuU3RyZWFtOwotCi1zdHJ1Y3QgVG9rZW5CbG9ja19SZWMgewot
ICAgIFRva2VuQmxvY2sgKm5leHQ7Ci0gICAgaW50IGN1cnJlbnQ7Ci0gICAgaW50IGNvdW50Owot
ICAgIGludCBtYXg7Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLX07Ci0KLWV4dGVybiBUb2tl
blN0cmVhbSBzdGRsaWJfY3BwX3N0cmVhbTsKLQotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJl
YW0oY29uc3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCk7Ci12b2lkIERlbGV0ZVRva2Vu
U3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsgCi12b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFt
ICpwVG9rLCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLXZvaWQgUmV3aW5kVG9r
ZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spOwotaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAq
cFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApOwotaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9r
ZW5TdHJlYW0gKnBUb2ssIGludCBuYW1lLCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKTsKLXZv
aWQgVW5nZXRUb2tlbihpbnQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLQotI2lmIGRlZmluZWQo
Q1BQQ19FTkFCTEVfVE9PTFMpCi0KLXZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKiwgVG9rZW5T
dHJlYW0gKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0jZW5kaWYgLy8gZGVmaW5lZChDUFBD
X0VOQUJMRV9UT09MUykKLQotI2VuZGlmIC8vICFkZWZpbmVkKF9fVE9LRU5TX0gpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg5YmM4ZDguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzk5ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbmZpZy5jcHA6IEltcGxlbWVudHMgdGhlIGVn
bDo6Q29uZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRoZSBmb3JtYXQsIHR5cGUKLS8vIGFuZCBzaXpl
IGZvciBhbiBlZ2w6OlN1cmZhY2UuIEltcGxlbWVudHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuCi0vLyBbRUdMIDEuNF0gc2VjdGlvbiAzLjQgcGFnZSAxNS4KLQotI2luY2x1
ZGUgImxpYkVHTC9Db25maWcuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx2
ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQotbmFtZXNwYWNlIGVnbAotewotQ29uZmlnOjpDb25maWcoRDNERElTUExBWU1PREUgZGlz
cGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVydmFsLCBEM0RGT1JN
QVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xp
bnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdodCkKLSAgICA6
IG1EaXNwbGF5TW9kZShkaXNwbGF5TW9kZSksIG1SZW5kZXJUYXJnZXRGb3JtYXQocmVuZGVyVGFy
Z2V0Rm9ybWF0KSwgbURlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpLCBtTXVs
dGlTYW1wbGUobXVsdGlTYW1wbGUpCi17Ci0gICAgc2V0KGRpc3BsYXlNb2RlLCBtaW5JbnRlcnZh
bCwgbWF4SW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBt
dWx0aVNhbXBsZSwgdGV4V2lkdGgsIHRleEhlaWdodCk7Ci19Ci0KLXZvaWQgQ29uZmlnOjpzZXRE
ZWZhdWx0cygpCi17Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAgIG1SZWRTaXplID0gMDsKLSAg
ICBtR3JlZW5TaXplID0gMDsKLSAgICBtQmx1ZVNpemUgPSAwOwotICAgIG1MdW1pbmFuY2VTaXpl
ID0gMDsKLSAgICBtQWxwaGFTaXplID0gMDsKLSAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7Ci0gICAg
bUJpbmRUb1RleHR1cmVSR0IgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1CaW5kVG9UZXh0dXJlUkdC
QSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbUNvbG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVS
OwotICAgIG1Db25maWdDYXZlYXQgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1Db25maWdJRCA9IEVH
TF9ET05UX0NBUkU7Ci0gICAgbUNvbmZvcm1hbnQgPSAwOwotICAgIG1EZXB0aFNpemUgPSAwOwot
ICAgIG1MZXZlbCA9IDA7Ci0gICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7Ci0gICAg
bU1heFBCdWZmZXJXaWR0aCA9IDA7Ci0gICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOwotICAgIG1N
YXhQQnVmZmVyUGl4ZWxzID0gMDsKLSAgICBtTWF4U3dhcEludGVydmFsID0gRUdMX0RPTlRfQ0FS
RTsKLSAgICBtTWluU3dhcEludGVydmFsID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtTmF0aXZlUmVu
ZGVyYWJsZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbU5hdGl2ZVZpc3VhbElEID0gMDsKLSAgICBt
TmF0aXZlVmlzdWFsVHlwZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbVJlbmRlcmFibGVUeXBlID0g
RUdMX09QRU5HTF9FU19CSVQ7Ci0gICAgbVNhbXBsZUJ1ZmZlcnMgPSAwOwotICAgIG1TYW1wbGVz
ID0gMDsKLSAgICBtU3RlbmNpbFNpemUgPSAwOwotICAgIG1TdXJmYWNlVHlwZSA9IEVHTF9XSU5E
T1dfQklUOwotICAgIG1UcmFuc3BhcmVudFR5cGUgPSBFR0xfTk9ORTsKLSAgICBtVHJhbnNwYXJl
bnRSZWRWYWx1ZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9
IEVHTF9ET05UX0NBUkU7Ci0gICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gRUdMX0RPTlRfQ0FS
RTsKLX0KLQotdm9pZCBDb25maWc6OnNldChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdM
aW50IG1pbkludGVydmFsLCBFR0xpbnQgbWF4SW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJn
ZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBs
ZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KQotewotICAgIG1CaW5kVG9UZXh0
dXJlUkdCID0gRUdMX0ZBTFNFOwotICAgIG1CaW5kVG9UZXh0dXJlUkdCQSA9IEVHTF9GQUxTRTsK
LSAgICBzd2l0Y2ggKHJlbmRlclRhcmdldEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZN
VF9BMVI1RzVCNToKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKLSAgICAgICAgbVJlZFNpemUg
PSA1OwotICAgICAgICBtR3JlZW5TaXplID0gNTsKLSAgICAgICAgbUJsdWVTaXplID0gNTsKLSAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRf
QTJSMTBHMTBCMTA6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMzI7Ci0gICAgICAgIG1SZWRTaXpl
ID0gMTA7Ci0gICAgICAgIG1HcmVlblNpemUgPSAxMDsKLSAgICAgICAgbUJsdWVTaXplID0gMTA7
Ci0gICAgICAgIG1BbHBoYVNpemUgPSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwotICAgICAgICBtUmVkU2l6
ZSA9IDg7Ci0gICAgICAgIG1HcmVlblNpemUgPSA4OwotICAgICAgICBtQmx1ZVNpemUgPSA4Owot
ICAgICAgICBtQWxwaGFTaXplID0gODsKLSAgICAgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIG1C
dWZmZXJTaXplID0gMTY7Ci0gICAgICAgIG1SZWRTaXplID0gNTsKLSAgICAgICAgbUdyZWVuU2l6
ZSA9IDY7Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDU7Ci0gICAgICAgIG1BbHBoYVNpemUgPSAwOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICBtQnVm
ZmVyU2l6ZSA9IDMyOwotICAgICAgICBtUmVkU2l6ZSA9IDg7Ci0gICAgICAgIG1HcmVlblNpemUg
PSA4OwotICAgICAgICBtQmx1ZVNpemUgPSA4OwotICAgICAgICBtQWxwaGFTaXplID0gMDsKLSAg
ICAgICAgbUJpbmRUb1RleHR1cmVSR0IgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3RoZXIgZm9ybWF0cyBzaG91bGQg
bm90IGJlIHZhbGlkCi0gICAgfQotCi0gICAgbUx1bWluYW5jZVNpemUgPSAwOwotICAgIG1BbHBo
YU1hc2tTaXplID0gMDsKLSAgICBtQ29sb3JCdWZmZXJUeXBlID0gRUdMX1JHQl9CVUZGRVI7Ci0g
ICAgbUNvbmZpZ0NhdmVhdCA9IChkaXNwbGF5TW9kZS5Gb3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9y
bWF0KSA/IEVHTF9OT05FIDogRUdMX1NMT1dfQ09ORklHOwotICAgIG1Db25maWdJRCA9IDA7Ci0g
ICAgbUNvbmZvcm1hbnQgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7Ci0KLSAgICBzd2l0Y2ggKGRlcHRo
U3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAg
ICBtRGVwdGhTaXplID0gMDsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0vLyAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0vLyAgICAgIG1EZXB0aFNpemUg
PSAxNjsKLS8vICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLS8vICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEQzREZNVF9EMzI6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAzMjsKLSAgICAgICAgbVN0ZW5j
aWxTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAg
ICAgICAgbURlcHRoU2l6ZSA9IDE1OwotICAgICAgICBtU3RlbmNpbFNpemUgPSAxOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICBtRGVwdGhTaXplID0g
MjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAyNDsKLSAgICAgICAgbVN0ZW5j
aWxTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0Ogot
ICAgICAgICBtRGVwdGhTaXplID0gMjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgICBtRGVwdGhTaXplID0g
MTY7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotLy8gICAgY2Fz
ZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKLS8vICAgICAgbURlcHRoU2l6ZSA9IDMyOwotLy8gICAg
ICBtU3RlbmNpbFNpemUgPSAwOwotLy8gICAgICBicmVhazsKLS8vICAgIGNhc2UgRDNERk1UX0Qy
NEZTODoKLS8vICAgICAgbURlcHRoU2l6ZSA9IDI0OwotLy8gICAgICBtU3RlbmNpbFNpemUgPSA4
OwotLy8gICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgbUxldmVsID0gMDsKLSAgICBtTWF0Y2hOYXRpdmVQaXhtYXAgPSBFR0xf
Tk9ORTsKLSAgICBtTWF4UEJ1ZmZlcldpZHRoID0gdGV4V2lkdGg7Ci0gICAgbU1heFBCdWZmZXJI
ZWlnaHQgPSB0ZXhIZWlnaHQ7Ci0gICAgbU1heFBCdWZmZXJQaXhlbHMgPSB0ZXhXaWR0aCp0ZXhI
ZWlnaHQ7Ci0gICAgbU1heFN3YXBJbnRlcnZhbCA9IG1heEludGVydmFsOwotICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSBtaW5JbnRlcnZhbDsKLSAgICBtTmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9GQUxT
RTsKLSAgICBtTmF0aXZlVmlzdWFsSUQgPSAwOwotICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gMDsK
LSAgICBtUmVuZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7Ci0gICAgbVNhbXBsZUJ1
ZmZlcnMgPSBtdWx0aVNhbXBsZSA/IDEgOiAwOwotICAgIG1TYW1wbGVzID0gbXVsdGlTYW1wbGU7
Ci0gICAgbVN1cmZhY2VUeXBlID0gRUdMX1BCVUZGRVJfQklUIHwgRUdMX1dJTkRPV19CSVQgfCBF
R0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUOwotICAgIG1UcmFuc3BhcmVudFR5cGUgPSBF
R0xfTk9ORTsKLSAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7Ci0gICAgbVRyYW5zcGFyZW50
R3JlZW5WYWx1ZSA9IDA7Ci0gICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gMDsKLX0KLQotRUdM
Q29uZmlnIENvbmZpZzo6Z2V0SGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKEVHTENvbmZp
Zykoc2l6ZV90KW1Db25maWdJRDsKLX0KLQotU29ydENvbmZpZzo6U29ydENvbmZpZyhjb25zdCBF
R0xpbnQgKmF0dHJpYkxpc3QpCi0gICAgOiBtV2FudFJlZChmYWxzZSksIG1XYW50R3JlZW4oZmFs
c2UpLCBtV2FudEJsdWUoZmFsc2UpLCBtV2FudEFscGhhKGZhbHNlKSwgbVdhbnRMdW1pbmFuY2Uo
ZmFsc2UpCi17Ci0gICAgc2NhbkZvcldhbnRlZENvbXBvbmVudHMoYXR0cmliTGlzdCk7Ci19Ci0K
LXZvaWQgU29ydENvbmZpZzo6c2NhbkZvcldhbnRlZENvbXBvbmVudHMoY29uc3QgRUdMaW50ICph
dHRyaWJMaXN0KQotewotICAgIC8vIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNAotICAgIC8v
IFNvcnRpbmcgcnVsZSAjMzogYnkgbGFyZ2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBu
b3QgY29uc2lkZXJpbmcKLSAgICAvLyBjb21wb25lbnRzIHRoYXQgYXJlIDAgb3IgZG9uJ3QtY2Fy
ZS4KLSAgICBmb3IgKGNvbnN0IEVHTGludCAqYXR0ciA9IGF0dHJpYkxpc3Q7IGF0dHJbMF0gIT0g
RUdMX05PTkU7IGF0dHIgKz0gMikKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyWzFdICE9IDAgJiYg
YXR0clsxXSAhPSBFR0xfRE9OVF9DQVJFKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGF0dHJbMF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpF
OiAgICAgICBtV2FudFJlZCA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9H
UkVFTl9TSVpFOiAgICAgbVdhbnRHcmVlbiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgbVdhbnRCbHVlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICBtV2FudEFscGhhID0gdHJ1ZTsgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiBtV2FudEx1bWluYW5jZSA9
IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1FR0xp
bnQgU29ydENvbmZpZzo6d2FudGVkQ29tcG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcp
IGNvbnN0Ci17Ci0gICAgRUdMaW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtV2FudFJlZCkgICAg
ICAgdG90YWwgKz0gY29uZmlnLm1SZWRTaXplOwotICAgIGlmIChtV2FudEdyZWVuKSAgICAgdG90
YWwgKz0gY29uZmlnLm1HcmVlblNpemU7Ci0gICAgaWYgKG1XYW50Qmx1ZSkgICAgICB0b3RhbCAr
PSBjb25maWcubUJsdWVTaXplOwotICAgIGlmIChtV2FudEFscGhhKSAgICAgdG90YWwgKz0gY29u
ZmlnLm1BbHBoYVNpemU7Ci0gICAgaWYgKG1XYW50THVtaW5hbmNlKSB0b3RhbCArPSBjb25maWcu
bUx1bWluYW5jZVNpemU7Ci0KLSAgICByZXR1cm4gdG90YWw7Ci19Ci0KLWJvb2wgU29ydENvbmZp
Zzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0IENvbmZpZyAqeSkgY29uc3QKLXsK
LSAgICByZXR1cm4gKCp0aGlzKSgqeCwgKnkpOwotfQotCi1ib29sIFNvcnRDb25maWc6Om9wZXJh
dG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBDb25maWcgJnkpIGNvbnN0Ci17Ci0gICAgI2Rl
ZmluZSBTT1JUKGF0dHJpYnV0ZSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
ICh4LmF0dHJpYnV0ZSAhPSB5LmF0dHJpYnV0ZSkgICAgICAgICAgICBcCi0gICAgICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXR1
cm4geC5hdHRyaWJ1dGUgPCB5LmF0dHJpYnV0ZTsgICAgICBcCi0gICAgICAgIH0KLQotICAgIE1F
VEFfQVNTRVJUKEVHTF9OT05FIDwgRUdMX1NMT1dfQ09ORklHICYmIEVHTF9TTE9XX0NPTkZJRyA8
IEVHTF9OT05fQ09ORk9STUFOVF9DT05GSUcpOwotICAgIFNPUlQobUNvbmZpZ0NhdmVhdCk7Ci0K
LSAgICBNRVRBX0FTU0VSVChFR0xfUkdCX0JVRkZFUiA8IEVHTF9MVU1JTkFOQ0VfQlVGRkVSKTsK
LSAgICBTT1JUKG1Db2xvckJ1ZmZlclR5cGUpOwotCi0gICAgLy8gQnkgbGFyZ2VyIHRvdGFsIG51
bWJlciBvZiBjb2xvciBiaXRzLCBvbmx5IGNvbnNpZGVyaW5nIHRob3NlIHRoYXQgYXJlIHJlcXVl
c3RlZCB0byBiZSA+IDAuCi0gICAgRUdMaW50IHhDb21wb25lbnRzU2l6ZSA9IHdhbnRlZENvbXBv
bmVudHNTaXplKHgpOwotICAgIEVHTGludCB5Q29tcG9uZW50c1NpemUgPSB3YW50ZWRDb21wb25l
bnRzU2l6ZSh5KTsKLSAgICBpZiAoeENvbXBvbmVudHNTaXplICE9IHlDb21wb25lbnRzU2l6ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB4Q29tcG9uZW50c1NpemUgPiB5Q29tcG9uZW50c1NpemU7
Ci0gICAgfQotCi0gICAgU09SVChtQnVmZmVyU2l6ZSk7Ci0gICAgU09SVChtU2FtcGxlQnVmZmVy
cyk7Ci0gICAgU09SVChtU2FtcGxlcyk7Ci0gICAgU09SVChtRGVwdGhTaXplKTsKLSAgICBTT1JU
KG1TdGVuY2lsU2l6ZSk7Ci0gICAgU09SVChtQWxwaGFNYXNrU2l6ZSk7Ci0gICAgU09SVChtTmF0
aXZlVmlzdWFsVHlwZSk7Ci0gICAgU09SVChtQ29uZmlnSUQpOwotCi0gICAgI3VuZGVmIFNPUlQK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gV2UnZCBsaWtlIHRvIHVzZSBTb3J0Q29uZmln
IHRvIGFsc28gZWxpbWluYXRlIGR1cGxpY2F0ZSBjb25maWdzLgotLy8gVGhpcyB3b3JrcyBhcyBs
b25nIGFzIHdlIG5ldmVyIGhhdmUgdHdvIGNvbmZpZ3Mgd2l0aCBkaWZmZXJlbnQgcGVyLVJHQi1j
b21wb25lbnQgbGF5b3V0cywKLS8vIGJ1dCB0aGUgc2FtZSB0b3RhbC4KLS8vIDU1NTEgYW5kIDU2
NSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgUitHK0IgaXMgZGlmZmVyZW50LgotLy8gNTU1MSBhbmQg
NTU1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBidWZmZXJTaXplIGlzIGRpZmZlcmVudC4KLWNvbnN0
IEVHTGludCBDb25maWdTZXQ6Om1Tb3J0QXR0cmlic1tdID0KLXsKLSAgICBFR0xfUkVEX1NJWkUs
IDEsCi0gICAgRUdMX0dSRUVOX1NJWkUsIDEsCi0gICAgRUdMX0JMVUVfU0laRSwgMSwKLSAgICBF
R0xfTFVNSU5BTkNFX1NJWkUsIDEsCi0gICAgLy8gQlVUIE5PVCBBTFBIQQotICAgIEVHTF9OT05F
Ci19OwotCi1Db25maWdTZXQ6OkNvbmZpZ1NldCgpCi0gICAgOiBtU2V0KFNvcnRDb25maWcobVNv
cnRBdHRyaWJzKSkKLXsKLX0KLQotdm9pZCBDb25maWdTZXQ6OmFkZChEM0RESVNQTEFZTU9ERSBk
aXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZh
bCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZv
cm1hdCwgRUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWln
aHQpCi17Ci0gICAgQ29uZmlnIGNvbmZpZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBt
YXhTd2FwSW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBt
dWx0aVNhbXBsZSwgdGV4V2lkdGgsIHRleEhlaWdodCk7Ci0KLSAgICBtU2V0Lmluc2VydChjb25m
aWcpOwotfQotCi1zaXplX3QgQ29uZmlnU2V0OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVNldC5zaXplKCk7Ci19Ci0KLWJvb2wgQ29uZmlnU2V0OjpnZXRDb25maWdzKEVHTENvbmZpZyAq
Y29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdM
aW50ICpudW1Db25maWcpCi17Ci0gICAgdmVjdG9yPGNvbnN0IENvbmZpZyo+IHBhc3NlZDsKLSAg
ICBwYXNzZWQucmVzZXJ2ZShtU2V0LnNpemUoKSk7Ci0KLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZp
ZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsK
LSAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7Ci0gICAgICAgIGNvbnN0IEVHTGludCAqYXR0cmli
dXRlID0gYXR0cmliTGlzdDsKLQotICAgICAgICB3aGlsZSAoYXR0cmlidXRlWzBdICE9IEVHTF9O
T05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVswXSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1CdWZmZXJTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAg
ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFTaXplID49IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVF
X1NJWkU6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUJsdWVTaXplID49IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1HcmVlblNp
emUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmln
LT5tUmVkU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICBtYXRj
aCA9IGNvbmZpZy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU1RFTkNJTF9TSVpFOiAgICAgICAg
ICAgICAgbWF0Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZF
QVQ6ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29uZmlnQ2F2ZWF0ID09IChFR0xlbnVt
KSBhdHRyaWJ1dGVbMV07ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9D
T05GSUdfSUQ6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNvbmZpZ0lEID09IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MZXZl
bCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tTmF0aXZlUmVuZGVyYWJsZSA9PSAoRUdMQm9vbGVhbikgYXR0cmlidXRlWzFdOyAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICBt
YXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU0FNUExFUzogICAgICAgICAg
ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49IGF0dHJpYnV0ZVsxXTsgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1NBTVBMRV9C
VUZGRVJTOiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxlQnVmZmVycyA+PSBhdHRy
aWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVH
TF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1TdXJmYWNlVHlw
ZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1U
cmFuc3BhcmVudFR5cGUgPT0gKEVHTGVudW0pIGF0dHJpYnV0ZVsxXTsgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgIG1hdGNoID0g
Y29uZmlnLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTog
ICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfUkVE
X1ZBTFVFOiAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFJlZFZhbHVlID09IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0JJTkRf
VE9fVEVYVFVSRV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmlnLT5tQmluZFRvVGV4dHVyZVJHQiA9
PSAoRUdMQm9vbGVhbikgYXR0cmlidXRlWzFdOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRjaCA9IGNvbmZpZy0+bUJpbmRUb1Rl
eHR1cmVSR0JBID09IChFR0xCb29sZWFuKSBhdHRyaWJ1dGVbMV07ICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAgICAgICAgbWF0Y2ggPSBjb25maWct
Pm1NaW5Td2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFMOiAgICAgICAgIG1hdGNo
ID0gY29uZmlnLT5tTWF4U3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAg
ICAgICBtYXRjaCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfTUFTS19T
SVpFOiAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBoYU1hc2tTaXplID49IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NP
TE9SX0JVRkZFUl9UWVBFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29sb3JCdWZmZXJUeXBl
ID09IChFR0xlbnVtKSBhdHRyaWJ1dGVbMV07ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1SZW5k
ZXJhYmxlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAgbWF0Y2ggPSBmYWxz
ZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgIG1h
dGNoID0gKGNvbmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsx
XTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9XSURUSDog
ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU1heFBCdWZmZXJXaWR0aCA+PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTUFYX1BCVUZG
RVJfSEVJR0hUOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NYXhQQnVmZmVySGVpZ2h0ID49IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdM
X01BWF9QQlVGRkVSX1BJWEVMUzogICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4UEJ1ZmZlclBp
eGVscyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCFtYXRjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBh
c3NlZC5wdXNoX2JhY2soJipjb25maWcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNv
bmZpZ3MpCi0gICAgewotICAgICAgICBzb3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCks
IFNvcnRDb25maWcoYXR0cmliTGlzdCkpOwotCi0gICAgICAgIEVHTGludCBpbmRleDsKLSAgICAg
ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19j
YXN0PEVHTGludD4ocGFzc2VkLnNpemUoKSk7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbmZpZ3NbaW5kZXhdID0gcGFzc2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAqbnVtQ29uZmlnID0gaW5kZXg7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgICpudW1Db25maWcgPSBwYXNzZWQuc2l6ZSgpOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1jb25zdCBlZ2w6OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmln
IGNvbmZpZ0hhbmRsZSkKLXsKLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4o
KTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsKLSAgICAgICAgaWYgKGNv
bmZpZy0+Z2V0SGFuZGxlKCkgPT0gY29uZmlnSGFuZGxlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gJigqY29uZmlnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxM
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9D
b25maWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NjI2ZWQuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAorKysgL2Rldi9udWxsCkBAIC0x
LDExOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBDb25maWcuaDogRGVmaW5lcyB0
aGUgZWdsOjpDb25maWcgY2xhc3MsIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCwgdHlwZQotLy8gYW5k
IHNpemUgZm9yIGFuIGVnbDo6U3VyZmFjZS4gSW1wbGVtZW50cyBFR0xDb25maWcgYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDMuNCBwYWdlIDE1LgotCi0j
aWZuZGVmIElOQ0xVREVfQ09ORklHX0hfCi0jZGVmaW5lIElOQ0xVREVfQ09ORklHX0hfCi0KLSNk
ZWZpbmUgRUdMQVBJCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQot
I2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVz
cGFjZSBlZ2wKLXsKLWNsYXNzIERpc3BsYXk7Ci0KLWNsYXNzIENvbmZpZwotewotICBwdWJsaWM6
Ci0gICAgQ29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcElu
dGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9y
bWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVH
TGludCB0ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdodCk7Ci0KLSAgICB2b2lkIHNldERlZmF1bHRz
KCk7Ci0gICAgdm9pZCBzZXQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5T
d2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJn
ZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBs
ZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KTsKLSAgICBFR0xDb25maWcgZ2V0
SGFuZGxlKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBEM0RESVNQTEFZTU9ERSBtRGlzcGxheU1vZGU7
Ci0gICAgY29uc3QgRDNERk9STUFUIG1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgY29uc3QgRDNE
Rk9STUFUIG1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgY29uc3QgRUdMaW50IG1NdWx0aVNhbXBs
ZTsKLQotICAgIEVHTGludCBtQnVmZmVyU2l6ZTsgICAgICAgICAgICAgIC8vIERlcHRoIG9mIHRo
ZSBjb2xvciBidWZmZXIKLSAgICBFR0xpbnQgbVJlZFNpemU7ICAgICAgICAgICAgICAgICAvLyBC
aXRzIG9mIFJlZCBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1HcmVlblNpemU7ICAg
ICAgICAgICAgICAgLy8gQml0cyBvZiBHcmVlbiBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdM
aW50IG1CbHVlU2l6ZTsgICAgICAgICAgICAgICAgLy8gQml0cyBvZiBCbHVlIGluIHRoZSBjb2xv
ciBidWZmZXIKLSAgICBFR0xpbnQgbUx1bWluYW5jZVNpemU7ICAgICAgICAgICAvLyBCaXRzIG9m
IEx1bWluYW5jZSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1BbHBoYVNpemU7ICAg
ICAgICAgICAgICAgLy8gQml0cyBvZiBBbHBoYSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdM
aW50IG1BbHBoYU1hc2tTaXplOyAgICAgICAgICAgLy8gQml0cyBvZiBBbHBoYSBNYXNrIGluIHRo
ZSBtYXNrIGJ1ZmZlcgotICAgIEVHTEJvb2xlYW4gbUJpbmRUb1RleHR1cmVSR0I7ICAgIC8vIFRy
dWUgaWYgYmluZGFibGUgdG8gUkdCIHRleHR1cmVzLgotICAgIEVHTEJvb2xlYW4gbUJpbmRUb1Rl
eHR1cmVSR0JBOyAgIC8vIFRydWUgaWYgYmluZGFibGUgdG8gUkdCQSB0ZXh0dXJlcy4KLSAgICBF
R0xlbnVtIG1Db2xvckJ1ZmZlclR5cGU7ICAgICAgICAvLyBDb2xvciBidWZmZXIgdHlwZQotICAg
IEVHTGVudW0gbUNvbmZpZ0NhdmVhdDsgICAgICAgICAgIC8vIEFueSBjYXZlYXRzIGZvciB0aGUg
Y29uZmlndXJhdGlvbgotICAgIEVHTGludCBtQ29uZmlnSUQ7ICAgICAgICAgICAgICAgIC8vIFVu
aXF1ZSBFR0xDb25maWcgaWRlbnRpZmllcgotICAgIEVHTGludCBtQ29uZm9ybWFudDsgICAgICAg
ICAgICAgIC8vIFdoZXRoZXIgY29udGV4dHMgY3JlYXRlZCB3aXRoIHRoaXMgY29uZmlnIGFyZSBj
b25mb3JtYW50Ci0gICAgRUdMaW50IG1EZXB0aFNpemU7ICAgICAgICAgICAgICAgLy8gQml0cyBv
ZiBaIGluIHRoZSBkZXB0aCBidWZmZXIKLSAgICBFR0xpbnQgbUxldmVsOyAgICAgICAgICAgICAg
ICAgICAvLyBGcmFtZSBidWZmZXIgbGV2ZWwKLSAgICBFR0xCb29sZWFuIG1NYXRjaE5hdGl2ZVBp
eG1hcDsgICAvLyBNYXRjaCB0aGUgbmF0aXZlIHBpeG1hcCBmb3JtYXQKLSAgICBFR0xpbnQgbU1h
eFBCdWZmZXJXaWR0aDsgICAgICAgICAvLyBNYXhpbXVtIHdpZHRoIG9mIHBidWZmZXIKLSAgICBF
R0xpbnQgbU1heFBCdWZmZXJIZWlnaHQ7ICAgICAgICAvLyBNYXhpbXVtIGhlaWdodCBvZiBwYnVm
ZmVyCi0gICAgRUdMaW50IG1NYXhQQnVmZmVyUGl4ZWxzOyAgICAgICAgLy8gTWF4aW11bSBzaXpl
IG9mIHBidWZmZXIKLSAgICBFR0xpbnQgbU1heFN3YXBJbnRlcnZhbDsgICAgICAgICAvLyBNYXhp
bXVtIHN3YXAgaW50ZXJ2YWwKLSAgICBFR0xpbnQgbU1pblN3YXBJbnRlcnZhbDsgICAgICAgICAv
LyBNaW5pbXVtIHN3YXAgaW50ZXJ2YWwKLSAgICBFR0xCb29sZWFuIG1OYXRpdmVSZW5kZXJhYmxl
OyAgICAvLyBFR0xfVFJVRSBpZiBuYXRpdmUgcmVuZGVyaW5nIEFQSXMgY2FuIHJlbmRlciB0byBz
dXJmYWNlCi0gICAgRUdMaW50IG1OYXRpdmVWaXN1YWxJRDsgICAgICAgICAgLy8gSGFuZGxlIG9m
IGNvcnJlc3BvbmRpbmcgbmF0aXZlIHZpc3VhbAotICAgIEVHTGludCBtTmF0aXZlVmlzdWFsVHlw
ZTsgICAgICAgIC8vIE5hdGl2ZSB2aXN1YWwgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2aXN1YWwK
LSAgICBFR0xpbnQgbVJlbmRlcmFibGVUeXBlOyAgICAgICAgICAvLyBXaGljaCBjbGllbnQgcmVu
ZGVyaW5nIEFQSXMgYXJlIHN1cHBvcnRlZC4KLSAgICBFR0xpbnQgbVNhbXBsZUJ1ZmZlcnM7ICAg
ICAgICAgICAvLyBOdW1iZXIgb2YgbXVsdGlzYW1wbGUgYnVmZmVycwotICAgIEVHTGludCBtU2Ft
cGxlczsgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBzYW1wbGVzIHBlciBwaXhlbAotICAg
IEVHTGludCBtU3RlbmNpbFNpemU7ICAgICAgICAgICAgIC8vIEJpdHMgb2YgU3RlbmNpbCBpbiB0
aGUgc3RlbmNpbCBidWZmZXIKLSAgICBFR0xpbnQgbVN1cmZhY2VUeXBlOyAgICAgICAgICAgICAv
LyBXaGljaCB0eXBlcyBvZiBFR0wgc3VyZmFjZXMgYXJlIHN1cHBvcnRlZC4KLSAgICBFR0xlbnVt
IG1UcmFuc3BhcmVudFR5cGU7ICAgICAgICAvLyBUeXBlIG9mIHRyYW5zcGFyZW5jeSBzdXBwb3J0
ZWQKLSAgICBFR0xpbnQgbVRyYW5zcGFyZW50UmVkVmFsdWU7ICAgICAvLyBUcmFuc3BhcmVudCBy
ZWQgdmFsdWUKLSAgICBFR0xpbnQgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZTsgICAvLyBUcmFuc3Bh
cmVudCBncmVlbiB2YWx1ZQotICAgIEVHTGludCBtVHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgIC8v
IFRyYW5zcGFyZW50IGJsdWUgdmFsdWUKLX07Ci0KLS8vIEZ1bmN0aW9uIG9iamVjdCB1c2VkIGJ5
IFNUTCBzb3J0aW5nIHJvdXRpbmVzIGZvciBvcmRlcmluZyBDb25maWdzIGFjY29yZGluZyB0byBb
RUdMXSBzZWN0aW9uIDMuNC4xIHBhZ2UgMjQuCi1jbGFzcyBTb3J0Q29uZmlnCi17Ci0gIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBTb3J0Q29uZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0K
LSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICp4LCBjb25zdCBDb25maWcgKnkpIGNv
bnN0OwotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAm
eSkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICB2b2lkIHNjYW5Gb3JXYW50ZWRDb21wb25lbnRz
KGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMaW50IHdhbnRlZENvbXBvbmVudHNT
aXplKGNvbnN0IENvbmZpZyAmY29uZmlnKSBjb25zdDsKLQotICAgIGJvb2wgbVdhbnRSZWQ7Ci0g
ICAgYm9vbCBtV2FudEdyZWVuOwotICAgIGJvb2wgbVdhbnRCbHVlOwotICAgIGJvb2wgbVdhbnRB
bHBoYTsKLSAgICBib29sIG1XYW50THVtaW5hbmNlOwotfTsKLQotY2xhc3MgQ29uZmlnU2V0Ci17
Ci0gICAgZnJpZW5kIERpc3BsYXk7Ci0KLSAgcHVibGljOgotICAgIENvbmZpZ1NldCgpOwotCi0g
ICAgdm9pZCBhZGQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50
ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3Jt
YXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdM
aW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
OwotICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAq
YXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKTsKLSAgICBj
b25zdCBlZ2w6OkNvbmZpZyAqZ2V0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmZpZ1NldCk7Ci0KLSAgICB0eXBl
ZGVmIHN0ZDo6c2V0PENvbmZpZywgU29ydENvbmZpZz4gU2V0OwotICAgIHR5cGVkZWYgU2V0Ojpp
dGVyYXRvciBJdGVyYXRvcjsKLSAgICBTZXQgbVNldDsKLQotICAgIHN0YXRpYyBjb25zdCBFR0xp
bnQgbVNvcnRBdHRyaWJzW107Ci19OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0NPTkZJR19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYzBiOTMuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEyNTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRGlzcGxheS5jcHA6IElt
cGxlbWVudHMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFj
dAotLy8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdM
RGlzcGxheS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KLQotI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWFw
PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0KLS8vIENhbiBhbHNvIGJlIGVuYWJsZWQg
YnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2plY3QncyBwcmVkZWZpbmVkIG1h
Y3JvcwotI2RlZmluZSBSRUZfUkFTVCAwCi0KLS8vIFRoZSAiRGVidWcgVGhpcyBQaXhlbC4uLiIg
ZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0aGUKLS8vIEQzRDlFeCBpbnRl
cmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRvIHdvcmsgb24gYSBWaXN0YS9X
aW4gNwotLy8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVfRDNEOUVYPTAiIGluIHlvdXIg
cHJvamVjdCBmaWxlLgotI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgpCi0vLyBFbmFi
bGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwgd2hlbiBhdmFpbGFibGUKLSNk
ZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCi0jZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5B
QkxFX0QzRDlFWCkKLQotbmFtZXNwYWNlIGVnbAotewotbmFtZXNwYWNlCi17Ci0gICAgdHlwZWRl
ZiBzdGQ6Om1hcDxFR0xOYXRpdmVEaXNwbGF5VHlwZSwgRGlzcGxheSo+IERpc3BsYXlNYXA7IAot
ICAgIERpc3BsYXlNYXAgZGlzcGxheXM7Ci19Ci0KLWVnbDo6RGlzcGxheSAqRGlzcGxheTo6Z2V0
RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5SWQpCi17Ci0gICAgaWYgKGRpc3Bs
YXlzLmZpbmQoZGlzcGxheUlkKSAhPSBkaXNwbGF5cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBkaXNwbGF5c1tkaXNwbGF5SWRdOwotICAgIH0KLQotICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IE5VTEw7Ci0KLSAgICBpZiAoZGlzcGxheUlkID09IEVHTF9ERUZBVUxUX0RJU1BMQVkp
Ci0gICAgewotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6RGlzcGxheShkaXNwbGF5SWQsIChI
REMpTlVMTCwgZmFsc2UpOwotICAgIH0KLSAgICBlbHNlIGlmIChkaXNwbGF5SWQgPT0gRUdMX1NP
RlRXQVJFX0RJU1BMQVlfQU5HTEUpCi0gICAgewotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6
RGlzcGxheShkaXNwbGF5SWQsIChIREMpTlVMTCwgdHJ1ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDaGVjayBpZiBkaXNwbGF5SWQgaXMgYSB2YWxpZCBkaXNw
bGF5IGRldmljZSBjb250ZXh0Ci0KLSAgICAgICAgZGlzcGxheSA9IG5ldyBlZ2w6OkRpc3BsYXko
ZGlzcGxheUlkLCAoSERDKWRpc3BsYXlJZCwgZmFsc2UpOwotICAgIH0KLQotICAgIGRpc3BsYXlz
W2Rpc3BsYXlJZF0gPSBkaXNwbGF5OwotICAgIHJldHVybiBkaXNwbGF5OwotfQotCi1EaXNwbGF5
OjpEaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCwgSERDIGRldmljZUNvbnRl
eHQsIGJvb2wgc29mdHdhcmUpIDogbURjKGRldmljZUNvbnRleHQpCi17Ci0gICAgbUQzZDlNb2R1
bGUgPSBOVUxMOwotICAgIAotICAgIG1EM2Q5ID0gTlVMTDsKLSAgICBtRDNkOUV4ID0gTlVMTDsK
LSAgICBtRGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlRXggPSBOVUxMOwotICAgIG1EZXZpY2VX
aW5kb3cgPSBOVUxMOwotCi0gICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7Ci0KLSAg
ICAjaWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAgICAgICBt
RGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOwotICAgICNlbHNlCi0gICAgICAgIG1EZXZpY2VU
eXBlID0gRDNEREVWVFlQRV9IQUw7Ci0gICAgI2VuZGlmCi0KLSAgICBtTWluU3dhcEludGVydmFs
ID0gMTsKLSAgICBtTWF4U3dhcEludGVydmFsID0gMTsKLSAgICBtU29mdHdhcmVEZXZpY2UgPSBz
b2Z0d2FyZTsKLSAgICBtRGlzcGxheUlkID0gZGlzcGxheUlkOwotICAgIG1EZXZpY2VMb3N0ID0g
ZmFsc2U7Ci19Ci0KLURpc3BsYXk6On5EaXNwbGF5KCkKLXsKLSAgICB0ZXJtaW5hdGUoKTsKLQot
ICAgIERpc3BsYXlNYXA6Oml0ZXJhdG9yIHRoaXNEaXNwbGF5ID0gZGlzcGxheXMuZmluZChtRGlz
cGxheUlkKTsKLQotICAgIGlmICh0aGlzRGlzcGxheSAhPSBkaXNwbGF5cy5lbmQoKSkKLSAgICB7
Ci0gICAgICBkaXNwbGF5cy5lcmFzZSh0aGlzRGlzcGxheSk7Ci0gICAgfQotfQotCi1ib29sIERp
c3BsYXk6OmluaXRpYWxpemUoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQot
ICAgIHsKLSAgICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hh
ZGVyX2QzZDkuZGxsIikpOwotICAgIH0gCi0gICAgZWxzZQotICAgIHsKLSAgICAgIG1EM2Q5TW9k
dWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoImQzZDkuZGxsIikpOwotICAgIH0KLSAgICBpZiAo
bUQzZDlNb2R1bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRp
cmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOwotICAgIERpcmVjdDNE
Q3JlYXRlOUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGly
ZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNE
Q3JlYXRlOUV4IikpOwotCi0gICAgLy8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1v
bmcgb3RoZXIgdGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcwotICAgIC8vIGluY2xpbmVkIHRv
IHJlcG9ydCBhIGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hl
cwotICAgIC8vIGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZp
c3RhIGFuZCBsYXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCi0gICAgaWYg
KEFOR0xFX0VOQUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVE
KERpcmVjdDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgpKSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtRDNkOUV4KTsKLSAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZh
Y2UoSUlEX0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKLSAg
ICAgICAgQVNTRVJUKG1EM2Q5KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUQz
ZDkgPSBEaXJlY3QzRENyZWF0ZTkoRDNEX1NES19WRVJTSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUQzZDkpCi0gICAgewotICAgICAgICBpZiAobURjICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAg
ICAgLy8gIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoaWNoIGFkYXB0
ZXIgaW5kZXggdGhlIGRldmljZSBjb250ZXh0IGNvcnJlc3BvbmRzIHRvCi0gICAgICAgIH0KLQot
ICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIC8vIEdpdmUgdXAgb24g
Z2V0dGluZyBkZXZpY2UgY2FwcyBhZnRlciBhYm91dCBvbmUgc2Vjb25kLgotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDEwOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9
IG1EM2Q5LT5HZXREZXZpY2VDYXBzKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAocmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29t
ZSB0aW1lIHRvIGluaXRpYWxpemUvcmVjb3ZlcgotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVf
T1VUT0ZNRU1PUlksIEQzREVSUl9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNh
bid0IHJlY292ZXIgZnJvbQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobURldmljZUNhcHMuUGl4
ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgdGVybWluYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklU
SUFMSVpFRCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBEaXJlY3RYOSBp
cyBydW5uaW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0Y2hSZWN0IGZy
b20gYSByZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgaXMgbm90IHN1
cHBvcnRlZC4KLSAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZl
cnRUb1JlbmRlclRhcmdldC4KLSAgICAgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQz
RERFVkNBUFMyX0NBTl9TVFJFVENIUkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0ZXJtaW5hdGUoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Tk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtTWluU3dhcElu
dGVydmFsID0gNDsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7Ci0KLSAgICAgICAgaWYg
KG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxf
SU1NRURJQVRFKSB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWws
IDApOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7fQot
ICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VO
VF9JTlRFUlZBTF9PTkUpICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3
YXBJbnRlcnZhbCwgMSk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVy
dmFsLCAxKTt9Ci0gICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMg
JiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTykgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6
Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1N
YXhTd2FwSW50ZXJ2YWwsIDIpO30KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlv
bkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUpICAgICB7bU1pblN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOyBtTWF4U3dhcEludGVydmFsID0g
c3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQotICAgICAgICBpZiAobURldmljZUNhcHMu
UHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAgICAgIHtt
TWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7IG1NYXhTd2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTt9Ci0KLSAgICAgICAgbUQz
ZDktPkdldEFkYXB0ZXJJZGVudGlmaWVyKG1BZGFwdGVyLCAwLCAmbUFkYXB0ZXJJZGVudGlmaWVy
KTsKLQotICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KLSAg
ICAgICAgewotICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAotICAgICAgICAvLyAgRDNERk1U
X0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBS
ZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVu
ZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCi0gICAgICAgICAgICBEM0RGTVRfQThSOEc4
QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAvLyAgRDNERk1UX1gxUjVH
NUI1LCAgICAgIC8vIEhhcyBubyBjb21wYXRpYmxlIE9wZW5HTCBFUyByZW5kZXJidWZmZXIgZm9y
bWF0Ci0gICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICAgICAgfTsKLQotICAgICAgICBj
b25zdCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KLSAgICAgICAgewotICAgICAg
ICAgICAgRDNERk1UX1VOS05PV04sCi0gICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxFLAot
ICAgICAgICAgICAgRDNERk1UX0QzMiwKLSAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKLSAgICAg
ICAgICAgIEQzREZNVF9EMjRTOCwKLSAgICAgICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAgICAg
Ly8gIEQzREZNVF9EMjRYNFM0LAotICAgICAgICAgICAgRDNERk1UX0QxNiwKLSAgICAgICAgLy8g
IEQzREZNVF9EMzJGX0xPQ0tBQkxFLAotICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAotICAgICAg
ICB9OwotCi0gICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICAg
ICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5
TW9kZSk7Ci0KLSAgICAgICAgQ29uZmlnU2V0IGNvbmZpZ1NldDsKLQotICAgICAgICBmb3IgKGlu
dCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgc2l6ZW9mKHJlbmRlclRhcmdldEZvcm1h
dHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGZvcm1hdEluZGV4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXRz
W2Zvcm1hdEluZGV4XTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRh
cmdldEZvcm1hdCk7Ci0KLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7
IGRlcHRoU3RlbmNpbEluZGV4IDwgc2l6ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9m
KEQzREZPUk1BVCk7IGRlcHRoU3RlbmNpbEluZGV4KyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVu
Y2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNEX09LOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3Rl
bmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhT
dGVuY2lsRm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVs
dGktc2FtcGxpbmcKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NldC5hZGQo
Y3VycmVudERpc3BsYXlNb2RlLCBtTWluU3dhcEludGVydmFsLCBtTWF4U3dhcEludGVydmFsLCBy
ZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aCwg
bURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1
ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRlcm5hbGx5Ci0gICAgICAgIEVHTGludCBpbmRleCA9IDE7
Ci0gICAgICAgIGZvciAoQ29uZmlnU2V0OjpJdGVyYXRvciBjb25maWcgPSBjb25maWdTZXQubVNl
dC5iZWdpbigpOyBjb25maWcgIT0gY29uZmlnU2V0Lm1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDb25maWcgY29uZmlndXJhdGlvbiA9ICpjb25maWc7Ci0gICAg
ICAgICAgICBjb25maWd1cmF0aW9uLm1Db25maWdJRCA9IGluZGV4OwotICAgICAgICAgICAgaW5k
ZXgrKzsKLQotICAgICAgICAgICAgbUNvbmZpZ1NldC5tU2V0Lmluc2VydChjb25maWd1cmF0aW9u
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgIHsK
LSAgICAgICAgdGVybWluYXRlKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLQotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5k
b3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOwotICAgIHN0YXRpYyBjb25zdCBU
Q0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOwotCi0gICAgbURldmljZVdpbmRvdyA9
IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwg
V1NfRElTQUJMRUQgfCBXU19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBH
ZXRNb2R1bGVIYW5kbGUoTlVMTCksIE5VTEwpOwotCi0gICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkK
LSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKLXsK
LSAgICB3aGlsZSAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZXN0cm95
U3VyZmFjZSgqbVN1cmZhY2VTZXQuYmVnaW4oKSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtQ29u
dGV4dFNldC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVzdHJveUNvbnRleHQoKm1Db250ZXh0
U2V0LmJlZ2luKCkpOwotICAgIH0KLQotICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5
KCkpCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGlmIChtRGV2
aWNlKQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIGRldmljZSBpcyBsb3N0LCByZXNldCBpdCBm
aXJzdCB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIGRyaXZlciBpbiBhbiB1bnN0YWJsZSBzdGF0ZQot
ICAgICAgICBpZiAodGVzdERldmljZUxvc3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVz
ZXREZXZpY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKLSAg
ICAgICAgbURldmljZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7
Ci0gICAgICAgIG1EZXZpY2VFeC0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlRXggPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtRDNkOSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5LT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1EM2Q5ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZVdpbmRv
dykKLSAgICB7Ci0gICAgICAgIERlc3Ryb3lXaW5kb3cobURldmljZVdpbmRvdyk7Ci0gICAgICAg
IG1EZXZpY2VXaW5kb3cgPSBOVUxMOwotICAgIH0KLSAgICAKLSAgICBpZiAobUQzZDlFeCkKLSAg
ICB7Ci0gICAgICAgIG1EM2Q5RXgtPlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDlFeCA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1
bGUgPSBOVUxMOwotICAgIH0KLX0KLQotdm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKLXsKLSAg
ICBpZiAoIW1TY2VuZVN0YXJ0ZWQpCi0gICAgewotICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZp
Y2UtPkJlZ2luU2NlbmUoKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlzIGRlZmVuc2l2ZSBjaGVja2luZyBhZ2FpbnN0IHRoZSBkZXZpY2Ug
YmVpbmcKLSAgICAgICAgICAgIC8vIGxvc3QgYXQgdW5leHBlY3RlZCB0aW1lcy4KLSAgICAgICAg
ICAgIG1TY2VuZVN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIERp
c3BsYXk6OmVuZFNjZW5lKCkKLXsKLSAgICBpZiAobVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAg
ICAgIC8vIEVuZFNjZW5lIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIGxvc3QsIGZvciBleGFt
cGxlIGR1ZQotICAgICAgICAvLyB0byBhIFREUiBkdXJpbmcgYSBkcmF3IGNhbGwuCi0gICAgICAg
IG1EZXZpY2UtPkVuZFNjZW5lKCk7Ci0gICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAg
ICB9Ci19Ci0KLWJvb2wgRGlzcGxheTo6Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNv
bnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29u
ZmlnKQotewotICAgIHJldHVybiBtQ29uZmlnU2V0LmdldENvbmZpZ3MoY29uZmlncywgYXR0cmli
TGlzdCwgY29uZmlnU2l6ZSwgbnVtQ29uZmlnKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRDb25m
aWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1
ZSkKLXsKLSAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQu
Z2V0KGNvbmZpZyk7Ci0KLSAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKLSAgICB7Ci0gICAgICBjYXNl
IEVHTF9CVUZGRVJfU0laRTogICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
QnVmZmVyU2l6ZTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9TSVpF
OiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFTaXplOyAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmx1ZVNpemU7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tR3JlZW5TaXplOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVH
TF9SRURfU0laRTogICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVk
U2l6ZTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAg
ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTaXplOyAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TVEVOQ0lMX1NJWkU6ICAgICAgICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3RlbmNpbFNpemU7ICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9D
T05GSUdfSUQ6ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmln
SUQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9MRVZFTDogICAgICAgICAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTGV2ZWw7ICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9OQVRJVkVfUkVOREVSQUJMRTogICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tTmF0aXZlUmVuZGVyYWJsZTsgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tTmF0aXZlVmlzdWFsVHlwZTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TQU1Q
TEVTOiAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlczsg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAg
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlQnVmZmVyczsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tU3VyZmFjZVR5cGU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVHTF9UUkFOU1BBUkVOVF9UWVBFOiAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BB
UkVOVF9CTFVFX1ZBTFVFOiAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRC
bHVlVmFsdWU7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxV
RTogICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgYnJl
YWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUU6ICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
QmluZFRvVGV4dHVyZVJHQjsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CSU5EX1RPX1RF
WFRVUkVfUkdCQTogICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJH
QkE7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NSU5fU1dBUF9JTlRFUlZBTDogICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWluU3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVHTF9NQVhfU1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tTWF4U3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVH
TF9MVU1JTkFOQ0VfU0laRTogICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTHVt
aW5hbmNlU2l6ZTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9NQVNLX1NJ
WkU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFNYXNrU2l6ZTsgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9N
QVRDSF9OQVRJVkVfUElYTUFQOiAgICAgICAqdmFsdWUgPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgp
OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT05GT1JNQU5UOiAgICAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZm9ybWFudDsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9XSURUSDogICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZlcldpZHRoOyAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9IRUlHSFQ6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tTWF4UEJ1ZmZlckhlaWdodDsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhf
UEJVRkZFUl9QSVhFTFM6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZl
clBpeGVsczsgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGlzcGxheTo6Y3JlYXRl
RGV2aWNlKCkKLXsKLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMg
PSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKLSAgICBEV09SRCBiZWhhdmlvckZsYWdz
ID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7Ci0K
LSAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJF
X1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0
ZXJzLCAmbURldmljZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNF
TE9TVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmVzdWx0
ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5k
b3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywg
JnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RF
UlJfTk9UQVZBSUxBQkxFIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKG1EM2Q5RXgpCi0gICAgewotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5R
dWVyeUludGVyZmFjZShJSURfSURpcmVjdDNERGV2aWNlOUV4LCAodm9pZCoqKSAmbURldmljZUV4
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBpbml0
aWFsaXplRGV2aWNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gZG8gYW55IG9uZS10
aW1lIGRldmljZSBpbml0aWFsaXphdGlvbgotLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBh
ZnRlciBhIGRldmljZSBsb3N0L3Jlc2V0Ci0vLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFu
ZCBlbnN1cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KLXZvaWQgRGlzcGxheTo6aW5p
dGlhbGl6ZURldmljZSgpCi17Ci0gICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcwot
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVF
KTsKLSAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19MQVNUUElYRUwsIEZBTFNFKTsK
LQotICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBEaXNwbGF5OjpyZXNldERl
dmljZSgpCi17Ci0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0g
Z2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQz
RF9PSzsKLSAgICBib29sIGxvc3QgPSB0ZXN0RGV2aWNlTG9zdCgpOwotICAgIGludCBhdHRlbXB0
cyA9IDM7ICAgIAotCi0gICAgd2hpbGUgKGxvc3QgJiYgYXR0ZW1wdHMgPiAwKQotICAgIHsKLSAg
ICAgICAgaWYgKG1EZXZpY2VFeCkKLSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoNTAwKTsg
ICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQotICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZUV4LT5SZXNldEV4KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICB3aGlsZSAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNv
bWUgQ1BVIHRpbWUKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVy
YXRpdmVMZXZlbCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9ERVZJQ0VOT1RSRVNFVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5SZXNldCgmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KCk7Ci0gICAgICAg
IGF0dGVtcHRzIC0tOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiUmVzZXQvUmVzZXRFeCBmYWlsZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIs
IHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgLy8gcmVzZXQgZGV2aWNlIGRlZmF1bHRzCi0gICAgaW5pdGlhbGl6ZURldmlj
ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRl
V2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50
ICphdHRyaWJMaXN0KQotewotICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25m
aWdTZXQuZ2V0KGNvbmZpZyk7Ci0gICAgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBF
R0xfRkFMU0U7Ci0KLSAgICBpZiAoYXR0cmliTGlzdCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICgq
YXR0cmliTGlzdCAhPSBFR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChh
dHRyaWJMaXN0WzBdKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5E
RVJfQlVGRkVSOgotICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9CQUNLX0JVRkZFUjoKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9TSU5H
TEVfQlVGRkVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRD
SCwgRUdMX05PX1NVUkZBQ0UpOyAgIC8vIFJlbmRlcmluZyBkaXJlY3RseSB0byBmcm9udCBidWZm
ZXIgbm90IHN1cHBvcnRlZAotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgotICAgICAgICAgICAgICAg
IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwg
RUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJMaXN0
ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaGFzRXhpc3RpbmdXaW5kb3dTdXJm
YWNlKHdpbmRvdykpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKSAKLSAg
ICB7Ci0gICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAgICAgICAgICAgIHJldHVy
biBFR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1
cmZhY2UodGhpcywgY29uZmlndXJhdGlvbiwgd2luZG93LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKLQotICAgIGlmICghc3VyZmFjZS0+aW5pdGlhbGl6ZSgpKQotICAgIHsKLSAgICAgICAgZGVs
ZXRlIHN1cmZhY2U7Ci0gICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAg
ICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7Ci0KLSAgICByZXR1cm4gc3VjY2VzcyhzdXJm
YWNlKTsKLX0KLQotRUdMU3VyZmFjZSBEaXNwbGF5OjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVH
TENvbmZpZyBjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJM
aXN0KQotewotICAgIEVHTGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgRUdMZW51bSB0
ZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RFWFRVUkU7Ci0gICAgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0
ID0gRUdMX05PX1RFWFRVUkU7Ci0gICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNv
bmZpZ1NldC5nZXQoY29uZmlnKTsKLQotICAgIGlmIChhdHRyaWJMaXN0KQotICAgIHsKLSAgICAg
ICAgd2hpbGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGF0dHJpYkxpc3RbMF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgRUdMX1dJRFRIOgotICAgICAgICAgICAgICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgotICAg
ICAgICAgICAgICAgIGhlaWdodCA9IGF0dHJpYkxpc3RbMV07Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0xBUkdFU1RfUEJVRkZFUjoKLSAgICAgICAgICAg
ICAgICBpZiAoYXR0cmliTGlzdFsxXSAhPSBFR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7IC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfRk9STUFUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXR0cmliTGlzdFsxXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEVHTF9OT19URVhUVVJFOgotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9SR0I6
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1JHQkE6Ci0gICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVGb3JtYXQgPSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
R0xfVEVYVFVSRV9UQVJHRVQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzFd
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX05PX1RFWFRV
UkU6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlVGFyZ2V0ID0gYXR0cmliTGlzdFsxXTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
RUdMX01JUE1BUF9URVhUVVJFOgotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJMaXN0WzFdICE9
IEVHTF9GQUxTRSkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJ
QlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgIGNhc2UgRUdM
X1ZHX0FMUEhBX0ZPUk1BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9N
QVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJMaXN0ICs9IDI7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9
Ci0KLSAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQot
ICAgIGlmICh0ZXh0dXJlRm9ybWF0ICE9IEVHTF9OT19URVhUVVJFICYmICFnZXROb25Qb3dlcjJU
ZXh0dXJlU3VwcG9ydCgpICYmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVp
Z2h0KSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05P
X1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlmICgodGV4dHVyZUZvcm1hdCAhPSBFR0xfTk9fVEVY
VFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ID09IEVHTF9OT19URVhUVVJFKSB8fAotICAgICAgICAodGV4
dHVyZUZvcm1hdCA9PSBFR0xfTk9fVEVYVFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ICE9IEVHTF9OT19U
RVhUVVJFKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xf
Tk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKCEoY29uZmlndXJhdGlvbi0+bVN1cmZhY2VU
eXBlICYgRUdMX1BCVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKCh0ZXh0dXJlRm9y
bWF0ID09IEVHTF9URVhUVVJFX1JHQiAmJiBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJH
QiAhPSBFR0xfVFJVRSkgfHwKLSAgICAgICAgKHRleHR1cmVGb3JtYXQgPT0gRUdMX1RFWFRVUkVf
UkdCQSAmJiBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQkEgIT0gRUdMX1RSVUUpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VS
RkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKHRlc3REZXZpY2VMb3N0KCkpIAotICAgIHsKLSAgICAg
ICAgaWYgKCFyZXN0b3JlTG9zdERldmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19T
VVJGQUNFOwotICAgIH0KLQotICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlz
LCBjb25maWd1cmF0aW9uLCBzaGFyZUhhbmRsZSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZUZvcm1h
dCwgdGV4dHVyZVRhcmdldCk7Ci0KLSAgICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSBzdXJmYWNlOwotICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZB
Q0U7Ci0gICAgfQotCi0gICAgbVN1cmZhY2VTZXQuaW5zZXJ0KHN1cmZhY2UpOwotCi0gICAgcmV0
dXJuIHN1Y2Nlc3Moc3VyZmFjZSk7Ci19Ci0KLUVHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRlQ29u
dGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250
ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCi17Ci0gICAgaWYgKCFt
RGV2aWNlKQotICAgIHsKLSAgICAgICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
dGVzdERldmljZUxvc3QoKSkgICAvLyBMb3N0IGRldmljZQotICAgIHsKLSAgICAgICAgaWYgKCFy
ZXN0b3JlTG9zdERldmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0g
ICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRs
ZSk7Ci0KLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcs
IHNoYXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwotICAgIG1Db250ZXh0
U2V0Lmluc2VydChjb250ZXh0KTsKLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOwotCi0gICAgcmV0
dXJuIGNvbnRleHQ7Ci19Ci0KLWJvb2wgRGlzcGxheTo6cmVzdG9yZUxvc3REZXZpY2UoKQotewot
ICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3IgY3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsg
Y3R4ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjdHgrKykKLSAgICB7Ci0gICAgICAgIGlmICgoKmN0
eCktPmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gSWYgcmVzZXQgbm90aWZpY2F0aW9ucyBoYXZlIGJlZW4gcmVxdWVzdGVkLCBhcHBs
aWNhdGlvbiBtdXN0IGRlbGV0ZSBhbGwgY29udGV4dHMgZmlyc3QKLSAgICB9Ci0gCi0gICAgLy8g
UmVsZWFzZSBzdXJmYWNlIHJlc291cmNlcyB0byBtYWtlIHRoZSBSZXNldCgpIHN1Y2NlZWQKLSAg
ICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigp
OyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCi0gICAgewotICAgICAg
ICAoKnN1cmZhY2UpLT5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRXZlbnRRdWVy
eVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJl
bGVhc2UoKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0g
ICAgaWYgKCFyZXNldERldmljZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIFJlc3RvcmUgYW55IHN1cmZhY2VzIHRoYXQgbWF5IGhhdmUgYmVlbiBsb3N0
Ci0gICAgZm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVn
aW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQotICAgIHsKLSAg
ICAgICAgKCpzdXJmYWNlKS0+cmVzZXRTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotCi12b2lkIERpc3BsYXk6OmRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAq
c3VyZmFjZSkKLXsKLSAgICBkZWxldGUgc3VyZmFjZTsKLSAgICBtU3VyZmFjZVNldC5lcmFzZShz
dXJmYWNlKTsKLX0KLQotdm9pZCBEaXNwbGF5OjpkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAq
Y29udGV4dCkKLXsKLSAgICBnbERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwotICAgIG1Db250ZXh0
U2V0LmVyYXNlKGNvbnRleHQpOwotfQotCi12b2lkIERpc3BsYXk6Om5vdGlmeURldmljZUxvc3Qo
KQotewotICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3IgY29udGV4dCA9IG1Db250ZXh0U2V0
LmJlZ2luKCk7IGNvbnRleHQgIT0gbUNvbnRleHRTZXQuZW5kKCk7IGNvbnRleHQrKykKLSAgICB7
Ci0gICAgICAgICgqY29udGV4dCktPm1hcmtDb250ZXh0TG9zdCgpOwotICAgIH0KLSAgICBtRGV2
aWNlTG9zdCA9IHRydWU7Ci0gICAgZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCk7Ci19Ci0KLWJvb2wg
RGlzcGxheTo6aXNEZXZpY2VMb3N0KCkKLXsKLSAgICByZXR1cm4gbURldmljZUxvc3Q7Ci19Ci0K
LWJvb2wgRGlzcGxheTo6aXNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM2Q5
ICE9IE5VTEwgJiYgbUNvbmZpZ1NldC5zaXplKCkgPiAwOwotfQotCi1ib29sIERpc3BsYXk6Omlz
VmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykKLXsKLSAgICByZXR1cm4gbUNvbmZpZ1NldC5n
ZXQoY29uZmlnKSAhPSBOVUxMOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRDb250ZXh0KGds
OjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIHJldHVybiBtQ29udGV4dFNldC5maW5kKGNvbnRl
eHQpICE9IG1Db250ZXh0U2V0LmVuZCgpOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRTdXJm
YWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICByZXR1cm4gbVN1cmZhY2VTZXQuZmlu
ZChzdXJmYWNlKSAhPSBtU3VyZmFjZVNldC5lbmQoKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpoYXNF
eGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpCi17Ci0gICAgZm9yIChTdXJmYWNlU2V0
OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3Vy
ZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQotICAgIHsKLSAgICAgICAgaWYgKCgqc3VyZmFjZSkt
PmdldFdpbmRvd0hhbmRsZSgpID09IHdpbmRvdykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUVH
TGludCBEaXNwbGF5OjpnZXRNaW5Td2FwSW50ZXJ2YWwoKQotewotICAgIHJldHVybiBtTWluU3dh
cEludGVydmFsOwotfQotCi1FR0xpbnQgRGlzcGxheTo6Z2V0TWF4U3dhcEludGVydmFsKCkKLXsK
LSAgICByZXR1cm4gbU1heFN3YXBJbnRlcnZhbDsKLX0KLQotSURpcmVjdDNERGV2aWNlOSAqRGlz
cGxheTo6Z2V0RGV2aWNlKCkKLXsKLSAgICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBp
ZiAoIWNyZWF0ZURldmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtRGV2aWNlOwotfQotCi1EM0RDQVBTOSBE
aXNwbGF5OjpnZXREZXZpY2VDYXBzKCkKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHM7Ci19Ci0K
LUQzREFEQVBURVJfSURFTlRJRklFUjkgKkRpc3BsYXk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkK
LXsKLSAgICByZXR1cm4gJm1BZGFwdGVySWRlbnRpZmllcjsKLX0KLQotYm9vbCBEaXNwbGF5Ojp0
ZXN0RGV2aWNlTG9zdCgpCi17Ci0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBGQUlMRUQobURldmljZUV4LT5DaGVja0RldmljZVN0YXRlKE5VTEwpKTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAobURldmljZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBGQUlMRUQobURldmlj
ZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAg
IC8vIE5vIGRldmljZSB5ZXQsIHNvIG5vIHJlc2V0IHJlcXVpcmVkCi19Ci0KLWJvb2wgRGlzcGxh
eTo6dGVzdERldmljZVJlc2V0dGFibGUoKQotewotICAgIEhSRVNVTFQgc3RhdHVzID0gRDNEX09L
OwotCi0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IG1EZXZpY2VF
eC0+Q2hlY2tEZXZpY2VTdGF0ZShOVUxMKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURldmljZSkK
LSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7
Ci0gICAgfQotCi0gICAgc3dpdGNoIChzdGF0dXMpCi0gICAgewotICAgICAgY2FzZSBEM0RFUlJf
REVWSUNFTk9UUkVTRVQ6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLXZvaWQgRGlzcGxheTo6c3luYyhib29sIGJsb2NrKQotewotICAgIEhSRVNVTFQgcmVz
dWx0OwotCi0gICAgSURpcmVjdDNEUXVlcnk5KiBxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgp
OwotICAgIGlmICghcXVlcnkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
cmVzdWx0ID0gcXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLQotICAgIGRvCi0gICAgewotICAgICAgICByZXN1bHQgPSBxdWVyeS0+R2V0
RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKLQotICAgICAgICBpZihibG9jayAmJiBy
ZXN1bHQgPT0gU19GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5n
LCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0g
ICAgICAgICAgICBTbGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9y
IGRldmljZSBsb3NzCi0gICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4g
U19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAotICAgICAgICAgICAgLy8gaW5zdGVh
ZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAgICBpZiAo
dGVzdERldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBEM0RFUlJfREVWSUNFTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICB3aGlsZShibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSk7Ci0KLSAgICBmcmVlRXZlbnRRdWVy
eShxdWVyeSk7Ci0KLSAgICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIG5vdGlmeURldmljZUxvc3QoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFF1ZXJ5OSog
RGlzcGxheTo6YWxsb2NhdGVFdmVudFF1ZXJ5KCkKLXsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1
ZXJ5ID0gTlVMTDsKLQotICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBF
X0VWRU5ULCAmcXVlcnkpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBxdWVyeSA9IG1FdmVudFF1ZXJ5UG9vbC5iYWNr
KCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIHJl
dHVybiBxdWVyeTsKLX0KLQotdm9pZCBEaXNwbGF5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0RR
dWVyeTkqIHF1ZXJ5KQotewotICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpID4gMTAwMCkK
LSAgICB7Ci0gICAgICAgIHF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wdXNoX2JhY2socXVlcnkpOwotICAgIH0KLX0KLQot
dm9pZCBEaXNwbGF5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9v
bCAqbXVsdGlTYW1wbGVBcnJheSkKLXsKLSAgICBmb3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0g
MDsgbXVsdGlTYW1wbGVJbmRleCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNh
bXBsZUluZGV4KyspCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVj
a0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFJVRSwgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7Ci0KLSAg
ICAgICAgbXVsdGlTYW1wbGVBcnJheVttdWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1
bHQpOwotICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQot
ewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0
QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAg
IHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0RYVDEpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQo
KQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+
R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQot
ICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVS
RSwgRDNERk1UX0RYVDMpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNk
OS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsK
LQotICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVY
VFVSRSwgRDNERk1UX0RYVDUpKTsKLX0KLQotLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1
cmVzIGluIERpcmVjdDNEOQotLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRv
IGVuc3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCi0vLyBzZWUgaHR0cDovL2Fy
YXMtcC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCi1ib29sIERpc3BsYXk6OmdldERlcHRo
VGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNw
bGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3Vy
cmVudERpc3BsYXlNb2RlKTsKLQotICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikp
OwotICAgIGJvb2wgbnVsbCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVS
VEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOwotCi0gICAgcmV0dXJuIGlu
dHogJiYgbnVsbDsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQo
Ym9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgICpmaWx0ZXJpbmcgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgIFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUs
IEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0gICAgCi0gICAgKnJlbmRlcmFibGUgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpJiYKLSAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotCi0gICAgaWYgKCEqZmlsdGVyaW5nICYmICEqcmVu
ZGVyYWJsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKLSAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1U
X0EzMkIzMkczMlIzMkYpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0gICAgRDNERElTUExBWU1P
REUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUo
bUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgKmZpbHRlcmluZyA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVS
RSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLSAgICAKLSAgICAqcmVuZGVyYWJsZSA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVS
RSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAgIGlmICghKmZpbHRlcmluZyAmJiAhKnJl
bmRlcmFibGUpCi0gICAgewotICAgICAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rl
dmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3Jt
YXQsIDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCi0gICAgICAgICAg
ICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZN
VF9BMTZCMTZHMTZSMTZGKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3Vw
cG9ydCgpCi17Ci0gICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1E
M2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUp
OwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9U
RVhUVVJFLCBEM0RGTVRfTDgpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VBbHBo
YVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1v
ZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnRE
aXNwbGF5TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZv
cm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAs
IEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BOEw4KSk7Ci19Ci0KLUQzRFBPT0wgRGlzcGxheTo6
Z2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QKLXsKLSAgICBpZiAobUQzZDlFeCAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCEodXNhZ2UgJiBEM0RVU0FHRV9EWU5BTUlDKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci19Ci0KLUQzRFBPT0wgRGlzcGxh
eTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXgg
IT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghKHVzYWdlICYgKEQzRFVTQUdFX0RFUFRIU1RF
TkNJTCB8IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRDNEUE9PTF9NQU5BR0VEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEQz
RFBPT0xfREVGQVVMVDsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgp
Ci17Ci0gICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwot
ICAgIGlmIChxdWVyeSkKLSAgICB7Ci0gICAgICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLUQzRFBSRVNFTlRfUEFSQU1FVEVSUyBEaXNwbGF5OjpnZXRE
ZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKQotewotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBw
cmVzZW50UGFyYW1ldGVycyA9IHswfTsKLQotICAgIC8vIFRoZSBkZWZhdWx0IHN3YXAgY2hhaW4g
aXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFjZSB3aWxsIGNyZWF0ZSBhIG5ldyBzd2FwIGNo
YWluIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1
dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGggPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSAx
OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
aERldmljZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVs
dGlTYW1wbGVRdWFsaXR5ID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5
cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRh
dGlvbkludGVydmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7Ci0gICAgcHJlc2Vu
dFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIHByZXNlbnRQYXJhbWV0
ZXJzOwotfQotCi12b2lkIERpc3BsYXk6OmluaXRFeHRlbnNpb25TdHJpbmcoKQotewotICAgIEhN
T0RVTEUgc3dpZnRTaGFkZXIgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgic3dpZnRzaGFkZXJfZDNk
OS5kbGwiKSk7Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gIiI7Ci0KLSAgICAvLyBNdWx0aS12
ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9FWFRf
Y3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyAiOwotCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0
ZW5zaW9ucwotICAgIGlmIChzaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQotICAgIHsKLSAgICAgICAg
bUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVfY2xpZW50X2J1
ZmZlciAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9xdWVy
eV9zdXJmYWNlX3BvaW50ZXIgIjsKLQotICAgIGlmIChzd2lmdFNoYWRlcikKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9zb2Z0d2FyZV9kaXNwbGF5ICI7Ci0g
ICAgfQotCi0gICAgaWYgKHNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCi0gICAgewotICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfQU5HTEVfc3VyZmFjZV9kM2RfdGV4dHVyZV8yZF9zaGFy
ZV9oYW5kbGUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9z
dF9zdWJfYnVmZmVyIjsKLQotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVu
c2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6OnN0
cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsx
KTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIgKkRpc3BsYXk6OmdldEV4dGVuc2lvblN0cmluZygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIoKTsKLX0KLQotYm9v
bCBEaXNwbGF5OjpzaGFyZUhhbmRsZVN1cHBvcnRlZCgpIGNvbnN0IAotewotICAgIC8vIFBJWCBk
b2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB1c2luZyBzaGFyZSBoYW5kbGVzLCBzbyBkaXNhYmxlIHRo
ZW0uCi0gICAgcmV0dXJuIGlzRDNkOUV4RGV2aWNlKCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Ci19
Ci0KLS8vIE9ubHkgRGlyZWN0M0QgMTAgcmVhZHkgZGV2aWNlcyBzdXBwb3J0IGFsbCB0aGUgbmVj
ZXNzYXJ5IHZlcnRleCB0ZXh0dXJlIGZvcm1hdHMuCi0vLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNE
OSBieSBjaGVja2luZyBzdXBwb3J0IGZvciB0aGUgUjE2RiBmb3JtYXQuCi1ib29sIERpc3BsYXk6
OmdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6
ZWQoKSB8fCBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDMs
IDApKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEQzRERJU1BM
QVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlN
b2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0
ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZ
UEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpOwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChyZXN1bHQp
OwotfQotCi1ib29sIERpc3BsYXk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQ
U19QT1cyKSAmJgotICAgICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRF
WFRVUkVDQVBTX0NVQkVNQVBfUE9XMikgJiYKLSAgICAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0
dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19OT05QT1cyQ09ORElUSU9OQUwpOwotfQotCi1ib29s
IERpc3BsYXk6OmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
c0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmcXVlcnkpOwotICAg
IAotICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBxdWVyeSkKLSAgICB7Ci0gICAgICAgIHF1
ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6Omdl
dEluc3RhbmNpbmdTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHMuUGl4
ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywgMCk7IAotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0ZjdkYmQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIERpc3BsYXkuaDogRGVmaW5lcyB0aGUgZWdsOjpEaXNw
bGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhlIGFic3RyYWN0Ci0vLyBkaXNwbGF5IG9uIHdoaWNo
IGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50cyBFR0xEaXNwbGF5LgotLy8gW0VHTCAxLjRd
IHNlY3Rpb24gMi4xLjIgcGFnZSAzLgotCi0jaWZuZGVmIElOQ0xVREVfRElTUExBWV9IXwotI2Rl
ZmluZSBJTkNMVURFX0RJU1BMQVlfSF8KLQotI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0j
ZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNlbmRpZgotI2luY2x1ZGUgPHdpbmRvd3MuaD4K
LSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9Db25m
aWcuaCIKLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1j
bGFzcyBEaXNwbGF5Ci17Ci0gIHB1YmxpYzoKLSAgICB+RGlzcGxheSgpOwotCi0gICAgYm9vbCBp
bml0aWFsaXplKCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
dGFydFNjZW5lKCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFNjZW5lKCk7Ci0KLSAgICBzdGF0aWMg
ZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCk7
Ci0KLSAgICBib29sIGdldENvbmZpZ3MoRUdMQ29uZmlnICpjb25maWdzLCBjb25zdCBFR0xpbnQg
KmF0dHJpYkxpc3QsIEVHTGludCBjb25maWdTaXplLCBFR0xpbnQgKm51bUNvbmZpZyk7Ci0gICAg
Ym9vbCBnZXRDb25maWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwg
RUdMaW50ICp2YWx1ZSk7Ci0KLSAgICBFR0xTdXJmYWNlIGNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdO
RCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0g
ICAgRUdMU3VyZmFjZSBjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENvbmZpZyBjb25maWcsIEhB
TkRMRSBzaGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKLSAgICBFR0xDb250
ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsK
LQotICAgIHZvaWQgZGVzdHJveVN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKLSAgICB2
b2lkIGRlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLQotICAgIGJvb2wgaXNJ
bml0aWFsaXplZCgpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29u
ZmlnKTsKLSAgICBib29sIGlzVmFsaWRDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLSAg
ICBib29sIGlzVmFsaWRTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgYm9vbCBo
YXNFeGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpOwotCi0gICAgRUdMaW50IGdldE1p
blN3YXBJbnRlcnZhbCgpOwotICAgIEVHTGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKTsKLQotICAg
IHZpcnR1YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7Ci0gICAgdmlydHVhbCBEM0RD
QVBTOSBnZXREZXZpY2VDYXBzKCk7Ci0gICAgdmlydHVhbCBEM0RBREFQVEVSX0lERU5USUZJRVI5
ICpnZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlTG9z
dCgpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwotICAgIHZpcnR1
YWwgdm9pZCBzeW5jKGJvb2wgYmxvY2spOwotICAgIHZpcnR1YWwgSURpcmVjdDNEUXVlcnk5KiBh
bGxvY2F0ZUV2ZW50UXVlcnkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnJlZUV2ZW50UXVlcnkoSURp
cmVjdDNEUXVlcnk5KiBxdWVyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGdldE11bHRpU2FtcGxlU3Vw
cG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERY
VDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRM
dW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldFZlcnRleFRleHR1cmVT
dXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBw
b3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OwotICAgIHZpcnR1
YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIGJvb2wgaXNEZXZpY2VMb3N0KCk7Ci0K
LSAgICBib29sIGlzRDNkOUV4RGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbUQzZDlFeCAhPSBOVUxM
OyB9Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7Ci0gICAgYm9v
bCBzaGFyZUhhbmRsZVN1cHBvcnRlZCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKERpc3BsYXkpOwotCi0gICAgRGlzcGxheShFR0xOYXRpdmVEaXNw
bGF5VHlwZSBkaXNwbGF5SWQsIEhEQyBkZXZpY2VDb250ZXh0LCBib29sIHNvZnR3YXJlKTsKLQot
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsK
LQotICAgIGJvb2wgcmVzdG9yZUxvc3REZXZpY2UoKTsKLQotICAgIEVHTE5hdGl2ZURpc3BsYXlU
eXBlIG1EaXNwbGF5SWQ7Ci0gICAgY29uc3QgSERDIG1EYzsKLQotICAgIEhNT0RVTEUgbUQzZDlN
b2R1bGU7Ci0gICAgCi0gICAgVUlOVCBtQWRhcHRlcjsKLSAgICBEM0RERVZUWVBFIG1EZXZpY2VU
eXBlOwotICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVyIHN1Y2Nl
c3NmdWwgaW5pdGlhbGl6YXRpb24uCi0gICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAgLy8gTWln
aHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLSAgICBJRGlyZWN0M0REZXZp
Y2U5ICptRGV2aWNlOwotICAgIElEaXJlY3QzRERldmljZTlFeCAqbURldmljZUV4OyAgLy8gTWln
aHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLQotICAgIC8vIEEgcG9vbCBv
ZiBldmVudCBxdWVyaWVzIHRoYXQgYXJlIGN1cnJlbnRseSB1bnVzZWQuCi0gICAgc3RkOjp2ZWN0
b3I8SURpcmVjdDNEUXVlcnk5Kj4gbUV2ZW50UXVlcnlQb29sOwotCi0gICAgRDNEQ0FQUzkgbURl
dmljZUNhcHM7Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBtQWRhcHRlcklkZW50aWZpZXI7
Ci0gICAgSFdORCBtRGV2aWNlV2luZG93OwotCi0gICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAg
IEVHTGludCBtTWF4U3dhcEludGVydmFsOwotICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOwot
ICAgIGJvb2wgbVNvZnR3YXJlRGV2aWNlOwotICAgIAotICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3Vy
ZmFjZSo+IFN1cmZhY2VTZXQ7Ci0gICAgU3VyZmFjZVNldCBtU3VyZmFjZVNldDsKLQotICAgIENv
bmZpZ1NldCBtQ29uZmlnU2V0OwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+
IENvbnRleHRTZXQ7Ci0gICAgQ29udGV4dFNldCBtQ29udGV4dFNldDsKLSAgICBib29sIG1EZXZp
Y2VMb3N0OwotCi0gICAgYm9vbCBjcmVhdGVEZXZpY2UoKTsKLSAgICB2b2lkIGluaXRpYWxpemVE
ZXZpY2UoKTsKLSAgICBib29sIHJlc2V0RGV2aWNlKCk7Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNp
b25TdHJpbmcoKTsKLSAgICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3RyaW5nOwotfTsKLX0KLQot
I2VuZGlmICAgLy8gSU5DTFVERV9ESVNQTEFZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML1JFQURNRSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZjA3
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qg
c3luY2VkIGZyb20gdGhlIEFOR0xFIHByb2plY3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJL
aXQgbmVlZHMgdGhlbSB5ZXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5Yjc3OS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjgyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IFN1cmZhY2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2Vu
dGluZyBhIGRyYXdpbmcgc3VyZmFjZQotLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3
aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBidWZmZXJzLgotLy8gSW1wbGVtZW50cyBFR0xTdXJm
YWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdl
IDMuCi0KLSNpbmNsdWRlIDx0Y2hhci5oPgotCi0jaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIK
LQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5
LmgiCi0KLSNpbmNsdWRlIDxkd21hcGkuaD4KLQotbmFtZXNwYWNlIGVnbAotewotCi1uYW1lc3Bh
Y2UKLXsKLWNvbnN0IGludCB2ZXJzaW9uV2luZG93c1Zpc3RhID0gTUFLRVdPUkQoMHgwMCwgMHgw
Nik7Ci1jb25zdCBpbnQgdmVyc2lvbldpbmRvd3M3ID0gTUFLRVdPUkQoMHgwMSwgMHgwNik7Ci0K
LS8vIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiBhIGZvcm1h
dCBzdWl0YWJsZSBmb3Igb3JkZXJpbmcKLS8vIGNvbXBhcmlzb24uCi1pbnQgZ2V0Q29tcGFyYWJs
ZU9TVmVyc2lvbigpCi17Ci0gICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKLSAgICBp
bnQgbWFqb3JWZXJzaW9uID0gTE9CWVRFKExPV09SRCh2ZXJzaW9uKSk7Ci0gICAgaW50IG1pbm9y
VmVyc2lvbiA9IEhJQllURShMT1dPUkQodmVyc2lvbikpOwotICAgIHJldHVybiBNQUtFV09SRCht
aW5vclZlcnNpb24sIG1ham9yVmVyc2lvbik7Ci19Ci19Ci0KLVN1cmZhY2U6OlN1cmZhY2UoRGlz
cGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQg
cG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCi0gICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZp
Zyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RT
dWJCdWZmZXJTdXBwb3J0ZWQpCi17Ci0gICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tC
dWZmZXIgPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJn
ZXQgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hhcmVIYW5k
bGUgPSBOVUxMOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IEVH
TF9OT19URVhUVVJFOwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0KLSAg
ICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcp
OyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwotICAgIG1S
ZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9IEVHTF9C
VUZGRVJfUFJFU0VSVkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRTd2FwSW50
ZXJ2YWwoMSk7Ci0KLSAgICBzdWJjbGFzc1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpTdXJmYWNl
KERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5k
bGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBF
R0xlbnVtIHRleHR1cmVUeXBlKQotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVM
TCksIG1Db25maWcoY29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdp
ZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0Up
Ci17Ci0gICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAg
IG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1P
ZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwot
ICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7
Ci0gICAgbVRleHR1cmVUYXJnZXQgPSB0ZXh0dXJlVHlwZTsKLQotICAgIG1QaXhlbEFzcGVjdFJh
dGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERl
dGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvCi0gICAgbVJlbmRlckJ1ZmZlciA9IEVH
TF9CQUNLX0JVRkZFUjsKLSAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7
Ci0gICAgbVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLX0KLQot
U3VyZmFjZTo6flN1cmZhY2UoKQotewotICAgIHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICByZWxl
YXNlKCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFt
U3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7Ci0KLSAg
ICBpZiAoIXJlc2V0U3dhcENoYWluKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBN
b2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJzIGZvciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBv
c2l0ZWQsCi0gICAgLy8gdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBxdWV1aW5nIGRvbmUgYnkg
RFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvCi0gICAgLy8gcHJlc2VudCBhbmQgdGhlIGFjdHVhbCBz
Y3JlZW4uCi0gICAgaWYgKG1XaW5kb3cgJiYgKGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2
ZXJzaW9uV2luZG93c1Zpc3RhKSkgewotICAgICAgQk9PTCBpc0NvbXBvc2l0ZWQ7Ci0gICAgICBI
UkVTVUxUIHJlc3VsdCA9IER3bUlzQ29tcG9zaXRpb25FbmFibGVkKCZpc0NvbXBvc2l0ZWQpOwot
ICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIGlzQ29tcG9zaXRlZCkgewotICAgICAgICBE
V01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbXM7Ci0gICAgICAgIG1lbXNldCgmcHJl
c2VudFBhcmFtcywgMCwgc2l6ZW9mKHByZXNlbnRQYXJhbXMpKTsKLSAgICAgICAgcHJlc2VudFBh
cmFtcy5jYlNpemUgPSBzaXplb2YoRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHBy
ZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7Ci0KLSAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2Vu
dFBhcmFtZXRlcnMobVdpbmRvdywgJnByZXNlbnRQYXJhbXMpOwotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgICAgRVJSKCJVbmFibGUgdG8gc2V0IHByZXNlbnQgcGFyYW1ldGVy
czogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBTdXJmYWNlOjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAg
ICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJh
Y2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+
UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBp
ZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZz
Y3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmICht
VGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsKLSAg
ICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7
Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQotewotICAgIGlmICghbVdpbmRv
dykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXNldFN3YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQp
OwotICAgIH0KLQotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBpZiAoIUdldENsaWVudFJlY3Qo
Z2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChm
YWxzZSk7Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgdGhlIHdpbmRvdyBkaW1l
bnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
ZXRTd2FwQ2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2luZG93UmVj
dC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2Fw
Q2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAg
aWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0g
bWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKLSAgICAvLyBiZWZvcmUgcmVhbGxvY2F0
aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4KLSAg
ICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwotCi0gICAgRDNEUFJFU0VOVF9QQVJB
TUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1E
ZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgLy8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZl
biB3aGVuIHdlIHVzZSBEM0RTV0FQRUZGRUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJl
Y2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRv
IDEKLSAgICAvLyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3Bl
Y3VsYXRlIHRoYXQgZWl0aGVyIGl0IGlzCi0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQg
dGVsbGluZyB1cywgb3IgYmV0dGVyLCBkb2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhp
bmQgdGhlIHNjZW5lcyBrbm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckZvcm1hdCA9IG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJl
c2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2lu
ZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1w
bGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAot
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05P
TkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVz
ZW50YXRpb25JbnRlcnZhbCA9IG1QcmVzZW50SW50ZXJ2YWw7Ci0gICAgcHJlc2VudFBhcmFtZXRl
cnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldp
ZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNv
dXJjZXMgdG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUg
dGhlCi0gICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9z
ZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7
Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tC
dWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQot
ICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwt
PlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
bVNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICBIQU5ETEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7Ci0g
ICAgaWYgKCFtV2luZG93ICYmIG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQotICAg
IHsKLSAgICAgICAgcFNoYXJlSGFuZGxlID0gJm1TaGFyZUhhbmRsZTsKLSAgICB9Ci0KLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
cldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5U
ZXh0dXJlLCBwU2hhcmVIYW5kbGUpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCBy
ZXN1bHQpOwotICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmlj
ZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqb2xkUmVu
ZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLQotICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0KLSAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgUkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAg
IG1XaWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4g
c3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRp
Y19jYXN0PExPTkc+KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQot
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJl
Y3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwotICAgIH0KLQotICAgIGlmIChtV2luZG93KQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2Fw
Q2hhaW4pOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3Vs
dCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4bFgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZihpc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
aXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVm
ZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVw
dGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhT
dGVuY2lsLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7
Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFj
ZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxl
YXNlKCk7Ci0KLSAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0
ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodDsKLQotICAgIG1QcmVzZW50SW50
ZXJ2YWxEaXJ0eSA9IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN1cmZhY2U6
OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0
KQotewotICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmICh4ICsgd2lkdGggPiBtV2lkdGgpCi0gICAgewotICAgICAgICB3aWR0
aCA9IG1XaWR0aCAtIHg7Ci0gICAgfQotCi0gICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQot
ICAgIHsKLSAgICAgICAgaGVpZ2h0ID0gbUhlaWdodCAtIHk7Ci0gICAgfQotCi0gICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNl
KCk7Ci0KLSAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCi0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwot
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwot
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9S
V1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldS
SVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRl
dmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
TlVMTCk7Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7Ci0g
ICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNlLT5T
ZXRUZXh0dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmVT
dGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgZGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhU
VVJFKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9Q
LCBEM0RUT1BfRElTQUJMRSk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0gICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1Nf
Q0xBTVApOwotICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7
Ci0KLSAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAw
LjBmLCAxLjBmfTsKLSAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0KLSAgICBm
bG9hdCB4MSA9IHggLSAwLjVmOwotICAgIGZsb2F0IHkxID0gKG1IZWlnaHQgLSB5IC0gaGVpZ2h0
KSAtIDAuNWY7Ci0gICAgZmxvYXQgeDIgPSAoeCArIHdpZHRoKSAtIDAuNWY7Ci0gICAgZmxvYXQg
eTIgPSAobUhlaWdodCAtIHkpIC0gMC41ZjsKLQotICAgIGZsb2F0IHUxID0geCAvIGZsb2F0KG1X
aWR0aCk7Ci0gICAgZmxvYXQgdjEgPSB5IC8gZmxvYXQobUhlaWdodCk7Ci0gICAgZmxvYXQgdTIg
PSAoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCk7Ci0gICAgZmxvYXQgdjIgPSAoeSArIGhlaWdo
dCkgLyBmbG9hdChtSGVpZ2h0KTsKLQotICAgIGZsb2F0IHF1YWRbNF1bNl0gPSB7e3gxLCB5MSwg
MC4wZiwgMS4wZiwgdTEsIHYyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTEsIDAu
MGYsIDEuMGYsIHUyLCB2Mn0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBm
LCAxLjBmLCB1MiwgdjF9LAotICAgICAgICAgICAgICAgICAgICAgICAge3gxLCB5MiwgMC4wZiwg
MS4wZiwgdTEsIHYxfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2Ci0KLSAgICBtRGlzcGxheS0+
c3RhcnRTY2VuZSgpOwotICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xF
RkFOLCAyLCBxdWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgbURpc3BsYXktPmVuZFNjZW5l
KCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICBSRUNUIHJlY3Qg
PQotICAgIHsKLSAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBoZWlnaHQsCi0gICAgICAgIHggKyB3
aWR0aCwgbUhlaWdodCAtIHkKLSAgICB9OwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENo
YWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oZ2xHZXRDdXJyZW50Q29u
dGV4dCgpKTsKLSAgICBpZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPm1hcmtB
bGxTdGF0ZURpcnR5KCk7Ci0gICAgfQotCi0gICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCi0gICAgewotICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJS
X0RSSVZFUklOVEVSTkFMRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgZmFsc2UpOwotICAgIH0KLQotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0KLSAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLUhXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbVdp
bmRvdzsKLX0KLQotCi0jZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFj
ZU93bmVyIikKLSNkZWZpbmUga1BhcmVudFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVu
dFduZFByb2MiKQotCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNlV2luZG93UHJvYyhI
V05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkKLXsK
LSAgaWYgKG1lc3NhZ2UgPT0gV01fU0laRSkKLSAgewotICAgICAgU3VyZmFjZSogc3VyZiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkp
OwotICAgICAgaWYoc3VyZikKLSAgICAgIHsKLSAgICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9m
RGF0ZVN3YXBDaGFpbigpOwotICAgICAgfQotICB9Ci0gIFdORFBST0MgcHJldlduZEZ1bmMgPSBy
ZWludGVycHJldF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7
Ci0gIHJldHVybiBDYWxsV2luZG93UHJvYyhwcmV2V25kRnVuYywgaHduZCwgbWVzc2FnZSwgd3Bh
cmFtLCBscGFyYW0pOwotfQotCi12b2lkIFN1cmZhY2U6OnN1YmNsYXNzV2luZG93KCkKLXsKLSAg
ICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRFdP
UkQgcHJvY2Vzc0lkOwotICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93VGhyZWFkUHJvY2Vz
c0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOwotICAgIGlmIChwcm9jZXNzSWQgIT0gR2V0Q3VycmVu
dFByb2Nlc3NJZCgpIHx8IHRocmVhZElkICE9IEdldEN1cnJlbnRUaHJlYWRJZCgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNldExhc3RFcnJvcigwKTsKLSAgICBMT05H
X1BUUiBvbGRXbmRQcm9jID0gU2V0V2luZG93TG9uZ1B0cihtV2luZG93LCBHV0xQX1dORFBST0Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgaWYo
b2xkV25kUHJvYyA9PSAwICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAg
ewotICAgICAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgU2V0UHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5LCByZWludGVycHJl
dF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNldFByb3AobVdpbmRvdywga1BhcmVudFduZFBy
b2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRXbmRQcm9jKSk7Ci0gICAgbVdpbmRvd1N1
YmNsYXNzZWQgPSB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3coKQot
ewotICAgIGlmKCFtV2luZG93U3ViY2xhc3NlZCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyB1bi1zdWJjbGFzcwotICAgIExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSBy
ZWludGVycHJldF9jYXN0PExPTkdfUFRSPihHZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9j
KSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93
UHJvYy4KLSAgICAvLyBJZiB0aGlzIGFzc2VydCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhl
IGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFzc2VkIHRoZQotICAgIC8vIGh3bmQgYXMgd2VsbCBhbmQg
ZGlkIG5vdCB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBFR0wgY29udGV4dC4gVGhl
Ci0gICAgLy8gYXBwbGljYXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFz
cyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQotICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1
YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBFR0wgY29udGV4dC4KLSAgICBpZihwYXJlbnRX
bmRGdW5jKQotICAgIHsKLSAgICAgICAgTE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dM
b25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJPQywgcGFyZW50V25kRnVuYyk7Ci0gICAgICAgIEFT
U0VSVChwcmV2V25kRnVuYyA9PSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2lu
ZG93UHJvYykpOwotICAgIH0KLQotICAgIFJlbW92ZVByb3AobVdpbmRvdywga1N1cmZhY2VQcm9w
ZXJ0eSk7Ci0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYyk7Ci0gICAgbVdp
bmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9m
RGF0ZVN3YXBDaGFpbigpCi17Ci0gICAgUkVDVCBjbGllbnQ7Ci0gICAgaWYgKCFHZXRDbGllbnRS
ZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBi
dWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0
byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50
LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0
b20gLSBjbGllbnQudG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0
V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoc2l6ZURp
cnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkKLSAgICB7Ci0gICAgICAgIHJlc2V0U3dhcENo
YWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRoaXMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsTWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwgdGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1EV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewot
ICAgIHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVT
RU5UX0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRf
SU5URVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9U
V087Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFOwotICAg
ICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZB
TF9ERUZBVUxUOwotfQotCi1ib29sIFN1cmZhY2U6OnN3YXAoKQotewotICAgIHJldHVybiBzd2Fw
UmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOwotfQotCi1ib29sIFN1cmZhY2U6OnBvc3RTdWJC
dWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17
Ci0gICAgaWYgKCFtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNw
ZWMgaXMgbm90IGNsZWFyIGFib3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN3YXBSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdAotewot
ICAgIHJldHVybiBtV2lkdGg7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25z
dAotewotICAgIHJldHVybiBtSGVpZ2h0OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3Vi
QnVmZmVyU3VwcG9ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBw
b3J0ZWQ7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkg
KlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbVJlbmRlclRhcmdldDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0
M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRo
U3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotICAgIH0K
LQotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqU3Vy
ZmFjZTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJl
KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQot
ICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRTd2Fw
SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIGlmIChtU3dhcEludGVydmFsID09IGlu
dGVydmFsKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtU3dhcElu
dGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1Td2FwSW50
ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNaW5Td2FwSW50ZXJ2YWwoKSk7Ci0gICAgbVN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50ZXJ2YWwo
KSk7Ci0KLSAgICBtUHJlc2VudEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2
YWwpOwotICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7Ci19Ci0KLUVHTGVudW0gU3Vy
ZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlRm9y
bWF0OwotfQotCi1FR0xlbnVtIFN1cmZhY2U6OmdldFRleHR1cmVUYXJnZXQoKSBjb25zdAotewot
ICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRCb3VuZFRl
eHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAgICBtVGV4dHVyZSA9IHRleHR1cmU7
Ci19Ci0KLWdsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi1EM0RGT1JNQVQgU3VyZmFjZTo6Z2V0Rm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsKLX0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFj
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYmQ3MDIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3VyZmFjZS5oOiBEZWZpbmVzIHRo
ZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQotLy8g
c3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBi
dWZmZXJzLgotLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxp
dHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCi0KLSNpZm5kZWYgSU5DTFVERV9TVVJG
QUNFX0hfCi0jZGVmaW5lIElOQ0xVREVfU1VSRkFDRV9IXwotCi0jZGVmaW5lIEVHTEFQSQotI2lu
Y2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFRleHR1cmUyRDsKLX0KLQot
bmFtZXNwYWNlIGVnbAotewotY2xhc3MgRGlzcGxheTsKLWNsYXNzIENvbmZpZzsKLQotY2xhc3Mg
U3VyZmFjZQotewotICBwdWJsaWM6Ci0gICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQpOwotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25m
aWcgKmNvbmZpZywgSEFORExFIHNoYXJlSGFuZGxlLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWln
aHQsIEVHTGVudW0gdGV4dHVyZUZvcm1hdCwgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0KTsKLQotICAg
IH5TdXJmYWNlKCk7Ci0KLSAgICBib29sIGluaXRpYWxpemUoKTsKLSAgICB2b2lkIHJlbGVhc2Uo
KTsKLSAgICBib29sIHJlc2V0U3dhcENoYWluKCk7Ci0KLSAgICBIV05EIGdldFdpbmRvd0hhbmRs
ZSgpOwotICAgIGJvb2wgc3dhcCgpOwotICAgIGJvb2wgcG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwg
RUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIEVH
TGludCBnZXRXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRUdMaW50IGdldEhlaWdodCgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBFR0xpbnQgaXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsK
LSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB2
aXJ0dWFsIElEaXJlY3QzRFRleHR1cmU5ICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICBI
QU5ETEUgZ2V0U2hhcmVIYW5kbGUoKSB7IHJldHVybiBtU2hhcmVIYW5kbGU7IH0KLQotICAgIHZv
aWQgc2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCk7Ci0gICAgYm9vbCBjaGVja0Zvck91
dE9mRGF0ZVN3YXBDaGFpbigpOyAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzd2FwY2hhaW4gY2hhbmdl
ZCBkdWUgdG8gcmVzaXplIG9yIGludGVydmFsIHVwZGF0ZQotCi0gICAgdmlydHVhbCBFR0xlbnVt
IGdldFRleHR1cmVGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEVHTGVudW0gZ2V0VGV4dHVy
ZVRhcmdldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEZvcm1hdCgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlKTsKLSAgICB2aXJ0dWFsIGdsOjpUZXh0dXJlMkQgKmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKLQot
ICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKm1T
d2FwQ2hhaW47Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVmZmVyOwotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBtUmVu
ZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVyZTsKLQot
ICAgIEhBTkRMRSBtU2hhcmVIYW5kbGU7Ci0KLSAgICB2b2lkIHN1YmNsYXNzV2luZG93KCk7Ci0g
ICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7Ci0gICAgYm9vbCByZXNldFN3YXBDaGFpbihpbnQg
YmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7Ci0gICAgYm9vbCBzd2FwUmVj
dChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0gICAg
c3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOwotCi0gICAgY29u
c3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGF0IHRoZSBzdXJmYWNlIGlz
IGNyZWF0ZWQgZm9yLgotICAgIGJvb2wgbVdpbmRvd1N1YmNsYXNzZWQ7ICAgICAgICAvLyBJbmRp
Y2F0ZXMgd2hldGhlciB3ZSBzdWNjZXNzZnVsbHkgc3ViY2xhc3NlZCBtV2luZG93IGZvciBXTV9S
RVNJWkUgaG9va2luZwotICAgIGNvbnN0IGVnbDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wg
Y29uZmlnIHN1cmZhY2Ugd2FzIGNyZWF0ZWQgd2l0aAotICAgIEVHTGludCBtSGVpZ2h0OyAgICAg
ICAgICAgICAgICAvLyBIZWlnaHQgb2Ygc3VyZmFjZQotICAgIEVHTGludCBtV2lkdGg7ICAgICAg
ICAgICAgICAgICAvLyBXaWR0aCBvZiBzdXJmYWNlCi0vLyAgRUdMaW50IGhvcml6b250YWxSZXNv
bHV0aW9uOyAgIC8vIEhvcml6b250YWwgZG90IHBpdGNoCi0vLyAgRUdMaW50IHZlcnRpY2FsUmVz
b2x1dGlvbjsgICAgIC8vIFZlcnRpY2FsIGRvdCBwaXRjaAotLy8gIEVHTEJvb2xlYW4gbGFyZ2Vz
dFBCdWZmZXI7ICAgICAvLyBJZiB0cnVlLCBjcmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxl
Ci0vLyAgRUdMQm9vbGVhbiBtaXBtYXBUZXh0dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBo
YXMgbWlwbWFwcwotLy8gIEVHTGludCBtaXBtYXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAg
bGV2ZWwgdG8gcmVuZGVyIHRvCi0vLyAgRUdMZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8v
IE11bHRpc2FtcGxlIHJlc29sdmUgYmVoYXZpb3IKLSAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0
aW87ICAgICAgLy8gRGlzcGxheSBhc3BlY3QgcmF0aW8KLSAgICBFR0xlbnVtIG1SZW5kZXJCdWZm
ZXI7ICAgICAgICAgLy8gUmVuZGVyIGJ1ZmZlcgotICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsg
ICAgICAgICAvLyBCdWZmZXIgc3dhcCBiZWhhdmlvcgotICAgIEVHTGVudW0gbVRleHR1cmVGb3Jt
YXQ7ICAgICAgICAvLyBGb3JtYXQgb2YgdGV4dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJl
Ci0gICAgRUdMZW51bSBtVGV4dHVyZVRhcmdldDsgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTog
MkQgb3Igbm8gdGV4dHVyZQotLy8gIEVHTGVudW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBB
bHBoYSBmb3JtYXQgZm9yIE9wZW5WRwotLy8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAg
ICAvLyBDb2xvciBzcGFjZSBmb3IgT3BlblZHCi0gICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7Ci0g
ICAgRUdMaW50IG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwotICAgIAotICAgIERXT1JEIG1QcmVz
ZW50SW50ZXJ2YWw7Ci0gICAgYm9vbCBtUHJlc2VudEludGVydmFsRGlydHk7Ci0gICAgZ2w6OlRl
eHR1cmUyRCAqbVRleHR1cmU7Ci19OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0Vf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdM
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4OWQyYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMTgxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGxpYkVHTC5jcHA6IEltcGxl
bWVudHMgdGhlIGV4cG9ydGVkIEVHTCBmdW5jdGlvbnMuCi0KLSNpbmNsdWRlIDxleGNlcHRpb24+
Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Rl
eHR1cmUuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0jaW5jbHVkZSAibGliRUdML0Rp
c3BsYXkuaCIKLQotCi1ib29sIHZhbGlkYXRlRGlzcGxheShlZ2w6OkRpc3BsYXkgKmRpc3BsYXkp
Ci17Ci0gICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFk
aXNwbGF5LT5pc0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIHZhbGlkYXRlQ29uZmlnKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmlnIGNv
bmZpZykKLXsKLSAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb25m
aWcoY29uZmlnKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywg
ZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHZhbGlkYXRlQ29u
dGV4dChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAg
IGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdXJmYWNlKGVnbDo6
RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIGlmICghdmFs
aWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGlmICghZGlzcGxheS0+aXNWYWxpZFN1cmZhY2Uoc3VyZmFjZSkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWV4dGVybiAiQyIKLXsKLUVHTGludCBfX3N0ZGNhbGwgZWds
R2V0RXJyb3Iodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIEVHTGludCBlcnJvciA9
IGVnbDo6Z2V0Q3VycmVudEVycm9yKCk7Ci0KLSAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1Mp
Ci0gICAgewotICAgICAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihFR0xfU1VDQ0VTUyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGVycm9yOwotfQotCi1FR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRE
aXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQpCi17Ci0gICAgRVZFTlQoIihF
R0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5X2lkID0gMHglMC44cCkiLCBkaXNwbGF5X2lkKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVnbDo6RGlzcGxheTo6Z2V0RGlzcGxh
eShkaXNwbGF5X2lkKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKLSAg
ICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBk
cHksIEVHTGludCAqbWFqb3IsIEVHTGludCAqbWlub3IpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9y
ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBF
R0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOwot
ICAgICAgICBpZiAobWlub3IpICptaW5vciA9IDQ7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
RUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0K
LUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFRlcm1pbmF0ZShFR0xEaXNwbGF5IGRweSkKLXsKLSAg
ICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCkiLCBkcHkpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBpZiAoZHB5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpE
aXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBkaXNwbGF5LT50ZXJtaW5hdGUoKTsKLQotICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOwotICAgIH0KLX0KLQotY29uc3QgY2hhciAqX19zdGRjYWxsIGVnbFF1ZXJ5U3RyaW5nKEVH
TERpc3BsYXkgZHB5LCBFR0xpbnQgbmFtZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5
ID0gMHglMC44cCwgRUdMaW50IG5hbWUgPSAlZCkiLCBkcHksIG5hbWUpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAobmFtZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRUdMX0NMSUVOVF9BUElT
OgotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoIk9wZW5HTF9FUyIpOwotICAgICAgICAgIGNh
c2UgRUdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gZGlzcGxheS0+Z2V0RXh0ZW5z
aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVORE9SOgotICAgICAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoIkdvb2dsZSBJbmMuIik7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVSU0lPTjoK
LSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKEFOR0xFICJWRVJTSU9OX1NUUklORyIp
Iik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIs
IChjb25zdCBjaGFyKilOVUxMKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChjb25zdCBjaGFyKilO
VUxMKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdM
RGlzcGxheSBkcHksIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xp
bnQgKm51bV9jb25maWcpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAs
IEVHTENvbmZpZyAqY29uZmlncyA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiRUdMaW50IGNvbmZp
Z19zaXplID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBk
cHksIGNvbmZpZ3MsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghbnVtX2NvbmZpZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qg
RUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07Ci0KLSAgICAgICAgaWYgKCFkaXNw
bGF5LT5nZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJpYkxpc3QsIGNvbmZpZ19zaXplLCBudW1fY29u
ZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklC
VVRFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRweSwgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmlnX3Np
emUsIEVHTGludCAqbnVtX2NvbmZpZykKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAsICIKLSAgICAgICAg
ICAiRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZpZ19zaXplID0gJWQs
IEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGF0dHJpYl9s
aXN0LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIW51bV9jb25maWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0
IEVHTGludCBhdHRyaWJMaXN0W10gPSAgICB7RUdMX05PTkV9OwotCi0gICAgICAgIGlmICghYXR0
cmliX2xpc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYl9saXN0ID0gYXR0cmliTGlz
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGRpc3BsYXktPmdldENvbmZpZ3MoY29uZmlncywgYXR0
cmliX2xpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgICAgICByZXR1cm4gc3Vj
Y2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0K
LX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsR2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkg
ZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQot
ewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmln
ID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44
cCkiLAotICAgICAgICAgIGRweSwgY29uZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXks
IGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZpZ0F0dHJpYihjb25maWcsIGF0
dHJpYnV0ZSwgdmFsdWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAg
IH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlV2luZG93U3VyZmFjZShFR0xE
aXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4sIGNv
bnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xOYXRpdmVXaW5kb3dUeXBl
IHdpbiA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9
IDB4JTAuOHApIiwgZHB5LCBjb25maWcsIHdpbiwgYXR0cmliX2xpc3QpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29u
ZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSFdORCB3aW5kb3cgPSAoSFdORCl3aW47Ci0KLSAgICAgICAgaWYg
KCFJc1dpbmRvdyh3aW5kb3cpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9OQVRJVkVfV0lORE9XLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZGlzcGxheS0+Y3JlYXRlV2luZG93U3VyZmFjZSh3aW5kb3csIGNvbmZpZywg
YXR0cmliX2xpc3QpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAg
IH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdM
RGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
Ci17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25m
aWcgPSAweCUwLjhwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAotICAg
ICAgICAgIGRweSwgY29uZmlnLCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gZGlzcGxheS0+Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShjb25maWcsIE5V
TEwsIGF0dHJpYl9saXN0KTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsK
LSAgICB9Ci19Ci0KLUVHTFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVBpeG1hcFN1cmZhY2Uo
RUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4
bWFwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlUGl4
bWFwVHlwZSBwaXhtYXAgPSAweCUwLjhwLCAiCi0gICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QgPSAweCUwLjhwKSIsIGRweSwgY29uZmlnLCBwaXhtYXAsIGF0dHJpYl9saXN0KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmln
KGRpc3BsYXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9f
U1VSRkFDRTsKLSAgICAgICAgfQotCi0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRj
YWxsIGVnbERlc3Ryb3lTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2Up
Ci17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpT
dXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxh
eSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZB
TFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRpc3BsYXktPmRlc3Ryb3lTdXJmYWNlKChlZ2w6
OlN1cmZhY2UqKXN1cmZhY2UpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsK
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFu
IF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdM
aW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAg
IGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1
cmZhY2U7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFj
ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBFR0xfVkdfQUxQSEFfRk9STUFUOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9WR19DT0xP
UlNQQUNFOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6Ci0gICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgRUdMX0hFSUdIVDoKLSAgICAgICAgICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmdldEhl
aWdodCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfSE9SSVpPTlRB
TF9SRVNPTFVUSU9OOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9MQVJHRVNUX1BCVUZGRVI6Ci0g
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgRUdMX01JUE1BUF9URVhUVVJFOgotICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEVHTF9NSVBNQVBfTEVWRUw6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX01VTFRJU0FNUExFX1JF
U09MVkU6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1BJWEVMX0FTUEVDVF9SQVRJTzoKLSAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBFR0xfUkVOREVSX0JVRkZFUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xf
U1dBUF9CRUhBVklPUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9GT1JNQVQ6Ci0g
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfVEFSR0VUOgotICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEVHTF9WRVJUSUNBTF9SRVNPTFVUSU9OOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9XSURUSDoK
LSAgICAgICAgICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05W
OgotICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9y
dGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5
U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBF
R0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5
IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRy
aWJ1dGUgPSAlZCwgdm9pZCAqKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgc3Vy
ZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAg
ICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7Ci0K
LSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN3aXRjaCAoYXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xf
RDNEX1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFOgotICAgICAgICAgICAgKnZhbHVlID0g
KHZvaWQqKSBlZ2xTdXJmYWNlLT5nZXRTaGFyZUhhbmRsZSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FU
VFJJQlVURSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdWNjZXNz
KEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQot
Ci1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kQVBJKEVHTGVudW0gYXBpKQotewotICAgIEVW
RU5UKCIoRUdMZW51bSBhcGkgPSAweCVYKSIsIGFwaSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoYXBpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0FQ
SToKLSAgICAgICAgICBjYXNlIEVHTF9PUEVOVkdfQVBJOgotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOyAgIC8vIE5vdCBzdXBwb3J0ZWQgYnkg
dGhpcyBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9FU19BUEk6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZWdsOjpzZXRDdXJyZW50QVBJKGFwaSk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TGVudW0gX19zdGRjYWxsIGVnbFF1ZXJ5QVBJKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIEVHTGVudW0gQVBJID0gZWdsOjpnZXRDdXJyZW50QVBJ
KCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoQVBJKTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xp
ZW50KHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDAp
OwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbFJlbGVhc2VUaHJlYWQodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsTWFrZUN1cnJlbnQoRUdMX05PX0RJU1BMQVks
IEVHTF9OT19DT05URVhULCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UpOwotCi0gICAg
ICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7Ci0gICAgfQotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQYnVmZmVy
RnJvbUNsaWVudEJ1ZmZlcihFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBidWZ0eXBlLCBFR0xDbGll
bnRCdWZmZXIgYnVmZmVyLCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9s
aXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xlbnVtIGJ1
ZnR5cGUgPSAweCVYLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyID0gMHglMC44cCwgIgotICAgICAg
ICAgICJFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlz
dCA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGJ1ZnR5cGUsIGJ1ZmZlciwgY29uZmlnLCBh
dHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVmdHlwZSAh
PSBFR0xfRDNEX1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFIHx8ICFidWZmZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05P
X1NVUkZBQ0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZU9m
ZnNjcmVlblN1cmZhY2UoY29uZmlnLCAoSEFORExFKWJ1ZmZlciwgYXR0cmliX2xpc3QpOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVh
biBfX3N0ZGNhbGwgZWdsU3VyZmFjZUF0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBz
dXJmYWNlLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgdmFsdWUpCi17Ci0gICAgRVZFTlQoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVH
TGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50IHZhbHVlID0gJWQpIiwKLSAgICAgICAgICBkcHks
IHN1cmZhY2UsIGF0dHJpYnV0ZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwot
ICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZh
Y2UqPihzdXJmYWNlKTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBl
Z2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKLXsKLSAgICBF
VkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHgl
MC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8
ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0g
c3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVmZmVyICE9IEVH
TF9CQUNLX0JVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZh
Y2UgPT0gRUdMX05PX1NVUkZBQ0UgfHwgZWdsU3VyZmFjZS0+Z2V0V2luZG93SGFuZGxlKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9G
QUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWdsU3VyZmFjZS0+Z2V0Qm91bmRUZXh0
dXJlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FDQ0VT
UywgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5nZXRU
ZXh0dXJlRm9ybWF0KCkgPT0gRUdMX05PX1RFWFRVUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFnbEJpbmRUZXhJbWFnZShlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFz
ZVRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZm
ZXIpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ug
c3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1
ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9
IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAq
ZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAg
ICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGJ1ZmZlciAhPSBFR0xfQkFDS19CVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFIHx8IGVnbFN1cmZhY2UtPmdldFdpbmRv
d0hhbmRsZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9T
VVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2Ut
PmdldFRleHR1cmVGb3JtYXQoKSA9PSBFR0xfTk9fVEVYVFVSRSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gZWdsU3VyZmFjZS0+Z2V0Qm91bmRU
ZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRleHR1cmUtPnJlbGVhc2VUZXhJbWFnZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAg
ICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFN3YXBJbnRlcnZhbChFR0xEaXNwbGF5
IGRweSwgRUdMaW50IGludGVydmFsKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAw
eCUwLjhwLCBFR0xpbnQgaW50ZXJ2YWwgPSAlZCkiLCBkcHksIGludGVydmFsKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZHJhd19zdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpT
dXJmYWNlKj4oZWdsOjpnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSk7Ci0KLSAgICAgICAgaWYgKGRy
YXdfc3VyZmFjZSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBkcmF3X3N1cmZhY2UtPnNldFN3YXBJbnRlcnZhbChpbnRlcnZhbCk7Ci0KLSAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsK
LSAgICB9Ci19Ci0KLUVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUdMRGlz
cGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCwgY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTENvbnRleHQgc2hhcmVfY29u
dGV4dCA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9
IDB4JTAuOHApIiwgZHB5LCBjb25maWcsIHNoYXJlX2NvbnRleHQsIGF0dHJpYl9saXN0KTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNp
b24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KLSAgICAgICAgRUdMaW50IGNs
aWVudF92ZXJzaW9uID0gMTsKLSAgICAgICAgYm9vbCByZXNldF9ub3RpZmljYXRpb24gPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCByb2J1c3RfYWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGF0
dHJpYl9saXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEVHTGludCogYXR0
cmlidXRlID0gYXR0cmliX2xpc3Q7IGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORTsgYXR0cmlidXRl
ICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVb
MF0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTjoKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50X3ZlcnNpb24gPSBh
dHRyaWJ1dGVbMV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgY2FzZSBFR0xfQ09OVEVYVF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVbMV0gPT0gRUdMX1RSVUUpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJ
RywgRUdMX05PX0NPTlRFWFQpOyAgIC8vIFVuaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHJvYnVzdF9hY2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZVsxXSAhPSBFR0xfRkFMU0UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lf
RVhUOgotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlWzFdID09IEVHTF9MT1NFX0NP
TlRFWFRfT05fUkVTRVRfRVhUKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfbm90aWZp
Y2F0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlWzFd
ICE9IEVHTF9OT19SRVNFVF9OT1RJRklDQVRJT05fRVhUKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09O
VEVYVCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQgJiYgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihz
aGFyZV9jb250ZXh0KS0+aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKSAhPSByZXNldF9ub3Rp
ZmljYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01B
VENILCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlm
ICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwotICAgICAgICB9Ci0KLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2Fj
Y2Vzcyk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gc3VjY2Vz
cyhjb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9D
T05URVhUX0xPU1QsIEVHTF9OT19DT05URVhUKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19DT05URVhUKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbERlc3Ryb3lD
b250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCkKLXsKLSAgICBFVkVOVCgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsIGRweSwg
Y3R4KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
c3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZUNvbnRleHQoZGlzcGxheSwgY29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3R4ID09IEVHTF9O
T19DT05URVhUKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9D
T05URVhULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+ZGVzdHJv
eUNvbnRleHQoY29udGV4dCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4g
X19zdGRjYWxsIGVnbE1ha2VDdXJyZW50KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIGRyYXcs
IEVHTFN1cmZhY2UgcmVhZCwgRUdMQ29udGV4dCBjdHgpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2UgZHJhdyA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ug
cmVhZCA9IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLAotICAgICAgICAgIGRw
eSwgZHJhdywgcmVhZCwgY3R4KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0g
ICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOwot
Ci0gICAgICAgIGlmICghZGV2aWNlIHx8IGRpc3BsYXktPnRlc3REZXZpY2VMb3N0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGRpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAg
ICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlzcGxheS0+
aXNEZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Q09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGN0eCAh
PSBFR0xfTk9fQ09OVEVYVCAmJiAhdmFsaWRhdGVDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKChkcmF3ICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZVN1cmZhY2UoZGlz
cGxheSwgc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZHJhdykpKSB8fAotICAgICAgICAgICAg
KHJlYWQgIT0gRUdMX05PX1NVUkZBQ0UgJiYgIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBzdGF0
aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihyZWFkKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRyYXcgIT0gcmVhZCkK
LSAgICAgICAgewotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAg
ICAgIH0KLQotICAgICAgICBlZ2w6OnNldEN1cnJlbnREaXNwbGF5KGRweSk7Ci0gICAgICAgIGVn
bDo6c2V0Q3VycmVudERyYXdTdXJmYWNlKGRyYXcpOwotICAgICAgICBlZ2w6OnNldEN1cnJlbnRS
ZWFkU3VyZmFjZShyZWFkKTsKLQotICAgICAgICBnbE1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3Bs
YXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKTsKLQotICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAg
IH0KLX0KLQotRUdMQ29udGV4dCBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudENvbnRleHQodm9pZCkK
LXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZ2xHZXRDdXJyZW50Q29udGV4dCgpOwotCi0gICAgICAgIHJldHVybiBzdWNj
ZXNzKGNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0NPTlRFWFQpOwotICAg
IH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMaW50
IHJlYWRkcmF3KQotewotICAgIEVWRU5UKCIoRUdMaW50IHJlYWRkcmF3ID0gJWQpIiwgcmVhZGRy
YXcpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAocmVhZGRyYXcgPT0gRUdMX1JFQUQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVHTFN1cmZhY2UgcmVhZCA9IGVnbDo6Z2V0Q3VycmVu
dFJlYWRTdXJmYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhyZWFkKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChyZWFkZHJhdyA9PSBFR0xfRFJBVykKLSAgICAgICAgewot
ICAgICAgICAgICAgRUdMU3VyZmFjZSBkcmF3ID0gZWdsOjpnZXRDdXJyZW50RHJhd1N1cmZhY2Uo
KTsKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKGRyYXcpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1F
VEVSLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9OT19TVVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTERpc3BsYXkgX19zdGRjYWxsIGVnbEdldEN1
cnJlbnREaXNwbGF5KHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIEVHTERpc3BsYXkgZHB5ID0gZWdsOjpnZXRDdXJyZW50RGlzcGxheSgpOwotCi0g
ICAgICAgIHJldHVybiBzdWNjZXNzKGRweSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9f
RElTUExBWSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeUNvbnRl
eHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xD
b250ZXh0IGN0eCA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2YWx1
ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGN0eCwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19j
YXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVD
b250ZXh0KGRpc3BsYXksIGNvbnRleHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
RUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCi0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdEdMKHZv
aWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbFdhaXROYXRpdmUoRUdMaW50IGVuZ2luZSkKLXsKLSAgICBFVkVOVCgiKEVHTGlu
dCBlbmdpbmUgPSAlZCkiLCBlbmdpbmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNl
KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1
cmZhY2UgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1
cmZhY2U7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFj
ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZGlzcGxheS0+aXNEZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZWdsU3VyZmFjZS0+c3dhcCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9GQUxTRTsK
LX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHks
IEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpCi17Ci0gICAg
RVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4
JTAuOHAsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0ID0gMHglMC44cCkiLCBkcHksIHN1cmZh
Y2UsIHRhcmdldCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3Vy
ZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwot
Ci0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNj
ZXNzKDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbFBvc3RTdWJCdWZmZXJOVihFR0xEaXNwbGF5IGRweSwgRUdM
U3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50
IGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3Vy
ZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IHggPSAlZCwgRUdMaW50IHkgPSAlZCwgRUdM
aW50IHdpZHRoID0gJWQsIEVHTGludCBoZWlnaHQgPSAlZCkiLCBkcHksIHN1cmZhY2UsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoeCA8IDAgfHwg
eSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0
PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNl
KGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwg
RUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19T
VVJGQUNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJG
QUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2UtPnBv
c3RTdWJCdWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1fX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBlZ2xHZXRQcm9j
QWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKLXsKLSAgICBFVkVOVCgiKGNvbnN0IGNoYXIg
KnByb2NuYW1lID0gXCIlc1wiKSIsIHByb2NuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgc3RydWN0IEV4dGVuc2lvbgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpu
YW1lOwotICAgICAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSBhZGRyZXNzOwotICAgICAgICB9OwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24g
ZWdsRXh0ZW5zaW9uc1tdID0KLSAgICAgICAgewotICAgICAgICAgICAgeyJlZ2xRdWVyeVN1cmZh
Y2VQb2ludGVyQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSllZ2xRdWVyeVN1cmZhY2VQb2ludGVyQU5HTEV9LAotICAgICAgICAgICAgeyJlZ2xQb3N0U3Vi
QnVmZmVyTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xQ
b3N0U3ViQnVmZmVyTlZ9LAotICAgICAgICAgICAgeyIiLCBOVUxMfSwKLSAgICAgICAgfTsKLQot
ICAgICAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2YoZWdsRXh0ZW5zaW9ucykgLyBz
aXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHJj
bXAocHJvY25hbWUsIGVnbEV4dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSllZ2xFeHRlbnNpb25zW2V4dF0uYWRkcmVzczsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBnbEdldFByb2NBZGRyZXNzKHByb2NuYW1lKTsKLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKU5VTEwpOwotICAgIH0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNWU2Ny4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5k
ZWYKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1MSUJSQVJZCWxpYkVHTAotRVhQT1JU
UwotCWVnbEJpbmRBUEkgICAgICAgICAgICAgICAgICAgICAgQDE0Ci0JZWdsQmluZFRleEltYWdl
ICAgICAgICAgICAgICAgICBAMjAKLQllZ2xDaG9vc2VDb25maWcgICAgICAgICAgICAgICAgIEA3
Ci0JZWdsQ29weUJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzMKLQllZ2xDcmVhdGVDb250ZXh0
ICAgICAgICAgICAgICAgIEAyMwotCWVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAg
ICAgICBAMTgKLQllZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZSAgICAgICAgIEAxMAotCWVnbENyZWF0
ZVBpeG1hcFN1cmZhY2UgICAgICAgICAgQDExCi0JZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAg
ICAgICBAOQotCWVnbERlc3Ryb3lDb250ZXh0ICAgICAgICAgICAgICAgQDI0Ci0JZWdsRGVzdHJv
eVN1cmZhY2UgICAgICAgICAgICAgICBAMTIKLQllZ2xHZXRDb25maWdBdHRyaWIgICAgICAgICAg
ICAgIEA4Ci0JZWdsR2V0Q29uZmlncyAgICAgICAgICAgICAgICAgICBANgotCWVnbEdldEN1cnJl
bnRDb250ZXh0ICAgICAgICAgICAgQDI2Ci0JZWdsR2V0Q3VycmVudERpc3BsYXkgICAgICAgICAg
ICBAMjgKLQllZ2xHZXRDdXJyZW50U3VyZmFjZSAgICAgICAgICAgIEAyNwotCWVnbEdldERpc3Bs
YXkgICAgICAgICAgICAgICAgICAgQDIKLQllZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAg
IEAxCi0JZWdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICBAMzQKLQllZ2xJbml0aWFsaXpl
ICAgICAgICAgICAgICAgICAgIEAzCi0JZWdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICBA
MjUKLQllZ2xRdWVyeUFQSSAgICAgICAgICAgICAgICAgICAgIEAxNQotCWVnbFF1ZXJ5Q29udGV4
dCAgICAgICAgICAgICAgICAgQDI5Ci0JZWdsUXVlcnlTdHJpbmcgICAgICAgICAgICAgICAgICBA
NQotCWVnbFF1ZXJ5U3VyZmFjZSAgICAgICAgICAgICAgICAgQDEzCi0JZWdsUmVsZWFzZVRleElt
YWdlICAgICAgICAgICAgICBAMjEKLQllZ2xSZWxlYXNlVGhyZWFkICAgICAgICAgICAgICAgIEAx
NwotCWVnbFN1cmZhY2VBdHRyaWIgICAgICAgICAgICAgICAgQDE5Ci0JZWdsU3dhcEJ1ZmZlcnMg
ICAgICAgICAgICAgICAgICBAMzIKLQllZ2xTd2FwSW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAy
MgotCWVnbFRlcm1pbmF0ZSAgICAgICAgICAgICAgICAgICAgQDQKLQllZ2xXYWl0Q2xpZW50ICAg
ICAgICAgICAgICAgICAgIEAxNgotCWVnbFdhaXRHTCAgICAgICAgICAgICAgICAgICAgICAgQDMw
Ci0JZWdsV2FpdE5hdGl2ZSAgICAgICAgICAgICAgICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDFmMzJmLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjCisrKyAvZGV2L251bGwK
QEAgLTEsMTAyICswLDAgQEAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNv
dXJjZSBzY3JpcHQuCi0vLwotI2luY2x1ZGUgInJlc291cmNlLmgiCi0KLSNkZWZpbmUgQVBTVFVE
SU9fUkVBRE9OTFlfU1lNQk9MUwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5lcmF0
ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KLS8vCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0jdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVT
T1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdV
QUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgx
MjUyKQotI2VuZGlmIC8vX1dJTjMyCi0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8KLS8vIFRFWFRJTkNMVURFCi0vLwotCi0xIFRFWFRJTkNMVURFIAot
QkVHSU4KLSAgICAicmVzb3VyY2UuaFwwIgotRU5ECi0KLTIgVEVYVElOQ0xVREUgCi1CRUdJTgot
ICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1v
bi92ZXJzaW9uLmgiIlwwIgotRU5ECi0KLTMgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJcclxu
IgotICAgICJcMCIKLUVORAotCi0jZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAotCi0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gVmVyc2lvbgotLy8KLQotVlNfVkVSU0lPTl9JTkZP
IFZFUlNJT05JTkZPCi0gRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJV
SUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9O
LE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTgotIEZJTEVGTEFHU01B
U0sgMHgxN0wKLSNpZmRlZiBfREVCVUcKLSBGSUxFRkxBR1MgMHgxTAotI2Vsc2UKLSBGSUxFRkxB
R1MgMHgwTAotI2VuZGlmCi0gRklMRU9TIDB4NEwKLSBGSUxFVFlQRSAweDJMCi0gRklMRVNVQlRZ
UEUgMHgwTAotQkVHSU4KLSAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCi0gICAgQkVHSU4KLSAg
ICAgICAgQkxPQ0sgIjA0MDkwNGIwIgotICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUg
IkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnkiCi0g
ICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORwotICAgICAgICAg
ICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiCi0gICAgICAgICAgICBWQUxVRSAiTGVn
YWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgotICAgICAgICAg
ICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliRUdMLmRsbCIKLSAgICAgICAgICAgIFZB
TFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIlBy
b2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAg
ICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgIEVORAot
ICAgIEVORAotICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBWQUxV
RSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAotICAgIEVORAotRU5ECi0KLSNlbmRpZiAgICAv
LyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0j
aWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2Vu
ZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0jZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvaiBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyZDI5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw0
NDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+
Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgotCVZlcnNp
b249IjkuMDAiCi0JTmFtZT0ibGliRUdMIgotCVByb2plY3RHVUlEPSJ7RTc0NkZDQTktNjRDMy00
MzNFLTg1RTgtOUE1QTY3QUI3RUQ2fSIKLQlSb290TmFtZXNwYWNlPSJsaWJFR0wiCi0JS2V5d29y
ZD0iV2luMzJQcm9qIgotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiIKLQk+Ci0JPFBs
YXRmb3Jtcz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJLz4KLQkJPFBsYXRmb3Jt
Ci0JCQlOYW1lPSJ4NjQiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8L1Rv
b2xGaWxlcz4KLQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFt
ZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
V2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
PSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJl
cHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVH
TF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5pbWFs
UmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxp
YnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVs
PSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQy
NDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJm
YWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0
cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxl
clRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25z
PSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBkeGd1aWQu
bGliIGR3bWFwaS5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIgotCQkJCU1vZHVsZURlZmlu
aXRpb25GaWxlPSJsaWJFR0wuZGVmIgotCQkJCURlbGF5TG9hZERMTHM9ImR3bWFwaS5kbGwiCi0J
CQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJ
CQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249
IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
QUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
RnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlD
b21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0
RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25m
aWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Igot
CQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVs
ZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFt
ZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdo
b2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
cmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVp
bGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9y
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIK
LQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUi
Ci0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNS
RExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VD
VVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJCVVzZVByZWNvbXBpbGVkSGVh
ZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyIgotCQkJCURldGVjdDY0
Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1h
dD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9v
bCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVu
ZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21hcGkubGliIgotCQkJCUxpbmtJbmNyZW1l
bnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJCQlEZWxh
eUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1
ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgotCQkJCUVu
YWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJ
CURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjEiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENN
YWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
b3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7
bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwm
cXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wuZGxsJnF1b3Q7ICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmxpYiZxdW90OyAmcXVvdDskKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBB
O0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENv
bmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChT
b2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRl
cm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIK
LQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJT
ZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNN
SURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikv
Li4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVH
O19XSU5ET1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRF
O05PTUlOTUFYIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNo
ZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRl
cj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9
IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2NEJp
dFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9
IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1By
ZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wi
Ci0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRl
bmNpZXM9ImQzZDkubGliIGR4Z3VpZC5saWIgZHdtYXBpLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50
YWw9IjIiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiCi0JCQkJRGVsYXlM
b2FkRExMcz0iZHdtYXBpLmRsbCIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUi
Ci0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlE
YXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01h
a2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bv
c3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtt
a2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZx
dW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1
b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gw
RDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7
QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29u
ZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXx4NjQiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQo
U29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50
ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSki
Ci0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xl
UHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVC
dWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkJVGFyZ2V0RW52
aXJvbm1lbnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIK
LQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFBy
b2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJ
TjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05P
X0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIw
IgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJ
CQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7
NDUxMjs0NzAyIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0J
CQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVT
RUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21h
cGkubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmls
ZT0ibGliRUdMLmRlZiIKLQkJCQlEZWxheUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVy
YXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1p
emVSZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9t
aXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJ
CVRhcmdldE1hY2hpbmU9IjE3IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRM
aW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91
dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29u
ZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxp
YkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgot
CQk8L0NvbmZpZ3VyYXRpb24+Ci0JPC9Db25maWd1cmF0aW9ucz4KLQk8UmVmZXJlbmNlcz4KLQk8
L1JlZmVyZW5jZXM+Ci0JPEZpbGVzPgotCQk8RmlsdGVyCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMi
Ci0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Igot
CQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJG
Rn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuY3BwIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxDb21tb25cZGVi
dWcuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XERpc3BsYXkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXGxpYkVHTC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRl
cj4KLQkJPEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDto
eHg7aG07aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00
YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXENvbmZpZy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXERpc3BsYXkuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdMXGVnbGV4dC5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRl
XEVHTFxlZ2xwbGF0Zm9ybS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXG1haW4uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLlxyZXNvdXJjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXHZlcnNpb24uaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCTwvRmlsdGVyPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkVHTC5kZWYi
Ci0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wucmMi
Ci0JCQk+Ci0JCTwvRmlsZT4KLQk8L0ZpbGVzPgotCTxHbG9iYWxzPgotCTwvR2xvYmFscz4KLTwv
VmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvbWFpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L21haW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzEwN2JmLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5j
cHA6IERMTCBlbnRyeSBwb2ludCBhbmQgbWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4K
LQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
LQotc3RhdGljIERXT1JEIGN1cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7Ci0KLUJPT0wg
V0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCBy
ZXNlcnZlZCkKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikKLSAgICB7Ci0gICAgICBjYXNlIERMTF9Q
Uk9DRVNTX0FUVEFDSDoKLSAgICAgICAgewotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJB
Q0UpCi0gICAgICAgICAgICBGSUxFICpkZWJ1ZyA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAi
cnQiKTsKLQotICAgICAgICAgICAgaWYgKGRlYnVnKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZjbG9zZShkZWJ1Zyk7Ci0gICAgICAgICAgICAgICAgZGVidWcgPSBmb3BlbihUUkFD
RV9PVVRQVVRfRklMRSwgInd0Iik7ICAgLy8gRXJhc2UKLSAgICAgICAgICAgICAgICBmY2xvc2Uo
ZGVidWcpOwotICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgIGN1cnJlbnRUTFMg
PSBUbHNBbGxvYygpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09G
X0lOREVYRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5p
dGlhbGl6ZSBpbmRleAotICAgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewot
ICAgICAgICAgICAgZWdsOjpDdXJyZW50ICpjdXJyZW50ID0gKGVnbDo6Q3VycmVudCopTG9jYWxB
bGxvYyhMUFRSLCBzaXplb2YoZWdsOjpDdXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJy
ZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRU
TFMsIGN1cnJlbnQpOwotCi0gICAgICAgICAgICAgICAgY3VycmVudC0+ZXJyb3IgPSBFR0xfU1VD
Q0VTUzsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5BUEkgPSBFR0xfT1BFTkdMX0VTX0FQSTsK
LSAgICAgICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBETExfVEhSRUFE
X0RFVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZh
bHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRExMX1BST0NFU1Nf
REVUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFs
dWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBUbHNGcmVlKGN1cnJlbnRUTFMpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLXZvaWQgc2V0Q3VycmVudEVycm9y
KEVHTGludCBlcnJvcikKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+ZXJyb3IgPSBlcnJvcjsKLX0KLQot
RUdMaW50IGdldEN1cnJlbnRFcnJvcigpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5lcnJv
cjsKLX0KLQotdm9pZCBzZXRDdXJyZW50QVBJKEVHTGVudW0gQVBJKQotewotICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJy
ZW50LT5BUEkgPSBBUEk7Ci19Ci0KLUVHTGVudW0gZ2V0Q3VycmVudEFQSSgpCi17Ci0gICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAg
IHJldHVybiBjdXJyZW50LT5BUEk7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlz
cGxheSBkcHkpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKLQotICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBkcHk7Ci19Ci0KLUVHTERp
c3BsYXkgZ2V0Q3VycmVudERpc3BsYXkoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3Vy
cmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZGlz
cGxheTsKLX0KLQotdm9pZCBzZXRDdXJyZW50RHJhd1N1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNl
KQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7Ci0KLSAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IHN1cmZhY2U7Ci19Ci0KLUVHTFN1
cmZhY2UgZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQt
PmRyYXdTdXJmYWNlOwotfQotCi12b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNl
IHN1cmZhY2UpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKLQotICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gc3VyZmFjZTsKLX0K
LQotRUdMU3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKQotewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4g
Y3VycmVudC0+cmVhZFN1cmZhY2U7Ci19Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29k
ZSkKLXsKLSAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihlcnJvckNvZGUpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDA5ZDllNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML21haW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIG1haW4uaDogTWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQot
I2lmbmRlZiBMSUJFR0xfTUFJTl9IXwotI2RlZmluZSBMSUJFR0xfTUFJTl9IXwotCi0jZGVmaW5l
IEVHTEFQSQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Ci0K
LW5hbWVzcGFjZSBlZ2wKLXsKLXN0cnVjdCBDdXJyZW50Ci17Ci0gICAgRUdMaW50IGVycm9yOwot
ICAgIEVHTGVudW0gQVBJOwotICAgIEVHTERpc3BsYXkgZGlzcGxheTsKLSAgICBFR0xTdXJmYWNl
IGRyYXdTdXJmYWNlOwotICAgIEVHTFN1cmZhY2UgcmVhZFN1cmZhY2U7Ci19OwotCi12b2lkIHNl
dEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpOwotRUdMaW50IGdldEN1cnJlbnRFcnJvcigpOwot
Ci12b2lkIHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpOwotRUdMZW51bSBnZXRDdXJyZW50QVBJ
KCk7Ci0KLXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpOwotRUdMRGlzcGxh
eSBnZXRDdXJyZW50RGlzcGxheSgpOwotCi12b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xT
dXJmYWNlIHN1cmZhY2UpOwotRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKLQot
dm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKLUVHTFN1cmZh
Y2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCk7Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9y
Q29kZSk7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdCBUICZlcnJvcihFR0xpbnQgZXJyb3JD
b2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0g
ICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPgotY29uc3QgVCAm
c3VjY2Vzcyhjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlZ2w6OnNldEN1cnJlbnRFcnJv
cihFR0xfU1VDQ0VTUyk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLSNlbmRpZiAg
Ly8gTElCRUdMX01BSU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvcmVzb3VyY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
cmVzb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyMWY0Yy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML3Jlc291cmNlLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vL3t7Tk9fREVQRU5ERU5DSUVTfX0KLS8vIE1p
Y3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUuCi0vLyBVc2VkIGJ5IGxp
YkVHTC5yYwotCi0vLyBOZXh0IGRlZmF1bHQgdmFsdWVzIGZvciBuZXcgb2JqZWN0cwotLy8gCi0j
aWZkZWYgQVBTVFVESU9fSU5WT0tFRAotI2lmbmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xT
Ci0jZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTAxCi0jZGVmaW5lIF9B
UFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgNDAwMDEKLSNkZWZpbmUgX0FQU19ORVhUX0NP
TlRST0xfVkFMVUUgICAgICAgICAxMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9TWU1FRF9WQUxVRSAg
ICAgICAgICAgMTAxCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQmxpdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEy
NDhkNjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9CbGl0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwNCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvQmxpdC5oIgotCi0jaW5jbHVkZSA8ZDNkeDkuaD4KLQotI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNw
YWNlCi17Ci0vLyBTdGFuZGFyZCBWZXJ0ZXggU2hhZGVyCi0vLyBJbnB1dCAwIGlzIHRoZSBob21v
Z2Vub3VzIHBvc2l0aW9uLgotLy8gT3V0cHV0cyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBhcy1p
cy4KLS8vIE91dHB1dHMgYSB0ZXggY29vcmQgd2l0aCAoMCwwKSBpbiB0aGUgdXBwZXItbGVmdCBj
b3JuZXIgb2YgdGhlIHNjcmVlbiBhbmQgKDEsMSkgaW4gdGhlIGJvdHRvbSByaWdodC4KLS8vIEMw
LlggbXVzdCBiZSBuZWdhdGl2ZSBoYWxmLXBpeGVsIHdpZHRoLCBDMC5ZIG11c3QgYmUgaGFsZi1w
aXhlbCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KLWNvbnN0IGNoYXIgc3RhbmRhcmR2c1tdID0K
LSJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0ie1xuIgotIiAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJ
VElPTjtcbiIKLSIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgotIn07XG4iCi0i
XG4iCi0idW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgotIlxuIgotIlZTX09V
VFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgotIntcbiIKLSIgICAg
VlNfT1VUUFVUIE91dDtcbiIKLSJcbiIKLSIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBo
YWxmUGl4ZWxTaXplO1xuIgotIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgw
LjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0i
ICAgIHJldHVybiBPdXQ7XG4iCi0ifVxuIjsKLQotLy8gRmxpcCBZIFZlcnRleCBTaGFkZXIKLS8v
IElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCi0vLyBPdXRwdXRzIHRoZSBob21v
Z2Vub3VzIHBvc2l0aW9uIGFzLWlzLgotLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDEp
IGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUg
Ym90dG9tIHJpZ2h0LgotLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQg
aGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCi1jb25zdCBjaGFyIGZsaXB5dnNbXSA9Ci0ic3RydWN0
IFZTX09VVFBVVFxuIgotIntcbiIKLSIgICAgZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT047XG4i
Ci0iICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDtcbiIKLSJ9O1xuIgotIlxuIgotInVu
aWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDtcbiIKLSJcbiIKLSJWU19PVVRQVVQgbWFp
bihpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTilcbiIKLSJ7XG4iCi0iICAgIFZTX09VVFBV
VCBPdXQ7XG4iCi0iXG4iCi0iICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVs
U2l6ZTtcbiIKLSIgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUs
IDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0iICAgIHJldHVy
biBPdXQ7XG4iCi0ifVxuIjsKLQotLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCi0vLyBPdXRw
dXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRleGNvb3JkIDAuCi1jb25zdCBjaGFyIHBhc3N0aHJv
dWdocHNbXSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotImZsb2F0NCBtYWluKGZs
b2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgotIntcbiIKLSIJcmV0dXJuIHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgotIn1cbiI7Ci0KLS8vIEx1bWluYW5jZSBDb252ZXJz
aW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgotLy8g
Rm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8gRm9yIEwg
b3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KLWNvbnN0IGNoYXIgbHVtaW5h
bmNlcHNbXSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0
IG1vZGUgOiBjMDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDApIDogQ09MT1JcbiIKLSJ7XG4iCi0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNv
b3JkLnh5KTtcbiIKLSIJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTtcbiIKLSIJcmV0
dXJuIHRtcC54eHh3O1xuIgotIn1cbiI7Ci0KLS8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVs
IFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9y
Y2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0vLyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9
IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8vIFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAs
IEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcgPSAwLgotY29uc3QgY2hhciBjb21w
b25lbnRtYXNrcHNbXSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0g
ZmxvYXQ0IG1vZGUgOiBjMDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1JcbiIKLSJ7XG4iCi0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KTtcbiIKLSIJdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7XG4iCi0iCXRt
cC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7XG4iCi0iCXJldHVybiB0bXA7XG4iCi0ifVxu
IjsKLQotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLQotY29uc3QgY2hhciAqIGNvbnN0IEJsaXQ6Om1T
aGFkZXJTb3VyY2VbXSA9Ci17Ci0gICAgc3RhbmRhcmR2cywKLSAgICBmbGlweXZzLAotICAgIHBh
c3N0aHJvdWdocHMsCi0gICAgbHVtaW5hbmNlcHMsCi0gICAgY29tcG9uZW50bWFza3BzCi19Owot
Ci1CbGl0OjpCbGl0KENvbnRleHQgKmNvbnRleHQpCi0gIDogbUNvbnRleHQoY29udGV4dCksIG1R
dWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xhcmF0aW9uKE5VTEwpLCBtU2F2
ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1TYXZlZERlcHRoU3RlbmNpbChOVUxMKSwgbVNhdmVkU3Rh
dGVCbG9jayhOVUxMKQotewotICAgIGluaXRHZW9tZXRyeSgpOwotICAgIG1lbXNldChtQ29tcGls
ZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykpOwotfQotCi1CbGl0Ojp+Qmxp
dCgpCi17Ci0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZlZFN0YXRlQmxvY2stPlJlbGVh
c2UoKTsKLSAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5SZWxl
YXNlKCk7Ci0gICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pIG1RdWFkVmVydGV4RGVjbGFy
YXRpb24tPlJlbGVhc2UoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBREVSX0NPVU5U
OyBpKyspCi0gICAgewotICAgICAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tpXSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVsZWFzZSgpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgpCi17Ci0gICAgc3RhdGljIGNv
bnN0IGZsb2F0IHF1YWRbXSA9Ci0gICAgewotICAgICAgICAtMSwgLTEsCi0gICAgICAgIC0xLCAg
MSwKLSAgICAgICAgIDEsIC0xLAotICAgICAgICAgMSwgIDEKLSAgICB9OwotCi0gICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemVvZihxdWFkKSwgRDNEVVNBR0VfV1JJVEVP
TkxZLCAwLCBEM0RQT09MX0RFRkFVTFQsICZtUXVhZFZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0KLSAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHZvaWQgKmxv
Y2tQdHIgPSBOVUxMOwotICAgIHJlc3VsdCA9IG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAs
ICZsb2NrUHRyLCAwKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCBsb2NrUHRyID09IE5V
TEwpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXpl
b2YocXVhZCkpOwotICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgIHN0YXRp
YyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KLSAgICB7Ci0gICAgICAgIHsg
MCwgMCwgRDNEREVDTFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xV
U0FHRV9QT1NJVElPTiwgMCB9LAotICAgICAgICBEM0RERUNMX0VORCgpCi0gICAgfTsKLQotICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVh
ZFZlcnRleERlY2xhcmF0aW9uKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KLWJvb2wgQmxp
dDo6c2V0U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAg
ICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5OjoqY3JlYXRl
U2hhZGVyKShjb25zdCBEV09SRCAqLCBEM0RTaGFkZXJUeXBlKiopLAotICAgICAgICAgICAgICAg
ICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNo
YWRlclR5cGUqKSkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2Uo
KTsKLQotICAgIEQzRFNoYWRlclR5cGUgKnNoYWRlcjsKLQotICAgIGlmIChtQ29tcGlsZWRTaGFk
ZXJzW3NvdXJjZV0gIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHNoYWRlciA9IHN0YXRpY19jYXN0
PEQzRFNoYWRlclR5cGUqPihtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0pOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBJRDNEWEJ1ZmZlciAqc2hhZGVyQ29kZTsKLSAgICAgICAgSFJF
U1VMVCBociA9IEQzRFhDb21waWxlU2hhZGVyKG1TaGFkZXJTb3VyY2Vbc291cmNlXSwgc3RybGVu
KG1TaGFkZXJTb3VyY2Vbc291cmNlXSksIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwg
JnNoYWRlckNvZGUsIE5VTEwsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjb21waWxlICVzIHNoYWRlciBmb3Ig
YmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwg
aHIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaHIg
PSAoZGV2aWNlLT4qY3JlYXRlU2hhZGVyKShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KHNoYWRl
ckNvZGUtPkdldEJ1ZmZlclBvaW50ZXIoKSksICZzaGFkZXIpOwotICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyQ29kZS0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRp
b24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc2hhZGVyQ29kZS0+UmVs
ZWFzZSgpOwotCi0gICAgICAgIG1Db21waWxlZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsKLSAg
ICB9Ci0KLSAgICBIUkVTVUxUIGhyID0gKGRldmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKLQot
ICAgIGlmIChGQUlMRUQoaHIpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0ICVz
IHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAo
aW50KXNvdXJjZSwgaHIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6c2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRl
cikKLXsKLSAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRl
ciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAi
LCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNl
OTo6U2V0VmVydGV4U2hhZGVyKTsKLX0KLQotYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFk
ZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRl
cjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6
ICJwc18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0
M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7Ci19Ci0KLVJFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJl
Y3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0Ci17Ci0gICAgRDNEU1VSRkFDRV9E
RVNDIGRlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBSRUNUIHJlY3Q7
Ci0gICAgcmVjdC5sZWZ0ID0gMDsKLSAgICByZWN0LnRvcCA9IDA7Ci0gICAgcmVjdC5yaWdodCA9
IGRlc2MuV2lkdGg7Ci0gICAgcmVjdC5ib3R0b20gPSBkZXNjLkhlaWdodDsKLQotICAgIHJldHVy
biByZWN0OwotfQotCi1ib29sIEJsaXQ6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAq
dGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwgZ2V0U3VyZmFjZVJlY3Qoc291
cmNlKSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0g
ICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWZXJ0ZXhTaGFk
ZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLSAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFT
U1RIUk9VR0gpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLSAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5F
QVIpOwotCi0gICAgc2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOwotCi0g
ICAgcmVuZGVyKCk7Ci0KLSAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3Rh
dGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmNvcHkoSURpcmVjdDNE
U3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3Jt
YXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAg
RDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc3REZXNj
OwotICAgIHNvdXJjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7Ci0gICAgZGVzdC0+R2V0RGVzYygm
ZGVzdERlc2MpOwotCi0gICAgaWYgKHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZvcm1h
dCAmJiBkZXN0RGVzYy5Vc2FnZSAmIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkgICAvLyBDYW4gdXNl
IFN0cmV0Y2hSZWN0Ci0gICAgewotICAgICAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlv
ZmZzZXQsIHhvZmZzZXQgKyAoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCksIHlv
ZmZzZXQgKyAoc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCl9OwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCAmc291cmNlUmVjdCwg
ZGVzdCwgJmRlc3RSZWN0LCBEM0RURVhGX1BPSU5UKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2UsIHNv
dXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmZvcm1hdENvbnZlcnQoSURpcmVjdDNE
U3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3Jt
YXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQotewotICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1
cmUoc291cmNlLCBzb3VyY2VSZWN0KTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7Ci0KLSAgICBzYXZlU3RhdGUoKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVy
ZSgwLCB0ZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKLQot
ICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOwotCi0gICAgc2V0
Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RG
b3JtYXQpKQotICAgIHsKLSAgICAgICAgcmVuZGVyKCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZS0+
UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkK
LXsKLSAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsK
LQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAg
ICAgIGNhc2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgb2theSA9IG9r
YXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0spOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BT
X0xVTUlOQU5DRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghb2theSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsgWCA9IDAsIFkg
PSAxLCBaID0gMiwgVyA9IDMgfTsKLQotICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3Rh
bnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgotICAgIC8vIFNlZSB0
aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCi0gICAgZmxvYXQgcHND
b25zdDBbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAg
ICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAg
ICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtXXSA9IDE7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICBwc0NvbnN0MFtaXSA9
IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
cHNDb25zdDBbWV0gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgZ2V0RGV2aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3Qw
LCAxKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6
Y29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJF
Q1QgJnNvdXJjZVJlY3QpCi17Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxh
eSgpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAg
RDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNl
RGVzYyk7Ci0KLSAgICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0g
ICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291
cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LCBzb3VyY2VEZXNjLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSop
TlVMTCk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOwot
ICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2Up
OwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
Ci0gICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgZGlz
cGxheS0+ZW5kU2NlbmUoKTsKLSAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHN1cmZh
Y2UsICZzb3VyY2VSZWN0LCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQot
ICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1
cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9pZCBCbGl0
OjpzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OwotCi0gICAgRDNEVklFV1BPUlQ5IHZwOwotICAgIHZwLlggICAgICA9IHhvZmZzZXQ7Ci0gICAg
dnAuWSAgICAgID0geW9mZnNldDsKLSAgICB2cC5XaWR0aCAgPSBzb3VyY2VSZWN0LnJpZ2h0IC0g
c291cmNlUmVjdC5sZWZ0OwotICAgIHZwLkhlaWdodCA9IHNvdXJjZVJlY3QuYm90dG9tIC0gc291
cmNlUmVjdC50b3A7Ci0gICAgdnAuTWluWiAgID0gMC4wZjsKLSAgICB2cC5NYXhaICAgPSAxLjBm
OwotICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZwKTsKLQotICAgIGZsb2F0IGhhbGZQaXhlbEFk
anVzdFs0XSA9IHsgLTEuMGYvdnAuV2lkdGgsIDEuMGYvdnAuSGVpZ2h0LCAwLCAwIH07Ci0gICAg
ZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwgaGFsZlBpeGVsQWRqdXN0LCAxKTsK
LX0KLQotdm9pZCBCbGl0OjpzZXRDb21tb25CbGl0U3RhdGUoKQotewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxM
TU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xP
UldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JX
UklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldS
SVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lT
U09SVEVTVEVOQUJMRSwgRkFMU0UpOwotCi0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxl
clN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7Ci0gICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xB
TVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQz
RFRBRERSRVNTX0NMQU1QKTsKLQotICAgIFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Np
c3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2Fw
dHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3RhbmdsZQotICAgIGRldmljZS0+U2V0U2Npc3Nv
clJlY3QoJnNjaXNzb3JSZWN0KTsKLQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJl
cShpLCAxKTsKLSAgICB9Ci19Ci0KLXZvaWQgQmxpdDo6cmVuZGVyKCkKLXsKLSAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5TZXRTdHJlYW1T
b3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBo
ciA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7
Ci0KLSAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgaHIgPSBkZXZpY2UtPkRyYXdQcmlt
aXRpdmUoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMCwgMik7Ci19Ci0KLXZvaWQgQmxpdDo6c2F2ZVN0
YXRlKCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQot
ICAgIEhSRVNVTFQgaHI7Ci0KLSAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1T
YXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZl
ZFJlbmRlclRhcmdldCk7Ci0KLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQotICAg
IHsKLSAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9
PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKLQotICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9Owot
Ci0gICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLSAgICAgICAgZGV2
aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRl
ckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLQotICAgICAgICBEM0RWSUVXUE9SVDkgZHVt
bXlWcDsKLSAgICAgICAgZHVtbXlWcC5YID0gMDsKLSAgICAgICAgZHVtbXlWcC5ZID0gMDsKLSAg
ICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7Ci0gICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKLSAg
ICAgICAgZHVtbXlWcC5NaW5aID0gMDsKLSAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKLQotICAg
ICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKLQotICAgICAgICBkZXZpY2UtPlNl
dFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwg
bVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOwotCi0gICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVj
bGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICAgICAgaHIgPSBkZXZpY2Ut
PkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsK
LQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBociA9
IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQotewotICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0
aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgaWYgKG1TYXZlZERlcHRo
U3RlbmNpbCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TYXZlZERlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
ZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAo
bVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRSZW5kZXJU
YXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAgIGlmICht
U2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRTdGF0ZUJsb2Nr
LT5BcHBseSgpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0JsaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyOGVjZC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfQkxJVF9IXwotI2RlZmluZSBMSUJHTEVTVjJfQkxJVF9IXwotCi0jaW5jbHVkZSA8bWFwPgot
Ci0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUg
PGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBn
bAotewotY2xhc3MgQ29udGV4dDsKLQotY2xhc3MgQmxpdAotewotICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgQmxpdChDb250ZXh0ICpjb250ZXh0KTsKLSAgICB+QmxpdCgpOwotCi0gICAgLy8gQ29w
eSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3VyY2VSZWN0
LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1s
ZWZ0KQotICAgIGJvb2wgY29weShJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwotCi0gICAgLy8gQ29weSBmcm9tIHNvdXJj
ZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5
b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQotICAgIC8v
IHNvdXJjZSBpcyBpbnRlcnByZXRlZCBhcyBSR0JBIGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmllcyB0
aGUgZGVzaXJlZCByZXN1bHQgZm9ybWF0LiBGb3IgZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9IEdM
X1JHQiwgdGhlIGFscGhhIGNoYW5uZWwgd2lsbCBiZSBmb3JjZWQgdG8gMC4KLSAgICBib29sIGZv
cm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKLQotICAgIC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBsZSBm
cm9tIHNvdXJjZSB0byBkZXN0LgotICAgIC8vIFJlcXVpcmVzIHRoYXQgc291cmNlIGlzIFJHQihB
KSBhbmQgZGVzdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHNvdXJjZS4KLSAgICBib29sIGJveEZp
bHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7
Ci0KLSAgcHJpdmF0ZToKLSAgICBDb250ZXh0ICptQ29udGV4dDsKLQotICAgIElEaXJlY3QzRFZl
cnRleEJ1ZmZlcjkgKm1RdWFkVmVydGV4QnVmZmVyOwotICAgIElEaXJlY3QzRFZlcnRleERlY2xh
cmF0aW9uOSAqbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbjsKLQotICAgIHZvaWQgaW5pdEdlb21ldHJ5
KCk7Ci0KLSAgICBib29sIHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0
KTsKLQotICAgIElEaXJlY3QzRFRleHR1cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCk7Ci0gICAgdm9pZCBz
ZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0KTsKLSAgICB2b2lkIHNldENvbW1vbkJsaXRTdGF0ZSgpOwotICAgIFJFQ1QgZ2V0U3Vy
ZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0OwotCi0gICAgLy8gVGhp
cyBlbnVtIGlzIHVzZWQgdG8gaW5kZXggbUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNvdXJj
ZS4KLSAgICBlbnVtIFNoYWRlcklkCi0gICAgewotICAgICAgICBTSEFERVJfVlNfU1RBTkRBUkQs
Ci0gICAgICAgIFNIQURFUl9WU19GTElQWSwKLSAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJPVUdI
LAotICAgICAgICBTSEFERVJfUFNfTFVNSU5BTkNFLAotICAgICAgICBTSEFERVJfUFNfQ09NUE9O
RU5UTUFTSywKLSAgICAgICAgU0hBREVSX0NPVU5UCi0gICAgfTsKLQotICAgIHN0YXRpYyBjb25z
dCBjaGFyICogY29uc3QgbVNoYWRlclNvdXJjZVtdOwotCi0gICAgLy8gVGhpcyBhY3R1YWxseSBj
b250YWlucyBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5IG9yIElEaXJlY3QzRFBpeGVsU2hhZGVyOSBj
YXN0ZWQgdG8gSVVua25vd24uCi0gICAgSVVua25vd24gKm1Db21waWxlZFNoYWRlcnNbU0hBREVS
X0NPVU5UXTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotICAgIGJvb2wg
c2V0U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAg
ICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KmNyZWF0ZVNoYWRl
cikoY29uc3QgRFdPUkQgKiwgRDNEU2hhZGVyVHlwZSAqKiksCi0gICAgICAgICAgICAgICAgICAg
SFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5
cGUqKSk7Ci0KLSAgICBib29sIHNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOwotICAg
IGJvb2wgc2V0UGl4ZWxTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKLSAgICB2b2lkIHJlbmRlcigp
OwotCi0gICAgdm9pZCBzYXZlU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOwotICAg
IElEaXJlY3QzRFN0YXRlQmxvY2s5ICptU2F2ZWRTdGF0ZUJsb2NrOwotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICptU2F2ZWRSZW5kZXJUYXJnZXQ7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZl
ZERlcHRoU3RlbmNpbDsKLQotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsKLX07
Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9CTElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRkMTJlM2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpC
dWZmZXIgY2xhc3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKLS8vIGlu
ZGV4IGRhdGEuIEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rp
b25hbGl0eS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotQnVmZmVy
OjpCdWZmZXIoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQotewotICAgIG1Db250ZW50
cyA9IE5VTEw7Ci0gICAgbVNpemUgPSAwOwotICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsK
LQotICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZl
ciA9IE5VTEw7Ci0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKLX0KLQotQnVmZmVyOjp+QnVm
ZmVyKCkKLXsKLSAgICBkZWxldGVbXSBtQ29udGVudHM7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0
ZXhCdWZmZXI7Ci0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKLX0KLQotdm9pZCBCdWZm
ZXI6OmJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0g
dXNhZ2UpCi17Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1D
b250ZW50czsKLSAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
c2l6ZSAhPSBtU2l6ZSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLSAgICAg
ICAgbUNvbnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07Ci0gICAgICAgIG1lbXNldChtQ29udGVu
dHMsIDAsIHNpemUpOwotICAgIH0KLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSA+IDAp
Ci0gICAgewotICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBzaXplKTsKLSAgICB9Ci0K
LSAgICBtU2l6ZSA9IHNpemU7Ci0gICAgbVVzYWdlID0gdXNhZ2U7Ci0KLSAgICBpbnZhbGlkYXRl
U3RhdGljRGF0YSgpOwotCi0gICAgaWYgKHVzYWdlID09IEdMX1NUQVRJQ19EUkFXKQotICAgIHsK
LSAgICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0
RGV2aWNlKCkpOwotICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhC
dWZmZXIoZ2V0RGV2aWNlKCkpOwotICAgIH0KLX0KLQotdm9pZCBCdWZmZXI6OmJ1ZmZlclN1YkRh
dGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpCi17
Ci0gICAgbWVtY3B5KG1Db250ZW50cyArIG9mZnNldCwgZGF0YSwgc2l6ZSk7Ci0gICAgCi0gICAg
aWYgKChtU3RhdGljVmVydGV4QnVmZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPnNpemUoKSAh
PSAwKSB8fCAobVN0YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+c2l6ZSgp
ICE9IDApKQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Ci0K
LSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXIgKkJ1
ZmZlcjo6Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRpY1ZlcnRl
eEJ1ZmZlcjsKLX0KLQotU3RhdGljSW5kZXhCdWZmZXIgKkJ1ZmZlcjo6Z2V0U3RhdGljSW5kZXhC
dWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGljSW5kZXhCdWZmZXI7Ci19Ci0KLXZvaWQgQnVm
ZmVyOjppbnZhbGlkYXRlU3RhdGljRGF0YSgpCi17Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhC
dWZmZXI7Ci0gICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVN0
YXRpY0luZGV4QnVmZmVyOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBt
VW5tb2RpZmllZERhdGFVc2UgPSAwOwotfQotCi0vLyBDcmVhdGVzIHN0YXRpYyBidWZmZXJzIGlm
IHN1ZmZpY2llbnQgdXNlZCBkYXRhIGhhcyBiZWVuIGxlZnQgdW5tb2RpZmllZAotdm9pZCBCdWZm
ZXI6OnByb21vdGVTdGF0aWNVc2FnZShpbnQgZGF0YVNpemUpCi17Ci0gICAgaWYgKCFtU3RhdGlj
VmVydGV4QnVmZmVyICYmICFtU3RhdGljSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVW5t
b2RpZmllZERhdGFVc2UgKz0gZGF0YVNpemU7Ci0KLSAgICAgICAgaWYgKG1Vbm1vZGlmaWVkRGF0
YVVzZSA+IDMgKiBtU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRpY1ZlcnRleEJ1
ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOwotICAgICAgICAgICAg
bVN0YXRpY0luZGV4QnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKGdldERldmljZSgpKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTlj
NGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9C
dWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIEJ1ZmZlci5oOiBEZWZpbmVzIHRoZSBnbDo6QnVmZmVyIGNsYXNzLCByZXByZXNlbnRp
bmcgc3RvcmFnZSBvZiB2ZXJ0ZXggYW5kL29yCi0vLyBpbmRleCBkYXRhLiBJbXBsZW1lbnRzIEdM
IGJ1ZmZlciBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCi0vLyBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFnZSAyMS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQlVGRkVS
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9CVUZGRVJfSF8KLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0j
aW5jbHVkZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9u
L1JlZkNvdW50T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgU3RhdGljVmVydGV4
QnVmZmVyOwotY2xhc3MgU3RhdGljSW5kZXhCdWZmZXI7Ci0KLWNsYXNzIEJ1ZmZlciA6IHB1Ymxp
YyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQnVmZmVyKEdMdWlu
dCBpZCk7Ci0KLSAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShj
b25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7Ci0gICAgdm9p
ZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRw
dHIgb2Zmc2V0KTsKLQotICAgIHZvaWQgKmRhdGEoKSB7IHJldHVybiBtQ29udGVudHM7IH0KLSAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9Ci0gICAgR0xlbnVtIHVzYWdl
KCkgY29uc3QgeyByZXR1cm4gbVVzYWdlOyB9Ci0KLSAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKmdl
dFN0YXRpY1ZlcnRleEJ1ZmZlcigpOwotICAgIFN0YXRpY0luZGV4QnVmZmVyICpnZXRTdGF0aWNJ
bmRleEJ1ZmZlcigpOwotICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB2b2lk
IHByb21vdGVTdGF0aWNVc2FnZShpbnQgZGF0YVNpemUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1ZmZlcik7Ci0KLSAgICBHTHVieXRlICptQ29udGVudHM7
Ci0gICAgR0xzaXplaXB0ciBtU2l6ZTsKLSAgICBHTGVudW0gbVVzYWdlOwotCi0gICAgU3RhdGlj
VmVydGV4QnVmZmVyICptU3RhdGljVmVydGV4QnVmZmVyOwotICAgIFN0YXRpY0luZGV4QnVmZmVy
ICptU3RhdGljSW5kZXhCdWZmZXI7Ci0gICAgR0xzaXplaXB0ciBtVW5tb2RpZmllZERhdGFVc2U7
Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9CVUZGRVJfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2ZWM2MDc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
MzM5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbnRleHQuY3BwOiBJbXBsZW1l
bnRzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJm
b3JtaW5nCi0vLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmlj
IGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29u
dGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3Bs
YXkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRmVu
Y2UuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1
ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvVGV4dHVyZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLSN1bmRlZiBuZWFyCi0j
dW5kZWYgZmFyCi0KLW5hbWVzcGFjZSBnbAotewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpCi17Ci0gICAg
QVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAotCi0gICAg
bURpc3BsYXkgPSBOVUxMOwotICAgIG1EZXZpY2UgPSBOVUxMOwotCi0gICAgbUZlbmNlSGFuZGxl
QWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7Ci0KLSAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAu
MGYsIDAuMGYsIDAuMGYpOwotCi0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7Ci0g
ICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsKLQotICAgIG1TdGF0ZS5jdWxsRmFjZSA9
IGZhbHNlOwotICAgIG1TdGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7Ci0gICAgbVN0YXRlLmZyb250
RmFjZSA9IEdMX0NDVzsKLSAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRl
LmRlcHRoRnVuYyA9IEdMX0xFU1M7Ci0gICAgbVN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgbVN0
YXRlLnNvdXJjZUJsZW5kUkdCID0gR0xfT05FOwotICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhh
ID0gR0xfT05FOwotICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIG1TdGF0
ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0Ig
PSBHTF9GVU5DX0FERDsKLSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19B
REQ7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IucmVkID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xv
ci5ncmVlbiA9IDA7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IDA7Ci0gICAgbVN0YXRl
LmJsZW5kQ29sb3IuYWxwaGEgPSAwOwotICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOwot
ICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBtU3RhdGUuc3RlbmNpbFJl
ZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxX
cml0ZW1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOwot
ICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFz
ayA9IC0gMTsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsKLSAgICBtU3Rh
dGUuc3RlbmNpbEZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFp
bCA9IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsK
LSAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzID0gR0xfS0VFUDsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxz
ZTsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciA9IDAuMGY7Ci0gICAgbVN0YXRlLnBv
bHlnb25PZmZzZXRVbml0cyA9IDAuMGY7Ci0gICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFn
ZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGZhbHNlOwotICAgIG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJ
bnZlcnQgPSBmYWxzZTsKLSAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBmYWxzZTsKLSAgICBtU3Rh
dGUuZGl0aGVyID0gdHJ1ZTsKLSAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9O
VF9DQVJFOwotICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gR0xfRE9O
VF9DQVJFOwotCi0gICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7Ci0KLSAgICBtU3RhdGUudmll
d3BvcnRYID0gMDsKLSAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAgICBtU3RhdGUudmlld3Bv
cnRXaWR0aCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLldpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9y
dEhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsKLSAgICBtU3RhdGUuek5lYXIg
PSAwLjBmOwotICAgIG1TdGF0ZS56RmFyID0gMS4wZjsKLQotICAgIG1TdGF0ZS5zY2lzc29yWCA9
IDA7Ci0gICAgbVN0YXRlLnNjaXNzb3JZID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0g
Y29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBj
b25maWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7Ci0KLSAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0g
dHJ1ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xv
ck1hc2tCbHVlID0gdHJ1ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwotICAg
IG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVlOwotCi0gICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxM
KQotICAgIHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291
cmNlTWFuYWdlcjsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VN
YW5hZ2VyKCk7Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43
IHBhZ2UgODM6Ci0gICAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRF
WFRVUkVfQ1VCRV9NQVAgaGF2ZSB0d29kaW1lbnNpb25hbAotICAgIC8vIGFuZCBjdWJlIG1hcCB0
ZXh0dXJlIHN0YXRlIHZlY3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgot
ICAgIC8vIEluIG9yZGVyIHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90
IGJlIGxvc3QsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQotICAgIC8vIG9iamVjdHMgYWxs
IG9mIHdob3NlIG5hbWVzIGFyZSAwLgotCi0gICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0
dXJlMkQoMCkpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1h
cCgwKSk7Ci0KLSAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7Ci0gICAgYmluZEFycmF5QnVm
ZmVyKDApOwotICAgIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZFRleHR1cmVD
dWJlTWFwKDApOwotICAgIGJpbmRUZXh0dXJlMkQoMCk7Ci0gICAgYmluZFJlYWRGcmFtZWJ1ZmZl
cigwKTsKLSAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIGJpbmRSZW5kZXJidWZmZXIo
MCk7Ci0KLSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwotCi0gICAgbVN0YXRlLnBhY2tB
bGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0
ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIg
PSBOVUxMOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtQmxpdCA9IE5VTEw7
Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0g
ICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOwotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7
Ci0gICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJh
dGlvbiA9IGZhbHNlOwotCi0gICAgbUhhc0JlZW5DdXJyZW50ID0gZmFsc2U7Ci0gICAgbUNvbnRl
eHRMb3N0ID0gZmFsc2U7Ci0gICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJST1I7Ci0gICAgbVJl
c2V0U3RyYXRlZ3kgPSAobm90aWZ5UmVzZXRzID8gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VY
VCA6IEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQpOwotICAgIG1Sb2J1c3RBY2Nlc3MgPSBy
b2J1c3RBY2Nlc3M7Ci0KLSAgICBtU3VwcG9ydHNEWFQxVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBt
U3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMg
PSBmYWxzZTsKLSAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9y
dHNPY2NsdXNpb25RdWVyaWVzID0gZmFsc2U7Ci0gICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9y
bWF0cyA9IDA7Ci0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUgPSBOVUxMOwotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLUNvbnRl
eHQ6On5Db250ZXh0KCkKLXsKLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApCi0g
ICAgewotICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+
Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOwotICAgICAgICBpZiAocHJvZ3JhbU9i
amVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOwot
ICAgICAgICB9Ci0gICAgICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKCFtRnJhbWVidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNl
KG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUXVlcnlN
YXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigp
LT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5
KCkpCi0gICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigp
LT5zZWNvbmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxl
U3VwcG9ydC5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8
IFRFWFRVUkVfVFlQRV9DT1VOVDsgdHlwZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgc2Ft
cGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
IHNhbXBsZXIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJl
W3R5cGVdW3NhbXBsZXJdLnNldChOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo
aW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewot
ICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxMKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwot
ICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0K
LSAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwot
Ci0gICAgbVRleHR1cmUyRFplcm8uc2V0KE5VTEwpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8u
c2V0KE5VTEwpOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBkZWxldGUg
bUluZGV4RGF0YU1hbmFnZXI7Ci0gICAgZGVsZXRlIG1CbGl0OwotICAgIGRlbGV0ZSBtTGluZUxv
b3BJQjsKLQotICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAg
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1SZXNvdXJj
ZU1hbmFnZXItPnJlbGVhc2UoKTsKLX0KLQotdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBtRGlzcGxh
eSA9IGRpc3BsYXk7Ci0gICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAg
IGlmICghbUhhc0JlZW5DdXJyZW50KQotICAgIHsKLSAgICAgICAgbURldmljZUNhcHMgPSBtRGlz
cGxheS0+Z2V0RGV2aWNlQ2FwcygpOwotCi0gICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5l
dyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUluZGV4RGF0YU1h
bmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUJs
aXQgPSBuZXcgQmxpdCh0aGlzKTsKLQotICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBt
RGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKLSAg
ICAgICAgbVN1cHBvcnRzVmVydGV4VGV4dHVyZSA9IG1EaXNwbGF5LT5nZXRWZXJ0ZXhUZXh0dXJl
U3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0gbURpc3BsYXkt
PmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0luc3RhbmNp
bmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKLQotICAgICAgICBtTWF4VGV4
dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmljZUNhcHMuTWF4VGV4
dHVyZVdpZHRoLCAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX1NJWkUpOwotICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6
Om1pbihtTWF4VGV4dHVyZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NV
QkVfTUFQX1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24g
PSBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIo
bU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsKLSAgICAgICAgVFJBQ0UoIk1heFRleHR1cmVEaW1l
bnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhSZW5kZXJidWZmZXJEaW1l
bnNpb249JWQsIE1heFRleHR1cmVMZXZlbD0lZCIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJl
RGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1l
bnNpb24sIG1NYXhUZXh0dXJlTGV2ZWwpOwotCi0gICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5k
ZXJCdWZmZXJGb3JtYXRzW10gPQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGTVRfQThSOEc4
QjgsCi0gICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVH
NkI1LAotICAgICAgICAgICAgRDNERk1UX0QyNFM4Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW50
IG1heCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHJlbmRlckJ1ZmZl
ckZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7ICsraSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NB
TVBMRVMgKyAxXTsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQo
cmVuZGVyQnVmZmVyRm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBt
TXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVB
cnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0
aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+
IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbU1h
eFN1cHBvcnRlZFNhbXBsZXMgPSBtYXg7Ci0KLSAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVz
ID0gbURpc3BsYXktPmdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c09j
Y2x1c2lvblF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7Ci0g
ICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1
cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERY
VDNUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtRGlz
cGxheS0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJU
ZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zs
b2F0MzJMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsK
LSAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZU
ZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBt
U3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1E
aXNwbGF5LT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7Ci0KLSAgICAgICAgbVN1cHBvcnRzMzJi
aXRJbmRpY2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwotCi0g
ICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOwotICAgICAgICBpZiAoc3Vw
cG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbU51bUNvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0cyArPSAyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdXBwb3J0c0RY
VDNUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1
cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1h
dHMgKz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAg
ICAgICAgaW5pdFJlbmRlcmVyU3RyaW5nKCk7Ci0KLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0WCA9
IDA7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOwotICAgICAgICBtU3RhdGUudmlld3Bv
cnRXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydEhl
aWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9
IDA7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29y
V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdo
dCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgIG1IYXNCZWVuQ3VycmVudCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gV3JhcCB0aGUgZXhpc3RpbmcgRGlyZWN0M0QgOSByZXNvdXJj
ZXMgaW50byBHTCBvYmplY3RzIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgJzAnIG5hbWVzCi0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKmRlZmF1bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5k
ZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gc3VyZmFj
ZS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJv
ID0gbmV3IENvbG9yYnVmZmVyKGRlZmF1bHRSZW5kZXJUYXJnZXQpOwotICAgIERlcHRoU3RlbmNp
bGJ1ZmZlciAqZGVwdGhTdGVuY2lsYnVmZmVyWmVybyA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIo
ZGVwdGhTdGVuY2lsKTsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IERl
ZmF1bHRGcmFtZWJ1ZmZlcihjb2xvcmJ1ZmZlclplcm8sIGRlcHRoU3RlbmNpbGJ1ZmZlclplcm8p
OwotCi0gICAgc2V0RnJhbWVidWZmZXJaZXJvKGZyYW1lYnVmZmVyWmVybyk7Ci0KLSAgICBpZiAo
ZGVmYXVsdFJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAg
ICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIG1hcmtBbGxTdGF0
ZURpcnR5KCk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0
ZS1yZWxhdGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5l
eHQgcHJlLWRyYXcuCi12b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKLXsKLSAgICBm
b3IgKGludCB0ID0gMDsgdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspCi0gICAgewot
ICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxQU1t0XSA9IDA7Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgdCA9IDA7IHQgPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyB0Kysp
Ci0gICAgewotICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxWU1t0XSA9IDA7Ci0gICAgfQot
Ci0gICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFJlbmRlclRhcmdl
dFNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbUFw
cGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZElCU2VyaWFsID0gMDsK
LSAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtVmlld3BvcnRJbml0
aWFsaXplZCA9IGZhbHNlOwotICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKLQotICAgIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7Ci0KLSAg
ICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1TY2lzc29y
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1E
aXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAg
IG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5V
TEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpCi17Ci0gICAgbUR4
VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0
KCkKLXsKLSAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VU
X0VYVCkKLSAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VY
VDsKLSAgICBtQ29udGV4dExvc3QgPSB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmlzQ29udGV4
dExvc3QoKQotewotICAgIHJldHVybiBtQ29udGV4dExvc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6
c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBh
bHBoYSkKLXsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKLSAgICBtU3Rh
dGUuY29sb3JDbGVhclZhbHVlLmdyZWVuID0gZ3JlZW47Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5ibHVlID0gYmx1ZTsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhID0gYWxw
aGE7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q2xlYXJEZXB0aChmbG9hdCBkZXB0aCkKLXsKLSAg
ICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKQotewotICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1
ZSA9IHN0ZW5jaWw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVk
KQotewotICAgIGlmIChtU3RhdGUuY3VsbEZhY2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5jdWxsRmFjZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRy
dWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1
bGxNb2RlKEdMZW51bSBtb2RlKQotewotICAgIGlmIChtU3RhdGUuY3VsbE1vZGUgIT0gbW9kZSkK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5jdWxsTW9kZSA9IG1vZGU7Ci0gICAgICAgIG1DdWxsU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEZyb250RmFjZShH
TGVudW0gZnJvbnQpCi17Ci0gICAgaWYgKG1TdGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpCi0gICAg
ewotICAgICAgICBtU3RhdGUuZnJvbnRGYWNlID0gZnJvbnQ7Ci0gICAgICAgIG1Gcm9udEZhY2VE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoVGVzdChib29s
IGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBlbmFibGVkOwotICAgICAgICBtRGVwdGhTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNEZXB0aFRlc3RFbmFi
bGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLmRlcHRoVGVzdDsKLX0KLQotdm9pZCBD
b250ZXh0OjpzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYykKLXsKLSAgICBpZiAobVN0YXRl
LmRlcHRoRnVuYyAhPSBkZXB0aEZ1bmMpCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhGdW5j
ID0gZGVwdGhGdW5jOwotICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcikK
LXsKLSAgICBtU3RhdGUuek5lYXIgPSB6TmVhcjsKLSAgICBtU3RhdGUuekZhciA9IHpGYXI7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3Rh
dGUuYmxlbmQgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZCA9IGVuYWJs
ZWQ7Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBD
b250ZXh0Ojppc0JsZW5kRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5ibGVu
ZDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwg
R0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSkKLXsK
LSAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IHNvdXJjZVJHQiB8fAotICAgICAgICBt
U3RhdGUuc291cmNlQmxlbmRBbHBoYSAhPSBzb3VyY2VBbHBoYSB8fAotICAgICAgICBtU3RhdGUu
ZGVzdEJsZW5kUkdCICE9IGRlc3RSR0IgfHwKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhh
ICE9IGRlc3RBbHBoYSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNv
dXJjZVJHQjsKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IGRlc3RSR0I7Ci0gICAgICAg
IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gc291cmNlQWxwaGE7Ci0gICAgICAgIG1TdGF0ZS5k
ZXN0QmxlbmRBbHBoYSA9IGRlc3RBbHBoYTsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRy
dWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBm
bG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5i
bGVuZENvbG9yLnJlZCAhPSByZWQgfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4g
IT0gZ3JlZW4gfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhICE9IGFscGhhKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLmJsZW5kQ29sb3IucmVkID0gcmVkOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5n
cmVlbiA9IGdyZWVuOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gYmx1ZTsKLSAg
ICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbUJsZW5kU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kRXF1YXRp
b24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbikKLXsKLSAgICBpZiAo
bVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgIT0gcmdiRXF1YXRpb24gfHwKLSAgICAgICAgbVN0YXRl
LmJsZW5kRXF1YXRpb25BbHBoYSAhPSBhbHBoYUVxdWF0aW9uKQotICAgIHsKLSAgICAgICAgbVN0
YXRlLmJsZW5kRXF1YXRpb25SR0IgPSByZ2JFcXVhdGlvbjsKLSAgICAgICAgbVN0YXRlLmJsZW5k
RXF1YXRpb25BbHBoYSA9IGFscGhhRXF1YXRpb247Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsVGVzdChib29sIGVu
YWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAhPSBlbmFibGVkKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZW5hYmxlZDsKLSAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTdGVuY2lsVGVz
dEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc3RlbmNpbFRlc3Q7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50
IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVuY2lsTWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5j
aWxGdW5jICE9IHN0ZW5jaWxGdW5jIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0
ZW5jaWxSZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IHN0ZW5jaWxNYXNrKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0gc3RlbmNpbEZ1bmM7Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsUmVmID0gKHN0ZW5jaWxSZWYgPiAwKSA/IHN0ZW5jaWxSZWYgOiAwOwot
ICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgPSBzdGVuY2lsTWFzazsKLSAgICAgICAgbVN0ZW5j
aWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNp
bEJhY2tQYXJhbXMoR0xlbnVtIHN0ZW5jaWxCYWNrRnVuYywgR0xpbnQgc3RlbmNpbEJhY2tSZWYs
IEdMdWludCBzdGVuY2lsQmFja01hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1
bmMgIT0gc3RlbmNpbEJhY2tGdW5jIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiAh
PSBzdGVuY2lsQmFja1JlZiB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrICE9IHN0
ZW5jaWxCYWNrTWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBz
dGVuY2lsQmFja0Z1bmM7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IChzdGVuY2ls
QmFja1JlZiA+IDApID8gc3RlbmNpbEJhY2tSZWYgOiAwOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tNYXNrID0gc3RlbmNpbEJhY2tNYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKEdM
dWludCBzdGVuY2lsV3JpdGVtYXNrKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFz
ayAhPSBzdGVuY2lsV3JpdGVtYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxXcml0
ZW1hc2sgPSBzdGVuY2lsV3JpdGVtYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayhH
THVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFj
a1dyaXRlbWFzayAhPSBzdGVuY2lsQmFja1dyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgICAgICBt
U3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRT
dGVuY2lsT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0Rl
cHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQotewotICAgIGlmIChtU3RhdGUu
c3RlbmNpbEZhaWwgIT0gc3RlbmNpbEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNz
RGVwdGhGYWlsICE9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVu
Y2lsUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsRmFpbCA9IHN0ZW5jaWxGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bFBhc3NEZXB0aEZhaWwgPSBzdGVuY2lsUGFzc0RlcHRoRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0
ZW5jaWxQYXNzRGVwdGhQYXNzID0gc3RlbmNpbFBhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1TdGVu
Y2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotewotICAg
IGlmIChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsICE9IHN0ZW5jaWxCYWNrRmFpbCB8fAotICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbCB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzICE9IHN0ZW5j
aWxCYWNrUGFzc0RlcHRoUGFzcykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Zh
aWwgPSBzdGVuY2lsQmFja0ZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0
aEZhaWwgPSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2ls
QmFja1Bhc3NEZXB0aFBhc3MgPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1T
dGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFBv
bHlnb25PZmZzZXRGaWxsKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnBvbHlnb25P
ZmZzZXRGaWxsICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNl
dEZpbGwgPSBlbmFibGVkOwotICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsKLQotfQotCi12
b2lkIENvbnRleHQ6OnNldFBvbHlnb25PZmZzZXRQYXJhbXMoR0xmbG9hdCBmYWN0b3IsIEdMZmxv
YXQgdW5pdHMpCi17Ci0gICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9IGZhY3Rv
ciB8fAotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzICE9IHVuaXRzKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0b3I7Ci0gICAgICAgIG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgPSB1bml0czsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQWxw
aGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhh
VG9Db3ZlcmFnZSAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUFscGhh
VG9Db3ZlcmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLX0K
LQotdm9pZCBDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlID0gZW5hYmxlZDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBp
bnZlcnQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8
Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCAhPSBpbnZlcnQpCi0gICAgewot
ICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA9IHZhbHVlOwotICAgICAgICBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBpbnZlcnQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3QoYm9v
bCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QgIT0gZW5hYmxlZCkKLSAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TY2lz
c29yU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2Npc3Nv
clRlc3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNjaXNzb3JUZXN0Owot
fQotCi12b2lkIENvbnRleHQ6OnNldERpdGhlcihib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1T
dGF0ZS5kaXRoZXIgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kaXRoZXIgPSBl
bmFibGVkOwotICAgICAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1i
b29sIENvbnRleHQ6OmlzRGl0aGVyRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0
ZS5kaXRoZXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgp
Ci17Ci0gICAgbVN0YXRlLmxpbmVXaWR0aCA9IHdpZHRoOwotfQotCi12b2lkIENvbnRleHQ6OnNl
dEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCkKLXsKLSAgICBtU3RhdGUuZ2VuZXJhdGVN
aXBtYXBIaW50ID0gaGludDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRl
cml2YXRpdmVIaW50KEdMZW51bSBoaW50KQotewotICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRl
cml2YXRpdmVIaW50ID0gaGludDsKLSAgICAvLyBUT0RPOiBQcm9wYWdhdGUgdGhlIGhpbnQgdG8g
c2hhZGVyIHRyYW5zbGF0b3Igc28gd2UgY2FuIHdyaXRlCi0gICAgLy8gZGR4LCBkZHhfY29hcnNl
LCBvciBkZHhfZmluZSBkZXBlbmRpbmcgb24gdGhlIGhpbnQuCi0gICAgLy8gSWdub3JlIGZvciBu
b3cuIEl0IGlzIHZhbGlkIGZvciBpbXBsZW1lbnRhdGlvbnMgdG8gaWdub3JlIGhpbnQuCi19Ci0K
LXZvaWQgQ29udGV4dDo6c2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7Ci0g
ICAgbVN0YXRlLnZpZXdwb3J0WSA9IHk7Ci0gICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0
aDsKLSAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNj
aXNzb3JZICE9IHkgfHwgCi0gICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwg
bVN0YXRlLnNjaXNzb3JIZWlnaHQgIT0gaGVpZ2h0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNj
aXNzb3JYID0geDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsKLSAgICAgICAgbVN0YXRl
LnNjaXNzb3JXaWR0aCA9IHdpZHRoOwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhl
aWdodDsKLSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1T
dGF0ZS5jb2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuY29sb3JNYXNr
Qmx1ZSAhPSBibHVlIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1h
c2tHcmVlbiA9IGdyZWVuOwotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7Ci0g
ICAgICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOwotICAgICAgICBtTWFza1N0YXRl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9v
bCBtYXNrKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCi0gICAgewotICAg
ICAgICBtU3RhdGUuZGVwdGhNYXNrID0gbWFzazsKLSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25l
ZCBpbnQgYWN0aXZlKQotewotICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOwotfQot
Ci1HTHVpbnQgQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6Omdl
dERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kcmF3
RnJhbWVidWZmZXI7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUo
KSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7Ci19Ci0KLUdM
dWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZl
UXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBO
VUxMOwotICAgIAotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5Z
X1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAg
ICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChxdWVyeU9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUFycmF5RW5hYmxl
ZCA9IGVuYWJsZWQ7Ci19Ci0KLWNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSkKLXsKLSAgICByZXR1cm4gbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZl
cnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZm
ZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2lu
dGVyKQotewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZm
ZXIuc2V0KGJvdW5kQnVmZmVyKTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVNpemUgPSBzaXplOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
VHlwZSA9IHR5cGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3Jt
YWxpemVkID0gbm9ybWFsaXplZDsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVN0cmlkZSA9IHN0cmlkZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVBvaW50ZXIgPSBwb2ludGVyOwotfQotCi1jb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlcjsKLX0KLQotY29u
c3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMoKQot
ewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOwotfQotCi12b2lkIENvbnRleHQ6
OnNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQotewotICAgIG1TdGF0ZS5wYWNrQWxp
Z25tZW50ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3Rh
dGUudW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRV
bnBhY2tBbGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25t
ZW50OwotfQotCi12b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZl
cnNlUm93T3JkZXIpCi17Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNl
Um93T3JkZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOwotfQotCi1HTHVp
bnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Y3JlYXRlQnVmZmVyKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkK
LXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUHJvZ3JhbSgpOwotfQotCi1H
THVpbnQgQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBt
UmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLUdMdWludCBDb250ZXh0
OjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRl
VGV4dHVyZSgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci19Ci0K
LS8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUKLUdMdWludCBDb250ZXh0Ojpj
cmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1GcmFtZWJ1ZmZlckhh
bmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbUZyYW1lYnVmZmVyTWFwW2hhbmRsZV0g
PSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0
ZUZlbmNlKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFs
bG9jYXRlKCk7Ci0KLSAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtRGlzcGxheSk7
Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBxdWVyeSBu
YW1lCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUXVlcnkoKQotewotICAgIEdMdWludCBoYW5kbGUg
PSBtUXVlcnlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1RdWVyeU1hcFtoYW5k
bGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVs
ZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdl
dEJ1ZmZlcihidWZmZXIpKQotICAgIHsKLSAgICAgICAgZGV0YWNoQnVmZmVyKGJ1ZmZlcik7Ci0g
ICAgfQotICAgIAotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZUJ1ZmZlcihidWZmZXIpOwot
fQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIENvbnRleHQ6
OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+
ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLSAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxM
OwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0g
ICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUodGV4dHVyZSkpCi0gICAgewotICAg
ICAgICBkZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFn
ZXItPmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQotICAgIHsKLSAgICAgICAgZGV0YWNo
UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgfQotICAgIAotICAgIG1SZXNvdXJjZU1h
bmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIENvbnRl
eHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBGcmFtZWJ1
ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXJPYmplY3QgPSBtRnJhbWVidWZmZXJNYXAuZmlu
ZChmcmFtZWJ1ZmZlcik7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QgIT0gbUZyYW1lYnVm
ZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgZGV0YWNoRnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpOwotCi0gICAgICAgIG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZyYW1l
YnVmZmVyT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGRlbGV0ZSBmcmFtZWJ1ZmZlck9iamVjdC0+
c2Vjb25kOwotICAgICAgICBtRnJhbWVidWZmZXJNYXAuZXJhc2UoZnJhbWVidWZmZXJPYmplY3Qp
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVGZW5jZShHTHVpbnQgZmVuY2UpCi17
Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVu
Y2UpOwotCi0gICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7
Ci0gICAgICAgIGRlbGV0ZSBmZW5jZU9iamVjdC0+c2Vjb25kOwotICAgICAgICBtRmVuY2VNYXAu
ZXJhc2UoZmVuY2VPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVRdWVy
eShHTHVpbnQgcXVlcnkpCi17Ci0gICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0g
bVF1ZXJ5TWFwLmZpbmQocXVlcnkpOwotICAgIGlmIChxdWVyeU9iamVjdCAhPSBtUXVlcnlNYXAu
ZW5kKCkpCi0gICAgewotICAgICAgICBtUXVlcnlIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVy
eU9iamVjdC0+Zmlyc3QpOwotICAgICAgICBpZiAocXVlcnlPYmplY3QtPnNlY29uZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcXVlcnlPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAg
ICB9Ci0gICAgICAgIG1RdWVyeU1hcC5lcmFzZShxdWVyeU9iamVjdCk7Ci0gICAgfQotfQotCi1C
dWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBt
UmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKLX0KLQotU2hhZGVyICpDb250ZXh0
OjpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Z2V0U2hhZGVyKGhhbmRsZSk7Ci19Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0o
R0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3Jh
bShoYW5kbGUpOwotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBoYW5k
bGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUoaGFuZGxlKTsK
LX0KLQotUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRs
ZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRs
ZSk7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIoKQotewot
ICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsKLX0KLQot
RnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJu
IG1Cb3VuZERyYXdGcmFtZWJ1ZmZlcjsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZm
ZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1
ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKLQotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0
QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1
ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKLQotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
c2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJE
KEdMdWludCB0ZXh0dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFs
bG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8yRCk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1
cmUpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1
cmUpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0
dXJlLCBURVhUVVJFX0NVQkUpOwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVf
Q1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKLX0K
LQotdm9pZCBDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikK
LXsKLSAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAgICAg
IG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAgICB9
Ci0KLSAgICBtU3RhdGUucmVhZEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6YmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAg
aWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAgICBtRnJhbWVi
dWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAgfQotCi0gICAg
bVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotCi0gICAgbUJvdW5kRHJhd0Zy
YW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotfQotCi12b2lkIENvbnRl
eHQ6OmJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24ocmVuZGVyYnVmZmVyKTsKLQot
ICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
KTsKLX0KLQotdm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAg
IEdMdWludCBwcmlvclByb2dyYW0gPSBtU3RhdGUuY3VycmVudFByb2dyYW07Ci0gICAgbVN0YXRl
LmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsgICAgICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBi
ZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZSwgb3RoZXJ3aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLgot
Ci0gICAgaWYgKHByaW9yUHJvZ3JhbSAhPSBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgUHJvZ3Jh
bSAqbmV3UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0g
ICAgICAgIFByb2dyYW0gKm9sZFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFt
KHByaW9yUHJvZ3JhbSk7Ci0gICAgICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7Ci0g
ICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotCi0gICAgICAgIGlmIChuZXdQcm9ncmFt
KQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXdQcm9ncmFtLT5hZGRSZWYoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKG9sZFByb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG9sZFByb2dyYW0tPnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBD
b250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSkKLXsKLSAgICAv
LyBGcm9tIEVYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbjogSWYgQmVnaW5RdWVyeUVYVCBpcyBj
YWxsZWQgd2l0aCBhbiA8aWQ+ICAKLSAgICAvLyBvZiB6ZXJvLCBpZiB0aGUgYWN0aXZlIHF1ZXJ5
IG9iamVjdCBuYW1lIGZvciA8dGFyZ2V0PiBpcyBub24temVybyAoZm9yIHRoZSAgCi0gICAgLy8g
dGFyZ2V0cyBBTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURfQ09O
U0VSVkFUSVZFX0VYVCwgaWYgIAotICAgIC8vIHRoZSBhY3RpdmUgcXVlcnkgZm9yIGVpdGhlciB0
YXJnZXQgaXMgbm9uLXplcm8pLCBpZiA8aWQ+IGlzIHRoZSBuYW1lIG9mIGFuIAotICAgIC8vIGV4
aXN0aW5nIHF1ZXJ5IG9iamVjdCB3aG9zZSB0eXBlIGRvZXMgbm90IG1hdGNoIDx0YXJnZXQ+LCBv
ciBpZiA8aWQ+IGlzIHRoZQotICAgIC8vIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgYW55
IHF1ZXJ5IHR5cGUsIHRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcwotICAgIC8vIGdlbmVy
YXRlZC4KLQotICAgIC8vIEVuc3VyZSBubyBvdGhlciBxdWVyaWVzIGFyZSBhY3RpdmUKLSAgICAv
LyBOT1RFOiBJZiBvdGhlciBxdWVyaWVzIHRoYW4gb2NjbHVzaW9uIGFyZSBzdXBwb3J0ZWQsIHdl
IHdpbGwgbmVlZCB0byBjaGVjawotICAgIC8vIHNlcGFyYXRlbHkgdGhhdDoKLSAgICAvLyAgICBh
KSBUaGUgcXVlcnkgSUQgcGFzc2VkIGlzIG5vdCB0aGUgY3VycmVudCBhY3RpdmUgcXVlcnkgZm9y
IGFueSB0YXJnZXQvdHlwZQotICAgIC8vICAgIGIpIFRoZXJlIGFyZSBubyBhY3RpdmUgcXVlcmll
cyBmb3IgdGhlIHJlcXVlc3RlZCB0YXJnZXQgKGFuZCBpbiB0aGUgY2FzZQotICAgIC8vICAgICAg
IG9mIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkVfRVhULAotICAgIC8vICAgICAgIG5vIHF1ZXJ5IG1heSBiZSBhY3RpdmUgZm9y
IGVpdGhlciBpZiBnbEJlZ2luUXVlcnkgdGFyZ2V0cyBlaXRoZXIuCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRl
LmFjdGl2ZVF1ZXJ5W2ldLmdldCgpICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBRdWVyeVR5cGUgcVR5cGU7Ci0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllf
U0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9T
QU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gZ2V0UXVlcnkocXVlcnksIHRydWUsIHRhcmdldCk7Ci0K
LSAgICAvLyBjaGVjayB0aGF0IG5hbWUgd2FzIG9idGFpbmVkIHdpdGggZ2xHZW5RdWVyaWVzCi0g
ICAgaWYgKCFxdWVyeU9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgLy8gY2hlY2sgZm9yIHR5cGUgbWlzbWF0Y2gK
LSAgICBpZiAocXVlcnlPYmplY3QtPmdldFR5cGUoKSAhPSB0YXJnZXQpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIHNl
dCBxdWVyeSBhcyBhY3RpdmUgZm9yIHNwZWNpZmllZCB0YXJnZXQKLSAgICBtU3RhdGUuYWN0aXZl
UXVlcnlbcVR5cGVdLnNldChxdWVyeU9iamVjdCk7Ci0KLSAgICAvLyBiZWdpbiBxdWVyeQotICAg
IHF1ZXJ5T2JqZWN0LT5iZWdpbigpOwotfQotCi12b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51
bSB0YXJnZXQpCi17Ci0gICAgUXVlcnlUeXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQp
Ci0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAg
cVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBx
VHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1
ZXJ5W3FUeXBlXS5nZXQoKTsKLQotICAgIGlmIChxdWVyeU9iamVjdCA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAg
ICBxdWVyeU9iamVjdC0+ZW5kKCk7Ci0KLSAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLnNl
dChOVUxMKTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZm
ZXIgKmJ1ZmZlcikKLXsKLSAgICBkZWxldGUgbUZyYW1lYnVmZmVyTWFwWzBdOwotICAgIG1GcmFt
ZWJ1ZmZlck1hcFswXSA9IGJ1ZmZlcjsKLSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9
PSAwKQotICAgIHsKLSAgICAgICAgbUJvdW5kRHJhd0ZyYW1lYnVmZmVyID0gYnVmZmVyOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZl
clN0b3JhZ2UgKnJlbmRlcmJ1ZmZlcikKLXsKLSAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
ck9iamVjdCA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuZ2V0KCk7Ci0gICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0LT5zZXRTdG9yYWdlKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0
OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZyYW1lYnVmZmVy
TWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7
Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmcmFtZWJ1ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KLQotRmVuY2UgKkNvbnRleHQ6Omdl
dEZlbmNlKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZl
bmNlID0gbUZlbmNlTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VN
YXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZlbmNlLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1RdWVyeSAq
Q29udGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51
bSB0eXBlKQotewotICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeSA9IG1RdWVyeU1hcC5maW5k
KGhhbmRsZSk7Ci0KLSAgICBpZiAocXVlcnkgPT0gbVF1ZXJ5TWFwLmVuZCgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICgh
cXVlcnktPnNlY29uZCAmJiBjcmVhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5LT5z
ZWNvbmQgPSBuZXcgUXVlcnkoaGFuZGxlLCB0eXBlKTsKLSAgICAgICAgICAgIHF1ZXJ5LT5zZWNv
bmQtPmFkZFJlZigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBxdWVyeS0+c2Vjb25kOwot
ICAgIH0KLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0
dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRF
bGVtZW50QXJyYXlCdWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVm
ZmVyLmdldCgpOwotfQotCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCi17
Ci0gICAgaWYgKCFtQ2FjaGVkQ3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICBtQ2FjaGVk
Q3VycmVudFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSk7Ci0gICAgfQotICAgIHJldHVybiBtQ2FjaGVkQ3VycmVudFByb2dyYW07Ci19
Ci0KLVRleHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dHVyZTJEKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBs
ZXIsIFRFWFRVUkVfMkQpKTsKLX0KLQotVGV4dHVyZUN1YmVNYXAgKkNvbnRleHQ6OmdldFRleHR1
cmVDdWJlTWFwKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihn
ZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJFKSk7Ci19
Ci0KLVRleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1w
bGVyLCBUZXh0dXJlVHlwZSB0eXBlKQotewotICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpOwotCi0gICAgaWYgKHRleGlkID09IDApICAg
Ly8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBi
YXNlZCBvbiB0aGUgdGFyZ2V0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAg
IHsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgIGNhc2UgVEVY
VFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOwotICAgICAgICAgIGNhc2UgVEVY
VFVSRV9DVUJFOiByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVyby5nZXQoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0u
Z2V0KCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJv
b2xlYW4gKnBhcmFtcykKLXsKLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfU0hBREVSX0NPTVBJTEVSOiAgICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0Vf
SU5WRVJUOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhNYXNrOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQ09MT1JfV1JJVEVNQVNLOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JNYXNr
UmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JNYXNrR3JlZW47Ci0gICAgICAg
IHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvck1hc2tCbHVlOwotICAgICAgICBwYXJhbXNbM10gPSBt
U3RhdGUuY29sb3JNYXNrQWxwaGE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0U6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7ICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1Q
TEVfQ09WRVJBR0U6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc2Npc3NvclRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zdGVuY2lsVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBU
SF9URVNUOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQ7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kaXRoZXI7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05U
RVhUX1JPQlVTVF9BQ0NFU1NfRVhUOiAqcGFyYW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUg
OiBHTF9GQUxTRTsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0RmxvYXR2
KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBE
RVBUSF9DTEVBUl9WQUxVRSBpcyBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0RmxvYXR2IGlt
cGxlbWVudGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVz
cGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8vIEdldElu
dGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUg
Y29udmVyc2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZl
cmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uCi0gICAgc3dpdGNoIChwbmFtZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5saW5lV2lkdGg7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlH
T05fT0ZGU0VUX0ZBQ1RPUjogICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9y
OyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
SUFTRURfTElORV9XSURUSF9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURf
TElORV9XSURUSF9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElBU0VEX0xJ
TkVfV0lEVEhfUkFOR0VfTUFYOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0gc3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKSA/IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMyA6IGdsOjpBTElBU0VE
X1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0RFUFRIX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7Ci0gICAgICAg
IHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUucmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdy
ZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWU7Ci0g
ICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKLSAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLmJsZW5kQ29sb3IucmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRD
b2xvci5ncmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsK
LSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFM
VUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRh
dGlvbgotICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhl
IGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKLSAgICAvLyBHZXRJbnRlZ2VydiBh
cyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNp
b24gaW4gYW55Ci0gICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRv
IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gCi0gICAgLy8gQ29u
dGV4dDo6Z2V0RmxvYXR2LgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBH
TF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9S
UzogICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUzogKnBhcmFtcyA9IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBh
cmFtcyA9IGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtRnJh
Z21lbnRVbmlmb3JtVmVjdG9ycygpOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfUkVOREVS
QlVGRkVSX1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZP
Uk1BVFM6ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8q
IG5vIHNoYWRlciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRl
LmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RS
QVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElO
R19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1BBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBh
Y2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19S
RVZFUlNFX1JPV19PUkRFUl9BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VS
b3dPcmRlcjsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5U
OiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6
ICpwYXJhbXMgPSBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1JFRjogICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFT
SzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxNYXNrOyAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
RmFpbDsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9Q
QVNTOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsOyAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7ICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhGdW5j
OyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdC
OiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZFJHQjsgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJs
ZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRf
RVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlv
bkFscGhhOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFT
SzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrOyAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVRl
eHR1cmVEaW1lbnNpb24oKTsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVE
aW1lbnNpb24oKTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFM6ICAgCi0gICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdM
RToKLSAgICAgICAgewotICAgICAgICAgICAgR0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3Vw
cG9ydGVkU2FtcGxlcygpOwotICAgICAgICAgICAgaWYgKG1heFNhbXBsZXMgIT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gbWF4U2FtcGxlczsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAKLSAg
ICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgaWYg
KGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAxOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBm
cmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIAotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZ
UEU7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9S
TUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGlt
ZW5zaW9uKCksIGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkpOwotICAgICAgICAgICAgcGFy
YW1zWzBdID0gbWF4RGltZW5zaW9uOwotICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5z
aW9uOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1RFWFRVUkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhU
MVRleHR1cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0g
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgICAgICAqcGFyYW1z
KysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKLSAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLnZpZXdwb3J0WDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsK
LSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnZpZXdwb3J0V2lkdGg7Ci0gICAgICAgIHBhcmFt
c1szXSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NDSVNTT1JfQk9YOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7Ci0g
ICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsKLSAgICAgICAgcGFyYW1zWzJdID0g
bVN0YXRlLnNjaXNzb3JXaWR0aDsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnNjaXNzb3JI
ZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERTogICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsTW9kZTsgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SRURfQklUUzoKLSAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKLSAgICAgIGNhc2Ug
R0xfQkxVRV9CSVRTOgotICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXIpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1JFRF9CSVRTOiAgICpwYXJhbXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9HUkVFTl9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEdyZWVuU2l6ZSgpOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOiAgKnBhcmFtcyA9IGNv
bG9yYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7IGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoK
LSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdl
dERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYg
KGRlcHRoYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBk
ZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
QklUUzoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
c3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChzdGVuY2lsYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
U3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnZXRNYXhp
bXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJ
TkdfQ1VCRV9NQVA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2Ft
cGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnZXRNYXhpbXVtQ29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVH
WV9FWFQ6Ci0gICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKLSAgICAgICAg
KnBhcmFtcyA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFS
WV9GT1JNQVRTX09FUzoKLSAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xF
OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBh
cmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVt
UGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBm
b3IgREVQVEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGlzIEZM
T0FUIHJhdGhlciB0aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAy
LjAgc3BlYy4gVGhpcyBpcyBkdWUKLSAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3Jl
ZCBpbnRlcm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24K
LSAgICAvLyBpZiByZXR1cm5lZCBmcm9tIENvbnRleHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlz
IGNvbnZlcnNpb24gaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCAKLSAgICAvLyBpbiB0aGUgY2FzZSB0
aGF0IG9uZSBjYWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3Rh
dGUgdmFyaWFibGUsIHdlCi0gICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUg
ZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKLSAg
ICAvLyBhcHBsaWNhdGlvbi4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0
eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4
dHVyZUZvcm1hdHM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NI
QURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9J
TlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgotICAgICAgY2FzZSBHTF9NQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9S
UzoKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAg
ICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xf
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6Ci0gICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAg
IGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgIGNhc2UgR0xfTlVNX0NP
TVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklO
RElORzoKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xf
UkVOREVSQlVGRkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTToKLSAg
ICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6Ci0gICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9S
T1dfT1JERVJfQU5HTEU6Ci0gICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6Ci0gICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFE
RVJfREVSSVZBVElWRV9ISU5UX09FUzoKLSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBj
YXNlIEdMX0dSRUVOX0JJVFM6Ci0gICAgICBjYXNlIEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2Ug
R0xfQUxQSEFfQklUUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CSVRTOgotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
OgotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERToKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFD
RToKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
RlVOQzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1JFRjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRI
X1BBU1M6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
QkFDS19QQVNTX0RFUFRIX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX1BBU1M6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6Ci0gICAgICBjYXNlIEdMX0JMRU5E
X1NSQ19SR0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToKLSAgICAgIGNhc2UgR0xf
QkxFTkRfRFNUX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOgotICAgICAgY2Fz
ZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FM
UEhBOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToK
LSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVf
U0laRToKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAgICAgIGNh
c2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICBjYXNl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKLSAgICAgIGNhc2UgR0xfSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElO
R18yRDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgY2Fz
ZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgY2FzZSBHTF9OVU1f
UFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6Ci0gICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZ
X0ZPUk1BVFNfT0VTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAg
ICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgY2Fz
ZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7
Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09W
RVJBR0VfSU5WRVJUOgotICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6Ci0gICAgICBjYXNl
IEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9GQUNFIHRocm91Z2ggRElUSEVS
IGFyZSBuYXR1cmFsIHRvIElzRW5hYmxlZCwKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RklMTDogICAgICAvLyBidXQgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12
IHF1ZXJpZXMuCi0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogLy8gRm9y
IHRoaXMgcHVycG9zZSwgdGhleSBhcmUgdHJlYXRlZCBoZXJlIGFzIGJvb2wtbmF0dXJhbAotICAg
ICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOgotICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOgot
ICAgICAgY2FzZSBHTF9CTEVORDoKLSAgICAgIGNhc2UgR0xfRElUSEVSOgotICAgICAgY2FzZSBH
TF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlw
ZSA9IEdMX0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOgotICAgICAgICB7Ci0g
ICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RkFDVE9SOgotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzoKLSAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxV
RToKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5
cGUgPSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0g
ICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgIGNhc2UgR0xfREVQ
VEhfUkFOR0U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7Ci0gICAg
ICAgICAgICAqbnVtUGFyYW1zID0gMjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgot
ICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IEFwcGxpZXMgdGhlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNl
LCB2aWV3cG9ydCByZWN0YW5nbGUgYW5kCi0vLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgRGly
ZWN0M0QgOSBkZXZpY2UKLWJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25v
cmVWaWV3cG9ydCkKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVi
dWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNo
bWVudCB3ZSBtdXN0IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudAotICAgIC8vIHRv
IGtlZXAgdGhlIEQzRCBydW50aW1lIGhhcHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJs
ZSBpZiBkZXB0aCB0ZXh0dXJpbmcuCi0gICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmpl
Y3QgPSBOVUxMOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlcigpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0TnVsbENv
bG9yYnVmZmVyKCk7Ci0gICAgfQotICAgIGlmICghcmVuZGVyYnVmZmVyT2JqZWN0KQotICAgIHsK
LSAgICAgICAgRVJSKCJ1bmFibGUgdG8gbG9jYXRlIHJlbmRlcmJ1ZmZlciBmb3IgRkJPLiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCByZW5kZXJUYXJnZXRDaGFu
Z2VkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRl
cmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7Ci0gICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAh
PSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdl
dCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgfQot
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAg
ICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7IC8vIFNjaXNzb3IgYXJlYSBtdXN0IGJlIGNs
YW1wZWQgdG8gcmVuZGVyIHRhcmdldCdzIHNpemUtLSB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZGlm
ZmVyZW50IHJlbmRlciB0YXJnZXRzLgotICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IGRlcHRo
YnVmZmVyU2VyaWFsID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9
IDA7Ci0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBH
TF9OT05FKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBk
ZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2ls
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4
cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2Vy
aWFsKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAg
ICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAg
ICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVw
dGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVyU2Vy
aWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRo
YnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3Rl
bmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKLSAgICAg
ICAgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsKLSAgICAgICAgbUFwcGxpZWREZXB0
aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOwotICAgICAgICBtQXBwbGllZFN0ZW5j
aWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgICAgICBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0g
ICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgcmVuZGVyVGFyZ2V0Q2hhbmdlZCkKLSAg
ICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZm
ZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBi
ZSBsb3N0Ci0gICAgICAgIH0KLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVy
VGFyZ2V0RGVzYyk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVl
OwotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RWSUVX
UE9SVDkgdmlld3BvcnQ7Ci0KLSAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFy
KTsKLSAgICBmbG9hdCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBpZiAoaWdu
b3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmll
d3BvcnQuWSA9IDA7Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2Mu
V2lkdGg7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdo
dDsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFog
PSAxLjBmOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gY2xh
bXAobVN0YXRlLnZpZXdwb3J0WCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXRE
ZXNjLldpZHRoKSk7Ci0gICAgICAgIHZpZXdwb3J0LlkgPSBjbGFtcChtU3RhdGUudmlld3BvcnRZ
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAg
ICAgIHZpZXdwb3J0LldpZHRoID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05H
Pih2aWV3cG9ydC5YKSk7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52
aWV3cG9ydEhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhl
aWdodCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7Ci0gICAgICAgIHZpZXdwb3J0
Lk1pblogPSB6TmVhcjsKLSAgICAgICAgdmlld3BvcnQuTWF4WiA9IHpGYXI7Ci0gICAgfQotCi0g
ICAgaWYgKHZpZXdwb3J0LldpZHRoIDw9IDAgfHwgdmlld3BvcnQuSGVpZ2h0IDw9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKLSAgICB9Ci0K
LSAgICBpZiAocmVuZGVyVGFyZ2V0Q2hhbmdlZCB8fCAhbVZpZXdwb3J0SW5pdGlhbGl6ZWQgfHwg
bWVtY21wKCZ2aWV3cG9ydCwgJm1TZXRWaWV3cG9ydCwgc2l6ZW9mIG1TZXRWaWV3cG9ydCkgIT0g
MCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0gICAg
ICAgIG1TZXRWaWV3cG9ydCA9IHZpZXdwb3J0OwotICAgICAgICBtVmlld3BvcnRJbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAg
IGlmIChtU2Npc3NvclN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNjaXNz
b3JUZXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHJlY3Q7Ci0gICAgICAgICAgICBy
ZWN0LmxlZnQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPiht
UmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcCht
U3RhdGUuc2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5I
ZWlnaHQpKTsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBjbGFtcChtU3RhdGUuc2Npc3Nvclgg
KyBtU3RhdGUuc2Npc3NvcldpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdl
dERlc2MuV2lkdGgpKTsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2xhbXAobVN0YXRlLnNj
aXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVu
ZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFNjaXNzb3JS
ZWN0KCZyZWN0KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1ND
SVNTT1JURVNURU5BQkxFLCBUUlVFKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNU
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVu
aWZvcm1zRGlydHkpCi0gICAgewotICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0
Q3VycmVudFByb2dyYW0oKTsKLSAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgICAgICBHTGludCBoYWxm
UGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsK
LSAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8g
dmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdiho
YWxmUGl4ZWxTaXplLCAxLCB4eSk7Ci0KLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2Vk
IGZvciBjb21wdXRpbmcgZ2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLgot
ICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigp
OwotICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBm
LCBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1T
dGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtNGZ2KGNvb3JkLCAxLCB3aHh5KTsKLQotICAgICAgICBHTGludCBkZXB0aCA9IHByb2dy
YW1CaW5hcnktPmdldER4RGVwdGhMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IGR6WzJdID0g
eyh6RmFyIC0gek5lYXIpIC8gMi4wZiwgKHpOZWFyICsgekZhcikgLyAyLjBmfTsKLSAgICAgICAg
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOwotCi0gICAgICAgIEdM
aW50IGRlcHRoUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigp
OwotICAgICAgICBHTGZsb2F0IG5lYXJGYXJEaWZmWzNdID0ge3pOZWFyLCB6RmFyLCB6RmFyIC0g
ek5lYXJ9OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2Us
IDEsIG5lYXJGYXJEaWZmKTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBcHBsaWVzIHRoZSBmaXhlZC1mdW5jdGlv
biBzdGF0ZSAoY3VsbGluZywgZGVwdGggdGVzdCwgYWxwaGEgYmxlbmRpbmcsIHN0ZW5jaWxpbmcs
IGV0YykgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUo
R0xlbnVtIGRyYXdNb2RlKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJy
ZW50UHJvZ3JhbSgpOwotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIEdMaW50IGZyb250Q0NXID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQgY2N3ID0g
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKTsKLSAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKLQotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBw
cm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOwotICAgIEdMaW50IGFs
d2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLSAgICBwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9udCk7Ci0KLSAgICBE
M0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJ
ZGVudGlmaWVyKCk7Ci0gICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGlkZW50aWZpZXIt
PlZlbmRvcklkICE9IDB4MTAwMjsKLSAgICAvLyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhh
dmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJvIGNvbG9yCi0gICAgLy8gd3JpdGUgbWFz
ayBjYW4gY2F1c2UgbGF0ZXIgZHJhd3MgdG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVh
ZCwKLSAgICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRlIG1hc2sgYnV0IG1vZGlmeSB0aGUg
YmxlbmQgc3RhdGUgc28gdGhhdCBubwotICAgIC8vIGRyYXdpbmcgaXMgZG9uZS4KLSAgICAvLyBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5
Ci0KLSAgICBpZiAobUN1bGxTdGF0ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtU3RhdGUuY3VsbEZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2Rl
KG1TdGF0ZS5jdWxsTW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3VsbFN0
YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9UUlVFKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29u
dmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkVOQUJMRSwgRDNEWkJfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURlcHRoU3RhdGVE
aXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93ZWQgJiYg
KG1NYXNrU3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkKLSAgICB7Ci0gICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1T
dGF0ZS5ibGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChtU3Rh
dGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgotICAgICAgICAgICAgICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLmRlc3RC
bGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1Is
IGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQSh1bm9ybTw4
PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3Rh
dGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xv
ci5hbHBoYSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5z
b3VyY2VCbGVuZFJHQikpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdC
KSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBl
czJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKLQotICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBo
YSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0
QmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAh
PSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJM
RSwgVFJVRSk7Ci0KLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TUkNCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxl
bmRBbHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5k
QWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19C
TEVORE9QQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvbkFs
cGhhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBI
QUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQmxlbmRT
dGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8
fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0
ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2lsKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lM
TU9ERSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5
Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxS
RUYgPSBEM0RSU19TVEVOQ0lMUkVGOwotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVU
WVBFIEQzRFJTX0NDV19TVEVOQ0lMTUFTSyA9IEQzRFJTX1NURU5DSUxNQVNLOwotICAgICAgICAg
ICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLID0g
RDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFdy
aXRlbWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgCi0gICAgICAgICAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIHx8IAotICAgICAg
ICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBz
dGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1
ZXMgYXJlIGludmFsaWQgdW5kZXIgV2ViR0wuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0
ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIEdMdWludCBtYXhTdGVuY2lsID0gKDEgPDwgc3Rl
bmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSkgLSAxOwotCi0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxX
cml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lM
RlVOQywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lM
UkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbFJlZiA8IChHTGludClt
YXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQz
RFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbE1h
c2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlM
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVu
Y2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6
IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwp
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxP
cChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxX
UklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNr
V3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5m
cm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lM
RlVOQywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0KLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVO
Q0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAo
R0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRl
LnN0ZW5jaWxCYWNrTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0ND
V19TVEVOQ0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4
OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwpKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RS
U19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNf
Q0NXX1NURU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1Gcm9udEZhY2VE
aXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtTWFza1N0YXRlRGlydHkpCi0gICAgewot
ICAgICAgICBpbnQgY29sb3JNYXNrID0gZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNv
bG9yTWFza1JlZCwgbVN0YXRlLmNvbG9yTWFza0dyZWVuLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUu
Y29sb3JNYXNrQWxwaGEpOwotICAgICAgICBpZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xv
ck1hc2tBbGxvd2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hh
bm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3RoaW5nIHdpbGwgYmUgZHJhd24uCi0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RD
T0xPUldSSVRFRU5BQkxFX0dSRUVOKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotCi0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNEQkxFTkRfWkVSTyk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIEQzREJMRU5EX09O
RSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBE
M0RCTEVORE9QX0FERCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBj
b2xvck1hc2spOwotICAgICAgICB9Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pXUklURUVOQUJMRSwgbVN0YXRlLmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAg
ICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1Qb2x5Z29u
T2Zmc2V0U3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNl
dEZpbGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVm
ZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICBp
ZiAoZGVwdGhidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgKigoRFdPUkQqKSZtU3Rh
dGUucG9seWdvbk9mZnNldEZhY3RvcikpOwotICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlh
cyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+
Z2V0RGVwdGhTaXplKCkpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19ERVBUSEJJQVMsICooKERXT1JEKikmZGVwdGhCaWFzKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAwKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAobVNhbXBsZVN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNh
bXBsZUFscGhhVG9Db3ZlcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgRklYTUUoIlNhbXBs
ZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVMs
IFRSVUUpOwotICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0gICAgICAgICAgICBpZiAobVN0YXRl
LnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCB0aHJlc2hvbGQgPSAwLjVmOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOwotCi0gICAgICAgICAgICAg
ICAgICAgIGlmICgoaSArIDEpICogbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPj0gdGhyZXNo
b2xkKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJl
c2hvbGQgKz0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgfD0gMTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExF
TUFTSywgbWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZG
RkZGRkYpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAobURpdGhlclN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRIRVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBU
UlVFIDogRkFMU0UpOwotCi0gICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAg
fQotfQotCi1HTGVudW0gQ29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewot
ICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdOwot
Ci0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEo
Zmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwotICAgIGlmIChlcnIgIT0gR0xf
Tk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVy
biBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJp
YnV0ZXMsIGdldEN1cnJlbnRQcm9ncmFtKCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7Ci19Ci0K
LS8vIEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCi1HTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25z
dCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQotewotICAgIEdMZW51bSBlcnIgPSBt
SW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsKLQotICAgIGlmIChl
cnIgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwg
IT0gbUFwcGxpZWRJQlNlcmlhbCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
SW5kaWNlcyhpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKLSAgICAgICAgICAgIG1BcHBsaWVkSUJT
ZXJpYWwgPSBpbmRleEluZm8tPnNlcmlhbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBlcnI7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCi17
Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKLQotICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGll
ZFByb2dyYW1TZXJpYWwpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2
ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAg
SURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBp
eGVsU2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFk
ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAg
ICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwotICAgICAgICBtQXBwbGll
ZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAg
ICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHRl
eHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQg
Q29udGV4dDo6YXBwbHlUZXh0dXJlcygpCi17Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1BJ
WEVMKTsKLQotICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQotICAgIHsKLSAgICAgICAg
YXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7Ci0gICAgfQotfQotCi0vLyBGb3IgZWFjaCBE
aXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCi0v
LyBsb29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFu
ZCB0ZXh0dXJlIHR5cGUsCi0vLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3Np
bmcvZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0
OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGludCBz
YW1wbGVyQ291bnQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTIDogTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBv
ZiBEaXJlY3QzRCA5IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQotICAgIHVuc2lnbmVk
IGludCAqYXBwbGllZFRleHR1cmVTZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1B
cHBsaWVkVGV4dHVyZVNlcmlhbFBTIDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7Ci0gICAgaW50
IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJU
RVhURVhUVVJFU0FNUExFUjA7Ci0gICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnkt
PmdldFVzZWRTYW1wbGVyUmFuZ2UodHlwZSk7Ci0KLSAgICBmb3IgKGludCBzYW1wbGVySW5kZXgg
PSAwOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQotICAgIHsK
LSAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBp
bmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGlu
ZGV4Ci0gICAgICAgIGludCBkM2RTYW1wbGVyID0gc2FtcGxlckluZGV4ICsgZDNkU2FtcGxlck9m
ZnNldDsKLQotICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxl
clRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7Ci0KLSAgICAgICAgICAgIFRleHR1cmUg
KnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwot
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKTsKLQotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJ
bmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRl
eHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4
XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRl
eHR1cmUtPmdldFdyYXBTKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFQg
PSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1p
bkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNE
U0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQpKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIs
IEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1hZ0ZpbHRlcihtYWdGaWx0ZXIpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRl
ciwgZDNkTWlwRmlsdGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRN
aW5GaWx0ZXIobWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwg
ZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8
fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRl
eHR1cmUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVy
ZVR5cGUpLT5nZXRUZXh0dXJlKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXhTZXJpYWw7Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0
dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAgICAgICAg
ICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxl
clJhbmdlOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQotICAg
IHsKLSAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVySW5kZXgg
KyBkM2RTYW1wbGVyT2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAg
IH0KLQotICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVm
ZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENv
bXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVudCk7Ci0g
ICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewot
ICAgICAgICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAg
IGlmIChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm47
ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQotICAgIH0KLQotICAg
IEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7
Ci0KLSAgICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkK
LSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVz
b2x2ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdl
dAotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRv
UGl4ZWxzID0gIWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkg
PD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgotICAgICAgICAgICAgICAgICAg
ICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYg
VUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQg
JiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAg
ICB7Ci0gICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8g
d3JpdGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0
LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
VHJ5IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRv
UGl4ZWxzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4
ZWxzKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxh
aW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lT
VEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICByZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKLSAgICByZW5kZXJU
YXJnZXQtPlJlbGVhc2UoKTsKLSAgICByZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwot
Ci0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNl
IG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgotICAg
ICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
fQotCi0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFj
ZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCByZWN0Owot
ICAgIHJlY3QubGVmdCA9IGNsYW1wKHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRo
KSk7Ci0gICAgcmVjdC50b3AgPSBjbGFtcCh5LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5I
ZWlnaHQpKTsKLSAgICByZWN0LnJpZ2h0ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nh
c3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdo
dCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0KLSAgICBEM0RMT0NLRURf
UkVDVCBsb2NrOwotICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAm
cmVjdCwgRDNETE9DS19SRUFET05MWSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNl
KCk7Ci0KLSAgICAgICAgcmV0dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRl
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhl
bHM7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxz
OwotCi0gICAgdW5zaWduZWQgY2hhciAqc291cmNlOwotICAgIGludCBpbnB1dFBpdGNoOwotICAg
IGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpCi0gICAgewotICAgICAgICBzb3VyY2UgPSAo
KHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAt
IHJlY3QudG9wIC0gMSk7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2su
cEJpdHM7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0KLQotICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsKLSAg
ICAgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAg
Zm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVE
X0JZVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRf
Zm9ybWF0X2JncmEsIGdpdmVuCi0gICAgICAgICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIu
ICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vCi0gICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJv
dWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBv
dXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwK
LSAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiA0KTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0IHI7Ci0gICAgICAgICAgICBmbG9hdCBnOwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAg
ICAgICAgIGZsb2F0IGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWdu
ZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAw
MUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4
MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYg
MHhGODAwKSAqICgxLjBmIC8gMHhGODAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAg
ICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7
Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0Mw
MCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0
ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2Ig
JiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAg
ICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDAp
OwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8g
MHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShz
b3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBh
ID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICh4cmdiICYgMHgwMDAwMDBGRikgKiAo
MS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAw
MDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAo
eHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0Ey
UjEwRzEwQjEwOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0
UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICog
KDEuMGYgLyAweEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgw
MDAwMDNGRikgKiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0g
KGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHIgPSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0
aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0
Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGcgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSAr
IDEpOwotICAgICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkg
KyBqICogaW5wdXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0
Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
ZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3Ro
ZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGFiZ3JbNF07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgRDNEWEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kiko
c291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCksIDQpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGEgPSBhYmdyWzNdOwotICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9IGFiZ3JbMV07Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBhYmdy
WzBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JH
UkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8v
IEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4
ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUg
aXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAg
IDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAg
MiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAg
M3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAg
ICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21w
b25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBk
ZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8
IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciAr
IDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQp
KDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZf
RVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wg
c3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAg
ICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDgg
ICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8
IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwg
ICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBC
R1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBm
b3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBz
aXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAg
ICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8
IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVAotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAg
IC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQotICAgICAgICAgICAgICAgICAgICBk
ZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8
PCAwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcg
KyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzeXN0ZW1TdXJm
YWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFm
cmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIERXT1JEIGZsYWdz
ID0gMDsKLQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAg
ICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0KLSAgICAgICAgaWYgKGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNr
ICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAm
JiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAg
ICAgICAgewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0KLSAgICBpZiAo
bWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdM
X1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgICAgIGlmICghZGVwdGhT
dGVuY2lsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNp
bCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2M7Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwotICAgICAg
ICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7Ci0gICAg
ICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0KLSAg
ICAgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQodHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3Rh
bmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29s
b3JDbGVhclZhbHVlLmFscGhhKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkKSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4p
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZS5ibHVlKSk7Ci0gICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5k
ZXB0aENsZWFyVmFsdWUpOwotICAgIGludCBzdGVuY2lsID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlICYgMHgwMDAwMDBGRjsKLQotICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0
QWxwaGFTaXplKG1SZW5kZXJUYXJnZXREZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9y
TWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGZs
YWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9
IHN0ZW5jaWxVbm1hc2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0g
KGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhKG1TdGF0ZS5jb2xvck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9yTWFza0dyZWVu
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9y
TWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7Ci0KLSAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xl
YXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKLSAgICB7Ci0gICAgICAgIC8vIFN0YXRlIHdo
aWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIg
Y2FsbCBpcyBzYXZlZC4KLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5
IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKLSAgICAg
ICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KLSAgICAgICAgSFJFU1VMVCBocjsKLSAgICAgICAg
aWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVf
T1VUT0ZNRU1PUlkpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5B
QkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEZWRihEM0RG
VkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0U3Ry
ZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1Bf
U0VMRUNUQVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJH
MSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1Nf
QUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBociA9IG1E
ZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1NYXNrZWRDbGVhclNhdmVkU3RhdGUpOwotICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQobU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKTsKLQotICAgICAgICBpZiAobU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBociA9IG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUtPkNhcHR1cmUoKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1pXUklURUVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsK
LSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAw
KTsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xv
ck1hc2tHcmVlbiwgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoZmxhZ3MgJiBEM0RDTEVB
Ul9TVEVOQ0lMKSkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRlVOQywgRDNEQ01QX0FMV0FZ
Uyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUkVG
LCBzdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NU
RU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQ
TEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
WkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAg
ICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxM
KTsKLSAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOwotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUp
OwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JP
UCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RB
UkcxKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FM
UEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLQotICAgICAgICBmb3Io
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmbG9hdCBxdWFkWzRdWzRdOyAgIC8vIEEgcXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0
aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1hdGNoIHRoZSBlZGdlcwotICAgICAgICBxdWFkWzBdWzBd
ID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQg
LSAwLjVmOwotICAgICAgICBxdWFkWzBdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFswXVszXSA9
IDEuMGY7Ci0KLSAgICAgICAgcXVhZFsxXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0g
MC41ZjsKLSAgICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAu
NWY7Ci0gICAgICAgIHF1YWRbMV1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzFdWzNdID0gMS4w
ZjsKLQotICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMl1bMV0gPSAt
MC41ZjsKLSAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMl1bM10gPSAx
LjBmOwotCi0gICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAu
NWY7Ci0gICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFszXVsyXSA9IDAu
MGY7Ci0gICAgICAgIHF1YWRbM11bM10gPSAxLjBmOwotCi0gICAgICAgIG1EaXNwbGF5LT5zdGFy
dFNjZW5lKCk7Ci0gICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdM
RVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKLQotICAgICAgICBpZiAoZmxhZ3Mg
JiBEM0RDTEVBUl9aQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9aQlVGRkVSLCBjb2xvciwgZGVwdGgsIHN0ZW5j
aWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0g
TlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+QXBw
bHkoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmbGFncykKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwp
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGlu
dCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFt
U3RhdGUuY3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZl
VHlwZTsKLSAgICBpbnQgcHJpbWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQ
cmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50
KSkKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJp
bWl0aXZlQ291bnQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhcHBseVN0YXRlKG1vZGUpOwotCi0gICAgR0xzaXplaSByZXBlYXREcmF3ID0g
MTsKLSAgICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBpbnN0
YW5jZXMsICZyZXBlYXREcmF3KTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKGVycik7Ci0gICAgfQotCi0gICAgYXBwbHlTaGFkZXJzKCk7
Ci0gICAgYXBwbHlUZXh0dXJlcygpOwotCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5n
ZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICgh
Y3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5l
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdl
ci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsKLSAgICAgICAgICAgIGlmIChjb3VudGluZ0lC
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhjb3VudGluZ0lCLT5nZXRCdWZmZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAs
IGNvdW50LCAwLCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBhIGNvdW50aW5nIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gUmVn
dWxhciBjYXNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmUo
cHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpCi17
Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghaW5kaWNlcyAm
JiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBw
cmltaXRpdmVUeXBlOwotICAgIGludCBwcmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6
Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0
aXZlQ291bnQpKQotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAg
IGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGFwcGx5U3RhdGUobW9kZSk7Ci0KLSAgICBUcmFuc2xhdGVkSW5k
ZXhEYXRhIGluZGV4SW5mbzsKLSAgICBHTGVudW0gZXJyID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRp
Y2VzLCBjb3VudCwgbW9kZSwgdHlwZSwgJmluZGV4SW5mbyk7Ci0gICAgaWYgKGVyciAhPSBHTF9O
T19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAg
IEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRleEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWlu
SW5kZXggKyAxOwotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAgZXJyID0gYXBwbHlW
ZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAm
cmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFw
cGx5VGV4dHVyZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFjdWxsU2tp
cHNEcmF3KG1vZGUpKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLQot
ICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRyYXdMaW5lTG9vcChjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4KTsg
ICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgcmVwZWF0RHJhdzsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5U
KWluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5k
ZXhJbmZvLnN0YXJ0SW5kZXgsIHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotLy8gSW1wbGVtZW50cyBnbEZsdXNoIHdoZW4gYmxvY2sgaXMgZmFs
c2UsIGdsRmluaXNoIHdoZW4gYmxvY2sgaXMgdHJ1ZQotdm9pZCBDb250ZXh0OjpzeW5jKGJvb2wg
YmxvY2spCi17Ci0gICAgbURpc3BsYXktPnN5bmMoYmxvY2spOwotfQotCi12b2lkIENvbnRleHQ6
OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgpCi17Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3Ig
YW4gaW5kZXhlZCBkcmF3Ci0gICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyLmdldCgpKQotICAgIHsKLSAgICAgICAgQnVmZmVyICppbmRleEJ1ZmZlciA9
IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIGludHB0cl90IG9mZnNl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwotICAgICAgICBpbmRpY2Vz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGV4QnVmZmVyLT5kYXRhKCkpICsgb2Zm
c2V0OwotICAgIH0KLQotICAgIFVJTlQgc3RhcnRJbmRleCA9IDA7Ci0gICAgYm9vbCBzdWNjZWVk
ZWQgPSBmYWxzZTsKLQotICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQotICAgIHsKLSAg
ICAgICAgY29uc3QgaW50IHNwYWNlTmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWdu
ZWQgaW50KTsKLQotICAgICAgICBpZiAoIW1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklU
SUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgzMik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElC
LT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCk7Ci0KLSAgICAgICAg
ICAgIFVJTlQgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZv
ZmZzZXQpKTsKLSAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyA0OwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRl
Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihp
bmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBk
YXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtTGluZUxvb3BJQi0+dW5tYXAoKTsKLSAgICAgICAg
ICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3Vu
dCArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLQotICAgICAgICBpZiAoIW1MaW5lTG9v
cElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJ
bmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5E
RVgxNik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUxpbmVMb29wSUIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1MaW5lTG9vcElCLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VO
U0lHTkVEX1NIT1JUKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1M
aW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBvZmZzZXQgLyAyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVk
IGRyYXcKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2Nv
dW50XSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylb
aV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3Vu
dF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylb
MF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBt
TGluZUxvb3BJQi0+dW5tYXAoKTsKLSAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChzdWNjZWVkZWQp
Ci0gICAgewotICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0
U2VyaWFsKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMobUxp
bmVMb29wSUItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBt
TGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5E
cmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQVF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgs
IGNvdW50LCBzdGFydEluZGV4LCBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9M
SU5FX0xPT1AuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEVudW0oKQotewotICAgIG1JbnZh
bGlkRW51bSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkK
LXsKLSAgICBtSW52YWxpZFZhbHVlID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJ
bnZhbGlkT3BlcmF0aW9uKCkKLXsKLSAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQotewotICAgIG1PdXRPZk1lbW9yeSA9
IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0
aW9uKCkKLXsKLSAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gdHJ1ZTsKLX0KLQot
Ly8gR2V0IG9uZSBvZiB0aGUgcmVjb3JkZWQgZXJyb3JzIGFuZCBjbGVhciBpdHMgZmxhZywgaWYg
YW55LgotLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMuCi1HTGVudW0g
Q29udGV4dDo6Z2V0RXJyb3IoKQotewotICAgIGlmIChtSW52YWxpZEVudW0pCi0gICAgewotICAg
ICAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9F
TlVNOwotICAgIH0KLQotICAgIGlmIChtSW52YWxpZFZhbHVlKQotICAgIHsKLSAgICAgICAgbUlu
dmFsaWRWYWx1ZSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX1ZBTFVFOwot
ICAgIH0KLQotICAgIGlmIChtSW52YWxpZE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIG1JbnZh
bGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwotICAgIH0KLQotICAgIGlmIChtT3V0T2ZNZW1vcnkpCi0gICAgewotICAgICAgICBtT3V0
T2ZNZW1vcnkgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAg
ICB9Ci0KLSAgICBpZiAobUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbikKLSAgICB7Ci0gICAg
ICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgcmV0dXJu
IEdMX05PX0VSUk9SOwotfQotCi1HTGVudW0gQ29udGV4dDo6Z2V0UmVzZXRTdGF0dXMoKQotewot
ICAgIGlmIChtUmVzZXRTdGF0dXMgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBib29s
IGxvc3QgPSBtRGlzcGxheS0+dGVzdERldmljZUxvc3QoKTsKLQotICAgICAgICBpZiAobG9zdCkK
LSAgICAgICAgewotICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsgICAv
LyBTZXRzIG1SZXNldFN0YXR1cwotICAgICAgICB9Ci0gICAgfQotCi0gICAgR0xlbnVtIHN0YXR1
cyA9IG1SZXNldFN0YXR1czsKLQotICAgIGlmIChtUmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1Ip
Ci0gICAgewotICAgICAgICBpZiAobURpc3BsYXktPnRlc3REZXZpY2VSZXNldHRhYmxlKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX05PX0VSUk9SOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKQotewotICAgIHJldHVybiAobVJlc2V0U3RyYXRl
Z3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFk
ZXJNb2RlbDM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBj
b25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfVkFSWUlOR19W
RUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwotfQotCi11bnNpZ25lZCBpbnQg
Q29udGV4dDo6Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN1cHBvcnRzVmVydGV4VGV4dHVyZSA/IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEYgOiAwOwotfQotCi11bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUyArIGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotfQot
Ci1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5JRk9S
TV9WRUNUT1JTX1NNMyA6IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOwotfQotCi1p
bnQgQ29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TmVhcmVzdFN1cHBv
cnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKLXsKLSAg
ICBpZiAocmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gcmVxdWVzdGVkOwot
ICAgIH0KLQotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3Ig
aXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7Ci0gICAgaWYgKGl0ciA9PSBt
TXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLQotICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZf
U0FNUExFUzsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0g
RDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIENvbnRl
eHQ6OnN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRz
RXZlbnRRdWVyaWVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzT2NjbHVzaW9uUXVlcmll
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtU3VwcG9ydHNEWFQxVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQz
VGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3VwcG9ydHNEWFQ1VGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDMyVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsKLX0KLQot
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1i
b29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRz
RmxvYXQxNkxpbmVhckZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0
MTZMaW5lYXJGaWx0ZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVy
YWJsZVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNlJlbmRl
cmFibGVUZXh0dXJlczsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9u
OwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6Omdl
dE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhD
dWJlVGV4dHVyZURpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJl
TGV2ZWwoKSBjb25zdAotewotICAgIHJldHVybiBtTWF4VGV4dHVyZUxldmVsOwotfQotCi1ib29s
IENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNM
dW1pbmFuY2VBbHBoYVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIy
VGV4dHVyZTsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNJbnN0YW5jaW5nOwotfQotCi12b2lkIENvbnRleHQ6OmRl
dGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDIuOSBwYWdlIDIyOgotICAgIC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVk
IHdoaWxlIGl0IGlzIGJvdW5kLCBhbGwgYmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1
cnJlbnQgY29udGV4dAotICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVs
ZXRlLUJ1ZmZlcnMpIGFyZSByZXNldCB0byB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5hcnJheUJ1
ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQo
KSA9PSBidWZmZXIpCi0gICAgewotICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNl
dChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuaWQoKSA9PSBidWZm
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmli
dXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IENvbnRleHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44IHBhZ2UgODQ6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9i
amVjdCBpcyBkZWxldGVkLCBpdCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUg
Ym91bmQgdG8gdGhhdCB0ZXh0dXJlIG9iamVjdCBhcmUKLSAgICAvLyByZWJvdW5kIHRvIHRleHR1
cmUgb2JqZWN0IHplcm8KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9U
WVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsg
c2FtcGxlciA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdLmlkKCkgPT0gdGV4dHVyZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gNC40IHBhZ2UgMTEyOgotICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRl
ZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFt
ZWJ1ZmZlciwgdGhlbiBpdCBpcwotICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhh
ZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBw
b2ludCB0byB3aGljaCB0aGlzCi0gICAgLy8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJy
ZW50bHkgYm91bmQgZnJhbWVidWZmZXIuCi0KLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVm
ZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1
ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsK
LSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSBy
ZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFRl
eHR1cmUodGV4dHVyZSk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVm
ZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiA0LjQgcGFnZSAxMDc6Ci0gICAgLy8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJl
bnRseSBib3VuZCB0byB0aGUgdGFyZ2V0IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFz
IHRob3VnaAotICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRo
ZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8uCi0KLSAgICBp
ZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IGJpbmRSZWFkRnJhbWVidWZmZXIoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5kcmF3RnJh
bWVidWZmZXIgPT0gZnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBiaW5kRHJhd0ZyYW1lYnVm
ZmVyKDApOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1
aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0
LjQgcGFnZSAxMDk6Ci0gICAgLy8gSWYgYSByZW5kZXJidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkg
Ym91bmQgdG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaCBCaW5kUmVu
ZGVyYnVmZmVyCi0gICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRF
UkJVRkZFUiBhbmQgbmFtZSBvZiB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIu
aWQoKSA9PSByZW5kZXJidWZmZXIpCi0gICAgewotICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDAp
OwotICAgIH0KLQotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEx
MToKLSAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMg
aW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwKLSAg
ICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNh
bGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50Ci0gICAg
Ly8gcG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRs
eSBib3VuZCBmcmFtZWJ1ZmZlci4KLQotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIg
PSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAg
IHsKLSAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZl
ciAhPSByZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRl
dGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLX0KLQotVGV4dHVyZSAqQ29u
dGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBUZXh0
dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsKLQotICAgIGlmICh0ID09
IE5VTEwpCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAw
LCAwLCAwLCAyNTUgfTsKLQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIC8v
IGRlZmF1bHQgZmFsbHMgdGhyb3VnaCB0byBURVhUVVJFXzJECi0KLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNv
bXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJEKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7
Ci0gICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgdCA9IGluY29t
cGxldGUyZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
Y2FzZSBURVhUVVJFX0NVQkU6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRleHR1cmVD
dWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcChUZXh0dXJlOjpJTkNP
TVBMRVRFX1RFWFRVUkVfSUQpOwotCi0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJ
bWFnZVBvc1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwot
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0
ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAx
LCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwg
MSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldElt
YWdlTmVnWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0K
LSAgICAgICAgICAgICAgdCA9IGluY29tcGxldGVDdWJlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5
cGVdLnNldCh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotYm9vbCBDb250ZXh0Ojpj
dWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxG
YWNlICYmIG1TdGF0ZS5jdWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xl
TW9kZShkcmF3TW9kZSk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVt
IGRyYXdNb2RlKQotewotICAgIHN3aXRjaCAoZHJhd01vZGUpCi0gICAgewotICAgICAgY2FzZSBH
TF9UUklBTkdMRVM6Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgIGNhc2UgR0xf
VFJJQU5HTEVfU1RSSVA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9QT0lO
VFM6Ci0gICAgICBjYXNlIEdMX0xJTkVTOgotICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6Ci0gICAg
ICBjYXNlIEdMX0xJTkVfU1RSSVA6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlcykKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQot
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1
ZXNbMF07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsx
XSA9IHZhbHVlc1sxXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVu
dFZhbHVlWzJdID0gdmFsdWVzWzJdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhd
Lm1DdXJyZW50VmFsdWVbM10gPSB2YWx1ZXNbM107Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIt
PmRpcnR5Q3VycmVudFZhbHVlKGluZGV4KTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhB
dHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgQVNTRVJU
KGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Ci19Ci0KLS8vIGtlZXAgbGlzdCBzb3J0
ZWQgaW4gZm9sbG93aW5nIG9yZGVyCi0vLyBPRVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lv
bnMKLS8vIFZlbmRvciBleHRlbnNpb25zCi12b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJp
bmcoKQotewotICAgIG1FeHRlbnNpb25TdHJpbmcgPSAiIjsKLQotICAgIC8vIE9FUyBleHRlbnNp
b25zCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQotCi0g
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0g
ICAgLy9tRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7Ci0g
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKLQotICAgIGlmIChz
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAo
c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zs
b2F0MzJMaW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0
c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX25wb3QgIjsKLSAgICB9Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVY
VCkgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKLSAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9v
bGVhbiAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zv
cm1hdF9iZ3JhICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3Mg
IjsKLQotICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAg
IH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2Ug
IjsKLQotICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNE
ZXB0aFRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9B
TkdMRV9kZXB0aF90ZXh0dXJlICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwotICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xF
X2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzSW5z
dGFuY2luZygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgIjsKLQotICAgIGlmIChzdXBwb3J0c0RYVDNU
ZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0RYVDVU
ZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAiOwotCi0gICAgLy8gT3RoZXIgdmVu
ZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSkK
LSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7Ci0gICAg
fQotCi0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZp
bmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQot
ICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOwotICAgIH0KLX0K
LQotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6Omlu
aXRSZW5kZXJlclN0cmluZygpCi17Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRp
ZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotCi0gICAgbVJlbmRlcmVy
U3RyaW5nID0gIkFOR0xFICgiOwotICAgIG1SZW5kZXJlclN0cmluZyArPSBpZGVudGlmaWVyLT5E
ZXNjcmlwdGlvbjsKLSAgICBtUmVuZGVyZXJTdHJpbmcgKz0gIikiOwotfQotCi1jb25zdCBjaGFy
ICpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5k
ZXJlclN0cmluZy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50
IGRzdFgxLCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0
ZmllbGQgbWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVh
ZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1l
YnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fAotICAg
ICAgICAhZHJhd0ZyYW1lYnVmZmVyIHx8IGRyYXdGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmIChkcmF3
RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpbnQgcmVhZEJ1ZmZlcldp
ZHRoID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOwotICAg
IGludCByZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRIZWlnaHQoKTsKLSAgICBpbnQgZHJhd0J1ZmZlcldpZHRoID0gZHJhd0ZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOwotICAgIGludCBkcmF3QnVmZmVySGVpZ2h0
ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsKLQotICAg
IFJFQ1Qgc291cmNlUmVjdDsKLSAgICBSRUNUIGRlc3RSZWN0OwotCi0gICAgaWYgKHNyY1gwIDwg
c3JjWDEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsKLSAgICAgICAg
c291cmNlUmVjdC5yaWdodCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7
Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC5sZWZ0
ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsKLSAgICAgICAgZGVz
dFJlY3QucmlnaHQgPSBkc3RYMDsKLSAgICB9Ci0KLSAgICBpZiAoc3JjWTAgPCBzcmNZMSkKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0
LmJvdHRvbSA9IGRzdFkxOwotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kwOwotICAgICAg
ICBkZXN0UmVjdC50b3AgPSBkc3RZMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
c291cmNlUmVjdC5ib3R0b20gPSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0
WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnRv
cCA9IGRzdFkxOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJj
ZVJlY3Q7Ci0gICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYg
KG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFy
dHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3Ig
dGVzdAotICAgICAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIGRlc3RSZWN0IGlzIG5vdyBpbiBEM0Qt
c3R5bGUgY29vcmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBvZiB0aGUKLSAgICAgICAgLy8gcmVjdCB3
aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4K
LSAgICAgICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7
Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOwot
ICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5sZWZ0ICs9IHhEaWZmOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4gbVN0YXRlLnNjaXNzb3JYICsgbVN0YXRl
LnNjaXNzb3JXaWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJl
Y3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7Ci0gICAg
ICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0
ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnJpZ2h0IC09
IHhEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8IG1TdGF0ZS5z
Y2lzc29yWSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gbVN0YXRlLnNjaXNz
b3JZIC0gZGVzdFJlY3QudG9wOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QudG9wID0g
bVN0YXRlLnNjaXNzb3JZOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0g
eURpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QuYm90dG9tID4gbVN0YXRl
LnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUu
c2Npc3NvckhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5ib3R0b20gPSBt
U3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsKLSAgICAgICAgICAgIHNvdXJj
ZVNjaXNzb3JlZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2ls
ID0gZmFsc2U7Ci0KLSAgICBSRUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0gc291cmNlU2Npc3NvcmVk
UmVjdDsKLSAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lzc29yZWRSZWN0OwotCi0g
ICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0
byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5kcyBvZiAKLSAgICAvLyB0
aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRS
ZWN0LmxlZnQgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1t
ZWRSZWN0LmxlZnQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPSAwOwotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCi0gICAgewotICAgICAgICBpbnQg
eERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZmZXJXaWR0aDsKLSAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIGRl
c3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VU
cmltbWVkUmVjdC50b3A7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAg
ICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJj
ZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCi0gICAgewotICAgICAgICBp
bnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0Owot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0OwotICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChk
ZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSAwIC0g
ZGVzdFRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0gMDsK
LSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBp
ZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQotICAgIHsKLSAgICAg
ICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZlcldpZHRoOwot
ICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0
VHJpbW1lZFJlY3QudG9wOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wID0gMDsKLSAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKLSAgICB7Ci0gICAgICAgIGlu
dCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVmZmVySGVpZ2h0OwotICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAg
c291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGJvb2wgcGFy
dGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9t
IC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1ZmZlckhlaWdodCB8fAotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVm
ZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1l
ZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
cmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAg
ICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAg
fHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9
IDApCi0gICAgewotICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgY29uc3Qg
Ym9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUo
KSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgY29uc3QgYm9vbCB2
YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBH
TF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgaWYgKCF2YWxpZFJlYWRUeXBl
IHx8ICF2YWxpZERyYXdUeXBlIHx8Ci0gICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29s
b3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBz
dXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBibGl0UmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKLQot
ICAgIH0KLQotICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lM
X0JVRkZFUl9CSVQpKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNCdWZmZXIg
PSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7Ci0KLSAg
ICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBkbyBub3Qg
c3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBz
byBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIs
IGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUo
KSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+
Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAg
IHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk9u
bHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkg
dGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVk
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXIt
PmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVh
ZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAg
ICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkUmVuZGVyVGFy
Z2V0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5T
dHJldGNoUmVjdChyZWFkUmVuZGVyVGFyZ2V0LCAmc291cmNlVHJpbW1lZFJlY3QsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVuZGVyVGFy
Z2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgICAgICByZWFk
UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3Ry
ZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNp
bCkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0
ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoU3RlbmNpbCgpOwotCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5V
TEwsIEQzRFRFWEZfTk9ORSk7Ci0KLSAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLQotICAgICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAl
eC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFy
YXRpb25DYWNoZSgpIDogbU1heExydSgwKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVN
X1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhE
ZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICBtVmVydGV4RGVj
bENhY2hlW2ldLmxydUNvdW50ID0gMDsKLSAgICB9Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2Fj
aGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAo
bVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAg
ICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBw
bHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1
dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9ncmFtLCBHTHNpemVpIGluc3RhbmNlcywgR0xz
aXplaSAqcmVwZWF0RHJhdykKLXsKLSAgICAqcmVwZWF0RHJhdyA9IDE7Ci0KLSAgICBpbnQgaW5k
ZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0
cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotCi0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0g
ICAgewotICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0
byBEM0Qgc3RyZWFtIDAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0
aXZlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRl
ID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3Ig
IT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dGFuY2VkQXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5k
ZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FU
VFJJQlMgKyAxXTsKLSAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1sw
XTsKLQotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9n
cmFtQmluYXJ5KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgc3RyZWFtID0gaTsKLQotICAgICAgICAgICAgaWYgKGluc3Rh
bmNlcyA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVn
IG9uIEFUSSBjYXJkcyB3ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhl
IGF0dHJpYnV0ZXMgYXJlIGluc3RhbmNlZC4KLSAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Vk
QXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICpyZXBlYXREcmF3ID0gaW5zdGFuY2VzOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA9PSBpbmRleGVkQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSAwOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gMCkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIFVJTlQgZnJl
cXVlbmN5ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOREVYRURE
QVRBIHwgaW5zdGFuY2VzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOU1RBTkNFREFUQSB8IGF0dHJpYnV0ZXNbaV0u
ZGl2aXNvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJl
cXVlbmN5KTsKLSAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtQXBw
bGllZFZCc1tzdHJlYW1dLnNlcmlhbCAhPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbCB8fAotICAgICAg
ICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3Ry
aWRlIHx8Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0
cmlidXRlc1tpXS5vZmZzZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2Uoc3RyZWFtLCBhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZlciwgYXR0
cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKLSAgICAgICAgICAgICAg
ICBtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOwotICAg
ICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlID0gYXR0cmlidXRlc1tpXS5z
dHJpZGU7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRy
aWJ1dGVzW2ldLm9mZnNldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudC0+
U3RyZWFtID0gc3RyZWFtOwotICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsKLSAgICAg
ICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLnR5cGU7Ci0gICAgICAgICAgICBl
bGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7Ci0gICAgICAgICAgICBlbGVt
ZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQt
PlVzYWdlSW5kZXggPSBwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGkpOwotICAgICAg
ICAgICAgZWxlbWVudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlcyA9
PSAwIHx8IGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewot
ICAgICAgICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5k
ID0gRDNEREVDTF9FTkQoKTsKLSAgICAqKGVsZW1lbnQrKykgPSBlbmQ7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewot
ICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtp
XTsKLSAgICAgICAgaWYgKG1lbWNtcChlbnRyeS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAo
ZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkpID09IDAgJiYg
ZW50cnktPnZlcnRleERlY2xhcmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbnRyeS0+
bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0gICAgICAgICAgICBpZihlbnRyeS0+dmVydGV4RGVjbGFy
YXRpb24gIT0gbUxhc3RTZXRWRGVjbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBk
ZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgbUxhc3RTZXRWRGVjbCA9IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEdMX05PX0VSUk9SOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0
ZXhEZWNsQ2FjaGU7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9D
QUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtp
XS5scnVDb3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGxhc3RDYWNoZSA9ICZtVmVydGV4RGVjbENhY2hlW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFz
dENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Ci0gICAgICAgIC8vIG1MYXN0U2V0VkRl
Y2wgaXMgc2V0IHRvIHRoZSByZXBsYWNlbWVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQot
ICAgICAgICAvLyBhYm91dCBpdC4KLSAgICB9Ci0KLSAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNo
ZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZF
UlRFWEVMRU1FTlQ5KSk7Ci0gICAgZGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVt
ZW50cywgJmxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIGRldmljZS0+U2V0VmVy
dGV4RGVjbGFyYXRpb24obGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgbUxhc3RT
ZXRWRGVjbCA9IGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb247Ci0gICAgbGFzdENhY2hlLT5s
cnVDb3VudCA9ICsrbU1heExydTsKLQotICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotdm9p
ZCBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJrU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1B
cHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7Ci0gICAgfQotCi0gICAgbUxhc3RTZXRWRGVjbCA9IE5V
TEw7Ci0gICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsgICAvLyBGb3JjZXMgaXQgdG8gYmUg
ZGlzYWJsZWQgd2hlbiBub3QgdXNlZAotfQotCi19Ci0KLWV4dGVybiAiQyIKLXsKLWdsOjpDb250
ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNj
ZXNzKQotewotICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29uZmlnLCBzaGFyZUNvbnRleHQs
IG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKLX0KLQotdm9pZCBnbERlc3Ryb3lDb250ZXh0
KGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIGRlbGV0ZSBjb250ZXh0OwotCi0gICAgaWYg
KGNvbnRleHQgPT0gZ2w6OmdldENvbnRleHQoKSkKLSAgICB7Ci0gICAgICAgIGdsOjptYWtlQ3Vy
cmVudChOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgZ2xNYWtlQ3VycmVudChn
bDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpCi17Ci0gICAgZ2w6Om1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3BsYXksIHN1cmZh
Y2UpOwotfQotCi1nbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgpCi17Ci0gICAgcmV0
dXJuIGdsOjpnZXRDb250ZXh0KCk7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
ZDQ3Y2U3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIENvbnRleHQuaDogRGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1h
bmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlv
bnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0
LgotCi0jaWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05U
RVhUX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2lu
Y2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWds
Lmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGhhc2hf
bWFwPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgZWds
Ci17Ci1jbGFzcyBEaXNwbGF5OwotY2xhc3MgU3VyZmFjZTsKLWNsYXNzIENvbmZpZzsKLX0KLQot
bmFtZXNwYWNlIGdsCi17Ci1zdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKLXN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhOwotCi1jbGFzcyBCdWZmZXI7Ci1jbGFzcyBTaGFkZXI7Ci1jbGFzcyBQ
cm9ncmFtOwotY2xhc3MgVGV4dHVyZTsKLWNsYXNzIFRleHR1cmUyRDsKLWNsYXNzIFRleHR1cmVD
dWJlTWFwOwotY2xhc3MgRnJhbWVidWZmZXI7Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBS
ZW5kZXJidWZmZXJTdG9yYWdlOwotY2xhc3MgQ29sb3JidWZmZXI7Ci1jbGFzcyBEZXB0aGJ1ZmZl
cjsKLWNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVyOwotY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKLWNs
YXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwotY2xhc3Mg
SW5kZXhEYXRhTWFuYWdlcjsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBGZW5jZTsKLWNsYXNzIFF1ZXJ5
OwotCi1lbnVtCi17Ci0gICAgRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTID0gMjU2LAotICAgIEQz
RDlfTUFYX0JPT0xfQ09OU1RBTlRTID0gMTYsCi0gICAgRDNEOV9NQVhfSU5UX0NPTlNUQU5UUyA9
IDE2LAotCi0gICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsCi0gICAgTUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlMgPSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgLSAyLCAgIC8vIFJlc2VydmUg
c3BhY2UgZm9yIGR4X0hhbGZQaXhlbFNpemUgYW5kIGR4X0RlcHRoUmFuZ2UuCi0gICAgTUFYX1ZB
UllJTkdfVkVDVE9SU19TTTIgPSA4LAotICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAs
Ci0gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBNQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFNfVlRGID0gNCwgICAvLyBGb3IgZGV2aWNlcyBzdXBwb3J0aW5nIHZlcnRl
eCB0ZXh0dXJlIGZldGNoCi0gICAgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
ID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGLCAgICAKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMiA9IDMyIC0g
MywgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgZHhfQ29vcmQsIGR4X0RlcHRoLCBhbmQgZHhfRGVw
dGhSYW5nZS4gZHhfUG9pbnRPckxpbmVzIGFuZCBkeF9Gcm9udENDVyB1c2Ugc2VwYXJhdGUgYm9v
bCByZWdpc3RlcnMuCi0gICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTMgPSAyMjQg
LSAzLAotICAgIE1BWF9EUkFXX0JVRkZFUlMgPSAxLAotCi0gICAgSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQgPSBHTF9SR0IsCi0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFID0gR0xfVU5TSUdORURfU0hPUlRfNV82XzUKLX07Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0g
ICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VELAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RF9DT05TRVJWQVRJVkUsCi0KLSAgICBRVUVSWV9UWVBFX0NPVU5UCi19OwotCi1jb25zdCBmbG9h
dCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFT
RURfTElORV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVf
UkFOR0VfTUFYX1NNMiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFO
R0VfTUFYX1NNMyA9IDY0LjBmOwotCi1zdHJ1Y3QgQ29sb3IKLXsKLSAgICBmbG9hdCByZWQ7Ci0g
ICAgZmxvYXQgZ3JlZW47Ci0gICAgZmxvYXQgYmx1ZTsKLSAgICBmbG9hdCBhbHBoYTsKLX07Ci0K
LS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRl
Ci1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0
ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3Ry
aWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDAp
Ci0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBdID0gMC4wZjsKLSAgICAgICAgbUN1cnJl
bnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMl0gPSAwLjBmOwotICAg
ICAgICBtQ3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAgICB9Ci0KLSAgICBpbnQgdHlwZVNpemUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUp
OwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVybiBtU2l6ZSAqIHNpemVv
ZihHTHVieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICByZXR1cm4gbVNp
emUgKiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDog
cmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKLSAgICAgICAgICBjYXNlIEdMX0ZJWEVE
OiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhlZCk7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOwotICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZs
b2F0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAg
fQotCi0gICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBvaW50ZXIKLSAgICBHTGVudW0gbVR5cGU7
Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9ybWFsaXplZDsKLSAgICBHTHNpemVpIG1T
dHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlkZQotCi0gICAgdW5pb24KLSAgICB7Ci0g
ICAgICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAgICAgICBpbnRwdHJfdCBtT2Zmc2V0Owot
ICAgIH07Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBD
YXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRlciBpcyBjYWxsZWQuCi0KLSAgICBib29s
IG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIK
LSAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19OwotCi10eXBlZGVmIFZlcnRleEF0dHJpYnV0
ZSBWZXJ0ZXhBdHRyaWJ1dGVBcnJheVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0vLyBIZWxwZXIg
c3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcgc3RhdGUKLXN0cnVjdCBTdGF0ZQotewotICAgIENv
bG9yIGNvbG9yQ2xlYXJWYWx1ZTsKLSAgICBHTGNsYW1wZiBkZXB0aENsZWFyVmFsdWU7Ci0gICAg
aW50IHN0ZW5jaWxDbGVhclZhbHVlOwotCi0gICAgYm9vbCBjdWxsRmFjZTsKLSAgICBHTGVudW0g
Y3VsbE1vZGU7Ci0gICAgR0xlbnVtIGZyb250RmFjZTsKLSAgICBib29sIGRlcHRoVGVzdDsKLSAg
ICBHTGVudW0gZGVwdGhGdW5jOwotICAgIGJvb2wgYmxlbmQ7Ci0gICAgR0xlbnVtIHNvdXJjZUJs
ZW5kUkdCOwotICAgIEdMZW51bSBkZXN0QmxlbmRSR0I7Ci0gICAgR0xlbnVtIHNvdXJjZUJsZW5k
QWxwaGE7Ci0gICAgR0xlbnVtIGRlc3RCbGVuZEFscGhhOwotICAgIEdMZW51bSBibGVuZEVxdWF0
aW9uUkdCOwotICAgIEdMZW51bSBibGVuZEVxdWF0aW9uQWxwaGE7Ci0gICAgQ29sb3IgYmxlbmRD
b2xvcjsKLSAgICBib29sIHN0ZW5jaWxUZXN0OwotICAgIEdMZW51bSBzdGVuY2lsRnVuYzsKLSAg
ICBHTGludCBzdGVuY2lsUmVmOwotICAgIEdMdWludCBzdGVuY2lsTWFzazsKLSAgICBHTGVudW0g
c3RlbmNpbEZhaWw7Ci0gICAgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsOwotICAgIEdMZW51
bSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKLSAgICBHTHVpbnQgc3RlbmNpbFdyaXRlbWFzazsKLSAg
ICBHTGVudW0gc3RlbmNpbEJhY2tGdW5jOwotICAgIEdMaW50IHN0ZW5jaWxCYWNrUmVmOwotICAg
IEdMdWludCBzdGVuY2lsQmFja01hc2s7Ci0gICAgR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbDsKLSAg
ICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAgIEdMZW51bSBzdGVuY2lsQmFj
a1Bhc3NEZXB0aFBhc3M7Ci0gICAgR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgIGJv
b2wgcG9seWdvbk9mZnNldEZpbGw7Ci0gICAgR0xmbG9hdCBwb2x5Z29uT2Zmc2V0RmFjdG9yOwot
ICAgIEdMZmxvYXQgcG9seWdvbk9mZnNldFVuaXRzOwotICAgIGJvb2wgc2FtcGxlQWxwaGFUb0Nv
dmVyYWdlOwotICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2U7Ci0gICAgR0xjbGFtcGYgc2FtcGxlQ292
ZXJhZ2VWYWx1ZTsKLSAgICBib29sIHNhbXBsZUNvdmVyYWdlSW52ZXJ0OwotICAgIGJvb2wgc2Np
c3NvclRlc3Q7Ci0gICAgYm9vbCBkaXRoZXI7Ci0KLSAgICBHTGZsb2F0IGxpbmVXaWR0aDsKLQot
ICAgIEdMZW51bSBnZW5lcmF0ZU1pcG1hcEhpbnQ7Ci0gICAgR0xlbnVtIGZyYWdtZW50U2hhZGVy
RGVyaXZhdGl2ZUhpbnQ7Ci0KLSAgICBHTGludCB2aWV3cG9ydFg7Ci0gICAgR0xpbnQgdmlld3Bv
cnRZOwotICAgIEdMc2l6ZWkgdmlld3BvcnRXaWR0aDsKLSAgICBHTHNpemVpIHZpZXdwb3J0SGVp
Z2h0OwotICAgIGZsb2F0IHpOZWFyOwotICAgIGZsb2F0IHpGYXI7Ci0KLSAgICBHTGludCBzY2lz
c29yWDsKLSAgICBHTGludCBzY2lzc29yWTsKLSAgICBHTHNpemVpIHNjaXNzb3JXaWR0aDsKLSAg
ICBHTHNpemVpIHNjaXNzb3JIZWlnaHQ7Ci0KLSAgICBib29sIGNvbG9yTWFza1JlZDsKLSAgICBi
b29sIGNvbG9yTWFza0dyZWVuOwotICAgIGJvb2wgY29sb3JNYXNrQmx1ZTsKLSAgICBib29sIGNv
bG9yTWFza0FscGhhOwotICAgIGJvb2wgZGVwdGhNYXNrOwotCi0gICAgdW5zaWduZWQgaW50IGFj
dGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZlIHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRV
UkUwCi0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5n
UG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICBHTHVpbnQgcmVhZEZyYW1l
YnVmZmVyOwotICAgIEdMdWludCBkcmF3RnJhbWVidWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8
UmVuZGVyYnVmZmVyPiByZW5kZXJidWZmZXI7Ci0gICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwot
Ci0gICAgVmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNd
OwotICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfVFlQ
RV9DT1VOVF1bTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLSAgICBCaW5k
aW5nUG9pbnRlcjxRdWVyeT4gYWN0aXZlUXVlcnlbUVVFUllfVFlQRV9DT1VOVF07Ci0KLSAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXI7Ci19OwotCi0vLyBIZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0
IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zCi1jbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlCi17Ci0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0gICAgflZl
cnRleERlY2xhcmF0aW9uQ2FjaGUoKTsKLQotICAgIEdMZW51bSBhcHBseURlY2xhcmF0aW9uKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10s
IFByb2dyYW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3
KTsKLQotICAgIHZvaWQgbWFya1N0YXRlRGlydHkoKTsKLQotICBwcml2YXRlOgotICAgIFVJTlQg
bU1heExydTsKLQotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMy
IH07Ci0KLSAgICBzdHJ1Y3QgVkJEYXRhCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc2Vy
aWFsOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlOwotICAgICAgICB1bnNpZ25lZCBpbnQg
b2Zmc2V0OwotICAgIH07Ci0KLSAgICBWQkRhdGEgbUFwcGxpZWRWQnNbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7Ci0g
ICAgYm9vbCBtSW5zdGFuY2luZ0VuYWJsZWQ7Ci0KLSAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hl
RW50cnkKLSAgICB7Ci0gICAgICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW01B
WF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBJ
RGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKnZlcnRleERlY2xhcmF0aW9uOwotICAgIH0gbVZl
cnRleERlY2xDYWNoZVtOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFU107Ci19OwotCi1jbGFz
cyBDb250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRz
LCBib29sIHJvYnVzdEFjY2Vzcyk7Ci0KLSAgICB+Q29udGV4dCgpOwotCi0gICAgdm9pZCBtYWtl
Q3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKLSAgICB2b2lkIG1hcmtEeFVu
aWZvcm1zRGlydHkoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrQ29udGV4dExvc3QoKTsKLSAg
ICBib29sIGlzQ29udGV4dExvc3QoKTsKLQotICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgotICAg
IHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBm
bG9hdCBhbHBoYSk7Ci0KLSAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOwotCi0g
ICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwotCi0gICAgdm9pZCBzZXRDdWxs
RmFjZShib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBzZXRGcm9u
dEZhY2UoR0xlbnVtIGZyb250KTsKLQotICAgIHZvaWQgc2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxl
ZCk7Ci0gICAgYm9vbCBpc0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0
RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpOwotCi0gICAgdm9pZCBzZXREZXB0aFJhbmdlKGZs
b2F0IHpOZWFyLCBmbG9hdCB6RmFyKTsKLSAgICAKLSAgICB2b2lkIHNldEJsZW5kKGJvb2wgZW5h
YmxlZCk7Ci0gICAgYm9vbCBpc0JsZW5kRW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRC
bGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3Vy
Y2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSk7Ci0gICAgdm9pZCBzZXRCbGVuZENvbG9yKGZsb2F0
IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHNl
dEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbik7
Ci0KLSAgICB2b2lkIHNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1N0
ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTdGVuY2lsUGFyYW1zKEdM
ZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKTsK
LSAgICB2b2lkIHNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdM
aW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKTsKLSAgICB2b2lkIHNl
dFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spOwotICAgIHZvaWQgc2V0
U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICB2
b2lkIHNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpOwotICAgIHZvaWQg
c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBz
dGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mp
OwotCi0gICAgdm9pZCBzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpOwotICAgIGJv
b2wgaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UG9s
eWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7Ci0KLSAgICB2
b2lkIHNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNT
YW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFNhbXBs
ZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2
YWx1ZSwgYm9vbCBpbnZlcnQpOwotCi0gICAgdm9pZCBzZXRTY2lzc29yVGVzdChib29sIGVuYWJs
ZWQpOwotICAgIGJvb2wgaXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQg
c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0RpdGhlckVuYWJsZWQoKSBjb25z
dDsKLQotICAgIHZvaWQgc2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwotCi0gICAgdm9pZCBz
ZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpOwotICAgIHZvaWQgc2V0RnJhZ21lbnRT
aGFkZXJEZXJpdmF0aXZlSGludChHTGVudW0gaGludCk7Ci0KLSAgICB2b2lkIHNldFZpZXdwb3J0
UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
LQotICAgIHZvaWQgc2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIHNldENvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKLSAgICB2b2lkIHNldERlcHRoTWFz
ayhib29sIG1hc2spOwotCi0gICAgdm9pZCBzZXRBY3RpdmVTYW1wbGVyKHVuc2lnbmVkIGludCBh
Y3RpdmUpOwotCi0gICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Owot
ICAgIEdMdWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKLSAgICBHTHVpbnQg
Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7Ci0KLSAgICBHTHVpbnQgZ2V0QXJyYXlCdWZm
ZXJIYW5kbGUoKSBjb25zdDsKLQotICAgIEdMdWludCBnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFy
Z2V0KSBjb25zdDsKLQotICAgIHZvaWQgc2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pOwotICAgIHZv
aWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVyICpi
b3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpw
b2ludGVyKTsKLSAgICBjb25zdCB2b2lkICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVk
IGludCBhdHRyaWJOdW0pIGNvbnN0OwotCi0gICAgY29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkg
JmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKLQotICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdM
aW50IGFsaWdubWVudCk7Ci0gICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKLSAgICBHTGludCBn
ZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhY2tSZXZlcnNlUm93T3Jk
ZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpOwotICAgIGJvb2wgZ2V0UGFja1JldmVyc2VSb3dPcmRl
cigpIGNvbnN0OwotCi0gICAgLy8gVGhlc2UgY3JlYXRlICBhbmQgZGVzdHJveSBtZXRob2RzIGFy
ZSBtZXJlbHkgcGFzcy10aHJvdWdocyB0byAKLSAgICAvLyBSZXNvdXJjZU1hbmFnZXIsIHdoaWNo
IG93bnMgdGhlc2Ugb2JqZWN0IHR5cGVzCi0gICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOwotICAg
IEdMdWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIEdMdWludCBjcmVhdGVQcm9n
cmFtKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQgY3JlYXRlUmVu
ZGVyYnVmZmVyKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAg
ICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dy
YW0oR0x1aW50IHByb2dyYW0pOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSk7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0K
LSAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBt
ZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKLSAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIo
KTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0KLSAg
ICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LgotICAgIEdMdWludCBjcmVhdGVG
ZW5jZSgpOwotICAgIHZvaWQgZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKTsKLSAgICAKLSAgICAv
LyBRdWVyaWVzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dDsKLSAgICBHTHVpbnQgY3JlYXRlUXVl
cnkoKTsKLSAgICB2b2lkIGRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSk7Ci0KLSAgICB2b2lkIGJp
bmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlC
dWZmZXIoR0x1aW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0
dXJlKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7Ci0gICAg
dm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBi
aW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kUmVu
ZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSk7Ci0KLSAgICB2b2lkIGJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50
IHF1ZXJ5KTsKLSAgICB2b2lkIGVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpOwotCi0gICAgdm9pZCBz
ZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKLQotICAgIHZvaWQg
c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIp
OwotCi0gICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZXMpOwotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgs
IEdMdWludCBkaXZpc29yKTsKLQotICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUp
OwotICAgIEZlbmNlICpnZXRGZW5jZShHTHVpbnQgaGFuZGxlKTsKLSAgICBTaGFkZXIgKmdldFNo
YWRlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5k
bGUpOwotICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7Ci0gICAgRnJhbWVi
dWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIFJlbmRlcmJ1ZmZlciAq
Z2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIFF1ZXJ5ICpnZXRRdWVyeShHTHVp
bnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUpOwotCi0gICAgQnVmZmVyICpnZXRB
cnJheUJ1ZmZlcigpOwotICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAg
UHJvZ3JhbSAqZ2V0Q3VycmVudFByb2dyYW0oKTsKLSAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUy
RCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1
cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0
eXBlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVi
dWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVt
IHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKTsKLSAgICBib29sIGdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwg
R0xib29sZWFuICpwYXJhbXMpOwotCi0gICAgYm9vbCBnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xl
bnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKTsKLQotICAg
IHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZv
aWQqIHBpeGVscyk7Ci0gICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwotICAgIHZvaWQg
ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKLSAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0
YW5jZXMpOwotICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAvLyBmbHVzaC9maW5pc2gKLQot
ICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCk7Ci0KLSAgICB2b2lkIHJlY29yZEludmFsaWRF
bnVtKCk7Ci0gICAgdm9pZCByZWNvcmRJbnZhbGlkVmFsdWUoKTsKLSAgICB2b2lkIHJlY29yZElu
dmFsaWRPcGVyYXRpb24oKTsKLSAgICB2b2lkIHJlY29yZE91dE9mTWVtb3J5KCk7Ci0gICAgdm9p
ZCByZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKTsKLQotICAgIEdMZW51bSBnZXRF
cnJvcigpOwotICAgIEdMZW51bSBnZXRSZXNldFN0YXR1cygpOwotICAgIHZpcnR1YWwgYm9vbCBp
c1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpOwotCi0gICAgYm9vbCBzdXBwb3J0c1NoYWRlck1v
ZGVsMygpIGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsK
LSAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7Ci0gICAgaW50IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdDsKLSAg
ICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4
aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1UZXh0
dXJlTGV2ZWwoKSBjb25zdDsKLSAgICBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBj
b25zdDsKLSAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1h
dCwgaW50IHJlcXVlc3RlZCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0UmVuZGVyZXJTdHJpbmcoKSBjb25zdDsK
LSAgICBib29sIHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0
c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRFhUMVRleHR1cmVz
KCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0OwotICAgIGJv
b2wgc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQz
MlRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIo
KSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpIGNv
bnN0OwotICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29s
IHN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0x1bWlu
YW5jZVRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Owot
ICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3Jj
WTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKLQotICAgIEJsaXQgKmdldEJs
aXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQotCi0gICAgY29uc3QgRDNEQ0FQUzkgJmdldERldmlj
ZUNhcHMoKSB7IHJldHVybiBtRGV2aWNlQ2FwczsgfQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKENvbnRleHQpOwotCi0gICAgYm9vbCBhcHBseVJlbmRlclRhcmdl
dChib29sIGlnbm9yZVZpZXdwb3J0KTsKLSAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdN
b2RlKTsKLSAgICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KTsKLSAgICBHTGVu
dW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQs
IEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZv
KTsKLSAgICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwot
ICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIHZvaWQgZGV0
YWNoQnVmZmVyKEdMdWludCBidWZmZXIpOwotICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQg
dGV4dHVyZSk7Ci0gICAgdm9pZCBkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIp
OwotICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0g
ICAgVGV4dHVyZSAqZ2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSk7Ci0KLSAg
ICBib29sIGN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKLSAgICBib29sIGlzVHJpYW5n
bGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJpbmco
KTsKLSAgICB2b2lkIGluaXRSZW5kZXJlclN0cmluZygpOwotCi0gICAgY29uc3QgZWdsOjpDb25m
aWcgKmNvbnN0IG1Db25maWc7Ci0gICAgZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKLSAgICBJRGly
ZWN0M0REZXZpY2U5ICptRGV2aWNlOwotCi0gICAgU3RhdGUgbVN0YXRlOwotCi0gICAgQmluZGlu
Z1BvaW50ZXI8VGV4dHVyZTJEPiBtVGV4dHVyZTJEWmVybzsKLSAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwWmVybzsKLQotICAgIHR5cGVkZWYgc3RkZXh0
OjpoYXNoX21hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7Ci0gICAgRnJh
bWVidWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtRnJhbWVi
dWZmZXJIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1
aW50LCBGZW5jZSo+IEZlbmNlTWFwOwotICAgIEZlbmNlTWFwIG1GZW5jZU1hcDsKLSAgICBIYW5k
bGVBbGxvY2F0b3IgbUZlbmNlSGFuZGxlQWxsb2NhdG9yOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6
Omhhc2hfbWFwPEdMdWludCwgUXVlcnkqPiBRdWVyeU1hcDsKLSAgICBRdWVyeU1hcCBtUXVlcnlN
YXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHN0
ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7Ci0gICAgc3RkOjpzdHJpbmcgbVJlbmRlcmVyU3Ry
aW5nOwotCi0gICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBJ
bmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKLQotICAgIEJsaXQgKm1CbGl0Owot
Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKm1MaW5lTG9vcElCOwotICAgIAotICAgIEJpbmRp
bmdQb2ludGVyPFRleHR1cmU+IG1JbmNvbXBsZXRlVGV4dHVyZXNbVEVYVFVSRV9UWVBFX0NPVU5U
XTsKLQotICAgIC8vIFJlY29yZGVkIGVycm9ycwotICAgIGJvb2wgbUludmFsaWRFbnVtOwotICAg
IGJvb2wgbUludmFsaWRWYWx1ZTsKLSAgICBib29sIG1JbnZhbGlkT3BlcmF0aW9uOwotICAgIGJv
b2wgbU91dE9mTWVtb3J5OwotICAgIGJvb2wgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbjsK
LQotICAgIC8vIEN1cnJlbnQvbG9zdCBjb250ZXh0IGZsYWdzCi0gICAgYm9vbCBtSGFzQmVlbkN1
cnJlbnQ7Ci0gICAgYm9vbCBtQ29udGV4dExvc3Q7Ci0gICAgR0xlbnVtIG1SZXNldFN0YXR1czsK
LSAgICBHTGVudW0gbVJlc2V0U3RyYXRlZ3k7Ci0gICAgYm9vbCBtUm9idXN0QWNjZXNzOwotCi0g
ICAgdW5zaWduZWQgaW50IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW01BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNbTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVk
UHJvZ3JhbVNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJp
YWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5z
aWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRJQlNlcmlhbDsKLSAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAg
ICBib29sIG1WaWV3cG9ydEluaXRpYWxpemVkOwotICAgIEQzRFZJRVdQT1JUOSBtU2V0Vmlld3Bv
cnQ7Ci0gICAgYm9vbCBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkOwotICAgIEQzRFNVUkZB
Q0VfREVTQyBtUmVuZGVyVGFyZ2V0RGVzYzsKLSAgICBib29sIG1EeFVuaWZvcm1zRGlydHk7Ci0g
ICAgUHJvZ3JhbSAqbUNhY2hlZEN1cnJlbnRQcm9ncmFtOwotICAgIEZyYW1lYnVmZmVyICptQm91
bmREcmF3RnJhbWVidWZmZXI7Ci0KLSAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKLSAg
ICBib29sIG1TdXBwb3J0c1ZlcnRleFRleHR1cmU7Ci0gICAgYm9vbCBtU3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlOwotICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKLSAgICBpbnQgIG1NYXhS
ZW5kZXJidWZmZXJEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLSAg
ICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJlTGV2
ZWw7Ci0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBsZVN1cHBvcnQ7
Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLSAgICBib29sIG1TdXBwb3J0c0V2
ZW50UXVlcmllczsKLSAgICBib29sIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci0gICAgYm9v
bCBtU3VwcG9ydHNEWFQxVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7
Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQ1VGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9h
dDMyVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyOwotICAg
IGJvb2wgbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlczsKLSAgICBib29sIG1TdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0
ZXI7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwotICAgIGJv
b2wgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzOwotICAgIGJvb2wgbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsKLSAgICBi
b29sIG1TdXBwb3J0czMyYml0SW5kaWNlczsKLSAgICBpbnQgbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0czsKLQotICAgIC8vIHN0YXRlIGNhY2hpbmcgZmxhZ3MKLSAgICBib29sIG1DbGVhclN0
YXRlRGlydHk7Ci0gICAgYm9vbCBtQ3VsbFN0YXRlRGlydHk7Ci0gICAgYm9vbCBtRGVwdGhTdGF0
ZURpcnR5OwotICAgIGJvb2wgbU1hc2tTdGF0ZURpcnR5OwotICAgIGJvb2wgbVBpeGVsUGFja2lu
Z1N0YXRlRGlydHk7Ci0gICAgYm9vbCBtQmxlbmRTdGF0ZURpcnR5OwotICAgIGJvb2wgbVN0ZW5j
aWxTdGF0ZURpcnR5OwotICAgIGJvb2wgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5OwotICAgIGJv
b2wgbVNjaXNzb3JTdGF0ZURpcnR5OwotICAgIGJvb2wgbVNhbXBsZVN0YXRlRGlydHk7Ci0gICAg
Ym9vbCBtRnJvbnRGYWNlRGlydHk7Ci0gICAgYm9vbCBtRGl0aGVyU3RhdGVEaXJ0eTsKLQotICAg
IElEaXJlY3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOwotCi0gICAgRDNE
Q0FQUzkgbURldmljZUNhcHM7Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFn
ZXI7Ci0KLSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
OwotfTsKLX0KLQotZXh0ZXJuICJDIgotewotLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2Ug
YnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRz
LCBib29sIHJvYnVzdEFjY2Vzcyk7Ci12b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQg
KmNvbnRleHQpOwotdm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci1nbDo6Q29udGV4dCAq
Z2xHZXRDdXJyZW50Q29udGV4dCgpOwotX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7
Ci1ib29sIF9fc3RkY2FsbCBnbEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwot
fQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0NPTlRFWFRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE0ZDEyMzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GZW5jZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6RmVuY2Ug
Y2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNpb24uCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0K
LW5hbWVzcGFjZSBnbAotewotCi1GZW5jZTo6RmVuY2UoZWdsOjpEaXNwbGF5KiBkaXNwbGF5KQot
ewotICAgIG1EaXNwbGF5ID0gZGlzcGxheTsKLSAgICBtUXVlcnkgPSBOVUxMOwotICAgIG1Db25k
aXRpb24gPSBHTF9OT05FOwotICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLX0KLQotRmVuY2U6On5G
ZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbURpc3Bs
YXktPmZyZWVFdmVudFF1ZXJ5KG1RdWVyeSk7Ci0gICAgfQotfQotCi1HTGJvb2xlYW4gRmVuY2U6
OmlzRmVuY2UoKQotewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJl
dHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlz
IG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KLSAgICByZXR1cm4gbVF1ZXJ5ICE9
IE5VTEw7Ci19Ci0KLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCi17Ci0g
ICAgaWYgKCFtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnkgPSBtRGlzcGxheS0+YWxsb2Nh
dGVFdmVudFF1ZXJ5KCk7Ci0gICAgICAgIGlmICghbVF1ZXJ5KQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgbUNvbmRpdGlvbiA9IGNvbmRpdGlvbjsK
LSAgICBtU3RhdHVzID0gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTo6dGVzdEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwotICAgIH0KLQotICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0g
ICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQotICAgIHsKLSAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3Vs
dCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBtU3RhdHVzID0gcmVzdWx0ID09
IFNfT0s7Ci0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLXZvaWQgRmVuY2U6OmZpbmlzaEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNl
KCkpCi0gICAgewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2U6Omdl
dEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIGlmIChtUXVlcnkg
PT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgR0xf
RkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBz
cGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4g
ZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBz
dGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAgLy8gb3Ig
R2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJl
bWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KLSAgICAg
ICAgICAgIGlmIChtU3RhdHVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFt
c1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0
YShOVUxMLCAwLCAwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNoZWNrRGV2aWNl
TG9zdChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9
IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwg
cmVzdWx0ID09IFNfRkFMU0UpOwotICAgICAgICAgICAgbVN0YXR1cyA9IHJlc3VsdCA9PSBTX09L
OwotICAgICAgICAgICAgcGFyYW1zWzBdID0gbVN0YXR1czsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05f
TlY6Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBtQ29uZGl0aW9uOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5NjI2Y2IwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRmVuY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZlbmNlLmg6IERlZmluZXMgdGhlIGdsOjpGZW5jZSBjbGFz
cywgd2hpY2ggc3VwcG9ydHMgdGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4KLQotI2lmbmRlZiBM
SUJHTEVTVjJfRkVOQ0VfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0ZFTkNFX0hfCi0KLSNkZWZpbmUg
R0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQot
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNz
IERpc3BsYXk7Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBGZW5jZQotewotICBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgRmVuY2UoZWdsOjpEaXNwbGF5KiBkaXNwbGF5KTsKLSAgICB2aXJ0
dWFsIH5GZW5jZSgpOwotCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZl
bmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2
b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xp
bnQgKnBhcmFtcyk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
RmVuY2UpOwotCi0gICAgZWdsOjpEaXNwbGF5KiBtRGlzcGxheTsKLSAgICBJRGlyZWN0M0RRdWVy
eTkqIG1RdWVyeTsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKLSAgICBHTGJvb2xlYW4gbVN0YXR1
czsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0ZFTkNFX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQ0MjgzLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTA5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZyYW1lYnVm
ZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRz
IEdMIGZyYW1lYnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNS4KLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1
cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAot
ewotCi1GcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIoKQotewotICAgIG1Db2xvcmJ1ZmZlclR5cGUg
PSBHTF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2ls
YnVmZmVyVHlwZSA9IEdMX05PTkU7Ci19Ci0KLUZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQot
ewotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1EZXB0aGJ1ZmZlclBv
aW50ZXIuc2V0KE5VTEwpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0g
ICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotfQotCi1SZW5kZXJidWZmZXIg
KkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5k
bGUpIGNvbnN0Ci17Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OwotICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLQotICAgIGlmICh0eXBlID09IEdM
X05PTkUpCi0gICAgewotICAgICAgICBidWZmZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChJc0ludGVy
bmFsVGV4dHVyZVRhcmdldCh0eXBlKSkKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQt
PmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVyKHR5cGUpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBi
dWZmZXI7Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgY29sb3JidWZmZXIpCi17Ci0gICAgbUNvbG9yYnVmZmVyVHlwZSA9IChjb2xvcmJ1
ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0
KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBjb2xvcmJ1ZmZlcikpOwotfQotCi12b2lkIEZyYW1l
YnVmZmVyOjpzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQot
ewotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xf
Tk9ORTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlw
ZSwgZGVwdGhidWZmZXIpKTsKLX0KLQotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZl
cihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCi17Ci0gICAgbVN0ZW5jaWxidWZm
ZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3Rl
bmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1
cmUpCi17Ci0gICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQotICAgIHsKLSAgICAgICAg
bUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0g
dGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQotICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9O
RTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVy
KQotewotICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgbUNv
bG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0
KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVu
ZGVyYnVmZmVyICYmIG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsK
LSAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50
ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKLSAgICB7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0g
ICAgICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgfQotfQotCi11bnNp
Z25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCi17Ci0gICAgUmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAg
ICBpZiAoY29sb3JidWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY29sb3JidWZmZXItPmdl
dFNlcmlhbCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0
KCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRl
ci5nZXQoKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
b2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7
Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1l
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVu
Y2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICAKLSAgICBpZiAoIWRl
cHRoc3RlbmNpbGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhzdGVuY2ls
YnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlci0+Z2V0RGVw
dGhTdGVuY2lsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGRl
cHRoYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAoc3RlbmNpbGJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6
Z2V0Q29sb3JidWZmZXIoKQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgp
OwotfQotCi1SZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCi17Ci0g
ICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAq
RnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKQotewotICAgIHJldHVybiBtU3RlbmNpbGJ1
ZmZlclBvaW50ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldE51
bGxDb2xvcmJ1ZmZlcigpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpudWxsYnVmZmVyICA9IG1OdWxs
Q29sb3JidWZmZXJQb2ludGVyLmdldCgpOwotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIg
PSBnZXREZXB0aGJ1ZmZlcigpOwotCi0gICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZvciBkZXB0aC1vbmx5IEZCTy4i
KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgR0xzaXplaSB3aWR0aCAgPSBk
ZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IGRlcHRoYnVmZmVy
LT5nZXRIZWlnaHQoKTsKLQotICAgIGlmICghbnVsbGJ1ZmZlciB8fAotICAgICAgICB3aWR0aCAh
PSBudWxsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBudWxsYnVmZmVyLT5nZXRIZWln
aHQoKSkKLSAgICB7Ci0gICAgICAgIG51bGxidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKDAsIG5l
dyBDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7Ci0gICAgICAgIG1OdWxs
Q29sb3JidWZmZXJQb2ludGVyLnNldChudWxsYnVmZmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbGJ1ZmZlcjsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUo
KQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJUeXBlOwotfQotCi1HTGVudW0gRnJhbWVidWZm
ZXI6OmdldERlcHRoYnVmZmVyVHlwZSgpCi17Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7
Ci19Ci0KLUdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKQotewotICAg
IHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0
Q29sb3JidWZmZXJIYW5kbGUoKQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmlk
KCk7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKQotewot
ICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmlkKCk7Ci19Ci0KLUdMdWludCBGcmFtZWJ1
ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpCi17Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5pZCgpOwotfQotCi1ib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkKLXsK
LSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBS
ZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXJPYmplY3QgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0K
LSAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgpID4gMDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVy
Ojpjb21wbGV0ZW5lc3MoKQotewotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBoZWlnaHQgPSAwOwotICAgIGlu
dCBzYW1wbGVzID0gLTE7Ci0gICAgYm9vbCBtaXNzaW5nQXR0YWNobWVudCA9IHRydWU7Ci0KLSAg
ICBpZiAobUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgUmVuZGVy
YnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFj
b2xvcmJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb2xvcmJ1
ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0g
R0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0NvbG9y
UmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0lu
dGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCk7Ci0gICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gY29sb3JidWZmZXItPmdl
dEQzREZvcm1hdCgpOwotCi0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGludGVybmFsZm9y
bWF0KSB8fAotICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0FMUEhBIHx8Ci0g
ICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAg
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0
KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
cygpKSB8fAotICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1h
dCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aFRl
eHR1cmVGb3JtYXQoZDNkZm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChk
M2Rmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7Ci0gICAg
ICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgc2FtcGxlcyA9
IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7Ci0g
ICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKLQotICAgIGlmIChtRGVwdGhi
dWZmZXJUeXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERl
cHRoYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGRl
cHRoYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhi
dWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9
IGRlcHRoYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICAgICAgLy8gZGVwdGggdGV4
dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZHgyZXM6OklzRGVwdGhU
ZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICAg
ICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBtaXNz
aW5nQXR0YWNobWVudCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRo
ICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0RJTUVOU0lPTlM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2FtcGxl
cyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKLSAg
ICB7Ci0gICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAg
ICAgaWYgKCFzdGVuY2lsYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRI
ZWlnaHQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TdGVu
Y2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghZ2w6OklzU3RlbmNpbFJlbmRlcmFibGUoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5
cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNp
bGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNp
bCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKLSAgICAgICAgICAgIC8vIG9mIE9FU19w
YWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRl
eHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsK
LSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwotICAgICAg
ICAgICAgc2FtcGxlcyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAg
IG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
d2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoc2FtcGxlcyAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FO
R0xFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGgg
YW5kIHN0ZW5jaWwgYnVmZmVyLCB0aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0Ci0g
ICAgLy8gc2luY2Ugd2Ugb25seSBzdXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qg
c2VwYXJhdGUgZGVwdGggYW5kIHN0ZW5jaWwKLSAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNp
bGJ1ZmZlciAmJiAoZGVwdGhidWZmZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgfQotCi0gICAgLy8gd2Ug
bmVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBhdHRhY2htZW50IHRvIGJlIGNvbXBsZXRlCi0gICAg
aWYgKG1pc3NpbmdBdHRhY2htZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwotICAgIH0KLQotICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURTsKLX0KLQotRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0
RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIg
KmRlcHRoU3RlbmNpbCkKLXsKLSAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChuZXcgUmVuZGVy
YnVmZmVyKDAsIGNvbG9yYnVmZmVyKSk7Ci0KLSAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNp
bFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBt
RGVwdGhidWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKLQotICAg
IG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgbURlcHRoYnVmZmVyVHlw
ZSA9IChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xf
UkVOREVSQlVGRkVSIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSAoZGVwdGhT
dGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVG
RkVSIDogR0xfTk9ORTsKLX0KLQotaW50IEZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkKLXsKLSAg
ICBpZiAoY29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMZW51bSBEZWZh
dWx0RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCi17Ci0gICAgLy8gVGhlIGRlZmF1bHQgZnJh
bWVidWZmZXIgc2hvdWxkIGFsd2F5cyBiZSBjb21wbGV0ZQotICAgIEFTU0VSVChGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpOwotCi0gICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE0ZDljMmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTgg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRnJhbWVidWZmZXIuaDogRGVmaW5lcyB0
aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCi0vLyBv
YmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDQuNCBwYWdlIDEwNS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KLSNk
ZWZpbmUgTElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0KLW5h
bWVzcGFjZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotY2xhc3MgQ29sb3JidWZmZXI7Ci1j
bGFzcyBEZXB0aGJ1ZmZlcjsKLWNsYXNzIFN0ZW5jaWxidWZmZXI7Ci1jbGFzcyBEZXB0aFN0ZW5j
aWxidWZmZXI7Ci0KLWNsYXNzIEZyYW1lYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBGcmFtZWJ1
ZmZlcigpOwotCi0gICAgdmlydHVhbCB+RnJhbWVidWZmZXIoKTsKLQotICAgIHZvaWQgc2V0Q29s
b3JidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRE
ZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lkIHNl
dFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKLQotICAg
IHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZXRhY2hSZW5k
ZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNp
bCgpOwotCi0gICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbCgpOwotICAgIHVu
c2lnbmVkIGludCBnZXREZXB0aGJ1ZmZlclNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRT
dGVuY2lsYnVmZmVyU2VyaWFsKCk7Ci0KLSAgICBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVy
KCk7Ci0gICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVm
ZmVyKCk7Ci0KLSAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgR0xlbnVtIGdl
dERlcHRoYnVmZmVyVHlwZSgpOwotICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwot
Ci0gICAgR0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKCk7Ci0gICAgR0x1aW50IGdldERlcHRo
YnVmZmVySGFuZGxlKCk7Ci0gICAgR0x1aW50IGdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKLQot
ICAgIGJvb2wgaGFzU3RlbmNpbCgpOwotICAgIGludCBnZXRTYW1wbGVzKCk7Ci0KLSAgICB2aXJ0
dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgR0xlbnVtIG1D
b2xvcmJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3Ji
dWZmZXJQb2ludGVyOwotCi0gICAgR0xlbnVtIG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVwdGhidWZmZXJQb2ludGVyOwotCi0gICAgR0xlbnVt
IG1TdGVuY2lsYnVmZmVyVHlwZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1T
dGVuY2lsYnVmZmVyUG9pbnRlcjsKLQotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4g
bU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwotCi0gICAgUmVuZGVyYnVmZmVyICpsb29rdXBSZW5k
ZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0OwotfTsKLQotY2xhc3Mg
RGVmYXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAg
ICBEZWZhdWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5j
aWxidWZmZXIgKmRlcHRoU3RlbmNpbCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5l
c3MoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0
RnJhbWVidWZmZXIpOwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZG
RVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
SGFuZGxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvSGFuZGxlQWxsb2NhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5
OGY4YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0hhbmRsZUFsbG9jYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBIYW5kbGVBbGxvY2F0b3IuY3BwOiBJbXBsZW1lbnRzIHRoZSBn
bDo6SGFuZGxlQWxsb2NhdG9yIGNsYXNzLCB3aGljaCBpcyB1c2VkCi0vLyB0byBhbGxvY2F0ZSBH
TCBoYW5kbGVzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLUhhbmRsZUFs
bG9jYXRvcjo6SGFuZGxlQWxsb2NhdG9yKCkgOiBtQmFzZVZhbHVlKDEpLCBtTmV4dFZhbHVlKDEp
Ci17Ci19Ci0KLUhhbmRsZUFsbG9jYXRvcjo6fkhhbmRsZUFsbG9jYXRvcigpCi17Ci19Ci0KLXZv
aWQgSGFuZGxlQWxsb2NhdG9yOjpzZXRCYXNlSGFuZGxlKEdMdWludCB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQobUJhc2VWYWx1ZSA9PSBtTmV4dFZhbHVlKTsKLSAgICBtQmFzZVZhbHVlID0gdmFsdWU7
Ci0gICAgbU5leHRWYWx1ZSA9IHZhbHVlOwotfQotCi1HTHVpbnQgSGFuZGxlQWxsb2NhdG9yOjph
bGxvY2F0ZSgpCi17Ci0gICAgaWYgKG1GcmVlVmFsdWVzLnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IEdMdWludCBoYW5kbGUgPSBtRnJlZVZhbHVlcy5iYWNrKCk7Ci0gICAgICAgIG1GcmVlVmFsdWVz
LnBvcF9iYWNrKCk7Ci0gICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgfQotICAgIHJldHVybiBt
TmV4dFZhbHVlKys7Ci19Ci0KLXZvaWQgSGFuZGxlQWxsb2NhdG9yOjpyZWxlYXNlKEdMdWludCBo
YW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSBtTmV4dFZhbHVlIC0gMSkKLSAgICB7Ci0gICAg
ICAgIC8vIERvbid0IGRyb3AgYmVsb3cgYmFzZSB2YWx1ZQotICAgICAgICBpZihtTmV4dFZhbHVl
ID4gbUJhc2VWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbU5leHRWYWx1ZS0tOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgZnJlZSBoYW5k
bGVzIHRoYXQgd2Ugb3duIC0gZG9uJ3QgZHJvcCBiZWxvdyB0aGUgYmFzZSB2YWx1ZQotICAgICAg
ICBpZiAoaGFuZGxlID49IG1CYXNlVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmVl
VmFsdWVzLnB1c2hfYmFjayhoYW5kbGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9j
YXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxv
Y2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyZTE2OC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRv
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gSGFuZGxlQWxsb2NhdG9yLmg6IERlZmluZXMgdGhlIGdsOjpIYW5kbGVBbGxvY2F0b3IgY2xh
c3MsIHdoaWNoIGlzIHVzZWQgdG8KLS8vIGFsbG9jYXRlIEdMIGhhbmRsZXMuCi0KLSNpZm5kZWYg
TElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfSEFORExFQUxM
T0NBVE9SX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgot
Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIEhhbmRsZUFsbG9jYXRvcgotewotICBwdWJsaWM6Ci0g
ICAgSGFuZGxlQWxsb2NhdG9yKCk7Ci0gICAgdmlydHVhbCB+SGFuZGxlQWxsb2NhdG9yKCk7Ci0K
LSAgICB2b2lkIHNldEJhc2VIYW5kbGUoR0x1aW50IHZhbHVlKTsKLQotICAgIEdMdWludCBhbGxv
Y2F0ZSgpOwotICAgIHZvaWQgcmVsZWFzZShHTHVpbnQgaGFuZGxlKTsKLQotICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihIYW5kbGVBbGxvY2F0b3IpOwotCi0gICAgR0x1
aW50IG1CYXNlVmFsdWU7Ci0gICAgR0x1aW50IG1OZXh0VmFsdWU7Ci0gICAgdHlwZWRlZiBzdGQ6
OnZlY3RvcjxHTHVpbnQ+IEhhbmRsZUxpc3Q7Ci0gICAgSGFuZGxlTGlzdCBtRnJlZVZhbHVlczsK
LX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhE
YXRhTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYzBhZWYuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERh
dGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBJbmRleERhdGFNYW5hZ2VyLmNwcDogRGVmaW5lcyB0aGUgSW5kZXhEYXRh
TWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJv
Y2VzcyBmb3IgaW5kZXggYnVmZmVycy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFN
YW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBJbmRl
eEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAxOwotCi1JbmRleERhdGFNYW5hZ2VyOjpJbmRleERh
dGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmRldmljZSkgOiBt
RGV2aWNlKGRldmljZSkKLXsKLSAgICBtU3RyZWFtaW5nQnVmZmVyU2hvcnQgPSBuZXcgU3RyZWFt
aW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1U
X0lOREVYMTYpOwotCi0gICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0g
ICAgewotICAgICAgICBtU3RyZWFtaW5nQnVmZmVySW50ID0gbmV3IFN0cmVhbWluZ0luZGV4QnVm
ZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsK
LQotICAgICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXJJbnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIERvbid0IGxlYXZlIGl0IGluIGEgaGFsZi1pbml0aWFsaXplZCBzdGF0ZQotICAgICAg
ICAgICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICAgICAgICAgIG1TdHJlYW1p
bmdCdWZmZXJTaG9ydCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgbVN0cmVhbWluZ0J1ZmZlckludCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFt
U3RyZWFtaW5nQnVmZmVyU2hvcnQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBhbGxv
Y2F0ZSB0aGUgc3RyZWFtaW5nIGluZGV4IGJ1ZmZlcihzKS4iKTsKLSAgICB9Ci0KLSAgICBtQ291
bnRpbmdCdWZmZXIgPSBOVUxMOwotfQotCi1JbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFu
YWdlcigpCi17Ci0gICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICBkZWxldGUg
bVN0cmVhbWluZ0J1ZmZlckludDsKLSAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotfQotCi12
b2lkIGNvbnZlcnRJbmRpY2VzKEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCwgR0xzaXpl
aSBjb3VudCwgdm9pZCAqb3V0cHV0KQotewotICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZ
VEUpCi0gICAgewotICAgICAgICBjb25zdCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbnB1dCk7Ci0gICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxH
THVzaG9ydCo+KG91dHB1dCk7Ci0KLSAgICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0W2ldID0gaW5baV07Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCi0gICAgewot
ICAgICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1aW50KSk7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpCi0gICAgewotICAg
ICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1c2hvcnQpKTsKLSAg
ICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhU
eXBlPgotdm9pZCBjb21wdXRlUmFuZ2UoY29uc3QgSW5kZXhUeXBlICppbmRpY2VzLCBHTHNpemVp
IGNvdW50LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQotewotICAgICptaW5J
bmRleCA9IGluZGljZXNbMF07Ci0gICAgKm1heEluZGV4ID0gaW5kaWNlc1swXTsKLQotICAgIGZv
ciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBpZiAoKm1p
bkluZGV4ID4gaW5kaWNlc1tpXSkgKm1pbkluZGV4ID0gaW5kaWNlc1tpXTsKLSAgICAgICAgaWYg
KCptYXhJbmRleCA8IGluZGljZXNbaV0pICptYXhJbmRleCA9IGluZGljZXNbaV07Ci0gICAgfQot
fQotCi12b2lkIGNvbXB1dGVSYW5nZShHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBHTHNpemVpIGNvdW50LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQotewot
ICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBjb21wdXRl
UmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpLCBjb3VudCwgbWluSW5k
ZXgsIG1heEluZGV4KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9J
TlQpCi0gICAgewotICAgICAgICBjb21wdXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRleCwgbWF4SW5kZXgpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUKQotICAgIHsKLSAgICAgICAgY29tcHV0ZVJh
bmdlKHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRl
eCwgbWF4SW5kZXgpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLUdMZW51
bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVp
IGNvdW50LCBCdWZmZXIgKmJ1ZmZlciwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVk
SW5kZXhEYXRhICp0cmFuc2xhdGVkKQotewotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlclNob3J0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAg
RDNERk9STUFUIGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCkgPyBEM0RGTVRfSU5E
RVgzMiA6IEQzREZNVF9JTkRFWDE2OwotICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwotICAgIGJvb2wgYWxpZ25lZE9mZnNldCA9IGZhbHNl
OwotCi0gICAgaWYgKGJ1ZmZlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgYWxpZ25lZE9m
ZnNldCA9IChvZmZzZXQgJSBzaXplb2YoR0x1Ynl0ZSkgPT0gMCk7ICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiBhbGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAlIHNpemVv
ZihHTHVzaG9ydCkgPT0gMCk7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OiAgIGFsaWduZWRPZmZzZXQgPSAob2Zmc2V0ICUgc2l6ZW9mKEdMdWludCkgPT0gMCk7ICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBv
ZmZzZXQgPiBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0K
LQotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGJ1ZmZlci0+
ZGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqc3Ry
ZWFtaW5nQnVmZmVyID0gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSA/IG1TdHJlYW1pbmdCdWZm
ZXJJbnQgOiBtU3RyZWFtaW5nQnVmZmVyU2hvcnQ7Ci0KLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAq
c3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNJbmRleEJ1ZmZlcigpIDog
TlVMTDsKLSAgICBJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIgPSBzdHJlYW1pbmdCdWZmZXI7Ci0g
ICAgVUlOVCBzdHJlYW1PZmZzZXQgPSAwOwotCi0gICAgaWYgKHN0YXRpY0J1ZmZlciAmJiBzdGF0
aWNCdWZmZXItPmxvb2t1cFR5cGUodHlwZSkgJiYgYWxpZ25lZE9mZnNldCkKLSAgICB7Ci0gICAg
ICAgIGluZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOwotICAgICAgICBzdHJlYW1PZmZzZXQgPSBz
dGF0aWNCdWZmZXItPmxvb2t1cFJhbmdlKG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5J
bmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKLQotICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0
ID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8g
dHlwZVNpemUodHlwZSkpICogaW5kZXhTaXplKGZvcm1hdCk7Ci0gICAgICAgICAgICBjb21wdXRl
UmFuZ2UodHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5z
bGF0ZWQtPm1heEluZGV4KTsKLSAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+YWRkUmFuZ2Uob2Zm
c2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsIHRyYW5zbGF0ZWQtPm1heEluZGV4LCBz
dHJlYW1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IGludCBjb252ZXJ0Q291bnQgPSBjb3VudDsKLQotICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyLT5zaXplKCkgPT0gMCAmJiBh
bGlnbmVkT2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZGV4QnVmZmVy
ID0gc3RhdGljQnVmZmVyOwotICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IGJ1ZmZlci0+
c2l6ZSgpIC8gdHlwZVNpemUodHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT5pbnZhbGlkYXRlU3RhdGlj
RGF0YSgpOwotICAgICAgICAgICAgICAgIHN0YXRpY0J1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkICpvdXRwdXQgPSBOVUxMOwotICAgICAgICAK
LSAgICAgICAgaWYgKGluZGV4QnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleEJ1
ZmZlci0+cmVzZXJ2ZVNwYWNlKGNvbnZlcnRDb3VudCAqIGluZGV4U2l6ZShmb3JtYXQpLCB0eXBl
KTsKLSAgICAgICAgICAgIG91dHB1dCA9IGluZGV4QnVmZmVyLT5tYXAoaW5kZXhTaXplKGZvcm1h
dCkgKiBjb252ZXJ0Q291bnQsICZzdHJlYW1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAob3V0cHV0ID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
RmFpbGVkIHRvIG1hcCBpbmRleCBidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gR0xfT1VU
X09GX01FTU9SWTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnZlcnRJbmRpY2VzKHR5cGUsIHN0
YXRpY0J1ZmZlciA/IGJ1ZmZlci0+ZGF0YSgpIDogaW5kaWNlcywgY29udmVydENvdW50LCBvdXRw
dXQpOwotICAgICAgICBpbmRleEJ1ZmZlci0+dW5tYXAoKTsKLQotICAgICAgICBjb21wdXRlUmFu
Z2UodHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0
ZWQtPm1heEluZGV4KTsKLQotICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gdHlwZVNpemUodHlwZSkpICogaW5k
ZXhTaXplKGZvcm1hdCk7Ci0gICAgICAgICAgICBzdGF0aWNCdWZmZXItPmFkZFJhbmdlKG9mZnNl
dCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LCB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3Ry
ZWFtT2Zmc2V0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVm
ZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgIHRyYW5zbGF0ZWQtPnNlcmlhbCA9
IGluZGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0g
c3RyZWFtT2Zmc2V0IC8gaW5kZXhTaXplKGZvcm1hdCk7Ci0KLSAgICBpZiAoYnVmZmVyKQotICAg
IHsKLSAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiB0eXBlU2l6ZSh0
eXBlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1zdGQ6OnNpemVf
dCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoRDNERk9STUFUIGZvcm1hdCkgY29uc3QKLXsK
LSAgICByZXR1cm4gKGZvcm1hdCA9PSBEM0RGTVRfSU5ERVgzMikgPyBzaXplb2YodW5zaWduZWQg
aW50KSA6IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci19Ci0KLXN0ZDo6c2l6ZV90IEluZGV4RGF0
YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdAotewotICAgIHN3aXRjaCAodHlw
ZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICByZXR1cm4gc2l6ZW9mKEdM
dWludCk7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6ZW9mKEdMdXNo
b3J0KTsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVybiBzaXplb2YoR0x1Ynl0
ZSk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gc2l6ZW9mKEdMdXNob3J0
KTsKLSAgICB9Ci19Ci0KLVN0YXRpY0luZGV4QnVmZmVyICpJbmRleERhdGFNYW5hZ2VyOjpnZXRD
b3VudGluZ0luZGljZXMoR0xzaXplaSBjb3VudCkKLXsKLSAgICBpZiAoY291bnQgPD0gNjU1MzYp
ICAgLy8gMTYtYml0IGluZGljZXMKLSAgICB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBz
cGFjZU5lZWRlZCA9IGNvdW50ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLQotICAgICAgICBp
ZiAoIW1Db3VudGluZ0J1ZmZlciB8fCBtQ291bnRpbmdCdWZmZXItPnNpemUoKSA8IHNwYWNlTmVl
ZGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAg
ICAgICAgICAgbUNvdW50aW5nQnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKG1EZXZpY2Up
OwotICAgICAgICAgICAgbUNvdW50aW5nQnVmZmVyLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQs
IEdMX1VOU0lHTkVEX1NIT1JUKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQ7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4o
bUNvdW50aW5nQnVmZmVyLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3Io
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIG1Db3VudGluZ0J1ZmZlci0+dW5tYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIGlmIChtU3RyZWFtaW5nQnVmZmVySW50KSAgIC8vIDMyLWJpdCBpbmRp
Y2VzIHN1cHBvcnRlZAotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNwYWNlTmVl
ZGVkID0gY291bnQgKiBzaXplb2YodW5zaWduZWQgaW50KTsKLQotICAgICAgICBpZiAoIW1Db3Vu
dGluZ0J1ZmZlciB8fCBtQ291bnRpbmdCdWZmZXItPnNpemUoKSA8IHNwYWNlTmVlZGVkKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAgICAgICAgICAg
bUNvdW50aW5nQnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKG1EZXZpY2UpOwotICAgICAg
ICAgICAgbUNvdW50aW5nQnVmZmVyLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lH
TkVEX0lOVCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zmc2V0OwotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUNvdW50aW5nQnVmZmVy
LT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAo
ZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFb
aV0gPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtQ291bnRpbmdCdWZmZXItPnVubWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZSByZXR1cm4gTlVMTDsKLSAgICAKLSAgICByZXR1cm4gbUNvdW50aW5n
QnVmZmVyOwotfQotCi1JbmRleEJ1ZmZlcjo6SW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlLCBVSU5UIHNpemUsIEQzREZPUk1BVCBmb3JtYXQpIDogbURldmljZShkZXZpY2UpLCBt
QnVmZmVyU2l6ZShzaXplKSwgbUluZGV4QnVmZmVyKE5VTEwpCi17Ci0gICAgaWYgKHNpemUgPiAw
KQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQ
b29sKEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlO
QU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSwgZm9ybWF0LCBwb29sLCAmbUluZGV4QnVmZmVyLCBO
VUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Ci0KLSAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkg
YWxsb2NhdGluZyBhbiBpbmRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUluZGV4QnVmZmVyOjp+SW5kZXhCdWZmZXIoKQotewotICAgIGlmICht
SW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAg
ICB9Ci19Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSAqSW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbmRleEJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgaW50IElu
ZGV4QnVmZmVyOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQot
Ci11bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXI6Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4g
bUN1cnJlbnRTZXJpYWwrKzsKLX0KLQotdm9pZCBJbmRleEJ1ZmZlcjo6dW5tYXAoKQotewotICAg
IGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlVubG9jaygp
OwotICAgIH0KLX0KLQotU3RyZWFtaW5nSW5kZXhCdWZmZXI6OlN0cmVhbWluZ0luZGV4QnVmZmVy
KElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlOVCBpbml0aWFsU2l6ZSwgRDNERk9STUFUIGZv
cm1hdCkgOiBJbmRleEJ1ZmZlcihkZXZpY2UsIGluaXRpYWxTaXplLCBmb3JtYXQpCi17Ci0gICAg
bVdyaXRlUG9zaXRpb24gPSAwOwotfQotCi1TdHJlYW1pbmdJbmRleEJ1ZmZlcjo6flN0cmVhbWlu
Z0luZGV4QnVmZmVyKCkKLXsKLX0KLQotdm9pZCAqU3RyZWFtaW5nSW5kZXhCdWZmZXI6Om1hcChV
SU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQgKm9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBO
VUxMOwotCi0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKG1Xcml0ZVBvc2l0aW9uLCByZXF1aXJlZFNwYWNlLCAm
bWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKLSAgICAgCi0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBl
cnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAg
IH0KLQotICAgICAgICAqb2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0ZVBv
c2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0K
LQotdm9pZCBTdHJlYW1pbmdJbmRleEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNlKFVJTlQgcmVxdWlyZWRT
cGFjZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbUluZGV4QnVmZmVyID0g
TlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgocmVxdWly
ZWRTcGFjZSwgMiAqIG1CdWZmZXJTaXplKTsKLQotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXRE
aXNwbGF5KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRF
T05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZm
ZXIobUJ1ZmZlclNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIHR5
cGUgPT0gR0xfVU5TSUdORURfSU5UID8gRDNERk1UX0lOREVYMzIgOiBEM0RGTVRfSU5ERVgxNiwg
cG9vbCwgJm1JbmRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlh
bCgpOwotICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBz
aXplICVsdS4iLCBtQnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtV3JpdGVQb3Np
dGlvbiA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgcmVxdWlyZWRT
cGFjZSA+IG1CdWZmZXJTaXplKSAgIC8vIFJlY3ljbGUKLSAgICB7Ci0gICAgICAgIHZvaWQgKmR1
bW15OwotICAgICAgICBtSW5kZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJ
U0NBUkQpOwotICAgICAgICBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAgIG1Xcml0
ZVBvc2l0aW9uID0gMDsKLSAgICB9Ci19Ci0KLVN0YXRpY0luZGV4QnVmZmVyOjpTdGF0aWNJbmRl
eEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogSW5kZXhCdWZmZXIoZGV2aWNlLCAw
LCBEM0RGTVRfVU5LTk9XTikKLXsKLSAgICBtQ2FjaGVUeXBlID0gR0xfTk9ORTsKLX0KLQotU3Rh
dGljSW5kZXhCdWZmZXI6On5TdGF0aWNJbmRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQgKlN0YXRp
Y0luZGV4QnVmZmVyOjptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpCi17Ci0g
ICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKLQotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jaygwLCByZXF1aXJlZFNw
YWNlLCAmbWFwUHRyLCAwKTsKLSAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAg
ICAqb2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIFN0
YXRpY0luZGV4QnVmZmVyOjpyZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0g
dHlwZSkKLXsKLSAgICBpZiAoIW1JbmRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAwKQotICAg
IHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQz
RFVTQUdFX1dSSVRFT05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlSW5kZXhCdWZmZXIocmVxdWlyZWRTcGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09
IEdMX1VOU0lHTkVEX0lOVCA/IEQzREZNVF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2ws
ICZtSW5kZXhCdWZmZXIsIE5VTEwpOwotICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsK
LSAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAl
bHUuIiwgbUJ1ZmZlclNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSBy
ZXF1aXJlZFNwYWNlOwotICAgICAgICBtQ2FjaGVUeXBlID0gdHlwZTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAobUluZGV4QnVmZmVyICYmIG1CdWZmZXJTaXplID49IHJlcXVpcmVkU3BhY2UgJiYgbUNh
Y2hlVHlwZSA9PSB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQKLSAg
ICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOyAgIC8vIFN0YXRpYyBpbmRleCBidWZmZXJzIGNh
bid0IGJlIHJlc2l6ZWQKLX0KLQotYm9vbCBTdGF0aWNJbmRleEJ1ZmZlcjo6bG9va3VwVHlwZShH
TGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbUNhY2hlVHlwZSA9PSB0eXBlOwotfQotCi1VSU5U
IFN0YXRpY0luZGV4QnVmZmVyOjpsb29rdXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkg
Y291bnQsIFVJTlQgKm1pbkluZGV4LCBVSU5UICptYXhJbmRleCkKLXsKLSAgICBJbmRleFJhbmdl
IHJhbmdlID0ge29mZnNldCwgY291bnR9OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5k
ZXhSZXN1bHQ+OjppdGVyYXRvciByZXMgPSBtQ2FjaGUuZmluZChyYW5nZSk7Ci0gICAgCi0gICAg
aWYgKHJlcyA9PSBtQ2FjaGUuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
fQotCi0gICAgKm1pbkluZGV4ID0gcmVzLT5zZWNvbmQubWluSW5kZXg7Ci0gICAgKm1heEluZGV4
ID0gcmVzLT5zZWNvbmQubWF4SW5kZXg7Ci0gICAgcmV0dXJuIHJlcy0+c2Vjb25kLnN0cmVhbU9m
ZnNldDsKLX0KLQotdm9pZCBTdGF0aWNJbmRleEJ1ZmZlcjo6YWRkUmFuZ2UoaW50cHRyX3Qgb2Zm
c2V0LCBHTHNpemVpIGNvdW50LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0
cmVhbU9mZnNldCkKLXsKLSAgICBJbmRleFJhbmdlIGluZGV4UmFuZ2UgPSB7b2Zmc2V0LCBjb3Vu
dH07Ci0gICAgSW5kZXhSZXN1bHQgaW5kZXhSZXN1bHQgPSB7bWluSW5kZXgsIG1heEluZGV4LCBz
dHJlYW1PZmZzZXR9OwotICAgIG1DYWNoZVtpbmRleFJhbmdlXSA9IGluZGV4UmVzdWx0OwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0lu
ZGV4RGF0YU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
SW5kZXhEYXRhTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWQ0MTY4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5k
ZXhEYXRhTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIEluZGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgSW5kZXhEYXRh
TWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJv
Y2VzcyBmb3IgaW5kZXggYnVmZmVycy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfSU5ERVhEQVRBTUFO
QUdFUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfSU5ERVhEQVRBTUFOQUdFUl9IXwotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQot
bmFtZXNwYWNlCi17Ci0gICAgZW51bSB7IElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUgPSA0MDk2
ICogc2l6ZW9mKEdMdWludCkgfTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhCi17Ci0gICAgVUlOVCBtaW5JbmRleDsKLSAgICBVSU5UIG1heEluZGV4
OwotICAgIFVJTlQgc3RhcnRJbmRleDsKLQotICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqaW5k
ZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbDsKLX07Ci0KLWNsYXNzIEluZGV4QnVm
ZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UsIFVJTlQgc2l6ZSwgRDNERk9STUFUIGZvcm1hdCk7Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZm
ZXIoKTsKLQotICAgIFVJTlQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9Ci0g
ICAgdmlydHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpID0g
MDsKLSAgICB2b2lkIHVubWFwKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2VydmVTcGFjZShVSU5U
IHJlcXVpcmVkU3BhY2UsIEdMZW51bSB0eXBlKSA9IDA7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1
ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OwotICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBj
b25zdDsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURldmlj
ZTsKLQotICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOwotICAgIFVJTlQg
bUJ1ZmZlclNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVu
dFNlcmlhbDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRl
eEJ1ZmZlcik7Ci19OwotCi1jbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlciA6IHB1YmxpYyBJbmRl
eEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlLCBVSU5UIGluaXRpYWxTaXplLCBEM0RGT1JNQVQgZm9ybWF0KTsKLSAg
ICB+U3RyZWFtaW5nSW5kZXhCdWZmZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKFVJTlQg
cmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2ZVNw
YWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpOwotCi0gIHByaXZhdGU6Ci0gICAg
VUlOVCBtV3JpdGVQb3NpdGlvbjsKLX07Ci0KLWNsYXNzIFN0YXRpY0luZGV4QnVmZmVyIDogcHVi
bGljIEluZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdGF0aWNJbmRleEJ1
ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOwotICAgIH5TdGF0aWNJbmRleEJ1ZmZlcigp
OwotCi0gICAgdmlydHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZz
ZXQpOwotICAgIHZpcnR1YWwgdm9pZCByZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBH
TGVudW0gdHlwZSk7Ci0KLSAgICBib29sIGxvb2t1cFR5cGUoR0xlbnVtIHR5cGUpOwotICAgIFVJ
TlQgbG9va3VwUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UICptaW5J
bmRleCwgVUlOVCAqbWF4SW5kZXgpOyAgIC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBp
bmRleCBidWZmZXIsIG9yIC0xIGlmIG5vdCBmb3VuZAotICAgIHZvaWQgYWRkUmFuZ2UoaW50cHRy
X3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBV
SU5UIHN0cmVhbU9mZnNldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBHTGVudW0gbUNhY2hlVHlwZTsK
LSAgICAKLSAgICBzdHJ1Y3QgSW5kZXhSYW5nZQotICAgIHsKLSAgICAgICAgaW50cHRyX3Qgb2Zm
c2V0OwotICAgICAgICBHTHNpemVpIGNvdW50OwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IEluZGV4UmFuZ2UmIHJocykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG9m
ZnNldCAhPSByaHMub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBvZmZzZXQgPCByaHMub2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNv
dW50ICE9IHJocy5jb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y291bnQgPCByaHMuY291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IEluZGV4UmVzdWx0Ci0gICAgewot
ICAgICAgICBVSU5UIG1pbkluZGV4OwotICAgICAgICBVSU5UIG1heEluZGV4OwotICAgICAgICBV
SU5UIHN0cmVhbU9mZnNldDsKLSAgICB9OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5k
ZXhSZXN1bHQ+IG1DYWNoZTsKLX07Ci0KLWNsYXNzIEluZGV4RGF0YU1hbmFnZXIKLXsKLSAgcHVi
bGljOgotICAgIEluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2
aWNlOSAqZXZpY2UpOwotICAgIHZpcnR1YWwgfkluZGV4RGF0YU1hbmFnZXIoKTsKLQotICAgIEdM
ZW51bSBwcmVwYXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIg
KmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICp0cmFuc2xhdGVkKTsKLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAqZ2V0Q291bnRpbmdJ
bmRpY2VzKEdMc2l6ZWkgY291bnQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEluZGV4RGF0YU1hbmFnZXIpOwotCi0gICAgc3RkOjpzaXplX3QgdHlwZVNpemUo
R0xlbnVtIHR5cGUpIGNvbnN0OwotICAgIHN0ZDo6c2l6ZV90IGluZGV4U2l6ZShEM0RGT1JNQVQg
Zm9ybWF0KSBjb25zdDsKLQotICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZpY2U7Ci0K
LSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqbVN0cmVhbWluZ0J1ZmZlclNob3J0OwotICAgIFN0
cmVhbWluZ0luZGV4QnVmZmVyICptU3RyZWFtaW5nQnVmZmVySW50OwotICAgIFN0YXRpY0luZGV4
QnVmZmVyICptQ291bnRpbmdCdWZmZXI7Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNW
Ml9JTkRFWERBVEFNQU5BR0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4
YTlkOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTA3ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFByb2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFz
cy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvdXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBnbAot
ewotY29uc3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKLQotdW5z
aWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLQotQXR0cmlidXRlQmluZGlu
Z3M6OkF0dHJpYnV0ZUJpbmRpbmdzKCkKLXsKLX0KLQotQXR0cmlidXRlQmluZGluZ3M6On5BdHRy
aWJ1dGVCaW5kaW5ncygpCi17Ci19Ci0KLUluZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5V
TEwpCi17Ci19Ci0KLUluZm9Mb2c6On5JbmZvTG9nKCkKLXsKLSAgICBkZWxldGVbXSBtSW5mb0xv
ZzsKLX0KLQotCi1pbnQgSW5mb0xvZzo6Z2V0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1J
bmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KLX0KLQotdm9pZCBJ
bmZvTG9nOjpnZXRMb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmlu
Zm9Mb2cpCi17Ci0gICAgaW50IGluZGV4ID0gMDsKLQotICAgIGlmIChidWZTaXplID4gMCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtSW5mb0xvZykKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXgg
PSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAg
ICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOwotICAgIH0KLQotICAgIGlmIChsZW5ndGgpCi0gICAg
ewotICAgICAgICAqbGVuZ3RoID0gaW5kZXg7Ci0gICAgfQotfQotCi0vLyBhcHBlbmQgYSBzYW50
aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9nLgotLy8gVGhlIEQzRCBjb21waWxl
ciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJy
b3IgCi0vLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMg
ZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgotdm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6
ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKLXsKLSAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7
Ci0KLSAgICBzaXplX3QgZm91bmQ7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNn
LmZpbmQoZ19mYWtlcGF0aCk7Ci0gICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cykKLSAgICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZ19mYWtl
cGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcyk7Ci0KLSAgICBhcHBlbmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZvaWQg
SW5mb0xvZzo6YXBwZW5kKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9y
bWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0
XTsKLQotICAgIHZhX2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsK
LSAgICB2c25wcmludGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAg
dmFfZW5kKHZhcmFyZyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsK
LQotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFy
W2luZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5m
b0xvZyk7Ci0gICAgICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9M
ZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBz
dHJjcHkobmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5m
b0xvZzsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIEluZm9M
b2c6OnJlc2V0KCkKLXsKLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBkZWxldGUg
W10gbUluZm9Mb2c7Ci0gICAgICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICB9Ci19Ci0KLVByb2dy
YW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1S
ZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNl
cmlhbCgpKQotewotICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgbVZlcnRleFNoYWRl
ciA9IE5VTEw7Ci0gICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOwotICAgIG1EZWxldGVTdGF0dXMg
PSBmYWxzZTsKLSAgICBtUmVmQ291bnQgPSAwOwotfQotCi1Qcm9ncmFtOjp+UHJvZ3JhbSgpCi17
Ci0gICAgdW5saW5rKHRydWUpOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBtRnJhZ21lbnRTaGFkZXIt
PnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRl
ciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hB
REVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXIg
PSAoVmVydGV4U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigp
OwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9T
SEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRT
aGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQot
ewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsK
LSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4U2hhZGVyLT5y
ZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNl
IGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAg
ICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5y
ZWxlYXNlKCk7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiAobVZlcnRleFNo
YWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Ci19Ci0KLXZvaWQgQXR0
cmlidXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0
IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAg
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5h
bWUpOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1
aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQotewotICAgIG1BdHRyaWJ1dGVCaW5kaW5ncy5i
aW5kQXR0cmlidXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOwotfQotCi0vLyBMaW5rcyB0aGUgSExT
TCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVp
ciB2YXJ5aW5ncywKLS8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5n
IHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCi0vLyBhIGxpc3Qgb2YgdW5p
Zm9ybXMKLXZvaWQgUHJvZ3JhbTo6bGluaygpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLQotICAg
IG1JbmZvTG9nLnJlc2V0KCk7Ci0KLSAgICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmlu
YXJ5OwotICAgIGlmICghbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVC
aW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAg
IHVubGluayhmYWxzZSk7Ci0gICAgfQotfQotCi1pbnQgQXR0cmlidXRlQmluZGluZ3M6OmdldEF0
dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0Ci17Ci0gICAgZm9y
IChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRp
b24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmlu
ZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiAtMTsKLX0KLQotLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5r
ZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9n
cmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQotewotICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVj
dCBiZWluZyBkZXN0cnVjdGVkCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bVZlcnRleFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVs
ZWFzZSgpOwotICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBkZWxldGUgbVBy
b2dyYW1CaW5hcnk7Ci0gICAgICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0K
LVByb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQotewotICAgIHJldHVy
biBtUHJvZ3JhbUJpbmFyeTsKLX0KLQotdm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLSAgICBt
UHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6cmVsZWFz
ZSgpCi17Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURl
bGV0ZVN0YXR1cykKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dy
YW0obUhhbmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmFkZFJlZigpCi17Ci0gICAg
bVJlZkNvdW50Kys7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1SZWZDb3VudDsKLX0KLQotdW5zaWduZWQgaW50IFByb2dyYW06
OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXJpYWw7Ci19Ci0KLXVuc2lnbmVk
IGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFs
Kys7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUluZm9Mb2cuZ2V0TGVuZ3RoKCk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xv
ZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAg
ICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7Ci19Ci0K
LXZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6
ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQotICAg
IGlmIChtVmVydGV4U2hhZGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+
Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3Vu
dCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFk
ZXItPmdldEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9Ci0K
LSAgICBpZiAoY291bnQpCi0gICAgewotICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9Ci19
Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdM
Y2hhciAqbmFtZSkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBt
UHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgs
IHNpemUsIHR5cGUsIG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
YnVmc2l6ZSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICp0eXBlID0gR0xfTk9ORTsK
LSAgICAgICAgKnNpemUgPSAxOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZl
QXR0cmlidXRlQ291bnQoKQotewotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1HTGlu
dCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQotewotICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdM
dWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXpl
LCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkp
Ci0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm0o
aW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbmFtZVswXSA9ICdcMCc7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGVuZ3RoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICpz
aXplID0gMDsKLSAgICAgICAgKnR5cGUgPSBHTF9OT05FOwotICAgIH0KLX0KLQotR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkp
Ci0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1D
b3VudCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQotewotICAg
IGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFy
eS0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKCkKLXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpp
c0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7
Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQotewotICAgIG1JbmZvTG9nLnJlc2V0KCk7
Ci0KLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBtUHJvZ3JhbUJpbmFy
eS0+dmFsaWRhdGUobUluZm9Mb2cpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBt
SW5mb0xvZy5hcHBlbmQoIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQu
Iik7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKLXsKLSAg
ICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5h
cnktPmlzVmFsaWRhdGVkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDcz
MWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVt
ZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaWZuZGVmIExJQkdM
RVNWMl9QUk9HUkFNX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0hfCi0KLSNpbmNsdWRl
IDxkM2R4OS5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBSZXNvdXJjZU1hbmFnZXI7Ci1jbGFzcyBGcmFnbWVudFNo
YWRlcjsKLWNsYXNzIFZlcnRleFNoYWRlcjsKLQotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBn
X2Zha2VwYXRoOwotCi1jbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncwotewotICBwdWJsaWM6Ci0gICAg
QXR0cmlidXRlQmluZGluZ3MoKTsKLSAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKLQotICAgIHZv
aWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7
Ci0gICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNv
bnN0OwotCi0gIHByaXZhdGU6Ci0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVC
aW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107Ci19OwotCi1jbGFzcyBJbmZvTG9nCi17Ci0gIHB1
YmxpYzoKLSAgICBJbmZvTG9nKCk7Ci0gICAgfkluZm9Mb2coKTsKLQotICAgIGludCBnZXRMZW5n
dGgoKSBjb25zdDsKLSAgICB2b2lkIGdldExvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgY2hhciAqaW5mb0xvZyk7Ci0KLSAgICB2b2lkIGFwcGVuZFNhbml0aXplZChjb25zdCBj
aGFyICptZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyICppbmZvLCAuLi4pOwot
ICAgIHZvaWQgcmVzZXQoKTsKLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oSW5mb0xvZyk7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci19OwotCi1jbGFzcyBQcm9ncmFtCi17
Ci0gIHB1YmxpYzoKLSAgICBQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50
IGhhbmRsZSk7Ci0KLSAgICB+UHJvZ3JhbSgpOwotCi0gICAgYm9vbCBhdHRhY2hTaGFkZXIoU2hh
ZGVyICpzaGFkZXIpOwotICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKLSAg
ICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKLQotICAgIHZvaWQgYmluZEF0
dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLSAgICB2
b2lkIGxpbmsoKTsKLSAgICB2b2lkIHNldFByb2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0g
ICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwotICAgIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVp
bnQgKnNoYWRlcnMpOwotCi0gICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKTsKLSAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgp
OwotICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBn
ZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xp
bnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1h
eExlbmd0aCgpOwotCi0gICAgdm9pZCBhZGRSZWYoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291bnQoKSBjb25zdDsKLSAgICB2b2lkIGZsYWdGb3JEZWxl
dGlvbigpOwotICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKLQotICAgIHZv
aWQgdmFsaWRhdGUoKTsKLSAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7Ci0KLSAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kg
PSBmYWxzZSk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0KLSAg
ICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwotICAgIFZlcnRleFNoYWRlciAqbVZl
cnRleFNoYWRlcjsKLQotICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsK
LQotICAgIFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFtQmluYXJ5OwotICAgIGJvb2wgbURlbGV0ZVN0
YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0
ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0KLSAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50Owot
Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG1TZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQg
aW50IG1DdXJyZW50U2VyaWFsOwotCi0gICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5h
Z2VyOwotICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOwotCi0gICAgSW5mb0xvZyBtSW5mb0xvZzsK
LX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyOGU1MS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjQ4MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9n
cmFtLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wg
cHJvZ3JhbSBvYmplY3RzCi0vLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLQotI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJ
TUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KLW5hbWVzcGFjZSBnbAot
ewotc3RkOjpzdHJpbmcgc3RyKGludCBpKQotewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBz
bnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVm
ZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBfbmFt
ZShfbmFtZSksIG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwg
YXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxT
aXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRl
c107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0K
LVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwotfQotCi1ib29sIFVu
aWZvcm06OmlzQXJyYXkoKQotewotICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8i
KSA9PSAwOwotfQotCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
IAotICAgIDogbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBl
bGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKLXsKLX0KLQotUHJvZ3JhbUJpbmFyeTo6UHJv
Z3JhbUJpbmFyeSgpCi17Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwotCi0gICAgbVBpeGVs
RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1D
b25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotCi0g
ICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TZW1hbnRpY0lu
ZGV4W2luZGV4XSA9IC0xOwotICAgIH0KLQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1w
bGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgr
KykKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZWRQaXhlbFNh
bXBsZXJSYW5nZSA9IDA7Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBt
RHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1E
eEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAt
MTsKLSAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLX0KLQotUHJvZ3JhbUJpbmFy
eTo6flByb2dyYW1CaW5hcnkoKQotewotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsK
LSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmICht
VmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCi0gICAgewotICAgICAg
ICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFu
dFRhYmxlVlMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0g
ICAgfQotCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRl
bGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKLSAg
ICB9Ci19Ci0KLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxT
aGFkZXIoKQotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0KLQotR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKG5hbWUpCi0gICAg
ewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpbmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtp
bmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4
KGludCBhdHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAm
JiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJu
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLX0KLQotLy8gUmV0dXJucyBvbmUgbW9y
ZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KLUdMaW50IFByb2dyYW1CaW5h
cnk6OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4g
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAg
ICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotLy8gUmV0
dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9u
ZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhl
bCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCkKLXsKLSAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKLQotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAg
IEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxl
cnNQU1swXSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLQot
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobG9naWNhbFRleHR1cmVV
bml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0
TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBS
ZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5
cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0
aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVy
VGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkK
LXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgot
ICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2Yo
bVNhbXBsZXJzUFNbMF0pKTsKLSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlKTsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4
dHVyZVR5cGU7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsK
LSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBURVhUVVJFXzJEOwot
fQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcg
bmFtZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlw
IGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAot
ICAgIHNpemVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xv
c2UgPSBuYW1lLmZpbmRfbGFzdF9vZignXScpOwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5n
OjpucG9zICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vi
c2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5h
bWUuZXJhc2Uob3Blbik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1JbmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAw
OyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYg
KG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biAtMTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7
Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsK
LSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKLSAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0
WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0
YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRh
cmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0g
ICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCi0gICAgewot
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdl
dFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAg
dGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAg
ICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKLSAgICB7
Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAotICAgICAgICAgICAgICAg
diwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBp
bnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hl
aWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpCi17Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0
aCk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdo
dCk7Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNX
aWR0aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0
IHNpZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAo
aW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRh
cmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9
IDEyOwotICAgICAgICB2YWx1ZSArPSA5OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9
IEdMX0ZMT0FUX01BVDQpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAg
ICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9m
KEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
MjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAz
LAotICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBz
aXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0K
LSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxh
cmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVk
Qnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAg
ICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZv
cm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBV
bmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9u
ZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3Vu
dDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1l
bWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwot
Ci0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBs
YXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJl
ZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAg
ICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlm
b3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgewot
ICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01B
VDM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwz
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9y
bS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZv
cm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFs
Q291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6
ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAg
IHsKLSAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
Ly8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0
byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
cygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVu
aWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1Yikgewot
ICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50
Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9v
bGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRV
bmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6
ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1u
YnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFy
cmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVD
NDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgICBjYXNlIEdM
X0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkp
OyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVu
aWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZv
cm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lO
VF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUgSExT
TCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwot
SUQzRDEwQmxvYiAqUHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRvQmluYXJ5KEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRU
YWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3Mg
PSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkK
LSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVH
Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vs
c2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRp
ZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAg
ICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGgg
KyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3Jp
dGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0
LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xF
X0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsK
LSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2Ig
KmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJs
ZW4oaGxzbCksIGdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgZmxhZ3Ms
IDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSkKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNz
YWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6
ZWQobWVzc2FnZSk7Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgIFRSQUNF
KCJcbiVzIiwgbWVzc2FnZSk7Ci0KLSAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0KLSAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNf
Y2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRU
YWJsZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIHJldHVybiBiaW5hcnk7Ci19Ci0KLS8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKLWludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWlu
Z3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENv
bnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRN
YXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAg
ICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6
ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOwot
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICBpZiAobSA9PSAyIHx8IG0g
PT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyBy
IDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFp
bGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIHZh
cnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5n
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAt
IG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYm
IGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5j
b2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47
IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hd
ID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOwot
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2Nv
bHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNw
YWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
Y2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1
bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgaWYgKCFzdWNj
ZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBh
Y2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9m
IHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCBy
ID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFj
a2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1ty
XVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6Omxp
bmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6
OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0
ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKLXsKLSAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwg
dmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBm
cmFnVmFyKyspCi0gICAgewotICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKLSAgICAgICAgZnJh
Z1Zhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
dnR4VmFyID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRl
eFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0eFZh
ci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgLy8g
TWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcg
KnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGludCBy
ZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIp
OwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9u
cwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBz
bTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhW
YXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0g
ICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWlu
ZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1
dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0
Y2hlZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1
dCA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0g
aW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0
IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0
cHV0LT5jb2wgPSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJGcmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIs
IGlucHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8g
IkNPTE9SIiA6ICJURVhDT09SRCIpOwotCi0gICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lO
UFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGF0dHJpYnV0ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4
SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRF
WENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGlj
SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAg
IHZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xu
IjsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAg
ICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsy
XSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAi
ICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
ZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9
O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiVlNfT1VU
UFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0g
ICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1h
dHJpeAotICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0
dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRw
dXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGds
X1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgotICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9u
LnkgKyBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Q
b3NpdGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5t
VXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
b3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChp
bnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOwotICAgIH0KLQot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsK
LSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+
PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmct
PnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZh
cmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOwotICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1
c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2lu
Z1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lz
dGVyKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNo
KHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhM
U0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZl
cnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihp
KSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4ZWxI
TFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAg
IAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNp
emU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlh
YmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAg
ICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiAr
IHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRp
YyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAg
ICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
bTMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29y
ZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0Zyb250RmFjaW5nKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZh
Y2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAgcGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIK
LSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBn
bF9Db2xvclsxXSA6IENPTE9SO1xuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAg
ICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5Q
VVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAu
NTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBkeF9Db29yZCBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRl
ci54IGFuZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdD
b29yZC54ICogcmh3KSAqIGR4X0Nvb3JkLnggKyBkeF9Db29yZC56O1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55
ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRD
b29yZC54O1xuIjsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0g
MS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8g
KGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOwotICAgIH0K
LQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNp
emU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlh
YmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAg
ICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0g
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSAr
ICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChy
b3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtc
biI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29s
b3JbMF07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywg
Y29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQotewotICAgIGlm
ICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXIg
fHwgIXZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVy
LT5nZXRITFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+
Z2V0SExTTCgpOwotCi0gICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgcGl4ZWxITFNMLCB2
ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4
dCgpOwotICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1No
YWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIjsKLSAgICBjb25zdCBjaGFyICpwaXhl
bFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAi
cHNfMl8wIjsKLQotICAgIElEM0QxMEJsb2IgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFy
eShpbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRU
YWJsZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShp
bmZvTG9nLCBwaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQ
Uyk7Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAg
ICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERX
T1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxl
KTsKLSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hh
ZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1
dGFibGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0
KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJl
bGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4
QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlm
IChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0ZUJpbmRpbmdzLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlu
a1VuaWZvcm1zKGluZm9Mb2csIEdMX0ZSQUdNRU5UX1NIQURFUiwgbUNvbnN0YW50VGFibGVQUykp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9WRVJURVhf
U0hBREVSLCBtQ29uc3RhbnRUYWJsZVZTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoZXNlIHVu
aWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQg
ZHhfCi0gICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVj
ZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KLSAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOwotICAgICAgICAgICAg
bUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKLSAgICAg
ICAgICAgIG1EeENvb3JkTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7
Ci0gICAgICAgICAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0hhbGZQaXhlbFNpemUiKTsKLSAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Zyb250Q0NXIik7Ci0gICAgICAgICAgICBtRHhQb2lu
dHNPckxpbmVzTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMi
KTsKLQotICAgICAgICAgICAgY29udGV4dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOwotCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMg
YW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW1C
aW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJp
bmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKLXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExv
Y2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGlu
ZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9
IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50
IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1
dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xC
aW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0
cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9j
YXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2Vk
QXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAo
cm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9j
YXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9j
YXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0
ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJp
YnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3Mu
Z2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVC
aXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAg
ICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4g
TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5u
YW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwg
dG8gbGluawotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2
YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3Ig
KGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyApCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFu
dGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAg
IGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBy
b3dzOyByKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0
ZUluZGV4KytdID0gaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9n
LCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0g
ICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Ci0KLSAg
ICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBj
b25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAg
ewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0
Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0KLSAgICAgICAgRDNEWENPTlNUQU5UX0RFU0Mg
Y29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsK
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2Mo
Y29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZp
bmVVbmlmb3JtKGluZm9Mb2csIHNoYWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3Jp
cHRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24g
b2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1
bmlmb3JtcwotLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFk
eSBkZWZpbmVkKQotYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmlu
Zm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcg
bmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RY
UlNfU0FNUExFUikKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0
YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICAgICAgICBE
M0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFt
ZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotCi0gICAgICAgICAgICBpZiAocHND
b25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQp
ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
bVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0
aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVf
MkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Up
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUGl4ZWwgc2hhZGVyIHNh
bXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2
c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0
Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1w
bGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVk
cyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsK
LSAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRp
b24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRD
b25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQz
RFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJ
TlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZm
aWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmcgc3RydWN0SW5kZXggPSAoY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8g
KCJbIiArIHN0cihhcnJheUluZGV4KSArICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWRlZmluZVVuaWZvcm0oaW5mb0xvZywgc2hhZGVyLCBmaWVsZEhhbmRsZSwgZmllbGRE
ZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSArIHN0cnVjdEluZGV4
ICsgIi4iKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgY2FzZSBEM0RYUENfU0NBTEFSOgotICAgICAgY2FzZSBEM0RYUENfVkVDVE9SOgotICAgICAg
Y2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6Ci0gICAgICBjYXNlIEQzRFhQQ19PQkpFQ1Q6Ci0g
ICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3RhbnREZXNjcmlwdGlvbiwg
bmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFt
ZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2Ny
aXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBH
TGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBH
TGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVy
ID09IEdMX0ZSQUdNRU5UX1NIQURFUikgdW5pZm9ybS0+cHMuc2V0KGNvbnN0YW50RGVzY3JpcHRp
b24pOwotICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikgICB1bmlmb3JtLT52cy5z
ZXQoY29uc3RhbnREZXNjcmlwdGlvbik7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB1bmlmb3JtLT50eXBlID09IHR5cGU7Ci0gICAgfQotCi0gICAgbVVu
aWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4
ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRl
eC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9ybSAqUHJvZ3JhbUJpbmFyeTo6Y3Jl
YXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwg
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9u
LlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
RDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VC
RToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9T
QU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Ci0gICAgICAgICAgICBzd2l0
Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMz
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RY
UFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVD
NCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNv
bnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpICAv
LyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlw
dGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
LSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1z
dGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYm
IG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAi
XyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpzdHJp
bmcgUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9u
YW1lKQotewotICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBfbmFtZTsKLSAgICAKLSAgICAvLyBSZW1v
dmUgYW55IHN0cnVjdHVyZSBmaWVsZCBkZWNvcmF0aW9uCi0gICAgc2l6ZV90IHBvcyA9IDA7Ci0g
ICAgd2hpbGUgKChwb3MgPSBuYW1lLmZpbmQoIi5fIiwgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5w
b3MpCi0gICAgewotICAgICAgICBuYW1lLnJlcGxhY2UocG9zLCAyLCAiLiIpOwotICAgIH0KLQot
ICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBkZWNvcmF0aW9uCi0gICAgaWYgKG5hbWVbMF0gPT0g
J18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDApCi0gICAgewotICAgICAgICBy
ZXR1cm4gbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lOwotfQot
Ci12b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAg
ICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBi
b29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4
ID49IDApCi0gICAgewotICAgICAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRoKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAodltpICogd2lkdGggKyBqXSA9
PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9y
W2kgKiA0ICsgal0gPSAwLjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0g
MCB8fCB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIGlu
dCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRV
bmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwg
c3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9
IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZb
aV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVs
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmlj
ZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4LCBi
b29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMu
ZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0g
ICAgfQotICAgICAgICAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDAp
Ci0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0
VW5pZm9ybS0+dnMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNl
LT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwg
diwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHYs
IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NF
UlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2
ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChm
bG9hdCl2W2ldLCAwLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5zYW1w
bGVySW5kZXggPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0
SW5kZXggPSB0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNb
c2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+
cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZz
LnNhbXBsZXJJbmRleCA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Zmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRleDsKLQotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQot
ICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJ
bmRleCA+PSAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTJpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsK
LSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RY
VkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhW
RUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7Ci0KLSAgICAgICAgdiArPSAy
OwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVj
dG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5
VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRT
KTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3Rv
cltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0s
IDApOwotCi0gICAgICAgIHYgKz0gMzsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFy
Z2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZs
b2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlszXSk7Ci0KLSAgICAgICAgdiArPSA0Owot
ICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9y
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5p
Zm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RY
VkVDVE9SNCAqdmVjdG9yKQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4
ID49IDApOwotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52
cy5mbG9hdDRJbmRleCA+PSAwKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0
b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotYm9vbCBQ
cm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFsaWRh
dGVkOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xl
bnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0
dHJpYnV0ZXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNp
Z25lZCBpbnQgYXR0cmlidXRlOwotICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGlmIChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUg
PT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYWN0aXZlQXR0cmlidXRlKys7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQot
ICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVdLm5hbWUuY19zdHIoKTsKLQotICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVm
c2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAgICBpZiAo
bGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAn
dHlwZScgaW5zdGFuY2UKLQotICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVd
LnR5cGU7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50
KCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgr
KykKLSAgICB7Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5Ojpn
ZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQotewotICAgIGludCBtYXhMZW5ndGggPSAwOwot
Ci0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbUxp
bmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAg
IC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVV
bmlmb3JtID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKLSAgICBmb3IgKHVuaWZvcm0g
PSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQotICAgIHsKLSAgICAg
ICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKLSAgICB9Ci0KLSAgICBB
U1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21h
bGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0KLSAgICBpZiAoYnVmc2l6ZSA+IDAp
Ci0gICAgewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0t
Pm5hbWU7Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVti
dWZzaXplIC0gMV0gPSAnXDAnOwotCi0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOwotCi0gICAgKnR5cGUgPSBt
VW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFj
dGl2ZVVuaWZvcm1Db3VudCgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIHVuc2lnbmVk
IGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
bnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1J
bmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1l
LmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFBy
b2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQotewotICAgIGludCBtYXhM
ZW5ndGggPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5k
ZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1V
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1J
bmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxl
bmd0aCgpICsgMSk7Ci0gICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlz
QXJyYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8v
IENvdW50aW5nIGluICJbMF0iLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4TGVuZ3Ro
ID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1heExlbmd0aDsKLX0KLQotdm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZv
TG9nICZpbmZvTG9nKQotewotICAgIGFwcGx5VW5pZm9ybXMoKTsKLSAgICBpZiAoIXZhbGlkYXRl
U2FtcGxlcnMoJmluZm9Mb2cpKQotICAgIHsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZv
TG9nKQotewotICAgIC8vIGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBh
cmUgb2YgZGlmZmVyZW50IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKLSAgICAvLyB0ZXh0
dXJlIGltYWdlIHVuaXQsIGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFs
aWRhdGVQcm9ncmFtIHdpbGwgZmFpbCwgYW5kCi0gICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0Vs
ZW1lbnRzIHdpbGwgaXNzdWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0
KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7Ci0gICAgVGV4dHVyZVR5
cGUgdGV4dHVyZVVuaXRUeXBlW01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTX1ZURjsgKytpKQotICAgIHsKLSAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ld
ID0gVEVYVFVSRV9VTktOT1dOOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1T
YW1wbGVyc1BTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50
IHVuaXQgPSBtU2FtcGxlcnNQU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9y
bSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVu
aXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9
IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpbmZvTG9nKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVz
IHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxl
cnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7
ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNh
bFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChpbmZvTG9nKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5m
b0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0g
IT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICht
U2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJT
YW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGlt
YWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0xpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6Omdl
dER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247
Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6
OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4SGFs
ZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250
Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOwot
fQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5YzVlMi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQ
cm9ncmFtLmg6IERlZmluZXMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHBy
b2dyYW0gb2JqZWN0cwotLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1BST0dS
QU1fQklOQVJZX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwotCi0jaW5j
bHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgotI2luY2x1ZGUgPHN0cmlu
Zz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBG
cmFnbWVudFNoYWRlcjsKLWNsYXNzIFZlcnRleFNoYWRlcjsKLQotLy8gSGVscGVyIHN0cnVjdCBy
ZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0g
ICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXko
KTsKLQotICAgIGNvbnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1l
OyAgIC8vIERlY29yYXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8g
VW5kZWNvcmF0ZWQgbmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7Ci0KLSAg
ICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Ci0KLSAgICBzdHJ1Y3QgUmVn
aXN0ZXJJbmZvCi0gICAgewotICAgICAgICBSZWdpc3RlckluZm8oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmbG9hdDRJbmRleCA9IC0xOwotICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7
Ci0gICAgICAgICAgICBib29sSW5kZXggPSAtMTsKLSAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQg
PSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RF
U0MgJmNvbnN0YW50RGVzY3JpcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaChj
b25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEQzRFhSU19CT09MOiAgICBib29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9B
VDQ6ICBmbG9hdDRJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzRFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBj
b25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7IGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGlu
dCljb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQpOwotICAgICAgICAgICAgcmVnaXN0
ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGludCBmbG9hdDRJbmRleDsKLSAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKLSAg
ICAgICAgaW50IGJvb2xJbmRleDsKLQotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9
OwotCi0gICAgUmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKLX07Ci0KLS8v
IFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3Jt
IGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCi17Ci0gICAgVW5pZm9y
bUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQs
IHVuc2lnbmVkIGludCBpbmRleCk7Ci0KLSAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIHVuc2ln
bmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRleDsKLX07Ci0KLS8vIFRoaXMg
aXMgdGhlIHJlc3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQg
d291bGQgYmUgcGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCi1jbGFzcyBQcm9ncmFtQmluYXJ5Ci17
Ci0gIHB1YmxpYzoKLSAgICBQcm9ncmFtQmluYXJ5KCk7Ci0gICAgflByb2dyYW1CaW5hcnkoKTsK
LQotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGly
ZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKLQotICAgIEdMdWludCBnZXRB
dHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJ
bmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmco
U2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVy
ZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5
cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFt
ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9y
bTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0g
ICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVu
aWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZv
cm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAg
ICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJh
bXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZT
aXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xp
bnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxT
aXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBj
b25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0g
ICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7Ci0K
LSAgICBib29sIGxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3Mg
JmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNp
emVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKLQotICAgIHZv
aWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0g
ICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICBHTGludCBnZXRBY3RpdmVB
dHRyaWJ1dGVNYXhMZW5ndGgoKTsKLQotICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xl
bnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwotICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3Vu
dCgpOwotICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKLQotICAgIHZvaWQg
dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZyk7Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKElu
Zm9Mb2cgKmluZm9Mb2cpOwotICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKLQotICAgIHN0
YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFt
ZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1
bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBs
ZWFkaW5nIHVuZGVyc2NvcmUKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihQcm9ncmFtQmluYXJ5KTsKLQotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJ
RDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKLQotICAgIGludCBwYWNrVmFyeWlu
Z3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cg
JmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNM
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hh
ZGVyKTsKLQotICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
QXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLQotICAgIGJvb2wgbGlu
a1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRU
YWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmlu
Zm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcg
bmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qg
RDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9E
RVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAg
Ym9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9h
dCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
LSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZv
aWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xi
b29sZWFuICp2KTsKLQotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7Ci0KLSAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGR1cmluZyBsaW5raW5nLgotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBBdHRy
aWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2Vt
YW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAg
ICB7Ci0gICAgICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVu
aXQ7Ci0gICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1w
bGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1T
YW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWlu
dCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsK
LSAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5p
Zm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5k
ZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVw
dGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhh
bGZQaXhlbFNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAg
IEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbVZhbGlkYXRlZDsK
LX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTBlZGRhNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEy
OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnkuY3BwOiBJbXBsZW1lbnRzIHRoZSBn
bDo6UXVlcnkgY2xhc3MKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLVF1ZXJ5OjpRdWVyeShH
THVpbnQgaWQsIEdMZW51bSB0eXBlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQoteyAKLSAgICBtUXVl
cnkgPSBOVUxMOwotICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLSAgICBtUmVzdWx0ID0gR0xfRkFM
U0U7Ci0gICAgbVR5cGUgPSB0eXBlOwotfQotCi1RdWVyeTo6flF1ZXJ5KCkKLXsKLSAgICBpZiAo
bVF1ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAg
ICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0KLXZvaWQgUXVlcnk6OmJlZ2luKCkKLXsKLSAg
ICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBpZiAoRkFJTEVEKGdldERldmlj
ZSgpLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmbVF1ZXJ5KSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NV
RV9CRUdJTik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLX0KLQotdm9pZCBRdWVy
eTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOwotICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgCi0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1SZXN1bHQgPSBH
TF9GQUxTRTsKLX0KLQotR0x1aW50IFF1ZXJ5OjpnZXRSZXN1bHQoKQotewotICAgIGlmIChtUXVl
cnkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghdGVzdFF1ZXJ5KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFNsZWVwKDApOwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVj
ayBmb3IgZGV2aWNlIGxvc3MKLSAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJl
dHVybiBTX0ZBTFNFIGV2ZW4gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAvLyBp
bnN0ZWFkIG9mIEQzREVSUl9ERVZJQ0VMT1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAgICAg
IGlmIChnbDo6Z2V0RGlzcGxheSgpLT50ZXN0RGV2aWNlTG9zdCgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdsOjpnZXREaXNwbGF5KCktPm5vdGlmeURldmljZUxvc3QoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gKEdMdWludCltUmVzdWx0Owot
fQotCi1HTGJvb2xlYW4gUXVlcnk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKLXsKLSAgICBpZiAobVF1
ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICB0ZXN0UXVlcnkoKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLUdMZW51bSBRdWVyeTo6Z2V0VHlwZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1UeXBlOwotfQotCi1HTGJvb2xlYW4gUXVlcnk6OnRlc3RRdWVyeSgpCi17
Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKLSAgICB7Ci0g
ICAgICAgIERXT1JEIG51bVBpeGVscyA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCBocmVzID0gbVF1
ZXJ5LT5HZXREYXRhKCZudW1QaXhlbHMsIHNpemVvZihEV09SRCksIEQzREdFVERBVEFfRkxVU0gp
OwotICAgICAgICBpZiAoaHJlcyA9PSBTX09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3Rh
dHVzID0gR0xfVFJVRTsKLQotICAgICAgICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAg
ICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFM
U0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChjaGVja0RldmljZUxvc3QoaHJlcykpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1TdGF0dXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdM
X1RSVUU7IC8vIHByZXZlbnQgYmxvY2tpbmcgd2hlbiBxdWVyeSBpcyBudWxsCi19Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDc5MzU3YTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFF1ZXJ5Lmg6IERlZmluZXMgdGhlIGdsOjpRdWVyeSBj
bGFzcwotCi0jaWZuZGVmIExJQkdMRVNWMl9RVUVSWV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUVVF
UllfSF8KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5j
bHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRl
ICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIFF1
ZXJ5IDogcHVibGljIFJlZkNvdW50T2JqZWN0Ci17Ci0gIHB1YmxpYzoKLSAgICBRdWVyeShHTHVp
bnQgaWQsIEdMZW51bSB0eXBlKTsKLSAgICB2aXJ0dWFsIH5RdWVyeSgpOwotCi0gICAgdm9pZCBi
ZWdpbigpOwotICAgIHZvaWQgZW5kKCk7Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdM
Ym9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgpOwotCi0gICAgR0xlbnVtIGdldFR5cGUoKSBjb25z
dDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeSk7Ci0K
LSAgICBHTGJvb2xlYW4gdGVzdFF1ZXJ5KCk7Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIG1RdWVy
eTsKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xib29sZWFuIG1TdGF0dXM7Ci0gICAgR0xpbnQg
bVJlc3VsdDsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1FVRVJZX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUkVBRE1FCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyN2QzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlz
IGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qgc3luY2VkIGZyb20gdGhlIEFOR0xFIHByb2pl
Y3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJLaXQgbmVlZHMgdGhlbSB5ZXQuClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0YjkxMWU4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJidWZmZXIuY3BwOiB0aGUgZ2w6OlJlbmRl
cmJ1ZmZlciBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8gQ29sb3JidWZmZXIsIERl
cHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgot
Ly8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFj
ZSBnbAotewotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Om1DdXJyZW50U2VyaWFs
ID0gMTsKLQotUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpSZW5kZXJidWZmZXJJbnRlcmZhY2UoKQot
ewotfQotCi0vLyBUaGUgZGVmYXVsdCBjYXNlIGZvciBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIFJl
bmRlcmJ1ZmZlckludGVyZmFjZSBpcyBub3QgdG8KLS8vIG5lZWQgdG8gZG8gYW55dGhpbmcgdXBv
biB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRoZSBwYXJlbnQgUmVuZGVyYnVmZmVyIGluY3JlbWVu
dGluZwotLy8gb3IgZGVjcmVtZW50aW5nLiAKLXZvaWQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjph
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotfQotCi12b2lkIFJlbmRl
cmJ1ZmZlckludGVyZmFjZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
Ci17Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25z
dAotewotICAgIHJldHVybiBkeDJlczo6R2V0UmVkU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0K
LUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGR4MmVzOjpHZXRHcmVlblNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVp
bnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGR4MmVzOjpHZXRCbHVlU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5k
ZXJidWZmZXJJbnRlcmZhY2U6OmdldEFscGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4
MmVzOjpHZXRBbHBoYVNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlOjpnZXREZXB0aFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6
R2V0RGVwdGhTaXplKGdldEQzREZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0
U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi0vLy8vLyBSZW5kZXJidWZmZXJUZXh0
dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KLQotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6
IG1UYXJnZXQodGFyZ2V0KQotewotICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwotfQotCi1S
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQotewotICAgIG1U
ZXh0dXJlMkQuc2V0KE5VTEwpOwotfQotCi0vLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRo
ZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCi0vLyBSZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSBy
ZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94
eSk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJv
eHkpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKLX0KLQotLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRE
ZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwo
bVRhcmdldCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOwotfQotCi1HTHNp
emVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0KDApOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJl
MkQtPmdldEludGVybmFsRm9ybWF0KDApOwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5n
ZXREM0RGb3JtYXQoMCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRT
YW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1
cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwotfQotCi0vLy8vLyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLwotCi1SZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCi17Ci0gICAgbVRl
eHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsKLX0KLQotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFw
LnNldChOVUxMKTsKLX0KLQotLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24g
cmVmZXJlbmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQotLy8gUmVuZGVyYnVmZmVycyBhY3Rp
bmcgYXMgcHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNl
Lgotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZUN1YmVNYXAtPmFkZFByb3h5UmVmKHBy
b3h5KTsKLX0KLQotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFwLT5yZWxl
YXNlUHJveHkocHJveHkpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2Uu
Ci0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3Qz
RFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KCkK
LXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7
Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBO
VUxMOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRIZWlnaHQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQot
R0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotRDNERk9STUFUIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBt
VGV4dHVyZUN1YmVNYXAtPmdldEQzREZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDApOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1w
bGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKLX0KLQotLy8vLy8v
IFJlbmRlcmJ1ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KLQotUmVuZGVyYnVmZmVyOjpSZW5k
ZXJidWZmZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNlKSA6IFJl
ZkNvdW50T2JqZWN0KGlkKQotewotICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsKLSAgICBt
SW5zdGFuY2UgPSBpbnN0YW5jZTsKLX0KLQotUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkK
LXsKLSAgICBkZWxldGUgbUluc3RhbmNlOwotfQotCi0vLyBUaGUgUmVuZGVyYnVmZmVySW50ZXJm
YWNlIGNvbnRhaW5lZCBpbiB0aGlzIFJlbmRlcmJ1ZmZlciBtYXkgbmVlZCB0byBtYWludGFpbgot
Ly8gaXRzIG93biByZWZlcmVuY2UgY291bnQsIHNvIHdlIHBhc3MgaXQgb24gaGVyZS4KLXZvaWQg
UmVuZGVyYnVmZmVyOjphZGRSZWYoKSBjb25zdAotewotICAgIG1JbnN0YW5jZS0+YWRkUHJveHlS
ZWYodGhpcyk7Ci0KLSAgICBSZWZDb3VudE9iamVjdDo6YWRkUmVmKCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyYnVmZmVyOjpyZWxlYXNlKCkgY29uc3QKLXsKLSAgICBtSW5zdGFuY2UtPnJlbGVhc2VQcm94
eSh0aGlzKTsKLQotICAgIFJlZkNvdW50T2JqZWN0OjpyZWxlYXNlKCk7Ci19Ci0KLS8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsK
LX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVy
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERl
cHRoU3RlbmNpbCgpOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25z
dAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7Ci19Ci0KLUdMc2l6ZWkgUmVu
ZGVyYnVmZmVyOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdl
dEhlaWdodCgpOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRJbnRlcm5hbEZvcm1hdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLX0K
LQotRDNERk9STUFUIFJlbmRlcmJ1ZmZlcjo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXREM0RGb3JtYXQoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
cjo6Z2V0UmVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVkU2l6
ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRHcmVlblNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEdyZWVuU2l6ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVyOjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
Qmx1ZVNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRBbHBoYVNpemUoKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXREZXB0aFNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U3RlbmNp
bFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFN0ZW5jaWxTaXplKCk7
Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXRTYW1wbGVzKCk7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJi
dWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2Vy
aWFsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVmZmVyOjpzZXRTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgKm5ld1N0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKG5ld1N0b3JhZ2UgIT0gTlVMTCk7Ci0K
LSAgICBkZWxldGUgbUluc3RhbmNlOwotICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7Ci19Ci0K
LVJlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJpYWwoaXNz
dWVTZXJpYWwoKSkKLXsKLSAgICBtV2lkdGggPSAwOwotICAgIG1IZWlnaHQgPSAwOwotICAgIG1J
bnRlcm5hbEZvcm1hdCA9IEdMX1JHQkE0OwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfQThSOEc4
Qjg7Ci0gICAgbVNhbXBsZXMgPSAwOwotfQotCi1SZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVy
YnVmZmVyU3RvcmFnZSgpCi17Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCi17Ci0g
ICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
LS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNE
U3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAg
cmV0dXJuIE5VTEw7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgo
KSBjb25zdAotewotICAgIHJldHVybiBtV2lkdGg7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0KLQot
R0xlbnVtIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUludGVybmFsRm9ybWF0OwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzREZvcm1hdDsK
LX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVNhbXBsZXM7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9y
YWdlOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNp
Z25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVy
biBtQ3VycmVudFNlcmlhbCsrOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNzdWVDdWJlU2VyaWFscygpCi17Ci0gICAgdW5zaWduZWQgaW50IGZpcnN0U2VyaWFsID0g
bUN1cnJlbnRTZXJpYWw7Ci0gICAgbUN1cnJlbnRTZXJpYWwgKz0gNjsKLSAgICByZXR1cm4gZmly
c3RTZXJpYWw7Ci19Ci0KLUNvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0KSA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotewotICAgIGlm
IChyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQtPkFkZFJlZigpOwot
Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgcmVuZGVyVGFy
Z2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgbVdpZHRoID0gZGVzY3JpcHRp
b24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlwdGlvbi5IZWlnaHQ7Ci0gICAgICAg
IG1JbnRlcm5hbEZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChkZXNjcmlw
dGlvbi5Gb3JtYXQpOwotICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0Owot
ICAgICAgICBtU2FtcGxlcyA9IGR4MmVzOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShk
ZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOwotICAgIH0KLX0KLQotQ29sb3JidWZmZXI6OkNv
bG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBz
YW1wbGVzKSA6IG1SZW5kZXJUYXJnZXQoTlVMTCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBl
czJkeDo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBzdXBwb3J0
ZWRTYW1wbGVzID0gZ2V0Q29udGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1
ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOwotCi0gICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPT0gLTEp
Ci0gICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwg
aGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxl
cyhzdXBwb3J0ZWRTYW1wbGVzKSwgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKLQot
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSB3aWR0aDsKLSAg
ICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKLSAgICBt
RDNERm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2Ft
cGxlczsKLX0KLQotQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCi17Ci0gICAgaWYgKG1SZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAg
fQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpDb2xv
cmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVy
biBtUmVuZGVyVGFyZ2V0OwotfQotCi1EZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1
ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKSA6IG1EZXB0aFN0ZW5jaWwoZGVw
dGhTdGVuY2lsKQotewotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0
aFN0ZW5jaWwtPkFkZFJlZigpOwotCi0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlv
bjsKLSAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAg
ICAgbVdpZHRoID0gZGVzY3JpcHRpb24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlw
dGlvbi5IZWlnaHQ7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0RGVw
dGhTdGVuY2lsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7Ci0gICAgICAgIG1TYW1wbGVzID0g
ZHgyZXM6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2Ft
cGxlVHlwZSk7IAotICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwotICAg
IH0KLX0KLQotRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICAK
LSAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IGdldENvbnRleHQoKS0+Z2V0TmVhcmVzdFN1cHBv
cnRlZFNhbXBsZXMoRDNERk1UX0QyNFM4LCBzYW1wbGVzKTsKLQotICAgIGlmIChzdXBwb3J0ZWRT
YW1wbGVzID09IC0xKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4g
MCkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0
ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIEQzREZNVF9EMjRTOCwgZXMyZHg6OkdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1E
ZXB0aFN0ZW5jaWwsIDApOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAg
IG1XaWR0aCA9IHdpZHRoOwotICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9y
bWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgbUQzREZvcm1hdCA9IEQzREZNVF9E
MjRTODsKLSAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLURlcHRoU3RlbmNp
bGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwp
Ci0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0v
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aFN0ZW5jaWxi
dWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAg
ewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bURlcHRoU3RlbmNpbDsKLX0KLQotRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKElEaXJlY3QzRFN1
cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCkK
LXsKLSAgICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0
ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0
ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhl
IHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZQotICAgIH0KLX0KLQotRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhl
aWdodCwgR0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0
LCBzYW1wbGVzKQotewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUlu
dGVybmFsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1
ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVj
dCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZQotICAgIH0KLX0KLQotRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCi17
Ci19Ci0KLVN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCkgOiBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQotewotICAgIGlm
IChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9TVEVO
Q0lMX0lOREVYODsgICAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJp
ZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVm
ZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCi0gICAgfQotfQotCi1TdGVu
Y2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBz
YW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQotewot
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0g
R0xfU1RFTkNJTF9JTkRFWDg7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFy
ZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJl
bmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotICAgIH0KLX0K
LQotU3RlbmNpbGJ1ZmZlcjo6flN0ZW5jaWxidWZmZXIoKQotewotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkNWRkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlcmJ1ZmZl
ci5oOiBEZWZpbmVzIHRoZSB3cmFwcGVyIGNsYXNzIGdsOjpSZW5kZXJidWZmZXIsIGFzIHdlbGwg
YXMgdGhlCi0vLyBjbGFzcyBoaWVyYXJjaHkgdXNlZCB0byBzdG9yZSBpdHMgY29udGVudHM6IFJl
bmRlcmJ1ZmZlclN0b3JhZ2UsIENvbG9yYnVmZmVyLAotLy8gRGVwdGhTdGVuY2lsYnVmZmVyLCBE
ZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIK
LS8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkJVRkZF
Ul9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJ
Q0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0
LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgVGV4dHVyZTJEOwotY2xhc3MgVGV4dHVyZUN1
YmVNYXA7Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBDb2xvcmJ1ZmZlcjsKLWNsYXNzIERl
cHRoU3RlbmNpbGJ1ZmZlcjsKLQotY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCi17Ci0gIHB1
YmxpYzoKLSAgICBSZW5kZXJidWZmZXJJbnRlcmZhY2UoKTsKLQotICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlckludGVyZmFjZSgpIHt9OwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXRSZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0RGVwdGhTdGVuY2lsKCkgPSAwOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgPSAwOwotCi0gICAgR0x1aW50IGdldFJlZFNpemUo
KSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdl
dEJsdWVTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAg
IEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0ID0g
MDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZm
ZXJJbnRlcmZhY2UpOwotfTsKLQotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGlj
IFJlbmRlcmJ1ZmZlckludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4
dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFs
IH5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0
KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgdmly
dHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhl
aWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7Ci0KLSAgICBCaW5kaW5nUG9pbnRlciA8
VGV4dHVyZTJEPiBtVGV4dHVyZTJEOwotICAgIEdMZW51bSBtVGFyZ2V0OwotfTsKLQotY2xhc3Mg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNl
Ci17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3Vi
ZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOwotCi0gICAgQmluZGluZ1BvaW50ZXIgPFRl
eHR1cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXA7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7Ci19Owot
Ci0vLyBBIGNsYXNzIGRlcml2ZWQgZnJvbSBSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNyZWF0ZWQg
d2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCi0vLyBpcyBjYWxsZWQuIFRoZSBzcGVjaWZp
YyBjb25jcmV0ZSB0eXBlIGRlcGVuZHMgb24gd2hldGhlciB0aGUgaW50ZXJuYWwgZm9ybWF0IGlz
Ci0vLyBjb2xvdXIgZGVwdGgsIHN0ZW5jaWwgb3IgcGFja2VkIGRlcHRoL3N0ZW5jaWwuCi1jbGFz
cyBSZW5kZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQotewot
ICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyU3RvcmFnZSgpOwotCi0gICAgdmlydHVhbCB+UmVu
ZGVyYnVmZmVyU3RvcmFnZSgpID0gMDsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERl
cHRoU3RlbmNpbCgpOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVt
IGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gICAgc3Rh
dGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
aXNzdWVDdWJlU2VyaWFscygpOwotCi0gIHByb3RlY3RlZDoKLSAgICBHTHNpemVpIG1XaWR0aDsK
LSAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xlbnVtIG1JbnRlcm5hbEZvcm1hdDsKLSAgICBE
M0RGT1JNQVQgbUQzREZvcm1hdDsKLSAgICBHTHNpemVpIG1TYW1wbGVzOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOwotCi0g
ICAgY29uc3QgdW5zaWduZWQgaW50IG1TZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50
IG1DdXJyZW50U2VyaWFsOwotfTsKLQotLy8gUmVuZGVyYnVmZmVyIGltcGxlbWVudHMgdGhlIEdM
IHJlbmRlcmJ1ZmZlciBvYmplY3QuCi0vLyBJdCdzIG9ubHkgYSBwcm94eSBmb3IgYSBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UgaW5zdGFuY2U7IHRoZSBpbnRlcm5hbCBvYmplY3QKLS8vIGNhbiBjaGFu
Z2Ugd2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNhbGxlZC4KLWNsYXNzIFJlbmRl
cmJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgUmVuZGVy
YnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICpzdG9yYWdlKTsKLQotICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlcigpOwotCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGZyb20g
UmVmQ291bnRPYmplY3QgYXJlIG92ZXJsb2FkZWQgaGVyZSBiZWNhdXNlCi0gICAgLy8gVGV4dHVy
ZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gY291bnQgb2YgcmVmZXJlbmNlcyB0byB0aGVt
IHZpYQotICAgIC8vIFJlbmRlcmJ1ZmZlcnMvUmVuZGVyYnVmZmVyVGV4dHVyZXMuIFRoZXNlIGZ1
bmN0aW9ucyBpbnZva2UgdGhvc2UKLSAgICAvLyByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rpb25z
IG9uIHRoZSBSZW5kZXJidWZmZXJJbnRlcmZhY2UuCi0gICAgdm9pZCBhZGRSZWYoKSBjb25zdDsK
LSAgICB2b2lkIHJlbGVhc2UoKSBjb25zdDsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7
Ci0KLSAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQo
KSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICBEM0RG
T1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25z
dDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVT
aXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWlu
dCBnZXREZXB0aFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25z
dDsKLSAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBn
ZXRTZXJpYWwoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9y
YWdlICpuZXdTdG9yYWdlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihSZW5kZXJidWZmZXIpOwotCi0gICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICptSW5zdGFu
Y2U7Ci19OwotCi1jbGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdl
Ci17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0KTsKLSAgICBDb2xvcmJ1ZmZlcihHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKLQotICAgIHZpcnR1YWwg
fkNvbG9yYnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihD
b2xvcmJ1ZmZlcik7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKLX07
Ci0KLWNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdl
Ci17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEZXB0aFN0ZW5jaWxidWZmZXIoSURpcmVjdDNE
U3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7Ci0gICAgRGVwdGhTdGVuY2lsYnVmZmVyKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgfkRlcHRoU3Rl
bmNpbGJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhT
dGVuY2lsKCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhT
dGVuY2lsOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRo
U3RlbmNpbGJ1ZmZlcik7Ci19OwotCi1jbGFzcyBEZXB0aGJ1ZmZlciA6IHB1YmxpYyBEZXB0aFN0
ZW5jaWxidWZmZXIKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IERlcHRoYnVmZmVyKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwotICAgIERlcHRoYnVmZmVyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+RGVw
dGhidWZmZXIoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihE
ZXB0aGJ1ZmZlcik7Ci19OwotCi1jbGFzcyBTdGVuY2lsYnVmZmVyIDogcHVibGljIERlcHRoU3Rl
bmNpbGJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RlbmNpbGJ1ZmZlcihJRGly
ZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKLSAgICBTdGVuY2lsYnVmZmVyKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+
U3RlbmNpbGJ1ZmZlcigpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFN0ZW5jaWxidWZmZXIpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFTkRF
UkJVRkZFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZTI2MzUyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZXNvdXJjZU1hbmFnZXIuY3BwOiBJbXBsZW1lbnRz
IHRoZSBnbDo6UmVzb3VyY2VNYW5hZ2VyIGNsYXNzLCB3aGljaCB0cmFja3MgYW5kIAotLy8gcmV0
cmlldmVzIG9iamVjdHMgd2hpY2ggbWF5IGJlIHNoYXJlZCBieSBtdWx0aXBsZSBDb250ZXh0cy4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVy
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1S
ZXNvdXJjZU1hbmFnZXI6OlJlc291cmNlTWFuYWdlcigpCi17Ci0gICAgbVJlZkNvdW50ID0gMTsK
LX0KLQotUmVzb3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKCkKLXsKLSAgICB3aGlsZSAo
IW1CdWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVy
TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVt
cHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCkt
PmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKLSAgICB7
Ci0gICAgICAgIGRlbGV0ZVNoYWRlcihtU2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIW1SZW5kZXJidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAg
IGRlbGV0ZVJlbmRlcmJ1ZmZlcihtUmVuZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIW1UZXh0dXJlTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBk
ZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci19Ci0KLXZv
aWQgUmVzb3VyY2VNYW5hZ2VyOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi12
b2lkIFJlc291cmNlTWFuYWdlcjo6cmVsZWFzZSgpCi17Ci0gICAgaWYgKC0tbVJlZkNvdW50ID09
IDApCi0gICAgewotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMg
YW4gdW51c2VkIGJ1ZmZlciBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVCdWZm
ZXIoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9j
YXRlKCk7Ci0KLSAgICBtQnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhh
bmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgc2hhZGVyL3Byb2dyYW0gbmFtZQotR0x1
aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewotICAgIEdM
dWludCBoYW5kbGUgPSBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwot
Ci0gICAgaWYgKHR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIG1TaGFk
ZXJNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBt
U2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAg
ICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQot
Ly8gUmV0dXJucyBhbiB1bnVzZWQgcHJvZ3JhbS9zaGFkZXIgbmFtZQotR0x1aW50IFJlc291cmNl
TWFuYWdlcjo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1Qcm9ncmFt
U2hhZGVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtUHJvZ3JhbU1hcFtoYW5k
bGVdID0gbmV3IFByb2dyYW0odGhpcywgaGFuZGxlKTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19
Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHRleHR1cmUgbmFtZQotR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1UZXh0dXJlSGFu
ZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVM
TDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRl
cmJ1ZmZlciBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVSZW5kZXJidWZmZXIo
KQotewotICAgIEdMdWludCBoYW5kbGUgPSBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFs
bG9jYXRlKCk7Ci0KLSAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAg
cmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZlcihH
THVpbnQgYnVmZmVyKQotewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyT2JqZWN0ID0g
bUJ1ZmZlck1hcC5maW5kKGJ1ZmZlcik7Ci0KLSAgICBpZiAoYnVmZmVyT2JqZWN0ICE9IG1CdWZm
ZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLnJlbGVh
c2UoYnVmZmVyT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlmIChidWZmZXJPYmplY3QtPnNlY29u
ZCkgYnVmZmVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlck1hcC5l
cmFzZShidWZmZXJPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRl
bGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hh
ZGVyT2JqZWN0ID0gbVNoYWRlck1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAoc2hhZGVyT2Jq
ZWN0ICE9IG1TaGFkZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyT2JqZWN0
LT5zZWNvbmQtPmdldFJlZkNvdW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbVBy
b2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShzaGFkZXJPYmplY3QtPmZpcnN0KTsK
LSAgICAgICAgICAgIGRlbGV0ZSBzaGFkZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1T
aGFkZXJNYXAuZXJhc2Uoc2hhZGVyT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRp
b24oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0
ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJv
Z3JhbU9iamVjdCA9IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3Jh
bU9iamVjdCAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFt
T2JqZWN0LT5zZWNvbmQtPmdldFJlZkNvdW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbVByb2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShwcm9ncmFtT2JqZWN0LT5m
aXJzdCk7Ci0gICAgICAgICAgICBkZWxldGUgcHJvZ3JhbU9iamVjdC0+c2Vjb25kOwotICAgICAg
ICAgICAgbVByb2dyYW1NYXAuZXJhc2UocHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7IAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5m
bGFnRm9yRGVsZXRpb24oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1h
bmFnZXI6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgVGV4dHVyZU1hcDo6
aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7Ci0KLSAg
ICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAg
IG1UZXh0dXJlSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UodGV4dHVyZU9iamVjdC0+Zmlyc3QpOwot
ICAgICAgICBpZiAodGV4dHVyZU9iamVjdC0+c2Vjb25kKSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQt
PnJlbGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmVNYXAuZXJhc2UodGV4dHVyZU9iamVjdCk7Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWlu
dCByZW5kZXJidWZmZXIpCi17Ci0gICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJi
dWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsKLQotICAg
IGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7
Ci0gICAgICAgIG1SZW5kZXJidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShyZW5kZXJidWZm
ZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdC0+c2Vjb25k
KSByZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVy
YnVmZmVyTWFwLmVyYXNlKHJlbmRlcmJ1ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi1CdWZmZXIg
KlJlc291cmNlTWFuYWdlcjo6Z2V0QnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAg
QnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKLQot
ICAgIGlmIChidWZmZXIgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gYnVmZmVyLT5z
ZWNvbmQ7Ci0gICAgfQotfQotCi1TaGFkZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2hhZGVyKHVu
c2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXIgPSBt
U2hhZGVyTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChzaGFkZXIgPT0gbVNoYWRlck1hcC5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICByZXR1cm4gc2hhZGVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1UZXh0dXJlICpS
ZXNvdXJjZU1hbmFnZXI6OmdldFRleHR1cmUodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBp
ZiAoaGFuZGxlID09IDApIHJldHVybiBOVUxMOwotCi0gICAgVGV4dHVyZU1hcDo6aXRlcmF0b3Ig
dGV4dHVyZSA9IG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmICh0ZXh0dXJlID09
IG1UZXh0dXJlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7Ci0gICAgfQot
fQotCi1Qcm9ncmFtICpSZXNvdXJjZU1hbmFnZXI6OmdldFByb2dyYW0odW5zaWduZWQgaW50IGhh
bmRsZSkKLXsKLSAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtID0gbVByb2dyYW1NYXAu
ZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHByb2dyYW0gPT0gbVByb2dyYW1NYXAuZW5kKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHByb2dyYW0tPnNlY29uZDsKLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqUmVz
b3VyY2VNYW5hZ2VyOjpnZXRSZW5kZXJidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAg
ICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlciA9IG1SZW5kZXJidWZmZXJN
YXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtUmVuZGVyYnVmZmVy
TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiByZW5kZXJidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVu
ZGVyYnVmZmVyICpidWZmZXIpCi17Ci0gICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gYnVm
ZmVyOwotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVu
c2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIo
YnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIEJ1ZmZlciAqYnVmZmVyT2JqZWN0ID0gbmV3IEJ1ZmZl
cihidWZmZXIpOwotICAgICAgICBtQnVmZmVyTWFwW2J1ZmZlcl0gPSBidWZmZXJPYmplY3Q7Ci0g
ICAgICAgIGJ1ZmZlck9iamVjdC0+YWRkUmVmKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNl
TWFuYWdlcjo6Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQgdGV4dHVyZSwgVGV4dHVyZVR5
cGUgdHlwZSkKLXsKLSAgICBpZiAoIWdldFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAw
KQotICAgIHsKLSAgICAgICAgVGV4dHVyZSAqdGV4dHVyZU9iamVjdDsKLQotICAgICAgICBpZiAo
dHlwZSA9PSBURVhUVVJFXzJEKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZXh0dXJlT2JqZWN0
ID0gbmV3IFRleHR1cmUyRCh0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0
eXBlID09IFRFWFRVUkVfQ1VCRSkKLSAgICAgICAgewotICAgICAgICAgICAgdGV4dHVyZU9iamVj
dCA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9IHRleHR1cmVP
YmplY3Q7Ci0gICAgICAgIHRleHR1cmVPYmplY3QtPmFkZFJlZigpOwotICAgIH0KLX0KLQotdm9p
ZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVu
ZGVyYnVmZmVyKQotewotICAgIGlmIChyZW5kZXJidWZmZXIgIT0gMCAmJiAhZ2V0UmVuZGVyYnVm
ZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlck9iamVjdCA9IG5ldyBSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLCBuZXcgQ29sb3JidWZm
ZXIoMCwgMCwgR0xfUkdCQTQsIDApKTsKLSAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcFtyZW5kZXJi
dWZmZXJdID0gcmVuZGVyYnVmZmVyT2JqZWN0OwotICAgICAgICByZW5kZXJidWZmZXJPYmplY3Qt
PmFkZFJlZigpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDUxODVmYzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZXNvdXJjZU1hbmFnZXIuaCA6IERl
ZmluZXMgdGhlIFJlc291cmNlTWFuYWdlciBjbGFzcywgd2hpY2ggdHJhY2tzIG9iamVjdHMKLS8v
IHNoYXJlZCBieSBtdWx0aXBsZSBHTCBjb250ZXh0cy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVT
T1VSQ0VNQU5BR0VSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KLQot
I2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlIDxo
YXNoX21hcD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJ1ZmZl
cjsKLWNsYXNzIFNoYWRlcjsKLWNsYXNzIFByb2dyYW07Ci1jbGFzcyBUZXh0dXJlOwotY2xhc3Mg
UmVuZGVyYnVmZmVyOwotCi1lbnVtIFRleHR1cmVUeXBlCi17Ci0gICAgVEVYVFVSRV8yRCwKLSAg
ICBURVhUVVJFX0NVQkUsCi0KLSAgICBURVhUVVJFX1RZUEVfQ09VTlQsCi0gICAgVEVYVFVSRV9V
TktOT1dOCi19OwotCi1lbnVtIFNhbXBsZXJUeXBlCi17Ci0gICAgU0FNUExFUl9QSVhFTCwKLSAg
ICBTQU1QTEVSX1ZFUlRFWAotfTsKLQotY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCi17Ci0gIHB1Ymxp
YzoKLSAgICBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB+UmVzb3VyY2VNYW5hZ2VyKCk7Ci0KLSAg
ICB2b2lkIGFkZFJlZigpOwotICAgIHZvaWQgcmVsZWFzZSgpOwotCi0gICAgR0x1aW50IGNyZWF0
ZUJ1ZmZlcigpOwotICAgIEdMdWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIEdM
dWludCBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBH
THVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVp
bnQgYnVmZmVyKTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKLSAgICB2
b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwotICAgIHZvaWQgZGVsZXRlVGV4dHVy
ZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJl
bmRlcmJ1ZmZlcik7Ci0KLSAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAg
ICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9n
cmFtKEdMdWludCBoYW5kbGUpOwotICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0g
ICAgCi0gICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVy
ICpyZW5kZXJidWZmZXIpOwotCi0gICAgdm9pZCBjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWdu
ZWQgaW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0
ZXh0dXJlLCBUZXh0dXJlVHlwZSB0eXBlKTsKLSAgICB2b2lkIGNoZWNrUmVuZGVyYnVmZmVyQWxs
b2NhdGlvbihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihSZXNvdXJjZU1hbmFnZXIpOwotCi0gICAgc3RkOjpzaXplX3QgbVJl
ZkNvdW50OwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgQnVmZmVyKj4g
QnVmZmVyTWFwOwotICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwotICAgIEhhbmRsZUFsbG9jYXRv
ciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFw
PEdMdWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOwotICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOwot
Ci0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1N
YXA7Ci0gICAgUHJvZ3JhbU1hcCBtUHJvZ3JhbU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbVBy
b2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9t
YXA8R0x1aW50LCBUZXh0dXJlKj4gVGV4dHVyZU1hcDsKLSAgICBUZXh0dXJlTWFwIG1UZXh0dXJl
TWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvcjsKLQotICAg
IHR5cGVkZWYgc3RkZXh0OjpoYXNoX21hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1
ZmZlck1hcDsKLSAgICBSZW5kZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKLSAgICBIYW5k
bGVBbGxvY2F0b3IgbVJlbmRlcmJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTdmZDNkNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1NoYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlNo
YWRlciBjbGFzcyBhbmQgaXRzICBkZXJpdmVkIGNsYXNzZXMKLS8vIFZlcnRleFNoYWRlciBhbmQg
RnJhZ21lbnRTaGFkZXIuIEltcGxlbWVudHMgR0wgc2hhZGVyIG9iamVjdHMgYW5kIHJlbGF0ZWQK
LS8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAy
NCBhbmQgc2VjdGlvbiAzLjggcGFnZSA4NC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIu
aCIKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVybGFuZy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxp
dGllcy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXZvaWQgKlNoYWRlcjo6bUZyYWdtZW50Q29tcGls
ZXIgPSBOVUxMOwotdm9pZCAqU2hhZGVyOjptVmVydGV4Q29tcGlsZXIgPSBOVUxMOwotCi1TaGFk
ZXI6OlNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbUhh
bmRsZShoYW5kbGUpLCBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpCi17Ci0gICAgbVNvdXJjZSA9
IE5VTEw7Ci0gICAgbUhsc2wgPSBOVUxMOwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQotICAgIHVu
Y29tcGlsZSgpOwotICAgIGluaXRpYWxpemVDb21waWxlcigpOwotCi0gICAgbVJlZkNvdW50ID0g
MDsKLSAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci19Ci0KLVNoYWRlcjo6flNoYWRlcigpCi17
Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsKLSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBkZWxldGVb
XSBtSW5mb0xvZzsKLX0KLQotR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUhhbmRsZTsKLX0KLQotdm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNv
dW50LCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQotewotICAgIGRl
bGV0ZVtdIG1Tb3VyY2U7Ci0gICAgaW50IHRvdGFsTGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVu
Z3RoW2ldID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0
aFtpXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRv
dGFsTGVuZ3RoICs9IChpbnQpc3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtU291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAxXTsKLSAgICBjaGFyICpjb2Rl
ID0gbVNvdXJjZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7
Ci0gICAgICAgIGludCBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5n
dGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gbGVuZ3Ro
W2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc3Ry
aW5nTGVuZ3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN0cm5jcHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgpOwotICAgICAgICBjb2RlICs9
IHN0cmluZ0xlbmd0aDsKLSAgICB9Ci0KLSAgICBtU291cmNlW3RvdGFsTGVuZ3RoXSA9ICdcMCc7
Ci19Ci0KLWludCBTaGFkZXI6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAotewotICAgIGlmICgh
bUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQotfQotCi12b2lk
IFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hh
ciAqaW5mb0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKGJ1ZlNpemUgPiAw
KQotICAgIHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAg
ICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkK
LSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLWludCBTaGFkZXI6
OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0
cmxlbihtU291cmNlKSArIDE7Ci0gICAgfQotfQotCi1pbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVk
U291cmNlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbiht
SGxzbCkgKyAxOwotICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAq
c291cmNlLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQot
ewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAoYnVmU2l6ZSA+IDApCi0gICAgewotICAg
ICAgICBpZiAoc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWlu
KGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsKLSAgICAgICAgICAgIG1lbWNweShi
dWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYnVmZmVyW2luZGV4
XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5n
dGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhZGVyOjpnZXRTb3VyY2UoR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBnZXRTb3VyY2VJ
bXBsKG1Tb3VyY2UsIGJ1ZlNpemUsIGxlbmd0aCwgYnVmZmVyKTsKLX0KLQotdm9pZCBTaGFkZXI6
OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNo
YXIgKmJ1ZmZlcikKLXsKLSAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgs
IGJ1ZmZlcik7Ci19Ci0KLWJvb2wgU2hhZGVyOjppc0NvbXBpbGVkKCkKLXsKLSAgICByZXR1cm4g
bUhsc2wgIT0gTlVMTDsKLX0KLQotY29uc3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKLXsKLSAg
ICByZXR1cm4gbUhsc2w7Ci19Ci0KLXZvaWQgU2hhZGVyOjphZGRSZWYoKQotewotICAgIG1SZWZD
b3VudCsrOwotfQotCi12b2lkIFNoYWRlcjo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07
Ci0KLSAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAg
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsKLSAgICB9Ci19Ci0K
LXVuc2lnbmVkIGludCBTaGFkZXI6OmdldFJlZkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVJlZkNvdW50OwotfQotCi1ib29sIFNoYWRlcjo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25z
dAotewotICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFNoYWRlcjo6ZmxhZ0Zv
ckRlbGV0aW9uKCkKLXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotLy8gUGVyZm9y
bSBhIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzaGFkZXIgY29tcGlsZXIgKG9yIGFm
dGVyIGJlaW5nIGRlc3RydWN0ZWQgYnkgcmVsZWFzZUNvbXBpbGVyKQotdm9pZCBTaGFkZXI6Omlu
aXRpYWxpemVDb21waWxlcigpCi17Ci0gICAgaWYgKCFtRnJhZ21lbnRDb21waWxlcikKLSAgICB7
Ci0gICAgICAgIGludCByZXN1bHQgPSBTaEluaXRpYWxpemUoKTsKLQotICAgICAgICBpZiAocmVz
dWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgcmVzb3VyY2Vz
OwotICAgICAgICAgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmcmVzb3VyY2VzKTsKLSAgICAg
ICAgICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgICAgICAg
ICAgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250
ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLSAgICAgICAgICAgIHJlc291cmNlcy5N
YXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IGNvbnRleHQtPmdldE1heGltdW1WZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMgPSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cygpOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7
Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZGRVJT
OwotICAgICAgICAgICAgcmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0g
ICAgICAgICAgICAvLyByZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IGdldERpc3Bs
YXkoKS0+aXNEM2Q5RXhEZXZpY2UoKSA/IDEgOiAwOyAvLyBUT0RPOiBjb21tZW50ZWQgb3V0IHVu
dGlsIHRoZSBleHRlbnNpb24gaXMgYWN0dWFsbHkgc3VwcG9ydGVkLgotCi0gICAgICAgICAgICBt
RnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRfU0hBREVS
LCBTSF9HTEVTMl9TUEVDLCBTSF9ITFNMX09VVFBVVCwgJnJlc291cmNlcyk7Ci0gICAgICAgICAg
ICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRFWF9TSEFERVIs
IFNIX0dMRVMyX1NQRUMsIFNIX0hMU0xfT1VUUFVULCAmcmVzb3VyY2VzKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpCi17Ci0gICAgU2hEZXN0
cnVjdChtRnJhZ21lbnRDb21waWxlcik7Ci0gICAgU2hEZXN0cnVjdChtVmVydGV4Q29tcGlsZXIp
OwotCi0gICAgbUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwotICAgIG1WZXJ0ZXhDb21waWxlciA9
IE5VTEw7Ci0KLSAgICBTaEZpbmFsaXplKCk7Ci19Ci0KLXZvaWQgU2hhZGVyOjpwYXJzZVZhcnlp
bmdzKCkKLXsKLSAgICBpZiAobUhsc2wpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICppbnB1
dCA9IHN0cnN0cihtSGxzbCwgIi8vIFZhcnlpbmdzIikgKyAxMjsKLQotICAgICAgICB3aGlsZSh0
cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAg
ICAgICAgICBjaGFyIHZhcnlpbmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVz
ID0gc3NjYW5mKGlucHV0LCAic3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlp
bmdOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hh
ciAqYXJyYXkgPSBzdHJzdHIodmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6
ZSA9IDE7Ci0KLSAgICAgICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBzaXplID0gYXRvaShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9
ICdcMCc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2so
VmFyeWluZyhwYXJzZVR5cGUodmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkg
IT0gTlVMTCkpOwotCi0gICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7
Ci0gICAgICAgIH0KLQotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdM
X1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBz
dHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1V
c2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVM
TDsKLSAgICAgICAgbVVzZXNQb2ludENvb3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lO
VF9DT09SRCIpICE9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBpbml0aWFsaXplL2NsZWFuIHVwIHBy
ZXZpb3VzIHN0YXRlCi12b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKLXsKLSAgICAvLyBzZXQgYnkg
Y29tcGlsZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0KLSAgICAvLyBzZXQg
YnkgcGFyc2VWYXJ5aW5ncwotICAgIG1WYXJ5aW5ncy5jbGVhcigpOwotCi0gICAgbVVzZXNGcmFn
Q29vcmQgPSBmYWxzZTsKLSAgICBtVXNlc0Zyb250RmFjaW5nID0gZmFsc2U7Ci0gICAgbVVzZXNQ
b2ludFNpemUgPSBmYWxzZTsKLSAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKLX0KLQotdm9p
ZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpCi17Ci0gICAgLy8gZW5zdXJl
IHdlIGRvbid0IHBhc3MgYSBOVUxMIHNvdXJjZSB0byB0aGUgY29tcGlsZXIKLSAgICBjaGFyICpz
b3VyY2UgPSAiXDAiOwotICAgIGlmIChtU291cmNlKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
bVNvdXJjZTsKLSAgICB9Ci0KLSAgICAvLyBlbnN1cmUgdGhlIGNvbXBpbGVyIGlzIGxvYWRlZAot
ICAgIGluaXRpYWxpemVDb21waWxlcigpOwotCi0gICAgaW50IGNvbXBpbGVPcHRpb25zID0gU0hf
T0JKRUNUX0NPREU7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aDsKLSAgICBpZiAocGVyZkFj
dGl2ZSgpKQotICAgIHsKLSAgICAgICAgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAg
ICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZSwgc3RybGVuKHNvdXJjZSkp
OwotICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7Ci0gICAgfQot
Ci0gICAgaW50IHJlc3VsdDsKLSAgICBpZiAoc291cmNlUGF0aC5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0
aW9ucyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNvdXJj
ZVN0cmluZ3NbMl0gPQotICAgICAgICB7Ci0gICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3RyKCks
Ci0gICAgICAgICAgICBzb3VyY2UKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBTaENv
bXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09V
UkNFX1BBVEgpOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQpCi0gICAgewotICAgICAgICBpbnQg
b2JqQ29kZUxlbiA9IDA7Ci0gICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NP
REVfTEVOR1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1IbHNsID0gbmV3IGNoYXJbb2JqQ29k
ZUxlbl07Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgbUhsc2wpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBpbnQgaW5mb0xvZ0xlbiA9IDA7Ci0gICAgICAgIFNo
R2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xvZ0xlbik7Ci0gICAg
ICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbaW5mb0xvZ0xlbl07Ci0gICAgICAgIFNoR2V0SW5mb0xv
Zyhjb21waWxlciwgbUluZm9Mb2cpOwotCi0gICAgICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cp
OwotICAgIH0KLX0KLQotR0xlbnVtIFNoYWRlcjo6cGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5n
ICZ0eXBlKQotewotICAgIGlmICh0eXBlID09ICJmbG9hdCIpCi0gICAgewotICAgICAgICByZXR1
cm4gR0xfRkxPQVQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MiIpCi0gICAg
ewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlw
ZSA9PSAiZmxvYXQzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAg
IH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX1ZFQzQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlID09ICJmbG9hdDN4MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFU
MzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LQotICAgIHJldHVybiBHTF9OT05FOwotfQotCi0vLyB0cnVlIGlmIHZhcnlpbmcgeCBoYXMgYSBo
aWdoZXIgcHJpb3JpdHkgaW4gcGFja2luZyB0aGFuIHkKLWJvb2wgU2hhZGVyOjpjb21wYXJlVmFy
eWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25zdCBWYXJ5aW5nICZ5KQotewotICAgIGlmKHgudHlw
ZSA9PSB5LnR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOwotICAg
IH0KLQotICAgIHN3aXRjaCAoeC50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDogcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3aXRj
aCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVy
biBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0
cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0g
ICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVy
biBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
OiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gZmFs
c2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotVmVydGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IFNoYWRlcihtYW5hZ2VyLCBoYW5kbGUpCi17Ci19Ci0K
LVZlcnRleFNoYWRlcjo6flZlcnRleFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBWZXJ0ZXhTaGFk
ZXI6OmdldFR5cGUoKQotewotICAgIHJldHVybiBHTF9WRVJURVhfU0hBREVSOwotfQotCi12b2lk
IFZlcnRleFNoYWRlcjo6dW5jb21waWxlKCkKLXsKLSAgICBTaGFkZXI6OnVuY29tcGlsZSgpOwot
Ci0gICAgLy8gc2V0IGJ5IFBhcnNlQXR0cmlidXRlcwotICAgIG1BdHRyaWJ1dGVzLmNsZWFyKCk7
Ci19OwotCi12b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxlKCk7
Ci0KLSAgICBjb21waWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7Ci0gICAgcGFyc2VBdHRyaWJ1
dGVzKCk7Ci0gICAgcGFyc2VWYXJ5aW5ncygpOwotfQotCi1pbnQgVmVydGV4U2hhZGVyOjpnZXRT
ZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQotewotICAgIGlm
ICghYXR0cmlidXRlTmFtZS5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgaW50IHNlbWFudGljSW5k
ZXggPSAwOwotICAgICAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUg
PSBtQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lID09
IGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNl
bWFudGljSW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNlbWFudGljSW5kZXgg
Kz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVz
KCkKLXsKLSAgICBjb25zdCBjaGFyICpobHNsID0gZ2V0SExTTCgpOwotICAgIGlmIChobHNsKQot
ICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIoaGxzbCwgIi8vIEF0dHJp
YnV0ZXMiKSArIDE0OwotCi0gICAgICAgIHdoaWxlKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNoYXIgYXR0cmlidXRlVHlwZVsyNTZdOwotICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVO
YW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3Rh
dGljICUyNTVzIF8lMjU1cyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAg
ICAgICAgICBpZiAobWF0Y2hlcyAhPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQXR0cmlidXRlcy5wdXNoX2Jh
Y2soQXR0cmlidXRlKHBhcnNlVHlwZShhdHRyaWJ1dGVUeXBlKSwgYXR0cmlidXRlTmFtZSkpOwot
Ci0gICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLUZyYWdtZW50U2hhZGVyOjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFn
ZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKLXsK
LX0KLQotRnJhZ21lbnRTaGFkZXI6On5GcmFnbWVudFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBG
cmFnbWVudFNoYWRlcjo6Z2V0VHlwZSgpCi17Ci0gICAgcmV0dXJuIEdMX0ZSQUdNRU5UX1NIQURF
UjsKLX0KLQotdm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxl
KCk7Ci0KLSAgICBjb21waWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBwYXJzZVZh
cnlpbmdzKCk7Ci0gICAgbVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOwotfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDgzZWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2
NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXIuaDogRGVmaW5lcyB0aGUg
YWJzdHJhY3QgZ2w6OlNoYWRlciBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNs
YXNzZXMgVmVydGV4U2hhZGVyIGFuZCBGcmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFk
ZXIgb2JqZWN0cyBhbmQKLS8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMi4xMCBwYWdlIDI0IGFuZCBzZWN0aW9uCi0vLyAzLjggcGFnZSA4NC4KLQot
I2lmbmRlZiBMSUJHTEVTVjJfU0hBREVSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8K
LQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8
ZDNkeDkuaD4KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1zdHJ1Y3Qg
VmFyeWluZwotewotICAgIFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lLCBpbnQgc2l6ZSwgYm9vbCBhcnJheSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5h
bWUpLCBzaXplKHNpemUpLCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQg
c2l6ZTsgICAvLyBOdW1iZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQot
ICAgIGludCByZWc7ICAgIC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmlu
ZyBsaW5rCi0gICAgaW50IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWdu
ZWQgZHVyaW5nIGxpbmsKLX07Ci0KLXR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdM
aXN0OwotCi1jbGFzcyBTaGFkZXIKLXsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsK
LQotICBwdWJsaWM6Ci0gICAgU2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50
IGhhbmRsZSk7Ci0KLSAgICB2aXJ0dWFsIH5TaGFkZXIoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVt
IGdldFR5cGUoKSA9IDA7Ci0gICAgR0x1aW50IGdldEhhbmRsZSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBkZWxldGVTb3VyY2UoKTsKLSAgICB2b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25z
dCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKTsKLSAgICBpbnQgZ2V0SW5mb0xv
Z0xlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7Ci0gICAgaW50IGdldFNvdXJjZUxlbmd0aCgp
IGNvbnN0OwotICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICpidWZmZXIpOwotICAgIGludCBnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkg
Y29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGUo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwotICAgIGJvb2wgaXNDb21waWxl
ZCgpOwotICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKLQotICAgIHZvaWQgYWRkUmVmKCk7Ci0g
ICAgdm9pZCByZWxlYXNlKCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7
Ci0gICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwotICAgIHZvaWQgZmxhZ0Zv
ckRlbGV0aW9uKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlQ29tcGlsZXIoKTsKLQotICBw
cm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYXJzZVZhcnlpbmdzKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVU
b0hMU0wodm9pZCAqY29tcGlsZXIpOwotCi0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNv
dXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Ci0K
LSAgICBzdGF0aWMgR0xlbnVtIHBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSk7Ci0g
ICAgc3RhdGljIGJvb2wgY29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFy
eWluZyAmeSk7Ci0KLSAgICBWYXJ5aW5nTGlzdCBtVmFyeWluZ3M7Ci0KLSAgICBib29sIG1Vc2Vz
RnJhZ0Nvb3JkOwotICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1Vc2VzUG9p
bnRTaXplOwotICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwotCi0gICAgc3RhdGljIHZvaWQgKm1G
cmFnbWVudENvbXBpbGVyOwotICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29tcGlsZXI7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2hhZGVyKTsKLQotICAgIHZv
aWQgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7Ci0KLSAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsKLSAg
ICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dyYW0gb2JqZWN0
cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAg
ICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUgZGVsZXRlZCB3
aGVuIG5vIGxvbmdlciBpbiB1c2UKLQotICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAgY2hhciAqbUhs
c2w7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJj
ZU1hbmFnZXI7Ci19OwotCi1zdHJ1Y3QgQXR0cmlidXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0
eXBlKEdMX05PTkUpLCBuYW1lKCIiKQotICAgIHsKLSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xl
bnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFt
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFt
ZTsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsK
LQotY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgotewotICAgIGZyaWVuZCBjbGFz
cyBQcm9ncmFtQmluYXJ5OwotCi0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VN
YW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIH5WZXJ0ZXhTaGFkZXIoKTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGls
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJ
bmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4U2hhZGVyKTsKLQotICAgIHZvaWQgcGFy
c2VBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBdHRyaWJ1dGVBcnJheSBtQXR0cmlidXRlczsKLX07Ci0K
LWNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgotewotICBwdWJsaWM6Ci0gICAg
RnJhZ21lbnRTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsK
LQotICAgIH5GcmFnbWVudFNoYWRlcigpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgp
OwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRTaGFkZXIpOwotfTsKLX0KLQotI2VuZGlmICAgLy8g
TElCR0xFU1YyX1NIQURFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZjI0
NTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
ZXh0dXJlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MDkgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gVGV4dHVyZS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpUZXh0dXJlIGNsYXNz
IGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCi0vLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFw
LiBJbXBsZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQgcmVsYXRlZAotLy8gZnVuY3Rpb25h
bGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSA8ZDNkeDl0ZXguaD4KLQotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpbnRyaW4uaD4KLQotI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOwotCi1zdGF0
aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKLXsKLSAgICBpZiAoSXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBEM0RGTVRfSU5UWjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEdM
X0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICAgICAgICBmb3JtYXQgPT0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4g
RDNERk1UX0RYVDE7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQz
OwotICAgIH0KLSAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUNV9BTkdMRSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RG
TVRfQTMyQjMyRzMyUjMyRjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZM
T0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAg
ICAgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1
bWluYW5jZVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRf
TDg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9B
TFBIQSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLX0KLQot
c3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQot
ewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZN
VF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgot
ICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGlubGluZSBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQz
ZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAgIERXT1JE
IGQzZHVzYWdlID0gMDsKLQotICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCi0gICAgewot
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7Ci0gICAgfQotICAgIGVs
c2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZt
dCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQotICAg
IHsKLSAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOwotICAgIH0KLSAg
ICByZXR1cm4gZDNkdXNhZ2U7Ci19Ci0KLUltYWdlOjpJbWFnZSgpCi17Ci0gICAgbVdpZHRoID0g
MDsgCi0gICAgbUhlaWdodCA9IDA7Ci0gICAgbUZvcm1hdCA9IEdMX05PTkU7Ci0gICAgbVR5cGUg
PSBHTF9VTlNJR05FRF9CWVRFOwotCi0gICAgbVN1cmZhY2UgPSBOVUxMOwotCi0gICAgbURpcnR5
ID0gZmFsc2U7Ci0KLSAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVNTUVNOwotICAgIG1EM0RG
b3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLX0KLQotSW1hZ2U6On5JbWFnZSgpCi17Ci0gICAgaWYg
KG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci19
Ci0KLWJvb2wgSW1hZ2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYg
KG1XaWR0aCAhPSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAg
ICBtRm9ybWF0ICE9IGZvcm1hdCB8fAotICAgICAgICBtVHlwZSAhPSB0eXBlIHx8Ci0gICAgICAg
IGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1XaWR0aCA9IHdpZHRoOwotICAgICAgICBt
SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtVHlw
ZSA9IHR5cGU7Ci0gICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJl
IHVzZWQKLSAgICAgICAgbUQzREZvcm1hdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShtRm9y
bWF0LCBtVHlwZSk7Ci0KLSAgICAgICAgaWYgKG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKLXsKLSAgICBpZihtU3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2Ug
PSBOVUxMOwotICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07
Ci0gICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOwotICAgIEFT
U0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUgZm9yIGRlcHRoIHRleHR1cmVzCi0KLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAh
PSAwKQotICAgIHsKLSAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6
ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQg
PSBtSGVpZ2h0OwotICAgICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGgg
JSA0ICE9IDAgfHwgbUhlaWdodCAlIDQgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJv
b2wgaXNNdWx0NCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOwot
ICAgICAgICAgICAgd2hpbGUgKCFpc011bHQ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJlcXVlc3RXaWR0aCA8PD0gMTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0SGVpZ2h0IDw8
PSAxOwotICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsKLSAgICAgICAgICAgICAgICBp
ZiAocmVxdWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1
cHNhbXBsZUNvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXRE
ZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVs
VG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsK
LQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBzdXJmYWNlIGZhaWxl
ZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gs
ICZuZXdTdXJmYWNlKTsKLSAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQot
ICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKLSAgICBtRGlydHkgPSBmYWxzZTsKLSAgICBtRDNE
UG9vbCA9IHBvb2xUb1VzZTsKLX0KLQotSFJFU1VMVCBJbWFnZTo6bG9jayhEM0RMT0NLRURfUkVD
VCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7
Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKLQotICAgIGlmICht
U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2Nr
ZWRSZWN0LCByZWN0LCAwKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQot
ICAgICAgICBtRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgSW1hZ2U6OnVubG9jaygpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLX0KLQotYm9vbCBJbWFnZTo6aXNSZW5kZXJh
YmxlRm9ybWF0KCkgY29uc3QKLXsgICAgCi0gICAgcmV0dXJuIElzVGV4dHVyZUZvcm1hdFJlbmRl
cmFibGUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1EM0RGT1JNQVQgSW1hZ2U6OmdldEQzREZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdl
IGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAotICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVn
IGJ5IHRoZSBjYWxsZXIKLSAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7
Ci0KLSAgICByZXR1cm4gbUQzREZvcm1hdDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkltYWdl
OjpnZXRTdXJmYWNlKCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICByZXR1cm4gbVN1
cmZhY2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpzdXJmYWNlKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEQzRFhM
b2FkU3VyZmFjZUZyb21TdXJmYWNlKHN1cmZhY2UsIE5VTEwsIE5VTEwsIG1TdXJmYWNlLCBOVUxM
LCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOwotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgp
OwotICAgIH0KLQotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHN1cmZhY2UtPkdldERl
c2MoJmRlc2MpOwotICAgIEFTU0VSVChkZXNjLlBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLQot
ICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAgICBtRDNEUG9vbCA9IGRlc2MuUG9vbDsKLX0KLQot
dm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2Us
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQotewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFj
ZSgpOwotCi0gICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3Vy
ZmFjZSkKLSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgcmVjdC5sZWZ0ID0geG9m
ZnNldDsKLSAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OwotICAgICAgICByZWN0LnJpZ2h0ID0g
eG9mZnNldCArIHdpZHRoOwotICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7
Ci0KLSAgICAgICAgaWYgKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkKLSAgICAgICAgewot
ICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShk
ZXN0U3VyZmFjZSwgTlVMTCwgJnJlY3QsIHNvdXJjZVN1cmZhY2UsIE5VTEwsICZyZWN0LCBEM0RY
X0ZJTFRFUl9CT1gsIDApOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFVwZGF0
ZVN1cmZhY2U6IHNvdXJjZSBtdXN0IGJlIFNZU1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQg
cG9vbHMgCi0gICAgICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3QudG9wfTsK
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uo
c291cmNlU3VyZmFjZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOwotICAgICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gU3Rv
cmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0
aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBp
bnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKLXsKLSAgICBSRUNUIGxvY2tSZWN0ID0KLSAgICB7Ci0gICAg
ICAgIHhvZmZzZXQsIHlvZmZzZXQsCi0gICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCAr
IGhlaWdodAotICAgIH07Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgSFJFU1VM
VCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7Ci0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdMc2l6ZWkgaW5wdXRQ
aXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
KTsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfQUxQSEE6Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNTU0UyKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbG9hZEFscGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkQWxw
aGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywg
Z2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQlVCeXRl
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgbG9hZEJHUkFEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAg
ICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgc3dpdGNo
IChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAg
ICAgbG9hZFJHQkE0NDQ0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJH
QkE1NTUxRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
RkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8v
IGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkn
cmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAg
ICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAg
bG9hZFJHQkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBz
d2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBh
cmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdh
eSBpbiBEM0QKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhh
SGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRS
R0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHVubG9jaygpOwotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0
ID0gTlVMTDsKLSAgICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsKLQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQot
ICAgICAgICBpbnQgeDsKLSAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAg
ICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkg
JiAweEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkKLSAgICAgICAg
ewotICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWRsX2VwaTY0KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKLSAgICAgICAgICAgIC8v
IEludGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRlIHRvIHpl
cm8KLSAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwg
c291cmNlRGF0YSk7Ci0gICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggMTZiaXQgdG8gMzJi
aXQsIG1ha2UgdGhlIGxvd2VyIDE2Yml0IHRvIHplcm8KLSAgICAgICAgICAgIF9fbTEyOGkgbG8g
PSBfbW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOwotICAgICAgICAgICAg
X19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7Ci0K
LSAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigm
ZGVzdFt4XSksIGxvKTsKLSAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9j
YXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBIYW5kbGUgdGhlIHJlbWFpbmRlcgotICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KHNvdXJjZVt4XSkgPDwgMjQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZs
b2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQs
IGJvb2wgbmF0aXZlKSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2g7Ci0KLSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9y
bWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAg
ICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2ln
bmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAv
LyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXBy
ZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25z
dAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWdu
ZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwg
c291cmNlLCB3aWR0aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4
KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291
cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
MHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgo
cmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJn
YmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsg
MF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewot
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNo
b3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0g
MDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBpbnQgKmRlc3QgPSBOVUxMOwotICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBp
MzIoMHgwMGZmMDBmZik7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0g
ICAgICAgIGludCB4ID0gMDsKLQotICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25l
ZAotICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0
W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0g
KF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAoOyB4ICsgMyA8IHdpZHRoOyB4ICs9IDQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkdV9zaTEyOChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7Ci0gICAgICAgICAgICAv
LyBNYXNrIG91dCBnIGFuZCBhLCB3aGljaCBkb24ndCBjaGFuZ2UKLSAgICAgICAgICAgIF9fbTEy
OGkgZ2FDb21wb25lbnRzID0gX21tX2FuZG5vdF9zaTEyOChick1hc2ssIHNvdXJjZURhdGEpOwot
ICAgICAgICAgICAgLy8gTWFzayBvdXQgYiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBickNv
bXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4KHNvdXJjZURhdGEsIGJyTWFzayk7Ci0gICAgICAgICAg
ICAvLyBTd2FwIGIgYW5kIHIKLSAgICAgICAgICAgIF9fbTEyOGkgYnJTd2FwcGVkID0gX21tX3No
dWZmbGVoaV9lcGkxNihfbW1fc2h1ZmZsZWxvX2VwaTE2KGJyQ29tcG9uZW50cywgX01NX1NIVUZG
TEUoMiwgMywgMCwgMSkpLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSk7Ci0gICAgICAgICAgICBf
X20xMjhpIHJlc3VsdCA9IF9tbV9vcl9zaTEyOChnYUNvbXBvbmVudHMsIGJyU3dhcHBlZCk7Ci0g
ICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRl
c3RbeF0pLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUGVyZm9ybSBsZWZ0b3Zl
ciB3cml0ZXMKLSAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3Rb
eF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDAp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2Vb
eF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYp
IHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0g
TlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChy
Z2JhICYgMHgwMEYwKSA+PiA0KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdi
YSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAw
MCkgPj4gMTIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBG
KSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8
PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MV0gPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJn
YmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2Jh
ICYgMHgwMDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCQUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNv
dXJjZSwgd2lkdGgqNCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQp
IHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOwotCi0gICAgUkVDVCBsb2NrUmVjdCA9IHsKLSAgICAgICAgeG9mZnNldCwgeW9mZnNl
dCwKLSAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0Ci0gICAgfTsKLQot
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxv
Y2tlZCwgJmxvY2tSZWN0KTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJl
c3NlZFNpemUod2lkdGgsIGhlaWdodCwgbUZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNo
ID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUZvcm1hdCk7Ci0gICAgaW50IHJvd3Mg
PSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsg
KytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyAr
IGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNo
KSwgaW5wdXRQaXRjaCk7Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci19Ci0KLS8vIFRoaXMgaW1w
bGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFs
IHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTo6Y29w
eShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkK
LXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7Ci0gICAgRDNEU1VSRkFDRV9E
RVNDIGRlc2NyaXB0aW9uOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24p
OwotICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFp
blN1cmZhY2UoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRp
b24uRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOwot
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3Qg
Y3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdl
dFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsKLQotICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0
RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsK
LSAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwg
eW9mZnNldCArIGhlaWdodH07Ci0KLSAgICBpZiAoaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAg
ewotICAgICAgICByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShnZXRTdXJmYWNl
KCksIE5VTEwsICZkZXN0UmVjdCwgcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCwgJnNvdXJjZVJlY3Qs
IEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29weWluZyBzdXJmYWNlcyB1bmV4cGVj
dGVkbHkgZmFpbGVkLiIpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxv
Y2sgPSB7MH07Ci0gICAgICAgIHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZz
b3VyY2VMb2NrLCAmc291cmNlUmVjdCwgMCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ug
c3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExv
Y2sgPSB7MH07Ci0gICAgICAgIHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5n
bGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5V
bmxvY2tSZWN0KCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZGVzdExvY2sucEJpdHMgJiYgc291cmNlTG9jay5wQml0cykKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNv
dXJjZUxvY2sucEJpdHM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2ln
bmVkIGNoYXIqKWRlc3RMb2NrLnBCaXRzOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0
aW9uLkZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhS
OEc4Qjg6Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgICAg
ICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNl
W3ggKiA0ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4
TDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3gg
KiA0ICsgM107Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweEY4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRj
aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4Ogot
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAw
eDdDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwg
KHJlZCA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThM
ODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFd
ICYgMHg3QzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAo
cmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNlW3ggKiAyICsgMV0gPj4gNzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9
IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RM
b2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVubG9jaygpOwotICAgICAgICByZW5k
ZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0RGF0
YS0+UmVsZWFzZSgpOwotCi0gICAgbURpcnR5ID0gdHJ1ZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U6
OlRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKQotICAgIDogbUQzRFVzYWdlKHVzYWdlKSwKLSAg
ICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwKLSAgICAg
IG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNlcmlhbCgpKQotewotfQotCi1UZXh0dXJlU3Rv
cmFnZTo6flRleHR1cmVTdG9yYWdlKCkKLXsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNS
ZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7Ci19Ci0KLWJvb2wg
VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9v
bCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1EM0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQ
b29sKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFBvb2w7Ci19Ci0KLURXT1JEIFRleHR1cmVT
dG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM0RVc2FnZTsKLX0KLQot
dW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleHR1cmVTZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3Rv
cmFnZTo6aXNzdWVUZXh0dXJlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRUZXh0dXJl
U2VyaWFsKys7Ci19Ci0KLVRleHR1cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2Jq
ZWN0KGlkKQotewotICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7Ci0g
ICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKLSAgICBtV3JhcFMgPSBHTF9SRVBFQVQ7Ci0gICAg
bVdyYXBUID0gR0xfUkVQRUFUOwotICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgIG1V
c2FnZSA9IEdMX05PTkU7Ci0gICAgCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLQotICAgIG1J
bW11dGFibGUgPSBmYWxzZTsKLX0KLQotVGV4dHVyZTo6flRleHR1cmUoKQotewotfQotCi0vLyBS
ZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVt
IHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17
Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAg
ICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1NaW5GaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAg
ICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVy
IHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldE1h
Z0ZpbHRlcihHTGVudW0gZmlsdGVyKQotewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBmaWx0ZXIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbU1hZ0ZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgICAgICAgICBtRGlydHlQ
YXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAo
dmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFw
KQotewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAg
ICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFU
OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbVdyYXBTID0gd3JhcDsKLSAgICAgICAgICAgICAgICBtRGly
dHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0
ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3
cmFwKQotewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoK
LSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQ
RUFUOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVdyYXBUICE9IHdyYXApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbVdyYXBUID0gd3JhcDsKLSAgICAgICAgICAgICAgICBt
RGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRVc2FnZShHTGVu
dW0gdXNhZ2UpCi17Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05P
TkU6Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAg
IG1Vc2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRNaW5G
aWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtTWluRmlsdGVyOwotfQotCi1HTGVudW0gVGV4
dHVyZTo6Z2V0TWFnRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1hZ0ZpbHRlcjsKLX0K
LQotR0xlbnVtIFRleHR1cmU6OmdldFdyYXBTKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdyYXBT
OwotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFQoKSBjb25zdAotewotICAgIHJldHVybiBt
V3JhcFQ7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1Vc2FnZTsKLX0KLQotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmIChwaXhl
bHMgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+
Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFn
ZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwotICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQot
ICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1h
Z2VzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJl
OjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9
IE5VTEwpCi0gICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0
ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8gZW5zdXJl
IHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKGZh
bHNlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAg
dXBkYXRlVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7Ci19Ci0KLWJv
b2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURp
cnR5UGFyYW1ldGVyczsKLX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1EaXJ0eUltYWdlczsKLX0KLQotdm9pZCBUZXh0dXJlOjpyZXNldERp
cnR5KCkKLXsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7Ci0gICAgbURpcnR5SW1hZ2Vz
ID0gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKCkK
LXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAg
IHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIDogMDsKLX0KLQot
dW5zaWduZWQgaW50IFRleHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KQotewotICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsKLSAg
ICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQp
IDogMDsKLX0KLQotYm9vbCBUZXh0dXJlOjppc0ltbXV0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbW11dGFibGU7Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdAotewotICAgIGlmICgoaXNQb3cyKHdpZHRo
KSAmJiBpc1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRl
eHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOyAgIC8vIE1heGltdW0gbnVtYmVyIG9m
IGxldmVscwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBPcGVuR0wgRVMgMi4w
IHdpdGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBz
LgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9u
TGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMo
c2l6ZSwgc2l6ZSk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291
bnQoKSA6IDA7Ci19Ci0KLUJsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQotewotICAgIENvbnRl
eHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQtPmdldEJsaXR0
ZXIoKTsKLX0KLQotYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQp
Ci17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1
bHQ7Ci0KLSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0LCBOVUxMLCBOVUxMLCBzb3Vy
Y2UsIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXRE
aXNwbGF5KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5
LT5nZXREZXZpY2UoKTsKLQotICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBO
VUxMLCBEM0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJm
YWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVu
ZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0g
ICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4
dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtUmVu
ZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0g
ICAgbVRleHR1cmUgPSBOVUxMOwotICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
Ci0gICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAgewotICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBn
ZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OwotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKCkKLXsKLSAgICBpZiAo
bVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLX0K
LQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVs
ZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0
b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKLXsKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZzdXJm
YWNlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3VyZmFjZTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFn
ZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQot
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
ZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRTZXJpYWw7Ci19
Ci0KLVRleHR1cmUyRDo6VGV4dHVyZTJEKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAg
IG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgbUNvbG9yYnVm
ZmVyUHJveHkgPSBOVUxMOwotICAgIG1Qcm94eVJlZnMgPSAwOwotfQotCi1UZXh0dXJlMkQ6On5U
ZXh0dXJlMkQoKQotewotICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLQotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgCi0gICAgaWYgKG1T
dXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsK
LSAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIH0KLX0KLQotLy8gV2UgbmVlZCB0byBtYWlu
dGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0v
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8g
dXNlIGEgcG9pbnRlciAKLS8vIHRvIGEgcmVuZGVyYnVmZmVyIHByb3h5IHdoaWNoIGhhcyBiZWVu
IGRlbGV0ZWQuCi12b2lkIFRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKLXsKLSAgICBtUHJveHlSZWZzKys7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBpZiAobVByb3h5UmVm
cyA+IDApCi0gICAgICAgIG1Qcm94eVJlZnMtLTsKLQotICAgIGlmIChtUHJveHlSZWZzID09IDAp
Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLX0KLQotR0xlbnVtIFRleHR1cmUy
RDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKLX0KLQot
R0xzaXplaSBUZXh0dXJlMkQ6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlm
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0
dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIDA7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNv
bnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFs
Rm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVs
XS5nZXRGb3JtYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBHTF9OT05FOwotfQotCi1E
M0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0g
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVkZWZp
bmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSB0eXBlKQotewotICAgIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAg
Ym9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZp
bmVkKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJy
YXlbaV0ubWFya0RpcnR5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7Ci0gICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRl
ZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwotCi0gICAgVGV4
dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZl
bF0pOwotfQotCi12b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSkKLXsKLSAgICByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIEdMZW51bSBmb3JtYXQ7Ci0K
LSAgICBzd2l0Y2goc3VyZmFjZS0+Z2V0Rm9ybWF0KCkpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6Ci0gICAgICAgIGZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIGZvcm1hdCA9IEdMX1JHQjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtSW1hZ2VBcnJheVswXS5yZWRlZmluZShmb3Jt
YXQsIHN1cmZhY2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCBHTF9VTlNJR05F
RF9CWVRFLCB0cnVlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFn
ZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKHN1cmZhY2UtPmdldE9mZnNjcmVlblRleHR1cmUoKSk7
Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAg
ICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKHRoaXMpOwotfQotCi12b2lkIFRleHR1cmUyRDo6
cmVsZWFzZVRleEltYWdlKCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBt
U3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKE5VTEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7
Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgICAg
IH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5y
ZWRlZmluZShHTF9SR0JBLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIFRl
eHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5
W2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKLXsKLSAgICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxM
KTsKLQotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxl
dmVsKTsKLQotICAgICAgICBpZiAoZGVzdExldmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBJ
bWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbbGV2ZWxdOwotICAgICAgICAgICAgaW1hZ2UtPnVw
ZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
LQotICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpbWFnZS0+
bWFya0NsZWFuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdWJJ
bWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6
c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpCi0gICAgewotICAg
ICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFy
cmF5W2xldmVsXSkpCi0gICAgewotICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb3B5
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgp
OwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAKLSAgICBpZiAoIW1JbWFn
ZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdl
dCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLm1hcmtDbGVhbigp
OwotCi0gICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2
ZWxDb3VudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAg
ICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdo
dCA9IHggKyB3aWR0aDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxl
dmVsKGxldmVsKTsKLQotICAgICAgICAgICAgaWYgKGRlc3QpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwg
Zm9ybWF0LCAwLCAwLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXQtPlJlbGVh
c2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17
Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgp
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFy
Z2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZl
bF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29t
cGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSh4b2Zmc2V0
LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBt
RGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
IW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZl
bENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0geCArIHdpZHRoOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OwotICAgICAgICAg
ICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OwotCi0KLSAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7
Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5
WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAg
ICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2Uo
R0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGlu
dGVybmFsZm9ybWF0KTsKLSAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5h
bGZvcm1hdCk7Ci0gICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlw
ZShmb3JtYXQsIHR5cGUpOwotICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQz
ZGZtdCwgbVVzYWdlLCBmYWxzZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2Us
IHdpZHRoLCBoZWlnaHQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCi0gICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHRydWUp
OwotICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOwotICAgICAgICBoZWln
aHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gMSk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2
ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBs
ZXZlbCsrKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKEdMX05P
TkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgIH0KLQotICAgIGlmIChtVGV4
U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxl
dmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0gICAgICAgICAgICBtSW1h
Z2VBcnJheVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJE
Ojppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFn
ZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVsw
XS5nZXRIZWlnaHQoKTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgbWlwbWFwcGluZyA9
IGZhbHNlOwotCi0gICAgc3dpdGNoIChtTWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICBtaXBtYXBwaW5nID0gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
OgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05F
QVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6
Ci0gICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgw
KSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0hBTEZfRkxPQVRf
T0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Qp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBib29sIG5wb3RTdXBwb3J0ID0gZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKTsKLQotICAgIGlmICghbnBvdFN1cHBvcnQpCi0gICAgewotICAgICAgICBpZiAo
KGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKLSAg
ICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWln
aHQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKG1pcG1hcHBpbmcpCi0gICAgewotICAgICAgICBpZiAoIW5wb3RTdXBw
b3J0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93
MihoZWlnaHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNNaXBtYXBDb21wbGV0
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1p
cG1hcCkgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFn
ZSA4MS4KLWJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBp
ZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6
ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAod2lkdGgg
PD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9y
IChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3Jt
YXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlb
MF0uZ2V0VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3Rk
OjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldEhl
aWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAot
ewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKLX0K
LQotYm9vbCBUZXh0dXJlMkQ6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElzRGVwdGhUZXh0dXJlKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7Ci19Ci0KLUlEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBO
VUxMOwotfQotCi0vLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZy
b20gdGhlIHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCi17
Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgR0xz
aXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKLSAgICBHTGludCBsZXZl
bHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10
ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgRFdPUkQgZDNkdXNhZ2UgPSBH
ZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKLQotICAgIGRlbGV0ZSBtVGV4
U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywg
ZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0gICAgaWYgKG1UZXhTdG9y
YWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50
KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwr
KykKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVU
ZXh0dXJlKCkKLXsKLSAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIElt
YWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07Ci0KLSAgICAgICAgaWYgKGltYWdlLT5p
c0RpcnR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAs
IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVp
Z2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29udmVydFRv
UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZTJEICpuZXdUZXhTdG9yYWdlID0g
TlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdl
QXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGgg
PSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1J
bWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlv
bkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFn
ZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRl
eHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUp
OwotCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMs
IGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgIGlmIChtVGV4U3Rv
cmFnZSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLSAgICAgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQot
ICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRl
eFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAgICB7ICAgCi0gICAgICAgICAg
ICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgaWYgKHNv
dXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRl
c3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBt
VGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkK
LXsKLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0g
ICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpKSB8fCAh
aXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0
byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGlu
dCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJh
eVswXS5nZXRIZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7
IGkrKykKLSAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJyYXlbMF0uZ2V0
Rm9ybWF0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5
WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobVRl
eFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNl
TGV2ZWwoaSAtIDEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRl
eFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9
IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
ZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBt
SW1hZ2VBcnJheVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVM
TCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQoRDNEWExv
YWRTdXJmYWNlRnJvbVN1cmZhY2UobUltYWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBO
VUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBEM0RYX0ZJ
TFRFUl9CT1gsIDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIiBmYWls
ZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0KQotewotICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5V
TEwpOwotICAgIH0KLQotICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBS
ZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1Db2xvcmJ1ZmZlclByb3h5OwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJl
Y3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQot
ewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBlbnN1cmUg
dGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1
ZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVw
ZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0
ZXh0dXJlCi0gICAgaWYgKGlzRGVwdGgoMCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Ci19Ci0K
LS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgLy8g
ZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKCFpc0RlcHRo
KDApKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBtVGV4
U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVy
ZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewotICAgIGlmICghbVRleFN0b3Jh
Z2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQot
ICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVy
ZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdl
LCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKLXsKLSAg
ICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRo
aXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAgLy8gd2Ug
aGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KLSAg
ICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1
YmVUZXh0dXJlKHNpemUsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZt
VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6On5U
ZXh0dXJlU3RvcmFnZUN1YmVNYXAoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVN
YXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZXMyZHg6
OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWwsICZzdXJmYWNlKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsK
LX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEJh
c2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXVuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgKyBU
ZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KHRhcmdldCk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjpU
ZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAgICBtVGV4U3RvcmFn
ZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAg
ICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSA9IDA7
Ci0gICAgfQotfQotCi1UZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKLXsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tp
XSA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKLX0KLQotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVy
ZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRl
eHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgCi0vLyBwcm94
eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRv
IHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBh
dHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uCi12b2lkIFRl
eHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNl
UHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7
Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQ
cm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDAp
Ci0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAg
IHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFw
OjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZl
bCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1J
bWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0gICAgZWxz
ZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRl
cm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci19Ci0KLUQzREZPUk1BVCBUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0RDNERm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewot
ICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9y
bWF0KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047Ci19Ci0KLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgwLCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7
Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFn
ZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAg
ICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVn
WShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cykKLXsKLSAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNl
dEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UoZmFj
ZUluZGV4KGZhY2UpLCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9C
WVRFKTsKLQotICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAg
IEFTU0VSVChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwot
Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3RMZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAgICAgIEFTU0VS
VChkZXN0TGV2ZWwgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdOwotICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgICAgICAgICAgZGVzdExldmVsLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFn
ZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkp
Ci0gICAgewotICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQot
ewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2Zh
Y2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNl
SW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwot
ICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IG1JbWFn
ZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0KLSAgICBib29sIG1pcG1hcHBpbmc7Ci0KLSAgICBz
d2l0Y2ggKG1NaW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAg
Y2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElO
RUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFw
cGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgoZ2V0
SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9G
TE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwK
LSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKCkpKQotICAgIHsKLSAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xf
TkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xf
TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRD
b250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYg
KGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1Q
X1RPX0VER0UgfHwgbWlwbWFwcGluZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtaXBtYXBwaW5nKQotICAgIHsKLSAg
ICAgICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYg
KCFpc01pcG1hcEN1YmVDb21wbGV0ZSgpKSAgIC8vIEFsc28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBs
ZXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRlc3RzIGZvciBjdWJlIHRleHR1cmUg
Y29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4K
LWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAo
bUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLmdl
dEhlaWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7
IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1b
MF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIHx8Ci0gICAgICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEhlaWdodCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRGb3Jt
YXQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSB8fAotICAgICAgICAgICAgbUlt
YWdlQXJyYXlbZmFjZV1bMF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFw
Q3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHNpemUg
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotCi0gICAgaW50IHEgPSBsb2cyKHNpemUp
OwotCi0gICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAg
ICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUlt
YWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRU
eXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdl
dFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKLX0KLQotSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVy
ZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNv
dXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUK
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgc2l6
ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3Jl
YXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5
WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVz
YWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0g
ICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10
LCBkM2R1c2FnZSwgc2l6ZSk7Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQot
ICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3Ig
KGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlLCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNl
dE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlVGV4dHVyZSgpCi17Ci0gICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNl
KyspCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwotCi0g
ICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwg
aW1hZ2UtPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBU
ZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1J
bWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkg
c2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgICAgIEdMaW50IGxldmVs
cyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgICAgIERXT1JEIGQzZHVzYWdl
ID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSk7Ci0KLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKLQotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9IGxl
dmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBp
KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFu
YWdlZCgpKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkg
c291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
ZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3Rv
cmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRl
ZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7
Ci0KLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFn
ZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVDdWJl
TWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCi17Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09
IDEpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKLSAgICBNRVRBX0FTU0VSVChHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggPT0gMyk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
IC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwotICAgIE1FVEFfQVNTRVJU
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCA9PSA1KTsKLQotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBm
YWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSB0eXBlKQotewotICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlb
ZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2Up
OwotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdl
OwotICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0
KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVk
IHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9
IGZhY2VJbmRleCh0YXJnZXQpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIGlmICghbUlt
YWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewot
ICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1U
ZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdl
QXJyYXlbZmFjZWluZGV4XVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgQVNTRVJUKHdp
ZHRoID09IGhlaWdodCk7Ci0KLSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVs
Q291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAg
ICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQg
PSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7Ci0KLSAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwg
bGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3Jt
YXQsIDAsIDAsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQot
ewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZl
bF0uZ2V0V2lkdGgoKTsKLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPiBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQg
PSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4i
KTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgodGFyZ2V0KTsKLQotICAgIGlmICgh
bUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFt
VGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwot
Ci0gICAgICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAg
ICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWln
aHQ7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2Ut
PmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVz
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVu
ZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSwgeG9m
ZnNldCwgeW9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQotewotICAgIEdMZW51bSBmb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUg
PSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQg
PSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBEV09SRCBkM2R1
c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwotCi0gICAgZGVs
ZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwotICAgIG1JbW11dGFibGUgPSB0
cnVlOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykK
LSAgICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9y
bWF0LCBzaXplLCBzaXplLCB0eXBlLCB0cnVlKTsKLSAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1h
eCgxLCBzaXplID4+IDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2ZWwg
PSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmlu
ZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBp
bnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBm
YWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsKLSAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uo
c3VyZmFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCi17Ci0gICAgaWYgKCFpc0N1YmVDb21wbGV0
ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJl
KCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0
aCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAx
IHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBt
YXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5n
ZXRGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUlt
YWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAx
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0
VHlwZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGktMSk7Ci0gICAgICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVy
LCBsb3dlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVy
ICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvd2VyICE9
IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtm
XVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtp
XS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNl
KG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlb
Zl1baSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8g
bG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1SZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFw
OjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIUlzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7Ci0KLSAgICBpZiAobUZhY2VQcm94aWVz
W2ZhY2VdID09IE5VTEwpCi0gICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcg
UmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0
YXJnZXQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwotfQotCi0v
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1h
cDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcg
dGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmUoKTsK
LSAgICAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwg
MCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkKLXsKLSAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQg
JiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdl
dCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3Jl
YXRlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdl
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTNhMTYyLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1
cmUuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25j
cmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIElt
cGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJH
TEVTVjJfVEVYVFVSRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
LSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRl
ICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZWds
Ci17Ci1jbGFzcyBTdXJmYWNlOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci1j
bGFzcyBGcmFtZWJ1ZmZlcjsKLQotZW51bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11
bXMgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBHTCBj
YXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQgYmUg
cXVlcmllZCBmcm9tIHRoZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
U0laRSA9IDE2Mzg0LAotICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkUgPSAxNjM4NCwKLQotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1
ICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17Ci0g
IHB1YmxpYzoKLSAgICBJbWFnZSgpOwotICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmlu
ZShHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5
cGUsIGJvb2wgZm9yY2VSZWxlYXNlKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0
cnVlO30KLSAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBib29s
IGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQo
KSBjb25zdDsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9
Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7cmV0dXJuIG1IZWlnaHQ7fQotICAgIEdM
ZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQotICAgIEdMZW51bSBnZXRU
eXBlKCkgY29uc3Qge3JldHVybiBtVHlwZTt9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3Jl
dHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJm
YWNlKCk7Ci0KLSAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKTsKLSAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2
b2lkIGxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRGF0
YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxm
RmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVt
aW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlKTsKLQotICAgIHZvaWQgY3JlYXRlU3VyZmFj
ZSgpOwotCi0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25z
dCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwotCi0gICAgR0xzaXplaSBtV2lkdGg7
Ci0gICAgR0xzaXplaSBtSGVpZ2h0OwotICAgIEdMZW51bSBtRm9ybWF0OwotICAgIEdMZW51bSBt
VHlwZTsKLQotICAgIGJvb2wgbURpcnR5OwotCi0gICAgRDNEUE9PTCBtRDNEUG9vbDsgICAvLyBj
YW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFHRUQgc2luY2UgaXQg
bmVlZHMgdG8gYmUgbG9ja2FibGUuCi0gICAgRDNERk9STUFUIG1EM0RGb3JtYXQ7Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZQot
ewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpOwot
Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UoKTsKLQotICAgIGJvb2wgaXNSZW5kZXJUYXJn
ZXQoKSBjb25zdDsKLSAgICBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIEQzRFBPT0wgZ2V0
UG9vbCgpIGNvbnN0OwotICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQg
aW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QgPSAwOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKLQotICAg
IGNvbnN0IERXT1JEIG1EM0RVc2FnZTsKLSAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwotCi0g
ICAgY29uc3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25l
ZCBpbnQgaXNzdWVUZXh0dXJlU2VyaWFsKCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1D
dXJyZW50VGV4dHVyZVNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291
bnRPYmplY3QKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsK
LQotICAgIHZpcnR1YWwgflRleHR1cmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUYXJnZXQoKSBjb25zdCA9IDA7Ci0KLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVu
dW0gZmlsdGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBi
b29sIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFw
KTsKLSAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7Ci0KLSAgICBHTGVudW0gZ2V0TWlu
RmlsdGVyKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwotICAgIEdM
ZW51bSBnZXRXcmFwUygpIGNvbnN0OwotICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwotICAg
IEdMZW51bSBnZXRVc2FnZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3QgPSAwOwotCi0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0
dXJlKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKSA9IDA7Ci0KLSAgICBi
b29sIGhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0OwotICAgIGJvb2wgaGFzRGlydHlJbWFnZXMo
KSBjb25zdDsKLSAgICB2b2lkIHJlc2V0RGlydHkoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4
dHVyZVNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xl
bnVtIHRhcmdldCk7Ci0KLSAgICBib29sIGlzSW1tdXRhYmxlKCkgY29uc3Q7Ci0KLSAgICBzdGF0
aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWlu
dD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4g
VGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0
aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFn
ZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdl
KTsKLSAgICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0g
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1h
Z2UgKmltYWdlKTsKLQotICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KSBjb25zdDsKLSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNp
emUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAgIGludCBsZXZl
bENvdW50KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgQmxpdCAqZ2V0QmxpdHRlcigpOwotICAgIHN0
YXRpYyBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURp
cmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7Ci0KLSAgICBHTGVudW0g
bU1pbkZpbHRlcjsKLSAgICBHTGVudW0gbU1hZ0ZpbHRlcjsKLSAgICBHTGVudW0gbVdyYXBTOwot
ICAgIEdMZW51bSBtV3JhcFQ7Ci0gICAgYm9vbCBtRGlydHlQYXJhbWV0ZXJzOwotICAgIEdMZW51
bSBtVXNhZ2U7Ci0KLSAgICBib29sIG1EaXJ0eUltYWdlczsKLQotICAgIGJvb2wgbUltbXV0YWJs
ZTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsK
LQotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpID0gMDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVj
dDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBs
ZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQot
ICAgIElEaXJlY3QzRFRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bVJlbmRlclRhcmdldFNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0
dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQot
ICAgIH5UZXh0dXJlMkQoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIEdM
c2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0
KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQg
bGV2ZWwpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNv
bnN0OwotICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBib29s
IGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAg
dm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQg
Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFn
ZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFj
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJl
bmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyRCk7Ci0KLSAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgYm9v
bCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSk7Ci0gICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAg
ICBJbWFnZSBtSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwot
Ci0gICAgVGV4dHVyZVN0b3JhZ2UyRCAqbVRleFN0b3JhZ2U7Ci0gICAgZWdsOjpTdXJmYWNlICpt
U3VyZmFjZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlz
IGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwg
YXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRp
bmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBh
IGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIg
aGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBz
ZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBu
b3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIg
Km1Db2xvcmJ1ZmZlclByb3h5OwotICAgIHVuc2lnbmVkIGludCBtUHJveHlSZWZzOwotfTsKLQot
Y2xhc3MgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0g
IHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFU
IGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlQ3ViZU1hcCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJm
YWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOwot
Ci0gICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZUN1
YmVNYXAoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBh
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdl
dFRhcmdldCgpIGNvbnN0OwotICAgIAotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3Jt
YXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIGJvb2wgaXNDb21wcmVz
c2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1h
Z2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1ko
R0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
OwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAg
dm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVt
IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2
b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhl
bHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVm
ZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxl
ckNvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7
Ci0KLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwot
Ci0gIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSB0YXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVDdWJlTWFwKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRC
YXNlVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJ
bWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNlSW5kZXgs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgs
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIHR5cGUpOwotCi0gICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKLQotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAqbVRl
eFN0b3JhZ2U7Ci0KLSAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBp
cyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2Us
IGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5k
aW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUg
YSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVy
IGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUg
c2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwg
bm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVy
ICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWduZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsK
LX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hfClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzBmNDc1Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4
NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBWZXJ0ZXhEYXRhTWFuYWdlci5oOiBE
ZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBC
dWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhE
YXRhTWFuYWdlci5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLW5hbWVzcGFjZQotewotICAgIGVudW0g
eyBJTklUSUFMX1NUUkVBTV9CVUZGRVJfU0laRSA9IDEwMjQqMTAyNCB9OwotICAgIC8vIFRoaXMg
aGFzIHRvIGJlIGF0IGxlYXN0IDRrIG9yIGVsc2UgaXQgZmFpbHMgb24gQVRJIGNhcmRzLgotICAg
IGVudW0geyBDT05TVEFOVF9WRVJURVhfQlVGRkVSX1NJWkUgPSA0MDk2IH07Ci19Ci0KLW5hbWVz
cGFjZSBnbAotewotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAx
OwotCi1pbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSwgaW50IHNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IGF0dHJpYnV0ZS5zdHJpZGUoKTsKLSAg
ICByZXR1cm4gKHNpemUgLSBhdHRyaWJ1dGUubU9mZnNldCAlIHN0cmlkZSArIChzdHJpZGUgLSBh
dHRyaWJ1dGUudHlwZVNpemUoKSkpIC8gc3RyaWRlOwotfQotCi1WZXJ0ZXhEYXRhTWFuYWdlcjo6
VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtRGV2aWNlKGRldmljZSkKLXsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbURp
cnR5Q3VycmVudFZhbHVlW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlcltp
XSA9IE5VTEw7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gMDsKLSAgICB9Ci0K
LSAgICBjb25zdCBEM0RDQVBTOSAmY2FwcyA9IGNvbnRleHQtPmdldERldmljZUNhcHMoKTsKLSAg
ICBjaGVja1ZlcnRleENhcHMoY2Fwcy5EZWNsVHlwZXMpOwotCi0gICAgbVN0cmVhbWluZ0J1ZmZl
ciA9IG5ldyBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9TVFJFQU1fQlVG
RkVSX1NJWkUpOwotCi0gICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAg
RVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUgdGhlIHN0cmVhbWluZyB2ZXJ0ZXggYnVmZmVyLiIpOwot
ICAgIH0KLX0KLQotVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCi17Ci0g
ICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1DdXJyZW50VmFs
dWVCdWZmZXJbaV07Ci0gICAgfQotfQotCi1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
d3JpdGVBdHRyaWJ1dGVEYXRhKEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwg
R0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJ1dGUubUJv
dW5kQnVmZmVyLmdldCgpOwotCi0gICAgaW50IGlucHV0U3RyaWRlID0gYXR0cmlidXRlLnN0cmlk
ZSgpOwotICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYnV0ZS50eXBlU2l6ZSgpOwotICAgIGNv
bnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnV0
ZSk7Ci0gICAgc3RkOjpzaXplX3Qgc3RyZWFtT2Zmc2V0ID0gMDsKLQotICAgIHZvaWQgKm91dHB1
dCA9IE5VTEw7Ci0gICAgCi0gICAgaWYgKHZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG91
dHB1dCA9IHZlcnRleEJ1ZmZlci0+bWFwKGF0dHJpYnV0ZSwgc3BhY2VSZXF1aXJlZChhdHRyaWJ1
dGUsIGNvdW50LCBpbnN0YW5jZXMpLCAmc3RyZWFtT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBpZiAo
b3V0cHV0ID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4
IGJ1ZmZlci4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIg
KmlucHV0ID0gTlVMTDsKLQotICAgIGlmIChidWZmZXIpCi0gICAgewotICAgICAgICBpbnQgb2Zm
c2V0ID0gYXR0cmlidXRlLm1PZmZzZXQ7Ci0KLSAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oYnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0OwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWJ1dGUu
bVBvaW50ZXIpOwotICAgIH0KLQotICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWJ1dGUu
bURpdmlzb3IgPT0gMCkKLSAgICB7Ci0gICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3Rh
cnQ7Ci0gICAgfQotCi0gICAgaWYgKGNvbnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9
PSBlbGVtZW50U2l6ZSkKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3Vu
dCAqIGlucHV0U3RyaWRlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29udmVy
dGVyLmNvbnZlcnRBcnJheShpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwotICAg
IH0KLQotICAgIHZlcnRleEJ1ZmZlci0+dW5tYXAoKTsKLQotICAgIHJldHVybiBzdHJlYW1PZmZz
ZXQ7Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoR0xp
bnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQs
IEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAgIGNvbnN0IFZl
cnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0
ZXMoKTsKLSAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
KCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAg
ICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+
Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwotICAgIH0KLQotICAgIC8v
IERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5k
IGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0
dHJpYnV0ZXMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQotICAgIHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0u
bUFycmF5RW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyICpidWZmZXIgPSBh
dHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1
ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKSA6IE5VTEw7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+c2l6ZSgpID09IDApCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1l
bnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNCdWZmZXItPmFkZFJlcXVpcmVkU3BhY2Uoc3BhY2VSZXF1aXJlZChhdHRyaWJz
W2ldLCB0b3RhbENvdW50LCAwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRlKGF0dHJpYnNbaV0pID09IC0x
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGF0aWMg
YnVmZmVyIGRvZXNuJ3QgaGF2ZSBtYXRjaGluZyBhdHRyaWJ1dGVzLCBzbyBmYWxsIGJhY2sgdG8g
dXNpbmcgdGhlIHN0cmVhbWluZyBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRo
ZSBzcGFjZSBvZiBhbGwgcHJldmlvdXMgYXR0cmlidXRlcyBiZWxvbmdpbmcgdG8gdGhlIGludmFs
aWRhdGVkIHN0YXRpYyBidWZmZXIgdG8gdGhlIHN0cmVhbWluZyBidWZmZXIKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgcHJldmlvdXMgPSAwOyBwcmV2aW91cyA8IGk7IHByZXZpb3VzKysp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFu
c2xhdGVkW3ByZXZpb3VzXS5hY3RpdmUgJiYgYXR0cmlic1twcmV2aW91c10ubUFycmF5RW5hYmxl
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCdWZmZXIgKnByZXZpb3VzQnVmZmVyID0gYXR0cmlic1twcmV2aW91c10ubUJvdW5kQnVmZmVy
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAq
cHJldmlvdXNTdGF0aWNCdWZmZXIgPSBwcmV2aW91c0J1ZmZlciA/IHByZXZpb3VzQnVmZmVyLT5n
ZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhdGljQnVmZmVyID09IHByZXZpb3VzU3RhdGljQnVmZmVyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0
cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNbcHJl
dmlvdXNdLCBjb3VudCwgaW5zdGFuY2VzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgbVN0cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFj
ZVJlcXVpcmVkKGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0YW5jZXMpKTsKLQotICAgICAgICAgICAg
ICAgICAgICBidWZmZXItPmludmFsaWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAgICAgICAgICAgICAg
fSAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtU3RyZWFtaW5nQnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHNwYWNlUmVx
dWlyZWQoYXR0cmlic1tpXSwgY291bnQsIGluc3RhbmNlcykpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVzZXJ2ZSB0aGUgcmVxdWlyZWQgc3BhY2UgcGVyIHVz
ZWQgYnVmZmVyCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKLSAgICB7Ci0gICAgICAgIGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ld
Lm1BcnJheUVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0g
YXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0gICAgICAgICAgICBBcnJheVZlcnRleEJ1
ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKSA6IE5VTEw7Ci0gICAgICAgICAgICBBcnJheVZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVy
ID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogbVN0cmVhbWluZ0J1ZmZlcjsKLQotICAg
ICAgICAgICAgaWYgKHZlcnRleEJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB2ZXJ0ZXhCdWZmZXItPnJlc2VydmVSZXF1aXJlZFNwYWNlKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQZXJmb3JtIHRoZSB2ZXJ0ZXggZGF0YSB0cmFuc2xh
dGlvbnMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoYXR0cmlic1tpXS5tQXJyYXlFbmFibGVkKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlciAmJiBhdHRyaWJzW2ldLm1Qb2ludGVy
ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIGFuIGFwcGxpY2F0aW9uIGVycm9yIHRoYXQgd291bGQgbm9ybWFsbHkgcmVzdWx0IGluIGEg
Y3Jhc2gsIGJ1dCB3ZSBjYXRjaCBpdCBhbmQgcmV0dXJuIGFuIGVycm9yCi0gICAgICAgICAgICAg
ICAgICAgIEVSUigiQW4gZW5hYmxlZCB2ZXJ0ZXggYXJyYXkgaGFzIG5vIGJ1ZmZlciBhbmQgbm8g
cG9pbnRlci4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdENv
bnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnNbaV0pOwotCi0gICAg
ICAgICAgICAgICAgU3RhdGljVmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBi
dWZmZXItPmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBB
cnJheVZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVm
ZmVyIDogc3RhdGljX2Nhc3Q8QXJyYXlWZXJ0ZXhCdWZmZXIqPihtU3RyZWFtaW5nQnVmZmVyKTsK
LQotICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IHN0cmVhbU9mZnNldCA9IC0xOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRl
KGF0dHJpYnNbaV0pOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgPT0g
LTEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENv
bnZlcnQgdGhlIGVudGlyZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3Rh
bENvdW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNl
dCAvIGF0dHJpYnNbaV0uc3RyaWRlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVh
bU9mZnNldCA9IHdyaXRlQXR0cmlidXRlRGF0YShzdGF0aWNCdWZmZXIsIC1zdGFydEluZGV4LCB0
b3RhbENvdW50LCBhdHRyaWJzW2ldLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgIT0gLTEpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCArPSAoYXR0cmlic1tp
XS5tT2Zmc2V0IC8gYXR0cmlic1tpXS5zdHJpZGUoKSkgKiBjb252ZXJ0ZXIub3V0cHV0RWxlbWVu
dFNpemU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBh
dHRyaWJzW2ldLm1EaXZpc29yID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ICs9IHN0YXJ0ICogY29udmVydGVy
Lm91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHdyaXRl
QXR0cmlidXRlRGF0YShtU3RyZWFtaW5nQnVmZmVyLCBzdGFydCwgY291bnQsIGF0dHJpYnNbaV0s
IGluc3RhbmNlcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN0
cmVhbU9mZnNldCA9PSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0udmVydGV4QnVmZmVyID0gdmVydGV4QnVmZmVyLT5nZXRCdWZm
ZXIoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnNlcmlhbCA9IHZlcnRleEJ1ZmZl
ci0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0g
YXR0cmlic1tpXS5tRGl2aXNvcjsKLQotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlw
ZSA9IGNvbnZlcnRlci5kM2REZWNsVHlwZTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ld
LnN0cmlkZSA9IGNvbnZlcnRlci5vdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm9mZnNldCA9IHN0cmVhbU9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1DdXJyZW50
VmFsdWVCdWZmZXJbaV0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBt
Q3VycmVudFZhbHVlQnVmZmVyW2ldID0gbmV3IFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihtRGV2aWNl
LCBDT05TVEFOVF9WRVJURVhfQlVGRkVSX1NJWkUpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciAqYnVmZmVyID0gbUN1cnJlbnRWYWx1
ZUJ1ZmZlcltpXTsKLQotICAgICAgICAgICAgICAgIGlmIChtRGlydHlDdXJyZW50VmFsdWVbaV0p
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVxdWly
ZWRTcGFjZSA9IDQgKiBzaXplb2YoZmxvYXQpOwotICAgICAgICAgICAgICAgICAgICBidWZmZXIt
PmFkZFJlcXVpcmVkU3BhY2UocmVxdWlyZWRTcGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1
ZmZlci0+cmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
KmRhdGEgPSBzdGF0aWNfY2FzdDxmbG9hdCo+KGJ1ZmZlci0+bWFwKFZlcnRleEF0dHJpYnV0ZSgp
LCByZXF1aXJlZFNwYWNlLCAmbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0pKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhWzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzFdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1
ZVsyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gPSBhdHRyaWJzW2ldLm1DdXJy
ZW50VmFsdWVbM107Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnVubWFwKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtRGlydHlDdXJyZW50VmFsdWVbaV0gPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHRyYW5zbGF0ZWRbaV0udmVydGV4QnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXS0+Z2V0
QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zZXJpYWwgPSBtQ3VycmVu
dFZhbHVlQnVmZmVyW2ldLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVk
W2ldLmRpdmlzb3IgPSAwOwotCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50eXBlID0g
RDNEREVDTFRZUEVfRkxPQVQ0OwotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRl
ID0gMDsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFs
dWVPZmZzZXRzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAg
IGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRC
dWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChidWZmZXIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBhdHRyaWJz
W2ldLnR5cGVTaXplKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
c3BhY2VSZXF1aXJlZChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3Qg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSBjb25zdAotewotICAgIHNpemVfdCBlbGVtZW50U2l6
ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgaWYg
KGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVsZW1lbnRTaXplICogY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlbGVtZW50U2l6ZSAqICgoaW5zdGFuY2VzICsgYXR0cmliLm1EaXZpc29yIC0g
MSkgLyBhdHRyaWIubURpdmlzb3IpOwotICAgIH0KLX0KLQotLy8gTWFwcGluZyBmcm9tIE9wZW5H
TC1FUyB2ZXJ0ZXggYXR0cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAg
ICAgICAgICAgICAgICBTSE9SVCAoQ2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FU
IChOb3JtYWxpemUpIChjYW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0p
Ci0vLyBVTlNJR05FRF9CWVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2Fz
dCkKLS8vIFVOU0lHTkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAo
Tm9ybWFsaXplKQotLy8gU0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8g
U0hPUlQtbm9ybSAgICAgICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3Jt
YWxpemUpCi0vLyBVTlNJR05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVE
X1NIT1JULW5vcm0gIFVTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkK
LS8vIEZJWEVEIChub3QgaW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAg
ICAgICAgICAgICAgICBGTE9BVCAoSWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20g
R0wgdHlwZSAoYXMgR0xlbnVtKSB0byB0aGUgQyB0eXBlZGVmLiAKLXRlbXBsYXRlIDxHTGVudW0g
R0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9D
VHlwZTxHTF9CWVRFPiB7IHR5cGVkZWYgR0xieXRlIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+IHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiB7IHR5cGVkZWYgR0xzaG9y
dCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9S
VD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NU
eXBlPEdMX0ZJWEVEPiB7IHR5cGVkZWYgR0x1aW50IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyB9OwotCi0vLyBU
aGlzIGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXpl
IGV4cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAg
RDNEVlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAg
ICBEM0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9O
T1JNCi19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVu
dW0gRDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUg
PHVuc2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRl
IDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYg
c2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JU
X05PUk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRv
Q1R5cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5z
aWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRf
VVNIT1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNv
ZGUgdGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2gg
dHlwZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBh
cHByb3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQg
c2l6ZT4KLXN0cnVjdCBXaWRlblJ1bGUKLXsKLX07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3Ry
dWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6Tm9XaWRlbjxz
aXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hP
UlQsIHNpemU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRl
IDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAg
OiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3Qg
V2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRm91cjxz
aXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZ
VEVfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRl
IDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAg
OiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2Rl
cyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFn
IGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8
dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPgotc3RydWN0IFZlcnRleFR5cGVGbGFncwot
ewotfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjYXBmbGFnLCB1bnNpZ25lZCBpbnQgZGVj
bGZsYWc+Ci1zdHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNhcGZs
YWcgPSBjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gZGVjbGZsYWcgfTsKLX07Ci0K
LXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMT4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xU
WVBFX0ZMT0FUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQy
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JU
Mk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRf
Tk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERF
Q0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQs
IEQzRERFQ0xUWVBFX1VCWVRFND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENB
UFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hP
UlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRleFR5cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1h
bGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFz
IEQzRFZlcnRleFR5cGUgZW51bXMpLgotdGVtcGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9y
bWFsaXplZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZwotewotfTsKLQotdGVtcGxhdGUgPEQz
RFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVk
Pgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFzZQotewotICAgIGVudW0geyBwcmVmZXJyZWQg
PSBQcmVmZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFsbGJhY2sgPSBGYWxsYmFjayB9OwotfTsKLQot
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAg
ICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7
IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdM
X1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwg
Q2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZ
VEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VC
WVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAg
ICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsg
fTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAg
OiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBD
YXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hP
UlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNI
T1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxh
dGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBu
b3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRvRmxvYXQKLXRlbXBsYXRlIDxib29sIG5vcm1h
bGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWRlbnRpdHkKLQotCi0vLyBHaXZlbiBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5k
IGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHByb3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24g
cnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0eSwgRml4ZWRUb0Zsb2F0KS4KLS8vIFRoZSBj
b252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lv
bi5oLgotCi0vLyBBbG1vc3QgYWxsIGNhc2VzIGFyZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGlu
ZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVudGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3Mg
aXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJv
b2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRvVHlwZT4KLXN0cnVjdCBDb252ZXJzaW9uUnVs
ZSA6IGdsOjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1l
IEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4KLXsKLX07Ci0KLS8vIEFsbCBjb252ZXJzaW9ucyBm
cm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3BlcmF0b3Iu
Ci10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5
cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBl
PGZyb21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZv
ciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2Vu
ZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVy
c2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8
R0xpbnQsIDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklY
RUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9
OwotCi0vLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhW
YWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAv
MSkKLS8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCi10ZW1wbGF0ZSA8Y2xhc3Mg
VCwgYm9vbCBub3JtYWxpemVkPgotc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKLXsK
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdl
MjxULCB0cnVlPiAgOiBnbDo6Tm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6
IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1
bHQgdmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFu
ZCAKLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgRGVmYXVsdFZl
cnRleFZhbHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4KLXsK
LX07Ci0KLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFs
dWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7
IH07Ci0KLS8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ug
d2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8g
VGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkg
ZGV2aWNlcyBtdXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZl
cnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9Owot
Ci0vLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBl
L25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAot
Ly8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhE
YXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0v
LyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFy
YXRpb24gaW4gZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1h
bGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+
Ci1zdHJ1Y3QgQ29udmVydGVyCi0gICAgOiBnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFt
ZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwg
bm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5
cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVmYXVsdFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBW
ZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5v
cm1hbGl6ZWQgPiA+Ci17Ci1wcml2YXRlOgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5j
ZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07
Ci0gICAgZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lk
dGggfTsKLQotcHVibGljOgotICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQz
ZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4
VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlh
bGlzZSBhIFRyYW5zbGF0aW9uSW5mbwotI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBz
aXplLCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwg
c2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXpl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywg
XAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAg
ICAgICAgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFj
aykgICAgICAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlw
ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAg
IH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwg
MyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAot
ICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSks
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4
RGF0YU1hbmFnZXI6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVydGV4RGF0YU1hbmFnZXI6Om1Q
b3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAv
LyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6
ZS0xXQotewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xB
VElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9U
WVBFKEdMX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hP
UlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKLSAgICBU
UkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0KLXZvaWQgVmVydGV4
RGF0YU1hbmFnZXI6OmNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsr
KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlv
bnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNs
YXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNs
YXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1BdHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtq
XVtrXS5mYWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBUaGlzIGlzIHVzZWQgdG8gaW5kZXggbUF0dHJp
YnV0ZVR5cGVzIGFuZCBtUG9zc2libGVUcmFuc2xhdGlvbnMuCi11bnNpZ25lZCBpbnQgVmVydGV4
RGF0YU1hbmFnZXI6OnR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4g
MjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBH
TF9GSVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1WZXJ0ZXhC
dWZmZXI6OlZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90
IHNpemUsIERXT1JEIHVzYWdlRmxhZ3MpIDogbURldmljZShkZXZpY2UpLCBtVmVydGV4QnVmZmVy
KE5VTEwpCi17Ci0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29s
ID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKHVzYWdlRmxhZ3MpOwotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIHVzYWdlRmxhZ3Ms
IDAsIHBvb2wsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlzc3Vl
U2VyaWFsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1
ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4
QnVmZmVyOjp+VmVydGV4QnVmZmVyKCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVmVy
dGV4QnVmZmVyOjp1bm1hcCgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAg
ICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFZlcnRl
eEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVZlcnRleEJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6Z2V0U2VyaWFs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRl
eEJ1ZmZlcjo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwot
fQotCi1BcnJheVZlcnRleEJ1ZmZlcjo6QXJyYXlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKSA6IFZlcnRleEJ1
ZmZlcihkZXZpY2UsIHNpemUsIHVzYWdlRmxhZ3MpCi17Ci0gICAgbUJ1ZmZlclNpemUgPSBzaXpl
OwotICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKLSAgICBtUmVxdWlyZWRTcGFjZSA9IDA7Ci19Ci0K
LUFycmF5VmVydGV4QnVmZmVyOjp+QXJyYXlWZXJ0ZXhCdWZmZXIoKQotewotfQotCi12b2lkIEFy
cmF5VmVydGV4QnVmZmVyOjphZGRSZXF1aXJlZFNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSkKLXsK
LSAgICBtUmVxdWlyZWRTcGFjZSArPSByZXF1aXJlZFNwYWNlOwotfQotCi1TdHJlYW1pbmdWZXJ0
ZXhCdWZmZXI6OlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Us
IHN0ZDo6c2l6ZV90IGluaXRpYWxTaXplKSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgaW5p
dGlhbFNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpCi17Ci19Ci0K
LVN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6flN0cmVhbWluZ1ZlcnRleEJ1ZmZlcigpCi17Ci19Ci0K
LXZvaWQgKlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6bWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0
KQotewotICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0KLSAgICBpZiAobVZlcnRleEJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhtV3Jp
dGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAqb2Zmc2V0ID0gbVdy
aXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBTdHJlYW1pbmdWZXJ0ZXhCdWZm
ZXI6OnJlc2VydmVSZXF1aXJlZFNwYWNlKCkKLXsKLSAgICBpZiAobVJlcXVpcmVkU3BhY2UgPiBt
QnVmZmVyU2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVy
dGV4QnVmZmVyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gc3Rk
OjptYXgobVJlcXVpcmVkU3BhY2UsIDMgKiBtQnVmZmVyU2l6ZSAvIDIpOyAgIC8vIDEuNSB4IG1C
dWZmZXJTaXplIGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdlIGRv
bid0IGhhdmUgdG9vIG1hbnkgcmVhbGxvY2F0aW9ucy4KLQotICAgICAgICBEM0RQT09MIHBvb2wg
PSBnZXREaXNwbGF5KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdF
X1dSSVRFT05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVy
dGV4QnVmZmVyKG1CdWZmZXJTaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVP
TkxZLCAwLCBwb29sLCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBp
c3N1ZVNlcmlhbCgpOwotICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1
ZmZlciBvZiBzaXplICVsdS4iLCBtQnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
V3JpdGVQb3NpdGlvbiA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsg
bVJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkgICAvLyBSZWN5Y2xlCi0gICAgewotICAgICAg
ICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqZHVtbXk7
Ci0gICAgICAgICAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19E
SVNDQVJEKTsKLSAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotICAgICAgICB9
Ci0KLSAgICAgICAgbVdyaXRlUG9zaXRpb24gPSAwOwotICAgIH0KLQotICAgIG1SZXF1aXJlZFNw
YWNlID0gMDsKLX0KLQotU3RhdGljVmVydGV4QnVmZmVyOjpTdGF0aWNWZXJ0ZXhCdWZmZXIoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgMCwgRDNE
VVNBR0VfV1JJVEVPTkxZKQotewotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXI6On5TdGF0aWNWZXJ0
ZXhCdWZmZXIoKQotewotfQotCi12b2lkICpTdGF0aWNWZXJ0ZXhCdWZmZXI6Om1hcChjb25zdCBW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3Rk
OjpzaXplX3QgKnN0cmVhbU9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0g
ICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1W
ZXJ0ZXhCdWZmZXItPkxvY2sobVdyaXRlUG9zaXRpb24sIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIs
IDApOwotICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsK
LSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGF0dHJp
YnV0ZU9mZnNldCA9IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpOwotICAg
ICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7YXR0cmlidXRlLm1UeXBlLCBhdHRyaWJ1dGUu
bVNpemUsIGF0dHJpYnV0ZS5zdHJpZGUoKSwgYXR0cmlidXRlLm1Ob3JtYWxpemVkLCBhdHRyaWJ1
dGVPZmZzZXQsIG1Xcml0ZVBvc2l0aW9ufTsKLSAgICAgICAgbUNhY2hlLnB1c2hfYmFjayhlbGVt
ZW50KTsKLQotICAgICAgICAqc3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAg
IG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1h
cFB0cjsKLX0KLQotdm9pZCBTdGF0aWNWZXJ0ZXhCdWZmZXI6OnJlc2VydmVSZXF1aXJlZFNwYWNl
KCkKLXsKLSAgICBpZiAoIW1WZXJ0ZXhCdWZmZXIgJiYgbUJ1ZmZlclNpemUgPT0gMCkKLSAgICB7
Ci0gICAgICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RV
U0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVZlcnRleEJ1ZmZlcihtUmVxdWlyZWRTcGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBwb29s
LCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgp
OwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1
LiIsIG1SZXF1aXJlZFNwYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0g
bVJlcXVpcmVkU3BhY2U7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1WZXJ0ZXhCdWZmZXIgJiYgbUJ1
ZmZlclNpemUgPj0gbVJlcXVpcmVkU3BhY2UpCi0gICAgewotICAgICAgICAvLyBBbHJlYWR5IGFs
bG9jYXRlZAotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU3RhdGljIHZlcnRl
eCBidWZmZXJzIGNhbid0IGJlIHJlc2l6ZWQKLQotICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKLX0K
LQotc3RkOjpzaXplX3QgU3RhdGljVmVydGV4QnVmZmVyOjpsb29rdXBBdHRyaWJ1dGUoY29uc3Qg
VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZWxl
bWVudCA9IDA7IGVsZW1lbnQgPCBtQ2FjaGUuc2l6ZSgpOyBlbGVtZW50KyspCi0gICAgewotICAg
ICAgICBpZiAobUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCi0gICAg
ICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKLSAgICAg
ICAgICAgIG1DYWNoZVtlbGVtZW50XS5zdHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYmCi0g
ICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5vcm1h
bGl6ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmli
dXRlT2Zmc2V0ID09IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVbZWxlbWVudF0uc3RyZWFt
T2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0x
OwotfQotCi1jb25zdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhE
YXRhTWFuYWdlcjo6Zm9ybWF0Q29udmVydGVyKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlKSBjb25zdAotewotICAgIHJldHVybiBtQXR0cmlidXRlVHlwZXNbdHlwZUluZGV4KGF0dHJp
YnV0ZS5tVHlwZSldW2F0dHJpYnV0ZS5tTm9ybWFsaXplZF1bYXR0cmlidXRlLm1TaXplIC0gMV07
Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1ZlcnRleERhdGFNYW5hZ2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1
NzU5MWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZlcnRleERhdGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIFZl
cnRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKLS8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xh
dGlvbiBwcm9jZXNzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXwot
I2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYREFUQU1BTkFHRVJfSF8KLQotI2luY2x1ZGUgPHZlY3Rv
cj4KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFj
ZSBnbAotewotCi1zdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZQotewotICAgIGJvb2wgYWN0aXZl
OwotCi0gICAgRDNEREVDTFRZUEUgdHlwZTsKLSAgICBVSU5UIG9mZnNldDsKLSAgICBVSU5UIHN0
cmlkZTsgICAvLyAwIG1lYW5zIG5vdCB0byBhZHZhbmNlIHRoZSByZWFkIHBvaW50ZXIgYXQgYWxs
Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICp2ZXJ0ZXhCdWZmZXI7Ci0gICAgdW5zaWdu
ZWQgaW50IHNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgZGl2aXNvcjsKLX07Ci0KLWNsYXNzIFZl
cnRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0gICAgdmly
dHVhbCB+VmVydGV4QnVmZmVyKCk7Ci0KLSAgICB2b2lkIHVubWFwKCk7Ci0KLSAgICBJRGlyZWN0
M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0
U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJvdGVjdGVkOgotICAgIElEaXJlY3QzRERldmljZTkgKmNv
bnN0IG1EZXZpY2U7Ci0gICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1ZmZlcjsK
LQotICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNz
dWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcik7Ci19
OwotCi1jbGFzcyBBcnJheVZlcnRleEJ1ZmZlciA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKLXsKLSAg
cHVibGljOgotICAgIEFycmF5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
c3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0gICAgfkFycmF5VmVydGV4QnVm
ZmVyKCk7Ci0KLSAgICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNp
emU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgKm1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YnV0ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNl
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgpID0gMDsKLSAg
ICB2b2lkIGFkZFJlcXVpcmVkU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlKTsKLQotICBwcm90ZWN0
ZWQ6Ci0gICAgc3RkOjpzaXplX3QgbUJ1ZmZlclNpemU7Ci0gICAgc3RkOjpzaXplX3QgbVdyaXRl
UG9zaXRpb247Ci0gICAgc3RkOjpzaXplX3QgbVJlcXVpcmVkU3BhY2U7Ci19OwotCi1jbGFzcyBT
dHJlYW1pbmdWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgQXJyYXlWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVi
bGljOgotICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Us
IHN0ZDo6c2l6ZV90IGluaXRpYWxTaXplKTsKLSAgICB+U3RyZWFtaW5nVmVydGV4QnVmZmVyKCk7
Ci0KLSAgICB2b2lkICptYXAoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6
c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpzdHJlYW1PZmZzZXQpOwotICAgIHZv
aWQgcmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLX07Ci0KLWNsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZl
ciA6IHB1YmxpYyBBcnJheVZlcnRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
U3RhdGljVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7Ci0gICAgflN0YXRp
Y1ZlcnRleEJ1ZmZlcigpOwotCi0gICAgdm9pZCAqbWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqc3RyZWFt
T2Zmc2V0KTsKLSAgICB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNlKCk7Ci0KLSAgICBzdGQ6OnNp
emVfdCBsb29rdXBBdHRyaWJ1dGUoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOyAg
IC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSB2ZXJ0ZXggYnVmZmVyLCBvciAtMSBpZiBu
b3QgZm91bmQKLQotICBwcml2YXRlOgotICAgIHN0cnVjdCBWZXJ0ZXhFbGVtZW50Ci0gICAgewot
ICAgICAgICBHTGVudW0gdHlwZTsKLSAgICAgICAgR0xpbnQgc2l6ZTsKLSAgICAgICAgR0xzaXpl
aSBzdHJpZGU7Ci0gICAgICAgIGJvb2wgbm9ybWFsaXplZDsKLSAgICAgICAgaW50IGF0dHJpYnV0
ZU9mZnNldDsKLQotICAgICAgICBzdGQ6OnNpemVfdCBzdHJlYW1PZmZzZXQ7Ci0gICAgfTsKLQot
ICAgIHN0ZDo6dmVjdG9yPFZlcnRleEVsZW1lbnQ+IG1DYWNoZTsKLX07Ci0KLWNsYXNzIFZlcnRl
eERhdGFNYW5hZ2VyCi17Ci0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0
ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpiYWNrZW5kKTsKLSAgICB2aXJ0dWFsIH5WZXJ0
ZXhEYXRhTWFuYWdlcigpOwotCi0gICAgdm9pZCBkaXJ0eUN1cnJlbnRWYWx1ZShpbnQgaW5kZXgp
IHsgbURpcnR5Q3VycmVudFZhbHVlW2luZGV4XSA9IHRydWU7IH0KLQotICAgIEdMZW51bSBwcmVw
YXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJp
YnV0ZSAqb3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKLQotICAgIHN0ZDo6
c2l6ZV90IHNwYWNlUmVxdWlyZWQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6
c2l6ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgY29uc3Q7Ci0gICAgc3RkOjpzaXplX3Qg
d3JpdGVBdHRyaWJ1dGVEYXRhKEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwg
R0xzaXplaSBpbnN0YW5jZXMpOwotCi0gICAgQ29udGV4dCAqY29uc3QgbUNvbnRleHQ7Ci0gICAg
SURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURldmljZTsKLQotICAgIFN0cmVhbWluZ1ZlcnRleEJ1
ZmZlciAqbVN0cmVhbWluZ0J1ZmZlcjsKLQotICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlW01B
WF9WRVJURVhfQVRUUklCU107Ci0gICAgU3RyZWFtaW5nVmVydGV4QnVmZmVyICptQ3VycmVudFZh
bHVlQnVmZmVyW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgc3RkOjpzaXplX3QgbUN1cnJlbnRW
YWx1ZU9mZnNldHNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIC8vIEF0dHJpYnV0ZSBmb3Jt
YXQgY29udmVyc2lvbgotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAg
IGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwot
ICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBk
M2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTID0gNiB9OwotCi0gICAgRm9ybWF0Q29udmVydGVyIG1BdHRyaWJ1dGVUeXBlc1tOVU1fR0xf
VkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07ICAgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQg
YnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RydWN0IFRyYW5z
bGF0aW9uRGVzY3JpcHRpb24KLSAgICB7Ci0gICAgICAgIERXT1JEIGNhcHNGbGFnOwotICAgICAg
ICBGb3JtYXRDb252ZXJ0ZXIgcHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgRm9ybWF0Q29u
dmVydGVyIGZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBp
cyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRyaWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVHJh
bnNsYXRpb25EZXNjcmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9B
VFRSSUJfVFlQRVNdWzJdWzRdOyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5k
ZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0KLSAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhE
V09SRCBkZWNsVHlwZXMpOwotCi0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlw
ZSkgY29uc3Q7Ci0gICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29u
c3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpIGNvbnN0OwotfTsKLQotfQotCi0jZW5kaWYg
ICAvLyBMSUJHTEVTVjJfVkVSVEVYREFUQU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZmJhMjUzZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OTc1
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGxpYkdMRVN2Mi5jcHA6IEltcGxlbWVu
dHMgdGhlIGV4cG9ydGVkIE9wZW5HTCBFUyAyLjAgZnVuY3Rpb25zLgotCi0jZGVmaW5lIEdMX0FQ
SUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4K
LQotI2luY2x1ZGUgPGV4Y2VwdGlvbj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJj
b21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
U2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUXVlcnkuaCIKLQotYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8
IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAoZ2w6OmdldENvbnRleHQoKSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05v
blBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmIChsZXZlbCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKGdsOjppc1BvdzIod2lkdGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ly8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZy
b20gdGFibGUgMy40LgotYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlKQotewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNl
ZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdM
X1JHQjoKLSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQ6Ci0gICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNl
KTsKLSAgICB9Ci0KLSAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQot
ICAgIC8vIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJ
RF9PUEVSQVRJT04KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogot
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdC
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9
Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09F
UzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci19Ci1ib29sIHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXMyRChib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwot
ICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZl
bCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRl
eHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21w
cmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0
ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYg
aGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKGxldmVs
KSB8fAotICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KGxldmVs
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBh
cmFtc0N1YmUoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKLXsK
LSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0
dXJlLT5pc0NvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9y
bWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewotICAg
ICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRh
cmdldCwgMCkpIHx8Ci0gICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0
ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwg
bGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQo
dGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBm
b3IgY29tYmluYXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVh
ZFBpeGVscwotYm9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlKQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFf
NV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05f
Q09MT1JfUkVBRF9UWVBFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWV4dGVybiAiQyIKLXsKLQotdm9pZCBfX3N0ZGNhbGwgZ2xBY3RpdmVUZXh0dXJl
KEdMZW51bSB0ZXh0dXJlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRleHR1cmUgPSAweCVYKSIs
IHRleHR1cmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUg
PiBHTF9URVhUVVJFMCArIGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRBY3RpdmVTYW1wbGVyKHRleHR1cmUgLSBHTF9URVhUVVJFMCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xBdHRhY2hT
aGFkZXIoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgc2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4
dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+YXR0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJlZ2luUXVlcnlFWFQoR0xlbnVtIHRhcmdldCwgR0x1
aW50IGlkKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCAlZCki
LCB0YXJnZXQsIGlkKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAot
ICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0g
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
ZCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bEJpbmRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBH
TGNoYXIqIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQg
aW5kZXggPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBpbmRl
eCwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHN0cm5jbXAobmFtZSwgImdsXyIsIDMpID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+YmluZEF0
dHJpYnV0ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTHVpbnQgYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBidWZmZXIpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9C
VUZGRVI6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEFycmF5QnVmZmVyKGJ1ZmZlcik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlC
dWZmZXIoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1
aW50IGZyYW1lYnVmZmVyKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
dWludCBmcmFtZWJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgZnJhbWVidWZmZXIpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAh
PSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVG
RkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSB8fCB0
YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZFJlYWRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfRFJBV19GUkFNRUJV
RkZFUl9BTkdMRSB8fCB0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+YmluZERyYXdGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQs
IEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IHJlbmRlcmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZFRl
eHR1cmUoR0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpCi17Ci0gICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IHRleHR1cmUgPSAlZCkiLCB0YXJnZXQsIHRleHR1cmUp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1
cmUodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0ICYmIHRleHR1cmVP
YmplY3QtPmdldFRhcmdldCgpICE9IHRhcmdldCAmJiB0ZXh0dXJlICE9IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5iaW5kVGV4dHVyZTJEKHRleHR1cmUpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZENvbG9y
KEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFs
cGhhKQotewotICAgIEVWRU5UKCIoR0xjbGFtcGYgcmVkID0gJWYsIEdMY2xhbXBmIGdyZWVuID0g
JWYsIEdMY2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFtcGYgYWxwaGEgPSAlZikiLAotICAgICAgICAg
IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRDb2xv
cihnbDo6Y2xhbXAwMShyZWQpLCBnbDo6Y2xhbXAwMShncmVlbiksIGdsOjpjbGFtcDAxKGJsdWUp
LCBnbDo6Y2xhbXAwMShhbHBoYSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlvbihHTGVudW0gbW9k
ZSkKLXsKLSAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlLCBtb2RlKTsKLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51
bSBtb2RlQWxwaGEpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZVJHQiA9IDB4JVgsIEdMZW51
bSBtb2RlQWxwaGEgPSAweCVYKSIsIG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobW9kZVJHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfRlVOQ19BREQ6Ci0gICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgotICAgICAgICAg
IGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChtb2RlQWxwaGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgotICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFD
VDoKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9k
ZUFscGhhKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVuYyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0
b3IpCi17Ci0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzZmFjdG9yLCBkZmFjdG9yLCBzZmFjdG9y
LCBkZmFjdG9yKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVu
dW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBo
YSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBzcmNSR0IgPSAweCVYLCBHTGVudW0gZHN0UkdCID0g
MHglWCwgR0xlbnVtIHNyY0FscGhhID0gMHglWCwgR0xlbnVtIGRzdEFscGhhID0gMHglWCkiLAot
ICAgICAgICAgIHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHNyY1JHQikKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNlIEdMX09ORToKLSAgICAgICAgICBjYXNlIEdMX1NS
Q19DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6Ci0gICAgICAg
ICAgY2FzZSBHTF9EU1RfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NP
TE9SOgotICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05F
X01JTlVTX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKLSAgICAgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFO
VF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKLSAg
ICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0NPTlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRF
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNo
IChkc3RSR0IpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAg
Y2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgot
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdM
X1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAg
ICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNU
X0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFO
VF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoc3Jj
QWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2Fz
ZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAg
ICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NS
Q19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAg
ICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FM
UEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAg
ICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZHN0QWxwaGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAg
Y2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9S
OgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBj
YXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6
Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRf
Q09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY29uc3RhbnRDb2xvclVzZWQgPSAoc3JjUkdCID09
IEdMX0NPTlNUQU5UX0NPTE9SIHx8IHNyY1JHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSR0IgPT0gR0xfQ09O
U1RBTlRfQ09MT1IgfHwgZHN0UkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUik7Ci0K
LSAgICAgICAgYm9vbCBjb25zdGFudEFscGhhVXNlZCA9IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRf
QUxQSEEgfHwgc3JjUkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJHQiA9PSBHTF9DT05TVEFOVF9BTFBIQSB8
fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKTsKLQotICAgICAgICBpZiAo
Y29uc3RhbnRDb2xvclVzZWQgJiYgY29uc3RhbnRBbHBoYVVzZWQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiU2ltdWx0YW5lb3VzIHVzZSBvZiBHTF9DT05TVEFOVF9BTFBIQS9HTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEEgYW5kIEdMX0NPTlNUQU5UX0NPTE9SL0dMX09ORV9NSU5VU19D
T05TVEFOVF9DT0xPUiBpbnZhbGlkIHVuZGVyIFdlYkdMIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3Jz
KHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQnVmZmVyRGF0
YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSwgR0xl
bnVtIHVzYWdlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWlw
dHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwLCBHTGVudW0gdXNhZ2Ug
PSAlZCkiLAotICAgICAgICAgIHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRj
aCAodXNhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1NUUkVBTV9EUkFXOgotICAg
ICAgICAgIGNhc2UgR0xfU1RBVElDX0RSQVc6Ci0gICAgICAgICAgY2FzZSBHTF9EWU5BTUlDX0RS
QVc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9
IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXItPmJ1ZmZl
ckRhdGEoZGF0YSwgc2l6ZSwgdXNhZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQnVmZmVyU3ViRGF0YShHTGVudW0g
dGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNl
dCA9ICVkLCBHTHNpemVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44
cCkiLAotICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCAwIHx8IG9mZnNldCA8IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6
Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVy
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQgPiBidWZmZXItPnNpemUoKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlci0+YnVmZmVyU3ViRGF0
YShkYXRhLCBzaXplLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0
YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAh
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVG
RkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0g
Y29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xiaXRmaWVs
ZCBtYXNrID0gJVgpIiwgbWFzayk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsQ2xlYXJDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBi
bHVlLCBHTGNsYW1wZiBhbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHJlZCA9ICVmLCBH
TGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYsIEdMY2xhbXBmIGFscGhhID0g
JWYpIiwKLSAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xl
YXJEZXB0aGYoR0xjbGFtcGYgZGVwdGgpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiBkZXB0aCA9
ICVmKSIsIGRlcHRoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJEZXB0aChkZXB0aCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xDbGVhclN0ZW5jaWwoR0xpbnQgcykKLXsKLSAgICBFVkVOVCgiKEdMaW50IHMgPSAl
ZCkiLCBzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJTdGVuY2lsKHMpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
Q29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUs
IEdMYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xi
b29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9
ICVkKSIsCi0gICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRDb2xvck1hc2socmVkID09IEdMX1RSVUUsIGdyZWVuID09IEdMX1RSVUUsIGJsdWUg
PT0gR0xfVFJVRSwgYWxwaGEgPT0gR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb21waWxlU2hhZGVyKEdM
dWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVy
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVy
KHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBzaGFkZXJPYmplY3QtPmNvbXBpbGUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lk
KiBkYXRhKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVs
ID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwg
IiAKLSAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsIEdM
c2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKLSAg
ICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBpbWFnZVNpemUsIGRhdGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoIXZh
bGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBpbWFn
ZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lk
dGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
RGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhp
bXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+
IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhv
dWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3Mg
YXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2Us
IGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGltYWdl
U2l6ZSAhPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Zm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRDb21wcmVzc2VkSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBp
bWFnZVNpemUsIGRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRh
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQotewotICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQg
PSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAl
ZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAg
ICAiR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCki
LAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgIXZhbGlkSW1hZ2VTaXplKGxl
dmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBpbWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0
dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJu
YWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1
cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUg
aW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3Vn
aCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNv
bXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAl
IDQgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOyAvLyB3ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGls
IHRoaXMgcG9pbnQsIGJlY2F1c2UgdGhlIG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2Vz
IG5vdCBleGlzdCB1bmxlc3MgRFhUIHRleHR1cmVzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXMyRCh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0
LCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1
cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0
KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwg
eG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJl
c3NlZCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKQotewotICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0g
JWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVy
ID0gJWQpIiwKLSAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCF2
YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVMZXZlbCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoK
LSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVE
aW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNv
bnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3
aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZl
bCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVy
LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyKCk7Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2Ut
PmdldEludGVybmFsRm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0
XSB0YWJsZSAzLjkKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX0FMUEhBICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0IgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVw
dGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGlu
dCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTGludCB4
ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9
ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxldmVs
IDwgMCB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXpl
aT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXpl
aT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZy
YW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKCk7Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQg
PSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JH
QkE7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9O
T05FLCB0ZXgyZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgy
ZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpOwotICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0
ZXgyZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
LQotICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2Us
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUs
IHRleGN1YmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4Y3Vi
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IHRleGN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAg
ICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfQUxQSEEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9S
R0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQiAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1NjUgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCOF9PRVMgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JB
NCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0Ex
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09F
UykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVf
QU5HTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0x1aW50IF9fc3Rk
Y2FsbCBnbENyZWF0ZVByb2dyYW0odm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUdMdWludCBfX3N0
ZGNhbGwgZ2xDcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0g
dHlwZSA9IDB4JVgpIiwgdHlwZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+
Y3JlYXRlU2hhZGVyKHR5cGUpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDApOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDdWxsRmFjZShHTGVudW0gbW9kZSkKLXsKLSAgICBF
VkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoK
LSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFD
SzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxs
TW9kZShtb2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWkgbiwgY29uc3Qg
R0x1aW50KiBidWZmZXJzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcnNb
aV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRmVuY2VzTlYoR0xzaXplaSBuLCBj
b25zdCBHTHVpbnQqIGZlbmNlcykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25z
dCBHTHVpbnQqIGZlbmNlcyA9IDB4JTAuOHApIiwgbiwgZmVuY2VzKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZShmZW5jZXNb
aV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRnJhbWVidWZmZXJzKEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4g
PSAlZCwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZyYW1lYnVm
ZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGZy
YW1lYnVmZmVyc1tpXSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXJzW2ldKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVQcm9ncmFtKEdMdWludCBw
cm9ncmFtKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFNoYWRlcihw
cm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xEZWxldGVRdWVyaWVzRVhUKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICppZHMpCi17Ci0g
ICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50ICppZHMgPSAweCUwLjhwKSIs
IG4sIGlkcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+ZGVsZXRlUXVlcnkoaWRzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCi17
Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJz
ID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTaGFkZXIoR0x1aW50IHNo
YWRlcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoc2hhZGVyID09IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcikpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxl
dGVUZXh0dXJlcyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgRVZF
TlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwg
biwgdGV4dHVyZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlc1tpXSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQotewot
ICAgIEVWRU5UKCIoR0xlbnVtIGZ1bmMgPSAweCVYKSIsIGZ1bmMpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBzd2l0Y2ggKGZ1bmMpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05F
VkVSOgotICAgICAgICAgIGNhc2UgR0xfQUxXQVlTOgotICAgICAgICAgIGNhc2UgR0xfTEVTUzoK
LSAgICAgICAgICBjYXNlIEdMX0xFUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX0VRVUFMOgotICAg
ICAgICAgIGNhc2UgR0xfR1JFQVRFUjoKLSAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKLSAgICAg
ICAgICBjYXNlIEdMX05PVEVRVUFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0RGVwdGhGdW5jKGZ1bmMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBm
bGFnKQotewotICAgIEVWRU5UKCIoR0xib29sZWFuIGZsYWcgPSAlZCkiLCBmbGFnKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+c2V0RGVwdGhNYXNrKGZsYWcgIT0gR0xfRkFMU0UpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVw
dGhSYW5nZWYoR0xjbGFtcGYgek5lYXIsIEdMY2xhbXBmIHpGYXIpCi17Ci0gICAgRVZFTlQoIihH
TGNsYW1wZiB6TmVhciA9ICVmLCBHTGNsYW1wZiB6RmFyID0gJWYpIiwgek5lYXIsIHpGYXIpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zZXREZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERl
dGFjaFNoYWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFk
ZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9
IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlNo
YWRlciAqc2hhZGVyQnlQcm9ncmFtSGFuZGxlOwotICAgICAgICAgICAgICAgIHNoYWRlckJ5UHJv
Z3JhbUhhbmRsZSA9IGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXNoYWRlckJ5UHJvZ3JhbUhhbmRsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtQnlT
aGFkZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQnlTaGFkZXJIYW5kbGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QtPmRldGFjaFNoYWRlcihzaGFkZXJPYmplY3QpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xEaXNhYmxlKEdMZW51bSBjYXApCi17Ci0gICAgRVZFTlQoIihHTGVudW0gY2Fw
ID0gMHglWCkiLCBjYXApOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZp
bGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhB
X1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNv
bnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3Nv
clRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2Up
OyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5
cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpCi17Ci0gICAgRVZFTlQo
IihHTGVudW0gbW9kZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCkiLCBtb2RlLCBmaXJzdCwgY291bnQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
Y291bnQgPCAwIHx8IGZpcnN0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJz
dCwgY291bnQsIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51bSBt
b2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpCi17Ci0g
ICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgR0xzaXplaSBwcmltY291bnQgPSAlZCkiLCBtb2RlLCBmaXJzdCwgY291bnQs
IHByaW1jb3VudCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwg
Zmlyc3QgPCAwIHx8IHByaW1jb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcmlt
Y291bnQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVt
ZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCogaW5kaWNlcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBj
b3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4
JTAuOHApIiwKLSAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2Rl
LCBjb3VudCwgdHlwZSwgaW5kaWNlcywgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0g
bW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25z
dCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwLCBHTHNpemVpIHByaW1jb3VudCA9ICVkKSIsCi0g
ICAgICAgICAgbW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIHByaW1jb3VudCk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgcHJpbWNvdW50IDwgMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHByaW1jb3VudCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJi
aXRJbmRpY2VzKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAgICAKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgcHJpbWNvdW50KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEVuYWJsZShHTGVudW0gY2FwKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRDdWxsRmFjZSh0cnVlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdv
bk9mZnNldEZpbGwodHJ1ZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1Q
TEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0
cnVlKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAg
ICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0
U2Npc3NvclRlc3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUp
OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0QmxlbmQodHJ1ZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVl
KTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeUVY
VChHTGVudW0gdGFyZ2V0KQotewotICAgIEVWRU5UKCJHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0
YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAg
ICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZW5kUXVlcnkodGFyZ2V0KTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEZpbmlzaEZlbmNlTlYoR0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50
IGZlbmNlID0gJWQpIiwgZmVuY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0g
Y29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3Qg
PT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5jZU9i
amVjdC0+ZmluaXNoRmVuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEZpbmlzaCh2b2lkKQotewotICAgIEVWRU5U
KCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW5jKHRydWUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRmx1c2godm9p
ZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c3luYyhmYWxzZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0
YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9
IDB4JVgsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQgPSAweCVYLCAiCi0gICAgICAgICAgIkdM
dWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJf
QU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAg
ICB8fCAocmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUiAmJiByZW5kZXJidWZm
ZXIgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAg
ICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1
ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0
RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVy
ICE9IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
YXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMDoKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIo
R0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVy
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0
dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQs
IEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSB0ZXh0YXJnZXQgPSAw
eCVYLCAiCi0gICAgICAgICAgIkdMdWludCB0ZXh0dXJlID0gJWQsIEdMaW50IGxldmVsID0gJWQp
IiwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJn
ZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFN
RUJVRkZFUl9BTkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOgotICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRU
QUNITUVOVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IDAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9ORTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQot
ICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRU
YXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXgyZCA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRh
cmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJl
Q3ViZU1hcCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlz
Q29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxldmVsICE9IDApCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIEdM
dWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRs
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7
Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJh
bWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZyYW1l
YnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogIGZyYW1lYnVmZmVyLT5zZXRD
b2xvcmJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRl
eHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRl
eHR1cmUpOyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEZyb250RmFjZShHTGVudW0g
bW9kZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9DVzoKLSAgICAgICAgICBjYXNlIEdMX0NDVzoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGcm9udEZhY2UobW9kZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsR2VuQnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogYnVmZmVycykKLXsKLSAgICBFVkVOVCgi
KEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlcnNbaV0g
PSBjb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbmVy
YXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCkiLCB0YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgw
KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzRGVwdGgoMCkpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0
ZXgyZC0+Z2VuZXJhdGVNaXBtYXBzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVyYXRlTWlwbWFwcygp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbkZlbmNlc05WKEdMc2l6ZWkgbiwg
R0x1aW50KiBmZW5jZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBm
ZW5jZXMgPSAweCUwLjhwKSIsIG4sIGZlbmNlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCog
ZnJhbWVidWZmZXJzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogZnJh
bWVidWZmZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5RdWVyaWVzRVhU
KEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwg
R0x1aW50KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWRzW2ldID0gY29udGV4dC0+Y3JlYXRlUXVlcnkoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQq
IHJlbmRlcmJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBy
ZW5kZXJidWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZW5kZXJidWZmZXJzW2ldID0gY29udGV4
dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0
dXJlcyhHTHNpemVpIG4sIEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVp
IG4gPSAlZCwgR0x1aW50KiB0ZXh0dXJlcyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlc1tpXSA9IGNv
bnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2
ZUF0dHJpYihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQot
ewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdM
c2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpICpsZW5ndGggPSAweCUwLjhwLCAiCi0gICAgICAg
ICAgIkdMaW50ICpzaXplID0gMHglMC44cCwgR0xlbnVtICp0eXBlID0gJTAuOHAsIEdMY2hhciAq
bmFtZSA9ICUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0
aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZz
aXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0
dHJpYnV0ZUNvdW50KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9n
cmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6
ZSwgdHlwZSwgbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3JtKEdMdWludCBwcm9ncmFt
LCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCog
c2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsICIK
LSAgICAgICAgICAiR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQqIHNpemUgPSAweCUw
LjhwLCBHTGVudW0qIHR5cGUgPSAweCUwLjhwLCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsCi0g
ICAgICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFt
ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRl
eCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZl
VW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwg
R0xzaXplaSogY291bnQsIEdMdWludCogc2hhZGVycykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBw
cm9ncmFtID0gJWQsIEdMc2l6ZWkgbWF4Y291bnQgPSAlZCwgR0xzaXplaSogY291bnQgPSAweCUw
LjhwLCBHTHVpbnQqIHNoYWRlcnMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgbWF4
Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG1h
eGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnMobWF4
Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi1pbnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50
IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9n
cmFtID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9ICVzKSIsIHByb2dyYW0sIG5hbWUpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0KLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUsIC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgLTEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcHJv
Z3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsR2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFt
cykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMYm9vbGVhbiogcGFyYW1z
ID0gMHglMC44cCkiLCAgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdl
dEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFy
YW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVy
SW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChu
dW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93
biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFt
cyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRb
bnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5h
bWUsIGZsb2F0UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRQYXJhbXNbaV0gPT0gMC4wZikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBH
TF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIFtdIGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg
ICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50UGFyYW1z
W2ldID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfRkFM
U0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhw
KSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsK
LQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJv
dW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldAotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
QlVGRkVSX1VTQUdFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJ
WkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi1HTGVudW0gX19zdGRjYWxsIGdsR2V0RXJyb3Iodm9pZCkKLXsK
LSAgICBFVkVOVCgiKCkiKTsKLQotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKLQotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmdldEVycm9yKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEdldEZlbmNlaXZOVihHTHVpbnQgZmVuY2UsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkLCBHTGVudW0g
cG5hbWUgPSAweCVYLCBHTGludCAqcGFyYW1zID0gMHglMC44cCkiLCBmZW5jZSwgcG5hbWUsIHBh
cmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5n
ZXRGZW5jZShmZW5jZSk7Ci0KLSAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZlbmNlT2JqZWN0LT5nZXRG
ZW5jZWl2KHBuYW1lLCBwYXJhbXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwg
R0xmbG9hdCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xm
bG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEo
Y29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5
UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBp
dCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5v
IHBhcmFtZXRlcnMgdG8gcmV0dXJuLgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMg
PSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09
IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAg
ICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFt
czsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoR0xmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xl
bnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1z
ID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHBhcmFt
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdM
X0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJf
QU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFE
X0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdG
cmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gYXR0YWNo
bWVudFR5cGU7Ci0gICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5
cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAg
YXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgpOyAK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRB
Q0hNRU5UOiAgICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRs
ZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAKLSAg
ICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyVHlwZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRPYmplY3RUeXBlOyAgIC8v
IFR5cGUgY2F0ZWdvcnkKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50VHlwZSA9PSBHTF9OT05F
IHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IGF0dGFjaG1lbnRUeXBlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KGF0dGFjaG1lbnRUeXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdHRh
Y2htZW50T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
YWNobWVudE9iamVjdFR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKLSAgICAgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFj
aG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNo
bWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5v
dCBhbGxvdyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKHZv
aWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlc2V0U3RhdHVz
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9PVVRfT0Zf
TUVNT1JZOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VydihHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVY
LCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCEoY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgICAg
ICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFy
YW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdM
X0JPT0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3
IEdMYm9vbGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9G
QUxTRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAg
ICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJhbXNdOwotCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1z
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9PSBHTF9DT0xPUl9DTEVBUl9WQUxV
RSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9CTEVORF9D
T0xPUikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKCgoR0xmbG9hdCkoMHhGRkZGRkZGRikgKiBmbG9hdFBh
cmFtc1tpXSAtIDEuMGYpIC8gMi4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gKEdMaW50KShmbG9hdFBhcmFtc1tpXSA+IDAuMGYgPyBmbG9vcihmbG9hdFBhcmFt
c1tpXSArIDAuNSkgOiBjZWlsKGZsb2F0UGFyYW1zW2ldIC0gMC41KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdM
dWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9
IDB4JTAuOHApIiwgcHJvZ3JhbSwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERUxFVEVfU1RBVFVTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5VTEw7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RI
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nTGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FU
VEFDSEVEX1NIQURFUlM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3Qt
PmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9BVFRSSUJVVEVTOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRF
X01BWF9MRU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdl
dEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhf
TEVOR1RIOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3Rp
dmVVbmlmb3JtTWF4TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVM6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpCi17Ci0gICAg
RVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXpl
aSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAgICAg
ICAgIHByb2dyYW0sIGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRR
dWVyeWl2RVhUKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsK
LSAgICBFVkVOVCgiR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdM
aW50ICpwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
cGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFyZ2V0KTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdl
dFF1ZXJ5T2JqZWN0dWl2RVhUKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFt
cykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpZCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBH
THVpbnQgKnBhcmFtcyA9IDB4JTAuOHApIiwgaWQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0FW
QUlMQUJMRV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVy
eU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAg
ICAgICAgIGlmICghcXVlcnlPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBl
KCkpID09IGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRj
aChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNV
TFRfRVhUOgotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1
bHQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVS
WV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBxdWVy
eU9iamVjdC0+aXNSZXN1bHRBdmFpbGFibGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
UkVOREVSQlVGRkVSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBjb250
ZXh0LT5nZXRSZW5kZXJidWZmZXIoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkpOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9XSURUSDogICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJi
dWZmZXItPmdldFdpZHRoKCk7ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1JFTkRFUkJVRkZFUl9IRUlHSFQ6ICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdl
dEhlaWdodCgpOyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUl9JTlRFUk5BTF9GT1JNQVQ6ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEludGVybmFs
Rm9ybWF0KCk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9SRURf
U0laRTogICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOiAg
ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEdyZWVuU2l6ZSgpOyAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkU6ICAgICAgICpwYXJh
bXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7ICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5k
ZXJidWZmZXItPmdldEFscGhhU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXIt
PmdldERlcHRoU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRF
UkJVRkZFUl9TVEVOQ0lMX1NJWkU6ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFN0ZW5j
aWxTaXplKCk7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9T
QU1QTEVTX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0U2hhZGVyaXYoR0x1aW50IHNoYWRlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFy
YW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTGVudW0gcG5hbWUgPSAl
ZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2hhZGVyLCBwbmFtZSwgcGFyYW1zKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRl
cik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9TSEFERVJfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hh
ZGVyT2JqZWN0LT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNo
YWRlck9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+aXNDb21waWxlZCgpID8gR0xfVFJVRSA6IEdMX0ZB
TFNFOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTkZP
X0xPR19MRU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0
SW5mb0xvZ0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
c2hhZGVyT2JqZWN0LT5nZXRTb3VyY2VMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9B
TkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xh
dGVkU291cmNlTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVySW5mb0xvZyhHTHVpbnQgc2hhZGVy
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQotewot
ICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xz
aXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAg
ICAgICAgIHNoYWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3Qg
PSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJP
YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzaGFkZXJPYmplY3Qt
PmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUs
IEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBz
aGFkZXJ0eXBlID0gMHglWCwgR0xlbnVtIHByZWNpc2lvbnR5cGUgPSAweCVYLCBHTGludCogcmFu
Z2UgPSAweCUwLjhwLCBHTGludCogcHJlY2lzaW9uID0gMHglMC44cCkiLAotICAgICAgICAgIHNo
YWRlcnR5cGUsIHByZWNpc2lvbnR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBzd2l0Y2ggKHNoYWRlcnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1ZFUlRFWF9TSEFERVI6Ci0gICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KHByZWNpc2lvbnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0xPV19GTE9BVDoK
LSAgICAgICAgICBjYXNlIEdMX01FRElVTV9GTE9BVDoKLSAgICAgICAgICBjYXNlIEdMX0hJR0hf
RkxPQVQ6Ci0gICAgICAgICAgICAvLyBBc3N1bWUgSUVFRSA3NTQgcHJlY2lzaW9uCi0gICAgICAg
ICAgICByYW5nZVswXSA9IDEyNzsKLSAgICAgICAgICAgIHJhbmdlWzFdID0gMTI3OwotICAgICAg
ICAgICAgKnByZWNpc2lvbiA9IDIzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9MT1dfSU5UOgotICAgICAgICAgIGNhc2UgR0xfTUVESVVNX0lOVDoKLSAgICAgICAgICBj
YXNlIEdMX0hJR0hfSU5UOgotICAgICAgICAgICAgLy8gU29tZSAobW9zdCkgaGFyZHdhcmUgb25s
eSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsCi0gICAg
ICAgICAgICAvLyB3aGljaCBjYW4gYWNjdXJhdGVseSByZXByZXNlbnQgaW50ZWdlcnMgdXAgdG8g
Ky8tMTY3NzcyMTYKLSAgICAgICAgICAgIHJhbmdlWzBdID0gMjQ7Ci0gICAgICAgICAgICByYW5n
ZVsxXSA9IDI0OwotICAgICAgICAgICAgKnByZWNpc2lvbiA9IDA7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKQotewotICAgIEVWRU5U
KCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xjaGFyKiBzb3VyY2UgPSAweCUwLjhwKSIsCi0gICAgICAgICAgc2hh
ZGVyLCBidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+
Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0U291
cmNlKGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxl
bmd0aCwgR0xjaGFyKiBzb3VyY2UpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQs
IEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIq
IHNvdXJjZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwg
c291cmNlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQot
ICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xhdGVkU291cmNlKGJ1ZnNpemUs
IGxlbmd0aCwgc291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi1jb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmcoR0xlbnVtIG5h
bWUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbmFtZSA9IDB4JVgpIiwgbmFtZSk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgc3dpdGNoIChuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9WRU5ET1I6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJHb29nbGUgSW5j
LiI7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJFUjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1
Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6
ICJBTkdMRSIpOwotICAgICAgICAgIGNhc2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVy
biAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICJWRVJTSU9OX1NUUklORyIpIjsKLSAg
ICAgICAgICBjYXNlIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJl
dHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKEFOR0xFICJWRVJTSU9OX1NU
UklORyIpIjsKLSAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1
cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0
cmluZygpIDogIiIpOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0ZSopTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIChHTHVieXRlKilOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0VGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZs
b2F0KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVt
IHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1l
LCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQotICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1M6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdy
YXBTKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUt
PmdldFdyYXBUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUX0VYVDoKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKEdMZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
VVNBR0VfQU5HTEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUt
PmdldFVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1B
VF9FWFQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkg
PyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gdGV4dHVyZS0+Z2V0VXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50IHBy
b2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMZmxvYXQqIHBhcmFtcykK
LXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsCi0gICAg
ICAgICAgcHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmIChidWZTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2
KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xm
bG9hdCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2Nh
dGlvbiwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9u
LCBOVUxMLCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRu
VW5pZm9ybWl2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZT
aXplLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwg
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMaW50KiBwYXJhbXMg
PSAweCUwLjhwKSIsIAotICAgICAgICAgIHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJh
bXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChw
cm9ncmFtID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwg
R0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICVkLCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCki
LCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJv
Z3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5p
Zm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotaW50IF9f
c3RkY2FsbCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFy
KiBuYW1lKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFy
KiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoc3Ryc3RyKG5hbWUsICJnbF8iKSA9PSBuYW1lKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0
LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihw
cm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
LTE7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliZnYoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhw
KSIsIGluZGV4LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0
dHJpYlN0YXRlKGluZGV4KTsKLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlF
bmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RS
SURFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3Ry
aWRlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
YXR0cmliU3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDog
R0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJ
QjoKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1D
dXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdM
RToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubURpdmlz
b3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVy
dGV4QXR0cmliaXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17
Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xp
bnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0g
Y29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0
YXRlLm1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVNpemU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9T
VFJJREU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tVHlw
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX05PUk1BTElaRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRy
aWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZG
RVJfQklORElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubUJvdW5k
QnVmZmVyLmlkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNDsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxv
YXQgY3VycmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxv
b3IoY3VycmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlzb3I7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoR0x1
aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBvaW50ZXIpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcG9pbnRl
ciA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwb2ludGVyKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4
ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAocG5hbWUgIT0gR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcG9pbnRlciA9IGNvbnN0X2Nhc3Q8R0x2
b2lkKj4oY29udGV4dC0+Z2V0VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
SGludChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gbW9kZSA9IDB4JVgpIiwgdGFyZ2V0LCBtb2RlKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9GQVNURVNUOgotICAgICAgICAgIGNhc2UgR0xfTklDRVNUOgotICAgICAgICAgIGNh
c2UgR0xfRE9OVF9DQVJFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAKLSAgICAgICAgfQot
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9H
RU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgICAgIGlmIChjb250ZXh0KSBjb250ZXh0LT5z
ZXRHZW5lcmF0ZU1pcG1hcEhpbnQobW9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOgotICAgICAgICAg
ICAgaWYgKGNvbnRleHQpIGNvbnRleHQtPnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQo
bW9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzQnVmZmVy
KEdMdWludCBidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgYnVmZmVyID0gJWQpIiwgYnVm
ZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCAmJiBidWZmZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IGNvbnRl
eHQtPmdldEJ1ZmZlcihidWZmZXIpOwotCi0gICAgICAgICAgICBpZiAoYnVmZmVyT2JqZWN0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNF
bmFibGVkKEdMZW51bSBjYXApCi17Ci0gICAgRVZFTlQoIihHTGVudW0gY2FwID0gMHglWCkiLCBj
YXApOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0N1bGxG
YWNlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4gY29udGV4
dC0+aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVDb3Zl
cmFnZUVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlz
U3RlbmNpbFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDog
ICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC0+aXNCbGVuZEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdMYm9vbGVh
biBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1
aW50IGZlbmNlID0gJWQpIiwgZmVuY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0
ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmpl
Y3QgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkFM
U0U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmZW5jZU9iamVjdC0+aXNG
ZW5jZSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGds
SXNGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
ZnJhbWVidWZmZXIgPSAlZCkiLCBmcmFtZWJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQgJiYgZnJhbWVidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAg
IH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElz
UHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0g
JWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQg
JiYgcHJvZ3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAo
cHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xf
VFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
R0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFu
IF9fc3RkY2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IGlkKQotewotICAgIEVWRU5UKCIoR0x1aW50
IGlkID0gJWQpIiwgaWQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaWQgPT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpx
dWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAg
ICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0K
LQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZm
ZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgcmVuZGVyYnVm
ZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCAmJiByZW5kZXJi
dWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotCi0g
ICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZB
TFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNTaGFkZXIoR0x1aW50IHNoYWRlcikK
LXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHNoYWRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNo
YWRlcik7Ci0KLSAgICAgICAgICAgIGlmIChzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
R0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1RleHR1cmUoR0x1aW50IHRl
eHR1cmUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgdGV4dHVyZSA9ICVkKSIsIHRleHR1cmUpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHRleHR1cmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQotICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsTGluZVdpZHRo
KEdMZmxvYXQgd2lkdGgpCi17Ci0gICAgRVZFTlQoIihHTGZsb2F0IHdpZHRoID0gJWYpIiwgd2lk
dGgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAod2lkdGggPD0gMC4wZikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0TGluZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbExpbmtQcm9ncmFtKEdMdWludCBw
cm9ncmFtKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmxpbmsoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFBpeGVsU3RvcmVpKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVY
LCBHTGludCBwYXJhbSA9ICVkKSIsIHBuYW1lLCBwYXJhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVO
VDoKLSAgICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFt
ICE9IDQgJiYgcGFyYW0gIT0gOCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRVbnBhY2tBbGlnbm1lbnQocGFyYW0pOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1F
TlQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJh
bSAhPSA0ICYmIHBhcmFtICE9IDgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja0FsaWdubWVudChwYXJhbSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0Vf
Uk9XX09SREVSX0FOR0xFOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFBhY2tSZXZlcnNl
Um93T3JkZXIocGFyYW0gIT0gMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0
b3IsIEdMZmxvYXQgdW5pdHMpCi17Ci0gICAgRVZFTlQoIihHTGZsb2F0IGZhY3RvciA9ICVmLCBH
TGZsb2F0IHVuaXRzID0gJWYpIiwgZmFjdG9yLCB1bml0cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dFBvbHlnb25PZmZzZXRQYXJhbXMoZmFjdG9yLCB1bml0cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkblBpeGVs
c0VYVChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMc2l6ZWkgYnVmU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x2b2lk
ICpkYXRhKQotewotICAgIEVWRU5UKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6
ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgotICAgICAgICAgICJHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVpIGJ1ZlNpemUgPSAweCVk
LCBHTHZvaWQgKmRhdGEgPSAweCUwLjhwKSIsCi0gICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBidWZTaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IGJ1ZlNpemUgPCAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAm
YnVmU2l6ZSwgZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVscykKLXsKLSAgICBFVkVO
VCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51
bSB0eXBlID0gMHglWCwgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAgcGl4ZWxzKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBOVUxMLCBw
aXhlbHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKHZvaWQpCi17Ci0gICAgRVZF
TlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpTaGFkZXI6OnJlbGVhc2VD
b21waWxlcigpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
THNpemVpIHNhbXBsZXMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXpl
aSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBz
YW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9S
RU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJ
c0RlcHRoUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJc1N0ZW5jaWxSZW5kZXJh
YmxlKGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1h
eGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQg
PiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAg
ICAgICAgICBzYW1wbGVzID4gY29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgR0x1aW50IGhhbmRsZSA9IGNvbnRleHQt
PmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSAwKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxm
b3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UMTY6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShu
ZXcgZ2w6OkRlcHRoYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6
OkNvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcg
Z2w6OlN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpE
ZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlQU5HTEUodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdM
Ym9vbGVhbiBpbnZlcnQpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiB2YWx1ZSA9ICVmLCBHTGJv
b2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFsdWUsIGludmVydCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dFNhbXBsZUNvdmVyYWdlUGFyYW1zKGdsOjpjbGFtcDAxKHZhbHVlKSwgaW52ZXJ0ID09IEdMX1RS
VUUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsU2V0RmVuY2VOVihHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24p
Ci17Ci0gICAgRVZFTlQoIihHTHVpbnQgZmVuY2UgPSAlZCwgR0xlbnVtIGNvbmRpdGlvbiA9IDB4
JVgpIiwgZmVuY2UsIGNvbmRpdGlvbik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChj
b25kaXRpb24gIT0gR0xfQUxMX0NPTVBMRVRFRF9OVikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0
ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmpl
Y3QgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5j
ZU9iamVjdC0+c2V0RmVuY2UoY29uZGl0aW9uKTsgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTY2lzc29yKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5U
KCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXpl
aSBoZWlnaHQgPSAlZCkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCogY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lz
c29yUGFyYW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25z
dCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpCi17Ci0gICAgRVZFTlQoIihHTHNpemVp
IG4gPSAlZCwgY29uc3QgR0x1aW50KiBzaGFkZXJzID0gMHglMC44cCwgR0xlbnVtIGJpbmFyeWZv
cm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhw
LCBHTHNpemVpIGxlbmd0aCA9ICVkKSIsCi0gICAgICAgICAgbiwgc2hhZGVycywgYmluYXJ5Zm9y
bWF0LCBiaW5hcnksIGxlbmd0aCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIC8vIE5vIGJp
bmFyeSBzaGFkZXIgZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQotewotICAgIEVW
RU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hh
cioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhwKSIsCi0g
ICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBj
b250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmpl
Y3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dy
YW0oc2hhZGVyKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+c2V0U291cmNlKGNvdW50LCBzdHJp
bmcsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsRnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVm
LCBHTHVpbnQgbWFzaykKLXsKLSAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xfRlJPTlRfQU5E
X0JBQ0ssIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1
bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1h
c2spCi17Ci0gICAgRVZFTlQoIihHTGVudW0gZmFjZSA9IDB4JVgsIEdMZW51bSBmdW5jID0gMHgl
WCwgR0xpbnQgcmVmID0gJWQsIEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgZnVuYywgcmVmLCBt
YXNrKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAg
ICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZnVuYykKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfTkVWRVI6Ci0gICAgICAgICAgY2FzZSBHTF9BTFdBWVM6Ci0gICAgICAgICAgY2Fz
ZSBHTF9MRVNTOgotICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgotICAgICAgICAgIGNhc2UgR0xf
RVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9HRVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9HUkVB
VEVSOgotICAgICAgICAgIGNhc2UgR0xfTk9URVFVQUw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNL
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxQYXJh
bXMoZnVuYywgcmVmLCBtYXNrKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZh
Y2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxCYWNrUGFyYW1zKGZ1bmMsIHJl
ZiwgbWFzayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsTWFzayhHTHVpbnQgbWFz
aykKLXsKLSAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIG1hc2sp
OwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2Us
IEdMdWludCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTHVpbnQg
bWFzayA9ICVkKSIsIGZhY2UsIG1hc2spOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0
Y2ggKGZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICAg
IGNhc2UgR0xfQkFDSzoKLSAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBH
TF9GUk9OVF9BTkRfQkFDSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdGVuY2lsV3JpdGVtYXNrKG1hc2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tXcml0ZW1h
c2sobWFzayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3AoR0xlbnVtIGZhaWws
IEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQotewotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUo
R0xfRlJPTlRfQU5EX0JBQ0ssIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsU3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0g
emZhaWwsIEdMZW51bSB6cGFzcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBmYWNlID0gMHglWCwg
R0xlbnVtIGZhaWwgPSAweCVYLCBHTGVudW0gemZhaWwgPSAweCVYLCBHTGVudW0genBhcyA9IDB4
JVhzKSIsCi0gICAgICAgICAgZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9O
VF9BTkRfQkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN3aXRjaCAoZmFpbCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAg
ICAgICAgICBjYXNlIEdMX0tFRVA6Ci0gICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgotICAgICAg
ICAgIGNhc2UgR0xfSU5DUjoKLSAgICAgICAgICBjYXNlIEdMX0RFQ1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9JTlZFUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6Ci0gICAgICAgICAgY2Fz
ZSBHTF9ERUNSX1dSQVA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzd2l0Y2ggKHpmYWlsKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9aRVJP
OgotICAgICAgICAgIGNhc2UgR0xfS0VFUDoKLSAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6Ci0g
ICAgICAgICAgY2FzZSBHTF9JTkNSOgotICAgICAgICAgIGNhc2UgR0xfREVDUjoKLSAgICAgICAg
ICBjYXNlIEdMX0lOVkVSVDoKLSAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKLSAgICAgICAg
ICBjYXNlIEdMX0RFQ1JfV1JBUDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN3aXRjaCAoenBhc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9LRUVQOgotICAgICAgICAgIGNhc2UgR0xfUkVQTEFD
RToKLSAgICAgICAgICBjYXNlIEdMX0lOQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSOgotICAg
ICAgICAgIGNhc2UgR0xfSU5WRVJUOgotICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgotICAg
ICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsT3BlcmF0aW9ucyhm
YWlsLCB6ZmFpbCwgenBhc3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmFj
ZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKGZhaWws
IHpmYWlsLCB6cGFzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5W
KEdMdWludCBmZW5jZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkKSIsIGZlbmNl
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZl
bmNlKTsKLQotICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBH
TF9UUlVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZlbmNlT2JqZWN0
LT50ZXN0RmVuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIEdMX1RSVUU7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxz
KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQs
IEdMaW50IGludGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBo
ZWlnaHQgPSAlZCwgIgotICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1h
dCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHgl
MC44cCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBh
cyBzZWNvbmRhcnkga2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2Fz
ZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPGZvcm1h
dD4gKyA8dHlwZT4gY29tYmluYXRpb25zCi0gICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0PiAt
PiBzZXRzIElOVkFMSURfRU5VTQotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+
IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICAgICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCX1MzVENfRFhUMV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0
dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQzX0FOR0xFOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRToKLSAgICAgICAgICAgIGJyZWFrOyAKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfREVQVEhf
U1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYg
KHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwp
IHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4
dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0
TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSA+PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUMVRl
eHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAv
LyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEgYW5kIG11bHRp
cGxlIGxldmVscywKLSAgICAgICAgICAgICAgICAvLyBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBk
b2VzIG5vdAotICAgICAgICAgICAgICAgIGlmIChwaXhlbHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAw
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1t
dXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
TmVnWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZU5lZ1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4
ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pCi17Ci0gICAgZ2xUZXhQYXJh
bWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGludClwYXJhbSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsVGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZs
b2F0KiBwYXJhbXMpCi17Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGlu
dCkqcGFyYW1zKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pCi17Ci0gICAgRVZFTlQoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCB0
YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
LT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIo
KEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVS
OgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFy
YW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBnbFRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBwbmFtZSwgKnBhcmFtcyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4
U3RvcmFnZTJERVhUKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgbGV2ZWxzID0gJWQsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCki
LAotICAgICAgICAgICB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVf
MkQgJiYgdGFyZ2V0ICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoIDwgMSB8fCBoZWlnaHQgPCAxIHx8IGxldmVscyA8IDEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWln
aHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiBsZXZlbHMgIT0gZ2w6
OmxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpICsgMSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0g
ICAgICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLQot
ICAgICAgICBpZiAoZm9ybWF0ID09IEdMX05PTkUgfHwgdHlwZSA9PSBHTF9OT05FKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5n
ZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdo
dCA+IGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxICYmICFj
b250ZXh0LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWdsOjppc1BvdzIod2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0JBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgICAgICAgICBj
YXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBH
TF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwg
dGV4dHVyZXMKLSAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgp
ID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8
fCB0ZXh0dXJlLT5pZCgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykK
LXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTHNp
emVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVY
LCBHTGVudW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMg
PSAweCUwLjhwKSIsCi0gICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAw
IHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3Rk
OjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3Rk
OjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBl
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQgYnkgaGVs
cGVyIGZ1bmN0aW9uCi0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxl
dmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09
IEdMX0ZMT0FUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9IQUxG
X0ZMT0FUX09FUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1
cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0
aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3Rl
eHR1cmUgZG9lcyBub3QKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8
fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9m
ZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tB
bGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5n
ZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBs
b2NhdGlvbiwgR0xmbG9hdCB4KQotewotICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgMSwgJngp
OwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlv
biA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3Vu
dCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0
LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2Nh
dGlvbiwgR0xpbnQgeCkKLXsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9u
LCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlvbiwgR0xm
bG9hdCB4LCBHTGZsb2F0IHkpCi17Ci0gICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsKLQotICAg
IGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50
LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdM
aW50IHgsIEdMaW50IHkpCi17Ci0gICAgR0xpbnQgeHlbNF0gPSB7eCwgeX07Ci0KLSAgICBnbFVu
aWZvcm0yaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0zZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeikKLXsKLSAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6fTsKLQotICAgIGds
VW5pZm9ybTNmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXopOwotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwg
dik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xpbnQgeikKLXsKLSAgICBHTGludCB4eXpbM10gPSB7eCwgeSwgen07Ci0KLSAgICBn
bFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5eik7Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsK
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+
c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9h
dCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKLXsKLSAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwg
eSwgeiwgd307Ci0KLSAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6
dyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHAp
IiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNv
dW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRl
eHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxv
Y2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQotewotICAgIEdMaW50
IHh5endbNF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIDEs
IChHTGludCopJnh5encpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQotewotICAgIEVWRU5UKCIo
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9
IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0x
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24s
IGNvdW50LCB2KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1h
dHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwg
MCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBFVkVO
VCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRy
YW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAg
ICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlKQotewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9
IEdMX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
Y291bnQsIHZhbHVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVXNlUHJv
Z3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQp
IiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
ICYmIHByb2dyYW0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAh
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4KQotewot
ICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmKSIsIGluZGV4LCB4
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYjFmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBF
VkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhw
KSIsIGluZGV4LCB2YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNb
MF0sIDAsIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQg
eCwgR0xmbG9hdCB5KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQg
eCA9ICVmLCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRl
eEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXgg
PSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEg
fTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5
LCBHTGZsb2F0IHopCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4
ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWIzZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCki
LCBpbmRleCwgdmFsdWVzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBd
LCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmKEdMdWludCBp
bmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAg
IEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAl
ZiwgR0xmbG9hdCB6ID0gJWYsIEdMZmxvYXQgdyA9ICVmKSIsIGluZGV4LCB4LCB5LCB6LCB3KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OwotICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjRmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBFVkVO
VCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIs
IGluZGV4LCB2YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4
LCB2YWx1ZXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRl
eCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0x1
aW50IGRpdmlzb3IgPSAlZCkiLCBpbmRleCwgZGl2aXNvcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYlBvaW50ZXIoR0x1aW50IGluZGV4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29s
ZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikKLXsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBl
ID0gMHglWCwgIgotICAgICAgICAgICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICVkLCBHTHNpemVp
IHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHB0ciA9IDB4JTAuOHApIiwKLSAgICAgICAgICBp
bmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBwdHIpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6Ci0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX0ZJ
WEVEOgotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCksIHNpemUsIHR5
cGUsIChub3JtYWxpemVkID09IEdMX1RSVUUpLCBzdHJpZGUsIHB0cik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWaWV3
cG9ydChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBFVkVOVCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0g
JWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4
dC0+c2V0Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0
RnJhbWVidWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBH
TGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQg
ZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQg
bWFzaywgR0xlbnVtIGZpbHRlcikKLXsKLSAgICBFVkVOVCgiKEdMaW50IHNyY1gwID0gJWQsIEdM
aW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNyY1kxID0gJWQsICIKLSAg
ICAgICAgICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xpbnQgZHN0WDEg
PSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgIgotICAgICAgICAgICJHTGJpdGZpZWxkIG1hc2sgPSAw
eCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAotICAgICAgICAgIHNyY1gwLCBzcmNZMCwgc3Jj
WDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKSkgIT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RYMCB8fCBzcmNZMSAtIHNy
Y1kwICE9IGRzdFkxIC0gZHN0WTApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2NhbGlu
ZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBieSB0
aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgp
ID09IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEVSUigiQmxpdHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24uIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVy
KHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwg
bWFzayk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQotewot
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVk
LCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9
ICVkLCAiCi0gICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4
JXgsIGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gKmJpbmFyeUZvcm1hdCwgdm9pZCAqYmluYXJ5KQotewotICAgIEVW
RU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBidWZTaXplID0gJXMsIGxlbmd0aCA9IDB4JTAu
OHAsIGJpbmFyeUZvcm1hdCA9IDB4JTAuOHAsIGJpbmFyeSA9IDB4JTAuOHApIiwKLSAgICAgICAg
ICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwgYmluYXJ5KTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAq
YmluYXJ5Rm9ybWF0ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7Ci0KLSAgICAgICAgICAgIGlm
IChsZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gYmluYXJ5Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHBy
b2dyYW0gPSAweCVYLCBiaW5hcnlGb3JtYXQgPSAweCV4LCBiaW5hcnkgPSAweCUwLjhwLCBsZW5n
dGggPSAlZCkiLAotICAgICAgICAgIHByb2dyYW0sIGJpbmFyeUZvcm1hdCwgYmluYXJ5LCBsZW5n
dGgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoYmluYXJ5Rm9ybWF0ICE9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xF
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBwcm9ncmFtT2JqZWN0LT5zZXRQcm9ncmFtQmluYXJ5KE5VTEwpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLV9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAq
cHJvY25hbWUpCi17Ci0gICAgc3RydWN0IEV4dGVuc2lvbgotICAgIHsKLSAgICAgICAgY29uc3Qg
Y2hhciAqbmFtZTsKLSAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSBhZGRyZXNzOwotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0
ZW5zaW9uc1tdID0KLSAgICB7Ci0gICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKLSAgICAg
ICAgeyJnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xCbGl0RnJhbWVidWZmZXJBTkdMRX0sCi0gICAgICAgIHsiZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEV9
LAotICAgICAgICB7ImdsRGVsZXRlRmVuY2VzTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERlbGV0ZUZlbmNlc05WfSwKLSAgICAgICAgeyJnbEdlbkZlbmNl
c05WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5GZW5j
ZXNOVn0sCi0gICAgICAgIHsiZ2xJc0ZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbElzRmVuY2VOVn0sCi0gICAgICAgIHsiZ2xUZXN0RmVuY2VOViIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGVzdEZlbmNlTlZ9
LAotICAgICAgICB7ImdsR2V0RmVuY2Vpdk5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xHZXRGZW5jZWl2TlZ9LAotICAgICAgICB7ImdsRmluaXNoRmVuY2VO
ViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRmluaXNoRmVu
Y2VOVn0sCi0gICAgICAgIHsiZ2xTZXRGZW5jZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xTZXRGZW5jZU5WfSwKLSAgICAgICAgeyJnbEdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2VBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50
ZXJUeXBlKWdsR2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFfSwKLSAgICAgICAgeyJnbFRl
eFN0b3JhZ2UyREVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsVGV4U3RvcmFnZTJERVhUfSwKLSAgICAgICAgeyJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNF
WFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldEdyYXBo
aWNzUmVzZXRTdGF0dXNFWFR9LAotICAgICAgICB7ImdsUmVhZG5QaXhlbHNFWFQiLCAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFJlYWRuUGl4ZWxzRVhUfSwKLSAg
ICAgICAgeyJnbEdldG5Vbmlmb3JtZnZFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbEdldG5Vbmlmb3JtZnZFWFR9LAotICAgICAgICB7ImdsR2V0blVuaWZv
cm1pdkVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0
blVuaWZvcm1pdkVYVH0sCi0gICAgICAgIHsiZ2xHZW5RdWVyaWVzRVhUIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5RdWVyaWVzRVhUfSwKLSAgICAgICAg
eyJnbERlbGV0ZVF1ZXJpZXNFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbERlbGV0ZVF1ZXJpZXNFWFR9LAotICAgICAgICB7ImdsSXNRdWVyeUVYVCIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsSXNRdWVyeUVYVH0sCi0g
ICAgICAgIHsiZ2xCZWdpblF1ZXJ5RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xCZWdpblF1ZXJ5RVhUfSwKLSAgICAgICAgeyJnbEVuZFF1ZXJ5RVhUIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xFbmRRdWVyeUVYVH0s
Ci0gICAgICAgIHsiZ2xHZXRRdWVyeWl2RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xHZXRRdWVyeWl2RVhUfSwKLSAgICAgICAgeyJnbEdldFF1ZXJ5T2Jq
ZWN0dWl2RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xH
ZXRRdWVyeU9iamVjdHVpdkVYVH0sCi0gICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5H
TEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRX0sCi0gICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUi
LCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRX0sCi0gICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEV9LAotICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9F
U30sCi0gICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3Bl
ckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKLQotICAgIGZv
ciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVu
c2lvbik7IGV4dCsrKQotICAgIHsKLSAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZ2xFeHRl
bnNpb25zW2V4dF0ubmFtZSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRXh0ZW5zaW9uc1tleHRd
LmFkZHJlc3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLy8g
Tm9uLXB1YmxpYyBmdW5jdGlvbnMgdXNlZCBieSBFR0wKLQotYm9vbCBfX3N0ZGNhbGwgZ2xCaW5k
VGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIEVWRU5UKCIoZWdsOjpTdXJm
YWNlKiBzdXJmYWNlID0gMHglMC44cCkiLAotICAgICAgICAgIHN1cmZhY2UpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0K
LSAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZU9iamVjdC0+YmluZFRleEltYWdlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZWE3NzY5Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotTElCUkFS
WSBsaWJHTEVTdjIKLUVYUE9SVFMKLSAgICBnbEFjdGl2ZVRleHR1cmUgICAgICAgICAgICAgICAg
IEAxCi0gICAgZ2xBdHRhY2hTaGFkZXIgICAgICAgICAgICAgICAgICBAMgotICAgIGdsQmluZEF0
dHJpYkxvY2F0aW9uICAgICAgICAgICAgQDMKLSAgICBnbEJpbmRCdWZmZXIgICAgICAgICAgICAg
ICAgICAgIEA0Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIgICAgICAgICAgICAgICBANQotICAgIGds
QmluZFJlbmRlcmJ1ZmZlciAgICAgICAgICAgICAgQDYKLSAgICBnbEJpbmRUZXh0dXJlICAgICAg
ICAgICAgICAgICAgIEA3Ci0gICAgZ2xCbGVuZENvbG9yICAgICAgICAgICAgICAgICAgICBAOAot
ICAgIGdsQmxlbmRFcXVhdGlvbiAgICAgICAgICAgICAgICAgQDkKLSAgICBnbEJsZW5kRXF1YXRp
b25TZXBhcmF0ZSAgICAgICAgIEAxMAotICAgIGdsQmxlbmRGdW5jICAgICAgICAgICAgICAgICAg
ICAgQDExCi0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgICBAMTIKLSAgICBnbEJ1
ZmZlckRhdGEgICAgICAgICAgICAgICAgICAgIEAxMwotICAgIGdsQnVmZmVyU3ViRGF0YSAgICAg
ICAgICAgICAgICAgQDE0Ci0gICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzICAgICAgICBAMTUK
LSAgICBnbENsZWFyICAgICAgICAgICAgICAgICAgICAgICAgIEAxNgotICAgIGdsQ2xlYXJDb2xv
ciAgICAgICAgICAgICAgICAgICAgQDE3Ci0gICAgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAg
ICAgICBAMTgKLSAgICBnbENsZWFyU3RlbmNpbCAgICAgICAgICAgICAgICAgIEAxOQotICAgIGds
Q29sb3JNYXNrICAgICAgICAgICAgICAgICAgICAgQDIwCi0gICAgZ2xDb21waWxlU2hhZGVyICAg
ICAgICAgICAgICAgICBAMjEKLSAgICBnbENvbXByZXNzZWRUZXhJbWFnZTJEICAgICAgICAgIEAy
MgotICAgIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQgICAgICAgQDIzCi0gICAgZ2xDb3B5VGV4
SW1hZ2UyRCAgICAgICAgICAgICAgICBAMjQKLSAgICBnbENvcHlUZXhTdWJJbWFnZTJEICAgICAg
ICAgICAgIEAyNQotICAgIGdsQ3JlYXRlUHJvZ3JhbSAgICAgICAgICAgICAgICAgQDI2Ci0gICAg
Z2xDcmVhdGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMjcKLSAgICBnbEN1bGxGYWNlICAgICAg
ICAgICAgICAgICAgICAgIEAyOAotICAgIGdsRGVsZXRlQnVmZmVycyAgICAgICAgICAgICAgICAg
QDI5Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMgICAgICAgICAgICBAMzAKLSAgICBnbERlbGV0
ZVByb2dyYW0gICAgICAgICAgICAgICAgIEAzMgotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAg
ICAgICAgICAgQDMzCi0gICAgZ2xEZWxldGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMzQKLSAg
ICBnbERlbGV0ZVRleHR1cmVzICAgICAgICAgICAgICAgIEAzMQotICAgIGdsRGVwdGhGdW5jICAg
ICAgICAgICAgICAgICAgICAgQDM2Ci0gICAgZ2xEZXB0aE1hc2sgICAgICAgICAgICAgICAgICAg
ICBAMzcKLSAgICBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgIEAzOAotICAgIGdsRGV0
YWNoU2hhZGVyICAgICAgICAgICAgICAgICAgQDM1Ci0gICAgZ2xEaXNhYmxlICAgICAgICAgICAg
ICAgICAgICAgICBAMzkKLSAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgIEA0MAot
ICAgIGdsRHJhd0FycmF5cyAgICAgICAgICAgICAgICAgICAgQDQxCi0gICAgZ2xEcmF3RWxlbWVu
dHMgICAgICAgICAgICAgICAgICBANDIKLSAgICBnbEVuYWJsZSAgICAgICAgICAgICAgICAgICAg
ICAgIEA0MwotICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICAgQDQ0Ci0gICAgZ2xG
aW5pc2ggICAgICAgICAgICAgICAgICAgICAgICBANDUKLSAgICBnbEZsdXNoICAgICAgICAgICAg
ICAgICAgICAgICAgIEA0NgotICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgICAgICAgQDQ3
Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAgICAgICAgICBANDgKLSAgICBnbEZyb250RmFj
ZSAgICAgICAgICAgICAgICAgICAgIEA0OQotICAgIGdsR2VuQnVmZmVycyAgICAgICAgICAgICAg
ICAgICAgQDUwCi0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMgICAgICAgICAgICAgICBANTIKLSAgICBn
bEdlblJlbmRlcmJ1ZmZlcnMgICAgICAgICAgICAgIEA1MwotICAgIGdsR2VuVGV4dHVyZXMgICAg
ICAgICAgICAgICAgICAgQDU0Ci0gICAgZ2xHZW5lcmF0ZU1pcG1hcCAgICAgICAgICAgICAgICBA
NTEKLSAgICBnbEdldEFjdGl2ZUF0dHJpYiAgICAgICAgICAgICAgIEA1NQotICAgIGdsR2V0QWN0
aXZlVW5pZm9ybSAgICAgICAgICAgICAgQDU2Ci0gICAgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgICAg
ICAgICAgICBANTcKLSAgICBnbEdldEF0dHJpYkxvY2F0aW9uICAgICAgICAgICAgIEA1OAotICAg
IGdsR2V0Qm9vbGVhbnYgICAgICAgICAgICAgICAgICAgQDU5Ci0gICAgZ2xHZXRCdWZmZXJQYXJh
bWV0ZXJpdiAgICAgICAgICBANjAKLSAgICBnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAg
IEA2MQotICAgIGdsR2V0RmxvYXR2ICAgICAgICAgICAgICAgICAgICAgQDYyCi0gICAgZ2xHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAgIEA2MwotICAgIGdsR2V0SW50ZWdlcnYg
ICAgICAgICAgICAgICAgICAgQDY0Ci0gICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyAgICAgICAgICAg
ICBANjYKLSAgICBnbEdldFByb2dyYW1pdiAgICAgICAgICAgICAgICAgIEA2NQotICAgIGdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgICAgQDY3Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nICAg
ICAgICAgICAgICBANjkKLSAgICBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAgICAgIEA3MAot
ICAgIGdsR2V0U2hhZGVyU291cmNlICAgICAgICAgICAgICAgQDcxCi0gICAgZ2xHZXRTaGFkZXJp
diAgICAgICAgICAgICAgICAgICBANjgKLSAgICBnbEdldFN0cmluZyAgICAgICAgICAgICAgICAg
ICAgIEA3MgotICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgQDczCi0gICAgZ2xH
ZXRUZXhQYXJhbWV0ZXJpdiAgICAgICAgICAgICBANzQKLSAgICBnbEdldFVuaWZvcm1Mb2NhdGlv
biAgICAgICAgICAgIEA3NwotICAgIGdsR2V0VW5pZm9ybWZ2ICAgICAgICAgICAgICAgICAgQDc1
Ci0gICAgZ2xHZXRVbmlmb3JtaXYgICAgICAgICAgICAgICAgICBANzYKLSAgICBnbEdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2ICAgICAgIEA4MAotICAgIGdsR2V0VmVydGV4QXR0cmliZnYgICAgICAg
ICAgICAgQDc4Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAgICAgICAgICAgICBANzkKLSAgICBn
bEhpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIEA4MQotICAgIGdsSXNCdWZmZXIgICAgICAg
ICAgICAgICAgICAgICAgQDgyCi0gICAgZ2xJc0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICBA
ODMKLSAgICBnbElzRnJhbWVidWZmZXIgICAgICAgICAgICAgICAgIEA4NAotICAgIGdsSXNQcm9n
cmFtICAgICAgICAgICAgICAgICAgICAgQDg1Ci0gICAgZ2xJc1JlbmRlcmJ1ZmZlciAgICAgICAg
ICAgICAgICBAODYKLSAgICBnbElzU2hhZGVyICAgICAgICAgICAgICAgICAgICAgIEA4NwotICAg
IGdsSXNUZXh0dXJlICAgICAgICAgICAgICAgICAgICAgQDg4Ci0gICAgZ2xMaW5lV2lkdGggICAg
ICAgICAgICAgICAgICAgICBAODkKLSAgICBnbExpbmtQcm9ncmFtICAgICAgICAgICAgICAgICAg
IEA5MAotICAgIGdsUGl4ZWxTdG9yZWkgICAgICAgICAgICAgICAgICAgQDkxCi0gICAgZ2xQb2x5
Z29uT2Zmc2V0ICAgICAgICAgICAgICAgICBAOTIKLSAgICBnbFJlYWRQaXhlbHMgICAgICAgICAg
ICAgICAgICAgIEA5MwotICAgIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICAgICAgICAgQDk0Ci0g
ICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlICAgICAgICAgICBAOTUKLSAgICBnbFNhbXBsZUNvdmVy
YWdlICAgICAgICAgICAgICAgIEA5NgotICAgIGdsU2Npc3NvciAgICAgICAgICAgICAgICAgICAg
ICAgQDk3Ci0gICAgZ2xTaGFkZXJCaW5hcnkgICAgICAgICAgICAgICAgICBAOTgKLSAgICBnbFNo
YWRlclNvdXJjZSAgICAgICAgICAgICAgICAgIEA5OQotICAgIGdsU3RlbmNpbEZ1bmMgICAgICAg
ICAgICAgICAgICAgQDEwMAotICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgQDEw
MQotICAgIGdsU3RlbmNpbE1hc2sgICAgICAgICAgICAgICAgICAgQDEwMgotICAgIGdsU3RlbmNp
bE1hc2tTZXBhcmF0ZSAgICAgICAgICAgQDEwMwotICAgIGdsU3RlbmNpbE9wICAgICAgICAgICAg
ICAgICAgICAgQDEwNAotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUgICAgICAgICAgICAgQDEwNQot
ICAgIGdsVGV4SW1hZ2UyRCAgICAgICAgICAgICAgICAgICAgQDEwNgotICAgIGdsVGV4UGFyYW1l
dGVyZiAgICAgICAgICAgICAgICAgQDEwNwotICAgIGdsVGV4UGFyYW1ldGVyZnYgICAgICAgICAg
ICAgICAgQDEwOAotICAgIGdsVGV4UGFyYW1ldGVyaSAgICAgICAgICAgICAgICAgQDEwOQotICAg
IGdsVGV4UGFyYW1ldGVyaXYgICAgICAgICAgICAgICAgQDExMAotICAgIGdsVGV4U3ViSW1hZ2Uy
RCAgICAgICAgICAgICAgICAgQDExMQotICAgIGdsVW5pZm9ybTFmICAgICAgICAgICAgICAgICAg
ICAgQDExMgotICAgIGdsVW5pZm9ybTFmdiAgICAgICAgICAgICAgICAgICAgQDExMwotICAgIGds
VW5pZm9ybTFpICAgICAgICAgICAgICAgICAgICAgQDExNAotICAgIGdsVW5pZm9ybTFpdiAgICAg
ICAgICAgICAgICAgICAgQDExNQotICAgIGdsVW5pZm9ybTJmICAgICAgICAgICAgICAgICAgICAg
QDExNgotICAgIGdsVW5pZm9ybTJmdiAgICAgICAgICAgICAgICAgICAgQDExNwotICAgIGdsVW5p
Zm9ybTJpICAgICAgICAgICAgICAgICAgICAgQDExOAotICAgIGdsVW5pZm9ybTJpdiAgICAgICAg
ICAgICAgICAgICAgQDExOQotICAgIGdsVW5pZm9ybTNmICAgICAgICAgICAgICAgICAgICAgQDEy
MAotICAgIGdsVW5pZm9ybTNmdiAgICAgICAgICAgICAgICAgICAgQDEyMQotICAgIGdsVW5pZm9y
bTNpICAgICAgICAgICAgICAgICAgICAgQDEyMgotICAgIGdsVW5pZm9ybTNpdiAgICAgICAgICAg
ICAgICAgICAgQDEyMwotICAgIGdsVW5pZm9ybTRmICAgICAgICAgICAgICAgICAgICAgQDEyNAot
ICAgIGdsVW5pZm9ybTRmdiAgICAgICAgICAgICAgICAgICAgQDEyNQotICAgIGdsVW5pZm9ybTRp
ICAgICAgICAgICAgICAgICAgICAgQDEyNgotICAgIGdsVW5pZm9ybTRpdiAgICAgICAgICAgICAg
ICAgICAgQDEyNwotICAgIGdsVW5pZm9ybU1hdHJpeDJmdiAgICAgICAgICAgICAgQDEyOAotICAg
IGdsVW5pZm9ybU1hdHJpeDNmdiAgICAgICAgICAgICAgQDEyOQotICAgIGdsVW5pZm9ybU1hdHJp
eDRmdiAgICAgICAgICAgICAgQDEzMAotICAgIGdsVXNlUHJvZ3JhbSAgICAgICAgICAgICAgICAg
ICAgQDEzMQotICAgIGdsVmFsaWRhdGVQcm9ncmFtICAgICAgICAgICAgICAgQDEzMgotICAgIGds
VmVydGV4QXR0cmliMWYgICAgICAgICAgICAgICAgQDEzMwotICAgIGdsVmVydGV4QXR0cmliMWZ2
ICAgICAgICAgICAgICAgQDEzNAotICAgIGdsVmVydGV4QXR0cmliMmYgICAgICAgICAgICAgICAg
QDEzNQotICAgIGdsVmVydGV4QXR0cmliMmZ2ICAgICAgICAgICAgICAgQDEzNgotICAgIGdsVmVy
dGV4QXR0cmliM2YgICAgICAgICAgICAgICAgQDEzNwotICAgIGdsVmVydGV4QXR0cmliM2Z2ICAg
ICAgICAgICAgICAgQDEzOAotICAgIGdsVmVydGV4QXR0cmliNGYgICAgICAgICAgICAgICAgQDEz
OQotICAgIGdsVmVydGV4QXR0cmliNGZ2ICAgICAgICAgICAgICAgQDE0MAotICAgIGdsVmVydGV4
QXR0cmliUG9pbnRlciAgICAgICAgICAgQDE0MQotICAgIGdsVmlld3BvcnQgICAgICAgICAgICAg
ICAgICAgICAgQDE0MgotCi0gICAgOyBFeHRlbnNpb25zCi0gICAgZ2xUZXhJbWFnZTNET0VTICAg
ICAgICAgICAgICAgICBAMTQzCi0gICAgZ2xCbGl0RnJhbWVidWZmZXJBTkdMRSAgICAgICAgICBA
MTQ5Ci0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSBAMTUwCi0gICAg
Z2xEZWxldGVGZW5jZXNOViAgICAgICAgICAgICAgICBAMTUxCi0gICAgZ2xGaW5pc2hGZW5jZU5W
ICAgICAgICAgICAgICAgICBAMTUyCi0gICAgZ2xHZW5GZW5jZXNOViAgICAgICAgICAgICAgICAg
ICBAMTUzCi0gICAgZ2xHZXRGZW5jZWl2TlYgICAgICAgICAgICAgICAgICBAMTU0Ci0gICAgZ2xJ
c0ZlbmNlTlYgICAgICAgICAgICAgICAgICAgICBAMTU1Ci0gICAgZ2xTZXRGZW5jZU5WICAgICAg
ICAgICAgICAgICAgICBAMTU2Ci0gICAgZ2xUZXN0RmVuY2VOViAgICAgICAgICAgICAgICAgICBA
MTU3Ci0gICAgZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUgQDE1OQotICAgIGdsVGV4
U3RvcmFnZTJERVhUICAgICAgICAgICAgICAgQDE2MAotICAgIGdsR2V0R3JhcGhpY3NSZXNldFN0
YXR1c0VYVCAgICAgQDE2MQotICAgIGdsUmVhZG5QaXhlbHNFWFQgICAgICAgICAgICAgICAgQDE2
MgotICAgIGdsR2V0blVuaWZvcm1mdkVYVCAgICAgICAgICAgICAgQDE2MwotICAgIGdsR2V0blVu
aWZvcm1pdkVYVCAgICAgICAgICAgICAgQDE2NAotICAgIGdsR2VuUXVlcmllc0VYVCAgICAgICAg
ICAgICAgICAgQDE2NQotICAgIGdsRGVsZXRlUXVlcmllc0VYVCAgICAgICAgICAgICAgQDE2Ngot
ICAgIGdsSXNRdWVyeUVYVCAgICAgICAgICAgICAgICAgICAgQDE2NwotICAgIGdsQmVnaW5RdWVy
eUVYVCAgICAgICAgICAgICAgICAgQDE2OAotICAgIGdsRW5kUXVlcnlFWFQgICAgICAgICAgICAg
ICAgICAgQDE2OQotICAgIGdsR2V0UXVlcnlpdkVYVCAgICAgICAgICAgICAgICAgQDE3MAotICAg
IGdsR2V0UXVlcnlPYmplY3R1aXZFWFQgICAgICAgICAgQDE3MQotICAgIGdsVmVydGV4QXR0cmli
RGl2aXNvckFOR0xFICAgICAgQDE3MgotICAgIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFICAg
ICAgQDE3MwotICAgIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUgICAgQDE3NAotCi0gICAg
OyBFR0wgZGVwZW5kZW5jaWVzCi0gICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBA
MTQ0IE5PTkFNRQotICAgIGdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICAgQDE0NSBOT05B
TUUKLSAgICBnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgIEAxNDYgTk9OQU1FCi0gICAg
Z2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAgICAgICBAMTQ3IE5PTkFNRQotICAgIGdsR2V0UHJv
Y0FkZHJlc3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKLSAgICBnbEJpbmRUZXhJbWFnZSAg
ICAgICAgICAgICAgICAgIEAxNTggTk9OQU1FCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwYWQyMWU0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLnJjCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8v
IE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCi0vLwotI2lu
Y2x1ZGUgInJlc291cmNlLmgiCi0KLSNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xV
REUgMiByZXNvdXJjZS4KLS8vCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgIi4uL2Nv
bW1vbi92ZXJzaW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jdW5kZWYgQVBTVFVESU9f
UkVBRE9OTFlfU1lNQk9MUwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRW5nbGlzaCAoVS5T
LikgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVk
KEFGWF9UQVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VC
TEFOR19FTkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQotI2VuZGlmIC8vX1dJTjMy
Ci0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8v
IFRFWFRJTkNMVURFCi0vLwotCi0xIFRFWFRJTkNMVURFIAotQkVHSU4KLSAgICAicmVzb3VyY2Uu
aFwwIgotRU5ECi0KLTIgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICIjaW5jbHVkZSAiImFmeHJl
cy5oIiJcclxuIgotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1vbi92ZXJzaW9uLmgiIlwwIgotRU5E
Ci0KLTMgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJcclxuIgotICAgICJcMCIKLUVORAotCi0j
ZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LwotLy8gVmVyc2lvbgotLy8KLQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCi0gRklMRVZF
UlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVW
SVNJT04KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERf
VkVSU0lPTixCVUlMRF9SRVZJU0lPTgotIEZJTEVGTEFHU01BU0sgMHgxN0wKLSNpZmRlZiBfREVC
VUcKLSBGSUxFRkxBR1MgMHgxTAotI2Vsc2UKLSBGSUxFRkxBR1MgMHgwTAotI2VuZGlmCi0gRklM
RU9TIDB4NEwKLSBGSUxFVFlQRSAweDJMCi0gRklMRVNVQlRZUEUgMHgwTAotQkVHSU4KLSAgICBC
TE9DSyAiU3RyaW5nRmlsZUluZm8iCi0gICAgQkVHSU4KLSAgICAgICAgQkxPQ0sgIjA0MDkwNGIw
IgotICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJB
TkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJhcnkiCi0gICAgICAgICAgICBWQUxVRSAi
RmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIkludGVybmFs
TmFtZSIsICJsaWJHTEVTdjIiCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAi
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgotICAgICAgICAgICAgVkFMVUUgIk9yaWdp
bmFsRmlsZW5hbWUiLCAibGliR0xFU3YyLmRsbCIKLSAgICAgICAgICAgIFZBTFVFICJQcml2YXRl
QnVpbGQiLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwg
IkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAgICAgIFZBTFVF
ICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgIEVORAotICAgIEVORAot
ICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBWQUxVRSAiVHJhbnNs
YXRpb24iLCAweDQwOSwgMTIwMAotICAgIEVORAotRU5ECi0KLSNlbmRpZiAgICAvLyBFbmdsaXNo
IChVLlMuKSByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0jaWZuZGVmIEFQ
U1RVRElPX0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZy
b20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0jZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk3ZDRlOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKKysrIC9kZXYvbnVs
bApAQCAtMSw1NjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93
cy0xMjUyIj8+Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysr
IgotCVZlcnNpb249IjkuMDAiCi0JTmFtZT0ibGliR0xFU3YyIgotCVByb2plY3RHVUlEPSJ7QjU4
NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fSIKLQlSb290TmFtZXNwYWNlPSJsaWJH
TEVTdjIiCi0JS2V5d29yZD0iV2luMzJQcm9qIgotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEz
MTA3MiIKLQk+Ci0JPFBsYXRmb3Jtcz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJ
Lz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJ4NjQiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRv
b2xGaWxlcz4KLQk8L1Rvb2xGaWxlcz4KLQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0
aW9uCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlv
bkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChD
b25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3Rl
clNldD0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5j
bHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2lu
Y2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9X
UztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01J
Tk1BWCIKLQkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9
IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAi
Ci0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAw
OzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0
YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Igot
CQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5h
Z2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jl
c291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5r
RXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJ
CUFkZGl0aW9uYWxPcHRpb25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVz
PSJkM2Q5LmxpYiBEM2R4OS5saWIgZDNkY29tcGlsZXIubGliIgotCQkJCUxpbmtJbmNyZW1lbnRh
bD0iMiIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliR0xFU3YyLmRlZiIKLQkJCQlHZW5l
cmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRv
bWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJ
CQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRM
aW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91
dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQo
Q29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIp
XGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0J
CQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxl
YXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJh
dGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1l
KSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hv
bGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1By
ZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWls
ZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgot
CQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIK
LQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JE
TEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19T
RUNVUkVfU0NMPTAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxOCIKLQkJCQlE
ZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRp
b25Gb3JtYXQ9IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xp
bmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9u
YWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIEQzZHg5LmxpYiBkM2Rjb21waWxlci5saWIiCi0JCQkJ
TGlua0luY3JlbWVudGFsPSIxIgotCQkJCUlnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM9ImZhbHNl
IgotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIgotCQkJCUdlbmVyYXRl
RGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVS
ZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXpl
ZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRh
cmdldE1hY2hpbmU9IjEiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9
IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwk
KENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGly
KVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25m
aWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGli
R0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJh
dGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+
Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2
NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChD
b25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1O
YW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJ
Q2hhcmFjdGVyU2V0PSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZl
bnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVu
dD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJ
T3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJv
amVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VY
UE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIgotCQkJCU1pbmltYWxSZWJ1
aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFy
eT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQi
Ci0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0
MjQ1OzQ1MTI7NDcwMjs0NzE4IgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0i
ZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0i
dHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGls
ZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9u
cz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgRDNkeDku
bGliIGQzZGNvbXBpbGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCi0JCQkJTW9kdWxl
RGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0
aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9
IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0i
MTciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4
MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIu
ZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFt
ZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZx
dW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZx
dW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmln
dXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8eDY0IgotCQkJT3V0
cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRp
b25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29u
ZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJT
ZXQ9IjEiCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0
YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQ
cm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29s
IgotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rp
b25FeHBhbnNpb249IjIiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9q
ZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3Nv
ckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQ
T1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCIKLQkJ
CQlSdW50aW1lTGlicmFyeT0iMCIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlX
YXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0
MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4IgotCQkJCURldGVjdDY0Qml0UG9ydGFi
aWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJ
CQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdl
ZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNv
dXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2
ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlB
ZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0i
ZDNkOS5saWIgRDNkeDkubGliIGQzZGNvbXBpbGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9
IjEiCi0JCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiCi0JCQkJTW9kdWxlRGVm
aW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9u
PSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCi0J
CQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEi
Ci0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTci
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7
JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25O
YW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxs
JnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlc
JnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90
OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90
OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJh
dGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwvUmVmZXJlbmNlcz4K
LQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKLQkJCUZpbHRlcj0i
Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCi0JCQlVbmlxdWVJZGVu
dGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKLQkJCT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJsaXQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJ1ZmZlci5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5jcHAiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxkZWJ1Zy5j
cHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRmVu
Y2UuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XEZyYW1lYnVmZmVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLlxIYW5kbGVBbGxvY2F0b3IuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEluZGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3Jh
bS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
UHJvZ3JhbUJpbmFyeS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuY3BwIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VN
YW5hZ2VyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlxTaGFkZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXFRleHR1cmUuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXHV0aWxpdGllcy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVmVydGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IkhlYWRlciBGaWxlcyIK
LQkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgotCQkJVW5pcXVlSWRlbnRpZmll
cj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCi0JCQk+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxCbGl0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEZlbmNlLmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVT
MlxnbDIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEhhbmRsZUFs
bG9jYXRvci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXEluZGV4RGF0YU1hbmFnZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLlxtYWluLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cbWF0aHV0aWwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5LmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxSZWZDb3VudE9i
amVjdC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XFJlbmRlcmJ1ZmZlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXHJlc291cmNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VNYW5hZ2VyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVyZS5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHV0aWxpdGllcy5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cdmVyc2lvbi5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHZlcnRl
eGNvbnZlcnNpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxWZXJ0ZXhEYXRhTWFuYWdlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0
ZXI+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmRlZiIKLQkJCT4KLQkJ
PC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5yYyIKLQkJCT4K
LQkJPC9GaWxlPgotCTwvRmlsZXM+Ci0JPEdsb2JhbHM+Ci0JPC9HbG9iYWxzPgotPC9WaXN1YWxT
dHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
bWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NGQyNzcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBtYWlu
LmNwcDogRExMIGVudHJ5IHBvaW50IGFuZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRh
LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJFR0wv
U3VyZmFjZS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLXN0YXRp
YyBEV09SRCBjdXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOwotCi1CT09MIFdJTkFQSSBE
bGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQp
Ci17Ci0gICAgc3dpdGNoIChyZWFzb24pCi0gICAgewotICAgICAgY2FzZSBETExfUFJPQ0VTU19B
VFRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOwot
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAot
ICAgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OkN1cnJlbnQgKmN1cnJlbnQgPSAoZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9m
KGdsOjpDdXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOwotCi0g
ICAgICAgICAgICAgICAgY3VycmVudC0+Y29udGV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudC0+ZGlzcGxheSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgotICAgICAgICB7Ci0gICAg
ICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAg
ICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2Fs
RnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAg
ICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxG
cmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRsc0Zy
ZWUoY3VycmVudFRMUyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotbmFtZXNw
YWNlIGdsCi17Ci12b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5j
b250ZXh0ID0gY29udGV4dDsKLSAgICBjdXJyZW50LT5kaXNwbGF5ID0gZGlzcGxheTsKLQotICAg
IGlmIChjb250ZXh0ICYmIGRpc3BsYXkgJiYgc3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIGNvbnRl
eHQtPm1ha2VDdXJyZW50KGRpc3BsYXksIHN1cmZhY2UpOwotICAgIH0KLX0KLQotQ29udGV4dCAq
Z2V0Q29udGV4dCgpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRW
YWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5jb250ZXh0OwotfQotCi1D
b250ZXh0ICpnZXROb25Mb3N0Q29udGV4dCgpCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKLSAgICAKLSAgICBpZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotZWdsOjpEaXNwbGF5ICpnZXREaXNw
bGF5KCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7Ci19Ci0KLUlEaXJlY3Qz
RERldmljZTkgKmdldERldmljZSgpCi17Ci0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0
RGlzcGxheSgpOwotCi0gICAgcmV0dXJuIGRpc3BsYXktPmdldERldmljZSgpOwotfQotCi1ib29s
IGNoZWNrRGV2aWNlTG9zdChIUkVTVUxUIGVycm9yQ29kZSkKLXsKLSAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBOVUxMOwotCi0gICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKGVycm9yQ29kZSkp
Ci0gICAgewotICAgICAgICBkaXNwbGF5ID0gZ2w6OmdldERpc3BsYXkoKTsKLSAgICAgICAgZGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotfQotCi0vLyBSZWNvcmRzIGFuIGVycm9yIGNvZGUKLXZvaWQg
ZXJyb3IoR0xlbnVtIGVycm9yQ29kZSkKLXsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
R2V0Q3VycmVudENvbnRleHQoKTsKLQotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChlcnJvckNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0lOVkFMSURf
RU5VTToKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRFbnVtKCk7Ci0gICAgICAg
ICAgICBUUkFDRSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBlbnVtXG4iKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9WQUxVRToKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRWYWx1ZSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0
ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgdmFsdWVcbiIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKLSAgICAgICAgICAgIFRSQUNFKCJcdCEgRXJy
b3IgZ2VuZXJhdGVkOiBpbnZhbGlkIG9wZXJhdGlvblxuIik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX09VVF9PRl9NRU1PUlk6Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvcmRPdXRPZk1lbW9yeSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0
ZWQ6IG91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOwotICAgICAgICAgICAgVFJBQ0Uo
Ilx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZnJhbWVidWZmZXIgb3BlcmF0aW9uXG4iKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL21haW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQ4NDhhLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5o
OiBNYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgotCi0jaWZuZGVmIExJQkdMRVNWMl9N
QUlOX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9NQUlOX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAot
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotCi0jaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotc3RydWN0IEN1
cnJlbnQKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0OwotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eTsKLX07Ci0KLXZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotCi1Db250ZXh0ICpnZXRDb250ZXh0
KCk7Ci1Db250ZXh0ICpnZXROb25Mb3N0Q29udGV4dCgpOwotZWdsOjpEaXNwbGF5ICpnZXREaXNw
bGF5KCk7Ci0KLUlEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpOwotCi1ib29sIGNoZWNrRGV2
aWNlTG9zdChIUkVTVUxUIGVycm9yQ29kZSk7Ci19Ci0KLXZvaWQgZXJyb3IoR0xlbnVtIGVycm9y
Q29kZSk7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdCBUICZlcnJvcihHTGVudW0gZXJyb3JD
b2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0g
ICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFJTl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRo
dXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmIyMjUwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDk5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIG1hdGh1dGlsLmg6
IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgotCi0jaWZuZGVmIExJQkdMRVNW
Ml9NQVRIVVRJTF9IXwotI2RlZmluZSBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KLQotI2luY2x1ZGUg
PGludHJpbi5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5h
bWVzcGFjZSBnbAotewotaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQotewotICAgIHJldHVybiAo
eCAmICh4IC0gMSkpID09IDAgJiYgKHggIT0gMCk7Ci19Ci0KLWlubGluZSBpbnQgbG9nMihpbnQg
eCkKLXsKLSAgICBpbnQgciA9IDA7Ci0gICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOwotICAg
IHJldHVybiByOwotfQotCi1pbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGlu
dCB4KQotewotICAgIGlmICh4ICE9IDApIHgtLTsKLSAgICB4IHw9IHggPj4gMTsKLSAgICB4IHw9
IHggPj4gMjsKLSAgICB4IHw9IHggPj4gNDsKLSAgICB4IHw9IHggPj4gODsKLSAgICB4IHw9IHgg
Pj4gMTY7Ci0gICAgeCsrOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIE1JTiwgdHlwZW5hbWUgTUFYPgotaW5saW5lIFQgY2xhbXAoVCB4LCBNSU4g
bWluLCBNQVggbWF4KQotewotICAgIHJldHVybiB4IDwgbWluID8gbWluIDogKHggPiBtYXggPyBt
YXggOiB4KTsKLX0KLQotaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxvYXQgeCkKLXsKLSAgICByZXR1
cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7Ci19Ci0KLXRlbXBsYXRlPGNvbnN0IGludCBuPgotaW5s
aW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOwotCi0gICAgaWYgKHggPiAxKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1heDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA8IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
ICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKLSAgICB9Ci19Ci0KLWlubGluZSBib29s
IHN1cHBvcnRzU1NFMigpCi17Ci0gICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwotICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzID0gZmFsc2U7Ci0KLSAgICBpZiAoY2hlY2tlZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdXBwb3J0czsKLSAgICB9Ci0KLSAgICBpbnQgaW5mb1s0XTsKLSAg
ICBfX2NwdWlkKGluZm8sIDApOwotICAgIAotICAgIGlmIChpbmZvWzBdID49IDEpCi0gICAgewot
ICAgICAgICBfX2NwdWlkKGluZm8sIDEpOwotCi0gICAgICAgIHN1cHBvcnRzID0gKGluZm9bM10g
Pj4gMjYpICYgMTsKLSAgICB9Ci0KLSAgICBjaGVja2VkID0gdHJ1ZTsKLQotICAgIHJldHVybiBz
dXBwb3J0czsKLX0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX01BVEhVVElMX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YWRhYWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTQgKzAsMCBAQAotLy97e05PX0RFUEVOREVOQ0lFU319Ci0vLyBNaWNyb3NvZnQgVmlzdWFs
IEMrKyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgotLy8gVXNlZCBieSBsaWJHTEVTdjIucmMKLQot
Ly8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKLS8vIAotI2lmZGVmIEFQU1RV
RElPX0lOVk9LRUQKLSNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotI2RlZmluZSBf
QVBTX05FWFRfUkVTT1VSQ0VfVkFMVUUgICAgICAgIDEwMQotI2RlZmluZSBfQVBTX05FWFRfQ09N
TUFORF9WQUxVRSAgICAgICAgIDQwMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVF
ICAgICAgICAgMTAwMQotI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEw
MQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvdXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdj
NjJkOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3V0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM1ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIHV0aWxpdGllcy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBv
dGhlciB1dGlsaXR5IHJvdXRpbmVzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgotCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi1uYW1lc3Bh
Y2UgZ2wKLXsKLQotLy8gVGhpcyBpcyBob3cgbXVjaCBkYXRhIHRoZSBhcHBsaWNhdGlvbiBleHBl
Y3RzIGZvciBhIHVuaWZvcm0KLWludCBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudChHTGVu
dW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CT09M
OgotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgY2FzZSBH
TF9TQU1QTEVSXzJEOgotICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0gICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBj
YXNlIEdMX0lOVF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgY2FzZSBH
TF9CT09MX1ZFQzM6Ci0gICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVD
NDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgcmV0dXJuIDk7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6Ci0gICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIGlzIGhv
dyBtdWNoIGRhdGEgd2UgYWN0dWFsbHkgc3RvcmUgZm9yIGEgdW5pZm9ybQotaW50IFVuaWZvcm1J
bnRlcm5hbENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgIGNh
c2UgR0xfU0FNUExFUl8yRDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAg
IHJldHVybiAxOwotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0lOVF9W
RUMyOgotICAgICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAg
IGNhc2UgR0xfQk9PTF9WRUMzOgotICAgICAgICAgIHJldHVybiAzOwotICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0Ogot
ICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKLSAgICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMjoKLSAgICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzoKLSAgICAgICAgICByZXR1cm4gMTI7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0g
ICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVW5pZm9ybUNvbXBvbmVu
dFR5cGUoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoKHR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0JPT0xf
VkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgICAgIHJldHVybiBHTF9CT09M
OwotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKLSAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdM
X0lOVDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl9D
VUJFOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0g
ICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdM
X05PTkU7Ci19Ci0KLXNpemVfdCBVbmlmb3JtQ29tcG9uZW50U2l6ZShHTGVudW0gdHlwZSkKLXsK
LSAgICBzd2l0Y2godHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JPT0w6ICByZXR1cm4gc2l6
ZW9mKEdMaW50KTsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7
Ci0gICAgICBjYXNlIEdMX0lOVDogICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICAgIGRlZmF1
bHQ6ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXNp
emVfdCBVbmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBVbmlm
b3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3JtSW50
ZXJuYWxDb21wb25lbnRDb3VudCh0eXBlKTsKLX0KLQotc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNp
emUoR0xlbnVtIHR5cGUpCi17Ci0gICAgcmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZv
cm1Db21wb25lbnRUeXBlKHR5cGUpKSAqIFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHR5
cGUpOwotfQotCi1pbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gMDsK
LSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdM
X0lOVDoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgIGNh
c2UgR0xfQk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBH
TF9JTlRfVkVDNDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBy
ZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVy
biAwOwotfQotCi1pbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4g
MDsKLSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNl
IEdMX0lOVDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRf
VkVDMzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMz
OgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICByZXR1cm4gMzsKLSAgICAgIGNh
c2UgR0xfQk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBH
TF9JTlRfVkVDNDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi1pbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0
cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCi17
Ci0gICAgQVNTRVJUKGFsbG9jYXRpb25TaXplIDw9IGJpdHNTaXplKTsKLQotICAgIHVuc2lnbmVk
IGludCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6
ZSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2Nh
dGlvblNpemUgKyAxOyBpKyspCi0gICAgewotICAgICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgKmJpdHMgfD0gbWFzazsKLSAgICAgICAgICAgIHJl
dHVybiBpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWFzayA8PD0gMTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLUdMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgQVNTRVJUKGFs
aWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOwotCi0gICAgR0xzaXplaSByYXdQaXRj
aCA9IENvbXB1dGVQaXhlbFNpemUoZm9ybWF0LCB0eXBlKSAqIHdpZHRoOwotICAgIHJldHVybiAo
cmF3UGl0Y2ggKyBhbGlnbm1lbnQgLSAxKSAmIH4oYWxpZ25tZW50IC0gMSk7Ci19Ci0KLUdMc2l6
ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KQot
ewotICAgIHJldHVybiBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIDEsIGZvcm1hdCk7Ci19
Ci0KLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgIHJldHVybiA4ICogKEdMc2l6
ZWkpY2VpbCgoZmxvYXQpd2lkdGggLyA0LjBmKSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdo
dCAvIDQuMGYpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19BTkdMRToKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRToKLSAgICAgICAgcmV0dXJuIDE2ICogKEdMc2l6ZWkpY2VpbCgoZmxvYXQpd2lkdGgg
LyA0LjBmKSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdodCAvIDQuMGYpOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi19Ci0KLWJvb2wgSXNDb21wcmVzc2Vk
KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgaWYoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQgfHwKLSAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQgfHwKLSAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSB8fAotICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFRleHR1
cmUoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEdMX0RFUFRIX0NPTVBPTkVO
VCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfREVQVEhfU1RFTkNJTF9PRVMpCi0gICAgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFJl
dHVybnMgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiBhIHNpbmdsZSB0ZXhlbCBpbiBhbiBJbWFnZQot
aW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAg
ICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRTogICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAq
IDI7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5z
aWduZWQgY2hhcikgKiAzOwotICAgICAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogNDsKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhU
OiAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDQ7Ci0gICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMToKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KTsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKLSAg
ICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YoZmxvYXQpOwot
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsK
LSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZihmbG9hdCkg
KiAyOwotICAgICAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKGZs
b2F0KSAqIDM7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXpl
b2YoZmxvYXQpICogNDsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAg
ICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6ICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KSAqIDI7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpICogMzsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAg
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA0OwotICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1ib29sIElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICByZXR1cm4gKHRhcmdldCA+PSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggJiYgdGFyZ2V0IDw9IEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWik7Ci19Ci0KLWJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xl
bnVtIHRhcmdldCkKLXsKLSAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXND
dWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpOwotfQotCi1HTGVudW0gRXh0cmFjdEZvcm1hdChH
TGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9SR0I7Ci0gICAgICBjYXNlIEdMX1JHQkE0OiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9SR0JBOwotICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE7Ci0gICAgICBjYXNlIEdMX0xVTUlO
QU5DRThfQUxQSEE4X0VYVDogICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9M
VU1JTkFOQ0U7Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9BTFBIQTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVDogICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOiAgIHJldHVybiBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRTogcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7
Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6IHJldHVybiBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgY2FzZSBHTF9SR0JBMzJG
X0VYVDogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xf
UkdCMzJGX0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNh
c2UgR0xfQUxQSEEzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xf
TFVNSU5BTkNFOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOiAgICAgICAg
ICByZXR1cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCMTZG
X0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xf
QUxQSEExNkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5B
TkNFOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOiAgICAgICAgICByZXR1
cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfQkdSQV9FWFQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQ7Ci0gICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAgICAgIHJldHVybiBHTF9ERVBU
SF9DT01QT05FTlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiAgICAgICAg
ICAgIHJldHVybiBHTF9ERVBUSF9TVEVOQ0lMX09FUzsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQK
LSAgICB9Ci19Ci0KLUdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2
NTogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF81XzZf
NTsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ7Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6ICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOwotICAg
ICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQ
SEE4X0VYVDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U4X0VYVDogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllU
RTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQ6ICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDogICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTogcmV0dXJuIEdMX1VOU0lH
TkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6
IHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9F
WFQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAgIGNhc2UgR0xf
QUxQSEEzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6ICAgICAgICAgIHJldHVybiBH
TF9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOiAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdM
X0FMUEhBMTZGX0VYVDogICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09F
UzsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0hBTEZfRkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhU
OiAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0JHUkE4
X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfU0hPUlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAg
ICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOiAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM7Ci0gICAg
ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05F
OyAgIC8vIFVuc3VwcG9ydGVkCi0gICAgfQotfQotCi1ib29sIElzQ29sb3JSZW5kZXJhYmxlKEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBj
YXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JH
QkE4X09FUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgSXNEZXB0aFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQxNjoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xf
UkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAg
ICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc1N0ZW5jaWxSZW5kZXJhYmxl
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfUkdC
QTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAg
IGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGVzMmR4Ci17Ci0KLUQzRENNUEZVTkMgQ29udmVydENvbXBh
cmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCi17Ci0gICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNE
Q01QX0FMV0FZUzsKLSAgICBzd2l0Y2ggKGNvbXBhcmlzb24pCi0gICAgewotICAgICAgY2FzZSBH
TF9ORVZFUjogICAgZDNkQ29tcCA9IEQzRENNUF9ORVZFUjsgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVB
TDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENN
UF9HUkVBVEVSOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9
IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJyZWFrOwotICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNk
Q29tcCA9IEQzRENNUF9OT1RFUVVBTDsgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQ29tcDsKLX0KLQotRDNEQ09MT1IgQ29u
dmVydENvbG9yKGdsOjpDb2xvciBjb2xvcikKLXsKLSAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShn
bDo6dW5vcm08OD4oY29sb3IucmVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5v
cm08OD4oY29sb3IuZ3JlZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4
Pihjb2xvci5ibHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29s
b3IuYWxwaGEpKTsKLX0KLQotRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQp
Ci17Ci0gICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOwotCi0gICAgc3dpdGNo
IChibGVuZCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X09ORTogICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNk
QmxlbmQgPSBEM0RCTEVORF9TUkNDT0xPUjsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09O
RV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RTVF9DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9N
SU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9TUkNBTFBIQTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5V
U19TUkNfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05T
VEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVO
RF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFO
VF9BTFBIQTogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9T
UkNBTFBIQVNBVDsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBkM2RCbGVuZDsKLX0KLQotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRP
cChHTGVudW0gYmxlbmRPcCkKLXsKLSAgICBEM0RCTEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVO
RE9QX0FERDsKLQotICAgIHN3aXRjaCAoYmxlbmRPcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZV
TkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3Ag
PSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19SRVZF
UlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RC
bGVuZE9wOwotfQotCi1EM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNp
bE9wKQotewotICAgIEQzRFNURU5DSUxPUCBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VF
UDsKLQotICAgIHN3aXRjaCAoc3RlbmNpbE9wKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzog
ICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfWkVSTzsgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxP
UF9SRVBMQUNFOyBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3Ag
PSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1I6ICAgICAg
ZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1JTQVQ7IGJyZWFrOwotICAgICAgY2FzZSBH
TF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsK
LSAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5D
UjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNE
U1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZDNkU3RlbmNpbE9wOwotfQotCi1EM0RURVhUVVJFQUREUkVT
UyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApCi17Ci0gICAgRDNEVEVYVFVSRUFERFJF
U1MgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7Ci0KLSAgICBzd2l0Y2ggKHdyYXApCi0gICAg
ewotICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNT
X1dSQVA7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFw
ID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQ
RUFUOiAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19NSVJST1I7IGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkV3JhcDsKLX0KLQotRDNE
Q1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQot
ewotICAgIEQzRENVTEwgY3VsbCA9IEQzRENVTExfQ0NXOwotICAgIHN3aXRjaCAoY3VsbEZhY2Up
Ci0gICAgewotICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6IEQzRENVTExfQ0NXKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9DVyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgY3VsbCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGlu
ZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBjdWxsOwotfQotCi1EM0RD
VUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpCi17Ci0gICAgRDNE
Q1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0KLSAgICBz
d2l0Y2ggKGN1YmVGYWNlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6
Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZB
Q0VfUE9TSVRJVkVfWjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElW
RV9aOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhY2U7Ci19Ci0KLURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCBy
ZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICByZXR1cm4gKHJl
ZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwKLSAgICAgICAgICAgKGdyZWVu
ID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwKLSAgICAgICAgICAgKGJsdWUgID8g
RDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKLSAgICAgICAgICAgKGFscGhhID8gRDNE
Q09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDApOwotfQotCi1EM0RURVhUVVJFRklMVEVSVFlQRSBD
b252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpCi17Ci0gICAgRDNEVEVYVFVSRUZJTFRF
UlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICBzd2l0Y2ggKG1hZ0ZpbHRl
cikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZf
UE9JTlQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSOiAgZDNkTWFnRmlsdGVyID0gRDNE
VEVYRl9MSU5FQVI7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZDNkTWFnRmlsdGVyOwotfQotCi12b2lkIENvbnZlcnRNaW5GaWx0ZXIo
R0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNE
VEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKG1pbkZpbHRl
cikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIg
PSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICAqZDNkTWluRmls
dGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05P
TkU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
OgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgKmQzZE1p
cEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9M
SU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJ
TkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgICpkM2RN
aW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVY
Rl9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJ
TkVBUjoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAgICAq
ZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpk
M2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotfQotCi1ib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBH
THNpemVpIGVsZW1lbnRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlU
SVZFVFlQRSAqZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCkKLXsKLSAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0g
ICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOwotICAgICAgICAqZDNk
UHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9MSU5FUzoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsK
LSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC8gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5
cGUgPSBEM0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1l
bnRDb3VudCAtIDE7ICAgLy8gRDNEIGRvZXNuJ3Qgc3VwcG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBk
cmF3IHRoZSBsYXN0IGxpbmUgc2VwYXJhdGVseQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTElORV9TVFJJUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RS
SVA7Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDE7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9UUklBTkdMRVM6Ci0gICAgICAgICpkM2RQcmltaXRp
dmVUeXBlID0gRDNEUFRfVFJJQU5HTEVMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQg
PSBlbGVtZW50Q291bnQgLyAzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5H
TEVfU1RSSVA6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVTVFJJ
UDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC0gMjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgICAgKmQzZFByaW1p
dGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUZBTjsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50
ID0gZWxlbWVudENvdW50IC0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUQzREZP
Uk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9OVUxMOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xf
UkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4g
RDNERk1UX1I1RzZCNTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVy
biBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUQzRE1V
TFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1w
bGVzKQotewotICAgIGlmIChzYW1wbGVzIDw9IDEpCi0gICAgICAgIHJldHVybiBEM0RNVUxUSVNB
TVBMRV9OT05FOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBF
KXNhbXBsZXM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGR4MmVzCi17Ci0KLXVuc2lnbmVkIGludCBH
ZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkKLXsKLSAgICBpZiAoc3RlbmNp
bEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0K
LSAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRG
Uzg6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBj
YXNlIEQzREZNVF9EMjRYNFM0OgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRDNERk1U
X0QxNVMxOgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJM
RToKLSAgICAgIGNhc2UgRDNERk1UX0QzMjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAg
ICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgLy9jYXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4g
MDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTog
ICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9S
TUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2Fz
ZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1
QjU6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0UmVkU2l6ZShE
M0RGT1JNQVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0g
ICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAg
ICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDEwOwotICAgICAgY2Fz
ZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAg
cmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRHcmVlblNpemUoRDNERk9STUFUIGNv
bG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBE
M0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RG
TVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAxMDsKLSAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4Owot
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiA1OwotICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gNjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAg
IGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNh
c2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMTA7Ci0gICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICByZXR1
cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgY2FzZSBEM0RGTVRfUjVH
NkI1OgotICAgICAgICByZXR1cm4gNTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhG
b3JtYXQpCi17Ci0gICAgaWYgKGRlcHRoRm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDI0OwotICAgIH0KLSAgICBzd2l0Y2ggKGRlcHRoRm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRTogIHJldHVybiAxNjsKLSAgICAgIGNhc2Ug
RDNERk1UX0QzMjogICAgICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMx
OiAgICAgICAgIHJldHVybiAxNTsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgIHJl
dHVybiAyNDsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OiAgICAgICAgIHJldHVybiAyNDsKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6ICAgICAgIHJldHVybiAyNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0QxNjogICAgICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9D
S0FCTEU6IHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNEZTODogICAgICAgIHJldHVy
biAyNDsKLSAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAzMjsgICAvLyBE
M0Q5RXggb25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDA7ICAg
IC8vIEQzRDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci19Ci0KLWJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9y
bWF0KQotewotICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNE
Rk1UX1IxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9HMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRf
QTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEM0RGTVRf
UjMyRjoKLSAgICAgIGNhc2UgRDNERk1UX0czMlIzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJC
MzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2goc3VyZmFjZUZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9SMTZGOgot
ICAgICAgY2FzZSBEM0RGTVRfRzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIx
NkY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEM0RGTVRfUjMyRjoKLSAgICAg
IGNhc2UgRDNERk1UX0czMlIzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJ
c0RlcHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICByZXR1
cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOwotfQotCi1ib29sIElzU3RlbmNpbFRl
eHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgcmV0dXJuIChzdXJm
YWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11
bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIHR5cGU7Ci19Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0Ex
UjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICBy
ZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9S
R0I4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
Ci0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAg
IGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLX0KLQotc3RkOjpz
dHJpbmcgZ2V0VGVtcFBhdGgoKQotewotICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07Ci0gICAgRFdP
UkQgcGF0aExlbiA9IEdldFRlbXBQYXRoQShzaXplb2YocGF0aCkgLyBzaXplb2YocGF0aFswXSks
IHBhdGgpOwotICAgIGlmIChwYXRoTGVuID09IDApCi0gICAgewotICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBVSU5UIHVu
aXF1ZSA9IEdldFRlbXBGaWxlTmFtZUEocGF0aCwgInNoIiwgMCwgcGF0aCk7Ci0gICAgaWYgKHVu
aXF1ZSA9PSAwKQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IHN0ZDo6c3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwYXRoOwotfQotCi12b2lk
IHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBjb250ZW50LCBzaXplX3Qg
c2l6ZSkKLXsKLSAgICBGSUxFKiBmaWxlID0gZm9wZW4ocGF0aCwgInciKTsKLSAgICBpZiAoIWZp
bGUpCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgZndyaXRlKGNvbnRlbnQsIHNpemVvZihjaGFyKSwgc2l6ZSwgZmlsZSk7Ci0gICAg
ZmNsb3NlKGZpbGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjI0MTgu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGls
aXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyB1dGlsaXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxp
dHkgcm91dGluZXMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICi0jZGVmaW5lIExJ
QkdMRVNWMl9VVElMSVRJRVNfSAotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0KLWNvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNE
Rk9STUFUKShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKLWNvbnN0IEQzREZPUk1BVCBE
M0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsK
LQotbmFtZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBDb2xvcjsKLQotaW50IFVuaWZvcm1FeHRlcm5h
bENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKLWludCBVbmlmb3JtSW50ZXJuYWxDb21wb25l
bnRDb3VudChHTGVudW0gdHlwZSk7Ci1HTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVt
IHR5cGUpOwotc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwotc2l6ZV90
IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwotaW50IFZhcmlhYmxlUm93Q291bnQo
R0xlbnVtIHR5cGUpOwotaW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOwotCi1p
bnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50
IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpOwotCi1pbnQgQ29tcHV0ZVBp
eGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7Ci1HTHNpemVpIENvbXB1dGVQaXRj
aChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25t
ZW50KTsKLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVu
dW0gZm9ybWF0KTsKLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51
bSBmb3JtYXQpOwotYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXND
dWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLWJvb2wgSXNJbnRlcm5hbFRleHR1
cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci1HTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50
ZXJuYWxmb3JtYXQpOwotR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7
Ci0KLWJvb2wgSXNDb2xvclJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLWJvb2wg
SXNEZXB0aFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLWJvb2wgSXNTdGVuY2ls
UmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwotCi19Ci0KLW5hbWVzcGFjZSBlczJk
eAotewotCi1EM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsK
LUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpOwotRDNEQkxFTkQgQ29udmVy
dEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpOwotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVu
dW0gYmxlbmRPcCk7Ci1EM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNp
bE9wKTsKLUQzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7
Ci1EM0RDVUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZh
Y2UpOwotRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVtIGN1YmVGYWNlKTsK
LURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwg
Ym9vbCBhbHBoYSk7Ci1EM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51
bSBtYWdGaWx0ZXIpOwotdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQz
RFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpk
M2RNaXBGaWx0ZXIpOwotYm9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZl
VHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFBSSU1JVElWRVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQp
OwotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1E
M0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkg
c2FtcGxlcyk7Ci0KLX0KLQotbmFtZXNwYWNlIGR4MmVzCi17Ci1HTHVpbnQgR2V0QWxwaGFTaXpl
KEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29s
b3JGb3JtYXQpOwotR0x1aW50IEdldEdyZWVuU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwot
R0x1aW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0RGVw
dGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNE
Rk9STUFUIHN0ZW5jaWxGb3JtYXQpOwotYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1
cmZhY2VGb3JtYXQpOwotYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3Jt
YXQpOwotYm9vbCBJc0RlcHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7
Ci1ib29sIElzU3RlbmNpbFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwot
Ci1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZ
UEUgdHlwZSk7Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9y
bWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQp
OwotCi19Ci0KLXN0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCk7Ci12b2lkIHdyaXRlRmlsZShjb25z
dCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSk7Ci0KLWlubGluZSBi
b29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQotewotICAgIHN3aXRjaCAo
ZXJyb3JDb2RlKQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1I6
Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgotICAgICAgY2FzZSBEM0RFUlJfREVWSUNF
SFVORzoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX07Ci0K
LSNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ZlcnRleGNvbnZlcnNpb24uaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmI4Yjg5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHZlcnRleGNvbnZl
cnNpb24uaDogQSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBjYW4g
YmUgdXNlZCB0byBidWlsZAotLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQgYnkg
dGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5c3RlbS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVY
Q09OVkVSU0lPTl9IXwotI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwotCi0j
aW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJsaWJHTEVT
djIvQ29udGV4dC5oIiAvLyBEZWZpbmVzIEluZGV4Ci0KLW5hbWVzcGFjZSBnbAotewotCi0vLyBD
b252ZXJzaW9uIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYg
dGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQotLy8gc3RhdGlj
IFUgY29udmVydChUKTogY29udmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5
cGUgdG8gdGhlIG91dHB1dCB0eXBlCi0vLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlw
ZSBwcm9kdWNlZCBieSB0aGlzIGNvbnZlcnNpb24KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1
Y3QgSWRlbnRpdHkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7Ci0K
LSAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZy
b21ULCBjbGFzcyBUb1Q+Ci1zdHJ1Y3QgQ2FzdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlk
ZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOwotCi0gICAgc3Rh
dGljIFRvVCBjb252ZXJ0KEZyb21UIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VG9UPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0
PFQsIFQ+Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAg
dHlwZWRlZiBUIE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3JtYWxpemUKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBp
ZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAg
c3RhdGljIGZsb2F0IGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+IE5MOwotICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHgpOwotCi0gICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0g
ICAgICAgICAgICAvLyBzdGF0aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRo
ZSBmaXJzdCB0aW1lIHdlIGdldCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGlj
IGd1YXJkIGFuZCBhbGwgdGhhdC4KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAx
LjBmLygyKnN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpKzEpOwotICAgICAgICAgICAgcmV0
dXJuICgyKmYrMSkqZGl2aXNvcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmL05MOjptYXgoKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBGcm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgotc3RydWN0
IEZpeGVkVG9GbG9hdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7
Ci0KLSAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29u
dmVydChGcm9tVHlwZSB4KQotICAgIHsKLSAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEu
MGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxl
Qml0cyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOwot
ICAgIH0KLX07Ci0KLS8vIFdpZGVuIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
dCBpbml0aWFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCi0v
LyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25l
bnRzIGFmdGVyIGNvbnZlcnNpb24KLQotLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXpl
LgotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgTm9XaWRlbgotewotICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTjsKLX07Ci0KLS8vIFNIT1JULCBub3JtLVNIT1JULCBu
b3JtLVVOU0lHTkVEX1NIT1JUIGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29t
cG9uZW50cwotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsK
LSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTj4KLXN0cnVjdCBXaWRlblRvRm91cgotewotICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNp
emVfdCBmaW5hbFdpZHRoID0gNDsKLX07Ci0KLS8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRo
YXQgYXJlIGp1c3QgdGhhdC4KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IFNpbXBsZURlZmF1
bHRWYWx1ZXMKLXsKLSAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
MCk7IH0KLSAgICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQot
fTsKLQotLy8gQnV0IG5vcm1hbGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0g
c28gMS4wIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBtYXggdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLXN0cnVjdCBOb3JtYWxpemVkRGVmYXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8o
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6
Ci0vLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50
aXR5IHRyYW5zZm9ybSAod2l0aCBubyB3aWRlbmluZykKLS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNp
emVfdCBmaW5hbFNpemU6IG51bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAotLy8gc3Rh
dGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUs
IHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMu
IElucHV0IG1heSBiZSBzdHJpZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10
ZW1wbGF0ZSA8Y2xhc3MgSW5ULCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xh
c3MgRGVmYXVsdFZhbHVlUnVsZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3Qg
VmVydGV4RGF0YUNvbnZlcnRlcgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpP
dXRwdXRUeXBlIE91dHB1dFR5cGU7Ci0gICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0g
V2lkZW5SdWxlOjpmaW5hbFdpZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OwotICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBz
aXplb2YoT3V0cHV0VHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qg
SW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRU
eXBlICpvdXQpCi0gICAgewotICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50
ZXJBZGRCeXRlcyhpbiwgaSAqIHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQo
b3V0LCBlaW4sIDAsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onpl
cm8oKSkpOwotICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nh
c3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBj
b3B5Q29tcG9uZW50KG91dCwgZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0
VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4s
IDMsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0K
LSAgICAgICAgICAgIG91dCArPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6
c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnRBcnJheShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0
cmlkZSwgbiwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZSo+KG91dCkpOwotICAgIH0KLQotICBwcml2
YXRlOgotICAgIC8vIEFkdmFuY2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0
ZXMgKG5vdCBwb2ludGVkLXRvIGVsZW1lbnRzKS4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAg
ICBzdGF0aWMgVCAqcG9pbnRlckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5
dGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZVB0cikgKyBudW1CeXRlcyk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgY29weUNvbXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlw
ZSAqaW4sIHN0ZDo6c2l6ZV90IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBl
bGVtZW50aW5kZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRp
bmRleF0gPSBDb252ZXJ0ZXI6OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
W2VsZW1lbnRpbmRleF0gPSBkZWZhdWx0dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9O
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGFmMzNmYTAuLjg3Y2JjYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC0yNzA2LDI0ICsyNzA2LDE3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNT
KQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25z
dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2F0b20uYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCi0gICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCi0gICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhw
YW5kZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKLSAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYworICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0
aWNzQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
by5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCkBAIC0yNzM4LDYgKzI3MzEsNyBAQCBp
ZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3V0aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQaWNrZXIuY3BwCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKICAg
ICApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQ3NmRlODAuLmFiZGYxOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjI5Niw0OCArNjI5NiwzMiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFn
bWEuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmMgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvYXRvbS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NvbXBpbGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5
LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpYWdub3N0aWNzQmFzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJC
YXNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3Rp
dmVQYXJzZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm9FeHBhbmRlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJl
cHJvY2Vzc29yLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0
aWNzQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxl
ckJhc2UuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4
cHJlc3Npb25QYXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4
cGFuZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2Nh
dGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCg==
</data>
<flag name="commit-queue"
          id="199295"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181750</attachid>
            <date>2013-01-08 13:54:58 -0800</date>
            <delta_ts>2013-01-09 10:43:18 -0800</delta_ts>
            <desc>Patch (for bots, not for review)</desc>
            <filename>106274-2.patch</filename>
            <type>text/plain</type>
            <size>1778167</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNWJjOWZmOC4uODA5ODkxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTEsMjIgKzEsMjIgQEAKIDw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICIt
Ly9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1By
b3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotICAgIDxhcnJheT4K
LSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+
Ci0gICAgICAgICAgICA8c3RyaW5nPkFOR0xFPC9zdHJpbmc+Ci0gICAgICAgICAgICA8a2V5Pk9w
ZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0gICAgICAgICAgICA8c3RyaW5nPnIxMTcwPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0gICAgICAgICAg
ICA8c3RyaW5nPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VTQ008L2tleT4KLSAgICAgICAgICAgIDxzdHJp
bmc+c3ZuIGNvIC1yMTE3MCBodHRwOi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL3N2bi90
cnVuay88L3N0cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUltcG9ydERhdGU8L2tl
eT4KLSAgICAgICAgICAgIDxzdHJpbmc+MjAxMi0wNi0xNzwvc3RyaW5nPgotICAgICAgICAgICAg
PGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotICAgICAgICAgICAgPHN0cmluZz5CU0Q8L3N0
cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+Ci0gICAg
ICAgICAgICA8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5nPgotICAgICAgICA8L2RpY3Q+Ci0gICAg
PC9hcnJheT4KLTwvcGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGFycmF5Pgor
CTxkaWN0PgorCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CisJCTxzdHJpbmc+QU5HTEU8
L3N0cmluZz4KKwkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgorCQk8c3RyaW5nPnIxNjQx
PC9zdHJpbmc+CisJCTxrZXk+T3BlblNvdXJjZVdlYnNpdGVVUkw8L2tleT4KKwkJPHN0cmluZz5o
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCQk8a2V5Pk9w
ZW5Tb3VyY2VTQ008L2tleT4KKwkJPHN0cmluZz5zdm4gY28gLXIxNjQxIGh0dHA6Ly9hbmdsZXBy
b2plY3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rLzwvc3RyaW5nPgorCQk8a2V5Pk9wZW5Tb3Vy
Y2VJbXBvcnREYXRlPC9rZXk+CisJCTxzdHJpbmc+MjAxMy0wMS0wNDwvc3RyaW5nPgorCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlPC9rZXk+CisJCTxzdHJpbmc+QlNEPC9zdHJpbmc+CisJCTxrZXk+
T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+CisJCTxzdHJpbmc+QU5HTEUudHh0PC9zdHJpbmc+
CisJPC9kaWN0PgorPC9hcnJheT4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS5wcmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wcmkK
aW5kZXggMmY3YjcwMC4uMmJjN2ZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUucHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnByaQpAQCAt
OCw1ICs4LDYgQEAKIFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFCiAKIElOQ0xVREVQQVRIICs9IFwKLSAgICAkJFNPVVJDRV9ESVIvaW5jbHVk
ZS9HTFNMQU5HCisgICAgJCRTT1VSQ0VfRElSL2luY2x1ZGUvR0xTTEFORyBcCisgICAgJCRTT1VS
Q0VfRElSL2luY2x1ZGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzIwN2VjYS4uNTExM2I3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00Miw2ICs0MiwzNSBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsK
IAkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi87IH07CisJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4OTMxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEy
NjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk0MTY5NzRERUQwMDZGQUE1
QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCAqLzsgfTsKKwkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjRGOEFGMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NEY4OTYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggKi87IH07CisJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OTcxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNjRG
OEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAv
KiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4QjIxNjk3NERFRDAwNkZBQTVBIC8q
IEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NEY4OTkxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwICovOyB9OworCQlBMjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4
QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5j
cHAgKi87IH07CisJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUMxNjk3NERFRDAw
NkZBQTVBIC8qIElucHV0LmggKi87IH07CisJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY0Rjg5RDE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjY0RjhCNzE2
OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oICovOyB9
OworCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUYxNjk3NERFRDAwNkZBQTVB
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhB
MDE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCAqLzsgfTsKKwkJQTI2NEY4QkExNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5k
ZXIuY3BwICovOyB9OworCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCAqLzsgfTsKKwkJQTI2NEY4QkMx
Njk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJp
Y19sZXguaCAqLzsgfTsKKwkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNDE2
OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NEY4QkUxNjk3NERFRDAw
NkZBQTVBIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLzsgfTsKKwkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTYx
Njk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5oICovOyB9OworCQlBMjY0RjhDMDE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEE3MTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovOyB9OworCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgx
Njk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzIxNjk3NERFRDAw
NkZBQTVBIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2
NEY4QzMxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OworCQlBMjY0RjhDODE2
OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVz
LmggKi87IH07CisJCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhD
NjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9OworCQlBMjY0RjhD
QTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBW
YXJpYWJsZVBhY2tlci5oICovOyB9OworCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hy
cGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owog
CQlBMjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUz
OSAvKiBEaWFnbm9zdGljcy5oICovOyB9OwogCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi87IH07CkBAIC00OSwzMCArNzgsNiBAQAogCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CiAJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKIAkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKLQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKLQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07Ci0JCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owot
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OwotCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owot
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OwotCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKLQkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07Ci0JCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07Ci0JCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKLQkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07Ci0JCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07Ci0JCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKLQkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKLQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07Ci0JCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07Ci0JCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07Ci0JCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKLQkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKIAkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKIAkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OwogCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CkBAIC04NCw2ICs4OSw3IEBACiAJCUEyNjU2ODQxMTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OwogCQlBMjY1Njg0MjE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKIAkJQTI2NTY4NDMx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI5QjE1RTgx
Njk3ODQ1NzAwMTExRDk3IC8qIGtocnBsYXRmb3JtLmggaW4gQ29weUZpbGVzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJw
bGF0Zm9ybS5oICovOyB9OwogCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBG
MzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwpAQCAtOTcsMTMgKzEwMyw2IEBACiAJ
CUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKIAkJRkIzOUQyOEYxMjAwRjM1QTAwMDg4RTY5IC8q
IFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07
CiAJCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi87IH07Ci0JCUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAv
KiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovOyB9OwotCQlGQjM5RDI5NjEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi87IH07Ci0JCUZC
MzlEMjk4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRBMTIwMEYzNUEwMDA4OEU2OSAvKiBj
cHBzdHJ1Y3QuYyAqLzsgfTsKLQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNEIx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjM5RDI5RDEyMDBGMzVBMDAw
ODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyNEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJ
RkIzOUQyQTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgKi87IH07Ci0JCUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU0MTIw
MEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLzsgfTsKIAkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4
RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5jcHAgKi87IH07CiAJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQTgxMjAw
RjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovOyB9OwpAQCAtMTMzLDYgKzEzMiwxNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwogCQl9OworCQlBMjlCMTVFNjE2OTc4NDQ1MDAx
MTFEOTcgLyogQ29weUZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOworCQkJZHN0UGF0aCA9IHVzci9sb2NhbC9pbmNs
dWRlL0tIUjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJCUEy
OUIxNUU4MTY5Nzg0NTcwMDExMUQ5NyAvKiBraHJwbGF0Zm9ybS5oIGluIENvcHlGaWxlcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
IC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCkBAIC0xNzUsOCArMTg0LDM1IEBACiAJCUEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBB
QUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4
OTQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTYxNjk3NERF
RDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTgxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTkx
Njk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVB
IC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAv
KiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1
QSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0Rjg5RjE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEg
LyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFj
cm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEEyMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NEY4QTMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG51bWVyaWNfbGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjRGOEE0MTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE2MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVw
cm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE3MTY5NzRERUQwMDZGQUE1
QSAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
b3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBODE2
OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhB
OTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QUExNjk3
NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFy
aWFibGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQ
YWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4Q0MxNjk3NjJBQTAw
NkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0IwMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NCwzMiArMjIwLDYgQEAKIAkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyMiw2OSArMjMyLDYgQEAKIAkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
R2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTg4MTIwMEYy
NjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxODkxMjAwRjI2MjAwMDg4RTY5IC8qIENvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5p
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyog
ZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4RjEy
MDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6
ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk0MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
OTUxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQYXJz
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOTcxMjAwRjI2
MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk4MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1l
ZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAv
KiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDE5QTEyMDBGMjYyMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRl
cm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTlCMTIw
MEYyNjIwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMTlFMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291
cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOUYxMjAw
RjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRw
dXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUExMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQTIxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRI
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTMxMjAwRjI2MjAw
MDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNDEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTgxMjAwRjI2MjAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29s
QWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUExMjAwRjI2MjAw
MDg4RTY5IC8qIGF0b20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gYXRvbS5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkg
LyogYXRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBhdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21w
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUQxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUUxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjExMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzbGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjcxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCODEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI5MTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFs
aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkMxMjAwRjI2MjAw
MDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJFMTIwMEYyNjIwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lt
Ym9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDMjEyMDBG
MjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0Yx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDExMjAw
RjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxNSwyMyArMjYyLDYgQEAKIAkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xB
bGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjQzMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0NTEyMDBG
MzVBMDAwODhFNjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBh
dG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQ2MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8q
IGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyog
Y3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJB
bGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI1ODEyMDBGMzVBMDAw
ODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3Niwz
NSArMzA2LDEzIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OwotCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovID0g
eworCQlBMjY0RjhDQjE2OTc2MkFBMDA2RkFBNUEgLyogS0hSICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyog
cHBfdXRpbHMuaCAqLywKLQkJCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3NCYXNlLmNwcCAqLywKLQkJCQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3MuaCAqLywKLQkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovLAotCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5jcHAgKi8sCi0JCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovLAotCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLywKLQkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBh
cnNlci5oICovLAotCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8s
Ci0JCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi8sCi0JCQkJQTI2NTY3
RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjY1NjdENTE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uY3BwICovLAotCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oICov
LAotCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLywK
LQkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovLAotCQkJ
CUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJCUEy
NjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjY1NjdFNDE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAotCQkJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oICovLAotCQkJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwICovLAotCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIu
aCAqLywKKwkJCQlBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCAqLywK
IAkJCSk7Ci0JCQlwYXRoID0gbmV3OworCQkJbmFtZSA9IEtIUjsKKwkJCXBhdGggPSBpbmNsdWRl
L0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUEyNjU2ODJDMTU5QzIz
RTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKQEAgLTQzMiwyNCArMzQwLDMyIEBACiAJCQlw
YXRoID0gdGltaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI5QjE1
RTkxNjk3OEI3RDAwMTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5H
ICovLAorCQkJCUEyNjRGOENCMTY5NzYyQUEwMDZGQUE1QSAvKiBLSFIgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGQjM5
RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovLAogCQkJCTMx
MkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovLAotCQkJCUZCMzlEMjIwMTIwMEYzNUEw
MDA4OEU2OSAvKiBjb21waWxlciAqLywKLQkJCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyog
U291cmNlICovLAorCQkJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAvKiBzcmMgKi8sCiAJCQkJ
NUQ3QzU5QzQxMjA4QzY4QjAwMUM4NzNFIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCUZCMzlE
MENDMTIwMEVGOUIwMDA4OEU2OSAvKiBQcm9kdWN0cyAqLywKIAkJCSk7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNl
ICovID0geworCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogc3JjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCisJCQkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJ
KTsKLQkJCW5hbWUgPSBTb3VyY2U7CisJCQluYW1lID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKIAkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICov
ID0gewpAQCAtNDYwLDk0ICszNzYsMTIgQEAKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKLQkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCi0JCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAotCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAot
CQkJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAq
LywKLQkJCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5o
ICovLAotCQkJCUZCMzlEMThGMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCi0J
CQkJRkIzOUQxOTAxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCi0JCQkJRkIzOUQx
OTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLAotCQkJCUZCMzlEMTkyMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8sCi0JCQkJRkIzOUQxOTMxMjAwRjI2MjAw
MDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAotCQkJCUZCMzlEMTk0MTIwMEYyNjIwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCi0JCQkJRkIzOUQxOTUxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQxOTYxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDE5NzEyMDBGMjYyMDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhF
NjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQxOTkxMjAwRjI2MjAwMDg4RTY5IC8q
IGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQxOUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxp
bnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5o
ICovLAotCQkJCUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJ
CQlGQjM5RDE5RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJ
CUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAotCQkJCUZC
MzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDFB
MTEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAotCQkJCUZCMzlEMUEyMTIwMEYy
NjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQlGQjM5RDFBMzEyMDBGMjYyMDAw
ODhFNjkgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlEMUE0MTIwMEYyNjIwMDA4OEU2OSAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuY3BwICovLAotCQkJCUZCMzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5oICovLAotCQkJCUZCMzlEMUE3MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3Bw
ICovLAotCQkJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKLQkJ
CQlGQjM5RDFBOTEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAotCQkJCUZCMzlE
MUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQx
QkMxMjAwRjI2MjAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCi0JCQkJRkIzOUQxQkQx
MjAwRjI2MjAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAotCQkJCUZCMzlEMUJFMTIwMEYy
NjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCi0JCQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAv
KiBTaEhhbmRsZS5oICovLAotCQkJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi8sCi0JCQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmggKi8sCi0JCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCAqLywKLQkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAq
LywKLQkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICov
LAotCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAot
CQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUEyNjU2N0I3
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyNjU2
N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCSk7Ci0J
CQlpbmNsdWRlSW5JbmRleCA9IDA7Ci0JCQluYW1lID0gY29tcGlsZXI7Ci0JCQlwYXRoID0gc3Jj
L2NvbXBpbGVyOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQxQTkx
MjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQxQUExMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20u
YyAqLywKLQkJCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkgLyogYXRvbS5oICovLAotCQkJCUZC
MzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCi0JCQkJRkIzOUQxQUQxMjAw
RjI2MjAwMDg4RTY5IC8qIGNwcC5jICovLAotCQkJCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAv
KiBjcHAuaCAqLywKLQkJCQlGQjM5RDFBRjEyMDBGMjYyMDAwODhFNjkgLyogY3Bwc3RydWN0LmMg
Ki8sCi0JCQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAotCQkJCUZC
MzlEMUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLywKLQkJCQlGQjM5RDFCMjEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCi0JCQkJRkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nh
bm5lci5jICovLAotCQkJCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8s
Ci0JCQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAotCQkJCUZC
MzlEMUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywKLQkJCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhF
NjkgLyogdG9rZW5zLmMgKi8sCi0JCQkJRkIzOUQxQkExMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vu
cy5oICovLAotCQkJKTsKLQkJCWluY2x1ZGVJbkluZGV4ID0gMDsKLQkJCXBhdGggPSBwcmVwcm9j
ZXNzb3I7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAq
LywKKwkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICov
LAorCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAog
CQkJCTMxNThFQTBDMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICov
LAogCQkJCTMxNThFQTBEMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAq
LywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCkBAIC02
NDAsMjUgKzQ3NCwzMiBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vz
c29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1
NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAotCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmMgKi8sCi0JCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20u
aCAqLywKLQkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLAotCQkJ
CUZCMzlEMjQ4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuYyAqLywKLQkJCQlGQjM5RDI0OTEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmggKi8sCi0JCQkJRkIzOUQyNEExMjAwRjM1QTAwMDg4RTY5IC8q
IGNwcHN0cnVjdC5jICovLAorCQkJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuaCAqLywKKwkJCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjRGODk2MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oICovLAorCQkJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5OTE2OTc0REVEMDA2RkFBNUEgLyogRXhw
cmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTI2NEY4OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5QjE2OTc0REVEMDA2RkFBNUEgLyogSW5w
dXQuY3BwICovLAorCQkJCUEyNjRGODlDMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oICovLAor
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCisJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uaCAqLywKKwkJCQlBMjY0RjhBMTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5jcHAgKi8sCisJCQkJQTI2NEY4QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLywKKwkJCQlBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXguaCAqLywK
KwkJCQlBMjY0RjhBNDE2OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY0
RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjY0RjhB
NjE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTI2NEY4QTcxNjk3
NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTI2NEY4QTgxNjk3NERF
RDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEg
LyogVG9rZW4uaCAqLywKKwkJCQlBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8s
CiAJCQkJNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKLQkJ
CQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8sCi0JCQkJRkIzOUQyNEMx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5oICovLAotCQkJCUZCMzlEMjREMTIwMEYzNUEwMDA4
OEU2OSAvKiBwYXJzZXIuaCAqLywKLQkJCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJl
cHJvY2Vzcy5oICovLAotCQkJCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMg
Ki8sCi0JCQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLywKLQkJCQlG
QjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQyNTIx
MjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLywKLQkJCQlGQjM5RDI1MzEyMDBGMzVBMDAw
ODhFNjkgLyogc3ltYm9scy5oICovLAotCQkJCUZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAvKiB0
b2tlbnMuYyAqLywKLQkJCQlGQjM5RDI1NTEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03MDAsMjUgKzU0MSwyOSBAQAogCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMDE1OUMyMUIx
MDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMTE1OUMyMUIx
MDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2
NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUEyNjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgwODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODBCMTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODJCMTU5
QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1
Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxNThFQTBGMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY0RjhCQzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXgu
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGls
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8q
IFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM4MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOENBMTY5NzRF
MkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcz
NCw2ICs1NzksNyBAQAogCQkJCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtz
ICovLAogCQkJCTMxMkJEQjBCMTVGRUNBQjAwMDk3RUJDNyAvKiBDb3B5RmlsZXMgKi8sCiAJCQkJ
MzEyQkRCMEQxNUZFQ0FDRTAwOTdFQkM3IC8qIENvcHlGaWxlcyAqLywKKwkJCQlBMjlCMTVFNjE2
OTc4NDQ1MDAxMTFEOTcgLyogQ29weUZpbGVzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAo
CiAJCQkpOwpAQCAtNzg5LDEzICs2MzUsNiBAQAogCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMjhGMTIwMEYzNUEw
MDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDI5MTEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
NjEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5ODEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
OTEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQy
QTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlE
MkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOSwxNyArNjU4LDYgQEAKIAkJCQlBMjY1NjdCQjE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY3QkQxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RjAxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAv
KiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1Mzkg
LyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4M0Ix
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgzNyw2ICs2NjUsMTggQEAKIAkJCQlBMjY1Njg0MDE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1OEVBMEUxNjMwOTY4RDAwNkJF
NUVFIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhB
QzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEIyMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEI0MTY5NzRE
RUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCNjE2OTc0
REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NEY4QjgxNjk3
NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEJBMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjRGOEJFMTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjRGOEMzMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NEY4QzkxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVy
aXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVyaXZlZFNvdXJjZXMu
cHJpCmluZGV4IGIzYTg5ZmMuLjhmOTUwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9E
ZXJpdmVkU291cmNlcy5wcmkKQEAgLTEzLDcgKzEzLDcgQEAgZXF1YWxzKHNhbml0aXplZEZpbGUs
ICQkdG9TYW5pdGl6ZWRQYXRoKCQkX1BST19GSUxFXykpOlRFTVBMQVRFID0gZGVyaXZlZAogCiBB
TkdMRV9GTEVYX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBc
Ci0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKKyAg
ICAkJFBXRC9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCiAKIGFuZ2xlZmxl
eC5vdXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX1fbGV4LmNwcAogYW5nbGVmbGV4LmlucHV0ID0g
QU5HTEVfRkxFWF9TT1VSQ0VTCkBAIC0yMiw3ICsyMiw3IEBAIEdFTkVSQVRPUlMgKz0gYW5nbGVm
bGV4CiAKIEFOR0xFX0JJU09OX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2ds
c2xhbmcueSBcCi0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci55CisgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLnkKIAogYW5nbGViaXNvbl9kZWNsLm91dHB1dCA9ICR7UU1BS0VfRklMRV9CQVNF
fV90YWIuaAogYW5nbGViaXNvbl9kZWNsLmlucHV0ID0gQU5HTEVfQklTT05fU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKaW5kZXggZWFhOTM2ZC4uYjc3OTUzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9UYXJnZXQucHJpCkBAIC0xMyw3ICsxMyw3IEBAIENPTkZJRyArPSBzdGF0aWNs
aWIKIAogSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9zcmMgXAotICAgICQkU09V
UkNFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldyBcCisgICAgJCRTT1VSQ0VfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IgXAogICAgICQkU09VUkNFX0RJUi9pbmNsdWRlCiAK
IEhFQURFUlMgKz0gXApAQCAtMzMsNiArMzMsNyBAQCBIRUFERVJTICs9IFwKICAgICBzcmMvY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCisgICAgc3JjL2NvbXBpbGVyL0hh
c2hOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCiAgICAgc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVEbGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmggXApAQCAtNDQsMjggKzQ1LDE5IEBAIEhFQURFUlMgKz0gXAogICAgIHNyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggXAog
ICAgIHNyYy9jb21waWxlci9QcmFnbWEuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKLSAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5w
dXQuaCBcCiAgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAot
ICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xl
eGVyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAotICAg
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0gICAgc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAotICAgIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNl
ci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCi0gICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXAotICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIFwKKyAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmggXAorICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvTWFjcm8uaCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXgu
aCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisgICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIFwKKyAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRFU1NMLmggXAogICAgIHNy
Yy9jb21waWxlci9PdXRwdXRHTFNMLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5oIFwKQEAgLTg4LDYgKzgwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL3V0
aWwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKKyAgICBzcmMvY29tcGlsZXIvVmFyaWFibGVQYWNr
ZXIuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKIAogU09VUkNFUyArPSBcCkBA
IC0xMzQsMjMgKzEyNywxNyBAQCBTT1VSQ0VTICs9IFwKICAgICBzcmMvY29tcGlsZXIvdXRpbC5j
cHAgXAogICAgIHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgXAorICAgIHNyYy9jb21waWxlci9WYXJpYWJsZVBh
Y2tlci5jcHAgXAogICAgIHNyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwK
LSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
RXhwYW5kZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAg
XAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKLSAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYworICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NC
YXNlLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorICAgIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL01hY3JvLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNz
b3IuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcCBcCiAKIHdp
bjMyOiBTT1VSQ0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCiBlbHNlOiBTT1VS
Q0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4IGQ4Mjkz
MWUuLjQ2MjM3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMjMsNiArMjMsOCBAQAogI2RlZmluZSBDT01QSUxF
Ul9FWFBPUlQKICNlbmRpZgogCisjaW5jbHVkZSAiS0hSL2tocnBsYXRmb3JtLmgiCisKIC8vCiAv
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCkBAIC0xMTAs
NyArMTEyLDEwIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggICA9ICAweDhCODcsCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhC
ODksCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX01B
UFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDhCOEIKKyAgU0hfTUFQUEVEX05BTUVfTUFY
X0xFTkdUSCAgICAgID0gIDB4NjAwMCwKKyAgU0hfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgICAg
ID0gIDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgID0gIDB4NjAwMiwK
KyAgU0hfSEFTSEVEX05BTUVTX0NPVU5UICAgICAgICAgID0gIDB4NjAwMwogfSBTaFNoYWRlcklu
Zm87CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4KQEAgLTE0NCwxMSArMTQ5LDE0IEBAIHR5cGVkZWYg
ZW51bSB7CiAgIC8vIC0gVGhlIHNoYWRlciB0eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KICAg
U0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMCwKIAorICAvLyBFbmZvcmNlIHRoZSBHTFNMIDEu
MDE3IEFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhY2tpbmcgcmVzdHJpY3Rpb25zLgorICBTSF9FTkZP
UkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TID0gMHgwODAwLAorCiAgIC8vIFRoaXMgZmxhZyBlbnN1
cmVzIGFsbCBpbmRpcmVjdCAoZXhwcmVzc2lvbi1iYXNlZCkgYXJyYXkgaW5kZXhpbmcKICAgLy8g
aXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gVGhpcyBlbnN1cmVzLCBmb3Ig
ZXhhbXBsZSwKICAgLy8gdGhhdCB5b3UgY2Fubm90IHJlYWQgb2ZmIHRoZSBlbmQgb2YgYSB1bmlm
b3JtLCB3aGV0aGVyIGFuIGFycmF5CiAgIC8vIHZlYzIzNCwgb3IgbWF0MjM0IHR5cGUuCi0gIFNI
X0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyA9IDB4MDgwMAorICBTSF9DTEFNUF9JTkRJUkVD
VF9BUlJBWV9CT1VORFMgPSAweDEwMDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAogLy8KQEAgLTE2
Myw2ICsxNzEsMTAgQEAgQ09NUElMRVJfRVhQT1JUIGludCBTaEluaXRpYWxpemUoKTsKIC8vCiBD
T01QSUxFUl9FWFBPUlQgaW50IFNoRmluYWxpemUoKTsKIAorLy8gVGhlIDY0IGJpdHMgaGFzaCBm
dW5jdGlvbi4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgaW5wdXQgc3RyaW5nOyB0aGUKKy8v
IHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIHN0cmluZyBsZW5ndGguCit0eXBlZGVmIGtocm9ub3Nf
dWludDY0X3QgKCpTaEhhc2hGdW5jdGlvbjY0KShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KTsK
KwogLy8KIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiByZXNvdXJjZXMgKGNv
bnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCiAvLyBUaGUgbmFtZXMgZm9yIHRoZXNlIHJlc291cmNl
cyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcgZ2xfL0dMXy4KQEAgLTE4NCw2ICsxOTYs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBpbnQgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwog
ICAgIGludCBPRVNfRUdMX2ltYWdlX2V4dGVybmFsOwogICAgIGludCBBUkJfdGV4dHVyZV9yZWN0
YW5nbGU7CisKKyAgICAvLyBOYW1lIEhhc2hpbmcuCisgICAgLy8gU2V0IGEgNjQgYml0IGhhc2gg
ZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCisgICAgLy8gRGVm
YXVsdCBpcyBOVUxMLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgSGFzaEZ1bmN0aW9uOwogfSBTaEJ1
aWx0SW5SZXNvdXJjZXM7CiAKIC8vCkBAIC0yNzAsNiArMjg3LDExIEBAIENPTVBJTEVSX0VYUE9S
VCBpbnQgU2hDb21waWxlKAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWlu
YXRpb24gY2hhcmFjdGVyLgogLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIGxlbmd0
aCBvZiB0aGUgbWFwcGVkIHZhcmlhYmxlIG5hbWUgaW5jbHVkaW5nCiAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9OQU1F
X01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgdXNlci1kZWZpbmVkIG5hbWUgaW5jbHVk
aW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rl
ci4KKy8vIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgaGFz
aGVkIG5hbWUgaW5jbHVkaW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6IHRoZSBu
dW1iZXIgb2YgaGFzaGVkIG5hbWVzIGZyb20gdGhlIGxhdGVzdCBjb21waWxlLgogLy8gCiAvLyBw
YXJhbXM6IFJlcXVlc3RlZCBwYXJhbWV0ZXIKIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoR2V0SW5m
byhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zNTAsNiArMzcyLDI0IEBAIENPTVBJTEVSX0VY
UE9SVCB2b2lkIFNoR2V0QWN0aXZlVW5pZm9ybShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKTsKIAorLy8g
UmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIG5hbWUgaGFzaGluZyBlbnRyeSBmcm9tIHRoZSBs
YXRlc3QgY29tcGlsZS4KKy8vIFBhcmFtZXRlcnM6CisvLyBoYW5kbGU6IFNwZWNpZmllcyB0aGUg
Y29tcGlsZXIKKy8vIGluZGV4OiBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBuYW1lIGhhc2hp
bmcgZW50cnkgdG8gYmUgcXVlcmllZC4KKy8vIG5hbWU6IFJldHVybnMgYSBudWxsIHRlcm1pbmF0
ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHVzZXIgZGVmaW5lZCBuYW1lLgorLy8gICAgICAgSXQg
aXMgYXNzdW1lZCB0aGF0IG5hbWUgaGFzIGVub3VnaCBtZW1vcnkgdG8gYWNjb21vZGF0ZSB0aGUg
bmFtZS4KKy8vICAgICAgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8gc3RvcmUg
dGhlIHVzZXIgZGVmaW5lZCBuYW1lIGNhbgorLy8gICAgICAgYmUgb2J0YWluZWQgYnkgY2FsbGlu
ZyBTaEdldEluZm8gd2l0aCBTSF9OQU1FX01BWF9MRU5HVEguCisvLyBoYXNoZWROYW1lOiBSZXR1
cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBoYXNoZWQgbmFtZSBv
ZgorLy8gICAgICAgICAgICAgdGhlIHVuaWZvcm0gdmFyaWFibGUsIEl0IGlzIGFzc3VtZWQgdGhh
dCBoYXNoZWROYW1lIGhhcyBlbm91Z2gKKy8vICAgICAgICAgICAgIG1lbW9yeSB0byBhY2NvbW9k
YXRlIHRoZSBuYW1lLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJlcXVpcmVkCisvLyAgICAgICAg
ICAgICB0byBzdG9yZSB0aGUgbmFtZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBTaEdldElu
Zm8gd2l0aAorLy8gICAgICAgICAgICAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSC4KK0NPTVBJ
TEVSX0VYUE9SVCB2b2lkIFNoR2V0TmFtZUhhc2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5k
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVk
TmFtZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjVkYjdkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8v
ICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9Owot
CW9iamVjdFZlcnNpb24gPSA0NTsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhBZ2dyZWdh
dGVUYXJnZXQgc2VjdGlvbiAqLwotCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICov
ID0gewotCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAot
CQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlBMTVFNzhCRUNERkYyMEJDM0ZGRjA0MEEg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gQWxsOwotCQkJcHJv
ZHVjdE5hbWUgPSBBbGw7Ci0JCX07Ci0vKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMDU1NjNBREZFQTE1MTE2
RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi87IH07Ci0JCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTEx
OEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3BwICovOyB9OwotCQkwQTIxNjk0OTEw
M0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5p
dGlhbGl6ZURsbC5jcHAgKi87IH07Ci0JCTBBQzE4OTdFNDYxQTBENDc1OEUzRENFMyAvKiBWZXJz
aW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3BwICovOyB9OwotCQkw
RTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQ4RDk2N0I4RDI4OEE4
MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi87IH07Ci0JCTBFQzA5QjNCMjU0
ODI5RjhGMUQ5NTJEMyAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEQzlCNjQ3RTEwRjY1RjY2MTQyRUNDMSAvKiBGb3JM
b29wVW5yb2xsLmNwcCAqLzsgfTsKLQkJMUVEMUQyQzdDNzRDNkI2MjVBRkIxQ0NGIC8qIFZhcmlh
YmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKLQkJ
Mjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhBNkRFRERGMDhEQjM3MDM5NEE3
QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLzsgfTsKLQkJMkU3QzBEMzgwNEI4MzA4QTQ5M0Q5QjRC
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi87
IH07Ci0JCTMwMjFFMEJGMUJDODQ0MkZGMUYyRjJCNCAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0E1N0M2RDQxMzc3M0FF
QkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OwotCQkzMDY1RDI5RTk3RkFDNkUxMjcz
ODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAg
Ki87IH07Ci0JCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2
REMgLyogYXRvbS5jICovOyB9OwotCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3Ry
dWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4
QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07Ci0JCTNBOTZFOUNBQzhB
MjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsg
fTsKLQkJM0YxODM4OUJDQjg5MzcwQTkzMDY2N0Y0IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjcwREM3NEEyMUZC
Q0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07Ci0JCTQwRkMxODlCOEEyNDZF
REYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5j
cHAgKi87IH07Ci0JCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2VuSExTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDk1NDlEQ0NB
RjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovOyB9OwotCQk1MERGMDAwMDVDQzQy
MTJGNkZCMTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovOyB9OwotCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi87IH07Ci0JCTVGN0I1MkE1NERDRTgxNTVFRDk0
RUNGOCAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAq
LzsgfTsKLQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlGRjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUw
MDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07Ci0JCTg4OEYxMzgyNDk4RTJENzRB
RjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovOyB9Owot
CQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdDRjFGODNFODQy
OTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJOTNBNDFB
RjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3Bw
ICovOyB9OwotCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VG
RjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07Ci0JCUEyMDEwODNCMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3Mu
Y3BwICovOyB9OwotCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEy
MDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07Ci0JCUEyMDEwODNFMTU5QzMxQTAwMEU1
N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5
MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07Ci0JCUEyMDEwODQxMTU5QzMxQTAw
MEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9Owot
CQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8q
IE1hY3JvLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OwotCQlB
MjAxMDg0NDE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JC
RSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OwotCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9r
ZW5pemVyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgKi87IH07Ci0JCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07Ci0J
CUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKLQkJQTIw
MTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NjYx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1
N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUEyMDEwODY3MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
dGVjdFJlY3Vyc2lvbi5jcHAgKi87IH07Ci0JCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owot
CQlBMjAxMDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEyMDEwODZBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NkIxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OwotCQlBMjAxMDg2QzE1
OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NzExNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3
QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovOyB9OwotCQlBMjAxMDg3MjE1OUMzMjYy
MDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwICovOyB9OwotCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyog
UmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07Ci0J
CUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyog
c3ltYm9scy5jICovOyB9OwotCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKLQkJ
QjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUw
IC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwotCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKLQkJQzRB
QUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8q
IE91dHB1dEVTU0wuY3BwICovOyB9OwotCQlDNzVFQjkyOTJBMEREQTQ1NTkyQThBQ0YgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07Ci0JCUNC
N0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAq
LzsgfTsKLQkJRDU2RjdEMDBFOUIxNjJFNDE2RDM3REYwIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdDNzVCNTc2
RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07Ci0JCUUxQzdDNURGRjBCMkRGRUMw
OTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07Ci0JCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzRE
MDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKLQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRy
YW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87
IH07Ci0JCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovOyB9OwotCQlGNUFFMkEyOTJERkFGOEMxNTg0MTJBQTIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsg
fTsKLQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3RTVCMEYwNDYzNUU2MDkw
RjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KLQkJ
MUY3MjQyNDk2MTAzRURGMjlDQzI1RDg3IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
LQkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IERB
MTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlw
ZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MTsKLQkJCXJlbW90ZUluZm8gPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCX07Ci0JCTU1RDVGOUJGNzI3
RTRBM0I2NjM3ODAyQiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgw
NzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJ
cmVtb3RlR2xvYmFsSURTdHJpbmcgPSA2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzI7Ci0JCQlyZW1v
dGVJbmZvID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCX07Ci0JCTYwRDM1NDZBQzI3QjA5NEQ2Q0Ew
NENENiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1Mzkx
MzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xv
YmFsSURTdHJpbmcgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQ7Ci0JCQlyZW1vdGVJbmZvID0g
dHJhbnNsYXRvcl9nbHNsOwotCQl9OwotLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkwNTZGRUFE
QzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBMTE4RTUwMDNFNUMwRTI1M0M1MzgzOSAv
KiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9t
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTEyRUFGMDI4MzEx
RUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAv
KiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxODJCQUQ1MEQ0RTU4Qjg4NEY1RUI5RjMg
LyogRm9yTG9vcFVucm9sbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JMb29wVW5yb2xsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFy
Y2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlh
YmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5z
bGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTNF
RTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0
aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjY4QTZBQTgxMTQ5NTcxOEE2
OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2
MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBD
NyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkg
LyogZ2xzbGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBn
bHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MjhGRjIwMTgzOUM2
RjIzM0UyNkZGREEgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1QTIxNTk5QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdXRwdXRITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEOTkz
NTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEQzlCNjQ3RTEwRjY1
RjY2MTQyRUNDMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvckxv
b3BVbnJvbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2MEMzOTk4QzlDRTY2
REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0
aWFsaXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJCNjZBQjU4NzM4
NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QkJDODIyNEI5RDhFMjM0RDExN0ZBMEMg
LyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3RDlDRjM3NkRD
NTc5OUI0QzZCMzMzMUUgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBj
cHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVO
YW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1ODQ1RkZGNUE4RTYz
MzY0MzA4MjM2RCAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
aXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODlB
NkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzbGds
b2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTAyNTQ4NDJENzI5NzU2NzJD
MkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsaWRhdGVM
aW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0Q2MUNCMEJDRTU0
RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAv
KiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMg
LyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIElu
aXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMTY0NEIwMEU5MzA0QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNs
YXRvcl9nbHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3Jf
Z2xzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSAibGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hIjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjAx
NTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODIzMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Np
b25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVz
c2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI2MTU5
QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMwMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3QkJFIC8q
IHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAv
KiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzMx
NTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEyMDEwODM3MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODQ4MTU5QzMyMDkwMEU1N0JCRSAvKiBsZW5n
dGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1p
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NDkxNTlDMzI0RjAwRTU3
QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODRD
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEUxNTlDMzI0RjAwRTU3QkJFIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODRGMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NTAxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MjE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0
ZWN0UmVjdXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
dGVjdFJlY3Vyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU0
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU2MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIw
MTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JCRSAvKiBQcmFnbWEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg2MTE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg3
MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRvcl9o
bHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfaGxzbC5h
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBNTFDNzI4QjYxNUI0MUUx
RDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUU2NUUxMzlBRTEw
REU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIxNDhEOTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRV
bmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNzU3
MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29k
ZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9s
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xT
TEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJh
bnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyog
Q29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxkX2FuZ2xlLmd5cCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBidWls
ZF9hbmdsZS5neXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNGRDEyQzZFNDZFQkUw
ODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENDBG
NzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQ1M0RERDBDREYxNUVFMURE
MDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRB
NzUgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRFU1NMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8q
IFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRl
cm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFM0EyOUI2
RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjAxM0E3MjQwQkRB
RThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2Vh
cmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGN0IyOTcx
RDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1Npbmsu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjk5RTczN0QzRkZEMzBDQTVFMzU0MTUw
IC8qIGNvbW1vbi5neXBpICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IGNvbW1vbi5neXBpOyBwYXRoID0gLi4vYnVpbGQvY29tbW9u
Lmd5cGk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZGM0FBNjk0REY5QTQ0NTVBODEz
MjM0RCAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQlBMjAxMDdGQjE1OUMz
MTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9
OwotCQlBNUM5OTRFNzREQjFFNjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwotCQl9OwotCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyogRnJhbWV3
b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlGRTM2NzlBMDk1NUIyNUVC
N0JGMTE2RTYgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
R3JvdXAgc2VjdGlvbiAqLwotCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vz
c29yICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkwQzlC
NDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovLAotCQkJCTlDRUQzQUZGMUU2MUI0NUVF
MTAwNTY1NiAvKiBhdG9tLmggKi8sCi0JCQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLywKLQkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCi0J
CQkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAotCQkJCTgwNThBMEEyQTBB
MDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKLQkJCQlBMjAxMDg0ODE1OUMzMjA5MDBF
NTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAotCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4
RSAvKiBtZW1vcnkuYyAqLywKLQkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5
LmggKi8sCi0JCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKLQkJCQlDRkQx
MkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCi0JCQkJNkJCQzgyMjRCOUQ4RTIz
NEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovLAotCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2Fu
bmVyLmggKi8sCi0JCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICov
LAotCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJN0Q5
Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKLQkJCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCi0JCQkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRB
IC8qIHRva2Vucy5oICovLAotCQkJKTsKLQkJCXBhdGggPSBwcmVwcm9jZXNzb3I7Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyog
U291cmNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
N0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCi0JCQkJQTIwMTA4NDkx
NTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKLQkJCQlB
MjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywK
LQkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAotCQkJ
CUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCi0JCQkJRjc0
NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAotCQkJCTBBMTE4RTUwMDNFNUMw
RTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCi0JCQkJQjJGNUNBMTFFRUE5MkRGMjM4NEVG
RDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIg
LyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5o
ICovLAotCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywKLQkJCQlB
MjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCi0J
CQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywK
LQkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywK
LQkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCi0J
CQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKLQkJCQlB
MjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKLQkJCQlBMjAxMDg1
NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCi0JCQkJQTIwMTA4
NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKLQkJCQlBMjAxMDg1
OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKLQkJCQk1REM5QjY0
N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCi0JCQkJMTgyQkFENTBE
NEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKLQkJCQk0OTdDNUMyNEVFRjQ2
NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdB
NiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8q
IGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xz
bGFuZ190YWIuaCAqLywKLQkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1Npbmsu
Y3BwICovLAotCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAot
CQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywKLQkJCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovLAotCQkJCTYwQzM5OThD
OUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJCQlBMENFNDM2MzE4
NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAotCQkJCTJFN0M5QjZFNkRCNzUx
RTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAotCQkJCUEyMDEwODVBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQk4NTg0NUZG
RjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCTNG
N0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCTc5OURD
OTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlDNEZFOTg4RUY5QTI5Mzg2
N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCTE1M0JGMDZCRjEyQzZGNTA0
OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCTU3Q0YxRjgzRTg0MjkwMUM0
MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJODFDQzQyNDVBOEU1
QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJREVFQUZDNjE4
QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1
MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9z
c291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRBNzUgLyogT3V0
cHV0RVNTTC5jcHAgKi8sCi0JCQkJNkJCNjZBQjU4NzM4NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVT
U0wuaCAqLywKLQkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAg
Ki8sCi0JCQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLywKLQkJ
CQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJ
CUI1NUIzNTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCTlB
NUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQk1QTIxNTk5
QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUQyQzlDOEVCNEE3RUZG
NUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQk5NzZDODMxQTc1RUJFMDA5QTk4
NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovLAotCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcx
MSAvKiBQYXJzZUhlbHBlci5oICovLAotCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQ
b29sQWxsb2MuY3BwICovLAotCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxs
b2MuaCAqLywKLQkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCi0J
CQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKLQkJCQk0ODU3
RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAotCQkJCTlENDdC
MUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAotCQkJCUI0MzZFRkYw
NjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKLQkJCQlENDBGNzhDQjlCQTBD
ODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAotCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1
N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAotCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdB
RCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAotCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAv
KiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi8sCi0JCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxl
LmggKi8sCi0JCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAq
LywKLQkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJ
CQlBMjAxMDg1RDE1OUMzMjRGMDBFNTdCQkUgLyogdGltaW5nICovLAotCQkJCTBBM0EyNjBGNTM3
OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJRDUzREREMENERjE1
RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJNkZCNzBEQzc0QTIxRkJD
RDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKLQkJCQlEREQzQjdFM0I3QjM1QTBC
ODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKLQkJCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0
RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAotCQkJCUUzQTI5QjZFOUMyMUI2N0MyNUZG
MEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAotCQkJCUFBNTNCNjYzMkM3NkY5MDVERjA4RTU2
NCAvKiBUeXBlcy5oICovLAotCQkJCUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRT
aG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5p
c3RkLmggKi8sCi0JCQkJM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAot
CQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCi0JCQkJQjE0OEQ5NjdC
OEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAotCQkJCTkwMjU0
ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCi0JCQkJMjdD
MTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCi0JCQkJNUQ5OTM1
NEM0RDgxODdEMzg0QzgxMjA3IC8qIFZhcmlhYmxlSW5mby5oICovLAotCQkJCUY3MjdBRUM5MDY3
MTJFQzIzODA0MTQ2NCAvKiBWZXJzaW9uR0xTTC5jcHAgKi8sCi0JCQkJMTIwQUQwQTNCNzY0MkZC
NUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IFNvdXJjZTsK
LQkJCXBhdGggPSBjb21waWxlcjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RCA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMTk2REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLywKLQkJ
CQlFMEVEQzQxMzBFN0QzNzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8sCi0JCQkJQjJDMTg0QzM1
NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07Ci0JCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCi0JCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCi0JCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAotCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCi0JCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCi0JCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAotCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKLQkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAotCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCi0JCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
Ci0JCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAotCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAotCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKLQkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAotCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAot
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAotCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAotCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAotCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbmV3OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewot
CQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKLQkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCi0JCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAotCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCi0JCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCi0JCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAot
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGRlcGdyYXBoOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
LQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAotCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCi0JCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKLQkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gdGltaW5nOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlD
RjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovLAotCQkJCUY5OUU3
MzdEM0ZGRDMwQ0E1RTM1NDE1MCAvKiBjb21tb24uZ3lwaSAqLywKLQkJCSk7Ci0JCQluYW1lID0g
QnVpbGQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlFMEVEQzQxMzBFN0Qz
NzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9y
X2NvbW1vbi5hICovLAotCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xh
dG9yX2dsc2wuYSAqLywKLQkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNs
YXRvcl9obHNsLmEgKi8sCi0JCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJNTg5MkM3QTM2OTUzMzA0
MzdBRkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA4Qjg4MTVDQTJFRkU2MEZEMEMwMzYx
QkYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5z
bGF0b3JfZ2xzbCIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlCQUJDRTcyMTEwNkI1QzE1
MjdFRkVGMEQgLyogU291cmNlcyAqLywKLQkJCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyog
RnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVu
ZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gdHJhbnNsYXRvcl9nbHNsOwotCQkJcHJvZHVj
dE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gQTE2NDRCMDBF
OTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovOwotCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCTZG
NEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhF
M0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRp
dmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovLAotCQkJCUE1Qzk5NEU3NERC
MUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAo
Ci0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSB0cmFuc2xhdG9y
X2NvbW1vbjsKLQkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQlwcm9kdWN0
UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29t
bW9uLmEgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJh
cnkuc3RhdGljIjsKLQkJfTsKLQkJQTIwMTA3REMxNTlDMzEzQzAwRTU3QkJFIC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdCQkUgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXByb2Nlc3NvciIgKi87Ci0JCQlidWlsZFBo
YXNlcyA9ICgKLQkJCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLywKLQkJ
CQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQli
dWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1l
ID0gcHJlcHJvY2Vzc29yOwotCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNs
YXRvcl9jb21tb24gY29weS5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1
Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCUE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hs
c2wiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMDVGM0JDQTk1MTg3NzBCRTNGMUUwQTM4
IC8qIFNvdXJjZXMgKi8sCi0JCQkJRkUzNjc5QTA5NTVCMjVFQjdCRjExNkU2IC8qIEZyYW1ld29y
a3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMg
PSAoCi0JCQkpOwotCQkJbmFtZSA9IHRyYW5zbGF0b3JfaGxzbDsKLQkJCXByb2R1Y3ROYW1lID0g
dHJhbnNsYXRvcl9obHNsOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEE0NDdGNzVGMzNEQTRDNEMx
MjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlCdWlsZEluZGVwZW5kZW50
VGFyZ2V0c0luUGFyYWxsZWwgPSBZRVM7Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENFNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9u
ID0gIlhjb2RlIDMuMSI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJ
CSk7Ci0JCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7Ci0JCQlwcm9qZWN0
RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJ
MTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKLQkJCQk2RjRGRDM1Q0IzREZDODlE
NzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCi0JCQkJNTg5MkM3QTM2OTUzMzA0MzdB
RkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLywKLQkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovLAotCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAv
KiBwcmVwcm9jZXNzb3IgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTA1RjNC
Q0E5NTE4NzcwQkUzRjFFMEEzOCAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJNEI0QkRFN0FENjI2NkIzOUVENDNDMkQ0IC8qIENvZGVHZW5ITFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTVGN0I1MkE1NERDRTgxNTVFRDk0RUNGOCAvKiBPdXRwdXRITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUU5OUQ2RDgwREJGMDVFQ0U3MTA4QjI2RCAvKiBUcmFuc2xh
dG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyOTY0NjY1NjZEOEMwRjAyM0E1NTM3NjAg
LyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODcxMTU5QzMyNjIw
MEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEy
MDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
Ci0JCX07Ci0JCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAvKiBTb3VyY2VzICovID0gewotCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJQTIwMTA4M0IxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdu
b3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNDMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIw
MTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyog
VG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDYxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJQkFCQ0U3MjExMDZCNUMxNTI3RUZFRjBE
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQlENTZGN0QwMEU5
QjE2MkU0MTZEMzdERjAgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEVD
MDlCM0IyNTQ4MjlGOEYxRDk1MkQzIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQzRBQUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOUIxMTFCODNGQjYzNkZENUNERUMzMkEwIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUM3NUVCOTI5MkEwRERBNDU1OTJBOEFDRiAvKiBPdXRwdXRH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2MyAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzRjE4Mzg5QkNCODkzNzBBOTMw
NjY3RjQgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEFDMTg5N0U0
NjFBMEQ0NzU4RTNEQ0UzIC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsK
LQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlFQUEy
MkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMzAyMUUwQkYxQkM4NDQyRkYxRjJGMkI0IC8qIGdsc2xhbmdfbGV4LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTJFN0MwRDM4MDRCODMwOEE0OTNEOUI0QiAvKiBnbHNsYW5n
X3RhYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1
IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEEyMTY5NDkxMDNFMUUyMjhG
OUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTBERjAwMDA1
Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0
MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8q
IHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlG
RjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzdDNURGRjBCMkRG
RUMwOTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDU1NjNBREZF
QTE1MTE2RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUI4QkQyNjg1QTE2QjE4OENDREZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUY2QUJENThGOENBQjc2NDFEOEJGRTkzNSAvKiBTeW1ib2xUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxRUQxRDJDN0M3NEM2QjYyNUFGQjFD
Q0YgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMyQjFEQkNENkI4M0Yy
MTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlDQjdGMEVGMEQ2QTg5RkE4
QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2
MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQkzQTk2RTlDQUM4QTI1QUYx
NTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGMDk4RjQ2M0VEQUJDRjA3
NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ4NTUxN0YwODZGRENF
RjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUU4QzcyN0FBOEU5REM1
RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAotCQkJCUI0ODU4NDE3RTU0MzY1
QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NTE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0
UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2OTE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2QzE1OUMzMjRGMDBF
NTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0v
KiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhUYXJn
ZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KLQkJQTE1RTc4QkVDREZGMjBCQzNGRkYwNDBBIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5Owot
CQkJdGFyZ2V0ID0gNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9u
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA1NUQ1RjlCRjcyN0U0QTNCNjYzNzgwMkIgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQgLyogdHJhbnNsYXRvcl9nbHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA2MEQzNTQ2QUMyN0IwOTRENkNBMDRDRDYgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSBBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9obHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSAxRjcyNDI0OTYxMDNFREYyOUNDMjVEODcgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTMy
MkE4QzYyNDIzQjU5NUUxMUJBRDQyRCAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSBB
bGw7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQk0REE0MkE3OEQzQjg1NUM5Q0Q4
RjY1OEQgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlH
Q0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RS
QUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJCQlIRUFERVJfU0VBUkNIX1BB
VEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9O
QU1FID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07
Ci0JCTRGODUxRjVCQTVGQTQzRTlFMEI5Q0I4NiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9IEFsbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJODhBREM5Mjg1
NTE5QTY2ODgwOEI1MUVFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGli
OwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJ
U0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
PUQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQ
Uk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwot
CQl9OwotCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJN
RURJQVRFX0RJUiA9ICIkKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9O
KSI7Ci0JCQkJU0hBUkVEX0lOVEVSTUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291
cmNlcy8kKENPTkZJR1VSQVRJT04pIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0J
CUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BS
RUZJWCA9IGxpYjsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQki
XCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJ
CQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJ
CSk7Ci0JCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9uIGNvcHkiOwotCQkJfTsK
LQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJQTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJl
bGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0
dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NF
U1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJ
CQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJ
CQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFu
c2xhdG9yX2NvbW1vbiBjb3B5IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJ
QUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0J
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJ
CQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfZ2xzbDsKLQkJCX07Ci0JCQluYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLQkJQjA5NkZBRjAzMkRCMTlBQjYzN0QzOEYwIC8qIFJlbGVhc2Ug
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3Mg
PSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9E
RUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwi
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwK
LQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3Jf
aGxzbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJQzQ1NDZCMTRCMEVCNUVC
OEM1RDM5REMyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJNRURJQVRFX0RJUiA9ICIkKFBST0pF
Q1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9OKSI7Ci0JCQkJU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291cmNlcy8kKENPTkZJR1VSQVRJT04p
IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJRjAyOUUwRDM2OUZBRkVBNDZC
REFGQ0VFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJCUdD
Q19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJB
Q0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFU
SFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQUk9EVUNUX05B
TUUgPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQlG
RjAxQ0RGNDU5NEUwRkY5RTU4MUIzMTkgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwi
QU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJ
SEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkp
OwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQkJfTsKLQkJCW5hbWUg
PSBEZWJ1ZzsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkwRTU5RjhGRTRBODA5
OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJi
dWlsZF9hbmdsZSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVi
dWcgKi8sCi0JCQkJQzQ1NDZCMTRCMEVCNUVCOEM1RDM5REMyIC8qIFJlbGVhc2UgKi8sCi0JCQkp
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0JCTM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRv
cl9jb21tb24iICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCi0JCQkJRkYwMUNERjQ1OTRFMEZGOUU1ODFCMzE5IC8qIERlYnVn
ICovLAotCQkJCTREQTQyQTc4RDNCODU1QzlDRDhGNjU4RCAvKiBSZWxlYXNlICovLAotCQkJKTsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9OwotCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
cyA9ICgKLQkJCQkzMjJBOEM2MjQyM0I1OTVFMTFCQUQ0MkQgLyogRGVidWcgKi8sCi0JCQkJNEY4
NTFGNUJBNUZBNDNFOUUwQjlDQjg2IC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
RGVidWc7Ci0JCX07Ci0JCThCODgxNUNBMkVGRTYwRkQwQzAzNjFCRiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9nbHNsIiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTg4QURDOTI4NTUxOUE2Njg4MDhCNTFFRSAvKiBEZWJ1ZyAqLywKLQkJCQlBRjdDMkNE
MTBDNkZFQTA3NkIxNDFFNkUgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1
ZzsKLQkJfTsKLQkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0gewotCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJ
QTIwMTA3RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAotCQkJCUEyMDEwN0ZFMTU5QzMx
M0MwMEU1N0JCRSAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9
OwotCQlDNzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQlGMDI5
RTBEMzY5RkFGRUE0NkJEQUZDRUUgLyogRGVidWcgKi8sCi0JCQkJQjA5NkZBRjAzMkRCMTlBQjYz
N0QzOEYwIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0v
KiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0g
REExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAppbmRleCA3ZDkz
NDlhLi5mZjk3MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2FuZ2xldXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2FuZ2xldXRpbHMuaApAQCAtMTksNCArMTksOCBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmlu
dGYKICNlbmRpZgogCisjZGVmaW5lIFZFTkRPUl9JRF9BTUQgMHgxMDAyCisjZGVmaW5lIFZFTkRP
Ul9JRF9JTlRFTCAweDgwODYKKyNkZWZpbmUgVkVORE9SX0lEX05WSURJQSAweDEwREUKKwogI2Vu
ZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZGVidWcuY3BwCmluZGV4IGIyMjM4ZjkuLmM0NWIyYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCkBAIC04NCw2ICs4NCwxMiBAQCBi
b29sIHBlcmZBY3RpdmUoKQogU2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRI
ZWxwZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7CiAjaWYgIWRlZmluZWQoQU5HTEVfRElT
QUJMRV9QRVJGKQorI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyAgICBpZiAoIXBl
cmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICB2
YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CiAgICAgb3V0cHV0
KHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2lu
RXZlbnQpLCBmb3JtYXQsIHZhcmFyZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKaW5kZXggOTgyOGVjZi4uNWY4ZjYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaApAQCAtNDIsMjggKzQyLDMwIEBAIG5hbWVzcGFjZSBn
bAogI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNB
QkxFX1BFUkYpCiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQot
I2RlZmluZSBUUkFDRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSh0cnVlLCAidHJhY2U6ICVzKCVk
KTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UodHJ1ZSwgInRyYWNlOiAlcyglZCk6
ICIgbWVzc2FnZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQog
I2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFy
Z3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4gbmVlZCBv
ZiBmaXhpbmcuCiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfUEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkK
ICNlbHNlCi0jZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZml4
bWU6ICVzKCVkKTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJmaXht
ZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZB
X0FSR1NfXykKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3Iu
CiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FC
TEVfUEVSRikKICNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQotI2Rl
ZmluZSBFUlIobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJlcnI6ICVzKCVkKTogIm1l
c3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg
RVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6ICIgbWVzc2Fn
ZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQogI2VuZGlmCiAK
IC8vIEEgbWFjcm8gdG8gbG9nIGEgcGVyZm9ybWFuY2UgZXZlbnQgYXJvdW5kIGEgc2NvcGUuCiAj
aWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikKICNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4pIGdsOjpTY29w
ZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyICMjIF9fTElORV9fKF9fRlVO
Q1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKKyNlbHNlCisjZGVmaW5lIEVWRU5U
KG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29wZWRQZXJmRXZlbnRI
ZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKICNlbmRpZgogCiAvLyBBIG1hY3Jv
IGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVi
dWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3Zl
cnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCmlu
ZGV4IGJkZDE2MjQuLmRiZThjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdmVyc2lvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vdmVyc2lvbi5oCkBAIC0xLDEwICsxLDEyIEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04g
MQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVm
aW5lIEJVSUxEX1JFVklTSU9OIDExNjYKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTY0MQogCiAj
ZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5H
SUZZKHgpCiAKICNkZWZpbmUgUkVWSVNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9S
RVZJU0lPTikKICNkZWZpbmUgVkVSU0lPTl9TVFJJTkcgTUFDUk9fU1RSSU5HSUZZKE1BSk9SX1ZF
UlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoTUlOT1JfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklO
R0lGWShCVUlMRF9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKEJVSUxEX1JFVklTSU9OKQor
CisjZGVmaW5lIFZFUlNJT05fRFdPUkQgKChNQUpPUl9WRVJTSU9OIDw8IDI0KSB8IChNSU5PUl9W
RVJTSU9OIDw8IDE2KSB8IEJVSUxEX1JFVklTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKaW5kZXggZGI1ZjcyOS4uZGNlOGM2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Zh
bGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCkBAIC0xMTQs
NiArMTE1LDkgQEAgVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIAogYm9vbCBUQ29tcGlsZXI6Oklu
aXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCiB7CisgICAgbWF4VW5pZm9y
bVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CisgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CisgICAgICAgIHJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzOwogICAgIFRTY29wZWRQb29sQWxsb2NhdG9yIHNjb3BlZEFs
bG9jKCZhbGxvY2F0b3IsIGZhbHNlKTsKIAogICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5bWJv
bCB0YWJsZS4KQEAgLTEyMSw2ICsxMjUsOCBAQCBib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEluaXRFeHRlbnNpb25CZWhhdmlvcihyZXNvdXJjZXMsIGV4dGVuc2lvbkJlaGF2aW9yKTsKIAor
ICAgIGhhc2hGdW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTk0LDExICsyMDAsMTkgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUo
Y29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICAvLyBDYWxsIG1hcExv
bmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgog
ICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBt
YXBwZWQgc3ltYm9sIG5hbWVzIGFuZAogICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFw
cGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpKQorICAgICAgICAv
LyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlz
IGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCiAg
ICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKIAotICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKSkKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQVRUUklCVVRFU19VTklGT1JN
UykpIHsKICAgICAgICAgICAgIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMocm9vdCk7CisgICAgICAg
ICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
KSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25z
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsICJ0b28gbWFueSB1bmlmb3JtcyIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkK
ICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwpAQCAtMjI4LDYgKzI0
Miw3IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVp
bHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogCiB2b2lkIFRDb21waWxlcjo6Y2xlYXJSZXN1bHRz
KCkKIHsKKyAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51cCgpOwogICAgIGluZm9TaW5rLmlu
Zm8uZXJhc2UoKTsKICAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKICAgICBpbmZvU2luay5kZWJ1
Zy5lcmFzZSgpOwpAQCAtMjM2LDcgKzI1MSw4IEBAIHZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3Vs
dHMoKQogICAgIHVuaWZvcm1zLmNsZWFyKCk7CiAKICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5DbGVhbnVwKCk7Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKworICAgIG5h
bWVNYXAuY2xlYXIoKTsKIH0KIAogYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50
ZXJtTm9kZSogcm9vdCkKQEAgLTMxMiwxMCArMzI4LDE2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZv
cmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQogCiB2
b2lkIFRDb21waWxlcjo6Y29sbGVjdEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkK
IHsKLSAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMp
OworICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcywg
aGFzaEZ1bmN0aW9uKTsKICAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7CiB9CiAKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCit7CisgICAgVmFyaWFibGVQ
YWNrZXIgcGFja2VyOworICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNr
aW5nTGltaXRzKG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Cit9CisKIHZvaWQgVENvbXBp
bGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAKaW5kZXggNWY5M2EwMy4uMDZmMzcwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
CkBAIC02LDEwICs2LDE0IEBACiAKICNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgog
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAot
VERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOiBtSW5mb1Np
bmsoaW5mb1NpbmspCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6CisgICAgbUluZm9TaW5rKGluZm9TaW5rKSwKKyAgICBtTnVtRXJyb3JzKDApLAorICAg
IG1OdW1XYXJuaW5ncygwKQogewogfQogCkBAIC0yMyw5ICsyNywyMyBAQCB2b2lkIFREaWFnbm9z
dGljczo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKIHsKLSAgICBUSW5mb1NpbmtCYXNlJiBz
aW5rID0gbUluZm9TaW5rLmluZm87Ci0gICAgVFByZWZpeFR5cGUgcHJlZml4ID0gc2V2ZXJpdHkg
PT0gRVJST1IgPyBFUHJlZml4RXJyb3IgOiBFUHJlZml4V2FybmluZzsKKyAgICBUUHJlZml4VHlw
ZSBwcmVmaXggPSBFUHJlZml4Tm9uZTsKKyAgICBzd2l0Y2ggKHNldmVyaXR5KQorICAgIHsKKyAg
ICAgIGNhc2UgRVJST1I6CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgcHJlZml4ID0g
RVByZWZpeEVycm9yOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgV0FSTklORzoKKyAgICAg
ICAgKyttTnVtV2FybmluZ3M7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIAorICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1Npbmsu
aW5mbzsKICAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tl
bicgOiBleHRyYWluZm8gKi8KICAgICBzaW5rLnByZWZpeChwcmVmaXgpOwogICAgIHNpbmsubG9j
YXRpb24oRW5jb2RlU291cmNlTG9jKGxvYy5maWxlLCBsb2MubGluZSkpOwpAQCAtNDEsNCArNTks
NSBAQCB2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCiB7CisgICAgd3JpdGVJbmZvKHNldmVyaXR5
KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAppbmRleCA0M2ExMzA2Li5j
YjcxYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJ
Q1NfSF8KICNkZWZpbmUgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KIAotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgiCiAKIGNsYXNzIFRJbmZvU2luazsKIApAQCAt
MTksNiArMTksOSBAQCBjbGFzcyBURGlhZ25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNz
CiAKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9CiAKKyAg
ICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorICAgIGludCBu
dW1XYXJuaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1OdW1XYXJuaW5nczsgfQorCiAgICAgdm9pZCB3
cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHJlYXNvbiwKQEAgLTM0LDYgKzM3LDggQEAgY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGlj
IHBwOjpEaWFnbm9zdGljcwogCiAgIHByaXZhdGU6CiAgICAgVEluZm9TaW5rJiBtSW5mb1Npbms7
CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgaW50IG1OdW1XYXJuaW5nczsKIH07CiAKICNlbmRp
ZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmluZGV4IDIxZDNkZmMu
Ljk1Y2E1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgImNv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgi
CiAKIGNsYXNzIFREaWFnbm9zdGljczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQyMTQxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0hB
U0hfTkFNRVNfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhB
U0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3Ry
aW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNI
X05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwCmluZGV4IDkyYzQ1MDUuLjkwMzJiM2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCkBA
IC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCisjaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5hbWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
bG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKQEAgLTE0NDUsMyArMTQ0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNp
Y1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJtQwogICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSks
IG5vZGUtPmdldExpbmUoKSk7CiB9CiAKKy8vIHN0YXRpYworVFN0cmluZyBUSW50ZXJtVHJhdmVy
c2VyOjpoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uKQoreworICAgIGlmIChoYXNoRnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIGtocm9ub3NfdWludDY0X3QgbnVtYmVyID0gKCpoYXNo
RnVuY3Rpb24pKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgVFN0cmluZ1N0cmVh
bSBzdHJlYW07CisgICAgc3RyZWFtIDw8IEhBU0hFRF9OQU1FX1BSRUZJWCA8PCBzdGQ6OmhleCA8
PCBudW1iZXI7CisgICAgVFN0cmluZyBoYXNoZWROYW1lID0gc3RyZWFtLnN0cigpOworICAgIHJl
dHVybiBoYXNoZWROYW1lOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmluZGV4IDY0ZWU5MmQuLjAzMzE3NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAK
QEAgLTYsOCArNiwxMSBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0RVNTTC5oIgogCi1U
T3V0cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rKQorVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
ICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3lt
Ym9sVGFibGUpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0RVNTTC5oCmluZGV4IDRmYTczYzguLmRkOGM1YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaApAQCAtMTIsNyAr
MTIsMTAgQEAKIGNsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQogewog
cHVibGljOgotICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworICAgIFRP
dXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcAppbmRleCBkZDMxYjRiLi41ODczMDQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCkBAIC02LDgg
KzYsMTEgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKIAotVE91dHB1dEdM
U0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspCi0gICAgOiBUT3V0cHV0R0xT
TEJhc2Uob2JqU2luaykKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuaAppbmRleCAwZmUyMzU2Li45MDMwMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKQEAgLTEyLDcgKzEyLDEwIEBA
CiBjbGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKIHsKIHB1YmxpYzoK
LSAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xT
TChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuY3BwCmluZGV4IDIxMDBlYWEuLjNjM2M5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApAQCAtOSwzNSAr
OSw2IEBACiAKIG5hbWVzcGFjZQogewotVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYg
dHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsKLSAgICBpZiAodHlwZS5pc01hdHJpeCgp
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQiOwotICAgICAgICBvdXQgPDwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJv
b2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNp
emUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmco
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOwotfQotCiBUU3RyaW5n
IGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCiB7CiAgICAgQVNTRVJUKHR5cGUuaXNB
cnJheSgpKTsKQEAgLTY2LDEwICszNywxNiBAQCBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlKiBub2RlKSB7CiB9CiB9ICAvLyBuYW1lc3BhY2UKIAotVE91dHB1dEdMU0xCYXNlOjpU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaykKK1RPdXRwdXRHTFNMQmFzZTo6
VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKICAgICAgIG1PYmpTaW5rKG9ialNpbmsp
LAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKKyAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMoZmFsc2UpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAg
bU5hbWVNYXAobmFtZU1hcCksCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiB7CiB9
CiAKQEAgLTEwMSw3ICs3OCw3IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSAmJgogICAgICAgICAobURlY2xhcmVkU3RydWN0cy5maW5kKHR5cGUuZ2V0VHlw
ZU5hbWUoKSkgPT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCiAgICAgewotICAgICAgICBvdXQg
PDwgInN0cnVjdCAiIDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAie1xuIjsKKyAgICAgICAgb3V0
IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICJ7XG4iOwog
ICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAgLTExMCw3ICs4Nyw3IEBAIHZvaWQg
VE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAg
ICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CiAgICAgICAgICAgICBpZiAod3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZFR5cGUtPmdldFByZWNpc2lvbigpKSkKICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVs
ZFR5cGUpIDw8ICIgIiA8PCBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAg
b3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZFR5cGUpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZFR5
cGUtPmdldEZpZWxkTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXko
KSkKICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKICAg
ICAgICAgICAgIG91dCA8PCAiO1xuIjsKQEAgLTE0MCw3ICsxMTcsNyBAQCB2b2lkIFRPdXRwdXRH
TFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBh
cmdzKQogCiAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOwog
ICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgbmFt
ZTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobmFtZSk7CiAgICAgICAgIGlm
ICh0eXBlLmlzQXJyYXkoKSkKICAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKHR5cGUp
OwogCkBAIC0xNTcsNyArMTM0LDcgQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0xC
YXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCiAKICAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAgICAgewotICAgICAgICBvdXQgPDwgdHlw
ZS5nZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUuZ2V0
VHlwZU5hbWUoKSkgPDwgIigiOwogICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAg
LTE5Niw3ICsxNzMsNyBAQCB2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCogbm9kZSkKICAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VTeW1ib2xX
aXRoVmFsdWUobm9kZSkpCiAgICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29wSW5kZXhW
YWx1ZShub2RlKTsKICAgICBlbHNlCi0gICAgICAgIG91dCA8PCBub2RlLT5nZXRTeW1ib2woKTsK
KyAgICAgICAgb3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCiAg
ICAgaWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkK
ICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKQEAgLTI3Miw3
ICsyNDksNyBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIuIjsKICAgICAgICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogQVNTRVJUCi0gICAgICAg
ICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgaGFzaE5hbWUobm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ5Niw3ICs0NzMsNyBAQCBib29sIFRPdXRwdXRHTFNMQmFz
ZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgIEFTU0VSVCh2
aXNpdCA9PSBQcmVWaXNpdCk7CiAgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBub2RlLT5nZXROYW1lKCk7Cisg
ICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAKICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CiAgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVy
cyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKQEAgLTUwOSw3ICs0ODYsNyBAQCBib29sIFRPdXRwdXRH
TFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCiAgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgogICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5v
ZGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhh
c2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAogICAgICAgICAgICAgaW5jcmVtZW50
RGVwdGgoKTsKICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlu
cyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCkBAIC01MzksOCArNTE2LDcgQEAgYm9vbCBUT3V0
cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQogICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KICAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5n
IGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAg
ICAgICAgICAgewpAQCAtNjAxLDcgKzU3Nyw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpOwotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOwor
ICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICIo
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CiAgICAgICAgICAgICB7CkBAIC03NDcsMyArNzIzLDU5IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgewogICAgICAgICBvdXQgPDwgIntc
bn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgogICAgIH0KIH0KKworVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
b3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2
ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNM
QmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobUhhc2hGdW5j
dGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAg
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5kKG5hbWUuY19zdHIoKSk7
CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhh
c2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFtZS5jX3N0cigpXSA9IGhh
c2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgICAg
IHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHJl
dHVybiBoYXNoTmFtZShuYW1lKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmgKaW5kZXggZWZkMGI1Zi4uMDFlOWQ0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0xCYXNlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEdMU0xCYXNlLmgKQEAgLTE2LDcgKzE2LDEwIEBACiBjbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgogewogcHVibGljOgotICAgIFRPdXRwdXRHTFNMQmFzZShU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFz
ZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
VEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CkBAIC0yNSw2ICsy
OCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbikgPSAwOwogICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKTsKICAgICBjb25zdCBDb25zdGFudFVu
aW9uKiB3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50
VW5pb24qIHBDb25zdFVuaW9uKTsKKyAgICBUU3RyaW5nIGdldFR5cGVOYW1lKGNvbnN0IFRUeXBl
JiB0eXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKTsKQEAgLTM3LDYgKzQxLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQg
dmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpOwogCisKKyAgICAvLyBSZXR1cm4gdGhl
IG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7CisgICAgLy8g
b3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUuCisgICAgVFN0cmluZyBoYXNoTmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRo
b3V0IGhhc2hpbmcgYnVpbHQtaW4gdmFyaWFibGVzLgorICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxl
TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1
dCB3aXRob3V0IGhhc2hpbmcgYnVpbHQtaW4gZnVuY3Rpb25zLgorICAgIFRTdHJpbmcgaGFzaEZ1
bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworCiBwcml2YXRlOgogICAg
IFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOwogICAgIGJvb2wgbURlY2xhcmluZ1ZhcmlhYmxlczsK
QEAgLTQ4LDYgKzYxLDEyIEBAIHByaXZhdGU6CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJl
ZFN0cnVjdHM7CiAKICAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworCisgICAgLy8gbmFt
ZSBoYXNoaW5nLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKKyAgICBOYW1l
TWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwogfTsKIAog
I2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCmluZGV4
IGQ3ZTY5ZDMuLmE0MzA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTg3LDYgKzg3LDggQEAgT3V0cHV0SExTTDo6
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1
ZSwgdHJ1ZSwgdHIKICAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOwogICAg
IG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKICAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSBmYWxzZTsKKworICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwogfQogCiBPdXRw
dXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC00MjAsMjYgKzQyMiwxMiBAQCB2b2lkIE91dHB1dEhM
U0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICBvdXQgPDwgIHVuaWZv
cm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICAvLyBUaGUgdGV4dHVyZSBmZXRj
aCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBhbm90aGVy
LiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9tIGxlZnQi
LCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAgICAgIC8v
IGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zIGV4
cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAgICAgICAg
Ly8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25z
IGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBz
aW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+IDEtWSwg
d2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUg
dGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUg
cHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwotICAgICAg
ICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1osIHdoaWNo
IGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9y
IGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBbLTEsIDFd
IC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3IgdGhlCi0g
ICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndyb25nIHNp
ZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFuZ2luZyB0
aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJvdWdob3V0
IHRoZSBjb2RlLgogICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMs
IGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngs
IHQueSwgMCwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtNDQ4LDcgKzQzNiw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJETG9kKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgbG9kKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKICAg
ICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAg
IH0KQEAgLTQ1NywxMiArNDQ1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVy
MkQgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCAxIC0gdC55
IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAg
ICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ3MSwxMiArNDU5LDEyIEBAIHZvaWQg
T3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIGxvZCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1c
biIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgbG9kKVxuIgog
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgbG9kKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgog
ICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ4NSw3ICs0NzMsNyBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgogICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VC
RWxvZChzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC00OTQsNyArNDgyLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQo
dC54LCAtdC55LCB0LnosIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MTM1Miw3ICsxMzQwLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgog
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUt
PmdldE5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+
Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgpKSA8PCAobU91dHB1
dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwogCiAgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAKQEAgLTEzNzQsNiArMTM2
MiwxNCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQogCiAgICAgICAgICAgICBvdXQgPDwgIik7XG4iOwogCisgICAg
ICAgICAgICAvLyBBbHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAorICAg
ICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rp
b24gPSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
MTg2Miw3ICsxODU4LDIxIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkK
ICAgICB7CiAgICAgICBjYXNlIEVPcEtpbGw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlz
Y2FyZDtcbiIsICIiLCAiIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQnJlYWs6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJicmVhaztcbiIsICIiLCAiIik7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BCcmVhazoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CisgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxv
b3BJbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0cnVl
OyBicmVhazt9XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0cHV0
VHJpcGxldCh2aXNpdCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7CiAgICAgICBjYXNl
IEVPcFJldHVybjoKICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQpAQCAtMjA1MiwxMyAr
MjA2MiwzNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNl
c3NpdmUgbG9vcAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpy
ZXN0b3JlSW5kZXggPSBtRXhjZXNzaXZlTG9vcEluZGV4OworICAgICAgICAgICAgbUV4Y2Vzc2l2
ZUxvb3BJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgIntpbnQgIjsKKyAgICAg
ICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgor
ICAgICAgICAgICAgICAgICAgICJib29sIEJyZWFrIjsKKyAgICAgICAgICAgIGluZGV4LT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiID0gZmFsc2U7XG4iOworCisgICAgICAg
ICAgICBib29sIGZpcnN0TG9vcEZyYWdtZW50ID0gdHJ1ZTsKKwogICAgICAgICAgICAgd2hpbGUg
KGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBjbGFt
cGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFU
SU9OUywgaXRlcmF0aW9ucyk7CiAKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdt
ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJpZigh
QnJlYWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8g
TGFzdCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVh
ayBmbGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5k
ZXggKz0gaW5jcmVtZW50KQogCi0gICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoaW50ICI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKICAgICAgICAgICAgICAgICBpbmRleC0+dHJh
dmVyc2UodGhpcyk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwogICAgICAgICAgICAg
ICAgIG91dCA8PCBpbml0aWFsOwpAQCAtMjA4NSw5ICsyMTE5LDIwIEBAIGJvb2wgT3V0cHV0SExT
TDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAg
b3V0IDw8ICI7fVxuIjsKIAorICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBm
YWxzZTsKKwogICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAq
IGluY3JlbWVudDsKICAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJB
VElPTlM7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAi
fSI7CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7CiAK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAppbmRleCBlYTI4YTNjLi5kYzg0
M2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKQEAgLTE0NCw2ICsxNDQsOCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwogICAg
IGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKICAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3Vz
TG9vcDsKKworICAgIFRJbnRlcm1TeW1ib2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7CiB9OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAppbmRleCBiMzExNTI2Li43ZTVmY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEwLDcgKzEwLDcg
QEAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAogLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KIC8vCkBAIC0xODQsNyArMTg0LDYgQEAgdm9pZCBUUGFyc2VDb250ZXh0OjplcnJv
cihUU291cmNlTG9jIGxvYywKICAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0
aWNzOjpFUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRv
a2VuLCBleHRyYUluZm8pOwogCi0gICAgKytudW1FcnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29u
dGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKQEAgLTg0NywxNCArODQ2LDI2IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBl
KiB0eXBlLCBpbnQgc2l6ZSwKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCitib29sIFRQYXJz
ZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewotICAgIC8vCi0gICAgLy8g
TWFrZSB0aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCi0gICAgLy8KLSAgICBpZiAodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KICAgICAg
ICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNv
bnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzU3RydWN0dXJlQ29udGFp
bmluZ0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAic3RydWN0
dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNl
IHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTUxMCw3ICsxNTIxLDcgQEAgaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKIAogICAgIGds
c2xhbmdfZmluYWxpemUoY29udGV4dCk7CiAKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChj
b250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKKyAgICByZXR1cm4gKGVycm9yID09IDAp
ICYmIChjb250ZXh0LT5udW1FcnJvcnMoKSA9PSAwKSA/IDAgOiAxOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKaW5kZXgg
OGRlZThmZC4uNjY4ZTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIv
RGlhZ25vc3RpY3MuaCIKICNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKQEAgLTMzLDcgKzMzLDYgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCiAgICAgICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAogICAgICAgICAgICAgdHJl
ZVJvb3QoMCksCi0gICAgICAgICAgICBudW1FcnJvcnMoMCksCiAgICAgICAgICAgICBsZXhBZnRl
clR5cGUoZmFsc2UpLAogICAgICAgICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKICAgICAgICAg
ICAgIHN0cnVjdE5lc3RpbmdMZXZlbCgwKSwKQEAgLTUyLDcgKzUxLDYgQEAgc3RydWN0IFRQYXJz
ZUNvbnRleHQgewogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25zdCBjaGFyKiBzb3Vy
Y2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KICAgICBUSW50ZXJt
Tm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVk
Ci0gICAgaW50IG51bUVycm9yczsKICAgICBib29sIGxleEFmdGVyVHlwZTsgICAgICAgICAgIC8v
IHRydWUgaWYgd2UndmUgcmVjb2duaXplZCBhIHR5cGUsIHNvIGNhbiBvbmx5IGJlIGxvb2tpbmcg
Zm9yIGFuIGlkZW50aWZpZXIKICAgICBpbnQgbG9vcE5lc3RpbmdMZXZlbDsgICAgICAgIC8vIDAg
aWYgb3V0c2lkZSBhbGwgbG9vcHMKICAgICBpbnQgc3RydWN0TmVzdGluZ0xldmVsOyAgICAgIC8v
IGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1Y3QgZGVjbGFyYXRpb24KQEAgLTY3LDYg
KzY1LDcgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJl
cHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7CiAKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KICAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwpAQCAtOTgsNyArOTcs
NyBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwog
ICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1Ymxp
Y1R5cGUmIHBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGludCBs
aW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wg
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOwog
ICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBUU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCmluZGV4IDljZDZlNWUuLjM5MDhi
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5h
bWVGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCkBAIC0yMCw3ICsyMCw3IEBAIHB1YmxpYzoKICAgICAsIG1PbGRGdW5j
dGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQogICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5j
dGlvbk5hbWUpIHt9CiAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQogICAgIHsKICAgICAgICAgVE9wZXJh
dG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKICAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8
fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rp
b25OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAppbmRleCAzZWFmMTlmLi5hMmM1ZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUg
ImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZp
b3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9IYXNoTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCkBAIC02OSw2ICs3MCwxMCBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1cm4g
dW5pZm9ybXM7IH0KICAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0OwogCisg
ICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBoYXNo
RnVuY3Rpb247IH0KKyAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1cm4gbmFtZU1hcDsg
fQorICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVybiBzeW1ib2xUYWJs
ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgU2hTaGFkZXJUeXBlIGdldFNoYWRlclR5cGUoKSBjb25z
dCB7IHJldHVybiBzaGFkZXJUeXBlOyB9CiAgICAgU2hTaGFkZXJTcGVjIGdldFNoYWRlclNwZWMo
KSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9CkBAIC04OSw2ICs5NCw5IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIg
YXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYworICAgIC8v
IEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkg
dW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCiAgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCkBAIC0xMDYs
NiArMTE0LDggQEAgcHJpdmF0ZToKICAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsKICAgICBT
aFNoYWRlclNwZWMgc2hhZGVyU3BlYzsKIAorICAgIGludCBtYXhVbmlmb3JtVmVjdG9yczsKKwog
ICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVj
LCBhbmQgcmVzb3VyY2VzLgogICAgIC8vIEl0IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8t
Y29tcGlsZS4KICAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGU7CkBAIC0xMjIsNiArMTMyLDEw
IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2lu
Z2xldG9uLgogICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsKKworICAgIC8vIG5hbWUgaGFz
aGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbjsKKyAgICBOYW1lTWFwIG5h
bWVNYXA7CiB9OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4IDU2ZjVjN2YuLmFiNTY1MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAg
LTEyNSw2ICsxMjUsOSBAQCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVz
b3VyY2VzKiByZXNvdXJjZXMpCiAgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMgPSAwOwogICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7CiAgICAg
cmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworCisgICAgLy8gRGlzYWJsZSBu
YW1lIGhhc2hpbmcgYnkgZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkhhc2hGdW5jdGlvbiA9IE5V
TEw7CiB9CiAKIC8vCkBAIC0yMjQsNiArMjI3LDIyIEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNo
SGFuZGxlIGhhbmRsZSwgU2hTaGFkZXJJbmZvIHBuYW1lLCBpbnQqIHBhcmFtcykKICAgICAgICAg
Ly8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgogICAgICAgICAqcGFyYW1z
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hf
TkFNRV9NQVhfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoK
KyAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDY0
IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKKyAgICAgICAg
ICAgIC8vIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1l
UHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAqcGFyYW1zID0gMTYg
KyBzaXplb2YoSGFzaGVkTmFtZVByZWZpeCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxl
ci0+Z2V0TmFtZU1hcCgpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CiB9CkBAIC0yODMsMyArMzAyLDQ2IEBAIHZvaWQgU2hHZXRBY3Rp
dmVVbmlmb3JtKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKICAgICBnZXRWYXJpYWJsZUluZm8oU0hf
QUNUSVZFX1VOSUZPUk1TLAogICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGluZGV4LCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUpOwogfQorCit2b2lkIFNoR2V0TmFtZUhh
c2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKK3sKKyAgICBpZiAo
IWhhbmRsZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21w
aWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIGNvbnN0IE5hbWVNYXAm
IG5hbWVNYXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOworICAgIGlmIChpbmRleCA+PSBzdGF0
aWNfY2FzdDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBpbmRleDsgKytpKQorICAgICAgICArK2l0OworCisgICAgc2l6ZV90IGxlbiA9
IGl0LT5maXJzdC5sZW5ndGgoKSArIDE7CisgICAgaW50IG1heF9sZW4gPSAwOworICAgIFNoR2V0
SW5mbyhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KGxlbikgPiBtYXhfbGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgIGxlbiA9IG1heF9sZW47CisgICAgfQorICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0
LmNfc3RyKCksIGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRo
ZSBzb3VyY2UgaXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgbmFtZVtsZW5dID0gJ1wwJzsK
KworICAgIGxlbiA9IGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAxOworICAgIG1heF9sZW4gPSAwOwor
ICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVu
KTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsZW4pID4gbWF4X2xlbikgeworICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAgICBzdHJuY3B5
KGhhc2hlZE5hbWUsIGl0LT5zZWNvbmQuY19zdHIoKSwgbGVuKTsKKyAgICAvLyBUbyBiZSBvbiB0
aGUgc2FmZSBzaWRlIGluIGNhc2UgdGhlIHNvdXJjZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZC4K
KyAgICBoYXNoZWROYW1lW2xlbl0gPSAnXDAnOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKaW5kZXggNjhmMDI5ZC4uODQ3
YzFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5
bWJvbFRhYmxlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0yMCw5ICsyMCwxNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKIAotLy8KLS8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNlIHRv
IGxpdmUuCi0vLworVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6CisgICAgICAg
ICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihwLnF1
YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJheSks
IGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAgICAgICBtYXhBcnJheVNpemUoMCksIGFy
cmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIGRl
ZXBlc3RTdHJ1Y3ROZXN0aW5nKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1l
KDApCit7CisgICAgaWYgKHAudXNlckRlZikgeworICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJE
ZWYtPmdldFN0cnVjdCgpOworICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNl
ckRlZi0+Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgY29tcHV0ZURlZXBlc3RTdHJ1
Y3ROZXN0aW5nKCk7CisgICAgfQorfQogCiAvLwogLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFu
Z2xlZCBuYW1lcy4KQEAgLTkyLDYgKzk5LDI1IEBAIHZvaWQgVFR5cGU6OmNvbXB1dGVEZWVwZXN0
U3RydWN0TmVzdGluZygpCiAgICAgZGVlcGVzdFN0cnVjdE5lc3RpbmcgPSAxICsgbWF4TmVzdGlu
ZzsKIH0KIAorYm9vbCBUVHlwZTo6aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyID0gc3RydWN0
dXJlLT5iZWdpbigpOyBtZW1iZXIgIT0gc3RydWN0dXJlLT5lbmQoKTsgbWVtYmVyKyspCisgICAg
eworICAgICAgICBpZiAobWVtYmVyLT50eXBlLT5pc0FycmF5KCkgfHwKKyAgICAgICAgICAgIG1l
bWJlci0+dHlwZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gRHVtcCBmdW5jdGlvbnMuCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAppbmRleCAzMzYxNmRjLi5h
ODk0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaApAQCAtMjk4LDYgKzI5OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzeW1ib2w7CiAgICAgfQogCisgICAgVFN5bWJvbCAqZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsKKyAg
ICB9CisKICAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xvYmFsTGV2ZWwoKSB7CiAgICAgICAg
IGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CiAgICAgICAgIHJldHVybiB0YWJsZVsxXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwCmluZGV4IGQ5MGM3MGMuLmE0ZjA0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcApAQCAtMjYs
NyArMjYsNyBAQCB2b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJv
b3QpIHsKICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9u
RGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAg
IFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luayk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNT
TChzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgp
KTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0RVNTTCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCmlu
ZGV4IGJhMzgxMTIuLjVmM2RiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcApAQCAtMzksNiArMzksNiBAQCB2
b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBn
ZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihz
aW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNM
IG91dHB1dEdMU0woc2luayk7CisgICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKICAgICByb290
LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UeXBlcy5oCmluZGV4IGUxYTE4ZmQuLmQ0NTc2NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSwxMCArMTEsMTIgQEAKICNp
bmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgog
CitjbGFzcyBUVHlwZTsKK3N0cnVjdCBUUHVibGljVHlwZTsKKwogLy8KIC8vIE5lZWQgdG8gaGF2
ZSBhc3NvY2lhdGlvbiBvZiBsaW5lIG51bWJlcnMgdG8gdHlwZXMgaW4gYSBsaXN0IGZvciBidWls
ZGluZyBzdHJ1Y3RzLgogLy8KLWNsYXNzIFRUeXBlOwogc3RydWN0IFRUeXBlTGluZSB7CiAgICAg
VFR5cGUqIHR5cGU7CiAgICAgaW50IGxpbmU7CkBAIC0yNyw1OSArMjksMTQgQEAgaW5saW5lIFRU
eXBlTGlzdCogTmV3UG9vbFRUeXBlTGlzdCgpCiAgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRUeXBl
TGlzdDsKIH0KIAotLy8KLS8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gd2l0
aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKLS8vIHR5cGVzIHRoYXQgaXQgdGhpbmtz
IGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hvdWxkCi0vLyBqdXN0IGJlIHVz
ZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBhbnl0aGluZyBlbHNlLiAgUG9p
bnRlcnMKLS8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWluZyB0byBhdm9pZCBsb3RzIG9m
IG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgotLy8KLS8vIE5vdCBhcyBiYWQgYXMgaXQgbG9v
a3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpZWxkcwotLy8gbWF0
Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgotLy8KLWNs
YXNzIFRQdWJsaWNUeXBlIHsKLXB1YmxpYzoKLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci0gICAgVFF1
YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgaW50IHNp
emU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJy
YXkKLSAgICBib29sIG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7
Ci0gICAgVFR5cGUqIHVzZXJEZWY7Ci0gICAgaW50IGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2lj
KFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIgcSwgaW50IGxuID0gMCkKLSAgICB7Ci0gICAgICAg
IHR5cGUgPSBidDsKLSAgICAgICAgcXVhbGlmaWVyID0gcTsKLSAgICAgICAgcHJlY2lzaW9uID0g
RWJwVW5kZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7
Ci0gICAgICAgIGFycmF5ID0gZmFsc2U7Ci0gICAgICAgIGFycmF5U2l6ZSA9IDA7Ci0gICAgICAg
IHVzZXJEZWYgPSAwOwotICAgICAgICBsaW5lID0gbG47Ci0gICAgfQotCi0gICAgdm9pZCBzZXRB
Z2dyZWdhdGUoaW50IHMsIGJvb2wgbSA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7
Ci0gICAgICAgIG1hdHJpeCA9IG07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShib29sIGEs
IGludCBzID0gMCkKLSAgICB7Ci0gICAgICAgIGFycmF5ID0gYTsKLSAgICAgICAgYXJyYXlTaXpl
ID0gczsKLSAgICB9Ci19OwotCiB0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj4g
VFN0cnVjdHVyZU1hcDsKIHR5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlwZUxpc3QqPjo6aXRl
cmF0b3IgVFN0cnVjdHVyZU1hcEl0ZXJhdG9yOworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhp
bmdzIHRoYXQgaGF2ZSBhIHR5cGUuCiAvLwotY2xhc3MgVFR5cGUgeworY2xhc3MgVFR5cGUKK3sK
IHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0
b3IpCiAgICAgVFR5cGUoKSB7fQpAQCAtODgsMTYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgc3RydWN0dXJlKDAp
LCBzdHJ1Y3R1cmVTaXplKDApLCBkZWVwZXN0U3RydWN0TmVzdGluZygwKSwgZmllbGROYW1lKDAp
LCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgVFR5
cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJl
Y2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUp
LCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXpl
KSwKLSAgICAgICAgICAgIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCks
IHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCks
IGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKLSAgICB7Ci0gICAgICAgIGlm
IChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3Ry
dWN0KCk7Ci0gICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+
Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbXB1dGVEZWVwZXN0U3RydWN0
TmVzdGluZygpOwotICAgICAgICB9Ci0gICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQ
dWJsaWNUeXBlICZwKTsKICAgICBUVHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJp
bmcmIG4sIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgogICAgICAgICAgICAgdHlwZShF
YnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEp
LCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKICAgICAgICAgICAg
IG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIHN0cnVjdHVyZSh1c2Vy
RGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCksIGZpZWxkTmFt
ZSgwKSwgbWFuZ2xlZCgwKQpAQCAtMjg0LDYgKzIzMiw4IEBAIHB1YmxpYzoKICAgICAvLyBkZWVw
ZXN0IGZpZWxkIChuZXN0aW5nMi5maWVsZDEucG9zaXRpb24pLgogICAgIGludCBnZXREZWVwZXN0
U3RydWN0TmVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGRlZXBlc3RTdHJ1Y3ROZXN0aW5nOyB9CiAK
KyAgICBib29sIGlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpIGNvbnN0OworCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcmKTsKICAgICBpbnQgZ2V0U3Ry
dWN0U2l6ZSgpIGNvbnN0OwpAQCAtMzA4LDQgKzI1OCw2MSBAQCBwcm90ZWN0ZWQ6CiAgICAgVFN0
cmluZyAqdHlwZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgdHlwZSBuYW1l
CiB9OwogCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRo
ZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2
ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3
aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVy
cworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVt
b3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywg
dGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1
cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworc3RydWN0
IFRQdWJsaWNUeXBlCit7CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAgICAg
ICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgYm9v
bCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRUeXBl
KiB1c2VyRGVmOworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBl
IGJ0LCBUUXVhbGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0gYnQ7
CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5l
ZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBh
cnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0g
MDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKGlu
dCBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBt
YXRyaXggPSBtOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDAp
CisgICAgeworICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAg
fQorCisgICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCF1c2VyRGVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVDb250
YWluaW5nQXJyYXlzKCk7CisgICAgfQorfTsKKwogI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAKaW5kZXggMTc4MmViYy4uZTIyYTc1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5jcHAKQEAgLTk1LDkgKzk1LDkgQEAgYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKaW5kZXggMWU5NDg2
Zi4uZWI2YmVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZhcmlhYmxlSW5mby5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKQEAgLTc3LDIzICs3NywyNSBAQCBzdGF0aWMgdm9pZCBn
ZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogc3RhdGljIHZvaWQgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0
JiBpbmZvTGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CiAKIC8vIFJldHVybnMgaW5m
byBmb3IgYW4gYXR0cmlidXRlIG9yIHVuaWZvcm0uCiBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUlu
Zm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rp
b242NCBoYXNoRnVuY3Rpb24pCiB7CiAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CiAgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7CiAgICAgICAgICAg
ICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJyYWNrZXRzKGkp
OwotICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIGxuYW1l
LCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVk
VmFyaWFibGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5j
dGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnZXRV
c2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7
CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBw
ZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwg
aW5mb0xpc3QpOwpAQCAtMTI0LDcgKzEyNiw4IEBAIHZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5m
byhjb25zdCBUVHlwZSYgdHlwZSwKIHZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29u
c3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKICAgICBBU1NFUlQodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwogCkBAIC0xMzMsMTUgKzEzNiwyOCBAQCB2b2lkIGdl
dFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogICAgICAgICBjb25z
dCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CiAgICAgICAgIGdldFZh
cmlhYmxlSW5mbygqZmllbGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIu
IiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBt
YXBwZWROYW1lICsgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9MaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZE5h
bWUgKyAiLiIgKyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKGZpZWxkVHlwZS0+Z2V0RmllbGROYW1l
KCksIGhhc2hGdW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc2hGdW5jdGlvbik7CiAgICAgfQogfQogCitUVmFyaWFi
bGVJbmZvOjpUVmFyaWFibGVJbmZvKCkKK3sKK30KKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxl
SW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKQorICAgIDogdHlwZSh0eXBlKSwKKyAgICAg
IHNpemUoc2l6ZSkKK3sKK30KKwogQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6Q29sbGVjdEF0dHJp
YnNVbmlmb3JtcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1z
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogICAgIDogbUF0dHJp
YnMoYXR0cmlicyksCi0gICAgICBtVW5pZm9ybXModW5pZm9ybXMpCisgICAgICBtVW5pZm9ybXMo
dW5pZm9ybXMpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pCiB7CiB9CiAKQEAg
LTE5NiwxMCArMjEyLDE2IEBAIGJvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGluaXRpYWxpemVkIGluIGEgc2hhZGVyLCB3ZSBtdXN0IGhhdmUgb25seQogICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZXMgaW4gdGhlIHNlcXVlbmNlLgogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBU
U3RyaW5nIHByb2Nlc3NlZFN5bWJvbDsKKyAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlv
biA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJs
ZS0+Z2V0U3ltYm9sKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRP
cmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJp
YWJsZUluZm8odmFyaWFibGUtPmdldFR5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRTeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaAppbmRleCA2NjdhY2FmLi40
MTMwYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVJbmZvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oCkBAIC0xMyw2ICsxMyw5IEBACiAvLyBQcm92aWRlcyBpbmZvcm1hdGlv
biBhYm91dCBhIHZhcmlhYmxlLgogLy8gSXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3Rv
cmUgaW5mbyBhYm91dCBhY3RpdmUgYXR0cmlicyBhbmQgdW5pZm9ybXMuCiBzdHJ1Y3QgVFZhcmlh
YmxlSW5mbyB7CisgICAgVFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKTsK
KyAgICBUVmFyaWFibGVJbmZvKCk7CisKICAgICBUUGVyc2lzdFN0cmluZyBuYW1lOwogICAgIFRQ
ZXJzaXN0U3RyaW5nIG1hcHBlZE5hbWU7CiAgICAgU2hEYXRhVHlwZSB0eXBlOwpAQCAtMjQsNyAr
MjcsOCBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9M
aXN0OwogY2xhc3MgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKIHB1YmxpYzoKICAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zKFRWYXJpYWJsZUluZm9M
aXN0JiBhdHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xp
c3QmIHVuaWZvcm1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiopOwpAQCAtMzgsNiArNDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRW
YXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKICAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVVuaWZv
cm1zOworCisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOwogfTsKIAogI2VuZGlm
ICAvLyBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBjNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApAQCAtMCww
ICsxLDI5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJs
ZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgImNvbXBpbGVyL1No
SGFuZGxlLmgiCisKK25hbWVzcGFjZSB7CitpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0Ogor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNh
c2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHJldHVy
biAzOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAg
ICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9JTlQ6CisgICAgICAgIGNhc2UgU0hfQk9P
TDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJf
Q1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKKyAgICAgICAgY2Fz
ZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
IDc7CisgICAgfQorfQorfSAgICAvLyBuYW1lc3BhY2UKKworaW50IFZhcmlhYmxlUGFja2VyOjpH
ZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRf
VkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gNDsK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6
CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgor
ICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAg
ICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAg
ICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9J
TlQ6CisgICAgICAgIGNhc2UgU0hfQk9PTDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgor
ICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VY
VEVSTkFMX09FUzoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgfQorfQorCitpbnQgVmFyaWFibGVQYWNr
ZXI6OkdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAg
ICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUM0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hf
SU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIFNIX0ZM
T0FUX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfQk9P
TF9WRUMyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAg
ICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAg
IGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxf
T0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm4gMTAwMDAwOworICAgIH0KK30KKworc3RydWN0IFRWYXJpYWJsZUlu
Zm9Db21wYXJlciB7CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxo
cywgY29uc3QgVFZhcmlhYmxlSW5mbyYgcmhzKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGxo
c1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihsaHMudHlwZSk7CisgICAgICAgIGludCByaHNTb3J0
T3JkZXIgPSBHZXRTb3J0T3JkZXIocmhzLnR5cGUpOworICAgICAgICBpZiAobGhzU29ydE9yZGVy
ICE9IHJoc1NvcnRPcmRlcikgeworICAgICAgICAgICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJo
c1NvcnRPcmRlcjsKKyAgICAgICAgfQorICAgICAgICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3Qu
CisgICAgICAgIHJldHVybiBsaHMuc2l6ZSA+IHJocy5zaXplOworICAgIH0KK307CisKK3Vuc2ln
bmVkIFZhcmlhYmxlUGFja2VyOjptYWtlQ29sdW1uRmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNv
bXBvbmVudHNQZXJSb3cpCit7CisgICAgcmV0dXJuICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1
bW5zIC0gbnVtQ29tcG9uZW50c1BlclJvdykpICYKKyAgICAgICAgICAgICAgICAgICAga0NvbHVt
bk1hc2spID4+IGNvbHVtbjsKK30KKwordm9pZCBWYXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMo
aW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVy
Um93KQoreworICAgIHVuc2lnbmVkIGNvbHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVt
biwgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dz
OyArK3IpIHsKKyAgICAgICAgaW50IHJvdyA9IHRvcFJvdyArIHI7CisgICAgICAgIEFTU0VSVCgo
cm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAwKTsKKyAgICAgICAgcm93c19bcm93XSB8PSBj
b2x1bW5GbGFnczsKKyAgICB9Cit9CisKK2Jvb2wgVmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVt
bihpbnQgY29sdW1uLCBpbnQgbnVtUm93cywgaW50KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQor
eworICAgIEFTU0VSVChkZXN0Um93KTsKKworICAgIGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1h
eFJvd3NfICYmIHJvd3NfW3RvcE5vbkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAg
ICsrdG9wTm9uRnVsbFJvd18pIHsKKyAgICB9CisKKyAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJv
d18gPj0gMCAmJiByb3dzX1tib3R0b21Ob25GdWxsUm93X10gPT0ga0NvbHVtbk1hc2s7CisgICAg
ICAgICAtLWJvdHRvbU5vbkZ1bGxSb3dfKSB7CisgICAgfQorCisgICAgaWYgKGJvdHRvbU5vbkZ1
bGxSb3dfIC0gdG9wTm9uRnVsbFJvd18gKyAxIDwgbnVtUm93cykgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgY29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxh
Z3MoY29sdW1uLCAxKTsKKyAgICBpbnQgdG9wR29vZFJvdyA9IDA7CisgICAgaW50IHNtYWxsZXN0
R29vZFRvcCA9IC0xOworICAgIGludCBzbWFsbGVzdEdvb2RTaXplID0gbWF4Um93c18gKyAxOwor
ICAgIGludCBib3R0b21Sb3cgPSBib3R0b21Ob25GdWxsUm93XyArIDE7CisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgIGZvciAoaW50IHJvdyA9IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90
dG9tUm93OyArK3JvdykgeworICAgICAgICBib29sIHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93
ID8gKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApIDogZmFsc2U7CisgICAgICAgIGlm
IChyb3dFbXB0eSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAg
IHRvcEdvb2RSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSByb3cgLSB0b3BHb29kUm93OworICAgICAgICAgICAgICAg
IGlmIChzaXplID49IG51bVJvd3MgJiYgc2l6ZSA8IHNtYWxsZXN0R29vZFNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc21hbGxlc3RHb29kU2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAg
ICAgIHNtYWxsZXN0R29vZFRvcCA9IHRvcEdvb2RSb3c7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoc21hbGxlc3RHb29kVG9wIDwgMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKmRlc3RSb3cgPSBzbWFsbGVzdEdvb2RUb3A7CisgICAgaWYgKGRlc3RTaXpl
KSB7CisgICAgICAgICpkZXN0U2l6ZSA9IHNtYWxsZXN0R29vZFNpemU7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFZhcmlhYmxlUGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMoaW50IG1heFZlY3RvcnMsIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpCit7CisgICAgQVNTRVJUKG1heFZlY3RvcnMgPiAwKTsKKyAgICBtYXhSb3dz
XyA9IG1heFZlY3RvcnM7CisgICAgdG9wTm9uRnVsbFJvd18gPSAwOworICAgIGJvdHRvbU5vbkZ1
bGxSb3dfID0gbWF4Um93c18gLSAxOworICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhp
bl92YXJpYWJsZXMpOworCisgICAgLy8gQXMgcGVyIEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2Vj
dGlvbiA3IHZhcmlhYmxlcyBhcmUgcGFja2VkIGluIHNwZWNpZmljCisgICAgLy8gb3JkZXIgYnkg
dHlwZSwgdGhlbiBieSBzaXplIG9mIGFycmF5LCBsYXJnZXN0IGZpcnN0LgorICAgIHN0ZDo6c29y
dCh2YXJpYWJsZXMuYmVnaW4oKSwgdmFyaWFibGVzLmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFy
ZXIoKSk7CisgICAgcm93c18uY2xlYXIoKTsKKyAgICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywg
MCk7CisKKyAgICAvLyBQYWNrcyB0aGUgNCBjb2x1bW4gdmFyaWFibGVzLgorICAgIHNpemVfdCBp
aSA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07CisgICAgICAg
IGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDQpIHsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51
bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAgIGlmICh0
b3BOb25GdWxsUm93XyA+IG1heFJvd3NfKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBQYWNrcyB0aGUgMyBjb2x1bW4gdmFyaWFibGVzLgorICAgIGludCBudW0zQ29s
dW1uUm93cyA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Cisg
ICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG51bTNDb2x1bW5Sb3dzICs9
IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAg
IGlmICh0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzID4gbWF4Um93c18pIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3df
LCBudW0zQ29sdW1uUm93cywgMCwgMyk7CisKKyAgICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFy
aWFibGVzLgorICAgIGludCB0b3AyQ29sdW1uUm93ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29s
dW1uUm93czsKKyAgICBpbnQgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9w
MkNvbHVtblJvdzsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1u
Um93c0F2YWlsYWJsZTsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29s
dW1uUm93c0F2YWlsYWJsZTsKKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lp
KSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lp
XTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0g
MikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IG51bVJvd3Mg
PSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICAgICAgaWYg
KG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczAxKSB7CisgICAgICAgICAgICByb3dz
QXZhaWxhYmxlSW5Db2x1bW5zMDEgLT0gbnVtUm93czsKKyAgICAgICAgfSBlbHNlIGlmIChudW1S
b3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMykgeworICAgICAgICAgICAgcm93c0F2YWls
YWJsZUluQ29sdW1uczIzIC09IG51bVJvd3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgbnVtUm93c1VzZWRJ
bkNvbHVtbnMwMSA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxh
YmxlSW5Db2x1bW5zMDE7CisgICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMjMgPQorICAgICAg
ICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzOworICAg
IGZpbGxDb2x1bW5zKHRvcDJDb2x1bW5Sb3csIG51bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIp
OworICAgIGZpbGxDb2x1bW5zKG1heFJvd3NfIC0gbnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVt
Um93c1VzZWRJbkNvbHVtbnMyMywKKyAgICAgICAgICAgICAgICAyLCAyKTsKKworICAgIC8vIFBh
Y2tzIHRoZSAxIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNp
emUoKTsgKytpaSkgeworICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZh
cmlhYmxlc1tpaV07CisgICAgICAgIEFTU0VSVCgxID09IEdldE51bUNvbXBvbmVudHNQZXJSb3co
dmFyaWFibGUudHlwZSkpOworICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFi
bGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAt
MTsKKyAgICAgICAgaW50IHNtYWxsZXN0U2l6ZSA9IG1heFJvd3NfICsgMTsKKyAgICAgICAgaW50
IHRvcFJvdyA9IC0xOworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVt
Q29sdW1uczsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgIGludCByb3cgPSAwOworICAgICAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICAgICAgaWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51
bVJvd3MsICZyb3csICZzaXplKSkgeworICAgICAgICAgICAgICAgIGlmIChzaXplIDwgc21hbGxl
c3RTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0U2l6ZSA9IHNpemU7CisgICAg
ICAgICAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1uID0gY29sdW1uOworICAgICAgICAgICAgICAg
ICAgICB0b3BSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNtYWxsZXN0Q29sdW1uIDwgMCkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmlsbENvbHVtbnModG9wUm93LCBu
dW1Sb3dzLCBzbWFsbGVzdENvbHVtbiwgMSk7CisgICAgfQorCisgICAgQVNTRVJUKHZhcmlhYmxl
cy5zaXplKCkgPT0gaWkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODcwNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIu
aApAQCAtMCwwICsxLDQxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9WQVJJQUJM
RVBBQ0tFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworCisj
aW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNz
IFZhcmlhYmxlUGFja2VyIHsKKyBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXNzZWQgaW4gdmFyaWFibGVzIHBhY2sgaW4gbWF4VmVjdG9ycyBmb2xsb3dpbmcKKyAgICAvLyB0
aGUgcGFja2luZyBydWxlcyBmcm9tIHRoZSBHTFNMIDEuMDE3IHNwZWMsIEFwcGVuZGl4IEEsIHNl
Y3Rpb24gNy4KKyAgICBib29sIENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAg
ICAgICAgaW50IG1heFZlY3RvcnMsCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpOworCisgICAgLy8gR2V0cyBob3cgbWFueSBjb21wb25lbnRzIGluIGEgcm93
IGEgZGF0YSB0eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtQ29tcG9uZW50c1BlclJv
dyhTaERhdGFUeXBlIHR5cGUpOworCisgICAgLy8gR2V0cyBob3cgbWFueSByb3dzIGEgZGF0YSB0
eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpOwor
CisgcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1Db2x1bW5zID0gNDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga0NvbHVtbk1hc2sgPSAoMSA8PCBrTnVtQ29sdW1ucykgLSAx
OworCisgICAgdW5zaWduZWQgbWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGludCBudW1Db21w
b25lbnRzUGVyUm93KTsKKyAgICB2b2lkIGZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1S
b3dzLCBpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgYm9vbCBzZWFy
Y2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywgaW50KiBkZXN0
U2l6ZSk7CisKKyAgICBpbnQgdG9wTm9uRnVsbFJvd187CisgICAgaW50IGJvdHRvbU5vbkZ1bGxS
b3dfOworICAgIGludCBtYXhSb3dzXzsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZD4gcm93c187
Cit9OworCisjZW5kaWYgLy8gX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKaW5kZXgg
MjZjZWUwNS4uN2E4MmJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDE3ICs5LDIyIEBACiBzdGF0aWMgY29uc3Qg
aW50IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7CiBzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lP
Tl8xMjAgPSAxMjA7CiAKLS8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhyZWUgdGhpbmdzOgorLy8g
V2UgbmVlZCB0byBzY2FuIGZvciB0aGUgZm9sbG93aW5nOgogLy8gMS4gImludmFyaWFudCIga2V5
d29yZDogVGhpcyBjYW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cwogLy8gICAgYnV0IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KIC8vIDIuICJnbF9Qb2ludENv
b3JkIiBidWlsdC1pbiB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBz
aGFkZXIKIC8vICAgIGJ1dCBpbnNpZGUgYW55IHNjb3BlLgogLy8gMy4gQ2FsbCB0byBhIG1hdHJp
eCBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAgKFRo
ZXNlIGNvbnN0cnVjdG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8v
Ci0vLyBJZiBpdCB3ZXJlbid0IGZvciAoMykgdGhlbiB3ZSB3b3VsZCBvbmx5IG5lZWQgdG8gc2Nh
biB0aGUgZ2xvYmFsCi0vLyBzY29wZSBvZiB0aGUgdmVydGV4IHNoYWRlci4gSG93ZXZlciwgd2Ug
bmVlZCB0byBzY2FuIHRoZSBlbnRpcmUKLS8vIHNoYWRlciBpbiBib3RoIGNhc2VzLgorLy8gNC4g
QXJyYXlzIGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisvLyAgICBHTFNMIHNwZWMgc2Vj
dGlvbiA2LjEuMTogIldoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLCBleHByZXNzaW9ucyB0aGF0IGRv
CisvLyAgICBub3QgZXZhbHVhdGUgdG8gbC12YWx1ZXMgY2Fubm90IGJlIHBhc3NlZCB0byBwYXJh
bWV0ZXJzIGRlY2xhcmVkIGFzCisvLyAgICBvdXQgb3IgaW5vdXQuIgorLy8gICAgR0xTTCAxLjEg
c2VjdGlvbiA1Ljg6ICJPdGhlciBiaW5hcnkgb3IgdW5hcnkgZXhwcmVzc2lvbnMsCisvLyAgICBu
b24tZGVyZWZlcmVuY2VkIGFycmF5cywgZnVuY3Rpb24gbmFtZXMsIHN3aXp6bGVzIHdpdGggcmVw
ZWF0ZWQgZmllbGRzLAorLy8gICAgYW5kIGNvbnN0YW50cyBjYW5ub3QgYmUgbC12YWx1ZXMuIgor
Ly8gICAgR0xTTCAxLjIgcmVsYXhlZCB0aGUgcmVzdHJpY3Rpb24gb24gYXJyYXlzLCBzZWN0aW9u
IDUuODogIlZhcmlhYmxlcyB0aGF0CisvLyAgICBhcmUgYnVpbHQtaW4gdHlwZXMsIGVudGlyZSBz
dHJ1Y3R1cmVzIG9yIGFycmF5cy4uLiBhcmUgYWxsIGwtdmFsdWVzLiIKIC8vCiAvLyBUT0RPKGFs
b2twKTogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgb2YgaW52YXJpYW50IGRlY2FsYXJhdGlvbiBn
ZXQgbG9zdAogLy8gZHVyaW5nIHBhcnNpbmcgLSB0aGV5IGRvIG5vdCBnZXQgY2FycmllZCBvdmVy
IHRvIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KQEAgLTc5LDYgKzg0LDI2IEBAIGJvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIH0KKyAgICAgIGNhc2UgRU9wUGFyYW1ldGVy
czogeworICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gcGFyYW1zLmJlZ2luKCk7CisgICAgICAgICAgICAgaXRlciAhPSBwYXJhbXMuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiBwYXJh
bSA9ICgqaXRlciktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS0+aXNBcnJh
eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gcGFyYW0tPmdldFF1YWxpZmllcigpOworICAgICAgICAgICAgICAgIGlmICgocXVhbGlmaWVy
ID09IEV2cU91dCkgfHwgKHF1YWxpZmllciA9PSAgRXZxSW5PdXQpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZC4gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzoKICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAppbmRl
eCAzNzZmY2I4Li4xYzFjYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaApAQCAtMjIsMTQgKzIyLDE4IEBACiAvLyAgIC0gYysr
IHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgogLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxlIGdsX1Bv
aW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9y
cyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0
aW9uIHBhcmFtZXRlcnMKIC8vCiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CiBwdWJsaWM6CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsK
IAotICAgIC8vIFJldHVybnMgMTIwIGlmICJpbnZhcmlhbnQiIGtleXdvcmQsICJnbF9Qb2ludENv
b3JkIiwgb3IKLSAgICAvLyBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCBpbiB0
aGUgc2hhZGVyLiBFbHNlIDExMCBpcwotICAgIC8vIHJldHVybmVkLgorICAgIC8vIFJldHVybnMg
MTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUgc2hhZGVyOgorICAgIC8vIC0gImludmFy
aWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIsCisgICAgLy8gLSBtYXRyaXgvbWF0cml4
IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91dCIgcGFyYW1ldGVycworICAgIC8vIEVs
c2UgMTEwIGlzIHJldHVybmVkLgogICAgIGludCBnZXRWZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNp
b247IH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5s
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAppbmRleCBi
OWEzMDJkLi44MzAwZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwKQEAgLTM4LDcgKzM4LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogJXsKICNpbmNsdWRlICJjb21waWxlci9nbHNs
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImds
c2xhbmdfdGFiLmgiCiAKQEAgLTI3MiwxNDggKzI3MiwxMyBAQCBPICAgICAgICAgICBbMC03XQog
CiAlJQogCi0jaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi1leHRlcm4gIkMiIHsKLS8v
IFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaCIKLQotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4g
aW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNy
byhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotCi0jZGVmaW5lIFNFVFVQX0NPTlRFWFQo
cHApIFwKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+
cEM7IFwKLSAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250
ZXh0LT5zY2FubmVyOwotCi0vLyBQcmVwcm9jZXNzb3IgY2FsbGJhY2tzLgotdm9pZCBDUFBEZWJ1
Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPnRyYWNlKG1zZyk7Ci19Ci0KLXZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndh
cm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwotfQotCi12b2lkIENQUFNoSW5mb0xvZ01zZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7Ci0gICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotfQotCi12b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAwOwotICAgIERlY29kZVNv
dXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVT
b3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotdm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0
cmluZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAg
IERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwgJmxpbmUpOwotICAgIHl5bGluZW5vID0g
RW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7Ci19Ci0KLWludCBHZXRTdHJpbmdOdW1iZXIo
KQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMDsKLSAgICBE
ZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwpOwotICAgIHJldHVybiBzdHJp
bmc7Ci19Ci0KLWludCBHZXRMaW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwg
JmxpbmUpOwotICAgIHJldHVybiBsaW5lOwotfQotCi12b2lkIEluY0xpbmVOdW1iZXIoKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7Ci0g
ICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7Ci0gICAgeXlsaW5l
bm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCArK2xpbmUpOwotfQotCi12b2lkIERlY0xpbmVO
dW1iZXIoKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7
Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCAtLWxpbmUpOwotfQotCi12
b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLQotICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJu
OwotICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKLSAgICBpZiAo
c3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5oYW5k
bGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKLX0KLQot
dm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIFRTdHJpbmcgc3RyU3JjOwotICAgIHN0clNyYyA9IFRTdHJpbmcoc3RyaW5nKTsK
LQotICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnICsgIiAiICsg
c3RyU3JjOwotfQotCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQotewotICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjcHAtPkVyck1zZyA9IGNvbnRleHQtPkhhc2hFcnJNc2cu
Y19zdHIoKTsKLSAgICByZXR1cm4gY3BwLT5FcnJNc2c7Ci19Ci0KLXZvaWQgUmVzZXRUU3RyaW5n
KHZvaWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPkhhc2hFcnJN
c2cgPSAiIjsKLX0KLQotdm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBl
eHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgY29udGV4dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1l
LCBiZWhhdmlvcik7Ci19Ci19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vICFBTkdMRV9VU0Vf
TkVXX1BSRVBST0NFU1NPUgotCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9z
aXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuID0gMDsKLQotI2lmIEFOR0xF
X1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgcHA6OlRva2VuIHRva2VuOwogICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICBsZW4gPSB0b2tl
bi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAg
aW50IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQu
c2l6ZSgpOwogICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKLSAgICAgICAg
bWVtY3B5KGJ1ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3Vy
Y2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSksIHl5c2Nhbm5l
cik7Ci0jZWxzZQotICAgIGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKTsKLSNlbmRpZiAg
Ly8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIGlmIChsZW4gPj0gbWF4X3NpemUp
CiAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKQEAgLTQ3
Myw5ICszMzgsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXlsZXhfZGVzdHJveShzY2Fu
bmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgotICAgIEZpbmFsaXplUHJl
cHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDg2LDI3ICszNDgs
MTQgQEAgaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsK
IAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgotI2lmIEFOR0xFX1VTRV9ORVdfUFJF
UFJPQ0VTU09SCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSNlbHNlCi0gICAgaWYgKEluaXRQcmVw
cm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0g
ICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIGlmIChJbml0U2Nhbm5lcklucHV0
KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICAvLyBEZWZpbmUgZXh0ZW5zaW9u
IG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7CiAgICAgICAgICBpdGVy
ICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBS
T0NFU1NPUgogICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0jZWxzZQotICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhp
dGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gMDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IDNjYWQzMzUuLjdjZDQ5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtMzQwLDE4ICszNDAsMTAgQEAgcG9zdGZpeF9leHByZXNzaW9u
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChp
bnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOwotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGlu
ZGV4LCAkMi5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEt
PmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkg
dmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7CisgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxk
cywgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKICAgICAgICAg
ICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwpAQCAtMTIxMSw3ICsxMjAzLDcgQEAgaW5pdF9kZWNs
YXJhdG9yX2xpc3QKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDMubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQz
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
QEAgLTEyMjQsNyArMTIxNiw3IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25J
bml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB0cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAg
ICAgICAkJCA9ICQxOwpAQCAtMTI0Miw3ICsxMjM0LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QK
ICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwg
JDEudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEu
dHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxp
bmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICQkID0gJDE7CkBAIC0xMjk2LDcgKzEyODgsNyBAQCBzaW5nbGVf
ZGVjbGFyYXRpb24KICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDIubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQy
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgJCQudHlwZSA9
ICQxOwpAQCAtMTMyNyw3ICsxMzE5LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCB0
cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJC50eXBl
ID0gJDE7CkBAIC0yMDM3LDYgKzIwMjksMTUgQEAgZXh0ZXJuYWxfZGVjbGFyYXRpb24KIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFRT
eW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlv
bi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJbikKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJ1aWx0LWluIGZ1
bmN0aW9ucyBjYW5ub3QgYmUgcmVkZWZpbmVkIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAg
ICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicg
aWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRl
eCBhM2JmYTEzLi5mNjUxZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBp
bnQxNl90IGZsZXhfaW50MTZfdDsKIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKIHR5
cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMy
X3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CiAjZWxzZQogdHlwZWRlZiBzaWdu
ZWQgY2hhciBmbGV4X2ludDhfdDsKIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKQEAg
LTM3OCw3ICszNzksNyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
IG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVf
QUNUSU9OIFwKIAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXplX3Qp
ICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAogCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCiAJKnl5X2NwID0gJ1wwJzsgXAog
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwpAQCAtODA3LDcgKzgwOCw3IEBAIFdISUNIIEdFTkVS
QVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAj
aW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtMjk0NywxNDggKzI5NDgsMTMgQEAgdm9pZCB5
eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAKICNkZWZpbmUgWVlUQUJM
RVNfTkFNRSAieXl0YWJsZXMiCiAKLSNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKLWV4
dGVybiAiQyIgewotLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgotCi1leHRlcm4gaW50IEluaXRQcmVwcm9jZXNz
b3IoKTsKLWV4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiB2b2lkIFBy
ZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci0KLSNkZWZpbmUg
U0VUVVBfQ09OVEVYVChwcCkgXAotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBhcnNl
Q29udGV4dCopIHBwLT5wQzsgXAotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7Ci0KLS8vIFByZXByb2Nlc3NvciBjYWxsYmFja3Mu
Ci12b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05U
RVhUKGNwcCk7Ci0gICAgY29udGV4dC0+dHJhY2UobXNnKTsKLX0KLQotdm9pZCBDUFBXYXJuaW5n
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIik7Ci19Ci0KLXZvaWQgQ1BQU2hJ
bmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwotICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLX0KLQotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2cs
ICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZvaWQgU2V0TGluZU51bWJlcihp
bnQgbGluZSkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IHN0cmluZyA9IDA7
Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKLSAgICB5eWxp
bmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOwotfQotCi12b2lkIFNldFN0cmlu
Z051bWJlcihpbnQgc3RyaW5nKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0g
ICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotaW50IEdl
dFN0cmluZ051bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJp
bmcgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0g
ICAgcmV0dXJuIHN0cmluZzsKLX0KLQotaW50IEdldExpbmVOdW1iZXIoKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5
bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0gICAgcmV0dXJuIGxpbmU7Ci19Ci0KLXZvaWQgSW5jTGlu
ZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAw
LCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsICZsaW5l
KTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsICsrbGluZSk7Ci19Ci0K
LXZvaWQgRGVjTGluZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlu
dCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZz
dHJpbmcsICZsaW5lKTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIC0t
bGluZSk7Ci19Ci0KLXZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBu
dW1Ub2tlbnMpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotCi0gICAgaWYgKG51bVRva2Vu
cyAhPSA0KSByZXR1cm47Ci0gICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0
dXJuOwotICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKLQotICAg
IGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tl
bnNbMl0pOwotfQotCi12b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgVFN0cmluZyBzdHJTcmM7Ci0gICAgc3RyU3JjID0gVFN0
cmluZyhzdHJpbmcpOwotCi0gICAgY29udGV4dC0+SGFzaEVyck1zZyA9IGNvbnRleHQtPkhhc2hF
cnJNc2cgKyAiICIgKyBzdHJTcmM7Ci19Ci0KLWNvbnN0IGNoYXIqIEdldFN0cmZyb21UU3RyKHZv
aWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNwcC0+RXJyTXNnID0gY29udGV4
dC0+SGFzaEVyck1zZy5jX3N0cigpOwotICAgIHJldHVybiBjcHAtPkVyck1zZzsKLX0KLQotdm9p
ZCBSZXNldFRTdHJpbmcodm9pZCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29u
dGV4dC0+SGFzaEVyck1zZyA9ICIiOwotfQotCi12b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9y
KGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXls
aW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKLX0KLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZiAg
Ly8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi0KIGludCBzdHJpbmdfaW5wdXQoY2hhciog
YnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW4gPSAw
OwotCi0jaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBwcDo6VG9rZW4gdG9rZW47
CiAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOwot
ICAgIGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVl
LnNpemUoKTsKKyAgICBpbnQgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAw
IDogdG9rZW4udGV4dC5zaXplKCk7CiAgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQotICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7CiAgICAgeXlzZXRfbGlu
ZW5vKEVuY29kZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5s
aW5lKSx5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6
ZSk7Ci0jZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICBpZiAobGVu
ID49IG1heF9zaXplKQogICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJm
bG93Iik7CkBAIC0zMTQ4LDkgKzMwMTQsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXls
ZXhfZGVzdHJveShzY2FubmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgot
ICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtMzE2MSwyNyArMzAyNCwxNCBAQCBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICBjb250ZXh0LT5B
ZnRlckVPRiA9IGZhbHNlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0jaWYg
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nv
ci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotI2Vsc2UK
LSAgICBpZiAoSW5pdFByZXByb2Nlc3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBjcHAt
PnBDID0gY29udGV4dDsKLSAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgaWYg
KEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gMTsKLSNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIC8v
IERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwogICAgIGZvciAoVEV4
dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4o
KTsKICAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotI2lmIEFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5w
cmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbHNlCi0gICAgICAgIFBy
ZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotI2VuZGlmCiAgICAgfQog
ICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggNDZiNTE0YS4uNzJjYzg0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
CkBAIC03NTIsMjYgKzc1MiwyNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAg
IDE2OCwgICAxNjgsICAgMjAzLCAgIDIwNiwgICAyMTksICAgMjI0LCAgIDIyOSwgICAyMzUsICAg
MjM4LAotICAgICAzMTcsICAgMzIwLCAgIDQyOSwgICA0MzksICAgNDUyLCAgIDQ2MCwgICA1NjAs
ICAgNTYzLCAgIDU3MSwgICA1NzUsCi0gICAgIDU4MiwgICA1ODYsICAgNTkzLCAgIDU5OSwgICA2
MDgsICAgNjE2LCAgIDY3MSwgICA2NzgsICAgNjg4LCAgIDY5MSwKLSAgICAgNzAxLCAgIDcxMSwg
ICA3MzIsICAgNzMzLCAgIDczNCwgICA3MzksICAgNzQwLCAgIDc0OSwgICA3NjEsICAgNzYyLAot
ICAgICA3NzAsICAgNzgxLCAgIDc4NSwgICA3ODYsICAgNzk2LCAgIDgwNiwgICA4MTYsICAgODI5
LCAgIDgzMCwgICA4NDAsCi0gICAgIDg1MywgICA4NTcsICAgODYxLCAgIDg2NSwgICA4NjYsICAg
ODc5LCAgIDg4MCwgICA4OTMsICAgODk0LCAgIDkwNywKLSAgICAgOTA4LCAgIDkyNSwgICA5MjYs
ICAgOTM5LCAgIDk0MCwgICA5NDEsICAgOTQyLCAgIDk0MywgICA5NDcsICAgOTUwLAotICAgICA5
NjEsICAgOTY5LCAgIDk5NiwgIDEwMDEsICAxMDA4LCAgMTA0NiwgIDEwNDksICAxMDU2LCAgMTA2
NCwgIDEwODUsCi0gICAgMTEwNiwgIDExMTcsICAxMTQ2LCAgMTE1MSwgIDExNjEsICAxMTY2LCAg
MTE3NiwgIDExNzksICAxMTgyLCAgMTE4NSwKLSAgICAxMTkxLCAgMTE5OCwgIDEyMDEsICAxMjIz
LCAgMTI0MSwgIDEyNjUsICAxMjg4LCAgMTI5MiwgIDEzMTAsICAxMzE4LAotICAgIDEzNTAsICAx
MzcwLCAgMTQ1OSwgIDE0NjgsICAxNDkxLCAgMTQ5NCwgIDE1MDAsICAxNTA4LCAgMTUxNiwgIDE1
MjQsCi0gICAgMTUzNCwgIDE1NDEsICAxNTQ0LCAgMTU0NywgIDE1NTMsICAxNTU2LCAgMTU3MSwg
IDE1NzUsICAxNTc5LCAgMTU4MywKLSAgICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYx
MiwgIDE2MTcsICAxNjIyLCAgMTYyNywgIDE2MzIsICAxNjM3LAotICAgIDE2NDMsICAxNjQ5LCAg
MTY1NSwgIDE2NjAsICAxNjY1LCAgMTY3NCwgIDE2ODMsICAxNjg4LCAgMTcwMSwgIDE3MDEsCi0g
ICAgMTcxNSwgIDE3MTUsICAxNzI0LCAgMTcyNywgIDE3NDIsICAxNzc4LCAgMTc4MiwgIDE3ODgs
ICAxNzk2LCAgMTgxMiwKLSAgICAxODE2LCAgMTgyMCwgIDE4MjEsICAxODI3LCAgMTgyOCwgIDE4
MjksICAxODMwLCAgMTgzMSwgIDE4MzUsICAxODM2LAotICAgIDE4MzYsICAxODM2LCAgMTg0Niwg
IDE4NDcsICAxODUxLCAgMTg1MSwgIDE4NTIsICAxODUyLCAgMTg1NywgIDE4NjAsCi0gICAgMTg3
MCwgIDE4NzMsICAxODc5LCAgMTg4MCwgIDE4ODQsICAxODkyLCAgMTg5NiwgIDE5MDYsICAxOTEx
LCAgMTkyOCwKLSAgICAxOTI4LCAgMTkzMywgIDE5MzMsICAxOTQwLCAgMTk0MCwgIDE5NDgsICAx
OTUxLCAgMTk1NywgIDE5NjAsICAxOTY2LAotICAgIDE5NzAsICAxOTc3LCAgMTk4NCwgIDE5OTEs
ICAxOTk4LCAgMjAwOSwgIDIwMTgsICAyMDIyLCAgMjAyOSwgIDIwMzIsCi0gICAgMjAzOCwgIDIw
MzgKKyAgICAgMzE3LCAgIDMyMCwgICA0MjEsICAgNDMxLCAgIDQ0NCwgICA0NTIsICAgNTUyLCAg
IDU1NSwgICA1NjMsICAgNTY3LAorICAgICA1NzQsICAgNTc4LCAgIDU4NSwgICA1OTEsICAgNjAw
LCAgIDYwOCwgICA2NjMsICAgNjcwLCAgIDY4MCwgICA2ODMsCisgICAgIDY5MywgICA3MDMsICAg
NzI0LCAgIDcyNSwgICA3MjYsICAgNzMxLCAgIDczMiwgICA3NDEsICAgNzUzLCAgIDc1NCwKKyAg
ICAgNzYyLCAgIDc3MywgICA3NzcsICAgNzc4LCAgIDc4OCwgICA3OTgsICAgODA4LCAgIDgyMSwg
ICA4MjIsICAgODMyLAorICAgICA4NDUsICAgODQ5LCAgIDg1MywgICA4NTcsICAgODU4LCAgIDg3
MSwgICA4NzIsICAgODg1LCAgIDg4NiwgICA4OTksCisgICAgIDkwMCwgICA5MTcsICAgOTE4LCAg
IDkzMSwgICA5MzIsICAgOTMzLCAgIDkzNCwgICA5MzUsICAgOTM5LCAgIDk0MiwKKyAgICAgOTUz
LCAgIDk2MSwgICA5ODgsICAgOTkzLCAgMTAwMCwgIDEwMzgsICAxMDQxLCAgMTA0OCwgIDEwNTYs
ICAxMDc3LAorICAgIDEwOTgsICAxMTA5LCAgMTEzOCwgIDExNDMsICAxMTUzLCAgMTE1OCwgIDEx
NjgsICAxMTcxLCAgMTE3NCwgIDExNzcsCisgICAgMTE4MywgIDExOTAsICAxMTkzLCAgMTIxNSwg
IDEyMzMsICAxMjU3LCAgMTI4MCwgIDEyODQsICAxMzAyLCAgMTMxMCwKKyAgICAxMzQyLCAgMTM2
MiwgIDE0NTEsICAxNDYwLCAgMTQ4MywgIDE0ODYsICAxNDkyLCAgMTUwMCwgIDE1MDgsICAxNTE2
LAorICAgIDE1MjYsICAxNTMzLCAgMTUzNiwgIDE1MzksICAxNTQ1LCAgMTU0OCwgIDE1NjMsICAx
NTY3LCAgMTU3MSwgIDE1NzUsCisgICAgMTU4NCwgIDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQs
ICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAgMTYyOSwKKyAgICAxNjM1LCAgMTY0MSwgIDE2
NDcsICAxNjUyLCAgMTY1NywgIDE2NjYsICAxNjc1LCAgMTY4MCwgIDE2OTMsICAxNjkzLAorICAg
IDE3MDcsICAxNzA3LCAgMTcxNiwgIDE3MTksICAxNzM0LCAgMTc3MCwgIDE3NzQsICAxNzgwLCAg
MTc4OCwgIDE4MDQsCisgICAgMTgwOCwgIDE4MTIsICAxODEzLCAgMTgxOSwgIDE4MjAsICAxODIx
LCAgMTgyMiwgIDE4MjMsICAxODI3LCAgMTgyOCwKKyAgICAxODI4LCAgMTgyOCwgIDE4MzgsICAx
ODM5LCAgMTg0MywgIDE4NDMsICAxODQ0LCAgMTg0NCwgIDE4NDksICAxODUyLAorICAgIDE4NjIs
ICAxODY1LCAgMTg3MSwgIDE4NzIsICAxODc2LCAgMTg4NCwgIDE4ODgsICAxODk4LCAgMTkwMywg
IDE5MjAsCisgICAgMTkyMCwgIDE5MjUsICAxOTI1LCAgMTkzMiwgIDE5MzIsICAxOTQwLCAgMTk0
MywgIDE5NDksICAxOTUyLCAgMTk1OCwKKyAgICAxOTYyLCAgMTk2OSwgIDE5NzYsICAxOTgzLCAg
MTk5MCwgIDIwMDEsICAyMDEwLCAgMjAxNCwgIDIwMjEsICAyMDI0LAorICAgIDIwMzAsICAyMDMw
CiB9OwogI2VuZGlmCiAKQEAgLTIzNjAsMTggKzIzNjAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
LSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmc7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRTdHJp
bmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZp
ZWxkczsKQEAgLTM0MzAsNyArMzQyMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKQEAgLTM0NDcs
NyArMzQzOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKQEAgLTM0NjksNyArMzQ2MSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNw
WygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkp
CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50
ZXJtKTsKQEAgLTM1MzIsNyArMzUyNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikg
LSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlw
ZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKQEAgLTM1NzEsNyArMzU2Myw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5l
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHRydWUpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7CkBAIC00NTE3LDYgKzQ1MDksMTUgQEAgeXlyZWR1Y2U6
CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVp
bHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBi
ZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVk
aWF0ZS5oCmluZGV4IGU2M2Q0MjUuLjc1ODEyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTE2LDYgKzE2LDggQEAK
ICNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAogI2RlZmluZSBfX0lOVEVSTUVESUFURV9ICiAKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwogI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1v
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQ29u
c3RhbnRVbmlvbi5oIgpAQCAtNTUxLDYgKzU1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNy
ZW1lbnREZXB0aCgpIHtkZXB0aCsrO30KICAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRo
LS07fQogCisgICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24g
cG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1l
LgorICAgIHN0YXRpYyBUU3RyaW5nIGhhc2goY29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVu
Y3Rpb242NCBoYXNoRnVuY3Rpb24pOworCiAgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKICAgICBj
b25zdCBib29sIGluVmlzaXQ7CiAgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKaW5kZXggMWQ5NTkw
Ny4uYWRmMWEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9vc2luY2x1ZGUuaApAQCAtMjQsOSArMjQsNyBAQAogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRm
b3JtLgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEFOR0xFX1VTRV9OU1BSKQotI2luY2x1ZGUgInBy
dGhyZWFkLmgiCi0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKICNkZWZpbmUgU1RSSUNUCiAjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgpAQCAtMzQsNyArMzIsNyBAQAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdM
RV9VU0VfTlNQUgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KIAogCiAjaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKQEAgLTQyLDE2ICs0MCwxMyBAQAogLy8KIC8vIFRocmVhZCBMb2NhbCBTdG9y
YWdlIE9wZXJhdGlvbnMKIC8vCi0jaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKLXR5cGVkZWYg
UFJVaW50biBPU19UTFNJbmRleDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZG
RkZGRgotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjaWYgZGVmaW5lZChBTkdMRV9PU19X
SU4pCiB0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RMU19J
TkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQogI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkK
IHR5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RM
U19JTkRFWCAweEZGRkZGRkZGCi0jZW5kaWYgIC8vIEFOR0xFX1VTRV9OU1BSCisjZW5kaWYgIC8v
IEFOR0xFX09TX1dJTgogCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7CiBib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOwpAQCAtNjAs
OSArNTUsNyBAQCBib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOwogaW5s
aW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKIHsKICAgICBBU1NF
UlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1VT
RV9OU1BSKQotICAgIHJldHVybiBQUl9HZXRUaHJlYWRQcml2YXRlKG5JbmRleCk7Ci0jZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKICAgICByZXR1
cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKICNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCiAg
ICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcAppbmRleCBm
NjNkODFlLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwCkBAIC0xLDQzICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5zcHIgc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0vLwotLy8g
VGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9j
VExTSW5kZXgoKQotewotICAgIFBSVWludG4gaW5kZXg7Ci0gICAgUFJTdGF0dXMgc3RhdHVzID0g
UFJfTmV3VGhyZWFkUHJpdmF0ZUluZGV4KCZpbmRleCwgTlVMTCk7Ci0KLSAgICBpZiAoc3RhdHVz
KSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBh
bGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIE9TX1Nl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0gICAgaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBQUl9TZXRUaHJlYWRQcml2YXRlKG5JbmRleCwgbHB2
VmFsdWUpID09IDA7Ci19Ci0KLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRl
eCkKLXsKLSAgICAvLyBDYW4ndCBkZWxldGUgVExTIGtleXMgd2l0aCBuc3ByCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTIyZTFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFn
bm9zdGljc0Jhc2UuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNl
IHBwCit7CisKK0RpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIERpYWdu
b3N0aWNzOjpyZXBvcnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogS2VlcCBhIGNvdW50IG9mIGVycm9y
cyBhbmQgd2FybmluZ3MuCisgICAgcHJpbnQoaWQsIGxvYywgdGV4dCk7Cit9CisKK0RpYWdub3N0
aWNzOjpTZXZlcml0eSBEaWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCit7CisgICAgaWYgKChp
ZCA+IEVSUk9SX0JFR0lOKSAmJiAoaWQgPCBFUlJPUl9FTkQpKQorICAgICAgICByZXR1cm4gRVJS
T1I7CisKKyAgICBpZiAoKGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlkIDwgV0FSTklOR19FTkQp
KQorICAgICAgICByZXR1cm4gV0FSTklORzsKKworICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0
dXJuIEVSUk9SOworfQorCitzdGQ6OnN0cmluZyBEaWFnbm9zdGljczo6bWVzc2FnZShJRCBpZCkK
K3sKKyAgICBzd2l0Y2ggKGlkKQorICAgIHsKKyAgICAgIC8vIEVycm9ycyBiZWdpbi4KKyAgICAg
IGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICAgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7
CisgICAgICBjYXNlIE9VVF9PRl9NRU1PUlk6CisgICAgICAgICAgcmV0dXJuICJvdXQgb2YgbWVt
b3J5IjsKKyAgICAgIGNhc2UgSU5WQUxJRF9DSEFSQUNURVI6CisgICAgICAgICAgcmV0dXJuICJp
bnZhbGlkIGNoYXJhY3RlciI7CisgICAgICBjYXNlIElOVkFMSURfTlVNQkVSOgorICAgICAgICAg
IHJldHVybiAiaW52YWxpZCBudW1iZXIiOworICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgor
ICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7CisgICAgICBjYXNlIEZMT0FUX09W
RVJGTE9XOgorICAgICAgICAgIHJldHVybiAiZmxvYXQgb3ZlcmZsb3ciOworICAgICAgY2FzZSBU
T0tFTl9UT09fTE9ORzoKKyAgICAgICAgICByZXR1cm4gInRva2VuIHRvbyBsb25nIjsKKyAgICAg
IGNhc2UgSU5WQUxJRF9FWFBSRVNTSU9OOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHBy
ZXNzaW9uIjsKKyAgICAgIGNhc2UgRElWSVNJT05fQllfWkVSTzoKKyAgICAgICAgICByZXR1cm4g
ImRpdmlzaW9uIGJ5IHplcm8iOworICAgICAgY2FzZSBFT0ZfSU5fQ09NTUVOVDoKKyAgICAgICAg
ICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gY29tbWVudCI7CisgICAg
ICBjYXNlIFVORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIjsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lOVkFMSURfTkFNRToKKyAgICAgICAgICByZXR1
cm4gImludmFsaWQgZGlyZWN0aXZlIG5hbWUiOworICAgICAgY2FzZSBNQUNST19OQU1FX1JFU0VS
VkVEOgorICAgICAgICAgIHJldHVybiAibWFjcm8gbmFtZSBpcyByZXNlcnZlZCI7CisgICAgICBj
YXNlIE1BQ1JPX1JFREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gIm1hY3JvIHJlZGVmaW5lZCI7
CisgICAgICBjYXNlIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVEOgorICAgICAgICAgIHJldHVy
biAicHJlZGVmaW5lZCBtYWNybyByZWRlZmluZWQiOworICAgICAgY2FzZSBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5kZWZp
bmVkIjsKKyAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAgICAg
ICAgcmV0dXJuICJ1bnRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbiI7CisgICAgICBjYXNlIE1B
Q1JPX1RPT19GRVdfQVJHUzoKKyAgICAgICAgICByZXR1cm4gIk5vdCBlbm91Z2ggYXJndW1lbnRz
IGZvciBtYWNybyI7CisgICAgICBjYXNlIE1BQ1JPX1RPT19NQU5ZX0FSR1M6CisgICAgICAgICAg
cmV0dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKKyAgICAgIGNhc2UgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vu
ZGlmIGZvdW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05B
TF9FTFNFX1dJVEhPVVRfSUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZv
dW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNF
X0FGVEVSX0VMU0U6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZvdW5kIGFm
dGVyIGFub3RoZXIgI2Vsc2UiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIHdpdGhvdXQgYSBt
YXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6Cisg
ICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIGFmdGVyICNlbHNlIjsKKyAg
ICAgIGNhc2UgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVEOgorICAgICAgICAgIHJldHVybiAidW5l
eHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb25kaXRpb25hbCBibG9jayI7CisgICAgICBj
YXNlIElOVkFMSURfRVhURU5TSU9OX05BTUU6CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4
dGVuc2lvbiBuYW1lIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1I6Cisg
ICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBiZWhhdmlvciI7CisgICAgICBjYXNl
IElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQg
ZXh0ZW5zaW9uIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9OVU1CRVI6
CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIHZlcnNpb24gbnVtYmVyIjsKKyAgICAgIGNhc2Ug
SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgdmVy
c2lvbiBkaXJlY3RpdmUiOworICAgICAgY2FzZSBWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6
CisgICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVmb3JlIGFu
eXRoaW5nIGVsc2UsICIKKyAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRzIGFuZCB3
aGl0ZSBzcGFjZSI7CisgICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIGxpbmUgbnVtYmVyIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05V
TUJFUjoKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgZmlsZSBudW1iZXIiOworICAgICAgY2Fz
ZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5l
IGRpcmVjdGl2ZSI7CisgICAgICAvLyBFcnJvcnMgZW5kLgorICAgICAgLy8gV2FybmluZ3MgYmVn
aW4uCisgICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICAgICAgcmV0dXJuICJ1bmV4
cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIENPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOworICAgICAgY2FzZSBVTlJFQ09HTkla
RURfUFJBR01BOgorICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CisgICAg
ICAvLyBXYXJuaW5ncyBlbmQuCisgICAgICBkZWZhdWx0OgorICAgICAgICAgIGFzc2VydChmYWxz
ZSk7CisgICAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHBw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wN2JjNDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApA
QCAtMCwwICsxLDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGluZyBkaWFnbm9z
dGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IgZm9y
bWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25vc3RpY3MKK3sK
KyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAg
ICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9C
RUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisg
ICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAg
ICAgSU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgRkxPQVRfT1ZFUkZMT1csCisgICAgICAgIFRP
S0VOX1RPT19MT05HLAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBNQUNST19O
QU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BS
RURFRklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwK
KyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RP
T19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VU
X0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJ
VElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9F
TFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIElOVkFMSURf
RVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lP
Tl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFZF
UlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwK
KyAgICAgICAgSU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVD
VElWRSwKKyAgICAgICAgRVJST1JfRU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAg
ICAgIEVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdBUk5JTkdfRU5ECisg
ICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2b2lkIHJlcG9ydChJ
RCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQp
OworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisgICAgc3Rk
OjpzdHJpbmcgbWVzc2FnZShJRCBpZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzVjNmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisKK25hbWVzcGFjZSBwcAor
eworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFz
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5j
bHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9u
OworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vz
c29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgor
Ly8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2li
bGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNz
IERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhh
bmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFt
ZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9j
YXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGZkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5j
cHAKQEAgLTAsMCArMSw5MzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5j
bHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUg
IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgor
I2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUg
IlRva2VuaXplci5oIgorCituYW1lc3BhY2UgeworZW51bSBEaXJlY3RpdmVUeXBlCit7CisgICAg
RElSRUNUSVZFX05PTkUsCisgICAgRElSRUNUSVZFX0RFRklORSwKKyAgICBESVJFQ1RJVkVfVU5E
RUYsCisgICAgRElSRUNUSVZFX0lGLAorICAgIERJUkVDVElWRV9JRkRFRiwKKyAgICBESVJFQ1RJ
VkVfSUZOREVGLAorICAgIERJUkVDVElWRV9FTFNFLAorICAgIERJUkVDVElWRV9FTElGLAorICAg
IERJUkVDVElWRV9FTkRJRiwKKyAgICBESVJFQ1RJVkVfRVJST1IsCisgICAgRElSRUNUSVZFX1BS
QUdNQSwKKyAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAorICAgIERJUkVDVElWRV9WRVJTSU9OLAor
ICAgIERJUkVDVElWRV9MSU5FCit9OworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBEaXJlY3Rp
dmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5lKCJkZWZpbmUiKTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9uIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5lIik7CisKKyAgICBpZiAodG9rZW4t
PnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X05PTkU7CisKKyAgICBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9ERUZJTkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0g
a0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVs
c2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9JRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlSWZkZWYpCisg
ICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQg
PT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUVsc2UpCisgICAgICAgIHJldHVy
biBESVJFQ1RJVkVfRUxTRTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZl
RWxpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2Vu
LT50ZXh0ID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJ
RjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAg
IHJldHVybiBESVJFQ1RJVkVfRVJST1I7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0Rp
cmVjdGl2ZVByYWdtYSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxz
ZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVj
dGl2ZVZlcnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKKyAgICBlbHNl
IGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9MSU5FOworCisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMgYm9v
bCBpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQoreworICAg
IHN3aXRjaCAoZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAg
ICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Cisg
ICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdG9rZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJvb2wg
aXNFT0QoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50eXBl
ID09ICdcbicpIHx8ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitzdGF0
aWMgdm9pZCBza2lwVW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikK
K3sKKyAgICB3aGlsZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxleCh0
b2tlbik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIg
YXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2
ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0
JiBtYWNyb1NldCkKK3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YWNyb1NldC5maW5kKG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8g
aXRlci0+c2Vjb25kLnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERl
ZmluZWRQYXJzZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6CisgICAgICAgIG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1NldCks
CisgICAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4tPnRl
eHQgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJl
biA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tl
bi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisKKyAgICAg
ICAgaWYgKHBhcmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIs
IHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAg
ICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgor
ICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT50
ZXh0ID0gZXhwcmVzc2lvbjsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxleGVy
OworICAgIGNvbnN0IE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFn
bm9zdGljczsKK307CisKK0RpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQq
IG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQoZmFs
c2UpLAorICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQp
LAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZUhhbmRsZXIo
ZGlyZWN0aXZlSGFuZGxlcikKK3sKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tl
biogdG9rZW4pCit7CisgICAgZG8KKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgICAgICAgICBtUGFz
dEZpcnN0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05B
TF9VTlRFUk1JTkFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2subG9jYXRpb24sIGJsb2NrLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBl
ID09ICdcbicpKTsKKworICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQgPSB0cnVlOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIGlmIChpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICAvLyBFbXB0
eSBEaXJlY3RpdmUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEaXJlY3RpdmVUeXBl
IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBl
eGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9ncm91cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNv
bmRpdGlvbmFsIGRpcmVjdGl2ZXMuCisgICAgaWYgKHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9u
YWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKKyAgICB7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGly
ZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2Vu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAg
cGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVf
SUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAg
ICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6Cisg
ICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZl
cnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6
CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0g
VG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVk
KHRva2VuLT50ZXh0LCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnRl
eHQpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFj
cm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5u
YW1lID0gdG9rZW4tPnRleHQ7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICB7
CisgICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgorICAg
ICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVuYzsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRva2VuLT50ZXh0KTsKKworICAgICAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUg
KHRva2VuLT50eXBlID09ICcsJyk7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykK
KyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dGV4
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlw
ZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAg
ICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3Nhcnkg
aW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dz
IHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jv
cy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAg
bWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50
IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1l
bnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2Vt
ZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8g
Q2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBt
TWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8p
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQor
eworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT50ZXh0
KTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1N
YWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lG
KTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9r
ZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYp
OworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRp
b25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxv
Y2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tp
cCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXAp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxz
ZUdyb3VwID0gdHJ1ZTsKKyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3Jv
dXA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYg
dGhlcmUgYXJlIGV4dHJhIHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1D
b25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFj
aygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisgICAgeworICAgICAgICAvLyBObyBkaWFn
bm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5lLgorICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9j
ay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChibG9jay5mb3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3QgcGFy
c2UgdGhlIGV4cHJlc3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1p
dCBhIGRpYWdub3N0aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICBi
bG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxpZEdy
b3VwID0gZXhwcmVzc2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
bmRpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX0VORElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3Rh
Y2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAj
ZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2Vu
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05E
SVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVy
cm9yKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfRVJST1IpOworCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8
PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1E
aXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIo
KSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSld
Lgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAg
IGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BB
UkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsK
KworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOwor
ICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnRl
eHQ7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExFRlRfUEFS
RU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAg
ICAgICB2YWx1ZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYg
KHRva2VuLT50eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFs
aWQgPSB2YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJh
Z21hLgorICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAg
IC8vIFdpdGhvdXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hU
X1BBUkVOICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFH
TUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7
CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90
aWZ5IGZvciBlbXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+
aGFuZGxlUHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKKwor
ICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwK
KyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1F
OworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBl
ICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgor
ICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklF
UikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2
YWxpZCkgbmFtZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBDT0xPTjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzon
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05f
QkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dGV4
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElS
RUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2Nh
dGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VW
ZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBpZiAobVBhc3RGaXJzdFN0YXRlbWVudCkKKyAg
ICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpWRVJTSU9OX05P
VF9GSVJTVF9TVEFURU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW51bSBTdGF0ZQorICAgIHsK
KyAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7
CisgICAgaW50IHZlcnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwor
CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9
ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVS
OgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1Rf
SU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZ2ZXJzaW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVS
RkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAg
ICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
dmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5s
b2NhdGlvbiwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9MSU5FKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIExJTkVfTlVNQkVS
LAorICAgICAgICBGSUxFX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsK
KyAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOworICAgIGludCBzdGF0ZSA9IExJTkVfTlVNQkVS
OworCisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1Nl
dCwgbURpYWdub3N0aWNzKTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBMSU5FX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1CRVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmbGluZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRklM
RV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmZpbGUpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09W
RVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Cisg
ICAgfQorCisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRl
ICE9IEZJTEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHZhbGlk
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6
ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJF
UiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29s
IERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9u
YWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJs
b2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2su
c2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9j
ayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnRleHQ7CisgICAgYmxvY2subG9jYXRp
b24gPSB0b2tlbi0+bG9jYXRpb247CisKKyAgICBpZiAoc2tpcHBpbmcoKSkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9u
YWwgZ3JvdXAKKyAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0
aGlzIHdob2xlIGJsb2NrIGlzIHNraXBwZWQuCisgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRv
IHBhcnNlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKKyAgICAgICAgLy8g
ZW1pdCBhIGRpYWdub3N0aWMuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2Vu
KTsKKworICAgICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAgICAgIHN3aXRjaCAoZGlyZWN0
aXZlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgICAg
ICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4
cHJlc3Npb24gPT0gMDsKKyAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lv
biAhPSAwOworICAgIH0KKyAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwor
fQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4p
Cit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwK
KyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKKwor
ICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1E
aWFnbm9zdGljcyk7CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFy
c2VyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgRXhwcmVzc2lvblBhcnNlciBleHBy
ZXNzaW9uUGFyc2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOworCisgICAgaW50IGV4
cHJlc3Npb24gPSAwOworICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICBleHByZXNz
aW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7CisKKyAgICAvLyBXYXJuIGlmIHRo
ZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCisgICAgaWYgKCFpc0VPRCh0b2tl
bikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09O
RElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK2lu
dCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAor
ICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnRleHQpOworICAg
IGludCBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7CisKKyAg
ICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3ZjAwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmgKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9u
LmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVj
dGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisg
ICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAg
ICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJl
Y3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
RW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVu
c2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmco
KSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAg
IGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJl
c3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sK
KyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAgYm9vbCBza2lwR3Jv
dXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBib29sIGZvdW5kRWxz
ZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAgICAgICAgICBza2lw
QmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAg
IGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBib29sIG1QYXN0Rmlyc3RTdGF0
ZW1lbnQ7CisgICAgc3RkOjp2ZWN0b3I8Q29uZGl0aW9uYWxCbG9jaz4gbUNvbmRpdGlvbmFsU3Rh
Y2s7CisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7
CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVyKiBt
RGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42OTgxZGZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDE5NDggQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAq
LworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAw
MSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u
KQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogQXMg
YSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNv
bnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBk
aXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxv
bmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5n
IHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJz
ZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9u
KSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg
bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2Fz
IGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4y
IG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5
IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2Fs
bGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxv
dyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24g
dXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAg
dmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1h
Y3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGlu
Y2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5
IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8K
KworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8q
IEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKworLyog
U2tlbGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisv
KiBQdXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBVc2luZyBsb2NhdGlv
bnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJzdGl0dXRlIHRoZSB2YXJp
YWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKKyNk
ZWZpbmUgeXlsZXggICBwcGxleAorI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKKyNkZWZpbmUgeXls
dmFsICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyBwcGRl
YnVnCisjZGVmaW5lIHl5bmVycnMgcHBuZXJycworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVm
IFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisg
ICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRP
S19DT05TVF9JTlQgPSAyNTgsCisgICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FO
RCA9IDI2MCwKKyAgICAgVE9LX09QX05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisg
ICAgIFRPS19PUF9HRSA9IDI2MywKKyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1Bf
UklHSFQgPSAyNjUsCisgICAgIFRPS19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAy
NjcKKyAgIH07CisjZW5kaWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIFRPS19DT05TVF9JTlQg
MjU4CisjZGVmaW5lIFRPS19PUF9PUiAyNTkKKyNkZWZpbmUgVE9LX09QX0FORCAyNjAKKyNkZWZp
bmUgVE9LX09QX05FIDI2MQorI2RlZmluZSBUT0tfT1BfRVEgMjYyCisjZGVmaW5lIFRPS19PUF9H
RSAyNjMKKyNkZWZpbmUgVE9LX09QX0xFIDI2NAorI2RlZmluZSBUT0tfT1BfUklHSFQgMjY1Cisj
ZGVmaW5lIFRPS19PUF9MRUZUIDI2NgorI2RlZmluZSBUT0tfVU5BUlkgMjY3CisKKworCisKKy8q
IENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorLy8gVHJpZ2dlcmVkIGJ5
IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyB3YXJu
aW5nICItV3Vua25vd24tcHJhZ21hcyIKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNz
aW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisK
KyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1
ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZ
U1RZUEU7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNU
WVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVOQUJMRV9OTFMgMAorI2RlZmlu
ZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2Rl
ZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0
Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxl
eGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8g
bmFtZXNwYWNlCisKKworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCog
Y29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHJlYXNvbik7CisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJV
RworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJv
ciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1Jf
VkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVS
Uk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICov
CisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlm
CisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJF
RAordHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNv
bGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFS
RUQgMQorIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKworLyogQ29w
eSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8qIExpbmUg
MjE2IG9mIHlhY2MuYy4gICovCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5k
aWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3Vp
bnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYK
KworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4Owor
I2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWdu
ZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50
ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2
IHl5dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBl
X3VpbnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9J
TlQxNiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2
OworI2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAg
ZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAg
ZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNp
emVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisj
ZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRl
ZiBZWV8KKyMgaWYgWVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8
bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5l
IFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgor
IyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRp
ZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNp
bmciIEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVm
aW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVt
cHR5ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mg
d2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMg
ZGVmaW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCBpKQorI2Vsc2UKK3N0YXRpYyBpbnQK
K1lZSUQgKGkpCisgICAgaW50IGk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIGk7Cit9CisjZW5kaWYK
KworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisvKiBUaGUg
cGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3lt
Ym9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VT
RV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBf
X2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgor
IyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxs
b2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxvY2EgX2Fs
bG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgIGlm
ICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERMSUJfSAor
IyAgICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBl
bmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQ
YWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RB
Q0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUg
b25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBh
bmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5u
b3Qgc2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBV
c2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBj
b21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisj
ICBlbmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVm
aW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0K
KyMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRp
ZgorIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCisg
ICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkgICAg
ICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRs
aWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBfU1RE
TElCX0gKKyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBp
Zm5kZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZp
bmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwg
ZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlG
UkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBk
ZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Cit2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVy
ZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93
IFwKKyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVkIFlZU1RZ
UEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQg
aXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFs
bG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNzOworICBZWVNUWVBFIHl5dnM7CisgIH07CisKKy8q
IFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFu
ZCB0aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVu
aW9uIHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5v
dWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAgKi8KKyMg
ZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2lu
dDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkK
KworLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5k
IGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlmbmRlZiBZWUNPUFkKKyMg
IGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAgZGVmaW5lIFlZQ09QWShU
bywgRnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291
bnQpICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBG
cm9tLCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAorCSAgWVlTSVpFX1QgeXlp
OwkJCQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJICAgIChU
bylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlIChZWUlEICgw
KSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBs
b2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBh
bmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50
cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQor
ICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBm
b3IgdGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3Rh
Y2spCQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9U
IHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6
ZSk7CQkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5
eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5
eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJ
CQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0gU3Rh
dGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwg
IDE0CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlM
QVNUICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNk
ZWZpbmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMu
ICAqLworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4g
ICovCisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRl
cy4gICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0t
IEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5l
IFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlUUkFO
U0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/
IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0g
LS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAgICAg
IDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYsICAg
ICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhT
W1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlO
IGluCisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0K
K3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1LCAg
ICAxOSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAgIDQ3
LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUsICAg
IDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEn
LXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfaW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAgICAt
MSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAg
ICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjksCisg
ICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAgMjks
ICAgICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwgICAg
MjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAgICAt
MSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAgIC0x
LCAgICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjksICAg
IC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwgICAg
LTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAgICAy
OSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlSTElO
RVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwg
ICAgOTAsICAgIDkwLCAgICA5NywgICAgOTgsICAgMTAxLCAgIDEwNCwgICAxMDcsICAgMTEwLCAg
IDExMywKKyAgICAgMTE2LCAgIDExOSwgICAxMjIsICAgMTI1LCAgIDEyOCwgICAxMzEsICAgMTM0
LCAgIDEzNywgICAxNDAsICAgMTQzLAorICAgICAxNTYsICAgMTY5LCAgIDE3MiwgICAxNzUsICAg
MTc4LCAgIDE4MSwgICAxODQKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9W
RVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5n
IG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMs
IHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBj
b25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5k
ZWZpbmVkIiwgIlRPS19DT05TVF9JTlQiLCAiVE9LX09QX09SIiwKKyAgIlRPS19PUF9BTkQiLCAi
J3wnIiwgIideJyIsICInJiciLCAiVE9LX09QX05FIiwgIlRPS19PUF9FUSIsICInPCciLAorICAi
Jz4nIiwgIlRPS19PUF9HRSIsICJUT0tfT1BfTEUiLCAiVE9LX09QX1JJR0hUIiwgIlRPS19PUF9M
RUZUIiwgIicrJyIsCisgICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVE9LX1VOQVJZIiwg
IichJyIsICInficiLCAiJygnIiwgIicpJyIsCisgICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJl
c3Npb24iLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlM
RVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9r
ZW4gWVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10g
PQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQs
ICAgIDk0LCAgICAzOCwgICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2MywgICAy
NjQsICAgMjY1LCAgIDI2NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAzNywg
ICAyNjcsICAgIDMzLCAgIDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZWVIx
W1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LAorICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNv
bXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywK
KyAgICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9Owor
CisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGgg
aW4gc3RhdGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0
aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3Iu
ICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAw
LCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIs
ICAgIDI1LAorICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LAorICAgICAgMTAsICAgIDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAg
IDE4LCAgICAxNywgICAgMjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09UT1tO
VEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7
CisgICAgICAtMSwgICAgIDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJ
bmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4g
ICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5
eXBhY3RbXSA9Cit7CisgICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LCAgICA0NiwgICAgMTIsICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEsICAg
IDI3LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYs
ICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAgIDEx
NiwgICAxMzAsICAgMTQzLCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEwLCAg
IC0xMCwgICAgMzcsICAgIDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAgLTEx
Cit9OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQ4IHl5cGdvdG9bXSA9Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZWVRB
QkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAg
SWYKKyAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0
aGUgcnVsZSB3aGljaAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdo
YXQgWVlERUZBQ1Qgc2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8K
KyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFi
bGVbXSA9Cit7CisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAg
IDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAg
NTAsCisgICAgICA1MSwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAg
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MgorfTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAxNywgICAgMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywKKyAg
ICAgIDI0LCAgICAyNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAgIDcs
ICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAgICA5
LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlTVE9T
W1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAg
IHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
OCB5eXN0b3NbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAg
IDI5Cit9OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5
Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmlu
ZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUg
WVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxh
YgorCisKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1h
aW5zIGhlcmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5l
dyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFz
IHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisKKyNkZWZpbmUgWVlGQUlM
CQlnb3RvIHl5ZXJybGFiCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVz
KQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJCQkJCQlcCisg
IGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgewkJCQkJCQkJ
XAorICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwgPSAoVmFsdWUp
OwkJCQkJCVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAg
ICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisg
ICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXll
cnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisg
ICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQor
CisKKyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlM
TE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0u
CisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdo
aWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQp
LiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlM
TE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJ
XAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1
cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkg
IChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47
CVwKKwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xp
bmU7CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFz
dF9jb2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJ
XAorCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlc
CisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZp
cnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChS
aHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgw
KSkKKyNlbmRpZgorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlv
biBvbiB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFs
bHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTog
d2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRlZiBZWV9M
T0NBVElPTl9QUklOVAorIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NB
VElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQu
JWQiLAkJCVwKKwkgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwK
KwkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAg
ZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgor
I2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFy
Z3VtZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXgg
KCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXls
dmFsLCBjb250ZXh0KQorI2VuZGlmCisKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVk
LiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3Rk
aW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBS
SU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2Rv
IHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlc
Cit9IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBU
eXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRl
YnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRl
cnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJy
LAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRG
IChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZ
SUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlv
dXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4
dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5
eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsK
KyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAg
ICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0
dXJuOworICBZWVVTRSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8
IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5
dmFsdWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2gg
KHl5dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBv
biBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlf
c3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAq
IGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5
eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAg
IEZJTEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNv
bnN0IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5
dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIs
IHl5dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRl
cm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5
eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRw
dXQsICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0
aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVk
ZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0
eXBlX2ludDE2ICp0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50IChib3R0
b20sIHRvcCkKKyAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnRv
cDsKKyNlbmRpZgoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3Ig
KDsgYm90dG9tIDw9IHRvcDsgKytib3R0b20pCisgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQi
LCAqYm90dG9tKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZ
WV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlk
ZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlc
Cit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0
byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
CitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVs
ZSwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50
ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5
eXJ1bGU7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0g
eXlyMlt5eXJ1bGVdOworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5
cmxpbmVbeXlydWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBy
dWxlICVkIChsaW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBU
aGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5y
aHM7IHl5aSsrKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5
aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1
bGVdICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkg
ICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7
CisgICAgfQorfQorCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxl
LCBjb250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJp
bnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVs
dGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZ
WURFQlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9Q
UklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJ
TlQoQm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAv
KiAhWVlERUJVRyAqLworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUg
cGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5J
VERFUFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBz
dGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3Rh
Y2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1
ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0
aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZ
WU1BWERFUFRICisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworDAorCisjaWYg
WVlFUlJPUl9WRVJCT1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJ
QkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMg
IGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChj
b25zdCBjaGFyICp5eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0
cikKKyAgICBjb25zdCBjaGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsK
KyAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsK
KyAgcmV0dXJuIHl5bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBj
cHkKKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmlu
ZWQgX0dOVV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBD
b3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5h
dGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNv
bnN0IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3Qs
IHl5c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRp
ZgoreworICBjaGFyICp5eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOwor
CisgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisg
IHJldHVybiB5eWQgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFt
ZXJyCisvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBp
bmcgYXdheSB1bm5lY2Vzc2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBp
dCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3Vi
bGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMg
YW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNr
c2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVT
IGlzCisgICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Yg
d2hhdCB0aGUgcmVzdWx0CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9U
Cit5eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5
eXN0ciA9PSAnIicpCisgICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIg
Y29uc3QgKnl5cCA9IHl5c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQor
CSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlw
X3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAg
ICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLwor
CSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOwor
CSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMp
CisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAg
ZG9fbm90X3N0cmlwX3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1
cm4geXlzdHJsZW4gKHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikg
LSB5eXJlczsKK30KKyMgZW5kaWYKKworLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1l
c3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0
ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVk
aW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBu
b3QKKyAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhh
dCB3b3VsZCBiZQorICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFu
IG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCisgICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlT
SVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlv
bi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwg
aW50IHl5c3RhdGUsIGludCB5eWNoYXIpCit7CisgIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07
CisKKyAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJl
dHVybiAwOworICBlbHNlCisgICAgeworICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5
eWNoYXIpOworICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5
eXR5cGVdKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVf
VCB5eXNpemUxOworICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsg
WVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5
YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAgICAgaW50IHl5eDsKKworIyBp
ZiAwCisgICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBm
b3JtYXRzIHRoYXQgYXJlCisJIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLworICAgICAgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9y
LCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9y
LCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4
IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAg
IFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3Ig
JXMgb3IgJXMiKTsKKyMgZW5kaWYKKyAgICAgIGNoYXIgKnl5Zm10OworICAgICAgY2hhciBjb25z
dCAqeXlmOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4
IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0
aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltd
ID0gIiBvciAlcyI7CisgICAgICBjaGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJ
ICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQorCQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9B
UkdTX01BWElNVU0gLSAyKQorCQkgICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAg
Y2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVjdGluZzsKKworICAgICAgLyogU3RhcnQgWVlY
IGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNI
RUNLLiAgKi8KKyAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKworICAg
ICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICov
CisgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4
ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Cisg
ICAgICBpbnQgeXljb3VudCA9IDE7CisKKyAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVd
OworICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAg
ICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hl
Y2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAo
eXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXlj
b3VudCA9IDE7CisJCXl5c2l6ZSA9IHl5c2l6ZTA7CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhw
ZWN0ZWQgLSAxXSA9ICdcMCc7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3Vu
dCsrXSA9IHl5dG5hbWVbeXl4XTsKKwkgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAo
MCwgeXl0bmFtZVt5eXhdKTsKKwkgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlz
aXplKTsKKwkgICAgeXlzaXplID0geXlzaXplMTsKKwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlm
bXQsIHl5cHJlZml4KTsKKwkgICAgeXlwcmVmaXggPSB5eW9yOworCSAgfQorCisgICAgICB5eWYg
PSBZWV8oeXlmb3JtYXQpOworICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYp
OworICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5
c2l6ZSA9IHl5c2l6ZTE7CisKKyAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZ
U0laRV9NQVhJTVVNOworCisgICAgICBpZiAoeXlyZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3By
aW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAg
RG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkg
ICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICov
CisJICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKKwkgIGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgq
eXlwID0gKnl5ZikgIT0gJ1wwJykKKwkgICAgeworCSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5
eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJy
ICh5eXAsIHl5YXJnW3l5aSsrXSk7CisJCSAgeXlmICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJ
CXsKKwkJICB5eXArKzsKKwkJICB5eWYrKzsKKwkJfQorCSAgICB9CisJfQorICAgICAgcmV0dXJu
IHl5c2l6ZTsKKyAgICB9Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVh
c2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisj
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5
ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVl
cCwgQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXlt
c2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgY29uc3QgY2hhciAqeXltc2c7Cisg
ICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250
ZXh0OworI2VuZGlmCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZVVNFIChjb250ZXh0KTsK
KworICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BS
SU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAo
eXl0eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisMCisK
Ky8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisKKyNp
ZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5
cGFyc2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQg
KmNvbnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZ
WVBBUlNFX1BBUkFNICovCisKKworCisKKworCisvKi0tLS0tLS0tLS0uCit8IHl5cGFyc2UuICB8
CitgLS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BB
UkFNKQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBB
UlNFX1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKENvbnRleHQg
KmNvbnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIENvbnRleHQgKmNv
bnRleHQ7CisjZW5kaWYKKyNlbmRpZgoreworICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAq
LworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFk
IHN5bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworLyogTnVtYmVyIG9mIHN5bnRheCBlcnJv
cnMgc28gZmFyLiAgKi8KK2ludCB5eW5lcnJzOworCisgIGludCB5eXN0YXRlOworICBpbnQgeXlu
OworICBpbnQgeXlyZXN1bHQ7CisgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3Jl
IGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICBpbnQgeXllcnJzdGF0dXM7CisgIC8qIExv
b2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4g
ICovCisgIGludCB5eXRva2VuID0gMDsKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVy
IGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIg
eXltc2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXlt
c2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5kaWYKKworICAvKiBUaHJlZSBzdGFja3Mg
YW5kIHRoZWlyIHRvb2xzOgorICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAorICAgICBg
eXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorICAgICBgeXlscyc6IHJlbGF0ZWQg
dG8gbG9jYXRpb25zLgorCisgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBw
b2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxz
ZXdoZXJlLiAgKi8KKworICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICB5eXR5cGVfaW50MTYg
eXlzc2FbWVlJTklUREVQVEhdOworICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKKyAgeXl0
eXBlX2ludDE2ICp5eXNzcDsKKworICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLwor
ICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOwor
ICBZWVNUWVBFICp5eXZzcDsKKworCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAt
PSAoTiksIHl5c3NwIC09IChOKSkKKworICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERF
UFRIOworCisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUg
YW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZ
UEUgeXl2YWw7CisKKworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0
aGUgcmVkdWNlZCBydWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxk
IGJlIHBvcHBlZC4gICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJy
LCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMg
PSAwOworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9r
ZW4gdG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAg
ICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNv
IHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAg
ICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworCisgIHl5
c3NwID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOworCisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4g
eXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hl
biB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUg
anVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFj
a3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsK
KworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAv
KiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1l
bnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNp
ZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxs
b2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYn
cyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZ
UEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworCisJLyog
RWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhl
CisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8g
YmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0
IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAg
Ki8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwg
eXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2Yg
KCp5eXZzcCksCisKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2
cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYg
WVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAg
ICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhE
RVBUSCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFj
a3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFj
a3NpemUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5
c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFD
S19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkg
IGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7CisJWVlTVEFD
S19SRUxPQ0FURSAoeXl2cyk7CisKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlz
czEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYK
KyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6
ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisKKyAgICAgIFlZRFBS
SU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5z
aWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFj
a3NpemUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgZ290byB5eWJhY2t1
cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXli
YWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVu
dCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFu
ZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRl
IHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCisg
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAgICBn
b3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tl
biBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBZWUNIQVIgaXMgZWl0aGVy
IFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJS
ZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBp
ZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVP
RjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7
CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5
eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBz
ZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVy
cm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4g
PCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3Rv
IHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAg
eworICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVy
cmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKwor
ICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogQ291bnQgdG9rZW5z
IHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorICAgICBz
dGF0dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsKKworICAv
KiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNo
aWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUg
c2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVP
RikKKyAgICB5eWNoYXIgPSBZWUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNw
ID0geXlsdmFsOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQg
LS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDAp
CisgICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRo
ZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5
bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZh
bHVlIG9mIHRoZSBhY3Rpb246CisgICAgIGAkJCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRo
ZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZp
b3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkg
dXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMg
dGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5p
bmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5
eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5
eW4pCisgICAgeworICAgICAgICBjYXNlIDI6CisKKyAgICB7CisgICAgICAgICooY29udGV4dC0+
cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
WVlBQ0NFUFQ7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFso
MSkgLSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBe
ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAoeXl2c3BbKDMpIC0gKDMpXSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEz
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNw
WygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyld
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisKKyAgICB7CisgICAgICAgICh5
eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSArICh5
eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAg
ICB7CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAg
c3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3Bb
KDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAg
c3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9j
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19z
dHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6Om9zdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyld
KSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAg
ICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNw
WygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygy
KSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAo
MyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisKKy8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAq
LworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+
ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxl
bik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAq
Kyt5eXZzcCA9IHl5dmFsOworCisKKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUg
cmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNl
ZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJl
ciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5
cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5
eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0
YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9b
eXluIC0gWVlOVE9LRU5TXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0
aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXll
cnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVw
b3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsr
eXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwg
WVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorICAgICAgeworCVlZU0laRV9UIHl5c2l6ZSA9
IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOworCWlmICh5eW1zZ19hbGxvYyA8
IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKKwkgIHsKKwkg
ICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7CisJICAgIGlmICghICh5eXNpemUgPD0g
eXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisJICAgICAgeXlh
bGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKwkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVm
KQorCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworCSAgICB5eW1zZyA9IChjaGFyICopIFlZ
U1RBQ0tfQUxMT0MgKHl5YWxsb2MpOworCSAgICBpZiAoeXltc2cpCisJICAgICAgeXltc2dfYWxs
b2MgPSB5eWFsbG9jOworCSAgICBlbHNlCisJICAgICAgeworCQl5eW1zZyA9IHl5bXNnYnVmOwor
CQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKwkgICAgICB9CisJICB9CisKKwlpZiAo
MCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCisJICB7CisJICAgICh2b2lkKSB5
eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7CisJICAgIHl5ZXJyb3IgKGNv
bnRleHQsIHl5bXNnKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQs
IFlZXygic3ludGF4IGVycm9yIikpOworCSAgICBpZiAoeXlzaXplICE9IDApCisJICAgICAgZ290
byB5eWV4aGF1c3RlZGxhYjsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworCisKKyAg
aWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQg
ZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2Nh
cmQgaXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVy
biBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9G
KQorCSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJy
b3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkg
IHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJl
dXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2Vu
LiAgKi8KKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2Vk
IGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29t
cGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZ
RVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGlu
IHVzZXIKKyAgICAgY29kZS4gICovCisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8g
eXllcnJvcmxhYjsKKworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVs
ZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9Q
U1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlz
c3ApOworICB5eXN0YXRlID0gKnl5c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZ
RVJST1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFj
aCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQor
ICAgIHsKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQ
QUNUX05JTkYpCisJeworCSAgeXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5
biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAg
eXluID0geXl0YWJsZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAg
fQorCX0KKworICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90
IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJ
WVlBQk9SVDsKKworCisgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5
c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7Cisg
ICAgICB5eXN0YXRlID0gKnl5c3NwOworICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgICor
K3l5dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAg
WVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsK
KworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBj
b21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXlhY2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JU
IGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
eXlhYm9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWZuZGVm
IHl5b3ZlcmZsb3cKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVy
ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhh
dXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRp
ZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBU
WSkKKyAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKwkJ
IHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3lt
Ym9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9S
VCBvciBZWUFDQ0VQVC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJ
TlQgKHl5c3MsIHl5c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAg
eXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZz
cCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3Zl
cmZsb3cKKyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNl
bmRpZgorI2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAg
WVlTVEFDS19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNl
ZC4gICovCisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4
KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsK
KworICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRv
a2VuLT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGludCB2YWwgPSAwOworICAgICAgICBpZiAoIXRva2VuLT51
VmFsdWUoJnZhbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgfQorICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwp
OworICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBUT0tfT1BfT1I7IGJyZWFrOwor
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9IFRPS19PUF9BTkQ7IGJyZWFrOwor
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gVE9LX09QX05FOyBicmVhazsKKyAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9FUTogdHlwZSA9IFRPS19PUF9FUTsgYnJlYWs7CisgICAg
ICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBUT0tfT1BfR0U7IGJyZWFrOworICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gVE9LX09QX0xFOyBicmVhazsKKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IFRPS19PUF9SSUdIVDsgYnJlYWs7CisgICAg
ICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IFRPS19PUF9MRUZUOyBicmVhazsKKyAg
ICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0g
J14nOyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNh
c2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBi
cmVhazsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysn
OiB0eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsK
KyAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBl
ID0gJyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAg
IGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygn
OyBicmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBp
ZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+
bGV4ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9y
KENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNw
YWNlIHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4
ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAg
bURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6
OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0
OworICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5s
ZXhlciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5y
ZXN1bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3
aXRjaCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAg
YnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBi
cmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+
bG9jYXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9
PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJkMDU5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VS
X0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwor
CisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdu
b3N0aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25Q
YXJzZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4s
IGludCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25v
c3RpY3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVz
c2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2E3ZjUzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEs
Mjg0IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBn
cmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9E
SUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitX
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2Vy
LgorKi8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2lmIGRlZmluZWQoX19H
TlVDX18pCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFz
IgorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisj
cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgorI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyB3YXJuaW5nICItV3Vua25vd24tcHJhZ21hcyIKKyNlbGlmIGRlZmluZWQo
X01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisK
KyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2lu
Y2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRl
ICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQor
dHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlw
ZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVO
QUJMRV9OTFMgMAorI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBF
X0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNl
IHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsK
KyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiBy
ZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCislfQorCislcHVyZS1wYXJzZXIKKyVuYW1lLXBy
ZWZpeD0icHAiCislcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CislbGV4LXBhcmFtIHtD
b250ZXh0ICpjb250ZXh0fQorCisleworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwg
Q29udGV4dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIHJlYXNvbik7CislfQorCisldG9rZW4gVE9LX0NPTlNUX0lOVAorJWxlZnQg
VE9LX09QX09SCislbGVmdCBUT0tfT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQg
JyYnCislbGVmdCBUT0tfT1BfRVEgVE9LX09QX05FCislbGVmdCAnPCcgJz4nIFRPS19PUF9MRSBU
T0tfT1BfR0UKKyVsZWZ0IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAorJWxlZnQgJysnICctJwor
JWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBUT0tfVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6
IGV4cHJlc3Npb24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxp
bnQ+KCQxKTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAg
OiBUT0tfQ09OU1RfSU5UCisgICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNzaW9uIHsK
KyAgICAgICAgJCQgPSAkMSB8fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9B
TkQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhw
cmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOwor
ICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ICYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lvbiB7Cisg
ICAgICAgICQkID0gJDEgIT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfRVEg
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiBUT0tfT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAg
fQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0g
JDEgPD0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7CisgICAg
ICAgICQkID0gJDEgPiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc8JyBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSA8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09Q
X1JJR0hUIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0KKyAgICB8
IGV4cHJlc3Npb24gVE9LX09QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwg
JDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gJDEgLSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Np
b24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3Ry
ZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllf
WkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICQkID0gJDEgJSAkMzsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJy8nIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAg
ICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8
PCAiIC8gIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3Ry
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ICogJDM7CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAg
ICAgICAgJCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFRPS19V
TkFSWSB7CisgICAgICAgICQkID0gfiAkMjsKKyAgICB9CisgICAgfCAnLScgZXhwcmVzc2lvbiAl
cHJlYyBUT0tfVU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4
cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAg
ICB8ICcoJyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCisl
JQorCitpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAg
aW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOwor
ICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNP
TlNUX0lOVDoKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CisgICAgICAg
IGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1cs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB9CisgICAgICAgICpsdmFscCA9IHN0YXRpY19jYXN0
PFlZU1RZUEU+KHZhbCk7CisgICAgICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19P
UF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09Q
X0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1Bf
TkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VR
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hU
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xF
RlQ7IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2Fz
ZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJy
ZWFrOworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6
IHR5cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwor
ICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUg
PSAnJSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAg
Y2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7
IGJyZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAn
KCc6IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFr
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRo
ZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAh
PSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQor
Cit2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQorewor
ICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElE
X0VYUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50
b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24p
OworfQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFy
c2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVy
KGxleGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhw
cmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBD
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsK
KyAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsK
KyAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29u
dGV4dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2Fz
ZSAxOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAi
Iik7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFs
c2UpOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxf
RVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lu
cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg2OGMxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9JbnB1dC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJJbnB1dC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+
CisjaW5jbHVkZSA8Y3N0cmluZz4KKworbmFtZXNwYWNlIHBwCit7CisKK0lucHV0OjpJbnB1dCgp
IDogbUNvdW50KDApLCBtU3RyaW5nKDApCit7Cit9CisKK0lucHV0OjpJbnB1dChpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBt
Q291bnQoY291bnQpLAorICAgIG1TdHJpbmcoc3RyaW5nKQoreworICAgIGFzc2VydChtQ291bnQg
Pj0gMCk7CisgICAgbUxlbmd0aC5yZXNlcnZlKG1Db3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGludCBsZW4gPSBsZW5ndGggPyBsZW5n
dGhbaV0gOiAtMTsKKyAgICAgICAgbUxlbmd0aC5wdXNoX2JhY2sobGVuIDwgMCA/IHN0ZDo6c3Ry
bGVuKG1TdHJpbmdbaV0pIDogbGVuKTsKKyAgICB9Cit9CisKK2ludCBJbnB1dDo6cmVhZChjaGFy
KiBidWYsIGludCBtYXhTaXplKQoreworICAgIGludCBuUmVhZCA9IDA7CisgICAgd2hpbGUgKChu
UmVhZCA8IG1heFNpemUpICYmIChtUmVhZExvYy5zSW5kZXggPCBtQ291bnQpKQorICAgIHsKKyAg
ICAgICAgaW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5k
ZXg7CisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgc3Rk
OjptZW1jcHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9j
LmNJbmRleCwgc2l6ZSk7CisgICAgICAgIG5SZWFkICs9IHNpemU7CisgICAgICAgIG1SZWFkTG9j
LmNJbmRleCArPSBzaXplOworCisgICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNo
ZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0cmluZy4KKyAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRl
eCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCisgICAgICAgIHsKKyAgICAgICAgICAgICsr
bVJlYWRMb2Muc0luZGV4OworICAgICAgICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gblJlYWQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0lucHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFj
NzM0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuaApAQCAtMCwwICsxLDQ4IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KKyNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFj
ZSBwcAoreworCisvLyBIb2xkcyBhbmQgcmVhZHMgaW5wdXQgZm9yIExleGVyLgorY2xhc3MgSW5w
dXQKK3sKKyAgcHVibGljOgorICAgIElucHV0KCk7CisgICAgSW5wdXQoaW50IGNvdW50LCBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKworICAgIGludCBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0
aChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGhbaW5kZXhdOyB9CisKKyAgICBpbnQg
cmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKKworICAgIHN0cnVjdCBMb2NhdGlvbgorICAg
IHsKKyAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50IGNJ
bmRleDsgIC8vIENoYXIgaW5kZXguCisKKyAgICAgICAgTG9jYXRpb24oKSA6IHNJbmRleCgwKSwg
Y0luZGV4KDApIHsgfQorICAgIH07CisgICAgY29uc3QgTG9jYXRpb24mIHJlYWRMb2MoKSBjb25z
dCB7IHJldHVybiBtUmVhZExvYzsgfQorCisgIHByaXZhdGU6CisgICAgLy8gSW5wdXQuCisgICAg
aW50IG1Db3VudDsKKyAgICBjb25zdCBjaGFyKiBjb25zdCogbVN0cmluZzsKKyAgICBzdGQ6OnZl
Y3RvcjxpbnQ+IG1MZW5ndGg7CisKKyAgICBMb2NhdGlvbiBtUmVhZExvYzsKK307CisKK30gIC8v
IG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9MZXhlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43YzY2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6
On5MZXhlcigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xl
eGVyLmgKQEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhF
Ul9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhlcgor
eworICBwdWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBs
ZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlMzA4OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
TWFjcm8uY3BwCkBAIC0wLDAgKzEsMjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFj
cm8uaCIKKworI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSBwcAoreworCitib29sIE1h
Y3JvOjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAodHlw
ZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAmJgor
ICAgICAgICAgICAocGFyYW1ldGVycyA9PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAgICAg
ICAocmVwbGFjZW1lbnRzID09IG90aGVyLnJlcGxhY2VtZW50cyk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL01hY3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2VjMDE0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaApAQCAtMCwwICsxLDQ0IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KKyNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIHBwCit7CisKK3N0
cnVjdCBUb2tlbjsKKworc3RydWN0IE1hY3JvCit7CisgICAgZW51bSBUeXBlCisgICAgeworICAg
ICAgICBrVHlwZU9iaiwKKyAgICAgICAga1R5cGVGdW5jCisgICAgfTsKKyAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0
b3I8VG9rZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNl
KSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhj
b25zdCBNYWNybyYgb3RoZXIpIGNvbnN0OworCisgICAgYm9vbCBwcmVkZWZpbmVkOworICAgIG11
dGFibGUgYm9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBu
YW1lOworICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBSZXBsYWNlbWVudHMgcmVwbGFj
ZW1lbnRzOworfTsKKwordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3Jv
U2V0OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VT
U09SX01BQ1JPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE2YzUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4
cGFuZGVyLmNwcApAQCAtMCwwICsxLDM3MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJN
YWNyb0V4cGFuZGVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3N0cmVh
bT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisK
K25hbWVzcGFjZSBwcAoreworCitjbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExleGVyCit7Cisg
cHVibGljOgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9yOworCisg
ICAgVG9rZW5MZXhlcihUb2tlblZlY3RvciogdG9rZW5zKQorICAgIHsKKyAgICAgICAgdG9rZW5z
LT5zd2FwKG1Ub2tlbnMpOworICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIGlm
IChtSXRlciA9PSBtVG9rZW5zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+
cmVzZXQoKTsKKyAgICAgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqdG9rZW4gPSAqbUl0ZXIr
KzsKKyAgICAgICAgfQorICAgIH0KKworIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRva2VuTGV4ZXIpOworCisgICAgVG9rZW5WZWN0b3IgbVRva2VuczsKKyAgICBU
b2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4cGFuZGVyOjpN
YWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldCht
YWNyb1NldCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitNYWNyb0V4
cGFuZGVyOjp+TWFjcm9FeHBhbmRlcigpCit7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsg
aSA8IG1Db250ZXh0U3RhY2suc2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBkZWxldGUgbUNv
bnRleHRTdGFja1tpXTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2Vu
KiB0b2tlbikKK3sKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRva2VuKHRv
a2VuKTsKKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2FibGVk
KCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIGlmIChpdGVy
ID09IG1NYWNyb1NldC0+ZW5kKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25z
dCBNYWNybyYgbWFjcm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5v
dCBleHBhbmRlZCwgaXQgaXMgbmV2ZXIgZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0
RXhwYW5zaW9uRGlzYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoKG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRv
a2VuTGVmdFBhcmVuKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBp
bW1lZGlhdGVseSBhZnRlciB0aGUgbWFjcm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAg
ICAvLyB0aGlzIG1hY3JvIHNob3VsZCBub3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9
Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAg
IGlmIChtUmVzZXJ2ZVRva2VuLmdldCgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNl
cnZlVG9rZW47CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZpcnN0IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisg
ICAgd2hpbGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCkt
PmVtcHR5KCkpCisgICAgeworICAgICAgICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICgh
bUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRT
dGFjay5iYWNrKCktPmdldCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4
ZXItPmxleCh0b2tlbik7CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9r
ZW4oY29uc3QgVG9rZW4mIHRva2VuKQoreworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5i
YWNrKCk7CisgICAgICAgIGNvbnRleHQtPnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0
LT5yZXBsYWNlbWVudHNbY29udGV4dC0+aW5kZXhdID09IHRva2VuKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFtUmVzZXJ2ZVRva2VuLmdldCgpKTsKKyAgICAgICAg
bVJlc2VydmVUb2tlbi5yZXNldChuZXcgVG9rZW4odG9rZW4pKTsKKyAgICB9Cit9CisKK2Jvb2wg
TWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9rZW5MZWZ0UGFyZW4oKQoreworICAgIFRva2VuIHRva2Vu
OworICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICBib29sIGxwYXJlbiA9IHRva2VuLnR5cGUg
PT0gJygnOworICAgIHVuZ2V0VG9rZW4odG9rZW4pOworCisgICAgcmV0dXJuIGxwYXJlbjsKK30K
KworYm9vbCBNYWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25z
dCBUb2tlbiYgaWRlbnRpZmllcikKK3sKKyAgICBhc3NlcnQoIW1hY3JvLmRpc2FibGVkKTsKKyAg
ICBhc3NlcnQoIWlkZW50aWZpZXIuZXhwYW5zaW9uRGlzYWJsZWQoKSk7CisgICAgYXNzZXJ0KGlk
ZW50aWZpZXIudHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgYXNzZXJ0KGlkZW50aWZp
ZXIudGV4dCA9PSBtYWNyby5uYW1lKTsKKworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNl
bWVudHM7CisgICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2Vt
ZW50cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE1hY3JvIGlzIGRpc2FibGVk
IGZvciBleHBhbnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCisgICAgbWFj
cm8uZGlzYWJsZWQgPSB0cnVlOworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1h
Y3JvQ29udGV4dDsKKyAgICBjb250ZXh0LT5tYWNybyA9ICZtYWNybzsKKyAgICBjb250ZXh0LT5y
ZXBsYWNlbWVudHMuc3dhcChyZXBsYWNlbWVudHMpOworICAgIG1Db250ZXh0U3RhY2sucHVzaF9i
YWNrKGNvbnRleHQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6
OnBvcE1hY3JvKCkKK3sKKyAgICBhc3NlcnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7CisKKyAg
ICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKKyAgICBtQ29u
dGV4dFN0YWNrLnBvcF9iYWNrKCk7CisKKyAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7Cisg
ICAgYXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7CisgICAgY29udGV4dC0+bWFjcm8t
PmRpc2FibGVkID0gZmFsc2U7CisgICAgZGVsZXRlIGNvbnRleHQ7Cit9CisKK2Jvb2wgTWFjcm9F
eHBhbmRlcjo6ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7Cisg
ICAgcmVwbGFjZW1lbnRzLT5jbGVhcigpOworICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjpr
VHlwZU9iaikKKyAgICB7CisgICAgICAgIHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxh
Y2VtZW50cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBs
YWNlbWVudHMuZW5kKCkpOworCisgICAgICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5F
X18iOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklM
RV9fIjsKKworICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOwor
ICAgICAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmZyb250KCk7CisgICAgICAg
ICAgICBpZiAobWFjcm8ubmFtZSA9PSBrTGluZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8
PCBpZGVudGlmaWVyLmxvY2F0aW9uLmxpbmU7CisgICAgICAgICAgICAgICAgcmVwbC50ZXh0ID0g
c3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8u
bmFtZSA9PSBrRmlsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9zdHJp
bmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxv
Y2F0aW9uLmZpbGU7CisgICAgICAgICAgICAgICAgcmVwbC50ZXh0ID0gc3RyZWFtLnN0cigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGFzc2VydChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpOworICAgICAgICBzdGQ6OnZl
Y3RvcjxNYWNyb0FyZz4gYXJnczsKKyAgICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRl
cnMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlm
aWVyLCAmYXJncykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVwbGFj
ZU1hY3JvUGFyYW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVudHMpOworICAgIH0KKworICAgIGZv
ciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQorICAg
IHsKKyAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmF0KGkpOworICAgICAgICBp
ZiAoaSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaW4g
dGhlIHJlcGxhY2VtZW50IGxpc3QgaW5oZXJpdHMgdGhlIHBhZGRpbmcKKyAgICAgICAgICAgIC8v
IHByb3BlcnRpZXMgb2YgdGhlIGlkZW50aWZpZXIgdG9rZW4uCisgICAgICAgICAgICByZXBsLnNl
dEF0U3RhcnRPZkxpbmUoaWRlbnRpZmllci5hdFN0YXJ0T2ZMaW5lKCkpOworICAgICAgICAgICAg
cmVwbC5zZXRIYXNMZWFkaW5nU3BhY2UoaWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmVwbC5sb2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RN
YWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncykKK3sKKyAgICBUb2tl
biB0b2tlbjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworICAgIGFzc2VydCh0b2tlbi50eXBlID09
ICcoJyk7CisKKyAgICBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgZm9yIChpbnQg
b3BlblBhcmVucyA9IDE7IG9wZW5QYXJlbnMgIT0gMDsgKQorICAgIHsKKyAgICAgICAgZ2V0VG9r
ZW4oJnRva2VuKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci50ZXh0KTsKKyAgICAgICAgICAg
IC8vIERvIG5vdCBsb3NlIEVPRiB0b2tlbi4KKyAgICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4p
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBp
c0FyZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHRva2VuIGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYXJn
dW1lbnQuCisgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgJygnOgorICAgICAgICAgICAgKytvcGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcg
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAg
ICAgICAtLW9wZW5QYXJlbnM7CisgICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgLy8g
VGhlIGluZGl2aWR1YWwgYXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWEgdG9rZW5zLCBi
dXQKKyAgICAgICAgICAgIC8vIHRoZSBjb21tYSB0b2tlbnMgYmV0d2VlbiBtYXRjaGluZyBpbm5l
ciBwYXJlbnRoZXNlcyBkbyBub3QKKyAgICAgICAgICAgIC8vIHNlcGVyYXRlIGFyZ3VtZW50cy4K
KyAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zID09IDEpIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0Fy
ZygpKTsKKyAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpc0FyZykKKyAgICAgICAg
eworICAgICAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmJhY2soKTsKKyAgICAgICAgICAg
IC8vIEluaXRpYWwgd2hpdGVzcGFjZSBpcyBub3QgcGFydCBvZiB0aGUgYXJndW1lbnQuCisgICAg
ICAgICAgICBpZiAoYXJnLmVtcHR5KCkpIHRva2VuLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7
CisgICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNvbnN0IE1hY3JvOjpQYXJhbWV0ZXJzJiBwYXJhbXMgPSBtYWNyby5wYXJhbWV0ZXJzOwor
ICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGVtcHR5IGFyZ3VtZW50LCBpdCBpcyBlcXVpdmFs
ZW50IHRvIG5vIGFyZ3VtZW50LgorICAgIGlmIChwYXJhbXMuZW1wdHkoKSAmJiAoYXJncy0+c2l6
ZSgpID09IDEpICYmIGFyZ3MtPmZyb250KCkuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGFyZ3Mt
PmNsZWFyKCk7CisgICAgfQorICAgIC8vIFZhbGlkYXRlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRz
LgorICAgIGlmIChhcmdzLT5zaXplKCkgIT0gcGFyYW1zLnNpemUoKSkKKyAgICB7CisgICAgICAg
IERpYWdub3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNpemUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6
ZSgpID8KKyAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fRkVXX0FSR1MgOgorICAg
ICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19NQU5ZX0FSR1M7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KGlkLCBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnRleHQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUHJlLWV4cGFuZCBlYWNo
IGFyZ3VtZW50IGJlZm9yZSBzdWJzdGl0dXRpb24uCisgICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMg
ZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkgYXJlCisgICAgLy8gaW5zZXJ0
ZWQgaW50byB0aGUgbWFjcm8gYm9keS4KKyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwg
YXJncy0+c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+
YXQoaSk7CisgICAgICAgIFRva2VuTGV4ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAgIE1hY3JvRXhw
YW5kZXIgZXhwYW5kZXIoJmxleGVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisKKyAgICAg
ICAgYXJnLmNsZWFyKCk7CisgICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB3
aGlsZSAodG9rZW4udHlwZSAhPSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAg
YXJnLnB1c2hfYmFjayh0b2tlbik7CisgICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFu
ZGVyOjpyZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBh
cmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8
VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8
IG1hY3JvLnJlcGxhY2VtZW50cy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRv
a2VuJiByZXBsID0gbWFjcm8ucmVwbGFjZW1lbnRzW2ldOworICAgICAgICBpZiAocmVwbC50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVu
dHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVE9ETyhhbG9rcCk6IE9wdGltaXplIHRoaXMuCisgICAgICAgIC8vIFRoZXJl
IGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBtYWNybyBwYXJhbXMgZXZlcnkgdGltZS4KKyAgICAg
ICAgLy8gVGhlIHBhcmFtIGluZGV4IGNhbiBiZSBjYWNoZWQgd2l0aCB0aGUgcmVwbGFjZW1lbnQg
dG9rZW4uCisgICAgICAgIE1hY3JvOjpQYXJhbWV0ZXJzOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
c3RkOjpmaW5kKAorICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBtYWNyby5w
YXJhbWV0ZXJzLmVuZCgpLCByZXBsLnRleHQpOworICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5w
YXJhbWV0ZXJzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1
c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgc3RkOjpzaXplX3QgaUFyZyA9IHN0ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdp
bigpLCBpdGVyKTsKKyAgICAgICAgY29uc3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107Cisg
ICAgICAgIGlmIChhcmcuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpzaXplX3QgaVJlcGwgPSByZXBsYWNlbWVudHMtPnNp
emUoKTsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNlcnQocmVwbGFjZW1lbnRzLT5lbmQoKSwg
YXJnLmJlZ2luKCksIGFyZy5lbmQoKSk7CisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCB0b2tl
biBpbmhlcml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJvbQorICAgICAgICAvLyBtYWNybyByZXBs
YWNlbWVudCB0b2tlbi4KKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hdChpUmVwbCkuc2V0SGFzTGVh
ZGluZ1NwYWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgIH0KK30KKworfSAgLy8gbmFt
ZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiNjc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRl
ci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTUFDUk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8bWVt
b3J5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xh
c3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sK
KyAgcHVibGljOgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFj
cm9TZXQsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBh
bmRlcigpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZh
dGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisg
ICAgdm9pZCBnZXRUb2tlbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25z
dCBUb2tlbiYgdG9rZW4pOworICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAg
IGJvb2wgcHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIpOworICAgIHZvaWQgcG9wTWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3Qg
TWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50
cyk7CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29s
IGNvbGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1Bh
cmFtcyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNy
b0NvbnRleHQKKyAgICB7CisgICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc3Rk
OjpzaXplX3QgaW5kZXg7CisgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7
CisKKyAgICAgICAgTWFjcm9Db250ZXh0KCkgOiBtYWNybygwKSwgaW5kZXgoMCkgeyB9CisgICAg
ICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBpbmRleCA9PSByZXBsYWNlbWVudHMuc2l6
ZSgpOyB9CisgICAgICAgIGNvbnN0IFRva2VuJiBnZXQoKSB7IHJldHVybiByZXBsYWNlbWVudHNb
aW5kZXgrK107IH0KKyAgICAgICAgdm9pZCB1bmdldCgpIHsgYXNzZXJ0KGluZGV4ID4gMCk7IC0t
aW5kZXg7IH0KKyAgICB9OworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1h
Y3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7CisKKyAgICBzdGQ6OmF1dG9f
cHRyPFRva2VuPiBtUmVzZXJ2ZVRva2VuOworICAgIHN0ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+
IG1Db250ZXh0U3RhY2s7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29y
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
UHJlcHJvY2Vzc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTAy
NGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgIlByZXByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSA8Y2Fzc2Vy
dD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3NCYXNlLmgiCisj
aW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRl
ICJNYWNyb0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6
ZXIuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCit7Cisg
ICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAg
IFRva2VuaXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNl
cjsKKyAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJ
bXBsKERpYWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFu
ZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAg
ICAgICAgdG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXpl
ciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBh
bmRlcigmZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0KK307
CisKK1ByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhh
bmRsZXIpCit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywg
ZGlyZWN0aXZlSGFuZGxlcik7Cit9CisKK1ByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCit7
CisgICAgZGVsZXRlIG1JbXBsOworfQorCitib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBzdGF0
aWMgY29uc3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBw
cmUtZGVmaW5lZCBtYWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7Cisg
ICAgcHJlZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9f
VkVSU0lPTl9fIiwga0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAx
KTsKKworICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKTsKK30KKwordm9pZCBQcmVwcm9jZXNzb3I6OnByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIq
IG5hbWUsIGludCB2YWx1ZSkKK3sKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAg
IHN0cmVhbSA8PCB2YWx1ZTsKKworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUgPSBU
b2tlbjo6Q09OU1RfSU5UOworICAgIHRva2VuLnRleHQgPSBzdHJlYW0uc3RyKCk7CisKKyAgICBN
YWNybyBtYWNybzsKKyAgICBtYWNyby5wcmVkZWZpbmVkID0gdHJ1ZTsKKyAgICBtYWNyby50eXBl
ID0gTWFjcm86OmtUeXBlT2JqOworICAgIG1hY3JvLm5hbWUgPSBuYW1lOworICAgIG1hY3JvLnJl
cGxhY2VtZW50cy5wdXNoX2JhY2sodG9rZW4pOworCisgICAgbUltcGwtPm1hY3JvU2V0W25hbWVd
ID0gbWFjcm87Cit9CisKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQorewor
ICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAg
ICB7CisgICAgICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90
IGJlIHJldHVybmluZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAv
LyBDb252ZXJ0IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBv
cnQKKyAgICAgICAgICAvLyBkaWFnbm9zdGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9I
QVNIOgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgVG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBp
bnQgdmFsID0gMDsKKyAgICAgICAgICAgIGlmICghdG9rZW4tPmlWYWx1ZSgmdmFsKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBEbyBub3QgbWFyayB0aGUgdG9rZW4gYXMgaW52
YWxpZC4KKyAgICAgICAgICAgICAgICAvLyBKdXN0IGVtaXQgdGhlIGRpYWdub3N0aWMgYW5kIHJl
c2V0IHZhbHVlIHRvIDAuCisgICAgICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgICAgICAgICAgdG9rZW4tPnRleHQuYXNzaWduKCIwIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IH0KKyAgICAgICAgICBjYXNlIFRva2VuOjpDT05TVF9GTE9BVDoKKyAgICAgICAgICB7CisgICAg
ICAgICAgICBmbG9hdCB2YWwgPSAwOworICAgICAgICAgICAgaWYgKCF0b2tlbi0+ZlZhbHVlKCZ2
YWwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSB0
b2tlbiBhcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIC8vIEp1c3QgZW1pdCB0aGUgZGlhZ25v
c3RpYyBhbmQgcmVzZXQgdmFsdWUgdG8gMC4wLgorICAgICAgICAgICAgICAgIG1JbXBsLT5kaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpGTE9BVF9PVkVSRkxPVywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKKyAgICAgICAgICAgICAgICB0b2tlbi0+dGV4dC5hc3NpZ24oIjAuMCIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFsaWRUb2tlbiA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgorICAgICAg
ICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTlVN
QkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRv
a2VuOjpQUF9PVEhFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41ZmUzNWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaApA
QCAtMCwwICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfUFJFUFJPQ0VTU09SX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQ
Uk9DRVNTT1JfSF8KKworI2luY2x1ZGUgInBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAorewor
CitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitzdHJ1Y3QgUHJl
cHJvY2Vzc29ySW1wbDsKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgUHJlcHJvY2Vzc29yCit7Cisg
IHB1YmxpYzoKKyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJl
Y3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKKyAgICB+UHJlcHJvY2Vzc29yKCk7CisK
KyAgICAvLyBjb3VudDogc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0
cmluZyBhbmQgbGVuZ3RoIGFycmF5cy4KKyAgICAvLyBzdHJpbmc6IHNwZWNpZmllcyBhbiBhcnJh
eSBvZiBwb2ludGVycyB0byBzdHJpbmdzLgorICAgIC8vIGxlbmd0aDogc3BlY2lmaWVzIGFuIGFy
cmF5IG9mIHN0cmluZyBsZW5ndGhzLgorICAgIC8vIElmIGxlbmd0aCBpcyBOVUxMLCBlYWNoIHN0
cmluZyBpcyBhc3N1bWVkIHRvIGJlIG51bGwgdGVybWluYXRlZC4KKyAgICAvLyBJZiBsZW5ndGgg
aXMgYSB2YWx1ZSBvdGhlciB0aGFuIE5VTEwsIGl0IHBvaW50cyB0byBhbiBhcnJheSBjb250YWlu
aW5nCisgICAgLy8gYSBzdHJpbmcgbGVuZ3RoIGZvciBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5n
IGVsZW1lbnRzIG9mIHN0cmluZy4KKyAgICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGxlbmd0aCBh
cnJheSBtYXkgY29udGFpbiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcg
c3RyaW5nIG9yIGEgdmFsdWUgbGVzcyB0aGFuIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5n
CisgICAgLy8gaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworICAgIC8vIEFk
ZHMgYSBwcmUtZGVmaW5lZCBtYWNyby4KKyAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNo
YXIqIG5hbWUsIGludCB2YWx1ZSk7CisKKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisg
IHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7
CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKiBtSW1wbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBw
cAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42OTgyNjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oCkBAIC0wLDAg
KzEsMzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9T
T1VSQ0VfTE9DQVRJT05fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9M
T0NBVElPTl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7
CisgICAgU291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNl
TG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29s
IGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7Cisg
ICAgfQorCisgICAgaW50IGZpbGU7CisgICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlv
biYgcmhzKQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1l
c3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElP
Tl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42N2Y1MGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKQEAgLTAsMCArMSw4MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKwor
I2luY2x1ZGUgIm51bWVyaWNfbGV4LmgiCisKK25hbWVzcGFjZSBwcAoreworCit2b2lkIFRva2Vu
OjpyZXNldCgpCit7CisgICAgdHlwZSA9IDA7CisgICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9u
ID0gU291cmNlTG9jYXRpb24oKTsKKyAgICB0ZXh0LmNsZWFyKCk7Cit9CisKK2Jvb2wgVG9rZW46
OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICh0eXBlID09
IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKKyAg
ICAgICAgICAgKGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgorICAgICAgICAgICAodGV4
dCA9PSBvdGhlci50ZXh0KTsKK30KKwordm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29s
IHN0YXJ0KQoreworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0Zf
TElORTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOworfQor
Cit2b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAo
c3BhY2UpCisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAg
ICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRF
eHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAg
ICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdz
ICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7Cit9CisKK2Jvb2wgVG9rZW46OmlWYWx1ZShpbnQqIHZh
bHVlKSBjb25zdAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0lOVCk7CisgICAgcmV0dXJu
IG51bWVyaWNfbGV4X2ludCh0ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wgVG9rZW46OnVWYWx1ZSh1
bnNpZ25lZCBpbnQqIHZhbHVlKSBjb25zdAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0lO
VCk7CisgICAgcmV0dXJuIG51bWVyaWNfbGV4X2ludCh0ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wg
VG9rZW46OmZWYWx1ZShmbG9hdCogdmFsdWUpIGNvbnN0Cit7CisgICAgYXNzZXJ0KHR5cGUgPT0g
Q09OU1RfRkxPQVQpOworICAgIHJldHVybiBudW1lcmljX2xleF9mbG9hdCh0ZXh0LCB2YWx1ZSk7
Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3Qg
VG9rZW4mIHRva2VuKQoreworICAgIGlmICh0b2tlbi5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICAg
ICAgb3V0IDw8ICIgIjsKKworICAgIG91dCA8PCB0b2tlbi50ZXh0OworICAgIHJldHVybiBvdXQ7
Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTUzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgKQEAgLTAs
MCArMSwxMDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9UT0tFTl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KKworI2lu
Y2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiU291cmNlTG9j
YXRpb24uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBUb2tlbgoreworICAgIGVudW0g
VHlwZQorICAgIHsKKyAgICAgICAgTEFTVCA9IDAsICAvLyBFT0YuCisKKyAgICAgICAgSURFTlRJ
RklFUiA9IDI1OCwKKworICAgICAgICBDT05TVF9JTlQsCisgICAgICAgIENPTlNUX0ZMT0FULAor
CisgICAgICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAg
ICAgICBPUF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBP
UF9FUSwKKyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAor
ICAgICAgICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FT
U0lHTiwKKyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAg
ICAgICAgT1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9Q
X1JJR0hUX0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FT
U0lHTiwKKyAgICAgICAgT1BfT1JfQVNTSUdOLAorCisgICAgICAgIC8vIFByZXByb2Nlc3Npbmcg
dG9rZW4gdHlwZXMuCisgICAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSB1c2VkIGJ5IHRoZSBwcmVw
cm9jZXNzb3IgaW50ZXJuYWxseS4KKyAgICAgICAgLy8gUHJlcHJvY2Vzc29yIGNsaWVudHMgbXVz
dCBub3QgZGVwZW5kIG9yIGNoZWNrIGZvciB0aGVtLgorICAgICAgICBQUF9IQVNILAorICAgICAg
ICBQUF9OVU1CRVIsCisgICAgICAgIFBQX09USEVSCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisg
ICAgeworICAgICAgICBBVF9TVEFSVF9PRl9MSU5FICAgPSAxIDw8IDAsCisgICAgICAgIEhBU19M
RUFESU5HX1NQQUNFICA9IDEgPDwgMSwKKyAgICAgICAgRVhQQU5TSU9OX0RJU0FCTEVEID0gMSA8
PCAyCisgICAgfTsKKworICAgIFRva2VuKCkgOiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAg
IHZvaWQgcmVzZXQoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0
OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxp
bmUuCisgICAgLy8gSXQgZGlzcmVnYXJkcyBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJv
b2wgYXRTdGFydE9mTGluZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJ
TkUpICE9IDA7IH0KKyAgICB2b2lkIHNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAg
ICBib29sIGhhc0xlYWRpbmdTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFE
SU5HX1NQQUNFKSAhPSAwOyB9CisgICAgdm9pZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFj
ZSk7CisKKyAgICBib29sIGV4cGFuc2lvbkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gKGZsYWdz
ICYgRVhQQU5TSU9OX0RJU0FCTEVEKSAhPSAwOyB9CisgICAgdm9pZCBzZXRFeHBhbnNpb25EaXNh
YmxlZChib29sIGRpc2FibGUpOworCisgICAgLy8gQ29udmVydHMgdGV4dCBpbnRvIG51bWVyaWMg
dmFsdWUgZm9yIENPTlNUX0lOVCBhbmQgQ09OU1RfRkxPQVQgdG9rZW4uCisgICAgLy8gUmV0dXJu
cyBmYWxzZSBpZiB0aGUgcGFyc2VkIHZhbHVlIGNhbm5vdCBmaXQgaW50byBhbiBpbnQgb3IgZmxv
YXQuCisgICAgYm9vbCBpVmFsdWUoaW50KiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCB1VmFsdWUo
dW5zaWduZWQgaW50KiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCBmVmFsdWUoZmxvYXQqIHZhbHVl
KSBjb25zdDsKKworICAgIGludCB0eXBlOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBT
b3VyY2VMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICBzdGQ6OnN0cmluZyB0ZXh0OworfTsKKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQor
eworICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxo
cy5lcXVhbHMocmhzKTsKK30KKworZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6
Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKKworfSAgLy8gbmFtZXBzYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTc2
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzU2IEBACisjbGluZSAx
NiAiLi9Ub2tlbml6ZXIubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1n
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5l
IDEzICIuL1Rva2VuaXplci5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGlu
dAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5l
IEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZ
WV9GTEVYX01JTk9SX1ZFUlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04g
MzUKKyNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQor
I2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNv
bXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJz
LiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVy
cy4gKi8KKworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBG
TEVYSU5UX0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5
cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVk
IChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyog
Qzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBz
dGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBp
bnQgdHlwZXMuIAorICovCisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19T
VERDX0xJTUlUX01BQ1JPUyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBl
ZGVmIGludDhfdCBmbGV4X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0
eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQx
Nl90OwordHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxl
eF91aW50MzJfdDsKK3R5cGVkZWYgdWludDY0X3QgZmxleF91aW50NjRfdDsKKyNlbHNlCit0eXBl
ZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQx
Nl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZs
ZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90Owor
dHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5OSAqLwor
CisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVm
aW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZf
TUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisj
aWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4
MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAg
ICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZf
TUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVm
aW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYg
VUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYK
KyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUz
NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAg
ICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8K
KworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9k
aWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkvKiAhIF9f
Y3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFz
IDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisK
KyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVz
ICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAorI2Vsc2UK
KyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUu
ICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZl
LCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBmb3IgdXNl
IGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAorICog
d2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhl
bmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1
bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9pbnRlci4g
Ki8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9Z
WV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyogRm9yIGNv
bnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKKyAg
IGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5eWluIHl5
Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4dHJhIHl5
Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5lIHl5dGV4
dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9k
ZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkg
b3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGlu
ZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBv
ZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgorCisv
KiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2Fu
IGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRo
ZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZp
bmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZ
X1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQg
c3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIg
KyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3Np
bmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5
eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUg
b2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisjZGVmaW5l
IFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxh
cmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1
ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAy
KSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZF
Ul9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZ
WV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRl
ZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9T
Q0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFT
VF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCisgICAgCisvKiBSZXR1
cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBp
bnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyog
VW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxl
c3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNy
b19hcmcpO1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxl
c3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyog
c2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUg
dW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lm
bmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZG
RVJfU1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmls
ZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1
Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6
ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJ
ICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1i
ZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgor
CSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0
aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJ
ICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQg
dG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBX
aGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQK
KwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2Ug
Z2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRj
aGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50
ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJl
Z2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBv
biB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9i
b2w7CisKKyAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAg
IGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBX
aGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUK
KwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1
ZmZlcl9zdGF0dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZF
Ul9OT1JNQUwgMQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxs
IHNvbWUgdGV4dCB0byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlf
RU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRp
bmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBo
YXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBw
b3NzaWJsZSBiYWNraW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVP
Riwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHBwcmVzdGFydCgpKSwg
c28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50
aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VP
Rl9QRU5ESU5HIDIKKworCX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUg
Ki8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGlu
IGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMg
aW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVG
RkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8s
IGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAq
IE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5Lgor
ICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFj
a1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCisKK3ZvaWQgcHByZXN0YXJ0IChGSUxFICppbnB1
dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVG
RkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NU
QVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZ
WV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBw
cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBw
cF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBw
cF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9D
VVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZm
ZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlf
QlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBj
aGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAq
cHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnBwcmVhbGxv
YyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwZnJlZSAo
dm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBw
X2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3Rp
dmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICBwcGVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpF
ICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19p
bnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2wo
YXRfYm9sKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9h
dF9ib2wgPSBhdF9ib2w7IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNk
ZWZpbmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNp
Z25lZCBjaGFyIFlZX0NIQVI7CisKK3R5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZp
bmUgeXl0ZXh0X3B0ciB5eXRleHRfcgorCitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUg
eXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRl
cm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rp
b24gLSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwK
Kwl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9j
cCAtIHl5X2JwKTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0g
J1wwJzsgXAorCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxF
UyAzNworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4CisvKiBUaGlzIHN0cnVjdCBpcyBub3Qg
dXNlZCBpbiB0aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4g
Ki8KK3N0cnVjdCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJ
ZmxleF9pbnQzMl90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2FjY2VwdFs4NF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
IDM4LCAgIDM2LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAorICAgICAgICA3LCAgIDMzLCAgIDMz
LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAorICAgICAgICA5LCAg
IDMzLCAgIDMzLCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAorICAg
ICAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAg
IDIzLAorICAgICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5
LCAgIDExLCAgIDExLAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAg
IDE3LCAgIDE1LCAgICA4LCAgIDMxLAorICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1
LCAgICA2LCAgIDExLCAgIDEwLCAgIDExLCAgICAxLAorICAgICAgIDEwLCAgIDExLCAgICAwLCAg
IDEwLCAgICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgIDEw
LCAgICAwCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZd
ID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKKyAgICAg
ICAgOSwgICAxMCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAx
NiwKKyAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwg
ICAgOSwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAy
MSwgICAyMSwgICAyMiwgICAyMSwKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKKyAgICAgICAgOSwgICAgMSwg
ICAgOSwgICAyNSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAg
IDIyLCAgIDIxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDI0LAorICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9
IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KKyAgICB7ICAg
MCwKKyAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAg
NSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwg
ICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0g
PQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAg
MTUwLCAgMTU5LCAgMTQ1LCAgMTI4LAorICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTEx
LCAgIDIxLCAgIDI1LCAgIDMwLCAgIDI5LCAgIDM2LAorICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAg
IDQ1LCAgICAwLCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAorICAgICAgIDY1LCAgIDcz
LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAorICAgICAg
MTU5LCAgMTU5LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgz
LAorICAgICAgIDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAg
ICAwLCAgMTU5LAorICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4
LCAgICAwLCAgMTEwLCAgICAwLAorICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAg
MTU5LCAgMTU5LCAgMTAxLCAgIDk3LCAgMTEyLAorICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQw
LCAgIDI4LCAgMTQ1LCAgMTUwLCAgMTUyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9kZWZbODldID0KKyAgICB7ICAgMCwKKyAgICAgICA4MywgICAgMSwgICA4NCwg
ICA4NCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAg
ICAyMCwgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4
MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4
MywgICAyMCwgICAyMCwgICA0NywKKyAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4
NiwgICA4MywgICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKKyAgICAgICA0NywgICA1MCwg
ICA4MywgICA1MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKKyAgICAgICA4
MywgICA4MywgICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQorICAgIHsgICAwLAorICAg
ICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAg
IDE1LAorICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIy
LCAgIDIzLCAgIDI0LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAg
IDI5LCAgIDMwLCAgIDI5LCAgIDMwLAorICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYw
LCAgIDMxLCAgIDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAorICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAg
IDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAorICAgICAgIDQ4LCAgIDQ4
LCAgIDQ5LCAgIDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAorICAgICAg
IDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUw
LAorICAgICAgIDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAg
IDY2LCAgIDUwLAorICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1
LCAgIDcxLCAgIDcxLCAgIDcxLAorICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAg
IDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgODMsICAgODMsICAgNTAsICAg
NTAsICAgNTAsICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCisgICAgICAgNzQsICAgNzQs
ICAgNjcsICAgNjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCisgICAgICAg
NzgsICAgNzgsICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgs
CisgICAgICAgMzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAg
ODIsICAgODIsCisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQs
ICAgMzMsICAgNjQsICAgNjQsCisgICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAg
NzUsICAgNzUsICAgODMsICAgIDUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Noa1sxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAg
NCwKKyAgICAgICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwg
ICAxOSwgICAxNiwKKyAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAx
OCwgICAxOSwgICAyMCwgICA1NCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwg
ICA0OCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMSwgICAyMSwgICAyMSwgICAy
NCwgICAyNCwgICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKKyAgICAgICA0OSwgICA0OSwg
ICAyNywgICA0MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKKyAgICAgICA1
MiwgICA0MywgICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywK
KyAgICAgICA1MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1
MCwgICA1MCwKKworICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUx
LCAgIDc5LCAgIDc5LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAg
IDc4LCAgIDc4LCAgIDc4LCAgIDIzLCAgIDY3LAorICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgw
LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAorICAgICAgIDEyLCAgIDcyLCAg
IDcyLCAgIDcyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAor
ICAgICAgIDg3LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgz
LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzCisgICAgfSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0
aGF0IGl0J2xsIGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQu
CisgKi8KKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZp
bmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JF
X0FESiAwCisjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBH
TFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIw
MTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxT
TyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisjaW5jbHVkZSAiVG9rZW5p
emVyLmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJUb2tlbi5o
IgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5l
cmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5n
IFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2Ug
dGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJl
ci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAg
ICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxp
bmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3Bh
Y2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAor
ICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0g
Jnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+
c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkg
XAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxl
bmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5
bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0g
eXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgw
KTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3Vs
dCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFM
IDAKKyNkZWZpbmUgQ09NTUVOVCAxCisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5p
emVyOjpDb250ZXh0KgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJh
bnQgc2Nhbm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVm
aW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFf
cjsKKworICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJl
ZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5
b3V0X3I7CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9w
IG9mIHN0YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFj
aXR5IG9mIHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsg
LyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICB5
eV9zaXplX3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7CisgICAgY2hhciAq
eXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7CisgICAgaW50
IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRy
OworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNr
OworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAgY2hhciog
eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGludCB5eWxpbmVub19yOworICAgIGludCB5
eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlfbW9yZV9m
bGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKKwor
ICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsKKworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3Qg
Ki8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CisgICAgLyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFy
ZSBpbmNsdWRlZAorICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLworICAg
ICMgICAgZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCisgICAgCisgICAgIyAgICBkZWZpbmUg
eXlsbG9jIHl5Zy0+eXlsbG9jX3IKKyAgICAKK2ludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nh
bm5lcik7CisKK2ludCBwcGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5l
ZCx5eXNjYW5fdCogc2Nhbm5lcik7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4K
KyAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3Ig
Y29udmVuaWVuY2UuICovCisKK2ludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKworaW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNl
dF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWV9FWFRS
QV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9l
eHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CitGSUxFICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfaW4g
IChGSUxFICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfb3V0
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3l5X3NpemVfdCBwcGdldF9sZW5nICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworY2hhciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK2ludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0
X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQ
RSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2x2YWwg
KFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgICAg
WVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisgICAgICAg
IHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJy
aWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlvbiAxLgorICovCisKKyNpZm5k
ZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgcHB3
cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitleHRlcm4gaW50IHBwd3JhcCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIK
K3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAs
eXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0
YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5u
ZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVz
CitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRp
YyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisKKyNlbmRpZgorCisv
KiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVm
IFlZX1JFQURfQlVGX1NJWkUKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYK
KworLyogQ29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJk
IG91dHB1dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCks
IGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNl
IGZ3cml0ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwg
eXlvdXQgKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYi
LiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVk
IGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1
ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
aXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQl5eV9zaXplX3Qg
bjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRj
KCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFy
KSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAor
CQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1Io
ICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJ
fSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZy
ZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsg
XAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1Io
ICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9
IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKK1wK
KworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdl
IGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2FudCBhbiBleHRy
YSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgKiBzb21l
IGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgorICov
CisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05V
TEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRp
b24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUg
WVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFsIGVycm9y
LiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cp
IHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5kaWYKKworLyogZW5kIHRhYmxl
cyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVs
dCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2Vy
IGNhbgorICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNk
ZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCBwcGxleCBcCisgICAgICAgICAg
ICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNj
YW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwKKyAgICAgICAg
ICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwg
eXlzY2FuX3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisKKy8qIENvZGUgZXhl
Y3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXls
ZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VTRVJfQUNUSU9OCisj
ZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUg
ZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUgWVlfQlJFQUsg
YnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElP
TgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29y
ay4KKyAqLworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9h
Y3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisgICAgLyogTGluZSBjb21tZW50ICovCisKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFy
YW07CisKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CisKKwlpZiAoICF5eWctPnl5X2luaXQg
KQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlf
VVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55
eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQor
CQkJeXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsK
KworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQlwcGVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXBwX2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwkJfQorCisJCXBwX2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CisKKwl3aGlsZSAoIDEgKQkJLyogbG9v
cHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5
X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJ
eXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKK3l5
X21hdGNoOgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlf
U0NfVE9fVUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
CisJCQkJeworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0
YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJCX0KKwkJ
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQor
CQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9z
dGF0ZSAhPSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2Zp
bmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJ
WVlfRE9fQkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQg
b25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7
IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFj
ayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICov
CisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9SVUxF
X1NFVFVQCisKKwlZWV9CUkVBSworLyogQmxvY2sgY29tbWVudCAqLworLyogTGluZSBicmVha3Mg
YXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKy8qIFRoZSBjb21tZW50IGlzIHJl
cGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sg
QkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorCisJ
WVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDU6Cisv
KiBydWxlIDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyArK3l5bGluZW5vOyB9
CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWV4dHJhLT5sZWFk
aW5nU3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCVlZX0JSRUFLCitjYXNl
IDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9m
IGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEs
IHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6
UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwlZWV9CUkVBSworY2FzZSA5OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCVlZX0JSRUFLCisvKiBBbnl0aGluZyB0
aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAq
LworLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLwor
Y2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOworfQorCVlZX0JSRUFLCitj
YXNlIDEyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MTM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoK
K1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX05FOworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9B
TkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsK
K30KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJ
R047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9B
U1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01P
RF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0xFRlRfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAorewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9SSUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVy
biB5eXRleHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5
ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1
bGUgMzUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87
CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwg
eXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKwlZWV9CUkVB
SworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5U
KToKK3sKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcg
RU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAg
ICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9j
YXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0g
c3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4
ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUg
aWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUg
aW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0lu
ZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAg
ICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXls
aW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1F
TlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgp
OworfQorCVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVB
SworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1h
dGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJ
LyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZF
Ul9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBz
b3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0
aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxs
ZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICog
Y29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9i
YWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRo
aXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNr
LXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJ
CQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7
CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05P
Uk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9w
ICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZl
ciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVu
dGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0
cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29u
dHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAo
IHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJ
CXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9r
YXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlv
bi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFo
ZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0
byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9u
J3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAor
CQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUg
PSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJ
eXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0
X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0g
Kyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7
CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJ
CQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOworCisJCQkJaWYgKCBwcHdyYXAoeXlz
Y2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2Fy
ZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkg
KiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBp
ZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwor
CQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlf
TlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdl
dCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFS
VCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJ
CQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05F
V19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIg
KyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJ
CWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+
eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJ
CXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5k
X2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VS
Uk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZv
dW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nh
bm5pbmcgb25lIHRva2VuICovCit9IC8qIGVuZCBvZiBwcGxleCAqLworCisvKiB5eV9nZXRfbmV4
dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEg
Y29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAq
CUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBw
b3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRp
YyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lz
dGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwly
ZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51
bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3Ag
PiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsg
MV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBl
cnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwg
dGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9w
IC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBt
YXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMg
YXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwor
CQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRv
IHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9C
X0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEu
ICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwor
CW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0
cikgLSAxOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihk
ZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBk
byB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBq
dXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90
IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUg
LSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJ
CXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkv
KiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JV
RkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29m
ZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJ
CWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6
ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWIt
Pnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkv
KiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJlYWxsb2MoKHZv
aWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJ
fQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJ
CQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9G
QVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVy
ZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9w
X29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAo
IG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JF
QURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAo
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJ
CQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+
eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVf
QURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0
YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwg
PSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJ
ZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXpl
X3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBw
bHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9
IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAx
KTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJl
YWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3Np
emUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlf
Z2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90
b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
KworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0
ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7
IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9D
SEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJ
aWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICgg
eXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGlu
dCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlf
Y3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEg
dHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0
X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3Rh
dGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3Vy
cmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNf
amFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAq
LworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIg
WVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJ
CXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJ
CXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVso
dW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2ph
bSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDog
eXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3Bs
dXNwbHVzCisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxz
ZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKwor
eworCWludCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwor
CWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJ
CS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0
dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRo
ZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5k
IG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRo
aXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJ
CWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0g
eXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7
CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsK
KwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1
c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJ
CQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGlu
ZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCks
CisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNv
bnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9G
SUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQlw
cHJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJ
CWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHBwd3JhcCh5eXNj
YW5uZXIgKSApCisJCQkJCQlyZXR1cm4gMDsKKworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisjaWZkZWYgX19jcGx1c3Bs
dXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKKyNlbHNlCisJCQkJCXJldHVybiBp
bnB1dCh5eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKworCQkJCWNhc2UgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZz
ZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJYyA9ICoodW5zaWduZWQgY2hh
ciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLworCSp5eWct
Pnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5X2hvbGRf
Y2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKworCXJldHVybiBjOworfQorI2VuZGlmCS8qIGlm
bmRlZiBZWV9OT19JTlBVVCAqLworCisvKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVy
ZW50IGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFt
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAbm90ZSBUaGlz
IGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElB
TCAuCisgKi8KKyAgICB2b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAg
ICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9CisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7CisJfQorCisJcHBfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5w
dXRfZmlsZSAseXlzY2FubmVyKTsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
K30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0g
bmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlf
QlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCS8q
IFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24g
Ym9keQorCSAqIHdpdGgKKwkgKgkJcHBwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXBwcHVzaF9i
dWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisgICAgICovCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCisJ
CXJldHVybjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91
dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3Mg
PSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFy
cyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
bmV3X2J1ZmZlcjsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdl
IGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJ
ICogRU9GIChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFn
CisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBz
YWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9
IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsK
Kwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+
eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBp
bml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFi
bGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBi
eXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVy
IHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgIChGSUxF
ICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9T
VEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIg
KTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUg
MiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBu
ZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9j
aF9idWYgPSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZm
ZXIgPSAxOworCisJcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCisJcmV0dXJu
IGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBj
cmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBiICkKKwkJcmV0
dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ug
c2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVG
RkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJcHBmcmVlKCh2
b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisKKwlwcGZyZWUoKHZvaWQgKikgYiAs
eXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZm
ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ug
b24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBh
dCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9T
VEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vy
cm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisJcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7CisKKwliLT55
eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJ
ZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2Jh
Ymx5XworICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25l
eHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0
aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JV
RkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2Nv
bHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAg
ICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJh
Y3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBh
cmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJF
TlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
KyAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMg
PSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4g
IFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIg
c3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICov
CisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1
ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlf
Y2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXBwX2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogUHVzaGVzIHRoZSBuZXcgc3Rh
dGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcworICogIHRoZSBjdXJyZW50
IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCisgKiAgaWYgbmVj
ZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCisgKiAgQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwdXNoX2J1ZmZlcl9z
dGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCWlmIChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKworCXBwZW5zdXJlX2J1ZmZl
cl9zdGFjayh5eXNjYW5uZXIpOworCisJLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9z
d2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8q
IEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyogT25seSBwdXNoIGlmIHRv
cCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZl
ci4gKi8KKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eWctPnl5X2RpZF9i
dWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVj
b21lcyB0aGUgbmV3IHRvcC4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJcHBfZGVsZXRlX2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQlwcF9s
b2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOworCX0KK30KKworLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2Vz
IG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4K
KyAqLworc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoIXl5Zy0+eXlfYnVmZmVy
X3N0YWNrKSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRz
LCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVl
ZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRp
YXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51bV90b19hbGxv
YyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
KilwcGFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBw
ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXlnLT55eV9i
dWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAo
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0g
MSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxl
IHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87
CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXpl
OworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBy
ZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2Fs
bG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5l
cik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwor
CQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJf
c3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBu
dW1fdG9fYWxsb2M7CisJfQorfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0
byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgor
ICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBz
aXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAo
Y2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZ
WV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3Np
emUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBm
b3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBw
cGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlp
ZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBw
X3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAy
IiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVm
ID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0g
MDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3Rp
dmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWIt
Pnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJcHBfc3dpdGNoX3RvX2J1ZmZl
cihiICx5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0
IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkg
d2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIg
YSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkg
Y29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGlu
c3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCisJcmV0dXJuIHBwX3NjYW5f
Ynl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKK30KKworLyoqIFNldHVwIHRo
ZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNh
bGwgdG8gcHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgor
ICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gbGVuIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBu
ZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVSX1NUQVRF
IHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5
dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwlj
aGFyICpidWY7CisJeXlfc2l6ZV90IG4sIGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVs
bCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9IF95
eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgcHBhbGxvYyhuICx5eXNjYW5uZXIgKTsK
KwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47
ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1
ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0gcHBfc2Nh
bl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJP
UiggImJhZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRv
IGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkg
d2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0
dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJ
TFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hh
ciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3Rk
ZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBS
ZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3Vu
ZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8g
ZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21h
Y3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJn
KTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9j
X2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hh
ciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJ
eXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBB
Y2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAq
LworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUg
cHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWV4dHJh
OworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9saW5lbm8gICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWxpbmVubzsKK30KKwor
LyoqIEdldCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWNvbHVtbjsKK30KKworLyoqIEdl
dCB0aGUgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCisgKi8KK0ZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICBy
ZXR1cm4geXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9vdXQgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eW91dDsKK30KKworLyoqIEdldCB0aGUg
bGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK3l5X3NpemVfdCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRv
a2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKworY2hh
ciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5dGV4
dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZl
ciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0
YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZ
UEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlleHRyYSA9
IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisg
KiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCit2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4g
aW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIg
KQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBu
byBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5lX251bWJl
cjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGluZV9udW1i
ZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBw
c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisg
ICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMu
ICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0
YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5l
cik7IAorICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBp
bnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQg
YnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVy
CisgKi8KK3ZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCBwcHNldF9vdXQgKEZJTEUgKiAg
b3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3RyIDsK
K30KKworaW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1
cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQor
CisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNUWVBF
ICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bHZh
bDsKK30KKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZWUxU
WVBFICpwcGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXls
bG9jOworfQorICAgIAordm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworfQor
ICAgIAorLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiBwcGxleF9pbml0IGlzIHNwZWNpYWwg
YmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBP
TkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0
aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhl
IGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50IHBw
bGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95eV9n
bG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICgg
c2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlfZ2xv
YmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4g
eXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1z
ZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisgICAg
cmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiBwcGxl
eF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1
dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhl
IGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2ludGVy
KiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5k
CisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5k
bGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRo
ZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCisgKiB0aGUg
eXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBF
IHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2Rl
ZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwp
eworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCQor
ICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0
IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxz
ID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4K
KyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAg
IG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Cisg
ICAgCisgICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsK
KyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9
CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFu
dCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVz
dHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisgICAg
eXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hh
ciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7CisK
KyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFj
a19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBEZWZp
bmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47Cisg
ICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAgIHl5
b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6
IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHBwbGV4
X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiBwcGxleF9kZXN0cm95IGlz
IGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCBw
cGxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0aGUg
YnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9DVVJS
RU5UX0JVRkZFUil7CisJCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQlwcHBvcF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYu
ICovCisJcHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+eXlf
YnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlv
biBzdGFjay4gKi8KKyAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5l
ciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0
IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5l
ciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0
aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisg
ICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICBw
cGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOwor
ICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAq
LworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hh
ciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0g
czJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5
X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
CXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1
cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOworfQor
Cit2b2lkICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2lu
ZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBn
ZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBv
aW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kg
QyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVy
IHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBh
cyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVh
bGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgcHBmcmVlICh2b2lkICogcHRy
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUg
cHByZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19O
QU1FICJ5eXRhYmxlcyIKKworbmFtZXNwYWNlIHBwIHsKKworLy8gVE9ETyhhbG9rcCk6IE1heGlt
dW0gdG9rZW4gbGVuZ3RoIHNob3VsZCBpZGVhbGx5IGJlIHNwZWNpZmllZCBieQorLy8gdGhlIHBy
ZXByb2Nlc3NvciBjbGllbnQsIGkuZS4sIHRoZSBjb21waWxlci4KK2NvbnN0IHNpemVfdCBUb2tl
bml6ZXI6OmtNYXhUb2tlbkxlbmd0aCA9IDI1NjsKKworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFn
bm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQorewor
ICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3Vu
dCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAg
ICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDApICYmIChz
dHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQo
Y291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwor
dm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8gV2UgdXNl
IGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5v
LgorICAgIHBwc2V0X2NvbHVtbihmaWxlLG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6
c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICBwcHNldF9saW5lbm8obGluZSxtSGFuZGxl
KTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4t
PnR5cGUgPSBwcGxleCgmdG9rZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKKyAg
ICBpZiAodG9rZW4tPnRleHQuc2l6ZSgpID4ga01heFRva2VuTGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xP
TkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0
aCk7CisgICAgfQorCisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0
YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0g
dG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNv
bnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsK
K30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUg
PT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAo
bUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1I
YW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvVG9rZW5pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzYwMzEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1OCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwor
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJ
bnB1dC5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFt
ZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBw
dWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAg
ICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7Cisg
ICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2Nh
dGlvbiBzaG91bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0Ojpt
UmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0
ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAg
SW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7Cisg
ICAgICAgIGJvb2wgbGluZVN0YXJ0OworICAgIH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6
ZV90IGtNYXhUb2tlbkxlbmd0aDsKKworICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3MpOworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisgICAgdm9p
ZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxp
bmUpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6
CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7CisgICAgYm9vbCBp
bml0U2Nhbm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKworICAgIHZvaWQqIG1I
YW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8gU2Nh
bm5lciBleHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OWFlNjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5sCkBAIC0wLDAgKzEsMzQwIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhp
cyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9j
ZXNzb3IuCitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3Nv
ciBHcmFtbWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5
czg5LmFzcHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4g
Z2VuZXJhdGVfcGFyc2VyLnNoLgorKi8KKworJXRvcHsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlz
IGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJ
VCEKK30KKworJXsKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzQmFzZS5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQor
Ly8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlv
bi4KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgor
I2VuZGlmCisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJj
ZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxl
IHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVt
bgorCisjZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0
cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZ
WV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0
ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBw
OjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAg
IFwKKyAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1
dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAg
XAorICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlm
aWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxs
b2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1Ziwg
cmVzdWx0LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYs
IG1heFNpemUpOworCislfQorCislb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJh
Y3RpdmUKKyVvcHRpb24gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKKyVv
cHRpb24gcHJlZml4PSJwcCIKKyVvcHRpb24gZXh0cmEtdHlwZT0icHA6OlRva2VuaXplcjo6Q29u
dGV4dCoiCisleCBDT01NRU5UCisKK05FV0xJTkUgICAgIFxufFxyfFxyXG4KK0lERU5USUZJRVIg
IFtfYS16QS1aXVtfYS16QS1aMC05XSoKK1BVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49
ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTldKgorT0NUQUxfQ09OU1RB
TlQgICAgICAgIDBbMC03XSoKK0hFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZd
KworCitESUdJVCAgICAgICAgICAgICAgICBbMC05XQorRVhQT05FTlRfUEFSVCAgICAgICAgW2VF
XVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0r
KXwoe0RJR0lUfSsiLiIpCisKKyUlCisKKyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKyIvLyJbXlxy
XG5dKgorCisgICAgLyogQmxvY2sgY29tbWVudCAqLworICAgIC8qIExpbmUgYnJlYWtzIGFyZSBq
dXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisgICAgLyogVGhlIGNvbW1lbnQgaXMgcmVw
bGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorIi8qIiB7IEJFR0lOKENPTU1FTlQpOyB9Cis8
Q09NTUVOVD5bXipcclxuXSsKKzxDT01NRU5UPiIqIgorPENPTU1FTlQ+e05FV0xJTkV9IHsgKyt5
eWxpbmVubzsgfQorPENPTU1FTlQ+IiovIiB7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0g
dHJ1ZTsKKyAgICBCRUdJTihJTklUSUFMKTsKK30KKworIyB7CisgICAgLy8gIyBpcyBvbmx5IHZh
bGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5
bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFy
dCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKK3tJREVO
VElGSUVSfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46OklERU5USUZJRVI7Cit9CisKK3tERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxf
Q09OU1RBTlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0geworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisKKyh7
RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9Q
QVJUfT8pIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisKKyAgICAvKiBBbnl0aGluZyB0aGF0IHN0YXJ0
cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworICAgIC8q
IFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KKyh7RElH
SVR9K1tfYS16QS1aMC05Ll0qKXwoIi4ie0RJR0lUfStbX2EtekEtWjAtOS5dKikgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9O
VU1CRVI7Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQor
Ijw8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorIl5eIiB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsK
K30KKyJ8fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIv
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9Cisi
PDw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047
Cit9CisiJj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJePSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdO
OworfQorInw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5
eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisK
K1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJ
TkV9IHsKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAg
IHJldHVybiAnXG4nOworfQorCisuIHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOworfQorCis8Kj48PEVPRj4+IHsKKyAg
ICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAg
IC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5w
dXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNj
YW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgo
MCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRl
eE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUg
YXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisg
ICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsK
KyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAg
eXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87Cisg
ICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAg
eworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6
RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6
OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCisl
JQorCituYW1lc3BhY2UgcHAgeworCisvLyBUT0RPKGFsb2twKTogTWF4aW11bSB0b2tlbiBsZW5n
dGggc2hvdWxkIGlkZWFsbHkgYmUgc3BlY2lmaWVkIGJ5CisvLyB0aGUgcHJlcHJvY2Vzc29yIGNs
aWVudCwgaS5lLiwgdGhlIGNvbXBpbGVyLgorY29uc3Qgc2l6ZV90IFRva2VuaXplcjo6a01heFRv
a2VuTGVuZ3RoID0gMjU2OworCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlh
Z25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNj
YW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8
IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkg
cmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5n
LCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXpl
cjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJl
ciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCisgICAgeXlzZXRf
Y29sdW1uKGZpbGUsIG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJl
cihpbnQgbGluZSkKK3sKKyAgICB5eXNldF9saW5lbm8obGluZSwgbUhhbmRsZSk7Cit9CisKK3Zv
aWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXls
ZXgoJnRva2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKKyAgICBpZiAodG9r
ZW4tPnRleHQuc2l6ZSgpID4ga01heFRva2VuTGVuZ3RoKQorICAgIHsKKyAgICAgICAgbUNvbnRl
eHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0aCk7CisgICAg
fQorCisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5l
KG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5
cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVh
ZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9v
bCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkg
JiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZtSGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxl
ID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHl5bGV4X2Rlc3Ryb3kobUhhbmRsZSk7
CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
YXRvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTE1OGQyLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRv
bS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
XAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jw
b3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlv
dXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2Yg
dGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVy
bXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90
IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdh
cmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3Jh
bnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEn
cyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklE
SUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRl
IHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4g
c291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3Ry
aWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0
IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFu
ZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBT
b2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9y
IGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBh
cyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGlj
ZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwg
aW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkg
YmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3Mg
aW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFy
ZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBC
RUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNM
VURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElU
TEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBP
UiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hB
TEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRB
TCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQ
Uk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJ
QSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENP
TlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9S
IE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vCi0vLyBh
dG9tLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNs
dWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKLQotI3VuZGVmIG1hbGxvYwotI3VuZGVmIHJlYWxsb2MKLSN1bmRlZiBmcmVl
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0gICAgaW50IHZhbDsKLSAgICBjb25z
dCBjaGFyICpzdHI7Ci19IHRva2Vuc1tdID0gewotICAgIHsgQ1BQX0FORF9PUCwgICAgICAgICAi
JiYiIH0sCi0gICAgeyBDUFBfQU5EX0FTU0lHTiwgICAgICImPSIgfSwKLSAgICB7IENQUF9TVUJf
QVNTSUdOLCAgICAgIi09IiB9LAotICAgIHsgQ1BQX01PRF9BU1NJR04sICAgICAiJT0iIH0sCi0g
ICAgeyBDUFBfQUREX0FTU0lHTiwgICAgICIrPSIgfSwKLSAgICB7IENQUF9ESVZfQVNTSUdOLCAg
ICAgIi89IiB9LAotICAgIHsgQ1BQX01VTF9BU1NJR04sICAgICAiKj0iIH0sCi0gICAgeyBDUFBf
UklHSFRfQlJBQ0tFVCwgICI6PiIgfSwKLSAgICB7IENQUF9FUV9PUCwgICAgICAgICAgIj09IiB9
LAotICAgIHsgQ1BQX1hPUl9PUCwgICAgICAgICAiXl4iIH0sIAotICAgIHsgQ1BQX1hPUl9BU1NJ
R04sICAgICAiXj0iIH0sIAotICAgIHsgQ1BQX0ZMT0FUQ09OU1RBTlQsICAiPGZsb2F0LWNvbnN0
PiIgfSwKLSAgICB7IENQUF9HRV9PUCwgICAgICAgICAgIj49IiB9LAotICAgIHsgQ1BQX1JJR0hU
X09QLCAgICAgICAiPj4iIH0sCi0gICAgeyBDUFBfUklHSFRfQVNTSUdOLCAgICI+Pj0iIH0sIAot
ICAgIHsgQ1BQX0lERU5USUZJRVIsICAgICAiPGlkZW50PiIgfSwKLSAgICB7IENQUF9JTlRDT05T
VEFOVCwgICAgIjxpbnQtY29uc3Q+IiB9LAotICAgIHsgQ1BQX0xFX09QLCAgICAgICAgICAiPD0i
IH0sCi0gICAgeyBDUFBfTEVGVF9PUCwgICAgICAgICI8PCIgfSwKLSAgICB7IENQUF9MRUZUX0FT
U0lHTiwgICAgIjw8PSIgfSwKLSAgICB7IENQUF9MRUZUX0JSQUNLRVQsICAgIjw6IiB9LAotICAg
IHsgQ1BQX0xFRlRfQlJBQ0UsICAgICAiPCUiIH0sIAotICAgIHsgQ1BQX0RFQ19PUCwgICAgICAg
ICAiLS0iIH0sCi0gICAgeyBDUFBfUklHSFRfQlJBQ0UsICAgICIlPiIgfSwgCi0gICAgeyBDUFBf
TkVfT1AsICAgICAgICAgICIhPSIgfSwKLSAgICB7IENQUF9PUl9PUCwgICAgICAgICAgInx8IiB9
LAotICAgIHsgQ1BQX09SX0FTU0lHTiwgICAgICAifD0iIH0sIAotICAgIHsgQ1BQX0lOQ19PUCwg
ICAgICAgICAiKysiIH0sCi0gICAgeyBDUFBfU1RSQ09OU1RBTlQsICAgICI8c3RyaW5nLWNvbnN0
PiIgfSwKLSAgICB7IENQUF9UWVBFSURFTlRJRklFUiwgIjx0eXBlLWlkZW50PiIgfSwKLX07Ci0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotI2RlZmluZSBJTklUX1NUUklOR19UQUJMRV9TSVpFIDE2Mzg0Ci0KLXR5cGVkZWYg
c3RydWN0IFN0cmluZ1RhYmxlX1JlYyB7Ci0gICAgY2hhciAqc3RyaW5nczsKLSAgICBpbnQgbmV4
dEZyZWU7Ci0gICAgaW50IHNpemU7Ci19IFN0cmluZ1RhYmxlOwotCi0vKgotICogSW5pdFN0cmlu
Z1RhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBzdHJpbmcgdGFibGUuCi0gKgotICovCi0KLXN0YXRp
YyBpbnQgSW5pdFN0cmluZ1RhYmxlKFN0cmluZ1RhYmxlICpzdGFibGUpCi17Ci0gICAgc3RhYmxl
LT5zdHJpbmdzID0gKGNoYXIgKikgbWFsbG9jKElOSVRfU1RSSU5HX1RBQkxFX1NJWkUpOwotICAg
IGlmICghc3RhYmxlLT5zdHJpbmdzKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBaZXJvLXRo
IG9mZnNldCBtZWFucyAiZW1wdHkiIHNvIGRvbid0IHVzZSBpdC4KLSAgICBzdGFibGUtPm5leHRG
cmVlID0gMTsKLSAgICBzdGFibGUtPnNpemUgPSBJTklUX1NUUklOR19UQUJMRV9TSVpFOwotICAg
IHJldHVybiAxOwotfSAvLyBJbml0U3RyaW5nVGFibGUKLQotLyoKLSAqIEZyZWVTdHJpbmdUYWJs
ZSgpIC0gRnJlZSB0aGUgc3RyaW5nIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBGcmVl
U3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKLXsKLSAgICBpZiAoc3RhYmxlLT5zdHJp
bmdzKQotICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7Ci0gICAgc3RhYmxlLT5zdHJpbmdz
ID0gTlVMTDsKLSAgICBzdGFibGUtPm5leHRGcmVlID0gMDsKLSAgICBzdGFibGUtPnNpemUgPSAw
OwotfSAvLyBGcmVlU3RyaW5nVGFibGUKLQotLyoKLSAqIEhhc2hTdHJpbmcoKSAtIEhhc2ggYSBz
dHJpbmcgd2l0aCB0aGUgYmFzZSBoYXNoIGZ1bmN0aW9uLgotICoKLSAqLwotCi1zdGF0aWMgaW50
IEhhc2hTdHJpbmcoY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0KLSAgICB3
aGlsZSAoKnMpIHsKLSAgICAgICAgaHZhbCA9IChodmFsKjEzNTA3ICsgKnMqMTk3KSBeIChodmFs
ID4+IDIpOwotICAgICAgICBzKys7Ci0gICAgfQotICAgIHJldHVybiBodmFsICYgMHg3ZmZmZmZm
ZjsKLX0gLy8gSGFzaFN0cmluZwotCi0vKgotICogSGFzaFN0cmluZzIoKSAtIEhhc2ggYSBzdHJp
bmcgd2l0aCB0aGUgaW5jcmltZW50aW5nIGhhc2ggZnVuY3Rpb24uCi0gKgotICovCi0KLXN0YXRp
YyBpbnQgSGFzaFN0cmluZzIoY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0K
LSAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgaHZhbCA9IChodmFsKjcyOSArICpzKjM3KSBeICho
dmFsID4+IDEpOwotICAgICAgICBzKys7Ci0gICAgfQotICAgIHJldHVybiBodmFsOwotfSAvLyBI
YXNoU3RyaW5nMgotCi0vKgotICogQWRkU3RyaW5nKCkgLSBBZGQgYSBzdHJpbmcgdG8gYSBzdHJp
bmcgdGFibGUuICBSZXR1cm4gaXQncyBvZmZzZXQuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgQWRk
U3RyaW5nKFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGxl
biwgbG9jOwotICAgIGNoYXIgKnN0cjsKLQotICAgIGxlbiA9IChpbnQpIHN0cmxlbihzKTsKLSAg
ICB3aGlsZSAoc3RhYmxlLT5uZXh0RnJlZSArIGxlbiArIDEgPj0gc3RhYmxlLT5zaXplKSB7Ci0g
ICAgICAgIGFzc2VydChzdGFibGUtPnNpemUgPCAxMDAwMDAwKTsKLSAgICAgICAgc3RyID0gKGNo
YXIgKikgbWFsbG9jKHN0YWJsZS0+c2l6ZSoyKTsKLSAgICAgICAgbWVtY3B5KHN0ciwgc3RhYmxl
LT5zdHJpbmdzLCBzdGFibGUtPnNpemUpOwotICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7
Ci0gICAgICAgIHN0YWJsZS0+c3RyaW5ncyA9IHN0cjsKLSAgICAgICAgc3RhYmxlLT5zaXplID0g
c3RhYmxlLT5zaXplKjI7Ci0gICAgfQotICAgIGxvYyA9IHN0YWJsZS0+bmV4dEZyZWU7Ci0gICAg
c3RyY3B5KCZzdGFibGUtPnN0cmluZ3NbbG9jXSwgcyk7Ci0gICAgc3RhYmxlLT5uZXh0RnJlZSAr
PSBsZW4gKyAxOwotICAgIHJldHVybiBsb2M7Ci19IC8vIEFkZFN0cmluZwotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLyBIYXNoIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNk
ZWZpbmUgSU5JVF9IQVNIX1RBQkxFX1NJWkUgMjA0NwotI2RlZmluZSBIQVNIX1RBQkxFX01BWF9D
T0xMSVNJT05TIDMKLQotdHlwZWRlZiBzdHJ1Y3QgSGFzaEVudHJ5X1JlYyB7Ci0gICAgaW50IGlu
ZGV4OyAgICAgIC8vIFN0cmluZyB0YWJsZSBvZmZzZXQgb2Ygc3RyaW5nIHJlcHJlc2VudGF0aW9u
Ci0gICAgaW50IHZhbHVlOyAgICAgIC8vIEF0b20gKHN5bWJvbCkgdmFsdWUKLX0gSGFzaEVudHJ5
OwotCi10eXBlZGVmIHN0cnVjdCBIYXNoVGFibGVfUmVjIHsKLSAgICBIYXNoRW50cnkgKmVudHJ5
OwotICAgIGludCBzaXplOwotICAgIGludCBlbnRyaWVzOwotICAgIGludCBjb3VudHNbSEFTSF9U
QUJMRV9NQVhfQ09MTElTSU9OUyArIDFdOwotfSBIYXNoVGFibGU7Ci0KLS8qCi0gKiBJbml0SGFz
aFRhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMg
aW50IEluaXRIYXNoVGFibGUoSGFzaFRhYmxlICpodGFibGUsIGludCBmc2l6ZSkKLXsKLSAgICBp
bnQgaWk7Ci0KLSAgICBodGFibGUtPmVudHJ5ID0gKEhhc2hFbnRyeSAqKSBtYWxsb2Moc2l6ZW9m
KEhhc2hFbnRyeSkqZnNpemUpOwotICAgIGlmICghaHRhYmxlLT5lbnRyeSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaHRhYmxlLT5zaXplID0gZnNpemU7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDwg
ZnNpemU7IGlpKyspIHsKLSAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0uaW5kZXggPSAwOwotICAg
ICAgICBodGFibGUtPmVudHJ5W2lpXS52YWx1ZSA9IDA7Ci0gICAgfQotICAgIGh0YWJsZS0+ZW50
cmllcyA9IDA7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lP
TlM7IGlpKyspCi0gICAgICAgIGh0YWJsZS0+Y291bnRzW2lpXSA9IDA7Ci0gICAgcmV0dXJuIDE7
Ci19IC8vIEluaXRIYXNoVGFibGUKLQotLyoKLSAqIEZyZWVIYXNoVGFibGUoKSAtIEZyZWUgdGhl
IGhhc2ggdGFibGUuCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIEZyZWVIYXNoVGFibGUoSGFzaFRh
YmxlICpodGFibGUpCi17Ci0gICAgaWYgKGh0YWJsZS0+ZW50cnkpCi0gICAgICAgIGZyZWUoaHRh
YmxlLT5lbnRyeSk7Ci0gICAgaHRhYmxlLT5lbnRyeSA9IE5VTEw7Ci0gICAgaHRhYmxlLT5zaXpl
ID0gMDsKLSAgICBodGFibGUtPmVudHJpZXMgPSAwOwotfSAvLyBGcmVlSGFzaFRhYmxlCi0KLS8q
Ci0gKiBFbXB0eSgpIC0gU2VlIGlmIGEgaGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4KLSAqCi0g
Ki8KLQotc3RhdGljIGludCBFbXB0eShIYXNoVGFibGUgKmh0YWJsZSwgaW50IGhhc2hsb2MpCi17
Ci0gICAgYXNzZXJ0KGhhc2hsb2MgPj0gMCAmJiBoYXNobG9jIDwgaHRhYmxlLT5zaXplKTsKLSAg
ICBpZiAoaHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleCA9PSAwKSB7Ci0gICAgICAgIHJldHVy
biAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0gLy8gRW1wdHkK
LQotLyoKLSAqIE1hdGNoKCkgLSBTZWUgaWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlzIG1hdGNoZXMg
YSBzdHJpbmcuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgTWF0Y2goSGFzaFRhYmxlICpodGFibGUs
IFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBoYXNobG9jKQotewotICAg
IGludCBzdHJsb2M7Ci0KLSAgICBzdHJsb2MgPSBodGFibGUtPmVudHJ5W2hhc2hsb2NdLmluZGV4
OwotICAgIGlmICghc3RyY21wKHMsICZzdGFibGUtPnN0cmluZ3Nbc3RybG9jXSkpIHsKLSAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfSAv
LyBNYXRjaAotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBBdG9tIHRhYmxlOiAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLSNkZWZpbmUgSU5JVF9BVE9NX1RBQkxFX1NJWkUgMTAyNAotCi0K
LXN0cnVjdCBBdG9tVGFibGVfUmVjIHsKLSAgICBTdHJpbmdUYWJsZSBzdGFibGU7IC8vIFN0cmlu
ZyB0YWJsZS4KLSAgICBIYXNoVGFibGUgaHRhYmxlOyAgIC8vIEhhc2hlcyBzdHJpbmcgdG8gYXRv
bSBudW1iZXIgYW5kIHRva2VuIHZhbHVlLiAgTXVsdGlwbGUgc3RyaW5ncyBjYW4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhdmUgdGhlIHNhbWUgdG9rZW4gdmFsdWUgYnV0IGVhY2ggdW5p
cXVlIHN0cmluZyBpcyBhIHVuaXF1ZSBhdG9tLgotICAgIGludCAqYW1hcDsgICAgICAgICAgLy8g
TWFwcyBhdG9tIHZhbHVlIHRvIG9mZnNldCBpbiBzdHJpbmcgdGFibGUuICBBdG9tcyBhbGwgbWFw
IHRvIHVuaXF1ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5ncyBleGNlcHQgZm9y
IHNvbWUgdW5kZWZpbmVkIHZhbHVlcyBpbiB0aGUgbG93ZXIsIGZpeGVkIHBhcnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBhdG9tIHRhYmxlIHRoYXQgbWFwIHRvICI8dW5kZWZp
bmVkPiIuICBUaGUgbG93ZXN0IDI1NiBhdG9tcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y29ycmVzcG9uZCB0byBzaW5nbGUgY2hhcmFjdGVyIEFTQ0lJIHZhbHVlcyBleGNlcHQgZm9yIGFs
cGhhbnVtZXJpYwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBhbmQgJ18n
LCB3aGljaCBjYW4gYmUgb3RoZXIgdG9rZW5zLiAgTmV4dCBjb21lIHRoZQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbGFuZ3VhZ2UgdG9rZW5zIHdpdGggdGhlaXIgYXRvbSB2YWx1ZXMgZXF1
YWwgdG8gdGhlIHRva2VuIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBj
b21lIHByZWRlZmluZWQgYXRvbXMsIGZvbGxvd2VkIGJ5IHVzZXIgc3BlY2lmaWVkIGlkZW50aWZp
ZXJzLgotICAgIGludCAqYXJldjsgICAgICAgICAgLy8gUmV2ZXJzZWQgYXRvbSBmb3Igc3ltYm9s
IHRhYmxlIHVzZS4KLSAgICBpbnQgbmV4dEZyZWU7Ci0gICAgaW50IHNpemU7Ci19OwotCi1zdGF0
aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHsw
fSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07Ci1BdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwot
Ci1zdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAq
cywgaW50IGF0b20pOwotCi0vKgotICogR3Jvd0F0b21UYWJsZSgpIC0gR3JvdyB0aGUgYXRvbSB0
YWJsZSB0byBhdCBsZWFzdCAic2l6ZSIgaWYgaXQncyBzbWFsbGVyLgotICoKLSAqLwotCi1zdGF0
aWMgaW50IEdyb3dBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBzaXplKQotewotICAg
IGludCAqbmV3bWFwLCAqbmV3cmV2OwotCi0gICAgaWYgKGF0YWJsZS0+c2l6ZSA8IHNpemUpIHsK
LSAgICAgICAgaWYgKGF0YWJsZS0+YW1hcCkgewotICAgICAgICAgICAgbmV3bWFwID0gcmVhbGxv
YyhhdGFibGUtPmFtYXAsIHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgbmV3cmV2ID0g
cmVhbGxvYyhhdGFibGUtPmFyZXYsIHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbmV3bWFwID0gbWFsbG9jKHNpemVvZihpbnQpKnNpemUpOwotICAgICAg
ICAgICAgbmV3cmV2ID0gbWFsbG9jKHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgYXRh
YmxlLT5zaXplID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW5ld21hcCB8fCAhbmV3cmV2
KSB7Ci0gICAgICAgICAgICAvKiBmYWlsZWQgdG8gZ3JvdyAtLSBlcnJvciAqLwotICAgICAgICAg
ICAgaWYgKG5ld21hcCkKLSAgICAgICAgICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdtYXA7Ci0g
ICAgICAgICAgICBpZiAobmV3cmV2KQotICAgICAgICAgICAgICAgIGF0YWJsZS0+YXJldiA9IG5l
d3JldjsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQo
Jm5ld21hcFthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2Yo
aW50KSk7Ci0gICAgICAgIG1lbXNldCgmbmV3cmV2W2F0YWJsZS0+c2l6ZV0sIDAsIChzaXplIC0g
YXRhYmxlLT5zaXplKSAqIHNpemVvZihpbnQpKTsKLSAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3
bWFwOwotICAgICAgICBhdGFibGUtPmFyZXYgPSBuZXdyZXY7Ci0gICAgICAgIGF0YWJsZS0+c2l6
ZSA9IHNpemU7Ci0gICAgfQotICAgIHJldHVybiAwOwotfSAvLyBHcm93QXRvbVRhYmxlCi0KLS8q
Ci0gKiBsUmV2ZXJzZSgpIC0gUmV2ZXJzZSB0aGUgYm90dG9tIDIwIGJpdHMgb2YgYSAzMiBiaXQg
aW50LgotICoKLSAqLwotCi1zdGF0aWMgaW50IGxSZXZlcnNlKGludCBmdmFsKQotewotICAgIHVu
c2lnbmVkIGludCBpbiA9IGZ2YWw7Ci0gICAgaW50IHJlc3VsdCA9IDAsIGNudCA9IDA7Ci0KLSAg
ICB3aGlsZShpbikgewotICAgICAgICByZXN1bHQgPDw9IDE7Ci0gICAgICAgIHJlc3VsdCB8PSBp
biYxOwotICAgICAgICBpbiA+Pj0gMTsKLSAgICAgICAgY250Kys7Ci0gICAgfQotCi0gICAgLy8g
RG9uJ3QgdXNlIGFsbCAzMSBiaXRzLiAgT25lIG1pbGxpb24gYXRvbXMgaXMgcGxlbnR5IGFuZCBz
b21ldGltZXMgdGhlCi0gICAgLy8gdXBwZXIgYml0cyBhcmUgdXNlZCBmb3Igb3RoZXIgdGhpbmdz
LgotCi0gICAgaWYgKGNudCA8IDIwKQotICAgICAgICByZXN1bHQgPDw9IDIwIC0gY250OwotICAg
IHJldHVybiByZXN1bHQ7Ci19IC8vIGxSZXZlcnNlCi0KLS8qCi0gKiBBbGxvY2F0ZUF0b20oKSAt
IEFsbG9jYXRlIGEgbmV3IGF0b20uICBBc3NvY2lhdGVkIHdpdGggdGhlICJ1bmRlZmluZWQiIHZh
bHVlIG9mIC0xLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEFsbG9jYXRlQXRvbShBdG9tVGFibGUg
KmF0YWJsZSkKLXsKLSAgICBpZiAoYXRhYmxlLT5uZXh0RnJlZSA+PSBhdGFibGUtPnNpemUpCi0g
ICAgICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBhdGFibGUtPm5leHRGcmVlKjIpOwotICAgIGF0
YWJsZS0+YW1hcFthdGFibGUtPm5leHRGcmVlXSA9IC0xOwotICAgIGF0YWJsZS0+YXJldlthdGFi
bGUtPm5leHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOwotICAgIGF0YWJsZS0+
bmV4dEZyZWUrKzsKLSAgICByZXR1cm4gYXRhYmxlLT5uZXh0RnJlZSAtIDE7Ci19IC8vIEFsbG9j
YXRlQXRvbQotCi0vKgotICogU2V0QXRvbVZhbHVlKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tIGFz
c29jaWF0ZWQgd2l0aCAiaGFzaGluZGV4Ii4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgU2V0QXRv
bVZhbHVlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbW51bWJlciwgaW50IGhhc2hpbmRleCkK
LXsKLSAgICBhdGFibGUtPmFtYXBbYXRvbW51bWJlcl0gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVto
YXNoaW5kZXhdLmluZGV4OwotICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFs
dWUgPSBhdG9tbnVtYmVyOwotfSAvLyBTZXRBdG9tVmFsdWUKLQotLyoKLSAqIEZpbmRIYXNoTG9j
KCkgLSBGaW5kIHRoZSBoYXNoIGxvY2F0aW9uIGZvciB0aGlzIHN0cmluZy4gIFJldHVybiAtMSBp
dCBoYXNoIHRhYmxlIGlzIGZ1bGwuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgRmluZEhhc2hMb2Mo
QXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGhhc2hsb2MsIGhh
c2hkZWx0YSwgY291bnQ7Ci0gICAgaW50IEZvdW5kRW1wdHlTbG90ID0gMDsKLSAgICBpbnQgY29s
bGlzaW9uW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsKLQotICAgIGhhc2hsb2MgPSBI
YXNoU3RyaW5nKHMpICUgYXRhYmxlLT5odGFibGUuc2l6ZTsKLSAgICBpZiAoIUVtcHR5KCZhdGFi
bGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKLSAgICAgICAgaWYgKE1hdGNoKCZhdGFibGUtPmh0YWJs
ZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBoYXNobG9jKSkKLSAgICAgICAgICAgIHJldHVybiBoYXNo
bG9jOwotICAgICAgICBjb2xsaXNpb25bMF0gPSBoYXNobG9jOwotICAgICAgICBoYXNoZGVsdGEg
PSBIYXNoU3RyaW5nMihzKTsKLSAgICAgICAgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAoY291
bnQgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKSB7Ci0gICAgICAgICAgICBoYXNobG9jID0g
KChoYXNobG9jICsgaGFzaGRlbHRhKSAmIDB4N2ZmZmZmZmYpICUgYXRhYmxlLT5odGFibGUuc2l6
ZTsKLSAgICAgICAgICAgIGlmICghRW1wdHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkgewot
ICAgICAgICAgICAgICAgIGlmIChNYXRjaCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJs
ZSwgcywgaGFzaGxvYykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hsb2M7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBG
b3VuZEVtcHR5U2xvdCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgY29sbGlzaW9uW2NvdW50XSA9IGhh
c2hsb2M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIUZvdW5kRW1wdHlTbG90KSB7Ci0gICAg
ICAgICAgICBpZiAoY3BwLT5vcHRpb25zLkR1bXBBdG9tVGFibGUpIHsKLSAgICAgICAgICAgICAg
ICBpbnQgaWk7Ci0gICAgICAgICAgICAgICAgY2hhciBzdHJbMjAwXTsKLSAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0
aGFuICVkIGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAot
ICAgICAgICAgICAgICAgICAgICAgICBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKTsKLSAgICAg
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKLQotICAgICAgICAgICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwg
ZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKLSAgICAgICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKLSAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkg
PD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgewotICAgICAgICAgICAgICAgICAg
ICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIENvbGxpZGVzIG9uIHRyeSAlZCBhdCBo
YXNoIGVudHJ5ICUwNHggd2l0aCBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWkgKyAxLCBjb2xsaXNpb25baWldLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRhYmxlLT5odGFi
bGUuZW50cnlbY29sbGlzaW9uW2lpXV0udmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKHN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXRhYmxl
LT5odGFibGUuY291bnRzW2NvdW50XSsrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBo
YXNobG9jOwotfSAvLyBGaW5kSGFzaExvYwotCi0vKgotICogSW5jcmVhc2VIYXNoVGFibGVTaXpl
KCkKLSAqCi0gKi8KLQotc3RhdGljIGludCBJbmNyZWFzZUhhc2hUYWJsZVNpemUoQXRvbVRhYmxl
ICphdGFibGUpCi17Ci0gICAgaW50IGlpLCBzdHJsb2MsIG9sZGhhc2hsb2MsIHZhbHVlLCBzaXpl
OwotICAgIEF0b21UYWJsZSBvbGR0YWJsZTsKLSAgICBjaGFyICpzOwotCi0gICAgLy8gU2F2ZSB0
aGUgb2xkIGF0b20gdGFibGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmU6Ci0KLSAgICBvbGR0YWJsZSA9
ICphdGFibGU7Ci0gICAgc2l6ZSA9IG9sZHRhYmxlLmh0YWJsZS5zaXplKjIgKyAxOwotICAgIGlm
ICghSW5pdEF0b21UYWJsZShhdGFibGUsIHNpemUpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IC8vIEFkZCBhbGwgdGhlIGV4aXN0aW5nIHZhbHVlcyB0byB0aGUgbmV3IGF0b20gdGFibGUgcHJl
c2VydmluZyB0aGVpciBhdG9tIHZhbHVlczoKLQotICAgIGZvciAoaWkgPSBhdGFibGUtPm5leHRG
cmVlOyBpaSA8IG9sZHRhYmxlLm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHN0cmxvYyA9IG9s
ZHRhYmxlLmFtYXBbaWldOwotICAgICAgICBzID0gJm9sZHRhYmxlLnN0YWJsZS5zdHJpbmdzW3N0
cmxvY107Ci0gICAgICAgIG9sZGhhc2hsb2MgPSBGaW5kSGFzaExvYygmb2xkdGFibGUsIHMpOwot
ICAgICAgICBhc3NlcnQob2xkaGFzaGxvYyA+PSAwKTsKLSAgICAgICAgdmFsdWUgPSBvbGR0YWJs
ZS5odGFibGUuZW50cnlbb2xkaGFzaGxvY10udmFsdWU7Ci0gICAgICAgIEFkZEF0b21GaXhlZChh
dGFibGUsIHMsIHZhbHVlKTsKLSAgICB9Ci0gICAgRnJlZUF0b21UYWJsZSgmb2xkdGFibGUpOwot
ICAgIHJldHVybiAxOwotfSAvLyBJbmNyZWFzZUhhc2hUYWJsZVNpemUKLQotLyoKLSAqIExvb2tV
cEFkZFN0cmluZ0hhc2goKSAtIExvb2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElm
IGl0J3Mgbm90IHRoZXJlLCBhZGQgaXQgYW5kCi0gKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRv
bSB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZSB0byAwLiAgUmV0dXJuIHRoZSBoYXNoIHRhYmxlIGlu
ZGV4LgotICovCi0KLXN0YXRpYyBpbnQgTG9va1VwQWRkU3RyaW5nSGFzaChBdG9tVGFibGUgKmF0
YWJsZSwgY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaGFzaGxvYywgc3RybG9jOwotCi0gICAg
d2hpbGUoMSkgewotICAgICAgICBoYXNobG9jID0gRmluZEhhc2hMb2MoYXRhYmxlLCBzKTsKLSAg
ICAgICAgaWYgKGhhc2hsb2MgPj0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBJbmNy
ZWFzZUhhc2hUYWJsZVNpemUoYXRhYmxlKTsKLSAgICB9Ci0KLSAgICBpZiAoRW1wdHkoJmF0YWJs
ZS0+aHRhYmxlLCBoYXNobG9jKSkgewotICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKys7
Ci0gICAgICAgIHN0cmxvYyA9IEFkZFN0cmluZygmYXRhYmxlLT5zdGFibGUsIHMpOwotICAgICAg
ICBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNobG9jXS5pbmRleCA9IHN0cmxvYzsKLSAgICAgICAg
YXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGxvY10udmFsdWUgPSAwOwotICAgIH0KLSAgICByZXR1
cm4gaGFzaGxvYzsKLX0gLy8gTG9va1VwQWRkU3RyaW5nSGFzaAotCi0vKgotICogTG9va1VwQWRk
U3RyaW5nKCkgLSBMb29rdXAgYSBzdHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5v
dCB0aGVyZSwgYWRkIGl0IGFuZAotICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUg
aW4gdGhlIGhhc2ggdGFibGUgdG8gdGhlIG5leHQgYXRvbSBudW1iZXIuCi0gKiAgICAgICAgUmV0
dXJuIHRoZSBhdG9tIHZhbHVlIG9mIHN0cmluZy4KLSAqLwotCi1pbnQgTG9va1VwQWRkU3RyaW5n
KEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQotewotICAgIGludCBoYXNoaW5kZXgs
IGF0b207Ci0KLSAgICBoYXNoaW5kZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7
Ci0gICAgYXRvbSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWU7Ci0gICAg
aWYgKGF0b20gPT0gMCkgewotICAgICAgICBhdG9tID0gQWxsb2NhdGVBdG9tKGF0YWJsZSk7Ci0g
ICAgICAgIFNldEF0b21WYWx1ZShhdGFibGUsIGF0b20sIGhhc2hpbmRleCk7Ci0gICAgfQotICAg
IHJldHVybiBhdG9tOwotfSAvLyBMb29rVXBBZGRTdHJpbmcKLQotLyoKLSAqIEdldEF0b21TdHJp
bmcoKQotICoKLSAqLwotCi1jb25zdCAgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUgKmF0
YWJsZSwgaW50IGF0b20pCi17Ci0gICAgaW50IHNvZmZzZXQ7Ci0KLSAgICBpZiAoYXRvbSA+IDAg
JiYgYXRvbSA8IGF0YWJsZS0+bmV4dEZyZWUpIHsKLSAgICAgICAgc29mZnNldCA9IGF0YWJsZS0+
YW1hcFthdG9tXTsKLSAgICAgICAgaWYgKHNvZmZzZXQgPiAwICYmIHNvZmZzZXQgPCBhdGFibGUt
PnN0YWJsZS5uZXh0RnJlZSkgewotICAgICAgICAgICAgcmV0dXJuICZhdGFibGUtPnN0YWJsZS5z
dHJpbmdzW3NvZmZzZXRdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICI8
aW50ZXJuYWwgZXJyb3I6IGJhZCBzb2Zmc2V0PiI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoYXRvbSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gIjxudWxsIGF0b20+
IjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdG9tID09IEVPRikgewotICAg
ICAgICAgICAgICAgIHJldHVybiAiPEVPRj4iOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIjxpbnZhbGlkIGF0b20+IjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0gLy8gR2V0QXRvbVN0cmluZwotCi0vKgotICogR2V0UmV2ZXJzZWRBdG9t
KCkKLSAqCi0gKi8KLQotaW50IEdldFJldmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50
IGF0b20pCi17Ci0gICAgaWYgKGF0b20gPiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7
Ci0gICAgICAgIHJldHVybiBhdGFibGUtPmFyZXZbYXRvbV07Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfSAvLyBHZXRSZXZlcnNlZEF0b20KLQotLyoKLSAqIEFkZEF0
b20oKSAtIEFkZCBhIHN0cmluZyB0byB0aGUgYXRvbSwgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBp
ZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlLgotICogICAgICAgICBSZXR1cm4gaXQncyBhdG9tIGlu
ZGV4LgotICovCi0KLWludCBBZGRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpz
KQotewotICAgIGludCBhdG9tOwotCi0gICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHMpOwotICAgIHJldHVybiBhdG9tOwotfSAvLyBBZGRBdG9tCi0KLS8qCi0gKiBBZGRBdG9tRml4
ZWQoKSAtIEFkZCBhbiBhdG9tIHRvIHRoZSBoYXNoIGFuZCBzdHJpbmcgdGFibGVzIGlmIGl0IGlz
bid0IGFscmVhZHkgdGhlcmUuCi0gKiAgICAgICAgIEFzc2lnbiBpdCB0aGUgYXRvbSB2YWx1ZSBv
ZiAiYXRvbSIuCi0gKi8KLQotc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFi
bGUsIGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKQotewotICAgIGludCBoYXNoaW5kZXgsIGxzaXpl
OwotCi0gICAgaGFzaGluZGV4ID0gTG9va1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOwotICAg
IGlmIChhdGFibGUtPm5leHRGcmVlID49IGF0YWJsZS0+c2l6ZSB8fCBhdG9tID49IGF0YWJsZS0+
c2l6ZSkgewotICAgICAgICBsc2l6ZSA9IGF0YWJsZS0+c2l6ZSoyOwotICAgICAgICBpZiAobHNp
emUgPD0gYXRvbSkKLSAgICAgICAgICAgIGxzaXplID0gYXRvbSArIDE7Ci0gICAgICAgIEdyb3dB
dG9tVGFibGUoYXRhYmxlLCBsc2l6ZSk7Ci0gICAgfQotICAgIGF0YWJsZS0+YW1hcFthdG9tXSA9
IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0uaW5kZXg7Ci0gICAgYXRhYmxlLT5odGFi
bGUuZW50cnlbaGFzaGluZGV4XS52YWx1ZSA9IGF0b207Ci0gICAgLy9pZiAoYXRvbSA+PSBhdGFi
bGUtPm5leHRGcmVlKQotICAgIC8vICAgIGF0YWJsZS0+bmV4dEZyZWUgPSBhdG9tICsgMTsKLSAg
ICB3aGlsZSAoYXRvbSA+PSBhdGFibGUtPm5leHRGcmVlKSB7Ci0gICAgICAgIGF0YWJsZS0+YXJl
dlthdGFibGUtPm5leHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOwotICAgICAg
ICBhdGFibGUtPm5leHRGcmVlKys7Ci0gICAgfQotICAgIHJldHVybiBhdG9tOwotfSAvLyBBZGRB
dG9tRml4ZWQKLQotLyoKLSAqIEluaXRBdG9tVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGF0b20g
dGFibGUuCi0gKgotICovCi0KLWludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBp
bnQgaHRzaXplKQotewotICAgIHVuc2lnbmVkIGludCBpaTsKLQotICAgIGh0c2l6ZSA9IGh0c2l6
ZSA8PSAwID8gSU5JVF9IQVNIX1RBQkxFX1NJWkUgOiBodHNpemU7Ci0gICAgaWYgKCFJbml0U3Ry
aW5nVGFibGUoJmF0YWJsZS0+c3RhYmxlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFJ
bml0SGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSwgaHRzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBhdGFibGUtPm5leHRGcmVlID0gMDsKLSAgICBhdGFibGUtPmFtYXAgPSBOVUxMOwot
ICAgIGF0YWJsZS0+c2l6ZSA9IDA7Ci0gICAgR3Jvd0F0b21UYWJsZShhdGFibGUsIElOSVRfQVRP
TV9UQUJMRV9TSVpFKTsKLSAgICBpZiAoIWF0YWJsZS0+YW1hcCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLyBJbml0aWFsaXplIGxvd2VyIHBhcnQgb2YgYXRvbSB0YWJsZSB0byAiPHVuZGVm
aW5lZD4iIGF0b206Ci0KLSAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCAiPHVuZGVmaW5lZD4iLCAw
KTsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBGSVJTVF9VU0VSX1RPS0VOX1NZOyBpaSsrKQotICAg
ICAgICBhdGFibGUtPmFtYXBbaWldID0gYXRhYmxlLT5hbWFwWzBdOwotCi0gICAgLy8gQWRkIHNp
bmdsZSBjaGFyYWN0ZXIgdG9rZW5zIHRvIHRoZSBhdG9tIHRhYmxlOgotCi0gICAgewotCQljb25z
dCBjaGFyICpzID0gIn4hJV4mKigpLSs9fCwuPD4vPzs6W117fSMiOwotICAgICAgICBjaGFyIHRb
Ml07Ci0KLSAgICAgICAgdFsxXSA9ICdcMCc7Ci0gICAgICAgIHdoaWxlICgqcykgewotICAgICAg
ICAgICAgdFswXSA9ICpzOwotICAgICAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdCwgc1sw
XSk7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBZGQgbXVs
dGlwbGUgY2hhcmFjdGVyIHNjYW5uZXIgdG9rZW5zIDoKLQotICAgIGZvciAoaWkgPSAwOyBpaSA8
IHNpemVvZih0b2tlbnMpL3NpemVvZih0b2tlbnNbMF0pOyBpaSsrKQotICAgICAgICBBZGRBdG9t
Rml4ZWQoYXRhYmxlLCB0b2tlbnNbaWldLnN0ciwgdG9rZW5zW2lpXS52YWwpOwotCi0gICAgLy8g
QWRkIGVycm9yIHN5bWJvbCBpZiBydW5uaW5nIGluIGVycm9yIG1vZGU6Ci0KLSAgICBpZiAoY3Bw
LT5vcHRpb25zLkVycm9yTW9kZSkKLSAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgImVycm9y
IiwgRVJST1JfU1kpOwotCi0gICAgQWRkQXRvbShhdGFibGUsICI8KioqIGVuZCBmaXhlZCBhdG9t
cyAqKio+Iik7Ci0KLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdEF0b21UYWJsZQotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLyBEZWJ1ZyBQcmludGluZyBGdW5jdGlvbnM6IC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0K
LS8qCi0gKiBQcmludEF0b21UYWJsZSgpCi0gKgotICovCi0KLXZvaWQgUHJpbnRBdG9tVGFibGUo
QXRvbVRhYmxlICphdGFibGUpCi17Ci0gICAgaW50IGlpOwotICAgIGNoYXIgc3RyWzIwMF07Ci0K
LSAgICBmb3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAg
IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0
YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKLSAgICAgICAgQ1BQRGVidWdMb2dNc2co
c3RyKTsKLSAgICB9Ci0gICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6
IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKLSAgICAgICAgICAgYXRhYmxlLT5o
dGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7Ci0gICAgQ1BQRGVidWdMb2dNc2co
c3RyKTsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBp
aSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUt
Pmh0YWJsZS5jb3VudHNbaWldKTsKLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9
Ci0KLX0gLy8gUHJpbnRBdG9tVGFibGUKLQotCi0vKgotICogR2V0U3RyaW5nT2ZBdG9tKCkKLSAq
Ci0gKi8KLQotY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRv
bSkKLXsKLQkgY2hhciogY2hyX3N0cjsKLQkgY2hyX3N0cj0mYXRhYmxlLT5zdGFibGUuc3RyaW5n
c1thdGFibGUtPmFtYXBbYXRvbV1dOwotCSByZXR1cm4gY2hyX3N0cjsKLX0gLy8gR2V0U3RyaW5n
T2ZBdG9tCi0KLS8qCi0gKiBGcmVlQXRvbVRhYmxlKCkgLSBGcmVlIHRoZSBhdG9tIHRhYmxlIGFu
ZCBhc3NvY2lhdGVkIG1lbW9yeQotICoKLSAqLwotCi12b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRh
YmxlICphdGFibGUpCi17Ci0gICAgRnJlZVN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSk7Ci0g
ICAgRnJlZUhhc2hUYWJsZSgmYXRhYmxlLT5odGFibGUpOwotICAgIGlmIChhdGFibGUtPmFtYXAp
Ci0gICAgICAgIGZyZWUoYXRhYmxlLT5hbWFwKTsKLSAgICBpZiAoYXRhYmxlLT5hcmV2KQotICAg
ICAgICBmcmVlKGF0YWJsZS0+YXJldik7Ci0gICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKLSAgICBh
dGFibGUtPmFyZXYgPSBOVUxMOwotICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOwotICAgIGF0YWJs
ZS0+c2l6ZSA9IDA7Ci19IC8vIEZyZWVBdG9tVGFibGUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIEVuZCBvZiBhdG9tLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDg0YzMyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
Ci1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQot
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1O
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwot
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
LVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
Ci1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBhdG9tLmgKLS8v
Ci0KLSNpZiAhZGVmaW5lZChfX0FUT01fSCkKLSNkZWZpbmUgX19BVE9NX0ggMQotCi10eXBlZGVm
IHN0cnVjdCBBdG9tVGFibGVfUmVjIEF0b21UYWJsZTsKLQotZXh0ZXJuIEF0b21UYWJsZSAqYXRh
YmxlOwotCi1pbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7
Ci12b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOwotaW50IEFkZEF0b20oQXRv
bVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpOwotdm9pZCBQcmludEF0b21UYWJsZShBdG9t
VGFibGUgKmF0YWJsZSk7Ci1pbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBj
b25zdCBjaGFyICpzKTsKLWNvbnN0IGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFi
bGUsIGludCBhdG9tKTsKLWludCBHZXRSZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGlu
dCBhdG9tKTsKLWNoYXIqIEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0
b20pOwotI2VuZGlmIC8vICFkZWZpbmVkKF9fQVRPTV9IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4MDg1My4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNv
cHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRp
b24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVz
ZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMg
TlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAg
SWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2Us
IGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgot
Ci1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5
b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29w
eXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNv
ZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUK
LU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJj
ZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRl
IHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3Rp
Y2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlz
Y2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdh
cmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dv
cyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhw
cmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2Vz
Ci1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1
ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGlu
ZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdo
aWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJl
IGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcg
UFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5H
IFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAot
Tk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4g
Q09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5W
SURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVY
RU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVD
VElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09G
VFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFD
VCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhF
UldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGNvbXBpbGUu
aAotLy8KLQotI2lmICFkZWZpbmVkKF9fQ09NUElMRV9IKQotI2RlZmluZSBfX0NPTVBJTEVfSCAx
Ci0KLWludCBJbml0Q1BQU3RydWN0KHZvaWQpOwotCi10eXBlZGVmIHN0cnVjdCBPcHRpb25zX1Jl
Y3sKLSAgICBjb25zdCBjaGFyICpwcm9maWxlU3RyaW5nOwotICAgIGludCBFcnJvck1vZGU7Ci0g
ICAgaW50IFF1aWV0OwotCQotICAgIC8vIERlYnVnIFRoZSBDb21waWxlciBvcHRpb25zOgotICAg
IGludCBEdW1wQXRvbVRhYmxlOwotfSBPcHRpb25zOwotCi0jZGVmaW5lIE1BWF9JRl9ORVNUSU5H
ICA2NAotc3RydWN0IENQUFN0cnVjdF9SZWMgewotICAgIC8vIFB1YmxpYyBtZW1iZXJzCi0gICAg
U291cmNlTG9jICpwTGFzdFNvdXJjZUxvYzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBz
dGF0ZW1lbnQgYnkgdGhlIHRyZWUgd2Fsa2VycwotICAgIE9wdGlvbnMgb3B0aW9uczsgICAgICAg
ICAgICAvLyBDb21waWxlIG9wdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQotICAgIC8vIFByaXZhdGUg
bWVtYmVycwotICAgIFNvdXJjZUxvYyBsYXN0U291cmNlTG9jOwotCi0gICAgLy8gU2Nhbm5lciBk
YXRhOgotCi0gICAgU291cmNlTG9jICp0b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2NhdGlv
biBvZiBtb3N0IHJlY2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCi0gICAgaW50IG1vc3RS
ZWNlbnRUb2tlbjsgICAgICAgIC8vIE1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5u
ZXIKLSAgICBJbnB1dFNyYyAqY3VycmVudElucHV0OwotICAgIGludCBwcmV2aW91c190b2tlbjsK
LSAgICBpbnQgcGFzdEZpcnN0U3RhdGVtZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUgdGhh
dCAjdmVyc2lvbiBpcyB0aGUgZmlyc3Qgc3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlmIHBy
ZXNlbnQKLSAgICAKLQl2b2lkICpwQzsgICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0aGUg
cGFyc2VDb250ZXh0IG9mIHRoZSBjb21waWxlIG9iamVjdCBpbiBjcHAuICAKLSAgICAgCi0gICAg
Ly8gUHJpdmF0ZSBtZW1iZXJzOgotICAgIFNvdXJjZUxvYyBsdG9rZW5Mb2M7Ci0JaW50IGlmZGVw
dGg7ICAgICAgICAgICAgICAgIC8vY3VycmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3RpbmcgaW4g
dGhlIGNwcC5jIGZpbGUgKHByZS1wcm9jZXNzb3IpICAgIAotICAgIGludCBlbHNlZGVwdGhbTUFY
X0lGX05FU1RJTkddOy8vS2VlcCBhIHRyYWNrIG9mICNpZiBkZXB0aC4uTWF4IGFsbG93ZWQgaXMg
NjQuCi0gICAgaW50IGVsc2V0cmFja2VyOyAgICAgICAgICAgIC8vI2lmLSNlbHNlIGFuZCAjZW5k
aWYgY29uc3RydWN0cy4uLkNvdW50ZXIuCi0gICAgY29uc3QgY2hhciAqRXJyTXNnOwotICAgIGlu
dCBDb21waWxlRXJyb3I7ICAgICAgICAgICAvL0luZGljYXRlIGNvbXBpbGUgZXJyb3Igd2hlbiAj
ZXJyb3IsICNlbHNlLCNlbGlmIG1pc21hdGNoLgotCi0gICAgLy8KLSAgICAvLyBHbG9iYWxzIHVz
ZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiBQYVBhcnNlU3RyaW5ncygpIGFuZCB5eV9pbnB1dCgp
YW5kIAotICAgIC8vIGFsc28gYWNyb3NzIHRoZSBmaWxlcy4oZ2VuX2dsc2xhbmcuY3BwIGFuZCBz
Y2FubmVyLmMpCi0gICAgLy8KLSAgICBpbnQgUGFXaGljaFN0cjsgICAgICAgICAgICAgLy8gd2hp
Y2ggc3RyaW5nIHdlJ3JlIHBhcnNpbmcKLSAgICBjb25zdCBpbnQqIFBhU3RyTGVuOyAgICAgICAg
Ly8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0aGUgUGFBcmd2IHN0cmluZ3MKLSAgICBpbnQgUGFBcmdj
OyAgICAgICAgICAgICAgICAgLy8gY291bnQgb2Ygc3RyaW5ncyBpbiB0aGUgYXJyYXkKLSAgICBj
b25zdCBjaGFyKiBjb25zdCogUGFBcmd2OyAgLy8gb3VyIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFy
c2UgICAgCi0gICAgdW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVPRiA6IDE7Ci19OwotCi0jZW5k
aWYgLy8gIWRlZmluZWQoX19DT01QSUxFX0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOGExMDc2Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCisrKyAvZGV2L251bGwKQEAgLTEs
MTExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBs
aWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwg
bW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1j
b25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3Jl
ZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBv
ciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAot
c3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9u
LWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9y
aWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwg
cmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwg
d2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1m
b3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdh
cmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlz
IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1
Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBu
YW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBv
cmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0
aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxp
ZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1p
dGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRl
cml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29m
dHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1
bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFT
IElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElP
TiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwg
TUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlU
UyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBP
VEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9S
IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklU
UzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgot
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9O
IEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FV
U0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5W
SURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGNwcC5jCi0vLwotCi0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0K
LSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNTQpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE1MikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NzA2KQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApOwot
Ci0vKiBEb24ndCB1c2UgbWVtb3J5LmMncyByZXBsYWNlbWVudHMsIGFzIHdlIGNsZWFuIHVwIHBy
b3Blcmx5IGhlcmUgKi8KLSN1bmRlZiBtYWxsb2MKLSN1bmRlZiBmcmVlCi0KLXN0YXRpYyBpbnQg
YmluZEF0b20gPSAwOwotc3RhdGljIGludCBjb25zdEF0b20gPSAwOwotc3RhdGljIGludCBkZWZh
dWx0QXRvbSA9IDA7Ci1zdGF0aWMgaW50IGRlZmluZUF0b20gPSAwOwotc3RhdGljIGludCBkZWZp
bmVkQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVsc2VBdG9tID0gMDsKLXN0YXRpYyBpbnQgZWxpZkF0
b20gPSAwOwotc3RhdGljIGludCBlbmRpZkF0b20gPSAwOwotc3RhdGljIGludCBpZkF0b20gPSAw
Owotc3RhdGljIGludCBpZmRlZkF0b20gPSAwOwotc3RhdGljIGludCBpZm5kZWZBdG9tID0gMDsK
LXN0YXRpYyBpbnQgaW5jbHVkZUF0b20gPSAwOwotc3RhdGljIGludCBsaW5lQXRvbSA9IDA7Ci1z
dGF0aWMgaW50IHByYWdtYUF0b20gPSAwOwotc3RhdGljIGludCB0ZXh1bml0QXRvbSA9IDA7Ci1z
dGF0aWMgaW50IHVuZGVmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVycm9yQXRvbSA9IDA7Ci1zdGF0
aWMgaW50IF9fTElORV9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IF9fRklMRV9fQXRvbSA9IDA7Ci1z
dGF0aWMgaW50IF9fVkVSU0lPTl9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IHZlcnNpb25BdG9tID0g
MDsKLXN0YXRpYyBpbnQgZXh0ZW5zaW9uQXRvbSA9IDA7Ci0KLXN0YXRpYyBTY29wZSAqbWFjcm9z
ID0gMDsKLSNkZWZpbmUgTUFYX01BQ1JPX0FSR1MgIDY0Ci0KLXN0YXRpYyBTb3VyY2VMb2MgaWZs
b2M7IC8qIG91dGVybW9zdCAjaWYgKi8KLQotaW50IEluaXRDUFAodm9pZCkKLXsKLSAgICBjaGFy
ICAgICAgICBidWZmZXJbNjRdLCAqdDsKLSAgICBjb25zdCBjaGFyICAqZjsKLQotICAgIC8vIEFk
ZCB2YXJpb3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKLSAgICBiaW5k
QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJiaW5kIik7Ci0gICAgY29uc3RBdG9tID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImNvbnN0Iik7Ci0gICAgZGVmYXVsdEF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmYXVsdCIpOwotICAgIGRlZmluZUF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5lIik7Ci0gICAgZGVmaW5lZEF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiZGVmaW5lZCIpOwotICAgIGVsaWZBdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgImVsaWYiKTsKLSAgICBlbHNlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJlbHNlIik7Ci0gICAgZW5kaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVuZGlm
Iik7Ci0gICAgaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmIik7Ci0gICAgaWZk
ZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmZGVmIik7Ci0gICAgaWZuZGVmQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZm5kZWYiKTsKLSAgICBpbmNsdWRlQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpbmNsdWRlIik7Ci0gICAgbGluZUF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAibGluZSIpOwotICAgIHByYWdtYUF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAicHJhZ21hIik7Ci0gICAgdGV4dW5pdEF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCAidGV4dW5pdCIpOwotICAgIHVuZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhh
dGFibGUsICJ1bmRlZiIpOwotCWVycm9yQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJl
cnJvciIpOwotICAgIF9fTElORV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0xJ
TkVfXyIpOwotICAgIF9fRklMRV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0ZJ
TEVfXyIpOwotCV9fVkVSU0lPTl9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX1ZF
UlNJT05fXyIpOwotICAgIHZlcnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInZl
cnNpb24iKTsKLSAgICBleHRlbnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImV4
dGVuc2lvbiIpOwotICAgIG1hY3JvcyA9IE5ld1Njb3BlSW5Qb29sKG1lbV9DcmVhdGVQb29sKDAs
IDApKTsKLSAgICBzdHJjcHkoYnVmZmVyLCAiUFJPRklMRV8iKTsKLSAgICB0ID0gYnVmZmVyICsg
c3RybGVuKGJ1ZmZlcik7Ci0gICAgZiA9IGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nOwotICAg
IHdoaWxlICgoaXNhbG51bSgqZikgfHwgKmYgPT0gJ18nKSAmJiB0IDwgYnVmZmVyICsgc2l6ZW9m
KGJ1ZmZlcikgLSAxKQotICAgICAgICAqdCsrID0gdG91cHBlcigqZisrKTsKLSAgICAqdCA9IDA7
Ci0KLSAgICBQcmVkZWZpbmVJbnRNYWNybygiR0xfRVMiLCAxKTsKLSAgICBQcmVkZWZpbmVJbnRN
YWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKLQotCXJldHVybiAxOwotfSAv
LyBJbml0Q1BQCi0KLWludCBGcmVlQ1BQKHZvaWQpCi17Ci0gICAgaWYgKG1hY3JvcykKLSAgICB7
Ci0gICAgICAgIG1lbV9GcmVlUG9vbChtYWNyb3MtPnBvb2wpOwotICAgICAgICBtYWNyb3MgPSAw
OwotICAgIH0KLQotICAgIHJldHVybiAxOwotfQotCi1pbnQgRmluYWxDUFAodm9pZCkKLXsKLQlp
ZiAoY3BwLT5pZmRlcHRoKQotCQlDUFBFcnJvclRvSW5mb0xvZygiI2lmIG1pc21hdGNoIik7Ci0g
ICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgQ1BQZGVmaW5lKHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQotewotICAgIGludCB0b2tlbiwgbmFtZSwgYXJnc1tNQVhfTUFDUk9fQVJHU10sIGFyZ2M7
Ci0gICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgU3lt
Ym9sICpzeW1iOwotICAgIFNvdXJjZUxvYyBkdW1teUxvYzsKLSAgICBtZW1zZXQoJm1hYywgMCwg
c2l6ZW9mKG1hYykpOwotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIp
IHsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKLSAgICAgICAgcmV0dXJu
IHRva2VuOwotICAgIH0KLSAgICBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICBpZiAodG9rZW4gPT0gJygnICYmICF5eWx2YWxwcC0+c2NfaW50KSB7Ci0gICAgICAgIC8v
IGdhdGhlciBhcmd1bWVudHMKLSAgICAgICAgYXJnYyA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChhcmdjID09IDAgJiYgdG9rZW4gPT0gJyknKSBi
cmVhazsKLSAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgewotCQkJCUNQ
UEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyZ2MgPCBNQVhfTUFDUk9fQVJHUykK
LSAgICAgICAgICAgICAgICBhcmdzW2FyZ2MrK10gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Ci0gICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gd2hpbGUgKHRva2VuID09ICcsJyk7Ci0gICAgICAgIGlm
ICh0b2tlbiAhPSAnKScpIHsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5l
Iik7Ci0gICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIH0KLSAgICAgICAgbWFjLmFy
Z2MgPSBhcmdjOwotICAgICAgICBtYWMuYXJncyA9IG1lbV9BbGxvYyhtYWNyb3MtPnBvb2wsIGFy
Z2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgIG1lbWNweShtYWMuYXJncywgYXJncywgYXJnYyAq
IHNpemVvZihpbnQpKTsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCX0KLSAgICBtYWMuYm9keSA9IE5ld1Rva2Vu
U3RyZWFtKEdldEF0b21TdHJpbmcoYXRhYmxlLCBuYW1lKSwgbWFjcm9zLT5wb29sKTsKLSAgICB3
aGlsZSAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykgewotICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0
ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA8PSAw
KSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhw
ZWN0ZWQgZW5kIG9mIGlucHV0IGluICNkZWZpbmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4
cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgUmVjb3JkVG9rZW4obWFjLmJvZHksIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICB9OwotCi0gICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOwotICAg
IGlmIChzeW1iKSB7Ci0gICAgICAgIGlmICghc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYpIHsKLSAg
ICAgICAgICAgIC8vIGFscmVhZHkgZGVmaW5lZCAtLSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5IGFy
ZSBpZGVudGljYWwKLSAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdjICE9IG1h
Yy5hcmdjKSBnb3RvIGVycm9yOwotICAgICAgICAgICAgZm9yIChhcmdjPTA7IGFyZ2MgPCBtYWMu
YXJnYzsgYXJnYysrKQotICAgICAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdz
W2FyZ2NdICE9IG1hYy5hcmdzW2FyZ2NdKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9y
OwotICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSk7
Ci0gICAgICAgICAgICBSZXdpbmRUb2tlblN0cmVhbShtYWMuYm9keSk7Ci0gICAgICAgICAgICBk
byB7Ci0gICAgICAgICAgICAgICAgaW50IG9sZF9sdmFsLCBvbGRfdG9rZW47Ci0gICAgICAgICAg
ICAgICAgb2xkX3Rva2VuID0gUmVhZFRva2VuKHN5bWItPmRldGFpbHMubWFjLmJvZHksIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgICAgICBvbGRfbHZhbCA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAg
ICAgICAgICAgICAgdG9rZW4gPSBSZWFkVG9rZW4obWFjLmJvZHksIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gIT0gb2xkX3Rva2VuIHx8IHl5bHZhbHBwLT5zY19pbnQgIT0g
b2xkX2x2YWwpIHsgCi0gICAgICAgICAgICAgICAgZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAg
IFN0b3JlU3RyKCJNYWNybyBSZWRlZmluZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVT
dHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxuYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgRGVjTGluZU51bWJl
cigpOwotICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVz
ZXRUU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyB9Ci0gICAgICAgICAgICB9
IHdoaWxlICh0b2tlbiA+IDApOwotICAgICAgICB9Ci0gICAgICAgIC8vRnJlZU1hY3JvKCZzeW1i
LT5kZXRhaWxzLm1hYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHVtbXlMb2MuZmlsZSA9IDA7
Ci0gICAgICAgIGR1bW15TG9jLmxpbmUgPSAwOwotICAgICAgICBzeW1iID0gQWRkU3ltYm9sKCZk
dW1teUxvYywgbWFjcm9zLCBuYW1lLCBNQUNST19TKTsKLSAgICB9Ci0gICAgc3ltYi0+ZGV0YWls
cy5tYWMgPSBtYWM7Ci0gICAgcmV0dXJuICdcbic7Ci19IC8vIENQUGRlZmluZQotCi1zdGF0aWMg
aW50IENQUHVuZGVmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
U3ltYm9sICpzeW1iOwotCWlmKHRva2VuID09ICdcbicpewotCQlDUFBFcnJvclRvSW5mb0xvZygi
I3VuZGVmIik7Ci0JICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgaWYgKHRva2VuICE9IENQ
UF9JREVOVElGSUVSKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc3ltYiA9IExvb2tVcFN5
bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgaWYgKHN5bWIpIHsKLSAgICAg
ICAgc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYgPSAxOwotICAgIH0KLSAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYg
KHRva2VuICE9ICdcbicpIHsKLSAgICBlcnJvcjoKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IiN1bmRlZiIpOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUHVuZGVmCi0KLS8q
IENQUGVsc2UgLS0gc2tpcCBmb3J3YXJkIHRvIGFwcHJvcHJpYXRlIHNwb3QuICBUaGlzIGlzIGFj
dHVhbGx5IHVzZWQKLSoqIHRvIHNraXAgdG8gYW5kICNlbmRpZiBhZnRlciBzZWVpbmcgYW4gI2Vs
c2UsIEFORCB0byBza2lwIHRvIGEgI2Vsc2UsCi0qKiAjZWxpZiwgb3IgI2VuZGlmIGFmdGVyIGEg
I2lmLyNpZmRlZi8jaWZuZGVmLyNlbGlmIHRlc3Qgd2FzIGZhbHNlCi0qLwotCi1zdGF0aWMgaW50
IENQUGVsc2UoaW50IG1hdGNoZWxzZSwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50
IGF0b20sZGVwdGg9MDsKLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQotCXdoaWxlICh0b2tlbiA+IDApIHsKLSAg
ICAgICAgaWYgKHRva2VuICE9ICcjJykgewotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdc
bicpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9
IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0
aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0JCWlmICgodG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApKSAhPSBDUFBfSURFTlRJ
RklFUikKLQkJCWNvbnRpbnVlOwotICAgICAgICBhdG9tID0geXlsdmFscHAtPnNjX2lkZW50Owot
ICAgICAgICBpZiAoYXRvbSA9PSBpZkF0b20gfHwgYXRvbSA9PSBpZmRlZkF0b20gfHwgYXRvbSA9
PSBpZm5kZWZBdG9tKXsKLSAgICAgICAgICAgIGRlcHRoKys7IGNwcC0+aWZkZXB0aCsrOyBjcHAt
PmVsc2V0cmFja2VyKys7Ci0gICAgICAgICAgICBpZiAoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05F
U1RJTkcpIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0
aW5nIGRlcHRoIGV4Y2VlZGVkIik7Ci0gICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3Ig
PSAxOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgLy8gc2FuaXR5IGNoZWNrIGVsc2V0cmFja2VyCi0gICAgICAgICAgICBpZiAoY3BwLT5lbHNl
dHJhY2tlciA8IDAgfHwgY3BwLT5lbHNldHJhY2tlciA+PSBNQVhfSUZfTkVTVElORykgewotICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtaXNtYXRjaGVkICNpZi8jZW5kaWYgc3Rh
dGVtZW50cyIpOwotICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNwcC0+ZWxz
ZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChhdG9tID09IGVuZGlmQXRvbSkgewotICAgICAgICAgICAgaWYoLS1kZXB0aDwwKXsKLSAgICAg
ICAgICAgICAgICBpZiAoY3BwLT5lbHNldHJhY2tlcikKLSAgICAgICAgICAgICAgICAgICAgLS1j
cHAtPmVsc2V0cmFja2VyOwotICAgICAgICAgICAgICAgIGlmIChjcHAtPmlmZGVwdGgpIAotICAg
ICAgICAgICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNr
ZXI7Ci0gICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmICgoKGludCkobWF0Y2hlbHNlKSAhPSAwKSYmIGRlcHRoPT0wKSB7Ci0JCQlpZiAoYXRvbSA9
PSBlbHNlQXRvbSApIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xv
ZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3Rp
dmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRv
a2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBp
bnB1dCBmb2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEg
bmV3bGluZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSAKLQkJCQlicmVhazsKLQkJCX0gCi0JCQllbHNlIGlmIChhdG9tID09IGVsaWZBdG9tKSB7
Ci0gICAgICAgICAgICAgICAgLyogd2UgZGVjcmVtZW50IGNwcC0+aWZkZXB0aCBoZXJlLCBiZWNh
dXNlIENQUGlmIHdpbGwgaW5jcmVtZW50Ci0gICAgICAgICAgICAgICAgICogaXQgYW5kIHdlIHJl
YWxseSB3YW50IHRvIGxlYXZlIGl0IGFsb25lICovCi0JCQkJaWYgKGNwcC0+aWZkZXB0aCl7Ci0J
CQkJCS0tY3BwLT5pZmRlcHRoOwotCQkJCSAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7Ci0JCQkJfQot
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBpZih5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0J
CX0KLSAgICAgICAgZWxzZSBpZigoYXRvbT09ZWxzZUF0b20pICYmICghQ2hrQ29ycmVjdEVsc2VO
ZXN0aW5nKCkpKXsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBh
ICNlbHNlIik7Ci0gICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KLQl9OwotICAgIHJldHVybiB0b2tlbjsKLX0KLQotZW51bSBl
dmFsX3ByZWMgewotICAgIE1JTl9QUkVDLAotICAgIENPTkQsIExPR09SLCBMT0dBTkQsIE9SLCBY
T1IsIEFORCwgRVFVQUwsIFJFTEFUSU9OLCBTSElGVCwgQURELCBNVUwsIFVOQVJZLAotICAgIE1B
WF9QUkVDCi19OwotCi1zdGF0aWMgaW50IG9wX2xvZ29yKGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSB8fCBiOyB9Ci1zdGF0aWMgaW50IG9wX2xvZ2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEg
JiYgYjsgfQotc3RhdGljIGludCBvcF9vcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgfCBiOyB9
Ci1zdGF0aWMgaW50IG9wX3hvcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgXiBiOyB9Ci1zdGF0
aWMgaW50IG9wX2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiBiOyB9Ci1zdGF0aWMgaW50
IG9wX2VxKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci1zdGF0aWMgaW50IG9wX25l
KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAhPSBiOyB9Ci1zdGF0aWMgaW50IG9wX2dlKGludCBh
LCBpbnQgYikgeyByZXR1cm4gYSA+PSBiOyB9Ci1zdGF0aWMgaW50IG9wX2xlKGludCBhLCBpbnQg
YikgeyByZXR1cm4gYSA8PSBiOyB9Ci1zdGF0aWMgaW50IG9wX2d0KGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSA+IGI7IH0KLXN0YXRpYyBpbnQgb3BfbHQoaW50IGEsIGludCBiKSB7IHJldHVybiBh
IDwgYjsgfQotc3RhdGljIGludCBvcF9zaGwoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw8IGI7
IH0KLXN0YXRpYyBpbnQgb3Bfc2hyKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PiBiOyB9Ci1z
dGF0aWMgaW50IG9wX2FkZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9Ci1zdGF0aWMg
aW50IG9wX3N1YihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgLSBiOyB9Ci1zdGF0aWMgaW50IG9w
X211bChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKiBiOyB9Ci1zdGF0aWMgaW50IG9wX2Rpdihp
bnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgLyBiOyB9Ci1zdGF0aWMgaW50IG9wX21vZChpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgJSBiOyB9Ci1zdGF0aWMgaW50IG9wX3BvcyhpbnQgYSkgeyByZXR1
cm4gYTsgfQotc3RhdGljIGludCBvcF9uZWcoaW50IGEpIHsgcmV0dXJuIC1hOyB9Ci1zdGF0aWMg
aW50IG9wX2NtcGwoaW50IGEpIHsgcmV0dXJuIH5hOyB9Ci1zdGF0aWMgaW50IG9wX25vdChpbnQg
YSkgeyByZXR1cm4gIWE7IH0KLQotc3RydWN0IHsKLSAgICBpbnQgdG9rZW4sIHByZWMsICgqb3Ap
KGludCwgaW50KTsKLX0gYmlub3BbXSA9IHsKLSAgICB7IENQUF9PUl9PUCwgTE9HT1IsIG9wX2xv
Z29yIH0sCi0gICAgeyBDUFBfQU5EX09QLCBMT0dBTkQsIG9wX2xvZ2FuZCB9LAotICAgIHsgJ3wn
LCBPUiwgb3Bfb3IgfSwKLSAgICB7ICdeJywgWE9SLCBvcF94b3IgfSwKLSAgICB7ICcmJywgQU5E
LCBvcF9hbmQgfSwKLSAgICB7IENQUF9FUV9PUCwgRVFVQUwsIG9wX2VxIH0sCi0gICAgeyBDUFBf
TkVfT1AsIEVRVUFMLCBvcF9uZSB9LAotICAgIHsgJz4nLCBSRUxBVElPTiwgb3BfZ3QgfSwKLSAg
ICB7IENQUF9HRV9PUCwgUkVMQVRJT04sIG9wX2dlIH0sCi0gICAgeyAnPCcsIFJFTEFUSU9OLCBv
cF9sdCB9LAotICAgIHsgQ1BQX0xFX09QLCBSRUxBVElPTiwgb3BfbGUgfSwKLSAgICB7IENQUF9M
RUZUX09QLCBTSElGVCwgb3Bfc2hsIH0sCi0gICAgeyBDUFBfUklHSFRfT1AsIFNISUZULCBvcF9z
aHIgfSwKLSAgICB7ICcrJywgQURELCBvcF9hZGQgfSwKLSAgICB7ICctJywgQURELCBvcF9zdWIg
fSwKLSAgICB7ICcqJywgTVVMLCBvcF9tdWwgfSwKLSAgICB7ICcvJywgTVVMLCBvcF9kaXYgfSwK
LSAgICB7ICclJywgTVVMLCBvcF9tb2QgfSwKLX07Ci0KLXN0cnVjdCB7Ci0gICAgaW50IHRva2Vu
LCAoKm9wKShpbnQpOwotfSB1bm9wW10gPSB7Ci0gICAgeyAnKycsIG9wX3BvcyB9LAotICAgIHsg
Jy0nLCBvcF9uZWcgfSwKLSAgICB7ICd+Jywgb3BfY21wbCB9LAotICAgIHsgJyEnLCBvcF9ub3Qg
fSwKLX07Ci0KLSNkZWZpbmUgQUxFTihBKSAoc2l6ZW9mKEEpL3NpemVvZihBWzBdKSkKLQotc3Rh
dGljIGludCBldmFsKGludCB0b2tlbiwgaW50IHByZWMsIGludCAqcmVzLCBpbnQgKmVyciwgeXlz
dHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50ICAgICAgICAgaSwgdmFsOwotICAgIFN5bWJv
bCAgICAgICpzOwotICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewotICAgICAgICBp
ZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZWRBdG9tKSB7Ci0gICAgICAgICAgICBpbnQg
bmVlZGNsb3NlID0gMDsKLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9
PSAnKCcpIHsKLSAgICAgICAgICAgICAgICBuZWVkY2xvc2UgPSAxOwotICAgICAgICAgICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJ
RklFUikKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgKnJlcyA9IChz
ID0gTG9va1VwU3ltYm9sKG1hY3JvcywgeXlsdmFscHAtPnNjX2lkZW50KSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgID8gIXMtPmRldGFpbHMubWFjLnVuZGVmIDogMDsKLSAgICAgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgIGlmIChuZWVkY2xvc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9r
ZW4gIT0gJyknKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgIH0KLQkJfSBlbHNlIGlmIChNYWNyb0V4cGFuZCh5eWx2YWxw
cC0+c2NfaWRlbnQsIHl5bHZhbHBwKSkgewotCQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgcmV0dXJuIGV2
YWwodG9rZW4sIHByZWMsIHJlcywgZXJyLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0JfSBlbHNlIGlmICh0b2tlbiA9PSBD
UFBfSU5UQ09OU1RBTlQpIHsKLSAgICAgICAgKnJlcyA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICB9IGVsc2UgaWYgKHRva2VuID09ICcoJykgewotICAgICAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgTUlOX1BSRUMsIHJlcywgZXJyLCB5eWx2YWxwcCk7
Ci0gICAgICAgIGlmICghKmVycikgewotICAgICAgICAgICAgaWYgKHRva2VuICE9ICcpJykKLSAg
ICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gQUxFTih1bm9wKSAtIDE7IGkgPj0gMDsgaS0t
KSB7Ci0gICAgICAgICAgICBpZiAodW5vcFtpXS50b2tlbiA9PSB0b2tlbikKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIFVOQVJZLCByZXMsIGVyciwg
eXlsdmFscHApOwotICAgICAgICAgICAgKnJlcyA9IHVub3BbaV0ub3AoKnJlcyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotICAg
IHdoaWxlICghKmVycikgewotICAgICAgICBpZiAodG9rZW4gPT0gJyknIHx8IHRva2VuID09ICdc
bicpIGJyZWFrOwotICAgICAgICBmb3IgKGkgPSBBTEVOKGJpbm9wKSAtIDE7IGkgPj0gMDsgaS0t
KSB7Ci0gICAgICAgICAgICBpZiAoYmlub3BbaV0udG9rZW4gPT0gdG9rZW4pCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPCAwIHx8IGJpbm9wW2ldLnBy
ZWMgPD0gcHJlYykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB2YWwgPSAqcmVzOwotICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgYmlub3BbaV0ucHJlYywgcmVz
LCBlcnIsIHl5bHZhbHBwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiaW5vcFtpXS5vcCA9PSBv
cF9kaXYgfHwgYmlub3BbaV0ub3AgPT0gb3BfbW9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoKnJlcyA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJwcmVwcm9jZXNzb3IgZGl2aWRlIG9yIG1vZHVsbyBieSB6ZXJvIik7Ci0gICAgICAg
ICAgICAgICAgKmVyciA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKnJlcyA9IGJpbm9wW2ldLm9wKHZhbCwgKnJl
cyk7Ci0gICAgfQotICAgIHJldHVybiB0b2tlbjsKLWVycm9yOgotICAgIENQUEVycm9yVG9JbmZv
TG9nKCJpbmNvcnJlY3QgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSIpOwotICAgICplcnIgPSAxOwot
ICAgICpyZXMgPSAwOwotICAgIHJldHVybiB0b2tlbjsKLX0gLy8gZXZhbAotCi1zdGF0aWMgaW50
IENQUGlmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpbnQgcmVz
ID0gMCwgZXJyID0gMDsKLQotICAgIGlmICghY3BwLT5pZmRlcHRoKyspCi0gICAgICAgIGlmbG9j
ID0gKmNwcC0+dG9rZW5Mb2M7Ci0gICAgaWYoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05FU1RJTkcp
ewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4Y2Vl
ZGVkIik7Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIGNwcC0+ZWxzZXRyYWNrZXIrKzsKLSAgICAvLyBzYW5pdHkgY2hlY2sgZWxz
ZXRyYWNrZXIKLSAgICBpZiAoY3BwLT5lbHNldHJhY2tlciA8IDAgfHwgY3BwLT5lbHNldHJhY2tl
ciA+PSBNQVhfSUZfTkVTVElORykgewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWlzbWF0
Y2hlZCAjaWYvI2VuZGlmIHN0YXRlbWVudHMiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3Ig
PSAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5l
bHNldHJhY2tlcl0gPSAwOwotCi0gICAgdG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywgJnJl
cywgJmVyciwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgIENQ
UFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjaWYgcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICB3aGlsZSAo
dG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKHRva2Vu
IDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluICNpZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
IC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IAotICAgIGlmICghcmVzICYmICFlcnIpIHsKLSAg
ICAgICAgdG9rZW4gPSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dG9rZW47Ci19IC8vIENQUGlmCi0KLXN0YXRpYyBpbnQgQ1BQaWZkZWYoaW50IGRlZmluZWQsIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaW50IG5hbWUgPSB5eWx2
YWxwcC0+c2NfaWRlbnQ7Ci0gICAgaWYoKytjcHAtPmlmZGVwdGggPiBNQVhfSUZfTkVTVElORyl7
Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVk
ZWQiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgY3BwLT5lbHNldHJhY2tlcisrOwotICAgIC8vIHNhbml0eSBjaGVjayBlbHNl
dHJhY2tlcgotICAgIGlmIChjcHAtPmVsc2V0cmFja2VyIDwgMCB8fCBjcHAtPmVsc2V0cmFja2Vy
ID49IE1BWF9JRl9ORVNUSU5HKSB7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtaXNtYXRj
aGVkICNpZi8jZW5kaWYgc3RhdGVtZW50cyIpOwotICAgICAgICBjcHAtPkNvbXBpbGVFcnJvciA9
IDE7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVs
c2V0cmFja2VyXSA9IDA7Ci0KLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAg
ICAgICAgICAgIGRlZmluZWQgPyBDUFBFcnJvclRvSW5mb0xvZygiaWZkZWYiKTpDUFBFcnJvclRv
SW5mb0xvZygiaWZuZGVmIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3ltYm9sICpzID0gTG9v
a1VwU3ltYm9sKG1hY3JvcywgbmFtZSk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2Vu
ICE9ICdcbicpIHsKLSAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQg
dG9rZW5zIGZvbGxvd2luZyAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVk
IGEgbmV3bGluZSIpOwotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9G
IG9yIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVj
dGVkIGVuZCBvZiBpbnB1dCBpbiAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVj
dGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgocyAmJiAh
cy0+ZGV0YWlscy5tYWMudW5kZWYpID8gMSA6IDApICE9IGRlZmluZWQpCi0gICAgICAgICAgICB0
b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19
IC8vIENQUGlmZGVmCi0KLXN0YXRpYyBpbnQgQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkg
Ci17Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLQlpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1iZXIoKTsK
LSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0gICAgICAgIEluY0xpbmVOdW1i
ZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQllbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09O
U1RBTlQpIHsKLQkJeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7
Ci0JCVNldExpbmVOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7Ci0gICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgCi0JCWlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKLSAgICAgICAgICAgIHl5bHZh
bHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotCQkJU2V0U3RyaW5nTnVt
YmVyKHl5bHZhbHBwLT5zY19pbnQpOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQkJaWYodG9rZW4hPSdc
bicpCi0JCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0gICAgICAgIH0KLQkJZWxzZSBp
ZiAodG9rZW4gPT0gJ1xuJyl7Ci0JCQlyZXR1cm4gdG9rZW47Ci0JCX0KLQkJZWxzZXsKLSAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOwotCQl9Ci0JfQotCWVsc2V7Ci0gICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0JfQotICAgIHJldHVybiB0b2tlbjsK
LX0KLQotc3RhdGljIGludCBDUFBlcnJvcih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotCi0JaW50
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICBjb25zdCBjaGFyICptZXNzYWdlOwotCQotICAgIHdoaWxlICh0b2tlbiAhPSAn
XG4nKSB7Ci0gICAgICAgIGlmICh0b2tlbiA8PSAwKXsKLSAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZXJyb3IgcHJlcHJvY2Vzc29yIGRp
cmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIH1lbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9PSBD
UFBfSU5UQ09OU1RBTlQpewotICAgICAgICAgICAgU3RvcmVTdHIoeXlsdmFscHAtPnN5bWJvbF9u
YW1lKTsKLQkJfWVsc2UgaWYodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgfHwgdG9rZW4gPT0gQ1BQ
X1NUUkNPTlNUQU5UKXsKLQkJCVN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFs
cHAtPnNjX2lkZW50KSk7Ci0JCX1lbHNlIHsKLQkJICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRv
bShhdGFibGUsdG9rZW4pKTsKLQkJfQotCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotCURlY0xpbmVOdW1iZXIoKTsKLQkv
L3N0b3JlIHRoaXMgbXNnIGludG8gdGhlIHNoYWRlcidzIGluZm9ybWF0aW9uIGxvZy4uc2V0IHRo
ZSBDb21waWxlIEVycm9yIGZsYWchISEhCi0JbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAg
IENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICBSZXNldFRTdHJpbmcoKTsKLSAgICBjcHAt
PkNvbXBpbGVFcnJvcj0xOwotICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICByZXR1cm4gJ1xuJzsK
LX0vL0NQUGVycm9yCi0KLXN0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQotewotCWNoYXIgU3JjU3RyTmFtZVsyXTsKLQljaGFyKiogYWxsVG9rZW5zOwotCWludCB0b2tl
bkNvdW50ID0gMDsKLQlpbnQgbWF4VG9rZW5Db3VudCA9IDEwOwotCWNvbnN0IGNoYXIqIFNyY1N0
cjsKLQlpbnQgaTsKLQotCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JCi0JaWYgKHRva2VuPT0nXG4nKSB7Ci0JCURlY0xp
bmVOdW1iZXIoKTsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNwcmFnbWEiKTsKLSAgICAg
ICAgSW5jTGluZU51bWJlcigpOwotCSAgICByZXR1cm4gdG9rZW47Ci0JfQotCQotCWFsbFRva2Vu
cyA9IChjaGFyKiopbWFsbG9jKHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsJCi0KLQl3
aGlsZSAodG9rZW4gIT0gJ1xuJykgewotCQlpZiAodG9rZW5Db3VudCA+PSBtYXhUb2tlbkNvdW50
KSB7Ci0JCQltYXhUb2tlbkNvdW50ICo9IDI7Ci0JCQlhbGxUb2tlbnMgPSAoY2hhcioqKXJlYWxs
b2MoKGNoYXIqKilhbGxUb2tlbnMsIHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsKLQkJ
fQotCQlzd2l0Y2ggKHRva2VuKSB7Ci0JCWNhc2UgQ1BQX0lERU5USUZJRVI6Ci0JCQlTcmNTdHIg
PSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKLQkJCWFsbFRva2Vu
c1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJCXN0
cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQljYXNl
IENQUF9JTlRDT05TVEFOVDoKLQkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKLQkJ
CWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAx
KTsKLQkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFr
OwotCQljYXNlIENQUF9GTE9BVENPTlNUQU5UOgotCQkJU3JjU3RyID0geXlsdmFscHAtPnN5bWJv
bF9uYW1lOwotCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4o
U3JjU3RyKSArIDEpOwotCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIp
OwotCQkJYnJlYWs7Ci0JCWNhc2UgLTE6Ci0gICAgICAgICAgICAvLyBFT0YKLSAgICAgICAgICAg
IENQUFNoSW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0aCBhIG5ld2xp
bmUiKTsJCQkKLQkJCWdvdG8gZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOwotCQlkZWZhdWx0Ogot
CQkJU3JjU3RyTmFtZVswXSA9IHRva2VuOwotCQkJU3JjU3RyTmFtZVsxXSA9ICdcMCc7Ci0JCQlh
bGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKDIpOwotCQkJc3RyY3B5KGFsbFRv
a2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHJOYW1lKTsKLQkJfQotCQl0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotCi0JSGFu
ZGxlUHJhZ21hKChjb25zdCBjaGFyKiopYWxsVG9rZW5zLCB0b2tlbkNvdW50KTsKLQkKLWZyZWVN
ZW1vcnlBbmRSZXR1cm5Ub2tlbjoKLQlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7
Ci0JCWZyZWUgKGFsbFRva2Vuc1tpXSk7Ci0JfQotCWZyZWUgKGFsbFRva2Vucyk7CQotCi0JcmV0
dXJuIHRva2VuOyAgICAKLX0gLy8gQ1BQcHJhZ21hCi0KLSNkZWZpbmUgRVNTTF9WRVJTSU9OX05V
TUJFUiAxMDAKLSNkZWZpbmUgRVNTTF9WRVJTSU9OX1NUUklORyAiMTAwIgotCi1zdGF0aWMgaW50
IENQUHZlcnNpb24oeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCi0g
ICAgaWYgKGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID09IDEpCi0gICAgICAgIENQUFNoSW5mb0xv
Z01zZygiI3ZlcnNpb24gbXVzdCBvY2N1ciBiZWZvcmUgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0
aGUgcHJvZ3JhbSIpOwotCi0gICAgaWYodG9rZW49PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7
Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotICAgICAgICBJbmNMaW5l
TnVtYmVyKCk7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0gICAgaWYgKHRva2VuICE9IENQUF9JTlRD
T05TVEFOVCkKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7Ci0JCi0gICAg
eXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JLy9TZXRWZXJz
aW9uTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOwotICAgIAotICAgIGlmICh5eWx2YWxwcC0+c2Nf
aW50ICE9IEVTU0xfVkVSU0lPTl9OVU1CRVIpCi0gICAgICAgIENQUFNoSW5mb0xvZ01zZygiVmVy
c2lvbiBudW1iZXIgbm90IHN1cHBvcnRlZCBieSBFU1NMIik7Ci0KLSAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgCi0J
aWYgKHRva2VuID09ICdcbicpewotCQlyZXR1cm4gdG9rZW47Ci0JfQotCWVsc2V7Ci0gICAgICAg
IENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19
IC8vIENQUHZlcnNpb24KLQotc3RhdGljIGludCBDUFBleHRlbnNpb24oeXlzdHlwZXBwICogeXls
dmFscHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGNoYXIgZXh0ZW5zaW9uTmFtZVtNQVhfU1lN
Qk9MX05BTUVfTEVOICsgMV07Ci0KLSAgICBpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1i
ZXIoKTsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gbmFtZSBub3Qgc3BlY2lm
aWVkIik7Ci0gICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQot
ICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIiNleHRlbnNpb24iKTsKLSAgICAKLSAgICBzdHJuY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0
b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpLCBNQVhfU1lNQk9MX05BTUVfTEVO
KTsKLSAgICBleHRlbnNpb25OYW1lW01BWF9TWU1CT0xfTkFNRV9MRU5dID0gJ1wwJzsKLQkgICAg
Ci0gICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSAnOicpIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKCInOicgbWlzc2luZyBhZnRlciBleHRlbnNpb24gbmFtZSIpOwotICAgICAgICByZXR1cm4g
dG9rZW47Ci0gICAgfQotICAgIAotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5U
SUZJRVIpIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJiZWhhdmlvciBmb3IgZXh0ZW5zaW9u
IG5vdCBzcGVjaWZpZWQiKTsKLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIHVw
ZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxl
LCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLQotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQlpZiAodG9rZW4gPT0gJ1xuJyl7
Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0JZWxzZXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IiNleHRlbnNpb24iKTsKLQl9Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBDUFBleHRlbnNpb24K
LQotaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLQotICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJ
RklFUikgewotICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsK
LSAgICAgICAgICAgICB0b2tlbiA9IENQUGRlZmluZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVsc2VBdG9tKSB7Ci0JCQkgaWYoQ2hrQ29ycmVj
dEVsc2VOZXN0aW5nKCkpewotICAgICAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCApewot
ICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIG1pc21hdGNoIik7
Ci0gICAgICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAg
ICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5n
ICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAw
KSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gI2lmZGVmIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICB9Ci0JCQkgICAgIHRva2VuID0gQ1BQZWxz
ZSgwLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7Ci0gICAgICAgICAgICAgICAg
IGNwcC0+aWZkZXB0aCA9IDA7Ci0gICAgICAgICAgICAgICAgIGNwcC0+ZWxzZXRyYWNrZXIgPSAw
OwotICAgICAgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0gICAgICAg
ICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgfQotCQl9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBl
bGlmQXRvbSkgewotICAgICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpewotICAgICAgICAgICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VsaWYgbWlzbWF0Y2giKTsKLSAgICAgICAgICAgICAg
ICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9IAotICAgICAgICAgICAgLy8gdGhpcyB0b2tlbiBpcyByZWFsbHkgYSBkb250IGNh
cmUsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGVhdCB0aGUgdG9rZW5zCi0gICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
IAotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0g
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdCB0b2tlbnMgZm9s
bG93aW5nICNlbGlmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUi
KTsKLSAgICAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0J
CSAgICB0b2tlbiA9IENQUGVsc2UoMCwgeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5
bHZhbHBwLT5zY19pZGVudCA9PSBlbmRpZkF0b20pIHsKLSAgICAgICAgICAgICBpZiAoIWNwcC0+
aWZkZXB0aCl7Ci0gICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlz
bWF0Y2giKTsKLSAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgLS1jcHAtPmlmZGVwdGg7Ci0KLSAgICAgICAgICAgICBpZiAoY3BwLT5l
bHNldHJhY2tlcikKLSAgICAgICAgICAgICAgICAgLS1jcHAtPmVsc2V0cmFja2VyOwotCi0JICAg
IH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlmQXRvbSkgewotICAgICAgICAgICAg
IHRva2VuID0gQ1BQaWYoeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBpZmRlZkF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDEs
IHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZu
ZGVmQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQaWZkZWYoMCwgeXlsdmFscHApOwot
ICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBsaW5lQXRvbSkgewotICAg
ICAgICAgICAgIHRva2VuID0gQ1BQbGluZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
eXlsdmFscHAtPnNjX2lkZW50ID09IHByYWdtYUF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9
IENQUHByYWdtYSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lk
ZW50ID09IHVuZGVmQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQdW5kZWYoeXlsdmFs
cHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlcnJvckF0b20p
IHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUGVycm9yKHl5bHZhbHBwKTsKLSAgICAgICAgfSBl
bHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gdmVyc2lvbkF0b20pIHsKLSAgICAgICAgICAg
IHRva2VuID0gQ1BQdmVyc2lvbih5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFs
cHAtPnNjX2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKLSAgICAgICAgICAgIHRva2VuID0gQ1BQ
ZXh0ZW5zaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0b3Jl
U3RyKCJJbnZhbGlkIERpcmVjdGl2ZSIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5n
T2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIG1lc3NhZ2U9
R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsK
LSAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxl
ICh0b2tlbiAhPSAnXG4nICYmIHRva2VuICE9IDAgJiYgdG9rZW4gIT0gRU9GKSB7Ci0JCXRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LQl9Ci0gICAgICAgIAotICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKLQotICAgIHJl
dHVybiB0b2tlbjsKLX0gLy8gcmVhZENQUGxpbmUKLQotdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1i
b2wgKnMpIHsKLSAgICBEZWxldGVUb2tlblN0cmVhbShzLT5ib2R5KTsKLX0KLQotdm9pZCBQcmVk
ZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VM
b2MgbG9jYXRpb24gPSB7MCwgMH07Ci0gICAgU3ltYm9sICpzeW1ib2wgPSBOVUxMOwotICAgIE1h
Y3JvU3ltYm9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OwotICAgIHl5c3R5cGVwcCB2
YWwgPSB7MCwgMC4wLCAwLCB7MH19OwotICAgIGludCBhdG9tID0gMDsKLQotICAgIG1hY3JvLmJv
ZHkgPSBOZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwotICAgIHZhbC5zY19pbnQg
PSB2YWx1ZTsKLSAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9M
RU4rMSwgIiVkIiwgdmFsdWUpOwotICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRD
T05TVEFOVCwgJnZhbCk7Ci0gICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUp
OwotICAgIHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9f
Uyk7Ci0gICAgc3ltYm9sLT5kZXRhaWxzLm1hYyA9IG1hY3JvOwotfQotCi1zdGF0aWMgaW50IGVv
Zl9zY2FuKElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgcmV0dXJuIC0xOyB9
Ci1zdGF0aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2
YWxwcCkgeyB9Ci0KLXN0YXRpYyB2b2lkIFB1c2hFb2ZTcmMoKSB7Ci0gICAgSW5wdXRTcmMgKmlu
ID0gbWFsbG9jKHNpemVvZihJbnB1dFNyYykpOwotICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKElu
cHV0U3JjKSk7Ci0gICAgaW4tPnNjYW4gPSBlb2Zfc2NhbjsKLSAgICBpbi0+Z2V0Y2ggPSBlb2Zf
c2NhbjsKLSAgICBpbi0+dW5nZXRjaCA9IG5vb3A7Ci0gICAgaW4tPnByZXYgPSBjcHAtPmN1cnJl
bnRJbnB1dDsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOwotfQotCi1zdGF0aWMgdm9pZCBQ
b3BFb2ZTcmMoKSB7Ci0gICAgaWYgKGNwcC0+Y3VycmVudElucHV0LT5zY2FuID09IGVvZl9zY2Fu
KSB7Ci0gICAgICAgIElucHV0U3JjICppbiA9IGNwcC0+Y3VycmVudElucHV0OwotICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dCA9IGluLT5wcmV2OwotICAgICAgICBmcmVlKGluKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBUb2tlblN0cmVhbSAqUHJlc2Nhbk1hY3JvQXJnKFRva2VuU3RyZWFtICphLCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAgIGludCB0b2tlbjsKLSAgICBUb2tlblN0cmVhbSAq
bjsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShhKTsKLSAgICBkbyB7Ci0gICAgICAgIHRva2VuID0g
UmVhZFRva2VuKGEsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElG
SUVSICYmIExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICB9IHdoaWxlICh0b2tlbiA+IDApOwotICAgIGlmICh0b2tlbiA8PSAw
KSByZXR1cm4gYTsKLSAgICBuID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwotICAg
IFB1c2hFb2ZTcmMoKTsKLSAgICBSZWFkRnJvbVRva2VuU3RyZWFtKGEsIDAsIDApOwotICAgIHdo
aWxlICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApKSA+IDApIHsKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYm
IE1hY3JvRXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIFJlY29yZFRva2VuKG4sIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAg
fQotICAgIFBvcEVvZlNyYygpOwotICAgIERlbGV0ZVRva2VuU3RyZWFtKGEpOwotICAgIHJldHVy
biBuOwotfSAvLyBQcmVzY2FuTWFjcm9BcmcKLQotdHlwZWRlZiBzdHJ1Y3QgTWFjcm9JbnB1dFNy
YyB7Ci0gICAgSW5wdXRTcmMgICAgYmFzZTsKLSAgICBNYWNyb1N5bWJvbCAqbWFjOwotICAgIFRv
a2VuU3RyZWFtICoqYXJnczsKLX0gTWFjcm9JbnB1dFNyYzsKLQotLyogbWFjcm9fc2NhbiAtLS0K
LSoqIHJldHVybiB0aGUgbmV4dCB0b2tlbiBmb3IgYSBtYWNybyBleHBhbmlvbiwgaGFuZGxpbmcg
bWFjcm8gYXJncyAKLSovCi1zdGF0aWMgaW50IG1hY3JvX3NjYW4oTWFjcm9JbnB1dFNyYyAqaW4s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IGk7Ci0gICAgaW50IHRva2VuID0gUmVh
ZFRva2VuKGluLT5tYWMtPmJvZHksIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gPT0gQ1BQX0lE
RU5USUZJRVIpIHsKLSAgICAgICAgZm9yIChpID0gaW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0p
Ci0gICAgICAgICAgICBpZiAoaW4tPm1hYy0+YXJnc1tpXSA9PSB5eWx2YWxwcC0+c2NfaWRlbnQp
IGJyZWFrOwotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICBSZWFkRnJvbVRva2Vu
U3RyZWFtKGluLT5hcmdzW2ldLCB5eWx2YWxwcC0+c2NfaWRlbnQsIDApOwotICAgICAgICAgICAg
cmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2VuOwot
ICAgIGluLT5tYWMtPmJ1c3kgPSAwOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2Uu
cHJldjsKLSAgICBpZiAoaW4tPmFyZ3MpIHsKLSAgICAgICAgZm9yIChpPWluLT5tYWMtPmFyZ2Mt
MTsgaT49MDsgaS0tKQotICAgICAgICAgICAgRGVsZXRlVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0p
OwotICAgICAgICBmcmVlKGluLT5hcmdzKTsKLSAgICB9Ci0gICAgZnJlZShpbik7Ci0gICAgcmV0
dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci19IC8vIG1hY3JvX3NjYW4KLQotLyogTWFjcm9FeHBhbmQKLSoqIGNoZWNrIGFuIGlkZW50aWZp
ZXIgKGF0b20pIHRvIHNlZSBpZiBpdCBhIG1hY3JvIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgot
KiogSWYgaXQgaXMsIHB1c2ggYW4gSW5wdXRTcmMgdGhhdCB3aWxsIHByb2R1Y2UgdGhlIGFwcHJv
cHJpYXRlIGV4cGFuc2lvbgotKiogYW5kIHJldHVybiBUUlVFLiAgSWYgbm90LCByZXR1cm4gRkFM
U0UuCi0qLwotCi1pbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KQotewotICAgIFN5bWJvbCAgICAgICAgICAgICAgKnN5bSA9IExvb2tVcFN5bWJvbChtYWNyb3Ms
IGF0b20pOwotICAgIE1hY3JvSW5wdXRTcmMgICAgICAgKmluOwotICAgIGludCBpLGosIHRva2Vu
LCBkZXB0aD0wOwotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0JaWYgKGF0b20gPT0gX19MSU5F
X19BdG9tKSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0g
ICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xF
TisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5U
Q09OU1RBTlQsIHl5bHZhbHBwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmIChh
dG9tID09IF9fRklMRV9fQXRvbSkgewotICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3Ry
aW5nTnVtYmVyKCk7Ci0gICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFY
X1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgVW5n
ZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgfQotCWlmIChhdG9tID09IF9fVkVSU0lPTl9fQXRvbSkgewotICAgICAgICBzdHJjcHkoeXls
dmFscHAtPnN5bWJvbF9uYW1lLEVTU0xfVkVSU0lPTl9TVFJJTkcpOwotICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gYXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotICAgICAgICBVbmdldFRv
a2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0gICAgaWYgKCFzeW0gfHwgc3ltLT5kZXRhaWxzLm1hYy51bmRlZikgcmV0dXJuIDA7Ci0gICAg
aWYgKHN5bS0+ZGV0YWlscy5tYWMuYnVzeSkgcmV0dXJuIDA7ICAgICAgICAvLyBubyByZWN1cnNp
dmUgZXhwYW5zaW9ucwotICAgIGluID0gbWFsbG9jKHNpemVvZigqaW4pKTsKLSAgICBtZW1zZXQo
aW4sIDAsIHNpemVvZigqaW4pKTsKLSAgICBpbi0+YmFzZS5zY2FuID0gKHZvaWQgKiltYWNyb19z
Y2FuOwotICAgIGluLT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICBp
bi0+YmFzZS5uYW1lID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7Ci0gICAgaW4tPm1hYyA9ICZz
eW0tPmRldGFpbHMubWFjOwotICAgIGlmIChzeW0tPmRldGFpbHMubWFjLmFyZ3MpIHsKLSAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotCQlpZiAodG9rZW4gIT0gJygnKSB7Ci0gICAgICAgICAgICBVbmdldFRva2VuKHRv
a2VuLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBhdG9tOwot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaW4tPmFyZ3MgPSBtYWxs
b2MoaW4tPm1hYy0+YXJnYyAqIHNpemVvZihUb2tlblN0cmVhbSAqKSk7Ci0gICAgICAgIGZvciAo
aT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0gTmV3
VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwotCQlpPTA7aj0wOwotICAgICAgICBkb3sKLSAg
ICAgICAgICAgIGRlcHRoID0gMDsKLQkJCXdoaWxlKDEpIHsKLSAgICAgICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
U3RvcmVTdHIoIkVPRiBpbiBNYWNybyAiKTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIo
R2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmKChpbi0+bWFjLT5hcmdjPT0wKSAmJiAodG9rZW4hPScpJykpIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGlmIChkZXB0aCA9PSAwICYmICh0b2tlbiA9PSAnLCcgfHwgdG9rZW4gPT0gJyknKSkg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKLSAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOwotICAgICAgICAgICAgICAgIFJl
Y29yZFRva2VuKGluLT5hcmdzW2ldLCB0b2tlbiwgeXlsdmFscHApOwotICAgICAgICAgICAgICAg
IGo9MTsKLQkJCX0KLSAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIHsKLSAgICAgICAgICAg
ICAgICBpZigoaW4tPm1hYy0+YXJnYz09MSkgJiZqPT0wKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpKys7Ci0JCX13aGlsZShpIDwgaW4tPm1hYy0+YXJnYyk7
Ci0KLSAgICAgICAgaWYgKGkgPCBpbi0+bWFjLT5hcmdjKSB7Ci0gICAgICAgICAgICBTdG9yZVN0
cigiVG9vIGZldyBhcmdzIGluIE1hY3JvICIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3Ry
aW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21U
U3RyKCk7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAg
ICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAhPSAnKScpIHsKLSAg
ICAgICAgICAgIGRlcHRoPTA7Ci0JCQl3aGlsZSAodG9rZW4gPj0gMCAmJiAoZGVwdGggPiAwIHx8
IHRva2VuICE9ICcpJykpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0
aC0tOwotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0g
JygnKSBkZXB0aCsrOwotICAgICAgICAgICAgfQotCQkJCi0gICAgICAgICAgICBpZiAodG9rZW4g
PD0gMCkgewotICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7Ci0gICAg
ICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAg
ICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0
b3JlU3RyKCJUb28gbWFueSBhcmdzIGluIE1hY3JvICIpOwotICAgICAgICAgICAgU3RvcmVTdHIo
R2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0
cmZyb21UU3RyKCk7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAg
ICAgICAgICBSZXNldFRTdHJpbmcoKTsKLQkJfQotCQlmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdj
OyBpKyspIHsKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0gUHJlc2Nhbk1hY3JvQXJnKGluLT5h
cmdzW2ldLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgMAotICAgIHByaW50Zigi
ICA8JXM6JWQ+Zm91bmQgbWFjcm8gJXNcbiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBsb2MuZmls
ZSksCi0gICAgICAgICAgIGxvYy5saW5lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRvbSkpOwot
ICAgIGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykgewotICAgICAgICBwcmludGYoIlx0
YXJnICVzID0gJyIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBpbi0+bWFjLT5hcmdzW2ldKSk7Ci0g
ICAgICAgIER1bXBUb2tlblN0cmVhbShzdGRvdXQsIGluLT5hcmdzW2ldKTsKLSAgICAgICAgcHJp
bnRmKCInXG4iKTsKLSAgICB9Ci0jZW5kaWYKLQkvKnJldGFpbiB0aGUgaW5wdXQgc291cmNlKi8K
LSAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgc3ltLT5kZXRhaWxz
Lm1hYy5idXN5ID0gMTsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShzeW0tPmRldGFpbHMubWFjLmJv
ZHkpOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVybiAxOwot
fSAvLyBNYWNyb0V4cGFuZAotCi1pbnQgQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZvaWQpCi17Ci0g
ICAgLy8gc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBlbHNldHJhY2tlciBpcyBpbiBhIHZhbGlk
IHJhbmdlCi0gICAgaWYgKGNwcC0+ZWxzZXRyYWNrZXIgPCAwIHx8IGNwcC0+ZWxzZXRyYWNrZXIg
Pj0gTUFYX0lGX05FU1RJTkcpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYg
KGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID09IDApIHsKLSAgICAgICAgY3BwLT5l
bHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAxOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDgwMmUyM2UuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICsw
LDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
LQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1Q
Uk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0vLwotLy8gY3BwLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX0NQUF9I
KQotI2RlZmluZSBfX0NQUF9IIDEKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
YXJzZXIuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0KLWlu
dCBJbml0Q1BQKHZvaWQpOwotaW50IEZpbmFsQ1BQKHZvaWQpOwotaW50ICByZWFkQ1BQbGluZSh5
eXN0eXBlcHAgKiB5eWx2YWxwcCk7Ci1pbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKTsKLWludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9pZCk7Ci0KLXR5cGVk
ZWYgc3RydWN0IE1hY3JvU3ltYm9sIHsKLSAgICBpbnQgYXJnYzsKLSAgICBpbnQgKmFyZ3M7Ci0g
ICAgVG9rZW5TdHJlYW0gKmJvZHk7Ci0gICAgdW5zaWduZWQgYnVzeToxOwotICAgIHVuc2lnbmVk
IHVuZGVmOjE7Ci19IE1hY3JvU3ltYm9sOwotCi12b2lkIEZyZWVNYWNybyhNYWNyb1N5bWJvbCAq
KTsKLXZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsK
LQotdm9pZCAgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKTsgICAgICAvLyBQcmludHMg
aW5mb3JtYXRpb24gaW50byBkZWJ1ZyBsb2cKLXZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBj
aGFyKik7ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvZwotdm9p
ZCAgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpOyAvLyBQcmludHMgd2Fybmlu
ZyBtZXNzYWdlcyBpbnRvIGluZm8gbG9nCi12b2lkICBIYW5kbGVQcmFnbWEoY29uc3QgY2hhcioq
LCBpbnQgbnVtVG9rZW5zKTsgIC8vICNwcmFnbWEgZGlyZWN0aXZlIGNvbnRhaW5lci4KLXZvaWQg
IFJlc2V0VFN0cmluZyh2b2lkKTsgICAgICAgICAgICAgICAgICAgLy8gI2Vycm9yIE1lc3NhZ2Ug
YXMgVFN0cmluZy4KLXZvaWQgIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIqKTsgICAgICAg
Ly8gU3RpY2sgYWxsIGNwcCBlcnJvcnMgaW50byBTaC5JbmZvLmxvZy4KLXZvaWQgIFN0b3JlU3Ry
KGNvbnN0IGNoYXIqKTsgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIFRTdHJpbmcgaW4gUGFy
c2UgQ29udGV4dC4KLXZvaWQgIFNldExpbmVOdW1iZXIoaW50KTsgICAgICAgICAgICAgICAgICAg
Ly8gU2V0IGxpbmUgbnVtYmVyLiAgCi12b2lkICBTZXRTdHJpbmdOdW1iZXIoaW50KTsgICAgICAg
ICAgICAgICAgIC8vIFNldCBzdHJpbmcgbnVtYmVyLiAgICAKLWludCAgIEdldExpbmVOdW1iZXIo
dm9pZCk7ICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIu
IAotaW50ICAgR2V0U3RyaW5nTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAvLyBHZXQgdGhl
IGN1cnJlbnQgU3RyaW5nIE51bWJlci4gCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lk
KTsgICAgICAgICAgIC8vIENvbnZlcnQgVFN0cmluZyB0byBTdHJpbmcuICAKLXZvaWQgIHVwZGF0
ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2
aW9yKTsKLWludCAgIEZyZWVDUFAodm9pZCk7Ci0KLSNlbmRpZiAvLyAhKGRlZmluZWQoX19DUFBf
SCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3Bwc3RydWN0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1OGNmZjMxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAs
MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlz
IHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNh
dGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0
ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0
aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3Qg
dG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNp
dmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBO
VklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVj
ZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHBy
b3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3Ug
bXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2Ug
YW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlz
dHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJh
ZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
ZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3Rp
Y2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUg
Z3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBh
bnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZl
Ci13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1h
eSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAot
Ci1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFT
SVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFO
RCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBS
T0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BF
Q0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFO
WSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1Ig
RElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQg
V0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8vCi0vLyBjcHBzdHJ1Y3QuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmgiCi0KLUNQUFN0cnVjdCAgKmNwcCAgICAgID0gTlVMTDsKLXN0YXRpYyBp
bnQgIHJlZkNvdW50ID0gMDsKLQotaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1pbnQgUmVz
ZXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1pbnQgRnJlZUNQUFN0cnVjdCh2b2lkKTsKLWludCBGaW5h
bGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKLQotLyoKLSAqIEluaXRDUFBTdHJ1Y3QoKSAtIEluaXRp
bGFpemUgdGhlIENQUCBzdHJ1Y3R1cmUuCi0gKgotICovCi0KLWludCBJbml0Q1BQU3RydWN0KHZv
aWQpCi17Ci0gICAgaW50IGxlbjsKLSAgICBjaGFyICpwOwotCi0gICAgY3BwID0gKENQUFN0cnVj
dCAqKSBtYWxsb2Moc2l6ZW9mKENQUFN0cnVjdCkpOwotICAgIGlmIChjcHAgPT0gTlVMTCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZWZDb3VudCsrOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBw
dWJsaWMgbWVtYmVyczoKLSAgICBjcHAtPnBMYXN0U291cmNlTG9jID0gJmNwcC0+bGFzdFNvdXJj
ZUxvYzsKLSAgICAKLQlwID0gKGNoYXIgKikgJmNwcC0+b3B0aW9uczsKLSAgICBsZW4gPSBzaXpl
b2YoY3BwLT5vcHRpb25zKTsKLSAgICB3aGlsZSAoLS1sZW4gPj0gMCkKLSAgICAgICAgcFtsZW5d
ID0gMDsKLSAgICAgCi0gICAgUmVzZXRQcmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gMTsKLX0g
Ly8gSW5pdENQUFN0cnVjdAotCi1pbnQgUmVzZXRQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICAv
LyBJbml0aWFsaXplIHByaXZhdGUgbWVtYmVyczoKLQotICAgIGNwcC0+bGFzdFNvdXJjZUxvYy5m
aWxlID0gMDsKLSAgICBjcHAtPmxhc3RTb3VyY2VMb2MubGluZSA9IDA7Ci0gICAgY3BwLT5wQyA9
IDA7Ci0gICAgY3BwLT5Db21waWxlRXJyb3IgPSAwOwotICAgIGNwcC0+aWZkZXB0aCA9IDA7Ci0g
ICAgZm9yKGNwcC0+ZWxzZXRyYWNrZXIgPSAwOyBjcHAtPmVsc2V0cmFja2VyIDwgTUFYX0lGX05F
U1RJTkc7IGNwcC0+ZWxzZXRyYWNrZXIrKykKLSAgICAgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5l
bHNldHJhY2tlcl0gPSAwOwotICAgIGNwcC0+ZWxzZXRyYWNrZXIgPSAwOwotICAgIGNwcC0+dG9r
ZW5zQmVmb3JlRU9GID0gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotLy9JbnRpYWxpemluZyB0aGUg
UHJlcHJvY2Vzc29yLgotCi1pbnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKQotewotICAgIyAgZGVm
aW5lIENQUF9TVFVGRiB0cnVlCi0gICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgotICAgICAgICAg
ICAgRnJlZUNQUFN0cnVjdCgpOwotICAgICAgICAgICAgSW5pdENQUFN0cnVjdCgpOwotICAgICAg
ICAgICAgY3BwLT5vcHRpb25zLlF1aWV0ID0gMTsKLSAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5w
cm9maWxlU3RyaW5nID0gImdlbmVyaWMiOwotICAgICAgICAgICAgaWYgKCFJbml0QXRvbVRhYmxl
KGF0YWJsZSwgMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAo
IUluaXRTY2FubmVyKGNwcCkpCi0JICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIyAgZW5k
aWYKLSAgcmV0dXJuIDA7IAotfQotCi0vL0ZyZWVDUFBTdHJ1Y3QoKSAtIEZyZWUgdGhlIENQUCBz
dHJ1Y3R1cmUuCi0KLWludCBGcmVlQ1BQU3RydWN0KHZvaWQpCi17Ci0gICAgaWYgKHJlZkNvdW50
KQotICAgIHsKLSAgICAgICBmcmVlKGNwcCk7Ci0gICAgICAgcmVmQ291bnQtLTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIDE7Ci19Ci0KLS8vRmluYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgot
Ci1pbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICMgIGRlZmluZSBDUFBfU1RV
RkYgdHJ1ZQotICAgICAgICAjICBpZmRlZiBDUFBfU1RVRkYKLSAgICAgICAgICAgIEZyZWVBdG9t
VGFibGUoYXRhYmxlKTsKLSAgICAgICAgICAgIEZyZWVDUFBTdHJ1Y3QoKTsKLSAgICAgICAgICAg
IEZyZWVTY2FubmVyKCk7Ci0gICAgICAgIyAgZW5kaWYKLSAgcmV0dXJuIDA7IAotfQotCi0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgY3Bwc3RydWN0LmMgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2dlbmVyYXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvZ2VuZXJhdGVfcGFyc2VyLnNoCm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5YzcwYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2dlbmVyYXRlX3BhcnNl
ci5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyB2YXJp
b3VzIGNvbXBvbmVudHMgb2YgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCisKK3J1bl9mbGV4KCkKK3sK
K2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIK
K2ZsZXggLS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0
X2ZpbGUKK30KKworcnVuX2Jpc29uKCkKK3sKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291
dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15
YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK30KKworc2NyaXB0X2Rp
cj0kKGRpcm5hbWUgJDApCisKKyMgR2VuZXJhdGUgcHJlcHJvY2Vzc29yCitydW5fZmxleCBUb2tl
bml6ZXIubCBUb2tlbml6ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJl
c3Npb25QYXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDI5NTIxYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU4
ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklE
SUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMg
dGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2Rp
ZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0
aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdp
dGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJl
ZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJq
ZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhj
bHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2lu
YWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXBy
b2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRo
IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1z
OyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwg
eW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90
aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCBy
ZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUs
IHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRp
b24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMg
bm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwg
YXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQg
dG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZh
dGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2Fy
ZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVy
LiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMi
IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJ
VEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJD
SEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVT
RSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVS
Ci1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5Z
IFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJ
TiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5E
L09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQg
QU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0vLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZuZGVmIF9NU0NfVkVSCi0jaW5jbHVk
ZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9t
ZW1vcnkuaCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDcwNikKLSNlbmRpZgotCi0vLyBkZWZhdWx0IGFsaWdubWVudCBhbmQgY2h1bmtzaXplLCBp
ZiBjYWxsZWQgd2l0aCAwIGFyZ3VtZW50cwotI2RlZmluZSBDSFVOS1NJWkUgICAgICAgKDY0KjEw
MjQpCi0jZGVmaW5lIEFMSUdOICAgICAgICAgICA4Ci0KLS8vIHdlIG5lZWQgdG8gY2FsbCB0aGUg
YHJlYWwnIG1hbGxvYyBhbmQgZnJlZSwgbm90IG91ciByZXBsYWNlbWVudHMKLSN1bmRlZiBtYWxs
b2MKLSN1bmRlZiBmcmVlCi0KLXN0cnVjdCBjaHVuayB7Ci0gICAgc3RydWN0IGNodW5rICAgICAg
ICAqbmV4dDsKLX07Ci0KLXN0cnVjdCBjbGVhbnVwIHsKLSAgICBzdHJ1Y3QgY2xlYW51cCAgICAg
ICpuZXh0OwotICAgIHZvaWQgICAgICAgICAgICAgICAgKCpmbikodm9pZCAqKTsKLSAgICB2b2lk
ICAgICAgICAgICAgICAgICphcmc7Ci19OwotCi1zdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgewotICAg
IHN0cnVjdCBjaHVuayAgICAgICAgKm5leHQ7Ci0gICAgdWludHB0cl90ICAgICAgICAgICBmcmVl
LCBlbmQ7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICBjaHVua3NpemU7Ci0gICAgdWludHB0cl90
ICAgICAgICAgICBhbGlnbm1hc2s7Ci0gICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsK
LX07Ci0KLU1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2ln
bmVkIGludCBhbGlnbikKLXsKLSAgICBNZW1vcnlQb29sICAqcG9vbDsKLQotICAgIGlmIChhbGln
biA9PSAwKSBhbGlnbiA9IEFMSUdOOwotICAgIGlmIChjaHVua3NpemUgPT0gMCkgY2h1bmtzaXpl
ID0gQ0hVTktTSVpFOwotICAgIGlmIChhbGlnbiAmIChhbGlnbi0xKSkgcmV0dXJuIDA7Ci0gICAg
aWYgKGNodW5rc2l6ZSA8IHNpemVvZihNZW1vcnlQb29sKSkgcmV0dXJuIDA7Ci0gICAgaWYgKGNo
dW5rc2l6ZSAmIChhbGlnbi0xKSkgcmV0dXJuIDA7Ci0gICAgaWYgKCEocG9vbCA9IG1hbGxvYyhj
aHVua3NpemUpKSkgcmV0dXJuIDA7Ci0gICAgcG9vbC0+bmV4dCA9IDA7Ci0gICAgcG9vbC0+Y2h1
bmtzaXplID0gY2h1bmtzaXplOwotICAgIHBvb2wtPmFsaWdubWFzayA9ICh1aW50cHRyX3QpKGFs
aWduKS0xOyAgCi0gICAgcG9vbC0+ZnJlZSA9ICgodWludHB0cl90KShwb29sICsgMSkgKyBwb29s
LT5hbGlnbm1hc2spICYgfnBvb2wtPmFsaWdubWFzazsKLSAgICBwb29sLT5lbmQgPSAodWludHB0
cl90KXBvb2wgKyBjaHVua3NpemU7Ci0gICAgcG9vbC0+Y2xlYW51cCA9IDA7Ci0gICAgcmV0dXJu
IHBvb2w7Ci19Ci0KLXZvaWQgbWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0gICAg
c3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsKLSAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpw
LCAqbmV4dDsKLQotICAgIGZvciAoY2xlYW51cCA9IHBvb2wtPmNsZWFudXA7IGNsZWFudXA7IGNs
ZWFudXAgPSBjbGVhbnVwLT5uZXh0KSB7Ci0gICAgICAgIGNsZWFudXAtPmZuKGNsZWFudXAtPmFy
Zyk7Ci0gICAgfQotICAgIGZvciAocCA9IChzdHJ1Y3QgY2h1bmsgKilwb29sOyBwOyBwID0gbmV4
dCkgewotICAgICAgICBuZXh0ID0gcC0+bmV4dDsKLSAgICAgICAgZnJlZShwKTsKLSAgICB9Ci19
Ci0KLXZvaWQgKm1lbV9BbGxvYyhNZW1vcnlQb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBzdHJ1Y3QgY2h1bmsgKmNoOwotICAgIHZvaWQgKnJ2ID0gKHZvaWQgKilwb29sLT5mcmVlOwot
ICAgIHNpemUgPSAoc2l6ZSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOwot
ICAgIGlmIChzaXplIDw9IDApIHNpemUgPSBwb29sLT5hbGlnbm1hc2s7Ci0gICAgcG9vbC0+ZnJl
ZSArPSBzaXplOwotICAgIGlmIChwb29sLT5mcmVlID4gcG9vbC0+ZW5kIHx8IHBvb2wtPmZyZWUg
PCAodWludHB0cl90KXJ2KSB7Ci0gICAgICAgIHNpemVfdCBtaW5yZXEgPSAoc2l6ZSArIHNpemVv
ZihzdHJ1Y3QgY2h1bmspICsgcG9vbC0+YWxpZ25tYXNrKQotICAgICAgICAgICAgICAgICAgICAg
ICYgfnBvb2wtPmFsaWdubWFzazsKLSAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpcnY7
Ci0gICAgICAgIGlmIChtaW5yZXEgPj0gcG9vbC0+Y2h1bmtzaXplKSB7Ci0gICAgICAgICAgICAv
LyByZXF1ZXN0IHNpemUgaXMgdG9vIGJpZyBmb3IgdGhlIGNodW5rc2l6ZSwgc28gYWxsb2NhdGUg
aXQgYXMKLSAgICAgICAgICAgIC8vIGEgc2luZ2xlIGNodW5rIG9mIHRoZSByaWdodCBzaXplCi0g
ICAgICAgICAgICBjaCA9IG1hbGxvYyhtaW5yZXEpOwotICAgICAgICAgICAgaWYgKCFjaCkgcmV0
dXJuIDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaCA9IG1hbGxvYyhwb29sLT5j
aHVua3NpemUpOwotICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICBw
b29sLT5mcmVlID0gKHVpbnRwdHJfdCljaCArIG1pbnJlcTsKLSAgICAgICAgICAgIHBvb2wtPmVu
ZCA9ICh1aW50cHRyX3QpY2ggKyBwb29sLT5jaHVua3NpemU7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2gtPm5leHQgPSBwb29sLT5uZXh0OwotICAgICAgICBwb29sLT5uZXh0ID0gY2g7Ci0gICAgICAg
IHJ2ID0gKHZvaWQgKikoKCh1aW50cHRyX3QpKGNoKzEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5w
b29sLT5hbGlnbm1hc2spOwotICAgIH0KLSAgICByZXR1cm4gcnY7Ci19Ci0KLWludCBtZW1fQWRk
Q2xlYW51cChNZW1vcnlQb29sICpwb29sLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykg
ewotICAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOwotCi0gICAgcG9vbC0+ZnJlZSA9IChwb29s
LT5mcmVlICsgc2l6ZW9mKHZvaWQgKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQgKiktMSk7Ci0gICAg
Y2xlYW51cCA9IG1lbV9BbGxvYyhwb29sLCBzaXplb2Yoc3RydWN0IGNsZWFudXApKTsKLSAgICBp
ZiAoIWNsZWFudXApIHJldHVybiAtMTsKLSAgICBjbGVhbnVwLT5uZXh0ID0gcG9vbC0+Y2xlYW51
cDsKLSAgICBjbGVhbnVwLT5mbiA9IGZuOwotICAgIGNsZWFudXAtPmFyZyA9IGFyZzsKLSAgICBw
b29sLT5jbGVhbnVwID0gY2xlYW51cDsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmNhZGIzLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
LUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJl
LgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLSNpZm5kZWYg
X19NRU1PUllfSAotI2RlZmluZSBfX01FTU9SWV9ICi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQot
dHlwZWRlZiBzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKLQotZXh0ZXJuIE1lbW9y
eVBvb2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGln
bik7Ci1leHRlcm4gdm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5UG9vbCAqKTsKLWV4dGVybiB2b2lk
ICptZW1fQWxsb2MoTWVtb3J5UG9vbCAqcCwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIHZvaWQgKm1l
bV9SZWFsbG9jKE1lbW9yeVBvb2wgKnAsIHZvaWQgKm9sZCwgc2l6ZV90IG9sZHNpemUsIHNpemVf
dCBuZXdzaXplKTsKLWV4dGVybiBpbnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcCwgdm9p
ZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcpOwotCi0jZW5kaWYgLyogX19NRU1PUllfSCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFhNzVhOWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaAorKysgL2Rldi9udWxs
CkBAIC0xLDgyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESUFHTk9TVElDU19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElB
R05PU1RJQ1NfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0
cnVjdCBTb3VyY2VMb2NhdGlvbjsKLQotLy8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5nIGRpYWdu
b3N0aWMgbWVzc2FnZXMuCi0vLyBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBm
b3JtYXR0aW5nIGFuZCBwcmludGluZyB0aGUgbWVzc2FnZXMuCi1jbGFzcyBEaWFnbm9zdGljcwot
ewotICBwdWJsaWM6Ci0gICAgZW51bSBTZXZlcml0eQotICAgIHsKLSAgICAgICAgRVJST1IsCi0g
ICAgICAgIFdBUk5JTkcKLSAgICB9OwotICAgIGVudW0gSUQKLSAgICB7Ci0gICAgICAgIEVSUk9S
X0JFR0lOLAotICAgICAgICBJTlRFUk5BTF9FUlJPUiwKLSAgICAgICAgT1VUX09GX01FTU9SWSwK
LSAgICAgICAgSU5WQUxJRF9DSEFSQUNURVIsCi0gICAgICAgIElOVkFMSURfTlVNQkVSLAotICAg
ICAgICBJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgIERJVklTSU9OX0JZX1pFUk8sCi0gICAg
ICAgIEVPRl9JTl9DT01NRU5ULAotICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICBV
TkVYUEVDVEVEX1RPS0VOLAotICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAg
ICBNQUNST19OQU1FX1JFU0VSVkVELAotICAgICAgICBNQUNST19SRURFRklORUQsCi0gICAgICAg
IE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1VO
REVGSU5FRCwKLSAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAg
IE1BQ1JPX1RPT19GRVdfQVJHUywKLSAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKLSAgICAg
ICAgQ09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxT
RV9XSVRIT1VUX0lGLAotICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCi0gICAg
ICAgIENPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJ
Rl9BRlRFUl9FTFNFLAotICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAgICAg
IElOVkFMSURfRVhURU5TSU9OX05BTUUsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFW
SU9SLAotICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFM
SURfVkVSU0lPTl9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCi0g
ICAgICAgIElOVkFMSURfTElORV9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfRklMRV9OVU1CRVIs
Ci0gICAgICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCi0gICAgICAgIEVSUk9SX0VORCwKLQot
ICAgICAgICBXQVJOSU5HX0JFR0lOLAotICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RP
S0VOLAotICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAgICBXQVJOSU5HX0VORAot
ICAgIH07Ci0KLSAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOwotCi0gICAgdm9pZCByZXBvcnQo
SUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0
KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgU2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOwotCi0gICAg
dmlydHVhbCB2b2lkIHByaW50KElEIGlkLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NC
YXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdiMzI1NDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIK
LQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1EaWFnbm9zdGljczo6
fkRpYWdub3N0aWNzKCkKLXsKLX0KLQotdm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgLy8g
VE9ETyhhbG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgotICAgIHBy
aW50KGlkLCBsb2MsIHRleHQpOwotfQotCi1EaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3Rp
Y3M6OnNldmVyaXR5KElEIGlkKQotewotICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlk
IDwgRVJST1JfRU5EKSkKLSAgICAgICAgcmV0dXJuIEVSUk9SOwotCi0gICAgaWYgKChpZCA+IFdB
Uk5JTkdfQkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKLSAgICAgICAgcmV0dXJuIFdBUk5J
Tkc7Ci0KLSAgICBhc3NlcnQoZmFsc2UpOwotICAgIHJldHVybiBFUlJPUjsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYWVlYzIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGly
ZWN0aXZlSGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hf
Ci0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFNvdXJjZUxvY2F0
aW9uOwotCi0vLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgotLy8gUHJlcHJv
Y2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFp
bgotLy8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9u
c2libGUgZm9yCi0vLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KLWNs
YXNzIERpcmVjdGl2ZUhhbmRsZXIKLXsKLSAgcHVibGljOgotICAgIHZpcnR1YWwgfkRpcmVjdGl2
ZUhhbmRsZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VM
b2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbXNnKSA9IDA7Ci0KLSAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEg
bmFtZVsodmFsdWUpXQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNl
TG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNv
bnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IGhhbmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNl
IHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkxZTFjLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5oIgotCi1uYW1lc3BhY2Ug
cHAKLXsKLQotRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVjdGl2ZUhhbmRsZXIoKQotewotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQ
YXJzZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODVhOTBlLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTkgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKLQotI2luY2x1ZGUg
PGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5j
bHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCi0jaW5j
bHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgotI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKLSNp
bmNsdWRlICJUb2tlbi5oIgotI2luY2x1ZGUgIlRva2VuaXplci5oIgotCi1uYW1lc3BhY2Ugewot
ZW51bSBEaXJlY3RpdmVUeXBlCi17Ci0gICAgRElSRUNUSVZFX05PTkUsCi0gICAgRElSRUNUSVZF
X0RFRklORSwKLSAgICBESVJFQ1RJVkVfVU5ERUYsCi0gICAgRElSRUNUSVZFX0lGLAotICAgIERJ
UkVDVElWRV9JRkRFRiwKLSAgICBESVJFQ1RJVkVfSUZOREVGLAotICAgIERJUkVDVElWRV9FTFNF
LAotICAgIERJUkVDVElWRV9FTElGLAotICAgIERJUkVDVElWRV9FTkRJRiwKLSAgICBESVJFQ1RJ
VkVfRVJST1IsCi0gICAgRElSRUNUSVZFX1BSQUdNQSwKLSAgICBESVJFQ1RJVkVfRVhURU5TSU9O
LAotICAgIERJUkVDVElWRV9WRVJTSU9OLAotICAgIERJUkVDVElWRV9MSU5FCi19OwotfSAgLy8g
bmFtZXNwYWNlCi0KLXN0YXRpYyBEaXJlY3RpdmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6
VG9rZW4qIHRva2VuKQotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
RGVmaW5lKCJkZWZpbmUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZVVuZGVmKCJ1bmRlZiIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
SWYoImlmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigi
aWZkZWYiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigi
aWZuZGVmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJl
bHNlIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlm
Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYi
KTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIp
OwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEi
KTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0
ZW5zaW9uIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9u
KCJ2ZXJzaW9uIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5l
KCJsaW5lIik7Ci0KLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVS
KQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Ci0KLSAgICBpZiAodG9rZW4tPnZhbHVl
ID09IGtEaXJlY3RpdmVEZWZpbmUpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfREVGSU5FOwot
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCi0gICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfVU5ERUY7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJl
Y3RpdmVJZikKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRjsKLSAgICBlbHNlIGlmICh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlmZGVmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lG
REVGOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQotICAg
ICAgICByZXR1cm4gRElSRUNUSVZFX0lGTkRFRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZUVsc2UpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRUxTRTsKLSAgICBl
bHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCi0gICAgICAgIHJldHVybiBE
SVJFQ1RJVkVfRUxJRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVu
ZGlmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VORElGOwotICAgIGVsc2UgaWYgKHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVJS
T1I7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCi0gICAg
ICAgIHJldHVybiBESVJFQ1RJVkVfUFJBR01BOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9
PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VYVEVOU0lP
TjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24pCi0gICAg
ICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZUxpbmUpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfTElORTsKLQotICAg
IHJldHVybiBESVJFQ1RJVkVfTk9ORTsKLX0KLQotc3RhdGljIGJvb2wgaXNDb25kaXRpb25hbERp
cmVjdGl2ZShEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSkKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGl2
ZSkKLSAgICB7Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRjoKLSAgICAgIGNhc2UgRElSRUNUSVZF
X0lGREVGOgotICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgotICAgICAgY2FzZSBESVJFQ1RJ
VkVfRUxTRToKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6Ci0gICAgICBjYXNlIERJUkVDVElW
RV9FTkRJRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIHJl
cHJlc2VudHMgRW5kIE9mIERpcmVjdGl2ZS4KLXN0YXRpYyBib29sIGlzRU9EKGNvbnN0IHBwOjpU
b2tlbiogdG9rZW4pCi17Ci0gICAgcmV0dXJuICh0b2tlbi0+dHlwZSA9PSAnXG4nKSB8fCAodG9r
ZW4tPnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUKTsKLX0KLQotc3RhdGljIHZvaWQgc2tpcFVudGls
RU9EKHBwOjpMZXhlciogbGV4ZXIsIHBwOjpUb2tlbiogdG9rZW4pCi17Ci0gICAgd2hpbGUoIWlz
RU9EKHRva2VuKSkKLSAgICB7Ci0gICAgICAgIGxleGVyLT5sZXgodG9rZW4pOwotICAgIH0KLX0K
LQotc3RhdGljIGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSkKLXsKLSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSByZXNlcnZlZC4KLSAg
ICBpZiAobmFtZS5zdWJzdHIoMCwgMykgPT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gTmFtZXMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJl
IHJlc2VydmVkLgotICAgIGlmIChuYW1lLmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMg
Ym9vbCBpc01hY3JvUHJlZGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpNYWNyb1NldCYgbWFjcm9TZXQpCi17Ci0g
ICAgcHA6Ok1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFjcm9TZXQuZmluZChuYW1l
KTsKLSAgICByZXR1cm4gaXRlciAhPSBtYWNyb1NldC5lbmQoKSA/IGl0ZXItPnNlY29uZC5wcmVk
ZWZpbmVkIDogZmFsc2U7Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBEZWZpbmVkUGFy
c2VyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBEZWZpbmVkUGFyc2VyKExleGVy
KiBsZXhlciwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvU2V0KiBtYWNyb1NldCwKLSAg
ICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgotICAgICAgICBtTGV4
ZXIobGV4ZXIpLAotICAgICAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAotICAgICAgICBtRGlhZ25v
c3RpY3MoZGlhZ25vc3RpY3MpCi0gICAgewotICAgIH0KLQotICBwcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RlZmluZWQoImRlZmluZWQiKTsKLQotICAgICAgICBtTGV4ZXItPmxleCh0
b2tlbik7Ci0gICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRva2VuLT52YWx1ZSAhPSBrRGVmaW5lZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBib29sIHBhcmVuID0gZmFsc2U7Ci0gICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKLSAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcoJykK
LSAgICAgICAgewotICAgICAgICAgICAgcGFyZW4gPSB0cnVlOwotICAgICAgICAgICAgbUxleGVy
LT5sZXgodG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAg
IHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+
ZmluZCh0b2tlbi0+dmFsdWUpOwotICAgICAgICBzdGQ6OnN0cmluZyBleHByZXNzaW9uID0gaXRl
ciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gIjEiIDogIjAiOwotCi0gICAgICAgIGlmIChwYXJlbikK
LSAgICAgICAgewotICAgICAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOwotICAgICAgICAgICAg
aWYgKHRva2VuLT50eXBlICE9ICcpJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFdlIGhhdmUgYSB2YWxpZCBkZWZpbmVkIG9wZXJhdG9yLgotICAgICAgICAvLyBDb252ZXJ0
IHRoZSBjdXJyZW50IHRva2VuIGludG8gYSBDT05TVF9JTlQgdG9rZW4uCi0gICAgICAgIHRva2Vu
LT50eXBlID0gVG9rZW46OkNPTlNUX0lOVDsKLSAgICAgICAgdG9rZW4tPnZhbHVlID0gZXhwcmVz
c2lvbjsKLSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAgICBMZXhlciogbUxleGVyOwotICAgIGNvbnN0
IE1hY3JvU2V0KiBtTWFjcm9TZXQ7Ci0gICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKLX07
Ci0KLURpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGly
ZWN0aXZlSGFuZGxlcikgOgotICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKLSAgICBtTWFjcm9T
ZXQobWFjcm9TZXQpLAotICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCi0gICAgbURpcmVj
dGl2ZUhhbmRsZXIoZGlyZWN0aXZlSGFuZGxlcikKLXsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJz
ZXI6OmxleChUb2tlbiogdG9rZW4pCi17Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9I
QVNIKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghbUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1D
b25kaXRpb25hbFN0YWNrLmJhY2soKTsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5URVJNSU5BVEVELAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxvY2F0aW9uLCBibG9jay50eXBlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICB9IHdoaWxl
IChza2lwcGluZygpIHx8ICh0b2tlbi0+dHlwZSA9PSAnXG4nKSk7Ci19Ci0KLXZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KHRv
a2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7Ci0gICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4pOwot
Ci0gICAgLy8gV2hpbGUgaW4gYW4gZXhjbHVkZWQgY29uZGl0aW9uYWwgYmxvY2svZ3JvdXAsCi0g
ICAgLy8gd2Ugb25seSBwYXJzZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzLgotICAgIGlmIChza2lw
cGluZygpICYmICFpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKGRpcmVjdGl2ZSkpCi0gICAgewotICAg
ICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgc3dpdGNoKGRpcmVjdGl2ZSkKLSAgICB7Ci0gICAgICBjYXNlIERJUkVDVElW
RV9OT05FOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RElSRUNU
SVZFX0lOVkFMSURfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0RFRklORToKLSAg
ICAgICAgcGFyc2VEZWZpbmUodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElS
RUNUSVZFX1VOREVGOgotICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRjoKLSAgICAgICAgcGFyc2VJZih0b2tlbik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6Ci0gICAgICAgIHBhcnNlSWZk
ZWYodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoK
LSAgICAgICAgcGFyc2VJZm5kZWYodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RElSRUNUSVZFX0VMU0U6Ci0gICAgICAgIHBhcnNlRWxzZSh0b2tlbik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKLSAgICAgICAgcGFyc2VFbGlmKHRva2VuKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9FTkRJRjoKLSAgICAgICAgcGFy
c2VFbmRpZih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfRVJS
T1I6Ci0gICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRElSRUNUSVZFX1BSQUdNQToKLSAgICAgICAgcGFyc2VQcmFnbWEodG9rZW4pOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VYVEVOU0lPTjoKLSAgICAgICAgcGFyc2VF
eHRlbnNpb24odG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX1ZF
UlNJT046Ci0gICAgICAgIHBhcnNlVmVyc2lvbih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBESVJFQ1RJVkVfTElORToKLSAgICAgICAgcGFyc2VMaW5lKHRva2VuKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwot
ICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6TEFTVCkKLSAgICB7Ci0gICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAg
fQotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQot
ewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOwot
Ci0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9r
ZW46OklERU5USUZJRVIpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChpc01hY3JvUHJlZGVmaW5lZCh0b2tlbi0+dmFsdWUsICptTWFjcm9TZXQpKQotICAg
IHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURF
RklORURfUkVERUZJTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlz
TWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnZhbHVlKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19OQU1FX1JFU0VSVkVELAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNYWNybyBtYWNybzsKLSAgICBtYWNyby50eXBlID0g
TWFjcm86OmtUeXBlT2JqOwotICAgIG1hY3JvLm5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0KLSAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRv
a2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKLSAgICB7Ci0gICAgICAgIC8vIEZ1bmN0aW9uLWxpa2Ug
bWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgotICAgICAgICBtYWNyby50eXBlID0gTWFjcm86OmtU
eXBlRnVuYzsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKLSAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9i
YWNrKHRva2VuLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
ICAvLyBHZXQgJywnLgotICAgICAgICB9IHdoaWxlICh0b2tlbi0+dHlwZSA9PSAnLCcpOwotCi0g
ICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcpJy4K
LSAgICB9Ci0KLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9j
YXRpb24gYmVjYXVzZSBpdCBpcyB1bm5lY2Vzc2FyeSBpbiByZXBsYWNlbWVudAotICAgICAgICAv
LyBsaXN0LiBSZXNldHRpbmcgaXQgYWxzbyBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFs
cygpIHRvCi0gICAgICAgIC8vIGNvbXBhcmUgbWFjcm9zLgotICAgICAgICB0b2tlbi0+bG9jYXRp
b24gPSBTb3VyY2VMb2NhdGlvbigpOwotICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9i
YWNrKCp0b2tlbik7Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgfQotICAg
IGlmICghbWFjcm8ucmVwbGFjZW1lbnRzLmVtcHR5KCkpCi0gICAgewotICAgICAgICAvLyBXaGl0
ZXNwYWNlIHByZWNlZGluZyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpcyBub3QgY29uc2lkZXJlZCBw
YXJ0IG9mCi0gICAgICAgIC8vIHRoZSByZXBsYWNlbWVudCBsaXN0IGZvciBlaXRoZXIgZm9ybSBv
ZiBtYWNyby4KLSAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmZyb250KCkuc2V0SGFzTGVhZGlu
Z1NwYWNlKGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBmb3IgbWFjcm8gcmVkZWZpbml0
aW9uLgotICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5k
KG1hY3JvLm5hbWUpOwotICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgJiYgIW1hY3Jv
LmVxdWFscyhpdGVyLT5zZWNvbmQpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1JFREVGSU5FRCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNy
by5uYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtTWFjcm9TZXQtPmluc2VydChz
dGQ6Om1ha2VfcGFpcihtYWNyby5uYW1lLCBtYWNybykpOwotfQotCi12b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VVbmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX1VOREVGKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7Ci0gICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgIHsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1hY3JvU2V0OjppdGVyYXRvciBp
dGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7Ci0gICAgaWYgKGl0ZXIgIT0gbU1h
Y3JvU2V0LT5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChpdGVyLT5zZWNvbmQucHJlZGVmaW5l
ZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6Ok1BQ1JPX1BSRURFRklORURfVU5ERUZJTkVELAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbU1hY3JvU2V0LT5lcmFzZShpdGVyKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci19Ci0KLXZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpOwotICAgIHBhcnNlQ29uZGl0aW9u
YWxJZih0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmZGVmKFRva2Vu
KiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
SUZERUYpOwotICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERp
cmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGTkRFRik7Ci0gICAgcGFyc2VDb25kaXRpb25h
bElmKHRva2VuKTsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZShUb2tlbiog
dG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VM
U0UpOwotCi0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9XSVRI
T1VUX0lGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1D
b25kaXRpb25hbFN0YWNrLmJhY2soKTsKLSAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQotICAgIHsK
LSAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KLSAg
ICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCi0gICAgewotICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBibG9jay5mb3VuZEVsc2VHcm91cCA9IHRydWU7Ci0gICAg
YmxvY2suc2tpcEdyb3VwID0gYmxvY2suZm91bmRWYWxpZEdyb3VwOwotICAgIGJsb2NrLmZvdW5k
VmFsaWRHcm91cCA9IHRydWU7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSBleHRyYSB0b2tl
bnMgYWZ0ZXIgI2Vsc2UuCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAoIWlz
RU9EKHRva2VuKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgfQotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VFbGlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfRUxJRik7Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1w
dHkoKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpD
T05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1U
b2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbmRpdGlv
bmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgIGlmIChibG9j
ay5za2lwQmxvY2spCi0gICAgewotICAgICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lw
IHRoZSB3aG9sZSBsaW5lLgotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkK
LSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9FTElGX0FGVEVSX0VMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYmxvY2suZm91bmRW
YWxpZEdyb3VwKQotICAgIHsKLSAgICAgICAgLy8gRG8gbm90IHBhcnNlIHRoZSBleHByZXNzaW9u
LgotICAgICAgICAvLyBBbHNvIGJlIGNhcmVmdWwgbm90IHRvIGVtaXQgYSBkaWFnbm9zdGljLgot
ICAgICAgICBibG9jay5za2lwR3JvdXAgPSB0cnVlOwotICAgICAgICBza2lwVW50aWxFT0QobVRv
a2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGV4cHJl
c3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZih0b2tlbik7Ci0gICAgYmxvY2suc2tpcEdyb3VwID0g
ZXhwcmVzc2lvbiA9PSAwOwotICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24g
IT0gMDsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2Vu
KQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTkRJRik7
Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VU
X0lGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtQ29uZGl0aW9uYWxTdGFjay5wb3BfYmFjaygpOwot
Ci0gICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNlbmRpZi4KLSAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICghaXNFT0QodG9rZW4pKQotICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNU
RURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKFRva2VuKiB0b2tl
bikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVJST1Ip
OwotCi0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3RyZWFtIDw8ICp0b2tlbjsKLSAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB9Ci0gICAgbURpcmVjdGl2ZUhhbmRsZXIt
PmhhbmRsZUVycm9yKHRva2VuLT5sb2NhdGlvbiwgc3RyZWFtLnN0cigpKTsKLX0KLQotLy8gUGFy
c2VzIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0uCi12b2lkIERpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJl
Y3RpdmUodG9rZW4pID09IERJUkVDVElWRV9QUkFHTUEpOwotCi0gICAgZW51bSBTdGF0ZQotICAg
IHsKLSAgICAgICAgUFJBR01BX05BTUUsCi0gICAgICAgIExFRlRfUEFSRU4sCi0gICAgICAgIFBS
QUdNQV9WQUxVRSwKLSAgICAgICAgUklHSFRfUEFSRU4KLSAgICB9OwotCi0gICAgYm9vbCB2YWxp
ZCA9IHRydWU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7Ci0gICAgaW50IHN0YXRlID0g
UFJBR01BX05BTUU7Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIHdoaWxlICgo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaChzdGF0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBQ
UkFHTUFfTkFNRToKLSAgICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgICAgICAg
ICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIExFRlRfUEFSRU46Ci0gICAgICAgICAg
ICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6Ci0gICAgICAgICAgICB2YWx1ZSA9IHRv
a2VuLT52YWx1ZTsKLSAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09
IFRva2VuOjpJREVOVElGSUVSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
UklHSFRfUEFSRU46Ci0gICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9
PSAnKScpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0KLQotICAgIHZhbGlkID0gdmFsaWQgJiYg
KChzdGF0ZSA9PSBQUkFHTUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KLSAgICAgICAg
ICAgICAgICAgICAgICAoc3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZh
bHVlLgotICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsg
IC8vIFdpdGggdmFsdWUuCi0gICAgaWYgKCF2YWxpZCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOwotICAgIH0KLSAgICBl
bHNlIGlmIChzdGF0ZSA+IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkg
cHJhZ21hLgotICAgIHsKLSAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0
b2tlbi0+bG9jYXRpb24sIG5hbWUsIHZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERp
cmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VYVEVOU0lPTik7Ci0KLSAgICBlbnVtIFN0YXRl
Ci0gICAgewotICAgICAgICBFWFRfTkFNRSwKLSAgICAgICAgQ09MT04sCi0gICAgICAgIEVYVF9C
RUhBVklPUgotICAgIH07Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBzdGQ6OnN0cmlu
ZyBuYW1lLCBiZWhhdmlvcjsKLSAgICBpbnQgc3RhdGUgPSBFWFRfTkFNRTsKLQotICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAo
dG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0
ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFWFRfTkFNRToKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0VYVEVOU0lPTl9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZhbGlkKSBuYW1lID0g
dG9rZW4tPnZhbHVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDT0xPTjoK
LSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzonKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RVhUX0JFSEFWSU9SOgotICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6SURFTlRJRklFUikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHZhbGlkKSBiZWhhdmlvciA9IHRva2VuLT52YWx1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsaWQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAg
IHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAodmFs
aWQgJiYgKHN0YXRlICE9IEVYVF9CRUhBVklPUiArIDEpKQotICAgIHsKLSAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFs
dWUpOwotICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAg
ICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFeHRlbnNpb24odG9rZW4tPmxvY2F0aW9uLCBu
YW1lLCBiZWhhdmlvcik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24o
VG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9WRVJTSU9OKTsKLQotICAgIGVudW0gU3RhdGUKLSAgICB7Ci0gICAgICAgIFZFUlNJT05f
TlVNQkVSCi0gICAgfTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIGludCB2ZXJzaW9u
ID0gMDsKLSAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05VTUJFUjsKLQotICAgIG1Ub2tlbml6ZXIt
PmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VkFMSURfVkVSU0lPTl9OVU1CRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIHZlcnNpb24g
PSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURf
VE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJ
T05fTlVNQkVSICsgMSkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB2YWxpZCA9
IGZhbHNlOwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAgICAgIG1EaXJlY3RpdmVIYW5kbGVy
LT5oYW5kbGVWZXJzaW9uKHRva2VuLT5sb2NhdGlvbiwgdmVyc2lvbik7Ci19Ci0KLXZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXRE
aXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9MSU5FKTsKLQotICAgIGVudW0gU3RhdGUKLSAg
ICB7Ci0gICAgICAgIExJTkVfTlVNQkVSLAotICAgICAgICBGSUxFX05VTUJFUgotICAgIH07Ci0K
LSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAg
IGludCBzdGF0ZSA9IExJTkVfTlVNQkVSOwotCi0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFu
ZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKLSAgICBtYWNyb0V4cGFu
ZGVyLmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBMSU5FX05VTUJFUjoKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VkFMSURfTElORV9OVU1CRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIGxpbmUgPSBhdG9p
KHRva2VuLT52YWx1ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRklMRV9OVU1CRVI6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9
IFRva2VuOjpDT05TVF9JTlQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHZhbGlkKSBmaWxlID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHZh
bGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwotICAgIH0KLQotICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05V
TUJFUiArIDEpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfTElORV9ESVJFQ1RJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgdmFsaWQgPSBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHZhbGlkKQotICAgIHsKLSAgICAgICAgbVRva2VuaXplci0+c2V0TGlu
ZU51bWJlcihsaW5lKTsKLSAgICAgICAgaWYgKHN0YXRlID09IEZJTEVfTlVNQkVSICsgMSkgbVRv
a2VuaXplci0+c2V0RmlsZU51bWJlcihmaWxlKTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlyZWN0aXZl
UGFyc2VyOjpza2lwcGluZygpIGNvbnN0Ci17Ci0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVt
cHR5KCkpIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2Nr
ID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgIHJldHVybiBibG9jay5za2lwQmxvY2sg
fHwgYmxvY2suc2tpcEdyb3VwOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VDb25k
aXRpb25hbElmKFRva2VuKiB0b2tlbikKLXsKLSAgICBDb25kaXRpb25hbEJsb2NrIGJsb2NrOwot
ICAgIGJsb2NrLnR5cGUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgYmxvY2subG9jYXRpb24gPSB0b2tl
bi0+bG9jYXRpb247Ci0KLSAgICBpZiAoc2tpcHBpbmcoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRo
aXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9uYWwgZ3JvdXAK
LSAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0aGlzIHdob2xl
IGJsb2NrIGlzIHNraXBwZWQuCi0gICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRvIHBhcnNlIHRo
ZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gZW1pdCBhIGRp
YWdub3N0aWMuCi0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAg
ICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKLQotICAg
ICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7Ci0gICAgICAgIHN3aXRjaCAoZGlyZWN0aXZlKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6Ci0gICAgICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6Ci0gICAgICAgICAgICBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBESVJFQ1RJVkVfSUZOREVGOgotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhw
cmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24g
PT0gMDsKLSAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lvbiAhPSAwOwot
ICAgIH0KLSAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwotfQotCi1pbnQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pCi17Ci0gICAg
YXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwKLSAgICAgICAg
ICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKLQotICAgIERlZmlu
ZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGlj
cyk7Ci0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFyc2VyLCBtTWFj
cm9TZXQsIG1EaWFnbm9zdGljcyk7Ci0gICAgRXhwcmVzc2lvblBhcnNlciBleHByZXNzaW9uUGFy
c2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOwotCi0gICAgaW50IGV4cHJlc3Npb24g
PSAwOwotICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKLSAgICBleHByZXNzaW9uUGFyc2Vy
LnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0
b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0VPRCh0b2tlbikpCi0gICAg
ewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwotICAgIH0KLQotICAgIHJldHVybiBleHByZXNzaW9uOwotfQotCi1pbnQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNz
ZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRkRFRikgfHwKLSAgICAgICAg
ICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGTkRFRikpOwotCi0gICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5U
SUZJRVIpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBNYWNyb1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOwotICAgIGludCBl
eHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7Ci0KLSAgICAvLyBX
YXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCi0gICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAoIWlzRU9EKHRva2VuKSkKLSAgICB7Ci0gICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVD
VEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7
Ci0gICAgfQotICAgIHJldHVybiBleHByZXNzaW9uOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDExNWEwMWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXwotI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXwotCi0jaW5jbHVkZSAiTGV4ZXIuaCIK
LSNpbmNsdWRlICJNYWNyby5oIgotI2luY2x1ZGUgInBwX3V0aWxzLmgiCi0jaW5jbHVkZSAiU291
cmNlTG9jYXRpb24uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwot
Y2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKLWNsYXNzIFRva2VuaXplcjsKLQotY2xhc3MgRGlyZWN0
aXZlUGFyc2VyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBEaXJlY3RpdmVQYXJz
ZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBt
YWNyb1NldCwKLSAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAot
ICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAg
IFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOwotCi0gICAgdm9p
ZCBwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9r
ZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lk
IHBhcnNlSWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2Vu
KTsKLSAgICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUVs
c2UoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOwotICAg
IHZvaWQgcGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VFcnJvcihUb2tl
biogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lk
IHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZVZlcnNpb24oVG9r
ZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOwotCi0gICAgYm9v
bCBza2lwcGluZygpIGNvbnN0OwotICAgIHZvaWQgcGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0
b2tlbik7Ci0gICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbik7Ci0gICAgaW50
IHBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7Ci0KLSAgICBzdHJ1Y3QgQ29uZGl0
aW9uYWxCbG9jawotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgdHlwZTsKLSAgICAgICAgU291
cmNlTG9jYXRpb24gbG9jYXRpb247Ci0gICAgICAgIGJvb2wgc2tpcEJsb2NrOwotICAgICAgICBi
b29sIHNraXBHcm91cDsKLSAgICAgICAgYm9vbCBmb3VuZFZhbGlkR3JvdXA7Ci0gICAgICAgIGJv
b2wgZm91bmRFbHNlR3JvdXA7Ci0KLSAgICAgICAgQ29uZGl0aW9uYWxCbG9jaygpIDoKLSAgICAg
ICAgICAgIHNraXBCbG9jayhmYWxzZSksCi0gICAgICAgICAgICBza2lwR3JvdXAoZmFsc2UpLAot
ICAgICAgICAgICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKLSAgICAgICAgICAgIGZvdW5kRWxz
ZUdyb3VwKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHN0ZDo6dmVj
dG9yPENvbmRpdGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOwotICAgIFRva2VuaXplciog
bVRva2VuaXplcjsKLSAgICBNYWNyb1NldCogbU1hY3JvU2V0OwotICAgIERpYWdub3N0aWNzKiBt
RGlhZ25vc3RpY3M7Ci0gICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0RJUkVDVElWRV9QQVJTRVJfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhOWNlOS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NDAg
KzAsMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0K
LS8qIFNrZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJz
IGluIEMKLQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAy
MDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0g
ICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNw
ZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFp
bnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3Ry
aWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBh
cyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhl
IHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBz
a2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0g
ICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJl
bW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tl
bGV0b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNl
bnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhp
cyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRk
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2Yg
Qmlzb24uICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmlj
aGFyZCBTdGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQg
InNlbWFudGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNo
b3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2Vy
IG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJp
YWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9z
LgotICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVk
ZSBmaWxlcyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJl
IG5vdGVkICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0v
KiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlz
b24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2Vs
ZXRvbiBuYW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1
cmUgcGFyc2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4g
ICovCi0jZGVmaW5lIFlZTFNQX05FRURFRCAwCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxl
IGFuZCBmdW5jdGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmlu
ZSB5eWxleCAgIHBwbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwg
IHBwbHZhbAotI2RlZmluZSB5eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcK
LSNkZWZpbmUgeXluZXJycyBwcG5lcnJzCi0KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlU
T0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRv
IHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAg
IGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgVE9LX0NP
TlNUX0lOVCA9IDI1OCwKLSAgICAgVE9LX09QX09SID0gMjU5LAotICAgICBUT0tfT1BfQU5EID0g
MjYwLAotICAgICBUT0tfT1BfTkUgPSAyNjEsCi0gICAgIFRPS19PUF9FUSA9IDI2MiwKLSAgICAg
VE9LX09QX0dFID0gMjYzLAotICAgICBUT0tfT1BfTEUgPSAyNjQsCi0gICAgIFRPS19PUF9SSUdI
VCA9IDI2NSwKLSAgICAgVE9LX09QX0xFRlQgPSAyNjYsCi0gICAgIFRPS19VTkFSWSA9IDI2Nwot
ICAgfTsKLSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgVE9LX0NPTlNUX0lOVCAyNTgK
LSNkZWZpbmUgVE9LX09QX09SIDI1OQotI2RlZmluZSBUT0tfT1BfQU5EIDI2MAotI2RlZmluZSBU
T0tfT1BfTkUgMjYxCi0jZGVmaW5lIFRPS19PUF9FUSAyNjIKLSNkZWZpbmUgVE9LX09QX0dFIDI2
MwotI2RlZmluZSBUT0tfT1BfTEUgMjY0Ci0jZGVmaW5lIFRPS19PUF9SSUdIVCAyNjUKLSNkZWZp
bmUgVE9LX09QX0xFRlQgMjY2Ci0jZGVmaW5lIFRPS19VTkFSWSAyNjcKLQotCi0KLQotLyogQ29w
eSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIu
c2guIERPIE5PVCBFRElUIQotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLS8vIFRyaWdnZXJlZCBi
eSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3Rk
bGliPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2lu
Y2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQotI2lmIGRlZmluZWQoX01TQ19W
RVIpCi10eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKLSNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQK
LSNlbHNlCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci10eXBlZGVmIGludG1heF90IFlZU1RZUEU7Ci0j
ZW5kaWYgIC8vIF9NU0NfVkVSCi0jZGVmaW5lIFlZRU5BQkxFX05MUyAwCi0jZGVmaW5lIFlZTFRZ
UEVfSVNfVFJJVklBTCAxCi0jZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZGVmaW5lIFlZ
U1RZUEVfSVNfREVDTEFSRUQgMQotCi1uYW1lc3BhY2Ugewotc3RydWN0IENvbnRleHQKLXsKLSAg
ICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOwotICAgIHBwOjpMZXhlciogbGV4ZXI7Ci0g
ICAgcHA6OlRva2VuKiB0b2tlbjsKLSAgICBpbnQqIHJlc3VsdDsKLX07Ci19ICAvLyBuYW1lc3Bh
Y2UKLQotCi1zdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0
KTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVh
c29uKTsKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRl
ZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3Nh
Z2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NF
Ci0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVS
Qk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5k
ZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lm
ICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBl
ZGVmIGludCBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0j
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0vKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLyogTGluZSAyMTYgb2Yg
eWFjYy5jLiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0j
aWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0j
ZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZk
ZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFy
IHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2Vu
ZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBl
X3VpbnQxNjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2
OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5
dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5k
aWYKLQotI2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUg
WVlTSVpFX1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUg
WVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0j
IGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgot
Ci0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwot
IyBpZiBZWUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRs
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1z
Z2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlm
Ci0jIGlmbmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCi0jIGVuZGlmCi0jZW5k
aWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4g
ICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlV
U0UoZSkgKCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8K
LSNlbmRpZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5n
cyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUg
WVlJRChuKSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAo
aSkKLSAgICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsKLX0KLSNlbmRpZgotCi0jaWYg
ISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJzZXIg
aW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAg
Ki8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9D
QQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRp
bl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGlu
Y2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAg
ZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMg
ICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0j
ICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZp
bmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAg
ZGVmaW5lIF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBH
Q0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVF
KFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlT
VEFDS19BTExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9u
ZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBh
Z2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZl
bHkKLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNs
aWdodGx5IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVy
LWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNL
X0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlm
Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlT
VEFDS19GUkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRl
ZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBp
ZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKLSAgICAgICAm
JiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotCSAgICAgJiYgKGRl
ZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAot
IyAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZ
WU1BTExPQwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFs
bG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVk
IF9NU0NfVkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMg
ICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQg
X1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQg
ZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVu
ZGlmCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8
IFlZRVJST1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAg
ICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLQkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19U
UklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9w
ZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsK
LSAgeXl0eXBlX2ludDE2IHl5c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgfTsKLQotLyogVGhlIHNp
emUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBu
ZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlh
bGxvYykgLSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8g
aG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUg
WVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsg
c2l6ZW9mIChZWVNUWVBFKSkgXAotICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0vKiBD
b3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGlu
YXRpb24gZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZuZGVmIFlZQ09QWQotIyAgaWYgZGVm
aW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9t
LCBDb3VudCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBz
aXplb2YgKCooRnJvbSkpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENv
dW50KQkJXAotICAgICAgZG8JCQkJCVwKLQl7CQkJCQlcCi0JICBZWVNJWkVfVCB5eWk7CQkJCVwK
LQkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKLQkgICAgKFRvKVt5eWld
ID0gKEZyb20pW3l5aV07CQlcCi0JfQkJCQkJXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAg
ZW5kaWYKLSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9u
IHRvIHRoZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNU
QUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRo
ZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFj
ay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUg
bmV4dAotICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJ
CVwKLSAgICBkbwkJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWVlTSVpFX1QgeXluZXdi
eXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJ
XAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCi0JeXluZXdieXRlcyA9IHl5c3RhY2tz
aXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotCXl5cHRyICs9
IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0g
ICAgd2hpbGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1i
ZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMTQKLS8q
IFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAx
NzUKLQotLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZ
WU5UT0tFTlMgIDI3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0j
ZGVmaW5lIFlZTk5UUyAgMwotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNk
ZWZpbmUgWVlOUlVMRVMgIDI2Ci0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8K
LSNkZWZpbmUgWVlOU1RBVEVTICA1MgotCi0vKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24g
c3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRF
RlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAyNjcKLQotI2RlZmluZSBZWVRSQU5TTEFURShZ
WVgpCQkJCQkJXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFu
c2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNv
biBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIz
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMSwgICAgIDgsICAgICAyLAotICAgICAgMjUsICAg
IDI2LCAgICAxOSwgICAgMTcsICAgICAyLCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIsICAg
IDI0LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMjIKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAt
LSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAg
IFlZUkhTLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAg
ICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAg
ICAyMywgICAgMjcsCi0gICAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUx
LCAgICA1NSwgICAgNTksICAgIDYzLCAgICA2NywKLSAgICAgIDcxLCAgICA3NSwgICAgNzksICAg
IDgyLCAgICA4NSwgICAgODgsICAgIDkxCi19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJh
dGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5cmhzW10gPQotewotICAgICAgMjgsICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAg
MywgICAgLTEsICAgIDI5LCAgICAgNCwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgICA1LCAg
ICAyOSwgICAgLTEsICAgIDI5LCAgICAgNiwgICAgMjksICAgIC0xLCAgICAyOSwKLSAgICAgICA3
LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDks
ICAgIDI5LAotICAgICAgLTEsICAgIDI5LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAg
MTMsICAgIDI5LCAgICAtMSwgICAgMjksCi0gICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwg
ICAgMTIsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDExLCAgICAyOSwKLSAgICAgIC0xLCAgICAy
OSwgICAgMTUsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5
LAotICAgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAyMSwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAxOSwgICAgMjksICAgIC0xLCAgICAyMywKLSAgICAgIDI5LCAgICAtMSwgICAg
MjQsICAgIDI5LCAgICAtMSwgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAotICAg
ICAgLTEsICAgIDI1LCAgICAyOSwgICAgMjYsICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0g
LS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtdID0KLXsKLSAgICAgICAwLCAgICA4OSwg
ICAgODksICAgIDk2LCAgICA5NywgICAxMDAsICAgMTAzLCAgIDEwNiwgICAxMDksICAgMTEyLAot
ICAgICAxMTUsICAgMTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LCAgIDEzMCwgICAxMzMsICAgMTM2
LCAgIDEzOSwgICAxNDIsCi0gICAgIDE1NSwgICAxNjgsICAgMTcxLCAgIDE3NCwgICAxNzcsICAg
MTgwLCAgIDE4MwotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0Ug
fHwgWVlUT0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBv
ZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwg
c3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNo
YXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQi
LCAiVE9LX0NPTlNUX0lOVCIsICJUT0tfT1BfT1IiLAotICAiVE9LX09QX0FORCIsICInfCciLCAi
J14nIiwgIicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VRIiwgIic8JyIsCi0gICInPiciLCAi
VE9LX09QX0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklHSFQiLCAiVE9LX09QX0xFRlQiLCAi
JysnIiwKLSAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJUT0tfVU5BUlkiLCAiJyEnIiwg
Iid+JyIsICInKCciLCAiJyknIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIs
IDAKLX07Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1d
IC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxF
WC1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0g
ICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQs
ICAgIDM4LCAgIDI2MSwKLSAgICAgMjYyLCAgICA2MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAy
NjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAotICAgICAgNDcsICAgIDM3LCAgIDI2Nywg
ICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKLX07Ci0jIGVuZGlmCi0KLS8qIFlZUjFbWVlOXSAt
LSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5n
IHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAgICAg
IDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMKLX07Ci0KLS8qIFlZ
REVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0
ZQotICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVs
c2UgdG8gZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDAsICAgICAz
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgMjUs
Ci0gICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAg
ICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAgIDE1LCAgICAxNiwgICAgMTgsICAg
IDE3LCAgICAyMSwKLSAgICAgIDIwLCAgICAxOQotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5V
TV0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAg
IC0xLCAgICAgNywgICAgIDgKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGlu
IFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNk
ZWZpbmUgWVlQQUNUX05JTkYgLTExCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtd
ID0KLXsKLSAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2
LCAgICAxMiwgICAgNjgsICAgLTExLAotICAgICAtMTEsICAgLTExLCAgIC0xMSwgICAgMjcsICAg
LTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCi0gICAgICA0NiwgICAgNDYs
ICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwK
LSAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAgICA4NSwgICAxMDEsICAgMTE2LCAgIDEz
MCwgICAxNDMsICAgMTU0LAotICAgICAxNTQsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgLTEwLCAg
ICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEsCi0gICAgIC0xMSwgICAtMTEKLX07Ci0K
LS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlw
Z290b1tdID0KLXsKLSAgICAgLTExLCAgIC0xMSwgICAgLTIKLX07Ci0KLS8qIFlZVEFCTEVbWVlQ
QUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgotICAg
cG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxl
IHdoaWNoCi0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURF
RkFDVCBzYXlzLgotICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmlu
ZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0K
LXsKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAxNCwgICAgMzQsICAgIDM1
LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwKLSAg
ICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IDE3LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCi19Owot
Ci1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAgICAgICAyLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LAotICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgIDMsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIzLAotICAgICAgMjQs
ICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsCi0gICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA2LCAgICAgNywgICAgIDgs
Ci0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgOCwgICAgIDksCi0gICAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCi19OwotCi0vKiBZWVNUT1NbU1RBVEUt
TlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3ltYm9s
IG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rv
c1tdID0KLXsKLSAgICAgICAwLCAgICAgMywgICAgMTcsICAgIDE4LCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyOCwgICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjkKLX07
Ci0KLSNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmlu
CSh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZCQkoLTIpCi0jZGVmaW5lIFlZRU9G
CQkwCi0KLSNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JU
CQlnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCi0KLQot
LyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVy
ZSB0ZW1wb3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5p
bmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxh
bnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwJCWdvdG8g
eXllcnJsYWIKLQotI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNk
ZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAotZG8JCQkJCQkJCVwKLSAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAg
ICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJ
XAotICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCi0gICAgICBZWVBP
UFNUQUNLICgxKTsJCQkJCQlcCi0gICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKLSAgICB9CQkJ
CQkJCQlcCi0gIGVsc2UJCQkJCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAgICB5eWVycm9yIChj
b250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZ
RVJST1I7CQkJCQkJCVwKLSAgICB9CQkJCQkJCQlcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2Rl
ZmluZSBZWVRFUlJPUgkxCi0jZGVmaW5lIFlZRVJSQ09ERQkyNTYKLQotCi0vKiBZWUxMT0NfREVG
QVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KLSAgIElm
IE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5k
cwotICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwot
Ci0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxMT0NfREVG
QVVMVAotIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCi0gICAg
ZG8JCQkJCQkJCQlcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCku
Zmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAotCSAgKEN1cnJl
bnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAotCSAg
KEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwK
LQkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVt
bjsJXAotCX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAo
Q3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKLQkgICAg
WVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfY29s
dW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCku
bGFzdF9jb2x1bW47CQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2Vu
ZGlmCi0KLQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRo
ZSBzdHJlYW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVm
aW5lIG9ubHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRo
ZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9O
X1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BS
SU5UKEZpbGUsIExvYykJCQlcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJ
XAotCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAotCSAgICAg
IChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQotIyBlbHNlCi0jICBkZWZpbmUg
WVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYK
LQotCi0vKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRz
LiAgKi8KLQotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZh
bCwgWVlMRVhfUEFSQU0pCi0jZWxzZQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNv
bnRleHQpCi0jZW5kaWYKLQotLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwot
I2lmIFlZREVCVUcKLQotIyBpZm5kZWYgWVlGUFJJTlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZw
cmludGYKLSMgZW5kaWYKLQotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAotZG8gewkJCQkJ
CVwKLSAgaWYgKHl5ZGVidWcpCQkJCQlcCi0gICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKLX0gd2hp
bGUgKFlZSUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikJCQkgIFwKLWRvIHsJCQkJCQkJCQkgIFwKLSAgaWYgKHl5ZGVidWcpCQkJ
CQkJCQkgIFwKLSAgICB7CQkJCQkJCQkJICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVz
ICIsIFRpdGxlKTsJCQkJCSAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJ
ICBcCi0JCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7CQkJCQkJICBcCi0gICAgfQkJCQkJCQkJCSAgXAotfSB3aGlsZSAoWVlJRCAoMCkp
Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBz
eW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwg
aW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250
ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGlu
dCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIENvbnRl
eHQgKmNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47Ci0g
IFlZVVNFIChjb250ZXh0KTsKLSMgaWZkZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9L
RU5TKQotICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXAp
OwotIyBlbHNlCi0gIFlZVVNFICh5eW91dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBl
KQotICAgIHsKLSAgICAgIGRlZmF1bHQ6Ci0JYnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VU
UFVULiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJv
bF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCi0gICAgRklMRSAq
eXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXA7Ci0gICAgQ29udGV4dCAqY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoeXl0eXBlIDwg
WVlOVE9LRU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFt
ZVt5eXR5cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAo
IiwgeXl0bmFtZVt5eXR5cGVdKTsKLQotICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiki
KTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0
ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0
aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50
MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9w
KQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2Vu
ZGlmCi17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0
b20gPD0gdG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0
b20pOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNL
X1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJ
CQkJCQlcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKLX0gd2hp
bGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJl
ZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
Ci0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRp
YyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250
ZXh0ICpjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNw
LCB5eXJ1bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgaW50IHl5cnVsZTsK
LSAgICBDb250ZXh0ICpjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5
cnVsZV07Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5
eXJ1bGVdOwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQg
KGxpbmUgJWx1KTpcbiIsCi0JICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1i
b2xzIGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlp
KyspCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7
Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5
eWldLAotCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0JCSAgICAgICAJ
CSAgICAgICAsIGNvbnRleHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9
Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAotZG8gewkJCQkJXAotICBp
ZiAoeXlkZWJ1ZykJCQkJXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRl
eHQpOyBcCi19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJz
ZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBw
YXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcg
Ki8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRp
dGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0
b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURF
QlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIn
cyBzdGFja3MuICAqLwotI2lmbmRlZglZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEgg
MjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBj
YW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRl
bnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBs
YXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJ
TVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmlu
aXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQ
VEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVSUk9S
X1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYm
IGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQot
LyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNo
YXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAg
IGNvbnN0IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3Ig
KHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1
cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAg
aWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05V
X1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlT
UkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdc
MCcgaW4KLSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hh
ciAqeXlzcmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMp
Ci0gICAgY2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0g
IGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hp
bGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJu
IHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8q
IENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5
IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3Vp
dGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90
aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9z
dHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1i
YWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAg
IG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRo
ZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5h
bWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09
ICciJykKLSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAq
eXlwID0geXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0Jc3dpdGNoICgqKyt5eXApCi0JICB7Ci0J
ICBjYXNlICdcJyc6Ci0JICBjYXNlICcsJzoKLQkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OwotCi0JICBjYXNlICdcXCc6Ci0JICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLQkgICAgICBnb3Rv
IGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0JICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0JICBkZWZh
dWx0OgotCSAgICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0JICAgIHl5
bisrOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnIic6Ci0JICAgIGlmICh5eXJlcykKLQkgICAg
ICB5eXJlc1t5eW5dID0gJ1wwJzsKLQkgICAgcmV0dXJuIHl5bjsKLQkgIH0KLSAgICBkb19ub3Rf
c3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0
cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVz
OwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBh
Ym91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RB
VEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhl
IHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAg
Y29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxk
IGJlCi0gICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5h
cnkgInN5bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFY
SU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8K
LXN0YXRpYyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlz
dGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBp
ZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7
Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7
Ci0gICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0p
OwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6
ZTE7Ci0gICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9S
X1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAg
ICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMg
dGhhdCBhcmUKLQkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRh
eCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAl
cyIpOwotIyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7
Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9
ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9y
ICVzIjsKLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotCQkgICAgKyBz
aXplb2YgeXlleHBlY3RpbmcgLSAxCi0JCSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFY
SU1VTSAtIDIpCi0JCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNv
bnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZ
TiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0JIFlZQ0hFQ0suICAq
LwotICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBT
dGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAg
IGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5
eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGlu
dCB5eWNvdW50ID0gMTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAg
ICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9y
ICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLQlpZiAoeXljaGVja1t5eXgg
KyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0JICB7Ci0JICAgIGlmICh5eWNvdW50
ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0JICAgICAgewotCQl5eWNvdW50ID0g
MTsKLQkJeXlzaXplID0geXlzaXplMDsKLQkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAt
IDFdID0gJ1wwJzsKLQkJYnJlYWs7Ci0JICAgICAgfQotCSAgICB5eWFyZ1t5eWNvdW50KytdID0g
eXl0bmFtZVt5eXhdOwotCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRu
YW1lW3l5eF0pOwotCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwot
CSAgICB5eXNpemUgPSB5eXNpemUxOwotCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlw
cmVmaXgpOwotCSAgICB5eXByZWZpeCA9IHl5b3I7Ci0JICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5
eWZvcm1hdCk7Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAg
ICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0g
eXlzaXplMTsKLQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLQlyZXR1cm4gWVlTSVpFX01B
WElNVU07Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLQl7Ci0JICAvKiBBdm9pZCBzcHJpbnRmLCBh
cyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0JICAgICBEb24ndCBo
YXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotCSAgICAgcHJv
ZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLQkgIGNo
YXIgKnl5cCA9IHl5cmVzdWx0OwotCSAgaW50IHl5aSA9IDA7Ci0JICB3aGlsZSAoKCp5eXAgPSAq
eXlmKSAhPSAnXDAnKQotCSAgICB7Ci0JICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9
PSAncycgJiYgeXlpIDwgeXljb3VudCkKLQkJewotCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwg
eXlhcmdbeXlpKytdKTsKLQkJICB5eWYgKz0gMjsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkg
IHl5cCsrOwotCQkgIHl5ZisrOwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgICByZXR1cm4geXlzaXpl
OwotICAgIH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUg
bWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVm
aW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVk
IF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVj
dCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250
ZXh0ICpjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0
eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQg
eXl0eXBlOwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0j
ZW5kaWYKLXsKLSAgWVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0gIGlm
ICgheXltc2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQgKHl5
bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5cGUp
Ci0gICAgewotCi0gICAgICBkZWZhdWx0OgotCWJyZWFrOwotICAgIH0KLX0KLQwKLQotLyogUHJl
dmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lmZGVmIFlZ
UEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMK
LWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAo
KTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4
dCk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0Vf
UEFSQU0gKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0t
LS0tLS0tKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0j
ZWxzZQotaW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFS
QU07Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAoQ29udGV4dCAqY29udGV4
dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgQ29udGV4dCAqY29udGV4dDsK
LSNlbmRpZgotI2VuZGlmCi17Ci0gIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQg
eXljaGFyOwotCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9s
LiAgKi8KLVlZU1RZUEUgeXlsdmFsOwotCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBm
YXIuICAqLwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGlu
dCB5eXJlc3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3Ig
bWVzc2FnZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVh
ZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAg
aW50IHl5dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVy
cm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1
ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxv
YyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhl
aXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzog
cmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2Nh
dGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJz
LCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUu
ICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZ
WUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50
MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZ
UEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZ
UEUgKnl5dnNwOwotCi0KLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwg
eXlzc3AgLT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0K
LSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9j
YXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZh
bDsKLQotCi0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1
Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9w
cGVkLiAgKi8KLSAgaW50IHl5bGVuID0gMDsKLQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFy
dGluZyBwYXJzZVxuIikpOwotCi0gIHl5c3RhdGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0g
IHl5bmVycnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBi
ZSByZWFkLiAgKi8KLQotICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0
ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0
aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUg
d2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5
eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBn
ZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJl
ZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICov
Ci0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlm
ICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0
aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAq
LwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5
b3ZlcmZsb3cKLSAgICAgIHsKLQkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0
aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0JICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0
IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwotCSAgIG1lbW9yeS4gICovCi0JWVlTVFlQRSAqeXl2
czEgPSB5eXZzOwotCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotCi0KLQkvKiBFYWNoIHN0
YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBk
YXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0J
ICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBt
aWdodAotCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5
b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUg
KiBzaXplb2YgKCp5eXNzcCksCi0JCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNw
KSwKLQotCQkgICAgJnl5c3RhY2tzaXplKTsKLQotCXl5c3MgPSB5eXNzMTsKLQl5eXZzID0geXl2
czE7Ci0gICAgICB9Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNL
X1JFTE9DQVRFCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBF
eHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9
IHl5c3RhY2tzaXplKQotCWdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAq
PSAyOwotICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLQl5eXN0YWNrc2l6ZSA9
IFlZTUFYREVQVEg7Ci0KLSAgICAgIHsKLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLQl1
bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0JICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9D
IChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotCWlmICghIHl5cHRyKQotCSAgZ290byB5
eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9D
QVRFICh5eXZzKTsKLQotIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQotCWlmICh5eXNzMSAhPSB5
eXNzYSkKLQkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlm
IC8qIG5vIHl5b3ZlcmZsb3cgKi8KLQotICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsK
LSAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7Ci0KLQotICAgICAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAotCQkgICh1bnNpZ25lZCBs
b25nIGludCkgeXlzdGFja3NpemUpKTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAt
IDEgPD0geXlzc3ApCi0JWVlBQk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
RW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwotCi0v
Ki0tLS0tLS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoK
LQotICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRl
LiAgUmVhZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0
IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0
byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXluID0g
eXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8geXlk
ZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRv
bid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBU
WSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hh
ciA9PSBZWUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcg
YSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNo
YXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9
Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0g
ICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwg
Jnl5bGxvYyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0
b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRh
a2UgdGhhdCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwg
WVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZh
dWx0OwotICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAg
ICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKLQlnb3RvIHl5ZXJybGFiOwot
ICAgICAgeXluID0gLXl5bjsKLSAgICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5
eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRl
ZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4g
ICovCi0gIGlmICh5eWVycnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0
IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmci
LCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVk
IHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAg
IHl5Y2hhciA9IFlZRU1QVFk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2
YWw7Ci0KLSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0
aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVm
YXVsdDoKLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBn
b3RvIHl5ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJl
ciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQot
ICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2Yg
dGhlIGFjdGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxv
d2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1
bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0
LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFy
c2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0
IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEt
eXlsZW5dOwotCi0KLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwotICBzd2l0Y2ggKHl5bikKLSAg
ICB7Ci0gICAgICAgIGNhc2UgMjoKLQotICAgIHsKLSAgICAgICAgKihjb250ZXh0LT5yZXN1bHQp
ID0gc3RhdGljX2Nhc3Q8aW50PigoeXl2c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICBZWUFDQ0VQ
VDsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDoKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30K
LSAgICBicmVhazsKLQotICBjYXNlIDU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSA2OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pIHwgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3
OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNw
WygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0p
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDEyOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5
eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0KLSAg
ICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPiAoeXl2c3BbKDMpIC0g
KDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDE2OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
LSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE4Ogot
Ci0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygz
KSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOToKLQotICAgIHsKLSAg
ICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgz
KV0pIDw8ICIgJSAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGlj
cy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwot
ICAgICAgICAgICAgWVlBQk9SVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgIH0K
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjA6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgo
eXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8g
IiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0g
c3RyZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAg
IFlZQUJPUlQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOwotICAgICAgICB9Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDIxOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyMjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgy
KV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAyNDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0p
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsKLSAgICAgICAgKHl5
dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyNjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAg
ICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5
eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5
bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9
IHl5dmFsOwotCi0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9u
LiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUg
c3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciByZWR1Y2Vk
IGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXlu
IC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9
IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0
YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlO
VE9LRU5TXTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9y
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWI6Ci0g
IC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMg
ZXJyb3IuICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXluZXJyczsK
LSNpZiAhIFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50
YXggZXJyb3IiKSk7Ci0jZWxzZQotICAgICAgewotCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4
X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwotCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAm
JiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKLQkgIHsKLQkgICAgWVlTSVpF
X1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7Ci0JICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAm
JiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0JICAgICAgeXlhbGxvYyA9IFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTTsKLQkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotCSAgICAg
IFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxM
T0MgKHl5YWxsb2MpOwotCSAgICBpZiAoeXltc2cpCi0JICAgICAgeXltc2dfYWxsb2MgPSB5eWFs
bG9jOwotCSAgICBlbHNlCi0JICAgICAgewotCQl5eW1zZyA9IHl5bXNnYnVmOwotCQl5eW1zZ19h
bGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLQkgICAgICB9Ci0JICB9Ci0KLQlpZiAoMCA8IHl5c2l6
ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCi0JICB7Ci0JICAgICh2b2lkKSB5eXN5bnRheF9l
cnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5
bXNnKTsKLQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3lu
dGF4IGVycm9yIikpOwotCSAgICBpZiAoeXlzaXplICE9IDApCi0JICAgICAgZ290byB5eWV4aGF1
c3RlZGxhYjsKLQkgIH0KLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotCi0KLSAgaWYgKHl5ZXJy
c3RhdHVzID09IDMpCi0gICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRv
IHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAq
LwotCi0gICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotCXsKLQkgIC8qIFJldHVybiBmYWlsdXJl
IGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0JICBpZiAoeXljaGFyID09IFlZRU9GKQotCSAgICBZ
WUFCT1JUOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2Nh
cmRpbmciLAotCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKLQkgIHl5Y2hhciA9
IFlZRU1QVFk7Ci0JfQotICAgIH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2st
YWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCi0gICAgIHRva2VuLiAgKi8KLSAg
Z290byB5eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0
bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwoteXllcnJvcmxhYjoKLQotICAvKiBQYWNpZnkgY29tcGlsZXJzIGxp
a2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCi0gICAgIFlZRVJST1IgYW5k
IHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKLSAg
ICAgY29kZS4gICovCi0gIGlmICgvKkNPTlNUQ09ORCovIDApCi0gICAgIGdvdG8geXllcnJvcmxh
YjsKLQotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBh
Y3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RBQ0sgKHl5
bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB5
eXN0YXRlID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJy
bGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRv
a2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAgIHsKLSAg
ICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYp
Ci0JewotCSAgeXluICs9IFlZVEVSUk9SOwotCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxB
U1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotCSAgICB7Ci0JICAgICAgeXluID0geXl0
YWJsZVt5eW5dOwotCSAgICAgIGlmICgwIDwgeXluKQotCQlicmVhazsKLQkgICAgfQotCX0KLQot
ICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0
aGUgZXJyb3IgdG9rZW4uICAqLwotICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0JWVlBQk9SVDsK
LQotCi0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1t5eXN0
YXRlXSwgeXl2c3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0
YXRlID0gKnl5c3NwOwotICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9
Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gICorK3l5dnNwID0g
eXlsdmFsOwotCi0KLSAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9M
X1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0
YXRlID0geXluOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRs
YWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAgZ290byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhl
cmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxh
YjoKLSAgeXlyZXN1bHQgPSAxOwotICBnb3RvIHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZs
b3cKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXho
YXVzdGVkbGFiOgotICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7
Ci0gIHl5cmVzdWx0ID0gMjsKLSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJl
dHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAg
eXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLQkJIHl5dG9rZW4s
ICZ5eWx2YWwsIGNvbnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0
aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFD
Q0VQVC4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3Ms
IHl5c3NwKTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0cnVj
dCAoIkNsZWFudXA6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4
dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAg
aWYgKHl5c3MgIT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lm
IFlZRVJST1JfVkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19G
UkVFICh5eW1zZyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0g
IHJldHVybiBZWUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotaW50IHl5bGV4KFlZU1RZUEUq
IGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQotewotICAgIGludCB0eXBlID0gMDsKLQotICAgIHBw
OjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKLSAgICBzd2l0Y2ggKHRva2VuLT50eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6Ci0gICAgICAgICpsdmFs
cCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOwotICAgICAgICB0eXBl
ID0gVE9LX0NPTlNUX0lOVDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9H
RTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6
IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hU
OiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9M
RUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOwotICAgICAgY2FzZSAnfCc6IHR5cGUgPSAn
fCc7IGJyZWFrOwotICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOwotICAgICAgY2Fz
ZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOwotICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJy
ZWFrOwotICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwotICAgICAgY2FzZSAnLSc6
IHR5cGUgPSAnLSc7IGJyZWFrOwotICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOwot
ICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOwotICAgICAgY2FzZSAnLyc6IHR5cGUg
PSAnLyc7IGJyZWFrOwotICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOwotICAgICAg
Y2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOwotICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7
IGJyZWFrOwotICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFrOwotICAgICAgY2FzZSAn
KSc6IHR5cGUgPSAnKSc7IGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0K
LSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2
YWxpZC4KLSAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKLQot
ICAgIHJldHVybiB0eXBlOwotfQotCi12b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29u
c3QgY2hhciogcmVhc29uKQotewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWFzb24pOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1FeHByZXNzaW9u
UGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3Rp
Y3MpCi17Ci19Ci0KLWJvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBp
bnQqIHJlc3VsdCkKLXsKLSAgICBDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5kaWFnbm9z
dGljcyA9IG1EaWFnbm9zdGljczsKLSAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOwotICAgIGNv
bnRleHQudG9rZW4gPSB0b2tlbjsKLSAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKLSAgICBp
bnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7Ci0gICAgc3dpdGNoIChyZXQpCi0gICAgewotICAg
ICAgY2FzZSAwOgotICAgICAgY2FzZSAxOgotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAy
OgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9S
WSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0ID09IDA7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MmQwNTkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCi0j
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwotCi0jaW5j
bHVkZSAicHBfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNz
OwotY2xhc3MgTGV4ZXI7Ci1zdHJ1Y3QgVG9rZW47Ci0KLWNsYXNzIEV4cHJlc3Npb25QYXJzZXIK
LXsKLSAgcHVibGljOgotICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpOwotCi0gICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCog
cmVzdWx0KTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihF
eHByZXNzaW9uUGFyc2VyKTsKLQotICAgIExleGVyKiBtTGV4ZXI7Ci0gICAgRGlhZ25vc3RpY3Mq
IG1EaWFnbm9zdGljczsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Np
b25QYXJzZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTdjOWYwNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkKKysrIC9kZXYvbnVsbApA
QCAtMSwyODEgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMg
dGhlIFlhY2MgZ3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbi4KLQot
SUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFy
c2VyLnNoLAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNz
aW9uIHBhcnNlci4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpZiBk
ZWZpbmVkKF9fR05VQ19fKQotLy8gVG9nZ2xlIHRoZSB3YXJuaW5nIGZvciAtV3ByYWdtYXMgdG8g
ZW5zdXJlIHdlIGRvIG5vdCBicmVhayB0aGUgYnVpbGQKLS8vIHdpdGggZWFybGllciBjb21waWxl
ciB2ZXJzaW9ucyBiZWNhdXNlIG9mIHVua25vd24gcHJhZ21hIG9wdGlvbnMuCi0jcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcHJhZ21hcyIKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0
by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VuaW5pdGlhbGl6ZWQiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
bWF5YmUtdW5pbml0aWFsaXplZCIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgd2FybmluZyAiLVdw
cmFnbWFzIgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MDY1IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKLQot
I2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFt
PgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJMZXhlci5oIgotI2luY2x1
ZGUgIlRva2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBfX2ludDY0IFlZ
U1RZUEU7Ci0jZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGlu
dC5oPgotdHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOwotI2VuZGlmICAvLyBfTVNDX1ZFUgotI2Rl
ZmluZSBZWUVOQUJMRV9OTFMgMAotI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2RlZmlu
ZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLQot
bmFtZXNwYWNlIHsKLXN0cnVjdCBDb250ZXh0Ci17Ci0gICAgcHA6OkRpYWdub3N0aWNzKiBkaWFn
bm9zdGljczsKLSAgICBwcDo6TGV4ZXIqIGxleGVyOwotICAgIHBwOjpUb2tlbiogdG9rZW47Ci0g
ICAgaW50KiByZXN1bHQ7Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0lfQotCi0lcHVyZS1wYXJzZXIK
LSVuYW1lLXByZWZpeD0icHAiCi0lcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9Ci0lbGV4
LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQotCi0lewotc3RhdGljIGludCB5eWxleChZWVNUWVBF
KiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0lfQotCi0ldG9rZW4gVE9LX0NPTlNUX0lO
VAotJWxlZnQgVE9LX09QX09SCi0lbGVmdCBUT0tfT1BfQU5ECi0lbGVmdCAnfCcKLSVsZWZ0ICde
JwotJWxlZnQgJyYnCi0lbGVmdCBUT0tfT1BfRVEgVE9LX09QX05FCi0lbGVmdCAnPCcgJz4nIFRP
S19PUF9MRSBUT0tfT1BfR0UKLSVsZWZ0IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAotJWxlZnQg
JysnICctJwotJWxlZnQgJyonICcvJyAnJScKLSVyaWdodCBUT0tfVU5BUlkKLQotJSUKLQotaW5w
dXQKLSAgICA6IGV4cHJlc3Npb24gewotICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0
aWNfY2FzdDxpbnQ+KCQxKTsKLSAgICAgICAgWVlBQ0NFUFQ7Ci0gICAgfQotOwotCi1leHByZXNz
aW9uCi0gICAgOiBUT0tfQ09OU1RfSU5UCi0gICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHBy
ZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSB8fCAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9u
IFRPS19PUF9BTkQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgJiYgJDM7Ci0gICAgfQot
ICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgfCAkMzsK
LSAgICB9Ci0gICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAk
MSBeICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24gewotICAgICAg
ICAkJCA9ICQxICYgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVz
c2lvbiB7Ci0gICAgICAgICQkID0gJDEgIT0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBU
T0tfT1BfRVEgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPT0gJDM7Ci0gICAgfQotICAg
IHwgZXhwcmVzc2lvbiBUT0tfT1BfR0UgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPj0g
JDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7Ci0gICAg
ICAgICQkID0gJDEgPD0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lv
biB7Ci0gICAgICAgICQkID0gJDEgPiAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICc8JyBl
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSA8ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Np
b24gVE9LX09QX1JJR0hUIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxID4+ICQzOwotICAg
IH0KLSAgICB8IGV4cHJlc3Npb24gVE9LX09QX0xFRlQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQk
ID0gJDEgPDwgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7Ci0g
ICAgICAgICQkID0gJDEgLSAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICcrJyBleHByZXNz
aW9uIHsKLSAgICAgICAgJCQgPSAkMSArICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyUn
IGV4cHJlc3Npb24gewotICAgICAgICBpZiAoJDMgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpz
dHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8
ICQzOwotICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJ
U0lPTl9CWV9aRVJPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT50b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQuY19zdHIoKSk7Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgJCQgPSAkMSAlICQzOwotICAgICAgICB9Ci0gICAgfQotICAg
IHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmICgkMyA9PSAwKSB7Ci0g
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0g
PDwgJDEgPDwgIiAvICIgPDwgJDM7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3Ry
ZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZ
QUJPUlQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkJCA9ICQxIC8gJDM7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKLSAgICAgICAg
JCQgPSAkMSAqICQzOwotICAgIH0KLSAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFS
WSB7Ci0gICAgICAgICQkID0gISAkMjsKLSAgICB9Ci0gICAgfCAnficgZXhwcmVzc2lvbiAlcHJl
YyBUT0tfVU5BUlkgewotICAgICAgICAkJCA9IH4gJDI7Ci0gICAgfQotICAgIHwgJy0nIGV4cHJl
c3Npb24gJXByZWMgVE9LX1VOQVJZIHsKLSAgICAgICAgJCQgPSAtICQyOwotICAgIH0KLSAgICB8
ICcrJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7Ci0gICAgICAgICQkID0gKyAkMjsKLSAg
ICB9Ci0gICAgfCAnKCcgZXhwcmVzc2lvbiAnKScgewotICAgICAgICAkJCA9ICQyOwotICAgIH0K
LTsKLQotJSUKLQotaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQot
ewotICAgIGludCB0eXBlID0gMDsKLQotICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50
b2tlbjsKLSAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgcHA6OlRv
a2VuOjpDT05TVF9JTlQ6Ci0gICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNf
c3RyKCksIE5VTEwsIDApOwotICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsg
YnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsg
YnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJy
ZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVh
azsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7
Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOwot
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVh
azsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJy
ZWFrOwotICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOwotICAgICAgY2FzZSAnXic6
IHR5cGUgPSAnXic7IGJyZWFrOwotICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOwot
ICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOwotICAgICAgY2FzZSAnPCc6IHR5cGUg
PSAnPCc7IGJyZWFrOwotICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwotICAgICAg
Y2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOwotICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7
IGJyZWFrOwotICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOwotICAgICAgY2FzZSAn
Kic6IHR5cGUgPSAnKic7IGJyZWFrOwotICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFr
OwotICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOwotICAgICAgY2FzZSAnKCc6IHR5
cGUgPSAnKCc7IGJyZWFrOwotICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOwotCi0g
ICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0
IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KLSAgICBpZiAodHlwZSAhPSAwKSBj
b250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKLQotICAgIHJldHVybiB0eXBlOwotfQotCi12b2lk
IHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIGNv
bnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJF
U1NJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwotfQot
Ci1uYW1lc3BhY2UgcHAgewotCi1FeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExl
eGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVy
KSwKLSAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCi17Ci19Ci0KLWJvb2wgRXhwcmVzc2lv
blBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKLXsKLSAgICBDb250ZXh0
IGNvbnRleHQ7Ci0gICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKLSAgICBj
b250ZXh0LmxleGVyID0gbUxleGVyOwotICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKLSAgICBj
b250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKLSAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7
Ci0gICAgc3dpdGNoIChyZXQpCi0gICAgewotICAgICAgY2FzZSAwOgotICAgICAgY2FzZSAxOgot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwot
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1Is
IHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmV0ID09IDA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
SW5wdXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2RlOTVmLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0lucHV0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaW5jbHVkZSAiSW5wdXQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRl
IDxjYXNzZXJ0PgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1JbnB1
dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQotewotfQotCi1JbnB1dDo6SW5wdXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KSA6Ci0gICAgbUNvdW50KGNvdW50KSwKLSAgICBtU3RyaW5nKHN0cmluZykKLXsKLSAgICBhc3Nl
cnQobUNvdW50ID49IDApOwotICAgIG1MZW5ndGgucmVzZXJ2ZShtQ291bnQpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbUNvdW50OyArK2kpCi0gICAgewotICAgICAgICBpbnQgbGVuID0gbGVu
Z3RoID8gbGVuZ3RoW2ldIDogLTE7Ci0gICAgICAgIG1MZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAg
PyBzdHJsZW4obVN0cmluZ1tpXSkgOiBsZW4pOwotICAgIH0KLX0KLQotaW50IElucHV0OjpyZWFk
KGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17Ci0gICAgaW50IG5SZWFkID0gMDsKLSAgICB3aGls
ZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCi0gICAg
ewotICAgICAgICBpbnQgc2l6ZSA9IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFkTG9j
LmNJbmRleDsKLSAgICAgICAgc2l6ZSA9IHN0ZDo6bWluKHNpemUsIG1heFNpemUpOwotICAgICAg
ICBtZW1jcHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9j
LmNJbmRleCwgc2l6ZSk7Ci0gICAgICAgIG5SZWFkICs9IHNpemU7Ci0gICAgICAgIG1SZWFkTG9j
LmNJbmRleCArPSBzaXplOwotCi0gICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNo
ZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0cmluZy4KLSAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRl
eCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCi0gICAgICAgIHsKLSAgICAgICAgICAgICsr
bVJlYWRMb2Muc0luZGV4OwotICAgICAgICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gblJlYWQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGFjNzM0Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hf
Ci0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwotCi0jaW5jbHVkZSA8dmVj
dG9yPgotCi1uYW1lc3BhY2UgcHAKLXsKLQotLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBM
ZXhlci4KLWNsYXNzIElucHV0Ci17Ci0gIHB1YmxpYzoKLSAgICBJbnB1dCgpOwotICAgIElucHV0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7Ci0KLSAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KLSAgICBjb25z
dCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsg
fQotICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4
XTsgfQotCi0gICAgaW50IHJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7Ci0KLSAgICBzdHJ1
Y3QgTG9jYXRpb24KLSAgICB7Ci0gICAgICAgIGludCBzSW5kZXg7ICAvLyBTdHJpbmcgaW5kZXg7
Ci0gICAgICAgIGludCBjSW5kZXg7ICAvLyBDaGFyIGluZGV4LgotCi0gICAgICAgIExvY2F0aW9u
KCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KLSAgICB9OwotICAgIGNvbnN0IExvY2F0aW9u
JiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KLQotICBwcml2YXRlOgotICAg
IC8vIElucHV0LgotICAgIGludCBtQ291bnQ7Ci0gICAgY29uc3QgY2hhciogY29uc3QqIG1TdHJp
bmc7Ci0gICAgc3RkOjp2ZWN0b3I8aW50PiBtTGVuZ3RoOwotCi0gICAgTG9jYXRpb24gbVJlYWRM
b2M7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJP
Q0VTU09SX0lOUFVUX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggN2M2NjNlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkxleGVy
LmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1MZXhlcjo6fkxleGVyKCkKLXsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWI4NWNlYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0xFWEVSX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwotCi1u
YW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFRva2VuOwotCi1jbGFzcyBMZXhlcgotewotICBwdWJs
aWM6Ci0gICAgdmlydHVhbCB+TGV4ZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4q
IHRva2VuKSA9IDA7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlMzA4OC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1
ZGUgIk1hY3JvLmgiCi0KLSNpbmNsdWRlICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQot
Ym9vbCBNYWNybzo6ZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1
cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKLSAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIubmFt
ZSkgJiYKLSAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYKLSAg
ICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwotfQotCi19ICAv
LyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdlYzAxNDkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAorKysgL2Rldi9udWxs
CkBAIC0xLDQ0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9NQUNST19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8K
LQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFRva2VuOwotCi1zdHJ1Y3QgTWFjcm8KLXsKLSAg
ICBlbnVtIFR5cGUKLSAgICB7Ci0gICAgICAgIGtUeXBlT2JqLAotICAgICAgICBrVHlwZUZ1bmMK
LSAgICB9OwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7
Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gUmVwbGFjZW1lbnRzOwotCi0gICAgTWFj
cm8oKSA6IHByZWRlZmluZWQoZmFsc2UpLCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmop
IHsgfQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBi
b29sIHByZWRlZmluZWQ7Ci0gICAgbXV0YWJsZSBib29sIGRpc2FibGVkOwotCi0gICAgVHlwZSB0
eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwot
ICAgIFJlcGxhY2VtZW50cyByZXBsYWNlbWVudHM7Ci19OwotCi10eXBlZGVmIHN0ZDo6bWFwPHN0
ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9TZXQ7Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZl
NWE3YWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NjggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxzc3Ry
ZWFtPgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi1u
YW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgVG9rZW5MZXhlciA6IHB1YmxpYyBMZXhlcgotewotIHB1
YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBUb2tlblZlY3RvcjsKLQotICAg
IFRva2VuTGV4ZXIoVG9rZW5WZWN0b3IqIHRva2VucykKLSAgICB7Ci0gICAgICAgIHRva2Vucy0+
c3dhcChtVG9rZW5zKTsKLSAgICAgICAgbUl0ZXIgPSBtVG9rZW5zLmJlZ2luKCk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCi0gICAgewotICAgICAgICBpZiAo
bUl0ZXIgPT0gbVRva2Vucy5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdG9rZW4tPnJl
c2V0KCk7Ci0gICAgICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpMQVNUOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgKnRva2VuID0gKm1JdGVyKys7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUb2tlbkxleGVyKTsKLQotICAgIFRva2VuVmVjdG9yIG1Ub2tlbnM7Ci0gICAgVG9r
ZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1JdGVyOwotfTsKLQotTWFjcm9FeHBhbmRlcjo6TWFj
cm9FeHBhbmRlcihMZXhlciogbGV4ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvU2V0KiBtYWNyb1NldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAgICBtTWFjcm9TZXQobWFj
cm9TZXQpLAotICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsKLX0KLQotTWFjcm9FeHBh
bmRlcjo6fk1hY3JvRXhwYW5kZXIoKQotewotICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0
eSgpKSBwb3BNYWNybygpOwotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9r
ZW4pCi17Ci0gICAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgICBnZXRUb2tlbih0b2tlbik7
Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHRva2VuLT5leHBhbnNpb25EaXNhYmxlZCgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0g
bU1hY3JvU2V0LT5lbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNvbnN0IE1h
Y3JvJiBtYWNybyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgaWYgKG1hY3JvLmRpc2FibGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBhIHBhcnRpY3VsYXIgdG9rZW4gaXMgbm90IGV4
cGFuZGVkLCBpdCBpcyBuZXZlciBleHBhbmRlZC4KLSAgICAgICAgICAgIHRva2VuLT5zZXRFeHBh
bnNpb25EaXNhYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICgobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5jKSAmJiAhaXNOZXh0VG9rZW5M
ZWZ0UGFyZW4oKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgdGhlIHRva2VuIGltbWVk
aWF0ZWx5IGFmdGVyIHRoZSBtYWNybyBuYW1lIGlzIG5vdCBhICcoJywKLSAgICAgICAgICAgIC8v
IHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBiZSBleHBhbmRlZC4KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcHVzaE1hY3JvKG1hY3JvLCAqdG9rZW4pOwotICAgIH0KLX0K
LQotdm9pZCBNYWNyb0V4cGFuZGVyOjpnZXRUb2tlbihUb2tlbiogdG9rZW4pCi17Ci0gICAgaWYg
KG1SZXNlcnZlVG9rZW4uZ2V0KCkpCi0gICAgewotICAgICAgICAqdG9rZW4gPSAqbVJlc2VydmVU
b2tlbjsKLSAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRmlyc3QgcG9wIGFsbCBlbXB0eSBtYWNybyBjb250ZXh0cy4KLSAgICB3
aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSAmJiBtQ29udGV4dFN0YWNrLmJhY2soKS0+ZW1w
dHkoKSkKLSAgICB7Ci0gICAgICAgIHBvcE1hY3JvKCk7Ci0gICAgfQotCi0gICAgaWYgKCFtQ29u
dGV4dFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAgICAqdG9rZW4gPSBtQ29udGV4dFN0YWNr
LmJhY2soKS0+Z2V0KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1MZXhlci0+
bGV4KHRva2VuKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6dW5nZXRUb2tlbihj
b25zdCBUb2tlbiYgdG9rZW4pCi17Ci0gICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCi0g
ICAgewotICAgICAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2so
KTsKLSAgICAgICAgY29udGV4dC0+dW5nZXQoKTsKLSAgICAgICAgYXNzZXJ0KGNvbnRleHQtPnJl
cGxhY2VtZW50c1tjb250ZXh0LT5pbmRleF0gPT0gdG9rZW4pOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBhc3NlcnQoIW1SZXNlcnZlVG9rZW4uZ2V0KCkpOwotICAgICAgICBtUmVz
ZXJ2ZVRva2VuLnJlc2V0KG5ldyBUb2tlbih0b2tlbikpOwotICAgIH0KLX0KLQotYm9vbCBNYWNy
b0V4cGFuZGVyOjppc05leHRUb2tlbkxlZnRQYXJlbigpCi17Ci0gICAgVG9rZW4gdG9rZW47Ci0g
ICAgZ2V0VG9rZW4oJnRva2VuKTsKLQotICAgIGJvb2wgbHBhcmVuID0gdG9rZW4udHlwZSA9PSAn
KCc7Ci0gICAgdW5nZXRUb2tlbih0b2tlbik7Ci0KLSAgICByZXR1cm4gbHBhcmVuOwotfQotCi1i
b29sIE1hY3JvRXhwYW5kZXI6OnB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRv
a2VuJiBpZGVudGlmaWVyKQotewotICAgIGFzc2VydCghbWFjcm8uZGlzYWJsZWQpOwotICAgIGFz
c2VydCghaWRlbnRpZmllci5leHBhbnNpb25EaXNhYmxlZCgpKTsKLSAgICBhc3NlcnQoaWRlbnRp
Zmllci50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKLSAgICBhc3NlcnQoaWRlbnRpZmllci52
YWx1ZSA9PSBtYWNyby5uYW1lKTsKLQotICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVu
dHM7Ci0gICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZv
ciBleHBhbnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCi0gICAgbWFjcm8u
ZGlzYWJsZWQgPSB0cnVlOwotCi0gICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3Jv
Q29udGV4dDsKLSAgICBjb250ZXh0LT5tYWNybyA9ICZtYWNybzsKLSAgICBjb250ZXh0LT5yZXBs
YWNlbWVudHMuc3dhcChyZXBsYWNlbWVudHMpOwotICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNr
KGNvbnRleHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OnBv
cE1hY3JvKCkKLXsKLSAgICBhc3NlcnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7Ci0KLSAgICBN
YWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKLSAgICBtQ29udGV4
dFN0YWNrLnBvcF9iYWNrKCk7Ci0KLSAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7Ci0gICAg
YXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7Ci0gICAgY29udGV4dC0+bWFjcm8tPmRp
c2FibGVkID0gZmFsc2U7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci19Ci0KLWJvb2wgTWFjcm9FeHBh
bmRlcjo6ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCi17Ci0gICAg
cmVwbGFjZW1lbnRzLT5jbGVhcigpOwotICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlw
ZU9iaikKLSAgICB7Ci0gICAgICAgIHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2Vt
ZW50cy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNl
bWVudHMuZW5kKCkpOwotCi0gICAgICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18i
OwotICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9f
IjsKLQotICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOwotICAg
ICAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmZyb250KCk7Ci0gICAgICAgICAg
ICBpZiAobWFjcm8ubmFtZSA9PSBrTGluZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlk
ZW50aWZpZXIubG9jYXRpb24ubGluZTsKLSAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3Ry
ZWFtLnN0cigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFt
ZSA9PSBrRmlsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRp
b24uZmlsZTsKLSAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGFz
c2VydChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpOwotICAgICAgICBzdGQ6OnZlY3Rv
cjxNYWNyb0FyZz4gYXJnczsKLSAgICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMu
c2l6ZSgpKTsKLSAgICAgICAgaWYgKCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVy
LCAmYXJncykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmVwbGFjZU1h
Y3JvUGFyYW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVudHMpOwotICAgIH0KLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVwbGFjZW1lbnRzLT5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAg
ICAgIFRva2VuJiByZXBsID0gcmVwbGFjZW1lbnRzLT5hdChpKTsKLSAgICAgICAgaWYgKGkgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSByZXBs
YWNlbWVudCBsaXN0IGluaGVyaXRzIHRoZSBwYWRkaW5nCi0gICAgICAgICAgICAvLyBwcm9wZXJ0
aWVzIG9mIHRoZSBpZGVudGlmaWVyIHRva2VuLgotICAgICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0
T2ZMaW5lKGlkZW50aWZpZXIuYXRTdGFydE9mTGluZSgpKTsKLSAgICAgICAgICAgIHJlcGwuc2V0
SGFzTGVhZGluZ1NwYWNlKGlkZW50aWZpZXIuaGFzTGVhZGluZ1NwYWNlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIHJlcGwubG9jYXRpb24gPSBpZGVudGlmaWVyLmxvY2F0aW9uOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9Bcmdz
KGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4qIGFyZ3MpCi17Ci0gICAgVG9rZW4gdG9rZW47
Ci0gICAgZ2V0VG9rZW4oJnRva2VuKTsKLSAgICBhc3NlcnQodG9rZW4udHlwZSA9PSAnKCcpOwot
Ci0gICAgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOwotICAgIGZvciAoaW50IG9wZW5QYXJl
bnMgPSAxOyBvcGVuUGFyZW5zICE9IDA7ICkKLSAgICB7Ci0gICAgICAgIGdldFRva2VuKCZ0b2tl
bik7Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRF
Uk1JTkFURURfSU5WT0NBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOwotICAgICAgICAgICAgLy8gRG8g
bm90IGxvc2UgRU9GIHRva2VuLgotICAgICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzQXJnID0g
ZmFsc2U7IC8vIFRydWUgaWYgdG9rZW4gaXMgcGFydCBvZiB0aGUgY3VycmVudCBhcmd1bWVudC4K
LSAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAn
KCc6Ci0gICAgICAgICAgICArK29wZW5QYXJlbnM7Ci0gICAgICAgICAgICBpc0FyZyA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICcpJzoKLSAgICAgICAgICAgIC0t
b3BlblBhcmVuczsKLSAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAwOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnLCc6Ci0gICAgICAgICAgICAvLyBUaGUgaW5k
aXZpZHVhbCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBjb21tYSB0b2tlbnMsIGJ1dAotICAg
ICAgICAgICAgLy8gdGhlIGNvbW1hIHRva2VucyBiZXR3ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVu
dGhlc2VzIGRvIG5vdAotICAgICAgICAgICAgLy8gc2VwZXJhdGUgYXJndW1lbnRzLgotICAgICAg
ICAgICAgaWYgKG9wZW5QYXJlbnMgPT0gMSkgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOwot
ICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDE7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaXNBcmcgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQXJnKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YmFjaygpOwotICAgICAgICAgICAgLy8gSW5p
dGlhbCB3aGl0ZXNwYWNlIGlzIG5vdCBwYXJ0IG9mIHRoZSBhcmd1bWVudC4KLSAgICAgICAgICAg
IGlmIChhcmcuZW1wdHkoKSkgdG9rZW4uc2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKLSAgICAg
ICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29u
c3QgTWFjcm86OlBhcmFtZXRlcnMmIHBhcmFtcyA9IG1hY3JvLnBhcmFtZXRlcnM7Ci0gICAgLy8g
SWYgdGhlcmUgaXMgb25seSBvbmUgZW1wdHkgYXJndW1lbnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8g
bm8gYXJndW1lbnQuCi0gICAgaWYgKHBhcmFtcy5lbXB0eSgpICYmIChhcmdzLT5zaXplKCkgPT0g
MSkgJiYgYXJncy0+ZnJvbnQoKS5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgYXJncy0+Y2xlYXIo
KTsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCi0gICAg
aWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJhbXMuc2l6ZSgpKQotICAgIHsKLSAgICAgICAgRGlhZ25v
c3RpY3M6OklEIGlkID0gYXJncy0+c2l6ZSgpIDwgbWFjcm8ucGFyYW1ldGVycy5zaXplKCkgPwot
ICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19GRVdfQVJHUyA6Ci0gICAgICAgICAg
ICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX01BTllfQVJHUzsKLSAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3Vt
ZW50IGJlZm9yZSBzdWJzdGl0dXRpb24uCi0gICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBh
cmd1bWVudCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkgYXJlCi0gICAgLy8gaW5zZXJ0ZWQgaW50
byB0aGUgbWFjcm8gYm9keS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3MtPnNpemUo
KTsgKytpKQotICAgIHsKLSAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmF0KGkpOwotICAg
ICAgICBUb2tlbkxleGVyIGxleGVyKCZhcmcpOwotICAgICAgICBNYWNyb0V4cGFuZGVyIGV4cGFu
ZGVyKCZsZXhlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwotCi0gICAgICAgIGFyZy5jbGVh
cigpOwotICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKLSAgICAgICAgd2hpbGUgKHRva2Vu
LnR5cGUgIT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFyZy5wdXNoX2Jh
Y2sodG9rZW4pOwotICAgICAgICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFj
ZU1hY3JvUGFyYW1zKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVw
bGFjZW1lbnRzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1l
bnRzLnNpemUoKTsgKytpKQotICAgIHsKLSAgICAgICAgY29uc3QgVG9rZW4mIHJlcGwgPSBtYWNy
by5yZXBsYWNlbWVudHNbaV07Ci0gICAgICAgIGlmIChyZXBsLnR5cGUgIT0gVG9rZW46OklERU5U
SUZJRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJl
cGwpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUT0RP
KGFsb2twKTogT3B0aW1pemUgdGhpcy4KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBz
ZWFyY2ggZm9yIG1hY3JvIHBhcmFtcyBldmVyeSB0aW1lLgotICAgICAgICAvLyBUaGUgcGFyYW0g
aW5kZXggY2FuIGJlIGNhY2hlZCB3aXRoIHRoZSByZXBsYWNlbWVudCB0b2tlbi4KLSAgICAgICAg
TWFjcm86OlBhcmFtZXRlcnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdGQ6OmZpbmQoCi0gICAg
ICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLmJlZ2luKCksIG1hY3JvLnBhcmFtZXRlcnMuZW5kKCks
IHJlcGwudmFsdWUpOwotICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGlBcmcg
PSBzdGQ6OmRpc3RhbmNlKG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgaXRlcik7Ci0gICAgICAg
IGNvbnN0IE1hY3JvQXJnJiBhcmcgPSBhcmdzW2lBcmddOwotICAgICAgICBpZiAoYXJnLmVtcHR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IHNpemVfdCBpUmVwbCA9IHJlcGxhY2VtZW50cy0+c2l6ZSgpOwotICAgICAgICByZXBsYWNlbWVu
dHMtPmluc2VydChyZXBsYWNlbWVudHMtPmVuZCgpLCBhcmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsK
LSAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IHRva2VuIGluaGVyaXRzIHBhZGRpbmcgcHJvcGVy
dGllcyBmcm9tCi0gICAgICAgIC8vIG1hY3JvIHJlcGxhY2VtZW50IHRva2VuLgotICAgICAgICBy
ZXBsYWNlbWVudHMtPmF0KGlSZXBsKS5zZXRIYXNMZWFkaW5nU3BhY2UocmVwbC5oYXNMZWFkaW5n
U3BhY2UoKSk7Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0NTA0ZWJhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9NQUNST19FWFBBTkRFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9f
RVhQQU5ERVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNp
bmNsdWRlICJMZXhlci5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMu
aCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBNYWNy
b0V4cGFuZGVyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBNYWNyb0V4cGFuZGVy
KExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpOwotICAgIHZpcnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBs
ZXgoVG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihNYWNyb0V4cGFuZGVyKTsKLQotICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2Vu
KTsKLSAgICB2b2lkIHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKLSAgICBib29sIGlz
TmV4dFRva2VuTGVmdFBhcmVuKCk7Ci0KLSAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYg
bWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKTsKLSAgICB2b2lkIHBvcE1hY3JvKCk7Ci0K
LSAgICBib29sIGV4cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbj4gTWFjcm9Bcmc7Ci0gICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3Jv
JiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJn
cyk7Ci0gICAgdm9pZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJn
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxh
Y2VtZW50cyk7Ci0KLSAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0Ci0gICAgewotICAgICAgICBjb25z
dCBNYWNybyogbWFjcm87Ci0gICAgICAgIHNpemVfdCBpbmRleDsKLSAgICAgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+IHJlcGxhY2VtZW50czsKLQotICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3Jv
KDApLCBpbmRleCgwKSB7IH0KLSAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4ID09IHJlcGxhY2VtZW50cy5zaXplKCk7IH0KLSAgICAgICAgY29uc3QgVG9rZW4mIGdldCgp
IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tpbmRleCsrXTsgfQotICAgICAgICB2b2lkIHVuZ2V0KCkg
eyAtLWluZGV4OyB9Ci0gICAgfTsKLQotICAgIExleGVyKiBtTGV4ZXI7Ci0gICAgTWFjcm9TZXQq
IG1NYWNyb1NldDsKLSAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOwotCi0gICAgc3RkOjph
dXRvX3B0cjxUb2tlbj4gbVJlc2VydmVUb2tlbjsKLSAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRl
eHQqPiBtQ29udGV4dFN0YWNrOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVw
cm9jZXNzb3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjE5MDFmYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTE0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiUHJlcHJvY2Vzc29yLmgi
Ci0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJE
aWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgotI2luY2x1ZGUgIk1h
Y3JvLmgiCi0jaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0j
aW5jbHVkZSAiVG9rZW5pemVyLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgUHJlcHJv
Y2Vzc29ySW1wbAotewotICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKLSAgICBNYWNyb1Nl
dCBtYWNyb1NldDsKLSAgICBUb2tlbml6ZXIgdG9rZW5pemVyOwotICAgIERpcmVjdGl2ZVBhcnNl
ciBkaXJlY3RpdmVQYXJzZXI7Ci0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyOwotCi0g
ICAgUHJlcHJvY2Vzc29ySW1wbChEaWFnbm9zdGljcyogZGlhZywKLSAgICAgICAgICAgICAgICAg
ICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKLSAgICAgICAgZGlhZ25v
c3RpY3MoZGlhZyksCi0gICAgICAgIHRva2VuaXplcihkaWFnKSwKLSAgICAgICAgZGlyZWN0aXZl
UGFyc2VyKCZ0b2tlbml6ZXIsICZtYWNyb1NldCwgZGlhZywgZGlyZWN0aXZlSGFuZGxlciksCi0g
ICAgICAgIG1hY3JvRXhwYW5kZXIoJmRpcmVjdGl2ZVBhcnNlciwgJm1hY3JvU2V0LCBkaWFnKQot
ICAgIHsKLSAgICB9Ci19OwotCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcihEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKQotewotICAgIG1JbXBsID0gbmV3IFByZXByb2Nlc3Nvcklt
cGwoZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpOwotfQotCi1QcmVwcm9jZXNzb3I6On5Q
cmVwcm9jZXNzb3IoKQotewotICAgIGRlbGV0ZSBtSW1wbDsKLX0KLQotYm9vbCBQcmVwcm9jZXNz
b3I6OmluaXQoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3Ro
W10pCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBrR0xTTFZlcnNpb24gPSAxMDA7Ci0KLSAgICAv
LyBBZGQgc3RhbmRhcmQgcHJlLWRlZmluZWQgbWFjcm9zLgotICAgIHByZWRlZmluZU1hY3JvKCJf
X0xJTkVfXyIsIDApOwotICAgIHByZWRlZmluZU1hY3JvKCJfX0ZJTEVfXyIsIDApOwotICAgIHBy
ZWRlZmluZU1hY3JvKCJfX1ZFUlNJT05fXyIsIGtHTFNMVmVyc2lvbik7Ci0gICAgcHJlZGVmaW5l
TWFjcm8oIkdMX0VTIiwgMSk7Ci0KLSAgICByZXR1cm4gbUltcGwtPnRva2VuaXplci5pbml0KGNv
dW50LCBzdHJpbmcsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVN
YWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpzdHJpbmdzdHJl
YW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCB2YWx1ZTsKLQotICAgIFRva2VuIHRva2VuOwotICAg
IHRva2VuLnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOwotICAgIHRva2VuLnZhbHVlID0gc3RyZWFt
LnN0cigpOwotCi0gICAgTWFjcm8gbWFjcm87Ci0gICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7
Ci0gICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKLSAgICBtYWNyby5uYW1lID0gbmFt
ZTsKLSAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsKLQotICAgIG1JbXBs
LT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwotfQotCi12b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRv
a2VuKiB0b2tlbikKLXsKLSAgICBib29sIHZhbGlkVG9rZW4gPSBmYWxzZTsKLSAgICB3aGlsZSAo
IXZhbGlkVG9rZW4pCi0gICAgewotICAgICAgICBtSW1wbC0+bWFjcm9FeHBhbmRlci5sZXgodG9r
ZW4pOwotICAgICAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG5vdCBiZSByZXR1cm5pbmcgaW50ZXJuYWwgcHJlcHJvY2Vzc2luZyB0b2tl
bnMuCi0gICAgICAgICAgLy8gQ29udmVydCBwcmVwcm9jZXNzaW5nIHRva2VucyB0byBjb21waWxl
ciB0b2tlbnMgb3IgcmVwb3J0Ci0gICAgICAgICAgLy8gZGlhZ25vc3RpY3MuCi0gICAgICAgICAg
Y2FzZSBUb2tlbjo6UFBfSEFTSDoKLSAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRva2VuOjpQUF9OVU1CRVI6Ci0gICAgICAgICAg
ICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9OVU1CRVIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRva2Vu
OjpQUF9PVEhFUjoKLSAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3Bh
Y2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWZlMzViMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXwotCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQotbmFt
ZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotY2xhc3MgRGlyZWN0aXZlSGFuZGxl
cjsKLXN0cnVjdCBQcmVwcm9jZXNzb3JJbXBsOwotc3RydWN0IFRva2VuOwotCi1jbGFzcyBQcmVw
cm9jZXNzb3IKLXsKLSAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwotICAgIH5QcmVw
cm9jZXNzb3IoKTsKLQotICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVt
ZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgotICAgIC8vIHN0cmluZzogc3Bl
Y2lmaWVzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCi0gICAgLy8gbGVuZ3RoOiBz
cGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCi0gICAgLy8gSWYgbGVuZ3RoIGlz
IE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgotICAg
IC8vIElmIGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFu
IGFycmF5IGNvbnRhaW5pbmcKLSAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhl
IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgotICAgIC8vIEVhY2ggZWxlbWVudCBp
biB0aGUgbGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCi0gICAgLy8g
Y29ycmVzcG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0
aGF0IHRoZSBzdHJpbmcKLSAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0gICAgYm9vbCBpbml0
KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7Ci0gICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgotICAgIHZvaWQgcHJlZGVmaW5l
TWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLQotICAgIHZvaWQgbGV4KFRva2Vu
KiB0b2tlbik7Ci0KLSAgcHJpdmF0ZToKLSAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UHJlcHJvY2Vzc29yKTsKLQotICAgIFByZXByb2Nlc3NvckltcGwqIG1JbXBsOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9D
RVNTT1JfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ODI2MTMuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9j
YXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KLSNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwotCi1uYW1lc3BhY2UgcHAK
LXsKLQotc3RydWN0IFNvdXJjZUxvY2F0aW9uCi17Ci0gICAgU291cmNlTG9jYXRpb24oKSA6IGZp
bGUoMCksIGxpbmUoMCkgeyB9Ci0gICAgU291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZp
bGUoZiksIGxpbmUobCkgeyB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlv
biYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmls
ZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7Ci0gICAgfQotCi0gICAgaW50IGZpbGU7Ci0gICAg
aW50IGxpbmU7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCi17Ci0gICAgcmV0dXJuIGxocy5l
cXVhbHMocmhzKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQotewotICAgIHJldHVybiAhbGhz
LmVxdWFscyhyaHMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjAzODBjLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiVG9rZW4uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLXZvaWQgVG9rZW46OnJl
c2V0KCkKLXsKLSAgICB0eXBlID0gMDsKLSAgICBmbGFncyA9IDA7Ci0gICAgbG9jYXRpb24gPSBT
b3VyY2VMb2NhdGlvbigpOwotICAgIHZhbHVlLmNsZWFyKCk7Ci19Ci0KLWJvb2wgVG9rZW46OmVx
dWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICh0eXBlID09IG90
aGVyLnR5cGUpICYmCi0gICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKLSAgICAg
ICAgICAgKGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgotICAgICAgICAgICAodmFsdWUg
PT0gb3RoZXIudmFsdWUpOwotfQotCi12b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wg
c3RhcnQpCi17Ci0gICAgaWYgKHN0YXJ0KQotICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9M
SU5FOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7Ci19Ci0K
LXZvaWQgVG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKQotewotICAgIGlmIChz
cGFjZSkKLSAgICAgICAgZmxhZ3MgfD0gSEFTX0xFQURJTkdfU1BBQ0U7Ci0gICAgZWxzZQotICAg
ICAgICBmbGFncyAmPSB+SEFTX0xFQURJTkdfU1BBQ0U7Ci19Ci0KLXZvaWQgVG9rZW46OnNldEV4
cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSkKLXsKLSAgICBpZiAoZGlzYWJsZSkKLSAgICAg
ICAgZmxhZ3MgfD0gRVhQQU5TSU9OX0RJU0FCTEVEOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3Mg
Jj0gfkVYUEFOU0lPTl9ESVNBQkxFRDsKLX0KLQotc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0
ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4pCi17Ci0gICAgaWYgKHRva2VuLmhh
c0xlYWRpbmdTcGFjZSgpKQotICAgICAgICBvdXQgPDwgIiAiOwotCi0gICAgb3V0IDw8IHRva2Vu
LnZhbHVlOwotICAgIHJldHVybiBvdXQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzEwMjEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLSNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCi0KLSNpbmNsdWRlIDxvc3RyZWFtPgot
I2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCi0KLW5hbWVz
cGFjZSBwcAotewotCi1zdHJ1Y3QgVG9rZW4KLXsKLSAgICBlbnVtIFR5cGUKLSAgICB7Ci0gICAg
ICAgIExBU1QgPSAwLCAgLy8gRU9GLgotCi0gICAgICAgIElERU5USUZJRVIgPSAyNTgsCi0KLSAg
ICAgICAgQ09OU1RfSU5ULAotICAgICAgICBDT05TVF9GTE9BVCwKLQotICAgICAgICBPUF9JTkMs
Ci0gICAgICAgIE9QX0RFQywKLSAgICAgICAgT1BfTEVGVCwKLSAgICAgICAgT1BfUklHSFQsCi0g
ICAgICAgIE9QX0xFLAotICAgICAgICBPUF9HRSwKLSAgICAgICAgT1BfRVEsCi0gICAgICAgIE9Q
X05FLAotICAgICAgICBPUF9BTkQsCi0gICAgICAgIE9QX1hPUiwKLSAgICAgICAgT1BfT1IsCi0g
ICAgICAgIE9QX0FERF9BU1NJR04sCi0gICAgICAgIE9QX1NVQl9BU1NJR04sCi0gICAgICAgIE9Q
X01VTF9BU1NJR04sCi0gICAgICAgIE9QX0RJVl9BU1NJR04sCi0gICAgICAgIE9QX01PRF9BU1NJ
R04sCi0gICAgICAgIE9QX0xFRlRfQVNTSUdOLAotICAgICAgICBPUF9SSUdIVF9BU1NJR04sCi0g
ICAgICAgIE9QX0FORF9BU1NJR04sCi0gICAgICAgIE9QX1hPUl9BU1NJR04sCi0gICAgICAgIE9Q
X09SX0FTU0lHTiwKLQotICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgotICAg
ICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFs
bHkuCi0gICAgICAgIC8vIFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBj
aGVjayBmb3IgdGhlbS4KLSAgICAgICAgUFBfSEFTSCwKLSAgICAgICAgUFBfTlVNQkVSLAotICAg
ICAgICBQUF9PVEhFUgotICAgIH07Ci0gICAgZW51bSBGbGFncwotICAgIHsKLSAgICAgICAgQVRf
U1RBUlRfT0ZfTElORSAgID0gMSA8PCAwLAotICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAx
IDw8IDEsCi0gICAgICAgIEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgotICAgIH07Ci0KLSAg
ICBUb2tlbigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKLQotICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgotICAgIC8vIEl0IGRp
c3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICBib29sIGF0U3RhcnRPZkxpbmUo
KSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9Ci0gICAg
dm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOwotCi0gICAgYm9vbCBoYXNMZWFkaW5n
U3BhY2UoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsg
fQotICAgIHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOwotCi0gICAgYm9vbCBl
eHBhbnNpb25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNB
QkxFRCkgIT0gMDsgfQotICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxl
KTsKLQotICAgIGludCB0eXBlOwotICAgIHVuc2lnbmVkIGludCBmbGFnczsKLSAgICBTb3VyY2VM
b2NhdGlvbiBsb2NhdGlvbjsKLSAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKLX07Ci0KLWlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKLXsKLSAg
ICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCi17Ci0gICAgcmV0dXJuICFsaHMuZXF1
YWxzKHJocyk7Ci19Ci0KLWV4dGVybiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3Ry
ZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbik7Ci0KLX0gIC8vIG5hbWVwc2FjZSBwcAotI2Vu
ZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbml6ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmMzZDFj
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQ0ICswLDAg
QEAKLSNsaW5lIDE2ICIuL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwiCi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCi0KLQotCi0jbGluZSAxMyAiLi9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxl
eGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5F
UgotI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9S
X1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8q
IEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNp
ZmljIGlzc3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyog
ZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNk
ZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24t
Qzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVS
U0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8g
ZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAq
IGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAot
ICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01B
Q1JPUyAxCi0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBm
bGV4X2ludDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2
X3QgZmxleF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRl
ZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsK
LSNlbHNlCi10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBp
bnQgZmxleF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4
X3VpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAv
KiAhIEM5OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElO
VDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNp
Zm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0x
KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAg
ICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElO
VDhfTUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNk
ZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5U
MzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5k
aWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1
NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAg
ICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5U
MzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBG
TEVYSU5UX0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3Jh
Z2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0j
ZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCi0KLS8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBi
ZSBkZWZpbmVkIGFzIDEuICovCi0jaWYgZGVmaW5lZCAoX19TVERDX18pCi0KLSNkZWZpbmUgWVlf
VVNFX0NPTlNUCi0KLSNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZgkvKiAh
IF9fY3BsdXNwbHVzICovCi0KLSNpZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBj
b25zdAotI2Vsc2UKLSNkZWZpbmUgeXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24g
ZW5kLW9mLWZpbGUuICovCi0jZGVmaW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3Np
Ymx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50
ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5l
Z2F0aXZlLAotICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2ln
bmVkIGNoYXIsIGhlbmNlIHRoZQotICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0Nf
VE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFx
dWUgcG9pbnRlci4gKi8KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYK
LQotLyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZh
ciBiZWxvdykKLSAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2Rl
ZmluZSB5eWluIHl5Zy0+eXlpbl9yCi0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmlu
ZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0j
ZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5
Zy0+eXlfZmxleF9kZWJ1Z19yCi0KLS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBt
YWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0
aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICog
ZGVmaW5pdGlvbiBvZiBCRUdJTi4KLSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0g
MSArIDIgKgotCi0vKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZh
bHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRo
ZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHku
Ci0gKi8KLSNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmlu
ZSBZWVNUQVRFIFlZX1NUQVJUCi0KLS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEg
Z2l2ZW4gc3RhcnQgc3RhdGUuICovCi0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VO
RF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0
YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVz
dGFydCh5eWluICx5eXNjYW5uZXIgKQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAw
Ci0KLS8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9T
SVpFCi0jZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1
ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGlu
IHRoZSBtYWluIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlf
QlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBF
REVGX1lZX0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQot
dHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYK
LQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJ
WkVfVAotdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FD
VF9DT05USU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5l
IEVPQl9BQ1RfTEFTVF9NQVRDSCAyCi0KLSAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCi0g
ICAgCi0vKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBi
YWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAot
CQl7IFwKLQkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAg
ICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5P
KHl5bGVzc19tYWNyb19hcmcpO1wKLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJ
WVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0JCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0g
eXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLQkJWVlfRE9fQkVGT1JF
X0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0JCX0gXAotCXdoaWxlICggMCAp
Ci0KLSNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2Fu
bmVyICkKLQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NU
UlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAq
eXlfaW5wdXRfZmlsZTsKLQotCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwot
CWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAq
LwotCi0JLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9v
bSBmb3IgRU9CCi0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7
Ci0KLQkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5j
bHVkaW5nIEVPQgotCSAqIGNoYXJhY3RlcnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X25fY2hhcnM7
Ci0KLQkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNy
ZWF0ZWQgaXQsCi0JICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3Vs
ZCBmcmVlKCkgaXQgdG8KLQkgKiBkZWxldGUgaXQuCi0JICovCi0JaW50IHl5X2lzX291cl9idWZm
ZXI7Ci0KLQkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7
IGlmIHNvLCBhbmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ug
d2FudCB0byB1c2UgZ2V0YygpCi0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUg
d2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotCSAqIGVhY2ggbmV3bGluZS4KLQkgKi8KLQlp
bnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8g
YmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0JICogSWYgc28sICdeJyBydWxlcyB3aWxs
IGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0JICogbm90LgotCSAqLwot
CWludCB5eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNv
dW50LiAqLwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8K
LSAgICAKLQkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3
ZSByZWFjaCB0aGUKLQkgKiBlbmQgb2YgaXQuCi0JICovCi0JaW50IHl5X2ZpbGxfYnVmZmVyOwot
Ci0JaW50IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVm
aW5lIFlZX0JVRkZFUl9OT1JNQUwgMQotCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0
aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0JICogdGhlbiB3ZSBtYXJrIHRoZSBi
dWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLQkgKiBzaG91bGRu
J3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQK
LQkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1
c2Ugb2YKLQkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotCSAqCi0JICogV2hlbiB3ZSBhY3R1YWxs
eSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHBw
cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLQkg
KiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLQkgKi8KLSNkZWZpbmUg
WVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKLQotCX07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9C
VUZGRVJfU1RBVEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZm
ZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1
ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0g
KiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZ
X0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cF0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJl
dmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFj
ayBpcyBub3QKLSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFs
IHVzZSBvbmx5LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5
X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0
IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNo
X3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNp
emUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZG
RVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAo
WVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVm
ZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0
YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNo
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5
X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRl
cyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZv
aWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12
b2lkIHBwZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9u
ZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUo
aXNfaW50ZXJhY3RpdmUpIFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAot
ICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5l
IHl5X3NldF9ib2woYXRfYm9sKSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7
XAotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLQl9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkg
KFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNl
Y3QzICovCi0KLSNkZWZpbmUgcHB3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQot
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5
cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlw
ZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRl
ICAseXlzY2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0
IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBj
dXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVz
cG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZP
UkVfQUNUSU9OIFwKLQl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXpl
X3QpICh5eV9jcCAtIHl5X2JwKTsgXAotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0J
Knl5X2NwID0gJ1wwJzsgXAotCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZ
X05VTV9SVUxFUyAzNwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4Ci0vKiBUaGlzIHN0cnVj
dCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5l
Y2Vzc2FyeS4gKi8KLXN0cnVjdCB5eV90cmFuc19pbmZvCi0JewotCWZsZXhfaW50MzJfdCB5eV92
ZXJpZnk7Ci0JZmxleF9pbnQzMl90IHl5X254dDsKLQl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs4NF0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgIDM4LCAgIDM2LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAotICAgICAgICA3LCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAotICAg
ICAgICA5LCAgIDMzLCAgIDMzLCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAg
ICA1LAotICAgICAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1
LCAgIDEyLCAgIDIzLAotICAgICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAg
IDEwLCAgICA5LCAgIDExLCAgIDExLAotICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2
LCAgIDE4LCAgIDE3LCAgIDE1LCAgICA4LCAgIDMxLAotICAgICAgIDIxLCAgIDMyLCAgIDIyLCAg
ICAzLCAgICA1LCAgICA2LCAgIDExLCAgIDEwLCAgIDExLCAgICAxLAotICAgICAgIDEwLCAgIDEx
LCAgICAwLCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAotICAgICAg
IDEwLCAgIDEwLCAgICAwCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKLSAgICAgICAgMiwgICAgMiwgICAgNCwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAg
OSwKLSAgICAgICAgOSwgICAxMCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwg
ICAxNiwgICAxNiwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAx
NywgICAgOSwgICAgOSwgICAxOCwKLSAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwg
ICAyMSwgICAyMSwgICAyMSwgICAyMiwgICAyMSwKLSAgICAgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKLSAgICAgICAg
OSwgICAgMSwgICAgOSwgICAyNSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwK
LQotICAgICAgIDIyLCAgIDIxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDI0LAotICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAg
ICA5LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAot
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0K
LSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMywKLSAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwg
ICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YmFzZVs4OV0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4
LCAgMTU5LCAgMTUwLCAgMTU5LCAgMTQ1LCAgMTI4LAotICAgICAgMTU5LCAgMTEyLCAgIDIzLCAg
MTU5LCAgMTExLCAgIDIxLCAgIDI1LCAgIDMwLCAgIDI5LCAgIDM2LAotICAgICAgIDQ2LCAgIDM2
LCAgMTAwLCAgIDQ1LCAgICAwLCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAotICAgICAg
IDY1LCAgIDczLCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5
LAotICAgICAgMTU5LCAgMTU5LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAg
IDU2LCAgIDgzLAotICAgICAgIDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5
LCAgIDE5LCAgICAwLCAgMTU5LAotICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAg
MTU5LCAgIDk4LCAgICAwLCAgMTEwLCAgICAwLAotICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkw
LCAgIDgwLCAgMTU5LCAgMTU5LCAgMTAxLCAgIDk3LCAgMTEyLAotICAgICAgMTIwLCAgMTIzLCAg
MTU5LCAgMTQwLCAgIDI4LCAgMTQ1LCAgMTUwLCAgMTUyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbODldID0KLSAgICB7ICAgMCwKLSAgICAgICA4MywgICAg
MSwgICA4NCwgICA4NCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywKLSAgICAgICAyMCwgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4Niwg
ICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4Nywg
ICA4MywgICA4MywgICAyMCwgICAyMCwgICA0NywKLSAgICAgICA1MCwgICA4OCwgICAyMSwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywKLSAgICAgICA4MywgICA4Mywg
ICA4MywgICA4NiwgICA4MywgICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKLSAgICAgICA0
NywgICA1MCwgICA4MywgICA1MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwK
LSAgICAgICA4MywgICA4MywgICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MwotICAg
IH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQotICAgIHsg
ICAwLAotICAgICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEz
LCAgIDE0LCAgIDE1LAotICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAg
IDIxLCAgIDIyLCAgIDIzLCAgIDI0LAotICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2
LCAgIDI3LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMwLAotICAgICAgIDM2LCAgIDM5LCAgIDU5LCAg
IDMxLCAgIDYwLCAgIDMxLCAgIDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAotICAgICAgIDYxLCAgIDM3
LCAgIDQ1LCAgIDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAotICAgICAg
IDQ4LCAgIDQ4LCAgIDQ5LCAgIDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUy
LAotICAgICAgIDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAg
IDgxLCAgIDUwLAotICAgICAgIDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4
LCAgIDY4LCAgIDY2LCAgIDUwLAotICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAg
IDUwLCAgIDY1LCAgIDcxLCAgIDcxLCAgIDcxLAotICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUw
LCAgIDcyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAotCi0gICAgICAgODMsICAgODMs
ICAgNTAsICAgNTAsICAgNTAsICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCi0gICAgICAg
NzQsICAgNzQsICAgNjcsICAgNjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcs
Ci0gICAgICAgNzgsICAgNzgsICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAg
NzgsICAgMzgsCi0gICAgICAgMzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEs
ICAgODIsICAgODIsICAgODIsCi0gICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAg
NjQsICAgMzQsICAgMzMsICAgNjQsICAgNjQsCi0gICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAs
ICAgNzAsICAgNzUsICAgNzUsICAgODMsICAgIDUsICAgODMsCi0gICAgICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0g
ICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2Noa1sxODZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywg
ICAgNCwgICAgNCwKLSAgICAgICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAx
NywgICA1OCwgICAxOSwgICAxNiwKLSAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwg
ICAxOCwgICAxOCwgICAxOSwgICAyMCwgICA1NCwKLSAgICAgICAyMCwgICAyMCwgICAyMCwgICAy
MiwgICAyMiwgICA0OCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKLSAgICAgICAyMSwgICAyMSwg
ICAyMSwgICAyNCwgICAyNCwgICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKLSAgICAgICA0
OSwgICA0OSwgICAyNywgICA0MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwK
LSAgICAgICA1MiwgICA0MywgICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0
NywgICA0NywKLSAgICAgICA1MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0Nywg
ICA1MCwgICA1MCwgICA1MCwKLQotICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAg
IDUxLCAgIDUxLCAgIDc5LCAgIDc5LCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3
LCAgIDY3LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDIzLCAgIDY3LAotICAgICAgIDY5LCAgIDY5LCAg
IDgwLCAgIDgwLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAotICAgICAgIDEy
LCAgIDcyLCAgIDcyLCAgIDcyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAot
ICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2
LCAgIDg2LAotICAgICAgIDg3LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAg
ICA1LCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzCi0gICAgfSA7Ci0KLS8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5p
dGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxl
eCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0
ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmlu
ZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLS8qCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0
aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwg
U3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQu
Y29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklM
RSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0jaW5jbHVk
ZSAiVG9rZW5pemVyLmgiCi0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIlRv
a2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRv
LWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KLSNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgotI2VuZGlmCi0KLXR5cGVkZWYgc3RkOjpz
dHJpbmcgWVlTVFlQRTsKLXR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7Ci0KLS8v
IFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykg
bnVtYmVyLgotI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgotCi0jZGVmaW5lIFlZX1VTRVJfSU5J
VCAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IGZhbHNlOyBcCi0gICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAg
ICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5M
b2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKLSAgICAgICAgd2hpbGUgKChzY2Fu
TG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRl
eCkpKSBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1
dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAotICAgICAgICAgICAgKyt5eWZpbGVu
bzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHNjYW5Mb2MtPmNJbmRl
eCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdo
aWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAg
cmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOwotCi0jZGVmaW5lIElO
SVRJQUwgMAotI2RlZmluZSBDT01NRU5UIDEKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpU
b2tlbml6ZXI6OkNvbnRleHQqCi0KLS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJl
ZW50cmFudCBzY2FubmVyLiAqLwotc3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNl
ci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXll
eHRyYV9yOwotCi0gICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRl
Y2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9y
LCAqeXlvdXRfcjsKLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBv
ZiB0b3Agb2Ygc3RhY2suICovCi0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwg
Y2FwYWNpdHkgb2Ygc3RhY2suICovCi0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0
YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwot
ICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOwotICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKLSAgICBj
aGFyICp5eV9jX2J1Zl9wOwotICAgIGludCB5eV9pbml0OwotICAgIGludCB5eV9zdGFydDsKLSAg
ICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOwotICAgIGludCB5eV9zdGFydF9zdGFj
a19wdHI7Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOwotICAgIGludCAqeXlfc3RhcnRf
c3RhY2s7Ci0gICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBj
aGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCi0gICAgaW50IHl5bGluZW5vX3I7Ci0gICAg
aW50IHl5X2ZsZXhfZGVidWdfcjsKLQotICAgIGNoYXIgKnl5dGV4dF9yOwotICAgIGludCB5eV9t
b3JlX2ZsYWc7Ci0gICAgaW50IHl5X21vcmVfbGVuOwotCi0gICAgWVlTVFlQRSAqIHl5bHZhbF9y
OwotCi0gICAgWVlMVFlQRSAqIHl5bGxvY19yOwotCi0gICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1
dHNfdCAqLwotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLSAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZ
UEUgYXJlIGluY2x1ZGVkCi0gICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiov
Ci0gICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKLSAgICAKLSAgICAjICAgIGRl
ZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgotICAgIAotaW50IHBwbGV4X2luaXQgKHl5c2Nhbl90
KiBzY2FubmVyKTsKLQotaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9k
ZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKLQotLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9i
YWxzLgotICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJz
IGZvciBjb252ZW5pZW5jZS4gKi8KLQotaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotCi1pbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lk
IHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZ
X0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBw
c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLUZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNl
dF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdl
dF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X291dCAgKEZJTEUgKiBv
dXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQoteXlfc2l6ZV90IHBwZ2V0X2xlbmcgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi1jaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQg
cHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1Z
WVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRf
bHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAg
ICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAg
ICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLSAgICAKLS8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUg
b3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQot
I2lmbmRlZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGlu
dCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLWV4dGVybiBpbnQgcHB3cmFw
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgeXl0ZXh0
X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICos
aW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxF
Tgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5
c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1
c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQot
c3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLQotI2VuZGlm
Ci0KLS8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNp
Zm5kZWYgWVlfUkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNl
bmRpZgotCi0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3Rh
bmRhcmQgb3V0cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1
dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5v
dyB1c2UgZndyaXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5n
LCAxLCB5eW91dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8g
ImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0
dXJuZWQgaW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5Q
VVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9pc19pbnRlcmFjdGl2ZSApIFwKLQkJeyBcCi0JCWludCBjID0gJyonOyBcCi0JCXl5X3Np
emVfdCBuOyBcCi0JCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAotCQkJICAgICAoYyA9
IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAotCQkJYnVmW25dID0g
KGNoYXIpIGM7IFwKLQkJaWYgKCBjID09ICdcbicgKSBcCi0JCQlidWZbbisrXSA9IChjaGFyKSBj
OyBcCi0JCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0JCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJcmVzdWx0ID0gbjsg
XAotCQl9IFwKLQllbHNlIFwKLQkJeyBcCi0JCWVycm5vPTA7IFwKLQkJd2hpbGUgKCAocmVzdWx0
ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAot
CQkJeyBcCi0JCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKLQkJCQl7IFwKLQkJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJCQlicmVhazsgXAot
CQkJCX0gXAotCQkJZXJybm89MDsgXAotCQkJY2xlYXJlcnIoeXlpbik7IFwKLQkJCX0gXAotCQl9
XAotXAotCi0jZW5kaWYKLQotLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3Qg
dXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFu
IGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAq
IHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMu
Ci0gKi8KLSNpZm5kZWYgeXl0ZXJtaW5hdGUKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4g
WVlfTlVMTAotI2VuZGlmCi0KLS8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNv
bmRpdGlvbiBzdGFjayBncm93cy4gKi8KLSNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2Rl
ZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwg
ZXJyb3IuICovCi0jaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9S
KG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQg
dGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBE
ZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhl
IHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVD
TAotI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQotCi1leHRlcm4gaW50IHBwbGV4IFwKLSAgICAg
ICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAotICAg
ICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFy
YW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29k
ZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFu
ZCB5eWxlbmcKLSAqIGhhdmUgYmVlbiBzZXQgdXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJ
T04KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KLSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0
IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLwotI2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9C
UkVBSyBicmVhazsKLSNlbmRpZgotCi0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotCVlZX1VTRVJf
QUNUSU9OCi0KLS8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRo
ZSB3b3JrLgotICovCi1ZWV9ERUNMCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0JcmVnaXN0ZXIgaW50
IHl5X2FjdDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLSAgICAvKiBMaW5lIGNvbW1lbnQgKi8KLQotICAgIHl5bHZhbCA9IHl5bHZh
bF9wYXJhbTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLQotCWlmICggIXl5Zy0+eXlf
aW5pdCApCi0JCXsKLQkJeXlnLT55eV9pbml0ID0gMTsKLQotI2lmZGVmIFlZX1VTRVJfSU5JVAot
CQlZWV9VU0VSX0lOSVQ7Ci0jZW5kaWYKLQotCQlpZiAoICEgeXlnLT55eV9zdGFydCApCi0JCQl5
eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotCQlpZiAoICEgeXlp
biApCi0JCQl5eWluID0gc3RkaW47Ci0KLQkJaWYgKCAhIHl5b3V0ICkKLQkJCXl5b3V0ID0gc3Rk
b3V0OwotCi0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLQkJCXBwZW5zdXJlX2J1ZmZl
cl9zdGFjayAoeXlzY2FubmVyKTsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0JCQkJ
cHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotCQl9Ci0KLQkJ
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0JCX0KLQotCXdoaWxlICggMSApCQkv
KiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCi0JCXsKLQkJeXlfY3AgPSB5
eWctPnl5X2NfYnVmX3A7Ci0KLQkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0JCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0JCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24g
aW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgotCQkgKiB0aGUgY3VycmVudCBydW4uCi0JCSAq
LwotCQl5eV9icCA9IHl5X2NwOwotCi0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0
OwoteXlfbWF0Y2g6Ci0JCWRvCi0JCQl7Ci0JCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9l
Y1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLQkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdICkKLQkJCQl7Ci0JCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJl
bnRfc3RhdGU7Ci0JCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCQkJ
fQotCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9
IHl5X2N1cnJlbnRfc3RhdGUgKQotCQkJCXsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkg
eXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4
NCApCi0JCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJCX0KLQkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJKyt5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jdXJy
ZW50X3N0YXRlICE9IDgzICk7Ci0JCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
OwotCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQot
eXlfZmluZF9hY3Rpb246Ci0JCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsK
LQotCQlZWV9ET19CRUZPUkVfQUNUSU9OOwotCi1kb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMg
dXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotCQlzd2l0Y2ggKCB5eV9hY3Qg
KQotCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLQkJCWNhc2UgMDogLyogbXVz
dCBiYWNrIHVwICovCi0JCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04gKi8KLQkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQkJeXlfY3AgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0JCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLQkJCWdvdG8geXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZ
X1JVTEVfU0VUVVAKLQotCVlZX0JSRUFLCi0vKiBCbG9jayBjb21tZW50ICovCi0vKiBMaW5lIGJy
ZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLwotLyogVGhlIGNvbW1lbnQg
aXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAotY2FzZSAyOgotWVlfUlVMRV9TRVRV
UAoteyBCRUdJTihDT01NRU5UKTsgfQotCVlZX0JSRUFLCi1jYXNlIDM6Ci1ZWV9SVUxFX1NFVFVQ
Ci0KLQlZWV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAotCi0JWVlfQlJFQUsKLWNhc2Ug
NToKLS8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17ICsreXlsaW5l
bm87IH0KLQlZWV9CUkVBSwotY2FzZSA2OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IHRydWU7Ci0gICAgQkVHSU4oSU5JVElBTCk7Ci19Ci0JWVlfQlJFQUsK
LWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3Rh
cnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCi0gICAgeXlsdmFsLT5hc3Np
Z24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4geXlleHRyYS0+bGluZVN0YXJ0ID8gcHA6OlRv
a2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKLX0KLQlZWV9CUkVBSwotY2FzZSA4
OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwotfQotCVlZX0JSRUFLCi1jYXNlIDk6
Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwot
ICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxMDoK
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Ci19Ci0JWVlfQlJFQUsKLS8qIEFueXRo
aW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1i
ZXIuICovCi0vKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMu
ICovCi1jYXNlIDExOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Ci19Ci0JWVlfQlJF
QUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKLX0KLQlZWV9CUkVBSwot
Y2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOwotfQotCVlZX0JSRUFLCi1jYXNl
IDE0OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOwotfQotCVlZX0JSRUFLCi1jYXNlIDE1
OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxNjoK
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9S
VUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0dFOwotfQotCVlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9T
RVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9FUTsKLX0KLQlZWV9CUkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VUVVAK
LXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTkU7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0FORDsKLX0KLQlZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
WE9SOwotfQotCVlZX0JSRUFLCi1jYXNlIDIyOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsK
LX0KLQlZWV9CUkVBSwotY2FzZSAyMzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lH
TjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNDoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FT
U0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVM
X0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
RElWX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTU9EX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyODoKLVlZX1JVTEVfU0VUVVAKLXsK
LSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfTEVGVF9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjk6Ci1ZWV9SVUxFX1NFVFVQ
Ci17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMDoKLVlZX1JVTEVf
U0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMToKLVlZX1JV
TEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMjoKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDMzOgot
WVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Ci0gICAg
cmV0dXJuIHl5dGV4dFswXTsKLX0KLQlZWV9CUkVBSwotY2FzZSAzNDoKLVlZX1JVTEVfU0VUVVAK
LXsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQotCVlZX0JSRUFLCi1jYXNlIDM1Ogot
LyogcnVsZSAzNSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxp
bmVubzsKLSAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0K
LQlZWV9CUkVBSwotY2FzZSAzNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2ln
bigxLCB5eXRleHRbMF0pOwotICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOwotfQotCVlZ
X0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLWNhc2UgWVlfU1RBVEVfRU9GKENP
TU1FTlQpOgotewotICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5k
bGluZyBFT0YuCi0gICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5
LgotICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7Ci0gICAgcHA6OklucHV0
OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOwotICAgIGludCBzSW5kZXhN
YXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOwotICAgIGlmIChzY2FuTG9jLT5z
SW5kZXggIT0gc0luZGV4TWF4KQotICAgIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2gg
aGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKLSAgICAgICAgLy8gZW5kIG9m
IHRoZSBpbnB1dC4KLSAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9j
LT5jSW5kZXggPSAwOwotICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAx
OwotICAgIH0KLSAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKLSAgICB5eWxsb2MtPmxpbmUg
PSB5eWxpbmVubzsKLSAgICB5eWx2YWwtPmNsZWFyKCk7Ci0KLSAgICBpZiAoWVlfU1RBUlQgPT0g
Q09NTUVOVCkKLSAgICB7Ci0gICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7Ci0gICAgfQotICAgIHl5dGVybWlu
YXRlKCk7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMzc6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotCVlZ
X0JSRUFLCi0KLQljYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0JCXsKLQkJLyogQW1vdW50IG9mIHRl
eHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLQkJaW50IHl5X2Ftb3Vu
dF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
LQotCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0JCSp5
eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0K
LQkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlf
QlVGRkVSX05FVyApCi0JCQl7Ci0JCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlu
cHV0IHNvdXJjZS4gIEl0J3MKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNh
dXNlIHRoZSB1c2VyCi0JCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5k
IGNhbGxlZAotCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0J
CQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLQkJCSAq
IGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotCQkJ
ICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLQkJCSAq
IGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0JCQkg
Ki8KLQkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFyczsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47
Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZG
RVJfTk9STUFMOwotCQkJfQotCi0JCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2Nf
YnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KLQkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUg
YnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLQkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5j
cmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBt
YWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLQkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSku
ICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLQkJICogaW4gaW5wdXQoKS4KLQkJICovCi0J
CWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LwotCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0JCQl5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0JCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJ
LyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0JCQkgKiB0cmFu
c2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkg
Z28gYWhlYWQgYW5kIGRvIGl0Ci0JCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cg
aG93IHRvIGRlYWwKLQkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3
ZSBkb24ndAotCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVu
IGl0Ci0JCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0JCQkgKi8KLQotCQkJeXlfbmV4dF9z
dGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwot
Ci0JCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0JCQlpZiAoIHl5
X25leHRfc3RhdGUgKQotCQkJCXsKLQkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCi0JCQkJeXlf
Y3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9z
dGF0ZTsKLQkJCQlnb3RvIHl5X21hdGNoOwotCQkJCX0KLQotCQkJZWxzZQotCQkJCXsKLQkJCQl5
eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9u
OwotCQkJCX0KLQkJCX0KLQotCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlz
Y2FubmVyICkgKQotCQkJewotCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCXsKLQkJ
CQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLQkJCQlpZiAoIHBwd3Jh
cCh5eXNjYW5uZXIgKSApCi0JCQkJCXsKLQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtl
biBjYXJlIGluCi0JCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0J
CQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKLQkJCQkJICogeXlfY19idWZfcCBzbyB0
aGF0IGlmIHNvbWUgdG90YWwKLQkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRz
IHRvCi0JCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotCQkJCQkg
KiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotCQkJCQkgKiBZWV9OVUxMIHdp
bGwgZ2V0IHJldHVybmVkLgotCQkJCQkgKi8KLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZ
X1NUQVJUKTsKLQkJCQkJZ290byBkb19hY3Rpb247Ci0JCQkJCX0KLQotCQkJCWVsc2UKLQkJCQkJ
ewotCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJCQkJ
WVlfTkVXX0ZJTEU7Ci0JCQkJCX0KLQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgRU9CX0FD
VF9DT05USU5VRV9TQ0FOOgotCQkJCXl5Zy0+eXlfY19idWZfcCA9Ci0JCQkJCXl5Zy0+eXl0ZXh0
X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLQkJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwotCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7
Ci0JCQkJZ290byB5eV9tYXRjaDsKLQotCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJ
eXlnLT55eV9jX2J1Zl9wID0KLQkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbeXlnLT55eV9uX2NoYXJzXTsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7
Ci0JCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOwotCQkJfQotCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJWVlfRkFU
QUxfRVJST1IoCi0JCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rp
b24gZm91bmQiICk7Ci0JfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQl9IC8qIGVuZCBv
ZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dl
dF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVy
bnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1RfTUFUQ0gg
LQotICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJy
ZW50IHBvc2l0aW9uCi0gKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwot
c3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0J
cmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
OwotCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLQlyZWdpc3RlciBp
bnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0JaW50IHJldF92YWw7Ci0KLQlpZiAoIHl5Zy0+eXlfY19i
dWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hh
cnMgKyAxXSApCi0JCVlZX0ZBVEFMX0VSUk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVy
bmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0cnkgdG8g
ZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLQkJaWYgKCB5eWctPnl5X2Nf
YnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsKLQkJCS8q
IFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICogdHJlYXQg
dGhpcyBhcyBhIGZpbmFsIEVPRi4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJ
TEU7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJp
b3IgdG8gdGhlIEVPQiwgZmlyc3QKLQkJCSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXJldHVy
biBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0JCQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFkIG1vcmUg
ZGF0YS4gKi8KLQotCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIu
ICovCi0JbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRl
eHRfcHRyKSAtIDE7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQot
CQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0JCS8qIGRv
bid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0J
CSAqIGp1c3QgZm9yY2UgYW4gRU9GCi0JCSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0JZWxzZQotCQl7Ci0JCQl5eV9z
aXplX3QgbnVtX3RvX3JlYWQgPQotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
c2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAg
KQotCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0K
LQkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJ
WVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5X2NfYnVm
X3Bfb2Zmc2V0ID0KLQkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsK
LQotCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLQkJCQl7Ci0JCQkJeXlfc2l6ZV90IG5l
d19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0JCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkK
LQkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotCQkJCWVsc2UKLQkJ
CQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKLQotCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0J
CQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0JCQkJCXBwcmVhbGxv
Yygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsK
LQkJCQl9Ci0JCQllbHNlCi0JCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAq
LwotCQkJCWItPnl5X2NoX2J1ZiA9IDA7Ci0KLQkJCWlmICggISBiLT55eV9jaF9idWYgKQotCQkJ
CVlZX0ZBVEFMX0VSUk9SKAotCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVy
IG92ZXJmbG93IiApOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2Nf
YnVmX3Bfb2Zmc2V0XTsKLQotCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0KLQkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKLQotCQkJfQotCi0J
CWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLQkJCW51bV90b19yZWFkID0g
WVlfUkVBRF9CVUZfU0laRTsKLQotCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLQkJWVlfSU5Q
VVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVd
KSwKLQkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKLQotCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCWlmICgg
eXlnLT55eV9uX2NoYXJzID09IDAgKQotCQl7Ci0JCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlf
TU9SRV9BREogKQotCQkJewotCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQlw
cHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJcmV0
X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9Ci0JCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJfQotCQl9
Ci0KLQllbHNlCi0JCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlpZiAoKHl5
X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1
MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLQkJeXlfc2l6ZV90IG5ld19z
aXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJz
ID4+IDEpOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICop
IHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zixu
ZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZiApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKLQl9Ci0KLQl5eWctPnl5X25fY2hhcnMgKz0gbnVt
YmVyX3RvX21vdmU7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKLQotCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZlswXTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNf
c3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hl
ZCAqLwotCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eWctPnl5X3N0YXJ0OwotCi0JZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JF
X0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotCQl7Ci0JCXJlZ2lzdGVy
IFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEp
OwotCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCQl7Ci0JCQl5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCXl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQkJfQotCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCQl7Ci0J
CQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJ
aWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKLQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWdu
ZWQgaW50KSB5eV9jXTsKLQkJCX0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQotCXJldHVy
biB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1h
a2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICogc3lub3BzaXMKLSAq
CW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAg
ICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5
eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCB5
eV9pc19qYW07Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlv
bnMuICovCi0JcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLQlyZWdp
c3RlciBZWV9DSEFSIHl5X2MgPSAxOwotCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKLQkJewotCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKLQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCX0KLQl3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCi0JCXsKLQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKLQkJCXl5X2MgPSB5eV9t
ZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQl9Ci0JeXlfY3VycmVudF9zdGF0ZSA9IHl5X254
dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlf
aXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOwotCi0JcmV0dXJuIHl5X2lzX2phbSA/
IDAgOiB5eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRp
ZgotCi17Ci0JaW50IGM7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotCi0JaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0J
CXsKLQkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0
byByZXR1cm4uCi0JCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVy
cywgdGhlbiBpdCdzIGEKLQkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRo
ZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLQkJICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJ
LyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7
Ci0KLQkJZWxzZQotCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCXl5X3NpemVfdCBvZmZz
ZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0JCQkrK3l5Zy0+eXlfY19i
dWZfcDsKLQotCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0J
CQkJewotCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCQkvKiBUaGlzIGhhcHBlbnMg
YmVjYXVzZSB5eV9nX25fYigpCi0JCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBh
Ci0JCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLQkJCQkJICogdHJ5IG1h
dGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLQkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5w
dXQoKSwKLQkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLQkJCQkJICog
U28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0JCQkJCSAqIHRvIEVPQl9BQ1RfRU5E
X09GX0ZJTEUuCi0JCQkJCSAqLwotCi0JCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0J
CQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIpOwotCi0JCQkJCS8qRkFMTFRIUk9VR0gqLwot
Ci0JCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlmICggcHB3cmFw
KHl5c2Nhbm5lciApICkKLQkJCQkJCXJldHVybiAwOwotCi0JCQkJCWlmICggISB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCi0JCQkJCQlZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2Nw
bHVzcGx1cwotCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLQkJCQkJcmV0
dXJuIGlucHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQkJCQkJfQotCi0JCQkJY2FzZSBFT0JfQUNU
X0NPTlRJTlVFX1NDQU46Ci0JCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IG9mZnNldDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQljID0gKih1bnNpZ25l
ZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0J
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLwotCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJ
LyogaWZuZGVmIFlZX05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBk
aWZmZXJlbnQgaW5wdXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBz
dHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3Rl
IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJ
TklUSUFMIC4KLSAqLwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0g
ICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLQkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsKLQl9Ci0KLQlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotfQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBw
YXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0JLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5j
dGlvbiBib2R5Ci0JICogd2l0aAotCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJcHBw
dXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8KLQlwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVy
ICkKLQkJcmV0dXJuOwotCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1
c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBuZXdfYnVmZmVyOwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0J
LyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJp
bmcKLQkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlz
IGZsYWcKLQkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBp
dCdzIHNhZmUKLQkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQl5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xv
YWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQl5eWctPnl5X25fY2hh
cnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0JeXlnLT55eXRleHRf
cHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zOwotCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0J
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUg
YW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSBy
ZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXpl
IGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUuCi0gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAg
KEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVG
RkVSX1NUQVRFIGI7Ci0gICAgCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9m
KCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZl
cigpIiApOwotCi0JYi0+eXlfYnVmX3NpemUgPSBzaXplOwotCi0JLyogeXlfY2hfYnVmIGhhcyB0
byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotCSAq
IHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotCSAqLwotCWIt
Pnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5u
ZXIgKTsKLQlpZiAoICEgYi0+eXlfY2hfYnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3Vy
X2J1ZmZlciA9IDE7Ci0KLQlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLQly
ZXR1cm4gYjsKLX0KLQotLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVm
ZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIGIgKQot
CQlyZXR1cm47Ci0KLQlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBp
ZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZ
WV9CVUZGRVJfU1RBVEUpIDA7Ci0KLQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQlwcGZy
ZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKLQotCXBwZnJlZSgodm9pZCAq
KSBiICx5eXNjYW5uZXIgKTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBh
IGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4g
b25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgp
IG9yIGF0IEVPRi4KLSAqLwotICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVG
RkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotCWlu
dCBvZXJybm8gPSBlcnJubzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQot
CWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAg
IC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBf
cHJvYmFibHlfCi0gICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9n
ZXRfbmV4dF9idWZmZXIuCi0gICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJl
c2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJF
TlRfQlVGRkVSKXsKLSAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlf
YnNfY29sdW1uID0gMDsKLSAgICB9Ci0KLSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAw
OwotICAgIAotCWVycm5vID0gb2Vycm5vOwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQg
Y2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0g
KiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlf
Q1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCWlmICggISBiICkKLQkJcmV0dXJuOwotCi0JYi0+eXlfbl9j
aGFycyA9IDA7Ci0KLQkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0
ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwotCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1
ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4K
LQkgKi8KLQliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JYi0+eXlf
Y2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0JYi0+eXlfYnVmX3BvcyA9ICZi
LT55eV9jaF9idWZbMF07Ci0KLQliLT55eV9hdF9ib2wgPSAxOwotCWItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0JaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJ
cHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5l
dyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1
cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBp
ZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHB1c2hfYnVm
ZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0JaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JcHBlbnN1cmVf
YnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7Ci0KLQkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9t
IHBwX3N3aXRjaF90b19idWZmZXIuICovCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsK
LQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQkvKiBPbmx5IHB1c2gg
aWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KLQlpZiAoWVlfQ1VSUkVO
VF9CVUZGRVIpCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOwotCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0KLQkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9f
YnVmZmVyLiAqLwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCXl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0
ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVu
dCBiZWNvbWVzIHRoZSBuZXcgdG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICovCi12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLQlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotCQlyZXR1cm47Ci0KLQlwcF9kZWxldGVf
YnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwotCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IE5VTEw7Ci0JaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0JCS0t
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0J
CXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCQl5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiA9IDE7Ci0JfQotfQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0
IGRvZXMgbm90IGV4aXN0LgotICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBw
dXNoLgotICovCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLQl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCWlmICgheXlnLT55eV9i
dWZmZXJfc3RhY2spIHsKLQotCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxl
bWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZl
biBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBp
bW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLQkJbnVtX3Rv
X2FsbG9jID0gMTsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSoqKXBwYWxsb2MKLQkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJLCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9i
dWZmZXJfc3RhY2sgKQotCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0JCQkJCQkJCSAgCi0JCW1lbXNldCh5eWct
Pnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7Ci0JCQkJCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19h
bGxvYzsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLQkJcmV0dXJuOwotCX0KLQot
CWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCkgLSAxKXsKLQotCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9z
c2libGUgcHVzaC4gKi8KLQkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6
ZSAqLzsKLQotCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93
X3NpemU7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
KilwcHJlYWxsb2MKLQkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotCQkJCQkJCQludW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlz
Y2FubmVyKTsKLQkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwotCi0JCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0JCW1lbXNldCh5eWctPnl5X2J1
ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6
ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCA9IG51bV90b19hbGxvYzsKLQl9Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0
YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZm
ZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUg
dGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZm
ZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotCVlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJh
c2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0x
XSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSBy
b29tIGZvciB0aGUgRU9CJ3MuICovCi0JCXJldHVybiAwOwotCi0JYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OwotCWlmICggISBiICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKLQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8q
ICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9j
aF9idWYgPSBiYXNlOwotCWItPnl5X2lzX291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2Zp
bGUgPSAwOwotCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRl
cmFjdGl2ZSA9IDA7Ci0JYi0+eXlfYXRfYm9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7
Ci0JYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQlwcF9zd2l0Y2hfdG9f
YnVmZmVyKGIgLHl5c2Nhbm5lciApOwotCi0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUg
aW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBs
ZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5
eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0
IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVz
KCkgaW5zdGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0
IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLQlyZXR1cm4gcHBf
c2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0
dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5l
eHQgY2FsbCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0
ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBs
ZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0
ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4g
dGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJf
U1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAg
X3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBi
OwotCWNoYXIgKmJ1ZjsKLQl5eV9zaXplX3QgbiwgaTsKLSAgICAKLQkvKiBHZXQgbWVtb3J5IGZv
ciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLQlu
ID0gX3l5Ynl0ZXNfbGVuICsgMjsKLQlidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5l
ciApOwotCWlmICggISBidWYgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVz
X2xlbjsgKytpICkKLQkJYnVmW2ldID0geXlieXRlc1tpXTsKLQotCWJ1ZltfeXlieXRlc19sZW5d
ID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIgPSBw
cF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFM
X0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9r
YXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICog
YXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0JICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0K
LQlyZXR1cm4gYjsKLX0KLQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJ
VF9GQUlMVVJFIDIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25z
dCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCSh2b2lkKSBmcHJpbnRm
KCBzdGRlcnIsICIlc1xuIiwgbXNnICk7Ci0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0K
LS8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwot
Ci0jdW5kZWYgeXlsZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyog
VW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxl
c3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNy
b19hcmcpO1wKLQkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotCQl5eWct
Pnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCi0JCXl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAotCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsg
XAotCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0K
LS8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJl
cnMuICovCi0KLS8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIu
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFf
VFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5
ZXh0cmE7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwot
fQotCi0vKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0v
KiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KLSAqLwotRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHJldHVybiB5eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0
IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwoteXlfc2l6ZV90IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJl
bnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
Ci1jaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4g
eXl0ZXh0OwotfQotCi0vKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlz
IG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRo
ZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhU
UkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4
dHJhID0gdXNlcl9kZWZpbmVkIDsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJl
ci4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBp
ZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JV
RkZFUiApCi0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVf
bnVtYmVyOwotfQotCi0vKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5l
X251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZv
aWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0KLSAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4
aXN0cy4gKi8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5
eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlz
Y2FubmVyKTsgCi0gICAgCi0gICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQg
dGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBp
bnB1dCBidWZmZXIuCi0gKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19i
dWZmZXIKLSAqLwotdm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIHl5aW4gPSBpbl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklM
RSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9z
dHIgOwotfQotCi1pbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHJldHVybiB5eV9mbGV4X2RlYnVnOwotfQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1
ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7
Ci19Ci0KLS8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZ
U1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4g
eXlsdmFsOwotfQotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0K
LVlZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eWxsb2M7Ci19Ci0gICAgCi12b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3Bh
cmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07
Ci19Ci0gICAgCi0vKiBVc2VyLXZpc2libGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3Bl
Y2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICog
dGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVy
IGFzIHRoZSBsYXN0IGFyZ3VtZW50LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRs
ZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1p
bnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRy
X3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxs
b2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95
eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgfQotCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVn
cyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAg
IG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0K
LSAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8q
IHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5p
dCwgYnV0IGZvbGxvd3MgdGhlCi0gKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBh
cyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBv
aW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxs
IChhbmQKLSAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0
IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUg
aW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAq
IHRoZSB5eWV4dHJhIGZpZWxkLgotICovCi0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJB
X1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3Vz
ZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0g
TlVMTCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0JCi0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBz
dHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotCQotICAgIGlmICgqcHRyX3l5X2ds
b2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4g
MTsKLSAgICB9Ci0gICAgCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVn
cyBpbgotICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICov
Ci0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3Qp
KTsKLSAgICAKLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2Jh
bHMpOwotICAgIAotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMg
KTsKLX0KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVl
bnRyYW50IHNjYW5uZXIuCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxl
eF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWct
Pnl5X2J1ZmZlcl9zdGFjayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsK
LSAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9
IChjaGFyICopIDA7Ci0gICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0g
MDsKLQotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0
X3N0YWNrX2RlcHRoID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8q
IERlZmluZWQgaW4gbWFpbi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRp
bjsKLSAgICB5eW91dCA9IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0g
ICAgeXlvdXQgPSAoRklMRSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVy
ZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICog
cHBsZXhfaW5pdCgpCi0gICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4X2Rlc3Ry
b3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwot
aW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9w
IHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdoaWxlKFlZ
X0NVUlJFTlRfQlVGRkVSKXsKLQkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAs
eXlzY2FubmVyICk7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JCXBwcG9w
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotCX0KLQotCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0
c2VsZi4gKi8KLQlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0JeXln
LT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29u
ZGl0aW9uIHN0YWNrLiAqLwotICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlz
Y2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyog
UmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBz
Y2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKLSAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlh
bGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KLSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7
Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwot
ICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5V
TEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVz
LgotICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5
IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotCXJlZ2lzdGVyIGludCBpOwotCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLQkJczFb
aV0gPSBzMltpXTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBp
bnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0JcmVnaXN0ZXIgaW50IG47Ci0JZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQot
CXJldHVybiBuOwotfQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7
Ci19Ci0KLXZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9s
bG93aW5nIGFjY29tbW9kYXRlcyBib3RoCi0JICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNo
YXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVy
aWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLQkgKiBiZWNhdXNlIGJvdGgg
QU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0JICogYW55IHBv
aW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwot
CSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotCSAqLwotCXJldHVybiAodm9pZCAq
KSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKLX0KLQotdm9pZCBwcGZyZWUgKHZvaWQg
KiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8q
IHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFC
TEVTX05BTUUgInl5dGFibGVzIgotCi1uYW1lc3BhY2UgcHAgewotCi1Ub2tlbml6ZXI6OlRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQotewotICAgIG1Db250
ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Ci19Ci0KLVRva2VuaXplcjo6flRva2VuaXpl
cigpCi17Ci0gICAgZGVzdHJveVNjYW5uZXIoKTsKLX0KLQotYm9vbCBUb2tlbml6ZXI6OmluaXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KQotewotICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKLSAgICBpZiAoKGNvdW50ID4g
MCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgbUNvbnRleHQuaW5wdXQg
PSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIHJldHVybiBpbml0U2Nhbm5lcigp
OwotfQotCi12b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKLXsKLSAgICAv
LyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KLSAgICAvLyBTZWUgbWFjcm8g
eXlmaWxlbm8uCi0gICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Ci19Ci0KLXZvaWQgVG9r
ZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQotewotICAgIHBwc2V0X2xpbmVubyhsaW5l
LG1IYW5kbGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKLXsKLSAg
ICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFu
ZGxlKTsKLSAgICB0b2tlbi0+ZmxhZ3MgPSAwOwotCi0gICAgdG9rZW4tPnNldEF0U3RhcnRPZkxp
bmUobUNvbnRleHQubGluZVN0YXJ0KTsKLSAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+
dHlwZSA9PSAnXG4nOwotCi0gICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5s
ZWFkaW5nU3BhY2UpOwotICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwotfQotCi1i
b29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQotewotICAgIGlmICgobUhhbmRsZSA9PSBOVUxM
KSAmJiBwcGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQotewotICAgIGlmIChtSGFuZGxl
ID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7
Ci0gICAgbUhhbmRsZSA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
NjRhMjg4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VO
SVpFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCi0KLSNp
bmNsdWRlICJJbnB1dC5oIgotI2luY2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMu
aCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBUb2tl
bml6ZXIgOiBwdWJsaWMgTGV4ZXIKLXsKLSAgcHVibGljOgotICAgIHN0cnVjdCBDb250ZXh0Ci0g
ICAgewotICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7Ci0KLSAgICAgICAgSW5wdXQg
aW5wdXQ7Ci0gICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBU
b2tlbiBsb2NhdGlvbiBzaG91bGQgdHJhY2sKLSAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9m
IElucHV0OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQotICAgICAg
ICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4K
LSAgICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7Ci0KLSAgICAgICAgYm9vbCBsZWFkaW5n
U3BhY2U7Ci0gICAgICAgIGJvb2wgbGluZVN0YXJ0OwotICAgIH07Ci0KLSAgICBUb2tlbml6ZXIo
RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKLSAgICB+VG9rZW5pemVyKCk7Ci0KLSAgICBib29s
IGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxl
bmd0aFtdKTsKLQotICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7Ci0gICAgdm9pZCBz
ZXRMaW5lTnVtYmVyKGludCBsaW5lKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRv
a2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tl
bml6ZXIpOwotICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lTY2FubmVy
KCk7Ci0KLSAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCi0gICAgQ29udGV4
dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCi19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAK
LSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9Ub2tlbml6ZXIubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
MDFjNzMyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICsw
LDAgQEAKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExl
eCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jv
c29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9E
SUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0q
LwotCi0ldG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRl
ZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUg
IlRva2VuaXplci5oIgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tl
bi5oIgotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1n
ZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKLSNlbmRpZgotCi10eXBlZGVmIHN0ZDo6c3Ry
aW5nIFlZU1RZUEU7Ci10eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOwotCi0vLyBV
c2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51
bWJlci4KLSNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KLQotI2RlZmluZSBZWV9VU0VSX0lOSVQg
ICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5
eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWV4dHJhLT5sZWFkaW5n
U3BhY2UgPSBmYWxzZTsgXAotICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAg
XAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9j
ID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCi0gICAgICAgIHdoaWxlICgoc2Nhbkxv
Yy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgp
KSkgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQt
Pmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKLSAgICAgICAgICAgICsreXlmaWxlbm87
IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzY2FuTG9jLT5jSW5kZXgg
Kz0geXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGls
ZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJl
c3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKLQotJX0KLQotJW9wdGlv
biBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHJlZW50cmFudCBi
aXNvbi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9u
IGV4dHJhLXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgotJXggQ09NTUVOVAotCi1ORVdM
SU5FICAgICBcbnxccnxcclxuCi1JREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCi1Q
VU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NPTlNUQU5U
ICAgICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVD
SU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAgICAgICAg
WzAtOV0KLUVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFDVElPTkFM
X0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0lJQotCi0g
ICAgLyogTGluZSBjb21tZW50ICovCi0iLy8iW15cclxuXSoKLQotICAgIC8qIEJsb2NrIGNvbW1l
bnQgKi8KLSAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVk
LiAqLwotICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAq
LyAKLSIvKiIgeyBCRUdJTihDT01NRU5UKTsgfQotPENPTU1FTlQ+W14qXHJcbl0rCi08Q09NTUVO
VD4iKiIKLTxDT01NRU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87IH0KLTxDT01NRU5UPiIqLyIg
ewotICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7Ci0gICAgQkVHSU4oSU5JVElBTCk7
Ci19Ci0KLSMgewotICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBw
cmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KLSAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0p
OwotICAgIHJldHVybiB5eWV4dHJhLT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBw
cDo6VG9rZW46OlBQX09USEVSOwotfQotCi17SURFTlRJRklFUn0gewotICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwot
fQotCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09O
U1RBTlR9IHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6Q09OU1RfSU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7
RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwot
fQotCi0gICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJ
VH0gbXVzdCBiZSBhIG51bWJlci4gKi8KLSAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlk
IGludGVnZXJzIGFuZCBmbG9hdHMuICovCi0oe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntE
SUdJVH0rW19hLXpBLVowLTkuXSopIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOwotfQotCi0iKysiIHsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
SU5DOwotfQotIi0tIiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKLX0KLSI8PCIgewotICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOwotfQotIj4+
IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX1JJR0hUOwotfQotIjw9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOwotfQotIj49IiB7Ci0gICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dF
OwotfQotIj09IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0VROwotfQotIiE9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOwotfQotIiYmIiB7Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0FORDsKLX0KLSJeXiIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Ci19Ci0ifHwiIHsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Ci19Ci0i
Kz0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfQUREX0FTU0lHTjsKLX0KLSItPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOwotfQot
Iio9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX01VTF9BU1NJR047Ci19Ci0iLz0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKLX0K
LSIlPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOwotfQotIjw8PSIgewotICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsK
LX0KLSI+Pj0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOwotfQotIiY9IiB7Ci0gICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJ
R047Ci19Ci0iXj0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKLX0KLSJ8PSIgewotICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJ
R047Ci19Ci0KLXtQVU5DVFVBVE9SfSB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBd
KTsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi1bIFx0XHZcZl0rICAgeyB5eWV4dHJhLT5s
ZWFkaW5nU3BhY2UgPSB0cnVlOyB9Ci0KLXtORVdMSU5FfSB7Ci0gICAgKyt5eWxpbmVubzsKLSAg
ICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0KLQotLiB7Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQ
UF9PVEhFUjsKLX0KLQotPCo+PDxFT0Y+PiB7Ci0gICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90
IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KLSAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBF
T0YgdG9rZW4gbWFudWFsbHkuCi0gICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1
dDsKLSAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7
Ci0gICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7Ci0g
ICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCi0gICAgewotICAgICAgICAvLyBX
ZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQot
ICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgotICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBz
SW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7Ci0gICAgICAgIHl5ZmlsZW5vID0gc0luZGV4
TWF4OyB5eWxpbmVubyA9IDE7Ci0gICAgfQotICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOwot
ICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOwotICAgIHl5bHZhbC0+Y2xlYXIoKTsKLQotICAg
IGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQotICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywg
eXlsaW5lbm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAg
ICB9Ci0gICAgeXl0ZXJtaW5hdGUoKTsKLX0KLQotJSUKLQotbmFtZXNwYWNlIHBwIHsKLQotVG9r
ZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkK
LXsKLSAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOwotfQotCi1Ub2tlbml6
ZXI6On5Ub2tlbml6ZXIoKQotewotICAgIGRlc3Ryb3lTY2FubmVyKCk7Ci19Ci0KLWJvb2wgVG9r
ZW5pemVyOjppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSkKLXsKLSAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKChjb3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKLQotICAgIG1D
b250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICByZXR1cm4g
aW5pdFNjYW5uZXIoKTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZp
bGUpCi17Ci0gICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCi0gICAg
Ly8gU2VlIG1hY3JvIHl5ZmlsZW5vLgotICAgIHl5c2V0X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsK
LX0KLQotdm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0gICAgeXlz
ZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6bGV4KFRva2Vu
KiB0b2tlbikKLXsKLSAgICB0b2tlbi0+dHlwZSA9IHl5bGV4KCZ0b2tlbi0+dmFsdWUsICZ0b2tl
bi0+bG9jYXRpb24sIG1IYW5kbGUpOwotICAgIHRva2VuLT5mbGFncyA9IDA7Ci0KLSAgICB0b2tl
bi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOwotICAgIG1Db250ZXh0Lmxp
bmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7Ci0KLSAgICB0b2tlbi0+c2V0SGFzTGVhZGlu
Z1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7Ci0gICAgbUNvbnRleHQubGVhZGluZ1NwYWNl
ID0gZmFsc2U7Ci19Ci0KLWJvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCi17Ci0gICAgaWYg
KChtSGFuZGxlID09IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRs
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkK
LXsKLSAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICB5eWxl
eF9kZXN0cm95KG1IYW5kbGUpOwotICAgIG1IYW5kbGUgPSBOVUxMOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNo
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlOWM3MGIxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVy
YXRlX3BhcnNlci5zaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMhL2Jpbi9iYXNo
Ci0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0KLSMgR2VuZXJhdGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nl
c3Nvci4KLQotcnVuX2ZsZXgoKQotewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQotb3V0cHV0
X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgotZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0Zmls
ZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1ydW5fYmlzb24oKQotewotaW5wdXRf
ZmlsZT0kc2NyaXB0X2Rpci8kMQotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgotYmlzb24g
LS1uby1saW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5w
dXRfZmlsZQotfQotCi1zY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKLQotIyBHZW5lcmF0ZSBwcmVw
cm9jZXNzb3IKLXJ1bl9mbGV4IFRva2VuaXplci5sIFRva2VuaXplci5jcHAKLXJ1bl9iaXNvbiBF
eHByZXNzaW9uUGFyc2VyLnkgRXhwcmVzc2lvblBhcnNlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxl
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L25ld19maWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFhNWZkOC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9uZXdfZmlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0gICAg
U29tZSBuZXcgY29kZSB0aGF0IHVzZXMgdGFicwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L25ld19maWxlMi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9uZXdfZmlsZTIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkMGUxNmRmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlMi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1zb21lIG90aGVyIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91
dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzE2NGVhLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L3BwX3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKLQotI2lmbmRl
ZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfUFBVVElMU19IXwotCi0vLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNv
bnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCi0vLyBUaGlzIG11c3QgYmUgdXNlZCBp
biB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgotI2RlZmluZSBQUF9ESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKLSAgVHlwZU5hbWUoY29uc3QgVHlwZU5h
bWUmKTsgICAgICAgICAgICAgICBcCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikK
LQotI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9w
cmVwcm9jZXNzb3IudmNwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzZhOTc1OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCisrKyAv
ZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
IldpbmRvd3MtMTI1MiI/PgotPFZpc3VhbFN0dWRpb1Byb2plY3QKLQlQcm9qZWN0VHlwZT0iVmlz
dWFsIEMrKyIKLQlWZXJzaW9uPSI5LjAwIgotCU5hbWU9InByZXByb2Nlc3NvciIKLQlQcm9qZWN0
R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX0iCi0JUm9vdE5hbWVz
cGFjZT0icHJlcHJvY2Vzc29yIgotCUtleXdvcmQ9IldpbjMyUHJvaiIKLQlUYXJnZXRGcmFtZXdv
cmtWZXJzaW9uPSIxOTY2MTMiCi0JPgotCTxQbGF0Zm9ybXM+Ci0JCTxQbGF0Zm9ybQotCQkJTmFt
ZT0iV2luMzIiCi0JCS8+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0ieDY0IgotCQkvPgotCTwvUGxh
dGZvcm1zPgotCTxUb29sRmlsZXM+Ci0JPC9Ub29sRmlsZXM+Ci0JPENvbmZpZ3VyYXRpb25zPgot
CQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rv
cnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjQi
Ci0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVp
bGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgotCQkJCU1pbmltYWxS
ZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGli
cmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9
IjQiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0i
NCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmln
dXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChT
b2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9y
eT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKLQkJCUNo
YXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2Vi
U2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
TUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgot
CQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUi
Ci0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgotCQkJCVJ1
bnRpbWVMaWJyYXJ5PSIwIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgot
CQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlX
YXJuQXNFcnJvcj0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCURp
c2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
TGlicmFyaWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRU
b29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFt
ZT0iRGVidWd8eDY0IgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZv
cm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0i
JChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5
cGU9IjQiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1
aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRv
clRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdl
dEVudmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9
IldJTjMyO19ERUJVRztfTElCIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2lj
UnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21w
aWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJV2FybkFzRXJyb3I9InRy
dWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlEaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaWJy
YXJpYW5Ub29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
Ci0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJS
ZWxlYXNlfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3Jt
TmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQo
UGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBl
PSI0IgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIx
IgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIy
IgotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKLQkJCQlQcmVwcm9jZXNzb3JE
ZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0J
CQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCi0JCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgot
CQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01h
bmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxp
bmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0J
CTwvQ29uZmlndXJhdGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwv
UmVmZXJlbmNlcz4KLQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyIK
LQkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCi0J
CQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZG
fSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3Rp
dmVIYW5kbGVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuY3BwIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmNwcCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhw
YW5kZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXFByZXByb2Nlc3Nvci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8
L0ZpbHRlcj4KLQkJPEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJo
O2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAt
ODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXERpYWdub3N0aWNzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJz
ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxJ
bnB1dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XExleGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cTWFjcm8uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlxNYWNyb0V4cGFuZGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQk8L0ZpbGVzPgotCTxHbG9iYWxzPgotCTwv
R2xvYmFscz4KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19s
ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDQxMjVkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9udW1lcmljX2xleC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBu
dW1lcmljX2xleC5oOiBGdW5jdGlvbnMgdG8gZXh0cmFjdCBudW1lcmljIHZhbHVlcyBmcm9tIHN0
cmluZy4KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTlVNRVJJQ19MRVhfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX05VTUVSSUNfTEVYX0hfCisKKyNpbmNsdWRlIDxz
c3RyZWFtPgorCituYW1lc3BhY2UgcHAgeworCitpbmxpbmUgc3RkOjppb3M6OmZtdGZsYWdzIG51
bWVyaWNfYmFzZV9pbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBpZiAoKHN0ci5z
aXplKCkgPj0gMikgJiYKKyAgICAgICAgKHN0clswXSA9PSAnMCcpICYmCisgICAgICAgIChzdHJb
MV0gPT0gJ3gnIHx8IHN0clsxXSA9PSAnWCcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
aW9zOjpoZXg7CisgICAgfQorICAgIGVsc2UgaWYgKChzdHIuc2l6ZSgpID49IDEpICYmIChzdHJb
MF0gPT0gJzAnKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Omlvczo6b2N0OworICAgIH0K
KyAgICByZXR1cm4gc3RkOjppb3M6OmRlYzsKK30KKworLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlv
bnMgcGFyc2UgdGhlIGdpdmVuIHN0cmluZyB0byBleHRyYWN0IGEgbnVtZXJpY2FsCisvLyB2YWx1
ZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gVGhlc2UgZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBzdHJp
bmcgaXMKKy8vIG9mIHRoZSBjb3JyZWN0IGZvcm0uIFRoZXkgY2FuIG9ubHkgZmFpbCBpZiB0aGUg
cGFyc2VkIHZhbHVlIGlzIHRvbyBiaWcsCisvLyBpbiB3aGljaCBjYXNlIGZhbHNlIGlzIHJldHVy
bmVkLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPgorYm9vbCBudW1lcmljX2xleF9pbnQo
Y29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgSW50VHlwZSogdmFsdWUpCit7CisgICAgc3RkOjppc3Ry
aW5nc3RyZWFtIHN0cmVhbShzdHIpOworICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3Nh
cnksIGJ1dCBNU1ZTIGhhcyBhIGJ1Z2d5IGltcGxlbWVudGF0aW9uLgorICAgIC8vIEl0IHJldHVy
bnMgaW5jb3JyZWN0IHJlc3VsdHMgaWYgdGhlIGJhc2UgaXMgbm90IHNwZWNpZmllZC4KKyAgICBz
dHJlYW0uc2V0ZihudW1lcmljX2Jhc2VfaW50KHN0ciksIHN0ZDo6aW9zOjpiYXNlZmllbGQpOwor
CisgICAgc3RyZWFtID4+ICgqdmFsdWUpOworICAgIHJldHVybiAhc3RyZWFtLmZhaWwoKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgorYm9vbCBudW1lcmljX2xleF9mbG9hdChj
b25zdCBzdGQ6OnN0cmluZyYgc3RyLCBGbG9hdFR5cGUqIHZhbHVlKQoreworICAgIHN0ZDo6aXN0
cmluZ3N0cmVhbSBzdHJlYW0oc3RyKTsKKyAgICAvLyBGb3JjZSAiQyIgbG9jYWxlIHNvIHRoYXQg
ZGVjaW1hbCBjaGFyYWN0ZXIgaXMgYWx3YXlzICcuJywgYW5kCisgICAgLy8gbm90IGRlcGVuZGVu
dCBvbiB0aGUgY3VycmVudCBsb2NhbGUuCisgICAgc3RyZWFtLmltYnVlKHN0ZDo6bG9jYWxlOjpj
bGFzc2ljKCkpOworCisgICAgc3RyZWFtID4+ICgqdmFsdWUpOworICAgIHJldHVybiAhc3RyZWFt
LmZhaWwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgcHAuCisjZW5kaWYgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX05VTUVSSUNfTEVYX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjY3MzQyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIw
MDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBz
dXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRp
b24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2Fy
ZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3Qg
YWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWws
IG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhp
cyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1
c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdh
cmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFy
eQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNv
ZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwg
dGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFs
bCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0
aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1D
b3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQg
aW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBp
bXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAot
bGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91
ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElB
IFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBo
ZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlU
QVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1F
TlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9S
Ci1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJ
VEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxF
IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBS
T0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBB
UklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNB
VElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVS
IENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElG
Ci1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBCSVNPTl9QQVJTRVJfSAotIyBk
ZWZpbmUgQklTT05fUEFSU0VSX0gKLQotI2lmbmRlZiB5eXN0eXBlcHAKLXR5cGVkZWYgc3RydWN0
IHsKLSAgICBpbnQgICAgc2NfaW50OwotICAgIGZsb2F0ICBzY19mdmFsOwotICAgIGludCAgICBz
Y19pZGVudDsKLQljaGFyICAgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTisxXTsKLX0g
eXlzdHlwZXBwOwotCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0jIGRl
ZmluZQlDUFBfQU5EX09QCSAgICAgICAgMjU3Ci0jIGRlZmluZQlDUFBfU1VCX0FTU0lHTgkgICAg
MjU5Ci0jIGRlZmluZQlDUFBfTU9EX0FTU0lHTgkgICAgMjYwCi0jIGRlZmluZQlDUFBfQUREX0FT
U0lHTgkyNjEKLSMgZGVmaW5lCUNQUF9ESVZfQVNTSUdOCTI2MgotIyBkZWZpbmUJQ1BQX01VTF9B
U1NJR04JMjYzCi0jIGRlZmluZQlDUFBfRVFfT1AJICAgICAgICAyNjQKLSMgZGVmaW5lICAgIENQ
UF9YT1JfT1AgICAgICAgICAyNjUgCi0jIGRlZmluZQlFUlJPUl9TWQkgICAgMjY2Ci0jIGRlZmlu
ZQlDUFBfRkxPQVRDT05TVEFOVAkyNjcKLSMgZGVmaW5lCUNQUF9HRV9PUAkgICAgICAgIDI2OAot
IyBkZWZpbmUJQ1BQX1JJR0hUX09QICAgICAgICAyNjkKLSMgZGVmaW5lCUNQUF9JREVOVElGSUVS
CSAgICAyNzAKLSMgZGVmaW5lCUNQUF9JTlRDT05TVEFOVAkgICAgMjcxCi0jIGRlZmluZQlDUFBf
TEVfT1AJICAgICAgICAyNzIKLSMgZGVmaW5lCUNQUF9MRUZUX09QCSAgICAgICAgMjczCi0jIGRl
ZmluZQlDUFBfREVDX09QCTI3NAotIyBkZWZpbmUJQ1BQX05FX09QCSAgICAgICAgMjc1Ci0jIGRl
ZmluZQlDUFBfT1JfT1AJICAgICAgICAyNzYKLSMgZGVmaW5lCUNQUF9JTkNfT1AJICAgIDI3Nwot
IyBkZWZpbmUJQ1BQX1NUUkNPTlNUQU5UCSAgICAyNzgKLSMgZGVmaW5lCUNQUF9UWVBFSURFTlRJ
RklFUgkyNzkKLQotIyBkZWZpbmUJRklSU1RfVVNFUl9UT0tFTl9TWQkyODkKLQotIyBkZWZpbmUJ
Q1BQX1JJR0hUX0FTU0lHTgkgICAgMjgwCi0jIGRlZmluZQlDUFBfTEVGVF9BU1NJR04JICAgIDI4
MQotIyBkZWZpbmUJQ1BQX0FORF9BU1NJR04JMjgyCi0jIGRlZmluZQlDUFBfT1JfQVNTSUdOICAJ
MjgzCi0jIGRlZmluZQlDUFBfWE9SX0FTU0lHTgkyODQKLSMgZGVmaW5lCUNQUF9MRUZUX0JSQUNL
RVQJMjg1Ci0jIGRlZmluZQlDUFBfUklHSFRfQlJBQ0tFVAkyODYKLSMgZGVmaW5lCUNQUF9MRUZU
X0JSQUNFCTI4NwotIyBkZWZpbmUJQ1BQX1JJR0hUX0JSQUNFCTI4OAotCi0jZW5kaWYgLyogbm90
IEJJU09OX1BBUlNFUl9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNjRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaApAQCAt
MCwwICsxLDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXBy
b2Nlc3NvciB1dGlsaXRpZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElM
U19IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1h
Y3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rp
b25zCisvLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZv
ciBhIGNsYXNzLgorI2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUp
IFwKKyAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNTA1NmRhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMp
IDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEi
KSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxs
YXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0
d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBu
b3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBt
b2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1z
LCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29u
YWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4g
dGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0
byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29m
dHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJp
bmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElB
IFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJ
QSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGlu
IGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhl
ciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElB
Ci1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0
ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBv
ciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5v
dAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkg
eW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJ
RElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNl
ZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9O
IEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5H
RU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Us
IE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9O
IFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElB
QkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NU
IFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBP
UiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElG
SUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dF
VkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVO
IElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zbGdsb2JhbHMuaCIKLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKLWludCBJbml0Q1BQ
U3RydWN0KHZvaWQpOwotaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsKLWludCBJbml0
QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXplKTsKLWNoYXIqIEdldFN0cmlu
Z09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlODUzYy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
YworKysgL2Rldi9udWxsCkBAIC0xLDY5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
LUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJl
LgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIHNjYW5u
ZXIuYwotLy8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+
Ci0KLSNpZiAwCi0gICAgI2luY2x1ZGUgPGllZWVmcC5oPgotI2Vsc2UKLSAgICAjZGVmaW5lIGlz
aW5mZih4KSAoKCgqKGludCAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBMKSAmJiBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICgoKihpbnQgKikmKHgpICYgMHgwMDdmZmZmZkwpPT0w
MDAwMDAwMDAwTCkpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCi0KLXR5cGVkZWYgc3RydWN0
IFN0cmluZ0lucHV0U3JjIHsKLSAgICBJbnB1dFNyYyBiYXNlOwotICAgIGNoYXIgKnA7Ci19IFN0
cmluZ0lucHV0U3JjOwotCi1zdGF0aWMgaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMp
OwotCi1zdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppcywgeXlzdHlwZXBwICogeXlsdmFs
cHApCi17Ci0gICAgcmV0dXJuIEVPRjsKLX0gLy8gZW9mX3NjYW4KLQotc3RhdGljIHZvaWQgbm9v
cChJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9Ci0KLXN0YXRp
YyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9v
cCwgMCwgMCB9OwotCi1zdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCk7Ci0KLSNkZWZpbmUgRU9MX1NZICdcbicKLQotI2lmIGRlZmluZWQoX01TQ19W
RVIpCi0gICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIF9fYXNtIGludCAzCi0jZWxpZiBkZWZp
bmVkKF9NX0FNRDY0KQotICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQoKSBhc3NlcnQoISJEYmdf
QnJlYWtwb2ludCIpOwotI2Vsc2UKLSAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkKLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX01fQU1ENjQpCi0gICAgX19p
bnQ2NCBSRFRTQyAoIHZvaWQgKSB7Ci0KLSAgICAgICAgX19pbnQ2NCB2OwotICAgIAotICAgICAg
ICBfX2FzbSBfX2VtaXQgMHgwZgotICAgICAgICBfX2FzbSBfX2VtaXQgMHgzMQotICAgICAgICBf
X2FzbSBtb3YgZHdvcmQgcHRyIHYsIGVheAotICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYr
NCwgZWR4Ci0gICAgCi0gICAgICAgIHJldHVybiB2OwotICAgIH0KLSNlbmRpZgotCi0KLWludCBJ
bml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCkKLXsKLSAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBu
ZWVkZWQgYnkgdGhlIENQUCBsaW5lIHNjYW5uZXI6Ci0gICAgaWYgKCFJbml0Q1BQKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgY3BwLT5tb3N0UmVjZW50VG9rZW4gPSAwOwotICAgIGNwcC0+
dG9rZW5Mb2MgPSAmY3BwLT5sdG9rZW5Mb2M7Ci0KLSAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0g
MDsKLSAgICBjcHAtPmx0b2tlbkxvYy5saW5lID0gMDsKLQotICAgIGNwcC0+Y3VycmVudElucHV0
ID0gJmVvZl9pbnB1dHNyYzsKLSAgICBjcHAtPnByZXZpb3VzX3Rva2VuID0gJ1xuJzsKLSAgICBj
cHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0KLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdFNj
YW5uZXIKLQotaW50IEZyZWVTY2FubmVyKHZvaWQpCi17Ci0gICAgcmV0dXJuIChGcmVlQ1BQKCkp
OwotfQotCi1pbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIGNw
cC0+UGFXaGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNw
cC0+UGFBcmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKLSAg
ICBTY2FuRnJvbVN0cmluZyhzdHJpbmdbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICog
c3RyX2dldGNoKCkKLSAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmlu
Z3MuCi0gKiByZXR1cm5zIHRoZSBuZXh0LWNoYXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgotICog
cmV0dXJucyBFT0Ygd2hlbiB0aGUgY29tcGxldGUgc2hhZGVyIGlzIHBhcnNlZC4KLSAqLwotc3Rh
dGljIGludCBzdHJfZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluKQotewotICAgIGZvcig7Oyl7Ci0g
ICAgICAgaWYgKCppbi0+cCl7Ci0gICAgICAgICAgaWYgKCppbi0+cCA9PSAnXG4nKSB7Ci0gICAg
ICAgICAgICAgaW4tPmJhc2UubGluZSsrOwotICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuICppbi0+cCsrOwotICAgICAgIH0KLSAgICAg
ICBpZigrKyhjcHAtPlBhV2hpY2hTdHIpIDwgY3BwLT5QYUFyZ2MpewotICAgICAgICAgIGZyZWUo
aW4pOwotICAgICAgICAgIFNldFN0cmluZ051bWJlcihjcHAtPlBhV2hpY2hTdHIpOwotICAgICAg
ICAgIFNldExpbmVOdW1iZXIoMSk7Ci0gICAgICAgICAgU2NhbkZyb21TdHJpbmcoY3BwLT5QYUFy
Z3ZbY3BwLT5QYVdoaWNoU3RyXSk7Ci0gICAgICAgICAgaW49KFN0cmluZ0lucHV0U3JjKiljcHAt
PmN1cnJlbnRJbnB1dDsKLSAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgCi0gICAgICAg
fQotICAgICAgIGVsc2V7Ci0gICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5w
cmV2OwotICAgICAgICAgIGNwcC0+UGFXaGljaFN0cj0wOwotICAgICAgICAgIGZyZWUoaW4pOwot
ICAgICAgICAgIHJldHVybiBFT0Y7Ci0gICAgICAgfSAgCi0gICAgfQotfSAvLyBzdHJfZ2V0Y2gK
LQotc3RhdGljIHZvaWQgc3RyX3VuZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5
c3R5cGVwcCAqdHlwZSkgewotICAgIGlmIChpbi0+cFstMV0gPT0gY2gpaW4tPnAtLTsKLSAgICBl
bHNlIHsKLSAgICAgICAgKihpbi0+cCk9J1wwJzsgLy90aGlzIHdvdWxkIHRha2UgY2FyZSBvZiBz
aGlmdGluZyB0byB0aGUgcHJldmlvdXMgc3RyaW5nLgotICAgICAgICBjcHAtPlBhV2hpY2hTdHIt
LTsKLSAgICB9ICAKLSAgICBpZiAoY2ggPT0gJ1xuJykgewotICAgICAgICBpbi0+YmFzZS5saW5l
LS07Ci0gICAgICAgIERlY0xpbmVOdW1iZXIoKTsKLSAgICB9Ci19IC8vIHN0cl91bmdldGNoCi0K
LWludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKQotewotICAgIAotICAgIFN0cmluZ0lu
cHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoU3RyaW5nSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQo
aW4sIDAsIHNpemVvZihTdHJpbmdJbnB1dFNyYykpOwotICAgIGluLT5wID0gKGNoYXIqKSBzOwot
ICAgIGluLT5iYXNlLmxpbmUgPSAxOwotICAgIGluLT5iYXNlLnNjYW4gPSBieXRlX3NjYW47Ci0g
ICAgaW4tPmJhc2UuZ2V0Y2ggPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc3Ry
X2dldGNoOwotICAgIGluLT5iYXNlLnVuZ2V0Y2ggPSAodm9pZCAoKikoSW5wdXRTcmMgKiwgaW50
LCB5eXN0eXBlcHAgKikpc3RyX3VuZ2V0Y2g7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3Vy
cmVudElucHV0OwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotCi0gICAgcmV0
dXJuIDE7Ci19IC8vIFNjYW5Gcm9tU3RyaW5nOwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGbG9h
dGluZyBwb2ludCBjb25zdGFudHM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2RlZmluZSBBUFBFTkRf
Q0hBUl9TKGNoLCBzdHIsIGxlbiwgbWF4X2xlbikgXAotICAgICAgaWYgKGxlbiA8IG1heF9sZW4p
IHsgXAotICAgICAgICAgIHN0cltsZW4rK10gPSBjaDsgXAotICAgICAgfSBlbHNlIGlmICghYWxy
ZWFkeUNvbXBsYWluZWQpIHsgXAotICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJCVUZGRVIg
T1ZFUkZMT1ciKTsgXAotICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVkID0gMTsgXAotICAgICAg
fQotCi0vKgotICogbEZsb2F0Q29uc3QoKSAtIFNjYW4gYSBmbG9hdGluZyBwb2ludCBjb25zdGFu
dC4gIEFzc3VtZXMgdGhhdCB0aGUgc2Nhbm5lcgotICogICAgICAgICBoYXMgc2VlbiBhdCBsZWFz
dCBvbmUgZGlnaXQsIGZvbGxvd2VkIGJ5IGVpdGhlciBhIGRlY2ltYWwgJy4nIG9yIHRoZQotICog
ICAgICAgICBsZXR0ZXIgJ2UnLgotICogY2ggLSAnLicgb3IgJ2UnCi0gKiBsZW4gLSBsZW5ndGgg
b2Ygc3RyaW5nIGFscmVhZHkgY29waWVkIGludG8geXlsdmFscHAtPnN5bWJvbF9uYW1lLgotICov
Ci0KLXN0YXRpYyBpbnQgbEZsb2F0Q29uc3QoaW50IGNoLCBpbnQgbGVuLCB5eXN0eXBlcHAgKiB5
eWx2YWxwcCkKLXsKLSAgICBpbnQgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwotICAgIGFzc2VydCgo
Y2ggPT0gJy4nKSB8fCAoY2ggPT0gJ2UnKSB8fCAoY2ggPT0gJ0UnKSk7Ci0KLSAgICBpZiAoY2gg
PT0gJy4nKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwotICAgIH0K
LQotICAgIC8vIEV4cG9uZW50OgotICAgIGlmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7Ci0g
ICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhf
U1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKGNoID09ICcrJykgewot
ICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4s
IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlm
IChjaCA9PSAnLScpIHsKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5z
eW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgIGNoID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAg
ICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgQVBQ
RU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFN
RV9MRU4pOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVhQT05FTlQgSU5WQUxJRCIpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOwotCi0gICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9M
X05BTUVfTEVOKTsKLSAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAg
eXlsdmFscHAtPnNjX2Z2YWwgPSAoZmxvYXQpIGF0b2ZfZG90KHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZSk7Ci0gICAgaWYgKGlzaW5mZih5eWx2YWxwcC0+c2NfZnZhbCkpIHsKLSAgICAgICAgQ1BQRXJy
b3JUb0luZm9Mb2coIkZMT0FUIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgfQotICAgIHJldHVy
biBDUFBfRkxPQVRDT05TVEFOVDsKLX0gLy8gbEZsb2F0Q29uc3QKLQotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vIE5vcm1hbCBTY2FubmVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAotc3Rh
dGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsK
LSAgICBjaGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKLSAgICBpbnQgYWxyZWFk
eUNvbXBsYWluZWQgPSAwOwotICAgIGludCBsZW4sIGNoLCBpaSwgaXZhbCA9IDA7Ci0KLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAwOwotICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotIAot
ICAgICAgICB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xyJykgewot
ICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IDE7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0gY3BwLT5jdXJyZW50
SW5wdXQtPm5hbWU7Ci0gICAgICAgIGNwcC0+bHRva2VuTG9jLmxpbmUgPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+bGluZTsKLSAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwotICAgICAgICBsZW4g
PSAwOwotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gY2g7IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KLSAgICAgICAgY2FzZSBFT0Y6
Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2Fz
ZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKLSAgICAgICAgY2FzZSAnRic6IGNhc2UgJ0cnOiBj
YXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOgotICAgICAgICBjYXNlICdLJzogY2FzZSAnTCc6
IGNhc2UgJ00nOiBjYXNlICdOJzogY2FzZSAnTyc6Ci0gICAgICAgIGNhc2UgJ1AnOiBjYXNlICdR
JzogY2FzZSAnUic6IGNhc2UgJ1MnOiBjYXNlICdUJzoKLSAgICAgICAgY2FzZSAnVSc6IGNhc2Ug
J1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOgotICAgICAgICBjYXNlICdaJzogY2Fz
ZSAnXyc6Ci0gICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBj
YXNlICdlJzoKLSAgICAgICAgY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6
IGNhc2UgJ2onOgotICAgICAgICBjYXNlICdrJzogY2FzZSAnbCc6IGNhc2UgJ20nOiBjYXNlICdu
JzogY2FzZSAnbyc6Ci0gICAgICAgIGNhc2UgJ3AnOiBjYXNlICdxJzogY2FzZSAncic6IGNhc2Ug
J3MnOiBjYXNlICd0JzoKLSAgICAgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2Fz
ZSAneCc6IGNhc2UgJ3knOgotICAgICAgICBjYXNlICd6JzogICAgICAgICAgICAKLSAgICAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3lt
Ym9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fAotICAgICAg
ICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAg
IGNoID09ICdfJyk7Ci0gICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1BWF9TWU1CT0xfTkFNRV9M
RU4pOwotICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotICAgICAgICAgICAgcmV0dXJu
IENQUF9JREVOVElGSUVSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJzAnOgot
ICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4s
IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChj
aCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7ICAvLyBoZXhhZGVjaW1hbCBpbnRlZ2VyIGNvbnN0YW50
cwotICAgICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICAgICAgICAgIGlmICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAg
ICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChj
aCA+PSAnYScgJiYgY2ggPD0gJ2YnKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGl2YWwgPSAwOwotICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoKGl2YWwgPD0gMHgwZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+
PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlp
ID0gY2ggLSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+
PSAnQScgJiYgY2ggPD0gJ0YnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlp
ID0gY2ggLSAnQScgKyAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJ2EnICsgMTA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2
YWwgPSAoaXZhbCA8PCA0KSB8IGlpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghYWxyZWFkeUNvbXBsYWluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiSEVYIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfSB3
aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJIRVggQ09OU1RBTlQg
SU5WQUxJRCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhc3NlcnQobGVu
IDw9IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1i
b2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+
dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAg
ICB5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lO
VENPTlNUQU5UOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcn
KSB7IC8vIG9jdGFsIGludGVnZXIgY29uc3RhbnRzCi0gICAgICAgICAgICAgICAgaXZhbCA9IDA7
Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBpZiAoKGl2YWwgPD0g
MHgxZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICAgICAg
aXZhbCA9IChpdmFsIDw8IDMpIHwgaWk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IWFscmVhZHlDb21wbGFpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiT0NUIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhbHJlYWR5Q29tcGxhaW5lZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2gg
PD0gJzcnKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBj
aCA9PSAnZicgfHwgY2ggPT0gJ2gnIHx8IGNoID09ICd4J3x8IGNoID09ICdFJykgCi0gICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoY2gsIGxlbiwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAg
ICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAg
ICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOwotICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfSU5UQ09OU1RBTlQ7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGNoID0gJzAnOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLi4uCi0gICAgICAgIGNhc2UgJzEnOiBj
YXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6
IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1B
WF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IHdo
aWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnLicg
fHwgY2ggPT0gJ2UnIHx8IGNoID09ICdFJykgewotICAgICAgICAgICAgICAgIHJldHVybiBsRmxv
YXRDb25zdChjaCwgbGVuLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAg
ICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAg
IGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgIGl2YWwgPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaWkg
PSAwOyBpaSA8IGxlbjsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICBjaCA9IHl5bHZhbHBw
LT5zeW1ib2xfbmFtZVtpaV0gLSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgIGl2YWwgPSBpdmFs
KjEwICsgY2g7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoaXZhbCA+IDIxNDc0ODM2NCkgfHwg
KGl2YWwgPT0gMjE0NzQ4MzY0ICYmIGNoID49IDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiSU5URUdFUiBDT05TVEFOVCBPVkVSRkxPVyIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Ci0gICAg
ICAgICAgICAgICAgaWYoaXZhbD09MCkKLSAgICAgICAgICAgICAgICAgICBzdHJjcHkoeXlsdmFs
cHAtPnN5bWJvbF9uYW1lLCIwIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05T
VEFOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICct
JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9ERUNfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09
ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1VCX0FTU0lHTjsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICctJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgaWYgKGNoID09ICcrJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
SU5DX09QOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0FERF9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnKyc7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9
PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01VTF9BU1NJR047Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVy
biAnKic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X01PRF9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jyl7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9CUkFDRTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclJzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYg
KGNoID09ICc+JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJBQ0tFVDsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICc6JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnXic6Ci0gICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICdeJykgewotICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfWE9SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9BU1NJR047
Ci0gICAgICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgICAgICAgcmV0dXJuICdeJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBp
ZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9FUV9PUDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICc9JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnISc6Ci0gICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfTkVfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgIHJldHVybiAnISc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ3wn
OgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnfCcpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gQ1BQX09SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09S
X0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICAgICAgICByZXR1cm4gJ3wnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYg
KGNoID09ICcmJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5EX09QOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX0FORF9BU1NJR047Ci0gICAgICAgICAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJzsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJzwnOgotICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKLSAgICAgICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgICAgICAgICAgICAgIGlmKGNoID09ICc9JykKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9MRUZUX0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAg
ICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX09QOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoID09ICc9JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFX09QOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnJScp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0U7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICc6JykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfTEVGVF9CUkFDS0VUOwotICAgICAgICAgICAgICAgICAgICBlbHNlewotICAg
ICAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
JzwnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAo
Y2ggPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaCA9
PSAnPScpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQVNTSUdOOwotICAg
ICAgICAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX09QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX0dFX09QOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz4nOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnLic6Ci0gICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAg
ICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoJy4n
LCAwLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm
IChjaCA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBTcGVjaWFs
IEVPRiBoYWNrCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLic7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICBpZiAoY2ggPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0g
RU9GKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdcbic7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGNoID09ICcqJykgewotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgZG8gewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVPRiBJTiBDT01NRU5UIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9GIElOIENPTU1FTlQiKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICcvJyk7Ci0gICAgICAgICAgICAgICAg
Ly8gR28gdHJ5IGl0IGFnYWluLi4uCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9Jykg
ewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfRElWX0FTU0lHTjsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcvJzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAg
ICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyInICYmIGNoICE9ICdcbicg
JiYgY2ggIT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICdcXCcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBj
aGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3Vh
Z2UiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCBzdHJpbmdfdmFsLCBsZW4sIE1BWF9T
VFJJTkdfTEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIGFzc2VydChsZW4gPD0gTUFYX1NUUklOR19MRU4pOwotICAgICAgICAgICAgc3RyaW5nX3Zh
bFtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnIicpIHsKLSAgICAgICAgICAg
ICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdf
dmFsKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1NUUkNPTlNUQU5UOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9MIElOIFNU
UklORyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9TWTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBieXRlX3NjYW4KLQot
aW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKQoteyAgICAKLSAgICB5eXN0eXBl
cHAgeXlsdmFscHA7Ci0gICAgaW50IHRva2VuID0gJ1xuJzsgICAKLQotICAgIGZvcig7Oykgewot
Ci0gICAgICAgIGNoYXIqIHRva2VuU3RyaW5nID0gMDsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKLSAgICAgICAg
aWYoY2hlY2tfRU9GKHRva2VuKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAo
dG9rZW4gPCAwKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNrIG1heSBuZWVkIHRvIGJlIGlt
cHJvdmVkIHRvIHN1cHBvcnQgVVRGLTgKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgaW4gY29t
bWVudHMuCi0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGVuY291
bnRlcmVkIG5vbi1BU0NJSSBjaGFyYWN0ZXIgaW4gc2hhZGVyIHNvdXJjZSIpOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuID09ICcjJykgewotICAg
ICAgICAgICAgaWYgKGNwcC0+cHJldmlvdXNfdG9rZW4gPT0gJ1xuJ3x8IGNwcC0+cHJldmlvdXNf
dG9rZW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHRva2VuID0gcmVhZENQUGxpbmUoJnl5bHZh
bHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaGVja19FT0YodG9rZW4pKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInByZXByb2Nlc3Nv
ciBjb21tYW5kIG11c3Qgbm90IGJlIHByZWNlZGVkIGJ5IGFueSBvdGhlciBzdGF0ZW1lbnQgaW4g
dGhhdCBsaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgY3BwLT5wcmV2aW91c190b2tlbiA9IHRva2VuOwotICAgICAgICAv
LyBleHBhbmQgbWFjcm9zCi0gICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBN
YWNyb0V4cGFuZCh5eWx2YWxwcC5zY19pZGVudCwgJnl5bHZhbHBwKSkgewotICAgICAgICAgICAg
Y3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAodG9rZW4gPT0gJ1xuJykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0KLSAgICAgICAgaWYgKHRv
a2VuID09IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0
cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAuc2NfaWRlbnQpOwotICAgICAgICB9IGVsc2UgaWYg
KHRva2VuID09IENQUF9GTE9BVENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7
Ci0gICAgICAgICAgICB0b2tlblN0cmluZyA9IHl5bHZhbHBwLnN5bWJvbF9uYW1lOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRh
YmxlLHRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlblN0cmluZykgewotICAg
ICAgICAgICAgaW50IGxlbiA9IHN0cmxlbih0b2tlblN0cmluZyk7Ci0gICAgICAgICAgICBjcHAt
PnRva2Vuc0JlZm9yZUVPRiA9IDE7Ci0gICAgICAgICAgICBpZiAobGVuID49IG1heFNpemUpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbWF4U2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZSAgaWYg
KGxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGxlbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIHl5bGV4Ci0KLS8vQ2hlY2tzIGlmIHRo
ZSB0b2tlbiBqdXN0IHJlYWQgaXMgRU9GIG9yIG5vdC4KLWludCBjaGVja19FT0YoaW50IHRva2Vu
KQotewotICAgaWYodG9rZW49PS0xKXsKLSAgICAgICBpZihjcHAtPmlmZGVwdGggPjApewotICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2VuZGlmIG1pc3NpbmchISBDb21waWxhdGlvbiBzdG9w
cGVkIik7Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAgICAgfQotICAgICAgcmV0
dXJuIDE7Ci0gICB9Ci0gICByZXR1cm4gMDsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBF
bmQgb2Ygc2Nhbm5lci5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5l
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdjMWQ2Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5l
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
Ci1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBv
cmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91
ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0
aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJt
cy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3Qg
dXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2Fy
ZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFu
dHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdz
IGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJ
QSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUg
dGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBz
b3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJp
YnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQg
bm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5k
IGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNv
ZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3Ig
bG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFz
IGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNl
bnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBp
bmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBi
ZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBp
biB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJk
d2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJF
SU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xV
RElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRM
RSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9S
IElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFM
TCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFM
LCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBS
T0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElB
IFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09O
VFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1Ig
T1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBzY2Fu
bmVyLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX1NDQU5ORVJfSCkKLSNkZWZpbmUgX19TQ0FOTkVS
X0ggMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCIK
LSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCi0KLS8vIE5vdCByZWFs
bHkgYXRvbSB0YWJsZSBzdHVmZiBidXQgbmVlZGVkIGZpcnN0Li4uCi0KLXR5cGVkZWYgc3RydWN0
IFNvdXJjZUxvY19SZWMgewotICAgIHVuc2lnbmVkIHNob3J0IGZpbGUsIGxpbmU7Ci19IFNvdXJj
ZUxvYzsKLQotaW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLQotdHlwZWRl
ZiBzdHJ1Y3QgSW5wdXRTcmMgewotICAgIHN0cnVjdCBJbnB1dFNyYwkqcHJldjsKLSAgICBpbnQJ
CQkoKnNjYW4pKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7Ci0gICAgaW50CQkJKCpn
ZXRjaCkoc3RydWN0IElucHV0U3JjICosIHl5c3R5cGVwcCAqKTsKLSAgICB2b2lkCQkoKnVuZ2V0
Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCBpbnQsIHl5c3R5cGVwcCAqKTsKLSAgICBpbnQJCQluYW1l
OyAgLyogYXRvbSAqLwotICAgIGludAkJCWxpbmU7Ci19IElucHV0U3JjOwotCi1pbnQgSW5pdFNj
YW5uZXIoQ1BQU3RydWN0ICpjcHApOyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAot
aW50IEluaXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hh
ciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci1pbnQgY2hlY2tfRU9GKGlu
dCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lk
IENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxs
aW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCi12b2lkIFNldExpbmVOdW1iZXIoaW50KTsK
LXZvaWQgU2V0U3RyaW5nTnVtYmVyKGludCk7Ci12b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7Ci12
b2lkIERlY0xpbmVOdW1iZXIodm9pZCk7Ci1pbnQgRnJlZVNjYW5uZXIodm9pZCk7ICAgICAgICAg
ICAgICAgICAvLyBGcmVlIHRoZSBjcHAgc2Nhbm5lcgotI2VuZGlmIC8vICEoZGVmaW5lZChfX1ND
QU5ORVJfSCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQ2MzQ2MjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBO
VklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxp
ZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBt
b2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNv
bnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVl
IHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9y
IHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1z
dWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24t
ZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3Jp
Z2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCBy
ZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZv
cm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2Fy
ZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3Vj
aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5h
bWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9y
YXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRo
aXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGll
ZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0
ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVy
aXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0
d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVu
ZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9O
LCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBN
RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRT
IFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9U
SEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1Ig
QU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRT
OyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1V
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lO
RyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04g
QU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVT
RUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gc2xnbG9iYWxzLmgKLS8vCi0KLSNpZiAhZGVm
aW5lZChfX1NMR0xPQkFMU19IKQotI2RlZmluZSBfX1NMR0xPQkFMU19IIDEKLQotdHlwZWRlZiBz
dHJ1Y3QgQ1BQU3RydWN0X1JlYyBDUFBTdHJ1Y3Q7Ci0KLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsK
LQotI3VuZGVmICBDUFBDX0RFQlVHX1RIRV9DT01QSUxFUgotI2lmIGRlZmluZWQoX0RFQlVHKQot
I2RlZmluZSBDUFBDX0RFQlVHX1RIRV9DT01QSUxFUiAxCi0jZW5kaWYKLQotI3VuZGVmICBDUFBD
X0VOQUJMRV9UT09MUwotI2RlZmluZSBDUFBDX0VOQUJMRV9UT09MUyAxCi0KLSNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5o
IgotI2lmICFkZWZpbmVkKE5PX1BBUlNFUikKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvcGFyc2VyLmgiCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKE5VTEwpCi0jZGVmaW5lIE5VTEwg
MAotI2VuZGlmCi0KLSNlbmRpZiAvLyAhKGRlZmluZWQoX19TTEdMT0JBTFNfSCkKLQotCi0gICAg
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc3ltYm9scy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYx
OGIyNTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3
YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBv
ciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNj
ZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQot
dGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
IHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhl
c2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxp
Y2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEg
c29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9k
aWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91
dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVk
IHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAot
cmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRo
ZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0
aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJr
cywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJ
RElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZy
b20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5v
IG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRl
ZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0
ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3Jr
cyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQot
aW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUg
TlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJ
VEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF
U1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElU
WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVS
QVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RT
LgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg
SU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkK
LU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJ
QlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhF
UiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSks
IFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KLS8vCi0vLyBzeW1ib2xzLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzA2KQotI2VuZGlmCi0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LyBTeW1ib2wgVGFibGUgVmFyaWFibGVzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotU2NvcGUgKlNj
b3BlTGlzdCA9IE5VTEw7Ci1TY29wZSAqQ3VycmVudFNjb3BlID0gTlVMTDsKLVNjb3BlICpHbG9i
YWxTY29wZSA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkg
ewotICAgIFNjb3BlICpzY29wZSA9IF9zY29wZTsKLQotICAgIGlmIChzY29wZS0+bmV4dCkKLSAg
ICAgICAgc2NvcGUtPm5leHQtPnByZXYgPSBzY29wZS0+cHJldjsKLSAgICBpZiAoc2NvcGUtPnBy
ZXYpCi0gICAgICAgIHNjb3BlLT5wcmV2LT5uZXh0ID0gc2NvcGUtPm5leHQ7Ci0gICAgZWxzZQot
ICAgICAgICBTY29wZUxpc3QgPSBzY29wZS0+bmV4dDsKLX0KLQotLyoKLSAqIE5ld1Njb3BlKCkK
LSAqCi0gKi8KLVNjb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICpwb29sKQotewotICAg
IFNjb3BlICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNj
b3BlKSk7Ci0gICAgbFNjb3BlLT5wb29sID0gcG9vbDsKLSAgICBsU2NvcGUtPnBhcmVudCA9IE5V
TEw7Ci0gICAgbFNjb3BlLT5mdW5TY29wZSA9IE5VTEw7Ci0gICAgbFNjb3BlLT5zeW1ib2xzID0g
TlVMTDsKLSAgICAKLSAgICBsU2NvcGUtPmxldmVsID0gMDsKLQotICAgIGxTY29wZS0+cHJvZ3Jh
bXMgPSBOVUxMOwotICAgIGlmICgobFNjb3BlLT5uZXh0ID0gU2NvcGVMaXN0KSkKLSAgICAgICAg
U2NvcGVMaXN0LT5wcmV2ID0gbFNjb3BlOwotICAgIGxTY29wZS0+cHJldiA9IDA7Ci0gICAgU2Nv
cGVMaXN0ID0gbFNjb3BlOwotICAgIG1lbV9BZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBs
U2NvcGUpOwotICAgIHJldHVybiBsU2NvcGU7Ci19IC8vIE5ld1Njb3BlCi0KLS8qCi0gKiBQdXNo
U2NvcGUoKQotICoKLSAqLwotCi12b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3BlKQotewotICAg
IFNjb3BlICpsU2NvcGU7Ci0KLSAgICBpZiAoQ3VycmVudFNjb3BlKSB7Ci0gICAgICAgIGZTY29w
ZS0+bGV2ZWwgPSBDdXJyZW50U2NvcGUtPmxldmVsICsgMTsKLSAgICAgICAgaWYgKGZTY29wZS0+
bGV2ZWwgPT0gMSkgewotICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZSkgewotICAgICAgICAg
ICAgICAgIC8qIEhBQ0sgLSBDVEQgLS0gaWYgR2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0x
LCB3ZSdyZQotICAgICAgICAgICAgICAgICAqIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1
cGVyZ2xvYmFsIHNjb3BlLiAgVGhpbmdzCi0gICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBp
ZiB3ZSBsZWF2ZSB0aGUgbGV2ZWwgYXMgMSwgc28gd2UgYXJiaXRyYXJpbHkKLSAgICAgICAgICAg
ICAgICAgKiBzZXQgaXQgdG8gMiAqLwotICAgICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAy
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49
IDIpIHsKLSAgICAgICAgICAgIGxTY29wZSA9IGZTY29wZTsKLSAgICAgICAgICAgIHdoaWxlIChs
U2NvcGUtPmxldmVsID4gMikKLSAgICAgICAgICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7
Ci0gICAgICAgICAgICBmU2NvcGUtPmZ1blNjb3BlID0gbFNjb3BlOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDA7Ci0gICAgfQotICAgIGZTY29wZS0+
cGFyZW50ID0gQ3VycmVudFNjb3BlOwotICAgIEN1cnJlbnRTY29wZSA9IGZTY29wZTsKLX0gLy8g
UHVzaFNjb3BlCi0KLS8qCi0gKiBQb3BTY29wZSgpCi0gKgotICovCi0KLVNjb3BlICpQb3BTY29w
ZSh2b2lkKQotewotICAgIFNjb3BlICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBDdXJyZW50U2Nv
cGU7Ci0gICAgaWYgKEN1cnJlbnRTY29wZSkKLSAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVu
dFNjb3BlLT5wYXJlbnQ7Ci0gICAgcmV0dXJuIGxTY29wZTsKLX0gLy8gUG9wU2NvcGUKLQotLyoK
LSAqIE5ld1N5bWJvbCgpIC0gQWxsb2NhdGUgYSBuZXcgc3ltYm9sIG5vZGU7Ci0gKgotICovCi0K
LVN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFt
ZSwgc3ltYm9sa2luZCBraW5kKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgY2hhciAqcGNo
OwotICAgIHVuc2lnbmVkIGludCBpaTsKLQotICAgIGxTeW1iID0gKFN5bWJvbCAqKSBtZW1fQWxs
b2MoZlNjb3BlLT5wb29sLCBzaXplb2YoU3ltYm9sKSk7Ci0gICAgbFN5bWItPmxlZnQgPSBOVUxM
OwotICAgIGxTeW1iLT5yaWdodCA9IE5VTEw7Ci0gICAgbFN5bWItPm5leHQgPSBOVUxMOwotICAg
IGxTeW1iLT5uYW1lID0gbmFtZTsKLSAgICBsU3ltYi0+bG9jID0gKmxvYzsKLSAgICBsU3ltYi0+
a2luZCA9IGtpbmQ7Ci0gICAgCi0gICAgLy8gQ2xlYXIgdW5pb24gYXJlYToKLQotICAgIHBjaCA9
IChjaGFyICopICZsU3ltYi0+ZGV0YWlsczsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2Yo
bFN5bWItPmRldGFpbHMpOyBpaSsrKQotICAgICAgICAqcGNoKysgPSAwOwotICAgIHJldHVybiBs
U3ltYjsKLX0gLy8gTmV3U3ltYm9sCi0KLS8qCi0gKiBsQWRkVG9UcmVlKCkgLSBVc2luZyBhIGJp
bmFyeSB0cmVlIGlzIG5vdCBhIGdvb2QgaWRlYSBmb3IgYmFzaWMgYXRvbSB2YWx1ZXMgYmVjYXVz
ZSB0aGV5Ci0gKiAgICAgICAgIGFyZSBnZW5lcmF0ZWQgaW4gb3JkZXIuICBXZSdsbCBmaXggdGhp
cyBsYXRlciAoYnkgcmV2ZXJzaW5nIHRoZSBiaXQgcGF0dGVybikuCi0gKi8KLQotc3RhdGljIHZv
aWQgbEFkZFRvVHJlZShTeW1ib2wgKipmU3ltYm9scywgU3ltYm9sICpmU3ltYikKLXsKLSAgICBT
eW1ib2wgKmxTeW1iOwotICAgIGludCBscmV2LCBmcmV2OwotCi0gICAgbFN5bWIgPSAqZlN5bWJv
bHM7Ci0gICAgaWYgKGxTeW1iKSB7Ci0gICAgICAgIGZyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRh
YmxlLCBmU3ltYi0+bmFtZSk7Ci0gICAgICAgIHdoaWxlIChsU3ltYikgewotICAgICAgICAgICAg
bHJldiA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKLSAgICAgICAgICAg
IGlmIChscmV2ID09IGZyZXYpIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
R2V0QXRvbVN0cmluZyhhdGFibGUsIGZTeW1iLT5uYW1lKSIpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobHJldiA+IGZy
ZXYpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5sZWZ0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWItPmxlZnQgPSBmU3ltYjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5yaWdo
dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+
cmlnaHQgPSBmU3ltYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKmZTeW1ib2xzID0gZlN5bWI7Ci0gICAgfQotfSAvLyBs
QWRkVG9UcmVlCi0KLQotLyoKLSAqIEFkZFN5bWJvbCgpIC0gQWRkIGEgdmFyaWFibGUsIHR5cGUs
IG9yIGZ1bmN0aW9uIG5hbWUgdG8gYSBzY29wZS4KLSAqCi0gKi8KLQotU3ltYm9sICpBZGRTeW1i
b2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtp
bmQpCi17Ci0gICAgU3ltYm9sICpsU3ltYjsKLQotICAgIGlmICghZlNjb3BlKQotICAgICAgICBm
U2NvcGUgPSBDdXJyZW50U2NvcGU7Ci0gICAgbFN5bWIgPSBOZXdTeW1ib2wobG9jLCBmU2NvcGUs
IGF0b20sIGtpbmQpOwotICAgIGxBZGRUb1RyZWUoJmZTY29wZS0+c3ltYm9scywgbFN5bWIpOwot
ICAgIHJldHVybiBsU3ltYjsKLX0gLy8gQWRkU3ltYm9sCi0KLQotLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiogU3ltYm9sIFNlbWFudGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTG9v
a1VwTG9jYWxTeW1ib2woKQotICoKLSAqLwotCi1TeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNj
b3BlICpmU2NvcGUsIGludCBhdG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgaW50IHJu
YW1lLCByYXRvbTsKLQotICAgIHJhdG9tID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgYXRvbSk7
Ci0gICAgaWYgKCFmU2NvcGUpCi0gICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKLSAgICBs
U3ltYiA9IGZTY29wZS0+c3ltYm9sczsKLSAgICB3aGlsZSAobFN5bWIpIHsKLSAgICAgICAgcm5h
bWUgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+bmFtZSk7Ci0gICAgICAgIGlmIChy
bmFtZSA9PSByYXRvbSkgewotICAgICAgICAgICAgcmV0dXJuIGxTeW1iOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKHJuYW1lID4gcmF0b20pIHsKLSAgICAgICAgICAgICAgICBs
U3ltYiA9IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBsU3ltYiA9IGxTeW1iLT5yaWdodDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwTG9jYWxTeW1ib2wKLQotLyoKLSAqIExvb2tV
cFN5bWJvbCgpCi0gKgotICovCi0KLVN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUs
IGludCBhdG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0KLSAgICBpZiAoIWZTY29wZSkKLSAg
ICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOwotICAgIHdoaWxlIChmU2NvcGUpIHsKLSAgICAg
ICAgbFN5bWIgPSBMb29rVXBMb2NhbFN5bWJvbChmU2NvcGUsIGF0b20pOwotICAgICAgICBpZiAo
bFN5bWIpCi0gICAgICAgICAgICByZXR1cm4gbFN5bWI7Ci0gICAgICAgIGZTY29wZSA9IGZTY29w
ZS0+cGFyZW50OwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwU3ltYm9sCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc3ltYm9scy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zeW1ib2xzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZDBi
MDcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zeW1ib2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJl
IHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBy
ZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0
YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVy
bXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRo
aXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2Ug
dGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vu
c2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29m
dHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5
IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBt
b2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRo
YXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0
YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9u
cyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywg
c2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElB
IFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20g
TlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90
aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBi
eSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50
IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBv
ciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5j
b3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJ
RElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhP
VVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg
T1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJ
T04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgot
Ci1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5E
SVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9V
VCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVU
SU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBV
TkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNU
UklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLS8vCi0vLyBzeW1ib2xzLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX1NZTUJPTFNfSCkK
LSNkZWZpbmUgX19TWU1CT0xTX0ggMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5oIgotCi10eXBlZGVmIGVudW0gc3ltYm9sa2luZCB7Ci0gICBNQUNST19TCi19IHN5
bWJvbGtpbmQ7Ci0KLS8vIFR5cGVkZWZzIGZvciB0aGluZ3MgZGVmaW5lZCBoZXJlIGluICJzeW1i
b2xzLmgiOgotCi10eXBlZGVmIHN0cnVjdCBTY29wZV9SZWMgU2NvcGU7Ci10eXBlZGVmIHN0cnVj
dCBTeW1ib2xfUmVjIFN5bWJvbDsKLQotdHlwZWRlZiBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgewot
ICAgIHN0cnVjdCBTeW1ib2xMaXN0X1JlYyAqbmV4dDsKLSAgICBTeW1ib2wgKnN5bWI7Ci19IFN5
bWJvbExpc3Q7Ci0KLXN0cnVjdCBTY29wZV9SZWMgewotICAgIFNjb3BlICpuZXh0LCAqcHJldjsg
ICAgIC8vIGRvdWJseS1saW5rZWQgbGlzdCBvZiBhbGwgc2NvcGVzCi0gICAgU2NvcGUgKnBhcmVu
dDsKLSAgICBTY29wZSAqZnVuU2NvcGU7ICAgICAgICAvLyBQb2ludHMgdG8gYmFzZSBzY29wZSBv
ZiBlbmNsb3NpbmcgZnVuY3Rpb24KLSAgICBNZW1vcnlQb29sICpwb29sOyAgICAgICAvLyBwb29s
IHVzZWQgZm9yIGFsbG9jYXRpb24gaW4gdGhpcyBzY29wZQotICAgIFN5bWJvbCAqc3ltYm9sczsK
LSAgICAKLQlpbnQgbGV2ZWw7ICAgICAgICAgICAgICAvLyAwID0gc3VwZXIgZ2xvYmFscywgMSA9
IGdsb2JhbHMsIGV0Yy4KLQotICAgIC8vIE9ubHkgdXNlZCBhdCBnbG9iYWwgc2NvcGUgKGxldmVs
IDEpOgotICAgIFN5bWJvbExpc3QgKnByb2dyYW1zOyAgIC8vIExpc3Qgb2YgcHJvZ3JhbXMgZm9y
IHRoaXMgY29tcGlsYXRpb24uCi19OwotCi0KLS8vIFN5bWJvbCB0YWJsZSBpcyBhIHNpbXBsZSBi
aW5hcnkgdHJlZS4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIgICAg
ICAgIC8vIHRvIGdldCBNYWNyb1N5bWJvbCBkZWYKLQotc3RydWN0IFN5bWJvbF9SZWMgewotICAg
IFN5bWJvbCAqbGVmdCwgKnJpZ2h0OwotICAgIFN5bWJvbCAqbmV4dDsKLSAgICBpbnQgbmFtZTsg
ICAgICAgLy8gTmFtZSBhdG9tCi0gICAgU291cmNlTG9jIGxvYzsKLSAgICBzeW1ib2xraW5kIGtp
bmQ7Ci0gICAgdW5pb24gewotICAgICAgICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgfSBkZXRhaWxz
OwotfTsKLQotZXh0ZXJuIFNjb3BlICpDdXJyZW50U2NvcGU7Ci1leHRlcm4gU2NvcGUgKkdsb2Jh
bFNjb3BlOwotZXh0ZXJuIFNjb3BlICpTY29wZUxpc3Q7Ci0KLVNjb3BlICpOZXdTY29wZUluUG9v
bChNZW1vcnlQb29sICopOwotI2RlZmluZSBOZXdTY29wZSgpICAgICAgTmV3U2NvcGVJblBvb2wo
Q3VycmVudFNjb3BlLT5wb29sKQotdm9pZCBQdXNoU2NvcGUoU2NvcGUgKmZTY29wZSk7Ci1TY29w
ZSAqUG9wU2NvcGUodm9pZCk7Ci1TeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2Nv
cGUgKmZTY29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCk7Ci1TeW1ib2wgKkFkZFN5bWJv
bChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2lu
ZCk7Ci1TeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsK
LVN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLQotCi0jZW5k
aWYgLy8gIWRlZmluZWQoX19TWU1CT0xTX0gpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTRjMDVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKysrIC9kZXYv
bnVsbApAQCAtMSw0NjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQg
KGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklE
SUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5
b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0
YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBz
b2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBk
byBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxs
LCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRl
cm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVy
c29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMg
aW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIp
LCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEg
U29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29y
IGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJ
RElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5W
SURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJz
IGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVp
dGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJ
RElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBz
dGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVz
cyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0
IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQg
YnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUg
TlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNl
bnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVE
IE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VU
IExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZS
SU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFU
SU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUg
TElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlks
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBM
T1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1P
RElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBI
T1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBF
VkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyB0b2tlbnMuYwotLy8KLQot
I2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgotCi0jaWYgZGVm
aW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDU0KQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQxNTIpCi0jZW5kaWYKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBQcmVwcm9jZXNzb3IgYW5k
IFRva2VuIFJlY29yZGVyIGFuZCBQbGF5YmFjazogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogaWRzdHIoKQot
ICogQ29weSBhIHN0cmluZyB0byBhIG1hbGxvYydlZCBibG9jayBhbmQgY29udmVydCBpdCBpbnRv
IHNvbWV0aGluZyBzdWl0YWJsZQotICogZm9yIGFuIElECi0gKgotICovCi0KLXN0YXRpYyBjaGFy
ICppZHN0cihjb25zdCBjaGFyICpmc3RyLCBNZW1vcnlQb29sICpwb29sKQotewotICAgIHNpemVf
dCBsZW47Ci0gICAgY2hhciAqc3RyLCAqdDsKLSAgICBjb25zdCBjaGFyICpmOwotCi0gICAgbGVu
ID0gc3RybGVuKGZzdHIpOwotICAgIGlmICghcG9vbCkKLSAgICAgICAgc3RyID0gKGNoYXIgKikg
bWFsbG9jKGxlbiArIDEpOwotICAgIGVsc2UKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWVtX0Fs
bG9jKHBvb2wsIGxlbiArIDEpOwotICAgIAotICAgIGZvciAoZj1mc3RyLCB0PXN0cjsgKmY7IGYr
KykgewotICAgICAgICBpZiAoaXNhbG51bSgqZikpICp0KysgPSAqZjsKLSAgICAgICAgZWxzZSBp
ZiAoKmYgPT0gJy4nIHx8ICpmID09ICcvJykgKnQrKyA9ICdfJzsKLSAgICB9Ci0gICAgKnQgPSAw
OwotICAgIHJldHVybiBzdHI7Ci19IC8vIGlkc3RyCi0KLQotLyoKLSAqIGxOZXdCbG9jaygpCi0g
KgotICovCi0KLXN0YXRpYyBUb2tlbkJsb2NrICpsTmV3QmxvY2soVG9rZW5TdHJlYW0gKmZUb2ss
IE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0gICAgVG9rZW5CbG9jayAqbEJsb2NrOwotCi0gICAgaWYg
KCFwb29sKQotICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtYWxsb2Moc2l6ZW9mKFRv
a2VuQmxvY2spICsgMjU2KTsKLSAgICBlbHNlCi0gICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2Nr
ICopIG1lbV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOwotICAgIGxCbG9j
ay0+Y291bnQgPSAwOwotICAgIGxCbG9jay0+Y3VycmVudCA9IDA7Ci0gICAgbEJsb2NrLT5kYXRh
ID0gKHVuc2lnbmVkIGNoYXIgKikgbEJsb2NrICsgc2l6ZW9mKFRva2VuQmxvY2spOwotICAgIGxC
bG9jay0+bWF4ID0gMjU2OwotICAgIGxCbG9jay0+bmV4dCA9IE5VTEw7Ci0gICAgaWYgKGZUb2st
PmhlYWQpIHsKLSAgICAgICAgZlRvay0+Y3VycmVudC0+bmV4dCA9IGxCbG9jazsKLSAgICB9IGVs
c2UgewotICAgICAgICBmVG9rLT5oZWFkID0gbEJsb2NrOwotICAgIH0KLSAgICBmVG9rLT5jdXJy
ZW50ID0gbEJsb2NrOwotICAgIHJldHVybiBsQmxvY2s7Ci19IC8vIGxOZXdCbG9jawotCi0vKgot
ICogbEFkZEJ5dGUoKQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBsQWRkQnl0ZShUb2tlblN0cmVh
bSAqZlRvaywgdW5zaWduZWQgY2hhciBmVmFsKQotewotICAgIFRva2VuQmxvY2sgKmxCbG9jazsK
LSAgICBsQmxvY2sgPSBmVG9rLT5jdXJyZW50OwotICAgIGlmIChsQmxvY2stPmNvdW50ID49IGxC
bG9jay0+bWF4KQotICAgICAgICBsQmxvY2sgPSBsTmV3QmxvY2soZlRvaywgMCk7Ci0gICAgbEJs
b2NrLT5kYXRhW2xCbG9jay0+Y291bnQrK10gPSBmVmFsOwotfSAvLyBsQWRkQnl0ZQotCi0KLQot
LyoKLSAqIGxSZWFkQnl0ZSgpIC0gR2V0IHRoZSBuZXh0IGJ5dGUgZnJvbSBhIHN0cmVhbS4KLSAq
Ci0gKi8KLQotc3RhdGljIGludCBsUmVhZEJ5dGUoVG9rZW5TdHJlYW0gKnBUb2spCi17Ci0gICAg
VG9rZW5CbG9jayAqbEJsb2NrOwotICAgIGludCBsdmFsID0gLTE7Ci0KLSAgICBsQmxvY2sgPSBw
VG9rLT5jdXJyZW50OwotICAgIGlmIChsQmxvY2spIHsKLSAgICAgICAgaWYgKGxCbG9jay0+Y3Vy
cmVudCA+PSBsQmxvY2stPmNvdW50KSB7Ci0gICAgICAgICAgICBsQmxvY2sgPSBsQmxvY2stPm5l
eHQ7Ci0gICAgICAgICAgICBpZiAobEJsb2NrKQotICAgICAgICAgICAgICAgIGxCbG9jay0+Y3Vy
cmVudCA9IDA7Ci0gICAgICAgICAgICBwVG9rLT5jdXJyZW50ID0gbEJsb2NrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsQmxvY2spCi0gICAgICAgICAgICBsdmFsID0gbEJsb2NrLT5kYXRhW2xC
bG9jay0+Y3VycmVudCsrXTsKLSAgICB9Ci0gICAgcmV0dXJuIGx2YWw7Ci19IC8vIGxSZWFkQnl0
ZQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gR2xvYmFsIEZ1bmN0
aW9uczovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogTmV3
VG9rZW5TdHJlYW0oKQotICoKLSAqLwotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29u
c3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCkKLXsKLSAgICBUb2tlblN0cmVhbSAqcFRv
azsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSAqKSBtYWxs
b2Moc2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgZWxzZQotICAgICAgICBwVG9rID0gKFRva2Vu
U3RyZWFtKiltZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgcFRvay0+
bmV4dCA9IE5VTEw7Ci0gICAgcFRvay0+bmFtZSA9IGlkc3RyKG5hbWUsIHBvb2wpOwotICAgIHBU
b2stPmhlYWQgPSBOVUxMOwotICAgIHBUb2stPmN1cnJlbnQgPSBOVUxMOwotICAgIGxOZXdCbG9j
ayhwVG9rLCBwb29sKTsKLSAgICByZXR1cm4gcFRvazsKLX0gLy8gTmV3VG9rZW5TdHJlYW0KLQot
LyoKLSAqIERlbGV0ZVRva2VuU3RyZWFtKCkKLSAqCi0gKi8KLQotdm9pZCBEZWxldGVUb2tlblN0
cmVhbShUb2tlblN0cmVhbSAqcFRvaykKLXsKLSAgICBUb2tlbkJsb2NrICpwQmxvY2ssICpuQmxv
Y2s7Ci0KLSAgICBpZiAocFRvaykgewotICAgICAgICBwQmxvY2sgPSBwVG9rLT5oZWFkOwotICAg
ICAgICB3aGlsZSAocEJsb2NrKSB7Ci0gICAgICAgICAgICBuQmxvY2sgPSBwQmxvY2stPm5leHQ7
Ci0gICAgICAgICAgICBmcmVlKHBCbG9jayk7Ci0gICAgICAgICAgICBwQmxvY2sgPSBuQmxvY2s7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBUb2stPm5hbWUpCi0gICAgICAgICAgICBmcmVlKHBU
b2stPm5hbWUpOwotICAgICAgICBmcmVlKHBUb2spOwotICAgIH0KLX0gLy8gRGVsZXRlVG9rZW5T
dHJlYW0KLQotLyoKLSAqIFJlY29yZFRva2VuKCkgLSBBZGQgYSB0b2tlbiB0byB0aGUgZW5kIG9m
IGEgbGlzdCBmb3IgbGF0ZXIgcGxheWJhY2sgb3IgcHJpbnRvdXQuCi0gKgotICovCi0KLXZvaWQg
UmVjb3JkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXls
dmFscHApCi17Ci0gICAgY29uc3QgY2hhciAqczsKLSAgICBjaGFyICpzdHI9TlVMTDsKLQotICAg
IGlmICh0b2tlbiA+IDI1NikKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIp
KCh0b2tlbiAmIDB4N2YpICsgMHg4MCkpOwotICAgIGVsc2UKLSAgICAgICAgbEFkZEJ5dGUocFRv
aywgKHVuc2lnbmVkIGNoYXIpKHRva2VuICYgMHg3ZikpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIENQUF9JREVOVElGSUVSOgotICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgot
ICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICBzID0gR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHl5bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgICAgIHdoaWxlICgqcykKLSAgICAgICAgICAg
IGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSAqcysrKTsKLSAgICAgICAgbEFkZEJ5dGUo
cFRvaywgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0g
ICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6Ci0gICAgICAgICBzdHI9eXlsdmFscHAtPnN5bWJvbF9u
YW1lOwotICAgICAgICAgd2hpbGUgKCpzdHIpewotICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywg
KHVuc2lnbmVkIGNoYXIpICpzdHIrKyk7Ci0gICAgICAgICB9Ci0gICAgICAgICBsQWRkQnl0ZShw
VG9rLCAwKTsKLSAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgJygnOgotICAgICAgICBsQWRkQnl0
ZShwVG9rLCAodW5zaWduZWQgY2hhcikoeXlsdmFscHAtPnNjX2ludCA/IDEgOiAwKSk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfSAvLyBSZWNvcmRUb2tlbgotCi0vKgot
ICogUmV3aW5kVG9rZW5TdHJlYW0oKSAtIFJlc2V0IGEgdG9rZW4gc3RyZWFtIGluIHByZXBlcmF0
aW9uIGZvciByZWFkaW5nLgotICoKLSAqLwotCi12b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2Vu
U3RyZWFtICpwVG9rKQotewotICAgIGlmIChwVG9rLT5oZWFkKSB7Ci0gICAgICAgIHBUb2stPmN1
cnJlbnQgPSBwVG9rLT5oZWFkOwotICAgICAgICBwVG9rLT5jdXJyZW50LT5jdXJyZW50ID0gMDsK
LSAgICB9Ci19IC8vIFJld2luZFRva2VuU3RyZWFtCi0KLS8qCi0gKiBSZWFkVG9rZW4oKSAtIFJl
YWQgdGhlIG5leHQgdG9rZW4gZnJvbSBhIHN0cmVhbS4KLSAqCi0gKi8KLQotaW50IFJlYWRUb2tl
bihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgY2hhciBz
eW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07Ci0gICAgY2hhciBzdHJpbmdfdmFs
W01BWF9TVFJJTkdfTEVOICsgMV07Ci0gICAgaW50IGx0b2tlbiwgbGVuOwotICAgIGNoYXIgY2g7
Ci0gICAgaW50IGJhc2UsIGFjY3VtOwotICAgIGNoYXIgY2hfdmFsOwotCi0gICAgbHRva2VuID0g
bFJlYWRCeXRlKHBUb2spOwotICAgIGlmIChsdG9rZW4gPj0gMCkgewotICAgICAgICBpZiAobHRv
a2VuID4gMTI3KQotICAgICAgICAgICAgbHRva2VuICs9IDEyODsKLSAgICAgICAgc3dpdGNoIChs
dG9rZW4pIHsKLSAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBf
VFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBsZW4gPSAwOwotICAgICAgICAgICAgY2ggPSBs
UmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAn
eicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwK
LSAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAotICAgICAg
ICAgICAgICAgICAgICAgY2ggPT0gJ18nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5
bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0
ZShwVG9rKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
eW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsK
LSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKLSAgICAgICAgICAg
IGxlbiA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAw
KQotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1RSSU5HX0xFTikKLSAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nX3ZhbFtsZW4rK10gPSBjaDsKLSAgICAgICAgICAgIHN0cmluZ192YWxb
bGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENQUF9GTE9BVENPTlNUQU5UOgotICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAg
IGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKXx8KGNoPT0nZSd8fGNoPT0nRSd8fGNoPT0nLicpfHwoY2g9PScrJ3x8Y2g9PSct
JykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7
Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAn
OwotICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+
c2NfZnZhbD0oZmxvYXQpYXRvZl9kb3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKLSAgICAgICAgICAgIGxl
biA9IDA7Ci0JICAgIGFjY3VtID0gMDsKLSAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2sp
OwotICAgICAgICAgICAgaWYgKGNoID09ICcwJykgewotICAgICAgICAgICAgICAgIHN5bWJvbF9u
YW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwot
ICAgICAgICAgICAgICAgIGlmIChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBi
YXNlID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSA4OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYmFz
ZSA9IDEwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAobGVuIDwgTUFYX1NZ
TUJPTF9OQU1FX0xFTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaF92YWwgPSAt
MTsKLSAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdChjaCkpCi0gICAgICAgICAgICAgICAgICAg
IGNoX3ZhbCA9IGNoIC0gJzAnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzeGRpZ2l0KGNo
KSkKLSAgICAgICAgICAgICAgICAgICAgY2hfdmFsID0gdG9sb3dlcihjaCkgLSAnYScgKyAxMDsK
LQotICAgICAgICAgICAgICAgIGlmIChjaF92YWwgPCAwIHx8IGNoX3ZhbCA+PSBiYXNlKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bisrXSA9IGNoOwotICAgICAgICAgICAgICAgIGFjY3VtID0gYWNjdW0gKiBiYXNlICsgY2hfdmFs
OwotICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICBhc3NlcnQo
Y2ggPT0gJ1wwJyk7Ci0gICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBz
eW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnKCc6Ci0gICAgICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGx0b2tlbjsKLSAgICB9Ci0gICAgcmV0dXJuIEVPRl9TWTsKLX0gLy8g
UmVhZFRva2VuCi0KLXR5cGVkZWYgc3RydWN0IFRva2VuSW5wdXRTcmMgewotICAgIElucHV0U3Jj
ICAgICAgICAgICAgYmFzZTsKLSAgICBUb2tlblN0cmVhbSAgICAgICAgICp0b2tlbnM7Ci0gICAg
aW50ICAgICAgICAgICAgICAgICAoKmZpbmFsKShDUFBTdHJ1Y3QgKik7Ci19IFRva2VuSW5wdXRT
cmM7Ci0KLXN0YXRpYyBpbnQgc2Nhbl90b2tlbihUb2tlbklucHV0U3JjICppbiwgeXlzdHlwZXBw
ICogeXlsdmFscHApCi17Ci0gICAgaW50IHRva2VuID0gUmVhZFRva2VuKGluLT50b2tlbnMsIHl5
bHZhbHBwKTsKLSAgICBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopOwotICAgIGNwcC0+dG9rZW5M
b2MtPmZpbGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICBjcHAtPnRva2VuTG9jLT5s
aW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Ci0gICAgaWYgKHRva2VuID09ICdcbicpIHsK
LSAgICAgICAgaW4tPmJhc2UubGluZSsrOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQot
ICAgIGlmICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9
IGluLT5iYXNlLnByZXY7Ci0gICAgZmluYWwgPSBpbi0+ZmluYWw7Ci0gICAgZnJlZShpbik7Ci0g
ICAgaWYgKGZpbmFsICYmICFmaW5hbChjcHApKSByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci19Ci0KLWlu
dCBSZWFkRnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICp0cywgaW50IG5hbWUsIGludCAoKmZp
bmFsKShDUFBTdHJ1Y3QgKikpCi17Ci0gICAgVG9rZW5JbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6
ZW9mKFRva2VuSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihUb2tlbklucHV0
U3JjKSk7Ci0gICAgaW4tPmJhc2UubmFtZSA9IG5hbWU7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNw
cC0+Y3VycmVudElucHV0OwotICAgIGluLT5iYXNlLnNjYW4gPSAoaW50ICgqKShJbnB1dFNyYyAq
LCB5eXN0eXBlcHAgKikpc2Nhbl90b2tlbjsKLSAgICBpbi0+YmFzZS5saW5lID0gMTsKLSAgICBp
bi0+dG9rZW5zID0gdHM7Ci0gICAgaW4tPmZpbmFsID0gZmluYWw7Ci0gICAgUmV3aW5kVG9rZW5T
dHJlYW0odHMpOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVy
biAxOwotfQotCi10eXBlZGVmIHN0cnVjdCBVbmdvdFRva2VuIHsKLSAgICBJbnB1dFNyYyAgICBi
YXNlOwotICAgIGludCAgICAgICAgIHRva2VuOwotICAgIHl5c3R5cGVwcCAgICAgbHZhbDsKLX0g
VW5nb3RUb2tlbjsKLQotc3RhdGljIGludCByZWdldF90b2tlbihVbmdvdFRva2VuICp0LCB5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4gPSB0LT50b2tlbjsKLSAgICAqeXls
dmFscHAgPSB0LT5sdmFsOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gdC0+YmFzZS5wcmV2Owot
ICAgIGZyZWUodCk7Ci0gICAgcmV0dXJuIHRva2VuOwotfQotCi12b2lkIFVuZ2V0VG9rZW4oaW50
IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAgIFVuZ290VG9rZW4gKnQgPSBtYWxs
b2Moc2l6ZW9mKFVuZ290VG9rZW4pKTsKLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKFVuZ290VG9r
ZW4pKTsKLSAgICB0LT50b2tlbiA9IHRva2VuOwotICAgIHQtPmx2YWwgPSAqeXlsdmFscHA7Ci0g
ICAgdC0+YmFzZS5zY2FuID0gKHZvaWQgKilyZWdldF90b2tlbjsKLSAgICB0LT5iYXNlLnByZXYg
PSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAgICB0LT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1
dC0+bmFtZTsKLSAgICB0LT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAg
ICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZ0LT5iYXNlOwotfQotCi0KLXZvaWQgRHVtcFRva2VuU3Ry
ZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAg
ICBpbnQgdG9rZW47Ci0gICAgY2hhciBzdHJbMTAwXTsKLQotICAgIGlmIChmcCA9PSAwKSBmcCA9
IHN0ZG91dDsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShzKTsKLSAgICB3aGlsZSAoKHRva2VuID0g
UmVhZFRva2VuKHMsIHl5bHZhbHBwKSkgPiAwKSB7Ci0gICAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5U
SUZJRVI6Ci0gICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICAgICAgc25wcmludGYo
c3RyLCBzaXplb2Yoc3RyKSwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxw
cC0+c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9GTE9B
VENPTlNUQU5UOgotICAgICAgICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19m
dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoK
LSAgICAgICAgICAgIC8vcHJpbnRmKCIlZCAiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHRva2VuID49IDEy
NykKLSAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9
Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHRva2Vucy5jIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkYmY0YTJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCww
IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMg
c29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0
aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRl
cyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRo
ZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0
byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2
ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5W
SURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNl
LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3
aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJv
dmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBt
dXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0
cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFk
ZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhl
Ci1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGlj
ZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBn
cmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFu
eSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUK
LXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5
IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0K
LVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJ
UywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5E
IE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJP
RFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5Z
IFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBE
SVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBX
SEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotLy8KLS8vIHRva2Vucy5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19UT0tF
TlNfSCkKLSNkZWZpbmUgX19UT0tFTlNfSCAxCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKLQotI2RlZmluZSBFT0ZfU1kgKC0x
KQotCi10eXBlZGVmIHN0cnVjdCBUb2tlbkJsb2NrX1JlYyBUb2tlbkJsb2NrOwotCi10eXBlZGVm
IHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgewotICAgIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgKm5l
eHQ7Ci0gICAgY2hhciAqbmFtZTsKLSAgICBUb2tlbkJsb2NrICpoZWFkOwotICAgIFRva2VuQmxv
Y2sgKmN1cnJlbnQ7Ci19IFRva2VuU3RyZWFtOwotCi1zdHJ1Y3QgVG9rZW5CbG9ja19SZWMgewot
ICAgIFRva2VuQmxvY2sgKm5leHQ7Ci0gICAgaW50IGN1cnJlbnQ7Ci0gICAgaW50IGNvdW50Owot
ICAgIGludCBtYXg7Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLX07Ci0KLWV4dGVybiBUb2tl
blN0cmVhbSBzdGRsaWJfY3BwX3N0cmVhbTsKLQotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJl
YW0oY29uc3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCk7Ci12b2lkIERlbGV0ZVRva2Vu
U3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsgCi12b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFt
ICpwVG9rLCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLXZvaWQgUmV3aW5kVG9r
ZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spOwotaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAq
cFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApOwotaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9r
ZW5TdHJlYW0gKnBUb2ssIGludCBuYW1lLCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKTsKLXZv
aWQgVW5nZXRUb2tlbihpbnQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLQotI2lmIGRlZmluZWQo
Q1BQQ19FTkFCTEVfVE9PTFMpCi0KLXZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKiwgVG9rZW5T
dHJlYW0gKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0jZW5kaWYgLy8gZGVmaW5lZChDUFBD
X0VOQUJMRV9UT09MUykKLQotI2VuZGlmIC8vICFkZWZpbmVkKF9fVE9LRU5TX0gpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg5YmM4ZDguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzk5ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbmZpZy5jcHA6IEltcGxlbWVudHMgdGhlIGVn
bDo6Q29uZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRoZSBmb3JtYXQsIHR5cGUKLS8vIGFuZCBzaXpl
IGZvciBhbiBlZ2w6OlN1cmZhY2UuIEltcGxlbWVudHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuCi0vLyBbRUdMIDEuNF0gc2VjdGlvbiAzLjQgcGFnZSAxNS4KLQotI2luY2x1
ZGUgImxpYkVHTC9Db25maWcuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx2
ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQotbmFtZXNwYWNlIGVnbAotewotQ29uZmlnOjpDb25maWcoRDNERElTUExBWU1PREUgZGlz
cGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVydmFsLCBEM0RGT1JN
QVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xp
bnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdodCkKLSAgICA6
IG1EaXNwbGF5TW9kZShkaXNwbGF5TW9kZSksIG1SZW5kZXJUYXJnZXRGb3JtYXQocmVuZGVyVGFy
Z2V0Rm9ybWF0KSwgbURlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpLCBtTXVs
dGlTYW1wbGUobXVsdGlTYW1wbGUpCi17Ci0gICAgc2V0KGRpc3BsYXlNb2RlLCBtaW5JbnRlcnZh
bCwgbWF4SW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBt
dWx0aVNhbXBsZSwgdGV4V2lkdGgsIHRleEhlaWdodCk7Ci19Ci0KLXZvaWQgQ29uZmlnOjpzZXRE
ZWZhdWx0cygpCi17Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAgIG1SZWRTaXplID0gMDsKLSAg
ICBtR3JlZW5TaXplID0gMDsKLSAgICBtQmx1ZVNpemUgPSAwOwotICAgIG1MdW1pbmFuY2VTaXpl
ID0gMDsKLSAgICBtQWxwaGFTaXplID0gMDsKLSAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7Ci0gICAg
bUJpbmRUb1RleHR1cmVSR0IgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1CaW5kVG9UZXh0dXJlUkdC
QSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbUNvbG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVS
OwotICAgIG1Db25maWdDYXZlYXQgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1Db25maWdJRCA9IEVH
TF9ET05UX0NBUkU7Ci0gICAgbUNvbmZvcm1hbnQgPSAwOwotICAgIG1EZXB0aFNpemUgPSAwOwot
ICAgIG1MZXZlbCA9IDA7Ci0gICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7Ci0gICAg
bU1heFBCdWZmZXJXaWR0aCA9IDA7Ci0gICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOwotICAgIG1N
YXhQQnVmZmVyUGl4ZWxzID0gMDsKLSAgICBtTWF4U3dhcEludGVydmFsID0gRUdMX0RPTlRfQ0FS
RTsKLSAgICBtTWluU3dhcEludGVydmFsID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtTmF0aXZlUmVu
ZGVyYWJsZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbU5hdGl2ZVZpc3VhbElEID0gMDsKLSAgICBt
TmF0aXZlVmlzdWFsVHlwZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbVJlbmRlcmFibGVUeXBlID0g
RUdMX09QRU5HTF9FU19CSVQ7Ci0gICAgbVNhbXBsZUJ1ZmZlcnMgPSAwOwotICAgIG1TYW1wbGVz
ID0gMDsKLSAgICBtU3RlbmNpbFNpemUgPSAwOwotICAgIG1TdXJmYWNlVHlwZSA9IEVHTF9XSU5E
T1dfQklUOwotICAgIG1UcmFuc3BhcmVudFR5cGUgPSBFR0xfTk9ORTsKLSAgICBtVHJhbnNwYXJl
bnRSZWRWYWx1ZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9
IEVHTF9ET05UX0NBUkU7Ci0gICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gRUdMX0RPTlRfQ0FS
RTsKLX0KLQotdm9pZCBDb25maWc6OnNldChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdM
aW50IG1pbkludGVydmFsLCBFR0xpbnQgbWF4SW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJn
ZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBs
ZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KQotewotICAgIG1CaW5kVG9UZXh0
dXJlUkdCID0gRUdMX0ZBTFNFOwotICAgIG1CaW5kVG9UZXh0dXJlUkdCQSA9IEVHTF9GQUxTRTsK
LSAgICBzd2l0Y2ggKHJlbmRlclRhcmdldEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZN
VF9BMVI1RzVCNToKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKLSAgICAgICAgbVJlZFNpemUg
PSA1OwotICAgICAgICBtR3JlZW5TaXplID0gNTsKLSAgICAgICAgbUJsdWVTaXplID0gNTsKLSAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRf
QTJSMTBHMTBCMTA6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMzI7Ci0gICAgICAgIG1SZWRTaXpl
ID0gMTA7Ci0gICAgICAgIG1HcmVlblNpemUgPSAxMDsKLSAgICAgICAgbUJsdWVTaXplID0gMTA7
Ci0gICAgICAgIG1BbHBoYVNpemUgPSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwotICAgICAgICBtUmVkU2l6
ZSA9IDg7Ci0gICAgICAgIG1HcmVlblNpemUgPSA4OwotICAgICAgICBtQmx1ZVNpemUgPSA4Owot
ICAgICAgICBtQWxwaGFTaXplID0gODsKLSAgICAgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIG1C
dWZmZXJTaXplID0gMTY7Ci0gICAgICAgIG1SZWRTaXplID0gNTsKLSAgICAgICAgbUdyZWVuU2l6
ZSA9IDY7Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDU7Ci0gICAgICAgIG1BbHBoYVNpemUgPSAwOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICBtQnVm
ZmVyU2l6ZSA9IDMyOwotICAgICAgICBtUmVkU2l6ZSA9IDg7Ci0gICAgICAgIG1HcmVlblNpemUg
PSA4OwotICAgICAgICBtQmx1ZVNpemUgPSA4OwotICAgICAgICBtQWxwaGFTaXplID0gMDsKLSAg
ICAgICAgbUJpbmRUb1RleHR1cmVSR0IgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3RoZXIgZm9ybWF0cyBzaG91bGQg
bm90IGJlIHZhbGlkCi0gICAgfQotCi0gICAgbUx1bWluYW5jZVNpemUgPSAwOwotICAgIG1BbHBo
YU1hc2tTaXplID0gMDsKLSAgICBtQ29sb3JCdWZmZXJUeXBlID0gRUdMX1JHQl9CVUZGRVI7Ci0g
ICAgbUNvbmZpZ0NhdmVhdCA9IChkaXNwbGF5TW9kZS5Gb3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9y
bWF0KSA/IEVHTF9OT05FIDogRUdMX1NMT1dfQ09ORklHOwotICAgIG1Db25maWdJRCA9IDA7Ci0g
ICAgbUNvbmZvcm1hbnQgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7Ci0KLSAgICBzd2l0Y2ggKGRlcHRo
U3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAg
ICBtRGVwdGhTaXplID0gMDsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0vLyAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0vLyAgICAgIG1EZXB0aFNpemUg
PSAxNjsKLS8vICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLS8vICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEQzREZNVF9EMzI6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAzMjsKLSAgICAgICAgbVN0ZW5j
aWxTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAg
ICAgICAgbURlcHRoU2l6ZSA9IDE1OwotICAgICAgICBtU3RlbmNpbFNpemUgPSAxOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICBtRGVwdGhTaXplID0g
MjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAyNDsKLSAgICAgICAgbVN0ZW5j
aWxTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0Ogot
ICAgICAgICBtRGVwdGhTaXplID0gMjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgICBtRGVwdGhTaXplID0g
MTY7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotLy8gICAgY2Fz
ZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKLS8vICAgICAgbURlcHRoU2l6ZSA9IDMyOwotLy8gICAg
ICBtU3RlbmNpbFNpemUgPSAwOwotLy8gICAgICBicmVhazsKLS8vICAgIGNhc2UgRDNERk1UX0Qy
NEZTODoKLS8vICAgICAgbURlcHRoU2l6ZSA9IDI0OwotLy8gICAgICBtU3RlbmNpbFNpemUgPSA4
OwotLy8gICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgbUxldmVsID0gMDsKLSAgICBtTWF0Y2hOYXRpdmVQaXhtYXAgPSBFR0xf
Tk9ORTsKLSAgICBtTWF4UEJ1ZmZlcldpZHRoID0gdGV4V2lkdGg7Ci0gICAgbU1heFBCdWZmZXJI
ZWlnaHQgPSB0ZXhIZWlnaHQ7Ci0gICAgbU1heFBCdWZmZXJQaXhlbHMgPSB0ZXhXaWR0aCp0ZXhI
ZWlnaHQ7Ci0gICAgbU1heFN3YXBJbnRlcnZhbCA9IG1heEludGVydmFsOwotICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSBtaW5JbnRlcnZhbDsKLSAgICBtTmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9GQUxT
RTsKLSAgICBtTmF0aXZlVmlzdWFsSUQgPSAwOwotICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gMDsK
LSAgICBtUmVuZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7Ci0gICAgbVNhbXBsZUJ1
ZmZlcnMgPSBtdWx0aVNhbXBsZSA/IDEgOiAwOwotICAgIG1TYW1wbGVzID0gbXVsdGlTYW1wbGU7
Ci0gICAgbVN1cmZhY2VUeXBlID0gRUdMX1BCVUZGRVJfQklUIHwgRUdMX1dJTkRPV19CSVQgfCBF
R0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUOwotICAgIG1UcmFuc3BhcmVudFR5cGUgPSBF
R0xfTk9ORTsKLSAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7Ci0gICAgbVRyYW5zcGFyZW50
R3JlZW5WYWx1ZSA9IDA7Ci0gICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gMDsKLX0KLQotRUdM
Q29uZmlnIENvbmZpZzo6Z2V0SGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKEVHTENvbmZp
Zykoc2l6ZV90KW1Db25maWdJRDsKLX0KLQotU29ydENvbmZpZzo6U29ydENvbmZpZyhjb25zdCBF
R0xpbnQgKmF0dHJpYkxpc3QpCi0gICAgOiBtV2FudFJlZChmYWxzZSksIG1XYW50R3JlZW4oZmFs
c2UpLCBtV2FudEJsdWUoZmFsc2UpLCBtV2FudEFscGhhKGZhbHNlKSwgbVdhbnRMdW1pbmFuY2Uo
ZmFsc2UpCi17Ci0gICAgc2NhbkZvcldhbnRlZENvbXBvbmVudHMoYXR0cmliTGlzdCk7Ci19Ci0K
LXZvaWQgU29ydENvbmZpZzo6c2NhbkZvcldhbnRlZENvbXBvbmVudHMoY29uc3QgRUdMaW50ICph
dHRyaWJMaXN0KQotewotICAgIC8vIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNAotICAgIC8v
IFNvcnRpbmcgcnVsZSAjMzogYnkgbGFyZ2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBu
b3QgY29uc2lkZXJpbmcKLSAgICAvLyBjb21wb25lbnRzIHRoYXQgYXJlIDAgb3IgZG9uJ3QtY2Fy
ZS4KLSAgICBmb3IgKGNvbnN0IEVHTGludCAqYXR0ciA9IGF0dHJpYkxpc3Q7IGF0dHJbMF0gIT0g
RUdMX05PTkU7IGF0dHIgKz0gMikKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyWzFdICE9IDAgJiYg
YXR0clsxXSAhPSBFR0xfRE9OVF9DQVJFKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGF0dHJbMF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpF
OiAgICAgICBtV2FudFJlZCA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9H
UkVFTl9TSVpFOiAgICAgbVdhbnRHcmVlbiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgbVdhbnRCbHVlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICBtV2FudEFscGhhID0gdHJ1ZTsgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiBtV2FudEx1bWluYW5jZSA9
IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1FR0xp
bnQgU29ydENvbmZpZzo6d2FudGVkQ29tcG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcp
IGNvbnN0Ci17Ci0gICAgRUdMaW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtV2FudFJlZCkgICAg
ICAgdG90YWwgKz0gY29uZmlnLm1SZWRTaXplOwotICAgIGlmIChtV2FudEdyZWVuKSAgICAgdG90
YWwgKz0gY29uZmlnLm1HcmVlblNpemU7Ci0gICAgaWYgKG1XYW50Qmx1ZSkgICAgICB0b3RhbCAr
PSBjb25maWcubUJsdWVTaXplOwotICAgIGlmIChtV2FudEFscGhhKSAgICAgdG90YWwgKz0gY29u
ZmlnLm1BbHBoYVNpemU7Ci0gICAgaWYgKG1XYW50THVtaW5hbmNlKSB0b3RhbCArPSBjb25maWcu
bUx1bWluYW5jZVNpemU7Ci0KLSAgICByZXR1cm4gdG90YWw7Ci19Ci0KLWJvb2wgU29ydENvbmZp
Zzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0IENvbmZpZyAqeSkgY29uc3QKLXsK
LSAgICByZXR1cm4gKCp0aGlzKSgqeCwgKnkpOwotfQotCi1ib29sIFNvcnRDb25maWc6Om9wZXJh
dG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBDb25maWcgJnkpIGNvbnN0Ci17Ci0gICAgI2Rl
ZmluZSBTT1JUKGF0dHJpYnV0ZSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
ICh4LmF0dHJpYnV0ZSAhPSB5LmF0dHJpYnV0ZSkgICAgICAgICAgICBcCi0gICAgICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXR1
cm4geC5hdHRyaWJ1dGUgPCB5LmF0dHJpYnV0ZTsgICAgICBcCi0gICAgICAgIH0KLQotICAgIE1F
VEFfQVNTRVJUKEVHTF9OT05FIDwgRUdMX1NMT1dfQ09ORklHICYmIEVHTF9TTE9XX0NPTkZJRyA8
IEVHTF9OT05fQ09ORk9STUFOVF9DT05GSUcpOwotICAgIFNPUlQobUNvbmZpZ0NhdmVhdCk7Ci0K
LSAgICBNRVRBX0FTU0VSVChFR0xfUkdCX0JVRkZFUiA8IEVHTF9MVU1JTkFOQ0VfQlVGRkVSKTsK
LSAgICBTT1JUKG1Db2xvckJ1ZmZlclR5cGUpOwotCi0gICAgLy8gQnkgbGFyZ2VyIHRvdGFsIG51
bWJlciBvZiBjb2xvciBiaXRzLCBvbmx5IGNvbnNpZGVyaW5nIHRob3NlIHRoYXQgYXJlIHJlcXVl
c3RlZCB0byBiZSA+IDAuCi0gICAgRUdMaW50IHhDb21wb25lbnRzU2l6ZSA9IHdhbnRlZENvbXBv
bmVudHNTaXplKHgpOwotICAgIEVHTGludCB5Q29tcG9uZW50c1NpemUgPSB3YW50ZWRDb21wb25l
bnRzU2l6ZSh5KTsKLSAgICBpZiAoeENvbXBvbmVudHNTaXplICE9IHlDb21wb25lbnRzU2l6ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB4Q29tcG9uZW50c1NpemUgPiB5Q29tcG9uZW50c1NpemU7
Ci0gICAgfQotCi0gICAgU09SVChtQnVmZmVyU2l6ZSk7Ci0gICAgU09SVChtU2FtcGxlQnVmZmVy
cyk7Ci0gICAgU09SVChtU2FtcGxlcyk7Ci0gICAgU09SVChtRGVwdGhTaXplKTsKLSAgICBTT1JU
KG1TdGVuY2lsU2l6ZSk7Ci0gICAgU09SVChtQWxwaGFNYXNrU2l6ZSk7Ci0gICAgU09SVChtTmF0
aXZlVmlzdWFsVHlwZSk7Ci0gICAgU09SVChtQ29uZmlnSUQpOwotCi0gICAgI3VuZGVmIFNPUlQK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gV2UnZCBsaWtlIHRvIHVzZSBTb3J0Q29uZmln
IHRvIGFsc28gZWxpbWluYXRlIGR1cGxpY2F0ZSBjb25maWdzLgotLy8gVGhpcyB3b3JrcyBhcyBs
b25nIGFzIHdlIG5ldmVyIGhhdmUgdHdvIGNvbmZpZ3Mgd2l0aCBkaWZmZXJlbnQgcGVyLVJHQi1j
b21wb25lbnQgbGF5b3V0cywKLS8vIGJ1dCB0aGUgc2FtZSB0b3RhbC4KLS8vIDU1NTEgYW5kIDU2
NSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgUitHK0IgaXMgZGlmZmVyZW50LgotLy8gNTU1MSBhbmQg
NTU1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBidWZmZXJTaXplIGlzIGRpZmZlcmVudC4KLWNvbnN0
IEVHTGludCBDb25maWdTZXQ6Om1Tb3J0QXR0cmlic1tdID0KLXsKLSAgICBFR0xfUkVEX1NJWkUs
IDEsCi0gICAgRUdMX0dSRUVOX1NJWkUsIDEsCi0gICAgRUdMX0JMVUVfU0laRSwgMSwKLSAgICBF
R0xfTFVNSU5BTkNFX1NJWkUsIDEsCi0gICAgLy8gQlVUIE5PVCBBTFBIQQotICAgIEVHTF9OT05F
Ci19OwotCi1Db25maWdTZXQ6OkNvbmZpZ1NldCgpCi0gICAgOiBtU2V0KFNvcnRDb25maWcobVNv
cnRBdHRyaWJzKSkKLXsKLX0KLQotdm9pZCBDb25maWdTZXQ6OmFkZChEM0RESVNQTEFZTU9ERSBk
aXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZh
bCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZv
cm1hdCwgRUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWln
aHQpCi17Ci0gICAgQ29uZmlnIGNvbmZpZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBt
YXhTd2FwSW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBt
dWx0aVNhbXBsZSwgdGV4V2lkdGgsIHRleEhlaWdodCk7Ci0KLSAgICBtU2V0Lmluc2VydChjb25m
aWcpOwotfQotCi1zaXplX3QgQ29uZmlnU2V0OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVNldC5zaXplKCk7Ci19Ci0KLWJvb2wgQ29uZmlnU2V0OjpnZXRDb25maWdzKEVHTENvbmZpZyAq
Y29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdM
aW50ICpudW1Db25maWcpCi17Ci0gICAgdmVjdG9yPGNvbnN0IENvbmZpZyo+IHBhc3NlZDsKLSAg
ICBwYXNzZWQucmVzZXJ2ZShtU2V0LnNpemUoKSk7Ci0KLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZp
ZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsK
LSAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7Ci0gICAgICAgIGNvbnN0IEVHTGludCAqYXR0cmli
dXRlID0gYXR0cmliTGlzdDsKLQotICAgICAgICB3aGlsZSAoYXR0cmlidXRlWzBdICE9IEVHTF9O
T05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVswXSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1CdWZmZXJTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAg
ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFTaXplID49IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVF
X1NJWkU6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUJsdWVTaXplID49IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1HcmVlblNp
emUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmln
LT5tUmVkU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICBtYXRj
aCA9IGNvbmZpZy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU1RFTkNJTF9TSVpFOiAgICAgICAg
ICAgICAgbWF0Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZF
QVQ6ICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29uZmlnQ2F2ZWF0ID09IChFR0xlbnVt
KSBhdHRyaWJ1dGVbMV07ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9D
T05GSUdfSUQ6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNvbmZpZ0lEID09IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MZXZl
bCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tTmF0aXZlUmVuZGVyYWJsZSA9PSAoRUdMQm9vbGVhbikgYXR0cmlidXRlWzFdOyAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICBt
YXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU0FNUExFUzogICAgICAgICAg
ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49IGF0dHJpYnV0ZVsxXTsgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1NBTVBMRV9C
VUZGRVJTOiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxlQnVmZmVycyA+PSBhdHRy
aWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVH
TF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1TdXJmYWNlVHlw
ZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1U
cmFuc3BhcmVudFR5cGUgPT0gKEVHTGVudW0pIGF0dHJpYnV0ZVsxXTsgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgIG1hdGNoID0g
Y29uZmlnLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTog
ICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfUkVE
X1ZBTFVFOiAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFJlZFZhbHVlID09IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0JJTkRf
VE9fVEVYVFVSRV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmlnLT5tQmluZFRvVGV4dHVyZVJHQiA9
PSAoRUdMQm9vbGVhbikgYXR0cmlidXRlWzFdOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRjaCA9IGNvbmZpZy0+bUJpbmRUb1Rl
eHR1cmVSR0JBID09IChFR0xCb29sZWFuKSBhdHRyaWJ1dGVbMV07ICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAgICAgICAgbWF0Y2ggPSBjb25maWct
Pm1NaW5Td2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFMOiAgICAgICAgIG1hdGNo
ID0gY29uZmlnLT5tTWF4U3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAg
ICAgICBtYXRjaCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfTUFTS19T
SVpFOiAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBoYU1hc2tTaXplID49IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NP
TE9SX0JVRkZFUl9UWVBFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29sb3JCdWZmZXJUeXBl
ID09IChFR0xlbnVtKSBhdHRyaWJ1dGVbMV07ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1SZW5k
ZXJhYmxlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAgbWF0Y2ggPSBmYWxz
ZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgIG1h
dGNoID0gKGNvbmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsx
XTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9XSURUSDog
ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU1heFBCdWZmZXJXaWR0aCA+PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTUFYX1BCVUZG
RVJfSEVJR0hUOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NYXhQQnVmZmVySGVpZ2h0ID49IGF0
dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdM
X01BWF9QQlVGRkVSX1BJWEVMUzogICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4UEJ1ZmZlclBp
eGVscyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCFtYXRjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBh
c3NlZC5wdXNoX2JhY2soJipjb25maWcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNv
bmZpZ3MpCi0gICAgewotICAgICAgICBzb3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCks
IFNvcnRDb25maWcoYXR0cmliTGlzdCkpOwotCi0gICAgICAgIEVHTGludCBpbmRleDsKLSAgICAg
ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19j
YXN0PEVHTGludD4ocGFzc2VkLnNpemUoKSk7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbmZpZ3NbaW5kZXhdID0gcGFzc2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAqbnVtQ29uZmlnID0gaW5kZXg7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgICpudW1Db25maWcgPSBwYXNzZWQuc2l6ZSgpOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1jb25zdCBlZ2w6OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmln
IGNvbmZpZ0hhbmRsZSkKLXsKLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4o
KTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsKLSAgICAgICAgaWYgKGNv
bmZpZy0+Z2V0SGFuZGxlKCkgPT0gY29uZmlnSGFuZGxlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gJigqY29uZmlnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxM
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9D
b25maWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NjI2ZWQuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAorKysgL2Rldi9udWxsCkBAIC0x
LDExOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBDb25maWcuaDogRGVmaW5lcyB0
aGUgZWdsOjpDb25maWcgY2xhc3MsIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCwgdHlwZQotLy8gYW5k
IHNpemUgZm9yIGFuIGVnbDo6U3VyZmFjZS4gSW1wbGVtZW50cyBFR0xDb25maWcgYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDMuNCBwYWdlIDE1LgotCi0j
aWZuZGVmIElOQ0xVREVfQ09ORklHX0hfCi0jZGVmaW5lIElOQ0xVREVfQ09ORklHX0hfCi0KLSNk
ZWZpbmUgRUdMQVBJCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQot
I2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVz
cGFjZSBlZ2wKLXsKLWNsYXNzIERpc3BsYXk7Ci0KLWNsYXNzIENvbmZpZwotewotICBwdWJsaWM6
Ci0gICAgQ29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcElu
dGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9y
bWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVH
TGludCB0ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdodCk7Ci0KLSAgICB2b2lkIHNldERlZmF1bHRz
KCk7Ci0gICAgdm9pZCBzZXQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5T
d2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJn
ZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBs
ZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KTsKLSAgICBFR0xDb25maWcgZ2V0
SGFuZGxlKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBEM0RESVNQTEFZTU9ERSBtRGlzcGxheU1vZGU7
Ci0gICAgY29uc3QgRDNERk9STUFUIG1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgY29uc3QgRDNE
Rk9STUFUIG1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgY29uc3QgRUdMaW50IG1NdWx0aVNhbXBs
ZTsKLQotICAgIEVHTGludCBtQnVmZmVyU2l6ZTsgICAgICAgICAgICAgIC8vIERlcHRoIG9mIHRo
ZSBjb2xvciBidWZmZXIKLSAgICBFR0xpbnQgbVJlZFNpemU7ICAgICAgICAgICAgICAgICAvLyBC
aXRzIG9mIFJlZCBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1HcmVlblNpemU7ICAg
ICAgICAgICAgICAgLy8gQml0cyBvZiBHcmVlbiBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdM
aW50IG1CbHVlU2l6ZTsgICAgICAgICAgICAgICAgLy8gQml0cyBvZiBCbHVlIGluIHRoZSBjb2xv
ciBidWZmZXIKLSAgICBFR0xpbnQgbUx1bWluYW5jZVNpemU7ICAgICAgICAgICAvLyBCaXRzIG9m
IEx1bWluYW5jZSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1BbHBoYVNpemU7ICAg
ICAgICAgICAgICAgLy8gQml0cyBvZiBBbHBoYSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdM
aW50IG1BbHBoYU1hc2tTaXplOyAgICAgICAgICAgLy8gQml0cyBvZiBBbHBoYSBNYXNrIGluIHRo
ZSBtYXNrIGJ1ZmZlcgotICAgIEVHTEJvb2xlYW4gbUJpbmRUb1RleHR1cmVSR0I7ICAgIC8vIFRy
dWUgaWYgYmluZGFibGUgdG8gUkdCIHRleHR1cmVzLgotICAgIEVHTEJvb2xlYW4gbUJpbmRUb1Rl
eHR1cmVSR0JBOyAgIC8vIFRydWUgaWYgYmluZGFibGUgdG8gUkdCQSB0ZXh0dXJlcy4KLSAgICBF
R0xlbnVtIG1Db2xvckJ1ZmZlclR5cGU7ICAgICAgICAvLyBDb2xvciBidWZmZXIgdHlwZQotICAg
IEVHTGVudW0gbUNvbmZpZ0NhdmVhdDsgICAgICAgICAgIC8vIEFueSBjYXZlYXRzIGZvciB0aGUg
Y29uZmlndXJhdGlvbgotICAgIEVHTGludCBtQ29uZmlnSUQ7ICAgICAgICAgICAgICAgIC8vIFVu
aXF1ZSBFR0xDb25maWcgaWRlbnRpZmllcgotICAgIEVHTGludCBtQ29uZm9ybWFudDsgICAgICAg
ICAgICAgIC8vIFdoZXRoZXIgY29udGV4dHMgY3JlYXRlZCB3aXRoIHRoaXMgY29uZmlnIGFyZSBj
b25mb3JtYW50Ci0gICAgRUdMaW50IG1EZXB0aFNpemU7ICAgICAgICAgICAgICAgLy8gQml0cyBv
ZiBaIGluIHRoZSBkZXB0aCBidWZmZXIKLSAgICBFR0xpbnQgbUxldmVsOyAgICAgICAgICAgICAg
ICAgICAvLyBGcmFtZSBidWZmZXIgbGV2ZWwKLSAgICBFR0xCb29sZWFuIG1NYXRjaE5hdGl2ZVBp
eG1hcDsgICAvLyBNYXRjaCB0aGUgbmF0aXZlIHBpeG1hcCBmb3JtYXQKLSAgICBFR0xpbnQgbU1h
eFBCdWZmZXJXaWR0aDsgICAgICAgICAvLyBNYXhpbXVtIHdpZHRoIG9mIHBidWZmZXIKLSAgICBF
R0xpbnQgbU1heFBCdWZmZXJIZWlnaHQ7ICAgICAgICAvLyBNYXhpbXVtIGhlaWdodCBvZiBwYnVm
ZmVyCi0gICAgRUdMaW50IG1NYXhQQnVmZmVyUGl4ZWxzOyAgICAgICAgLy8gTWF4aW11bSBzaXpl
IG9mIHBidWZmZXIKLSAgICBFR0xpbnQgbU1heFN3YXBJbnRlcnZhbDsgICAgICAgICAvLyBNYXhp
bXVtIHN3YXAgaW50ZXJ2YWwKLSAgICBFR0xpbnQgbU1pblN3YXBJbnRlcnZhbDsgICAgICAgICAv
LyBNaW5pbXVtIHN3YXAgaW50ZXJ2YWwKLSAgICBFR0xCb29sZWFuIG1OYXRpdmVSZW5kZXJhYmxl
OyAgICAvLyBFR0xfVFJVRSBpZiBuYXRpdmUgcmVuZGVyaW5nIEFQSXMgY2FuIHJlbmRlciB0byBz
dXJmYWNlCi0gICAgRUdMaW50IG1OYXRpdmVWaXN1YWxJRDsgICAgICAgICAgLy8gSGFuZGxlIG9m
IGNvcnJlc3BvbmRpbmcgbmF0aXZlIHZpc3VhbAotICAgIEVHTGludCBtTmF0aXZlVmlzdWFsVHlw
ZTsgICAgICAgIC8vIE5hdGl2ZSB2aXN1YWwgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2aXN1YWwK
LSAgICBFR0xpbnQgbVJlbmRlcmFibGVUeXBlOyAgICAgICAgICAvLyBXaGljaCBjbGllbnQgcmVu
ZGVyaW5nIEFQSXMgYXJlIHN1cHBvcnRlZC4KLSAgICBFR0xpbnQgbVNhbXBsZUJ1ZmZlcnM7ICAg
ICAgICAgICAvLyBOdW1iZXIgb2YgbXVsdGlzYW1wbGUgYnVmZmVycwotICAgIEVHTGludCBtU2Ft
cGxlczsgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBzYW1wbGVzIHBlciBwaXhlbAotICAg
IEVHTGludCBtU3RlbmNpbFNpemU7ICAgICAgICAgICAgIC8vIEJpdHMgb2YgU3RlbmNpbCBpbiB0
aGUgc3RlbmNpbCBidWZmZXIKLSAgICBFR0xpbnQgbVN1cmZhY2VUeXBlOyAgICAgICAgICAgICAv
LyBXaGljaCB0eXBlcyBvZiBFR0wgc3VyZmFjZXMgYXJlIHN1cHBvcnRlZC4KLSAgICBFR0xlbnVt
IG1UcmFuc3BhcmVudFR5cGU7ICAgICAgICAvLyBUeXBlIG9mIHRyYW5zcGFyZW5jeSBzdXBwb3J0
ZWQKLSAgICBFR0xpbnQgbVRyYW5zcGFyZW50UmVkVmFsdWU7ICAgICAvLyBUcmFuc3BhcmVudCBy
ZWQgdmFsdWUKLSAgICBFR0xpbnQgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZTsgICAvLyBUcmFuc3Bh
cmVudCBncmVlbiB2YWx1ZQotICAgIEVHTGludCBtVHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgIC8v
IFRyYW5zcGFyZW50IGJsdWUgdmFsdWUKLX07Ci0KLS8vIEZ1bmN0aW9uIG9iamVjdCB1c2VkIGJ5
IFNUTCBzb3J0aW5nIHJvdXRpbmVzIGZvciBvcmRlcmluZyBDb25maWdzIGFjY29yZGluZyB0byBb
RUdMXSBzZWN0aW9uIDMuNC4xIHBhZ2UgMjQuCi1jbGFzcyBTb3J0Q29uZmlnCi17Ci0gIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBTb3J0Q29uZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0K
LSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICp4LCBjb25zdCBDb25maWcgKnkpIGNv
bnN0OwotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAm
eSkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICB2b2lkIHNjYW5Gb3JXYW50ZWRDb21wb25lbnRz
KGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMaW50IHdhbnRlZENvbXBvbmVudHNT
aXplKGNvbnN0IENvbmZpZyAmY29uZmlnKSBjb25zdDsKLQotICAgIGJvb2wgbVdhbnRSZWQ7Ci0g
ICAgYm9vbCBtV2FudEdyZWVuOwotICAgIGJvb2wgbVdhbnRCbHVlOwotICAgIGJvb2wgbVdhbnRB
bHBoYTsKLSAgICBib29sIG1XYW50THVtaW5hbmNlOwotfTsKLQotY2xhc3MgQ29uZmlnU2V0Ci17
Ci0gICAgZnJpZW5kIERpc3BsYXk7Ci0KLSAgcHVibGljOgotICAgIENvbmZpZ1NldCgpOwotCi0g
ICAgdm9pZCBhZGQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50
ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3Jt
YXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdM
aW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
OwotICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAq
YXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKTsKLSAgICBj
b25zdCBlZ2w6OkNvbmZpZyAqZ2V0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmZpZ1NldCk7Ci0KLSAgICB0eXBl
ZGVmIHN0ZDo6c2V0PENvbmZpZywgU29ydENvbmZpZz4gU2V0OwotICAgIHR5cGVkZWYgU2V0Ojpp
dGVyYXRvciBJdGVyYXRvcjsKLSAgICBTZXQgbVNldDsKLQotICAgIHN0YXRpYyBjb25zdCBFR0xp
bnQgbVNvcnRBdHRyaWJzW107Ci19OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0NPTkZJR19I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYzBiOTMuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEyNTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRGlzcGxheS5jcHA6IElt
cGxlbWVudHMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFj
dAotLy8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdM
RGlzcGxheS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KLQotI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWFw
PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0KLS8vIENhbiBhbHNvIGJlIGVuYWJsZWQg
YnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2plY3QncyBwcmVkZWZpbmVkIG1h
Y3JvcwotI2RlZmluZSBSRUZfUkFTVCAwCi0KLS8vIFRoZSAiRGVidWcgVGhpcyBQaXhlbC4uLiIg
ZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0aGUKLS8vIEQzRDlFeCBpbnRl
cmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRvIHdvcmsgb24gYSBWaXN0YS9X
aW4gNwotLy8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVfRDNEOUVYPTAiIGluIHlvdXIg
cHJvamVjdCBmaWxlLgotI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgpCi0vLyBFbmFi
bGVzIHVzZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwgd2hlbiBhdmFpbGFibGUKLSNk
ZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCi0jZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5B
QkxFX0QzRDlFWCkKLQotbmFtZXNwYWNlIGVnbAotewotbmFtZXNwYWNlCi17Ci0gICAgdHlwZWRl
ZiBzdGQ6Om1hcDxFR0xOYXRpdmVEaXNwbGF5VHlwZSwgRGlzcGxheSo+IERpc3BsYXlNYXA7IAot
ICAgIERpc3BsYXlNYXAgZGlzcGxheXM7Ci19Ci0KLWVnbDo6RGlzcGxheSAqRGlzcGxheTo6Z2V0
RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5SWQpCi17Ci0gICAgaWYgKGRpc3Bs
YXlzLmZpbmQoZGlzcGxheUlkKSAhPSBkaXNwbGF5cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBkaXNwbGF5c1tkaXNwbGF5SWRdOwotICAgIH0KLQotICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IE5VTEw7Ci0KLSAgICBpZiAoZGlzcGxheUlkID09IEVHTF9ERUZBVUxUX0RJU1BMQVkp
Ci0gICAgewotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6RGlzcGxheShkaXNwbGF5SWQsIChI
REMpTlVMTCwgZmFsc2UpOwotICAgIH0KLSAgICBlbHNlIGlmIChkaXNwbGF5SWQgPT0gRUdMX1NP
RlRXQVJFX0RJU1BMQVlfQU5HTEUpCi0gICAgewotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6
RGlzcGxheShkaXNwbGF5SWQsIChIREMpTlVMTCwgdHJ1ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDaGVjayBpZiBkaXNwbGF5SWQgaXMgYSB2YWxpZCBkaXNw
bGF5IGRldmljZSBjb250ZXh0Ci0KLSAgICAgICAgZGlzcGxheSA9IG5ldyBlZ2w6OkRpc3BsYXko
ZGlzcGxheUlkLCAoSERDKWRpc3BsYXlJZCwgZmFsc2UpOwotICAgIH0KLQotICAgIGRpc3BsYXlz
W2Rpc3BsYXlJZF0gPSBkaXNwbGF5OwotICAgIHJldHVybiBkaXNwbGF5OwotfQotCi1EaXNwbGF5
OjpEaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCwgSERDIGRldmljZUNvbnRl
eHQsIGJvb2wgc29mdHdhcmUpIDogbURjKGRldmljZUNvbnRleHQpCi17Ci0gICAgbUQzZDlNb2R1
bGUgPSBOVUxMOwotICAgIAotICAgIG1EM2Q5ID0gTlVMTDsKLSAgICBtRDNkOUV4ID0gTlVMTDsK
LSAgICBtRGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlRXggPSBOVUxMOwotICAgIG1EZXZpY2VX
aW5kb3cgPSBOVUxMOwotCi0gICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7Ci0KLSAg
ICAjaWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAgICAgICBt
RGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOwotICAgICNlbHNlCi0gICAgICAgIG1EZXZpY2VU
eXBlID0gRDNEREVWVFlQRV9IQUw7Ci0gICAgI2VuZGlmCi0KLSAgICBtTWluU3dhcEludGVydmFs
ID0gMTsKLSAgICBtTWF4U3dhcEludGVydmFsID0gMTsKLSAgICBtU29mdHdhcmVEZXZpY2UgPSBz
b2Z0d2FyZTsKLSAgICBtRGlzcGxheUlkID0gZGlzcGxheUlkOwotICAgIG1EZXZpY2VMb3N0ID0g
ZmFsc2U7Ci19Ci0KLURpc3BsYXk6On5EaXNwbGF5KCkKLXsKLSAgICB0ZXJtaW5hdGUoKTsKLQot
ICAgIERpc3BsYXlNYXA6Oml0ZXJhdG9yIHRoaXNEaXNwbGF5ID0gZGlzcGxheXMuZmluZChtRGlz
cGxheUlkKTsKLQotICAgIGlmICh0aGlzRGlzcGxheSAhPSBkaXNwbGF5cy5lbmQoKSkKLSAgICB7
Ci0gICAgICBkaXNwbGF5cy5lcmFzZSh0aGlzRGlzcGxheSk7Ci0gICAgfQotfQotCi1ib29sIERp
c3BsYXk6OmluaXRpYWxpemUoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQot
ICAgIHsKLSAgICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hh
ZGVyX2QzZDkuZGxsIikpOwotICAgIH0gCi0gICAgZWxzZQotICAgIHsKLSAgICAgIG1EM2Q5TW9k
dWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoImQzZDkuZGxsIikpOwotICAgIH0KLSAgICBpZiAo
bUQzZDlNb2R1bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRp
cmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOwotICAgIERpcmVjdDNE
Q3JlYXRlOUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGly
ZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNE
Q3JlYXRlOUV4IikpOwotCi0gICAgLy8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1v
bmcgb3RoZXIgdGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcwotICAgIC8vIGluY2xpbmVkIHRv
IHJlcG9ydCBhIGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hl
cwotICAgIC8vIGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZp
c3RhIGFuZCBsYXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCi0gICAgaWYg
KEFOR0xFX0VOQUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVE
KERpcmVjdDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgpKSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtRDNkOUV4KTsKLSAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZh
Y2UoSUlEX0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKLSAg
ICAgICAgQVNTRVJUKG1EM2Q5KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUQz
ZDkgPSBEaXJlY3QzRENyZWF0ZTkoRDNEX1NES19WRVJTSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUQzZDkpCi0gICAgewotICAgICAgICBpZiAobURjICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAg
ICAgLy8gIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoaWNoIGFkYXB0
ZXIgaW5kZXggdGhlIGRldmljZSBjb250ZXh0IGNvcnJlc3BvbmRzIHRvCi0gICAgICAgIH0KLQot
ICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIC8vIEdpdmUgdXAgb24g
Z2V0dGluZyBkZXZpY2UgY2FwcyBhZnRlciBhYm91dCBvbmUgc2Vjb25kLgotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDEwOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9
IG1EM2Q5LT5HZXREZXZpY2VDYXBzKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAocmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29t
ZSB0aW1lIHRvIGluaXRpYWxpemUvcmVjb3ZlcgotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVf
T1VUT0ZNRU1PUlksIEQzREVSUl9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNh
bid0IHJlY292ZXIgZnJvbQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobURldmljZUNhcHMuUGl4
ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgdGVybWluYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklU
SUFMSVpFRCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBEaXJlY3RYOSBp
cyBydW5uaW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0Y2hSZWN0IGZy
b20gYSByZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgaXMgbm90IHN1
cHBvcnRlZC4KLSAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZl
cnRUb1JlbmRlclRhcmdldC4KLSAgICAgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQz
RERFVkNBUFMyX0NBTl9TVFJFVENIUkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0ZXJtaW5hdGUoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Tk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtTWluU3dhcElu
dGVydmFsID0gNDsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7Ci0KLSAgICAgICAgaWYg
KG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxf
SU1NRURJQVRFKSB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWws
IDApOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7fQot
ICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VO
VF9JTlRFUlZBTF9PTkUpICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3
YXBJbnRlcnZhbCwgMSk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVy
dmFsLCAxKTt9Ci0gICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMg
JiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTykgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6
Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1N
YXhTd2FwSW50ZXJ2YWwsIDIpO30KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlv
bkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUpICAgICB7bU1pblN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOyBtTWF4U3dhcEludGVydmFsID0g
c3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQotICAgICAgICBpZiAobURldmljZUNhcHMu
UHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAgICAgIHtt
TWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7IG1NYXhTd2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTt9Ci0KLSAgICAgICAgbUQz
ZDktPkdldEFkYXB0ZXJJZGVudGlmaWVyKG1BZGFwdGVyLCAwLCAmbUFkYXB0ZXJJZGVudGlmaWVy
KTsKLQotICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KLSAg
ICAgICAgewotICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAotICAgICAgICAvLyAgRDNERk1U
X0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBS
ZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVu
ZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCi0gICAgICAgICAgICBEM0RGTVRfQThSOEc4
QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAvLyAgRDNERk1UX1gxUjVH
NUI1LCAgICAgIC8vIEhhcyBubyBjb21wYXRpYmxlIE9wZW5HTCBFUyByZW5kZXJidWZmZXIgZm9y
bWF0Ci0gICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICAgICAgfTsKLQotICAgICAgICBj
b25zdCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KLSAgICAgICAgewotICAgICAg
ICAgICAgRDNERk1UX1VOS05PV04sCi0gICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxFLAot
ICAgICAgICAgICAgRDNERk1UX0QzMiwKLSAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKLSAgICAg
ICAgICAgIEQzREZNVF9EMjRTOCwKLSAgICAgICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAgICAg
Ly8gIEQzREZNVF9EMjRYNFM0LAotICAgICAgICAgICAgRDNERk1UX0QxNiwKLSAgICAgICAgLy8g
IEQzREZNVF9EMzJGX0xPQ0tBQkxFLAotICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAotICAgICAg
ICB9OwotCi0gICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICAg
ICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5
TW9kZSk7Ci0KLSAgICAgICAgQ29uZmlnU2V0IGNvbmZpZ1NldDsKLQotICAgICAgICBmb3IgKGlu
dCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgc2l6ZW9mKHJlbmRlclRhcmdldEZvcm1h
dHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGZvcm1hdEluZGV4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXRz
W2Zvcm1hdEluZGV4XTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRh
cmdldEZvcm1hdCk7Ci0KLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7
IGRlcHRoU3RlbmNpbEluZGV4IDwgc2l6ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9m
KEQzREZPUk1BVCk7IGRlcHRoU3RlbmNpbEluZGV4KyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVu
Y2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNEX09LOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3Rl
bmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhT
dGVuY2lsRm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVs
dGktc2FtcGxpbmcKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NldC5hZGQo
Y3VycmVudERpc3BsYXlNb2RlLCBtTWluU3dhcEludGVydmFsLCBtTWF4U3dhcEludGVydmFsLCBy
ZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aCwg
bURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1
ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRlcm5hbGx5Ci0gICAgICAgIEVHTGludCBpbmRleCA9IDE7
Ci0gICAgICAgIGZvciAoQ29uZmlnU2V0OjpJdGVyYXRvciBjb25maWcgPSBjb25maWdTZXQubVNl
dC5iZWdpbigpOyBjb25maWcgIT0gY29uZmlnU2V0Lm1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDb25maWcgY29uZmlndXJhdGlvbiA9ICpjb25maWc7Ci0gICAg
ICAgICAgICBjb25maWd1cmF0aW9uLm1Db25maWdJRCA9IGluZGV4OwotICAgICAgICAgICAgaW5k
ZXgrKzsKLQotICAgICAgICAgICAgbUNvbmZpZ1NldC5tU2V0Lmluc2VydChjb25maWd1cmF0aW9u
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgIHsK
LSAgICAgICAgdGVybWluYXRlKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLQotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5k
b3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOwotICAgIHN0YXRpYyBjb25zdCBU
Q0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOwotCi0gICAgbURldmljZVdpbmRvdyA9
IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwg
V1NfRElTQUJMRUQgfCBXU19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBH
ZXRNb2R1bGVIYW5kbGUoTlVMTCksIE5VTEwpOwotCi0gICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkK
LSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKLXsK
LSAgICB3aGlsZSAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZXN0cm95
U3VyZmFjZSgqbVN1cmZhY2VTZXQuYmVnaW4oKSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtQ29u
dGV4dFNldC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVzdHJveUNvbnRleHQoKm1Db250ZXh0
U2V0LmJlZ2luKCkpOwotICAgIH0KLQotICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5
KCkpCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGlmIChtRGV2
aWNlKQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIGRldmljZSBpcyBsb3N0LCByZXNldCBpdCBm
aXJzdCB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIGRyaXZlciBpbiBhbiB1bnN0YWJsZSBzdGF0ZQot
ICAgICAgICBpZiAodGVzdERldmljZUxvc3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVz
ZXREZXZpY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKLSAg
ICAgICAgbURldmljZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7
Ci0gICAgICAgIG1EZXZpY2VFeC0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlRXggPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtRDNkOSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5LT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1EM2Q5ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZVdpbmRv
dykKLSAgICB7Ci0gICAgICAgIERlc3Ryb3lXaW5kb3cobURldmljZVdpbmRvdyk7Ci0gICAgICAg
IG1EZXZpY2VXaW5kb3cgPSBOVUxMOwotICAgIH0KLSAgICAKLSAgICBpZiAobUQzZDlFeCkKLSAg
ICB7Ci0gICAgICAgIG1EM2Q5RXgtPlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDlFeCA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1
bGUgPSBOVUxMOwotICAgIH0KLX0KLQotdm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKLXsKLSAg
ICBpZiAoIW1TY2VuZVN0YXJ0ZWQpCi0gICAgewotICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZp
Y2UtPkJlZ2luU2NlbmUoKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlzIGRlZmVuc2l2ZSBjaGVja2luZyBhZ2FpbnN0IHRoZSBkZXZpY2Ug
YmVpbmcKLSAgICAgICAgICAgIC8vIGxvc3QgYXQgdW5leHBlY3RlZCB0aW1lcy4KLSAgICAgICAg
ICAgIG1TY2VuZVN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIERp
c3BsYXk6OmVuZFNjZW5lKCkKLXsKLSAgICBpZiAobVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAg
ICAgIC8vIEVuZFNjZW5lIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIGxvc3QsIGZvciBleGFt
cGxlIGR1ZQotICAgICAgICAvLyB0byBhIFREUiBkdXJpbmcgYSBkcmF3IGNhbGwuCi0gICAgICAg
IG1EZXZpY2UtPkVuZFNjZW5lKCk7Ci0gICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAg
ICB9Ci19Ci0KLWJvb2wgRGlzcGxheTo6Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNv
bnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29u
ZmlnKQotewotICAgIHJldHVybiBtQ29uZmlnU2V0LmdldENvbmZpZ3MoY29uZmlncywgYXR0cmli
TGlzdCwgY29uZmlnU2l6ZSwgbnVtQ29uZmlnKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRDb25m
aWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1
ZSkKLXsKLSAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQu
Z2V0KGNvbmZpZyk7Ci0KLSAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKLSAgICB7Ci0gICAgICBjYXNl
IEVHTF9CVUZGRVJfU0laRTogICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
QnVmZmVyU2l6ZTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9TSVpF
OiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFTaXplOyAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmx1ZVNpemU7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tR3JlZW5TaXplOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVH
TF9SRURfU0laRTogICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVk
U2l6ZTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAg
ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTaXplOyAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TVEVOQ0lMX1NJWkU6ICAgICAgICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3RlbmNpbFNpemU7ICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9D
T05GSUdfSUQ6ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmln
SUQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9MRVZFTDogICAgICAgICAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTGV2ZWw7ICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9OQVRJVkVfUkVOREVSQUJMRTogICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tTmF0aXZlUmVuZGVyYWJsZTsgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tTmF0aXZlVmlzdWFsVHlwZTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TQU1Q
TEVTOiAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlczsg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAg
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlQnVmZmVyczsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tU3VyZmFjZVR5cGU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVHTF9UUkFOU1BBUkVOVF9UWVBFOiAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BB
UkVOVF9CTFVFX1ZBTFVFOiAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRC
bHVlVmFsdWU7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxV
RTogICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgYnJl
YWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUU6ICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
QmluZFRvVGV4dHVyZVJHQjsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CSU5EX1RPX1RF
WFRVUkVfUkdCQTogICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJH
QkE7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NSU5fU1dBUF9JTlRFUlZBTDogICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWluU3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVHTF9NQVhfU1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tTWF4U3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVH
TF9MVU1JTkFOQ0VfU0laRTogICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTHVt
aW5hbmNlU2l6ZTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9NQVNLX1NJ
WkU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFNYXNrU2l6ZTsgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9N
QVRDSF9OQVRJVkVfUElYTUFQOiAgICAgICAqdmFsdWUgPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgp
OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT05GT1JNQU5UOiAgICAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZm9ybWFudDsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9XSURUSDogICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZlcldpZHRoOyAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9IRUlHSFQ6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tTWF4UEJ1ZmZlckhlaWdodDsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhf
UEJVRkZFUl9QSVhFTFM6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZl
clBpeGVsczsgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGlzcGxheTo6Y3JlYXRl
RGV2aWNlKCkKLXsKLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMg
PSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKLSAgICBEV09SRCBiZWhhdmlvckZsYWdz
ID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7Ci0K
LSAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJF
X1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0
ZXJzLCAmbURldmljZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNF
TE9TVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmVzdWx0
ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5k
b3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywg
JnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RF
UlJfTk9UQVZBSUxBQkxFIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKG1EM2Q5RXgpCi0gICAgewotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5R
dWVyeUludGVyZmFjZShJSURfSURpcmVjdDNERGV2aWNlOUV4LCAodm9pZCoqKSAmbURldmljZUV4
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBpbml0
aWFsaXplRGV2aWNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gZG8gYW55IG9uZS10
aW1lIGRldmljZSBpbml0aWFsaXphdGlvbgotLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBh
ZnRlciBhIGRldmljZSBsb3N0L3Jlc2V0Ci0vLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFu
ZCBlbnN1cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KLXZvaWQgRGlzcGxheTo6aW5p
dGlhbGl6ZURldmljZSgpCi17Ci0gICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcwot
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVF
KTsKLSAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19MQVNUUElYRUwsIEZBTFNFKTsK
LQotICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBEaXNwbGF5OjpyZXNldERl
dmljZSgpCi17Ci0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0g
Z2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQz
RF9PSzsKLSAgICBib29sIGxvc3QgPSB0ZXN0RGV2aWNlTG9zdCgpOwotICAgIGludCBhdHRlbXB0
cyA9IDM7ICAgIAotCi0gICAgd2hpbGUgKGxvc3QgJiYgYXR0ZW1wdHMgPiAwKQotICAgIHsKLSAg
ICAgICAgaWYgKG1EZXZpY2VFeCkKLSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoNTAwKTsg
ICAvLyBHaXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQotICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZUV4LT5SZXNldEV4KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICB3aGlsZSAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNv
bWUgQ1BVIHRpbWUKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVy
YXRpdmVMZXZlbCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9ERVZJQ0VOT1RSRVNFVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5SZXNldCgmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KCk7Ci0gICAgICAg
IGF0dGVtcHRzIC0tOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiUmVzZXQvUmVzZXRFeCBmYWlsZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIs
IHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgLy8gcmVzZXQgZGV2aWNlIGRlZmF1bHRzCi0gICAgaW5pdGlhbGl6ZURldmlj
ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRl
V2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50
ICphdHRyaWJMaXN0KQotewotICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25m
aWdTZXQuZ2V0KGNvbmZpZyk7Ci0gICAgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBF
R0xfRkFMU0U7Ci0KLSAgICBpZiAoYXR0cmliTGlzdCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICgq
YXR0cmliTGlzdCAhPSBFR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChh
dHRyaWJMaXN0WzBdKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5E
RVJfQlVGRkVSOgotICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9CQUNLX0JVRkZFUjoKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9TSU5H
TEVfQlVGRkVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRD
SCwgRUdMX05PX1NVUkZBQ0UpOyAgIC8vIFJlbmRlcmluZyBkaXJlY3RseSB0byBmcm9udCBidWZm
ZXIgbm90IHN1cHBvcnRlZAotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgotICAgICAgICAgICAgICAg
IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwg
RUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJMaXN0
ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaGFzRXhpc3RpbmdXaW5kb3dTdXJm
YWNlKHdpbmRvdykpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKSAKLSAg
ICB7Ci0gICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAgICAgICAgICAgIHJldHVy
biBFR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1
cmZhY2UodGhpcywgY29uZmlndXJhdGlvbiwgd2luZG93LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKLQotICAgIGlmICghc3VyZmFjZS0+aW5pdGlhbGl6ZSgpKQotICAgIHsKLSAgICAgICAgZGVs
ZXRlIHN1cmZhY2U7Ci0gICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAg
ICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7Ci0KLSAgICByZXR1cm4gc3VjY2VzcyhzdXJm
YWNlKTsKLX0KLQotRUdMU3VyZmFjZSBEaXNwbGF5OjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVH
TENvbmZpZyBjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJM
aXN0KQotewotICAgIEVHTGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgRUdMZW51bSB0
ZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RFWFRVUkU7Ci0gICAgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0
ID0gRUdMX05PX1RFWFRVUkU7Ci0gICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNv
bmZpZ1NldC5nZXQoY29uZmlnKTsKLQotICAgIGlmIChhdHRyaWJMaXN0KQotICAgIHsKLSAgICAg
ICAgd2hpbGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGF0dHJpYkxpc3RbMF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgRUdMX1dJRFRIOgotICAgICAgICAgICAgICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgotICAg
ICAgICAgICAgICAgIGhlaWdodCA9IGF0dHJpYkxpc3RbMV07Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0xBUkdFU1RfUEJVRkZFUjoKLSAgICAgICAgICAg
ICAgICBpZiAoYXR0cmliTGlzdFsxXSAhPSBFR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7IC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfRk9STUFUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXR0cmliTGlzdFsxXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEVHTF9OT19URVhUVVJFOgotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9SR0I6
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1JHQkE6Ci0gICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVGb3JtYXQgPSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
R0xfVEVYVFVSRV9UQVJHRVQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzFd
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX05PX1RFWFRV
UkU6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlVGFyZ2V0ID0gYXR0cmliTGlzdFsxXTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
RUdMX01JUE1BUF9URVhUVVJFOgotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJMaXN0WzFdICE9
IEVHTF9GQUxTRSkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJ
QlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgIGNhc2UgRUdM
X1ZHX0FMUEhBX0ZPUk1BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9N
QVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJMaXN0ICs9IDI7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9
Ci0KLSAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQot
ICAgIGlmICh0ZXh0dXJlRm9ybWF0ICE9IEVHTF9OT19URVhUVVJFICYmICFnZXROb25Qb3dlcjJU
ZXh0dXJlU3VwcG9ydCgpICYmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVp
Z2h0KSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05P
X1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlmICgodGV4dHVyZUZvcm1hdCAhPSBFR0xfTk9fVEVY
VFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ID09IEVHTF9OT19URVhUVVJFKSB8fAotICAgICAgICAodGV4
dHVyZUZvcm1hdCA9PSBFR0xfTk9fVEVYVFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ICE9IEVHTF9OT19U
RVhUVVJFKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xf
Tk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKCEoY29uZmlndXJhdGlvbi0+bVN1cmZhY2VU
eXBlICYgRUdMX1BCVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKCh0ZXh0dXJlRm9y
bWF0ID09IEVHTF9URVhUVVJFX1JHQiAmJiBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJH
QiAhPSBFR0xfVFJVRSkgfHwKLSAgICAgICAgKHRleHR1cmVGb3JtYXQgPT0gRUdMX1RFWFRVUkVf
UkdCQSAmJiBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQkEgIT0gRUdMX1RSVUUpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VS
RkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKHRlc3REZXZpY2VMb3N0KCkpIAotICAgIHsKLSAgICAg
ICAgaWYgKCFyZXN0b3JlTG9zdERldmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19T
VVJGQUNFOwotICAgIH0KLQotICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlz
LCBjb25maWd1cmF0aW9uLCBzaGFyZUhhbmRsZSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZUZvcm1h
dCwgdGV4dHVyZVRhcmdldCk7Ci0KLSAgICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSBzdXJmYWNlOwotICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZB
Q0U7Ci0gICAgfQotCi0gICAgbVN1cmZhY2VTZXQuaW5zZXJ0KHN1cmZhY2UpOwotCi0gICAgcmV0
dXJuIHN1Y2Nlc3Moc3VyZmFjZSk7Ci19Ci0KLUVHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRlQ29u
dGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250
ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCi17Ci0gICAgaWYgKCFt
RGV2aWNlKQotICAgIHsKLSAgICAgICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
dGVzdERldmljZUxvc3QoKSkgICAvLyBMb3N0IGRldmljZQotICAgIHsKLSAgICAgICAgaWYgKCFy
ZXN0b3JlTG9zdERldmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0g
ICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRs
ZSk7Ci0KLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcs
IHNoYXJlQ29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwotICAgIG1Db250ZXh0
U2V0Lmluc2VydChjb250ZXh0KTsKLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOwotCi0gICAgcmV0
dXJuIGNvbnRleHQ7Ci19Ci0KLWJvb2wgRGlzcGxheTo6cmVzdG9yZUxvc3REZXZpY2UoKQotewot
ICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3IgY3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsg
Y3R4ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjdHgrKykKLSAgICB7Ci0gICAgICAgIGlmICgoKmN0
eCktPmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgLy8gSWYgcmVzZXQgbm90aWZpY2F0aW9ucyBoYXZlIGJlZW4gcmVxdWVzdGVkLCBhcHBs
aWNhdGlvbiBtdXN0IGRlbGV0ZSBhbGwgY29udGV4dHMgZmlyc3QKLSAgICB9Ci0gCi0gICAgLy8g
UmVsZWFzZSBzdXJmYWNlIHJlc291cmNlcyB0byBtYWtlIHRoZSBSZXNldCgpIHN1Y2NlZWQKLSAg
ICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigp
OyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCi0gICAgewotICAgICAg
ICAoKnN1cmZhY2UpLT5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRXZlbnRRdWVy
eVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJl
bGVhc2UoKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0g
ICAgaWYgKCFyZXNldERldmljZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIFJlc3RvcmUgYW55IHN1cmZhY2VzIHRoYXQgbWF5IGhhdmUgYmVlbiBsb3N0
Ci0gICAgZm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVn
aW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQotICAgIHsKLSAg
ICAgICAgKCpzdXJmYWNlKS0+cmVzZXRTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotCi12b2lkIERpc3BsYXk6OmRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAq
c3VyZmFjZSkKLXsKLSAgICBkZWxldGUgc3VyZmFjZTsKLSAgICBtU3VyZmFjZVNldC5lcmFzZShz
dXJmYWNlKTsKLX0KLQotdm9pZCBEaXNwbGF5OjpkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAq
Y29udGV4dCkKLXsKLSAgICBnbERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwotICAgIG1Db250ZXh0
U2V0LmVyYXNlKGNvbnRleHQpOwotfQotCi12b2lkIERpc3BsYXk6Om5vdGlmeURldmljZUxvc3Qo
KQotewotICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3IgY29udGV4dCA9IG1Db250ZXh0U2V0
LmJlZ2luKCk7IGNvbnRleHQgIT0gbUNvbnRleHRTZXQuZW5kKCk7IGNvbnRleHQrKykKLSAgICB7
Ci0gICAgICAgICgqY29udGV4dCktPm1hcmtDb250ZXh0TG9zdCgpOwotICAgIH0KLSAgICBtRGV2
aWNlTG9zdCA9IHRydWU7Ci0gICAgZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCk7Ci19Ci0KLWJvb2wg
RGlzcGxheTo6aXNEZXZpY2VMb3N0KCkKLXsKLSAgICByZXR1cm4gbURldmljZUxvc3Q7Ci19Ci0K
LWJvb2wgRGlzcGxheTo6aXNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM2Q5
ICE9IE5VTEwgJiYgbUNvbmZpZ1NldC5zaXplKCkgPiAwOwotfQotCi1ib29sIERpc3BsYXk6Omlz
VmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykKLXsKLSAgICByZXR1cm4gbUNvbmZpZ1NldC5n
ZXQoY29uZmlnKSAhPSBOVUxMOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRDb250ZXh0KGds
OjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIHJldHVybiBtQ29udGV4dFNldC5maW5kKGNvbnRl
eHQpICE9IG1Db250ZXh0U2V0LmVuZCgpOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRTdXJm
YWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICByZXR1cm4gbVN1cmZhY2VTZXQuZmlu
ZChzdXJmYWNlKSAhPSBtU3VyZmFjZVNldC5lbmQoKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpoYXNF
eGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpCi17Ci0gICAgZm9yIChTdXJmYWNlU2V0
OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3Vy
ZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQotICAgIHsKLSAgICAgICAgaWYgKCgqc3VyZmFjZSkt
PmdldFdpbmRvd0hhbmRsZSgpID09IHdpbmRvdykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUVH
TGludCBEaXNwbGF5OjpnZXRNaW5Td2FwSW50ZXJ2YWwoKQotewotICAgIHJldHVybiBtTWluU3dh
cEludGVydmFsOwotfQotCi1FR0xpbnQgRGlzcGxheTo6Z2V0TWF4U3dhcEludGVydmFsKCkKLXsK
LSAgICByZXR1cm4gbU1heFN3YXBJbnRlcnZhbDsKLX0KLQotSURpcmVjdDNERGV2aWNlOSAqRGlz
cGxheTo6Z2V0RGV2aWNlKCkKLXsKLSAgICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBp
ZiAoIWNyZWF0ZURldmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtRGV2aWNlOwotfQotCi1EM0RDQVBTOSBE
aXNwbGF5OjpnZXREZXZpY2VDYXBzKCkKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHM7Ci19Ci0K
LUQzREFEQVBURVJfSURFTlRJRklFUjkgKkRpc3BsYXk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkK
LXsKLSAgICByZXR1cm4gJm1BZGFwdGVySWRlbnRpZmllcjsKLX0KLQotYm9vbCBEaXNwbGF5Ojp0
ZXN0RGV2aWNlTG9zdCgpCi17Ci0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBGQUlMRUQobURldmljZUV4LT5DaGVja0RldmljZVN0YXRlKE5VTEwpKTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAobURldmljZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBGQUlMRUQobURldmlj
ZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAg
IC8vIE5vIGRldmljZSB5ZXQsIHNvIG5vIHJlc2V0IHJlcXVpcmVkCi19Ci0KLWJvb2wgRGlzcGxh
eTo6dGVzdERldmljZVJlc2V0dGFibGUoKQotewotICAgIEhSRVNVTFQgc3RhdHVzID0gRDNEX09L
OwotCi0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IG1EZXZpY2VF
eC0+Q2hlY2tEZXZpY2VTdGF0ZShOVUxMKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURldmljZSkK
LSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7
Ci0gICAgfQotCi0gICAgc3dpdGNoIChzdGF0dXMpCi0gICAgewotICAgICAgY2FzZSBEM0RFUlJf
REVWSUNFTk9UUkVTRVQ6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLXZvaWQgRGlzcGxheTo6c3luYyhib29sIGJsb2NrKQotewotICAgIEhSRVNVTFQgcmVz
dWx0OwotCi0gICAgSURpcmVjdDNEUXVlcnk5KiBxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgp
OwotICAgIGlmICghcXVlcnkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
cmVzdWx0ID0gcXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLQotICAgIGRvCi0gICAgewotICAgICAgICByZXN1bHQgPSBxdWVyeS0+R2V0
RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKLQotICAgICAgICBpZihibG9jayAmJiBy
ZXN1bHQgPT0gU19GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5n
LCBidXQgYWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0g
ICAgICAgICAgICBTbGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9y
IGRldmljZSBsb3NzCi0gICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4g
U19GQUxTRSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAotICAgICAgICAgICAgLy8gaW5zdGVh
ZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAgICBpZiAo
dGVzdERldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBEM0RFUlJfREVWSUNFTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICB3aGlsZShibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSk7Ci0KLSAgICBmcmVlRXZlbnRRdWVy
eShxdWVyeSk7Ci0KLSAgICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIG5vdGlmeURldmljZUxvc3QoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFF1ZXJ5OSog
RGlzcGxheTo6YWxsb2NhdGVFdmVudFF1ZXJ5KCkKLXsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1
ZXJ5ID0gTlVMTDsKLQotICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBF
X0VWRU5ULCAmcXVlcnkpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBxdWVyeSA9IG1FdmVudFF1ZXJ5UG9vbC5iYWNr
KCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIHJl
dHVybiBxdWVyeTsKLX0KLQotdm9pZCBEaXNwbGF5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0RR
dWVyeTkqIHF1ZXJ5KQotewotICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpID4gMTAwMCkK
LSAgICB7Ci0gICAgICAgIHF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wdXNoX2JhY2socXVlcnkpOwotICAgIH0KLX0KLQot
dm9pZCBEaXNwbGF5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9v
bCAqbXVsdGlTYW1wbGVBcnJheSkKLXsKLSAgICBmb3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0g
MDsgbXVsdGlTYW1wbGVJbmRleCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNh
bXBsZUluZGV4KyspCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVj
a0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFJVRSwgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7Ci0KLSAg
ICAgICAgbXVsdGlTYW1wbGVBcnJheVttdWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1
bHQpOwotICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQot
ewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0
QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAg
IHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0RYVDEpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQo
KQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+
R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQot
ICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVS
RSwgRDNERk1UX0RYVDMpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNk
OS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsK
LQotICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVY
VFVSRSwgRDNERk1UX0RYVDUpKTsKLX0KLQotLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1
cmVzIGluIERpcmVjdDNEOQotLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRv
IGVuc3VyZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCi0vLyBzZWUgaHR0cDovL2Fy
YXMtcC5pbmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCi1ib29sIERpc3BsYXk6OmdldERlcHRo
VGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNw
bGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3Vy
cmVudERpc3BsYXlNb2RlKTsKLQotICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikp
OwotICAgIGJvb2wgbnVsbCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVS
VEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOwotCi0gICAgcmV0dXJuIGlu
dHogJiYgbnVsbDsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQo
Ym9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgICpmaWx0ZXJpbmcgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgIFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUs
IEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0gICAgCi0gICAgKnJlbmRlcmFibGUgPSBTVUNDRUVE
RUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpJiYKLSAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotCi0gICAgaWYgKCEqZmlsdGVyaW5nICYmICEqcmVu
ZGVyYWJsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKLSAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1U
X0EzMkIzMkczMlIzMkYpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0gICAgRDNERElTUExBWU1P
REUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUo
bUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgKmZpbHRlcmluZyA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVS
RSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLSAgICAKLSAgICAqcmVuZGVyYWJsZSA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVE
KG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnRE
aXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVS
RSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAgIGlmICghKmZpbHRlcmluZyAmJiAhKnJl
bmRlcmFibGUpCi0gICAgewotICAgICAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rl
dmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3Jt
YXQsIDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCi0gICAgICAgICAg
ICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZN
VF9BMTZCMTZHMTZSMTZGKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3Vw
cG9ydCgpCi17Ci0gICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1E
M2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUp
OwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9U
RVhUVVJFLCBEM0RGTVRfTDgpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VBbHBo
YVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1v
ZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnRE
aXNwbGF5TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZv
cm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAs
IEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BOEw4KSk7Ci19Ci0KLUQzRFBPT0wgRGlzcGxheTo6
Z2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QKLXsKLSAgICBpZiAobUQzZDlFeCAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCEodXNhZ2UgJiBEM0RVU0FHRV9EWU5BTUlDKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci19Ci0KLUQzRFBPT0wgRGlzcGxh
eTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXgg
IT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghKHVzYWdlICYgKEQzRFVTQUdFX0RFUFRIU1RF
TkNJTCB8IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRDNEUE9PTF9NQU5BR0VEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEQz
RFBPT0xfREVGQVVMVDsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgp
Ci17Ci0gICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwot
ICAgIGlmIChxdWVyeSkKLSAgICB7Ci0gICAgICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLUQzRFBSRVNFTlRfUEFSQU1FVEVSUyBEaXNwbGF5OjpnZXRE
ZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKQotewotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBw
cmVzZW50UGFyYW1ldGVycyA9IHswfTsKLQotICAgIC8vIFRoZSBkZWZhdWx0IHN3YXAgY2hhaW4g
aXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFjZSB3aWxsIGNyZWF0ZSBhIG5ldyBzd2FwIGNo
YWluIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1
dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVyV2lkdGggPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSAx
OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
aERldmljZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVs
dGlTYW1wbGVRdWFsaXR5ID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5
cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRh
dGlvbkludGVydmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7Ci0gICAgcHJlc2Vu
dFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIHByZXNlbnRQYXJhbWV0
ZXJzOwotfQotCi12b2lkIERpc3BsYXk6OmluaXRFeHRlbnNpb25TdHJpbmcoKQotewotICAgIEhN
T0RVTEUgc3dpZnRTaGFkZXIgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgic3dpZnRzaGFkZXJfZDNk
OS5kbGwiKSk7Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gIiI7Ci0KLSAgICAvLyBNdWx0aS12
ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9FWFRf
Y3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyAiOwotCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0
ZW5zaW9ucwotICAgIGlmIChzaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQotICAgIHsKLSAgICAgICAg
bUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVfY2xpZW50X2J1
ZmZlciAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9xdWVy
eV9zdXJmYWNlX3BvaW50ZXIgIjsKLQotICAgIGlmIChzd2lmdFNoYWRlcikKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9zb2Z0d2FyZV9kaXNwbGF5ICI7Ci0g
ICAgfQotCi0gICAgaWYgKHNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCi0gICAgewotICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfQU5HTEVfc3VyZmFjZV9kM2RfdGV4dHVyZV8yZF9zaGFy
ZV9oYW5kbGUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9z
dF9zdWJfYnVmZmVyIjsKLQotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVu
c2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6OnN0
cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsx
KTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIgKkRpc3BsYXk6OmdldEV4dGVuc2lvblN0cmluZygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIoKTsKLX0KLQotYm9v
bCBEaXNwbGF5OjpzaGFyZUhhbmRsZVN1cHBvcnRlZCgpIGNvbnN0IAotewotICAgIC8vIFBJWCBk
b2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB1c2luZyBzaGFyZSBoYW5kbGVzLCBzbyBkaXNhYmxlIHRo
ZW0uCi0gICAgcmV0dXJuIGlzRDNkOUV4RGV2aWNlKCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Ci19
Ci0KLS8vIE9ubHkgRGlyZWN0M0QgMTAgcmVhZHkgZGV2aWNlcyBzdXBwb3J0IGFsbCB0aGUgbmVj
ZXNzYXJ5IHZlcnRleCB0ZXh0dXJlIGZvcm1hdHMuCi0vLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNE
OSBieSBjaGVja2luZyBzdXBwb3J0IGZvciB0aGUgUjE2RiBmb3JtYXQuCi1ib29sIERpc3BsYXk6
OmdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6
ZWQoKSB8fCBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDMs
IDApKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEQzRERJU1BM
QVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlN
b2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0
ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZ
UEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpOwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChyZXN1bHQp
OwotfQotCi1ib29sIERpc3BsYXk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQ
U19QT1cyKSAmJgotICAgICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRF
WFRVUkVDQVBTX0NVQkVNQVBfUE9XMikgJiYKLSAgICAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0
dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19OT05QT1cyQ09ORElUSU9OQUwpOwotfQotCi1ib29s
IERpc3BsYXk6OmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
c0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmcXVlcnkpOwotICAg
IAotICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBxdWVyeSkKLSAgICB7Ci0gICAgICAgIHF1
ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6Omdl
dEluc3RhbmNpbmdTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHMuUGl4
ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywgMCk7IAotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0ZjdkYmQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIERpc3BsYXkuaDogRGVmaW5lcyB0aGUgZWdsOjpEaXNw
bGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhlIGFic3RyYWN0Ci0vLyBkaXNwbGF5IG9uIHdoaWNo
IGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50cyBFR0xEaXNwbGF5LgotLy8gW0VHTCAxLjRd
IHNlY3Rpb24gMi4xLjIgcGFnZSAzLgotCi0jaWZuZGVmIElOQ0xVREVfRElTUExBWV9IXwotI2Rl
ZmluZSBJTkNMVURFX0RJU1BMQVlfSF8KLQotI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0j
ZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNlbmRpZgotI2luY2x1ZGUgPHdpbmRvd3MuaD4K
LSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9Db25m
aWcuaCIKLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1j
bGFzcyBEaXNwbGF5Ci17Ci0gIHB1YmxpYzoKLSAgICB+RGlzcGxheSgpOwotCi0gICAgYm9vbCBp
bml0aWFsaXplKCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
dGFydFNjZW5lKCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFNjZW5lKCk7Ci0KLSAgICBzdGF0aWMg
ZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCk7
Ci0KLSAgICBib29sIGdldENvbmZpZ3MoRUdMQ29uZmlnICpjb25maWdzLCBjb25zdCBFR0xpbnQg
KmF0dHJpYkxpc3QsIEVHTGludCBjb25maWdTaXplLCBFR0xpbnQgKm51bUNvbmZpZyk7Ci0gICAg
Ym9vbCBnZXRDb25maWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwg
RUdMaW50ICp2YWx1ZSk7Ci0KLSAgICBFR0xTdXJmYWNlIGNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdO
RCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0g
ICAgRUdMU3VyZmFjZSBjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENvbmZpZyBjb25maWcsIEhB
TkRMRSBzaGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKLSAgICBFR0xDb250
ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsK
LQotICAgIHZvaWQgZGVzdHJveVN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKLSAgICB2
b2lkIGRlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLQotICAgIGJvb2wgaXNJ
bml0aWFsaXplZCgpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29u
ZmlnKTsKLSAgICBib29sIGlzVmFsaWRDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLSAg
ICBib29sIGlzVmFsaWRTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgYm9vbCBo
YXNFeGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpOwotCi0gICAgRUdMaW50IGdldE1p
blN3YXBJbnRlcnZhbCgpOwotICAgIEVHTGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKTsKLQotICAg
IHZpcnR1YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7Ci0gICAgdmlydHVhbCBEM0RD
QVBTOSBnZXREZXZpY2VDYXBzKCk7Ci0gICAgdmlydHVhbCBEM0RBREFQVEVSX0lERU5USUZJRVI5
ICpnZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlTG9z
dCgpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwotICAgIHZpcnR1
YWwgdm9pZCBzeW5jKGJvb2wgYmxvY2spOwotICAgIHZpcnR1YWwgSURpcmVjdDNEUXVlcnk5KiBh
bGxvY2F0ZUV2ZW50UXVlcnkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnJlZUV2ZW50UXVlcnkoSURp
cmVjdDNEUXVlcnk5KiBxdWVyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGdldE11bHRpU2FtcGxlU3Vw
cG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERY
VDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBv
cnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRM
dW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldFZlcnRleFRleHR1cmVT
dXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBw
b3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBEM0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OwotICAgIHZpcnR1
YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIGJvb2wgaXNEZXZpY2VMb3N0KCk7Ci0K
LSAgICBib29sIGlzRDNkOUV4RGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbUQzZDlFeCAhPSBOVUxM
OyB9Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7Ci0gICAgYm9v
bCBzaGFyZUhhbmRsZVN1cHBvcnRlZCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKERpc3BsYXkpOwotCi0gICAgRGlzcGxheShFR0xOYXRpdmVEaXNw
bGF5VHlwZSBkaXNwbGF5SWQsIEhEQyBkZXZpY2VDb250ZXh0LCBib29sIHNvZnR3YXJlKTsKLQot
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsK
LQotICAgIGJvb2wgcmVzdG9yZUxvc3REZXZpY2UoKTsKLQotICAgIEVHTE5hdGl2ZURpc3BsYXlU
eXBlIG1EaXNwbGF5SWQ7Ci0gICAgY29uc3QgSERDIG1EYzsKLQotICAgIEhNT0RVTEUgbUQzZDlN
b2R1bGU7Ci0gICAgCi0gICAgVUlOVCBtQWRhcHRlcjsKLSAgICBEM0RERVZUWVBFIG1EZXZpY2VU
eXBlOwotICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVyIHN1Y2Nl
c3NmdWwgaW5pdGlhbGl6YXRpb24uCi0gICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAgLy8gTWln
aHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLSAgICBJRGlyZWN0M0REZXZp
Y2U5ICptRGV2aWNlOwotICAgIElEaXJlY3QzRERldmljZTlFeCAqbURldmljZUV4OyAgLy8gTWln
aHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLQotICAgIC8vIEEgcG9vbCBv
ZiBldmVudCBxdWVyaWVzIHRoYXQgYXJlIGN1cnJlbnRseSB1bnVzZWQuCi0gICAgc3RkOjp2ZWN0
b3I8SURpcmVjdDNEUXVlcnk5Kj4gbUV2ZW50UXVlcnlQb29sOwotCi0gICAgRDNEQ0FQUzkgbURl
dmljZUNhcHM7Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBtQWRhcHRlcklkZW50aWZpZXI7
Ci0gICAgSFdORCBtRGV2aWNlV2luZG93OwotCi0gICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAg
IEVHTGludCBtTWF4U3dhcEludGVydmFsOwotICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOwot
ICAgIGJvb2wgbVNvZnR3YXJlRGV2aWNlOwotICAgIAotICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3Vy
ZmFjZSo+IFN1cmZhY2VTZXQ7Ci0gICAgU3VyZmFjZVNldCBtU3VyZmFjZVNldDsKLQotICAgIENv
bmZpZ1NldCBtQ29uZmlnU2V0OwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+
IENvbnRleHRTZXQ7Ci0gICAgQ29udGV4dFNldCBtQ29udGV4dFNldDsKLSAgICBib29sIG1EZXZp
Y2VMb3N0OwotCi0gICAgYm9vbCBjcmVhdGVEZXZpY2UoKTsKLSAgICB2b2lkIGluaXRpYWxpemVE
ZXZpY2UoKTsKLSAgICBib29sIHJlc2V0RGV2aWNlKCk7Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNp
b25TdHJpbmcoKTsKLSAgICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3RyaW5nOwotfTsKLX0KLQot
I2VuZGlmICAgLy8gSU5DTFVERV9ESVNQTEFZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML1JFQURNRSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZjA3
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qg
c3luY2VkIGZyb20gdGhlIEFOR0xFIHByb2plY3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJL
aXQgbmVlZHMgdGhlbSB5ZXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5Yjc3OS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjgyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IFN1cmZhY2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2Vu
dGluZyBhIGRyYXdpbmcgc3VyZmFjZQotLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3
aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBidWZmZXJzLgotLy8gSW1wbGVtZW50cyBFR0xTdXJm
YWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdl
IDMuCi0KLSNpbmNsdWRlIDx0Y2hhci5oPgotCi0jaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIK
LQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5
LmgiCi0KLSNpbmNsdWRlIDxkd21hcGkuaD4KLQotbmFtZXNwYWNlIGVnbAotewotCi1uYW1lc3Bh
Y2UKLXsKLWNvbnN0IGludCB2ZXJzaW9uV2luZG93c1Zpc3RhID0gTUFLRVdPUkQoMHgwMCwgMHgw
Nik7Ci1jb25zdCBpbnQgdmVyc2lvbldpbmRvd3M3ID0gTUFLRVdPUkQoMHgwMSwgMHgwNik7Ci0K
LS8vIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiBhIGZvcm1h
dCBzdWl0YWJsZSBmb3Igb3JkZXJpbmcKLS8vIGNvbXBhcmlzb24uCi1pbnQgZ2V0Q29tcGFyYWJs
ZU9TVmVyc2lvbigpCi17Ci0gICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKLSAgICBp
bnQgbWFqb3JWZXJzaW9uID0gTE9CWVRFKExPV09SRCh2ZXJzaW9uKSk7Ci0gICAgaW50IG1pbm9y
VmVyc2lvbiA9IEhJQllURShMT1dPUkQodmVyc2lvbikpOwotICAgIHJldHVybiBNQUtFV09SRCht
aW5vclZlcnNpb24sIG1ham9yVmVyc2lvbik7Ci19Ci19Ci0KLVN1cmZhY2U6OlN1cmZhY2UoRGlz
cGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQg
cG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCi0gICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZp
Zyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RT
dWJCdWZmZXJTdXBwb3J0ZWQpCi17Ci0gICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tC
dWZmZXIgPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJn
ZXQgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hhcmVIYW5k
bGUgPSBOVUxMOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IEVH
TF9OT19URVhUVVJFOwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0KLSAg
ICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcp
OyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwotICAgIG1S
ZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9IEVHTF9C
VUZGRVJfUFJFU0VSVkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRTd2FwSW50
ZXJ2YWwoMSk7Ci0KLSAgICBzdWJjbGFzc1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpTdXJmYWNl
KERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5k
bGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBF
R0xlbnVtIHRleHR1cmVUeXBlKQotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVM
TCksIG1Db25maWcoY29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdp
ZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0Up
Ci17Ci0gICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAg
IG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1P
ZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwot
ICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7
Ci0gICAgbVRleHR1cmVUYXJnZXQgPSB0ZXh0dXJlVHlwZTsKLQotICAgIG1QaXhlbEFzcGVjdFJh
dGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERl
dGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvCi0gICAgbVJlbmRlckJ1ZmZlciA9IEVH
TF9CQUNLX0JVRkZFUjsKLSAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7
Ci0gICAgbVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLX0KLQot
U3VyZmFjZTo6flN1cmZhY2UoKQotewotICAgIHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICByZWxl
YXNlKCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFt
U3dhcENoYWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7Ci0KLSAg
ICBpZiAoIXJlc2V0U3dhcENoYWluKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBN
b2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJzIGZvciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBv
c2l0ZWQsCi0gICAgLy8gdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBxdWV1aW5nIGRvbmUgYnkg
RFdNIGJldHdlZW4gb3VyIGNhbGxzIHRvCi0gICAgLy8gcHJlc2VudCBhbmQgdGhlIGFjdHVhbCBz
Y3JlZW4uCi0gICAgaWYgKG1XaW5kb3cgJiYgKGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2
ZXJzaW9uV2luZG93c1Zpc3RhKSkgewotICAgICAgQk9PTCBpc0NvbXBvc2l0ZWQ7Ci0gICAgICBI
UkVTVUxUIHJlc3VsdCA9IER3bUlzQ29tcG9zaXRpb25FbmFibGVkKCZpc0NvbXBvc2l0ZWQpOwot
ICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIGlzQ29tcG9zaXRlZCkgewotICAgICAgICBE
V01fUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbXM7Ci0gICAgICAgIG1lbXNldCgmcHJl
c2VudFBhcmFtcywgMCwgc2l6ZW9mKHByZXNlbnRQYXJhbXMpKTsKLSAgICAgICAgcHJlc2VudFBh
cmFtcy5jYlNpemUgPSBzaXplb2YoRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHBy
ZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7Ci0KLSAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2Vu
dFBhcmFtZXRlcnMobVdpbmRvdywgJnByZXNlbnRQYXJhbXMpOwotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgICAgRVJSKCJVbmFibGUgdG8gc2V0IHByZXNlbnQgcGFyYW1ldGVy
czogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBTdXJmYWNlOjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAg
ICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJh
Y2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+
UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBp
ZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZz
Y3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmICht
VGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsKLSAg
ICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7
Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQotewotICAgIGlmICghbVdpbmRv
dykKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXNldFN3YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQp
OwotICAgIH0KLQotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBpZiAoIUdldENsaWVudFJlY3Qo
Z2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChm
YWxzZSk7Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgdGhlIHdpbmRvdyBkaW1l
bnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
ZXRTd2FwQ2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2luZG93UmVj
dC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2Fw
Q2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAg
aWYgKGRldmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0g
bWVtb3J5IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKLSAgICAvLyBiZWZvcmUgcmVhbGxvY2F0
aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4KLSAg
ICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwotCi0gICAgRDNEUFJFU0VOVF9QQVJB
TUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1E
ZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgLy8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZl
biB3aGVuIHdlIHVzZSBEM0RTV0FQRUZGRUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJl
Y2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRv
IDEKLSAgICAvLyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3Bl
Y3VsYXRlIHRoYXQgZWl0aGVyIGl0IGlzCi0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQg
dGVsbGluZyB1cywgb3IgYmV0dGVyLCBkb2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhp
bmQgdGhlIHNjZW5lcyBrbm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckZvcm1hdCA9IG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJl
c2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2lu
ZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1w
bGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAot
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05P
TkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVz
ZW50YXRpb25JbnRlcnZhbCA9IG1QcmVzZW50SW50ZXJ2YWw7Ci0gICAgcHJlc2VudFBhcmFtZXRl
cnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldp
ZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJI
ZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNv
dXJjZXMgdG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUg
dGhlCi0gICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9z
ZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7
Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tC
dWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQot
ICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwt
PlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
bVNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICBIQU5ETEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7Ci0g
ICAgaWYgKCFtV2luZG93ICYmIG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQotICAg
IHsKLSAgICAgICAgcFNoYXJlSGFuZGxlID0gJm1TaGFyZUhhbmRsZTsKLSAgICB9Ci0KLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
cldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5U
ZXh0dXJlLCBwU2hhcmVIYW5kbGUpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCBy
ZXN1bHQpOwotICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmlj
ZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBm
YWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqb2xkUmVu
ZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLQotICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0KLSAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgUkVDVCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAg
IG1XaWR0aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4g
c3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJXaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRp
Y19jYXN0PExPTkc+KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQot
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJl
Y3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwotICAgIH0KLQotICAgIGlmIChtV2luZG93KQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2Fw
Q2hhaW4pOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3Vs
dCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4bFgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZihpc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
aXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVm
ZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVw
dGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhT
dGVuY2lsLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7
Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFj
ZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxl
YXNlKCk7Ci0KLSAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0
ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodDsKLQotICAgIG1QcmVzZW50SW50
ZXJ2YWxEaXJ0eSA9IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN1cmZhY2U6
OnN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0
KQotewotICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmICh4ICsgd2lkdGggPiBtV2lkdGgpCi0gICAgewotICAgICAgICB3aWR0
aCA9IG1XaWR0aCAtIHg7Ci0gICAgfQotCi0gICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQot
ICAgIHsKLSAgICAgICAgaGVpZ2h0ID0gbUhlaWdodCAtIHk7Ci0gICAgfQotCi0gICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNl
KCk7Ci0KLSAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCi0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwot
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwot
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9S
V1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldS
SVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRl
dmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
TlVMTCk7Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7Ci0g
ICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNlLT5T
ZXRUZXh0dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmVT
dGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgZGV2
aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhU
VVJFKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9Q
LCBEM0RUT1BfRElTQUJMRSk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0gICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1Nf
Q0xBTVApOwotICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7
Ci0KLSAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAw
LjBmLCAxLjBmfTsKLSAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0KLSAgICBm
bG9hdCB4MSA9IHggLSAwLjVmOwotICAgIGZsb2F0IHkxID0gKG1IZWlnaHQgLSB5IC0gaGVpZ2h0
KSAtIDAuNWY7Ci0gICAgZmxvYXQgeDIgPSAoeCArIHdpZHRoKSAtIDAuNWY7Ci0gICAgZmxvYXQg
eTIgPSAobUhlaWdodCAtIHkpIC0gMC41ZjsKLQotICAgIGZsb2F0IHUxID0geCAvIGZsb2F0KG1X
aWR0aCk7Ci0gICAgZmxvYXQgdjEgPSB5IC8gZmxvYXQobUhlaWdodCk7Ci0gICAgZmxvYXQgdTIg
PSAoeCArIHdpZHRoKSAvIGZsb2F0KG1XaWR0aCk7Ci0gICAgZmxvYXQgdjIgPSAoeSArIGhlaWdo
dCkgLyBmbG9hdChtSGVpZ2h0KTsKLQotICAgIGZsb2F0IHF1YWRbNF1bNl0gPSB7e3gxLCB5MSwg
MC4wZiwgMS4wZiwgdTEsIHYyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTEsIDAu
MGYsIDEuMGYsIHUyLCB2Mn0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBm
LCAxLjBmLCB1MiwgdjF9LAotICAgICAgICAgICAgICAgICAgICAgICAge3gxLCB5MiwgMC4wZiwg
MS4wZiwgdTEsIHYxfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2Ci0KLSAgICBtRGlzcGxheS0+
c3RhcnRTY2VuZSgpOwotICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xF
RkFOLCAyLCBxdWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgbURpc3BsYXktPmVuZFNjZW5l
KCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICBSRUNUIHJlY3Qg
PQotICAgIHsKLSAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBoZWlnaHQsCi0gICAgICAgIHggKyB3
aWR0aCwgbUhlaWdodCAtIHkKLSAgICB9OwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENo
YWluLT5QcmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oZ2xHZXRDdXJyZW50Q29u
dGV4dCgpKTsKLSAgICBpZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPm1hcmtB
bGxTdGF0ZURpcnR5KCk7Ci0gICAgfQotCi0gICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCi0gICAgewotICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJS
X0RSSVZFUklOVEVSTkFMRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgZmFsc2UpOwotICAgIH0KLQotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0KLSAgICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLUhXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbVdp
bmRvdzsKLX0KLQotCi0jZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFj
ZU93bmVyIikKLSNkZWZpbmUga1BhcmVudFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVu
dFduZFByb2MiKQotCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNlV2luZG93UHJvYyhI
V05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkKLXsK
LSAgaWYgKG1lc3NhZ2UgPT0gV01fU0laRSkKLSAgewotICAgICAgU3VyZmFjZSogc3VyZiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkp
OwotICAgICAgaWYoc3VyZikKLSAgICAgIHsKLSAgICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9m
RGF0ZVN3YXBDaGFpbigpOwotICAgICAgfQotICB9Ci0gIFdORFBST0MgcHJldlduZEZ1bmMgPSBy
ZWludGVycHJldF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7
Ci0gIHJldHVybiBDYWxsV2luZG93UHJvYyhwcmV2V25kRnVuYywgaHduZCwgbWVzc2FnZSwgd3Bh
cmFtLCBscGFyYW0pOwotfQotCi12b2lkIFN1cmZhY2U6OnN1YmNsYXNzV2luZG93KCkKLXsKLSAg
ICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRFdP
UkQgcHJvY2Vzc0lkOwotICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93VGhyZWFkUHJvY2Vz
c0lkKG1XaW5kb3csICZwcm9jZXNzSWQpOwotICAgIGlmIChwcm9jZXNzSWQgIT0gR2V0Q3VycmVu
dFByb2Nlc3NJZCgpIHx8IHRocmVhZElkICE9IEdldEN1cnJlbnRUaHJlYWRJZCgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNldExhc3RFcnJvcigwKTsKLSAgICBMT05H
X1BUUiBvbGRXbmRQcm9jID0gU2V0V2luZG93TG9uZ1B0cihtV2luZG93LCBHV0xQX1dORFBST0Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgaWYo
b2xkV25kUHJvYyA9PSAwICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAg
ewotICAgICAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgU2V0UHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5LCByZWludGVycHJl
dF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNldFByb3AobVdpbmRvdywga1BhcmVudFduZFBy
b2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRXbmRQcm9jKSk7Ci0gICAgbVdpbmRvd1N1
YmNsYXNzZWQgPSB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3coKQot
ewotICAgIGlmKCFtV2luZG93U3ViY2xhc3NlZCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyB1bi1zdWJjbGFzcwotICAgIExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSBy
ZWludGVycHJldF9jYXN0PExPTkdfUFRSPihHZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9j
KSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93
UHJvYy4KLSAgICAvLyBJZiB0aGlzIGFzc2VydCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhl
IGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFzc2VkIHRoZQotICAgIC8vIGh3bmQgYXMgd2VsbCBhbmQg
ZGlkIG5vdCB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBFR0wgY29udGV4dC4gVGhl
Ci0gICAgLy8gYXBwbGljYXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFz
cyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQotICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1
YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBFR0wgY29udGV4dC4KLSAgICBpZihwYXJlbnRX
bmRGdW5jKQotICAgIHsKLSAgICAgICAgTE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dM
b25nUHRyKG1XaW5kb3csIEdXTFBfV05EUFJPQywgcGFyZW50V25kRnVuYyk7Ci0gICAgICAgIEFT
U0VSVChwcmV2V25kRnVuYyA9PSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2lu
ZG93UHJvYykpOwotICAgIH0KLQotICAgIFJlbW92ZVByb3AobVdpbmRvdywga1N1cmZhY2VQcm9w
ZXJ0eSk7Ci0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYyk7Ci0gICAgbVdp
bmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9m
RGF0ZVN3YXBDaGFpbigpCi17Ci0gICAgUkVDVCBjbGllbnQ7Ci0gICAgaWYgKCFHZXRDbGllbnRS
ZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBi
dWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0
byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50
LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0
b20gLSBjbGllbnQudG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0
V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoc2l6ZURp
cnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkKLSAgICB7Ci0gICAgICAgIHJlc2V0U3dhcENo
YWluKGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRoaXMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsTWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwgdGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1EV09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewot
ICAgIHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVT
RU5UX0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRf
SU5URVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9U
V087Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFOwotICAg
ICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZB
TF9ERUZBVUxUOwotfQotCi1ib29sIFN1cmZhY2U6OnN3YXAoKQotewotICAgIHJldHVybiBzd2Fw
UmVjdCgwLCAwLCBtV2lkdGgsIG1IZWlnaHQpOwotfQotCi1ib29sIFN1cmZhY2U6OnBvc3RTdWJC
dWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17
Ci0gICAgaWYgKCFtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNw
ZWMgaXMgbm90IGNsZWFyIGFib3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN3YXBSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdAotewot
ICAgIHJldHVybiBtV2lkdGg7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25z
dAotewotICAgIHJldHVybiBtSGVpZ2h0OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3Vi
QnVmZmVyU3VwcG9ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBw
b3J0ZWQ7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkg
KlN1cmZhY2U6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbVJlbmRlclRhcmdldDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNl
LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0
M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRo
U3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotICAgIH0K
LQotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqU3Vy
ZmFjZTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJl
KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQot
ICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRTd2Fw
SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIGlmIChtU3dhcEludGVydmFsID09IGlu
dGVydmFsKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtU3dhcElu
dGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1Td2FwSW50
ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNaW5Td2FwSW50ZXJ2YWwoKSk7Ci0gICAgbVN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50ZXJ2YWwo
KSk7Ci0KLSAgICBtUHJlc2VudEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2
YWwpOwotICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7Ci19Ci0KLUVHTGVudW0gU3Vy
ZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlRm9y
bWF0OwotfQotCi1FR0xlbnVtIFN1cmZhY2U6OmdldFRleHR1cmVUYXJnZXQoKSBjb25zdAotewot
ICAgIHJldHVybiBtVGV4dHVyZVRhcmdldDsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRCb3VuZFRl
eHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAgICBtVGV4dHVyZSA9IHRleHR1cmU7
Ci19Ci0KLWdsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi1EM0RGT1JNQVQgU3VyZmFjZTo6Z2V0Rm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsKLX0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFj
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYmQ3MDIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3VyZmFjZS5oOiBEZWZpbmVzIHRo
ZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQotLy8g
c3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBi
dWZmZXJzLgotLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxp
dHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCi0KLSNpZm5kZWYgSU5DTFVERV9TVVJG
QUNFX0hfCi0jZGVmaW5lIElOQ0xVREVfU1VSRkFDRV9IXwotCi0jZGVmaW5lIEVHTEFQSQotI2lu
Y2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFRleHR1cmUyRDsKLX0KLQot
bmFtZXNwYWNlIGVnbAotewotY2xhc3MgRGlzcGxheTsKLWNsYXNzIENvbmZpZzsKLQotY2xhc3Mg
U3VyZmFjZQotewotICBwdWJsaWM6Ci0gICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQpOwotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25m
aWcgKmNvbmZpZywgSEFORExFIHNoYXJlSGFuZGxlLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWln
aHQsIEVHTGVudW0gdGV4dHVyZUZvcm1hdCwgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0KTsKLQotICAg
IH5TdXJmYWNlKCk7Ci0KLSAgICBib29sIGluaXRpYWxpemUoKTsKLSAgICB2b2lkIHJlbGVhc2Uo
KTsKLSAgICBib29sIHJlc2V0U3dhcENoYWluKCk7Ci0KLSAgICBIV05EIGdldFdpbmRvd0hhbmRs
ZSgpOwotICAgIGJvb2wgc3dhcCgpOwotICAgIGJvb2wgcG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwg
RUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIEVH
TGludCBnZXRXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRUdMaW50IGdldEhlaWdodCgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBFR0xpbnQgaXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsK
LSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB2
aXJ0dWFsIElEaXJlY3QzRFRleHR1cmU5ICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICBI
QU5ETEUgZ2V0U2hhcmVIYW5kbGUoKSB7IHJldHVybiBtU2hhcmVIYW5kbGU7IH0KLQotICAgIHZv
aWQgc2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCk7Ci0gICAgYm9vbCBjaGVja0Zvck91
dE9mRGF0ZVN3YXBDaGFpbigpOyAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzd2FwY2hhaW4gY2hhbmdl
ZCBkdWUgdG8gcmVzaXplIG9yIGludGVydmFsIHVwZGF0ZQotCi0gICAgdmlydHVhbCBFR0xlbnVt
IGdldFRleHR1cmVGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEVHTGVudW0gZ2V0VGV4dHVy
ZVRhcmdldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEZvcm1hdCgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlKTsKLSAgICB2aXJ0dWFsIGdsOjpUZXh0dXJlMkQgKmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKLQot
ICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKm1T
d2FwQ2hhaW47Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVmZmVyOwotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBtUmVu
ZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVyZTsKLQot
ICAgIEhBTkRMRSBtU2hhcmVIYW5kbGU7Ci0KLSAgICB2b2lkIHN1YmNsYXNzV2luZG93KCk7Ci0g
ICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7Ci0gICAgYm9vbCByZXNldFN3YXBDaGFpbihpbnQg
YmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7Ci0gICAgYm9vbCBzd2FwUmVj
dChFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0gICAg
c3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOwotCi0gICAgY29u
c3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGF0IHRoZSBzdXJmYWNlIGlz
IGNyZWF0ZWQgZm9yLgotICAgIGJvb2wgbVdpbmRvd1N1YmNsYXNzZWQ7ICAgICAgICAvLyBJbmRp
Y2F0ZXMgd2hldGhlciB3ZSBzdWNjZXNzZnVsbHkgc3ViY2xhc3NlZCBtV2luZG93IGZvciBXTV9S
RVNJWkUgaG9va2luZwotICAgIGNvbnN0IGVnbDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wg
Y29uZmlnIHN1cmZhY2Ugd2FzIGNyZWF0ZWQgd2l0aAotICAgIEVHTGludCBtSGVpZ2h0OyAgICAg
ICAgICAgICAgICAvLyBIZWlnaHQgb2Ygc3VyZmFjZQotICAgIEVHTGludCBtV2lkdGg7ICAgICAg
ICAgICAgICAgICAvLyBXaWR0aCBvZiBzdXJmYWNlCi0vLyAgRUdMaW50IGhvcml6b250YWxSZXNv
bHV0aW9uOyAgIC8vIEhvcml6b250YWwgZG90IHBpdGNoCi0vLyAgRUdMaW50IHZlcnRpY2FsUmVz
b2x1dGlvbjsgICAgIC8vIFZlcnRpY2FsIGRvdCBwaXRjaAotLy8gIEVHTEJvb2xlYW4gbGFyZ2Vz
dFBCdWZmZXI7ICAgICAvLyBJZiB0cnVlLCBjcmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxl
Ci0vLyAgRUdMQm9vbGVhbiBtaXBtYXBUZXh0dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBo
YXMgbWlwbWFwcwotLy8gIEVHTGludCBtaXBtYXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAg
bGV2ZWwgdG8gcmVuZGVyIHRvCi0vLyAgRUdMZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8v
IE11bHRpc2FtcGxlIHJlc29sdmUgYmVoYXZpb3IKLSAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0
aW87ICAgICAgLy8gRGlzcGxheSBhc3BlY3QgcmF0aW8KLSAgICBFR0xlbnVtIG1SZW5kZXJCdWZm
ZXI7ICAgICAgICAgLy8gUmVuZGVyIGJ1ZmZlcgotICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsg
ICAgICAgICAvLyBCdWZmZXIgc3dhcCBiZWhhdmlvcgotICAgIEVHTGVudW0gbVRleHR1cmVGb3Jt
YXQ7ICAgICAgICAvLyBGb3JtYXQgb2YgdGV4dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJl
Ci0gICAgRUdMZW51bSBtVGV4dHVyZVRhcmdldDsgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTog
MkQgb3Igbm8gdGV4dHVyZQotLy8gIEVHTGVudW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBB
bHBoYSBmb3JtYXQgZm9yIE9wZW5WRwotLy8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAg
ICAvLyBDb2xvciBzcGFjZSBmb3IgT3BlblZHCi0gICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7Ci0g
ICAgRUdMaW50IG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwotICAgIAotICAgIERXT1JEIG1QcmVz
ZW50SW50ZXJ2YWw7Ci0gICAgYm9vbCBtUHJlc2VudEludGVydmFsRGlydHk7Ci0gICAgZ2w6OlRl
eHR1cmUyRCAqbVRleHR1cmU7Ci19OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0Vf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdM
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4OWQyYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMTgxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGxpYkVHTC5jcHA6IEltcGxl
bWVudHMgdGhlIGV4cG9ydGVkIEVHTCBmdW5jdGlvbnMuCi0KLSNpbmNsdWRlIDxleGNlcHRpb24+
Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Rl
eHR1cmUuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0jaW5jbHVkZSAibGliRUdML0Rp
c3BsYXkuaCIKLQotCi1ib29sIHZhbGlkYXRlRGlzcGxheShlZ2w6OkRpc3BsYXkgKmRpc3BsYXkp
Ci17Ci0gICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFk
aXNwbGF5LT5pc0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIHZhbGlkYXRlQ29uZmlnKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmlnIGNv
bmZpZykKLXsKLSAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb25m
aWcoY29uZmlnKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywg
ZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHZhbGlkYXRlQ29u
dGV4dChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAg
IGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdXJmYWNlKGVnbDo6
RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIGlmICghdmFs
aWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGlmICghZGlzcGxheS0+aXNWYWxpZFN1cmZhY2Uoc3VyZmFjZSkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWV4dGVybiAiQyIKLXsKLUVHTGludCBfX3N0ZGNhbGwgZWds
R2V0RXJyb3Iodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIEVHTGludCBlcnJvciA9
IGVnbDo6Z2V0Q3VycmVudEVycm9yKCk7Ci0KLSAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1Mp
Ci0gICAgewotICAgICAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihFR0xfU1VDQ0VTUyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGVycm9yOwotfQotCi1FR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRE
aXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQpCi17Ci0gICAgRVZFTlQoIihF
R0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5X2lkID0gMHglMC44cCkiLCBkaXNwbGF5X2lkKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVnbDo6RGlzcGxheTo6Z2V0RGlzcGxh
eShkaXNwbGF5X2lkKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKLSAg
ICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBk
cHksIEVHTGludCAqbWFqb3IsIEVHTGludCAqbWlub3IpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9y
ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBF
R0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOwot
ICAgICAgICBpZiAobWlub3IpICptaW5vciA9IDQ7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
RUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0K
LUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFRlcm1pbmF0ZShFR0xEaXNwbGF5IGRweSkKLXsKLSAg
ICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCkiLCBkcHkpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBpZiAoZHB5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpE
aXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBkaXNwbGF5LT50ZXJtaW5hdGUoKTsKLQotICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOwotICAgIH0KLX0KLQotY29uc3QgY2hhciAqX19zdGRjYWxsIGVnbFF1ZXJ5U3RyaW5nKEVH
TERpc3BsYXkgZHB5LCBFR0xpbnQgbmFtZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5
ID0gMHglMC44cCwgRUdMaW50IG5hbWUgPSAlZCkiLCBkcHksIG5hbWUpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAobmFtZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRUdMX0NMSUVOVF9BUElT
OgotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoIk9wZW5HTF9FUyIpOwotICAgICAgICAgIGNh
c2UgRUdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gZGlzcGxheS0+Z2V0RXh0ZW5z
aW9uU3RyaW5nKCk7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVORE9SOgotICAgICAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoIkdvb2dsZSBJbmMuIik7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVSU0lPTjoK
LSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKEFOR0xFICJWRVJTSU9OX1NUUklORyIp
Iik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIs
IChjb25zdCBjaGFyKilOVUxMKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChjb25zdCBjaGFyKilO
VUxMKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdM
RGlzcGxheSBkcHksIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xp
bnQgKm51bV9jb25maWcpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAs
IEVHTENvbmZpZyAqY29uZmlncyA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiRUdMaW50IGNvbmZp
Z19zaXplID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBk
cHksIGNvbmZpZ3MsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghbnVtX2NvbmZpZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qg
RUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07Ci0KLSAgICAgICAgaWYgKCFkaXNw
bGF5LT5nZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJpYkxpc3QsIGNvbmZpZ19zaXplLCBudW1fY29u
ZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklC
VVRFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRweSwgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmlnX3Np
emUsIEVHTGludCAqbnVtX2NvbmZpZykKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAsICIKLSAgICAgICAg
ICAiRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZpZ19zaXplID0gJWQs
IEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGF0dHJpYl9s
aXN0LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIW51bV9jb25maWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0
IEVHTGludCBhdHRyaWJMaXN0W10gPSAgICB7RUdMX05PTkV9OwotCi0gICAgICAgIGlmICghYXR0
cmliX2xpc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYl9saXN0ID0gYXR0cmliTGlz
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGRpc3BsYXktPmdldENvbmZpZ3MoY29uZmlncywgYXR0
cmliX2xpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgICAgICByZXR1cm4gc3Vj
Y2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0K
LX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsR2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkg
ZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQot
ewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmln
ID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44
cCkiLAotICAgICAgICAgIGRweSwgY29uZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXks
IGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZpZ0F0dHJpYihjb25maWcsIGF0
dHJpYnV0ZSwgdmFsdWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAg
IH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlV2luZG93U3VyZmFjZShFR0xE
aXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4sIGNv
bnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xOYXRpdmVXaW5kb3dUeXBl
IHdpbiA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9
IDB4JTAuOHApIiwgZHB5LCBjb25maWcsIHdpbiwgYXR0cmliX2xpc3QpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29u
ZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSFdORCB3aW5kb3cgPSAoSFdORCl3aW47Ci0KLSAgICAgICAgaWYg
KCFJc1dpbmRvdyh3aW5kb3cpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9OQVRJVkVfV0lORE9XLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZGlzcGxheS0+Y3JlYXRlV2luZG93U3VyZmFjZSh3aW5kb3csIGNvbmZpZywg
YXR0cmliX2xpc3QpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAg
IH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdM
RGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
Ci17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25m
aWcgPSAweCUwLjhwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAotICAg
ICAgICAgIGRweSwgY29uZmlnLCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gZGlzcGxheS0+Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShjb25maWcsIE5V
TEwsIGF0dHJpYl9saXN0KTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsK
LSAgICB9Ci19Ci0KLUVHTFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVBpeG1hcFN1cmZhY2Uo
RUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4
bWFwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlUGl4
bWFwVHlwZSBwaXhtYXAgPSAweCUwLjhwLCAiCi0gICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QgPSAweCUwLjhwKSIsIGRweSwgY29uZmlnLCBwaXhtYXAsIGF0dHJpYl9saXN0KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmln
KGRpc3BsYXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9f
U1VSRkFDRTsKLSAgICAgICAgfQotCi0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhN
RQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRj
YWxsIGVnbERlc3Ryb3lTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2Up
Ci17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpT
dXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxh
eSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZB
TFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRpc3BsYXktPmRlc3Ryb3lTdXJmYWNlKChlZ2w6
OlN1cmZhY2UqKXN1cmZhY2UpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsK
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFu
IF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdM
aW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAg
IGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1
cmZhY2U7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFj
ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBFR0xfVkdfQUxQSEFfRk9STUFUOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9WR19DT0xP
UlNQQUNFOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6Ci0gICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgRUdMX0hFSUdIVDoKLSAgICAgICAgICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmdldEhl
aWdodCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfSE9SSVpPTlRB
TF9SRVNPTFVUSU9OOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9MQVJHRVNUX1BCVUZGRVI6Ci0g
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgRUdMX01JUE1BUF9URVhUVVJFOgotICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEVHTF9NSVBNQVBfTEVWRUw6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX01VTFRJU0FNUExFX1JF
U09MVkU6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1BJWEVMX0FTUEVDVF9SQVRJTzoKLSAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBFR0xfUkVOREVSX0JVRkZFUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xf
U1dBUF9CRUhBVklPUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9GT1JNQVQ6Ci0g
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfVEFSR0VUOgotICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEVHTF9WRVJUSUNBTF9SRVNPTFVUSU9OOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9XSURUSDoK
LSAgICAgICAgICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05W
OgotICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9y
dGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5
U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBF
R0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5
IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRy
aWJ1dGUgPSAlZCwgdm9pZCAqKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgc3Vy
ZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAg
ICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7Ci0K
LSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN3aXRjaCAoYXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xf
RDNEX1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFOgotICAgICAgICAgICAgKnZhbHVlID0g
KHZvaWQqKSBlZ2xTdXJmYWNlLT5nZXRTaGFyZUhhbmRsZSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FU
VFJJQlVURSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdWNjZXNz
KEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQot
Ci1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kQVBJKEVHTGVudW0gYXBpKQotewotICAgIEVW
RU5UKCIoRUdMZW51bSBhcGkgPSAweCVYKSIsIGFwaSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoYXBpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0FQ
SToKLSAgICAgICAgICBjYXNlIEVHTF9PUEVOVkdfQVBJOgotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOyAgIC8vIE5vdCBzdXBwb3J0ZWQgYnkg
dGhpcyBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9FU19BUEk6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZWdsOjpzZXRDdXJyZW50QVBJKGFwaSk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TGVudW0gX19zdGRjYWxsIGVnbFF1ZXJ5QVBJKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIEVHTGVudW0gQVBJID0gZWdsOjpnZXRDdXJyZW50QVBJ
KCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoQVBJKTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xp
ZW50KHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDAp
OwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbFJlbGVhc2VUaHJlYWQodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsTWFrZUN1cnJlbnQoRUdMX05PX0RJU1BMQVks
IEVHTF9OT19DT05URVhULCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UpOwotCi0gICAg
ICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7Ci0gICAgfQotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQYnVmZmVy
RnJvbUNsaWVudEJ1ZmZlcihFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBidWZ0eXBlLCBFR0xDbGll
bnRCdWZmZXIgYnVmZmVyLCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9s
aXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xlbnVtIGJ1
ZnR5cGUgPSAweCVYLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyID0gMHglMC44cCwgIgotICAgICAg
ICAgICJFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlz
dCA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGJ1ZnR5cGUsIGJ1ZmZlciwgY29uZmlnLCBh
dHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVmdHlwZSAh
PSBFR0xfRDNEX1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFIHx8ICFidWZmZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05P
X1NVUkZBQ0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZU9m
ZnNjcmVlblN1cmZhY2UoY29uZmlnLCAoSEFORExFKWJ1ZmZlciwgYXR0cmliX2xpc3QpOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVh
biBfX3N0ZGNhbGwgZWdsU3VyZmFjZUF0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBz
dXJmYWNlLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgdmFsdWUpCi17Ci0gICAgRVZFTlQoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVH
TGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50IHZhbHVlID0gJWQpIiwKLSAgICAgICAgICBkcHks
IHN1cmZhY2UsIGF0dHJpYnV0ZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwot
ICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZh
Y2UqPihzdXJmYWNlKTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBl
Z2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKLXsKLSAgICBF
VkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHgl
MC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8
ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0g
c3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVmZmVyICE9IEVH
TF9CQUNLX0JVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZh
Y2UgPT0gRUdMX05PX1NVUkZBQ0UgfHwgZWdsU3VyZmFjZS0+Z2V0V2luZG93SGFuZGxlKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9G
QUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWdsU3VyZmFjZS0+Z2V0Qm91bmRUZXh0
dXJlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FDQ0VT
UywgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5nZXRU
ZXh0dXJlRm9ybWF0KCkgPT0gRUdMX05PX1RFWFRVUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFnbEJpbmRUZXhJbWFnZShlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFz
ZVRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZm
ZXIpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ug
c3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1
ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9
IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAq
ZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAg
ICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGJ1ZmZlciAhPSBFR0xfQkFDS19CVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFIHx8IGVnbFN1cmZhY2UtPmdldFdpbmRv
d0hhbmRsZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9T
VVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2Ut
PmdldFRleHR1cmVGb3JtYXQoKSA9PSBFR0xfTk9fVEVYVFVSRSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gZWdsU3VyZmFjZS0+Z2V0Qm91bmRU
ZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRleHR1cmUtPnJlbGVhc2VUZXhJbWFnZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAg
ICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFN3YXBJbnRlcnZhbChFR0xEaXNwbGF5
IGRweSwgRUdMaW50IGludGVydmFsKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAw
eCUwLjhwLCBFR0xpbnQgaW50ZXJ2YWwgPSAlZCkiLCBkcHksIGludGVydmFsKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZHJhd19zdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpT
dXJmYWNlKj4oZWdsOjpnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSk7Ci0KLSAgICAgICAgaWYgKGRy
YXdfc3VyZmFjZSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBkcmF3X3N1cmZhY2UtPnNldFN3YXBJbnRlcnZhbChpbnRlcnZhbCk7Ci0KLSAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsK
LSAgICB9Ci19Ci0KLUVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUdMRGlz
cGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCwgY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTENvbnRleHQgc2hhcmVfY29u
dGV4dCA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9
IDB4JTAuOHApIiwgZHB5LCBjb25maWcsIHNoYXJlX2NvbnRleHQsIGF0dHJpYl9saXN0KTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNp
b24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KLSAgICAgICAgRUdMaW50IGNs
aWVudF92ZXJzaW9uID0gMTsKLSAgICAgICAgYm9vbCByZXNldF9ub3RpZmljYXRpb24gPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCByb2J1c3RfYWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGF0
dHJpYl9saXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEVHTGludCogYXR0
cmlidXRlID0gYXR0cmliX2xpc3Q7IGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORTsgYXR0cmlidXRl
ICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVb
MF0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTjoKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50X3ZlcnNpb24gPSBh
dHRyaWJ1dGVbMV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgY2FzZSBFR0xfQ09OVEVYVF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVbMV0gPT0gRUdMX1RSVUUpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJ
RywgRUdMX05PX0NPTlRFWFQpOyAgIC8vIFVuaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHJvYnVzdF9hY2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZVsxXSAhPSBFR0xfRkFMU0UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lf
RVhUOgotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlWzFdID09IEVHTF9MT1NFX0NP
TlRFWFRfT05fUkVTRVRfRVhUKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfbm90aWZp
Y2F0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlWzFd
ICE9IEVHTF9OT19SRVNFVF9OT1RJRklDQVRJT05fRVhUKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09O
VEVYVCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQgJiYgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihz
aGFyZV9jb250ZXh0KS0+aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKSAhPSByZXNldF9ub3Rp
ZmljYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01B
VENILCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlm
ICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwotICAgICAgICB9Ci0KLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2Fj
Y2Vzcyk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gc3VjY2Vz
cyhjb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9D
T05URVhUX0xPU1QsIEVHTF9OT19DT05URVhUKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19DT05URVhUKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbERlc3Ryb3lD
b250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCkKLXsKLSAgICBFVkVOVCgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsIGRweSwg
Y3R4KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
c3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZUNvbnRleHQoZGlzcGxheSwgY29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3R4ID09IEVHTF9O
T19DT05URVhUKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9D
T05URVhULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+ZGVzdHJv
eUNvbnRleHQoY29udGV4dCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4g
X19zdGRjYWxsIGVnbE1ha2VDdXJyZW50KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIGRyYXcs
IEVHTFN1cmZhY2UgcmVhZCwgRUdMQ29udGV4dCBjdHgpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2UgZHJhdyA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ug
cmVhZCA9IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLAotICAgICAgICAgIGRw
eSwgZHJhdywgcmVhZCwgY3R4KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0g
ICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOwot
Ci0gICAgICAgIGlmICghZGV2aWNlIHx8IGRpc3BsYXktPnRlc3REZXZpY2VMb3N0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGRpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAg
ICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlzcGxheS0+
aXNEZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Q09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGN0eCAh
PSBFR0xfTk9fQ09OVEVYVCAmJiAhdmFsaWRhdGVDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKChkcmF3ICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZVN1cmZhY2UoZGlz
cGxheSwgc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZHJhdykpKSB8fAotICAgICAgICAgICAg
KHJlYWQgIT0gRUdMX05PX1NVUkZBQ0UgJiYgIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBzdGF0
aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihyZWFkKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRyYXcgIT0gcmVhZCkK
LSAgICAgICAgewotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAg
ICAgIH0KLQotICAgICAgICBlZ2w6OnNldEN1cnJlbnREaXNwbGF5KGRweSk7Ci0gICAgICAgIGVn
bDo6c2V0Q3VycmVudERyYXdTdXJmYWNlKGRyYXcpOwotICAgICAgICBlZ2w6OnNldEN1cnJlbnRS
ZWFkU3VyZmFjZShyZWFkKTsKLQotICAgICAgICBnbE1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3Bs
YXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKTsKLQotICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAg
IH0KLX0KLQotRUdMQ29udGV4dCBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudENvbnRleHQodm9pZCkK
LXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZ2xHZXRDdXJyZW50Q29udGV4dCgpOwotCi0gICAgICAgIHJldHVybiBzdWNj
ZXNzKGNvbnRleHQpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0NPTlRFWFQpOwotICAg
IH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMaW50
IHJlYWRkcmF3KQotewotICAgIEVWRU5UKCIoRUdMaW50IHJlYWRkcmF3ID0gJWQpIiwgcmVhZGRy
YXcpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAocmVhZGRyYXcgPT0gRUdMX1JFQUQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVHTFN1cmZhY2UgcmVhZCA9IGVnbDo6Z2V0Q3VycmVu
dFJlYWRTdXJmYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhyZWFkKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChyZWFkZHJhdyA9PSBFR0xfRFJBVykKLSAgICAgICAgewot
ICAgICAgICAgICAgRUdMU3VyZmFjZSBkcmF3ID0gZWdsOjpnZXRDdXJyZW50RHJhd1N1cmZhY2Uo
KTsKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKGRyYXcpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1F
VEVSLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9OT19TVVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTERpc3BsYXkgX19zdGRjYWxsIGVnbEdldEN1
cnJlbnREaXNwbGF5KHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIEVHTERpc3BsYXkgZHB5ID0gZWdsOjpnZXRDdXJyZW50RGlzcGxheSgpOwotCi0g
ICAgICAgIHJldHVybiBzdWNjZXNzKGRweSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9f
RElTUExBWSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeUNvbnRl
eHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xD
b250ZXh0IGN0eCA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2YWx1
ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGN0eCwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19j
YXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVD
b250ZXh0KGRpc3BsYXksIGNvbnRleHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
RUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCi0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBF
R0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdEdMKHZv
aWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbFdhaXROYXRpdmUoRUdMaW50IGVuZ2luZSkKLXsKLSAgICBFVkVOVCgiKEVHTGlu
dCBlbmdpbmUgPSAlZCkiLCBlbmdpbmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9f
c3RkY2FsbCBlZ2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNl
KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1
cmZhY2UgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1
cmZhY2U7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFj
ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZGlzcGxheS0+aXNEZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZWdsU3VyZmFjZS0+c3dhcCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9GQUxTRTsK
LX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHks
IEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpCi17Ci0gICAg
RVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4
JTAuOHAsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0ID0gMHglMC44cCkiLCBkcHksIHN1cmZh
Y2UsIHRhcmdldCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3Vy
ZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwot
Ci0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNj
ZXNzKDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbFBvc3RTdWJCdWZmZXJOVihFR0xEaXNwbGF5IGRweSwgRUdM
U3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50
IGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3Vy
ZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IHggPSAlZCwgRUdMaW50IHkgPSAlZCwgRUdM
aW50IHdpZHRoID0gJWQsIEVHTGludCBoZWlnaHQgPSAlZCkiLCBkcHksIHN1cmZhY2UsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoeCA8IDAgfHwg
eSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0
PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNl
KGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwg
RUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19T
VVJGQUNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJG
QUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2UtPnBv
c3RTdWJCdWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1fX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBlZ2xHZXRQcm9j
QWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKLXsKLSAgICBFVkVOVCgiKGNvbnN0IGNoYXIg
KnByb2NuYW1lID0gXCIlc1wiKSIsIHByb2NuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgc3RydWN0IEV4dGVuc2lvbgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpu
YW1lOwotICAgICAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSBhZGRyZXNzOwotICAgICAgICB9OwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24g
ZWdsRXh0ZW5zaW9uc1tdID0KLSAgICAgICAgewotICAgICAgICAgICAgeyJlZ2xRdWVyeVN1cmZh
Y2VQb2ludGVyQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSllZ2xRdWVyeVN1cmZhY2VQb2ludGVyQU5HTEV9LAotICAgICAgICAgICAgeyJlZ2xQb3N0U3Vi
QnVmZmVyTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xQ
b3N0U3ViQnVmZmVyTlZ9LAotICAgICAgICAgICAgeyIiLCBOVUxMfSwKLSAgICAgICAgfTsKLQot
ICAgICAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2YoZWdsRXh0ZW5zaW9ucykgLyBz
aXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHJj
bXAocHJvY25hbWUsIGVnbEV4dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSllZ2xFeHRlbnNpb25zW2V4dF0uYWRkcmVzczsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBnbEdldFByb2NBZGRyZXNzKHByb2NuYW1lKTsKLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKU5VTEwpOwotICAgIH0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNWU2Ny4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5k
ZWYKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1MSUJSQVJZCWxpYkVHTAotRVhQT1JU
UwotCWVnbEJpbmRBUEkgICAgICAgICAgICAgICAgICAgICAgQDE0Ci0JZWdsQmluZFRleEltYWdl
ICAgICAgICAgICAgICAgICBAMjAKLQllZ2xDaG9vc2VDb25maWcgICAgICAgICAgICAgICAgIEA3
Ci0JZWdsQ29weUJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzMKLQllZ2xDcmVhdGVDb250ZXh0
ICAgICAgICAgICAgICAgIEAyMwotCWVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAg
ICAgICBAMTgKLQllZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZSAgICAgICAgIEAxMAotCWVnbENyZWF0
ZVBpeG1hcFN1cmZhY2UgICAgICAgICAgQDExCi0JZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAg
ICAgICBAOQotCWVnbERlc3Ryb3lDb250ZXh0ICAgICAgICAgICAgICAgQDI0Ci0JZWdsRGVzdHJv
eVN1cmZhY2UgICAgICAgICAgICAgICBAMTIKLQllZ2xHZXRDb25maWdBdHRyaWIgICAgICAgICAg
ICAgIEA4Ci0JZWdsR2V0Q29uZmlncyAgICAgICAgICAgICAgICAgICBANgotCWVnbEdldEN1cnJl
bnRDb250ZXh0ICAgICAgICAgICAgQDI2Ci0JZWdsR2V0Q3VycmVudERpc3BsYXkgICAgICAgICAg
ICBAMjgKLQllZ2xHZXRDdXJyZW50U3VyZmFjZSAgICAgICAgICAgIEAyNwotCWVnbEdldERpc3Bs
YXkgICAgICAgICAgICAgICAgICAgQDIKLQllZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAg
IEAxCi0JZWdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICBAMzQKLQllZ2xJbml0aWFsaXpl
ICAgICAgICAgICAgICAgICAgIEAzCi0JZWdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICBA
MjUKLQllZ2xRdWVyeUFQSSAgICAgICAgICAgICAgICAgICAgIEAxNQotCWVnbFF1ZXJ5Q29udGV4
dCAgICAgICAgICAgICAgICAgQDI5Ci0JZWdsUXVlcnlTdHJpbmcgICAgICAgICAgICAgICAgICBA
NQotCWVnbFF1ZXJ5U3VyZmFjZSAgICAgICAgICAgICAgICAgQDEzCi0JZWdsUmVsZWFzZVRleElt
YWdlICAgICAgICAgICAgICBAMjEKLQllZ2xSZWxlYXNlVGhyZWFkICAgICAgICAgICAgICAgIEAx
NwotCWVnbFN1cmZhY2VBdHRyaWIgICAgICAgICAgICAgICAgQDE5Ci0JZWdsU3dhcEJ1ZmZlcnMg
ICAgICAgICAgICAgICAgICBAMzIKLQllZ2xTd2FwSW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAy
MgotCWVnbFRlcm1pbmF0ZSAgICAgICAgICAgICAgICAgICAgQDQKLQllZ2xXYWl0Q2xpZW50ICAg
ICAgICAgICAgICAgICAgIEAxNgotCWVnbFdhaXRHTCAgICAgICAgICAgICAgICAgICAgICAgQDMw
Ci0JZWdsV2FpdE5hdGl2ZSAgICAgICAgICAgICAgICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDFmMzJmLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjCisrKyAvZGV2L251bGwK
QEAgLTEsMTAyICswLDAgQEAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNv
dXJjZSBzY3JpcHQuCi0vLwotI2luY2x1ZGUgInJlc291cmNlLmgiCi0KLSNkZWZpbmUgQVBTVFVE
SU9fUkVBRE9OTFlfU1lNQk9MUwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5lcmF0
ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KLS8vCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0jdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVT
T1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdV
QUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgx
MjUyKQotI2VuZGlmIC8vX1dJTjMyCi0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8KLS8vIFRFWFRJTkNMVURFCi0vLwotCi0xIFRFWFRJTkNMVURFIAot
QkVHSU4KLSAgICAicmVzb3VyY2UuaFwwIgotRU5ECi0KLTIgVEVYVElOQ0xVREUgCi1CRUdJTgot
ICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1v
bi92ZXJzaW9uLmgiIlwwIgotRU5ECi0KLTMgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJcclxu
IgotICAgICJcMCIKLUVORAotCi0jZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAotCi0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gVmVyc2lvbgotLy8KLQotVlNfVkVSU0lPTl9JTkZP
IFZFUlNJT05JTkZPCi0gRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJV
SUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9O
LE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTgotIEZJTEVGTEFHU01B
U0sgMHgxN0wKLSNpZmRlZiBfREVCVUcKLSBGSUxFRkxBR1MgMHgxTAotI2Vsc2UKLSBGSUxFRkxB
R1MgMHgwTAotI2VuZGlmCi0gRklMRU9TIDB4NEwKLSBGSUxFVFlQRSAweDJMCi0gRklMRVNVQlRZ
UEUgMHgwTAotQkVHSU4KLSAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCi0gICAgQkVHSU4KLSAg
ICAgICAgQkxPQ0sgIjA0MDkwNGIwIgotICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUg
IkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnkiCi0g
ICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORwotICAgICAgICAg
ICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiCi0gICAgICAgICAgICBWQUxVRSAiTGVn
YWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgotICAgICAgICAg
ICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliRUdMLmRsbCIKLSAgICAgICAgICAgIFZB
TFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIlBy
b2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAg
ICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgIEVORAot
ICAgIEVORAotICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBWQUxV
RSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAotICAgIEVORAotRU5ECi0KLSNlbmRpZiAgICAv
LyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0j
aWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2Vu
ZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0jZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvaiBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyZDI5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw0
NDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+
Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgotCVZlcnNp
b249IjkuMDAiCi0JTmFtZT0ibGliRUdMIgotCVByb2plY3RHVUlEPSJ7RTc0NkZDQTktNjRDMy00
MzNFLTg1RTgtOUE1QTY3QUI3RUQ2fSIKLQlSb290TmFtZXNwYWNlPSJsaWJFR0wiCi0JS2V5d29y
ZD0iV2luMzJQcm9qIgotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiIKLQk+Ci0JPFBs
YXRmb3Jtcz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJLz4KLQkJPFBsYXRmb3Jt
Ci0JCQlOYW1lPSJ4NjQiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8L1Rv
b2xGaWxlcz4KLQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFt
ZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
V2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
PSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJl
cHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVH
TF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5pbWFs
UmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxp
YnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVs
PSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQy
NDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJm
YWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0
cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxl
clRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25z
PSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBkeGd1aWQu
bGliIGR3bWFwaS5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIgotCQkJCU1vZHVsZURlZmlu
aXRpb25GaWxlPSJsaWJFR0wuZGVmIgotCQkJCURlbGF5TG9hZERMTHM9ImR3bWFwaS5kbGwiCi0J
CQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJ
CQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249
IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
QUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
RnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlD
b21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0
RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25m
aWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Igot
CQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVs
ZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFt
ZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdo
b2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
cmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVp
bGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9y
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIK
LQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUi
Ci0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNS
RExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VD
VVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJCVVzZVByZWNvbXBpbGVkSGVh
ZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyIgotCQkJCURldGVjdDY0
Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1h
dD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9v
bCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVu
ZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21hcGkubGliIgotCQkJCUxpbmtJbmNyZW1l
bnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJCQlEZWxh
eUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1
ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgotCQkJCUVu
YWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJ
CURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjEiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENN
YWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
b3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7
bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwm
cXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wuZGxsJnF1b3Q7ICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmxpYiZxdW90OyAmcXVvdDskKFBy
b2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBB
O0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENv
bmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChT
b2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRl
cm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIK
LQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJT
ZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNN
SURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikv
Li4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVH
O19XSU5ET1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRF
O05PTUlOTUFYIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNo
ZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRl
cj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9
IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2NEJp
dFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9
IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1By
ZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wi
Ci0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRl
bmNpZXM9ImQzZDkubGliIGR4Z3VpZC5saWIgZHdtYXBpLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50
YWw9IjIiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiCi0JCQkJRGVsYXlM
b2FkRExMcz0iZHdtYXBpLmRsbCIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUi
Ci0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlE
YXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01h
a2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bv
c3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtt
a2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZx
dW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1
b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gw
RDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7
QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29u
ZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXx4NjQiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQo
U29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50
ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSki
Ci0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xl
UHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVC
dWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkJVGFyZ2V0RW52
aXJvbm1lbnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIK
LQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFBy
b2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJ
TjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05P
X0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIw
IgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJ
CQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7
NDUxMjs0NzAyIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0J
CQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVT
RUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21h
cGkubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmls
ZT0ibGliRUdMLmRlZiIKLQkJCQlEZWxheUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVy
YXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1p
emVSZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9t
aXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJ
CVRhcmdldE1hY2hpbmU9IjE3IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRM
aW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91
dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29u
ZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxp
YkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgot
CQk8L0NvbmZpZ3VyYXRpb24+Ci0JPC9Db25maWd1cmF0aW9ucz4KLQk8UmVmZXJlbmNlcz4KLQk8
L1JlZmVyZW5jZXM+Ci0JPEZpbGVzPgotCQk8RmlsdGVyCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMi
Ci0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Igot
CQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJG
Rn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuY3BwIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxDb21tb25cZGVi
dWcuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XERpc3BsYXkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXGxpYkVHTC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRl
cj4KLQkJPEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDto
eHg7aG07aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00
YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXENvbmZpZy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXERpc3BsYXkuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdMXGVnbGV4dC5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRl
XEVHTFxlZ2xwbGF0Zm9ybS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXG1haW4uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLlxyZXNvdXJjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXHZlcnNpb24uaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCTwvRmlsdGVyPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkVHTC5kZWYi
Ci0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wucmMi
Ci0JCQk+Ci0JCTwvRmlsZT4KLQk8L0ZpbGVzPgotCTxHbG9iYWxzPgotCTwvR2xvYmFscz4KLTwv
VmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvbWFpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L21haW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzEwN2JmLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5j
cHA6IERMTCBlbnRyeSBwb2ludCBhbmQgbWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4K
LQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
LQotc3RhdGljIERXT1JEIGN1cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7Ci0KLUJPT0wg
V0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCBy
ZXNlcnZlZCkKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikKLSAgICB7Ci0gICAgICBjYXNlIERMTF9Q
Uk9DRVNTX0FUVEFDSDoKLSAgICAgICAgewotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJB
Q0UpCi0gICAgICAgICAgICBGSUxFICpkZWJ1ZyA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAi
cnQiKTsKLQotICAgICAgICAgICAgaWYgKGRlYnVnKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZjbG9zZShkZWJ1Zyk7Ci0gICAgICAgICAgICAgICAgZGVidWcgPSBmb3BlbihUUkFD
RV9PVVRQVVRfRklMRSwgInd0Iik7ICAgLy8gRXJhc2UKLSAgICAgICAgICAgICAgICBmY2xvc2Uo
ZGVidWcpOwotICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgIGN1cnJlbnRUTFMg
PSBUbHNBbGxvYygpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09G
X0lOREVYRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5p
dGlhbGl6ZSBpbmRleAotICAgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewot
ICAgICAgICAgICAgZWdsOjpDdXJyZW50ICpjdXJyZW50ID0gKGVnbDo6Q3VycmVudCopTG9jYWxB
bGxvYyhMUFRSLCBzaXplb2YoZWdsOjpDdXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJy
ZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRU
TFMsIGN1cnJlbnQpOwotCi0gICAgICAgICAgICAgICAgY3VycmVudC0+ZXJyb3IgPSBFR0xfU1VD
Q0VTUzsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5BUEkgPSBFR0xfT1BFTkdMX0VTX0FQSTsK
LSAgICAgICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBETExfVEhSRUFE
X0RFVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZh
bHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRExMX1BST0NFU1Nf
REVUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFs
dWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBUbHNGcmVlKGN1cnJlbnRUTFMpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLXZvaWQgc2V0Q3VycmVudEVycm9y
KEVHTGludCBlcnJvcikKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+ZXJyb3IgPSBlcnJvcjsKLX0KLQot
RUdMaW50IGdldEN1cnJlbnRFcnJvcigpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJy
ZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5lcnJv
cjsKLX0KLQotdm9pZCBzZXRDdXJyZW50QVBJKEVHTGVudW0gQVBJKQotewotICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJy
ZW50LT5BUEkgPSBBUEk7Ci19Ci0KLUVHTGVudW0gZ2V0Q3VycmVudEFQSSgpCi17Ci0gICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAg
IHJldHVybiBjdXJyZW50LT5BUEk7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlz
cGxheSBkcHkpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKLQotICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBkcHk7Ci19Ci0KLUVHTERp
c3BsYXkgZ2V0Q3VycmVudERpc3BsYXkoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3Vy
cmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZGlz
cGxheTsKLX0KLQotdm9pZCBzZXRDdXJyZW50RHJhd1N1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNl
KQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7Ci0KLSAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IHN1cmZhY2U7Ci19Ci0KLUVHTFN1
cmZhY2UgZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQt
PmRyYXdTdXJmYWNlOwotfQotCi12b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNl
IHN1cmZhY2UpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKLQotICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gc3VyZmFjZTsKLX0K
LQotRUdMU3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKQotewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4g
Y3VycmVudC0+cmVhZFN1cmZhY2U7Ci19Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29k
ZSkKLXsKLSAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihlcnJvckNvZGUpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDA5ZDllNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML21haW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIG1haW4uaDogTWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQot
I2lmbmRlZiBMSUJFR0xfTUFJTl9IXwotI2RlZmluZSBMSUJFR0xfTUFJTl9IXwotCi0jZGVmaW5l
IEVHTEFQSQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Ci0K
LW5hbWVzcGFjZSBlZ2wKLXsKLXN0cnVjdCBDdXJyZW50Ci17Ci0gICAgRUdMaW50IGVycm9yOwot
ICAgIEVHTGVudW0gQVBJOwotICAgIEVHTERpc3BsYXkgZGlzcGxheTsKLSAgICBFR0xTdXJmYWNl
IGRyYXdTdXJmYWNlOwotICAgIEVHTFN1cmZhY2UgcmVhZFN1cmZhY2U7Ci19OwotCi12b2lkIHNl
dEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpOwotRUdMaW50IGdldEN1cnJlbnRFcnJvcigpOwot
Ci12b2lkIHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpOwotRUdMZW51bSBnZXRDdXJyZW50QVBJ
KCk7Ci0KLXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpOwotRUdMRGlzcGxh
eSBnZXRDdXJyZW50RGlzcGxheSgpOwotCi12b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xT
dXJmYWNlIHN1cmZhY2UpOwotRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKLQot
dm9pZCBzZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKLUVHTFN1cmZh
Y2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNlKCk7Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9y
Q29kZSk7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdCBUICZlcnJvcihFR0xpbnQgZXJyb3JD
b2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0g
ICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPgotY29uc3QgVCAm
c3VjY2Vzcyhjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlZ2w6OnNldEN1cnJlbnRFcnJv
cihFR0xfU1VDQ0VTUyk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLSNlbmRpZiAg
Ly8gTElCRUdMX01BSU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvcmVzb3VyY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
cmVzb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyMWY0Yy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML3Jlc291cmNlLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vL3t7Tk9fREVQRU5ERU5DSUVTfX0KLS8vIE1p
Y3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUuCi0vLyBVc2VkIGJ5IGxp
YkVHTC5yYwotCi0vLyBOZXh0IGRlZmF1bHQgdmFsdWVzIGZvciBuZXcgb2JqZWN0cwotLy8gCi0j
aWZkZWYgQVBTVFVESU9fSU5WT0tFRAotI2lmbmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xT
Ci0jZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTAxCi0jZGVmaW5lIF9B
UFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgNDAwMDEKLSNkZWZpbmUgX0FQU19ORVhUX0NP
TlRST0xfVkFMVUUgICAgICAgICAxMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9TWU1FRF9WQUxVRSAg
ICAgICAgICAgMTAxCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQmxpdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEy
NDhkNjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9CbGl0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwNCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvQmxpdC5oIgotCi0jaW5jbHVkZSA8ZDNkeDkuaD4KLQotI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNw
YWNlCi17Ci0vLyBTdGFuZGFyZCBWZXJ0ZXggU2hhZGVyCi0vLyBJbnB1dCAwIGlzIHRoZSBob21v
Z2Vub3VzIHBvc2l0aW9uLgotLy8gT3V0cHV0cyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBhcy1p
cy4KLS8vIE91dHB1dHMgYSB0ZXggY29vcmQgd2l0aCAoMCwwKSBpbiB0aGUgdXBwZXItbGVmdCBj
b3JuZXIgb2YgdGhlIHNjcmVlbiBhbmQgKDEsMSkgaW4gdGhlIGJvdHRvbSByaWdodC4KLS8vIEMw
LlggbXVzdCBiZSBuZWdhdGl2ZSBoYWxmLXBpeGVsIHdpZHRoLCBDMC5ZIG11c3QgYmUgaGFsZi1w
aXhlbCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KLWNvbnN0IGNoYXIgc3RhbmRhcmR2c1tdID0K
LSJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0ie1xuIgotIiAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJ
VElPTjtcbiIKLSIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgotIn07XG4iCi0i
XG4iCi0idW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgotIlxuIgotIlZTX09V
VFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgotIntcbiIKLSIgICAg
VlNfT1VUUFVUIE91dDtcbiIKLSJcbiIKLSIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBo
YWxmUGl4ZWxTaXplO1xuIgotIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgw
LjUsIC0wLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0i
ICAgIHJldHVybiBPdXQ7XG4iCi0ifVxuIjsKLQotLy8gRmxpcCBZIFZlcnRleCBTaGFkZXIKLS8v
IElucHV0IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCi0vLyBPdXRwdXRzIHRoZSBob21v
Z2Vub3VzIHBvc2l0aW9uIGFzLWlzLgotLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDEp
IGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUg
Ym90dG9tIHJpZ2h0LgotLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQg
aGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAuCi1jb25zdCBjaGFyIGZsaXB5dnNbXSA9Ci0ic3RydWN0
IFZTX09VVFBVVFxuIgotIntcbiIKLSIgICAgZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT047XG4i
Ci0iICAgIGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDtcbiIKLSJ9O1xuIgotIlxuIgotInVu
aWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDtcbiIKLSJcbiIKLSJWU19PVVRQVVQgbWFp
bihpbiBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTilcbiIKLSJ7XG4iCi0iICAgIFZTX09VVFBV
VCBPdXQ7XG4iCi0iXG4iCi0iICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVs
U2l6ZTtcbiIKLSIgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUs
IDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0iICAgIHJldHVy
biBPdXQ7XG4iCi0ifVxuIjsKLQotLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCi0vLyBPdXRw
dXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRleGNvb3JkIDAuCi1jb25zdCBjaGFyIHBhc3N0aHJv
dWdocHNbXSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotImZsb2F0NCBtYWluKGZs
b2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgotIntcbiIKLSIJcmV0dXJuIHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgotIn1cbiI7Ci0KLS8vIEx1bWluYW5jZSBDb252ZXJz
aW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgotLy8g
Rm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8gRm9yIEwg
b3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KLWNvbnN0IGNoYXIgbHVtaW5h
bmNlcHNbXSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0
IG1vZGUgOiBjMDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDApIDogQ09MT1JcbiIKLSJ7XG4iCi0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNv
b3JkLnh5KTtcbiIKLSIJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTtcbiIKLSIJcmV0
dXJuIHRtcC54eHh3O1xuIgotIn1cbiI7Ci0KLS8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVs
IFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9y
Y2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0vLyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9
IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8vIFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAs
IEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcgPSAwLgotY29uc3QgY2hhciBjb21w
b25lbnRtYXNrcHNbXSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0g
ZmxvYXQ0IG1vZGUgOiBjMDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1JcbiIKLSJ7XG4iCi0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KTtcbiIKLSIJdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7XG4iCi0iCXRt
cC53ID0gdG1wLncgKiBtb2RlLnogKyBtb2RlLnc7XG4iCi0iCXJldHVybiB0bXA7XG4iCi0ifVxu
IjsKLQotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLQotY29uc3QgY2hhciAqIGNvbnN0IEJsaXQ6Om1T
aGFkZXJTb3VyY2VbXSA9Ci17Ci0gICAgc3RhbmRhcmR2cywKLSAgICBmbGlweXZzLAotICAgIHBh
c3N0aHJvdWdocHMsCi0gICAgbHVtaW5hbmNlcHMsCi0gICAgY29tcG9uZW50bWFza3BzCi19Owot
Ci1CbGl0OjpCbGl0KENvbnRleHQgKmNvbnRleHQpCi0gIDogbUNvbnRleHQoY29udGV4dCksIG1R
dWFkVmVydGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xhcmF0aW9uKE5VTEwpLCBtU2F2
ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1TYXZlZERlcHRoU3RlbmNpbChOVUxMKSwgbVNhdmVkU3Rh
dGVCbG9jayhOVUxMKQotewotICAgIGluaXRHZW9tZXRyeSgpOwotICAgIG1lbXNldChtQ29tcGls
ZWRTaGFkZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykpOwotfQotCi1CbGl0Ojp+Qmxp
dCgpCi17Ci0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZlZFN0YXRlQmxvY2stPlJlbGVh
c2UoKTsKLSAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5SZWxl
YXNlKCk7Ci0gICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pIG1RdWFkVmVydGV4RGVjbGFy
YXRpb24tPlJlbGVhc2UoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBREVSX0NPVU5U
OyBpKyspCi0gICAgewotICAgICAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tpXSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVsZWFzZSgpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgpCi17Ci0gICAgc3RhdGljIGNv
bnN0IGZsb2F0IHF1YWRbXSA9Ci0gICAgewotICAgICAgICAtMSwgLTEsCi0gICAgICAgIC0xLCAg
MSwKLSAgICAgICAgIDEsIC0xLAotICAgICAgICAgMSwgIDEKLSAgICB9OwotCi0gICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemVvZihxdWFkKSwgRDNEVVNBR0VfV1JJVEVP
TkxZLCAwLCBEM0RQT09MX0RFRkFVTFQsICZtUXVhZFZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0KLSAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHZvaWQgKmxv
Y2tQdHIgPSBOVUxMOwotICAgIHJlc3VsdCA9IG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAs
ICZsb2NrUHRyLCAwKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCBsb2NrUHRyID09IE5V
TEwpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXpl
b2YocXVhZCkpOwotICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgIHN0YXRp
YyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KLSAgICB7Ci0gICAgICAgIHsg
MCwgMCwgRDNEREVDTFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xV
U0FHRV9QT1NJVElPTiwgMCB9LAotICAgICAgICBEM0RERUNMX0VORCgpCi0gICAgfTsKLQotICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVh
ZFZlcnRleERlY2xhcmF0aW9uKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KLWJvb2wgQmxp
dDo6c2V0U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAg
ICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5OjoqY3JlYXRl
U2hhZGVyKShjb25zdCBEV09SRCAqLCBEM0RTaGFkZXJUeXBlKiopLAotICAgICAgICAgICAgICAg
ICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNo
YWRlclR5cGUqKSkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2Uo
KTsKLQotICAgIEQzRFNoYWRlclR5cGUgKnNoYWRlcjsKLQotICAgIGlmIChtQ29tcGlsZWRTaGFk
ZXJzW3NvdXJjZV0gIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHNoYWRlciA9IHN0YXRpY19jYXN0
PEQzRFNoYWRlclR5cGUqPihtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0pOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBJRDNEWEJ1ZmZlciAqc2hhZGVyQ29kZTsKLSAgICAgICAgSFJF
U1VMVCBociA9IEQzRFhDb21waWxlU2hhZGVyKG1TaGFkZXJTb3VyY2Vbc291cmNlXSwgc3RybGVu
KG1TaGFkZXJTb3VyY2Vbc291cmNlXSksIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwg
JnNoYWRlckNvZGUsIE5VTEwsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjb21waWxlICVzIHNoYWRlciBmb3Ig
YmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwg
aHIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaHIg
PSAoZGV2aWNlLT4qY3JlYXRlU2hhZGVyKShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KHNoYWRl
ckNvZGUtPkdldEJ1ZmZlclBvaW50ZXIoKSksICZzaGFkZXIpOwotICAgICAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyQ29kZS0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRp
b24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc2hhZGVyQ29kZS0+UmVs
ZWFzZSgpOwotCi0gICAgICAgIG1Db21waWxlZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsKLSAg
ICB9Ci0KLSAgICBIUkVTVUxUIGhyID0gKGRldmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKLQot
ICAgIGlmIChGQUlMRUQoaHIpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0ICVz
IHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAo
aW50KXNvdXJjZSwgaHIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6c2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRl
cikKLXsKLSAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRl
ciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAi
LCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNl
OTo6U2V0VmVydGV4U2hhZGVyKTsKLX0KLQotYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFk
ZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRl
cjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6
ICJwc18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0
M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7Ci19Ci0KLVJFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJl
Y3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0Ci17Ci0gICAgRDNEU1VSRkFDRV9E
RVNDIGRlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBSRUNUIHJlY3Q7
Ci0gICAgcmVjdC5sZWZ0ID0gMDsKLSAgICByZWN0LnRvcCA9IDA7Ci0gICAgcmVjdC5yaWdodCA9
IGRlc2MuV2lkdGg7Ci0gICAgcmVjdC5ib3R0b20gPSBkZXNjLkhlaWdodDsKLQotICAgIHJldHVy
biByZWN0OwotfQotCi1ib29sIEJsaXQ6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAq
dGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwgZ2V0U3VyZmFjZVJlY3Qoc291
cmNlKSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0g
ICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWZXJ0ZXhTaGFk
ZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLSAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFT
U1RIUk9VR0gpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLSAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5F
QVIpOwotCi0gICAgc2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOwotCi0g
ICAgcmVuZGVyKCk7Ci0KLSAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3Rh
dGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmNvcHkoSURpcmVjdDNE
U3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3Jt
YXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAg
RDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc3REZXNj
OwotICAgIHNvdXJjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7Ci0gICAgZGVzdC0+R2V0RGVzYygm
ZGVzdERlc2MpOwotCi0gICAgaWYgKHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZvcm1h
dCAmJiBkZXN0RGVzYy5Vc2FnZSAmIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkgICAvLyBDYW4gdXNl
IFN0cmV0Y2hSZWN0Ci0gICAgewotICAgICAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlv
ZmZzZXQsIHhvZmZzZXQgKyAoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCksIHlv
ZmZzZXQgKyAoc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCl9OwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCAmc291cmNlUmVjdCwg
ZGVzdCwgJmRlc3RSZWN0LCBEM0RURVhGX1BPSU5UKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2UsIHNv
dXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmZvcm1hdENvbnZlcnQoSURpcmVjdDNE
U3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3Jt
YXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KQotewotICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1
cmUoc291cmNlLCBzb3VyY2VSZWN0KTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7Ci0KLSAgICBzYXZlU3RhdGUoKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVy
ZSgwLCB0ZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKLQot
ICAgIHNldFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOwotCi0gICAgc2V0
Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RG
b3JtYXQpKQotICAgIHsKLSAgICAgICAgcmVuZGVyKCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZS0+
UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkK
LXsKLSAgICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsK
LQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAg
ICAgIGNhc2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgb2theSA9IG9r
YXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0spOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BT
X0xVTUlOQU5DRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghb2theSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsgWCA9IDAsIFkg
PSAxLCBaID0gMiwgVyA9IDMgfTsKLQotICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3Rh
bnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgotICAgIC8vIFNlZSB0
aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCi0gICAgZmxvYXQgcHND
b25zdDBbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAg
ICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAg
ICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtXXSA9IDE7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICBwc0NvbnN0MFtaXSA9
IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
cHNDb25zdDBbWV0gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgZ2V0RGV2aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3Qw
LCAxKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6
Y29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJF
Q1QgJnNvdXJjZVJlY3QpCi17Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxh
eSgpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAg
RDNEU1VSRkFDRV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNl
RGVzYyk7Ci0KLSAgICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0g
ICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291
cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LCBzb3VyY2VEZXNjLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0K
LSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSop
TlVMTCk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOwot
ICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2Up
OwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
Ci0gICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgZGlz
cGxheS0+ZW5kU2NlbmUoKTsKLSAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHN1cmZh
Y2UsICZzb3VyY2VSZWN0LCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQot
ICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1
cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9pZCBCbGl0
OjpzZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OwotCi0gICAgRDNEVklFV1BPUlQ5IHZwOwotICAgIHZwLlggICAgICA9IHhvZmZzZXQ7Ci0gICAg
dnAuWSAgICAgID0geW9mZnNldDsKLSAgICB2cC5XaWR0aCAgPSBzb3VyY2VSZWN0LnJpZ2h0IC0g
c291cmNlUmVjdC5sZWZ0OwotICAgIHZwLkhlaWdodCA9IHNvdXJjZVJlY3QuYm90dG9tIC0gc291
cmNlUmVjdC50b3A7Ci0gICAgdnAuTWluWiAgID0gMC4wZjsKLSAgICB2cC5NYXhaICAgPSAxLjBm
OwotICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZwKTsKLQotICAgIGZsb2F0IGhhbGZQaXhlbEFk
anVzdFs0XSA9IHsgLTEuMGYvdnAuV2lkdGgsIDEuMGYvdnAuSGVpZ2h0LCAwLCAwIH07Ci0gICAg
ZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwgaGFsZlBpeGVsQWRqdXN0LCAxKTsK
LX0KLQotdm9pZCBCbGl0OjpzZXRDb21tb25CbGl0U3RhdGUoKQotewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxM
TU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xP
UldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JX
UklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldS
SVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lT
U09SVEVTVEVOQUJMRSwgRkFMU0UpOwotCi0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxl
clN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7Ci0gICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xB
TVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQz
RFRBRERSRVNTX0NMQU1QKTsKLQotICAgIFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Np
c3NvcmluZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2Fw
dHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xkIHJlY3RhbmdsZQotICAgIGRldmljZS0+U2V0U2Npc3Nv
clJlY3QoJnNjaXNzb3JSZWN0KTsKLQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJl
cShpLCAxKTsKLSAgICB9Ci19Ci0KLXZvaWQgQmxpdDo6cmVuZGVyKCkKLXsKLSAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5TZXRTdHJlYW1T
b3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBo
ciA9IGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7
Ci0KLSAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgaHIgPSBkZXZpY2UtPkRyYXdQcmlt
aXRpdmUoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMCwgMik7Ci19Ci0KLXZvaWQgQmxpdDo6c2F2ZVN0
YXRlKCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQot
ICAgIEhSRVNVTFQgaHI7Ci0KLSAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1T
YXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZl
ZFJlbmRlclRhcmdldCk7Ci0KLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQotICAg
IHsKLSAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9
PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKLQotICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9Owot
Ci0gICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2Ut
PlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLSAgICAgICAgZGV2
aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRl
ckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLQotICAgICAgICBEM0RWSUVXUE9SVDkgZHVt
bXlWcDsKLSAgICAgICAgZHVtbXlWcC5YID0gMDsKLSAgICAgICAgZHVtbXlWcC5ZID0gMDsKLSAg
ICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7Ci0gICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKLSAg
ICAgICAgZHVtbXlWcC5NaW5aID0gMDsKLSAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKLQotICAg
ICAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKLQotICAgICAgICBkZXZpY2UtPlNl
dFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwg
bVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDApOwotCi0gICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVj
bGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICAgICAgaHIgPSBkZXZpY2Ut
PkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsK
LQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBociA9
IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQotewotICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0
aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgaWYgKG1TYXZlZERlcHRo
U3RlbmNpbCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TYXZlZERlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
ZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAo
bVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRSZW5kZXJU
YXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAgIGlmICht
U2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRTdGF0ZUJsb2Nr
LT5BcHBseSgpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0JsaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyOGVjZC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfQkxJVF9IXwotI2RlZmluZSBMSUJHTEVTVjJfQkxJVF9IXwotCi0jaW5jbHVkZSA8bWFwPgot
Ci0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUg
PGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBn
bAotewotY2xhc3MgQ29udGV4dDsKLQotY2xhc3MgQmxpdAotewotICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgQmxpdChDb250ZXh0ICpjb250ZXh0KTsKLSAgICB+QmxpdCgpOwotCi0gICAgLy8gQ29w
eSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3VyY2VSZWN0
LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1s
ZWZ0KQotICAgIGJvb2wgY29weShJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwotCi0gICAgLy8gQ29weSBmcm9tIHNvdXJj
ZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5
b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQotICAgIC8v
IHNvdXJjZSBpcyBpbnRlcnByZXRlZCBhcyBSR0JBIGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmllcyB0
aGUgZGVzaXJlZCByZXN1bHQgZm9ybWF0LiBGb3IgZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9IEdM
X1JHQiwgdGhlIGFscGhhIGNoYW5uZWwgd2lsbCBiZSBmb3JjZWQgdG8gMC4KLSAgICBib29sIGZv
cm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKLQotICAgIC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBsZSBm
cm9tIHNvdXJjZSB0byBkZXN0LgotICAgIC8vIFJlcXVpcmVzIHRoYXQgc291cmNlIGlzIFJHQihB
KSBhbmQgZGVzdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHNvdXJjZS4KLSAgICBib29sIGJveEZp
bHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7
Ci0KLSAgcHJpdmF0ZToKLSAgICBDb250ZXh0ICptQ29udGV4dDsKLQotICAgIElEaXJlY3QzRFZl
cnRleEJ1ZmZlcjkgKm1RdWFkVmVydGV4QnVmZmVyOwotICAgIElEaXJlY3QzRFZlcnRleERlY2xh
cmF0aW9uOSAqbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbjsKLQotICAgIHZvaWQgaW5pdEdlb21ldHJ5
KCk7Ci0KLSAgICBib29sIHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0
KTsKLQotICAgIElEaXJlY3QzRFRleHR1cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCk7Ci0gICAgdm9pZCBz
ZXRWaWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0KTsKLSAgICB2b2lkIHNldENvbW1vbkJsaXRTdGF0ZSgpOwotICAgIFJFQ1QgZ2V0U3Vy
ZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0OwotCi0gICAgLy8gVGhp
cyBlbnVtIGlzIHVzZWQgdG8gaW5kZXggbUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNvdXJj
ZS4KLSAgICBlbnVtIFNoYWRlcklkCi0gICAgewotICAgICAgICBTSEFERVJfVlNfU1RBTkRBUkQs
Ci0gICAgICAgIFNIQURFUl9WU19GTElQWSwKLSAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJPVUdI
LAotICAgICAgICBTSEFERVJfUFNfTFVNSU5BTkNFLAotICAgICAgICBTSEFERVJfUFNfQ09NUE9O
RU5UTUFTSywKLSAgICAgICAgU0hBREVSX0NPVU5UCi0gICAgfTsKLQotICAgIHN0YXRpYyBjb25z
dCBjaGFyICogY29uc3QgbVNoYWRlclNvdXJjZVtdOwotCi0gICAgLy8gVGhpcyBhY3R1YWxseSBj
b250YWlucyBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5IG9yIElEaXJlY3QzRFBpeGVsU2hhZGVyOSBj
YXN0ZWQgdG8gSVVua25vd24uCi0gICAgSVVua25vd24gKm1Db21waWxlZFNoYWRlcnNbU0hBREVS
X0NPVU5UXTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotICAgIGJvb2wg
c2V0U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAg
ICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KmNyZWF0ZVNoYWRl
cikoY29uc3QgRFdPUkQgKiwgRDNEU2hhZGVyVHlwZSAqKiksCi0gICAgICAgICAgICAgICAgICAg
SFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5
cGUqKSk7Ci0KLSAgICBib29sIHNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOwotICAg
IGJvb2wgc2V0UGl4ZWxTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKLSAgICB2b2lkIHJlbmRlcigp
OwotCi0gICAgdm9pZCBzYXZlU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOwotICAg
IElEaXJlY3QzRFN0YXRlQmxvY2s5ICptU2F2ZWRTdGF0ZUJsb2NrOwotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICptU2F2ZWRSZW5kZXJUYXJnZXQ7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZl
ZERlcHRoU3RlbmNpbDsKLQotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsKLX07
Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9CTElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRkMTJlM2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpC
dWZmZXIgY2xhc3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKLS8vIGlu
ZGV4IGRhdGEuIEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rp
b25hbGl0eS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotQnVmZmVy
OjpCdWZmZXIoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQotewotICAgIG1Db250ZW50
cyA9IE5VTEw7Ci0gICAgbVNpemUgPSAwOwotICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsK
LQotICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZl
ciA9IE5VTEw7Ci0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKLX0KLQotQnVmZmVyOjp+QnVm
ZmVyKCkKLXsKLSAgICBkZWxldGVbXSBtQ29udGVudHM7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0
ZXhCdWZmZXI7Ci0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKLX0KLQotdm9pZCBCdWZm
ZXI6OmJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0g
dXNhZ2UpCi17Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1D
b250ZW50czsKLSAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
c2l6ZSAhPSBtU2l6ZSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLSAgICAg
ICAgbUNvbnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07Ci0gICAgICAgIG1lbXNldChtQ29udGVu
dHMsIDAsIHNpemUpOwotICAgIH0KLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSA+IDAp
Ci0gICAgewotICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBzaXplKTsKLSAgICB9Ci0K
LSAgICBtU2l6ZSA9IHNpemU7Ci0gICAgbVVzYWdlID0gdXNhZ2U7Ci0KLSAgICBpbnZhbGlkYXRl
U3RhdGljRGF0YSgpOwotCi0gICAgaWYgKHVzYWdlID09IEdMX1NUQVRJQ19EUkFXKQotICAgIHsK
LSAgICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0
RGV2aWNlKCkpOwotICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhC
dWZmZXIoZ2V0RGV2aWNlKCkpOwotICAgIH0KLX0KLQotdm9pZCBCdWZmZXI6OmJ1ZmZlclN1YkRh
dGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpCi17
Ci0gICAgbWVtY3B5KG1Db250ZW50cyArIG9mZnNldCwgZGF0YSwgc2l6ZSk7Ci0gICAgCi0gICAg
aWYgKChtU3RhdGljVmVydGV4QnVmZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPnNpemUoKSAh
PSAwKSB8fCAobVN0YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+c2l6ZSgp
ICE9IDApKQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Ci0K
LSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXIgKkJ1
ZmZlcjo6Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRpY1ZlcnRl
eEJ1ZmZlcjsKLX0KLQotU3RhdGljSW5kZXhCdWZmZXIgKkJ1ZmZlcjo6Z2V0U3RhdGljSW5kZXhC
dWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGljSW5kZXhCdWZmZXI7Ci19Ci0KLXZvaWQgQnVm
ZmVyOjppbnZhbGlkYXRlU3RhdGljRGF0YSgpCi17Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhC
dWZmZXI7Ci0gICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVN0
YXRpY0luZGV4QnVmZmVyOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBt
VW5tb2RpZmllZERhdGFVc2UgPSAwOwotfQotCi0vLyBDcmVhdGVzIHN0YXRpYyBidWZmZXJzIGlm
IHN1ZmZpY2llbnQgdXNlZCBkYXRhIGhhcyBiZWVuIGxlZnQgdW5tb2RpZmllZAotdm9pZCBCdWZm
ZXI6OnByb21vdGVTdGF0aWNVc2FnZShpbnQgZGF0YVNpemUpCi17Ci0gICAgaWYgKCFtU3RhdGlj
VmVydGV4QnVmZmVyICYmICFtU3RhdGljSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVW5t
b2RpZmllZERhdGFVc2UgKz0gZGF0YVNpemU7Ci0KLSAgICAgICAgaWYgKG1Vbm1vZGlmaWVkRGF0
YVVzZSA+IDMgKiBtU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRpY1ZlcnRleEJ1
ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOwotICAgICAgICAgICAg
bVN0YXRpY0luZGV4QnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKGdldERldmljZSgpKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTlj
NGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9C
dWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIEJ1ZmZlci5oOiBEZWZpbmVzIHRoZSBnbDo6QnVmZmVyIGNsYXNzLCByZXByZXNlbnRp
bmcgc3RvcmFnZSBvZiB2ZXJ0ZXggYW5kL29yCi0vLyBpbmRleCBkYXRhLiBJbXBsZW1lbnRzIEdM
IGJ1ZmZlciBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCi0vLyBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFnZSAyMS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQlVGRkVS
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9CVUZGRVJfSF8KLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0j
aW5jbHVkZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9u
L1JlZkNvdW50T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgU3RhdGljVmVydGV4
QnVmZmVyOwotY2xhc3MgU3RhdGljSW5kZXhCdWZmZXI7Ci0KLWNsYXNzIEJ1ZmZlciA6IHB1Ymxp
YyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQnVmZmVyKEdMdWlu
dCBpZCk7Ci0KLSAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShj
b25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7Ci0gICAgdm9p
ZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRw
dHIgb2Zmc2V0KTsKLQotICAgIHZvaWQgKmRhdGEoKSB7IHJldHVybiBtQ29udGVudHM7IH0KLSAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9Ci0gICAgR0xlbnVtIHVzYWdl
KCkgY29uc3QgeyByZXR1cm4gbVVzYWdlOyB9Ci0KLSAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKmdl
dFN0YXRpY1ZlcnRleEJ1ZmZlcigpOwotICAgIFN0YXRpY0luZGV4QnVmZmVyICpnZXRTdGF0aWNJ
bmRleEJ1ZmZlcigpOwotICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB2b2lk
IHByb21vdGVTdGF0aWNVc2FnZShpbnQgZGF0YVNpemUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1ZmZlcik7Ci0KLSAgICBHTHVieXRlICptQ29udGVudHM7
Ci0gICAgR0xzaXplaXB0ciBtU2l6ZTsKLSAgICBHTGVudW0gbVVzYWdlOwotCi0gICAgU3RhdGlj
VmVydGV4QnVmZmVyICptU3RhdGljVmVydGV4QnVmZmVyOwotICAgIFN0YXRpY0luZGV4QnVmZmVy
ICptU3RhdGljSW5kZXhCdWZmZXI7Ci0gICAgR0xzaXplaXB0ciBtVW5tb2RpZmllZERhdGFVc2U7
Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9CVUZGRVJfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2ZWM2MDc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
MzM5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbnRleHQuY3BwOiBJbXBsZW1l
bnRzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJm
b3JtaW5nCi0vLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmlj
IGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29u
dGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3Bs
YXkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRmVu
Y2UuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1
ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvVGV4dHVyZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLSN1bmRlZiBuZWFyCi0j
dW5kZWYgZmFyCi0KLW5hbWVzcGFjZSBnbAotewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpCi17Ci0gICAg
QVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAotCi0gICAg
bURpc3BsYXkgPSBOVUxMOwotICAgIG1EZXZpY2UgPSBOVUxMOwotCi0gICAgbUZlbmNlSGFuZGxl
QWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7Ci0KLSAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAu
MGYsIDAuMGYsIDAuMGYpOwotCi0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7Ci0g
ICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsKLQotICAgIG1TdGF0ZS5jdWxsRmFjZSA9
IGZhbHNlOwotICAgIG1TdGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7Ci0gICAgbVN0YXRlLmZyb250
RmFjZSA9IEdMX0NDVzsKLSAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRl
LmRlcHRoRnVuYyA9IEdMX0xFU1M7Ci0gICAgbVN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgbVN0
YXRlLnNvdXJjZUJsZW5kUkdCID0gR0xfT05FOwotICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhh
ID0gR0xfT05FOwotICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIG1TdGF0
ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0Ig
PSBHTF9GVU5DX0FERDsKLSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19B
REQ7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IucmVkID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xv
ci5ncmVlbiA9IDA7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IDA7Ci0gICAgbVN0YXRl
LmJsZW5kQ29sb3IuYWxwaGEgPSAwOwotICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOwot
ICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBtU3RhdGUuc3RlbmNpbFJl
ZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxX
cml0ZW1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOwot
ICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFz
ayA9IC0gMTsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsKLSAgICBtU3Rh
dGUuc3RlbmNpbEZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFp
bCA9IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsK
LSAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzID0gR0xfS0VFUDsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxz
ZTsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciA9IDAuMGY7Ci0gICAgbVN0YXRlLnBv
bHlnb25PZmZzZXRVbml0cyA9IDAuMGY7Ci0gICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFn
ZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGZhbHNlOwotICAgIG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJ
bnZlcnQgPSBmYWxzZTsKLSAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBmYWxzZTsKLSAgICBtU3Rh
dGUuZGl0aGVyID0gdHJ1ZTsKLSAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9O
VF9DQVJFOwotICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gR0xfRE9O
VF9DQVJFOwotCi0gICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7Ci0KLSAgICBtU3RhdGUudmll
d3BvcnRYID0gMDsKLSAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAgICBtU3RhdGUudmlld3Bv
cnRXaWR0aCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLldpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9y
dEhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsKLSAgICBtU3RhdGUuek5lYXIg
PSAwLjBmOwotICAgIG1TdGF0ZS56RmFyID0gMS4wZjsKLQotICAgIG1TdGF0ZS5zY2lzc29yWCA9
IDA7Ci0gICAgbVN0YXRlLnNjaXNzb3JZID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0g
Y29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBj
b25maWctPm1EaXNwbGF5TW9kZS5IZWlnaHQ7Ci0KLSAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0g
dHJ1ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xv
ck1hc2tCbHVlID0gdHJ1ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwotICAg
IG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVlOwotCi0gICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxM
KQotICAgIHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291
cmNlTWFuYWdlcjsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VN
YW5hZ2VyKCk7Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43
IHBhZ2UgODM6Ci0gICAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRF
WFRVUkVfQ1VCRV9NQVAgaGF2ZSB0d29kaW1lbnNpb25hbAotICAgIC8vIGFuZCBjdWJlIG1hcCB0
ZXh0dXJlIHN0YXRlIHZlY3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgot
ICAgIC8vIEluIG9yZGVyIHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90
IGJlIGxvc3QsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQotICAgIC8vIG9iamVjdHMgYWxs
IG9mIHdob3NlIG5hbWVzIGFyZSAwLgotCi0gICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0
dXJlMkQoMCkpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1h
cCgwKSk7Ci0KLSAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7Ci0gICAgYmluZEFycmF5QnVm
ZmVyKDApOwotICAgIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZFRleHR1cmVD
dWJlTWFwKDApOwotICAgIGJpbmRUZXh0dXJlMkQoMCk7Ci0gICAgYmluZFJlYWRGcmFtZWJ1ZmZl
cigwKTsKLSAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIGJpbmRSZW5kZXJidWZmZXIo
MCk7Ci0KLSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwotCi0gICAgbVN0YXRlLnBhY2tB
bGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0
ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIg
PSBOVUxMOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtQmxpdCA9IE5VTEw7
Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0g
ICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOwotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7
Ci0gICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJh
dGlvbiA9IGZhbHNlOwotCi0gICAgbUhhc0JlZW5DdXJyZW50ID0gZmFsc2U7Ci0gICAgbUNvbnRl
eHRMb3N0ID0gZmFsc2U7Ci0gICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJST1I7Ci0gICAgbVJl
c2V0U3RyYXRlZ3kgPSAobm90aWZ5UmVzZXRzID8gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VY
VCA6IEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQpOwotICAgIG1Sb2J1c3RBY2Nlc3MgPSBy
b2J1c3RBY2Nlc3M7Ci0KLSAgICBtU3VwcG9ydHNEWFQxVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBt
U3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMg
PSBmYWxzZTsKLSAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9y
dHNPY2NsdXNpb25RdWVyaWVzID0gZmFsc2U7Ci0gICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9y
bWF0cyA9IDA7Ci0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIG1NYXNrZWRDbGVh
clNhdmVkU3RhdGUgPSBOVUxMOwotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLUNvbnRl
eHQ6On5Db250ZXh0KCkKLXsKLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApCi0g
ICAgewotICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+
Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOwotICAgICAgICBpZiAocHJvZ3JhbU9i
amVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOwot
ICAgICAgICB9Ci0gICAgICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKCFtRnJhbWVidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNl
KG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUXVlcnlN
YXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigp
LT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5
KCkpCi0gICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigp
LT5zZWNvbmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxl
U3VwcG9ydC5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8
IFRFWFRVUkVfVFlQRV9DT1VOVDsgdHlwZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgc2Ft
cGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7
IHNhbXBsZXIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJl
W3R5cGVdW3NhbXBsZXJdLnNldChOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo
aW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewot
ICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxMKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwot
ICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0K
LSAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwot
Ci0gICAgbVRleHR1cmUyRFplcm8uc2V0KE5VTEwpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8u
c2V0KE5VTEwpOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBkZWxldGUg
bUluZGV4RGF0YU1hbmFnZXI7Ci0gICAgZGVsZXRlIG1CbGl0OwotICAgIGRlbGV0ZSBtTGluZUxv
b3BJQjsKLQotICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAg
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1SZXNvdXJj
ZU1hbmFnZXItPnJlbGVhc2UoKTsKLX0KLQotdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBtRGlzcGxh
eSA9IGRpc3BsYXk7Ci0gICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAg
IGlmICghbUhhc0JlZW5DdXJyZW50KQotICAgIHsKLSAgICAgICAgbURldmljZUNhcHMgPSBtRGlz
cGxheS0+Z2V0RGV2aWNlQ2FwcygpOwotCi0gICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5l
dyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUluZGV4RGF0YU1h
bmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUJs
aXQgPSBuZXcgQmxpdCh0aGlzKTsKLQotICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBt
RGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKLSAg
ICAgICAgbVN1cHBvcnRzVmVydGV4VGV4dHVyZSA9IG1EaXNwbGF5LT5nZXRWZXJ0ZXhUZXh0dXJl
U3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0gbURpc3BsYXkt
PmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0luc3RhbmNp
bmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKLQotICAgICAgICBtTWF4VGV4
dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmljZUNhcHMuTWF4VGV4
dHVyZVdpZHRoLCAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX1NJWkUpOwotICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6
Om1pbihtTWF4VGV4dHVyZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NV
QkVfTUFQX1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24g
PSBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIo
bU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsKLSAgICAgICAgVFJBQ0UoIk1heFRleHR1cmVEaW1l
bnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhSZW5kZXJidWZmZXJEaW1l
bnNpb249JWQsIE1heFRleHR1cmVMZXZlbD0lZCIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJl
RGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1l
bnNpb24sIG1NYXhUZXh0dXJlTGV2ZWwpOwotCi0gICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5k
ZXJCdWZmZXJGb3JtYXRzW10gPQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGTVRfQThSOEc4
QjgsCi0gICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVH
NkI1LAotICAgICAgICAgICAgRDNERk1UX0QyNFM4Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW50
IG1heCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHJlbmRlckJ1ZmZl
ckZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7ICsraSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NB
TVBMRVMgKyAxXTsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQo
cmVuZGVyQnVmZmVyRm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBt
TXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVB
cnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0
aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+
IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbU1h
eFN1cHBvcnRlZFNhbXBsZXMgPSBtYXg7Ci0KLSAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVz
ID0gbURpc3BsYXktPmdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c09j
Y2x1c2lvblF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7Ci0g
ICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1
cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERY
VDNUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtRGlz
cGxheS0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJU
ZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zs
b2F0MzJMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsK
LSAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZU
ZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBt
U3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1E
aXNwbGF5LT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7Ci0KLSAgICAgICAgbVN1cHBvcnRzMzJi
aXRJbmRpY2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwotCi0g
ICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOwotICAgICAgICBpZiAoc3Vw
cG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbU51bUNvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0cyArPSAyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdXBwb3J0c0RY
VDNUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1
cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1h
dHMgKz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAg
ICAgICAgaW5pdFJlbmRlcmVyU3RyaW5nKCk7Ci0KLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0WCA9
IDA7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOwotICAgICAgICBtU3RhdGUudmlld3Bv
cnRXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydEhl
aWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9
IDA7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29y
V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdo
dCA9IHN1cmZhY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgIG1IYXNCZWVuQ3VycmVudCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gV3JhcCB0aGUgZXhpc3RpbmcgRGlyZWN0M0QgOSByZXNvdXJj
ZXMgaW50byBHTCBvYmplY3RzIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgJzAnIG5hbWVzCi0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKmRlZmF1bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5k
ZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gc3VyZmFj
ZS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJv
ID0gbmV3IENvbG9yYnVmZmVyKGRlZmF1bHRSZW5kZXJUYXJnZXQpOwotICAgIERlcHRoU3RlbmNp
bGJ1ZmZlciAqZGVwdGhTdGVuY2lsYnVmZmVyWmVybyA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIo
ZGVwdGhTdGVuY2lsKTsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IERl
ZmF1bHRGcmFtZWJ1ZmZlcihjb2xvcmJ1ZmZlclplcm8sIGRlcHRoU3RlbmNpbGJ1ZmZlclplcm8p
OwotCi0gICAgc2V0RnJhbWVidWZmZXJaZXJvKGZyYW1lYnVmZmVyWmVybyk7Ci0KLSAgICBpZiAo
ZGVmYXVsdFJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAg
ICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIG1hcmtBbGxTdGF0
ZURpcnR5KCk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0
ZS1yZWxhdGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5l
eHQgcHJlLWRyYXcuCi12b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKLXsKLSAgICBm
b3IgKGludCB0ID0gMDsgdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspCi0gICAgewot
ICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxQU1t0XSA9IDA7Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgdCA9IDA7IHQgPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyB0Kysp
Ci0gICAgewotICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxWU1t0XSA9IDA7Ci0gICAgfQot
Ci0gICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFJlbmRlclRhcmdl
dFNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbUFw
cGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZElCU2VyaWFsID0gMDsK
LSAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtVmlld3BvcnRJbml0
aWFsaXplZCA9IGZhbHNlOwotICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKLQotICAgIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7Ci0KLSAg
ICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1TY2lzc29y
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1E
aXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAg
IG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5V
TEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpCi17Ci0gICAgbUR4
VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0
KCkKLXsKLSAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VU
X0VYVCkKLSAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VY
VDsKLSAgICBtQ29udGV4dExvc3QgPSB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmlzQ29udGV4
dExvc3QoKQotewotICAgIHJldHVybiBtQ29udGV4dExvc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6
c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBh
bHBoYSkKLXsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKLSAgICBtU3Rh
dGUuY29sb3JDbGVhclZhbHVlLmdyZWVuID0gZ3JlZW47Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJW
YWx1ZS5ibHVlID0gYmx1ZTsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhID0gYWxw
aGE7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q2xlYXJEZXB0aChmbG9hdCBkZXB0aCkKLXsKLSAg
ICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKQotewotICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1
ZSA9IHN0ZW5jaWw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVk
KQotewotICAgIGlmIChtU3RhdGUuY3VsbEZhY2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5jdWxsRmFjZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRy
dWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1
bGxNb2RlKEdMZW51bSBtb2RlKQotewotICAgIGlmIChtU3RhdGUuY3VsbE1vZGUgIT0gbW9kZSkK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5jdWxsTW9kZSA9IG1vZGU7Ci0gICAgICAgIG1DdWxsU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEZyb250RmFjZShH
TGVudW0gZnJvbnQpCi17Ci0gICAgaWYgKG1TdGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpCi0gICAg
ewotICAgICAgICBtU3RhdGUuZnJvbnRGYWNlID0gZnJvbnQ7Ci0gICAgICAgIG1Gcm9udEZhY2VE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoVGVzdChib29s
IGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBlbmFibGVkOwotICAgICAgICBtRGVwdGhTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNEZXB0aFRlc3RFbmFi
bGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLmRlcHRoVGVzdDsKLX0KLQotdm9pZCBD
b250ZXh0OjpzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYykKLXsKLSAgICBpZiAobVN0YXRl
LmRlcHRoRnVuYyAhPSBkZXB0aEZ1bmMpCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhGdW5j
ID0gZGVwdGhGdW5jOwotICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcikK
LXsKLSAgICBtU3RhdGUuek5lYXIgPSB6TmVhcjsKLSAgICBtU3RhdGUuekZhciA9IHpGYXI7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3Rh
dGUuYmxlbmQgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZCA9IGVuYWJs
ZWQ7Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBD
b250ZXh0Ojppc0JsZW5kRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5ibGVu
ZDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwg
R0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSkKLXsK
LSAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IHNvdXJjZVJHQiB8fAotICAgICAgICBt
U3RhdGUuc291cmNlQmxlbmRBbHBoYSAhPSBzb3VyY2VBbHBoYSB8fAotICAgICAgICBtU3RhdGUu
ZGVzdEJsZW5kUkdCICE9IGRlc3RSR0IgfHwKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhh
ICE9IGRlc3RBbHBoYSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNv
dXJjZVJHQjsKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IGRlc3RSR0I7Ci0gICAgICAg
IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gc291cmNlQWxwaGE7Ci0gICAgICAgIG1TdGF0ZS5k
ZXN0QmxlbmRBbHBoYSA9IGRlc3RBbHBoYTsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRy
dWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBm
bG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5i
bGVuZENvbG9yLnJlZCAhPSByZWQgfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4g
IT0gZ3JlZW4gfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhICE9IGFscGhhKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLmJsZW5kQ29sb3IucmVkID0gcmVkOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5n
cmVlbiA9IGdyZWVuOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gYmx1ZTsKLSAg
ICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbUJsZW5kU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kRXF1YXRp
b24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbikKLXsKLSAgICBpZiAo
bVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgIT0gcmdiRXF1YXRpb24gfHwKLSAgICAgICAgbVN0YXRl
LmJsZW5kRXF1YXRpb25BbHBoYSAhPSBhbHBoYUVxdWF0aW9uKQotICAgIHsKLSAgICAgICAgbVN0
YXRlLmJsZW5kRXF1YXRpb25SR0IgPSByZ2JFcXVhdGlvbjsKLSAgICAgICAgbVN0YXRlLmJsZW5k
RXF1YXRpb25BbHBoYSA9IGFscGhhRXF1YXRpb247Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsVGVzdChib29sIGVu
YWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAhPSBlbmFibGVkKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZW5hYmxlZDsKLSAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTdGVuY2lsVGVz
dEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc3RlbmNpbFRlc3Q7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50
IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVuY2lsTWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5j
aWxGdW5jICE9IHN0ZW5jaWxGdW5jIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0
ZW5jaWxSZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IHN0ZW5jaWxNYXNrKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0gc3RlbmNpbEZ1bmM7Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsUmVmID0gKHN0ZW5jaWxSZWYgPiAwKSA/IHN0ZW5jaWxSZWYgOiAwOwot
ICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgPSBzdGVuY2lsTWFzazsKLSAgICAgICAgbVN0ZW5j
aWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNp
bEJhY2tQYXJhbXMoR0xlbnVtIHN0ZW5jaWxCYWNrRnVuYywgR0xpbnQgc3RlbmNpbEJhY2tSZWYs
IEdMdWludCBzdGVuY2lsQmFja01hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1
bmMgIT0gc3RlbmNpbEJhY2tGdW5jIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiAh
PSBzdGVuY2lsQmFja1JlZiB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrICE9IHN0
ZW5jaWxCYWNrTWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBz
dGVuY2lsQmFja0Z1bmM7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IChzdGVuY2ls
QmFja1JlZiA+IDApID8gc3RlbmNpbEJhY2tSZWYgOiAwOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tNYXNrID0gc3RlbmNpbEJhY2tNYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKEdM
dWludCBzdGVuY2lsV3JpdGVtYXNrKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFz
ayAhPSBzdGVuY2lsV3JpdGVtYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxXcml0
ZW1hc2sgPSBzdGVuY2lsV3JpdGVtYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0
cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayhH
THVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFj
a1dyaXRlbWFzayAhPSBzdGVuY2lsQmFja1dyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgICAgICBt
U3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRT
dGVuY2lsT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0Rl
cHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQotewotICAgIGlmIChtU3RhdGUu
c3RlbmNpbEZhaWwgIT0gc3RlbmNpbEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNz
RGVwdGhGYWlsICE9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVu
Y2lsUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsRmFpbCA9IHN0ZW5jaWxGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bFBhc3NEZXB0aEZhaWwgPSBzdGVuY2lsUGFzc0RlcHRoRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0
ZW5jaWxQYXNzRGVwdGhQYXNzID0gc3RlbmNpbFBhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1TdGVu
Y2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5j
aWxCYWNrT3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotewotICAg
IGlmIChtU3RhdGUuc3RlbmNpbEJhY2tGYWlsICE9IHN0ZW5jaWxCYWNrRmFpbCB8fAotICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbCB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzICE9IHN0ZW5j
aWxCYWNrUGFzc0RlcHRoUGFzcykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Zh
aWwgPSBzdGVuY2lsQmFja0ZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0
aEZhaWwgPSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2ls
QmFja1Bhc3NEZXB0aFBhc3MgPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1T
dGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFBv
bHlnb25PZmZzZXRGaWxsKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnBvbHlnb25P
ZmZzZXRGaWxsICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNl
dEZpbGwgPSBlbmFibGVkOwotICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsKLQotfQotCi12
b2lkIENvbnRleHQ6OnNldFBvbHlnb25PZmZzZXRQYXJhbXMoR0xmbG9hdCBmYWN0b3IsIEdMZmxv
YXQgdW5pdHMpCi17Ci0gICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9IGZhY3Rv
ciB8fAotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzICE9IHVuaXRzKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0b3I7Ci0gICAgICAgIG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgPSB1bml0czsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQWxw
aGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhh
VG9Db3ZlcmFnZSAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUFscGhh
VG9Db3ZlcmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLX0K
LQotdm9pZCBDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0
YXRlLnNhbXBsZUNvdmVyYWdlID0gZW5hYmxlZDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBp
bnZlcnQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8
Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCAhPSBpbnZlcnQpCi0gICAgewot
ICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA9IHZhbHVlOwotICAgICAgICBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBpbnZlcnQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3QoYm9v
bCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QgIT0gZW5hYmxlZCkKLSAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TY2lz
c29yU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2Npc3Nv
clRlc3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNjaXNzb3JUZXN0Owot
fQotCi12b2lkIENvbnRleHQ6OnNldERpdGhlcihib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1T
dGF0ZS5kaXRoZXIgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kaXRoZXIgPSBl
bmFibGVkOwotICAgICAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1i
b29sIENvbnRleHQ6OmlzRGl0aGVyRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0
ZS5kaXRoZXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgp
Ci17Ci0gICAgbVN0YXRlLmxpbmVXaWR0aCA9IHdpZHRoOwotfQotCi12b2lkIENvbnRleHQ6OnNl
dEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCkKLXsKLSAgICBtU3RhdGUuZ2VuZXJhdGVN
aXBtYXBIaW50ID0gaGludDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRl
cml2YXRpdmVIaW50KEdMZW51bSBoaW50KQotewotICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRl
cml2YXRpdmVIaW50ID0gaGludDsKLSAgICAvLyBUT0RPOiBQcm9wYWdhdGUgdGhlIGhpbnQgdG8g
c2hhZGVyIHRyYW5zbGF0b3Igc28gd2UgY2FuIHdyaXRlCi0gICAgLy8gZGR4LCBkZHhfY29hcnNl
LCBvciBkZHhfZmluZSBkZXBlbmRpbmcgb24gdGhlIGhpbnQuCi0gICAgLy8gSWdub3JlIGZvciBu
b3cuIEl0IGlzIHZhbGlkIGZvciBpbXBsZW1lbnRhdGlvbnMgdG8gaWdub3JlIGhpbnQuCi19Ci0K
LXZvaWQgQ29udGV4dDo6c2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7Ci0g
ICAgbVN0YXRlLnZpZXdwb3J0WSA9IHk7Ci0gICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0
aDsKLSAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNj
aXNzb3JZICE9IHkgfHwgCi0gICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwg
bVN0YXRlLnNjaXNzb3JIZWlnaHQgIT0gaGVpZ2h0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNj
aXNzb3JYID0geDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsKLSAgICAgICAgbVN0YXRl
LnNjaXNzb3JXaWR0aCA9IHdpZHRoOwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhl
aWdodDsKLSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1T
dGF0ZS5jb2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuY29sb3JNYXNr
Qmx1ZSAhPSBibHVlIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1h
c2tHcmVlbiA9IGdyZWVuOwotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7Ci0g
ICAgICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOwotICAgICAgICBtTWFza1N0YXRl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9v
bCBtYXNrKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCi0gICAgewotICAg
ICAgICBtU3RhdGUuZGVwdGhNYXNrID0gbWFzazsKLSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25l
ZCBpbnQgYWN0aXZlKQotewotICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOwotfQot
Ci1HTHVpbnQgQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6Omdl
dERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kcmF3
RnJhbWVidWZmZXI7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUo
KSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7Ci19Ci0KLUdM
dWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZl
UXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBO
VUxMOwotICAgIAotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5Z
X1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAg
ICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChxdWVyeU9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUFycmF5RW5hYmxl
ZCA9IGVuYWJsZWQ7Ci19Ci0KLWNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSkKLXsKLSAgICByZXR1cm4gbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZl
cnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZm
ZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2lu
dGVyKQotewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZm
ZXIuc2V0KGJvdW5kQnVmZmVyKTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVNpemUgPSBzaXplOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
VHlwZSA9IHR5cGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3Jt
YWxpemVkID0gbm9ybWFsaXplZDsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVN0cmlkZSA9IHN0cmlkZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVBvaW50ZXIgPSBwb2ludGVyOwotfQotCi1jb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlcjsKLX0KLQotY29u
c3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMoKQot
ewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOwotfQotCi12b2lkIENvbnRleHQ6
OnNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQotewotICAgIG1TdGF0ZS5wYWNrQWxp
Z25tZW50ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3Rh
dGUudW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRV
bnBhY2tBbGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25t
ZW50OwotfQotCi12b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZl
cnNlUm93T3JkZXIpCi17Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNl
Um93T3JkZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOwotfQotCi1HTHVp
bnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Y3JlYXRlQnVmZmVyKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkK
LXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUHJvZ3JhbSgpOwotfQotCi1H
THVpbnQgQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBt
UmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLUdMdWludCBDb250ZXh0
OjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRl
VGV4dHVyZSgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci19Ci0K
LS8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUKLUdMdWludCBDb250ZXh0Ojpj
cmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1GcmFtZWJ1ZmZlckhh
bmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbUZyYW1lYnVmZmVyTWFwW2hhbmRsZV0g
PSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0
ZUZlbmNlKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFs
bG9jYXRlKCk7Ci0KLSAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtRGlzcGxheSk7
Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBxdWVyeSBu
YW1lCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUXVlcnkoKQotewotICAgIEdMdWludCBoYW5kbGUg
PSBtUXVlcnlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1RdWVyeU1hcFtoYW5k
bGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVs
ZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdl
dEJ1ZmZlcihidWZmZXIpKQotICAgIHsKLSAgICAgICAgZGV0YWNoQnVmZmVyKGJ1ZmZlcik7Ci0g
ICAgfQotICAgIAotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZUJ1ZmZlcihidWZmZXIpOwot
fQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIENvbnRleHQ6
OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+
ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLSAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxM
OwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0g
ICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUodGV4dHVyZSkpCi0gICAgewotICAg
ICAgICBkZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFn
ZXItPmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQotICAgIHsKLSAgICAgICAgZGV0YWNo
UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgfQotICAgIAotICAgIG1SZXNvdXJjZU1h
bmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIENvbnRl
eHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBGcmFtZWJ1
ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXJPYmplY3QgPSBtRnJhbWVidWZmZXJNYXAuZmlu
ZChmcmFtZWJ1ZmZlcik7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QgIT0gbUZyYW1lYnVm
ZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgZGV0YWNoRnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpOwotCi0gICAgICAgIG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZyYW1l
YnVmZmVyT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGRlbGV0ZSBmcmFtZWJ1ZmZlck9iamVjdC0+
c2Vjb25kOwotICAgICAgICBtRnJhbWVidWZmZXJNYXAuZXJhc2UoZnJhbWVidWZmZXJPYmplY3Qp
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVGZW5jZShHTHVpbnQgZmVuY2UpCi17
Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVu
Y2UpOwotCi0gICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7
Ci0gICAgICAgIGRlbGV0ZSBmZW5jZU9iamVjdC0+c2Vjb25kOwotICAgICAgICBtRmVuY2VNYXAu
ZXJhc2UoZmVuY2VPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVRdWVy
eShHTHVpbnQgcXVlcnkpCi17Ci0gICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0g
bVF1ZXJ5TWFwLmZpbmQocXVlcnkpOwotICAgIGlmIChxdWVyeU9iamVjdCAhPSBtUXVlcnlNYXAu
ZW5kKCkpCi0gICAgewotICAgICAgICBtUXVlcnlIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVy
eU9iamVjdC0+Zmlyc3QpOwotICAgICAgICBpZiAocXVlcnlPYmplY3QtPnNlY29uZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcXVlcnlPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAg
ICB9Ci0gICAgICAgIG1RdWVyeU1hcC5lcmFzZShxdWVyeU9iamVjdCk7Ci0gICAgfQotfQotCi1C
dWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBt
UmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKLX0KLQotU2hhZGVyICpDb250ZXh0
OjpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Z2V0U2hhZGVyKGhhbmRsZSk7Ci19Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0o
R0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3Jh
bShoYW5kbGUpOwotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBoYW5k
bGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUoaGFuZGxlKTsK
LX0KLQotUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRs
ZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRs
ZSk7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIoKQotewot
ICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsKLX0KLQot
RnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJu
IG1Cb3VuZERyYXdGcmFtZWJ1ZmZlcjsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZm
ZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1
ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKLQotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0
QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1
ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKLQotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
c2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJE
KEdMdWludCB0ZXh0dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFs
bG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8yRCk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1
cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1
cmUpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1
cmUpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0
dXJlLCBURVhUVVJFX0NVQkUpOwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVf
Q1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKLX0K
LQotdm9pZCBDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikK
LXsKLSAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAgICAg
IG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAgICB9
Ci0KLSAgICBtU3RhdGUucmVhZEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6YmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAg
aWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAgICBtRnJhbWVi
dWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAgfQotCi0gICAg
bVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotCi0gICAgbUJvdW5kRHJhd0Zy
YW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotfQotCi12b2lkIENvbnRl
eHQ6OmJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24ocmVuZGVyYnVmZmVyKTsKLQot
ICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
KTsKLX0KLQotdm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAg
IEdMdWludCBwcmlvclByb2dyYW0gPSBtU3RhdGUuY3VycmVudFByb2dyYW07Ci0gICAgbVN0YXRl
LmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsgICAgICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBi
ZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZSwgb3RoZXJ3aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLgot
Ci0gICAgaWYgKHByaW9yUHJvZ3JhbSAhPSBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgUHJvZ3Jh
bSAqbmV3UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0g
ICAgICAgIFByb2dyYW0gKm9sZFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFt
KHByaW9yUHJvZ3JhbSk7Ci0gICAgICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7Ci0g
ICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotCi0gICAgICAgIGlmIChuZXdQcm9ncmFt
KQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXdQcm9ncmFtLT5hZGRSZWYoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKG9sZFByb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG9sZFByb2dyYW0tPnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBD
b250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSkKLXsKLSAgICAv
LyBGcm9tIEVYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbjogSWYgQmVnaW5RdWVyeUVYVCBpcyBj
YWxsZWQgd2l0aCBhbiA8aWQ+ICAKLSAgICAvLyBvZiB6ZXJvLCBpZiB0aGUgYWN0aXZlIHF1ZXJ5
IG9iamVjdCBuYW1lIGZvciA8dGFyZ2V0PiBpcyBub24temVybyAoZm9yIHRoZSAgCi0gICAgLy8g
dGFyZ2V0cyBBTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURfQ09O
U0VSVkFUSVZFX0VYVCwgaWYgIAotICAgIC8vIHRoZSBhY3RpdmUgcXVlcnkgZm9yIGVpdGhlciB0
YXJnZXQgaXMgbm9uLXplcm8pLCBpZiA8aWQ+IGlzIHRoZSBuYW1lIG9mIGFuIAotICAgIC8vIGV4
aXN0aW5nIHF1ZXJ5IG9iamVjdCB3aG9zZSB0eXBlIGRvZXMgbm90IG1hdGNoIDx0YXJnZXQ+LCBv
ciBpZiA8aWQ+IGlzIHRoZQotICAgIC8vIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgYW55
IHF1ZXJ5IHR5cGUsIHRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcwotICAgIC8vIGdlbmVy
YXRlZC4KLQotICAgIC8vIEVuc3VyZSBubyBvdGhlciBxdWVyaWVzIGFyZSBhY3RpdmUKLSAgICAv
LyBOT1RFOiBJZiBvdGhlciBxdWVyaWVzIHRoYW4gb2NjbHVzaW9uIGFyZSBzdXBwb3J0ZWQsIHdl
IHdpbGwgbmVlZCB0byBjaGVjawotICAgIC8vIHNlcGFyYXRlbHkgdGhhdDoKLSAgICAvLyAgICBh
KSBUaGUgcXVlcnkgSUQgcGFzc2VkIGlzIG5vdCB0aGUgY3VycmVudCBhY3RpdmUgcXVlcnkgZm9y
IGFueSB0YXJnZXQvdHlwZQotICAgIC8vICAgIGIpIFRoZXJlIGFyZSBubyBhY3RpdmUgcXVlcmll
cyBmb3IgdGhlIHJlcXVlc3RlZCB0YXJnZXQgKGFuZCBpbiB0aGUgY2FzZQotICAgIC8vICAgICAg
IG9mIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkVfRVhULAotICAgIC8vICAgICAgIG5vIHF1ZXJ5IG1heSBiZSBhY3RpdmUgZm9y
IGVpdGhlciBpZiBnbEJlZ2luUXVlcnkgdGFyZ2V0cyBlaXRoZXIuCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRl
LmFjdGl2ZVF1ZXJ5W2ldLmdldCgpICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBRdWVyeVR5cGUgcVR5cGU7Ci0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllf
U0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9T
QU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gZ2V0UXVlcnkocXVlcnksIHRydWUsIHRhcmdldCk7Ci0K
LSAgICAvLyBjaGVjayB0aGF0IG5hbWUgd2FzIG9idGFpbmVkIHdpdGggZ2xHZW5RdWVyaWVzCi0g
ICAgaWYgKCFxdWVyeU9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgLy8gY2hlY2sgZm9yIHR5cGUgbWlzbWF0Y2gK
LSAgICBpZiAocXVlcnlPYmplY3QtPmdldFR5cGUoKSAhPSB0YXJnZXQpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIHNl
dCBxdWVyeSBhcyBhY3RpdmUgZm9yIHNwZWNpZmllZCB0YXJnZXQKLSAgICBtU3RhdGUuYWN0aXZl
UXVlcnlbcVR5cGVdLnNldChxdWVyeU9iamVjdCk7Ci0KLSAgICAvLyBiZWdpbiBxdWVyeQotICAg
IHF1ZXJ5T2JqZWN0LT5iZWdpbigpOwotfQotCi12b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51
bSB0YXJnZXQpCi17Ci0gICAgUXVlcnlUeXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQp
Ci0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAg
cVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBx
VHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1
ZXJ5W3FUeXBlXS5nZXQoKTsKLQotICAgIGlmIChxdWVyeU9iamVjdCA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAg
ICBxdWVyeU9iamVjdC0+ZW5kKCk7Ci0KLSAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLnNl
dChOVUxMKTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZm
ZXIgKmJ1ZmZlcikKLXsKLSAgICBkZWxldGUgbUZyYW1lYnVmZmVyTWFwWzBdOwotICAgIG1GcmFt
ZWJ1ZmZlck1hcFswXSA9IGJ1ZmZlcjsKLSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9
PSAwKQotICAgIHsKLSAgICAgICAgbUJvdW5kRHJhd0ZyYW1lYnVmZmVyID0gYnVmZmVyOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZl
clN0b3JhZ2UgKnJlbmRlcmJ1ZmZlcikKLXsKLSAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
ck9iamVjdCA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuZ2V0KCk7Ci0gICAgcmVuZGVyYnVmZmVyT2Jq
ZWN0LT5zZXRTdG9yYWdlKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0
OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZyYW1lYnVmZmVy
TWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7
Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmcmFtZWJ1ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KLQotRmVuY2UgKkNvbnRleHQ6Omdl
dEZlbmNlKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZl
bmNlID0gbUZlbmNlTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VN
YXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZlbmNlLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1RdWVyeSAq
Q29udGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51
bSB0eXBlKQotewotICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeSA9IG1RdWVyeU1hcC5maW5k
KGhhbmRsZSk7Ci0KLSAgICBpZiAocXVlcnkgPT0gbVF1ZXJ5TWFwLmVuZCgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICgh
cXVlcnktPnNlY29uZCAmJiBjcmVhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5LT5z
ZWNvbmQgPSBuZXcgUXVlcnkoaGFuZGxlLCB0eXBlKTsKLSAgICAgICAgICAgIHF1ZXJ5LT5zZWNv
bmQtPmFkZFJlZigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBxdWVyeS0+c2Vjb25kOwot
ICAgIH0KLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0
dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRF
bGVtZW50QXJyYXlCdWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVm
ZmVyLmdldCgpOwotfQotCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCi17
Ci0gICAgaWYgKCFtQ2FjaGVkQ3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICBtQ2FjaGVk
Q3VycmVudFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJy
ZW50UHJvZ3JhbSk7Ci0gICAgfQotICAgIHJldHVybiBtQ2FjaGVkQ3VycmVudFByb2dyYW07Ci19
Ci0KLVRleHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dHVyZTJEKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBs
ZXIsIFRFWFRVUkVfMkQpKTsKLX0KLQotVGV4dHVyZUN1YmVNYXAgKkNvbnRleHQ6OmdldFRleHR1
cmVDdWJlTWFwKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihn
ZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJFKSk7Ci19
Ci0KLVRleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1w
bGVyLCBUZXh0dXJlVHlwZSB0eXBlKQotewotICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpOwotCi0gICAgaWYgKHRleGlkID09IDApICAg
Ly8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBi
YXNlZCBvbiB0aGUgdGFyZ2V0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAg
IHsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgIGNhc2UgVEVY
VFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOwotICAgICAgICAgIGNhc2UgVEVY
VFVSRV9DVUJFOiByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVyby5nZXQoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0u
Z2V0KCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJv
b2xlYW4gKnBhcmFtcykKLXsKLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfU0hBREVSX0NPTVBJTEVSOiAgICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0Vf
SU5WRVJUOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhNYXNrOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQ09MT1JfV1JJVEVNQVNLOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JNYXNr
UmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JNYXNrR3JlZW47Ci0gICAgICAg
IHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvck1hc2tCbHVlOwotICAgICAgICBwYXJhbXNbM10gPSBt
U3RhdGUuY29sb3JNYXNrQWxwaGE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0U6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7ICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgKnBhcmFtcyA9IG1TdGF0
ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1Q
TEVfQ09WRVJBR0U6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc2Npc3NvclRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zdGVuY2lsVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBU
SF9URVNUOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQ7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kaXRoZXI7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05U
RVhUX1JPQlVTVF9BQ0NFU1NfRVhUOiAqcGFyYW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUg
OiBHTF9GQUxTRTsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0RmxvYXR2
KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBE
RVBUSF9DTEVBUl9WQUxVRSBpcyBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0RmxvYXR2IGlt
cGxlbWVudGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVz
cGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8vIEdldElu
dGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUg
Y29udmVyc2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZl
cmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uCi0gICAgc3dpdGNoIChwbmFtZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5saW5lV2lkdGg7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlH
T05fT0ZGU0VUX0ZBQ1RPUjogICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9y
OyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
SUFTRURfTElORV9XSURUSF9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURf
TElORV9XSURUSF9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElBU0VEX0xJ
TkVfV0lEVEhfUkFOR0VfTUFYOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0gc3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKSA/IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMyA6IGdsOjpBTElBU0VE
X1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0RFUFRIX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7Ci0gICAgICAg
IHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUucmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdy
ZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWU7Ci0g
ICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKLSAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLmJsZW5kQ29sb3IucmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRD
b2xvci5ncmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsK
LSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFM
VUUgaXMgbm90IGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRh
dGlvbgotICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhl
IGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKLSAgICAvLyBHZXRJbnRlZ2VydiBh
cyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNp
b24gaW4gYW55Ci0gICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRv
IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gCi0gICAgLy8gQ29u
dGV4dDo6Z2V0RmxvYXR2LgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBH
TF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9S
UzogICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUzogKnBhcmFtcyA9IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBh
cmFtcyA9IGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtRnJh
Z21lbnRVbmlmb3JtVmVjdG9ycygpOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfUkVOREVS
QlVGRkVSX1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZP
Uk1BVFM6ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8q
IG5vIHNoYWRlciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRl
LmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RS
QVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElO
R19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1BBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBh
Y2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19S
RVZFUlNFX1JPV19PUkRFUl9BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VS
b3dPcmRlcjsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5U
OiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6
ICpwYXJhbXMgPSBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbEZ1bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1JFRjogICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFT
SzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxNYXNrOyAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bEZhaWw7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
RmFpbDsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9Q
QVNTOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsOyAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7ICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhGdW5j
OyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdC
OiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZFJHQjsgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJs
ZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRf
RVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlv
bkFscGhhOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFT
SzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrOyAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVRl
eHR1cmVEaW1lbnNpb24oKTsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVE
aW1lbnNpb24oKTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFM6ICAgCi0gICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdM
RToKLSAgICAgICAgewotICAgICAgICAgICAgR0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3Vw
cG9ydGVkU2FtcGxlcygpOwotICAgICAgICAgICAgaWYgKG1heFNhbXBsZXMgIT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gbWF4U2FtcGxlczsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAKLSAg
ICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgaWYg
KGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAxOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBm
cmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIAotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZ
UEU7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9S
TUFUOiAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGlt
ZW5zaW9uKCksIGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkpOwotICAgICAgICAgICAgcGFy
YW1zWzBdID0gbWF4RGltZW5zaW9uOwotICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5z
aW9uOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1RFWFRVUkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhU
MVRleHR1cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0g
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgICAgICAqcGFyYW1z
KysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKLSAgICAgICAgcGFyYW1zWzBdID0g
bVN0YXRlLnZpZXdwb3J0WDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsK
LSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnZpZXdwb3J0V2lkdGg7Ci0gICAgICAgIHBhcmFt
c1szXSA9IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NDSVNTT1JfQk9YOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7Ci0g
ICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsKLSAgICAgICAgcGFyYW1zWzJdID0g
bVN0YXRlLnNjaXNzb3JXaWR0aDsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnNjaXNzb3JI
ZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERTogICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsTW9kZTsgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SRURfQklUUzoKLSAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKLSAgICAgIGNhc2Ug
R0xfQkxVRV9CSVRTOgotICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXIpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1JFRF9CSVRTOiAgICpwYXJhbXMgPSBj
b2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9HUkVFTl9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEdyZWVuU2l6ZSgpOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOiAgKnBhcmFtcyA9IGNv
bG9yYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7IGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoK
LSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdl
dERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYg
KGRlcHRoYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBk
ZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
QklUUzoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
c3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChzdGVuY2lsYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
U3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnZXRNYXhp
bXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJ
TkdfQ1VCRV9NQVA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2Ft
cGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnZXRNYXhpbXVtQ29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0
dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVH
WV9FWFQ6Ci0gICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKLSAgICAgICAg
KnBhcmFtcyA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFS
WV9GT1JNQVRTX09FUzoKLSAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xF
OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBh
cmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVt
UGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBm
b3IgREVQVEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGlzIEZM
T0FUIHJhdGhlciB0aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAy
LjAgc3BlYy4gVGhpcyBpcyBkdWUKLSAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3Jl
ZCBpbnRlcm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24K
LSAgICAvLyBpZiByZXR1cm5lZCBmcm9tIENvbnRleHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlz
IGNvbnZlcnNpb24gaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCAKLSAgICAvLyBpbiB0aGUgY2FzZSB0
aGF0IG9uZSBjYWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3Rh
dGUgdmFyaWFibGUsIHdlCi0gICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUg
ZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKLSAg
ICAvLyBhcHBsaWNhdGlvbi4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0
eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4
dHVyZUZvcm1hdHM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NI
QURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9J
TlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgotICAgICAgY2FzZSBHTF9NQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9S
UzoKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAg
ICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xf
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6Ci0gICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAg
IGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgIGNhc2UgR0xfTlVNX0NP
TVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklO
RElORzoKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xf
UkVOREVSQlVGRkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTToKLSAg
ICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6Ci0gICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9S
T1dfT1JERVJfQU5HTEU6Ci0gICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6Ci0gICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFE
RVJfREVSSVZBVElWRV9ISU5UX09FUzoKLSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBj
YXNlIEdMX0dSRUVOX0JJVFM6Ci0gICAgICBjYXNlIEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2Ug
R0xfQUxQSEFfQklUUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CSVRTOgotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
OgotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERToKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFD
RToKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
RlVOQzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1JFRjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRI
X1BBU1M6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
QkFDS19QQVNTX0RFUFRIX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX1BBU1M6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6Ci0gICAgICBjYXNlIEdMX0JMRU5E
X1NSQ19SR0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToKLSAgICAgIGNhc2UgR0xf
QkxFTkRfRFNUX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOgotICAgICAgY2Fz
ZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FM
UEhBOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToK
LSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVf
U0laRToKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAgICAgIGNh
c2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICBjYXNl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKLSAgICAgIGNhc2UgR0xfSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElO
R18yRDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgY2Fz
ZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgY2FzZSBHTF9OVU1f
UFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6Ci0gICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZ
X0ZPUk1BVFNfT0VTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAg
ICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgY2Fz
ZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7
Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09W
RVJBR0VfSU5WRVJUOgotICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6Ci0gICAgICBjYXNl
IEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9GQUNFIHRocm91Z2ggRElUSEVS
IGFyZSBuYXR1cmFsIHRvIElzRW5hYmxlZCwKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RklMTDogICAgICAvLyBidXQgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12
IHF1ZXJpZXMuCi0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogLy8gRm9y
IHRoaXMgcHVycG9zZSwgdGhleSBhcmUgdHJlYXRlZCBoZXJlIGFzIGJvb2wtbmF0dXJhbAotICAg
ICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOgotICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOgot
ICAgICAgY2FzZSBHTF9CTEVORDoKLSAgICAgIGNhc2UgR0xfRElUSEVSOgotICAgICAgY2FzZSBH
TF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlw
ZSA9IEdMX0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOgotICAgICAgICB7Ci0g
ICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RkFDVE9SOgotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzoKLSAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxV
RToKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5
cGUgPSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0g
ICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgIGNhc2UgR0xfREVQ
VEhfUkFOR0U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7Ci0gICAg
ICAgICAgICAqbnVtUGFyYW1zID0gMjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgot
ICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IEFwcGxpZXMgdGhlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNl
LCB2aWV3cG9ydCByZWN0YW5nbGUgYW5kCi0vLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgRGly
ZWN0M0QgOSBkZXZpY2UKLWJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25v
cmVWaWV3cG9ydCkKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVi
dWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNo
bWVudCB3ZSBtdXN0IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudAotICAgIC8vIHRv
IGtlZXAgdGhlIEQzRCBydW50aW1lIGhhcHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJs
ZSBpZiBkZXB0aCB0ZXh0dXJpbmcuCi0gICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmpl
Y3QgPSBOVUxMOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlcigpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0TnVsbENv
bG9yYnVmZmVyKCk7Ci0gICAgfQotICAgIGlmICghcmVuZGVyYnVmZmVyT2JqZWN0KQotICAgIHsK
LSAgICAgICAgRVJSKCJ1bmFibGUgdG8gbG9jYXRlIHJlbmRlcmJ1ZmZlciBmb3IgRkJPLiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCByZW5kZXJUYXJnZXRDaGFu
Z2VkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRl
cmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFsKCk7Ci0gICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAh
PSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdl
dCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgfQot
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAg
ICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAg
ICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7IC8vIFNjaXNzb3IgYXJlYSBtdXN0IGJlIGNs
YW1wZWQgdG8gcmVuZGVyIHRhcmdldCdzIHNpemUtLSB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZGlm
ZmVyZW50IHJlbmRlciB0YXJnZXRzLgotICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IGRlcHRo
YnVmZmVyU2VyaWFsID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9
IDA7Ci0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBH
TF9OT05FKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBk
ZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2ls
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4
cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2Vy
aWFsKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAg
ICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAg
ICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVw
dGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVyU2Vy
aWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRo
YnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3Rl
bmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKLSAgICAg
ICAgIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNl
dERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsKLSAgICAgICAgbUFwcGxpZWREZXB0
aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOwotICAgICAgICBtQXBwbGllZFN0ZW5j
aWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgICAgICBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0g
ICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgcmVuZGVyVGFyZ2V0Q2hhbmdlZCkKLSAg
ICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZm
ZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBi
ZSBsb3N0Ci0gICAgICAgIH0KLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVy
VGFyZ2V0RGVzYyk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVl
OwotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RWSUVX
UE9SVDkgdmlld3BvcnQ7Ci0KLSAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFy
KTsKLSAgICBmbG9hdCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBpZiAoaWdu
b3JlVmlld3BvcnQpCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmll
d3BvcnQuWSA9IDA7Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2Mu
V2lkdGg7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdo
dDsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFog
PSAxLjBmOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gY2xh
bXAobVN0YXRlLnZpZXdwb3J0WCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXRE
ZXNjLldpZHRoKSk7Ci0gICAgICAgIHZpZXdwb3J0LlkgPSBjbGFtcChtU3RhdGUudmlld3BvcnRZ
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAg
ICAgIHZpZXdwb3J0LldpZHRoID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05H
Pih2aWV3cG9ydC5YKSk7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52
aWV3cG9ydEhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhl
aWdodCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7Ci0gICAgICAgIHZpZXdwb3J0
Lk1pblogPSB6TmVhcjsKLSAgICAgICAgdmlld3BvcnQuTWF4WiA9IHpGYXI7Ci0gICAgfQotCi0g
ICAgaWYgKHZpZXdwb3J0LldpZHRoIDw9IDAgfHwgdmlld3BvcnQuSGVpZ2h0IDw9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKLSAgICB9Ci0K
LSAgICBpZiAocmVuZGVyVGFyZ2V0Q2hhbmdlZCB8fCAhbVZpZXdwb3J0SW5pdGlhbGl6ZWQgfHwg
bWVtY21wKCZ2aWV3cG9ydCwgJm1TZXRWaWV3cG9ydCwgc2l6ZW9mIG1TZXRWaWV3cG9ydCkgIT0g
MCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0gICAg
ICAgIG1TZXRWaWV3cG9ydCA9IHZpZXdwb3J0OwotICAgICAgICBtVmlld3BvcnRJbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAg
IGlmIChtU2Npc3NvclN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNjaXNz
b3JUZXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHJlY3Q7Ci0gICAgICAgICAgICBy
ZWN0LmxlZnQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPiht
UmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcCht
U3RhdGUuc2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5I
ZWlnaHQpKTsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBjbGFtcChtU3RhdGUuc2Npc3Nvclgg
KyBtU3RhdGUuc2Npc3NvcldpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdl
dERlc2MuV2lkdGgpKTsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2xhbXAobVN0YXRlLnNj
aXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVu
ZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFNjaXNzb3JS
ZWN0KCZyZWN0KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1ND
SVNTT1JURVNURU5BQkxFLCBUUlVFKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNU
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVu
aWZvcm1zRGlydHkpCi0gICAgewotICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0
Q3VycmVudFByb2dyYW0oKTsKLSAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgICAgICBHTGludCBoYWxm
UGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsK
LSAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8g
dmlld3BvcnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdiho
YWxmUGl4ZWxTaXplLCAxLCB4eSk7Ci0KLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2Vk
IGZvciBjb21wdXRpbmcgZ2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLgot
ICAgICAgICBHTGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigp
OwotICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBm
LCBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1T
dGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtNGZ2KGNvb3JkLCAxLCB3aHh5KTsKLQotICAgICAgICBHTGludCBkZXB0aCA9IHByb2dy
YW1CaW5hcnktPmdldER4RGVwdGhMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IGR6WzJdID0g
eyh6RmFyIC0gek5lYXIpIC8gMi4wZiwgKHpOZWFyICsgekZhcikgLyAyLjBmfTsKLSAgICAgICAg
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOwotCi0gICAgICAgIEdM
aW50IGRlcHRoUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigp
OwotICAgICAgICBHTGZsb2F0IG5lYXJGYXJEaWZmWzNdID0ge3pOZWFyLCB6RmFyLCB6RmFyIC0g
ek5lYXJ9OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2Us
IDEsIG5lYXJGYXJEaWZmKTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBcHBsaWVzIHRoZSBmaXhlZC1mdW5jdGlv
biBzdGF0ZSAoY3VsbGluZywgZGVwdGggdGVzdCwgYWxwaGEgYmxlbmRpbmcsIHN0ZW5jaWxpbmcs
IGV0YykgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUo
R0xlbnVtIGRyYXdNb2RlKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJy
ZW50UHJvZ3JhbSgpOwotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIEdMaW50IGZyb250Q0NXID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQgY2N3ID0g
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKTsKLSAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3KTsKLQotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBw
cm9ncmFtQmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOwotICAgIEdMaW50IGFs
d2F5c0Zyb250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLSAgICBwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9udCk7Ci0KLSAgICBE
M0RBREFQVEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJ
ZGVudGlmaWVyKCk7Ci0gICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGlkZW50aWZpZXIt
PlZlbmRvcklkICE9IDB4MTAwMjsKLSAgICAvLyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhh
dmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJvIGNvbG9yCi0gICAgLy8gd3JpdGUgbWFz
ayBjYW4gY2F1c2UgbGF0ZXIgZHJhd3MgdG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVh
ZCwKLSAgICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRlIG1hc2sgYnV0IG1vZGlmeSB0aGUg
YmxlbmQgc3RhdGUgc28gdGhhdCBubwotICAgIC8vIGRyYXdpbmcgaXMgZG9uZS4KLSAgICAvLyBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5
Ci0KLSAgICBpZiAobUN1bGxTdGF0ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtU3RhdGUuY3VsbEZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2Rl
KG1TdGF0ZS5jdWxsTW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3VsbFN0
YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9UUlVFKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29u
dmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkVOQUJMRSwgRDNEWkJfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURlcHRoU3RhdGVE
aXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93ZWQgJiYg
KG1NYXNrU3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkKLSAgICB7Ci0gICAgICAgIG1C
bGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1T
dGF0ZS5ibGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChtU3Rh
dGUuc291cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLnNvdXJjZUJs
ZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgotICAgICAgICAgICAgICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLmRlc3RC
bGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1Is
IGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQSh1bm9ybTw4
PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3Rh
dGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xv
ci5hbHBoYSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5z
b3VyY2VCbGVuZFJHQikpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfREVTVEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdC
KSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBl
czJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKLQotICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBo
YSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0
QmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAh
PSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJM
RSwgVFJVRSk7Ci0KLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TUkNCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxl
bmRBbHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0RFU1RCTEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5k
QWxwaGEpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19C
TEVORE9QQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvbkFs
cGhhKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBI
QUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQmxlbmRT
dGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8
fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0
ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2lsKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lM
TU9ERSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5
Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxS
RUYgPSBEM0RSU19TVEVOQ0lMUkVGOwotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVU
WVBFIEQzRFJTX0NDV19TVEVOQ0lMTUFTSyA9IEQzRFJTX1NURU5DSUxNQVNLOwotICAgICAgICAg
ICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLID0g
RDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFdy
aXRlbWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgCi0gICAgICAgICAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIHx8IAotICAgICAg
ICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBz
dGVuY2lsIHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1
ZXMgYXJlIGludmFsaWQgdW5kZXIgV2ViR0wuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0
ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIEdMdWludCBtYXhTdGVuY2lsID0gKDEgPDwgc3Rl
bmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSkgLSAxOwotCi0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5D
SUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxX
cml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lM
RlVOQywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lM
UkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbFJlZiA8IChHTGludClt
YXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQz
RFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbE1h
c2spOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRG
YWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlM
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVu
Y2lsT3AobVN0YXRlLnN0ZW5jaWxGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6
IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwp
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxP
cChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxX
UklURU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNr
V3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5m
cm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lM
RlVOQywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0KLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVO
Q0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAo
R0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0g
R0xfQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRl
LnN0ZW5jaWxCYWNrTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0ND
V19TVEVOQ0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4
OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwpKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RS
U19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNf
Q0NXX1NURU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1Gcm9udEZhY2VE
aXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtTWFza1N0YXRlRGlydHkpCi0gICAgewot
ICAgICAgICBpbnQgY29sb3JNYXNrID0gZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNv
bG9yTWFza1JlZCwgbVN0YXRlLmNvbG9yTWFza0dyZWVuLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUu
Y29sb3JNYXNrQWxwaGEpOwotICAgICAgICBpZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xv
ck1hc2tBbGxvd2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hh
bm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3RoaW5nIHdpbGwgYmUgZHJhd24uCi0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RD
T0xPUldSSVRFRU5BQkxFX0dSRUVOKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotCi0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNEQkxFTkRfWkVSTyk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIEQzREJMRU5EX09O
RSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBE
M0RCTEVORE9QX0FERCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBj
b2xvck1hc2spOwotICAgICAgICB9Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pXUklURUVOQUJMRSwgbVN0YXRlLmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAg
ICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1Qb2x5Z29u
T2Zmc2V0U3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNl
dEZpbGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVm
ZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICBp
ZiAoZGVwdGhidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgKigoRFdPUkQqKSZtU3Rh
dGUucG9seWdvbk9mZnNldEZhY3RvcikpOwotICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlh
cyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+
Z2V0RGVwdGhTaXplKCkpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19ERVBUSEJJQVMsICooKERXT1JEKikmZGVwdGhCaWFzKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAwKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAobVNhbXBsZVN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNh
bXBsZUFscGhhVG9Db3ZlcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgRklYTUUoIlNhbXBs
ZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVMs
IFRSVUUpOwotICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0gICAgICAgICAgICBpZiAobVN0YXRl
LnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCB0aHJlc2hvbGQgPSAwLjVmOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOwotCi0gICAgICAgICAgICAg
ICAgICAgIGlmICgoaSArIDEpICogbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPj0gdGhyZXNo
b2xkKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJl
c2hvbGQgKz0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgfD0gMTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExF
TUFTSywgbWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZG
RkZGRkYpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAobURpdGhlclN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRIRVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBU
UlVFIDogRkFMU0UpOwotCi0gICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAg
fQotfQotCi1HTGVudW0gQ29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewot
ICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdOwot
Ci0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEo
Zmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwotICAgIGlmIChlcnIgIT0gR0xf
Tk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVy
biBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJp
YnV0ZXMsIGdldEN1cnJlbnRQcm9ncmFtKCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7Ci19Ci0K
LS8vIEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCi1HTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25z
dCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQotewotICAgIEdMZW51bSBlcnIgPSBt
SW5kZXhEYXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsKLQotICAgIGlmIChl
cnIgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwg
IT0gbUFwcGxpZWRJQlNlcmlhbCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
SW5kaWNlcyhpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKLSAgICAgICAgICAgIG1BcHBsaWVkSUJT
ZXJpYWwgPSBpbmRleEluZm8tPnNlcmlhbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBlcnI7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCi17
Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKLQotICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGll
ZFByb2dyYW1TZXJpYWwpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2
ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAg
SURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBp
eGVsU2hhZGVyKCk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFk
ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAg
ICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwotICAgICAgICBtQXBwbGll
ZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAg
ICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHRl
eHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQg
Q29udGV4dDo6YXBwbHlUZXh0dXJlcygpCi17Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1BJ
WEVMKTsKLQotICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQotICAgIHsKLSAgICAgICAg
YXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7Ci0gICAgfQotfQotCi0vLyBGb3IgZWFjaCBE
aXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCi0v
LyBsb29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFu
ZCB0ZXh0dXJlIHR5cGUsCi0vLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3Np
bmcvZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0
OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGludCBz
YW1wbGVyQ291bnQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTIDogTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBv
ZiBEaXJlY3QzRCA5IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQotICAgIHVuc2lnbmVk
IGludCAqYXBwbGllZFRleHR1cmVTZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1B
cHBsaWVkVGV4dHVyZVNlcmlhbFBTIDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7Ci0gICAgaW50
IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJU
RVhURVhUVVJFU0FNUExFUjA7Ci0gICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnkt
PmdldFVzZWRTYW1wbGVyUmFuZ2UodHlwZSk7Ci0KLSAgICBmb3IgKGludCBzYW1wbGVySW5kZXgg
PSAwOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQotICAgIHsK
LSAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBp
bmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGlu
ZGV4Ci0gICAgICAgIGludCBkM2RTYW1wbGVyID0gc2FtcGxlckluZGV4ICsgZDNkU2FtcGxlck9m
ZnNldDsKLQotICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxl
clRleHR1cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7Ci0KLSAgICAgICAgICAgIFRleHR1cmUg
KnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwot
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKTsKLQotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJ
bmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRl
eHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4
XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRl
eHR1cmUtPmdldFdyYXBTKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFQg
PSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1p
bkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNE
U0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfQUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQpKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIs
IEQzRFNBTVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1hZ0ZpbHRlcihtYWdGaWx0ZXIpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRl
ciwgZDNkTWlwRmlsdGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRN
aW5GaWx0ZXIobWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwg
ZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8
fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRl
eHR1cmUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVy
ZVR5cGUpLT5nZXRUZXh0dXJlKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXhTZXJpYWw7Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0
dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAgICAgICAg
ICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxl
clJhbmdlOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQotICAg
IHsKLSAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVySW5kZXgg
KyBkM2RTYW1wbGVyT2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAg
IH0KLQotICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVm
ZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENv
bXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVudCk7Ci0g
ICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewot
ICAgICAgICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAg
IGlmIChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm47
ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQotICAgIH0KLQotICAg
IEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7
Ci0KLSAgICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkK
LSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVz
b2x2ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdl
dAotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRv
UGl4ZWxzID0gIWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkg
PD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgotICAgICAgICAgICAgICAgICAg
ICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYg
VUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQg
JiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAg
ICB7Ci0gICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8g
d3JpdGUgZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0
LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
VHJ5IGFnYWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRv
UGl4ZWxzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4
ZWxzKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxh
aW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lT
VEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICByZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKLSAgICByZW5kZXJU
YXJnZXQtPlJlbGVhc2UoKTsKLSAgICByZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwot
Ci0gICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNl
IG1vcmUgZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgotICAg
ICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
fQotCi0gICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFj
ZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCByZWN0Owot
ICAgIHJlY3QubGVmdCA9IGNsYW1wKHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRo
KSk7Ci0gICAgcmVjdC50b3AgPSBjbGFtcCh5LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5I
ZWlnaHQpKTsKLSAgICByZWN0LnJpZ2h0ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nh
c3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdo
dCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0KLSAgICBEM0RMT0NLRURf
UkVDVCBsb2NrOwotICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAm
cmVjdCwgRDNETE9DS19SRUFET05MWSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNl
KCk7Ci0KLSAgICAgICAgcmV0dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRl
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhl
bHM7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxz
OwotCi0gICAgdW5zaWduZWQgY2hhciAqc291cmNlOwotICAgIGludCBpbnB1dFBpdGNoOwotICAg
IGlmIChnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpCi0gICAgewotICAgICAgICBzb3VyY2UgPSAo
KHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAt
IHJlY3QudG9wIC0gMSk7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2su
cEJpdHM7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0KLQotICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsKLSAg
ICAgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAg
Zm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVE
X0JZVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRf
Zm9ybWF0X2JncmEsIGdpdmVuCi0gICAgICAgICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIu
ICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vCi0gICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJv
dWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBv
dXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwK
LSAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiA0KTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
b2F0IHI7Ci0gICAgICAgICAgICBmbG9hdCBnOwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAg
ICAgICAgIGZsb2F0IGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWdu
ZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAw
MUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4
MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYg
MHhGODAwKSAqICgxLjBmIC8gMHhGODAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAg
ICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7
Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0Mw
MCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0
ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2Ig
JiAweEZGMDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAg
ICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDAp
OwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8g
MHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShz
b3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBh
ID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICh4cmdiICYgMHgwMDAwMDBGRikgKiAo
MS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAw
MDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAo
eHJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0Ey
UjEwRzEwQjEwOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0
UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICog
KDEuMGYgLyAweEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgw
MDAwMDNGRikgKiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0g
KGFyZ2IgJiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHIgPSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0
aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0
Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGcgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSAr
IDEpOwotICAgICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkg
KyBqICogaW5wdXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0
Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
ZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3Ro
ZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGFiZ3JbNF07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgRDNEWEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kiko
c291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCksIDQpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGEgPSBhYmdyWzNdOwotICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9IGFiZ3JbMV07Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBhYmdy
WzBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JH
UkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8v
IEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4
ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUg
aXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAg
IDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAg
MiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAg
M3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAg
ICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21w
b25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBk
ZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8
IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciAr
IDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQp
KDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZf
RVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wg
c3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAg
ICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDgg
ICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8
IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwg
ICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBC
R1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBm
b3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBz
aXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAg
ICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8
IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVAotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAg
IC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQotICAgICAgICAgICAgICAgICAgICBk
ZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8
PCAwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcg
KyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzeXN0ZW1TdXJm
YWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFm
cmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIERXT1JEIGZsYWdz
ID0gMDsKLQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAg
ICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0KLSAgICAgICAgaWYgKGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNr
ICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAm
JiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAg
ICAgICAgewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0KLSAgICBpZiAo
bWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdM
X1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgICAgIGlmICghZGVwdGhT
dGVuY2lsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNp
bCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2M7Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwotICAgICAg
ICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7Ci0gICAg
ICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0KLSAg
ICAgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQodHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3Rh
bmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29s
b3JDbGVhclZhbHVlLmFscGhhKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkKSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4p
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZS5ibHVlKSk7Ci0gICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5k
ZXB0aENsZWFyVmFsdWUpOwotICAgIGludCBzdGVuY2lsID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlICYgMHgwMDAwMDBGRjsKLQotICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0
QWxwaGFTaXplKG1SZW5kZXJUYXJnZXREZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9y
TWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGZs
YWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9
IHN0ZW5jaWxVbm1hc2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0g
KGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAhKG1TdGF0ZS5jb2xvck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9yTWFza0dyZWVu
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9y
TWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7Ci0KLSAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xl
YXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKLSAgICB7Ci0gICAgICAgIC8vIFN0YXRlIHdo
aWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIg
Y2FsbCBpcyBzYXZlZC4KLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5
IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKLSAgICAg
ICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtlbi4KLSAgICAgICAgSFJFU1VMVCBocjsKLSAgICAgICAg
aWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVf
T1VUT0ZNRU1PUlkpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5B
QkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEZWRihEM0RG
VkZfWFlaUkhXIHwgRDNERlZGX0RJRkZVU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0U3Ry
ZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1Bf
U0VMRUNUQVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJH
MSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1Nf
QUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJl
YW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBociA9IG1E
ZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1NYXNrZWRDbGVhclNhdmVkU3RhdGUpOwotICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQobU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKTsKLQotICAgICAgICBpZiAobU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBociA9IG1NYXNrZWRD
bGVhclNhdmVkU3RhdGUtPkNhcHR1cmUoKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1pXUklURUVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsK
LSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAw
KTsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUs
IGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xv
ck1hc2tHcmVlbiwgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoZmxhZ3MgJiBEM0RDTEVB
Ul9TVEVOQ0lMKSkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRlVOQywgRDNEQ01QX0FMV0FZ
Uyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUkVG
LCBzdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NU
RU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQ
TEFDRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lM
WkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAg
ICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxM
KTsKLSAgICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOwotICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUp
OwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JP
UCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VT
dGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RB
UkcxKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FM
UEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLQotICAgICAgICBmb3Io
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmbG9hdCBxdWFkWzRdWzRdOyAgIC8vIEEgcXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0
aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1hdGNoIHRoZSBlZGdlcwotICAgICAgICBxdWFkWzBdWzBd
ID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQg
LSAwLjVmOwotICAgICAgICBxdWFkWzBdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFswXVszXSA9
IDEuMGY7Ci0KLSAgICAgICAgcXVhZFsxXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0g
MC41ZjsKLSAgICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAu
NWY7Ci0gICAgICAgIHF1YWRbMV1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzFdWzNdID0gMS4w
ZjsKLQotICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMl1bMV0gPSAt
MC41ZjsKLSAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMl1bM10gPSAx
LjBmOwotCi0gICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAu
NWY7Ci0gICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFszXVsyXSA9IDAu
MGY7Ci0gICAgICAgIHF1YWRbM11bM10gPSAxLjBmOwotCi0gICAgICAgIG1EaXNwbGF5LT5zdGFy
dFNjZW5lKCk7Ci0gICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdM
RVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKLQotICAgICAgICBpZiAoZmxhZ3Mg
JiBEM0RDTEVBUl9aQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9aQlVGRkVSLCBjb2xvciwgZGVwdGgsIHN0ZW5j
aWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0g
TlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+QXBw
bHkoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmbGFncykKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwp
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGlu
dCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFt
U3RhdGUuY3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZl
VHlwZTsKLSAgICBpbnQgcHJpbWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQ
cmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50
KSkKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJp
bWl0aXZlQ291bnQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhcHBseVN0YXRlKG1vZGUpOwotCi0gICAgR0xzaXplaSByZXBlYXREcmF3ID0g
MTsKLSAgICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBpbnN0
YW5jZXMsICZyZXBlYXREcmF3KTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKGVycik7Ci0gICAgfQotCi0gICAgYXBwbHlTaGFkZXJzKCk7
Ci0gICAgYXBwbHlUZXh0dXJlcygpOwotCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5n
ZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICgh
Y3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5l
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdl
ci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNvdW50KTsKLSAgICAgICAgICAgIGlmIChjb3VudGluZ0lC
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IGNvdW50aW5nSUItPmdldFNlcmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhjb3VudGluZ0lCLT5nZXRCdWZmZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAs
IGNvdW50LCAwLCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBhIGNvdW50aW5nIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gUmVn
dWxhciBjYXNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmUo
cHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpCi17
Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghaW5kaWNlcyAm
JiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBw
cmltaXRpdmVUeXBlOwotICAgIGludCBwcmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6
Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0
aXZlQ291bnQpKQotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAg
IGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGFwcGx5U3RhdGUobW9kZSk7Ci0KLSAgICBUcmFuc2xhdGVkSW5k
ZXhEYXRhIGluZGV4SW5mbzsKLSAgICBHTGVudW0gZXJyID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRp
Y2VzLCBjb3VudCwgbW9kZSwgdHlwZSwgJmluZGV4SW5mbyk7Ci0gICAgaWYgKGVyciAhPSBHTF9O
T19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAg
IEdMc2l6ZWkgdmVydGV4Q291bnQgPSBpbmRleEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWlu
SW5kZXggKyAxOwotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAgZXJyID0gYXBwbHlW
ZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAm
cmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFw
cGx5VGV4dHVyZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFjdWxsU2tp
cHNEcmF3KG1vZGUpKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLQot
ICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRyYXdMaW5lTG9vcChjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4KTsg
ICAKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgcmVwZWF0RHJhdzsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5U
KWluZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5k
ZXhJbmZvLnN0YXJ0SW5kZXgsIHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotLy8gSW1wbGVtZW50cyBnbEZsdXNoIHdoZW4gYmxvY2sgaXMgZmFs
c2UsIGdsRmluaXNoIHdoZW4gYmxvY2sgaXMgdHJ1ZQotdm9pZCBDb250ZXh0OjpzeW5jKGJvb2wg
YmxvY2spCi17Ci0gICAgbURpc3BsYXktPnN5bmMoYmxvY2spOwotfQotCi12b2lkIENvbnRleHQ6
OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgpCi17Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3Ig
YW4gaW5kZXhlZCBkcmF3Ci0gICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyLmdldCgpKQotICAgIHsKLSAgICAgICAgQnVmZmVyICppbmRleEJ1ZmZlciA9
IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIGludHB0cl90IG9mZnNl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwotICAgICAgICBpbmRpY2Vz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGV4QnVmZmVyLT5kYXRhKCkpICsgb2Zm
c2V0OwotICAgIH0KLQotICAgIFVJTlQgc3RhcnRJbmRleCA9IDA7Ci0gICAgYm9vbCBzdWNjZWVk
ZWQgPSBmYWxzZTsKLQotICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQotICAgIHsKLSAg
ICAgICAgY29uc3QgaW50IHNwYWNlTmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWdu
ZWQgaW50KTsKLQotICAgICAgICBpZiAoIW1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklU
SUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgzMik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElC
LT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCk7Ci0KLSAgICAgICAg
ICAgIFVJTlQgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZv
ZmZzZXQpKTsKLSAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyA0OwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2Fz
dDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRl
Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihp
bmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBk
YXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtTGluZUxvb3BJQi0+dW5tYXAoKTsKLSAgICAgICAg
ICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3Vu
dCArIDEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLQotICAgICAgICBpZiAoIW1MaW5lTG9v
cElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJ
bmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5E
RVgxNik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUxpbmVMb29wSUIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1MaW5lTG9vcElCLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VO
U0lHTkVEX1NIT1JUKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1M
aW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBvZmZzZXQgLyAyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVk
IGRyYXcKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2Nv
dW50XSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylb
aV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3Vu
dF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dWludCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylb
MF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBt
TGluZUxvb3BJQi0+dW5tYXAoKTsKLSAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChzdWNjZWVkZWQp
Ci0gICAgewotICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0
U2VyaWFsKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMobUxp
bmVMb29wSUItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBt
TGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5E
cmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQVF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgs
IGNvdW50LCBzdGFydEluZGV4LCBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9M
SU5FX0xPT1AuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEVudW0oKQotewotICAgIG1JbnZh
bGlkRW51bSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkK
LXsKLSAgICBtSW52YWxpZFZhbHVlID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJ
bnZhbGlkT3BlcmF0aW9uKCkKLXsKLSAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQotewotICAgIG1PdXRPZk1lbW9yeSA9
IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0
aW9uKCkKLXsKLSAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gdHJ1ZTsKLX0KLQot
Ly8gR2V0IG9uZSBvZiB0aGUgcmVjb3JkZWQgZXJyb3JzIGFuZCBjbGVhciBpdHMgZmxhZywgaWYg
YW55LgotLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMuCi1HTGVudW0g
Q29udGV4dDo6Z2V0RXJyb3IoKQotewotICAgIGlmIChtSW52YWxpZEVudW0pCi0gICAgewotICAg
ICAgICBtSW52YWxpZEVudW0gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9F
TlVNOwotICAgIH0KLQotICAgIGlmIChtSW52YWxpZFZhbHVlKQotICAgIHsKLSAgICAgICAgbUlu
dmFsaWRWYWx1ZSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX1ZBTFVFOwot
ICAgIH0KLQotICAgIGlmIChtSW52YWxpZE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIG1JbnZh
bGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwotICAgIH0KLQotICAgIGlmIChtT3V0T2ZNZW1vcnkpCi0gICAgewotICAgICAgICBtT3V0
T2ZNZW1vcnkgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAg
ICB9Ci0KLSAgICBpZiAobUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbikKLSAgICB7Ci0gICAg
ICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgcmV0dXJu
IEdMX05PX0VSUk9SOwotfQotCi1HTGVudW0gQ29udGV4dDo6Z2V0UmVzZXRTdGF0dXMoKQotewot
ICAgIGlmIChtUmVzZXRTdGF0dXMgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBib29s
IGxvc3QgPSBtRGlzcGxheS0+dGVzdERldmljZUxvc3QoKTsKLQotICAgICAgICBpZiAobG9zdCkK
LSAgICAgICAgewotICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsgICAv
LyBTZXRzIG1SZXNldFN0YXR1cwotICAgICAgICB9Ci0gICAgfQotCi0gICAgR0xlbnVtIHN0YXR1
cyA9IG1SZXNldFN0YXR1czsKLQotICAgIGlmIChtUmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1Ip
Ci0gICAgewotICAgICAgICBpZiAobURpc3BsYXktPnRlc3REZXZpY2VSZXNldHRhYmxlKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX05PX0VSUk9SOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKQotewotICAgIHJldHVybiAobVJlc2V0U3RyYXRl
Z3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFk
ZXJNb2RlbDM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBj
b25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfVkFSWUlOR19W
RUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwotfQotCi11bnNpZ25lZCBpbnQg
Q29udGV4dDo6Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN1cHBvcnRzVmVydGV4VGV4dHVyZSA/IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUU19WVEYgOiAwOwotfQotCi11bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUyArIGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotfQot
Ci1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5JRk9S
TV9WRUNUT1JTX1NNMyA6IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOwotfQotCi1p
bnQgQ29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TmVhcmVzdFN1cHBv
cnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKLXsKLSAg
ICBpZiAocmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gcmVxdWVzdGVkOwot
ICAgIH0KLQotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3Ig
aXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7Ci0gICAgaWYgKGl0ciA9PSBt
TXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLQotICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZf
U0FNUExFUzsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0g
RDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIENvbnRl
eHQ6OnN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRz
RXZlbnRRdWVyaWVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzT2NjbHVzaW9uUXVlcmll
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtU3VwcG9ydHNEWFQxVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQz
VGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3VwcG9ydHNEWFQ1VGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDMyVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsKLX0KLQot
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1i
b29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRz
RmxvYXQxNkxpbmVhckZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0
MTZMaW5lYXJGaWx0ZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVy
YWJsZVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNlJlbmRl
cmFibGVUZXh0dXJlczsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9u
OwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6Omdl
dE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhD
dWJlVGV4dHVyZURpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJl
TGV2ZWwoKSBjb25zdAotewotICAgIHJldHVybiBtTWF4VGV4dHVyZUxldmVsOwotfQotCi1ib29s
IENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNM
dW1pbmFuY2VBbHBoYVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3VwcG9ydHMzMmJpdEluZGljZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIy
VGV4dHVyZTsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNJbnN0YW5jaW5nOwotfQotCi12b2lkIENvbnRleHQ6OmRl
dGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDIuOSBwYWdlIDIyOgotICAgIC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVk
IHdoaWxlIGl0IGlzIGJvdW5kLCBhbGwgYmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1
cnJlbnQgY29udGV4dAotICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVs
ZXRlLUJ1ZmZlcnMpIGFyZSByZXNldCB0byB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5hcnJheUJ1
ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQo
KSA9PSBidWZmZXIpCi0gICAgewotICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNl
dChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuaWQoKSA9PSBidWZm
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmli
dXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IENvbnRleHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44IHBhZ2UgODQ6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9i
amVjdCBpcyBkZWxldGVkLCBpdCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUg
Ym91bmQgdG8gdGhhdCB0ZXh0dXJlIG9iamVjdCBhcmUKLSAgICAvLyByZWJvdW5kIHRvIHRleHR1
cmUgb2JqZWN0IHplcm8KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9U
WVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsg
c2FtcGxlciA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdLmlkKCkgPT0gdGV4dHVyZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gNC40IHBhZ2UgMTEyOgotICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRl
ZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFt
ZWJ1ZmZlciwgdGhlbiBpdCBpcwotICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhh
ZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBw
b2ludCB0byB3aGljaCB0aGlzCi0gICAgLy8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJy
ZW50bHkgYm91bmQgZnJhbWVidWZmZXIuCi0KLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVm
ZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1
ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsK
LSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSBy
ZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFRl
eHR1cmUodGV4dHVyZSk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVm
ZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiA0LjQgcGFnZSAxMDc6Ci0gICAgLy8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJl
bnRseSBib3VuZCB0byB0aGUgdGFyZ2V0IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFz
IHRob3VnaAotICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRo
ZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8uCi0KLSAgICBp
ZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IGJpbmRSZWFkRnJhbWVidWZmZXIoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5kcmF3RnJh
bWVidWZmZXIgPT0gZnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBiaW5kRHJhd0ZyYW1lYnVm
ZmVyKDApOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1
aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0
LjQgcGFnZSAxMDk6Ci0gICAgLy8gSWYgYSByZW5kZXJidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkg
Ym91bmQgdG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaCBCaW5kUmVu
ZGVyYnVmZmVyCi0gICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRF
UkJVRkZFUiBhbmQgbmFtZSBvZiB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIu
aWQoKSA9PSByZW5kZXJidWZmZXIpCi0gICAgewotICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDAp
OwotICAgIH0KLQotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEx
MToKLSAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMg
aW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwKLSAg
ICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNh
bGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50Ci0gICAg
Ly8gcG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRs
eSBib3VuZCBmcmFtZWJ1ZmZlci4KLQotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIg
PSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAg
IHsKLSAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZl
ciAhPSByZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRl
dGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLX0KLQotVGV4dHVyZSAqQ29u
dGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBUZXh0
dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsKLQotICAgIGlmICh0ID09
IE5VTEwpCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAw
LCAwLCAwLCAyNTUgfTsKLQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIC8v
IGRlZmF1bHQgZmFsbHMgdGhyb3VnaCB0byBURVhUVVJFXzJECi0KLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNv
bXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJEKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7
Ci0gICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgdCA9IGluY29t
cGxldGUyZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
Y2FzZSBURVhUVVJFX0NVQkU6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRleHR1cmVD
dWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcChUZXh0dXJlOjpJTkNP
TVBMRVRFX1RFWFRVUkVfSUQpOwotCi0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJ
bWFnZVBvc1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwot
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0
ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAx
LCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwg
MSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldElt
YWdlTmVnWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0K
LSAgICAgICAgICAgICAgdCA9IGluY29tcGxldGVDdWJlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5
cGVdLnNldCh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotYm9vbCBDb250ZXh0Ojpj
dWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxG
YWNlICYmIG1TdGF0ZS5jdWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xl
TW9kZShkcmF3TW9kZSk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVt
IGRyYXdNb2RlKQotewotICAgIHN3aXRjaCAoZHJhd01vZGUpCi0gICAgewotICAgICAgY2FzZSBH
TF9UUklBTkdMRVM6Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgIGNhc2UgR0xf
VFJJQU5HTEVfU1RSSVA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9QT0lO
VFM6Ci0gICAgICBjYXNlIEdMX0xJTkVTOgotICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6Ci0gICAg
ICBjYXNlIEdMX0xJTkVfU1RSSVA6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlcykKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQot
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1
ZXNbMF07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsx
XSA9IHZhbHVlc1sxXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVu
dFZhbHVlWzJdID0gdmFsdWVzWzJdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhd
Lm1DdXJyZW50VmFsdWVbM10gPSB2YWx1ZXNbM107Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIt
PmRpcnR5Q3VycmVudFZhbHVlKGluZGV4KTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhB
dHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgQVNTRVJU
KGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Ci19Ci0KLS8vIGtlZXAgbGlzdCBzb3J0
ZWQgaW4gZm9sbG93aW5nIG9yZGVyCi0vLyBPRVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lv
bnMKLS8vIFZlbmRvciBleHRlbnNpb25zCi12b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJp
bmcoKQotewotICAgIG1FeHRlbnNpb25TdHJpbmcgPSAiIjsKLQotICAgIC8vIE9FUyBleHRlbnNp
b25zCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQotCi0g
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0g
ICAgLy9tRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7Ci0g
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKLQotICAgIGlmIChz
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAo
c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zs
b2F0MzJMaW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0
c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX25wb3QgIjsKLSAgICB9Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVY
VCkgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKLSAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9v
bGVhbiAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zv
cm1hdF9iZ3JhICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3Mg
IjsKLQotICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAg
IH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2Ug
IjsKLQotICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNE
ZXB0aFRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9B
TkdMRV9kZXB0aF90ZXh0dXJlICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwotICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xF
X2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzSW5z
dGFuY2luZygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgIjsKLQotICAgIGlmIChzdXBwb3J0c0RYVDNU
ZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0RYVDVU
ZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAiOwotCi0gICAgLy8gT3RoZXIgdmVu
ZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSkK
LSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7Ci0gICAg
fQotCi0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZp
bmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQot
ICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOwotICAgIH0KLX0K
LQotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6Omlu
aXRSZW5kZXJlclN0cmluZygpCi17Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRp
ZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotCi0gICAgbVJlbmRlcmVy
U3RyaW5nID0gIkFOR0xFICgiOwotICAgIG1SZW5kZXJlclN0cmluZyArPSBpZGVudGlmaWVyLT5E
ZXNjcmlwdGlvbjsKLSAgICBtUmVuZGVyZXJTdHJpbmcgKz0gIikiOwotfQotCi1jb25zdCBjaGFy
ICpDb250ZXh0OjpnZXRSZW5kZXJlclN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5k
ZXJlclN0cmluZy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50
IGRzdFgxLCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0
ZmllbGQgbWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVh
ZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1l
YnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fAotICAg
ICAgICAhZHJhd0ZyYW1lYnVmZmVyIHx8IGRyYXdGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmIChkcmF3
RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpbnQgcmVhZEJ1ZmZlcldp
ZHRoID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOwotICAg
IGludCByZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRIZWlnaHQoKTsKLSAgICBpbnQgZHJhd0J1ZmZlcldpZHRoID0gZHJhd0ZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOwotICAgIGludCBkcmF3QnVmZmVySGVpZ2h0
ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsKLQotICAg
IFJFQ1Qgc291cmNlUmVjdDsKLSAgICBSRUNUIGRlc3RSZWN0OwotCi0gICAgaWYgKHNyY1gwIDwg
c3JjWDEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsKLSAgICAgICAg
c291cmNlUmVjdC5yaWdodCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7
Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC5sZWZ0
ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsKLSAgICAgICAgZGVz
dFJlY3QucmlnaHQgPSBkc3RYMDsKLSAgICB9Ci0KLSAgICBpZiAoc3JjWTAgPCBzcmNZMSkKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0
LmJvdHRvbSA9IGRzdFkxOwotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kwOwotICAgICAg
ICBkZXN0UmVjdC50b3AgPSBkc3RZMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
c291cmNlUmVjdC5ib3R0b20gPSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0
WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnRv
cCA9IGRzdFkxOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJj
ZVJlY3Q7Ci0gICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYg
KG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFy
dHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3Ig
dGVzdAotICAgICAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIGRlc3RSZWN0IGlzIG5vdyBpbiBEM0Qt
c3R5bGUgY29vcmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBvZiB0aGUKLSAgICAgICAgLy8gcmVjdCB3
aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4K
LSAgICAgICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7
Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOwot
ICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5sZWZ0ICs9IHhEaWZmOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4gbVN0YXRlLnNjaXNzb3JYICsgbVN0YXRl
LnNjaXNzb3JXaWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJl
Y3QucmlnaHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7Ci0gICAg
ICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0
ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnJpZ2h0IC09
IHhEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8IG1TdGF0ZS5z
Y2lzc29yWSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gbVN0YXRlLnNjaXNz
b3JZIC0gZGVzdFJlY3QudG9wOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QudG9wID0g
bVN0YXRlLnNjaXNzb3JZOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0g
eURpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QuYm90dG9tID4gbVN0YXRl
LnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCB5RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUu
c2Npc3NvckhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5ib3R0b20gPSBt
U3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsKLSAgICAgICAgICAgIHNvdXJj
ZVNjaXNzb3JlZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2ls
ID0gZmFsc2U7Ci0KLSAgICBSRUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0gc291cmNlU2Npc3NvcmVk
UmVjdDsKLSAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lzc29yZWRSZWN0OwotCi0g
ICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0
byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5kcyBvZiAKLSAgICAvLyB0
aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRS
ZWN0LmxlZnQgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1t
ZWRSZWN0LmxlZnQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPSAwOwotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCi0gICAgewotICAgICAgICBpbnQg
eERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZmZXJXaWR0aDsKLSAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIGRl
c3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VU
cmltbWVkUmVjdC50b3A7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAg
ICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJj
ZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCi0gICAgewotICAgICAgICBp
bnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0Owot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0OwotICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChk
ZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSAwIC0g
ZGVzdFRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0gMDsK
LSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBp
ZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQotICAgIHsKLSAgICAg
ICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZlcldpZHRoOwot
ICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0
VHJpbW1lZFJlY3QudG9wOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wID0gMDsKLSAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKLSAgICB7Ci0gICAgICAgIGlu
dCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVmZmVySGVpZ2h0OwotICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAg
c291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGJvb2wgcGFy
dGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9t
IC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1ZmZlckhlaWdodCB8fAotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVm
ZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1l
ZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
cmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAg
ICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAg
fHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9
IDApCi0gICAgewotICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgY29uc3Qg
Ym9vbCB2YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUo
KSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgY29uc3QgYm9vbCB2
YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBH
TF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgaWYgKCF2YWxpZFJlYWRUeXBl
IHx8ICF2YWxpZERyYXdUeXBlIHx8Ci0gICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29s
b3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBz
dXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBibGl0UmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKLQot
ICAgIH0KLQotICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lM
X0JVRkZFUl9CSVQpKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNCdWZmZXIg
PSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7Ci0KLSAg
ICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBkbyBub3Qg
c3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBz
byBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIs
IGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUo
KSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+
Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAg
IHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk9u
bHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkg
dGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVk
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXIt
PmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVh
ZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAg
ICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkUmVuZGVyVGFy
Z2V0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5T
dHJldGNoUmVjdChyZWFkUmVuZGVyVGFyZ2V0LCAmc291cmNlVHJpbW1lZFJlY3QsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVuZGVyVGFy
Z2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgICAgICByZWFk
UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3Ry
ZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNp
bCkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0
ZW5jaWwgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoU3RlbmNpbCgpOwotCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5V
TEwsIEQzRFRFWEZfTk9ORSk7Ci0KLSAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLQotICAgICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAl
eC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFy
YXRpb25DYWNoZSgpIDogbU1heExydSgwKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVN
X1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhE
ZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICBtVmVydGV4RGVj
bENhY2hlW2ldLmxydUNvdW50ID0gMDsKLSAgICB9Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2Fj
aGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAo
bVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAg
ICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1HTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBw
bHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1
dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9ncmFtLCBHTHNpemVpIGluc3RhbmNlcywgR0xz
aXplaSAqcmVwZWF0RHJhdykKLXsKLSAgICAqcmVwZWF0RHJhdyA9IDE7Ci0KLSAgICBpbnQgaW5k
ZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0
cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotCi0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0g
ICAgewotICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0
byBEM0Qgc3RyZWFtIDAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0
aXZlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRl
ID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3Ig
IT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dGFuY2VkQXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5k
ZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FU
VFJJQlMgKyAxXTsKLSAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1sw
XTsKLQotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9n
cmFtQmluYXJ5KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgc3RyZWFtID0gaTsKLQotICAgICAgICAgICAgaWYgKGluc3Rh
bmNlcyA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVn
IG9uIEFUSSBjYXJkcyB3ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhl
IGF0dHJpYnV0ZXMgYXJlIGluc3RhbmNlZC4KLSAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Vk
QXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICpyZXBlYXREcmF3ID0gaW5zdGFuY2VzOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA9PSBpbmRleGVkQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSAwOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gMCkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIFVJTlQgZnJl
cXVlbmN5ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOREVYRURE
QVRBIHwgaW5zdGFuY2VzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOU1RBTkNFREFUQSB8IGF0dHJpYnV0ZXNbaV0u
ZGl2aXNvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJl
cXVlbmN5KTsKLSAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtQXBw
bGllZFZCc1tzdHJlYW1dLnNlcmlhbCAhPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbCB8fAotICAgICAg
ICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3Ry
aWRlIHx8Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0
cmlidXRlc1tpXS5vZmZzZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2Uoc3RyZWFtLCBhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZlciwgYXR0
cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKLSAgICAgICAgICAgICAg
ICBtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOwotICAg
ICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlID0gYXR0cmlidXRlc1tpXS5z
dHJpZGU7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRy
aWJ1dGVzW2ldLm9mZnNldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudC0+
U3RyZWFtID0gc3RyZWFtOwotICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsKLSAgICAg
ICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLnR5cGU7Ci0gICAgICAgICAgICBl
bGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7Ci0gICAgICAgICAgICBlbGVt
ZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQt
PlVzYWdlSW5kZXggPSBwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGkpOwotICAgICAg
ICAgICAgZWxlbWVudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlcyA9
PSAwIHx8IGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewot
ICAgICAgICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5k
ID0gRDNEREVDTF9FTkQoKTsKLSAgICAqKGVsZW1lbnQrKykgPSBlbmQ7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewot
ICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtp
XTsKLSAgICAgICAgaWYgKG1lbWNtcChlbnRyeS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAo
ZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkpID09IDAgJiYg
ZW50cnktPnZlcnRleERlY2xhcmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbnRyeS0+
bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0gICAgICAgICAgICBpZihlbnRyeS0+dmVydGV4RGVjbGFy
YXRpb24gIT0gbUxhc3RTZXRWRGVjbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBk
ZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgbUxhc3RTZXRWRGVjbCA9IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEdMX05PX0VSUk9SOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0
ZXhEZWNsQ2FjaGU7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9D
QUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtp
XS5scnVDb3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGxhc3RDYWNoZSA9ICZtVmVydGV4RGVjbENhY2hlW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFz
dENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Ci0gICAgICAgIC8vIG1MYXN0U2V0VkRl
Y2wgaXMgc2V0IHRvIHRoZSByZXBsYWNlbWVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQot
ICAgICAgICAvLyBhYm91dCBpdC4KLSAgICB9Ci0KLSAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNo
ZWRFbGVtZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZF
UlRFWEVMRU1FTlQ5KSk7Ci0gICAgZGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVt
ZW50cywgJmxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIGRldmljZS0+U2V0VmVy
dGV4RGVjbGFyYXRpb24obGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgbUxhc3RT
ZXRWRGVjbCA9IGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb247Ci0gICAgbGFzdENhY2hlLT5s
cnVDb3VudCA9ICsrbU1heExydTsKLQotICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotdm9p
ZCBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJrU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1B
cHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7Ci0gICAgfQotCi0gICAgbUxhc3RTZXRWRGVjbCA9IE5V
TEw7Ci0gICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsgICAvLyBGb3JjZXMgaXQgdG8gYmUg
ZGlzYWJsZWQgd2hlbiBub3QgdXNlZAotfQotCi19Ci0KLWV4dGVybiAiQyIKLXsKLWdsOjpDb250
ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNj
ZXNzKQotewotICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29uZmlnLCBzaGFyZUNvbnRleHQs
IG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKLX0KLQotdm9pZCBnbERlc3Ryb3lDb250ZXh0
KGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIGRlbGV0ZSBjb250ZXh0OwotCi0gICAgaWYg
KGNvbnRleHQgPT0gZ2w6OmdldENvbnRleHQoKSkKLSAgICB7Ci0gICAgICAgIGdsOjptYWtlQ3Vy
cmVudChOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgZ2xNYWtlQ3VycmVudChn
bDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpCi17Ci0gICAgZ2w6Om1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3BsYXksIHN1cmZh
Y2UpOwotfQotCi1nbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgpCi17Ci0gICAgcmV0
dXJuIGdsOjpnZXRDb250ZXh0KCk7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
ZDQ3Y2U3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIENvbnRleHQuaDogRGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1h
bmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlv
bnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0
LgotCi0jaWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05U
RVhUX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2lu
Y2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWds
Lmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGhhc2hf
bWFwPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgZWds
Ci17Ci1jbGFzcyBEaXNwbGF5OwotY2xhc3MgU3VyZmFjZTsKLWNsYXNzIENvbmZpZzsKLX0KLQot
bmFtZXNwYWNlIGdsCi17Ci1zdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKLXN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhOwotCi1jbGFzcyBCdWZmZXI7Ci1jbGFzcyBTaGFkZXI7Ci1jbGFzcyBQ
cm9ncmFtOwotY2xhc3MgVGV4dHVyZTsKLWNsYXNzIFRleHR1cmUyRDsKLWNsYXNzIFRleHR1cmVD
dWJlTWFwOwotY2xhc3MgRnJhbWVidWZmZXI7Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBS
ZW5kZXJidWZmZXJTdG9yYWdlOwotY2xhc3MgQ29sb3JidWZmZXI7Ci1jbGFzcyBEZXB0aGJ1ZmZl
cjsKLWNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVyOwotY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKLWNs
YXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwotY2xhc3Mg
SW5kZXhEYXRhTWFuYWdlcjsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBGZW5jZTsKLWNsYXNzIFF1ZXJ5
OwotCi1lbnVtCi17Ci0gICAgRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTID0gMjU2LAotICAgIEQz
RDlfTUFYX0JPT0xfQ09OU1RBTlRTID0gMTYsCi0gICAgRDNEOV9NQVhfSU5UX0NPTlNUQU5UUyA9
IDE2LAotCi0gICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsCi0gICAgTUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlMgPSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgLSAyLCAgIC8vIFJlc2VydmUg
c3BhY2UgZm9yIGR4X0hhbGZQaXhlbFNpemUgYW5kIGR4X0RlcHRoUmFuZ2UuCi0gICAgTUFYX1ZB
UllJTkdfVkVDVE9SU19TTTIgPSA4LAotICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAs
Ci0gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBNQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFNfVlRGID0gNCwgICAvLyBGb3IgZGV2aWNlcyBzdXBwb3J0aW5nIHZlcnRl
eCB0ZXh0dXJlIGZldGNoCi0gICAgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
ID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGLCAgICAKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMiA9IDMyIC0g
MywgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgZHhfQ29vcmQsIGR4X0RlcHRoLCBhbmQgZHhfRGVw
dGhSYW5nZS4gZHhfUG9pbnRPckxpbmVzIGFuZCBkeF9Gcm9udENDVyB1c2Ugc2VwYXJhdGUgYm9v
bCByZWdpc3RlcnMuCi0gICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTMgPSAyMjQg
LSAzLAotICAgIE1BWF9EUkFXX0JVRkZFUlMgPSAxLAotCi0gICAgSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQgPSBHTF9SR0IsCi0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFID0gR0xfVU5TSUdORURfU0hPUlRfNV82XzUKLX07Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0g
ICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VELAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RF9DT05TRVJWQVRJVkUsCi0KLSAgICBRVUVSWV9UWVBFX0NPVU5UCi19OwotCi1jb25zdCBmbG9h
dCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFT
RURfTElORV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVf
UkFOR0VfTUFYX1NNMiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFO
R0VfTUFYX1NNMyA9IDY0LjBmOwotCi1zdHJ1Y3QgQ29sb3IKLXsKLSAgICBmbG9hdCByZWQ7Ci0g
ICAgZmxvYXQgZ3JlZW47Ci0gICAgZmxvYXQgYmx1ZTsKLSAgICBmbG9hdCBhbHBoYTsKLX07Ci0K
LS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRl
Ci1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0
ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3Ry
aWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDAp
Ci0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBdID0gMC4wZjsKLSAgICAgICAgbUN1cnJl
bnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMl0gPSAwLjBmOwotICAg
ICAgICBtQ3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAgICB9Ci0KLSAgICBpbnQgdHlwZVNpemUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUp
OwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVybiBtU2l6ZSAqIHNpemVv
ZihHTHVieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICByZXR1cm4gbVNp
emUgKiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDog
cmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKLSAgICAgICAgICBjYXNlIEdMX0ZJWEVE
OiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhlZCk7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOwotICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZs
b2F0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAg
fQotCi0gICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBvaW50ZXIKLSAgICBHTGVudW0gbVR5cGU7
Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9ybWFsaXplZDsKLSAgICBHTHNpemVpIG1T
dHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlkZQotCi0gICAgdW5pb24KLSAgICB7Ci0g
ICAgICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAgICAgICBpbnRwdHJfdCBtT2Zmc2V0Owot
ICAgIH07Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBD
YXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRlciBpcyBjYWxsZWQuCi0KLSAgICBib29s
IG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIK
LSAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19OwotCi10eXBlZGVmIFZlcnRleEF0dHJpYnV0
ZSBWZXJ0ZXhBdHRyaWJ1dGVBcnJheVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0vLyBIZWxwZXIg
c3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcgc3RhdGUKLXN0cnVjdCBTdGF0ZQotewotICAgIENv
bG9yIGNvbG9yQ2xlYXJWYWx1ZTsKLSAgICBHTGNsYW1wZiBkZXB0aENsZWFyVmFsdWU7Ci0gICAg
aW50IHN0ZW5jaWxDbGVhclZhbHVlOwotCi0gICAgYm9vbCBjdWxsRmFjZTsKLSAgICBHTGVudW0g
Y3VsbE1vZGU7Ci0gICAgR0xlbnVtIGZyb250RmFjZTsKLSAgICBib29sIGRlcHRoVGVzdDsKLSAg
ICBHTGVudW0gZGVwdGhGdW5jOwotICAgIGJvb2wgYmxlbmQ7Ci0gICAgR0xlbnVtIHNvdXJjZUJs
ZW5kUkdCOwotICAgIEdMZW51bSBkZXN0QmxlbmRSR0I7Ci0gICAgR0xlbnVtIHNvdXJjZUJsZW5k
QWxwaGE7Ci0gICAgR0xlbnVtIGRlc3RCbGVuZEFscGhhOwotICAgIEdMZW51bSBibGVuZEVxdWF0
aW9uUkdCOwotICAgIEdMZW51bSBibGVuZEVxdWF0aW9uQWxwaGE7Ci0gICAgQ29sb3IgYmxlbmRD
b2xvcjsKLSAgICBib29sIHN0ZW5jaWxUZXN0OwotICAgIEdMZW51bSBzdGVuY2lsRnVuYzsKLSAg
ICBHTGludCBzdGVuY2lsUmVmOwotICAgIEdMdWludCBzdGVuY2lsTWFzazsKLSAgICBHTGVudW0g
c3RlbmNpbEZhaWw7Ci0gICAgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsOwotICAgIEdMZW51
bSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKLSAgICBHTHVpbnQgc3RlbmNpbFdyaXRlbWFzazsKLSAg
ICBHTGVudW0gc3RlbmNpbEJhY2tGdW5jOwotICAgIEdMaW50IHN0ZW5jaWxCYWNrUmVmOwotICAg
IEdMdWludCBzdGVuY2lsQmFja01hc2s7Ci0gICAgR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbDsKLSAg
ICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAgIEdMZW51bSBzdGVuY2lsQmFj
a1Bhc3NEZXB0aFBhc3M7Ci0gICAgR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgIGJv
b2wgcG9seWdvbk9mZnNldEZpbGw7Ci0gICAgR0xmbG9hdCBwb2x5Z29uT2Zmc2V0RmFjdG9yOwot
ICAgIEdMZmxvYXQgcG9seWdvbk9mZnNldFVuaXRzOwotICAgIGJvb2wgc2FtcGxlQWxwaGFUb0Nv
dmVyYWdlOwotICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2U7Ci0gICAgR0xjbGFtcGYgc2FtcGxlQ292
ZXJhZ2VWYWx1ZTsKLSAgICBib29sIHNhbXBsZUNvdmVyYWdlSW52ZXJ0OwotICAgIGJvb2wgc2Np
c3NvclRlc3Q7Ci0gICAgYm9vbCBkaXRoZXI7Ci0KLSAgICBHTGZsb2F0IGxpbmVXaWR0aDsKLQot
ICAgIEdMZW51bSBnZW5lcmF0ZU1pcG1hcEhpbnQ7Ci0gICAgR0xlbnVtIGZyYWdtZW50U2hhZGVy
RGVyaXZhdGl2ZUhpbnQ7Ci0KLSAgICBHTGludCB2aWV3cG9ydFg7Ci0gICAgR0xpbnQgdmlld3Bv
cnRZOwotICAgIEdMc2l6ZWkgdmlld3BvcnRXaWR0aDsKLSAgICBHTHNpemVpIHZpZXdwb3J0SGVp
Z2h0OwotICAgIGZsb2F0IHpOZWFyOwotICAgIGZsb2F0IHpGYXI7Ci0KLSAgICBHTGludCBzY2lz
c29yWDsKLSAgICBHTGludCBzY2lzc29yWTsKLSAgICBHTHNpemVpIHNjaXNzb3JXaWR0aDsKLSAg
ICBHTHNpemVpIHNjaXNzb3JIZWlnaHQ7Ci0KLSAgICBib29sIGNvbG9yTWFza1JlZDsKLSAgICBi
b29sIGNvbG9yTWFza0dyZWVuOwotICAgIGJvb2wgY29sb3JNYXNrQmx1ZTsKLSAgICBib29sIGNv
bG9yTWFza0FscGhhOwotICAgIGJvb2wgZGVwdGhNYXNrOwotCi0gICAgdW5zaWduZWQgaW50IGFj
dGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZlIHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRV
UkUwCi0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5n
UG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICBHTHVpbnQgcmVhZEZyYW1l
YnVmZmVyOwotICAgIEdMdWludCBkcmF3RnJhbWVidWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8
UmVuZGVyYnVmZmVyPiByZW5kZXJidWZmZXI7Ci0gICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwot
Ci0gICAgVmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNd
OwotICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfVFlQ
RV9DT1VOVF1bTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLSAgICBCaW5k
aW5nUG9pbnRlcjxRdWVyeT4gYWN0aXZlUXVlcnlbUVVFUllfVFlQRV9DT1VOVF07Ci0KLSAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXI7Ci19OwotCi0vLyBIZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0
IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zCi1jbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlCi17Ci0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0gICAgflZl
cnRleERlY2xhcmF0aW9uQ2FjaGUoKTsKLQotICAgIEdMZW51bSBhcHBseURlY2xhcmF0aW9uKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10s
IFByb2dyYW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3
KTsKLQotICAgIHZvaWQgbWFya1N0YXRlRGlydHkoKTsKLQotICBwcml2YXRlOgotICAgIFVJTlQg
bU1heExydTsKLQotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMy
IH07Ci0KLSAgICBzdHJ1Y3QgVkJEYXRhCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc2Vy
aWFsOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlOwotICAgICAgICB1bnNpZ25lZCBpbnQg
b2Zmc2V0OwotICAgIH07Ci0KLSAgICBWQkRhdGEgbUFwcGxpZWRWQnNbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7Ci0g
ICAgYm9vbCBtSW5zdGFuY2luZ0VuYWJsZWQ7Ci0KLSAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hl
RW50cnkKLSAgICB7Ci0gICAgICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW01B
WF9WRVJURVhfQVRUUklCUyArIDFdOwotICAgICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBJ
RGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKnZlcnRleERlY2xhcmF0aW9uOwotICAgIH0gbVZl
cnRleERlY2xDYWNoZVtOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFU107Ci19OwotCi1jbGFz
cyBDb250ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRz
LCBib29sIHJvYnVzdEFjY2Vzcyk7Ci0KLSAgICB+Q29udGV4dCgpOwotCi0gICAgdm9pZCBtYWtl
Q3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKLSAgICB2b2lkIG1hcmtEeFVu
aWZvcm1zRGlydHkoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrQ29udGV4dExvc3QoKTsKLSAg
ICBib29sIGlzQ29udGV4dExvc3QoKTsKLQotICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgotICAg
IHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBm
bG9hdCBhbHBoYSk7Ci0KLSAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOwotCi0g
ICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwotCi0gICAgdm9pZCBzZXRDdWxs
RmFjZShib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBzZXRGcm9u
dEZhY2UoR0xlbnVtIGZyb250KTsKLQotICAgIHZvaWQgc2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxl
ZCk7Ci0gICAgYm9vbCBpc0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0
RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpOwotCi0gICAgdm9pZCBzZXREZXB0aFJhbmdlKGZs
b2F0IHpOZWFyLCBmbG9hdCB6RmFyKTsKLSAgICAKLSAgICB2b2lkIHNldEJsZW5kKGJvb2wgZW5h
YmxlZCk7Ci0gICAgYm9vbCBpc0JsZW5kRW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRC
bGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3Vy
Y2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSk7Ci0gICAgdm9pZCBzZXRCbGVuZENvbG9yKGZsb2F0
IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHNl
dEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbik7
Ci0KLSAgICB2b2lkIHNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1N0
ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTdGVuY2lsUGFyYW1zKEdM
ZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKTsK
LSAgICB2b2lkIHNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdM
aW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKTsKLSAgICB2b2lkIHNl
dFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spOwotICAgIHZvaWQgc2V0
U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICB2
b2lkIHNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpOwotICAgIHZvaWQg
c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBz
dGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mp
OwotCi0gICAgdm9pZCBzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpOwotICAgIGJv
b2wgaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UG9s
eWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7Ci0KLSAgICB2
b2lkIHNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNT
YW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFNhbXBs
ZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2
YWx1ZSwgYm9vbCBpbnZlcnQpOwotCi0gICAgdm9pZCBzZXRTY2lzc29yVGVzdChib29sIGVuYWJs
ZWQpOwotICAgIGJvb2wgaXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQg
c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0RpdGhlckVuYWJsZWQoKSBjb25z
dDsKLQotICAgIHZvaWQgc2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwotCi0gICAgdm9pZCBz
ZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpOwotICAgIHZvaWQgc2V0RnJhZ21lbnRT
aGFkZXJEZXJpdmF0aXZlSGludChHTGVudW0gaGludCk7Ci0KLSAgICB2b2lkIHNldFZpZXdwb3J0
UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
LQotICAgIHZvaWQgc2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIHNldENvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKLSAgICB2b2lkIHNldERlcHRoTWFz
ayhib29sIG1hc2spOwotCi0gICAgdm9pZCBzZXRBY3RpdmVTYW1wbGVyKHVuc2lnbmVkIGludCBh
Y3RpdmUpOwotCi0gICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Owot
ICAgIEdMdWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKLSAgICBHTHVpbnQg
Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7Ci0KLSAgICBHTHVpbnQgZ2V0QXJyYXlCdWZm
ZXJIYW5kbGUoKSBjb25zdDsKLQotICAgIEdMdWludCBnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFy
Z2V0KSBjb25zdDsKLQotICAgIHZvaWQgc2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pOwotICAgIHZv
aWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVyICpi
b3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpw
b2ludGVyKTsKLSAgICBjb25zdCB2b2lkICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVk
IGludCBhdHRyaWJOdW0pIGNvbnN0OwotCi0gICAgY29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkg
JmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKLQotICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdM
aW50IGFsaWdubWVudCk7Ci0gICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKLSAgICBHTGludCBn
ZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhY2tSZXZlcnNlUm93T3Jk
ZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpOwotICAgIGJvb2wgZ2V0UGFja1JldmVyc2VSb3dPcmRl
cigpIGNvbnN0OwotCi0gICAgLy8gVGhlc2UgY3JlYXRlICBhbmQgZGVzdHJveSBtZXRob2RzIGFy
ZSBtZXJlbHkgcGFzcy10aHJvdWdocyB0byAKLSAgICAvLyBSZXNvdXJjZU1hbmFnZXIsIHdoaWNo
IG93bnMgdGhlc2Ugb2JqZWN0IHR5cGVzCi0gICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOwotICAg
IEdMdWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIEdMdWludCBjcmVhdGVQcm9n
cmFtKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQgY3JlYXRlUmVu
ZGVyYnVmZmVyKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAg
ICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dy
YW0oR0x1aW50IHByb2dyYW0pOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSk7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0K
LSAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBt
ZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKLSAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIo
KTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0KLSAg
ICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LgotICAgIEdMdWludCBjcmVhdGVG
ZW5jZSgpOwotICAgIHZvaWQgZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKTsKLSAgICAKLSAgICAv
LyBRdWVyaWVzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dDsKLSAgICBHTHVpbnQgY3JlYXRlUXVl
cnkoKTsKLSAgICB2b2lkIGRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSk7Ci0KLSAgICB2b2lkIGJp
bmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlC
dWZmZXIoR0x1aW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0
dXJlKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7Ci0gICAg
dm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBi
aW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kUmVu
ZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSk7Ci0KLSAgICB2b2lkIGJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50
IHF1ZXJ5KTsKLSAgICB2b2lkIGVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpOwotCi0gICAgdm9pZCBz
ZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKLQotICAgIHZvaWQg
c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIp
OwotCi0gICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZXMpOwotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgs
IEdMdWludCBkaXZpc29yKTsKLQotICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUp
OwotICAgIEZlbmNlICpnZXRGZW5jZShHTHVpbnQgaGFuZGxlKTsKLSAgICBTaGFkZXIgKmdldFNo
YWRlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5k
bGUpOwotICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7Ci0gICAgRnJhbWVi
dWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIFJlbmRlcmJ1ZmZlciAq
Z2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIFF1ZXJ5ICpnZXRRdWVyeShHTHVp
bnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUpOwotCi0gICAgQnVmZmVyICpnZXRB
cnJheUJ1ZmZlcigpOwotICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAg
UHJvZ3JhbSAqZ2V0Q3VycmVudFByb2dyYW0oKTsKLSAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUy
RCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1
cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0
eXBlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVi
dWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVt
IHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKTsKLSAgICBib29sIGdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwg
R0xib29sZWFuICpwYXJhbXMpOwotCi0gICAgYm9vbCBnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xl
bnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKTsKLQotICAg
IHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZv
aWQqIHBpeGVscyk7Ci0gICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwotICAgIHZvaWQg
ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKLSAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0
YW5jZXMpOwotICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAvLyBmbHVzaC9maW5pc2gKLQot
ICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCk7Ci0KLSAgICB2b2lkIHJlY29yZEludmFsaWRF
bnVtKCk7Ci0gICAgdm9pZCByZWNvcmRJbnZhbGlkVmFsdWUoKTsKLSAgICB2b2lkIHJlY29yZElu
dmFsaWRPcGVyYXRpb24oKTsKLSAgICB2b2lkIHJlY29yZE91dE9mTWVtb3J5KCk7Ci0gICAgdm9p
ZCByZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKTsKLQotICAgIEdMZW51bSBnZXRF
cnJvcigpOwotICAgIEdMZW51bSBnZXRSZXNldFN0YXR1cygpOwotICAgIHZpcnR1YWwgYm9vbCBp
c1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpOwotCi0gICAgYm9vbCBzdXBwb3J0c1NoYWRlck1v
ZGVsMygpIGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsK
LSAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7Ci0gICAgaW50IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdDsKLSAg
ICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4
aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1UZXh0
dXJlTGV2ZWwoKSBjb25zdDsKLSAgICBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBj
b25zdDsKLSAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1h
dCwgaW50IHJlcXVlc3RlZCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0UmVuZGVyZXJTdHJpbmcoKSBjb25zdDsK
LSAgICBib29sIHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0
c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRFhUMVRleHR1cmVz
KCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0OwotICAgIGJv
b2wgc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQz
MlRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIo
KSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpIGNv
bnN0OwotICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29s
IHN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0x1bWlu
YW5jZVRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4
dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Owot
ICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3Jj
WTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKLQotICAgIEJsaXQgKmdldEJs
aXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQotCi0gICAgY29uc3QgRDNEQ0FQUzkgJmdldERldmlj
ZUNhcHMoKSB7IHJldHVybiBtRGV2aWNlQ2FwczsgfQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKENvbnRleHQpOwotCi0gICAgYm9vbCBhcHBseVJlbmRlclRhcmdl
dChib29sIGlnbm9yZVZpZXdwb3J0KTsKLSAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdN
b2RlKTsKLSAgICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KTsKLSAgICBHTGVu
dW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQs
IEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZv
KTsKLSAgICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwot
ICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIHZvaWQgZGV0
YWNoQnVmZmVyKEdMdWludCBidWZmZXIpOwotICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQg
dGV4dHVyZSk7Ci0gICAgdm9pZCBkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIp
OwotICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0g
ICAgVGV4dHVyZSAqZ2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSk7Ci0KLSAg
ICBib29sIGN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKLSAgICBib29sIGlzVHJpYW5n
bGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJpbmco
KTsKLSAgICB2b2lkIGluaXRSZW5kZXJlclN0cmluZygpOwotCi0gICAgY29uc3QgZWdsOjpDb25m
aWcgKmNvbnN0IG1Db25maWc7Ci0gICAgZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKLSAgICBJRGly
ZWN0M0REZXZpY2U5ICptRGV2aWNlOwotCi0gICAgU3RhdGUgbVN0YXRlOwotCi0gICAgQmluZGlu
Z1BvaW50ZXI8VGV4dHVyZTJEPiBtVGV4dHVyZTJEWmVybzsKLSAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwWmVybzsKLQotICAgIHR5cGVkZWYgc3RkZXh0
OjpoYXNoX21hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7Ci0gICAgRnJh
bWVidWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtRnJhbWVi
dWZmZXJIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1
aW50LCBGZW5jZSo+IEZlbmNlTWFwOwotICAgIEZlbmNlTWFwIG1GZW5jZU1hcDsKLSAgICBIYW5k
bGVBbGxvY2F0b3IgbUZlbmNlSGFuZGxlQWxsb2NhdG9yOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6
Omhhc2hfbWFwPEdMdWludCwgUXVlcnkqPiBRdWVyeU1hcDsKLSAgICBRdWVyeU1hcCBtUXVlcnlN
YXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHN0
ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7Ci0gICAgc3RkOjpzdHJpbmcgbVJlbmRlcmVyU3Ry
aW5nOwotCi0gICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBJ
bmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKLQotICAgIEJsaXQgKm1CbGl0Owot
Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKm1MaW5lTG9vcElCOwotICAgIAotICAgIEJpbmRp
bmdQb2ludGVyPFRleHR1cmU+IG1JbmNvbXBsZXRlVGV4dHVyZXNbVEVYVFVSRV9UWVBFX0NPVU5U
XTsKLQotICAgIC8vIFJlY29yZGVkIGVycm9ycwotICAgIGJvb2wgbUludmFsaWRFbnVtOwotICAg
IGJvb2wgbUludmFsaWRWYWx1ZTsKLSAgICBib29sIG1JbnZhbGlkT3BlcmF0aW9uOwotICAgIGJv
b2wgbU91dE9mTWVtb3J5OwotICAgIGJvb2wgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbjsK
LQotICAgIC8vIEN1cnJlbnQvbG9zdCBjb250ZXh0IGZsYWdzCi0gICAgYm9vbCBtSGFzQmVlbkN1
cnJlbnQ7Ci0gICAgYm9vbCBtQ29udGV4dExvc3Q7Ci0gICAgR0xlbnVtIG1SZXNldFN0YXR1czsK
LSAgICBHTGVudW0gbVJlc2V0U3RyYXRlZ3k7Ci0gICAgYm9vbCBtUm9idXN0QWNjZXNzOwotCi0g
ICAgdW5zaWduZWQgaW50IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW01BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNbTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVk
UHJvZ3JhbVNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJp
YWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5z
aWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRJQlNlcmlhbDsKLSAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAg
ICBib29sIG1WaWV3cG9ydEluaXRpYWxpemVkOwotICAgIEQzRFZJRVdQT1JUOSBtU2V0Vmlld3Bv
cnQ7Ci0gICAgYm9vbCBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkOwotICAgIEQzRFNVUkZB
Q0VfREVTQyBtUmVuZGVyVGFyZ2V0RGVzYzsKLSAgICBib29sIG1EeFVuaWZvcm1zRGlydHk7Ci0g
ICAgUHJvZ3JhbSAqbUNhY2hlZEN1cnJlbnRQcm9ncmFtOwotICAgIEZyYW1lYnVmZmVyICptQm91
bmREcmF3RnJhbWVidWZmZXI7Ci0KLSAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKLSAg
ICBib29sIG1TdXBwb3J0c1ZlcnRleFRleHR1cmU7Ci0gICAgYm9vbCBtU3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlOwotICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKLSAgICBpbnQgIG1NYXhS
ZW5kZXJidWZmZXJEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLSAg
ICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJlTGV2
ZWw7Ci0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBsZVN1cHBvcnQ7
Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLSAgICBib29sIG1TdXBwb3J0c0V2
ZW50UXVlcmllczsKLSAgICBib29sIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci0gICAgYm9v
bCBtU3VwcG9ydHNEWFQxVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7
Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQ1VGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9h
dDMyVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyOwotICAg
IGJvb2wgbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlczsKLSAgICBib29sIG1TdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0
ZXI7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwotICAgIGJv
b2wgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzOwotICAgIGJvb2wgbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsKLSAgICBi
b29sIG1TdXBwb3J0czMyYml0SW5kaWNlczsKLSAgICBpbnQgbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0czsKLQotICAgIC8vIHN0YXRlIGNhY2hpbmcgZmxhZ3MKLSAgICBib29sIG1DbGVhclN0
YXRlRGlydHk7Ci0gICAgYm9vbCBtQ3VsbFN0YXRlRGlydHk7Ci0gICAgYm9vbCBtRGVwdGhTdGF0
ZURpcnR5OwotICAgIGJvb2wgbU1hc2tTdGF0ZURpcnR5OwotICAgIGJvb2wgbVBpeGVsUGFja2lu
Z1N0YXRlRGlydHk7Ci0gICAgYm9vbCBtQmxlbmRTdGF0ZURpcnR5OwotICAgIGJvb2wgbVN0ZW5j
aWxTdGF0ZURpcnR5OwotICAgIGJvb2wgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5OwotICAgIGJv
b2wgbVNjaXNzb3JTdGF0ZURpcnR5OwotICAgIGJvb2wgbVNhbXBsZVN0YXRlRGlydHk7Ci0gICAg
Ym9vbCBtRnJvbnRGYWNlRGlydHk7Ci0gICAgYm9vbCBtRGl0aGVyU3RhdGVEaXJ0eTsKLQotICAg
IElEaXJlY3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOwotCi0gICAgRDNE
Q0FQUzkgbURldmljZUNhcHM7Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFn
ZXI7Ci0KLSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
OwotfTsKLX0KLQotZXh0ZXJuICJDIgotewotLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2Ug
YnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRz
LCBib29sIHJvYnVzdEFjY2Vzcyk7Ci12b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQg
KmNvbnRleHQpOwotdm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci1nbDo6Q29udGV4dCAq
Z2xHZXRDdXJyZW50Q29udGV4dCgpOwotX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7
Ci1ib29sIF9fc3RkY2FsbCBnbEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwot
fQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0NPTlRFWFRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE0ZDEyMzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GZW5jZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6RmVuY2Ug
Y2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNpb24uCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0K
LW5hbWVzcGFjZSBnbAotewotCi1GZW5jZTo6RmVuY2UoZWdsOjpEaXNwbGF5KiBkaXNwbGF5KQot
ewotICAgIG1EaXNwbGF5ID0gZGlzcGxheTsKLSAgICBtUXVlcnkgPSBOVUxMOwotICAgIG1Db25k
aXRpb24gPSBHTF9OT05FOwotICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLX0KLQotRmVuY2U6On5G
ZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbURpc3Bs
YXktPmZyZWVFdmVudFF1ZXJ5KG1RdWVyeSk7Ci0gICAgfQotfQotCi1HTGJvb2xlYW4gRmVuY2U6
OmlzRmVuY2UoKQotewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJl
dHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlz
IG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KLSAgICByZXR1cm4gbVF1ZXJ5ICE9
IE5VTEw7Ci19Ci0KLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCi17Ci0g
ICAgaWYgKCFtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnkgPSBtRGlzcGxheS0+YWxsb2Nh
dGVFdmVudFF1ZXJ5KCk7Ci0gICAgICAgIGlmICghbVF1ZXJ5KQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgbUNvbmRpdGlvbiA9IGNvbmRpdGlvbjsK
LSAgICBtU3RhdHVzID0gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTo6dGVzdEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwotICAgIH0KLQotICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0g
ICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQotICAgIHsKLSAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3Vs
dCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBtU3RhdHVzID0gcmVzdWx0ID09
IFNfT0s7Ci0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLXZvaWQgRmVuY2U6OmZpbmlzaEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNl
KCkpCi0gICAgewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2U6Omdl
dEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIGlmIChtUXVlcnkg
PT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgR0xf
RkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBz
cGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4g
ZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBz
dGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAgLy8gb3Ig
R2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJl
bWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KLSAgICAg
ICAgICAgIGlmIChtU3RhdHVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFt
c1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0
YShOVUxMLCAwLCAwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNoZWNrRGV2aWNl
TG9zdChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9
IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwg
cmVzdWx0ID09IFNfRkFMU0UpOwotICAgICAgICAgICAgbVN0YXR1cyA9IHJlc3VsdCA9PSBTX09L
OwotICAgICAgICAgICAgcGFyYW1zWzBdID0gbVN0YXR1czsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05f
TlY6Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBtQ29uZGl0aW9uOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5NjI2Y2IwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRmVuY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZlbmNlLmg6IERlZmluZXMgdGhlIGdsOjpGZW5jZSBjbGFz
cywgd2hpY2ggc3VwcG9ydHMgdGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4KLQotI2lmbmRlZiBM
SUJHTEVTVjJfRkVOQ0VfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0ZFTkNFX0hfCi0KLSNkZWZpbmUg
R0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQot
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNz
IERpc3BsYXk7Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBGZW5jZQotewotICBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgRmVuY2UoZWdsOjpEaXNwbGF5KiBkaXNwbGF5KTsKLSAgICB2aXJ0
dWFsIH5GZW5jZSgpOwotCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZl
bmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2
b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xp
bnQgKnBhcmFtcyk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
RmVuY2UpOwotCi0gICAgZWdsOjpEaXNwbGF5KiBtRGlzcGxheTsKLSAgICBJRGlyZWN0M0RRdWVy
eTkqIG1RdWVyeTsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKLSAgICBHTGJvb2xlYW4gbVN0YXR1
czsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0ZFTkNFX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQ0MjgzLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTA5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZyYW1lYnVm
ZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRz
IEdMIGZyYW1lYnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNS4KLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1
cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAot
ewotCi1GcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIoKQotewotICAgIG1Db2xvcmJ1ZmZlclR5cGUg
PSBHTF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2ls
YnVmZmVyVHlwZSA9IEdMX05PTkU7Ci19Ci0KLUZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQot
ewotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1EZXB0aGJ1ZmZlclBv
aW50ZXIuc2V0KE5VTEwpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0g
ICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotfQotCi1SZW5kZXJidWZmZXIg
KkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5k
bGUpIGNvbnN0Ci17Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OwotICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLQotICAgIGlmICh0eXBlID09IEdM
X05PTkUpCi0gICAgewotICAgICAgICBidWZmZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChJc0ludGVy
bmFsVGV4dHVyZVRhcmdldCh0eXBlKSkKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQt
PmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVyKHR5cGUpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBi
dWZmZXI7Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgY29sb3JidWZmZXIpCi17Ci0gICAgbUNvbG9yYnVmZmVyVHlwZSA9IChjb2xvcmJ1
ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0
KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBjb2xvcmJ1ZmZlcikpOwotfQotCi12b2lkIEZyYW1l
YnVmZmVyOjpzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQot
ewotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xf
Tk9ORTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlw
ZSwgZGVwdGhidWZmZXIpKTsKLX0KLQotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZl
cihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCi17Ci0gICAgbVN0ZW5jaWxidWZm
ZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3Rl
bmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1
cmUpCi17Ci0gICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQotICAgIHsKLSAgICAgICAg
bUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0g
dGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQotICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9O
RTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVy
KQotewotICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgbUNv
bG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0
KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVu
ZGVyYnVmZmVyICYmIG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsK
LSAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50
ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKLSAgICB7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0g
ICAgICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgfQotfQotCi11bnNp
Z25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCi17Ci0gICAgUmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAg
ICBpZiAoY29sb3JidWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY29sb3JidWZmZXItPmdl
dFNlcmlhbCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0
KCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRl
ci5nZXQoKTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
b2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7
Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1l
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVu
Y2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICAKLSAgICBpZiAoIWRl
cHRoc3RlbmNpbGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhzdGVuY2ls
YnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlci0+Z2V0RGVw
dGhTdGVuY2lsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGRl
cHRoYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAoc3RlbmNpbGJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6
Z2V0Q29sb3JidWZmZXIoKQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgp
OwotfQotCi1SZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCi17Ci0g
ICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAq
RnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKQotewotICAgIHJldHVybiBtU3RlbmNpbGJ1
ZmZlclBvaW50ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldE51
bGxDb2xvcmJ1ZmZlcigpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpudWxsYnVmZmVyICA9IG1OdWxs
Q29sb3JidWZmZXJQb2ludGVyLmdldCgpOwotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIg
PSBnZXREZXB0aGJ1ZmZlcigpOwotCi0gICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIEVSUigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZvciBkZXB0aC1vbmx5IEZCTy4i
KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgR0xzaXplaSB3aWR0aCAgPSBk
ZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IGRlcHRoYnVmZmVy
LT5nZXRIZWlnaHQoKTsKLQotICAgIGlmICghbnVsbGJ1ZmZlciB8fAotICAgICAgICB3aWR0aCAh
PSBudWxsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBudWxsYnVmZmVyLT5nZXRIZWln
aHQoKSkKLSAgICB7Ci0gICAgICAgIG51bGxidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKDAsIG5l
dyBDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7Ci0gICAgICAgIG1OdWxs
Q29sb3JidWZmZXJQb2ludGVyLnNldChudWxsYnVmZmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbGJ1ZmZlcjsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUo
KQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJUeXBlOwotfQotCi1HTGVudW0gRnJhbWVidWZm
ZXI6OmdldERlcHRoYnVmZmVyVHlwZSgpCi17Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7
Ci19Ci0KLUdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKQotewotICAg
IHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0
Q29sb3JidWZmZXJIYW5kbGUoKQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmlk
KCk7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKQotewot
ICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmlkKCk7Ci19Ci0KLUdMdWludCBGcmFtZWJ1
ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpCi17Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5pZCgpOwotfQotCi1ib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkKLXsK
LSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBS
ZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXJPYmplY3QgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0K
LSAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgpID4gMDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVy
Ojpjb21wbGV0ZW5lc3MoKQotewotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBoZWlnaHQgPSAwOwotICAgIGlu
dCBzYW1wbGVzID0gLTE7Ci0gICAgYm9vbCBtaXNzaW5nQXR0YWNobWVudCA9IHRydWU7Ci0KLSAg
ICBpZiAobUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgUmVuZGVy
YnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFj
b2xvcmJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb2xvcmJ1
ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0g
R0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0NvbG9y
UmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0lu
dGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCk7Ci0gICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gY29sb3JidWZmZXItPmdl
dEQzREZvcm1hdCgpOwotCi0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGludGVybmFsZm9y
bWF0KSB8fAotICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0FMUEhBIHx8Ci0g
ICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAg
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0
KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJl
cygpKSB8fAotICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1h
dCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQ
T1JURUQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aFRl
eHR1cmVGb3JtYXQoZDNkZm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChk
M2Rmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7Ci0gICAg
ICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgc2FtcGxlcyA9
IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7Ci0g
ICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKLQotICAgIGlmIChtRGVwdGhi
dWZmZXJUeXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERl
cHRoYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGRl
cHRoYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhi
dWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9
IGRlcHRoYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICAgICAgLy8gZGVwdGggdGV4
dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZHgyZXM6OklzRGVwdGhU
ZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICAg
ICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBtaXNz
aW5nQXR0YWNobWVudCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRo
ICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0
SGVpZ2h0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX0RJTUVOU0lPTlM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2FtcGxl
cyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKLSAg
ICB7Ci0gICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAg
ICAgaWYgKCFzdGVuY2lsYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRI
ZWlnaHQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TdGVu
Y2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghZ2w6OklzU3RlbmNpbFJlbmRlcmFibGUoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5
cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNp
bGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNp
bCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKLSAgICAgICAgICAgIC8vIG9mIE9FU19w
YWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRl
eHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsK
LSAgICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwotICAgICAg
ICAgICAgc2FtcGxlcyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAg
IG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
d2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoc2FtcGxlcyAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FO
R0xFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGgg
YW5kIHN0ZW5jaWwgYnVmZmVyLCB0aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0Ci0g
ICAgLy8gc2luY2Ugd2Ugb25seSBzdXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qg
c2VwYXJhdGUgZGVwdGggYW5kIHN0ZW5jaWwKLSAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNp
bGJ1ZmZlciAmJiAoZGVwdGhidWZmZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgfQotCi0gICAgLy8gd2Ug
bmVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBhdHRhY2htZW50IHRvIGJlIGNvbXBsZXRlCi0gICAg
aWYgKG1pc3NpbmdBdHRhY2htZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwotICAgIH0KLQotICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURTsKLX0KLQotRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0
RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIg
KmRlcHRoU3RlbmNpbCkKLXsKLSAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChuZXcgUmVuZGVy
YnVmZmVyKDAsIGNvbG9yYnVmZmVyKSk7Ci0KLSAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNp
bFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBt
RGVwdGhidWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKLQotICAg
IG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgbURlcHRoYnVmZmVyVHlw
ZSA9IChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xf
UkVOREVSQlVGRkVSIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSAoZGVwdGhT
dGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVG
RkVSIDogR0xfTk9ORTsKLX0KLQotaW50IEZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkKLXsKLSAg
ICBpZiAoY29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMZW51bSBEZWZh
dWx0RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCi17Ci0gICAgLy8gVGhlIGRlZmF1bHQgZnJh
bWVidWZmZXIgc2hvdWxkIGFsd2F5cyBiZSBjb21wbGV0ZQotICAgIEFTU0VSVChGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpOwotCi0gICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE0ZDljMmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTgg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRnJhbWVidWZmZXIuaDogRGVmaW5lcyB0
aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCi0vLyBv
YmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDQuNCBwYWdlIDEwNS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KLSNk
ZWZpbmUgTElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0KLW5h
bWVzcGFjZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotY2xhc3MgQ29sb3JidWZmZXI7Ci1j
bGFzcyBEZXB0aGJ1ZmZlcjsKLWNsYXNzIFN0ZW5jaWxidWZmZXI7Ci1jbGFzcyBEZXB0aFN0ZW5j
aWxidWZmZXI7Ci0KLWNsYXNzIEZyYW1lYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBGcmFtZWJ1
ZmZlcigpOwotCi0gICAgdmlydHVhbCB+RnJhbWVidWZmZXIoKTsKLQotICAgIHZvaWQgc2V0Q29s
b3JidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRE
ZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lkIHNl
dFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKLQotICAg
IHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZXRhY2hSZW5k
ZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNp
bCgpOwotCi0gICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbCgpOwotICAgIHVu
c2lnbmVkIGludCBnZXREZXB0aGJ1ZmZlclNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRT
dGVuY2lsYnVmZmVyU2VyaWFsKCk7Ci0KLSAgICBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVy
KCk7Ci0gICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVm
ZmVyKCk7Ci0KLSAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgR0xlbnVtIGdl
dERlcHRoYnVmZmVyVHlwZSgpOwotICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwot
Ci0gICAgR0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKCk7Ci0gICAgR0x1aW50IGdldERlcHRo
YnVmZmVySGFuZGxlKCk7Ci0gICAgR0x1aW50IGdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKLQot
ICAgIGJvb2wgaGFzU3RlbmNpbCgpOwotICAgIGludCBnZXRTYW1wbGVzKCk7Ci0KLSAgICB2aXJ0
dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgR0xlbnVtIG1D
b2xvcmJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3Ji
dWZmZXJQb2ludGVyOwotCi0gICAgR0xlbnVtIG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVwdGhidWZmZXJQb2ludGVyOwotCi0gICAgR0xlbnVt
IG1TdGVuY2lsYnVmZmVyVHlwZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1T
dGVuY2lsYnVmZmVyUG9pbnRlcjsKLQotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4g
bU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwotCi0gICAgUmVuZGVyYnVmZmVyICpsb29rdXBSZW5k
ZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0OwotfTsKLQotY2xhc3Mg
RGVmYXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAg
ICBEZWZhdWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5j
aWxidWZmZXIgKmRlcHRoU3RlbmNpbCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5l
c3MoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0
RnJhbWVidWZmZXIpOwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZG
RVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
SGFuZGxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvSGFuZGxlQWxsb2NhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5
OGY4YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0hhbmRsZUFsbG9jYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBIYW5kbGVBbGxvY2F0b3IuY3BwOiBJbXBsZW1lbnRzIHRoZSBn
bDo6SGFuZGxlQWxsb2NhdG9yIGNsYXNzLCB3aGljaCBpcyB1c2VkCi0vLyB0byBhbGxvY2F0ZSBH
TCBoYW5kbGVzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLUhhbmRsZUFs
bG9jYXRvcjo6SGFuZGxlQWxsb2NhdG9yKCkgOiBtQmFzZVZhbHVlKDEpLCBtTmV4dFZhbHVlKDEp
Ci17Ci19Ci0KLUhhbmRsZUFsbG9jYXRvcjo6fkhhbmRsZUFsbG9jYXRvcigpCi17Ci19Ci0KLXZv
aWQgSGFuZGxlQWxsb2NhdG9yOjpzZXRCYXNlSGFuZGxlKEdMdWludCB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQobUJhc2VWYWx1ZSA9PSBtTmV4dFZhbHVlKTsKLSAgICBtQmFzZVZhbHVlID0gdmFsdWU7
Ci0gICAgbU5leHRWYWx1ZSA9IHZhbHVlOwotfQotCi1HTHVpbnQgSGFuZGxlQWxsb2NhdG9yOjph
bGxvY2F0ZSgpCi17Ci0gICAgaWYgKG1GcmVlVmFsdWVzLnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IEdMdWludCBoYW5kbGUgPSBtRnJlZVZhbHVlcy5iYWNrKCk7Ci0gICAgICAgIG1GcmVlVmFsdWVz
LnBvcF9iYWNrKCk7Ci0gICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgfQotICAgIHJldHVybiBt
TmV4dFZhbHVlKys7Ci19Ci0KLXZvaWQgSGFuZGxlQWxsb2NhdG9yOjpyZWxlYXNlKEdMdWludCBo
YW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSBtTmV4dFZhbHVlIC0gMSkKLSAgICB7Ci0gICAg
ICAgIC8vIERvbid0IGRyb3AgYmVsb3cgYmFzZSB2YWx1ZQotICAgICAgICBpZihtTmV4dFZhbHVl
ID4gbUJhc2VWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbU5leHRWYWx1ZS0tOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgZnJlZSBoYW5k
bGVzIHRoYXQgd2Ugb3duIC0gZG9uJ3QgZHJvcCBiZWxvdyB0aGUgYmFzZSB2YWx1ZQotICAgICAg
ICBpZiAoaGFuZGxlID49IG1CYXNlVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmVl
VmFsdWVzLnB1c2hfYmFjayhoYW5kbGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9j
YXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxv
Y2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyZTE2OC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRv
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gSGFuZGxlQWxsb2NhdG9yLmg6IERlZmluZXMgdGhlIGdsOjpIYW5kbGVBbGxvY2F0b3IgY2xh
c3MsIHdoaWNoIGlzIHVzZWQgdG8KLS8vIGFsbG9jYXRlIEdMIGhhbmRsZXMuCi0KLSNpZm5kZWYg
TElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfSEFORExFQUxM
T0NBVE9SX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgot
Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIEhhbmRsZUFsbG9jYXRvcgotewotICBwdWJsaWM6Ci0g
ICAgSGFuZGxlQWxsb2NhdG9yKCk7Ci0gICAgdmlydHVhbCB+SGFuZGxlQWxsb2NhdG9yKCk7Ci0K
LSAgICB2b2lkIHNldEJhc2VIYW5kbGUoR0x1aW50IHZhbHVlKTsKLQotICAgIEdMdWludCBhbGxv
Y2F0ZSgpOwotICAgIHZvaWQgcmVsZWFzZShHTHVpbnQgaGFuZGxlKTsKLQotICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihIYW5kbGVBbGxvY2F0b3IpOwotCi0gICAgR0x1
aW50IG1CYXNlVmFsdWU7Ci0gICAgR0x1aW50IG1OZXh0VmFsdWU7Ci0gICAgdHlwZWRlZiBzdGQ6
OnZlY3RvcjxHTHVpbnQ+IEhhbmRsZUxpc3Q7Ci0gICAgSGFuZGxlTGlzdCBtRnJlZVZhbHVlczsK
LX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhE
YXRhTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYzBhZWYuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERh
dGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBJbmRleERhdGFNYW5hZ2VyLmNwcDogRGVmaW5lcyB0aGUgSW5kZXhEYXRh
TWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJv
Y2VzcyBmb3IgaW5kZXggYnVmZmVycy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFN
YW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBJbmRl
eEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAxOwotCi1JbmRleERhdGFNYW5hZ2VyOjpJbmRleERh
dGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmRldmljZSkgOiBt
RGV2aWNlKGRldmljZSkKLXsKLSAgICBtU3RyZWFtaW5nQnVmZmVyU2hvcnQgPSBuZXcgU3RyZWFt
aW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1U
X0lOREVYMTYpOwotCi0gICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0g
ICAgewotICAgICAgICBtU3RyZWFtaW5nQnVmZmVySW50ID0gbmV3IFN0cmVhbWluZ0luZGV4QnVm
ZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsK
LQotICAgICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXJJbnQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIERvbid0IGxlYXZlIGl0IGluIGEgaGFsZi1pbml0aWFsaXplZCBzdGF0ZQotICAgICAg
ICAgICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICAgICAgICAgIG1TdHJlYW1p
bmdCdWZmZXJTaG9ydCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgbVN0cmVhbWluZ0J1ZmZlckludCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFt
U3RyZWFtaW5nQnVmZmVyU2hvcnQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBhbGxv
Y2F0ZSB0aGUgc3RyZWFtaW5nIGluZGV4IGJ1ZmZlcihzKS4iKTsKLSAgICB9Ci0KLSAgICBtQ291
bnRpbmdCdWZmZXIgPSBOVUxMOwotfQotCi1JbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFu
YWdlcigpCi17Ci0gICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICBkZWxldGUg
bVN0cmVhbWluZ0J1ZmZlckludDsKLSAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotfQotCi12
b2lkIGNvbnZlcnRJbmRpY2VzKEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCwgR0xzaXpl
aSBjb3VudCwgdm9pZCAqb3V0cHV0KQotewotICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZ
VEUpCi0gICAgewotICAgICAgICBjb25zdCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbnB1dCk7Ci0gICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxH
THVzaG9ydCo+KG91dHB1dCk7Ci0KLSAgICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0W2ldID0gaW5baV07Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCi0gICAgewot
ICAgICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1aW50KSk7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpCi0gICAgewotICAg
ICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1c2hvcnQpKTsKLSAg
ICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhU
eXBlPgotdm9pZCBjb21wdXRlUmFuZ2UoY29uc3QgSW5kZXhUeXBlICppbmRpY2VzLCBHTHNpemVp
IGNvdW50LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQotewotICAgICptaW5J
bmRleCA9IGluZGljZXNbMF07Ci0gICAgKm1heEluZGV4ID0gaW5kaWNlc1swXTsKLQotICAgIGZv
ciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBpZiAoKm1p
bkluZGV4ID4gaW5kaWNlc1tpXSkgKm1pbkluZGV4ID0gaW5kaWNlc1tpXTsKLSAgICAgICAgaWYg
KCptYXhJbmRleCA8IGluZGljZXNbaV0pICptYXhJbmRleCA9IGluZGljZXNbaV07Ci0gICAgfQot
fQotCi12b2lkIGNvbXB1dGVSYW5nZShHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBHTHNpemVpIGNvdW50LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQotewot
ICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBjb21wdXRl
UmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpLCBjb3VudCwgbWluSW5k
ZXgsIG1heEluZGV4KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9J
TlQpCi0gICAgewotICAgICAgICBjb21wdXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50
Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRleCwgbWF4SW5kZXgpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUKQotICAgIHsKLSAgICAgICAgY29tcHV0ZVJh
bmdlKHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRl
eCwgbWF4SW5kZXgpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLUdMZW51
bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVp
IGNvdW50LCBCdWZmZXIgKmJ1ZmZlciwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVk
SW5kZXhEYXRhICp0cmFuc2xhdGVkKQotewotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlclNob3J0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAg
RDNERk9STUFUIGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCkgPyBEM0RGTVRfSU5E
RVgzMiA6IEQzREZNVF9JTkRFWDE2OwotICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwotICAgIGJvb2wgYWxpZ25lZE9mZnNldCA9IGZhbHNl
OwotCi0gICAgaWYgKGJ1ZmZlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgYWxpZ25lZE9m
ZnNldCA9IChvZmZzZXQgJSBzaXplb2YoR0x1Ynl0ZSkgPT0gMCk7ICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiBhbGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAlIHNpemVv
ZihHTHVzaG9ydCkgPT0gMCk7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OiAgIGFsaWduZWRPZmZzZXQgPSAob2Zmc2V0ICUgc2l6ZW9mKEdMdWludCkgPT0gMCk7ICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBv
ZmZzZXQgPiBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0K
LQotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGJ1ZmZlci0+
ZGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqc3Ry
ZWFtaW5nQnVmZmVyID0gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSA/IG1TdHJlYW1pbmdCdWZm
ZXJJbnQgOiBtU3RyZWFtaW5nQnVmZmVyU2hvcnQ7Ci0KLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAq
c3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNJbmRleEJ1ZmZlcigpIDog
TlVMTDsKLSAgICBJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIgPSBzdHJlYW1pbmdCdWZmZXI7Ci0g
ICAgVUlOVCBzdHJlYW1PZmZzZXQgPSAwOwotCi0gICAgaWYgKHN0YXRpY0J1ZmZlciAmJiBzdGF0
aWNCdWZmZXItPmxvb2t1cFR5cGUodHlwZSkgJiYgYWxpZ25lZE9mZnNldCkKLSAgICB7Ci0gICAg
ICAgIGluZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOwotICAgICAgICBzdHJlYW1PZmZzZXQgPSBz
dGF0aWNCdWZmZXItPmxvb2t1cFJhbmdlKG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5J
bmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKLQotICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0
ID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8g
dHlwZVNpemUodHlwZSkpICogaW5kZXhTaXplKGZvcm1hdCk7Ci0gICAgICAgICAgICBjb21wdXRl
UmFuZ2UodHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5z
bGF0ZWQtPm1heEluZGV4KTsKLSAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+YWRkUmFuZ2Uob2Zm
c2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsIHRyYW5zbGF0ZWQtPm1heEluZGV4LCBz
dHJlYW1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IGludCBjb252ZXJ0Q291bnQgPSBjb3VudDsKLQotICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyLT5zaXplKCkgPT0gMCAmJiBh
bGlnbmVkT2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZGV4QnVmZmVy
ID0gc3RhdGljQnVmZmVyOwotICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IGJ1ZmZlci0+
c2l6ZSgpIC8gdHlwZVNpemUodHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT5pbnZhbGlkYXRlU3RhdGlj
RGF0YSgpOwotICAgICAgICAgICAgICAgIHN0YXRpY0J1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkICpvdXRwdXQgPSBOVUxMOwotICAgICAgICAK
LSAgICAgICAgaWYgKGluZGV4QnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleEJ1
ZmZlci0+cmVzZXJ2ZVNwYWNlKGNvbnZlcnRDb3VudCAqIGluZGV4U2l6ZShmb3JtYXQpLCB0eXBl
KTsKLSAgICAgICAgICAgIG91dHB1dCA9IGluZGV4QnVmZmVyLT5tYXAoaW5kZXhTaXplKGZvcm1h
dCkgKiBjb252ZXJ0Q291bnQsICZzdHJlYW1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAob3V0cHV0ID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
RmFpbGVkIHRvIG1hcCBpbmRleCBidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gR0xfT1VU
X09GX01FTU9SWTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnZlcnRJbmRpY2VzKHR5cGUsIHN0
YXRpY0J1ZmZlciA/IGJ1ZmZlci0+ZGF0YSgpIDogaW5kaWNlcywgY29udmVydENvdW50LCBvdXRw
dXQpOwotICAgICAgICBpbmRleEJ1ZmZlci0+dW5tYXAoKTsKLQotICAgICAgICBjb21wdXRlUmFu
Z2UodHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0
ZWQtPm1heEluZGV4KTsKLQotICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gdHlwZVNpemUodHlwZSkpICogaW5k
ZXhTaXplKGZvcm1hdCk7Ci0gICAgICAgICAgICBzdGF0aWNCdWZmZXItPmFkZFJhbmdlKG9mZnNl
dCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LCB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3Ry
ZWFtT2Zmc2V0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVm
ZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgIHRyYW5zbGF0ZWQtPnNlcmlhbCA9
IGluZGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0g
c3RyZWFtT2Zmc2V0IC8gaW5kZXhTaXplKGZvcm1hdCk7Ci0KLSAgICBpZiAoYnVmZmVyKQotICAg
IHsKLSAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiB0eXBlU2l6ZSh0
eXBlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1zdGQ6OnNpemVf
dCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoRDNERk9STUFUIGZvcm1hdCkgY29uc3QKLXsK
LSAgICByZXR1cm4gKGZvcm1hdCA9PSBEM0RGTVRfSU5ERVgzMikgPyBzaXplb2YodW5zaWduZWQg
aW50KSA6IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci19Ci0KLXN0ZDo6c2l6ZV90IEluZGV4RGF0
YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdAotewotICAgIHN3aXRjaCAodHlw
ZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICByZXR1cm4gc2l6ZW9mKEdM
dWludCk7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6ZW9mKEdMdXNo
b3J0KTsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVybiBzaXplb2YoR0x1Ynl0
ZSk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gc2l6ZW9mKEdMdXNob3J0
KTsKLSAgICB9Ci19Ci0KLVN0YXRpY0luZGV4QnVmZmVyICpJbmRleERhdGFNYW5hZ2VyOjpnZXRD
b3VudGluZ0luZGljZXMoR0xzaXplaSBjb3VudCkKLXsKLSAgICBpZiAoY291bnQgPD0gNjU1MzYp
ICAgLy8gMTYtYml0IGluZGljZXMKLSAgICB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBz
cGFjZU5lZWRlZCA9IGNvdW50ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLQotICAgICAgICBp
ZiAoIW1Db3VudGluZ0J1ZmZlciB8fCBtQ291bnRpbmdCdWZmZXItPnNpemUoKSA8IHNwYWNlTmVl
ZGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAg
ICAgICAgICAgbUNvdW50aW5nQnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKG1EZXZpY2Up
OwotICAgICAgICAgICAgbUNvdW50aW5nQnVmZmVyLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQs
IEdMX1VOU0lHTkVEX1NIT1JUKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQ7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4o
bUNvdW50aW5nQnVmZmVyLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3Io
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIG1Db3VudGluZ0J1ZmZlci0+dW5tYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIGlmIChtU3RyZWFtaW5nQnVmZmVySW50KSAgIC8vIDMyLWJpdCBpbmRp
Y2VzIHN1cHBvcnRlZAotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNwYWNlTmVl
ZGVkID0gY291bnQgKiBzaXplb2YodW5zaWduZWQgaW50KTsKLQotICAgICAgICBpZiAoIW1Db3Vu
dGluZ0J1ZmZlciB8fCBtQ291bnRpbmdCdWZmZXItPnNpemUoKSA8IHNwYWNlTmVlZGVkKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAgICAgICAgICAg
bUNvdW50aW5nQnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKG1EZXZpY2UpOwotICAgICAg
ICAgICAgbUNvdW50aW5nQnVmZmVyLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lH
TkVEX0lOVCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zmc2V0OwotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUNvdW50aW5nQnVmZmVy
LT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAo
ZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFb
aV0gPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtQ291bnRpbmdCdWZmZXItPnVubWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZSByZXR1cm4gTlVMTDsKLSAgICAKLSAgICByZXR1cm4gbUNvdW50aW5n
QnVmZmVyOwotfQotCi1JbmRleEJ1ZmZlcjo6SW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlLCBVSU5UIHNpemUsIEQzREZPUk1BVCBmb3JtYXQpIDogbURldmljZShkZXZpY2UpLCBt
QnVmZmVyU2l6ZShzaXplKSwgbUluZGV4QnVmZmVyKE5VTEwpCi17Ci0gICAgaWYgKHNpemUgPiAw
KQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQ
b29sKEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlO
QU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSwgZm9ybWF0LCBwb29sLCAmbUluZGV4QnVmZmVyLCBO
VUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Ci0KLSAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkg
YWxsb2NhdGluZyBhbiBpbmRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUluZGV4QnVmZmVyOjp+SW5kZXhCdWZmZXIoKQotewotICAgIGlmICht
SW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAg
ICB9Ci19Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSAqSW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbmRleEJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgaW50IElu
ZGV4QnVmZmVyOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQot
Ci11bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXI6Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4g
bUN1cnJlbnRTZXJpYWwrKzsKLX0KLQotdm9pZCBJbmRleEJ1ZmZlcjo6dW5tYXAoKQotewotICAg
IGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlVubG9jaygp
OwotICAgIH0KLX0KLQotU3RyZWFtaW5nSW5kZXhCdWZmZXI6OlN0cmVhbWluZ0luZGV4QnVmZmVy
KElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlOVCBpbml0aWFsU2l6ZSwgRDNERk9STUFUIGZv
cm1hdCkgOiBJbmRleEJ1ZmZlcihkZXZpY2UsIGluaXRpYWxTaXplLCBmb3JtYXQpCi17Ci0gICAg
bVdyaXRlUG9zaXRpb24gPSAwOwotfQotCi1TdHJlYW1pbmdJbmRleEJ1ZmZlcjo6flN0cmVhbWlu
Z0luZGV4QnVmZmVyKCkKLXsKLX0KLQotdm9pZCAqU3RyZWFtaW5nSW5kZXhCdWZmZXI6Om1hcChV
SU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQgKm9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBO
VUxMOwotCi0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKG1Xcml0ZVBvc2l0aW9uLCByZXF1aXJlZFNwYWNlLCAm
bWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKLSAgICAgCi0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBl
cnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAg
IH0KLQotICAgICAgICAqb2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0ZVBv
c2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0K
LQotdm9pZCBTdHJlYW1pbmdJbmRleEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNlKFVJTlQgcmVxdWlyZWRT
cGFjZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbUluZGV4QnVmZmVyID0g
TlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgocmVxdWly
ZWRTcGFjZSwgMiAqIG1CdWZmZXJTaXplKTsKLQotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXRE
aXNwbGF5KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRF
T05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZm
ZXIobUJ1ZmZlclNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIHR5
cGUgPT0gR0xfVU5TSUdORURfSU5UID8gRDNERk1UX0lOREVYMzIgOiBEM0RGTVRfSU5ERVgxNiwg
cG9vbCwgJm1JbmRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlh
bCgpOwotICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBz
aXplICVsdS4iLCBtQnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtV3JpdGVQb3Np
dGlvbiA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgcmVxdWlyZWRT
cGFjZSA+IG1CdWZmZXJTaXplKSAgIC8vIFJlY3ljbGUKLSAgICB7Ci0gICAgICAgIHZvaWQgKmR1
bW15OwotICAgICAgICBtSW5kZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJ
U0NBUkQpOwotICAgICAgICBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAgIG1Xcml0
ZVBvc2l0aW9uID0gMDsKLSAgICB9Ci19Ci0KLVN0YXRpY0luZGV4QnVmZmVyOjpTdGF0aWNJbmRl
eEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogSW5kZXhCdWZmZXIoZGV2aWNlLCAw
LCBEM0RGTVRfVU5LTk9XTikKLXsKLSAgICBtQ2FjaGVUeXBlID0gR0xfTk9ORTsKLX0KLQotU3Rh
dGljSW5kZXhCdWZmZXI6On5TdGF0aWNJbmRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQgKlN0YXRp
Y0luZGV4QnVmZmVyOjptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpCi17Ci0g
ICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKLQotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jaygwLCByZXF1aXJlZFNw
YWNlLCAmbWFwUHRyLCAwKTsKLSAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAg
ICAqb2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIFN0
YXRpY0luZGV4QnVmZmVyOjpyZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0g
dHlwZSkKLXsKLSAgICBpZiAoIW1JbmRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAwKQotICAg
IHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQz
RFVTQUdFX1dSSVRFT05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlSW5kZXhCdWZmZXIocmVxdWlyZWRTcGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09
IEdMX1VOU0lHTkVEX0lOVCA/IEQzREZNVF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2ws
ICZtSW5kZXhCdWZmZXIsIE5VTEwpOwotICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsK
LSAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAl
bHUuIiwgbUJ1ZmZlclNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSBy
ZXF1aXJlZFNwYWNlOwotICAgICAgICBtQ2FjaGVUeXBlID0gdHlwZTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAobUluZGV4QnVmZmVyICYmIG1CdWZmZXJTaXplID49IHJlcXVpcmVkU3BhY2UgJiYgbUNh
Y2hlVHlwZSA9PSB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQKLSAg
ICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOyAgIC8vIFN0YXRpYyBpbmRleCBidWZmZXJzIGNh
bid0IGJlIHJlc2l6ZWQKLX0KLQotYm9vbCBTdGF0aWNJbmRleEJ1ZmZlcjo6bG9va3VwVHlwZShH
TGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbUNhY2hlVHlwZSA9PSB0eXBlOwotfQotCi1VSU5U
IFN0YXRpY0luZGV4QnVmZmVyOjpsb29rdXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkg
Y291bnQsIFVJTlQgKm1pbkluZGV4LCBVSU5UICptYXhJbmRleCkKLXsKLSAgICBJbmRleFJhbmdl
IHJhbmdlID0ge29mZnNldCwgY291bnR9OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5k
ZXhSZXN1bHQ+OjppdGVyYXRvciByZXMgPSBtQ2FjaGUuZmluZChyYW5nZSk7Ci0gICAgCi0gICAg
aWYgKHJlcyA9PSBtQ2FjaGUuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
fQotCi0gICAgKm1pbkluZGV4ID0gcmVzLT5zZWNvbmQubWluSW5kZXg7Ci0gICAgKm1heEluZGV4
ID0gcmVzLT5zZWNvbmQubWF4SW5kZXg7Ci0gICAgcmV0dXJuIHJlcy0+c2Vjb25kLnN0cmVhbU9m
ZnNldDsKLX0KLQotdm9pZCBTdGF0aWNJbmRleEJ1ZmZlcjo6YWRkUmFuZ2UoaW50cHRyX3Qgb2Zm
c2V0LCBHTHNpemVpIGNvdW50LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0
cmVhbU9mZnNldCkKLXsKLSAgICBJbmRleFJhbmdlIGluZGV4UmFuZ2UgPSB7b2Zmc2V0LCBjb3Vu
dH07Ci0gICAgSW5kZXhSZXN1bHQgaW5kZXhSZXN1bHQgPSB7bWluSW5kZXgsIG1heEluZGV4LCBz
dHJlYW1PZmZzZXR9OwotICAgIG1DYWNoZVtpbmRleFJhbmdlXSA9IGluZGV4UmVzdWx0OwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0lu
ZGV4RGF0YU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
SW5kZXhEYXRhTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWQ0MTY4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5k
ZXhEYXRhTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIEluZGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgSW5kZXhEYXRh
TWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJv
Y2VzcyBmb3IgaW5kZXggYnVmZmVycy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfSU5ERVhEQVRBTUFO
QUdFUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfSU5ERVhEQVRBTUFOQUdFUl9IXwotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQot
bmFtZXNwYWNlCi17Ci0gICAgZW51bSB7IElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUgPSA0MDk2
ICogc2l6ZW9mKEdMdWludCkgfTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhCi17Ci0gICAgVUlOVCBtaW5JbmRleDsKLSAgICBVSU5UIG1heEluZGV4
OwotICAgIFVJTlQgc3RhcnRJbmRleDsKLQotICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqaW5k
ZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbDsKLX07Ci0KLWNsYXNzIEluZGV4QnVm
ZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UsIFVJTlQgc2l6ZSwgRDNERk9STUFUIGZvcm1hdCk7Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZm
ZXIoKTsKLQotICAgIFVJTlQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9Ci0g
ICAgdmlydHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpID0g
MDsKLSAgICB2b2lkIHVubWFwKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2VydmVTcGFjZShVSU5U
IHJlcXVpcmVkU3BhY2UsIEdMZW51bSB0eXBlKSA9IDA7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1
ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OwotICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBj
b25zdDsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURldmlj
ZTsKLQotICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOwotICAgIFVJTlQg
bUJ1ZmZlclNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVu
dFNlcmlhbDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRl
eEJ1ZmZlcik7Ci19OwotCi1jbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlciA6IHB1YmxpYyBJbmRl
eEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlLCBVSU5UIGluaXRpYWxTaXplLCBEM0RGT1JNQVQgZm9ybWF0KTsKLSAg
ICB+U3RyZWFtaW5nSW5kZXhCdWZmZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKFVJTlQg
cmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2ZVNw
YWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpOwotCi0gIHByaXZhdGU6Ci0gICAg
VUlOVCBtV3JpdGVQb3NpdGlvbjsKLX07Ci0KLWNsYXNzIFN0YXRpY0luZGV4QnVmZmVyIDogcHVi
bGljIEluZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdGF0aWNJbmRleEJ1
ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOwotICAgIH5TdGF0aWNJbmRleEJ1ZmZlcigp
OwotCi0gICAgdmlydHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZz
ZXQpOwotICAgIHZpcnR1YWwgdm9pZCByZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBH
TGVudW0gdHlwZSk7Ci0KLSAgICBib29sIGxvb2t1cFR5cGUoR0xlbnVtIHR5cGUpOwotICAgIFVJ
TlQgbG9va3VwUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UICptaW5J
bmRleCwgVUlOVCAqbWF4SW5kZXgpOyAgIC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBp
bmRleCBidWZmZXIsIG9yIC0xIGlmIG5vdCBmb3VuZAotICAgIHZvaWQgYWRkUmFuZ2UoaW50cHRy
X3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBV
SU5UIHN0cmVhbU9mZnNldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBHTGVudW0gbUNhY2hlVHlwZTsK
LSAgICAKLSAgICBzdHJ1Y3QgSW5kZXhSYW5nZQotICAgIHsKLSAgICAgICAgaW50cHRyX3Qgb2Zm
c2V0OwotICAgICAgICBHTHNpemVpIGNvdW50OwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IEluZGV4UmFuZ2UmIHJocykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG9m
ZnNldCAhPSByaHMub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBvZmZzZXQgPCByaHMub2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNv
dW50ICE9IHJocy5jb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y291bnQgPCByaHMuY291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IEluZGV4UmVzdWx0Ci0gICAgewot
ICAgICAgICBVSU5UIG1pbkluZGV4OwotICAgICAgICBVSU5UIG1heEluZGV4OwotICAgICAgICBV
SU5UIHN0cmVhbU9mZnNldDsKLSAgICB9OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5k
ZXhSZXN1bHQ+IG1DYWNoZTsKLX07Ci0KLWNsYXNzIEluZGV4RGF0YU1hbmFnZXIKLXsKLSAgcHVi
bGljOgotICAgIEluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2
aWNlOSAqZXZpY2UpOwotICAgIHZpcnR1YWwgfkluZGV4RGF0YU1hbmFnZXIoKTsKLQotICAgIEdM
ZW51bSBwcmVwYXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIg
KmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICp0cmFuc2xhdGVkKTsKLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAqZ2V0Q291bnRpbmdJ
bmRpY2VzKEdMc2l6ZWkgY291bnQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEluZGV4RGF0YU1hbmFnZXIpOwotCi0gICAgc3RkOjpzaXplX3QgdHlwZVNpemUo
R0xlbnVtIHR5cGUpIGNvbnN0OwotICAgIHN0ZDo6c2l6ZV90IGluZGV4U2l6ZShEM0RGT1JNQVQg
Zm9ybWF0KSBjb25zdDsKLQotICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZpY2U7Ci0K
LSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqbVN0cmVhbWluZ0J1ZmZlclNob3J0OwotICAgIFN0
cmVhbWluZ0luZGV4QnVmZmVyICptU3RyZWFtaW5nQnVmZmVySW50OwotICAgIFN0YXRpY0luZGV4
QnVmZmVyICptQ291bnRpbmdCdWZmZXI7Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNW
Ml9JTkRFWERBVEFNQU5BR0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4
YTlkOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTA3ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFByb2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFz
cy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvdXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBnbAot
ewotY29uc3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKLQotdW5z
aWduZWQgaW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLQotQXR0cmlidXRlQmluZGlu
Z3M6OkF0dHJpYnV0ZUJpbmRpbmdzKCkKLXsKLX0KLQotQXR0cmlidXRlQmluZGluZ3M6On5BdHRy
aWJ1dGVCaW5kaW5ncygpCi17Ci19Ci0KLUluZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5V
TEwpCi17Ci19Ci0KLUluZm9Mb2c6On5JbmZvTG9nKCkKLXsKLSAgICBkZWxldGVbXSBtSW5mb0xv
ZzsKLX0KLQotCi1pbnQgSW5mb0xvZzo6Z2V0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1J
bmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KLX0KLQotdm9pZCBJ
bmZvTG9nOjpnZXRMb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmlu
Zm9Mb2cpCi17Ci0gICAgaW50IGluZGV4ID0gMDsKLQotICAgIGlmIChidWZTaXplID4gMCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtSW5mb0xvZykKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXgg
PSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAg
ICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAnOwotICAgIH0KLQotICAgIGlmIChsZW5ndGgpCi0gICAg
ewotICAgICAgICAqbGVuZ3RoID0gaW5kZXg7Ci0gICAgfQotfQotCi0vLyBhcHBlbmQgYSBzYW50
aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9nLgotLy8gVGhlIEQzRCBjb21waWxl
ciBpbmNsdWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJy
b3IgCi0vLyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMg
ZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUgbG9nLgotdm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6
ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKLXsKLSAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7
Ci0KLSAgICBzaXplX3QgZm91bmQ7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNn
LmZpbmQoZ19mYWtlcGF0aCk7Ci0gICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cykKLSAgICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZ19mYWtl
cGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcyk7Ci0KLSAgICBhcHBlbmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZvaWQg
SW5mb0xvZzo6YXBwZW5kKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9y
bWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0
XTsKLQotICAgIHZhX2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsK
LSAgICB2c25wcmludGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAg
dmFfZW5kKHZhcmFyZyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsK
LQotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFy
W2luZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5m
b0xvZyk7Ci0gICAgICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9M
ZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBz
dHJjcHkobmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5m
b0xvZzsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIEluZm9M
b2c6OnJlc2V0KCkKLXsKLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBkZWxldGUg
W10gbUluZm9Mb2c7Ci0gICAgICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICB9Ci19Ci0KLVByb2dy
YW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1S
ZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNl
cmlhbCgpKQotewotICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgbVZlcnRleFNoYWRl
ciA9IE5VTEw7Ci0gICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOwotICAgIG1EZWxldGVTdGF0dXMg
PSBmYWxzZTsKLSAgICBtUmVmQ291bnQgPSAwOwotfQotCi1Qcm9ncmFtOjp+UHJvZ3JhbSgpCi17
Ci0gICAgdW5saW5rKHRydWUpOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUZyYWdtZW50U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBtRnJhZ21lbnRTaGFkZXIt
PnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRl
ciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hB
REVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXIg
PSAoVmVydGV4U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigp
OwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9T
SEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRT
aGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQot
ewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsK
LSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4U2hhZGVyLT5y
ZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNl
IGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAg
ICAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5y
ZWxlYXNlKCk7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6
Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiAobVZlcnRleFNo
YWRlciA/IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Ci19Ci0KLXZvaWQgQXR0
cmlidXRlQmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0
IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAg
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5h
bWUpOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1
aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQotewotICAgIG1BdHRyaWJ1dGVCaW5kaW5ncy5i
aW5kQXR0cmlidXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOwotfQotCi0vLyBMaW5rcyB0aGUgSExT
TCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVp
ciB2YXJ5aW5ncywKLS8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5n
IHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCi0vLyBhIGxpc3Qgb2YgdW5p
Zm9ybXMKLXZvaWQgUHJvZ3JhbTo6bGluaygpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLQotICAg
IG1JbmZvTG9nLnJlc2V0KCk7Ci0KLSAgICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmlu
YXJ5OwotICAgIGlmICghbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVC
aW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAg
IHVubGluayhmYWxzZSk7Ci0gICAgfQotfQotCi1pbnQgQXR0cmlidXRlQmluZGluZ3M6OmdldEF0
dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0Ci17Ci0gICAgZm9y
IChpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRp
b24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmlu
ZChuYW1lKSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiAtMTsKLX0KLQotLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5r
ZWQgc3RhdGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9n
cmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95KQotewotICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVj
dCBiZWluZyBkZXN0cnVjdGVkCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bVZlcnRleFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVs
ZWFzZSgpOwotICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBkZWxldGUgbVBy
b2dyYW1CaW5hcnk7Ci0gICAgICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0K
LVByb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQotewotICAgIHJldHVy
biBtUHJvZ3JhbUJpbmFyeTsKLX0KLQotdm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLSAgICBt
UHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6cmVsZWFz
ZSgpCi17Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURl
bGV0ZVN0YXR1cykKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dy
YW0obUhhbmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmFkZFJlZigpCi17Ci0gICAg
bVJlZkNvdW50Kys7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1SZWZDb3VudDsKLX0KLQotdW5zaWduZWQgaW50IFByb2dyYW06
OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXJpYWw7Ci19Ci0KLXVuc2lnbmVk
IGludCBQcm9ncmFtOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFs
Kys7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUluZm9Mb2cuZ2V0TGVuZ3RoKCk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xv
ZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAg
ICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7Ci19Ci0K
LXZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6
ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQotICAg
IGlmIChtVmVydGV4U2hhZGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+
Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAg
IGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3Vu
dCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFk
ZXItPmdldEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9Ci0K
LSAgICBpZiAoY291bnQpCi0gICAgewotICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9Ci19
Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdM
Y2hhciAqbmFtZSkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBt
UHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgs
IHNpemUsIHR5cGUsIG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
YnVmc2l6ZSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICp0eXBlID0gR0xfTk9ORTsK
LSAgICAgICAgKnNpemUgPSAxOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZl
QXR0cmlidXRlQ291bnQoKQotewotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1HTGlu
dCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQotewotICAgIGlmIChtUHJv
Z3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0
aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdM
dWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXpl
LCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkp
Ci0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm0o
aW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbmFtZVswXSA9ICdcMCc7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGVuZ3RoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICpz
aXplID0gMDsKLSAgICAgICAgKnR5cGUgPSBHTF9OT05FOwotICAgIH0KLX0KLQotR0xpbnQgUHJv
Z3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkp
Ci0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1D
b3VudCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQotewotICAg
IGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFy
eS0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0
aW9uKCkKLXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpp
c0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7
Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQotewotICAgIG1JbmZvTG9nLnJlc2V0KCk7
Ci0KLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBtUHJvZ3JhbUJpbmFy
eS0+dmFsaWRhdGUobUluZm9Mb2cpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBt
SW5mb0xvZy5hcHBlbmQoIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQu
Iik7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKLXsKLSAg
ICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5h
cnktPmlzVmFsaWRhdGVkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDcz
MWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVt
ZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaWZuZGVmIExJQkdM
RVNWMl9QUk9HUkFNX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0hfCi0KLSNpbmNsdWRl
IDxkM2R4OS5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBSZXNvdXJjZU1hbmFnZXI7Ci1jbGFzcyBGcmFnbWVudFNo
YWRlcjsKLWNsYXNzIFZlcnRleFNoYWRlcjsKLQotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBn
X2Zha2VwYXRoOwotCi1jbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncwotewotICBwdWJsaWM6Ci0gICAg
QXR0cmlidXRlQmluZGluZ3MoKTsKLSAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKLQotICAgIHZv
aWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7
Ci0gICAgaW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNv
bnN0OwotCi0gIHByaXZhdGU6Ci0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVC
aW5kaW5nW01BWF9WRVJURVhfQVRUUklCU107Ci19OwotCi1jbGFzcyBJbmZvTG9nCi17Ci0gIHB1
YmxpYzoKLSAgICBJbmZvTG9nKCk7Ci0gICAgfkluZm9Mb2coKTsKLQotICAgIGludCBnZXRMZW5n
dGgoKSBjb25zdDsKLSAgICB2b2lkIGdldExvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgY2hhciAqaW5mb0xvZyk7Ci0KLSAgICB2b2lkIGFwcGVuZFNhbml0aXplZChjb25zdCBj
aGFyICptZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyICppbmZvLCAuLi4pOwot
ICAgIHZvaWQgcmVzZXQoKTsKLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oSW5mb0xvZyk7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci19OwotCi1jbGFzcyBQcm9ncmFtCi17
Ci0gIHB1YmxpYzoKLSAgICBQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50
IGhhbmRsZSk7Ci0KLSAgICB+UHJvZ3JhbSgpOwotCi0gICAgYm9vbCBhdHRhY2hTaGFkZXIoU2hh
ZGVyICpzaGFkZXIpOwotICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKLSAg
ICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKLQotICAgIHZvaWQgYmluZEF0
dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLSAgICB2
b2lkIGxpbmsoKTsKLSAgICB2b2lkIHNldFByb2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0g
ICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwotICAgIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVp
bnQgKnNoYWRlcnMpOwotCi0gICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKTsKLSAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgp
OwotICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBn
ZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xp
bnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1h
eExlbmd0aCgpOwotCi0gICAgdm9pZCBhZGRSZWYoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291bnQoKSBjb25zdDsKLSAgICB2b2lkIGZsYWdGb3JEZWxl
dGlvbigpOwotICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKLQotICAgIHZv
aWQgdmFsaWRhdGUoKTsKLSAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7Ci0KLSAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kg
PSBmYWxzZSk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0KLSAg
ICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwotICAgIFZlcnRleFNoYWRlciAqbVZl
cnRleFNoYWRlcjsKLQotICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsK
LQotICAgIFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFtQmluYXJ5OwotICAgIGJvb2wgbURlbGV0ZVN0
YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0
ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0KLSAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50Owot
Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG1TZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQg
aW50IG1DdXJyZW50U2VyaWFsOwotCi0gICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5h
Z2VyOwotICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOwotCi0gICAgSW5mb0xvZyBtSW5mb0xvZzsK
LX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyOGU1MS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjQ4MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9n
cmFtLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wg
cHJvZ3JhbSBvYmplY3RzCi0vLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLQotI2luY2x1
ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJ
TUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KLW5hbWVzcGFjZSBnbAot
ewotc3RkOjpzdHJpbmcgc3RyKGludCBpKQotewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBz
bnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVm
ZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBfbmFt
ZShfbmFtZSksIG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwg
YXJyYXlTaXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxT
aXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRl
c107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0K
LVVuaWZvcm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwotfQotCi1ib29sIFVu
aWZvcm06OmlzQXJyYXkoKQotewotICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8i
KSA9PSAwOwotfQotCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6
OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
IAotICAgIDogbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBl
bGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKLXsKLX0KLQotUHJvZ3JhbUJpbmFyeTo6UHJv
Z3JhbUJpbmFyeSgpCi17Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwotCi0gICAgbVBpeGVs
RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1D
b25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotCi0g
ICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TZW1hbnRpY0lu
ZGV4W2luZGV4XSA9IC0xOwotICAgIH0KLQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1w
bGVyc1BTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgr
KykKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZWRQaXhlbFNh
bXBsZXJSYW5nZSA9IDA7Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBt
RHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1E
eEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAt
MTsKLSAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLX0KLQotUHJvZ3JhbUJpbmFy
eTo6flByb2dyYW1CaW5hcnkoKQotewotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsK
LSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmICht
VmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCi0gICAgewotICAgICAg
ICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFu
dFRhYmxlVlMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0g
ICAgfQotCi0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRl
bGV0ZSBtVW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKLSAg
ICB9Ci19Ci0KLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxT
aGFkZXIoKQotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZTsKLX0KLQotR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0
dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKG5hbWUpCi0gICAg
ewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpbmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtp
bmRleF0ubmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4
KGludCBhdHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAm
JiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJu
IG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLX0KLQotLy8gUmV0dXJucyBvbmUgbW9y
ZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KLUdMaW50IFByb2dyYW1CaW5h
cnk6OmdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4g
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAg
ICAgIHJldHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotLy8gUmV0
dXJucyB0aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9u
ZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhl
bCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNh
bXBsZXJJbmRleCkKLXsKLSAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKLQotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAg
IEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxl
cnNQU1swXSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJz
UFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxl
ckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLQot
ICAgICAgICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobG9naWNhbFRleHR1cmVV
bml0ID49IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0
TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBS
ZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5
cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0
aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVy
VGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkK
LXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgot
ICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2Yo
bVNhbXBsZXJzUFNbMF0pKTsKLSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlKTsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4
dHVyZVR5cGU7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsK
LSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAg
ICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBURVhUVVJFXzJEOwot
fQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcg
bmFtZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlw
IGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAot
ICAgIHNpemVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xv
c2UgPSBuYW1lLmZpbmRfbGFzdF9vZignXScpOwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5n
OjpucG9zICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vi
c2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5h
bWUuZXJhc2Uob3Blbik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1JbmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAw
OyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYg
KG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biAtMTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIGlmIChsb2NhdGlv
biA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5h
cnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAg
Y291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7
Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsK
LSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAg
ICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0K
LSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6
Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKLSAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0
WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0
YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRh
cmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0g
ICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQ
YXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCi0gICAgewot
ICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
ICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4o
YXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdl
dFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAg
dGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAg
ICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9v
bFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKLSAgICB7
Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAg
ICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1p
bihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAotICAgICAgICAgICAgICAg
diwgNCAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9
PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBH
TF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBp
bnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hl
aWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpCi17Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0
aCk7Ci0gICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdo
dCk7Ci0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNX
aWR0aCArIHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0
IHNpZGUKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAo
aW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRh
cmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9
IDEyOwotICAgICAgICB2YWx1ZSArPSA5OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9
IEdMX0ZMT0FUX01BVDQpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAg
ICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBp
bnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAg
ICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9m
KEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
MjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZv
cm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAg
ICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAz
LAotICAgICAgICAgICAgICAgdiwgMyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsK
LSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAg
ICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVu
aWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBz
aXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0K
LSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxh
cmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVk
Qnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAg
ICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZv
cm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBV
bmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9u
ZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3Vu
dDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1l
bWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwot
Ci0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBs
YXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJl
ZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAg
ICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlm
b3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgewot
ICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01B
VDM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwz
PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9y
bS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZv
cm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFs
Q291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6
ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAg
IHsKLSAgICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
Ly8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0
byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
cygpCi17Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVu
aWZvcm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1Yikgewot
ICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xm
bG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50
Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9v
bGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRV
bmlmb3JtLT50eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6
ICAgICAgIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1u
YnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFy
cmF5U2l6ZSwgMywgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVD
NDogIGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgICBjYXNlIEdM
X0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkp
OyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVu
aWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZv
cm0sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lO
VF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUgSExT
TCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwot
SUQzRDEwQmxvYiAqUHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRvQmluYXJ5KEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRU
YWJsZSAqKmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3Mg
PSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkK
LSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVH
Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vs
c2UKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRp
ZgotCi0gICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAg
ICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGgg
KyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3Jp
dGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0
LnNpemUoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xF
X0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsK
LSAgICB9Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2Ig
KmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJs
ZW4oaGxzbCksIGdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgZmxhZ3Ms
IDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSkKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNz
YWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6
ZWQobWVzc2FnZSk7Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgIFRSQUNF
KCJcbiVzIiwgbWVzc2FnZSk7Ci0KLSAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0KLSAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNf
Y2FzdDxjb25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRU
YWJsZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIHJldHVybiBiaW5hcnk7Ci19Ci0KLS8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKLWludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWlu
Z3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENv
bnRleHQoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRN
YXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9y
IHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAg
ICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6
ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOwot
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICBpZiAobSA9PSAyIHx8IG0g
PT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyBy
IDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFp
bGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIHZh
cnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5n
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAt
IG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYm
IGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5j
b2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47
IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hd
ID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOwot
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2Nv
bHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNw
YWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
Y2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1
bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgaWYgKCFzdWNj
ZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBh
Y2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9m
IHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCBy
ID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFj
a2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1ty
XVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6Omxp
bmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6
OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0
ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKLXsKLSAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwg
dmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBm
cmFnVmFyKyspCi0gICAgewotICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKLSAgICAgICAgZnJh
Z1Zhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
dnR4VmFyID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRl
eFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0eFZh
ci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgLy8g
TWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcg
KnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGludCBy
ZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIp
OwotCi0gICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9u
cwotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBz
bTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhW
YXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0g
ICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWlu
ZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1
dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0
Y2hlZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1
dCA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0g
aW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0
IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0
cHV0LT5jb2wgPSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJGcmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIs
IGlucHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8g
IkNPTE9SIiA6ICJURVhDT09SRCIpOwotCi0gICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lO
UFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGF0dHJpYnV0ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4
SExTTCArPSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRF
WENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGlj
SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAg
IHZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xu
IjsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAg
ICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsy
XSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAi
ICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
ZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc20zKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9
O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiVlNfT1VU
UFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0g
ICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1h
dHJpeAotICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0
dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRw
dXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGds
X1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgotICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9u
LnkgKyBkeF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Q
b3NpdGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5t
VXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
b3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChp
bnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOwotICAgIH0KLQot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsK
LSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+
PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmct
PnNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZh
cmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOwotICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1
c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2lu
Z1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lz
dGVyKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNo
KHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhM
U0wgKz0gInoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZl
cnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihp
KSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChyb3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4ZWxI
TFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAg
IAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNp
emU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlh
YmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAg
ICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiAr
IHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRp
YyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAg
ICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
bTMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29y
ZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0Zyb250RmFjaW5nKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZh
Y2UgOiBWRkFDRTtcbiI7Ci0gICAgfQotCi0gICAgcGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIK
LSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBn
bF9Db2xvclsxXSA6IENPTE9SO1xuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAg
ICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5Q
VVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAu
NTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBkeF9Db29yZCBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRl
ci54IGFuZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdD
b29yZC54ICogcmh3KSAqIGR4X0Nvb3JkLnggKyBkeF9Db29yZC56O1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55
ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRD
b29yZC54O1xuIjsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0g
MS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8g
KGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOwotICAgIH0K
LQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNp
emU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlh
YmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAg
ICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0g
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSAr
ICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChy
b3dzID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cGl4ZWxITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtc
biI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29s
b3JbMF07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywg
Y29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQotewotICAgIGlm
ICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXIg
fHwgIXZlcnRleFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVy
LT5nZXRITFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+
Z2V0SExTTCgpOwotCi0gICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgcGl4ZWxITFNMLCB2
ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4
dCgpOwotICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1No
YWRlck1vZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIjsKLSAgICBjb25zdCBjaGFyICpwaXhl
bFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAi
cHNfMl8wIjsKLQotICAgIElEM0QxMEJsb2IgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFy
eShpbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRU
YWJsZVZTKTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShp
bmZvTG9nLCBwaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQ
Uyk7Ci0KLSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAg
ICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERX
T1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxl
KTsKLSAgICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hh
ZGVyKChEV09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1
dGFibGUpOwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0
KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJl
bGVhc2UoKTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4
QmluYXJ5ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlm
IChtVmVydGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0ZUJpbmRpbmdzLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlu
a1VuaWZvcm1zKGluZm9Mb2csIEdMX0ZSQUdNRU5UX1NIQURFUiwgbUNvbnN0YW50VGFibGVQUykp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9WRVJURVhf
U0hBREVSLCBtQ29uc3RhbnRUYWJsZVZTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoZXNlIHVu
aWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQg
ZHhfCi0gICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVj
ZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KLSAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOwotICAgICAgICAgICAg
bUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKLSAgICAg
ICAgICAgIG1EeENvb3JkTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7
Ci0gICAgICAgICAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRp
b24oImR4X0hhbGZQaXhlbFNpemUiKTsKLSAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Zyb250Q0NXIik7Ci0gICAgICAgICAgICBtRHhQb2lu
dHNPckxpbmVzTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMi
KTsKLQotICAgICAgICAgICAgY29udGV4dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOwotCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMg
YW5kIERpcmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW1C
aW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJp
bmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKLXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExv
Y2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGlu
ZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9
IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50
IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1
dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xC
aW5kQXR0cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0
cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgLy8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9j
YXRpb247IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2Vk
QXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAo
cm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9j
YXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9j
YXRpb24pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0
ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJp
YnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3Mu
Z2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVC
aXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAg
ICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4g
TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5u
YW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwg
dG8gbGluawotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2
YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3Ig
KGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyApCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFu
dGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAg
IGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBy
b3dzOyByKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0
ZUluZGV4KytdID0gaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9n
LCBHTGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0g
ICAgRDNEWENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Ci0KLSAg
ICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBj
b25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAg
ewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0
Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0KLSAgICAgICAgRDNEWENPTlNUQU5UX0RFU0Mg
Y29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsK
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2Mo
Y29uc3RhbnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZp
bmVVbmlmb3JtKGluZm9Mb2csIHNoYWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3Jp
cHRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24g
b2YgYSBjb25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1
bmlmb3JtcwotLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFk
eSBkZWZpbmVkKQotYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmlu
Zm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcg
bmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RY
UlNfU0FNUExFUikKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Y29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0
YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICAgICAgICBE
M0RYSEFORExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFt
ZShOVUxMLCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotCi0gICAgICAgICAgICBpZiAocHND
b25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQp
ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
bVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0
aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVf
MkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNh
bFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Up
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUGl4ZWwgc2hhZGVyIHNh
bXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2
c0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0
Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
YWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NB
TVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1w
bGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVk
cyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdl
dE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsK
LSAgICAgIGNhc2UgRDNEWFBDX1NUUlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRp
b24uU3RydWN0TWVtYmVyczsgZmllbGQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRD
b25zdGFudChjb25zdGFudEhhbmRsZSwgZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQz
RFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJ
TlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZm
aWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpz
dHJpbmcgc3RydWN0SW5kZXggPSAoY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8g
KCJbIiArIHN0cihhcnJheUluZGV4KSArICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWRlZmluZVVuaWZvcm0oaW5mb0xvZywgc2hhZGVyLCBmaWVsZEhhbmRsZSwgZmllbGRE
ZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSArIHN0cnVjdEluZGV4
ICsgIi4iKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgY2FzZSBEM0RYUENfU0NBTEFSOgotICAgICAgY2FzZSBEM0RYUENfVkVDVE9SOgotICAgICAg
Y2FzZSBEM0RYUENfTUFUUklYX0NPTFVNTlM6Ci0gICAgICBjYXNlIEQzRFhQQ19PQkpFQ1Q6Ci0g
ICAgICAgIHJldHVybiBkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3RhbnREZXNjcmlwdGlvbiwg
bmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFt
ZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2Ny
aXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBH
TGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBH
TGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVy
ID09IEdMX0ZSQUdNRU5UX1NIQURFUikgdW5pZm9ybS0+cHMuc2V0KGNvbnN0YW50RGVzY3JpcHRp
b24pOwotICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikgICB1bmlmb3JtLT52cy5z
ZXQoY29uc3RhbnREZXNjcmlwdGlvbik7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB1bmlmb3JtLT50eXBlID09IHR5cGU7Ci0gICAgfQotCi0gICAgbVVu
aWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4
ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRl
eC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9ybSAqUHJvZ3JhbUJpbmFyeTo6Y3Jl
YXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwg
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9u
LlJvd3MgPT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
RDNEWFBUX1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlv
bi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VC
RToKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9T
QU1QTEVSX0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Ci0gICAgICAgICAgICBzd2l0
Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMz
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RY
UFRfSU5UOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0lOVCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBu
ZXcgVW5pZm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVD
NCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNv
bnN0YW50RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpICAv
LyBTcXVhcmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlw
dGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFtZSwgY29uc3RhbnREZXNj
cmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
LSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1z
dGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYm
IG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAi
XyIgKyBuYW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpzdHJp
bmcgUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9u
YW1lKQotewotICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBfbmFtZTsKLSAgICAKLSAgICAvLyBSZW1v
dmUgYW55IHN0cnVjdHVyZSBmaWVsZCBkZWNvcmF0aW9uCi0gICAgc2l6ZV90IHBvcyA9IDA7Ci0g
ICAgd2hpbGUgKChwb3MgPSBuYW1lLmZpbmQoIi5fIiwgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5w
b3MpCi0gICAgewotICAgICAgICBuYW1lLnJlcGxhY2UocG9zLCAyLCAiLiIpOwotICAgIH0KLQot
ICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBkZWNvcmF0aW9uCi0gICAgaWYgKG5hbWVbMF0gPT0g
J18nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDApCi0gICAgewotICAgICAgICBy
ZXR1cm4gbmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lOwotfQot
Ci12b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBHTHNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAg
ICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBi
b29sVmVjdG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4
ID49IDApCi0gICAgewotICAgICAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRoKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAodltpICogd2lkdGggKyBqXSA9
PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9y
W2kgKiA0ICsgal0gPSAwLjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0g
MCB8fCB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIGlu
dCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRV
bmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291
bnQgOiAwOwotICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwg
c3RkOjptYXgocHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9
IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3B5Q291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZb
aV0gIT0gR0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+cHMuZmxvYXQ0SW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVs
U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmlj
ZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4LCBi
b29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApCi0gICAgewotICAg
ICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMu
ZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0g
ICAgfQotICAgICAgICAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDAp
Ci0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0
VW5pZm9ybS0+dnMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdp
c3RlckNvdW50KTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
bmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNl
LT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwg
diwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHYs
IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NF
UlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2
ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChm
bG9hdCl2W2ldLCAwLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5zYW1w
bGVySW5kZXggPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0
SW5kZXggPSB0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNb
c2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+
cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5y
ZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52cy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZz
LnNhbXBsZXJJbmRleCA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Zmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRleDsKLQotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQot
ICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJ
bmRleCA+PSAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTJpdihV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsK
LSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RY
VkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhW
RUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7Ci0KLSAgICAgICAgdiArPSAy
OwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVj
dG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5
VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRT
KTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3Rv
cltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0s
IDApOwotCi0gICAgICAgIHYgKz0gMzsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFy
Z2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZs
b2F0KXZbMV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlszXSk7Ci0KLSAgICAgICAgdiArPSA0Owot
ICAgIH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9y
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5p
Zm9ybW5pdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RY
VkVDVE9SNCAqdmVjdG9yKQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4
ID49IDApOwotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52
cy5mbG9hdDRJbmRleCA+PSAwKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29u
c3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0
b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotYm9vbCBQ
cm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFsaWRh
dGVkOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xl
bnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0
dHJpYnV0ZXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNp
Z25lZCBpbnQgYXR0cmlidXRlOwotICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGlmIChtTGlu
a2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUg
PT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYWN0aXZlQXR0cmlidXRlKys7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQot
ICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVdLm5hbWUuY19zdHIoKTsKLQotICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVm
c2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAgICBpZiAo
bGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAn
dHlwZScgaW5zdGFuY2UKLQotICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVd
LnR5cGU7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50
KCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgr
KykKLSAgICB7Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0u
bmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5Ojpn
ZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQotewotICAgIGludCBtYXhMZW5ndGggPSAwOwot
Ci0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbUxp
bmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6
OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAg
IC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVV
bmlmb3JtID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKLSAgICBmb3IgKHVuaWZvcm0g
PSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQotICAgIHsKLSAgICAg
ICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChhY3RpdmVVbmlmb3JtID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKLSAgICB9Ci0KLSAgICBB
U1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21h
bGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0KLSAgICBpZiAoYnVmc2l6ZSA+IDAp
Ci0gICAgewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0t
Pm5hbWU7Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzdHJuY3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVti
dWZzaXplIC0gMV0gPSAnXDAnOwotCi0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOwotCi0gICAgKnR5cGUgPSBt
VW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFj
dGl2ZVVuaWZvcm1Db3VudCgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIHVuc2lnbmVk
IGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
bnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1J
bmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1l
LmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFBy
b2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQotewotICAgIGludCBtYXhM
ZW5ndGggPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5k
ZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1V
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1J
bmRleF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxl
bmd0aCgpICsgMSk7Ci0gICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlz
QXJyYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8v
IENvdW50aW5nIGluICJbMF0iLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4TGVuZ3Ro
ID0gc3RkOjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1heExlbmd0aDsKLX0KLQotdm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZv
TG9nICZpbmZvTG9nKQotewotICAgIGFwcGx5VW5pZm9ybXMoKTsKLSAgICBpZiAoIXZhbGlkYXRl
U2FtcGxlcnMoJmluZm9Mb2cpKQotICAgIHsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZv
TG9nKQotewotICAgIC8vIGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBh
cmUgb2YgZGlmZmVyZW50IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKLSAgICAvLyB0ZXh0
dXJlIGltYWdlIHVuaXQsIGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFs
aWRhdGVQcm9ncmFtIHdpbGwgZmFpbCwgYW5kCi0gICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0Vs
ZW1lbnRzIHdpbGwgaXNzdWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0
KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7Ci0gICAgVGV4dHVyZVR5
cGUgdGV4dHVyZVVuaXRUeXBlW01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTX1ZURjsgKytpKQotICAgIHsKLSAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ld
ID0gVEVYVFVSRV9VTktOT1dOOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1T
YW1wbGVyc1BTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50
IHVuaXQgPSBtU2FtcGxlcnNQU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9y
bSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVu
aXQsIG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9
IHRleHR1cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpbmZvTG9nKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVz
IHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxl
cnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7
ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNh
bFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChpbmZvTG9nKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5m
b0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0g
IT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICht
U2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJT
YW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGlt
YWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0xpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6Omdl
dER4RGVwdGhMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247
Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6
OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4SGFs
ZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250
Q0NXTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOwot
fQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5YzVlMi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQ
cm9ncmFtLmg6IERlZmluZXMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHBy
b2dyYW0gb2JqZWN0cwotLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1BST0dS
QU1fQklOQVJZX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwotCi0jaW5j
bHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgotI2luY2x1ZGUgPHN0cmlu
Zz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBG
cmFnbWVudFNoYWRlcjsKLWNsYXNzIFZlcnRleFNoYWRlcjsKLQotLy8gSGVscGVyIHN0cnVjdCBy
ZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0g
ICAgVW5pZm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXko
KTsKLQotICAgIGNvbnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1l
OyAgIC8vIERlY29yYXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8g
VW5kZWNvcmF0ZWQgbmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7Ci0KLSAg
ICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Ci0KLSAgICBzdHJ1Y3QgUmVn
aXN0ZXJJbmZvCi0gICAgewotICAgICAgICBSZWdpc3RlckluZm8oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmbG9hdDRJbmRleCA9IC0xOwotICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7
Ci0gICAgICAgICAgICBib29sSW5kZXggPSAtMTsKLSAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQg
PSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RF
U0MgJmNvbnN0YW50RGVzY3JpcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaChj
b25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEQzRFhSU19CT09MOiAgICBib29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9B
VDQ6ICBmbG9hdDRJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzRFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBj
b25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7IGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGlu
dCljb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQpOwotICAgICAgICAgICAgcmVnaXN0
ZXJDb3VudCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGludCBmbG9hdDRJbmRleDsKLSAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKLSAg
ICAgICAgaW50IGJvb2xJbmRleDsKLQotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9
OwotCi0gICAgUmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKLX07Ci0KLS8v
IFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3Jt
IGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCi17Ci0gICAgVW5pZm9y
bUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQs
IHVuc2lnbmVkIGludCBpbmRleCk7Ci0KLSAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIHVuc2ln
bmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRleDsKLX07Ci0KLS8vIFRoaXMg
aXMgdGhlIHJlc3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQg
d291bGQgYmUgcGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCi1jbGFzcyBQcm9ncmFtQmluYXJ5Ci17
Ci0gIHB1YmxpYzoKLSAgICBQcm9ncmFtQmluYXJ5KCk7Ci0gICAgflByb2dyYW1CaW5hcnkoKTsK
LQotICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGly
ZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKLQotICAgIEdMdWludCBnZXRB
dHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJ
bmRleChpbnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmco
U2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVy
ZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5
cGUgdHlwZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFt
ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9y
bTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0g
ICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVu
aWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZv
cm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAg
ICBib29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJh
bXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZT
aXplLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xp
bnQgZ2V0RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxT
aXplTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBj
b25zdDsKLSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0g
ICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7Ci0K
LSAgICBib29sIGxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3Mg
JmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNp
emVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKLQotICAgIHZv
aWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0g
ICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICBHTGludCBnZXRBY3RpdmVB
dHRyaWJ1dGVNYXhMZW5ndGgoKTsKLQotICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xl
bnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwotICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3Vu
dCgpOwotICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKLQotICAgIHZvaWQg
dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZyk7Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKElu
Zm9Mb2cgKmluZm9Mb2cpOwotICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKLQotICAgIHN0
YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFt
ZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1
bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBs
ZWFkaW5nIHVuZGVyc2NvcmUKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihQcm9ncmFtQmluYXJ5KTsKLQotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJ
RDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKLQotICAgIGludCBwYWNrVmFyeWlu
Z3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cg
JmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNM
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hh
ZGVyKTsKLQotICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
QXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLQotICAgIGJvb2wgbGlu
a1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRU
YWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmlu
Zm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBj
b25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcg
bmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qg
RDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9E
RVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAg
Ym9vbCBhcHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9h
dCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2
KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsK
LSAgICBib29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZv
aWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xi
b29sZWFuICp2KTsKLQotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7Ci0KLSAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4
U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFibGU7Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGR1cmluZyBsaW5raW5nLgotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQ
UzsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBBdHRy
aWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2Vt
YW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAg
ICB7Ci0gICAgICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVu
aXQ7Ci0gICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1w
bGVyIG1TYW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1T
YW1wbGVyc1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWlu
dCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsK
LSAgICBVbmlmb3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5p
Zm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5k
ZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVw
dGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhh
bGZQaXhlbFNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAg
IEdMaW50IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbVZhbGlkYXRlZDsK
LX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTBlZGRhNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEy
OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnkuY3BwOiBJbXBsZW1lbnRzIHRoZSBn
bDo6UXVlcnkgY2xhc3MKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLVF1ZXJ5OjpRdWVyeShH
THVpbnQgaWQsIEdMZW51bSB0eXBlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQoteyAKLSAgICBtUXVl
cnkgPSBOVUxMOwotICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLSAgICBtUmVzdWx0ID0gR0xfRkFM
U0U7Ci0gICAgbVR5cGUgPSB0eXBlOwotfQotCi1RdWVyeTo6flF1ZXJ5KCkKLXsKLSAgICBpZiAo
bVF1ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAg
ICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0KLXZvaWQgUXVlcnk6OmJlZ2luKCkKLXsKLSAg
ICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBpZiAoRkFJTEVEKGdldERldmlj
ZSgpLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmbVF1ZXJ5KSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NV
RV9CRUdJTik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLX0KLQotdm9pZCBRdWVy
eTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOwotICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgCi0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1SZXN1bHQgPSBH
TF9GQUxTRTsKLX0KLQotR0x1aW50IFF1ZXJ5OjpnZXRSZXN1bHQoKQotewotICAgIGlmIChtUXVl
cnkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghdGVzdFF1ZXJ5KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFNsZWVwKDApOwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVj
ayBmb3IgZGV2aWNlIGxvc3MKLSAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJl
dHVybiBTX0ZBTFNFIGV2ZW4gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAvLyBp
bnN0ZWFkIG9mIEQzREVSUl9ERVZJQ0VMT1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAgICAg
IGlmIChnbDo6Z2V0RGlzcGxheSgpLT50ZXN0RGV2aWNlTG9zdCgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdsOjpnZXREaXNwbGF5KCktPm5vdGlmeURldmljZUxvc3QoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gKEdMdWludCltUmVzdWx0Owot
fQotCi1HTGJvb2xlYW4gUXVlcnk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKLXsKLSAgICBpZiAobVF1
ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICB0ZXN0UXVlcnkoKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLUdMZW51bSBRdWVyeTo6Z2V0VHlwZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1UeXBlOwotfQotCi1HTGJvb2xlYW4gUXVlcnk6OnRlc3RRdWVyeSgpCi17
Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKLSAgICB7Ci0g
ICAgICAgIERXT1JEIG51bVBpeGVscyA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCBocmVzID0gbVF1
ZXJ5LT5HZXREYXRhKCZudW1QaXhlbHMsIHNpemVvZihEV09SRCksIEQzREdFVERBVEFfRkxVU0gp
OwotICAgICAgICBpZiAoaHJlcyA9PSBTX09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3Rh
dHVzID0gR0xfVFJVRTsKLQotICAgICAgICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAg
ICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFM
U0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChjaGVja0RldmljZUxvc3QoaHJlcykpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1TdGF0dXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdM
X1RSVUU7IC8vIHByZXZlbnQgYmxvY2tpbmcgd2hlbiBxdWVyeSBpcyBudWxsCi19Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDc5MzU3YTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFF1ZXJ5Lmg6IERlZmluZXMgdGhlIGdsOjpRdWVyeSBj
bGFzcwotCi0jaWZuZGVmIExJQkdMRVNWMl9RVUVSWV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUVVF
UllfSF8KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5j
bHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRl
ICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIFF1
ZXJ5IDogcHVibGljIFJlZkNvdW50T2JqZWN0Ci17Ci0gIHB1YmxpYzoKLSAgICBRdWVyeShHTHVp
bnQgaWQsIEdMZW51bSB0eXBlKTsKLSAgICB2aXJ0dWFsIH5RdWVyeSgpOwotCi0gICAgdm9pZCBi
ZWdpbigpOwotICAgIHZvaWQgZW5kKCk7Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdM
Ym9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJsZSgpOwotCi0gICAgR0xlbnVtIGdldFR5cGUoKSBjb25z
dDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeSk7Ci0K
LSAgICBHTGJvb2xlYW4gdGVzdFF1ZXJ5KCk7Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIG1RdWVy
eTsKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xib29sZWFuIG1TdGF0dXM7Ci0gICAgR0xpbnQg
bVJlc3VsdDsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1FVRVJZX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUkVBRE1FCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyN2QzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlz
IGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qgc3luY2VkIGZyb20gdGhlIEFOR0xFIHByb2pl
Y3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJLaXQgbmVlZHMgdGhlbSB5ZXQuClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0YjkxMWU4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJidWZmZXIuY3BwOiB0aGUgZ2w6OlJlbmRl
cmJ1ZmZlciBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8gQ29sb3JidWZmZXIsIERl
cHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgot
Ly8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFj
ZSBnbAotewotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Om1DdXJyZW50U2VyaWFs
ID0gMTsKLQotUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpSZW5kZXJidWZmZXJJbnRlcmZhY2UoKQot
ewotfQotCi0vLyBUaGUgZGVmYXVsdCBjYXNlIGZvciBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIFJl
bmRlcmJ1ZmZlckludGVyZmFjZSBpcyBub3QgdG8KLS8vIG5lZWQgdG8gZG8gYW55dGhpbmcgdXBv
biB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRoZSBwYXJlbnQgUmVuZGVyYnVmZmVyIGluY3JlbWVu
dGluZwotLy8gb3IgZGVjcmVtZW50aW5nLiAKLXZvaWQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjph
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotfQotCi12b2lkIFJlbmRl
cmJ1ZmZlckludGVyZmFjZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
Ci17Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25z
dAotewotICAgIHJldHVybiBkeDJlczo6R2V0UmVkU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0K
LUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGR4MmVzOjpHZXRHcmVlblNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVp
bnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGR4MmVzOjpHZXRCbHVlU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5k
ZXJidWZmZXJJbnRlcmZhY2U6OmdldEFscGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4
MmVzOjpHZXRBbHBoYVNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlOjpnZXREZXB0aFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6
R2V0RGVwdGhTaXplKGdldEQzREZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0
U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi0vLy8vLyBSZW5kZXJidWZmZXJUZXh0
dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8KLQotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6
IG1UYXJnZXQodGFyZ2V0KQotewotICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwotfQotCi1S
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQotewotICAgIG1U
ZXh0dXJlMkQuc2V0KE5VTEwpOwotfQotCi0vLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRo
ZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCi0vLyBSZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSBy
ZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94
eSk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJv
eHkpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKLX0KLQotLy8gSW5jcmVtZW50cyBy
ZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5l
ZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRE
ZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwo
bVRhcmdldCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOwotfQotCi1HTHNp
emVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0KDApOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJl
MkQtPmdldEludGVybmFsRm9ybWF0KDApOwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5n
ZXREM0RGb3JtYXQoMCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRT
YW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1
cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwotfQotCi0vLy8vLyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLwotCi1SZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCi17Ci0gICAgbVRl
eHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsKLX0KLQotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA6On5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFw
LnNldChOVUxMKTsKLX0KLQotLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24g
cmVmZXJlbmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQotLy8gUmVuZGVyYnVmZmVycyBhY3Rp
bmcgYXMgcHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNl
Lgotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZUN1YmVNYXAtPmFkZFByb3h5UmVmKHBy
b3h5KTsKLX0KLQotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFwLT5yZWxl
YXNlUHJveHkocHJveHkpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2Uu
Ci0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3Qz
RFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KCkK
LXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7
Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBO
VUxMOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRIZWlnaHQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQot
R0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotRDNERk9STUFUIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBt
VGV4dHVyZUN1YmVNYXAtPmdldEQzREZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDApOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1w
bGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKLX0KLQotLy8vLy8v
IFJlbmRlcmJ1ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KLQotUmVuZGVyYnVmZmVyOjpSZW5k
ZXJidWZmZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNlKSA6IFJl
ZkNvdW50T2JqZWN0KGlkKQotewotICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsKLSAgICBt
SW5zdGFuY2UgPSBpbnN0YW5jZTsKLX0KLQotUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkK
LXsKLSAgICBkZWxldGUgbUluc3RhbmNlOwotfQotCi0vLyBUaGUgUmVuZGVyYnVmZmVySW50ZXJm
YWNlIGNvbnRhaW5lZCBpbiB0aGlzIFJlbmRlcmJ1ZmZlciBtYXkgbmVlZCB0byBtYWludGFpbgot
Ly8gaXRzIG93biByZWZlcmVuY2UgY291bnQsIHNvIHdlIHBhc3MgaXQgb24gaGVyZS4KLXZvaWQg
UmVuZGVyYnVmZmVyOjphZGRSZWYoKSBjb25zdAotewotICAgIG1JbnN0YW5jZS0+YWRkUHJveHlS
ZWYodGhpcyk7Ci0KLSAgICBSZWZDb3VudE9iamVjdDo6YWRkUmVmKCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyYnVmZmVyOjpyZWxlYXNlKCkgY29uc3QKLXsKLSAgICBtSW5zdGFuY2UtPnJlbGVhc2VQcm94
eSh0aGlzKTsKLQotICAgIFJlZkNvdW50T2JqZWN0OjpyZWxlYXNlKCk7Ci19Ci0KLS8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsK
LX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVy
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERl
cHRoU3RlbmNpbCgpOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25z
dAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7Ci19Ci0KLUdMc2l6ZWkgUmVu
ZGVyYnVmZmVyOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdl
dEhlaWdodCgpOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRJbnRlcm5hbEZvcm1hdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLX0K
LQotRDNERk9STUFUIFJlbmRlcmJ1ZmZlcjo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXREM0RGb3JtYXQoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
cjo6Z2V0UmVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVkU2l6
ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRHcmVlblNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEdyZWVuU2l6ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVyOjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
Qmx1ZVNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRBbHBoYVNpemUoKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXREZXB0aFNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U3RlbmNp
bFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFN0ZW5jaWxTaXplKCk7
Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXRTYW1wbGVzKCk7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJi
dWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2Vy
aWFsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVmZmVyOjpzZXRTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgKm5ld1N0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKG5ld1N0b3JhZ2UgIT0gTlVMTCk7Ci0K
LSAgICBkZWxldGUgbUluc3RhbmNlOwotICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7Ci19Ci0K
LVJlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJpYWwoaXNz
dWVTZXJpYWwoKSkKLXsKLSAgICBtV2lkdGggPSAwOwotICAgIG1IZWlnaHQgPSAwOwotICAgIG1J
bnRlcm5hbEZvcm1hdCA9IEdMX1JHQkE0OwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfQThSOEc4
Qjg7Ci0gICAgbVNhbXBsZXMgPSAwOwotfQotCi1SZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVy
YnVmZmVyU3RvcmFnZSgpCi17Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCi17Ci0g
ICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4K
LS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNE
U3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAg
cmV0dXJuIE5VTEw7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgo
KSBjb25zdAotewotICAgIHJldHVybiBtV2lkdGg7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0KLQot
R0xlbnVtIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUludGVybmFsRm9ybWF0OwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzREZvcm1hdDsK
LX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVNhbXBsZXM7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9y
YWdlOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNp
Z25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVy
biBtQ3VycmVudFNlcmlhbCsrOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNzdWVDdWJlU2VyaWFscygpCi17Ci0gICAgdW5zaWduZWQgaW50IGZpcnN0U2VyaWFsID0g
bUN1cnJlbnRTZXJpYWw7Ci0gICAgbUN1cnJlbnRTZXJpYWwgKz0gNjsKLSAgICByZXR1cm4gZmly
c3RTZXJpYWw7Ci19Ci0KLUNvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0KSA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotewotICAgIGlm
IChyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQtPkFkZFJlZigpOwot
Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgcmVuZGVyVGFy
Z2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgbVdpZHRoID0gZGVzY3JpcHRp
b24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlwdGlvbi5IZWlnaHQ7Ci0gICAgICAg
IG1JbnRlcm5hbEZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChkZXNjcmlw
dGlvbi5Gb3JtYXQpOwotICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0Owot
ICAgICAgICBtU2FtcGxlcyA9IGR4MmVzOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShk
ZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOwotICAgIH0KLX0KLQotQ29sb3JidWZmZXI6OkNv
bG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBz
YW1wbGVzKSA6IG1SZW5kZXJUYXJnZXQoTlVMTCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBl
czJkeDo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBzdXBwb3J0
ZWRTYW1wbGVzID0gZ2V0Q29udGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1
ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOwotCi0gICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPT0gLTEp
Ci0gICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwg
aGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxl
cyhzdXBwb3J0ZWRTYW1wbGVzKSwgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKLQot
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSB3aWR0aDsKLSAg
ICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKLSAgICBt
RDNERm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2Ft
cGxlczsKLX0KLQotQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCi17Ci0gICAgaWYgKG1SZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAg
fQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpDb2xv
cmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVy
biBtUmVuZGVyVGFyZ2V0OwotfQotCi1EZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1
ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKSA6IG1EZXB0aFN0ZW5jaWwoZGVw
dGhTdGVuY2lsKQotewotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0
aFN0ZW5jaWwtPkFkZFJlZigpOwotCi0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlv
bjsKLSAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAg
ICAgbVdpZHRoID0gZGVzY3JpcHRpb24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlw
dGlvbi5IZWlnaHQ7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0RGVw
dGhTdGVuY2lsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7Ci0gICAgICAgIG1TYW1wbGVzID0g
ZHgyZXM6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2Ft
cGxlVHlwZSk7IAotICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwotICAg
IH0KLX0KLQotRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICAK
LSAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IGdldENvbnRleHQoKS0+Z2V0TmVhcmVzdFN1cHBv
cnRlZFNhbXBsZXMoRDNERk1UX0QyNFM4LCBzYW1wbGVzKTsKLQotICAgIGlmIChzdXBwb3J0ZWRT
YW1wbGVzID09IC0xKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4g
MCkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0
ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIEQzREZNVF9EMjRTOCwgZXMyZHg6OkdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1E
ZXB0aFN0ZW5jaWwsIDApOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAg
IG1XaWR0aCA9IHdpZHRoOwotICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9y
bWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgbUQzREZvcm1hdCA9IEQzREZNVF9E
MjRTODsKLSAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLURlcHRoU3RlbmNp
bGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwp
Ci0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0v
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aFN0ZW5jaWxi
dWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAg
ewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bURlcHRoU3RlbmNpbDsKLX0KLQotRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKElEaXJlY3QzRFN1
cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCkK
LXsKLSAgICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0
ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0
ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhl
IHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZQotICAgIH0KLX0KLQotRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhl
aWdodCwgR0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0
LCBzYW1wbGVzKQotewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUlu
dGVybmFsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1
ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVj
dCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZQotICAgIH0KLX0KLQotRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCi17
Ci19Ci0KLVN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCkgOiBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQotewotICAgIGlm
IChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9TVEVO
Q0lMX0lOREVYODsgICAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJp
ZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVm
ZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCi0gICAgfQotfQotCi1TdGVu
Y2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBz
YW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQotewot
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0g
R0xfU1RFTkNJTF9JTkRFWDg7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFy
ZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJl
bmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotICAgIH0KLX0K
LQotU3RlbmNpbGJ1ZmZlcjo6flN0ZW5jaWxidWZmZXIoKQotewotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkNWRkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlcmJ1ZmZl
ci5oOiBEZWZpbmVzIHRoZSB3cmFwcGVyIGNsYXNzIGdsOjpSZW5kZXJidWZmZXIsIGFzIHdlbGwg
YXMgdGhlCi0vLyBjbGFzcyBoaWVyYXJjaHkgdXNlZCB0byBzdG9yZSBpdHMgY29udGVudHM6IFJl
bmRlcmJ1ZmZlclN0b3JhZ2UsIENvbG9yYnVmZmVyLAotLy8gRGVwdGhTdGVuY2lsYnVmZmVyLCBE
ZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIK
LS8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkJVRkZF
Ul9IXwotI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJ
Q0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0
LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgVGV4dHVyZTJEOwotY2xhc3MgVGV4dHVyZUN1
YmVNYXA7Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBDb2xvcmJ1ZmZlcjsKLWNsYXNzIERl
cHRoU3RlbmNpbGJ1ZmZlcjsKLQotY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCi17Ci0gIHB1
YmxpYzoKLSAgICBSZW5kZXJidWZmZXJJbnRlcmZhY2UoKTsKLQotICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlckludGVyZmFjZSgpIHt9OwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXRSZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0RGVwdGhTdGVuY2lsKCkgPSAwOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgPSAwOwotCi0gICAgR0x1aW50IGdldFJlZFNpemUo
KSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdl
dEJsdWVTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAg
IEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0ID0g
MDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZm
ZXJJbnRlcmZhY2UpOwotfTsKLQotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGlj
IFJlbmRlcmJ1ZmZlckludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4
dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFs
IH5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0
KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgdmly
dHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhl
aWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7Ci0KLSAgICBCaW5kaW5nUG9pbnRlciA8
VGV4dHVyZTJEPiBtVGV4dHVyZTJEOwotICAgIEdMZW51bSBtVGFyZ2V0OwotfTsKLQotY2xhc3Mg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNl
Ci17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3Vi
ZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOwotCi0gICAgQmluZGluZ1BvaW50ZXIgPFRl
eHR1cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXA7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7Ci19Owot
Ci0vLyBBIGNsYXNzIGRlcml2ZWQgZnJvbSBSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNyZWF0ZWQg
d2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCi0vLyBpcyBjYWxsZWQuIFRoZSBzcGVjaWZp
YyBjb25jcmV0ZSB0eXBlIGRlcGVuZHMgb24gd2hldGhlciB0aGUgaW50ZXJuYWwgZm9ybWF0IGlz
Ci0vLyBjb2xvdXIgZGVwdGgsIHN0ZW5jaWwgb3IgcGFja2VkIGRlcHRoL3N0ZW5jaWwuCi1jbGFz
cyBSZW5kZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQotewot
ICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyU3RvcmFnZSgpOwotCi0gICAgdmlydHVhbCB+UmVu
ZGVyYnVmZmVyU3RvcmFnZSgpID0gMDsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERl
cHRoU3RlbmNpbCgpOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVt
IGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gICAgc3Rh
dGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
aXNzdWVDdWJlU2VyaWFscygpOwotCi0gIHByb3RlY3RlZDoKLSAgICBHTHNpemVpIG1XaWR0aDsK
LSAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xlbnVtIG1JbnRlcm5hbEZvcm1hdDsKLSAgICBE
M0RGT1JNQVQgbUQzREZvcm1hdDsKLSAgICBHTHNpemVpIG1TYW1wbGVzOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOwotCi0g
ICAgY29uc3QgdW5zaWduZWQgaW50IG1TZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50
IG1DdXJyZW50U2VyaWFsOwotfTsKLQotLy8gUmVuZGVyYnVmZmVyIGltcGxlbWVudHMgdGhlIEdM
IHJlbmRlcmJ1ZmZlciBvYmplY3QuCi0vLyBJdCdzIG9ubHkgYSBwcm94eSBmb3IgYSBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UgaW5zdGFuY2U7IHRoZSBpbnRlcm5hbCBvYmplY3QKLS8vIGNhbiBjaGFu
Z2Ugd2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNhbGxlZC4KLWNsYXNzIFJlbmRl
cmJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgUmVuZGVy
YnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICpzdG9yYWdlKTsKLQotICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlcigpOwotCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGZyb20g
UmVmQ291bnRPYmplY3QgYXJlIG92ZXJsb2FkZWQgaGVyZSBiZWNhdXNlCi0gICAgLy8gVGV4dHVy
ZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gY291bnQgb2YgcmVmZXJlbmNlcyB0byB0aGVt
IHZpYQotICAgIC8vIFJlbmRlcmJ1ZmZlcnMvUmVuZGVyYnVmZmVyVGV4dHVyZXMuIFRoZXNlIGZ1
bmN0aW9ucyBpbnZva2UgdGhvc2UKLSAgICAvLyByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rpb25z
IG9uIHRoZSBSZW5kZXJidWZmZXJJbnRlcmZhY2UuCi0gICAgdm9pZCBhZGRSZWYoKSBjb25zdDsK
LSAgICB2b2lkIHJlbGVhc2UoKSBjb25zdDsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7
Ci0KLSAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQo
KSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICBEM0RG
T1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25z
dDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVT
aXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWlu
dCBnZXREZXB0aFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25z
dDsKLSAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBn
ZXRTZXJpYWwoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9y
YWdlICpuZXdTdG9yYWdlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihSZW5kZXJidWZmZXIpOwotCi0gICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICptSW5zdGFu
Y2U7Ci19OwotCi1jbGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdl
Ci17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0KTsKLSAgICBDb2xvcmJ1ZmZlcihHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKLQotICAgIHZpcnR1YWwg
fkNvbG9yYnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihD
b2xvcmJ1ZmZlcik7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKLX07
Ci0KLWNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdl
Ci17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEZXB0aFN0ZW5jaWxidWZmZXIoSURpcmVjdDNE
U3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7Ci0gICAgRGVwdGhTdGVuY2lsYnVmZmVyKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgfkRlcHRoU3Rl
bmNpbGJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhT
dGVuY2lsKCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhT
dGVuY2lsOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRo
U3RlbmNpbGJ1ZmZlcik7Ci19OwotCi1jbGFzcyBEZXB0aGJ1ZmZlciA6IHB1YmxpYyBEZXB0aFN0
ZW5jaWxidWZmZXIKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IERlcHRoYnVmZmVyKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwotICAgIERlcHRoYnVmZmVyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+RGVw
dGhidWZmZXIoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihE
ZXB0aGJ1ZmZlcik7Ci19OwotCi1jbGFzcyBTdGVuY2lsYnVmZmVyIDogcHVibGljIERlcHRoU3Rl
bmNpbGJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RlbmNpbGJ1ZmZlcihJRGly
ZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKLSAgICBTdGVuY2lsYnVmZmVyKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+
U3RlbmNpbGJ1ZmZlcigpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFN0ZW5jaWxidWZmZXIpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFTkRF
UkJVRkZFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZTI2MzUyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZXNvdXJjZU1hbmFnZXIuY3BwOiBJbXBsZW1lbnRz
IHRoZSBnbDo6UmVzb3VyY2VNYW5hZ2VyIGNsYXNzLCB3aGljaCB0cmFja3MgYW5kIAotLy8gcmV0
cmlldmVzIG9iamVjdHMgd2hpY2ggbWF5IGJlIHNoYXJlZCBieSBtdWx0aXBsZSBDb250ZXh0cy4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgImxp
YkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVy
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1S
ZXNvdXJjZU1hbmFnZXI6OlJlc291cmNlTWFuYWdlcigpCi17Ci0gICAgbVJlZkNvdW50ID0gMTsK
LX0KLQotUmVzb3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKCkKLXsKLSAgICB3aGlsZSAo
IW1CdWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVy
TWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVt
cHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCkt
PmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKLSAgICB7
Ci0gICAgICAgIGRlbGV0ZVNoYWRlcihtU2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIW1SZW5kZXJidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAg
IGRlbGV0ZVJlbmRlcmJ1ZmZlcihtUmVuZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIW1UZXh0dXJlTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBk
ZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci19Ci0KLXZv
aWQgUmVzb3VyY2VNYW5hZ2VyOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi12
b2lkIFJlc291cmNlTWFuYWdlcjo6cmVsZWFzZSgpCi17Ci0gICAgaWYgKC0tbVJlZkNvdW50ID09
IDApCi0gICAgewotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMg
YW4gdW51c2VkIGJ1ZmZlciBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVCdWZm
ZXIoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9j
YXRlKCk7Ci0KLSAgICBtQnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhh
bmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgc2hhZGVyL3Byb2dyYW0gbmFtZQotR0x1
aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewotICAgIEdM
dWludCBoYW5kbGUgPSBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwot
Ci0gICAgaWYgKHR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIG1TaGFk
ZXJNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBt
U2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAg
ICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQot
Ly8gUmV0dXJucyBhbiB1bnVzZWQgcHJvZ3JhbS9zaGFkZXIgbmFtZQotR0x1aW50IFJlc291cmNl
TWFuYWdlcjo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1Qcm9ncmFt
U2hhZGVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtUHJvZ3JhbU1hcFtoYW5k
bGVdID0gbmV3IFByb2dyYW0odGhpcywgaGFuZGxlKTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19
Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHRleHR1cmUgbmFtZQotR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1UZXh0dXJlSGFu
ZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVM
TDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRl
cmJ1ZmZlciBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVSZW5kZXJidWZmZXIo
KQotewotICAgIEdMdWludCBoYW5kbGUgPSBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFs
bG9jYXRlKCk7Ci0KLSAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAg
cmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZlcihH
THVpbnQgYnVmZmVyKQotewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyT2JqZWN0ID0g
bUJ1ZmZlck1hcC5maW5kKGJ1ZmZlcik7Ci0KLSAgICBpZiAoYnVmZmVyT2JqZWN0ICE9IG1CdWZm
ZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLnJlbGVh
c2UoYnVmZmVyT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlmIChidWZmZXJPYmplY3QtPnNlY29u
ZCkgYnVmZmVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlck1hcC5l
cmFzZShidWZmZXJPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRl
bGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hh
ZGVyT2JqZWN0ID0gbVNoYWRlck1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAoc2hhZGVyT2Jq
ZWN0ICE9IG1TaGFkZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyT2JqZWN0
LT5zZWNvbmQtPmdldFJlZkNvdW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbVBy
b2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShzaGFkZXJPYmplY3QtPmZpcnN0KTsK
LSAgICAgICAgICAgIGRlbGV0ZSBzaGFkZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1T
aGFkZXJNYXAuZXJhc2Uoc2hhZGVyT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRp
b24oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0
ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJv
Z3JhbU9iamVjdCA9IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3Jh
bU9iamVjdCAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFt
T2JqZWN0LT5zZWNvbmQtPmdldFJlZkNvdW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbVByb2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShwcm9ncmFtT2JqZWN0LT5m
aXJzdCk7Ci0gICAgICAgICAgICBkZWxldGUgcHJvZ3JhbU9iamVjdC0+c2Vjb25kOwotICAgICAg
ICAgICAgbVByb2dyYW1NYXAuZXJhc2UocHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7IAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5m
bGFnRm9yRGVsZXRpb24oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1h
bmFnZXI6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgVGV4dHVyZU1hcDo6
aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7Ci0KLSAg
ICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAg
IG1UZXh0dXJlSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UodGV4dHVyZU9iamVjdC0+Zmlyc3QpOwot
ICAgICAgICBpZiAodGV4dHVyZU9iamVjdC0+c2Vjb25kKSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQt
PnJlbGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmVNYXAuZXJhc2UodGV4dHVyZU9iamVjdCk7Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWlu
dCByZW5kZXJidWZmZXIpCi17Ci0gICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJi
dWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsKLQotICAg
IGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7
Ci0gICAgICAgIG1SZW5kZXJidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShyZW5kZXJidWZm
ZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdC0+c2Vjb25k
KSByZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVy
YnVmZmVyTWFwLmVyYXNlKHJlbmRlcmJ1ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi1CdWZmZXIg
KlJlc291cmNlTWFuYWdlcjo6Z2V0QnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAg
QnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKLQot
ICAgIGlmIChidWZmZXIgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gYnVmZmVyLT5z
ZWNvbmQ7Ci0gICAgfQotfQotCi1TaGFkZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2hhZGVyKHVu
c2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXIgPSBt
U2hhZGVyTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChzaGFkZXIgPT0gbVNoYWRlck1hcC5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICByZXR1cm4gc2hhZGVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1UZXh0dXJlICpS
ZXNvdXJjZU1hbmFnZXI6OmdldFRleHR1cmUodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBp
ZiAoaGFuZGxlID09IDApIHJldHVybiBOVUxMOwotCi0gICAgVGV4dHVyZU1hcDo6aXRlcmF0b3Ig
dGV4dHVyZSA9IG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmICh0ZXh0dXJlID09
IG1UZXh0dXJlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7Ci0gICAgfQot
fQotCi1Qcm9ncmFtICpSZXNvdXJjZU1hbmFnZXI6OmdldFByb2dyYW0odW5zaWduZWQgaW50IGhh
bmRsZSkKLXsKLSAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtID0gbVByb2dyYW1NYXAu
ZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHByb2dyYW0gPT0gbVByb2dyYW1NYXAuZW5kKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHByb2dyYW0tPnNlY29uZDsKLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqUmVz
b3VyY2VNYW5hZ2VyOjpnZXRSZW5kZXJidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAg
ICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlciA9IG1SZW5kZXJidWZmZXJN
YXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtUmVuZGVyYnVmZmVy
TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiByZW5kZXJidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVu
ZGVyYnVmZmVyICpidWZmZXIpCi17Ci0gICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gYnVm
ZmVyOwotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVu
c2lnbmVkIGludCBidWZmZXIpCi17Ci0gICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIo
YnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIEJ1ZmZlciAqYnVmZmVyT2JqZWN0ID0gbmV3IEJ1ZmZl
cihidWZmZXIpOwotICAgICAgICBtQnVmZmVyTWFwW2J1ZmZlcl0gPSBidWZmZXJPYmplY3Q7Ci0g
ICAgICAgIGJ1ZmZlck9iamVjdC0+YWRkUmVmKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNl
TWFuYWdlcjo6Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQgdGV4dHVyZSwgVGV4dHVyZVR5
cGUgdHlwZSkKLXsKLSAgICBpZiAoIWdldFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAw
KQotICAgIHsKLSAgICAgICAgVGV4dHVyZSAqdGV4dHVyZU9iamVjdDsKLQotICAgICAgICBpZiAo
dHlwZSA9PSBURVhUVVJFXzJEKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZXh0dXJlT2JqZWN0
ID0gbmV3IFRleHR1cmUyRCh0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0
eXBlID09IFRFWFRVUkVfQ1VCRSkKLSAgICAgICAgewotICAgICAgICAgICAgdGV4dHVyZU9iamVj
dCA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9IHRleHR1cmVP
YmplY3Q7Ci0gICAgICAgIHRleHR1cmVPYmplY3QtPmFkZFJlZigpOwotICAgIH0KLX0KLQotdm9p
ZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVu
ZGVyYnVmZmVyKQotewotICAgIGlmIChyZW5kZXJidWZmZXIgIT0gMCAmJiAhZ2V0UmVuZGVyYnVm
ZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlck9iamVjdCA9IG5ldyBSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLCBuZXcgQ29sb3JidWZm
ZXIoMCwgMCwgR0xfUkdCQTQsIDApKTsKLSAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcFtyZW5kZXJi
dWZmZXJdID0gcmVuZGVyYnVmZmVyT2JqZWN0OwotICAgICAgICByZW5kZXJidWZmZXJPYmplY3Qt
PmFkZFJlZigpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDUxODVmYzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZXNvdXJjZU1hbmFnZXIuaCA6IERl
ZmluZXMgdGhlIFJlc291cmNlTWFuYWdlciBjbGFzcywgd2hpY2ggdHJhY2tzIG9iamVjdHMKLS8v
IHNoYXJlZCBieSBtdWx0aXBsZSBHTCBjb250ZXh0cy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVT
T1VSQ0VNQU5BR0VSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KLQot
I2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlIDxo
YXNoX21hcD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJ1ZmZl
cjsKLWNsYXNzIFNoYWRlcjsKLWNsYXNzIFByb2dyYW07Ci1jbGFzcyBUZXh0dXJlOwotY2xhc3Mg
UmVuZGVyYnVmZmVyOwotCi1lbnVtIFRleHR1cmVUeXBlCi17Ci0gICAgVEVYVFVSRV8yRCwKLSAg
ICBURVhUVVJFX0NVQkUsCi0KLSAgICBURVhUVVJFX1RZUEVfQ09VTlQsCi0gICAgVEVYVFVSRV9V
TktOT1dOCi19OwotCi1lbnVtIFNhbXBsZXJUeXBlCi17Ci0gICAgU0FNUExFUl9QSVhFTCwKLSAg
ICBTQU1QTEVSX1ZFUlRFWAotfTsKLQotY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCi17Ci0gIHB1Ymxp
YzoKLSAgICBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB+UmVzb3VyY2VNYW5hZ2VyKCk7Ci0KLSAg
ICB2b2lkIGFkZFJlZigpOwotICAgIHZvaWQgcmVsZWFzZSgpOwotCi0gICAgR0x1aW50IGNyZWF0
ZUJ1ZmZlcigpOwotICAgIEdMdWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIEdM
dWludCBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBH
THVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVp
bnQgYnVmZmVyKTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKLSAgICB2
b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwotICAgIHZvaWQgZGVsZXRlVGV4dHVy
ZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJl
bmRlcmJ1ZmZlcik7Ci0KLSAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAg
ICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9n
cmFtKEdMdWludCBoYW5kbGUpOwotICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0g
ICAgCi0gICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVy
ICpyZW5kZXJidWZmZXIpOwotCi0gICAgdm9pZCBjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWdu
ZWQgaW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0
ZXh0dXJlLCBUZXh0dXJlVHlwZSB0eXBlKTsKLSAgICB2b2lkIGNoZWNrUmVuZGVyYnVmZmVyQWxs
b2NhdGlvbihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihSZXNvdXJjZU1hbmFnZXIpOwotCi0gICAgc3RkOjpzaXplX3QgbVJl
ZkNvdW50OwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgQnVmZmVyKj4g
QnVmZmVyTWFwOwotICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwotICAgIEhhbmRsZUFsbG9jYXRv
ciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFw
PEdMdWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOwotICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOwot
Ci0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1N
YXA7Ci0gICAgUHJvZ3JhbU1hcCBtUHJvZ3JhbU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbVBy
b2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9t
YXA8R0x1aW50LCBUZXh0dXJlKj4gVGV4dHVyZU1hcDsKLSAgICBUZXh0dXJlTWFwIG1UZXh0dXJl
TWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvcjsKLQotICAg
IHR5cGVkZWYgc3RkZXh0OjpoYXNoX21hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1
ZmZlck1hcDsKLSAgICBSZW5kZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKLSAgICBIYW5k
bGVBbGxvY2F0b3IgbVJlbmRlcmJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTdmZDNkNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1NoYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gU2hhZGVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlNo
YWRlciBjbGFzcyBhbmQgaXRzICBkZXJpdmVkIGNsYXNzZXMKLS8vIFZlcnRleFNoYWRlciBhbmQg
RnJhZ21lbnRTaGFkZXIuIEltcGxlbWVudHMgR0wgc2hhZGVyIG9iamVjdHMgYW5kIHJlbGF0ZWQK
LS8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAy
NCBhbmQgc2VjdGlvbiAzLjggcGFnZSA4NC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIu
aCIKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVybGFuZy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxp
dGllcy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXZvaWQgKlNoYWRlcjo6bUZyYWdtZW50Q29tcGls
ZXIgPSBOVUxMOwotdm9pZCAqU2hhZGVyOjptVmVydGV4Q29tcGlsZXIgPSBOVUxMOwotCi1TaGFk
ZXI6OlNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbUhh
bmRsZShoYW5kbGUpLCBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpCi17Ci0gICAgbVNvdXJjZSA9
IE5VTEw7Ci0gICAgbUhsc2wgPSBOVUxMOwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQotICAgIHVu
Y29tcGlsZSgpOwotICAgIGluaXRpYWxpemVDb21waWxlcigpOwotCi0gICAgbVJlZkNvdW50ID0g
MDsKLSAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci19Ci0KLVNoYWRlcjo6flNoYWRlcigpCi17
Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsKLSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBkZWxldGVb
XSBtSW5mb0xvZzsKLX0KLQotR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUhhbmRsZTsKLX0KLQotdm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNv
dW50LCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQotewotICAgIGRl
bGV0ZVtdIG1Tb3VyY2U7Ci0gICAgaW50IHRvdGFsTGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVu
Z3RoW2ldID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0
aFtpXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRv
dGFsTGVuZ3RoICs9IChpbnQpc3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtU291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAxXTsKLSAgICBjaGFyICpjb2Rl
ID0gbVNvdXJjZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7
Ci0gICAgICAgIGludCBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5n
dGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gbGVuZ3Ro
W2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc3Ry
aW5nTGVuZ3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN0cm5jcHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgpOwotICAgICAgICBjb2RlICs9
IHN0cmluZ0xlbmd0aDsKLSAgICB9Ci0KLSAgICBtU291cmNlW3RvdGFsTGVuZ3RoXSA9ICdcMCc7
Ci19Ci0KLWludCBTaGFkZXI6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAotewotICAgIGlmICgh
bUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQotfQotCi12b2lk
IFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hh
ciAqaW5mb0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKGJ1ZlNpemUgPiAw
KQotICAgIHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAg
ICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkK
LSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLWludCBTaGFkZXI6
OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0
cmxlbihtU291cmNlKSArIDE7Ci0gICAgfQotfQotCi1pbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVk
U291cmNlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbiht
SGxzbCkgKyAxOwotICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAq
c291cmNlLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQot
ewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAoYnVmU2l6ZSA+IDApCi0gICAgewotICAg
ICAgICBpZiAoc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWlu
KGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsKLSAgICAgICAgICAgIG1lbWNweShi
dWZmZXIsIHNvdXJjZSwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYnVmZmVyW2luZGV4
XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5n
dGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhZGVyOjpnZXRTb3VyY2UoR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBnZXRTb3VyY2VJ
bXBsKG1Tb3VyY2UsIGJ1ZlNpemUsIGxlbmd0aCwgYnVmZmVyKTsKLX0KLQotdm9pZCBTaGFkZXI6
OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNo
YXIgKmJ1ZmZlcikKLXsKLSAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgs
IGJ1ZmZlcik7Ci19Ci0KLWJvb2wgU2hhZGVyOjppc0NvbXBpbGVkKCkKLXsKLSAgICByZXR1cm4g
bUhsc2wgIT0gTlVMTDsKLX0KLQotY29uc3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKLXsKLSAg
ICByZXR1cm4gbUhsc2w7Ci19Ci0KLXZvaWQgU2hhZGVyOjphZGRSZWYoKQotewotICAgIG1SZWZD
b3VudCsrOwotfQotCi12b2lkIFNoYWRlcjo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07
Ci0KLSAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAg
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsKLSAgICB9Ci19Ci0K
LXVuc2lnbmVkIGludCBTaGFkZXI6OmdldFJlZkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVJlZkNvdW50OwotfQotCi1ib29sIFNoYWRlcjo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25z
dAotewotICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFNoYWRlcjo6ZmxhZ0Zv
ckRlbGV0aW9uKCkKLXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotLy8gUGVyZm9y
bSBhIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzaGFkZXIgY29tcGlsZXIgKG9yIGFm
dGVyIGJlaW5nIGRlc3RydWN0ZWQgYnkgcmVsZWFzZUNvbXBpbGVyKQotdm9pZCBTaGFkZXI6Omlu
aXRpYWxpemVDb21waWxlcigpCi17Ci0gICAgaWYgKCFtRnJhZ21lbnRDb21waWxlcikKLSAgICB7
Ci0gICAgICAgIGludCByZXN1bHQgPSBTaEluaXRpYWxpemUoKTsKLQotICAgICAgICBpZiAocmVz
dWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgcmVzb3VyY2Vz
OwotICAgICAgICAgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmcmVzb3VyY2VzKTsKLSAgICAg
ICAgICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgICAgICAg
ICAgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250
ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLSAgICAgICAgICAgIHJlc291cmNlcy5N
YXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IGNvbnRleHQtPmdldE1heGltdW1WZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMgPSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cygpOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7
Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZGRVJT
OwotICAgICAgICAgICAgcmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0g
ICAgICAgICAgICAvLyByZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IGdldERpc3Bs
YXkoKS0+aXNEM2Q5RXhEZXZpY2UoKSA/IDEgOiAwOyAvLyBUT0RPOiBjb21tZW50ZWQgb3V0IHVu
dGlsIHRoZSBleHRlbnNpb24gaXMgYWN0dWFsbHkgc3VwcG9ydGVkLgotCi0gICAgICAgICAgICBt
RnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRfU0hBREVS
LCBTSF9HTEVTMl9TUEVDLCBTSF9ITFNMX09VVFBVVCwgJnJlc291cmNlcyk7Ci0gICAgICAgICAg
ICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRFWF9TSEFERVIs
IFNIX0dMRVMyX1NQRUMsIFNIX0hMU0xfT1VUUFVULCAmcmVzb3VyY2VzKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpCi17Ci0gICAgU2hEZXN0
cnVjdChtRnJhZ21lbnRDb21waWxlcik7Ci0gICAgU2hEZXN0cnVjdChtVmVydGV4Q29tcGlsZXIp
OwotCi0gICAgbUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwotICAgIG1WZXJ0ZXhDb21waWxlciA9
IE5VTEw7Ci0KLSAgICBTaEZpbmFsaXplKCk7Ci19Ci0KLXZvaWQgU2hhZGVyOjpwYXJzZVZhcnlp
bmdzKCkKLXsKLSAgICBpZiAobUhsc2wpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICppbnB1
dCA9IHN0cnN0cihtSGxzbCwgIi8vIFZhcnlpbmdzIikgKyAxMjsKLQotICAgICAgICB3aGlsZSh0
cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAg
ICAgICAgICBjaGFyIHZhcnlpbmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVz
ID0gc3NjYW5mKGlucHV0LCAic3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlp
bmdOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hh
ciAqYXJyYXkgPSBzdHJzdHIodmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6
ZSA9IDE7Ci0KLSAgICAgICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBzaXplID0gYXRvaShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9
ICdcMCc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2so
VmFyeWluZyhwYXJzZVR5cGUodmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkg
IT0gTlVMTCkpOwotCi0gICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7
Ci0gICAgICAgIH0KLQotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdM
X1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBz
dHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1V
c2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVM
TDsKLSAgICAgICAgbVVzZXNQb2ludENvb3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lO
VF9DT09SRCIpICE9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBpbml0aWFsaXplL2NsZWFuIHVwIHBy
ZXZpb3VzIHN0YXRlCi12b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKLXsKLSAgICAvLyBzZXQgYnkg
Y29tcGlsZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0KLSAgICAvLyBzZXQg
YnkgcGFyc2VWYXJ5aW5ncwotICAgIG1WYXJ5aW5ncy5jbGVhcigpOwotCi0gICAgbVVzZXNGcmFn
Q29vcmQgPSBmYWxzZTsKLSAgICBtVXNlc0Zyb250RmFjaW5nID0gZmFsc2U7Ci0gICAgbVVzZXNQ
b2ludFNpemUgPSBmYWxzZTsKLSAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKLX0KLQotdm9p
ZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpCi17Ci0gICAgLy8gZW5zdXJl
IHdlIGRvbid0IHBhc3MgYSBOVUxMIHNvdXJjZSB0byB0aGUgY29tcGlsZXIKLSAgICBjaGFyICpz
b3VyY2UgPSAiXDAiOwotICAgIGlmIChtU291cmNlKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
bVNvdXJjZTsKLSAgICB9Ci0KLSAgICAvLyBlbnN1cmUgdGhlIGNvbXBpbGVyIGlzIGxvYWRlZAot
ICAgIGluaXRpYWxpemVDb21waWxlcigpOwotCi0gICAgaW50IGNvbXBpbGVPcHRpb25zID0gU0hf
T0JKRUNUX0NPREU7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aDsKLSAgICBpZiAocGVyZkFj
dGl2ZSgpKQotICAgIHsKLSAgICAgICAgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAg
ICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZSwgc3RybGVuKHNvdXJjZSkp
OwotICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7Ci0gICAgfQot
Ci0gICAgaW50IHJlc3VsdDsKLSAgICBpZiAoc291cmNlUGF0aC5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0
aW9ucyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNvdXJj
ZVN0cmluZ3NbMl0gPQotICAgICAgICB7Ci0gICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3RyKCks
Ci0gICAgICAgICAgICBzb3VyY2UKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBTaENv
bXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09V
UkNFX1BBVEgpOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQpCi0gICAgewotICAgICAgICBpbnQg
b2JqQ29kZUxlbiA9IDA7Ci0gICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NP
REVfTEVOR1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1IbHNsID0gbmV3IGNoYXJbb2JqQ29k
ZUxlbl07Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgbUhsc2wpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBpbnQgaW5mb0xvZ0xlbiA9IDA7Ci0gICAgICAgIFNo
R2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xvZ0xlbik7Ci0gICAg
ICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbaW5mb0xvZ0xlbl07Ci0gICAgICAgIFNoR2V0SW5mb0xv
Zyhjb21waWxlciwgbUluZm9Mb2cpOwotCi0gICAgICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cp
OwotICAgIH0KLX0KLQotR0xlbnVtIFNoYWRlcjo6cGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5n
ICZ0eXBlKQotewotICAgIGlmICh0eXBlID09ICJmbG9hdCIpCi0gICAgewotICAgICAgICByZXR1
cm4gR0xfRkxPQVQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MiIpCi0gICAg
ewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlw
ZSA9PSAiZmxvYXQzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAg
IH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX1ZFQzQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlID09ICJmbG9hdDN4MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFU
MzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LQotICAgIHJldHVybiBHTF9OT05FOwotfQotCi0vLyB0cnVlIGlmIHZhcnlpbmcgeCBoYXMgYSBo
aWdoZXIgcHJpb3JpdHkgaW4gcGFja2luZyB0aGFuIHkKLWJvb2wgU2hhZGVyOjpjb21wYXJlVmFy
eWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25zdCBWYXJ5aW5nICZ5KQotewotICAgIGlmKHgudHlw
ZSA9PSB5LnR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOwotICAg
IH0KLQotICAgIHN3aXRjaCAoeC50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDogcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3aXRj
aCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVy
biBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0
cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0g
ICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVy
biBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
OiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gZmFs
c2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotVmVydGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IFNoYWRlcihtYW5hZ2VyLCBoYW5kbGUpCi17Ci19Ci0K
LVZlcnRleFNoYWRlcjo6flZlcnRleFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBWZXJ0ZXhTaGFk
ZXI6OmdldFR5cGUoKQotewotICAgIHJldHVybiBHTF9WRVJURVhfU0hBREVSOwotfQotCi12b2lk
IFZlcnRleFNoYWRlcjo6dW5jb21waWxlKCkKLXsKLSAgICBTaGFkZXI6OnVuY29tcGlsZSgpOwot
Ci0gICAgLy8gc2V0IGJ5IFBhcnNlQXR0cmlidXRlcwotICAgIG1BdHRyaWJ1dGVzLmNsZWFyKCk7
Ci19OwotCi12b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxlKCk7
Ci0KLSAgICBjb21waWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7Ci0gICAgcGFyc2VBdHRyaWJ1
dGVzKCk7Ci0gICAgcGFyc2VWYXJ5aW5ncygpOwotfQotCi1pbnQgVmVydGV4U2hhZGVyOjpnZXRT
ZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQotewotICAgIGlm
ICghYXR0cmlidXRlTmFtZS5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgaW50IHNlbWFudGljSW5k
ZXggPSAwOwotICAgICAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUg
PSBtQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lID09
IGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNl
bWFudGljSW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNlbWFudGljSW5kZXgg
Kz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVz
KCkKLXsKLSAgICBjb25zdCBjaGFyICpobHNsID0gZ2V0SExTTCgpOwotICAgIGlmIChobHNsKQot
ICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIoaGxzbCwgIi8vIEF0dHJp
YnV0ZXMiKSArIDE0OwotCi0gICAgICAgIHdoaWxlKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNoYXIgYXR0cmlidXRlVHlwZVsyNTZdOwotICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVO
YW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3Rh
dGljICUyNTVzIF8lMjU1cyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAg
ICAgICAgICBpZiAobWF0Y2hlcyAhPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQXR0cmlidXRlcy5wdXNoX2Jh
Y2soQXR0cmlidXRlKHBhcnNlVHlwZShhdHRyaWJ1dGVUeXBlKSwgYXR0cmlidXRlTmFtZSkpOwot
Ci0gICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLUZyYWdtZW50U2hhZGVyOjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFn
ZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKLXsK
LX0KLQotRnJhZ21lbnRTaGFkZXI6On5GcmFnbWVudFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBG
cmFnbWVudFNoYWRlcjo6Z2V0VHlwZSgpCi17Ci0gICAgcmV0dXJuIEdMX0ZSQUdNRU5UX1NIQURF
UjsKLX0KLQotdm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxl
KCk7Ci0KLSAgICBjb21waWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBwYXJzZVZh
cnlpbmdzKCk7Ci0gICAgbVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOwotfQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDgzZWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2
NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXIuaDogRGVmaW5lcyB0aGUg
YWJzdHJhY3QgZ2w6OlNoYWRlciBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNs
YXNzZXMgVmVydGV4U2hhZGVyIGFuZCBGcmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFk
ZXIgb2JqZWN0cyBhbmQKLS8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMi4xMCBwYWdlIDI0IGFuZCBzZWN0aW9uCi0vLyAzLjggcGFnZSA4NC4KLQot
I2lmbmRlZiBMSUJHTEVTVjJfU0hBREVSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8K
LQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8
ZDNkeDkuaD4KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1zdHJ1Y3Qg
VmFyeWluZwotewotICAgIFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lLCBpbnQgc2l6ZSwgYm9vbCBhcnJheSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5h
bWUpLCBzaXplKHNpemUpLCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQg
c2l6ZTsgICAvLyBOdW1iZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQot
ICAgIGludCByZWc7ICAgIC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmlu
ZyBsaW5rCi0gICAgaW50IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWdu
ZWQgZHVyaW5nIGxpbmsKLX07Ci0KLXR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdM
aXN0OwotCi1jbGFzcyBTaGFkZXIKLXsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsK
LQotICBwdWJsaWM6Ci0gICAgU2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50
IGhhbmRsZSk7Ci0KLSAgICB2aXJ0dWFsIH5TaGFkZXIoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVt
IGdldFR5cGUoKSA9IDA7Ci0gICAgR0x1aW50IGdldEhhbmRsZSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBkZWxldGVTb3VyY2UoKTsKLSAgICB2b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25z
dCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKTsKLSAgICBpbnQgZ2V0SW5mb0xv
Z0xlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7Ci0gICAgaW50IGdldFNvdXJjZUxlbmd0aCgp
IGNvbnN0OwotICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICpidWZmZXIpOwotICAgIGludCBnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkg
Y29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGUo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwotICAgIGJvb2wgaXNDb21waWxl
ZCgpOwotICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKLQotICAgIHZvaWQgYWRkUmVmKCk7Ci0g
ICAgdm9pZCByZWxlYXNlKCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7
Ci0gICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwotICAgIHZvaWQgZmxhZ0Zv
ckRlbGV0aW9uKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlQ29tcGlsZXIoKTsKLQotICBw
cm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYXJzZVZhcnlpbmdzKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVU
b0hMU0wodm9pZCAqY29tcGlsZXIpOwotCi0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNv
dXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Ci0K
LSAgICBzdGF0aWMgR0xlbnVtIHBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSk7Ci0g
ICAgc3RhdGljIGJvb2wgY29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFy
eWluZyAmeSk7Ci0KLSAgICBWYXJ5aW5nTGlzdCBtVmFyeWluZ3M7Ci0KLSAgICBib29sIG1Vc2Vz
RnJhZ0Nvb3JkOwotICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1Vc2VzUG9p
bnRTaXplOwotICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwotCi0gICAgc3RhdGljIHZvaWQgKm1G
cmFnbWVudENvbXBpbGVyOwotICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29tcGlsZXI7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2hhZGVyKTsKLQotICAgIHZv
aWQgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7Ci0KLSAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsKLSAg
ICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dyYW0gb2JqZWN0
cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAg
ICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUgZGVsZXRlZCB3
aGVuIG5vIGxvbmdlciBpbiB1c2UKLQotICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAgY2hhciAqbUhs
c2w7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJj
ZU1hbmFnZXI7Ci19OwotCi1zdHJ1Y3QgQXR0cmlidXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0
eXBlKEdMX05PTkUpLCBuYW1lKCIiKQotICAgIHsKLSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xl
bnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFt
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFt
ZTsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsK
LQotY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgotewotICAgIGZyaWVuZCBjbGFz
cyBQcm9ncmFtQmluYXJ5OwotCi0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VN
YW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIH5WZXJ0ZXhTaGFkZXIoKTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGls
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJ
bmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4U2hhZGVyKTsKLQotICAgIHZvaWQgcGFy
c2VBdHRyaWJ1dGVzKCk7Ci0KLSAgICBBdHRyaWJ1dGVBcnJheSBtQXR0cmlidXRlczsKLX07Ci0K
LWNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgotewotICBwdWJsaWM6Ci0gICAg
RnJhZ21lbnRTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsK
LQotICAgIH5GcmFnbWVudFNoYWRlcigpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgp
OwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRTaGFkZXIpOwotfTsKLX0KLQotI2VuZGlmICAgLy8g
TElCR0xFU1YyX1NIQURFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZjI0
NTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
ZXh0dXJlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MDkgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gVGV4dHVyZS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpUZXh0dXJlIGNsYXNz
IGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCi0vLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFw
LiBJbXBsZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQgcmVsYXRlZAotLy8gZnVuY3Rpb25h
bGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCi0KLSNpbmNsdWRl
ICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSA8ZDNkeDl0ZXguaD4KLQotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpbnRyaW4uaD4KLQotI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOwotCi1zdGF0
aWMgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKLXsKLSAgICBpZiAoSXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBEM0RGTVRfSU5UWjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEdM
X0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICAgICAgICBmb3JtYXQgPT0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4g
RDNERk1UX0RYVDE7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQz
OwotICAgIH0KLSAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUNV9BTkdMRSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RG
TVRfQTMyQjMyRzMyUjMyRjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZM
T0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAg
ICAgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1
bWluYW5jZVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRf
TDg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9B
TFBIQSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLX0KLQot
c3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQot
ewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZN
VF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgot
ICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGlubGluZSBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQz
ZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAgIERXT1JE
IGQzZHVzYWdlID0gMDsKLQotICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCi0gICAgewot
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7Ci0gICAgfQotICAgIGVs
c2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZt
dCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQotICAg
IHsKLSAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOwotICAgIH0KLSAg
ICByZXR1cm4gZDNkdXNhZ2U7Ci19Ci0KLUltYWdlOjpJbWFnZSgpCi17Ci0gICAgbVdpZHRoID0g
MDsgCi0gICAgbUhlaWdodCA9IDA7Ci0gICAgbUZvcm1hdCA9IEdMX05PTkU7Ci0gICAgbVR5cGUg
PSBHTF9VTlNJR05FRF9CWVRFOwotCi0gICAgbVN1cmZhY2UgPSBOVUxMOwotCi0gICAgbURpcnR5
ID0gZmFsc2U7Ci0KLSAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVNTUVNOwotICAgIG1EM0RG
b3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLX0KLQotSW1hZ2U6On5JbWFnZSgpCi17Ci0gICAgaWYg
KG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci19
Ci0KLWJvb2wgSW1hZ2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYg
KG1XaWR0aCAhPSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAg
ICBtRm9ybWF0ICE9IGZvcm1hdCB8fAotICAgICAgICBtVHlwZSAhPSB0eXBlIHx8Ci0gICAgICAg
IGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1XaWR0aCA9IHdpZHRoOwotICAgICAgICBt
SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtVHlw
ZSA9IHR5cGU7Ci0gICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJl
IHVzZWQKLSAgICAgICAgbUQzREZvcm1hdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShtRm9y
bWF0LCBtVHlwZSk7Ci0KLSAgICAgICAgaWYgKG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKLXsKLSAgICBpZihtU3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2Ug
PSBOVUxMOwotICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07
Ci0gICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOwotICAgIEFT
U0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUgZm9yIGRlcHRoIHRleHR1cmVzCi0KLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAh
PSAwKQotICAgIHsKLSAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6
ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQg
PSBtSGVpZ2h0OwotICAgICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGgg
JSA0ICE9IDAgfHwgbUhlaWdodCAlIDQgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJv
b2wgaXNNdWx0NCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOwot
ICAgICAgICAgICAgd2hpbGUgKCFpc011bHQ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJlcXVlc3RXaWR0aCA8PD0gMTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0SGVpZ2h0IDw8
PSAxOwotICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsKLSAgICAgICAgICAgICAgICBp
ZiAocmVxdWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1
cHNhbXBsZUNvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXRE
ZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVs
VG9GZXRjaCArIDEsIE5VTEwsIGQzZEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsK
LQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBzdXJmYWNlIGZhaWxl
ZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gs
ICZuZXdTdXJmYWNlKTsKLSAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQot
ICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKLSAgICBtRGlydHkgPSBmYWxzZTsKLSAgICBtRDNE
UG9vbCA9IHBvb2xUb1VzZTsKLX0KLQotSFJFU1VMVCBJbWFnZTo6bG9jayhEM0RMT0NLRURfUkVD
VCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7
Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKLQotICAgIGlmICht
U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2Nr
ZWRSZWN0LCByZWN0LCAwKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQot
ICAgICAgICBtRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgSW1hZ2U6OnVubG9jaygpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLX0KLQotYm9vbCBJbWFnZTo6aXNSZW5kZXJh
YmxlRm9ybWF0KCkgY29uc3QKLXsgICAgCi0gICAgcmV0dXJuIElzVGV4dHVyZUZvcm1hdFJlbmRl
cmFibGUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1EM0RGT1JNQVQgSW1hZ2U6OmdldEQzREZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdl
IGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdAotICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVn
IGJ5IHRoZSBjYWxsZXIKLSAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7
Ci0KLSAgICByZXR1cm4gbUQzREZvcm1hdDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkltYWdl
OjpnZXRTdXJmYWNlKCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICByZXR1cm4gbVN1
cmZhY2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpzdXJmYWNlKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEQzRFhM
b2FkU3VyZmFjZUZyb21TdXJmYWNlKHN1cmZhY2UsIE5VTEwsIE5VTEwsIG1TdXJmYWNlLCBOVUxM
LCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApOwotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgp
OwotICAgIH0KLQotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHN1cmZhY2UtPkdldERl
c2MoJmRlc2MpOwotICAgIEFTU0VSVChkZXNjLlBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLQot
ICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAgICBtRDNEUG9vbCA9IGRlc2MuUG9vbDsKLX0KLQot
dm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2Us
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQotewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFj
ZSgpOwotCi0gICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3Vy
ZmFjZSkKLSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgcmVjdC5sZWZ0ID0geG9m
ZnNldDsKLSAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OwotICAgICAgICByZWN0LnJpZ2h0ID0g
eG9mZnNldCArIHdpZHRoOwotICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7
Ci0KLSAgICAgICAgaWYgKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkKLSAgICAgICAgewot
ICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShk
ZXN0U3VyZmFjZSwgTlVMTCwgJnJlY3QsIHNvdXJjZVN1cmZhY2UsIE5VTEwsICZyZWN0LCBEM0RY
X0ZJTFRFUl9CT1gsIDApOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFVwZGF0
ZVN1cmZhY2U6IHNvdXJjZSBtdXN0IGJlIFNZU1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQg
cG9vbHMgCi0gICAgICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3QudG9wfTsK
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uo
c291cmNlU3VyZmFjZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOwotICAgICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gU3Rv
cmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0
aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBp
bnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKLXsKLSAgICBSRUNUIGxvY2tSZWN0ID0KLSAgICB7Ci0gICAg
ICAgIHhvZmZzZXQsIHlvZmZzZXQsCi0gICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCAr
IGhlaWdodAotICAgIH07Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgSFJFU1VM
VCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7Ci0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdMc2l6ZWkgaW5wdXRQ
aXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
KTsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfQUxQSEE6Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNTU0UyKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbG9hZEFscGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkQWxw
aGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywg
Z2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQlVCeXRl
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgbG9hZEJHUkFEYXRhKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAg
ICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgICBsb2FkUkdCNTY1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgc3dpdGNo
IChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAg
ICAgbG9hZFJHQkE0NDQ0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJH
QkE1NTUxRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
RkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8v
IGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkn
cmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAg
ICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAg
bG9hZFJHQkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBz
d2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBh
cmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdh
eSBpbiBEM0QKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhh
SGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRS
R0JIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHVubG9jaygpOwotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0
ID0gTlVMTDsKLSAgICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsKLQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQot
ICAgICAgICBpbnQgeDsKLSAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAg
ICAgICAgZm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkg
JiAweEYpICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkKLSAgICAgICAg
ewotICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWRsX2VwaTY0KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKLSAgICAgICAgICAgIC8v
IEludGVybGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRlIHRvIHpl
cm8KLSAgICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwg
c291cmNlRGF0YSk7Ci0gICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggMTZiaXQgdG8gMzJi
aXQsIG1ha2UgdGhlIGxvd2VyIDE2Yml0IHRvIHplcm8KLSAgICAgICAgICAgIF9fbTEyOGkgbG8g
PSBfbW1fdW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOwotICAgICAgICAgICAg
X19tMTI4aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7Ci0K
LSAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigm
ZGVzdFt4XSksIGxvKTsKLSAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9j
YXN0PF9fbTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBIYW5kbGUgdGhlIHJlbWFpbmRlcgotICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KHNvdXJjZVt4XSkgPDwgMjQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZs
b2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQs
IGJvb2wgbmF0aXZlKSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2g7Ci0KLSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9y
bWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAg
ICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2ln
bmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAv
LyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXBy
ZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25z
dAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWdu
ZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwg
c291cmNlLCB3aWR0aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4
KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291
cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
MHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgo
cmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJn
YmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsg
MF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewot
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNo
b3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0g
MDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBpbnQgKmRlc3QgPSBOVUxMOwotICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBp
MzIoMHgwMGZmMDBmZik7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBp
bnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0g
ICAgICAgIGludCB4ID0gMDsKLQotICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25l
ZAotICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0
W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0g
KF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAoOyB4ICsgMyA8IHdpZHRoOyB4ICs9IDQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkdV9zaTEyOChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7Ci0gICAgICAgICAgICAv
LyBNYXNrIG91dCBnIGFuZCBhLCB3aGljaCBkb24ndCBjaGFuZ2UKLSAgICAgICAgICAgIF9fbTEy
OGkgZ2FDb21wb25lbnRzID0gX21tX2FuZG5vdF9zaTEyOChick1hc2ssIHNvdXJjZURhdGEpOwot
ICAgICAgICAgICAgLy8gTWFzayBvdXQgYiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBickNv
bXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4KHNvdXJjZURhdGEsIGJyTWFzayk7Ci0gICAgICAgICAg
ICAvLyBTd2FwIGIgYW5kIHIKLSAgICAgICAgICAgIF9fbTEyOGkgYnJTd2FwcGVkID0gX21tX3No
dWZmbGVoaV9lcGkxNihfbW1fc2h1ZmZsZWxvX2VwaTE2KGJyQ29tcG9uZW50cywgX01NX1NIVUZG
TEUoMiwgMywgMCwgMSkpLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSk7Ci0gICAgICAgICAgICBf
X20xMjhpIHJlc3VsdCA9IF9tbV9vcl9zaTEyOChnYUNvbXBvbmVudHMsIGJyU3dhcHBlZCk7Ci0g
ICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRl
c3RbeF0pLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUGVyZm9ybSBsZWZ0b3Zl
ciB3cml0ZXMKLSAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3Rb
eF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDAp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2Vb
eF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYp
IHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0g
TlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChy
Z2JhICYgMHgwMEYwKSA+PiA0KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdi
YSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAw
MCkgPj4gMTIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBG
KSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8
PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MV0gPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJn
YmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2Jh
ICYgMHgwMDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCQUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNv
dXJjZSwgd2lkdGgqNCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQp
IHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOwotCi0gICAgUkVDVCBsb2NrUmVjdCA9IHsKLSAgICAgICAgeG9mZnNldCwgeW9mZnNl
dCwKLSAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0Ci0gICAgfTsKLQot
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxv
Y2tlZCwgJmxvY2tSZWN0KTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJl
c3NlZFNpemUod2lkdGgsIGhlaWdodCwgbUZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNo
ID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUZvcm1hdCk7Ci0gICAgaW50IHJvd3Mg
PSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsg
KytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyAr
IGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNo
KSwgaW5wdXRQaXRjaCk7Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci19Ci0KLS8vIFRoaXMgaW1w
bGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFs
IHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTo6Y29w
eShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkK
LXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7Ci0gICAgRDNEU1VSRkFDRV9E
RVNDIGRlc2NyaXB0aW9uOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24p
OwotICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFp
blN1cmZhY2UoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRp
b24uRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOwot
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3Qg
Y3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdl
dFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsKLQotICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0
RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsK
LSAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwg
eW9mZnNldCArIGhlaWdodH07Ci0KLSAgICBpZiAoaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAg
ewotICAgICAgICByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShnZXRTdXJmYWNl
KCksIE5VTEwsICZkZXN0UmVjdCwgcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCwgJnNvdXJjZVJlY3Qs
IEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29weWluZyBzdXJmYWNlcyB1bmV4cGVj
dGVkbHkgZmFpbGVkLiIpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxv
Y2sgPSB7MH07Ci0gICAgICAgIHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZz
b3VyY2VMb2NrLCAmc291cmNlUmVjdCwgMCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ug
c3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExv
Y2sgPSB7MH07Ci0gICAgICAgIHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5n
bGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5V
bmxvY2tSZWN0KCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZGVzdExvY2sucEJpdHMgJiYgc291cmNlTG9jay5wQml0cykKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNv
dXJjZUxvY2sucEJpdHM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2ln
bmVkIGNoYXIqKWRlc3RMb2NrLnBCaXRzOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0
aW9uLkZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhS
OEc4Qjg6Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgICAg
ICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNl
W3ggKiA0ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4
TDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3gg
KiA0ICsgM107Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweEY4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRj
aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4Ogot
ICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAw
eDdDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwg
KHJlZCA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThM
ODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFd
ICYgMHg3QzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAo
cmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNlW3ggKiAyICsgMV0gPj4gNzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9
IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RM
b2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVubG9jaygpOwotICAgICAgICByZW5k
ZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0RGF0
YS0+UmVsZWFzZSgpOwotCi0gICAgbURpcnR5ID0gdHJ1ZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U6
OlRleHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKQotICAgIDogbUQzRFVzYWdlKHVzYWdlKSwKLSAg
ICAgIG1EM0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwKLSAgICAg
IG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNlcmlhbCgpKQotewotfQotCi1UZXh0dXJlU3Rv
cmFnZTo6flRleHR1cmVTdG9yYWdlKCkKLXsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNS
ZW5kZXJUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7Ci19Ci0KLWJvb2wg
VGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9v
bCA9PSBEM0RQT09MX01BTkFHRUQpOwotfQotCi1EM0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQ
b29sKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFBvb2w7Ci19Ci0KLURXT1JEIFRleHR1cmVT
dG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM0RVc2FnZTsKLX0KLQot
dW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleHR1cmVTZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3Rv
cmFnZTo6aXNzdWVUZXh0dXJlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRUZXh0dXJl
U2VyaWFsKys7Ci19Ci0KLVRleHR1cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2Jq
ZWN0KGlkKQotewotICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7Ci0g
ICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKLSAgICBtV3JhcFMgPSBHTF9SRVBFQVQ7Ci0gICAg
bVdyYXBUID0gR0xfUkVQRUFUOwotICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgIG1V
c2FnZSA9IEdMX05PTkU7Ci0gICAgCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLQotICAgIG1J
bW11dGFibGUgPSBmYWxzZTsKLX0KLQotVGV4dHVyZTo6flRleHR1cmUoKQotewotfQotCi0vLyBS
ZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVt
IHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17
Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAg
ICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1NaW5GaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAg
ICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVy
IHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldE1h
Z0ZpbHRlcihHTGVudW0gZmlsdGVyKQotewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU1hZ0ZpbHRlciAhPSBmaWx0ZXIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbU1hZ0ZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgICAgICAgICBtRGlydHlQ
YXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAo
dmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFw
KQotewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAg
ICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFU
OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbVdyYXBTID0gd3JhcDsKLSAgICAgICAgICAgICAgICBtRGly
dHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0
ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3
cmFwKQotewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoK
LSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQ
RUFUOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVdyYXBUICE9IHdyYXApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbVdyYXBUID0gd3JhcDsKLSAgICAgICAgICAgICAgICBt
RGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRVc2FnZShHTGVu
dW0gdXNhZ2UpCi17Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05P
TkU6Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAg
IG1Vc2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRNaW5G
aWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtTWluRmlsdGVyOwotfQotCi1HTGVudW0gVGV4
dHVyZTo6Z2V0TWFnRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1hZ0ZpbHRlcjsKLX0K
LQotR0xlbnVtIFRleHR1cmU6OmdldFdyYXBTKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdyYXBT
OwotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFQoKSBjb25zdAotewotICAgIHJldHVybiBt
V3JhcFQ7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1Vc2FnZTsKLX0KLQotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmIChwaXhl
bHMgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+
Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFn
ZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwotICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQot
ICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1h
Z2VzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJl
OjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9
IE5VTEwpCi0gICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0
ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8gZW5zdXJl
IHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKGZh
bHNlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAg
dXBkYXRlVGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7Ci19Ci0KLWJv
b2wgVGV4dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURp
cnR5UGFyYW1ldGVyczsKLX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1EaXJ0eUltYWdlczsKLX0KLQotdm9pZCBUZXh0dXJlOjpyZXNldERp
cnR5KCkKLXsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7Ci0gICAgbURpcnR5SW1hZ2Vz
ID0gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKCkK
LXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAg
IHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIDogMDsKLX0KLQot
dW5zaWduZWQgaW50IFRleHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KQotewotICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsKLSAg
ICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQp
IDogMDsKLX0KLQotYm9vbCBUZXh0dXJlOjppc0ltbXV0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbW11dGFibGU7Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdAotewotICAgIGlmICgoaXNQb3cyKHdpZHRo
KSAmJiBpc1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRl
eHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOyAgIC8vIE1heGltdW0gbnVtYmVyIG9m
IGxldmVscwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBPcGVuR0wgRVMgMi4w
IHdpdGhvdXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBz
LgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9u
TGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMo
c2l6ZSwgc2l6ZSk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291
bnQoKSA6IDA7Ci19Ci0KLUJsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQotewotICAgIENvbnRl
eHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQtPmdldEJsaXR0
ZXIoKTsKLX0KLQotYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQp
Ci17Ci0gICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1
bHQ7Ci0KLSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0LCBOVUxMLCBOVUxMLCBzb3Vy
Y2UsIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXRE
aXNwbGF5KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5
LT5nZXREZXZpY2UoKTsKLQotICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBO
VUxMLCBEM0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJm
YWNlVGV4dHVyZSkgOiBUZXh0dXJlU3RvcmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVu
ZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0g
ICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4
dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtUmVu
ZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0g
ICAgbVRleHR1cmUgPSBOVUxMOwotICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90
IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJl
Ci0gICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUg
Y3JlYXRpb24KLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAgewotICAgICAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBn
ZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OwotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKCkKLXsKLSAgICBpZiAo
bVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLX0K
LQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVs
ZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0
b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKLXsKLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZzdXJm
YWNlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3VyZmFjZTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFn
ZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQot
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
ZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRTZXJpYWw7Ci19
Ci0KLVRleHR1cmUyRDo6VGV4dHVyZTJEKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAg
IG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgbUNvbG9yYnVm
ZmVyUHJveHkgPSBOVUxMOwotICAgIG1Qcm94eVJlZnMgPSAwOwotfQotCi1UZXh0dXJlMkQ6On5U
ZXh0dXJlMkQoKQotewotICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLQotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgCi0gICAgaWYgKG1T
dXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsK
LSAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIH0KLX0KLQotLy8gV2UgbmVlZCB0byBtYWlu
dGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0v
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8g
dXNlIGEgcG9pbnRlciAKLS8vIHRvIGEgcmVuZGVyYnVmZmVyIHByb3h5IHdoaWNoIGhhcyBiZWVu
IGRlbGV0ZWQuCi12b2lkIFRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKLXsKLSAgICBtUHJveHlSZWZzKys7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBpZiAobVByb3h5UmVm
cyA+IDApCi0gICAgICAgIG1Qcm94eVJlZnMtLTsKLQotICAgIGlmIChtUHJveHlSZWZzID09IDAp
Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLX0KLQotR0xlbnVtIFRleHR1cmUy
RDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKLX0KLQot
R0xzaXplaSBUZXh0dXJlMkQ6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlm
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0
dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIDA7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNv
bnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFs
Rm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVs
XS5nZXRGb3JtYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBHTF9OT05FOwotfQotCi1E
M0RGT1JNQVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0g
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVkZWZp
bmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSB0eXBlKQotewotICAgIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAg
Ym9vbCByZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZp
bmVkKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJy
YXlbaV0ubWFya0RpcnR5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7Ci0gICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRl
ZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwotCi0gICAgVGV4
dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZl
bF0pOwotfQotCi12b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSkKLXsKLSAgICByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIEdMZW51bSBmb3JtYXQ7Ci0K
LSAgICBzd2l0Y2goc3VyZmFjZS0+Z2V0Rm9ybWF0KCkpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6Ci0gICAgICAgIGZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIGZvcm1hdCA9IEdMX1JHQjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtSW1hZ2VBcnJheVswXS5yZWRlZmluZShmb3Jt
YXQsIHN1cmZhY2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCBHTF9VTlNJR05F
RF9CWVRFLCB0cnVlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFn
ZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKHN1cmZhY2UtPmdldE9mZnNjcmVlblRleHR1cmUoKSk7
Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAg
ICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKHRoaXMpOwotfQotCi12b2lkIFRleHR1cmUyRDo6
cmVsZWFzZVRleEltYWdlKCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBt
U3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJlKE5VTEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7
Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgICAg
IH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5y
ZWRlZmluZShHTF9SR0JBLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIFRl
eHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5
W2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKLXsKLSAgICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxM
KTsKLQotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxl
dmVsKTsKLQotICAgICAgICBpZiAoZGVzdExldmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBJ
bWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbbGV2ZWxdOwotICAgICAgICAgICAgaW1hZ2UtPnVw
ZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
LQotICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpbWFnZS0+
bWFya0NsZWFuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdWJJ
bWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6
c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpCi0gICAgewotICAg
ICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFy
cmF5W2xldmVsXSkpCi0gICAgewotICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb3B5
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgp
OwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAKLSAgICBpZiAoIW1JbWFn
ZUFycmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdl
dCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLm1hcmtDbGVhbigp
OwotCi0gICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2
ZWxDb3VudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAg
ICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdo
dCA9IHggKyB3aWR0aDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxl
dmVsKGxldmVsKTsKLQotICAgICAgICAgICAgaWYgKGRlc3QpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwg
Zm9ybWF0LCAwLCAwLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXQtPlJlbGVh
c2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17
Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgp
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFy
Z2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZl
bF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29t
cGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSh4b2Zmc2V0
LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBt
RGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
IW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZl
bENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAg
ICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0
ID0geCArIHdpZHRoOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OwotICAgICAgICAg
ICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OwotCi0KLSAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7
Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5
WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAg
ICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2Uo
R0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGlu
dGVybmFsZm9ybWF0KTsKLSAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5h
bGZvcm1hdCk7Ci0gICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlw
ZShmb3JtYXQsIHR5cGUpOwotICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQz
ZGZtdCwgbVVzYWdlLCBmYWxzZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2Us
IHdpZHRoLCBoZWlnaHQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCi0gICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHRydWUp
OwotICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOwotICAgICAgICBoZWln
aHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gMSk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2
ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBs
ZXZlbCsrKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKEdMX05P
TkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgIH0KLQotICAgIGlmIChtVGV4
U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxl
dmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0gICAgICAgICAgICBtSW1h
Z2VBcnJheVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJE
Ojppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFn
ZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVsw
XS5nZXRIZWlnaHQoKTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgbWlwbWFwcGluZyA9
IGZhbHNlOwotCi0gICAgc3dpdGNoIChtTWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICBtaXBtYXBwaW5nID0gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
OgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05F
QVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6
Ci0gICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgw
KSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0hBTEZfRkxPQVRf
T0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Qp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBib29sIG5wb3RTdXBwb3J0ID0gZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKTsKLQotICAgIGlmICghbnBvdFN1cHBvcnQpCi0gICAgewotICAgICAgICBpZiAo
KGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKLSAg
ICAgICAgICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWln
aHQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKG1pcG1hcHBpbmcpCi0gICAgewotICAgICAgICBpZiAoIW5wb3RTdXBw
b3J0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93
MihoZWlnaHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNNaXBtYXBDb21wbGV0
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1p
cG1hcCkgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFn
ZSA4MS4KLWJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBp
ZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6
ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAod2lkdGgg
PD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9y
IChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3Jt
YXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlb
MF0uZ2V0VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3Rk
OjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldEhl
aWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAot
ewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKLX0K
LQotYm9vbCBUZXh0dXJlMkQ6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElzRGVwdGhUZXh0dXJlKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7Ci19Ci0KLUlEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBO
VUxMOwotfQotCi0vLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZy
b20gdGhlIHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCi17
Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgR0xz
aXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKLSAgICBHTGludCBsZXZl
bHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10
ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgRFdPUkQgZDNkdXNhZ2UgPSBH
ZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKLQotICAgIGRlbGV0ZSBtVGV4
U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywg
ZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0gICAgaWYgKG1UZXhTdG9y
YWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50
KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwr
KykKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBt
VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVU
ZXh0dXJlKCkKLXsKLSAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIElt
YWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07Ci0KLSAgICAgICAgaWYgKGltYWdlLT5p
c0RpcnR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAs
IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVp
Z2h0KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29udmVydFRv
UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZTJEICpuZXdUZXhTdG9yYWdlID0g
TlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdl
QXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGgg
PSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1J
bWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlv
bkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFn
ZUFycmF5WzBdLmdldEQzREZvcm1hdCgpOwotICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRl
eHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUp
OwotCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMs
IGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgIGlmIChtVGV4U3Rv
cmFnZSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0g
bVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLSAgICAgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQot
ICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRl
eFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAgICB7ICAgCi0gICAgICAgICAg
ICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgaWYgKHNv
dXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRl
c3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBt
VGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkK
LXsKLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0g
ICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpKSB8fCAh
aXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0
byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGlu
dCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJh
eVswXS5nZXRIZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7
IGkrKykKLSAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJyYXlbMF0uZ2V0
Rm9ybWF0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5
WzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobVRl
eFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNl
TGV2ZWwoaSAtIDEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRl
eFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9
IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
ZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBt
SW1hZ2VBcnJheVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVM
TCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQoRDNEWExv
YWRTdXJmYWNlRnJvbVN1cmZhY2UobUltYWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBO
VUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBEM0RYX0ZJ
TFRFUl9CT1gsIDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIiBmYWls
ZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0KQotewotICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5V
TEwpOwotICAgIH0KLQotICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBS
ZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1Db2xvcmJ1ZmZlclByb3h5OwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZh
Y2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJl
Y3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQot
ewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBlbnN1cmUg
dGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1
ZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVw
ZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0
ZXh0dXJlCi0gICAgaWYgKGlzRGVwdGgoMCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Ci19Ci0K
LS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6
Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgLy8g
ZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKCFpc0RlcHRo
KDApKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBtVGV4
U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVy
ZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewotICAgIGlmICghbVRleFN0b3Jh
Z2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQot
ICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVy
ZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdl
LCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKLXsKLSAg
ICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRo
aXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAgLy8gd2Ug
aGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KLSAg
ICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1
YmVUZXh0dXJlKHNpemUsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZt
VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6On5U
ZXh0dXJlU3RvcmFnZUN1YmVNYXAoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1
cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVN
YXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZXMyZHg6
OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWwsICZzdXJmYWNlKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsK
LX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEJh
c2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXVuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0KSBjb25zdAotewotICAgIHJldHVybiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgKyBU
ZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KHRhcmdldCk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjpU
ZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAgICBtVGV4U3RvcmFn
ZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAg
ICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSA9IDA7
Ci0gICAgfQotfQotCi1UZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKLXsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tp
XSA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKLX0KLQotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVy
ZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRl
eHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgCi0vLyBwcm94
eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRv
IHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBh
dHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uCi12b2lkIFRl
eHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNl
UHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7
Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQ
cm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDAp
Ci0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAg
IHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFw
OjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZl
bCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1J
bWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0gICAgZWxz
ZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRl
cm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVy
biBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci19Ci0KLUQzREZPUk1BVCBUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0RDNERm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewot
ICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9y
bWF0KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047Ci19Ci0KLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgwLCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7
Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFn
ZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAg
ICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVn
WShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cykKLXsKLSAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNl
dEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UoZmFj
ZUluZGV4KGZhY2UpLCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9C
WVRFKTsKLQotICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAg
IEFTU0VSVChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwot
Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKmRlc3RMZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAgICAgIEFTU0VS
VChkZXN0TGV2ZWwgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdOwotICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgICAgICAgICAgZGVzdExldmVsLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFn
ZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkp
Ci0gICAgewotICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQot
ewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2Zh
Y2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNl
SW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwot
ICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IG1JbWFn
ZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0KLSAgICBib29sIG1pcG1hcHBpbmc7Ci0KLSAgICBz
d2l0Y2ggKG1NaW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAg
Y2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElO
RUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFw
cGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgoZ2V0
SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9G
TE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwK
LSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKCkpKQotICAgIHsKLSAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xf
TkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xf
TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRD
b250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYg
KGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1Q
X1RPX0VER0UgfHwgbWlwbWFwcGluZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtaXBtYXBwaW5nKQotICAgIHsKLSAg
ICAgICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYg
KCFpc01pcG1hcEN1YmVDb21wbGV0ZSgpKSAgIC8vIEFsc28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBs
ZXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRlc3RzIGZvciBjdWJlIHRleHR1cmUg
Y29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4K
LWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAo
bUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLmdl
dEhlaWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7
IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1b
MF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIHx8Ci0gICAgICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEhlaWdodCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRGb3Jt
YXQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSB8fAotICAgICAgICAgICAgbUlt
YWdlQXJyYXlbZmFjZV1bMF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFw
Q3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHNpemUg
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotCi0gICAgaW50IHEgPSBsb2cyKHNpemUp
OwotCi0gICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAg
ICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUlt
YWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRU
eXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdl
dFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKLX0KLQotSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVy
ZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNv
dXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUK
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgc2l6
ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3Jl
YXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5
WzBdWzBdLmdldEQzREZvcm1hdCgpOwotICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVz
YWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0g
ICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10
LCBkM2R1c2FnZSwgc2l6ZSk7Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQot
ICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3Ig
KGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlLCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNl
dE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlVGV4dHVyZSgpCi17Ci0gICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNl
KyspCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwotCi0g
ICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwg
aW1hZ2UtPmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBU
ZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1J
bWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkg
c2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgICAgIEdMaW50IGxldmVs
cyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0g
bUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgICAgIERXT1JEIGQzZHVzYWdl
ID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSk7Ci0KLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1
YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKLQotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9IGxl
dmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBp
KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFu
YWdlZCgpKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkg
c291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
ZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3Rv
cmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRl
ZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7
Ci0KLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFn
ZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVDdWJl
TWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCi17Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09
IDEpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKLSAgICBNRVRBX0FTU0VSVChHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggPT0gMyk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
IC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwotICAgIE1FVEFfQVNTRVJU
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCA9PSA1KTsKLQotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBm
YWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSB0eXBlKQotewotICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlb
ZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2Up
OwotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdl
OwotICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0
KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVk
IHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9
IGZhY2VJbmRleCh0YXJnZXQpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIGlmICghbUlt
YWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewot
ICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1U
ZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdl
QXJyYXlbZmFjZWluZGV4XVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgQVNTRVJUKHdp
ZHRoID09IGhlaWdodCk7Ci0KLSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVs
Q291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAg
ICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQg
PSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7Ci0KLSAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwg
bGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3Jt
YXQsIDAsIDAsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQot
ewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZl
bF0uZ2V0V2lkdGgoKTsKLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPiBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQg
PSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0g
ICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4i
KTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgodGFyZ2V0KTsKLQotICAgIGlmICgh
bUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFt
VGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwot
Ci0gICAgICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAg
ICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWln
aHQ7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2Ut
PmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVz
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVu
ZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSwgeG9m
ZnNldCwgeW9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQotewotICAgIEdMZW51bSBmb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUg
PSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQg
PSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBEV09SRCBkM2R1
c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwotCi0gICAgZGVs
ZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwotICAgIG1JbW11dGFibGUgPSB0
cnVlOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykK
LSAgICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9y
bWF0LCBzaXplLCBzaXplLCB0eXBlLCB0cnVlKTsKLSAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1h
eCgxLCBzaXplID4+IDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2ZWwg
PSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmlu
ZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBp
bnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBm
YWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsKLSAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uo
c3VyZmFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCi17Ci0gICAgaWYgKCFpc0N1YmVDb21wbGV0
ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJl
KCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0
aCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAx
IHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBt
YXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVswXS5n
ZXRXaWR0aCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5n
ZXRGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUlt
YWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAx
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0
VHlwZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGktMSk7Ci0gICAgICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBT
dXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVy
LCBsb3dlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVy
ICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvd2VyICE9
IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtm
XVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtp
XS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNl
KG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlb
Zl1baSAtIDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8g
bG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1SZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFw
OjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIUlzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7Ci0KLSAgICBpZiAobUZhY2VQcm94aWVz
W2ZhY2VdID09IE5VTEwpCi0gICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcg
UmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0
YXJnZXQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwotfQotCi0v
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1h
cDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcg
dGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmUoKTsK
LSAgICAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwg
MCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkKLXsKLSAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQg
JiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdl
dCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3Jl
YXRlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdl
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RleHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTNhMTYyLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1
cmUuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25j
cmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIElt
cGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5
LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJH
TEVTVjJfVEVYVFVSRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
LSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRl
ICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZWds
Ci17Ci1jbGFzcyBTdXJmYWNlOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci1j
bGFzcyBGcmFtZWJ1ZmZlcjsKLQotZW51bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11
bXMgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBHTCBj
YXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQgYmUg
cXVlcmllZCBmcm9tIHRoZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
U0laRSA9IDE2Mzg0LAotICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkUgPSAxNjM4NCwKLQotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1
ICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17Ci0g
IHB1YmxpYzoKLSAgICBJbWFnZSgpOwotICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmlu
ZShHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5
cGUsIGJvb2wgZm9yY2VSZWxlYXNlKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0
cnVlO30KLSAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBib29s
IGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQo
KSBjb25zdDsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9
Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7cmV0dXJuIG1IZWlnaHQ7fQotICAgIEdM
ZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQotICAgIEdMZW51bSBnZXRU
eXBlKCkgY29uc3Qge3JldHVybiBtVHlwZTt9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3Jl
dHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJm
YWNlKCk7Ci0KLSAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKTsKLSAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2
b2lkIGxvYWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRGF0
YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxm
RmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVt
aW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlKTsKLQotICAgIHZvaWQgY3JlYXRlU3VyZmFj
ZSgpOwotCi0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25z
dCBSRUNUICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwotCi0gICAgR0xzaXplaSBtV2lkdGg7
Ci0gICAgR0xzaXplaSBtSGVpZ2h0OwotICAgIEdMZW51bSBtRm9ybWF0OwotICAgIEdMZW51bSBt
VHlwZTsKLQotICAgIGJvb2wgbURpcnR5OwotCi0gICAgRDNEUE9PTCBtRDNEUG9vbDsgICAvLyBj
YW4gb25seSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFHRUQgc2luY2UgaXQg
bmVlZHMgdG8gYmUgbG9ja2FibGUuCi0gICAgRDNERk9STUFUIG1EM0RGb3JtYXQ7Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZhY2U7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZQot
ewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpOwot
Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UoKTsKLQotICAgIGJvb2wgaXNSZW5kZXJUYXJn
ZXQoKSBjb25zdDsKLSAgICBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIEQzRFBPT0wgZ2V0
UG9vbCgpIGNvbnN0OwotICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQg
aW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QgPSAwOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKLQotICAg
IGNvbnN0IERXT1JEIG1EM0RVc2FnZTsKLSAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwotCi0g
ICAgY29uc3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25l
ZCBpbnQgaXNzdWVUZXh0dXJlU2VyaWFsKCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1D
dXJyZW50VGV4dHVyZVNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291
bnRPYmplY3QKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsK
LQotICAgIHZpcnR1YWwgflRleHR1cmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUYXJnZXQoKSBjb25zdCA9IDA7Ci0KLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVu
dW0gZmlsdGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBi
b29sIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFw
KTsKLSAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7Ci0KLSAgICBHTGVudW0gZ2V0TWlu
RmlsdGVyKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwotICAgIEdM
ZW51bSBnZXRXcmFwUygpIGNvbnN0OwotICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwotICAg
IEdMZW51bSBnZXRVc2FnZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3QgPSAwOwotCi0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0
dXJlKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKSA9IDA7Ci0KLSAgICBi
b29sIGhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0OwotICAgIGJvb2wgaGFzRGlydHlJbWFnZXMo
KSBjb25zdDsKLSAgICB2b2lkIHJlc2V0RGlydHkoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4
dHVyZVNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xl
bnVtIHRhcmdldCk7Ci0KLSAgICBib29sIGlzSW1tdXRhYmxlKCkgY29uc3Q7Ci0KLSAgICBzdGF0
aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWlu
dD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4g
VGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0
aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFn
ZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdl
KTsKLSAgICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0g
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1h
Z2UgKmltYWdlKTsKLQotICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KSBjb25zdDsKLSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNp
emUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAgIGludCBsZXZl
bENvdW50KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgQmxpdCAqZ2V0QmxpdHRlcigpOwotICAgIHN0
YXRpYyBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURp
cmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7Ci0KLSAgICBHTGVudW0g
bU1pbkZpbHRlcjsKLSAgICBHTGVudW0gbU1hZ0ZpbHRlcjsKLSAgICBHTGVudW0gbVdyYXBTOwot
ICAgIEdMZW51bSBtV3JhcFQ7Ci0gICAgYm9vbCBtRGlydHlQYXJhbWV0ZXJzOwotICAgIEdMZW51
bSBtVXNhZ2U7Ci0KLSAgICBib29sIG1EaXJ0eUltYWdlczsKLQotICAgIGJvb2wgbUltbXV0YWJs
ZTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsK
LQotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpID0gMDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVj
dDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBs
ZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQot
ICAgIElEaXJlY3QzRFRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bVJlbmRlclRhcmdldFNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0
dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQot
ICAgIH5UZXh0dXJlMkQoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIEdM
c2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0
KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQg
bGV2ZWwpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNv
bnN0OwotICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBib29s
IGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAg
dm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQg
Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFn
ZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFj
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJl
bmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyRCk7Ci0KLSAgICB2aXJ0dWFsIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgYm9v
bCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSk7Ci0gICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAg
ICBJbWFnZSBtSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwot
Ci0gICAgVGV4dHVyZVN0b3JhZ2UyRCAqbVRleFN0b3JhZ2U7Ci0gICAgZWdsOjpTdXJmYWNlICpt
U3VyZmFjZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlz
IGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwg
YXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRp
bmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBh
IGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIg
aGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBz
ZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBu
b3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIg
Km1Db2xvcmJ1ZmZlclByb3h5OwotICAgIHVuc2lnbmVkIGludCBtUHJveHlSZWZzOwotfTsKLQot
Y2xhc3MgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0g
IHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFU
IGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlQ3ViZU1hcCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJm
YWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOwot
Ci0gICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZUN1
YmVNYXAoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBh
ZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdl
dFRhcmdldCgpIGNvbnN0OwotICAgIAotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3Jt
YXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIGJvb2wgaXNDb21wcmVz
c2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1h
Z2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1ko
R0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
OwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAg
dm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVt
IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2
b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhl
bHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVm
ZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxl
ckNvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7
Ci0KLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwot
Ci0gIHByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSB0YXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVDdWJlTWFwKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRC
YXNlVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJ
bWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNlSW5kZXgs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgs
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIHR5cGUpOwotCi0gICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKLQotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAqbVRl
eFN0b3JhZ2U7Ci0KLSAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBp
cyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2Us
IGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5k
aW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUg
YSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVy
IGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUg
c2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwg
bm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVy
ICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWduZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsK
LX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hfClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzBmNDc1Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4
NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBWZXJ0ZXhEYXRhTWFuYWdlci5oOiBE
ZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBC
dWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhE
YXRhTWFuYWdlci5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLW5hbWVzcGFjZQotewotICAgIGVudW0g
eyBJTklUSUFMX1NUUkVBTV9CVUZGRVJfU0laRSA9IDEwMjQqMTAyNCB9OwotICAgIC8vIFRoaXMg
aGFzIHRvIGJlIGF0IGxlYXN0IDRrIG9yIGVsc2UgaXQgZmFpbHMgb24gQVRJIGNhcmRzLgotICAg
IGVudW0geyBDT05TVEFOVF9WRVJURVhfQlVGRkVSX1NJWkUgPSA0MDk2IH07Ci19Ci0KLW5hbWVz
cGFjZSBnbAotewotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAx
OwotCi1pbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSwgaW50IHNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IGF0dHJpYnV0ZS5zdHJpZGUoKTsKLSAg
ICByZXR1cm4gKHNpemUgLSBhdHRyaWJ1dGUubU9mZnNldCAlIHN0cmlkZSArIChzdHJpZGUgLSBh
dHRyaWJ1dGUudHlwZVNpemUoKSkpIC8gc3RyaWRlOwotfQotCi1WZXJ0ZXhEYXRhTWFuYWdlcjo6
VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlKSA6IG1Db250ZXh0KGNvbnRleHQpLCBtRGV2aWNlKGRldmljZSkKLXsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbURp
cnR5Q3VycmVudFZhbHVlW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlcltp
XSA9IE5VTEw7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gMDsKLSAgICB9Ci0K
LSAgICBjb25zdCBEM0RDQVBTOSAmY2FwcyA9IGNvbnRleHQtPmdldERldmljZUNhcHMoKTsKLSAg
ICBjaGVja1ZlcnRleENhcHMoY2Fwcy5EZWNsVHlwZXMpOwotCi0gICAgbVN0cmVhbWluZ0J1ZmZl
ciA9IG5ldyBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9TVFJFQU1fQlVG
RkVSX1NJWkUpOwotCi0gICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAg
RVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUgdGhlIHN0cmVhbWluZyB2ZXJ0ZXggYnVmZmVyLiIpOwot
ICAgIH0KLX0KLQotVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCi17Ci0g
ICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1DdXJyZW50VmFs
dWVCdWZmZXJbaV07Ci0gICAgfQotfQotCi1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
d3JpdGVBdHRyaWJ1dGVEYXRhKEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwg
R0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJ1dGUubUJv
dW5kQnVmZmVyLmdldCgpOwotCi0gICAgaW50IGlucHV0U3RyaWRlID0gYXR0cmlidXRlLnN0cmlk
ZSgpOwotICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYnV0ZS50eXBlU2l6ZSgpOwotICAgIGNv
bnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnV0
ZSk7Ci0gICAgc3RkOjpzaXplX3Qgc3RyZWFtT2Zmc2V0ID0gMDsKLQotICAgIHZvaWQgKm91dHB1
dCA9IE5VTEw7Ci0gICAgCi0gICAgaWYgKHZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG91
dHB1dCA9IHZlcnRleEJ1ZmZlci0+bWFwKGF0dHJpYnV0ZSwgc3BhY2VSZXF1aXJlZChhdHRyaWJ1
dGUsIGNvdW50LCBpbnN0YW5jZXMpLCAmc3RyZWFtT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBpZiAo
b3V0cHV0ID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4
IGJ1ZmZlci4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIg
KmlucHV0ID0gTlVMTDsKLQotICAgIGlmIChidWZmZXIpCi0gICAgewotICAgICAgICBpbnQgb2Zm
c2V0ID0gYXR0cmlidXRlLm1PZmZzZXQ7Ci0KLSAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oYnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0OwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWJ1dGUu
bVBvaW50ZXIpOwotICAgIH0KLQotICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWJ1dGUu
bURpdmlzb3IgPT0gMCkKLSAgICB7Ci0gICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3Rh
cnQ7Ci0gICAgfQotCi0gICAgaWYgKGNvbnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9
PSBlbGVtZW50U2l6ZSkKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3Vu
dCAqIGlucHV0U3RyaWRlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29udmVy
dGVyLmNvbnZlcnRBcnJheShpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwotICAg
IH0KLQotICAgIHZlcnRleEJ1ZmZlci0+dW5tYXAoKTsKLQotICAgIHJldHVybiBzdHJlYW1PZmZz
ZXQ7Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoR0xp
bnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQs
IEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAgIGNvbnN0IFZl
cnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0
ZXMoKTsKLSAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
KCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dy
YW1CaW5hcnkoKTsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAg
ICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+
Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwotICAgIH0KLQotICAgIC8v
IERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5k
IGludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0
dHJpYnV0ZXMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQotICAgIHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0u
bUFycmF5RW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyICpidWZmZXIgPSBh
dHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1
ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKSA6IE5VTEw7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+c2l6ZSgpID09IDApCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1l
bnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNCdWZmZXItPmFkZFJlcXVpcmVkU3BhY2Uoc3BhY2VSZXF1aXJlZChhdHRyaWJz
W2ldLCB0b3RhbENvdW50LCAwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRlKGF0dHJpYnNbaV0pID09IC0x
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGF0aWMg
YnVmZmVyIGRvZXNuJ3QgaGF2ZSBtYXRjaGluZyBhdHRyaWJ1dGVzLCBzbyBmYWxsIGJhY2sgdG8g
dXNpbmcgdGhlIHN0cmVhbWluZyBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRo
ZSBzcGFjZSBvZiBhbGwgcHJldmlvdXMgYXR0cmlidXRlcyBiZWxvbmdpbmcgdG8gdGhlIGludmFs
aWRhdGVkIHN0YXRpYyBidWZmZXIgdG8gdGhlIHN0cmVhbWluZyBidWZmZXIKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgcHJldmlvdXMgPSAwOyBwcmV2aW91cyA8IGk7IHByZXZpb3VzKysp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFu
c2xhdGVkW3ByZXZpb3VzXS5hY3RpdmUgJiYgYXR0cmlic1twcmV2aW91c10ubUFycmF5RW5hYmxl
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCdWZmZXIgKnByZXZpb3VzQnVmZmVyID0gYXR0cmlic1twcmV2aW91c10ubUJvdW5kQnVmZmVy
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAq
cHJldmlvdXNTdGF0aWNCdWZmZXIgPSBwcmV2aW91c0J1ZmZlciA/IHByZXZpb3VzQnVmZmVyLT5n
ZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhdGljQnVmZmVyID09IHByZXZpb3VzU3RhdGljQnVmZmVyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0
cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNbcHJl
dmlvdXNdLCBjb3VudCwgaW5zdGFuY2VzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgbVN0cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFj
ZVJlcXVpcmVkKGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0YW5jZXMpKTsKLQotICAgICAgICAgICAg
ICAgICAgICBidWZmZXItPmludmFsaWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAgICAgICAgICAgICAg
fSAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtU3RyZWFtaW5nQnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHNwYWNlUmVx
dWlyZWQoYXR0cmlic1tpXSwgY291bnQsIGluc3RhbmNlcykpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVzZXJ2ZSB0aGUgcmVxdWlyZWQgc3BhY2UgcGVyIHVz
ZWQgYnVmZmVyCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKLSAgICB7Ci0gICAgICAgIGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ld
Lm1BcnJheUVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0g
YXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0gICAgICAgICAgICBBcnJheVZlcnRleEJ1
ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKSA6IE5VTEw7Ci0gICAgICAgICAgICBBcnJheVZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVy
ID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogbVN0cmVhbWluZ0J1ZmZlcjsKLQotICAg
ICAgICAgICAgaWYgKHZlcnRleEJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB2ZXJ0ZXhCdWZmZXItPnJlc2VydmVSZXF1aXJlZFNwYWNlKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQZXJmb3JtIHRoZSB2ZXJ0ZXggZGF0YSB0cmFuc2xh
dGlvbnMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoYXR0cmlic1tpXS5tQXJyYXlFbmFibGVkKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlciAmJiBhdHRyaWJzW2ldLm1Qb2ludGVy
ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIGFuIGFwcGxpY2F0aW9uIGVycm9yIHRoYXQgd291bGQgbm9ybWFsbHkgcmVzdWx0IGluIGEg
Y3Jhc2gsIGJ1dCB3ZSBjYXRjaCBpdCBhbmQgcmV0dXJuIGFuIGVycm9yCi0gICAgICAgICAgICAg
ICAgICAgIEVSUigiQW4gZW5hYmxlZCB2ZXJ0ZXggYXJyYXkgaGFzIG5vIGJ1ZmZlciBhbmQgbm8g
cG9pbnRlci4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdENv
bnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnNbaV0pOwotCi0gICAg
ICAgICAgICAgICAgU3RhdGljVmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBi
dWZmZXItPmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBB
cnJheVZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVm
ZmVyIDogc3RhdGljX2Nhc3Q8QXJyYXlWZXJ0ZXhCdWZmZXIqPihtU3RyZWFtaW5nQnVmZmVyKTsK
LQotICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IHN0cmVhbU9mZnNldCA9IC0xOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRl
KGF0dHJpYnNbaV0pOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgPT0g
LTEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENv
bnZlcnQgdGhlIGVudGlyZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3Rh
bENvdW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNl
dCAvIGF0dHJpYnNbaV0uc3RyaWRlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVh
bU9mZnNldCA9IHdyaXRlQXR0cmlidXRlRGF0YShzdGF0aWNCdWZmZXIsIC1zdGFydEluZGV4LCB0
b3RhbENvdW50LCBhdHRyaWJzW2ldLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgIT0gLTEpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCArPSAoYXR0cmlic1tp
XS5tT2Zmc2V0IC8gYXR0cmlic1tpXS5zdHJpZGUoKSkgKiBjb252ZXJ0ZXIub3V0cHV0RWxlbWVu
dFNpemU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBh
dHRyaWJzW2ldLm1EaXZpc29yID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ICs9IHN0YXJ0ICogY29udmVydGVy
Lm91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHdyaXRl
QXR0cmlidXRlRGF0YShtU3RyZWFtaW5nQnVmZmVyLCBzdGFydCwgY291bnQsIGF0dHJpYnNbaV0s
IGluc3RhbmNlcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN0
cmVhbU9mZnNldCA9PSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0udmVydGV4QnVmZmVyID0gdmVydGV4QnVmZmVyLT5nZXRCdWZm
ZXIoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnNlcmlhbCA9IHZlcnRleEJ1ZmZl
ci0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0g
YXR0cmlic1tpXS5tRGl2aXNvcjsKLQotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlw
ZSA9IGNvbnZlcnRlci5kM2REZWNsVHlwZTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ld
LnN0cmlkZSA9IGNvbnZlcnRlci5vdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm9mZnNldCA9IHN0cmVhbU9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1DdXJyZW50
VmFsdWVCdWZmZXJbaV0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBt
Q3VycmVudFZhbHVlQnVmZmVyW2ldID0gbmV3IFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihtRGV2aWNl
LCBDT05TVEFOVF9WRVJURVhfQlVGRkVSX1NJWkUpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciAqYnVmZmVyID0gbUN1cnJlbnRWYWx1
ZUJ1ZmZlcltpXTsKLQotICAgICAgICAgICAgICAgIGlmIChtRGlydHlDdXJyZW50VmFsdWVbaV0p
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVxdWly
ZWRTcGFjZSA9IDQgKiBzaXplb2YoZmxvYXQpOwotICAgICAgICAgICAgICAgICAgICBidWZmZXIt
PmFkZFJlcXVpcmVkU3BhY2UocmVxdWlyZWRTcGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1
ZmZlci0+cmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
KmRhdGEgPSBzdGF0aWNfY2FzdDxmbG9hdCo+KGJ1ZmZlci0+bWFwKFZlcnRleEF0dHJpYnV0ZSgp
LCByZXF1aXJlZFNwYWNlLCAmbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0pKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFbMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhWzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzFdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1
ZVsyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gPSBhdHRyaWJzW2ldLm1DdXJy
ZW50VmFsdWVbM107Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnVubWFwKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtRGlydHlDdXJyZW50VmFsdWVbaV0gPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHRyYW5zbGF0ZWRbaV0udmVydGV4QnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXS0+Z2V0
QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zZXJpYWwgPSBtQ3VycmVu
dFZhbHVlQnVmZmVyW2ldLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVk
W2ldLmRpdmlzb3IgPSAwOwotCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50eXBlID0g
RDNEREVDTFRZUEVfRkxPQVQ0OwotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRl
ID0gMDsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFs
dWVPZmZzZXRzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAg
IGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRC
dWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChidWZmZXIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBhdHRyaWJz
W2ldLnR5cGVTaXplKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
c3BhY2VSZXF1aXJlZChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3Qg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSBjb25zdAotewotICAgIHNpemVfdCBlbGVtZW50U2l6
ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgaWYg
KGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVsZW1lbnRTaXplICogY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlbGVtZW50U2l6ZSAqICgoaW5zdGFuY2VzICsgYXR0cmliLm1EaXZpc29yIC0g
MSkgLyBhdHRyaWIubURpdmlzb3IpOwotICAgIH0KLX0KLQotLy8gTWFwcGluZyBmcm9tIE9wZW5H
TC1FUyB2ZXJ0ZXggYXR0cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAg
ICAgICAgICAgICAgICBTSE9SVCAoQ2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FU
IChOb3JtYWxpemUpIChjYW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0p
Ci0vLyBVTlNJR05FRF9CWVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2Fz
dCkKLS8vIFVOU0lHTkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAo
Tm9ybWFsaXplKQotLy8gU0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8g
U0hPUlQtbm9ybSAgICAgICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3Jt
YWxpemUpCi0vLyBVTlNJR05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVE
X1NIT1JULW5vcm0gIFVTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkK
LS8vIEZJWEVEIChub3QgaW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAg
ICAgICAgICAgICAgICBGTE9BVCAoSWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20g
R0wgdHlwZSAoYXMgR0xlbnVtKSB0byB0aGUgQyB0eXBlZGVmLiAKLXRlbXBsYXRlIDxHTGVudW0g
R0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9D
VHlwZTxHTF9CWVRFPiB7IHR5cGVkZWYgR0xieXRlIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+IHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiB7IHR5cGVkZWYgR0xzaG9y
dCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9S
VD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NU
eXBlPEdMX0ZJWEVEPiB7IHR5cGVkZWYgR0x1aW50IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyB9OwotCi0vLyBU
aGlzIGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXpl
IGV4cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAg
RDNEVlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAg
ICBEM0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9O
T1JNCi19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVu
dW0gRDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUg
PHVuc2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRl
IDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYg
c2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JU
X05PUk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRv
Q1R5cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5z
aWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRf
VVNIT1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNv
ZGUgdGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2gg
dHlwZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBh
cHByb3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQg
c2l6ZT4KLXN0cnVjdCBXaWRlblJ1bGUKLXsKLX07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3Ry
dWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6Tm9XaWRlbjxz
aXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hP
UlQsIHNpemU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRl
IDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAg
OiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3Qg
V2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRm91cjxz
aXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZ
VEVfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRl
IDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAg
OiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2Rl
cyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFn
IGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8
dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPgotc3RydWN0IFZlcnRleFR5cGVGbGFncwot
ewotfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjYXBmbGFnLCB1bnNpZ25lZCBpbnQgZGVj
bGZsYWc+Ci1zdHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNhcGZs
YWcgPSBjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gZGVjbGZsYWcgfTsKLX07Ci0K
LXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMT4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xU
WVBFX0ZMT0FUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQy
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JU
Mk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRf
Tk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERF
Q0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQs
IEQzRERFQ0xUWVBFX1VCWVRFND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENB
UFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hP
UlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRleFR5cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1h
bGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFz
IEQzRFZlcnRleFR5cGUgZW51bXMpLgotdGVtcGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9y
bWFsaXplZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZwotewotfTsKLQotdGVtcGxhdGUgPEQz
RFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVk
Pgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFzZQotewotICAgIGVudW0geyBwcmVmZXJyZWQg
PSBQcmVmZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFsbGJhY2sgPSBGYWxsYmFjayB9OwotfTsKLQot
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAg
ICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7
IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdM
X1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwg
Q2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZ
VEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VC
WVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAg
ICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsg
fTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAg
OiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBD
YXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hP
UlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNI
T1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxh
dGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBu
b3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRvRmxvYXQKLXRlbXBsYXRlIDxib29sIG5vcm1h
bGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWRlbnRpdHkKLQotCi0vLyBHaXZlbiBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5k
IGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHByb3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24g
cnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0eSwgRml4ZWRUb0Zsb2F0KS4KLS8vIFRoZSBj
b252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lv
bi5oLgotCi0vLyBBbG1vc3QgYWxsIGNhc2VzIGFyZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGlu
ZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVudGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3Mg
aXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJv
b2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRvVHlwZT4KLXN0cnVjdCBDb252ZXJzaW9uUnVs
ZSA6IGdsOjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1l
IEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4KLXsKLX07Ci0KLS8vIEFsbCBjb252ZXJzaW9ucyBm
cm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3BlcmF0b3Iu
Ci10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5
cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBl
PGZyb21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZv
ciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2Vu
ZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVy
c2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8
R0xpbnQsIDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklY
RUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9
OwotCi0vLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhW
YWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAv
MSkKLS8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCi10ZW1wbGF0ZSA8Y2xhc3Mg
VCwgYm9vbCBub3JtYWxpemVkPgotc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKLXsK
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdl
MjxULCB0cnVlPiAgOiBnbDo6Tm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6
IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1
bHQgdmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFu
ZCAKLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgRGVmYXVsdFZl
cnRleFZhbHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4KLXsK
LX07Ci0KLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFs
dWVzPGZsb2F0LCBub3JtYWxpemVkPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7
IH07Ci0KLS8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ug
d2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8g
VGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkg
ZGV2aWNlcyBtdXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZl
cnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9Owot
Ci0vLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBl
L25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAot
Ly8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhE
YXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0v
LyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFy
YXRpb24gaW4gZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1h
bGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+
Ci1zdHJ1Y3QgQ29udmVydGVyCi0gICAgOiBnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFt
ZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2lkZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwg
bm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5
cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVmYXVsdFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBW
ZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5v
cm1hbGl6ZWQgPiA+Ci17Ci1wcml2YXRlOgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5j
ZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07
Ci0gICAgZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lk
dGggfTsKLQotcHVibGljOgotICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQz
ZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4
VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlh
bGlzZSBhIFRyYW5zbGF0aW9uSW5mbwotI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBz
aXplLCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwg
c2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXpl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywg
XAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAg
ICAgICAgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFj
aykgICAgICAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlw
ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAg
IH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwg
MyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAot
ICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSks
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4
RGF0YU1hbmFnZXI6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVydGV4RGF0YU1hbmFnZXI6Om1Q
b3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAv
LyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6
ZS0xXQotewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xB
VElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9U
WVBFKEdMX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hP
UlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKLSAgICBU
UkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0KLXZvaWQgVmVydGV4
RGF0YU1hbmFnZXI6OmNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsr
KQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlv
bnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNs
YXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNs
YXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1BdHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtq
XVtrXS5mYWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBUaGlzIGlzIHVzZWQgdG8gaW5kZXggbUF0dHJp
YnV0ZVR5cGVzIGFuZCBtUG9zc2libGVUcmFuc2xhdGlvbnMuCi11bnNpZ25lZCBpbnQgVmVydGV4
RGF0YU1hbmFnZXI6OnR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4g
MjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBH
TF9GSVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1WZXJ0ZXhC
dWZmZXI6OlZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90
IHNpemUsIERXT1JEIHVzYWdlRmxhZ3MpIDogbURldmljZShkZXZpY2UpLCBtVmVydGV4QnVmZmVy
KE5VTEwpCi17Ci0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29s
ID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKHVzYWdlRmxhZ3MpOwotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIHVzYWdlRmxhZ3Ms
IDAsIHBvb2wsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlzc3Vl
U2VyaWFsKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1
ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4
QnVmZmVyOjp+VmVydGV4QnVmZmVyKCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVmVy
dGV4QnVmZmVyOjp1bm1hcCgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAg
ICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFZlcnRl
eEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVZlcnRleEJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6Z2V0U2VyaWFs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRl
eEJ1ZmZlcjo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwot
fQotCi1BcnJheVZlcnRleEJ1ZmZlcjo6QXJyYXlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKSA6IFZlcnRleEJ1
ZmZlcihkZXZpY2UsIHNpemUsIHVzYWdlRmxhZ3MpCi17Ci0gICAgbUJ1ZmZlclNpemUgPSBzaXpl
OwotICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKLSAgICBtUmVxdWlyZWRTcGFjZSA9IDA7Ci19Ci0K
LUFycmF5VmVydGV4QnVmZmVyOjp+QXJyYXlWZXJ0ZXhCdWZmZXIoKQotewotfQotCi12b2lkIEFy
cmF5VmVydGV4QnVmZmVyOjphZGRSZXF1aXJlZFNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSkKLXsK
LSAgICBtUmVxdWlyZWRTcGFjZSArPSByZXF1aXJlZFNwYWNlOwotfQotCi1TdHJlYW1pbmdWZXJ0
ZXhCdWZmZXI6OlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Us
IHN0ZDo6c2l6ZV90IGluaXRpYWxTaXplKSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgaW5p
dGlhbFNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpCi17Ci19Ci0K
LVN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6flN0cmVhbWluZ1ZlcnRleEJ1ZmZlcigpCi17Ci19Ci0K
LXZvaWQgKlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6bWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0
KQotewotICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0KLSAgICBpZiAobVZlcnRleEJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhtV3Jp
dGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAqb2Zmc2V0ID0gbVdy
aXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBTdHJlYW1pbmdWZXJ0ZXhCdWZm
ZXI6OnJlc2VydmVSZXF1aXJlZFNwYWNlKCkKLXsKLSAgICBpZiAobVJlcXVpcmVkU3BhY2UgPiBt
QnVmZmVyU2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVy
dGV4QnVmZmVyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gc3Rk
OjptYXgobVJlcXVpcmVkU3BhY2UsIDMgKiBtQnVmZmVyU2l6ZSAvIDIpOyAgIC8vIDEuNSB4IG1C
dWZmZXJTaXplIGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdlIGRv
bid0IGhhdmUgdG9vIG1hbnkgcmVhbGxvY2F0aW9ucy4KLQotICAgICAgICBEM0RQT09MIHBvb2wg
PSBnZXREaXNwbGF5KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdF
X1dSSVRFT05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVy
dGV4QnVmZmVyKG1CdWZmZXJTaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVP
TkxZLCAwLCBwb29sLCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBp
c3N1ZVNlcmlhbCgpOwotICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1
ZmZlciBvZiBzaXplICVsdS4iLCBtQnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
V3JpdGVQb3NpdGlvbiA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsg
bVJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkgICAvLyBSZWN5Y2xlCi0gICAgewotICAgICAg
ICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqZHVtbXk7
Ci0gICAgICAgICAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19E
SVNDQVJEKTsKLSAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotICAgICAgICB9
Ci0KLSAgICAgICAgbVdyaXRlUG9zaXRpb24gPSAwOwotICAgIH0KLQotICAgIG1SZXF1aXJlZFNw
YWNlID0gMDsKLX0KLQotU3RhdGljVmVydGV4QnVmZmVyOjpTdGF0aWNWZXJ0ZXhCdWZmZXIoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgMCwgRDNE
VVNBR0VfV1JJVEVPTkxZKQotewotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXI6On5TdGF0aWNWZXJ0
ZXhCdWZmZXIoKQotewotfQotCi12b2lkICpTdGF0aWNWZXJ0ZXhCdWZmZXI6Om1hcChjb25zdCBW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3Rk
OjpzaXplX3QgKnN0cmVhbU9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0g
ICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1W
ZXJ0ZXhCdWZmZXItPkxvY2sobVdyaXRlUG9zaXRpb24sIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIs
IDApOwotICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsK
LSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGF0dHJp
YnV0ZU9mZnNldCA9IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpOwotICAg
ICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7YXR0cmlidXRlLm1UeXBlLCBhdHRyaWJ1dGUu
bVNpemUsIGF0dHJpYnV0ZS5zdHJpZGUoKSwgYXR0cmlidXRlLm1Ob3JtYWxpemVkLCBhdHRyaWJ1
dGVPZmZzZXQsIG1Xcml0ZVBvc2l0aW9ufTsKLSAgICAgICAgbUNhY2hlLnB1c2hfYmFjayhlbGVt
ZW50KTsKLQotICAgICAgICAqc3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAg
IG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1h
cFB0cjsKLX0KLQotdm9pZCBTdGF0aWNWZXJ0ZXhCdWZmZXI6OnJlc2VydmVSZXF1aXJlZFNwYWNl
KCkKLXsKLSAgICBpZiAoIW1WZXJ0ZXhCdWZmZXIgJiYgbUJ1ZmZlclNpemUgPT0gMCkKLSAgICB7
Ci0gICAgICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RV
U0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVZlcnRleEJ1ZmZlcihtUmVxdWlyZWRTcGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBwb29s
LCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgp
OwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1
LiIsIG1SZXF1aXJlZFNwYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0g
bVJlcXVpcmVkU3BhY2U7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1WZXJ0ZXhCdWZmZXIgJiYgbUJ1
ZmZlclNpemUgPj0gbVJlcXVpcmVkU3BhY2UpCi0gICAgewotICAgICAgICAvLyBBbHJlYWR5IGFs
bG9jYXRlZAotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU3RhdGljIHZlcnRl
eCBidWZmZXJzIGNhbid0IGJlIHJlc2l6ZWQKLQotICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKLX0K
LQotc3RkOjpzaXplX3QgU3RhdGljVmVydGV4QnVmZmVyOjpsb29rdXBBdHRyaWJ1dGUoY29uc3Qg
VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZWxl
bWVudCA9IDA7IGVsZW1lbnQgPCBtQ2FjaGUuc2l6ZSgpOyBlbGVtZW50KyspCi0gICAgewotICAg
ICAgICBpZiAobUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCi0gICAg
ICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKLSAgICAg
ICAgICAgIG1DYWNoZVtlbGVtZW50XS5zdHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYmCi0g
ICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5vcm1h
bGl6ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmli
dXRlT2Zmc2V0ID09IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVbZWxlbWVudF0uc3RyZWFt
T2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0x
OwotfQotCi1jb25zdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhE
YXRhTWFuYWdlcjo6Zm9ybWF0Q29udmVydGVyKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlKSBjb25zdAotewotICAgIHJldHVybiBtQXR0cmlidXRlVHlwZXNbdHlwZUluZGV4KGF0dHJp
YnV0ZS5tVHlwZSldW2F0dHJpYnV0ZS5tTm9ybWFsaXplZF1bYXR0cmlidXRlLm1TaXplIC0gMV07
Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1ZlcnRleERhdGFNYW5hZ2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1
NzU5MWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZlcnRleERhdGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIFZl
cnRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKLS8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xh
dGlvbiBwcm9jZXNzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXwot
I2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYREFUQU1BTkFHRVJfSF8KLQotI2luY2x1ZGUgPHZlY3Rv
cj4KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFj
ZSBnbAotewotCi1zdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZQotewotICAgIGJvb2wgYWN0aXZl
OwotCi0gICAgRDNEREVDTFRZUEUgdHlwZTsKLSAgICBVSU5UIG9mZnNldDsKLSAgICBVSU5UIHN0
cmlkZTsgICAvLyAwIG1lYW5zIG5vdCB0byBhZHZhbmNlIHRoZSByZWFkIHBvaW50ZXIgYXQgYWxs
Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICp2ZXJ0ZXhCdWZmZXI7Ci0gICAgdW5zaWdu
ZWQgaW50IHNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgZGl2aXNvcjsKLX07Ci0KLWNsYXNzIFZl
cnRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0gICAgdmly
dHVhbCB+VmVydGV4QnVmZmVyKCk7Ci0KLSAgICB2b2lkIHVubWFwKCk7Ci0KLSAgICBJRGlyZWN0
M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0
U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJvdGVjdGVkOgotICAgIElEaXJlY3QzRERldmljZTkgKmNv
bnN0IG1EZXZpY2U7Ci0gICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1ZmZlcjsK
LQotICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNz
dWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcik7Ci19
OwotCi1jbGFzcyBBcnJheVZlcnRleEJ1ZmZlciA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKLXsKLSAg
cHVibGljOgotICAgIEFycmF5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
c3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0gICAgfkFycmF5VmVydGV4QnVm
ZmVyKCk7Ci0KLSAgICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNp
emU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgKm1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YnV0ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNl
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgpID0gMDsKLSAg
ICB2b2lkIGFkZFJlcXVpcmVkU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlKTsKLQotICBwcm90ZWN0
ZWQ6Ci0gICAgc3RkOjpzaXplX3QgbUJ1ZmZlclNpemU7Ci0gICAgc3RkOjpzaXplX3QgbVdyaXRl
UG9zaXRpb247Ci0gICAgc3RkOjpzaXplX3QgbVJlcXVpcmVkU3BhY2U7Ci19OwotCi1jbGFzcyBT
dHJlYW1pbmdWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgQXJyYXlWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVi
bGljOgotICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Us
IHN0ZDo6c2l6ZV90IGluaXRpYWxTaXplKTsKLSAgICB+U3RyZWFtaW5nVmVydGV4QnVmZmVyKCk7
Ci0KLSAgICB2b2lkICptYXAoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6
c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpzdHJlYW1PZmZzZXQpOwotICAgIHZv
aWQgcmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLX07Ci0KLWNsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZl
ciA6IHB1YmxpYyBBcnJheVZlcnRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
U3RhdGljVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7Ci0gICAgflN0YXRp
Y1ZlcnRleEJ1ZmZlcigpOwotCi0gICAgdm9pZCAqbWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqc3RyZWFt
T2Zmc2V0KTsKLSAgICB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNlKCk7Ci0KLSAgICBzdGQ6OnNp
emVfdCBsb29rdXBBdHRyaWJ1dGUoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOyAg
IC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSB2ZXJ0ZXggYnVmZmVyLCBvciAtMSBpZiBu
b3QgZm91bmQKLQotICBwcml2YXRlOgotICAgIHN0cnVjdCBWZXJ0ZXhFbGVtZW50Ci0gICAgewot
ICAgICAgICBHTGVudW0gdHlwZTsKLSAgICAgICAgR0xpbnQgc2l6ZTsKLSAgICAgICAgR0xzaXpl
aSBzdHJpZGU7Ci0gICAgICAgIGJvb2wgbm9ybWFsaXplZDsKLSAgICAgICAgaW50IGF0dHJpYnV0
ZU9mZnNldDsKLQotICAgICAgICBzdGQ6OnNpemVfdCBzdHJlYW1PZmZzZXQ7Ci0gICAgfTsKLQot
ICAgIHN0ZDo6dmVjdG9yPFZlcnRleEVsZW1lbnQ+IG1DYWNoZTsKLX07Ci0KLWNsYXNzIFZlcnRl
eERhdGFNYW5hZ2VyCi17Ci0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0
ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpiYWNrZW5kKTsKLSAgICB2aXJ0dWFsIH5WZXJ0
ZXhEYXRhTWFuYWdlcigpOwotCi0gICAgdm9pZCBkaXJ0eUN1cnJlbnRWYWx1ZShpbnQgaW5kZXgp
IHsgbURpcnR5Q3VycmVudFZhbHVlW2luZGV4XSA9IHRydWU7IH0KLQotICAgIEdMZW51bSBwcmVw
YXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJp
YnV0ZSAqb3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKLQotICAgIHN0ZDo6
c2l6ZV90IHNwYWNlUmVxdWlyZWQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6
c2l6ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgY29uc3Q7Ci0gICAgc3RkOjpzaXplX3Qg
d3JpdGVBdHRyaWJ1dGVEYXRhKEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwg
R0xzaXplaSBpbnN0YW5jZXMpOwotCi0gICAgQ29udGV4dCAqY29uc3QgbUNvbnRleHQ7Ci0gICAg
SURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURldmljZTsKLQotICAgIFN0cmVhbWluZ1ZlcnRleEJ1
ZmZlciAqbVN0cmVhbWluZ0J1ZmZlcjsKLQotICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlW01B
WF9WRVJURVhfQVRUUklCU107Ci0gICAgU3RyZWFtaW5nVmVydGV4QnVmZmVyICptQ3VycmVudFZh
bHVlQnVmZmVyW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgc3RkOjpzaXplX3QgbUN1cnJlbnRW
YWx1ZU9mZnNldHNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIC8vIEF0dHJpYnV0ZSBmb3Jt
YXQgY29udmVyc2lvbgotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAg
IGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwot
ICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBk
M2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTID0gNiB9OwotCi0gICAgRm9ybWF0Q29udmVydGVyIG1BdHRyaWJ1dGVUeXBlc1tOVU1fR0xf
VkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07ICAgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQg
YnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RydWN0IFRyYW5z
bGF0aW9uRGVzY3JpcHRpb24KLSAgICB7Ci0gICAgICAgIERXT1JEIGNhcHNGbGFnOwotICAgICAg
ICBGb3JtYXRDb252ZXJ0ZXIgcHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgRm9ybWF0Q29u
dmVydGVyIGZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBp
cyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRyaWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVHJh
bnNsYXRpb25EZXNjcmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9B
VFRSSUJfVFlQRVNdWzJdWzRdOyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5k
ZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0KLSAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhE
V09SRCBkZWNsVHlwZXMpOwotCi0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlw
ZSkgY29uc3Q7Ci0gICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29u
c3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpIGNvbnN0OwotfTsKLQotfQotCi0jZW5kaWYg
ICAvLyBMSUJHTEVTVjJfVkVSVEVYREFUQU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZmJhMjUzZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OTc1
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGxpYkdMRVN2Mi5jcHA6IEltcGxlbWVu
dHMgdGhlIGV4cG9ydGVkIE9wZW5HTCBFUyAyLjAgZnVuY3Rpb25zLgotCi0jZGVmaW5lIEdMX0FQ
SUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4K
LQotI2luY2x1ZGUgPGV4Y2VwdGlvbj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJj
b21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
U2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUXVlcnkuaCIKLQotYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8
IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAoZ2w6OmdldENvbnRleHQoKSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05v
blBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmIChsZXZlbCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKGdsOjppc1BvdzIod2lkdGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ly8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZy
b20gdGFibGUgMy40LgotYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlKQotewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNl
ZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdM
X1JHQjoKLSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQ6Ci0gICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNl
KTsKLSAgICB9Ci0KLSAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQot
ICAgIC8vIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJ
RF9PUEVSQVRJT04KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81Ogot
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdC
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9
Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09F
UzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci19Ci1ib29sIHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXMyRChib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwot
ICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZl
bCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRl
eHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21w
cmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0
ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYg
aGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKGxldmVs
KSB8fAotICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KGxldmVs
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBh
cmFtc0N1YmUoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKLXsK
LSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0
dXJlLT5pc0NvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9y
bWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewotICAg
ICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRh
cmdldCwgMCkpIHx8Ci0gICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0
ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwg
bGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQo
dGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBm
b3IgY29tYmluYXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVh
ZFBpeGVscwotYm9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlKQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFf
NV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05f
Q09MT1JfUkVBRF9UWVBFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWV4dGVybiAiQyIKLXsKLQotdm9pZCBfX3N0ZGNhbGwgZ2xBY3RpdmVUZXh0dXJl
KEdMZW51bSB0ZXh0dXJlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRleHR1cmUgPSAweCVYKSIs
IHRleHR1cmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUg
PiBHTF9URVhUVVJFMCArIGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRBY3RpdmVTYW1wbGVyKHRleHR1cmUgLSBHTF9URVhUVVJFMCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xBdHRhY2hT
aGFkZXIoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgc2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4
dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+YXR0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJlZ2luUXVlcnlFWFQoR0xlbnVtIHRhcmdldCwgR0x1
aW50IGlkKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCAlZCki
LCB0YXJnZXQsIGlkKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAot
ICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0g
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
ZCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bEJpbmRBdHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBH
TGNoYXIqIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQg
aW5kZXggPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBpbmRl
eCwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHN0cm5jbXAobmFtZSwgImdsXyIsIDMpID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+YmluZEF0
dHJpYnV0ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTHVpbnQgYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBidWZmZXIpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9C
VUZGRVI6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEFycmF5QnVmZmVyKGJ1ZmZlcik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlC
dWZmZXIoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1
aW50IGZyYW1lYnVmZmVyKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
dWludCBmcmFtZWJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgZnJhbWVidWZmZXIpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAh
PSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVG
RkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSB8fCB0
YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZFJlYWRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfRFJBV19GUkFNRUJV
RkZFUl9BTkdMRSB8fCB0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+YmluZERyYXdGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQs
IEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IHJlbmRlcmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZFRl
eHR1cmUoR0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpCi17Ci0gICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IHRleHR1cmUgPSAlZCkiLCB0YXJnZXQsIHRleHR1cmUp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1
cmUodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0ICYmIHRleHR1cmVP
YmplY3QtPmdldFRhcmdldCgpICE9IHRhcmdldCAmJiB0ZXh0dXJlICE9IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5iaW5kVGV4dHVyZTJEKHRleHR1cmUpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZENvbG9y
KEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFs
cGhhKQotewotICAgIEVWRU5UKCIoR0xjbGFtcGYgcmVkID0gJWYsIEdMY2xhbXBmIGdyZWVuID0g
JWYsIEdMY2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFtcGYgYWxwaGEgPSAlZikiLAotICAgICAgICAg
IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRDb2xv
cihnbDo6Y2xhbXAwMShyZWQpLCBnbDo6Y2xhbXAwMShncmVlbiksIGdsOjpjbGFtcDAxKGJsdWUp
LCBnbDo6Y2xhbXAwMShhbHBoYSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlvbihHTGVudW0gbW9k
ZSkKLXsKLSAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlLCBtb2RlKTsKLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51
bSBtb2RlQWxwaGEpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZVJHQiA9IDB4JVgsIEdMZW51
bSBtb2RlQWxwaGEgPSAweCVYKSIsIG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobW9kZVJHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfRlVOQ19BREQ6Ci0gICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgotICAgICAgICAg
IGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChtb2RlQWxwaGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgotICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFD
VDoKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9k
ZUFscGhhKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVuYyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0
b3IpCi17Ci0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzZmFjdG9yLCBkZmFjdG9yLCBzZmFjdG9y
LCBkZmFjdG9yKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVu
dW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBo
YSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBzcmNSR0IgPSAweCVYLCBHTGVudW0gZHN0UkdCID0g
MHglWCwgR0xlbnVtIHNyY0FscGhhID0gMHglWCwgR0xlbnVtIGRzdEFscGhhID0gMHglWCkiLAot
ICAgICAgICAgIHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHNyY1JHQikKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNlIEdMX09ORToKLSAgICAgICAgICBjYXNlIEdMX1NS
Q19DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6Ci0gICAgICAg
ICAgY2FzZSBHTF9EU1RfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NP
TE9SOgotICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05F
X01JTlVTX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKLSAgICAgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFO
VF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKLSAg
ICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0NPTlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRF
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNo
IChkc3RSR0IpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAg
Y2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgot
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdM
X1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAg
ICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNU
X0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFO
VF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoc3Jj
QWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2Fz
ZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAg
ICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NS
Q19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAg
ICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FM
UEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAg
ICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZHN0QWxwaGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAg
Y2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9S
OgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBj
YXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6
Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRf
Q09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY29uc3RhbnRDb2xvclVzZWQgPSAoc3JjUkdCID09
IEdMX0NPTlNUQU5UX0NPTE9SIHx8IHNyY1JHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSR0IgPT0gR0xfQ09O
U1RBTlRfQ09MT1IgfHwgZHN0UkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUik7Ci0K
LSAgICAgICAgYm9vbCBjb25zdGFudEFscGhhVXNlZCA9IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRf
QUxQSEEgfHwgc3JjUkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJHQiA9PSBHTF9DT05TVEFOVF9BTFBIQSB8
fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKTsKLQotICAgICAgICBpZiAo
Y29uc3RhbnRDb2xvclVzZWQgJiYgY29uc3RhbnRBbHBoYVVzZWQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEVSUigiU2ltdWx0YW5lb3VzIHVzZSBvZiBHTF9DT05TVEFOVF9BTFBIQS9HTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEEgYW5kIEdMX0NPTlNUQU5UX0NPTE9SL0dMX09ORV9NSU5VU19D
T05TVEFOVF9DT0xPUiBpbnZhbGlkIHVuZGVyIFdlYkdMIik7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3Jz
KHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQnVmZmVyRGF0
YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSwgR0xl
bnVtIHVzYWdlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWlw
dHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwLCBHTGVudW0gdXNhZ2Ug
PSAlZCkiLAotICAgICAgICAgIHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRj
aCAodXNhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1NUUkVBTV9EUkFXOgotICAg
ICAgICAgIGNhc2UgR0xfU1RBVElDX0RSQVc6Ci0gICAgICAgICAgY2FzZSBHTF9EWU5BTUlDX0RS
QVc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9
IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXItPmJ1ZmZl
ckRhdGEoZGF0YSwgc2l6ZSwgdXNhZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQnVmZmVyU3ViRGF0YShHTGVudW0g
dGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNl
dCA9ICVkLCBHTHNpemVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44
cCkiLAotICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCAwIHx8IG9mZnNldCA8IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6
Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVy
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQgPiBidWZmZXItPnNpemUoKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlci0+YnVmZmVyU3ViRGF0
YShkYXRhLCBzaXplLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0
YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAh
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVG
RkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0g
Y29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xiaXRmaWVs
ZCBtYXNrID0gJVgpIiwgbWFzayk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsQ2xlYXJDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBi
bHVlLCBHTGNsYW1wZiBhbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHJlZCA9ICVmLCBH
TGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYsIEdMY2xhbXBmIGFscGhhID0g
JWYpIiwKLSAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xl
YXJEZXB0aGYoR0xjbGFtcGYgZGVwdGgpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiBkZXB0aCA9
ICVmKSIsIGRlcHRoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJEZXB0aChkZXB0aCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xDbGVhclN0ZW5jaWwoR0xpbnQgcykKLXsKLSAgICBFVkVOVCgiKEdMaW50IHMgPSAl
ZCkiLCBzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJTdGVuY2lsKHMpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
Q29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUs
IEdMYm9vbGVhbiBhbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xi
b29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9
ICVkKSIsCi0gICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRDb2xvck1hc2socmVkID09IEdMX1RSVUUsIGdyZWVuID09IEdMX1RSVUUsIGJsdWUg
PT0gR0xfVFJVRSwgYWxwaGEgPT0gR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb21waWxlU2hhZGVyKEdM
dWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVy
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVy
KHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBzaGFkZXJPYmplY3QtPmNvbXBpbGUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lk
KiBkYXRhKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVs
ID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwg
IiAKLSAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsIEdM
c2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKLSAg
ICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBpbWFnZVNpemUsIGRhdGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoIXZh
bGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBpbWFn
ZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lk
dGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
RGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhp
bXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+
IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhv
dWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3Mg
YXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2Us
IGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGltYWdl
U2l6ZSAhPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Zm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRDb21wcmVzc2VkSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBp
bWFnZVNpemUsIGRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRh
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQotewotICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQg
PSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAl
ZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAg
ICAiR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCki
LAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgIXZhbGlkSW1hZ2VTaXplKGxl
dmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBpbWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0
dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJu
YWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1
cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUg
aW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3Vn
aCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNv
bXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAl
IDQgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOyAvLyB3ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGls
IHRoaXMgcG9pbnQsIGJlY2F1c2UgdGhlIG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2Vz
IG5vdCBleGlzdCB1bmxlc3MgRFhUIHRleHR1cmVzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXMyRCh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0
LCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1
cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0
KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwg
eG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJl
c3NlZCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKQotewotICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0g
JWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVy
ID0gJWQpIiwKLSAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCF2
YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVMZXZlbCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoK
LSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVE
aW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNv
bnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3
aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZl
bCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVy
LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyKCk7Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2Ut
PmdldEludGVybmFsRm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0
XSB0YWJsZSAzLjkKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX0FMUEhBICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0IgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVw
dGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGlu
dCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTGludCB4
ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9
ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxldmVs
IDwgMCB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXpl
aT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXpl
aT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZy
YW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKCk7Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQg
PSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JH
QkE7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9O
T05FLCB0ZXgyZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgy
ZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpOwotICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0
ZXgyZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
LQotICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2Us
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUs
IHRleGN1YmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4Y3Vi
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IHRleGN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAg
ICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfQUxQSEEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9S
R0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQiAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1NjUgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCOF9PRVMgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JB
NCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0Ex
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09F
UykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVf
QU5HTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0x1aW50IF9fc3Rk
Y2FsbCBnbENyZWF0ZVByb2dyYW0odm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUdMdWludCBfX3N0
ZGNhbGwgZ2xDcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0g
dHlwZSA9IDB4JVgpIiwgdHlwZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+
Y3JlYXRlU2hhZGVyKHR5cGUpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDApOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDdWxsRmFjZShHTGVudW0gbW9kZSkKLXsKLSAgICBF
VkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoK
LSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFD
SzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxs
TW9kZShtb2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWkgbiwgY29uc3Qg
R0x1aW50KiBidWZmZXJzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcnNb
aV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRmVuY2VzTlYoR0xzaXplaSBuLCBj
b25zdCBHTHVpbnQqIGZlbmNlcykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25z
dCBHTHVpbnQqIGZlbmNlcyA9IDB4JTAuOHApIiwgbiwgZmVuY2VzKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZShmZW5jZXNb
aV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRnJhbWVidWZmZXJzKEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4g
PSAlZCwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZyYW1lYnVm
ZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGZy
YW1lYnVmZmVyc1tpXSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXJzW2ldKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVQcm9ncmFtKEdMdWludCBw
cm9ncmFtKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFNoYWRlcihw
cm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xEZWxldGVRdWVyaWVzRVhUKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICppZHMpCi17Ci0g
ICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50ICppZHMgPSAweCUwLjhwKSIs
IG4sIGlkcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+ZGVsZXRlUXVlcnkoaWRzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCi17
Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJz
ID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTaGFkZXIoR0x1aW50IHNo
YWRlcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoc2hhZGVyID09IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcikpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxl
dGVUZXh0dXJlcyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgRVZF
TlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwg
biwgdGV4dHVyZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlc1tpXSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQotewot
ICAgIEVWRU5UKCIoR0xlbnVtIGZ1bmMgPSAweCVYKSIsIGZ1bmMpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBzd2l0Y2ggKGZ1bmMpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05F
VkVSOgotICAgICAgICAgIGNhc2UgR0xfQUxXQVlTOgotICAgICAgICAgIGNhc2UgR0xfTEVTUzoK
LSAgICAgICAgICBjYXNlIEdMX0xFUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX0VRVUFMOgotICAg
ICAgICAgIGNhc2UgR0xfR1JFQVRFUjoKLSAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKLSAgICAg
ICAgICBjYXNlIEdMX05PVEVRVUFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0RGVwdGhGdW5jKGZ1bmMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBm
bGFnKQotewotICAgIEVWRU5UKCIoR0xib29sZWFuIGZsYWcgPSAlZCkiLCBmbGFnKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+c2V0RGVwdGhNYXNrKGZsYWcgIT0gR0xfRkFMU0UpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVw
dGhSYW5nZWYoR0xjbGFtcGYgek5lYXIsIEdMY2xhbXBmIHpGYXIpCi17Ci0gICAgRVZFTlQoIihH
TGNsYW1wZiB6TmVhciA9ICVmLCBHTGNsYW1wZiB6RmFyID0gJWYpIiwgek5lYXIsIHpGYXIpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zZXREZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERl
dGFjaFNoYWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFk
ZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9
IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlNo
YWRlciAqc2hhZGVyQnlQcm9ncmFtSGFuZGxlOwotICAgICAgICAgICAgICAgIHNoYWRlckJ5UHJv
Z3JhbUhhbmRsZSA9IGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXNoYWRlckJ5UHJvZ3JhbUhhbmRsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtQnlT
aGFkZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQnlTaGFkZXJIYW5kbGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QtPmRldGFjaFNoYWRlcihzaGFkZXJPYmplY3QpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xEaXNhYmxlKEdMZW51bSBjYXApCi17Ci0gICAgRVZFTlQoIihHTGVudW0gY2Fw
ID0gMHglWCkiLCBjYXApOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZp
bGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhB
X1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNv
bnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3Nv
clRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2Up
OyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5
cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpCi17Ci0gICAgRVZFTlQo
IihHTGVudW0gbW9kZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCkiLCBtb2RlLCBmaXJzdCwgY291bnQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
Y291bnQgPCAwIHx8IGZpcnN0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJz
dCwgY291bnQsIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51bSBt
b2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpCi17Ci0g
ICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgR0xzaXplaSBwcmltY291bnQgPSAlZCkiLCBtb2RlLCBmaXJzdCwgY291bnQs
IHByaW1jb3VudCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwg
Zmlyc3QgPCAwIHx8IHByaW1jb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcmlt
Y291bnQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZp
cnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVt
ZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCogaW5kaWNlcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBj
b3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4
JTAuOHApIiwKLSAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2Rl
LCBjb3VudCwgdHlwZSwgaW5kaWNlcywgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0g
bW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25z
dCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwLCBHTHNpemVpIHByaW1jb3VudCA9ICVkKSIsCi0g
ICAgICAgICAgbW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIHByaW1jb3VudCk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgcHJpbWNvdW50IDwgMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHByaW1jb3VudCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJi
aXRJbmRpY2VzKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAgICAKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgcHJpbWNvdW50KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEVuYWJsZShHTGVudW0gY2FwKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRDdWxsRmFjZSh0cnVlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdv
bk9mZnNldEZpbGwodHJ1ZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1Q
TEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0
cnVlKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAg
ICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0
U2Npc3NvclRlc3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUp
OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0QmxlbmQodHJ1ZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVl
KTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeUVY
VChHTGVudW0gdGFyZ2V0KQotewotICAgIEVWRU5UKCJHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0
YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAg
ICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZW5kUXVlcnkodGFyZ2V0KTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEZpbmlzaEZlbmNlTlYoR0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50
IGZlbmNlID0gJWQpIiwgZmVuY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0g
Y29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3Qg
PT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5jZU9i
amVjdC0+ZmluaXNoRmVuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEZpbmlzaCh2b2lkKQotewotICAgIEVWRU5U
KCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW5jKHRydWUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRmx1c2godm9p
ZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c3luYyhmYWxzZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0
YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9
IDB4JVgsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQgPSAweCVYLCAiCi0gICAgICAgICAgIkdM
dWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJf
QU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAg
ICB8fCAocmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUiAmJiByZW5kZXJidWZm
ZXIgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAg
ICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1
ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0
RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVy
ICE9IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
YXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMDoKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIo
R0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVy
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0
dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQs
IEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSB0ZXh0YXJnZXQgPSAw
eCVYLCAiCi0gICAgICAgICAgIkdMdWludCB0ZXh0dXJlID0gJWQsIEdMaW50IGxldmVsID0gJWQp
IiwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJn
ZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFN
RUJVRkZFUl9BTkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOgotICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRU
QUNITUVOVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IDAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9ORTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQot
ICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRU
YXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXgyZCA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRh
cmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJl
Q3ViZU1hcCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlz
Q29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxldmVsICE9IDApCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIEdM
dWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRs
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7
Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJh
bWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZyYW1l
YnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogIGZyYW1lYnVmZmVyLT5zZXRD
b2xvcmJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRl
eHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRl
eHR1cmUpOyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEZyb250RmFjZShHTGVudW0g
bW9kZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9DVzoKLSAgICAgICAgICBjYXNlIEdMX0NDVzoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGcm9udEZhY2UobW9kZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsR2VuQnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogYnVmZmVycykKLXsKLSAgICBFVkVOVCgi
KEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlcnNbaV0g
PSBjb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbmVy
YXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCkiLCB0YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgw
KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzRGVwdGgoMCkpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0
ZXgyZC0+Z2VuZXJhdGVNaXBtYXBzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVyYXRlTWlwbWFwcygp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbkZlbmNlc05WKEdMc2l6ZWkgbiwg
R0x1aW50KiBmZW5jZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBm
ZW5jZXMgPSAweCUwLjhwKSIsIG4sIGZlbmNlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCog
ZnJhbWVidWZmZXJzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogZnJh
bWVidWZmZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5RdWVyaWVzRVhU
KEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwg
R0x1aW50KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWRzW2ldID0gY29udGV4dC0+Y3JlYXRlUXVlcnkoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQq
IHJlbmRlcmJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBy
ZW5kZXJidWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZW5kZXJidWZmZXJzW2ldID0gY29udGV4
dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0
dXJlcyhHTHNpemVpIG4sIEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVp
IG4gPSAlZCwgR0x1aW50KiB0ZXh0dXJlcyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlc1tpXSA9IGNv
bnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2
ZUF0dHJpYihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQot
ewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdM
c2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpICpsZW5ndGggPSAweCUwLjhwLCAiCi0gICAgICAg
ICAgIkdMaW50ICpzaXplID0gMHglMC44cCwgR0xlbnVtICp0eXBlID0gJTAuOHAsIEdMY2hhciAq
bmFtZSA9ICUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0
aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZz
aXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0
dHJpYnV0ZUNvdW50KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9n
cmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6
ZSwgdHlwZSwgbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3JtKEdMdWludCBwcm9ncmFt
LCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCog
c2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsICIK
LSAgICAgICAgICAiR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQqIHNpemUgPSAweCUw
LjhwLCBHTGVudW0qIHR5cGUgPSAweCUwLjhwLCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsCi0g
ICAgICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFt
ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRl
eCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZl
VW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwg
R0xzaXplaSogY291bnQsIEdMdWludCogc2hhZGVycykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBw
cm9ncmFtID0gJWQsIEdMc2l6ZWkgbWF4Y291bnQgPSAlZCwgR0xzaXplaSogY291bnQgPSAweCUw
LjhwLCBHTHVpbnQqIHNoYWRlcnMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgbWF4
Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG1h
eGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnMobWF4
Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi1pbnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50
IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9n
cmFtID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9ICVzKSIsIHByb2dyYW0sIG5hbWUpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0KLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUsIC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgLTEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcHJv
Z3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsR2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFt
cykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMYm9vbGVhbiogcGFyYW1z
ID0gMHglMC44cCkiLCAgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdl
dEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFy
YW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVy
SW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChu
dW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93
biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFt
cyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRb
bnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5h
bWUsIGZsb2F0UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRQYXJhbXNbaV0gPT0gMC4wZikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBH
TF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIFtdIGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg
ICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50UGFyYW1z
W2ldID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfRkFM
U0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhw
KSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsK
LQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJv
dW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldAotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
QlVGRkVSX1VTQUdFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJ
WkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi1HTGVudW0gX19zdGRjYWxsIGdsR2V0RXJyb3Iodm9pZCkKLXsK
LSAgICBFVkVOVCgiKCkiKTsKLQotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKLQotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmdldEVycm9yKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEdldEZlbmNlaXZOVihHTHVpbnQgZmVuY2UsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkLCBHTGVudW0g
cG5hbWUgPSAweCVYLCBHTGludCAqcGFyYW1zID0gMHglMC44cCkiLCBmZW5jZSwgcG5hbWUsIHBh
cmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5n
ZXRGZW5jZShmZW5jZSk7Ci0KLSAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZlbmNlT2JqZWN0LT5nZXRG
ZW5jZWl2KHBuYW1lLCBwYXJhbXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwg
R0xmbG9hdCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xm
bG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEo
Y29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5
UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBp
dCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5v
IHBhcmFtZXRlcnMgdG8gcmV0dXJuLgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMg
PSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09
IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAg
ICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFt
czsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoR0xmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xl
bnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1z
ID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHBhcmFt
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdM
X0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJf
QU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFE
X0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdG
cmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gYXR0YWNo
bWVudFR5cGU7Ci0gICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAg
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5
cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAg
YXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgpOyAK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRB
Q0hNRU5UOiAgICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRs
ZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAKLSAg
ICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyVHlwZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRPYmplY3RUeXBlOyAgIC8v
IFR5cGUgY2F0ZWdvcnkKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50VHlwZSA9PSBHTF9OT05F
IHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IGF0dGFjaG1lbnRUeXBlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KGF0dGFjaG1lbnRUeXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdHRh
Y2htZW50T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
YWNobWVudE9iamVjdFR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKLSAgICAgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFj
aG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNo
bWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5v
dCBhbGxvdyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKHZv
aWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlc2V0U3RhdHVz
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9PVVRfT0Zf
TUVNT1JZOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VydihHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVY
LCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCEoY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgICAg
ICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFy
YW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdM
X0JPT0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3
IEdMYm9vbGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9G
QUxTRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAg
ICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJhbXNdOwotCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1z
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9PSBHTF9DT0xPUl9DTEVBUl9WQUxV
RSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9CTEVORF9D
T0xPUikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKCgoR0xmbG9hdCkoMHhGRkZGRkZGRikgKiBmbG9hdFBh
cmFtc1tpXSAtIDEuMGYpIC8gMi4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gKEdMaW50KShmbG9hdFBhcmFtc1tpXSA+IDAuMGYgPyBmbG9vcihmbG9hdFBhcmFt
c1tpXSArIDAuNSkgOiBjZWlsKGZsb2F0UGFyYW1zW2ldIC0gMC41KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdM
dWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9
IDB4JTAuOHApIiwgcHJvZ3JhbSwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERUxFVEVfU1RBVFVTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5VTEw7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RI
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nTGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FU
VEFDSEVEX1NIQURFUlM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3Qt
PmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9BVFRSSUJVVEVTOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRF
X01BWF9MRU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdl
dEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhf
TEVOR1RIOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3Rp
dmVVbmlmb3JtTWF4TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVM6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpCi17Ci0gICAg
RVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXpl
aSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAgICAg
ICAgIHByb2dyYW0sIGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRR
dWVyeWl2RVhUKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsK
LSAgICBFVkVOVCgiR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdM
aW50ICpwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
cGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFyZ2V0KTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdl
dFF1ZXJ5T2JqZWN0dWl2RVhUKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFt
cykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpZCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBH
THVpbnQgKnBhcmFtcyA9IDB4JTAuOHApIiwgaWQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0FW
QUlMQUJMRV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVy
eU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAg
ICAgICAgIGlmICghcXVlcnlPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBl
KCkpID09IGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRj
aChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNV
TFRfRVhUOgotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1
bHQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVS
WV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBxdWVy
eU9iamVjdC0+aXNSZXN1bHRBdmFpbGFibGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
UkVOREVSQlVGRkVSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBjb250
ZXh0LT5nZXRSZW5kZXJidWZmZXIoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkpOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9XSURUSDogICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJi
dWZmZXItPmdldFdpZHRoKCk7ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1JFTkRFUkJVRkZFUl9IRUlHSFQ6ICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdl
dEhlaWdodCgpOyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUl9JTlRFUk5BTF9GT1JNQVQ6ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEludGVybmFs
Rm9ybWF0KCk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9SRURf
U0laRTogICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOiAg
ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEdyZWVuU2l6ZSgpOyAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkU6ICAgICAgICpwYXJh
bXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7ICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5k
ZXJidWZmZXItPmdldEFscGhhU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXIt
PmdldERlcHRoU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRF
UkJVRkZFUl9TVEVOQ0lMX1NJWkU6ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFN0ZW5j
aWxTaXplKCk7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9T
QU1QTEVTX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0U2hhZGVyaXYoR0x1aW50IHNoYWRlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFy
YW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTGVudW0gcG5hbWUgPSAl
ZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2hhZGVyLCBwbmFtZSwgcGFyYW1zKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRl
cik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9TSEFERVJfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hh
ZGVyT2JqZWN0LT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNo
YWRlck9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+aXNDb21waWxlZCgpID8gR0xfVFJVRSA6IEdMX0ZB
TFNFOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTkZP
X0xPR19MRU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0
SW5mb0xvZ0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
c2hhZGVyT2JqZWN0LT5nZXRTb3VyY2VMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9B
TkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xh
dGVkU291cmNlTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVySW5mb0xvZyhHTHVpbnQgc2hhZGVy
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQotewot
ICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xz
aXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAg
ICAgICAgIHNoYWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3Qg
PSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJP
YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzaGFkZXJPYmplY3Qt
PmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUs
IEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBz
aGFkZXJ0eXBlID0gMHglWCwgR0xlbnVtIHByZWNpc2lvbnR5cGUgPSAweCVYLCBHTGludCogcmFu
Z2UgPSAweCUwLjhwLCBHTGludCogcHJlY2lzaW9uID0gMHglMC44cCkiLAotICAgICAgICAgIHNo
YWRlcnR5cGUsIHByZWNpc2lvbnR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBzd2l0Y2ggKHNoYWRlcnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1ZFUlRFWF9TSEFERVI6Ci0gICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KHByZWNpc2lvbnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0xPV19GTE9BVDoK
LSAgICAgICAgICBjYXNlIEdMX01FRElVTV9GTE9BVDoKLSAgICAgICAgICBjYXNlIEdMX0hJR0hf
RkxPQVQ6Ci0gICAgICAgICAgICAvLyBBc3N1bWUgSUVFRSA3NTQgcHJlY2lzaW9uCi0gICAgICAg
ICAgICByYW5nZVswXSA9IDEyNzsKLSAgICAgICAgICAgIHJhbmdlWzFdID0gMTI3OwotICAgICAg
ICAgICAgKnByZWNpc2lvbiA9IDIzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9MT1dfSU5UOgotICAgICAgICAgIGNhc2UgR0xfTUVESVVNX0lOVDoKLSAgICAgICAgICBj
YXNlIEdMX0hJR0hfSU5UOgotICAgICAgICAgICAgLy8gU29tZSAobW9zdCkgaGFyZHdhcmUgb25s
eSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsCi0gICAg
ICAgICAgICAvLyB3aGljaCBjYW4gYWNjdXJhdGVseSByZXByZXNlbnQgaW50ZWdlcnMgdXAgdG8g
Ky8tMTY3NzcyMTYKLSAgICAgICAgICAgIHJhbmdlWzBdID0gMjQ7Ci0gICAgICAgICAgICByYW5n
ZVsxXSA9IDI0OwotICAgICAgICAgICAgKnByZWNpc2lvbiA9IDA7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKQotewotICAgIEVWRU5U
KCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xjaGFyKiBzb3VyY2UgPSAweCUwLjhwKSIsCi0gICAgICAgICAgc2hh
ZGVyLCBidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+
Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0U291
cmNlKGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxl
bmd0aCwgR0xjaGFyKiBzb3VyY2UpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQs
IEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIq
IHNvdXJjZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwg
c291cmNlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQot
ICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xhdGVkU291cmNlKGJ1ZnNpemUs
IGxlbmd0aCwgc291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi1jb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmcoR0xlbnVtIG5h
bWUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbmFtZSA9IDB4JVgpIiwgbmFtZSk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgc3dpdGNoIChuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9WRU5ET1I6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJHb29nbGUgSW5j
LiI7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJFUjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1
Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6
ICJBTkdMRSIpOwotICAgICAgICAgIGNhc2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVy
biAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICJWRVJTSU9OX1NUUklORyIpIjsKLSAg
ICAgICAgICBjYXNlIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJl
dHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKEFOR0xFICJWRVJTSU9OX1NU
UklORyIpIjsKLSAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1
cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0
cmluZygpIDogIiIpOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0ZSopTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIChHTHVieXRlKilOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0VGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZs
b2F0KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVt
IHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1l
LCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQotICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1M6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdy
YXBTKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUt
PmdldFdyYXBUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUX0VYVDoKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKEdMZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
VVNBR0VfQU5HTEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUt
PmdldFVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1B
VF9FWFQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkg
PyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gdGV4dHVyZS0+Z2V0VXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50IHBy
b2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMZmxvYXQqIHBhcmFtcykK
LXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsCi0gICAg
ICAgICAgcHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmIChidWZTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2
KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xm
bG9hdCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2Nh
dGlvbiwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9u
LCBOVUxMLCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRu
VW5pZm9ybWl2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZT
aXplLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwg
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMaW50KiBwYXJhbXMg
PSAweCUwLjhwKSIsIAotICAgICAgICAgIHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJh
bXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChw
cm9ncmFtID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwg
R0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICVkLCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCki
LCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJv
Z3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5p
Zm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotaW50IF9f
c3RkY2FsbCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFy
KiBuYW1lKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFy
KiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoc3Ryc3RyKG5hbWUsICJnbF8iKSA9PSBuYW1lKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0
LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihw
cm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
LTE7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliZnYoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhw
KSIsIGluZGV4LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0
dHJpYlN0YXRlKGluZGV4KTsKLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlF
bmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RS
SURFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3Ry
aWRlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
YXR0cmliU3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDog
R0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJ
QjoKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1D
dXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdM
RToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubURpdmlz
b3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVy
dGV4QXR0cmliaXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17
Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xp
bnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0g
Y29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0
YXRlLm1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVNpemU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9T
VFJJREU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tVHlw
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX05PUk1BTElaRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRy
aWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZG
RVJfQklORElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubUJvdW5k
QnVmZmVyLmlkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNDsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxv
YXQgY3VycmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxv
b3IoY3VycmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlzb3I7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoR0x1
aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBvaW50ZXIpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcG9pbnRl
ciA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwb2ludGVyKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4
ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAocG5hbWUgIT0gR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcG9pbnRlciA9IGNvbnN0X2Nhc3Q8R0x2
b2lkKj4oY29udGV4dC0+Z2V0VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
SGludChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gbW9kZSA9IDB4JVgpIiwgdGFyZ2V0LCBtb2RlKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9GQVNURVNUOgotICAgICAgICAgIGNhc2UgR0xfTklDRVNUOgotICAgICAgICAgIGNh
c2UgR0xfRE9OVF9DQVJFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAKLSAgICAgICAgfQot
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9H
RU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgICAgIGlmIChjb250ZXh0KSBjb250ZXh0LT5z
ZXRHZW5lcmF0ZU1pcG1hcEhpbnQobW9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOgotICAgICAgICAg
ICAgaWYgKGNvbnRleHQpIGNvbnRleHQtPnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQo
bW9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzQnVmZmVy
KEdMdWludCBidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgYnVmZmVyID0gJWQpIiwgYnVm
ZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCAmJiBidWZmZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IGNvbnRl
eHQtPmdldEJ1ZmZlcihidWZmZXIpOwotCi0gICAgICAgICAgICBpZiAoYnVmZmVyT2JqZWN0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNF
bmFibGVkKEdMZW51bSBjYXApCi17Ci0gICAgRVZFTlQoIihHTGVudW0gY2FwID0gMHglWCkiLCBj
YXApOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0N1bGxG
YWNlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4gY29udGV4
dC0+aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVDb3Zl
cmFnZUVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlz
U3RlbmNpbFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDog
ICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC0+aXNCbGVuZEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdMYm9vbGVh
biBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1
aW50IGZlbmNlID0gJWQpIiwgZmVuY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0
ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmpl
Y3QgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkFM
U0U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmZW5jZU9iamVjdC0+aXNG
ZW5jZSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGds
SXNGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
ZnJhbWVidWZmZXIgPSAlZCkiLCBmcmFtZWJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQgJiYgZnJhbWVidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAg
IH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElz
UHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0g
JWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQg
JiYgcHJvZ3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAo
cHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xf
VFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
R0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFu
IF9fc3RkY2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IGlkKQotewotICAgIEVWRU5UKCIoR0x1aW50
IGlkID0gJWQpIiwgaWQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaWQgPT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpx
dWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAg
ICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0K
LQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZm
ZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgcmVuZGVyYnVm
ZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCAmJiByZW5kZXJi
dWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotCi0g
ICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZB
TFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNTaGFkZXIoR0x1aW50IHNoYWRlcikK
LXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHNoYWRlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNo
YWRlcik7Ci0KLSAgICAgICAgICAgIGlmIChzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
R0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1RleHR1cmUoR0x1aW50IHRl
eHR1cmUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgdGV4dHVyZSA9ICVkKSIsIHRleHR1cmUpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHRleHR1cmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQotICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsTGluZVdpZHRo
KEdMZmxvYXQgd2lkdGgpCi17Ci0gICAgRVZFTlQoIihHTGZsb2F0IHdpZHRoID0gJWYpIiwgd2lk
dGgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAod2lkdGggPD0gMC4wZikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0TGluZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbExpbmtQcm9ncmFtKEdMdWludCBw
cm9ncmFtKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmxpbmsoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFBpeGVsU3RvcmVpKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVY
LCBHTGludCBwYXJhbSA9ICVkKSIsIHBuYW1lLCBwYXJhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVO
VDoKLSAgICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFt
ICE9IDQgJiYgcGFyYW0gIT0gOCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRVbnBhY2tBbGlnbm1lbnQocGFyYW0pOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1F
TlQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJh
bSAhPSA0ICYmIHBhcmFtICE9IDgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja0FsaWdubWVudChwYXJhbSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0Vf
Uk9XX09SREVSX0FOR0xFOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFBhY2tSZXZlcnNl
Um93T3JkZXIocGFyYW0gIT0gMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0
b3IsIEdMZmxvYXQgdW5pdHMpCi17Ci0gICAgRVZFTlQoIihHTGZsb2F0IGZhY3RvciA9ICVmLCBH
TGZsb2F0IHVuaXRzID0gJWYpIiwgZmFjdG9yLCB1bml0cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dFBvbHlnb25PZmZzZXRQYXJhbXMoZmFjdG9yLCB1bml0cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkblBpeGVs
c0VYVChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMc2l6ZWkgYnVmU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x2b2lk
ICpkYXRhKQotewotICAgIEVWRU5UKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6
ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgotICAgICAgICAgICJHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVpIGJ1ZlNpemUgPSAweCVk
LCBHTHZvaWQgKmRhdGEgPSAweCUwLjhwKSIsCi0gICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBidWZTaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IGJ1ZlNpemUgPCAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAm
YnVmU2l6ZSwgZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVscykKLXsKLSAgICBFVkVO
VCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51
bSB0eXBlID0gMHglWCwgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAgcGl4ZWxzKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBOVUxMLCBw
aXhlbHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKHZvaWQpCi17Ci0gICAgRVZF
TlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpTaGFkZXI6OnJlbGVhc2VD
b21waWxlcigpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
THNpemVpIHNhbXBsZXMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXpl
aSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBz
YW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9S
RU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJ
c0RlcHRoUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJc1N0ZW5jaWxSZW5kZXJh
YmxlKGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1h
eGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQg
PiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAg
ICAgICAgICBzYW1wbGVzID4gY29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgR0x1aW50IGhhbmRsZSA9IGNvbnRleHQt
PmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSAwKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxm
b3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UMTY6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShu
ZXcgZ2w6OkRlcHRoYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6
OkNvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcg
Z2w6OlN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpE
ZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlQU5HTEUodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdM
Ym9vbGVhbiBpbnZlcnQpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiB2YWx1ZSA9ICVmLCBHTGJv
b2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFsdWUsIGludmVydCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dFNhbXBsZUNvdmVyYWdlUGFyYW1zKGdsOjpjbGFtcDAxKHZhbHVlKSwgaW52ZXJ0ID09IEdMX1RS
VUUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsU2V0RmVuY2VOVihHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24p
Ci17Ci0gICAgRVZFTlQoIihHTHVpbnQgZmVuY2UgPSAlZCwgR0xlbnVtIGNvbmRpdGlvbiA9IDB4
JVgpIiwgZmVuY2UsIGNvbmRpdGlvbik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChj
b25kaXRpb24gIT0gR0xfQUxMX0NPTVBMRVRFRF9OVikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0
ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmpl
Y3QgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5j
ZU9iamVjdC0+c2V0RmVuY2UoY29uZGl0aW9uKTsgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTY2lzc29yKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5U
KCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXpl
aSBoZWlnaHQgPSAlZCkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCogY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lz
c29yUGFyYW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25z
dCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpCi17Ci0gICAgRVZFTlQoIihHTHNpemVp
IG4gPSAlZCwgY29uc3QgR0x1aW50KiBzaGFkZXJzID0gMHglMC44cCwgR0xlbnVtIGJpbmFyeWZv
cm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhw
LCBHTHNpemVpIGxlbmd0aCA9ICVkKSIsCi0gICAgICAgICAgbiwgc2hhZGVycywgYmluYXJ5Zm9y
bWF0LCBiaW5hcnksIGxlbmd0aCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIC8vIE5vIGJp
bmFyeSBzaGFkZXIgZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQotewotICAgIEVW
RU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hh
cioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhwKSIsCi0g
ICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBj
b250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmpl
Y3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dy
YW0oc2hhZGVyKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+c2V0U291cmNlKGNvdW50LCBzdHJp
bmcsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsRnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVm
LCBHTHVpbnQgbWFzaykKLXsKLSAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xfRlJPTlRfQU5E
X0JBQ0ssIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1
bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1h
c2spCi17Ci0gICAgRVZFTlQoIihHTGVudW0gZmFjZSA9IDB4JVgsIEdMZW51bSBmdW5jID0gMHgl
WCwgR0xpbnQgcmVmID0gJWQsIEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgZnVuYywgcmVmLCBt
YXNrKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAg
ICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZnVuYykKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfTkVWRVI6Ci0gICAgICAgICAgY2FzZSBHTF9BTFdBWVM6Ci0gICAgICAgICAgY2Fz
ZSBHTF9MRVNTOgotICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgotICAgICAgICAgIGNhc2UgR0xf
RVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9HRVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9HUkVB
VEVSOgotICAgICAgICAgIGNhc2UgR0xfTk9URVFVQUw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNL
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxQYXJh
bXMoZnVuYywgcmVmLCBtYXNrKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZh
Y2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxCYWNrUGFyYW1zKGZ1bmMsIHJl
ZiwgbWFzayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsTWFzayhHTHVpbnQgbWFz
aykKLXsKLSAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIG1hc2sp
OwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2Us
IEdMdWludCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTHVpbnQg
bWFzayA9ICVkKSIsIGZhY2UsIG1hc2spOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0
Y2ggKGZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICAg
IGNhc2UgR0xfQkFDSzoKLSAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBH
TF9GUk9OVF9BTkRfQkFDSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdGVuY2lsV3JpdGVtYXNrKG1hc2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tXcml0ZW1h
c2sobWFzayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3AoR0xlbnVtIGZhaWws
IEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQotewotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUo
R0xfRlJPTlRfQU5EX0JBQ0ssIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsU3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0g
emZhaWwsIEdMZW51bSB6cGFzcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBmYWNlID0gMHglWCwg
R0xlbnVtIGZhaWwgPSAweCVYLCBHTGVudW0gemZhaWwgPSAweCVYLCBHTGVudW0genBhcyA9IDB4
JVhzKSIsCi0gICAgICAgICAgZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9O
VF9BTkRfQkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN3aXRjaCAoZmFpbCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAg
ICAgICAgICBjYXNlIEdMX0tFRVA6Ci0gICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgotICAgICAg
ICAgIGNhc2UgR0xfSU5DUjoKLSAgICAgICAgICBjYXNlIEdMX0RFQ1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9JTlZFUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6Ci0gICAgICAgICAgY2Fz
ZSBHTF9ERUNSX1dSQVA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzd2l0Y2ggKHpmYWlsKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9aRVJP
OgotICAgICAgICAgIGNhc2UgR0xfS0VFUDoKLSAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6Ci0g
ICAgICAgICAgY2FzZSBHTF9JTkNSOgotICAgICAgICAgIGNhc2UgR0xfREVDUjoKLSAgICAgICAg
ICBjYXNlIEdMX0lOVkVSVDoKLSAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKLSAgICAgICAg
ICBjYXNlIEdMX0RFQ1JfV1JBUDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN3aXRjaCAoenBhc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9LRUVQOgotICAgICAgICAgIGNhc2UgR0xfUkVQTEFD
RToKLSAgICAgICAgICBjYXNlIEdMX0lOQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSOgotICAg
ICAgICAgIGNhc2UgR0xfSU5WRVJUOgotICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgotICAg
ICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsT3BlcmF0aW9ucyhm
YWlsLCB6ZmFpbCwgenBhc3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmFj
ZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKGZhaWws
IHpmYWlsLCB6cGFzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5W
KEdMdWludCBmZW5jZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkKSIsIGZlbmNl
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZl
bmNlKTsKLQotICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBH
TF9UUlVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZlbmNlT2JqZWN0
LT50ZXN0RmVuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIEdMX1RSVUU7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxz
KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQs
IEdMaW50IGludGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBo
ZWlnaHQgPSAlZCwgIgotICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1h
dCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHgl
MC44cCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBh
cyBzZWNvbmRhcnkga2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2Fz
ZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPGZvcm1h
dD4gKyA8dHlwZT4gY29tYmluYXRpb25zCi0gICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0PiAt
PiBzZXRzIElOVkFMSURfRU5VTQotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+
IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICAgICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCX1MzVENfRFhUMV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0
dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQzX0FOR0xFOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRToKLSAgICAgICAgICAgIGJyZWFrOyAKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfREVQVEhf
U1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYg
KHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwp
IHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4
dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0
TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSA+PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUMVRl
eHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAv
LyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEgYW5kIG11bHRp
cGxlIGxldmVscywKLSAgICAgICAgICAgICAgICAvLyBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBk
b2VzIG5vdAotICAgICAgICAgICAgICAgIGlmIChwaXhlbHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAw
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1t
dXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
TmVnWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZU5lZ1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4
ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pCi17Ci0gICAgZ2xUZXhQYXJh
bWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGludClwYXJhbSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsVGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZs
b2F0KiBwYXJhbXMpCi17Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGlu
dCkqcGFyYW1zKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pCi17Ci0gICAgRVZFTlQoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCB0
YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCi0g
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
LT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIo
KEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVS
OgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFy
YW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBnbFRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBwbmFtZSwgKnBhcmFtcyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4
U3RvcmFnZTJERVhUKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgbGV2ZWxzID0gJWQsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCki
LAotICAgICAgICAgICB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVf
MkQgJiYgdGFyZ2V0ICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoIDwgMSB8fCBoZWlnaHQgPCAxIHx8IGxldmVscyA8IDEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWln
aHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiBsZXZlbHMgIT0gZ2w6
OmxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpICsgMSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0g
ICAgICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLQot
ICAgICAgICBpZiAoZm9ybWF0ID09IEdMX05PTkUgfHwgdHlwZSA9PSBHTF9OT05FKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5n
ZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdo
dCA+IGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxICYmICFj
b250ZXh0LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWdsOjppc1BvdzIod2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0JBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgICAgICAgICBj
YXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBH
TF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwg
dGV4dHVyZXMKLSAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgp
ID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8
fCB0ZXh0dXJlLT5pZCgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykK
LXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTHNp
emVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVY
LCBHTGVudW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMg
PSAweCUwLjhwKSIsCi0gICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAw
IHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3Rk
OjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3Rk
OjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBl
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQgYnkgaGVs
cGVyIGZ1bmN0aW9uCi0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxl
dmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09
IEdMX0ZMT0FUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9IQUxG
X0ZMT0FUX09FUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1
cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0
aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3Rl
eHR1cmUgZG9lcyBub3QKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8
fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9m
ZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tB
bGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5n
ZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBs
b2NhdGlvbiwgR0xmbG9hdCB4KQotewotICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgMSwgJngp
OwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlv
biA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3Vu
dCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0
LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2Nh
dGlvbiwgR0xpbnQgeCkKLXsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9u
LCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJy
ZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlvbiwgR0xm
bG9hdCB4LCBHTGZsb2F0IHkpCi17Ci0gICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsKLQotICAg
IGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50
LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdM
aW50IHgsIEdMaW50IHkpCi17Ci0gICAgR0xpbnQgeHlbNF0gPSB7eCwgeX07Ci0KLSAgICBnbFVu
aWZvcm0yaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0zZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeikKLXsKLSAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6fTsKLQotICAgIGds
VW5pZm9ybTNmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXopOwotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwg
dik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xpbnQgeikKLXsKLSAgICBHTGludCB4eXpbM10gPSB7eCwgeSwgen07Ci0KLSAgICBn
bFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5eik7Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsK
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+
c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9h
dCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKLXsKLSAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwg
eSwgeiwgd307Ci0KLSAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6
dyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHAp
IiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNv
dW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRl
eHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxv
Y2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQotewotICAgIEdMaW50
IHh5endbNF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIDEs
IChHTGludCopJnh5encpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQotewotICAgIEVWRU5UKCIo
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9
IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0x
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24s
IGNvdW50LCB2KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1h
dHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwg
MCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBFVkVO
VCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRy
YW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAg
ICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlKQotewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9
IEdMX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
Y291bnQsIHZhbHVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVXNlUHJv
Z3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQp
IiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
ICYmIHByb2dyYW0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAh
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4KQotewot
ICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmKSIsIGluZGV4LCB4
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYjFmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBF
VkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhw
KSIsIGluZGV4LCB2YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNb
MF0sIDAsIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQg
eCwgR0xmbG9hdCB5KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQg
eCA9ICVmLCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRl
eEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXgg
PSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEg
fTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5
LCBHTGZsb2F0IHopCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4
ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWIzZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCki
LCBpbmRleCwgdmFsdWVzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBd
LCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmKEdMdWludCBp
bmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAg
IEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAl
ZiwgR0xmbG9hdCB6ID0gJWYsIEdMZmxvYXQgdyA9ICVmKSIsIGluZGV4LCB4LCB5LCB6LCB3KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OwotICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjRmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBFVkVO
VCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIs
IGluZGV4LCB2YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4
LCB2YWx1ZXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRl
eCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0x1
aW50IGRpdmlzb3IgPSAlZCkiLCBpbmRleCwgZGl2aXNvcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYlBvaW50ZXIoR0x1aW50IGluZGV4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29s
ZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikKLXsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBl
ID0gMHglWCwgIgotICAgICAgICAgICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICVkLCBHTHNpemVp
IHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHB0ciA9IDB4JTAuOHApIiwKLSAgICAgICAgICBp
bmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBwdHIpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6Ci0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX0ZJ
WEVEOgotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCksIHNpemUsIHR5
cGUsIChub3JtYWxpemVkID09IEdMX1RSVUUpLCBzdHJpZGUsIHB0cik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWaWV3
cG9ydChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBFVkVOVCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0g
JWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4
dC0+c2V0Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0
RnJhbWVidWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBH
TGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQg
ZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQg
bWFzaywgR0xlbnVtIGZpbHRlcikKLXsKLSAgICBFVkVOVCgiKEdMaW50IHNyY1gwID0gJWQsIEdM
aW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNyY1kxID0gJWQsICIKLSAg
ICAgICAgICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xpbnQgZHN0WDEg
PSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgIgotICAgICAgICAgICJHTGJpdGZpZWxkIG1hc2sgPSAw
eCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAotICAgICAgICAgIHNyY1gwLCBzcmNZMCwgc3Jj
WDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKSkgIT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RYMCB8fCBzcmNZMSAtIHNy
Y1kwICE9IGRzdFkxIC0gZHN0WTApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2NhbGlu
ZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBieSB0
aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgp
ID09IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEVSUigiQmxpdHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24uIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVy
KHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwg
bWFzayk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQotewot
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVk
LCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9
ICVkLCAiCi0gICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4
JXgsIGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gKmJpbmFyeUZvcm1hdCwgdm9pZCAqYmluYXJ5KQotewotICAgIEVW
RU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBidWZTaXplID0gJXMsIGxlbmd0aCA9IDB4JTAu
OHAsIGJpbmFyeUZvcm1hdCA9IDB4JTAuOHAsIGJpbmFyeSA9IDB4JTAuOHApIiwKLSAgICAgICAg
ICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwgYmluYXJ5KTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAq
YmluYXJ5Rm9ybWF0ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7Ci0KLSAgICAgICAgICAgIGlm
IChsZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gYmluYXJ5Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHBy
b2dyYW0gPSAweCVYLCBiaW5hcnlGb3JtYXQgPSAweCV4LCBiaW5hcnkgPSAweCUwLjhwLCBsZW5n
dGggPSAlZCkiLAotICAgICAgICAgIHByb2dyYW0sIGJpbmFyeUZvcm1hdCwgYmluYXJ5LCBsZW5n
dGgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoYmluYXJ5Rm9ybWF0ICE9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xF
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBwcm9ncmFtT2JqZWN0LT5zZXRQcm9ncmFtQmluYXJ5KE5VTEwpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLV9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAq
cHJvY25hbWUpCi17Ci0gICAgc3RydWN0IEV4dGVuc2lvbgotICAgIHsKLSAgICAgICAgY29uc3Qg
Y2hhciAqbmFtZTsKLSAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSBhZGRyZXNzOwotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0
ZW5zaW9uc1tdID0KLSAgICB7Ci0gICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKLSAgICAg
ICAgeyJnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xCbGl0RnJhbWVidWZmZXJBTkdMRX0sCi0gICAgICAgIHsiZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEV9
LAotICAgICAgICB7ImdsRGVsZXRlRmVuY2VzTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERlbGV0ZUZlbmNlc05WfSwKLSAgICAgICAgeyJnbEdlbkZlbmNl
c05WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5GZW5j
ZXNOVn0sCi0gICAgICAgIHsiZ2xJc0ZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbElzRmVuY2VOVn0sCi0gICAgICAgIHsiZ2xUZXN0RmVuY2VOViIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGVzdEZlbmNlTlZ9
LAotICAgICAgICB7ImdsR2V0RmVuY2Vpdk5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xHZXRGZW5jZWl2TlZ9LAotICAgICAgICB7ImdsRmluaXNoRmVuY2VO
ViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRmluaXNoRmVu
Y2VOVn0sCi0gICAgICAgIHsiZ2xTZXRGZW5jZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xTZXRGZW5jZU5WfSwKLSAgICAgICAgeyJnbEdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2VBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50
ZXJUeXBlKWdsR2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFfSwKLSAgICAgICAgeyJnbFRl
eFN0b3JhZ2UyREVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsVGV4U3RvcmFnZTJERVhUfSwKLSAgICAgICAgeyJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNF
WFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldEdyYXBo
aWNzUmVzZXRTdGF0dXNFWFR9LAotICAgICAgICB7ImdsUmVhZG5QaXhlbHNFWFQiLCAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFJlYWRuUGl4ZWxzRVhUfSwKLSAg
ICAgICAgeyJnbEdldG5Vbmlmb3JtZnZFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbEdldG5Vbmlmb3JtZnZFWFR9LAotICAgICAgICB7ImdsR2V0blVuaWZv
cm1pdkVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0
blVuaWZvcm1pdkVYVH0sCi0gICAgICAgIHsiZ2xHZW5RdWVyaWVzRVhUIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5RdWVyaWVzRVhUfSwKLSAgICAgICAg
eyJnbERlbGV0ZVF1ZXJpZXNFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbERlbGV0ZVF1ZXJpZXNFWFR9LAotICAgICAgICB7ImdsSXNRdWVyeUVYVCIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsSXNRdWVyeUVYVH0sCi0g
ICAgICAgIHsiZ2xCZWdpblF1ZXJ5RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xCZWdpblF1ZXJ5RVhUfSwKLSAgICAgICAgeyJnbEVuZFF1ZXJ5RVhUIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xFbmRRdWVyeUVYVH0s
Ci0gICAgICAgIHsiZ2xHZXRRdWVyeWl2RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xHZXRRdWVyeWl2RVhUfSwKLSAgICAgICAgeyJnbEdldFF1ZXJ5T2Jq
ZWN0dWl2RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xH
ZXRRdWVyeU9iamVjdHVpdkVYVH0sCi0gICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5H
TEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRX0sCi0gICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUi
LCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRX0sCi0gICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEV9LAotICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9F
U30sCi0gICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3Bl
ckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKLQotICAgIGZv
ciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVu
c2lvbik7IGV4dCsrKQotICAgIHsKLSAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZ2xFeHRl
bnNpb25zW2V4dF0ubmFtZSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRXh0ZW5zaW9uc1tleHRd
LmFkZHJlc3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLy8g
Tm9uLXB1YmxpYyBmdW5jdGlvbnMgdXNlZCBieSBFR0wKLQotYm9vbCBfX3N0ZGNhbGwgZ2xCaW5k
VGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIEVWRU5UKCIoZWdsOjpTdXJm
YWNlKiBzdXJmYWNlID0gMHglMC44cCkiLAotICAgICAgICAgIHN1cmZhY2UpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0K
LSAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZU9iamVjdC0+YmluZFRleEltYWdlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZWE3NzY5Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotTElCUkFS
WSBsaWJHTEVTdjIKLUVYUE9SVFMKLSAgICBnbEFjdGl2ZVRleHR1cmUgICAgICAgICAgICAgICAg
IEAxCi0gICAgZ2xBdHRhY2hTaGFkZXIgICAgICAgICAgICAgICAgICBAMgotICAgIGdsQmluZEF0
dHJpYkxvY2F0aW9uICAgICAgICAgICAgQDMKLSAgICBnbEJpbmRCdWZmZXIgICAgICAgICAgICAg
ICAgICAgIEA0Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIgICAgICAgICAgICAgICBANQotICAgIGds
QmluZFJlbmRlcmJ1ZmZlciAgICAgICAgICAgICAgQDYKLSAgICBnbEJpbmRUZXh0dXJlICAgICAg
ICAgICAgICAgICAgIEA3Ci0gICAgZ2xCbGVuZENvbG9yICAgICAgICAgICAgICAgICAgICBAOAot
ICAgIGdsQmxlbmRFcXVhdGlvbiAgICAgICAgICAgICAgICAgQDkKLSAgICBnbEJsZW5kRXF1YXRp
b25TZXBhcmF0ZSAgICAgICAgIEAxMAotICAgIGdsQmxlbmRGdW5jICAgICAgICAgICAgICAgICAg
ICAgQDExCi0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgICBAMTIKLSAgICBnbEJ1
ZmZlckRhdGEgICAgICAgICAgICAgICAgICAgIEAxMwotICAgIGdsQnVmZmVyU3ViRGF0YSAgICAg
ICAgICAgICAgICAgQDE0Ci0gICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzICAgICAgICBAMTUK
LSAgICBnbENsZWFyICAgICAgICAgICAgICAgICAgICAgICAgIEAxNgotICAgIGdsQ2xlYXJDb2xv
ciAgICAgICAgICAgICAgICAgICAgQDE3Ci0gICAgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAg
ICAgICBAMTgKLSAgICBnbENsZWFyU3RlbmNpbCAgICAgICAgICAgICAgICAgIEAxOQotICAgIGds
Q29sb3JNYXNrICAgICAgICAgICAgICAgICAgICAgQDIwCi0gICAgZ2xDb21waWxlU2hhZGVyICAg
ICAgICAgICAgICAgICBAMjEKLSAgICBnbENvbXByZXNzZWRUZXhJbWFnZTJEICAgICAgICAgIEAy
MgotICAgIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQgICAgICAgQDIzCi0gICAgZ2xDb3B5VGV4
SW1hZ2UyRCAgICAgICAgICAgICAgICBAMjQKLSAgICBnbENvcHlUZXhTdWJJbWFnZTJEICAgICAg
ICAgICAgIEAyNQotICAgIGdsQ3JlYXRlUHJvZ3JhbSAgICAgICAgICAgICAgICAgQDI2Ci0gICAg
Z2xDcmVhdGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMjcKLSAgICBnbEN1bGxGYWNlICAgICAg
ICAgICAgICAgICAgICAgIEAyOAotICAgIGdsRGVsZXRlQnVmZmVycyAgICAgICAgICAgICAgICAg
QDI5Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMgICAgICAgICAgICBAMzAKLSAgICBnbERlbGV0
ZVByb2dyYW0gICAgICAgICAgICAgICAgIEAzMgotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAg
ICAgICAgICAgQDMzCi0gICAgZ2xEZWxldGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMzQKLSAg
ICBnbERlbGV0ZVRleHR1cmVzICAgICAgICAgICAgICAgIEAzMQotICAgIGdsRGVwdGhGdW5jICAg
ICAgICAgICAgICAgICAgICAgQDM2Ci0gICAgZ2xEZXB0aE1hc2sgICAgICAgICAgICAgICAgICAg
ICBAMzcKLSAgICBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgIEAzOAotICAgIGdsRGV0
YWNoU2hhZGVyICAgICAgICAgICAgICAgICAgQDM1Ci0gICAgZ2xEaXNhYmxlICAgICAgICAgICAg
ICAgICAgICAgICBAMzkKLSAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgIEA0MAot
ICAgIGdsRHJhd0FycmF5cyAgICAgICAgICAgICAgICAgICAgQDQxCi0gICAgZ2xEcmF3RWxlbWVu
dHMgICAgICAgICAgICAgICAgICBANDIKLSAgICBnbEVuYWJsZSAgICAgICAgICAgICAgICAgICAg
ICAgIEA0MwotICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICAgQDQ0Ci0gICAgZ2xG
aW5pc2ggICAgICAgICAgICAgICAgICAgICAgICBANDUKLSAgICBnbEZsdXNoICAgICAgICAgICAg
ICAgICAgICAgICAgIEA0NgotICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgICAgICAgQDQ3
Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAgICAgICAgICBANDgKLSAgICBnbEZyb250RmFj
ZSAgICAgICAgICAgICAgICAgICAgIEA0OQotICAgIGdsR2VuQnVmZmVycyAgICAgICAgICAgICAg
ICAgICAgQDUwCi0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMgICAgICAgICAgICAgICBANTIKLSAgICBn
bEdlblJlbmRlcmJ1ZmZlcnMgICAgICAgICAgICAgIEA1MwotICAgIGdsR2VuVGV4dHVyZXMgICAg
ICAgICAgICAgICAgICAgQDU0Ci0gICAgZ2xHZW5lcmF0ZU1pcG1hcCAgICAgICAgICAgICAgICBA
NTEKLSAgICBnbEdldEFjdGl2ZUF0dHJpYiAgICAgICAgICAgICAgIEA1NQotICAgIGdsR2V0QWN0
aXZlVW5pZm9ybSAgICAgICAgICAgICAgQDU2Ci0gICAgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgICAg
ICAgICAgICBANTcKLSAgICBnbEdldEF0dHJpYkxvY2F0aW9uICAgICAgICAgICAgIEA1OAotICAg
IGdsR2V0Qm9vbGVhbnYgICAgICAgICAgICAgICAgICAgQDU5Ci0gICAgZ2xHZXRCdWZmZXJQYXJh
bWV0ZXJpdiAgICAgICAgICBANjAKLSAgICBnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAg
IEA2MQotICAgIGdsR2V0RmxvYXR2ICAgICAgICAgICAgICAgICAgICAgQDYyCi0gICAgZ2xHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAgIEA2MwotICAgIGdsR2V0SW50ZWdlcnYg
ICAgICAgICAgICAgICAgICAgQDY0Ci0gICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyAgICAgICAgICAg
ICBANjYKLSAgICBnbEdldFByb2dyYW1pdiAgICAgICAgICAgICAgICAgIEA2NQotICAgIGdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgICAgQDY3Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nICAg
ICAgICAgICAgICBANjkKLSAgICBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAgICAgIEA3MAot
ICAgIGdsR2V0U2hhZGVyU291cmNlICAgICAgICAgICAgICAgQDcxCi0gICAgZ2xHZXRTaGFkZXJp
diAgICAgICAgICAgICAgICAgICBANjgKLSAgICBnbEdldFN0cmluZyAgICAgICAgICAgICAgICAg
ICAgIEA3MgotICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgQDczCi0gICAgZ2xH
ZXRUZXhQYXJhbWV0ZXJpdiAgICAgICAgICAgICBANzQKLSAgICBnbEdldFVuaWZvcm1Mb2NhdGlv
biAgICAgICAgICAgIEA3NwotICAgIGdsR2V0VW5pZm9ybWZ2ICAgICAgICAgICAgICAgICAgQDc1
Ci0gICAgZ2xHZXRVbmlmb3JtaXYgICAgICAgICAgICAgICAgICBANzYKLSAgICBnbEdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2ICAgICAgIEA4MAotICAgIGdsR2V0VmVydGV4QXR0cmliZnYgICAgICAg
ICAgICAgQDc4Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAgICAgICAgICAgICBANzkKLSAgICBn
bEhpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIEA4MQotICAgIGdsSXNCdWZmZXIgICAgICAg
ICAgICAgICAgICAgICAgQDgyCi0gICAgZ2xJc0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICBA
ODMKLSAgICBnbElzRnJhbWVidWZmZXIgICAgICAgICAgICAgICAgIEA4NAotICAgIGdsSXNQcm9n
cmFtICAgICAgICAgICAgICAgICAgICAgQDg1Ci0gICAgZ2xJc1JlbmRlcmJ1ZmZlciAgICAgICAg
ICAgICAgICBAODYKLSAgICBnbElzU2hhZGVyICAgICAgICAgICAgICAgICAgICAgIEA4NwotICAg
IGdsSXNUZXh0dXJlICAgICAgICAgICAgICAgICAgICAgQDg4Ci0gICAgZ2xMaW5lV2lkdGggICAg
ICAgICAgICAgICAgICAgICBAODkKLSAgICBnbExpbmtQcm9ncmFtICAgICAgICAgICAgICAgICAg
IEA5MAotICAgIGdsUGl4ZWxTdG9yZWkgICAgICAgICAgICAgICAgICAgQDkxCi0gICAgZ2xQb2x5
Z29uT2Zmc2V0ICAgICAgICAgICAgICAgICBAOTIKLSAgICBnbFJlYWRQaXhlbHMgICAgICAgICAg
ICAgICAgICAgIEA5MwotICAgIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICAgICAgICAgQDk0Ci0g
ICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlICAgICAgICAgICBAOTUKLSAgICBnbFNhbXBsZUNvdmVy
YWdlICAgICAgICAgICAgICAgIEA5NgotICAgIGdsU2Npc3NvciAgICAgICAgICAgICAgICAgICAg
ICAgQDk3Ci0gICAgZ2xTaGFkZXJCaW5hcnkgICAgICAgICAgICAgICAgICBAOTgKLSAgICBnbFNo
YWRlclNvdXJjZSAgICAgICAgICAgICAgICAgIEA5OQotICAgIGdsU3RlbmNpbEZ1bmMgICAgICAg
ICAgICAgICAgICAgQDEwMAotICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgQDEw
MQotICAgIGdsU3RlbmNpbE1hc2sgICAgICAgICAgICAgICAgICAgQDEwMgotICAgIGdsU3RlbmNp
bE1hc2tTZXBhcmF0ZSAgICAgICAgICAgQDEwMwotICAgIGdsU3RlbmNpbE9wICAgICAgICAgICAg
ICAgICAgICAgQDEwNAotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUgICAgICAgICAgICAgQDEwNQot
ICAgIGdsVGV4SW1hZ2UyRCAgICAgICAgICAgICAgICAgICAgQDEwNgotICAgIGdsVGV4UGFyYW1l
dGVyZiAgICAgICAgICAgICAgICAgQDEwNwotICAgIGdsVGV4UGFyYW1ldGVyZnYgICAgICAgICAg
ICAgICAgQDEwOAotICAgIGdsVGV4UGFyYW1ldGVyaSAgICAgICAgICAgICAgICAgQDEwOQotICAg
IGdsVGV4UGFyYW1ldGVyaXYgICAgICAgICAgICAgICAgQDExMAotICAgIGdsVGV4U3ViSW1hZ2Uy
RCAgICAgICAgICAgICAgICAgQDExMQotICAgIGdsVW5pZm9ybTFmICAgICAgICAgICAgICAgICAg
ICAgQDExMgotICAgIGdsVW5pZm9ybTFmdiAgICAgICAgICAgICAgICAgICAgQDExMwotICAgIGds
VW5pZm9ybTFpICAgICAgICAgICAgICAgICAgICAgQDExNAotICAgIGdsVW5pZm9ybTFpdiAgICAg
ICAgICAgICAgICAgICAgQDExNQotICAgIGdsVW5pZm9ybTJmICAgICAgICAgICAgICAgICAgICAg
QDExNgotICAgIGdsVW5pZm9ybTJmdiAgICAgICAgICAgICAgICAgICAgQDExNwotICAgIGdsVW5p
Zm9ybTJpICAgICAgICAgICAgICAgICAgICAgQDExOAotICAgIGdsVW5pZm9ybTJpdiAgICAgICAg
ICAgICAgICAgICAgQDExOQotICAgIGdsVW5pZm9ybTNmICAgICAgICAgICAgICAgICAgICAgQDEy
MAotICAgIGdsVW5pZm9ybTNmdiAgICAgICAgICAgICAgICAgICAgQDEyMQotICAgIGdsVW5pZm9y
bTNpICAgICAgICAgICAgICAgICAgICAgQDEyMgotICAgIGdsVW5pZm9ybTNpdiAgICAgICAgICAg
ICAgICAgICAgQDEyMwotICAgIGdsVW5pZm9ybTRmICAgICAgICAgICAgICAgICAgICAgQDEyNAot
ICAgIGdsVW5pZm9ybTRmdiAgICAgICAgICAgICAgICAgICAgQDEyNQotICAgIGdsVW5pZm9ybTRp
ICAgICAgICAgICAgICAgICAgICAgQDEyNgotICAgIGdsVW5pZm9ybTRpdiAgICAgICAgICAgICAg
ICAgICAgQDEyNwotICAgIGdsVW5pZm9ybU1hdHJpeDJmdiAgICAgICAgICAgICAgQDEyOAotICAg
IGdsVW5pZm9ybU1hdHJpeDNmdiAgICAgICAgICAgICAgQDEyOQotICAgIGdsVW5pZm9ybU1hdHJp
eDRmdiAgICAgICAgICAgICAgQDEzMAotICAgIGdsVXNlUHJvZ3JhbSAgICAgICAgICAgICAgICAg
ICAgQDEzMQotICAgIGdsVmFsaWRhdGVQcm9ncmFtICAgICAgICAgICAgICAgQDEzMgotICAgIGds
VmVydGV4QXR0cmliMWYgICAgICAgICAgICAgICAgQDEzMwotICAgIGdsVmVydGV4QXR0cmliMWZ2
ICAgICAgICAgICAgICAgQDEzNAotICAgIGdsVmVydGV4QXR0cmliMmYgICAgICAgICAgICAgICAg
QDEzNQotICAgIGdsVmVydGV4QXR0cmliMmZ2ICAgICAgICAgICAgICAgQDEzNgotICAgIGdsVmVy
dGV4QXR0cmliM2YgICAgICAgICAgICAgICAgQDEzNwotICAgIGdsVmVydGV4QXR0cmliM2Z2ICAg
ICAgICAgICAgICAgQDEzOAotICAgIGdsVmVydGV4QXR0cmliNGYgICAgICAgICAgICAgICAgQDEz
OQotICAgIGdsVmVydGV4QXR0cmliNGZ2ICAgICAgICAgICAgICAgQDE0MAotICAgIGdsVmVydGV4
QXR0cmliUG9pbnRlciAgICAgICAgICAgQDE0MQotICAgIGdsVmlld3BvcnQgICAgICAgICAgICAg
ICAgICAgICAgQDE0MgotCi0gICAgOyBFeHRlbnNpb25zCi0gICAgZ2xUZXhJbWFnZTNET0VTICAg
ICAgICAgICAgICAgICBAMTQzCi0gICAgZ2xCbGl0RnJhbWVidWZmZXJBTkdMRSAgICAgICAgICBA
MTQ5Ci0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSBAMTUwCi0gICAg
Z2xEZWxldGVGZW5jZXNOViAgICAgICAgICAgICAgICBAMTUxCi0gICAgZ2xGaW5pc2hGZW5jZU5W
ICAgICAgICAgICAgICAgICBAMTUyCi0gICAgZ2xHZW5GZW5jZXNOViAgICAgICAgICAgICAgICAg
ICBAMTUzCi0gICAgZ2xHZXRGZW5jZWl2TlYgICAgICAgICAgICAgICAgICBAMTU0Ci0gICAgZ2xJ
c0ZlbmNlTlYgICAgICAgICAgICAgICAgICAgICBAMTU1Ci0gICAgZ2xTZXRGZW5jZU5WICAgICAg
ICAgICAgICAgICAgICBAMTU2Ci0gICAgZ2xUZXN0RmVuY2VOViAgICAgICAgICAgICAgICAgICBA
MTU3Ci0gICAgZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUgQDE1OQotICAgIGdsVGV4
U3RvcmFnZTJERVhUICAgICAgICAgICAgICAgQDE2MAotICAgIGdsR2V0R3JhcGhpY3NSZXNldFN0
YXR1c0VYVCAgICAgQDE2MQotICAgIGdsUmVhZG5QaXhlbHNFWFQgICAgICAgICAgICAgICAgQDE2
MgotICAgIGdsR2V0blVuaWZvcm1mdkVYVCAgICAgICAgICAgICAgQDE2MwotICAgIGdsR2V0blVu
aWZvcm1pdkVYVCAgICAgICAgICAgICAgQDE2NAotICAgIGdsR2VuUXVlcmllc0VYVCAgICAgICAg
ICAgICAgICAgQDE2NQotICAgIGdsRGVsZXRlUXVlcmllc0VYVCAgICAgICAgICAgICAgQDE2Ngot
ICAgIGdsSXNRdWVyeUVYVCAgICAgICAgICAgICAgICAgICAgQDE2NwotICAgIGdsQmVnaW5RdWVy
eUVYVCAgICAgICAgICAgICAgICAgQDE2OAotICAgIGdsRW5kUXVlcnlFWFQgICAgICAgICAgICAg
ICAgICAgQDE2OQotICAgIGdsR2V0UXVlcnlpdkVYVCAgICAgICAgICAgICAgICAgQDE3MAotICAg
IGdsR2V0UXVlcnlPYmplY3R1aXZFWFQgICAgICAgICAgQDE3MQotICAgIGdsVmVydGV4QXR0cmli
RGl2aXNvckFOR0xFICAgICAgQDE3MgotICAgIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFICAg
ICAgQDE3MwotICAgIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUgICAgQDE3NAotCi0gICAg
OyBFR0wgZGVwZW5kZW5jaWVzCi0gICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBA
MTQ0IE5PTkFNRQotICAgIGdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICAgQDE0NSBOT05B
TUUKLSAgICBnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgIEAxNDYgTk9OQU1FCi0gICAg
Z2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAgICAgICBAMTQ3IE5PTkFNRQotICAgIGdsR2V0UHJv
Y0FkZHJlc3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKLSAgICBnbEJpbmRUZXhJbWFnZSAg
ICAgICAgICAgICAgICAgIEAxNTggTk9OQU1FCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwYWQyMWU0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLnJjCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8v
IE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCi0vLwotI2lu
Y2x1ZGUgInJlc291cmNlLmgiCi0KLSNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xV
REUgMiByZXNvdXJjZS4KLS8vCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgIi4uL2Nv
bW1vbi92ZXJzaW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jdW5kZWYgQVBTVFVESU9f
UkVBRE9OTFlfU1lNQk9MUwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRW5nbGlzaCAoVS5T
LikgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVk
KEFGWF9UQVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VC
TEFOR19FTkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQotI2VuZGlmIC8vX1dJTjMy
Ci0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8v
IFRFWFRJTkNMVURFCi0vLwotCi0xIFRFWFRJTkNMVURFIAotQkVHSU4KLSAgICAicmVzb3VyY2Uu
aFwwIgotRU5ECi0KLTIgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICIjaW5jbHVkZSAiImFmeHJl
cy5oIiJcclxuIgotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1vbi92ZXJzaW9uLmgiIlwwIgotRU5E
Ci0KLTMgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJcclxuIgotICAgICJcMCIKLUVORAotCi0j
ZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LwotLy8gVmVyc2lvbgotLy8KLQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCi0gRklMRVZF
UlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVW
SVNJT04KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERf
VkVSU0lPTixCVUlMRF9SRVZJU0lPTgotIEZJTEVGTEFHU01BU0sgMHgxN0wKLSNpZmRlZiBfREVC
VUcKLSBGSUxFRkxBR1MgMHgxTAotI2Vsc2UKLSBGSUxFRkxBR1MgMHgwTAotI2VuZGlmCi0gRklM
RU9TIDB4NEwKLSBGSUxFVFlQRSAweDJMCi0gRklMRVNVQlRZUEUgMHgwTAotQkVHSU4KLSAgICBC
TE9DSyAiU3RyaW5nRmlsZUluZm8iCi0gICAgQkVHSU4KLSAgICAgICAgQkxPQ0sgIjA0MDkwNGIw
IgotICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJB
TkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJhcnkiCi0gICAgICAgICAgICBWQUxVRSAi
RmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIkludGVybmFs
TmFtZSIsICJsaWJHTEVTdjIiCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAi
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgotICAgICAgICAgICAgVkFMVUUgIk9yaWdp
bmFsRmlsZW5hbWUiLCAibGliR0xFU3YyLmRsbCIKLSAgICAgICAgICAgIFZBTFVFICJQcml2YXRl
QnVpbGQiLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwg
IkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAgICAgIFZBTFVF
ICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgIEVORAotICAgIEVORAot
ICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBWQUxVRSAiVHJhbnNs
YXRpb24iLCAweDQwOSwgMTIwMAotICAgIEVORAotRU5ECi0KLSNlbmRpZiAgICAvLyBFbmdsaXNo
IChVLlMuKSByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0jaWZuZGVmIEFQ
U1RVRElPX0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZy
b20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0jZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk3ZDRlOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKKysrIC9kZXYvbnVs
bApAQCAtMSw1NjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93
cy0xMjUyIj8+Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysr
IgotCVZlcnNpb249IjkuMDAiCi0JTmFtZT0ibGliR0xFU3YyIgotCVByb2plY3RHVUlEPSJ7QjU4
NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fSIKLQlSb290TmFtZXNwYWNlPSJsaWJH
TEVTdjIiCi0JS2V5d29yZD0iV2luMzJQcm9qIgotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEz
MTA3MiIKLQk+Ci0JPFBsYXRmb3Jtcz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJ
Lz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJ4NjQiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRv
b2xGaWxlcz4KLQk8L1Rvb2xGaWxlcz4KLQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0
aW9uCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlv
bkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChD
b25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3Rl
clNldD0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5j
bHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2lu
Y2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9X
UztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01J
Tk1BWCIKLQkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9
IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAi
Ci0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAw
OzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0
YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Igot
CQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5h
Z2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jl
c291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5r
RXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJ
CUFkZGl0aW9uYWxPcHRpb25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVz
PSJkM2Q5LmxpYiBEM2R4OS5saWIgZDNkY29tcGlsZXIubGliIgotCQkJCUxpbmtJbmNyZW1lbnRh
bD0iMiIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliR0xFU3YyLmRlZiIKLQkJCQlHZW5l
cmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRv
bWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJ
CQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRM
aW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91
dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQo
Q29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIp
XGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0J
CQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxl
YXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJh
dGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1l
KSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hv
bGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1By
ZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWls
ZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgot
CQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIK
LQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JE
TEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19T
RUNVUkVfU0NMPTAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxOCIKLQkJCQlE
ZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRp
b25Gb3JtYXQ9IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xp
bmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9u
YWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIEQzZHg5LmxpYiBkM2Rjb21waWxlci5saWIiCi0JCQkJ
TGlua0luY3JlbWVudGFsPSIxIgotCQkJCUlnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM9ImZhbHNl
IgotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIgotCQkJCUdlbmVyYXRl
RGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVS
ZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXpl
ZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRh
cmdldE1hY2hpbmU9IjEiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9
IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwk
KENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGly
KVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25m
aWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGli
R0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJh
dGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+
Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2
NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChD
b25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1O
YW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJ
Q2hhcmFjdGVyU2V0PSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZl
bnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVu
dD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJ
T3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJv
amVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VY
UE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIgotCQkJCU1pbmltYWxSZWJ1
aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFy
eT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQi
Ci0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0
MjQ1OzQ1MTI7NDcwMjs0NzE4IgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0i
ZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0i
dHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGls
ZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9u
cz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgRDNkeDku
bGliIGQzZGNvbXBpbGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCi0JCQkJTW9kdWxl
RGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0
aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9
IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0i
MTciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4
MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIu
ZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFt
ZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZx
dW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZx
dW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmln
dXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8eDY0IgotCQkJT3V0
cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRp
b25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29u
ZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJT
ZXQ9IjEiCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0
YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQ
cm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29s
IgotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rp
b25FeHBhbnNpb249IjIiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9q
ZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3Nv
ckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQ
T1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCIKLQkJ
CQlSdW50aW1lTGlicmFyeT0iMCIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlX
YXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0
MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4IgotCQkJCURldGVjdDY0Qml0UG9ydGFi
aWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJ
CQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdl
ZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNv
dXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2
ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlB
ZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0i
ZDNkOS5saWIgRDNkeDkubGliIGQzZGNvbXBpbGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9
IjEiCi0JCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiCi0JCQkJTW9kdWxlRGVm
aW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9u
PSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCi0J
CQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEi
Ci0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTci
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7
JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25O
YW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxs
JnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlc
JnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90
OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90
OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJh
dGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwvUmVmZXJlbmNlcz4K
LQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKLQkJCUZpbHRlcj0i
Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCi0JCQlVbmlxdWVJZGVu
dGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKLQkJCT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJsaXQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJ1ZmZlci5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5jcHAiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxkZWJ1Zy5j
cHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRmVu
Y2UuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XEZyYW1lYnVmZmVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLlxIYW5kbGVBbGxvY2F0b3IuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEluZGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3Jh
bS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
UHJvZ3JhbUJpbmFyeS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuY3BwIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VN
YW5hZ2VyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlxTaGFkZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXFRleHR1cmUuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXHV0aWxpdGllcy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVmVydGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IkhlYWRlciBGaWxlcyIK
LQkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgotCQkJVW5pcXVlSWRlbnRpZmll
cj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCi0JCQk+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxCbGl0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEZlbmNlLmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVT
MlxnbDIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEhhbmRsZUFs
bG9jYXRvci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXEluZGV4RGF0YU1hbmFnZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLlxtYWluLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cbWF0aHV0aWwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5LmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxSZWZDb3VudE9i
amVjdC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XFJlbmRlcmJ1ZmZlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXHJlc291cmNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VNYW5hZ2VyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVyZS5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHV0aWxpdGllcy5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cdmVyc2lvbi5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHZlcnRl
eGNvbnZlcnNpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxWZXJ0ZXhEYXRhTWFuYWdlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0
ZXI+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmRlZiIKLQkJCT4KLQkJ
PC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5yYyIKLQkJCT4K
LQkJPC9GaWxlPgotCTwvRmlsZXM+Ci0JPEdsb2JhbHM+Ci0JPC9HbG9iYWxzPgotPC9WaXN1YWxT
dHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
bWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NGQyNzcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBtYWlu
LmNwcDogRExMIGVudHJ5IHBvaW50IGFuZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRh
LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJFR0wv
U3VyZmFjZS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLXN0YXRp
YyBEV09SRCBjdXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOwotCi1CT09MIFdJTkFQSSBE
bGxNYWluKEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQp
Ci17Ci0gICAgc3dpdGNoIChyZWFzb24pCi0gICAgewotICAgICAgY2FzZSBETExfUFJPQ0VTU19B
VFRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOwot
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAot
ICAgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OkN1cnJlbnQgKmN1cnJlbnQgPSAoZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9m
KGdsOjpDdXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOwotCi0g
ICAgICAgICAgICAgICAgY3VycmVudC0+Y29udGV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudC0+ZGlzcGxheSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgotICAgICAgICB7Ci0gICAg
ICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAg
ICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2Fs
RnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAg
ICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxG
cmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRsc0Zy
ZWUoY3VycmVudFRMUyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotbmFtZXNw
YWNlIGdsCi17Ci12b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5j
b250ZXh0ID0gY29udGV4dDsKLSAgICBjdXJyZW50LT5kaXNwbGF5ID0gZGlzcGxheTsKLQotICAg
IGlmIChjb250ZXh0ICYmIGRpc3BsYXkgJiYgc3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIGNvbnRl
eHQtPm1ha2VDdXJyZW50KGRpc3BsYXksIHN1cmZhY2UpOwotICAgIH0KLX0KLQotQ29udGV4dCAq
Z2V0Q29udGV4dCgpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRW
YWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5jb250ZXh0OwotfQotCi1D
b250ZXh0ICpnZXROb25Mb3N0Q29udGV4dCgpCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdl
dENvbnRleHQoKTsKLSAgICAKLSAgICBpZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotZWdsOjpEaXNwbGF5ICpnZXREaXNw
bGF5KCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7Ci19Ci0KLUlEaXJlY3Qz
RERldmljZTkgKmdldERldmljZSgpCi17Ci0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0
RGlzcGxheSgpOwotCi0gICAgcmV0dXJuIGRpc3BsYXktPmdldERldmljZSgpOwotfQotCi1ib29s
IGNoZWNrRGV2aWNlTG9zdChIUkVTVUxUIGVycm9yQ29kZSkKLXsKLSAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBOVUxMOwotCi0gICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKGVycm9yQ29kZSkp
Ci0gICAgewotICAgICAgICBkaXNwbGF5ID0gZ2w6OmdldERpc3BsYXkoKTsKLSAgICAgICAgZGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotfQotCi0vLyBSZWNvcmRzIGFuIGVycm9yIGNvZGUKLXZvaWQg
ZXJyb3IoR0xlbnVtIGVycm9yQ29kZSkKLXsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
R2V0Q3VycmVudENvbnRleHQoKTsKLQotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChlcnJvckNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0lOVkFMSURf
RU5VTToKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRFbnVtKCk7Ci0gICAgICAg
ICAgICBUUkFDRSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBlbnVtXG4iKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9WQUxVRToKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRWYWx1ZSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0
ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgdmFsdWVcbiIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKLSAgICAgICAgICAgIFRSQUNFKCJcdCEgRXJy
b3IgZ2VuZXJhdGVkOiBpbnZhbGlkIG9wZXJhdGlvblxuIik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX09VVF9PRl9NRU1PUlk6Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvcmRPdXRPZk1lbW9yeSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0
ZWQ6IG91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOwotICAgICAgICAgICAgVFJBQ0Uo
Ilx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZnJhbWVidWZmZXIgb3BlcmF0aW9uXG4iKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL21haW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQ4NDhhLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5o
OiBNYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgotCi0jaWZuZGVmIExJQkdMRVNWMl9N
QUlOX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9NQUlOX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAot
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotCi0jaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotc3RydWN0IEN1
cnJlbnQKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0OwotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eTsKLX07Ci0KLXZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotCi1Db250ZXh0ICpnZXRDb250ZXh0
KCk7Ci1Db250ZXh0ICpnZXROb25Mb3N0Q29udGV4dCgpOwotZWdsOjpEaXNwbGF5ICpnZXREaXNw
bGF5KCk7Ci0KLUlEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpOwotCi1ib29sIGNoZWNrRGV2
aWNlTG9zdChIUkVTVUxUIGVycm9yQ29kZSk7Ci19Ci0KLXZvaWQgZXJyb3IoR0xlbnVtIGVycm9y
Q29kZSk7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdCBUICZlcnJvcihHTGVudW0gZXJyb3JD
b2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0g
ICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFJTl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRo
dXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmIyMjUwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDk5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIG1hdGh1dGlsLmg6
IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgotCi0jaWZuZGVmIExJQkdMRVNW
Ml9NQVRIVVRJTF9IXwotI2RlZmluZSBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KLQotI2luY2x1ZGUg
PGludHJpbi5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5h
bWVzcGFjZSBnbAotewotaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQotewotICAgIHJldHVybiAo
eCAmICh4IC0gMSkpID09IDAgJiYgKHggIT0gMCk7Ci19Ci0KLWlubGluZSBpbnQgbG9nMihpbnQg
eCkKLXsKLSAgICBpbnQgciA9IDA7Ci0gICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOwotICAg
IHJldHVybiByOwotfQotCi1pbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGlu
dCB4KQotewotICAgIGlmICh4ICE9IDApIHgtLTsKLSAgICB4IHw9IHggPj4gMTsKLSAgICB4IHw9
IHggPj4gMjsKLSAgICB4IHw9IHggPj4gNDsKLSAgICB4IHw9IHggPj4gODsKLSAgICB4IHw9IHgg
Pj4gMTY7Ci0gICAgeCsrOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIE1JTiwgdHlwZW5hbWUgTUFYPgotaW5saW5lIFQgY2xhbXAoVCB4LCBNSU4g
bWluLCBNQVggbWF4KQotewotICAgIHJldHVybiB4IDwgbWluID8gbWluIDogKHggPiBtYXggPyBt
YXggOiB4KTsKLX0KLQotaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxvYXQgeCkKLXsKLSAgICByZXR1
cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7Ci19Ci0KLXRlbXBsYXRlPGNvbnN0IGludCBuPgotaW5s
aW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOwotCi0gICAgaWYgKHggPiAxKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1heDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA8IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
ICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKLSAgICB9Ci19Ci0KLWlubGluZSBib29s
IHN1cHBvcnRzU1NFMigpCi17Ci0gICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwotICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzID0gZmFsc2U7Ci0KLSAgICBpZiAoY2hlY2tlZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdXBwb3J0czsKLSAgICB9Ci0KLSAgICBpbnQgaW5mb1s0XTsKLSAg
ICBfX2NwdWlkKGluZm8sIDApOwotICAgIAotICAgIGlmIChpbmZvWzBdID49IDEpCi0gICAgewot
ICAgICAgICBfX2NwdWlkKGluZm8sIDEpOwotCi0gICAgICAgIHN1cHBvcnRzID0gKGluZm9bM10g
Pj4gMjYpICYgMTsKLSAgICB9Ci0KLSAgICBjaGVja2VkID0gdHJ1ZTsKLQotICAgIHJldHVybiBz
dXBwb3J0czsKLX0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX01BVEhVVElMX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YWRhYWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTQgKzAsMCBAQAotLy97e05PX0RFUEVOREVOQ0lFU319Ci0vLyBNaWNyb3NvZnQgVmlzdWFs
IEMrKyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgotLy8gVXNlZCBieSBsaWJHTEVTdjIucmMKLQot
Ly8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKLS8vIAotI2lmZGVmIEFQU1RV
RElPX0lOVk9LRUQKLSNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotI2RlZmluZSBf
QVBTX05FWFRfUkVTT1VSQ0VfVkFMVUUgICAgICAgIDEwMQotI2RlZmluZSBfQVBTX05FWFRfQ09N
TUFORF9WQUxVRSAgICAgICAgIDQwMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVF
ICAgICAgICAgMTAwMQotI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEw
MQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvdXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdj
NjJkOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3V0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM1ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIHV0aWxpdGllcy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBv
dGhlciB1dGlsaXR5IHJvdXRpbmVzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgotCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi1uYW1lc3Bh
Y2UgZ2wKLXsKLQotLy8gVGhpcyBpcyBob3cgbXVjaCBkYXRhIHRoZSBhcHBsaWNhdGlvbiBleHBl
Y3RzIGZvciBhIHVuaWZvcm0KLWludCBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudChHTGVu
dW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CT09M
OgotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgY2FzZSBH
TF9TQU1QTEVSXzJEOgotICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0gICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBj
YXNlIEdMX0lOVF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgY2FzZSBH
TF9CT09MX1ZFQzM6Ci0gICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVD
NDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgcmV0dXJuIDk7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6Ci0gICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIGlzIGhv
dyBtdWNoIGRhdGEgd2UgYWN0dWFsbHkgc3RvcmUgZm9yIGEgdW5pZm9ybQotaW50IFVuaWZvcm1J
bnRlcm5hbENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgIGNh
c2UgR0xfU0FNUExFUl8yRDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAg
IHJldHVybiAxOwotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0lOVF9W
RUMyOgotICAgICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAg
IGNhc2UgR0xfQk9PTF9WRUMzOgotICAgICAgICAgIHJldHVybiAzOwotICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0Ogot
ICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKLSAgICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMjoKLSAgICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzoKLSAgICAgICAgICByZXR1cm4gMTI7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0g
ICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVW5pZm9ybUNvbXBvbmVu
dFR5cGUoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoKHR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0JPT0xf
VkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgICAgIHJldHVybiBHTF9CT09M
OwotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKLSAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdM
X0lOVDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl9D
VUJFOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0g
ICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdM
X05PTkU7Ci19Ci0KLXNpemVfdCBVbmlmb3JtQ29tcG9uZW50U2l6ZShHTGVudW0gdHlwZSkKLXsK
LSAgICBzd2l0Y2godHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JPT0w6ICByZXR1cm4gc2l6
ZW9mKEdMaW50KTsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7
Ci0gICAgICBjYXNlIEdMX0lOVDogICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICAgIGRlZmF1
bHQ6ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXNp
emVfdCBVbmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBVbmlm
b3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3JtSW50
ZXJuYWxDb21wb25lbnRDb3VudCh0eXBlKTsKLX0KLQotc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNp
emUoR0xlbnVtIHR5cGUpCi17Ci0gICAgcmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZv
cm1Db21wb25lbnRUeXBlKHR5cGUpKSAqIFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHR5
cGUpOwotfQotCi1pbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gMDsK
LSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdM
X0lOVDoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgIGNh
c2UgR0xfQk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBH
TF9JTlRfVkVDNDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBy
ZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVy
biAwOwotfQotCi1pbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4g
MDsKLSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNl
IEdMX0lOVDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRf
VkVDMzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMz
OgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICByZXR1cm4gMzsKLSAgICAgIGNh
c2UgR0xfQk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBH
TF9JTlRfVkVDNDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi1pbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0
cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCi17
Ci0gICAgQVNTRVJUKGFsbG9jYXRpb25TaXplIDw9IGJpdHNTaXplKTsKLQotICAgIHVuc2lnbmVk
IGludCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6
ZSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2Nh
dGlvblNpemUgKyAxOyBpKyspCi0gICAgewotICAgICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgKmJpdHMgfD0gbWFzazsKLSAgICAgICAgICAgIHJl
dHVybiBpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWFzayA8PD0gMTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLUdMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgQVNTRVJUKGFs
aWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOwotCi0gICAgR0xzaXplaSByYXdQaXRj
aCA9IENvbXB1dGVQaXhlbFNpemUoZm9ybWF0LCB0eXBlKSAqIHdpZHRoOwotICAgIHJldHVybiAo
cmF3UGl0Y2ggKyBhbGlnbm1lbnQgLSAxKSAmIH4oYWxpZ25tZW50IC0gMSk7Ci19Ci0KLUdMc2l6
ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KQot
ewotICAgIHJldHVybiBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIDEsIGZvcm1hdCk7Ci19
Ci0KLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgIHJldHVybiA4ICogKEdMc2l6
ZWkpY2VpbCgoZmxvYXQpd2lkdGggLyA0LjBmKSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdo
dCAvIDQuMGYpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19BTkdMRToKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRToKLSAgICAgICAgcmV0dXJuIDE2ICogKEdMc2l6ZWkpY2VpbCgoZmxvYXQpd2lkdGgg
LyA0LjBmKSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdodCAvIDQuMGYpOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi19Ci0KLWJvb2wgSXNDb21wcmVzc2Vk
KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgaWYoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQgfHwKLSAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQgfHwKLSAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSB8fAotICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFRleHR1
cmUoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEdMX0RFUFRIX0NPTVBPTkVO
VCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfREVQVEhfU1RFTkNJTF9PRVMpCi0gICAgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFJl
dHVybnMgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiBhIHNpbmdsZSB0ZXhlbCBpbiBhbiBJbWFnZQot
aW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAg
ICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRTogICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAq
IDI7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5z
aWduZWQgY2hhcikgKiAzOwotICAgICAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogNDsKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhU
OiAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDQ7Ci0gICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMToKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KTsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKLSAg
ICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YoZmxvYXQpOwot
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsK
LSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZihmbG9hdCkg
KiAyOwotICAgICAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKGZs
b2F0KSAqIDM7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXpl
b2YoZmxvYXQpICogNDsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAg
ICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6ICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KSAqIDI7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpICogMzsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAg
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA0OwotICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1ib29sIElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICByZXR1cm4gKHRhcmdldCA+PSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggJiYgdGFyZ2V0IDw9IEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWik7Ci19Ci0KLWJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xl
bnVtIHRhcmdldCkKLXsKLSAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXND
dWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpOwotfQotCi1HTGVudW0gRXh0cmFjdEZvcm1hdChH
TGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9SR0I7Ci0gICAgICBjYXNlIEdMX1JHQkE0OiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9SR0JBOwotICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE7Ci0gICAgICBjYXNlIEdMX0xVTUlO
QU5DRThfQUxQSEE4X0VYVDogICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9M
VU1JTkFOQ0U7Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9BTFBIQTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVDogICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOiAgIHJldHVybiBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRTogcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7
Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6IHJldHVybiBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgY2FzZSBHTF9SR0JBMzJG
X0VYVDogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xf
UkdCMzJGX0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNh
c2UgR0xfQUxQSEEzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xf
TFVNSU5BTkNFOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOiAgICAgICAg
ICByZXR1cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCMTZG
X0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xf
QUxQSEExNkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5B
TkNFOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOiAgICAgICAgICByZXR1
cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfQkdSQV9FWFQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQ7Ci0gICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAgICAgIHJldHVybiBHTF9ERVBU
SF9DT01QT05FTlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiAgICAgICAg
ICAgIHJldHVybiBHTF9ERVBUSF9TVEVOQ0lMX09FUzsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQK
LSAgICB9Ci19Ci0KLUdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2
NTogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF81XzZf
NTsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ7Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6ICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOwotICAg
ICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQ
SEE4X0VYVDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U4X0VYVDogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllU
RTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQ6ICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDogICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTogcmV0dXJuIEdMX1VOU0lH
TkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6
IHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9F
WFQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAgIGNhc2UgR0xf
QUxQSEEzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6ICAgICAgICAgIHJldHVybiBH
TF9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOiAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdM
X0FMUEhBMTZGX0VYVDogICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09F
UzsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0hBTEZfRkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhU
OiAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0JHUkE4
X0VYVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfU0hPUlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAg
ICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOiAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM7Ci0gICAg
ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05F
OyAgIC8vIFVuc3VwcG9ydGVkCi0gICAgfQotfQotCi1ib29sIElzQ29sb3JSZW5kZXJhYmxlKEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBj
YXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JH
QkE4X09FUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgSXNEZXB0aFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQxNjoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xf
UkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAg
ICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc1N0ZW5jaWxSZW5kZXJhYmxl
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfUkdC
QTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAg
IGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGVzMmR4Ci17Ci0KLUQzRENNUEZVTkMgQ29udmVydENvbXBh
cmlzb24oR0xlbnVtIGNvbXBhcmlzb24pCi17Ci0gICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNE
Q01QX0FMV0FZUzsKLSAgICBzd2l0Y2ggKGNvbXBhcmlzb24pCi0gICAgewotICAgICAgY2FzZSBH
TF9ORVZFUjogICAgZDNkQ29tcCA9IEQzRENNUF9ORVZFUjsgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVB
TDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENN
UF9HUkVBVEVSOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9
IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJyZWFrOwotICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNk
Q29tcCA9IEQzRENNUF9OT1RFUVVBTDsgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQ29tcDsKLX0KLQotRDNEQ09MT1IgQ29u
dmVydENvbG9yKGdsOjpDb2xvciBjb2xvcikKLXsKLSAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShn
bDo6dW5vcm08OD4oY29sb3IucmVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5v
cm08OD4oY29sb3IuZ3JlZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4
Pihjb2xvci5ibHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29s
b3IuYWxwaGEpKTsKLX0KLQotRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQp
Ci17Ci0gICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOwotCi0gICAgc3dpdGNo
IChibGVuZCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAg
ZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X09ORTogICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNk
QmxlbmQgPSBEM0RCTEVORF9TUkNDT0xPUjsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09O
RV9NSU5VU19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RTVF9DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9N
SU5VU19EU1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9TUkNBTFBIQTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5V
U19TUkNfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05T
VEFOVF9DT0xPUjogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVO
RF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFO
VF9BTFBIQTogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9T
UkNBTFBIQVNBVDsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBkM2RCbGVuZDsKLX0KLQotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRP
cChHTGVudW0gYmxlbmRPcCkKLXsKLSAgICBEM0RCTEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVO
RE9QX0FERDsKLQotICAgIHN3aXRjaCAoYmxlbmRPcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZV
TkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3Ag
PSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19SRVZF
UlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RC
bGVuZE9wOwotfQotCi1EM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNp
bE9wKQotewotICAgIEQzRFNURU5DSUxPUCBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VF
UDsKLQotICAgIHN3aXRjaCAoc3RlbmNpbE9wKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzog
ICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfWkVSTzsgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0tFRVA6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxP
UF9SRVBMQUNFOyBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3Ag
PSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1I6ICAgICAg
ZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1JTQVQ7IGJyZWFrOwotICAgICAgY2FzZSBH
TF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsK
LSAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5D
UjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNE
U1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZDNkU3RlbmNpbE9wOwotfQotCi1EM0RURVhUVVJFQUREUkVT
UyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApCi17Ci0gICAgRDNEVEVYVFVSRUFERFJF
U1MgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7Ci0KLSAgICBzd2l0Y2ggKHdyYXApCi0gICAg
ewotICAgICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNT
X1dSQVA7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFw
ID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQ
RUFUOiAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19NSVJST1I7IGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkV3JhcDsKLX0KLQotRDNE
Q1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQot
ewotICAgIEQzRENVTEwgY3VsbCA9IEQzRENVTExfQ0NXOwotICAgIHN3aXRjaCAoY3VsbEZhY2Up
Ci0gICAgewotICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2Ug
PT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6IEQzRENVTExfQ0NXKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/
IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9DVyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgY3VsbCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGlu
ZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBjdWxsOwotfQotCi1EM0RD
VUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpCi17Ci0gICAgRDNE
Q1VCRU1BUF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0KLSAgICBz
d2l0Y2ggKGN1YmVGYWNlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6
Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAg
ZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZB
Q0VfUE9TSVRJVkVfWjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElW
RV9aOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhY2U7Ci19Ci0KLURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCBy
ZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICByZXR1cm4gKHJl
ZCAgID8gRDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwKLSAgICAgICAgICAgKGdyZWVu
ID8gRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwKLSAgICAgICAgICAgKGJsdWUgID8g
RDNEQ09MT1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKLSAgICAgICAgICAgKGFscGhhID8gRDNE
Q09MT1JXUklURUVOQUJMRV9BTFBIQSA6IDApOwotfQotCi1EM0RURVhUVVJFRklMVEVSVFlQRSBD
b252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpCi17Ci0gICAgRDNEVEVYVFVSRUZJTFRF
UlRZUEUgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICBzd2l0Y2ggKG1hZ0ZpbHRl
cikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZf
UE9JTlQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSOiAgZDNkTWFnRmlsdGVyID0gRDNE
VEVYRl9MSU5FQVI7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZDNkTWFnRmlsdGVyOwotfQotCi12b2lkIENvbnZlcnRNaW5GaWx0ZXIo
R0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNE
VEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKG1pbkZpbHRl
cikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIg
PSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICAqZDNkTWluRmls
dGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05P
TkU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
OgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgKmQzZE1p
cEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9M
SU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJ
TkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgICpkM2RN
aW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVY
Rl9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJ
TkVBUjoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAgICAq
ZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpk
M2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotfQotCi1ib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBH
THNpemVpIGVsZW1lbnRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlU
SVZFVFlQRSAqZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCkKLXsKLSAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0g
ICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOwotICAgICAgICAqZDNk
UHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9MSU5FUzoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsK
LSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC8gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5
cGUgPSBEM0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1l
bnRDb3VudCAtIDE7ICAgLy8gRDNEIGRvZXNuJ3Qgc3VwcG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBk
cmF3IHRoZSBsYXN0IGxpbmUgc2VwYXJhdGVseQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTElORV9TVFJJUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RS
SVA7Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDE7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9UUklBTkdMRVM6Ci0gICAgICAgICpkM2RQcmltaXRp
dmVUeXBlID0gRDNEUFRfVFJJQU5HTEVMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQg
PSBlbGVtZW50Q291bnQgLyAzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5H
TEVfU1RSSVA6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVTVFJJ
UDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC0gMjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgICAgKmQzZFByaW1p
dGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUZBTjsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50
ID0gZWxlbWVudENvdW50IC0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUQzREZP
Uk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAg
cmV0dXJuIEQzREZNVF9OVUxMOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xf
UkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RG
TVRfQThSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4g
RDNERk1UX1I1RzZCNTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVy
biBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUQzRE1V
TFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1w
bGVzKQotewotICAgIGlmIChzYW1wbGVzIDw9IDEpCi0gICAgICAgIHJldHVybiBEM0RNVUxUSVNB
TVBMRV9OT05FOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBF
KXNhbXBsZXM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGR4MmVzCi17Ci0KLXVuc2lnbmVkIGludCBH
ZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkKLXsKLSAgICBpZiAoc3RlbmNp
bEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0K
LSAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRG
Uzg6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBj
YXNlIEQzREZNVF9EMjRYNFM0OgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRDNERk1U
X0QxNVMxOgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJM
RToKLSAgICAgIGNhc2UgRDNERk1UX0QzMjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAg
ICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgLy9jYXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4g
MDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTog
ICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9S
TUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2Fz
ZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1
QjU6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0UmVkU2l6ZShE
M0RGT1JNQVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0g
ICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAg
ICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDEwOwotICAgICAgY2Fz
ZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAg
cmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRHcmVlblNpemUoRDNERk9STUFUIGNv
bG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBE
M0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RG
TVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAxMDsKLSAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4Owot
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiA1OwotICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gNjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAg
IGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNh
c2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMTA7Ci0gICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICByZXR1
cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgY2FzZSBEM0RGTVRfUjVH
NkI1OgotICAgICAgICByZXR1cm4gNTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhG
b3JtYXQpCi17Ci0gICAgaWYgKGRlcHRoRm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDI0OwotICAgIH0KLSAgICBzd2l0Y2ggKGRlcHRoRm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRTogIHJldHVybiAxNjsKLSAgICAgIGNhc2Ug
RDNERk1UX0QzMjogICAgICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMx
OiAgICAgICAgIHJldHVybiAxNTsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgIHJl
dHVybiAyNDsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OiAgICAgICAgIHJldHVybiAyNDsKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6ICAgICAgIHJldHVybiAyNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0QxNjogICAgICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9D
S0FCTEU6IHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNEZTODogICAgICAgIHJldHVy
biAyNDsKLSAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAzMjsgICAvLyBE
M0Q5RXggb25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDA7ICAg
IC8vIEQzRDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci19Ci0KLWJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9y
bWF0KQotewotICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNE
Rk1UX1IxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9HMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRf
QTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEM0RGTVRf
UjMyRjoKLSAgICAgIGNhc2UgRDNERk1UX0czMlIzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJC
MzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2goc3VyZmFjZUZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9SMTZGOgot
ICAgICAgY2FzZSBEM0RGTVRfRzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIx
NkY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEM0RGTVRfUjMyRjoKLSAgICAg
IGNhc2UgRDNERk1UX0czMlIzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJ
c0RlcHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICByZXR1
cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOwotfQotCi1ib29sIElzU3RlbmNpbFRl
eHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgcmV0dXJuIChzdXJm
YWNlRm9ybWF0ID09IEQzREZNVF9JTlRaKTsKLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11
bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIHR5cGU7Ci19Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0Ex
UjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICBy
ZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9S
R0I4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
Ci0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAg
IGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLX0KLQotc3RkOjpz
dHJpbmcgZ2V0VGVtcFBhdGgoKQotewotICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07Ci0gICAgRFdP
UkQgcGF0aExlbiA9IEdldFRlbXBQYXRoQShzaXplb2YocGF0aCkgLyBzaXplb2YocGF0aFswXSks
IHBhdGgpOwotICAgIGlmIChwYXRoTGVuID09IDApCi0gICAgewotICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBVSU5UIHVu
aXF1ZSA9IEdldFRlbXBGaWxlTmFtZUEocGF0aCwgInNoIiwgMCwgcGF0aCk7Ci0gICAgaWYgKHVu
aXF1ZSA9PSAwKQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IHN0ZDo6c3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwYXRoOwotfQotCi12b2lk
IHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBjb250ZW50LCBzaXplX3Qg
c2l6ZSkKLXsKLSAgICBGSUxFKiBmaWxlID0gZm9wZW4ocGF0aCwgInciKTsKLSAgICBpZiAoIWZp
bGUpCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgZndyaXRlKGNvbnRlbnQsIHNpemVvZihjaGFyKSwgc2l6ZSwgZmlsZSk7Ci0gICAg
ZmNsb3NlKGZpbGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjI0MTgu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGls
aXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyB1dGlsaXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxp
dHkgcm91dGluZXMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICi0jZGVmaW5lIExJ
QkdMRVNWMl9VVElMSVRJRVNfSAotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0KLWNvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNE
Rk9STUFUKShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKLWNvbnN0IEQzREZPUk1BVCBE
M0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsK
LQotbmFtZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBDb2xvcjsKLQotaW50IFVuaWZvcm1FeHRlcm5h
bENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKLWludCBVbmlmb3JtSW50ZXJuYWxDb21wb25l
bnRDb3VudChHTGVudW0gdHlwZSk7Ci1HTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVt
IHR5cGUpOwotc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwotc2l6ZV90
IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwotaW50IFZhcmlhYmxlUm93Q291bnQo
R0xlbnVtIHR5cGUpOwotaW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOwotCi1p
bnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50
IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpOwotCi1pbnQgQ29tcHV0ZVBp
eGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7Ci1HTHNpemVpIENvbXB1dGVQaXRj
aChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25t
ZW50KTsKLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVu
dW0gZm9ybWF0KTsKLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51
bSBmb3JtYXQpOwotYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXND
dWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLWJvb2wgSXNJbnRlcm5hbFRleHR1
cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci1HTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50
ZXJuYWxmb3JtYXQpOwotR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7
Ci0KLWJvb2wgSXNDb2xvclJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLWJvb2wg
SXNEZXB0aFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLWJvb2wgSXNTdGVuY2ls
UmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwotCi19Ci0KLW5hbWVzcGFjZSBlczJk
eAotewotCi1EM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsK
LUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpOwotRDNEQkxFTkQgQ29udmVy
dEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpOwotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVu
dW0gYmxlbmRPcCk7Ci1EM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNp
bE9wKTsKLUQzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7
Ci1EM0RDVUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZh
Y2UpOwotRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVtIGN1YmVGYWNlKTsK
LURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwg
Ym9vbCBhbHBoYSk7Ci1EM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51
bSBtYWdGaWx0ZXIpOwotdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQz
RFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpk
M2RNaXBGaWx0ZXIpOwotYm9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZl
VHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEQz
RFBSSU1JVElWRVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQp
OwotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1E
M0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkg
c2FtcGxlcyk7Ci0KLX0KLQotbmFtZXNwYWNlIGR4MmVzCi17Ci1HTHVpbnQgR2V0QWxwaGFTaXpl
KEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29s
b3JGb3JtYXQpOwotR0x1aW50IEdldEdyZWVuU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwot
R0x1aW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0RGVw
dGhTaXplKEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNE
Rk9STUFUIHN0ZW5jaWxGb3JtYXQpOwotYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1
cmZhY2VGb3JtYXQpOwotYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3Jt
YXQpOwotYm9vbCBJc0RlcHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7
Ci1ib29sIElzU3RlbmNpbFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwot
Ci1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZ
UEUgdHlwZSk7Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9y
bWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQp
OwotCi19Ci0KLXN0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCk7Ci12b2lkIHdyaXRlRmlsZShjb25z
dCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSk7Ci0KLWlubGluZSBi
b29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQotewotICAgIHN3aXRjaCAo
ZXJyb3JDb2RlKQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1I6
Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgotICAgICAgY2FzZSBEM0RFUlJfREVWSUNF
SFVORzoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX07Ci0K
LSNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ZlcnRleGNvbnZlcnNpb24uaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmI4Yjg5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHZlcnRleGNvbnZl
cnNpb24uaDogQSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBjYW4g
YmUgdXNlZCB0byBidWlsZAotLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQgYnkg
dGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5c3RlbS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVY
Q09OVkVSU0lPTl9IXwotI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwotCi0j
aW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJsaWJHTEVT
djIvQ29udGV4dC5oIiAvLyBEZWZpbmVzIEluZGV4Ci0KLW5hbWVzcGFjZSBnbAotewotCi0vLyBD
b252ZXJzaW9uIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYg
dGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQotLy8gc3RhdGlj
IFUgY29udmVydChUKTogY29udmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5
cGUgdG8gdGhlIG91dHB1dCB0eXBlCi0vLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlw
ZSBwcm9kdWNlZCBieSB0aGlzIGNvbnZlcnNpb24KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1
Y3QgSWRlbnRpdHkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7Ci0K
LSAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZy
b21ULCBjbGFzcyBUb1Q+Ci1zdHJ1Y3QgQ2FzdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlk
ZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOwotCi0gICAgc3Rh
dGljIFRvVCBjb252ZXJ0KEZyb21UIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VG9UPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0
PFQsIFQ+Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAg
dHlwZWRlZiBUIE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3JtYWxpemUKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBp
ZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAg
c3RhdGljIGZsb2F0IGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+IE5MOwotICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHgpOwotCi0gICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0g
ICAgICAgICAgICAvLyBzdGF0aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRo
ZSBmaXJzdCB0aW1lIHdlIGdldCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGlj
IGd1YXJkIGFuZCBhbGwgdGhhdC4KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAx
LjBmLygyKnN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpKzEpOwotICAgICAgICAgICAgcmV0
dXJuICgyKmYrMSkqZGl2aXNvcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmL05MOjptYXgoKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBGcm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgotc3RydWN0
IEZpeGVkVG9GbG9hdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7
Ci0KLSAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29u
dmVydChGcm9tVHlwZSB4KQotICAgIHsKLSAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEu
MGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxl
Qml0cyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOwot
ICAgIH0KLX07Ci0KLS8vIFdpZGVuIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
dCBpbml0aWFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCi0v
LyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25l
bnRzIGFmdGVyIGNvbnZlcnNpb24KLQotLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXpl
LgotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgTm9XaWRlbgotewotICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTjsKLX07Ci0KLS8vIFNIT1JULCBub3JtLVNIT1JULCBu
b3JtLVVOU0lHTkVEX1NIT1JUIGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29t
cG9uZW50cwotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsK
LSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTj4KLXN0cnVjdCBXaWRlblRvRm91cgotewotICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNp
emVfdCBmaW5hbFdpZHRoID0gNDsKLX07Ci0KLS8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRo
YXQgYXJlIGp1c3QgdGhhdC4KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IFNpbXBsZURlZmF1
bHRWYWx1ZXMKLXsKLSAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
MCk7IH0KLSAgICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQot
fTsKLQotLy8gQnV0IG5vcm1hbGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0g
c28gMS4wIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBtYXggdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLXN0cnVjdCBOb3JtYWxpemVkRGVmYXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8o
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6
Ci0vLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50
aXR5IHRyYW5zZm9ybSAod2l0aCBubyB3aWRlbmluZykKLS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNp
emVfdCBmaW5hbFNpemU6IG51bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAotLy8gc3Rh
dGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUs
IHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMu
IElucHV0IG1heSBiZSBzdHJpZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10
ZW1wbGF0ZSA8Y2xhc3MgSW5ULCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xh
c3MgRGVmYXVsdFZhbHVlUnVsZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3Qg
VmVydGV4RGF0YUNvbnZlcnRlcgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpP
dXRwdXRUeXBlIE91dHB1dFR5cGU7Ci0gICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0g
V2lkZW5SdWxlOjpmaW5hbFdpZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OwotICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBz
aXplb2YoT3V0cHV0VHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qg
SW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRU
eXBlICpvdXQpCi0gICAgewotICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50
ZXJBZGRCeXRlcyhpbiwgaSAqIHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQo
b3V0LCBlaW4sIDAsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onpl
cm8oKSkpOwotICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nh
c3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBj
b3B5Q29tcG9uZW50KG91dCwgZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0
VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4s
IDMsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0K
LSAgICAgICAgICAgIG91dCArPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6
c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnRBcnJheShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0
cmlkZSwgbiwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZSo+KG91dCkpOwotICAgIH0KLQotICBwcml2
YXRlOgotICAgIC8vIEFkdmFuY2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0
ZXMgKG5vdCBwb2ludGVkLXRvIGVsZW1lbnRzKS4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAg
ICBzdGF0aWMgVCAqcG9pbnRlckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5
dGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZVB0cikgKyBudW1CeXRlcyk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgY29weUNvbXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlw
ZSAqaW4sIHN0ZDo6c2l6ZV90IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBl
bGVtZW50aW5kZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRp
bmRleF0gPSBDb252ZXJ0ZXI6OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
W2VsZW1lbnRpbmRleF0gPSBkZWZhdWx0dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9O
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGFmMzNmYTAuLmIxNzEzYjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC0yNzA2LDI0ICsyNzA2LDE3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNT
KQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25z
dC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNl
SGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2F0b20uYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCi0gICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCi0gICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhw
YW5kZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rv
a2VuaXplci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKLSAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYworICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0
aWNzQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIu
Y3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
by5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCkBAIC0yNzM4LDYgKzI3MzEsNyBAQCBp
ZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3V0aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAorICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKICAg
ICApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQ3NmRlODAuLmFiZGYxOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjI5Niw0OCArNjI5NiwzMiBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
UG9vbEFsbG9jLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFn
bWEuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmMgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvYXRvbS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NvbXBpbGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5
LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpYWdub3N0aWNzQmFzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJC
YXNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3Rp
dmVQYXJzZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5w
dXQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm9FeHBhbmRlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJl
cHJvY2Vzc29yLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5p
emVyLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0
aWNzQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxl
ckJhc2UuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4
cHJlc3Npb25QYXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4
cGFuZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2Nh
dGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaCBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCg==
</data>
<flag name="commit-queue"
          id="199493"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181947</attachid>
            <date>2013-01-09 10:43:18 -0800</date>
            <delta_ts>2013-01-09 14:40:43 -0800</delta_ts>
            <desc>Patch (for bots, not for review)</desc>
            <filename>106274-3.patch</filename>
            <type>text/plain</type>
            <size>1779187</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNWJjOWZmOC4uODA5ODkxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTEsMjIgKzEsMjIgQEAKIDw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICIt
Ly9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1By
b3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotICAgIDxhcnJheT4K
LSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+
Ci0gICAgICAgICAgICA8c3RyaW5nPkFOR0xFPC9zdHJpbmc+Ci0gICAgICAgICAgICA8a2V5Pk9w
ZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0gICAgICAgICAgICA8c3RyaW5nPnIxMTcwPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0gICAgICAgICAg
ICA8c3RyaW5nPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VTQ008L2tleT4KLSAgICAgICAgICAgIDxzdHJp
bmc+c3ZuIGNvIC1yMTE3MCBodHRwOi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL3N2bi90
cnVuay88L3N0cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUltcG9ydERhdGU8L2tl
eT4KLSAgICAgICAgICAgIDxzdHJpbmc+MjAxMi0wNi0xNzwvc3RyaW5nPgotICAgICAgICAgICAg
PGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotICAgICAgICAgICAgPHN0cmluZz5CU0Q8L3N0
cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+Ci0gICAg
ICAgICAgICA8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5nPgotICAgICAgICA8L2RpY3Q+Ci0gICAg
PC9hcnJheT4KLTwvcGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGFycmF5Pgor
CTxkaWN0PgorCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CisJCTxzdHJpbmc+QU5HTEU8
L3N0cmluZz4KKwkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgorCQk8c3RyaW5nPnIxNjQx
PC9zdHJpbmc+CisJCTxrZXk+T3BlblNvdXJjZVdlYnNpdGVVUkw8L2tleT4KKwkJPHN0cmluZz5o
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCQk8a2V5Pk9w
ZW5Tb3VyY2VTQ008L2tleT4KKwkJPHN0cmluZz5zdm4gY28gLXIxNjQxIGh0dHA6Ly9hbmdsZXBy
b2plY3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rLzwvc3RyaW5nPgorCQk8a2V5Pk9wZW5Tb3Vy
Y2VJbXBvcnREYXRlPC9rZXk+CisJCTxzdHJpbmc+MjAxMy0wMS0wNDwvc3RyaW5nPgorCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlPC9rZXk+CisJCTxzdHJpbmc+QlNEPC9zdHJpbmc+CisJCTxrZXk+
T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+CisJCTxzdHJpbmc+QU5HTEUudHh0PC9zdHJpbmc+
CisJPC9kaWN0PgorPC9hcnJheT4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS5wcmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wcmkK
aW5kZXggMmY3YjcwMC4uMmJjN2ZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUucHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnByaQpAQCAt
OCw1ICs4LDYgQEAKIFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFCiAKIElOQ0xVREVQQVRIICs9IFwKLSAgICAkJFNPVVJDRV9ESVIvaW5jbHVk
ZS9HTFNMQU5HCisgICAgJCRTT1VSQ0VfRElSL2luY2x1ZGUvR0xTTEFORyBcCisgICAgJCRTT1VS
Q0VfRElSL2luY2x1ZGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzIwN2VjYS4uNTExM2I3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00Miw2ICs0MiwzNSBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsK
IAkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi87IH07CisJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4OTMxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEy
NjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk0MTY5NzRERUQwMDZGQUE1
QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCAqLzsgfTsKKwkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjRGOEFGMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NEY4OTYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggKi87IH07CisJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OTcxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNjRG
OEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAv
KiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4QjIxNjk3NERFRDAwNkZBQTVBIC8q
IEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NEY4OTkxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwICovOyB9OworCQlBMjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4
QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5j
cHAgKi87IH07CisJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUMxNjk3NERFRDAw
NkZBQTVBIC8qIElucHV0LmggKi87IH07CisJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY0Rjg5RDE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjY0RjhCNzE2
OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oICovOyB9
OworCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUYxNjk3NERFRDAwNkZBQTVB
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhB
MDE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCAqLzsgfTsKKwkJQTI2NEY4QkExNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5k
ZXIuY3BwICovOyB9OworCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCAqLzsgfTsKKwkJQTI2NEY4QkMx
Njk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJp
Y19sZXguaCAqLzsgfTsKKwkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNDE2
OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NEY4QkUxNjk3NERFRDAw
NkZBQTVBIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLzsgfTsKKwkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTYx
Njk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5oICovOyB9OworCQlBMjY0RjhDMDE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEE3MTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovOyB9OworCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgx
Njk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzIxNjk3NERFRDAw
NkZBQTVBIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2
NEY4QzMxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OworCQlBMjY0RjhDODE2
OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVz
LmggKi87IH07CisJCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhD
NjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9OworCQlBMjY0RjhD
QTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBW
YXJpYWJsZVBhY2tlci5oICovOyB9OworCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hy
cGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owog
CQlBMjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUz
OSAvKiBEaWFnbm9zdGljcy5oICovOyB9OwogCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi87IH07CkBAIC00OSwzMCArNzgsNiBAQAogCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CiAJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKIAkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKLQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKLQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07Ci0JCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owot
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OwotCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owot
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OwotCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKLQkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07Ci0JCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07Ci0JCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKLQkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07Ci0JCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07Ci0JCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKLQkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKLQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07Ci0JCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07Ci0JCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07Ci0JCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKLQkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKIAkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKIAkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OwogCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CkBAIC04NCw2ICs4OSw3IEBACiAJCUEyNjU2ODQxMTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OwogCQlBMjY1Njg0MjE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKIAkJQTI2NTY4NDMx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI5QjE1RTgx
Njk3ODQ1NzAwMTExRDk3IC8qIGtocnBsYXRmb3JtLmggaW4gQ29weUZpbGVzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJw
bGF0Zm9ybS5oICovOyB9OwogCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBG
MzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwpAQCAtOTcsMTMgKzEwMyw2IEBACiAJ
CUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKIAkJRkIzOUQyOEYxMjAwRjM1QTAwMDg4RTY5IC8q
IFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07
CiAJCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi87IH07Ci0JCUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAv
KiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovOyB9OwotCQlGQjM5RDI5NjEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi87IH07Ci0JCUZC
MzlEMjk4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRBMTIwMEYzNUEwMDA4OEU2OSAvKiBj
cHBzdHJ1Y3QuYyAqLzsgfTsKLQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNEIx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjM5RDI5RDEyMDBGMzVBMDAw
ODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyNEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJ
RkIzOUQyQTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgKi87IH07Ci0JCUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU0MTIw
MEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLzsgfTsKIAkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4
RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5jcHAgKi87IH07CiAJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQTgxMjAw
RjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovOyB9OwpAQCAtMTMzLDYgKzEzMiwxNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwogCQl9OworCQlBMjlCMTVFNjE2OTc4NDQ1MDAx
MTFEOTcgLyogQ29weUZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOworCQkJZHN0UGF0aCA9IHVzci9sb2NhbC9pbmNs
dWRlL0tIUjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJCUEy
OUIxNUU4MTY5Nzg0NTcwMDExMUQ5NyAvKiBraHJwbGF0Zm9ybS5oIGluIENvcHlGaWxlcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
IC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCkBAIC0xNzUsOCArMTg0LDM1IEBACiAJCUEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBB
QUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4
OTQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTYxNjk3NERF
RDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTgxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTkx
Njk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVB
IC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAv
KiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1
QSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0Rjg5RjE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEg
LyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFj
cm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEEyMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NEY4QTMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG51bWVyaWNfbGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjRGOEE0MTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE2MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVw
cm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE3MTY5NzRERUQwMDZGQUE1
QSAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
b3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBODE2
OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhB
OTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QUExNjk3
NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFy
aWFibGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQ
YWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4Q0MxNjk3NjJBQTAw
NkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0IwMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NCwzMiArMjIwLDYgQEAKIAkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyMiw2OSArMjMyLDYgQEAKIAkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
R2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTg4MTIwMEYy
NjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxODkxMjAwRjI2MjAwMDg4RTY5IC8qIENvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5p
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyog
ZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4RjEy
MDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6
ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk0MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
OTUxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQYXJz
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOTcxMjAwRjI2
MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk4MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1l
ZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAv
KiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDE5QTEyMDBGMjYyMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRl
cm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTlCMTIw
MEYyNjIwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMTlFMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291
cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOUYxMjAw
RjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRw
dXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUExMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQTIxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRI
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTMxMjAwRjI2MjAw
MDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNDEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTgxMjAwRjI2MjAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29s
QWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUExMjAwRjI2MjAw
MDg4RTY5IC8qIGF0b20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gYXRvbS5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkg
LyogYXRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBhdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21w
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUQxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUUxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjExMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzbGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjcxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCODEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI5MTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFs
aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkMxMjAwRjI2MjAw
MDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJFMTIwMEYyNjIwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lt
Ym9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDMjEyMDBG
MjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0Yx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDExMjAw
RjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxNSwyMyArMjYyLDYgQEAKIAkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xB
bGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjQzMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0NTEyMDBG
MzVBMDAwODhFNjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBh
dG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQ2MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8q
IGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyog
Y3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJB
bGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI1ODEyMDBGMzVBMDAw
ODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3Niwz
NSArMzA2LDEzIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OwotCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovID0g
eworCQlBMjY0RjhDQjE2OTc2MkFBMDA2RkFBNUEgLyogS0hSICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyog
cHBfdXRpbHMuaCAqLywKLQkJCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3NCYXNlLmNwcCAqLywKLQkJCQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3MuaCAqLywKLQkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovLAotCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5jcHAgKi8sCi0JCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovLAotCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLywKLQkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBh
cnNlci5oICovLAotCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8s
Ci0JCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi8sCi0JCQkJQTI2NTY3
RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjY1NjdENTE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uY3BwICovLAotCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oICov
LAotCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLywK
LQkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovLAotCQkJ
CUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJCUEy
NjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjY1NjdFNDE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAotCQkJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oICovLAotCQkJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwICovLAotCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIu
aCAqLywKKwkJCQlBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCAqLywK
IAkJCSk7Ci0JCQlwYXRoID0gbmV3OworCQkJbmFtZSA9IEtIUjsKKwkJCXBhdGggPSBpbmNsdWRl
L0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUEyNjU2ODJDMTU5QzIz
RTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKQEAgLTQzMiwyNCArMzQwLDMyIEBACiAJCQlw
YXRoID0gdGltaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI5QjE1
RTkxNjk3OEI3RDAwMTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5H
ICovLAorCQkJCUEyNjRGOENCMTY5NzYyQUEwMDZGQUE1QSAvKiBLSFIgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGQjM5
RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovLAogCQkJCTMx
MkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovLAotCQkJCUZCMzlEMjIwMTIwMEYzNUEw
MDA4OEU2OSAvKiBjb21waWxlciAqLywKLQkJCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyog
U291cmNlICovLAorCQkJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAvKiBzcmMgKi8sCiAJCQkJ
NUQ3QzU5QzQxMjA4QzY4QjAwMUM4NzNFIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCUZCMzlE
MENDMTIwMEVGOUIwMDA4OEU2OSAvKiBQcm9kdWN0cyAqLywKIAkJCSk7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNl
ICovID0geworCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogc3JjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCisJCQkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJ
KTsKLQkJCW5hbWUgPSBTb3VyY2U7CisJCQluYW1lID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKIAkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICov
ID0gewpAQCAtNDYwLDk0ICszNzYsMTIgQEAKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKLQkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCi0JCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAotCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAot
CQkJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAq
LywKLQkJCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5o
ICovLAotCQkJCUZCMzlEMThGMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCi0J
CQkJRkIzOUQxOTAxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCi0JCQkJRkIzOUQx
OTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLAotCQkJCUZCMzlEMTkyMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8sCi0JCQkJRkIzOUQxOTMxMjAwRjI2MjAw
MDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAotCQkJCUZCMzlEMTk0MTIwMEYyNjIwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCi0JCQkJRkIzOUQxOTUxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQxOTYxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDE5NzEyMDBGMjYyMDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhF
NjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQxOTkxMjAwRjI2MjAwMDg4RTY5IC8q
IGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQxOUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxp
bnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5o
ICovLAotCQkJCUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJ
CQlGQjM5RDE5RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJ
CUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAotCQkJCUZC
MzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDFB
MTEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAotCQkJCUZCMzlEMUEyMTIwMEYy
NjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQlGQjM5RDFBMzEyMDBGMjYyMDAw
ODhFNjkgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlEMUE0MTIwMEYyNjIwMDA4OEU2OSAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuY3BwICovLAotCQkJCUZCMzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5oICovLAotCQkJCUZCMzlEMUE3MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3Bw
ICovLAotCQkJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKLQkJ
CQlGQjM5RDFBOTEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAotCQkJCUZCMzlE
MUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQx
QkMxMjAwRjI2MjAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCi0JCQkJRkIzOUQxQkQx
MjAwRjI2MjAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAotCQkJCUZCMzlEMUJFMTIwMEYy
NjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCi0JCQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAv
KiBTaEhhbmRsZS5oICovLAotCQkJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi8sCi0JCQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmggKi8sCi0JCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCAqLywKLQkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAq
LywKLQkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICov
LAotCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAot
CQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUEyNjU2N0I3
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyNjU2
N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCSk7Ci0J
CQlpbmNsdWRlSW5JbmRleCA9IDA7Ci0JCQluYW1lID0gY29tcGlsZXI7Ci0JCQlwYXRoID0gc3Jj
L2NvbXBpbGVyOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQxQTkx
MjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQxQUExMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20u
YyAqLywKLQkJCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkgLyogYXRvbS5oICovLAotCQkJCUZC
MzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCi0JCQkJRkIzOUQxQUQxMjAw
RjI2MjAwMDg4RTY5IC8qIGNwcC5jICovLAotCQkJCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAv
KiBjcHAuaCAqLywKLQkJCQlGQjM5RDFBRjEyMDBGMjYyMDAwODhFNjkgLyogY3Bwc3RydWN0LmMg
Ki8sCi0JCQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAotCQkJCUZC
MzlEMUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLywKLQkJCQlGQjM5RDFCMjEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCi0JCQkJRkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nh
bm5lci5jICovLAotCQkJCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8s
Ci0JCQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAotCQkJCUZC
MzlEMUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywKLQkJCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhF
NjkgLyogdG9rZW5zLmMgKi8sCi0JCQkJRkIzOUQxQkExMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vu
cy5oICovLAotCQkJKTsKLQkJCWluY2x1ZGVJbkluZGV4ID0gMDsKLQkJCXBhdGggPSBwcmVwcm9j
ZXNzb3I7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAq
LywKKwkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICov
LAorCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAog
CQkJCTMxNThFQTBDMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICov
LAogCQkJCTMxNThFQTBEMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAq
LywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCkBAIC02
NDAsMjUgKzQ3NCwzMiBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vz
c29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1
NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAotCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmMgKi8sCi0JCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20u
aCAqLywKLQkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLAotCQkJ
CUZCMzlEMjQ4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuYyAqLywKLQkJCQlGQjM5RDI0OTEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmggKi8sCi0JCQkJRkIzOUQyNEExMjAwRjM1QTAwMDg4RTY5IC8q
IGNwcHN0cnVjdC5jICovLAorCQkJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuaCAqLywKKwkJCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjRGODk2MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oICovLAorCQkJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5OTE2OTc0REVEMDA2RkFBNUEgLyogRXhw
cmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTI2NEY4OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5QjE2OTc0REVEMDA2RkFBNUEgLyogSW5w
dXQuY3BwICovLAorCQkJCUEyNjRGODlDMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oICovLAor
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCisJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uaCAqLywKKwkJCQlBMjY0RjhBMTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5jcHAgKi8sCisJCQkJQTI2NEY4QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLywKKwkJCQlBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXguaCAqLywK
KwkJCQlBMjY0RjhBNDE2OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY0
RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjY0RjhB
NjE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTI2NEY4QTcxNjk3
NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTI2NEY4QTgxNjk3NERF
RDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEg
LyogVG9rZW4uaCAqLywKKwkJCQlBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8s
CiAJCQkJNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKLQkJ
CQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8sCi0JCQkJRkIzOUQyNEMx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5oICovLAotCQkJCUZCMzlEMjREMTIwMEYzNUEwMDA4
OEU2OSAvKiBwYXJzZXIuaCAqLywKLQkJCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJl
cHJvY2Vzcy5oICovLAotCQkJCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMg
Ki8sCi0JCQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLywKLQkJCQlG
QjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQyNTIx
MjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLywKLQkJCQlGQjM5RDI1MzEyMDBGMzVBMDAw
ODhFNjkgLyogc3ltYm9scy5oICovLAotCQkJCUZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAvKiB0
b2tlbnMuYyAqLywKLQkJCQlGQjM5RDI1NTEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03MDAsMjUgKzU0MSwyOSBAQAogCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMDE1OUMyMUIx
MDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMTE1OUMyMUIx
MDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2
NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUEyNjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgwODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODBCMTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODJCMTU5
QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1
Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxNThFQTBGMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY0RjhCQzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXgu
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGls
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8q
IFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM4MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOENBMTY5NzRF
MkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcz
NCw2ICs1NzksNyBAQAogCQkJCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtz
ICovLAogCQkJCTMxMkJEQjBCMTVGRUNBQjAwMDk3RUJDNyAvKiBDb3B5RmlsZXMgKi8sCiAJCQkJ
MzEyQkRCMEQxNUZFQ0FDRTAwOTdFQkM3IC8qIENvcHlGaWxlcyAqLywKKwkJCQlBMjlCMTVFNjE2
OTc4NDQ1MDAxMTFEOTcgLyogQ29weUZpbGVzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAo
CiAJCQkpOwpAQCAtNzg5LDEzICs2MzUsNiBAQAogCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMjhGMTIwMEYzNUEw
MDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDI5MTEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
NjEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5ODEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
OTEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQy
QTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlE
MkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOSwxNyArNjU4LDYgQEAKIAkJCQlBMjY1NjdCQjE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY3QkQxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RjAxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAv
KiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1Mzkg
LyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4M0Ix
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgzNyw2ICs2NjUsMTggQEAKIAkJCQlBMjY1Njg0MDE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1OEVBMEUxNjMwOTY4RDAwNkJF
NUVFIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhB
QzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEIyMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEI0MTY5NzRE
RUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCNjE2OTc0
REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NEY4QjgxNjk3
NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEJBMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjRGOEJFMTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjRGOEMzMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NEY4QzkxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVy
aXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVyaXZlZFNvdXJjZXMu
cHJpCmluZGV4IGIzYTg5ZmMuLjhmOTUwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9E
ZXJpdmVkU291cmNlcy5wcmkKQEAgLTEzLDcgKzEzLDcgQEAgZXF1YWxzKHNhbml0aXplZEZpbGUs
ICQkdG9TYW5pdGl6ZWRQYXRoKCQkX1BST19GSUxFXykpOlRFTVBMQVRFID0gZGVyaXZlZAogCiBB
TkdMRV9GTEVYX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBc
Ci0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKKyAg
ICAkJFBXRC9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCiAKIGFuZ2xlZmxl
eC5vdXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX1fbGV4LmNwcAogYW5nbGVmbGV4LmlucHV0ID0g
QU5HTEVfRkxFWF9TT1VSQ0VTCkBAIC0yMiw3ICsyMiw3IEBAIEdFTkVSQVRPUlMgKz0gYW5nbGVm
bGV4CiAKIEFOR0xFX0JJU09OX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2ds
c2xhbmcueSBcCi0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci55CisgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLnkKIAogYW5nbGViaXNvbl9kZWNsLm91dHB1dCA9ICR7UU1BS0VfRklMRV9CQVNF
fV90YWIuaAogYW5nbGViaXNvbl9kZWNsLmlucHV0ID0gQU5HTEVfQklTT05fU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKaW5kZXggZWFhOTM2ZC4uYjc3OTUzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9UYXJnZXQucHJpCkBAIC0xMyw3ICsxMyw3IEBAIENPTkZJRyArPSBzdGF0aWNs
aWIKIAogSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9zcmMgXAotICAgICQkU09V
UkNFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldyBcCisgICAgJCRTT1VSQ0VfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IgXAogICAgICQkU09VUkNFX0RJUi9pbmNsdWRlCiAK
IEhFQURFUlMgKz0gXApAQCAtMzMsNiArMzMsNyBAQCBIRUFERVJTICs9IFwKICAgICBzcmMvY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCisgICAgc3JjL2NvbXBpbGVyL0hh
c2hOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCiAgICAgc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVEbGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmggXApAQCAtNDQsMjggKzQ1LDE5IEBAIEhFQURFUlMgKz0gXAogICAgIHNyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggXAog
ICAgIHNyYy9jb21waWxlci9QcmFnbWEuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKLSAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5w
dXQuaCBcCiAgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAot
ICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xl
eGVyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAotICAg
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0gICAgc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAotICAgIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNl
ci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCi0gICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXAotICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIFwKKyAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmggXAorICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvTWFjcm8uaCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXgu
aCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisgICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIFwKKyAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRFU1NMLmggXAogICAgIHNy
Yy9jb21waWxlci9PdXRwdXRHTFNMLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5oIFwKQEAgLTg4LDYgKzgwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL3V0
aWwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKKyAgICBzcmMvY29tcGlsZXIvVmFyaWFibGVQYWNr
ZXIuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKIAogU09VUkNFUyArPSBcCkBA
IC0xMzQsMjMgKzEyNywxNyBAQCBTT1VSQ0VTICs9IFwKICAgICBzcmMvY29tcGlsZXIvdXRpbC5j
cHAgXAogICAgIHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgXAorICAgIHNyYy9jb21waWxlci9WYXJpYWJsZVBh
Y2tlci5jcHAgXAogICAgIHNyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwK
LSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
RXhwYW5kZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAg
XAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKLSAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYworICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NC
YXNlLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorICAgIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL01hY3JvLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNz
b3IuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcCBcCiAKIHdp
bjMyOiBTT1VSQ0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCiBlbHNlOiBTT1VS
Q0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4IGQ4Mjkz
MWUuLjQ2MjM3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMjMsNiArMjMsOCBAQAogI2RlZmluZSBDT01QSUxF
Ul9FWFBPUlQKICNlbmRpZgogCisjaW5jbHVkZSAiS0hSL2tocnBsYXRmb3JtLmgiCisKIC8vCiAv
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCkBAIC0xMTAs
NyArMTEyLDEwIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggICA9ICAweDhCODcsCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhC
ODksCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX01B
UFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDhCOEIKKyAgU0hfTUFQUEVEX05BTUVfTUFY
X0xFTkdUSCAgICAgID0gIDB4NjAwMCwKKyAgU0hfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgICAg
ID0gIDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgID0gIDB4NjAwMiwK
KyAgU0hfSEFTSEVEX05BTUVTX0NPVU5UICAgICAgICAgID0gIDB4NjAwMwogfSBTaFNoYWRlcklu
Zm87CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4KQEAgLTE0NCwxMSArMTQ5LDE0IEBAIHR5cGVkZWYg
ZW51bSB7CiAgIC8vIC0gVGhlIHNoYWRlciB0eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KICAg
U0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMCwKIAorICAvLyBFbmZvcmNlIHRoZSBHTFNMIDEu
MDE3IEFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhY2tpbmcgcmVzdHJpY3Rpb25zLgorICBTSF9FTkZP
UkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TID0gMHgwODAwLAorCiAgIC8vIFRoaXMgZmxhZyBlbnN1
cmVzIGFsbCBpbmRpcmVjdCAoZXhwcmVzc2lvbi1iYXNlZCkgYXJyYXkgaW5kZXhpbmcKICAgLy8g
aXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gVGhpcyBlbnN1cmVzLCBmb3Ig
ZXhhbXBsZSwKICAgLy8gdGhhdCB5b3UgY2Fubm90IHJlYWQgb2ZmIHRoZSBlbmQgb2YgYSB1bmlm
b3JtLCB3aGV0aGVyIGFuIGFycmF5CiAgIC8vIHZlYzIzNCwgb3IgbWF0MjM0IHR5cGUuCi0gIFNI
X0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyA9IDB4MDgwMAorICBTSF9DTEFNUF9JTkRJUkVD
VF9BUlJBWV9CT1VORFMgPSAweDEwMDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAogLy8KQEAgLTE2
Myw2ICsxNzEsMTAgQEAgQ09NUElMRVJfRVhQT1JUIGludCBTaEluaXRpYWxpemUoKTsKIC8vCiBD
T01QSUxFUl9FWFBPUlQgaW50IFNoRmluYWxpemUoKTsKIAorLy8gVGhlIDY0IGJpdHMgaGFzaCBm
dW5jdGlvbi4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgaW5wdXQgc3RyaW5nOyB0aGUKKy8v
IHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIHN0cmluZyBsZW5ndGguCit0eXBlZGVmIGtocm9ub3Nf
dWludDY0X3QgKCpTaEhhc2hGdW5jdGlvbjY0KShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KTsK
KwogLy8KIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiByZXNvdXJjZXMgKGNv
bnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCiAvLyBUaGUgbmFtZXMgZm9yIHRoZXNlIHJlc291cmNl
cyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcgZ2xfL0dMXy4KQEAgLTE4NCw2ICsxOTYs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBpbnQgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwog
ICAgIGludCBPRVNfRUdMX2ltYWdlX2V4dGVybmFsOwogICAgIGludCBBUkJfdGV4dHVyZV9yZWN0
YW5nbGU7CisKKyAgICAvLyBOYW1lIEhhc2hpbmcuCisgICAgLy8gU2V0IGEgNjQgYml0IGhhc2gg
ZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCisgICAgLy8gRGVm
YXVsdCBpcyBOVUxMLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgSGFzaEZ1bmN0aW9uOwogfSBTaEJ1
aWx0SW5SZXNvdXJjZXM7CiAKIC8vCkBAIC0yNzAsNiArMjg3LDExIEBAIENPTVBJTEVSX0VYUE9S
VCBpbnQgU2hDb21waWxlKAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWlu
YXRpb24gY2hhcmFjdGVyLgogLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIGxlbmd0
aCBvZiB0aGUgbWFwcGVkIHZhcmlhYmxlIG5hbWUgaW5jbHVkaW5nCiAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9OQU1F
X01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgdXNlci1kZWZpbmVkIG5hbWUgaW5jbHVk
aW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rl
ci4KKy8vIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgaGFz
aGVkIG5hbWUgaW5jbHVkaW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6IHRoZSBu
dW1iZXIgb2YgaGFzaGVkIG5hbWVzIGZyb20gdGhlIGxhdGVzdCBjb21waWxlLgogLy8gCiAvLyBw
YXJhbXM6IFJlcXVlc3RlZCBwYXJhbWV0ZXIKIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoR2V0SW5m
byhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zNTAsNiArMzcyLDI0IEBAIENPTVBJTEVSX0VY
UE9SVCB2b2lkIFNoR2V0QWN0aXZlVW5pZm9ybShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKTsKIAorLy8g
UmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIG5hbWUgaGFzaGluZyBlbnRyeSBmcm9tIHRoZSBs
YXRlc3QgY29tcGlsZS4KKy8vIFBhcmFtZXRlcnM6CisvLyBoYW5kbGU6IFNwZWNpZmllcyB0aGUg
Y29tcGlsZXIKKy8vIGluZGV4OiBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBuYW1lIGhhc2hp
bmcgZW50cnkgdG8gYmUgcXVlcmllZC4KKy8vIG5hbWU6IFJldHVybnMgYSBudWxsIHRlcm1pbmF0
ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHVzZXIgZGVmaW5lZCBuYW1lLgorLy8gICAgICAgSXQg
aXMgYXNzdW1lZCB0aGF0IG5hbWUgaGFzIGVub3VnaCBtZW1vcnkgdG8gYWNjb21vZGF0ZSB0aGUg
bmFtZS4KKy8vICAgICAgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8gc3RvcmUg
dGhlIHVzZXIgZGVmaW5lZCBuYW1lIGNhbgorLy8gICAgICAgYmUgb2J0YWluZWQgYnkgY2FsbGlu
ZyBTaEdldEluZm8gd2l0aCBTSF9OQU1FX01BWF9MRU5HVEguCisvLyBoYXNoZWROYW1lOiBSZXR1
cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBoYXNoZWQgbmFtZSBv
ZgorLy8gICAgICAgICAgICAgdGhlIHVuaWZvcm0gdmFyaWFibGUsIEl0IGlzIGFzc3VtZWQgdGhh
dCBoYXNoZWROYW1lIGhhcyBlbm91Z2gKKy8vICAgICAgICAgICAgIG1lbW9yeSB0byBhY2NvbW9k
YXRlIHRoZSBuYW1lLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJlcXVpcmVkCisvLyAgICAgICAg
ICAgICB0byBzdG9yZSB0aGUgbmFtZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBTaEdldElu
Zm8gd2l0aAorLy8gICAgICAgICAgICAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSC4KK0NPTVBJ
TEVSX0VYUE9SVCB2b2lkIFNoR2V0TmFtZUhhc2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5k
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVk
TmFtZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjVkYjdkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8v
ICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9Owot
CW9iamVjdFZlcnNpb24gPSA0NTsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhBZ2dyZWdh
dGVUYXJnZXQgc2VjdGlvbiAqLwotCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICov
ID0gewotCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAot
CQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlBMTVFNzhCRUNERkYyMEJDM0ZGRjA0MEEg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gQWxsOwotCQkJcHJv
ZHVjdE5hbWUgPSBBbGw7Ci0JCX07Ci0vKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMDU1NjNBREZFQTE1MTE2
RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi87IH07Ci0JCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTEx
OEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3BwICovOyB9OwotCQkwQTIxNjk0OTEw
M0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5p
dGlhbGl6ZURsbC5jcHAgKi87IH07Ci0JCTBBQzE4OTdFNDYxQTBENDc1OEUzRENFMyAvKiBWZXJz
aW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3BwICovOyB9OwotCQkw
RTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQ4RDk2N0I4RDI4OEE4
MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi87IH07Ci0JCTBFQzA5QjNCMjU0
ODI5RjhGMUQ5NTJEMyAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEQzlCNjQ3RTEwRjY1RjY2MTQyRUNDMSAvKiBGb3JM
b29wVW5yb2xsLmNwcCAqLzsgfTsKLQkJMUVEMUQyQzdDNzRDNkI2MjVBRkIxQ0NGIC8qIFZhcmlh
YmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKLQkJ
Mjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhBNkRFRERGMDhEQjM3MDM5NEE3
QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLzsgfTsKLQkJMkU3QzBEMzgwNEI4MzA4QTQ5M0Q5QjRC
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi87
IH07Ci0JCTMwMjFFMEJGMUJDODQ0MkZGMUYyRjJCNCAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0E1N0M2RDQxMzc3M0FF
QkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OwotCQkzMDY1RDI5RTk3RkFDNkUxMjcz
ODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAg
Ki87IH07Ci0JCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2
REMgLyogYXRvbS5jICovOyB9OwotCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3Ry
dWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4
QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07Ci0JCTNBOTZFOUNBQzhB
MjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsg
fTsKLQkJM0YxODM4OUJDQjg5MzcwQTkzMDY2N0Y0IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjcwREM3NEEyMUZC
Q0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07Ci0JCTQwRkMxODlCOEEyNDZF
REYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5j
cHAgKi87IH07Ci0JCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2VuSExTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDk1NDlEQ0NB
RjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovOyB9OwotCQk1MERGMDAwMDVDQzQy
MTJGNkZCMTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovOyB9OwotCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi87IH07Ci0JCTVGN0I1MkE1NERDRTgxNTVFRDk0
RUNGOCAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAq
LzsgfTsKLQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlGRjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUw
MDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07Ci0JCTg4OEYxMzgyNDk4RTJENzRB
RjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovOyB9Owot
CQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdDRjFGODNFODQy
OTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJOTNBNDFB
RjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3Bw
ICovOyB9OwotCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VG
RjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07Ci0JCUEyMDEwODNCMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3Mu
Y3BwICovOyB9OwotCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEy
MDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07Ci0JCUEyMDEwODNFMTU5QzMxQTAwMEU1
N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5
MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07Ci0JCUEyMDEwODQxMTU5QzMxQTAw
MEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9Owot
CQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8q
IE1hY3JvLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OwotCQlB
MjAxMDg0NDE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JC
RSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OwotCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9r
ZW5pemVyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgKi87IH07Ci0JCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07Ci0J
CUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKLQkJQTIw
MTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NjYx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1
N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUEyMDEwODY3MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
dGVjdFJlY3Vyc2lvbi5jcHAgKi87IH07Ci0JCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owot
CQlBMjAxMDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEyMDEwODZBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NkIxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OwotCQlBMjAxMDg2QzE1
OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NzExNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3
QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovOyB9OwotCQlBMjAxMDg3MjE1OUMzMjYy
MDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwICovOyB9OwotCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyog
UmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07Ci0J
CUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyog
c3ltYm9scy5jICovOyB9OwotCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKLQkJ
QjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUw
IC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwotCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKLQkJQzRB
QUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8q
IE91dHB1dEVTU0wuY3BwICovOyB9OwotCQlDNzVFQjkyOTJBMEREQTQ1NTkyQThBQ0YgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07Ci0JCUNC
N0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAq
LzsgfTsKLQkJRDU2RjdEMDBFOUIxNjJFNDE2RDM3REYwIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdDNzVCNTc2
RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07Ci0JCUUxQzdDNURGRjBCMkRGRUMw
OTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07Ci0JCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzRE
MDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKLQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRy
YW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87
IH07Ci0JCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovOyB9OwotCQlGNUFFMkEyOTJERkFGOEMxNTg0MTJBQTIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsg
fTsKLQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3RTVCMEYwNDYzNUU2MDkw
RjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KLQkJ
MUY3MjQyNDk2MTAzRURGMjlDQzI1RDg3IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
LQkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IERB
MTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlw
ZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MTsKLQkJCXJlbW90ZUluZm8gPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCX07Ci0JCTU1RDVGOUJGNzI3
RTRBM0I2NjM3ODAyQiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgw
NzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJ
cmVtb3RlR2xvYmFsSURTdHJpbmcgPSA2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzI7Ci0JCQlyZW1v
dGVJbmZvID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCX07Ci0JCTYwRDM1NDZBQzI3QjA5NEQ2Q0Ew
NENENiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1Mzkx
MzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xv
YmFsSURTdHJpbmcgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQ7Ci0JCQlyZW1vdGVJbmZvID0g
dHJhbnNsYXRvcl9nbHNsOwotCQl9OwotLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkwNTZGRUFE
QzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBMTE4RTUwMDNFNUMwRTI1M0M1MzgzOSAv
KiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9t
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTEyRUFGMDI4MzEx
RUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAv
KiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxODJCQUQ1MEQ0RTU4Qjg4NEY1RUI5RjMg
LyogRm9yTG9vcFVucm9sbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JMb29wVW5yb2xsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFy
Y2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlh
YmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5z
bGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTNF
RTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0
aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjY4QTZBQTgxMTQ5NTcxOEE2
OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2
MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBD
NyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkg
LyogZ2xzbGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBn
bHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MjhGRjIwMTgzOUM2
RjIzM0UyNkZGREEgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1QTIxNTk5QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdXRwdXRITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEOTkz
NTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEQzlCNjQ3RTEwRjY1
RjY2MTQyRUNDMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvckxv
b3BVbnJvbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2MEMzOTk4QzlDRTY2
REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0
aWFsaXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJCNjZBQjU4NzM4
NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QkJDODIyNEI5RDhFMjM0RDExN0ZBMEMg
LyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3RDlDRjM3NkRD
NTc5OUI0QzZCMzMzMUUgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBj
cHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVO
YW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1ODQ1RkZGNUE4RTYz
MzY0MzA4MjM2RCAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
aXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODlB
NkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzbGds
b2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTAyNTQ4NDJENzI5NzU2NzJD
MkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsaWRhdGVM
aW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0Q2MUNCMEJDRTU0
RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAv
KiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMg
LyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIElu
aXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMTY0NEIwMEU5MzA0QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNs
YXRvcl9nbHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3Jf
Z2xzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSAibGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hIjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjAx
NTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODIzMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Np
b25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVz
c2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI2MTU5
QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMwMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3QkJFIC8q
IHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAv
KiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzMx
NTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEyMDEwODM3MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODQ4MTU5QzMyMDkwMEU1N0JCRSAvKiBsZW5n
dGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1p
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NDkxNTlDMzI0RjAwRTU3
QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODRD
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEUxNTlDMzI0RjAwRTU3QkJFIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODRGMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NTAxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MjE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0
ZWN0UmVjdXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
dGVjdFJlY3Vyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU0
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU2MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIw
MTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JCRSAvKiBQcmFnbWEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg2MTE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg3
MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRvcl9o
bHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfaGxzbC5h
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBNTFDNzI4QjYxNUI0MUUx
RDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUU2NUUxMzlBRTEw
REU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIxNDhEOTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRV
bmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNzU3
MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29k
ZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9s
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xT
TEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJh
bnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyog
Q29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxkX2FuZ2xlLmd5cCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBidWls
ZF9hbmdsZS5neXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNGRDEyQzZFNDZFQkUw
ODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENDBG
NzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQ1M0RERDBDREYxNUVFMURE
MDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRB
NzUgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRFU1NMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8q
IFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRl
cm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFM0EyOUI2
RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjAxM0E3MjQwQkRB
RThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2Vh
cmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGN0IyOTcx
RDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1Npbmsu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjk5RTczN0QzRkZEMzBDQTVFMzU0MTUw
IC8qIGNvbW1vbi5neXBpICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IGNvbW1vbi5neXBpOyBwYXRoID0gLi4vYnVpbGQvY29tbW9u
Lmd5cGk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZGM0FBNjk0REY5QTQ0NTVBODEz
MjM0RCAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQlBMjAxMDdGQjE1OUMz
MTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9
OwotCQlBNUM5OTRFNzREQjFFNjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwotCQl9OwotCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyogRnJhbWV3
b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlGRTM2NzlBMDk1NUIyNUVC
N0JGMTE2RTYgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
R3JvdXAgc2VjdGlvbiAqLwotCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vz
c29yICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkwQzlC
NDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovLAotCQkJCTlDRUQzQUZGMUU2MUI0NUVF
MTAwNTY1NiAvKiBhdG9tLmggKi8sCi0JCQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLywKLQkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCi0J
CQkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAotCQkJCTgwNThBMEEyQTBB
MDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKLQkJCQlBMjAxMDg0ODE1OUMzMjA5MDBF
NTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAotCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4
RSAvKiBtZW1vcnkuYyAqLywKLQkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5
LmggKi8sCi0JCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKLQkJCQlDRkQx
MkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCi0JCQkJNkJCQzgyMjRCOUQ4RTIz
NEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovLAotCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2Fu
bmVyLmggKi8sCi0JCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICov
LAotCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJN0Q5
Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKLQkJCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCi0JCQkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRB
IC8qIHRva2Vucy5oICovLAotCQkJKTsKLQkJCXBhdGggPSBwcmVwcm9jZXNzb3I7Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyog
U291cmNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
N0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCi0JCQkJQTIwMTA4NDkx
NTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKLQkJCQlB
MjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywK
LQkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAotCQkJ
CUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCi0JCQkJRjc0
NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAotCQkJCTBBMTE4RTUwMDNFNUMw
RTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCi0JCQkJQjJGNUNBMTFFRUE5MkRGMjM4NEVG
RDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIg
LyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5o
ICovLAotCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywKLQkJCQlB
MjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCi0J
CQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywK
LQkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywK
LQkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCi0J
CQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKLQkJCQlB
MjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKLQkJCQlBMjAxMDg1
NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCi0JCQkJQTIwMTA4
NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKLQkJCQlBMjAxMDg1
OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKLQkJCQk1REM5QjY0
N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCi0JCQkJMTgyQkFENTBE
NEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKLQkJCQk0OTdDNUMyNEVFRjQ2
NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdB
NiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8q
IGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xz
bGFuZ190YWIuaCAqLywKLQkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1Npbmsu
Y3BwICovLAotCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAot
CQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywKLQkJCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovLAotCQkJCTYwQzM5OThD
OUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJCQlBMENFNDM2MzE4
NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAotCQkJCTJFN0M5QjZFNkRCNzUx
RTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAotCQkJCUEyMDEwODVBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQk4NTg0NUZG
RjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCTNG
N0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCTc5OURD
OTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlDNEZFOTg4RUY5QTI5Mzg2
N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCTE1M0JGMDZCRjEyQzZGNTA0
OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCTU3Q0YxRjgzRTg0MjkwMUM0
MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJODFDQzQyNDVBOEU1
QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJREVFQUZDNjE4
QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1
MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9z
c291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRBNzUgLyogT3V0
cHV0RVNTTC5jcHAgKi8sCi0JCQkJNkJCNjZBQjU4NzM4NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVT
U0wuaCAqLywKLQkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAg
Ki8sCi0JCQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLywKLQkJ
CQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJ
CUI1NUIzNTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCTlB
NUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQk1QTIxNTk5
QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUQyQzlDOEVCNEE3RUZG
NUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQk5NzZDODMxQTc1RUJFMDA5QTk4
NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovLAotCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcx
MSAvKiBQYXJzZUhlbHBlci5oICovLAotCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQ
b29sQWxsb2MuY3BwICovLAotCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxs
b2MuaCAqLywKLQkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCi0J
CQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKLQkJCQk0ODU3
RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAotCQkJCTlENDdC
MUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAotCQkJCUI0MzZFRkYw
NjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKLQkJCQlENDBGNzhDQjlCQTBD
ODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAotCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1
N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAotCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdB
RCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAotCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAv
KiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi8sCi0JCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxl
LmggKi8sCi0JCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAq
LywKLQkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJ
CQlBMjAxMDg1RDE1OUMzMjRGMDBFNTdCQkUgLyogdGltaW5nICovLAotCQkJCTBBM0EyNjBGNTM3
OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJRDUzREREMENERjE1
RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJNkZCNzBEQzc0QTIxRkJD
RDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKLQkJCQlEREQzQjdFM0I3QjM1QTBC
ODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKLQkJCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0
RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAotCQkJCUUzQTI5QjZFOUMyMUI2N0MyNUZG
MEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAotCQkJCUFBNTNCNjYzMkM3NkY5MDVERjA4RTU2
NCAvKiBUeXBlcy5oICovLAotCQkJCUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRT
aG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5p
c3RkLmggKi8sCi0JCQkJM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAot
CQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCi0JCQkJQjE0OEQ5NjdC
OEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAotCQkJCTkwMjU0
ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCi0JCQkJMjdD
MTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCi0JCQkJNUQ5OTM1
NEM0RDgxODdEMzg0QzgxMjA3IC8qIFZhcmlhYmxlSW5mby5oICovLAotCQkJCUY3MjdBRUM5MDY3
MTJFQzIzODA0MTQ2NCAvKiBWZXJzaW9uR0xTTC5jcHAgKi8sCi0JCQkJMTIwQUQwQTNCNzY0MkZC
NUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IFNvdXJjZTsK
LQkJCXBhdGggPSBjb21waWxlcjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RCA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMTk2REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLywKLQkJ
CQlFMEVEQzQxMzBFN0QzNzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8sCi0JCQkJQjJDMTg0QzM1
NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07Ci0JCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCi0JCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCi0JCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAotCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCi0JCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCi0JCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAotCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKLQkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAotCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCi0JCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
Ci0JCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAotCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAotCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKLQkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAotCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAot
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAotCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAotCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAotCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbmV3OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewot
CQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKLQkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCi0JCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAotCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCi0JCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCi0JCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAot
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGRlcGdyYXBoOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
LQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAotCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCi0JCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKLQkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gdGltaW5nOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlD
RjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovLAotCQkJCUY5OUU3
MzdEM0ZGRDMwQ0E1RTM1NDE1MCAvKiBjb21tb24uZ3lwaSAqLywKLQkJCSk7Ci0JCQluYW1lID0g
QnVpbGQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlFMEVEQzQxMzBFN0Qz
NzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9y
X2NvbW1vbi5hICovLAotCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xh
dG9yX2dsc2wuYSAqLywKLQkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNs
YXRvcl9obHNsLmEgKi8sCi0JCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJNTg5MkM3QTM2OTUzMzA0
MzdBRkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA4Qjg4MTVDQTJFRkU2MEZEMEMwMzYx
QkYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5z
bGF0b3JfZ2xzbCIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlCQUJDRTcyMTEwNkI1QzE1
MjdFRkVGMEQgLyogU291cmNlcyAqLywKLQkJCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyog
RnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVu
ZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gdHJhbnNsYXRvcl9nbHNsOwotCQkJcHJvZHVj
dE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gQTE2NDRCMDBF
OTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovOwotCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCTZG
NEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhF
M0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRp
dmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovLAotCQkJCUE1Qzk5NEU3NERC
MUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAo
Ci0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSB0cmFuc2xhdG9y
X2NvbW1vbjsKLQkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQlwcm9kdWN0
UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29t
bW9uLmEgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJh
cnkuc3RhdGljIjsKLQkJfTsKLQkJQTIwMTA3REMxNTlDMzEzQzAwRTU3QkJFIC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdCQkUgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXByb2Nlc3NvciIgKi87Ci0JCQlidWlsZFBo
YXNlcyA9ICgKLQkJCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLywKLQkJ
CQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQli
dWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1l
ID0gcHJlcHJvY2Vzc29yOwotCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNs
YXRvcl9jb21tb24gY29weS5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1
Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCUE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hs
c2wiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMDVGM0JDQTk1MTg3NzBCRTNGMUUwQTM4
IC8qIFNvdXJjZXMgKi8sCi0JCQkJRkUzNjc5QTA5NTVCMjVFQjdCRjExNkU2IC8qIEZyYW1ld29y
a3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMg
PSAoCi0JCQkpOwotCQkJbmFtZSA9IHRyYW5zbGF0b3JfaGxzbDsKLQkJCXByb2R1Y3ROYW1lID0g
dHJhbnNsYXRvcl9obHNsOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEE0NDdGNzVGMzNEQTRDNEMx
MjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlCdWlsZEluZGVwZW5kZW50
VGFyZ2V0c0luUGFyYWxsZWwgPSBZRVM7Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENFNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9u
ID0gIlhjb2RlIDMuMSI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJ
CSk7Ci0JCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7Ci0JCQlwcm9qZWN0
RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJ
MTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKLQkJCQk2RjRGRDM1Q0IzREZDODlE
NzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCi0JCQkJNTg5MkM3QTM2OTUzMzA0MzdB
RkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLywKLQkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovLAotCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAv
KiBwcmVwcm9jZXNzb3IgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTA1RjNC
Q0E5NTE4NzcwQkUzRjFFMEEzOCAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJNEI0QkRFN0FENjI2NkIzOUVENDNDMkQ0IC8qIENvZGVHZW5ITFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTVGN0I1MkE1NERDRTgxNTVFRDk0RUNGOCAvKiBPdXRwdXRITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUU5OUQ2RDgwREJGMDVFQ0U3MTA4QjI2RCAvKiBUcmFuc2xh
dG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyOTY0NjY1NjZEOEMwRjAyM0E1NTM3NjAg
LyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODcxMTU5QzMyNjIw
MEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEy
MDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
Ci0JCX07Ci0JCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAvKiBTb3VyY2VzICovID0gewotCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJQTIwMTA4M0IxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdu
b3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNDMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIw
MTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyog
VG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDYxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJQkFCQ0U3MjExMDZCNUMxNTI3RUZFRjBE
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQlENTZGN0QwMEU5
QjE2MkU0MTZEMzdERjAgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEVD
MDlCM0IyNTQ4MjlGOEYxRDk1MkQzIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQzRBQUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOUIxMTFCODNGQjYzNkZENUNERUMzMkEwIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUM3NUVCOTI5MkEwRERBNDU1OTJBOEFDRiAvKiBPdXRwdXRH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2MyAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzRjE4Mzg5QkNCODkzNzBBOTMw
NjY3RjQgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEFDMTg5N0U0
NjFBMEQ0NzU4RTNEQ0UzIC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsK
LQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlFQUEy
MkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMzAyMUUwQkYxQkM4NDQyRkYxRjJGMkI0IC8qIGdsc2xhbmdfbGV4LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTJFN0MwRDM4MDRCODMwOEE0OTNEOUI0QiAvKiBnbHNsYW5n
X3RhYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1
IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEEyMTY5NDkxMDNFMUUyMjhG
OUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTBERjAwMDA1
Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0
MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8q
IHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlG
RjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzdDNURGRjBCMkRG
RUMwOTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDU1NjNBREZF
QTE1MTE2RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUI4QkQyNjg1QTE2QjE4OENDREZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUY2QUJENThGOENBQjc2NDFEOEJGRTkzNSAvKiBTeW1ib2xUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxRUQxRDJDN0M3NEM2QjYyNUFGQjFD
Q0YgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMyQjFEQkNENkI4M0Yy
MTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlDQjdGMEVGMEQ2QTg5RkE4
QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2
MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQkzQTk2RTlDQUM4QTI1QUYx
NTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGMDk4RjQ2M0VEQUJDRjA3
NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ4NTUxN0YwODZGRENF
RjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUU4QzcyN0FBOEU5REM1
RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAotCQkJCUI0ODU4NDE3RTU0MzY1
QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NTE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0
UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2OTE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2QzE1OUMzMjRGMDBF
NTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0v
KiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhUYXJn
ZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KLQkJQTE1RTc4QkVDREZGMjBCQzNGRkYwNDBBIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5Owot
CQkJdGFyZ2V0ID0gNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9u
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA1NUQ1RjlCRjcyN0U0QTNCNjYzNzgwMkIgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQgLyogdHJhbnNsYXRvcl9nbHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA2MEQzNTQ2QUMyN0IwOTRENkNBMDRDRDYgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSBBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9obHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSAxRjcyNDI0OTYxMDNFREYyOUNDMjVEODcgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTMy
MkE4QzYyNDIzQjU5NUUxMUJBRDQyRCAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSBB
bGw7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQk0REE0MkE3OEQzQjg1NUM5Q0Q4
RjY1OEQgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlH
Q0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RS
QUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJCQlIRUFERVJfU0VBUkNIX1BB
VEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9O
QU1FID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07
Ci0JCTRGODUxRjVCQTVGQTQzRTlFMEI5Q0I4NiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9IEFsbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJODhBREM5Mjg1
NTE5QTY2ODgwOEI1MUVFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGli
OwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJ
U0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
PUQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQ
Uk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwot
CQl9OwotCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJN
RURJQVRFX0RJUiA9ICIkKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9O
KSI7Ci0JCQkJU0hBUkVEX0lOVEVSTUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291
cmNlcy8kKENPTkZJR1VSQVRJT04pIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0J
CUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BS
RUZJWCA9IGxpYjsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQki
XCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJ
CQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJ
CSk7Ci0JCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9uIGNvcHkiOwotCQkJfTsK
LQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJQTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJl
bGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0
dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NF
U1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJ
CQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJ
CQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFu
c2xhdG9yX2NvbW1vbiBjb3B5IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJ
QUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0J
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJ
CQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfZ2xzbDsKLQkJCX07Ci0JCQluYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLQkJQjA5NkZBRjAzMkRCMTlBQjYzN0QzOEYwIC8qIFJlbGVhc2Ug
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3Mg
PSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9E
RUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwi
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwK
LQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3Jf
aGxzbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJQzQ1NDZCMTRCMEVCNUVC
OEM1RDM5REMyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJNRURJQVRFX0RJUiA9ICIkKFBST0pF
Q1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9OKSI7Ci0JCQkJU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291cmNlcy8kKENPTkZJR1VSQVRJT04p
IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJRjAyOUUwRDM2OUZBRkVBNDZC
REFGQ0VFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJCUdD
Q19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJB
Q0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFU
SFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQUk9EVUNUX05B
TUUgPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQlG
RjAxQ0RGNDU5NEUwRkY5RTU4MUIzMTkgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwi
QU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJ
SEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkp
OwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQkJfTsKLQkJCW5hbWUg
PSBEZWJ1ZzsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkwRTU5RjhGRTRBODA5
OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJi
dWlsZF9hbmdsZSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVi
dWcgKi8sCi0JCQkJQzQ1NDZCMTRCMEVCNUVCOEM1RDM5REMyIC8qIFJlbGVhc2UgKi8sCi0JCQkp
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0JCTM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRv
cl9jb21tb24iICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCi0JCQkJRkYwMUNERjQ1OTRFMEZGOUU1ODFCMzE5IC8qIERlYnVn
ICovLAotCQkJCTREQTQyQTc4RDNCODU1QzlDRDhGNjU4RCAvKiBSZWxlYXNlICovLAotCQkJKTsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9OwotCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
cyA9ICgKLQkJCQkzMjJBOEM2MjQyM0I1OTVFMTFCQUQ0MkQgLyogRGVidWcgKi8sCi0JCQkJNEY4
NTFGNUJBNUZBNDNFOUUwQjlDQjg2IC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
RGVidWc7Ci0JCX07Ci0JCThCODgxNUNBMkVGRTYwRkQwQzAzNjFCRiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9nbHNsIiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTg4QURDOTI4NTUxOUE2Njg4MDhCNTFFRSAvKiBEZWJ1ZyAqLywKLQkJCQlBRjdDMkNE
MTBDNkZFQTA3NkIxNDFFNkUgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1
ZzsKLQkJfTsKLQkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0gewotCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJ
QTIwMTA3RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAotCQkJCUEyMDEwN0ZFMTU5QzMx
M0MwMEU1N0JCRSAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9
OwotCQlDNzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQlGMDI5
RTBEMzY5RkFGRUE0NkJEQUZDRUUgLyogRGVidWcgKi8sCi0JCQkJQjA5NkZBRjAzMkRCMTlBQjYz
N0QzOEYwIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0v
KiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0g
REExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAppbmRleCA3ZDkz
NDlhLi5mZjk3MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2FuZ2xldXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2FuZ2xldXRpbHMuaApAQCAtMTksNCArMTksOCBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmlu
dGYKICNlbmRpZgogCisjZGVmaW5lIFZFTkRPUl9JRF9BTUQgMHgxMDAyCisjZGVmaW5lIFZFTkRP
Ul9JRF9JTlRFTCAweDgwODYKKyNkZWZpbmUgVkVORE9SX0lEX05WSURJQSAweDEwREUKKwogI2Vu
ZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZGVidWcuY3BwCmluZGV4IGIyMjM4ZjkuLmM0NWIyYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCkBAIC04NCw2ICs4NCwxMiBAQCBi
b29sIHBlcmZBY3RpdmUoKQogU2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRI
ZWxwZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7CiAjaWYgIWRlZmluZWQoQU5HTEVfRElT
QUJMRV9QRVJGKQorI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyAgICBpZiAoIXBl
cmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICB2
YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CiAgICAgb3V0cHV0
KHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2lu
RXZlbnQpLCBmb3JtYXQsIHZhcmFyZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKaW5kZXggOTgyOGVjZi4uNWY4ZjYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaApAQCAtNDIsMjggKzQyLDMwIEBAIG5hbWVzcGFjZSBn
bAogI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNB
QkxFX1BFUkYpCiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQot
I2RlZmluZSBUUkFDRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSh0cnVlLCAidHJhY2U6ICVzKCVk
KTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UodHJ1ZSwgInRyYWNlOiAlcyglZCk6
ICIgbWVzc2FnZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQog
I2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFy
Z3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4gbmVlZCBv
ZiBmaXhpbmcuCiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfUEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkK
ICNlbHNlCi0jZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZml4
bWU6ICVzKCVkKTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJmaXht
ZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZB
X0FSR1NfXykKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3Iu
CiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FC
TEVfUEVSRikKICNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQotI2Rl
ZmluZSBFUlIobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJlcnI6ICVzKCVkKTogIm1l
c3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg
RVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6ICIgbWVzc2Fn
ZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQogI2VuZGlmCiAK
IC8vIEEgbWFjcm8gdG8gbG9nIGEgcGVyZm9ybWFuY2UgZXZlbnQgYXJvdW5kIGEgc2NvcGUuCiAj
aWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikKICNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4pIGdsOjpTY29w
ZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyICMjIF9fTElORV9fKF9fRlVO
Q1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKKyNlbHNlCisjZGVmaW5lIEVWRU5U
KG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29wZWRQZXJmRXZlbnRI
ZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKICNlbmRpZgogCiAvLyBBIG1hY3Jv
IGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVi
dWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3Zl
cnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCmlu
ZGV4IGJkZDE2MjQuLmRiZThjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdmVyc2lvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vdmVyc2lvbi5oCkBAIC0xLDEwICsxLDEyIEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04g
MQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVm
aW5lIEJVSUxEX1JFVklTSU9OIDExNjYKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTY0MQogCiAj
ZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5H
SUZZKHgpCiAKICNkZWZpbmUgUkVWSVNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9S
RVZJU0lPTikKICNkZWZpbmUgVkVSU0lPTl9TVFJJTkcgTUFDUk9fU1RSSU5HSUZZKE1BSk9SX1ZF
UlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoTUlOT1JfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklO
R0lGWShCVUlMRF9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKEJVSUxEX1JFVklTSU9OKQor
CisjZGVmaW5lIFZFUlNJT05fRFdPUkQgKChNQUpPUl9WRVJTSU9OIDw8IDI0KSB8IChNSU5PUl9W
RVJTSU9OIDw8IDE2KSB8IEJVSUxEX1JFVklTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKaW5kZXggZGI1ZjcyOS4uZGNlOGM2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Zh
bGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCkBAIC0xMTQs
NiArMTE1LDkgQEAgVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIAogYm9vbCBUQ29tcGlsZXI6Oklu
aXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCiB7CisgICAgbWF4VW5pZm9y
bVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CisgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CisgICAgICAgIHJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzOwogICAgIFRTY29wZWRQb29sQWxsb2NhdG9yIHNjb3BlZEFs
bG9jKCZhbGxvY2F0b3IsIGZhbHNlKTsKIAogICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5bWJv
bCB0YWJsZS4KQEAgLTEyMSw2ICsxMjUsOCBAQCBib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEluaXRFeHRlbnNpb25CZWhhdmlvcihyZXNvdXJjZXMsIGV4dGVuc2lvbkJlaGF2aW9yKTsKIAor
ICAgIGhhc2hGdW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTk0LDExICsyMDAsMTkgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUo
Y29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICAvLyBDYWxsIG1hcExv
bmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgog
ICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBt
YXBwZWQgc3ltYm9sIG5hbWVzIGFuZAogICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFw
cGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpKQorICAgICAgICAv
LyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlz
IGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCiAg
ICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKIAotICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKSkKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQVRUUklCVVRFU19VTklGT1JN
UykpIHsKICAgICAgICAgICAgIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMocm9vdCk7CisgICAgICAg
ICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
KSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25z
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsICJ0b28gbWFueSB1bmlmb3JtcyIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkK
ICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwpAQCAtMjI4LDYgKzI0
Miw3IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVp
bHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogCiB2b2lkIFRDb21waWxlcjo6Y2xlYXJSZXN1bHRz
KCkKIHsKKyAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51cCgpOwogICAgIGluZm9TaW5rLmlu
Zm8uZXJhc2UoKTsKICAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKICAgICBpbmZvU2luay5kZWJ1
Zy5lcmFzZSgpOwpAQCAtMjM2LDcgKzI1MSw4IEBAIHZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3Vs
dHMoKQogICAgIHVuaWZvcm1zLmNsZWFyKCk7CiAKICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5DbGVhbnVwKCk7Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKworICAgIG5h
bWVNYXAuY2xlYXIoKTsKIH0KIAogYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50
ZXJtTm9kZSogcm9vdCkKQEAgLTMxMiwxMCArMzI4LDE2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZv
cmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQogCiB2
b2lkIFRDb21waWxlcjo6Y29sbGVjdEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkK
IHsKLSAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMp
OworICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcywg
aGFzaEZ1bmN0aW9uKTsKICAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7CiB9CiAKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCit7CisgICAgVmFyaWFibGVQ
YWNrZXIgcGFja2VyOworICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNr
aW5nTGltaXRzKG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Cit9CisKIHZvaWQgVENvbXBp
bGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAKaW5kZXggNWY5M2EwMy4uMDZmMzcwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
CkBAIC02LDEwICs2LDE0IEBACiAKICNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgog
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAot
VERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOiBtSW5mb1Np
bmsoaW5mb1NpbmspCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6CisgICAgbUluZm9TaW5rKGluZm9TaW5rKSwKKyAgICBtTnVtRXJyb3JzKDApLAorICAg
IG1OdW1XYXJuaW5ncygwKQogewogfQogCkBAIC0yMyw5ICsyNywyMyBAQCB2b2lkIFREaWFnbm9z
dGljczo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKIHsKLSAgICBUSW5mb1NpbmtCYXNlJiBz
aW5rID0gbUluZm9TaW5rLmluZm87Ci0gICAgVFByZWZpeFR5cGUgcHJlZml4ID0gc2V2ZXJpdHkg
PT0gRVJST1IgPyBFUHJlZml4RXJyb3IgOiBFUHJlZml4V2FybmluZzsKKyAgICBUUHJlZml4VHlw
ZSBwcmVmaXggPSBFUHJlZml4Tm9uZTsKKyAgICBzd2l0Y2ggKHNldmVyaXR5KQorICAgIHsKKyAg
ICAgIGNhc2UgRVJST1I6CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgcHJlZml4ID0g
RVByZWZpeEVycm9yOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgV0FSTklORzoKKyAgICAg
ICAgKyttTnVtV2FybmluZ3M7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIAorICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1Npbmsu
aW5mbzsKICAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tl
bicgOiBleHRyYWluZm8gKi8KICAgICBzaW5rLnByZWZpeChwcmVmaXgpOwogICAgIHNpbmsubG9j
YXRpb24oRW5jb2RlU291cmNlTG9jKGxvYy5maWxlLCBsb2MubGluZSkpOwpAQCAtNDEsNCArNTks
NSBAQCB2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCiB7CisgICAgd3JpdGVJbmZvKHNldmVyaXR5
KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAppbmRleCA0M2ExMzA2Li5j
YjcxYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJ
Q1NfSF8KICNkZWZpbmUgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KIAotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgiCiAKIGNsYXNzIFRJbmZvU2luazsKIApAQCAt
MTksNiArMTksOSBAQCBjbGFzcyBURGlhZ25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNz
CiAKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9CiAKKyAg
ICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorICAgIGludCBu
dW1XYXJuaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1OdW1XYXJuaW5nczsgfQorCiAgICAgdm9pZCB3
cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHJlYXNvbiwKQEAgLTM0LDYgKzM3LDggQEAgY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGlj
IHBwOjpEaWFnbm9zdGljcwogCiAgIHByaXZhdGU6CiAgICAgVEluZm9TaW5rJiBtSW5mb1Npbms7
CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgaW50IG1OdW1XYXJuaW5nczsKIH07CiAKICNlbmRp
ZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmluZGV4IDIxZDNkZmMu
Ljk1Y2E1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgImNv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgi
CiAKIGNsYXNzIFREaWFnbm9zdGljczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQyMTQxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0hB
U0hfTkFNRVNfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhB
U0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3Ry
aW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNI
X05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwCmluZGV4IDkyYzQ1MDUuLjkwMzJiM2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCkBA
IC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCisjaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5hbWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
bG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKQEAgLTE0NDUsMyArMTQ0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNp
Y1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJtQwogICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSks
IG5vZGUtPmdldExpbmUoKSk7CiB9CiAKKy8vIHN0YXRpYworVFN0cmluZyBUSW50ZXJtVHJhdmVy
c2VyOjpoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uKQoreworICAgIGlmIChoYXNoRnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIGtocm9ub3NfdWludDY0X3QgbnVtYmVyID0gKCpoYXNo
RnVuY3Rpb24pKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgVFN0cmluZ1N0cmVh
bSBzdHJlYW07CisgICAgc3RyZWFtIDw8IEhBU0hFRF9OQU1FX1BSRUZJWCA8PCBzdGQ6OmhleCA8
PCBudW1iZXI7CisgICAgVFN0cmluZyBoYXNoZWROYW1lID0gc3RyZWFtLnN0cigpOworICAgIHJl
dHVybiBoYXNoZWROYW1lOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmluZGV4IDY0ZWU5MmQuLjAzMzE3NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAK
QEAgLTYsOCArNiwxMSBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0RVNTTC5oIgogCi1U
T3V0cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rKQorVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
ICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3lt
Ym9sVGFibGUpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0RVNTTC5oCmluZGV4IDRmYTczYzguLmRkOGM1YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaApAQCAtMTIsNyAr
MTIsMTAgQEAKIGNsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQogewog
cHVibGljOgotICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworICAgIFRP
dXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcAppbmRleCBkZDMxYjRiLi41ODczMDQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCkBAIC02LDgg
KzYsMTEgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKIAotVE91dHB1dEdM
U0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspCi0gICAgOiBUT3V0cHV0R0xT
TEJhc2Uob2JqU2luaykKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuaAppbmRleCAwZmUyMzU2Li45MDMwMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKQEAgLTEyLDcgKzEyLDEwIEBA
CiBjbGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKIHsKIHB1YmxpYzoK
LSAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xT
TChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuY3BwCmluZGV4IDIxMDBlYWEuLjNjM2M5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApAQCAtOSwzNSAr
OSw2IEBACiAKIG5hbWVzcGFjZQogewotVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYg
dHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsKLSAgICBpZiAodHlwZS5pc01hdHJpeCgp
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQiOwotICAgICAgICBvdXQgPDwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJv
b2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNp
emUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmco
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOwotfQotCiBUU3RyaW5n
IGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCiB7CiAgICAgQVNTRVJUKHR5cGUuaXNB
cnJheSgpKTsKQEAgLTY2LDEwICszNywxNiBAQCBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlKiBub2RlKSB7CiB9CiB9ICAvLyBuYW1lc3BhY2UKIAotVE91dHB1dEdMU0xCYXNlOjpU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaykKK1RPdXRwdXRHTFNMQmFzZTo6
VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKICAgICAgIG1PYmpTaW5rKG9ialNpbmsp
LAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKKyAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMoZmFsc2UpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAg
bU5hbWVNYXAobmFtZU1hcCksCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiB7CiB9
CiAKQEAgLTEwMSw3ICs3OCw3IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSAmJgogICAgICAgICAobURlY2xhcmVkU3RydWN0cy5maW5kKHR5cGUuZ2V0VHlw
ZU5hbWUoKSkgPT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCiAgICAgewotICAgICAgICBvdXQg
PDwgInN0cnVjdCAiIDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAie1xuIjsKKyAgICAgICAgb3V0
IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICJ7XG4iOwog
ICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAgLTExMCw3ICs4Nyw3IEBAIHZvaWQg
VE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAg
ICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CiAgICAgICAgICAgICBpZiAod3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZFR5cGUtPmdldFByZWNpc2lvbigpKSkKICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVs
ZFR5cGUpIDw8ICIgIiA8PCBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAg
b3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZFR5cGUpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZFR5
cGUtPmdldEZpZWxkTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXko
KSkKICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKICAg
ICAgICAgICAgIG91dCA8PCAiO1xuIjsKQEAgLTE0MCw3ICsxMTcsNyBAQCB2b2lkIFRPdXRwdXRH
TFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBh
cmdzKQogCiAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOwog
ICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgbmFt
ZTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobmFtZSk7CiAgICAgICAgIGlm
ICh0eXBlLmlzQXJyYXkoKSkKICAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKHR5cGUp
OwogCkBAIC0xNTcsNyArMTM0LDcgQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0xC
YXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCiAKICAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAgICAgewotICAgICAgICBvdXQgPDwgdHlw
ZS5nZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUuZ2V0
VHlwZU5hbWUoKSkgPDwgIigiOwogICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAg
LTE5Niw3ICsxNzMsNyBAQCB2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCogbm9kZSkKICAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VTeW1ib2xX
aXRoVmFsdWUobm9kZSkpCiAgICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29wSW5kZXhW
YWx1ZShub2RlKTsKICAgICBlbHNlCi0gICAgICAgIG91dCA8PCBub2RlLT5nZXRTeW1ib2woKTsK
KyAgICAgICAgb3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCiAg
ICAgaWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkK
ICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKQEAgLTI3Miw3
ICsyNDksNyBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIuIjsKICAgICAgICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogQVNTRVJUCi0gICAgICAg
ICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgaGFzaE5hbWUobm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ5Niw3ICs0NzMsNyBAQCBib29sIFRPdXRwdXRHTFNMQmFz
ZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgIEFTU0VSVCh2
aXNpdCA9PSBQcmVWaXNpdCk7CiAgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBub2RlLT5nZXROYW1lKCk7Cisg
ICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAKICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CiAgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVy
cyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKQEAgLTUwOSw3ICs0ODYsNyBAQCBib29sIFRPdXRwdXRH
TFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCiAgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgogICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5v
ZGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhh
c2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAogICAgICAgICAgICAgaW5jcmVtZW50
RGVwdGgoKTsKICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlu
cyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCkBAIC01MzksOCArNTE2LDcgQEAgYm9vbCBUT3V0
cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQogICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KICAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5n
IGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAg
ICAgICAgICAgewpAQCAtNjAxLDcgKzU3Nyw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpOwotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOwor
ICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICIo
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CiAgICAgICAgICAgICB7CkBAIC03NDcsMyArNzIzLDU5IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgewogICAgICAgICBvdXQgPDwgIntc
bn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgogICAgIH0KIH0KKworVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
b3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2
ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNM
QmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobUhhc2hGdW5j
dGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAg
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5kKG5hbWUuY19zdHIoKSk7
CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhh
c2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFtZS5jX3N0cigpXSA9IGhh
c2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgICAg
IHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHJl
dHVybiBoYXNoTmFtZShuYW1lKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmgKaW5kZXggZWZkMGI1Zi4uMDFlOWQ0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0xCYXNlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEdMU0xCYXNlLmgKQEAgLTE2LDcgKzE2LDEwIEBACiBjbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgogewogcHVibGljOgotICAgIFRPdXRwdXRHTFNMQmFzZShU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFz
ZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
VEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CkBAIC0yNSw2ICsy
OCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbikgPSAwOwogICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKTsKICAgICBjb25zdCBDb25zdGFudFVu
aW9uKiB3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50
VW5pb24qIHBDb25zdFVuaW9uKTsKKyAgICBUU3RyaW5nIGdldFR5cGVOYW1lKGNvbnN0IFRUeXBl
JiB0eXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKTsKQEAgLTM3LDYgKzQxLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQg
dmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpOwogCisKKyAgICAvLyBSZXR1cm4gdGhl
IG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7CisgICAgLy8g
b3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUuCisgICAgVFN0cmluZyBoYXNoTmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRo
b3V0IGhhc2hpbmcgYnVpbHQtaW4gdmFyaWFibGVzLgorICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxl
TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1
dCB3aXRob3V0IGhhc2hpbmcgYnVpbHQtaW4gZnVuY3Rpb25zLgorICAgIFRTdHJpbmcgaGFzaEZ1
bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworCiBwcml2YXRlOgogICAg
IFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOwogICAgIGJvb2wgbURlY2xhcmluZ1ZhcmlhYmxlczsK
QEAgLTQ4LDYgKzYxLDEyIEBAIHByaXZhdGU6CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJl
ZFN0cnVjdHM7CiAKICAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworCisgICAgLy8gbmFt
ZSBoYXNoaW5nLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKKyAgICBOYW1l
TWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwogfTsKIAog
I2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCmluZGV4
IGQ3ZTY5ZDMuLmE0MzA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTg3LDYgKzg3LDggQEAgT3V0cHV0SExTTDo6
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1
ZSwgdHJ1ZSwgdHIKICAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOwogICAg
IG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKICAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSBmYWxzZTsKKworICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwogfQogCiBPdXRw
dXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC00MjAsMjYgKzQyMiwxMiBAQCB2b2lkIE91dHB1dEhM
U0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICBvdXQgPDwgIHVuaWZv
cm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICAvLyBUaGUgdGV4dHVyZSBmZXRj
aCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBhbm90aGVy
LiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9tIGxlZnQi
LCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAgICAgIC8v
IGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zIGV4
cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAgICAgICAg
Ly8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25z
IGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBz
aW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+IDEtWSwg
d2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUg
dGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUg
cHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwotICAgICAg
ICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1osIHdoaWNo
IGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9y
IGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBbLTEsIDFd
IC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3IgdGhlCi0g
ICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndyb25nIHNp
ZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFuZ2luZyB0
aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJvdWdob3V0
IHRoZSBjb2RlLgogICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMs
IGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngs
IHQueSwgMCwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtNDQ4LDcgKzQzNiw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJETG9kKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgbG9kKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKICAg
ICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAg
IH0KQEAgLTQ1NywxMiArNDQ1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVy
MkQgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCAxIC0gdC55
IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAg
ICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ3MSwxMiArNDU5LDEyIEBAIHZvaWQg
T3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIGxvZCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1c
biIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgbG9kKVxuIgog
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgbG9kKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgog
ICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ4NSw3ICs0NzMsNyBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgogICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VC
RWxvZChzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC00OTQsNyArNDgyLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQo
dC54LCAtdC55LCB0LnosIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MTM1Miw3ICsxMzQwLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgog
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUt
PmdldE5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+
Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgpKSA8PCAobU91dHB1
dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwogCiAgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAKQEAgLTEzNzQsNiArMTM2
MiwxNCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQogCiAgICAgICAgICAgICBvdXQgPDwgIik7XG4iOwogCisgICAg
ICAgICAgICAvLyBBbHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAorICAg
ICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rp
b24gPSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
MTg2Miw3ICsxODU4LDIxIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkK
ICAgICB7CiAgICAgICBjYXNlIEVPcEtpbGw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlz
Y2FyZDtcbiIsICIiLCAiIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQnJlYWs6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJicmVhaztcbiIsICIiLCAiIik7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BCcmVhazoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CisgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxv
b3BJbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0cnVl
OyBicmVhazt9XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0cHV0
VHJpcGxldCh2aXNpdCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7CiAgICAgICBjYXNl
IEVPcFJldHVybjoKICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQpAQCAtMjA1MiwxMyAr
MjA2MiwzNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNl
c3NpdmUgbG9vcAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpy
ZXN0b3JlSW5kZXggPSBtRXhjZXNzaXZlTG9vcEluZGV4OworICAgICAgICAgICAgbUV4Y2Vzc2l2
ZUxvb3BJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgIntpbnQgIjsKKyAgICAg
ICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgor
ICAgICAgICAgICAgICAgICAgICJib29sIEJyZWFrIjsKKyAgICAgICAgICAgIGluZGV4LT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiID0gZmFsc2U7XG4iOworCisgICAgICAg
ICAgICBib29sIGZpcnN0TG9vcEZyYWdtZW50ID0gdHJ1ZTsKKwogICAgICAgICAgICAgd2hpbGUg
KGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBjbGFt
cGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFU
SU9OUywgaXRlcmF0aW9ucyk7CiAKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdt
ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJpZigh
QnJlYWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8g
TGFzdCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVh
ayBmbGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5k
ZXggKz0gaW5jcmVtZW50KQogCi0gICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoaW50ICI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKICAgICAgICAgICAgICAgICBpbmRleC0+dHJh
dmVyc2UodGhpcyk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwogICAgICAgICAgICAg
ICAgIG91dCA8PCBpbml0aWFsOwpAQCAtMjA4NSw5ICsyMTE5LDIwIEBAIGJvb2wgT3V0cHV0SExT
TDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAg
b3V0IDw8ICI7fVxuIjsKIAorICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBm
YWxzZTsKKwogICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAq
IGluY3JlbWVudDsKICAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJB
VElPTlM7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAi
fSI7CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7CiAK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAppbmRleCBlYTI4YTNjLi5kYzg0
M2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKQEAgLTE0NCw2ICsxNDQsOCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwogICAg
IGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKICAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3Vz
TG9vcDsKKworICAgIFRJbnRlcm1TeW1ib2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7CiB9OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAppbmRleCBiMzExNTI2Li43ZTVmY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEwLDcgKzEwLDcg
QEAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAogLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KIC8vCkBAIC0xODQsNyArMTg0LDYgQEAgdm9pZCBUUGFyc2VDb250ZXh0OjplcnJv
cihUU291cmNlTG9jIGxvYywKICAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0
aWNzOjpFUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRv
a2VuLCBleHRyYUluZm8pOwogCi0gICAgKytudW1FcnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29u
dGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKQEAgLTg0NywxNCArODQ2LDI2IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBl
KiB0eXBlLCBpbnQgc2l6ZSwKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCitib29sIFRQYXJz
ZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewotICAgIC8vCi0gICAgLy8g
TWFrZSB0aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCi0gICAgLy8KLSAgICBpZiAodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KICAgICAg
ICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNv
bnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzU3RydWN0dXJlQ29udGFp
bmluZ0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAic3RydWN0
dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNl
IHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTUxMCw3ICsxNTIxLDcgQEAgaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKIAogICAgIGds
c2xhbmdfZmluYWxpemUoY29udGV4dCk7CiAKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChj
b250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKKyAgICByZXR1cm4gKGVycm9yID09IDAp
ICYmIChjb250ZXh0LT5udW1FcnJvcnMoKSA9PSAwKSA/IDAgOiAxOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKaW5kZXgg
OGRlZThmZC4uNjY4ZTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIv
RGlhZ25vc3RpY3MuaCIKICNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKQEAgLTMzLDcgKzMzLDYgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCiAgICAgICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAogICAgICAgICAgICAgdHJl
ZVJvb3QoMCksCi0gICAgICAgICAgICBudW1FcnJvcnMoMCksCiAgICAgICAgICAgICBsZXhBZnRl
clR5cGUoZmFsc2UpLAogICAgICAgICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKICAgICAgICAg
ICAgIHN0cnVjdE5lc3RpbmdMZXZlbCgwKSwKQEAgLTUyLDcgKzUxLDYgQEAgc3RydWN0IFRQYXJz
ZUNvbnRleHQgewogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25zdCBjaGFyKiBzb3Vy
Y2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KICAgICBUSW50ZXJt
Tm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVk
Ci0gICAgaW50IG51bUVycm9yczsKICAgICBib29sIGxleEFmdGVyVHlwZTsgICAgICAgICAgIC8v
IHRydWUgaWYgd2UndmUgcmVjb2duaXplZCBhIHR5cGUsIHNvIGNhbiBvbmx5IGJlIGxvb2tpbmcg
Zm9yIGFuIGlkZW50aWZpZXIKICAgICBpbnQgbG9vcE5lc3RpbmdMZXZlbDsgICAgICAgIC8vIDAg
aWYgb3V0c2lkZSBhbGwgbG9vcHMKICAgICBpbnQgc3RydWN0TmVzdGluZ0xldmVsOyAgICAgIC8v
IGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1Y3QgZGVjbGFyYXRpb24KQEAgLTY3LDYg
KzY1LDcgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJl
cHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7CiAKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KICAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwpAQCAtOTgsNyArOTcs
NyBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwog
ICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1Ymxp
Y1R5cGUmIHBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGludCBs
aW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wg
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOwog
ICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBUU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCmluZGV4IDljZDZlNWUuLjM5MDhi
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5h
bWVGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCkBAIC0yMCw3ICsyMCw3IEBAIHB1YmxpYzoKICAgICAsIG1PbGRGdW5j
dGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQogICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5j
dGlvbk5hbWUpIHt9CiAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQogICAgIHsKICAgICAgICAgVE9wZXJh
dG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKICAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8
fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rp
b25OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAppbmRleCAzZWFmMTlmLi5hMmM1ZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUg
ImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZp
b3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9IYXNoTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCkBAIC02OSw2ICs3MCwxMCBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1cm4g
dW5pZm9ybXM7IH0KICAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0OwogCisg
ICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBoYXNo
RnVuY3Rpb247IH0KKyAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1cm4gbmFtZU1hcDsg
fQorICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVybiBzeW1ib2xUYWJs
ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgU2hTaGFkZXJUeXBlIGdldFNoYWRlclR5cGUoKSBjb25z
dCB7IHJldHVybiBzaGFkZXJUeXBlOyB9CiAgICAgU2hTaGFkZXJTcGVjIGdldFNoYWRlclNwZWMo
KSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9CkBAIC04OSw2ICs5NCw5IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIg
YXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYworICAgIC8v
IEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkg
dW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCiAgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCkBAIC0xMDYs
NiArMTE0LDggQEAgcHJpdmF0ZToKICAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsKICAgICBT
aFNoYWRlclNwZWMgc2hhZGVyU3BlYzsKIAorICAgIGludCBtYXhVbmlmb3JtVmVjdG9yczsKKwog
ICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVj
LCBhbmQgcmVzb3VyY2VzLgogICAgIC8vIEl0IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8t
Y29tcGlsZS4KICAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGU7CkBAIC0xMjIsNiArMTMyLDEw
IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2lu
Z2xldG9uLgogICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsKKworICAgIC8vIG5hbWUgaGFz
aGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbjsKKyAgICBOYW1lTWFwIG5h
bWVNYXA7CiB9OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4IDU2ZjVjN2YuLmFiNTY1MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAg
LTEyNSw2ICsxMjUsOSBAQCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVz
b3VyY2VzKiByZXNvdXJjZXMpCiAgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMgPSAwOwogICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7CiAgICAg
cmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworCisgICAgLy8gRGlzYWJsZSBu
YW1lIGhhc2hpbmcgYnkgZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkhhc2hGdW5jdGlvbiA9IE5V
TEw7CiB9CiAKIC8vCkBAIC0yMjQsNiArMjI3LDIyIEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNo
SGFuZGxlIGhhbmRsZSwgU2hTaGFkZXJJbmZvIHBuYW1lLCBpbnQqIHBhcmFtcykKICAgICAgICAg
Ly8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgogICAgICAgICAqcGFyYW1z
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hf
TkFNRV9NQVhfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoK
KyAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDY0
IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKKyAgICAgICAg
ICAgIC8vIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1l
UHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAqcGFyYW1zID0gMTYg
KyBzaXplb2YoSGFzaGVkTmFtZVByZWZpeCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxl
ci0+Z2V0TmFtZU1hcCgpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CiB9CkBAIC0yODMsMyArMzAyLDQ2IEBAIHZvaWQgU2hHZXRBY3Rp
dmVVbmlmb3JtKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKICAgICBnZXRWYXJpYWJsZUluZm8oU0hf
QUNUSVZFX1VOSUZPUk1TLAogICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGluZGV4LCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUpOwogfQorCit2b2lkIFNoR2V0TmFtZUhh
c2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKK3sKKyAgICBpZiAo
IWhhbmRsZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21w
aWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIGNvbnN0IE5hbWVNYXAm
IG5hbWVNYXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOworICAgIGlmIChpbmRleCA+PSBzdGF0
aWNfY2FzdDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBpbmRleDsgKytpKQorICAgICAgICArK2l0OworCisgICAgc2l6ZV90IGxlbiA9
IGl0LT5maXJzdC5sZW5ndGgoKSArIDE7CisgICAgaW50IG1heF9sZW4gPSAwOworICAgIFNoR2V0
SW5mbyhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KGxlbikgPiBtYXhfbGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgIGxlbiA9IG1heF9sZW47CisgICAgfQorICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0
LmNfc3RyKCksIGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRo
ZSBzb3VyY2UgaXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgbmFtZVtsZW5dID0gJ1wwJzsK
KworICAgIGxlbiA9IGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAxOworICAgIG1heF9sZW4gPSAwOwor
ICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVu
KTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsZW4pID4gbWF4X2xlbikgeworICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAgICBzdHJuY3B5
KGhhc2hlZE5hbWUsIGl0LT5zZWNvbmQuY19zdHIoKSwgbGVuKTsKKyAgICAvLyBUbyBiZSBvbiB0
aGUgc2FmZSBzaWRlIGluIGNhc2UgdGhlIHNvdXJjZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZC4K
KyAgICBoYXNoZWROYW1lW2xlbl0gPSAnXDAnOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKaW5kZXggNjhmMDI5ZC4uODQ3
YzFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5
bWJvbFRhYmxlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0yMCw5ICsyMCwxNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKIAotLy8KLS8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNlIHRv
IGxpdmUuCi0vLworVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6CisgICAgICAg
ICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihwLnF1
YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJheSks
IGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAgICAgICBtYXhBcnJheVNpemUoMCksIGFy
cmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIGRl
ZXBlc3RTdHJ1Y3ROZXN0aW5nKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1l
KDApCit7CisgICAgaWYgKHAudXNlckRlZikgeworICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJE
ZWYtPmdldFN0cnVjdCgpOworICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNl
ckRlZi0+Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgY29tcHV0ZURlZXBlc3RTdHJ1
Y3ROZXN0aW5nKCk7CisgICAgfQorfQogCiAvLwogLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFu
Z2xlZCBuYW1lcy4KQEAgLTkyLDYgKzk5LDI1IEBAIHZvaWQgVFR5cGU6OmNvbXB1dGVEZWVwZXN0
U3RydWN0TmVzdGluZygpCiAgICAgZGVlcGVzdFN0cnVjdE5lc3RpbmcgPSAxICsgbWF4TmVzdGlu
ZzsKIH0KIAorYm9vbCBUVHlwZTo6aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyID0gc3RydWN0
dXJlLT5iZWdpbigpOyBtZW1iZXIgIT0gc3RydWN0dXJlLT5lbmQoKTsgbWVtYmVyKyspCisgICAg
eworICAgICAgICBpZiAobWVtYmVyLT50eXBlLT5pc0FycmF5KCkgfHwKKyAgICAgICAgICAgIG1l
bWJlci0+dHlwZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gRHVtcCBmdW5jdGlvbnMuCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAppbmRleCAzMzYxNmRjLi5h
ODk0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaApAQCAtMjk4LDYgKzI5OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzeW1ib2w7CiAgICAgfQogCisgICAgVFN5bWJvbCAqZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsKKyAg
ICB9CisKICAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xvYmFsTGV2ZWwoKSB7CiAgICAgICAg
IGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CiAgICAgICAgIHJldHVybiB0YWJsZVsxXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwCmluZGV4IGQ5MGM3MGMuLmE0ZjA0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcApAQCAtMjYs
NyArMjYsNyBAQCB2b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJv
b3QpIHsKICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9u
RGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAg
IFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luayk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNT
TChzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgp
KTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0RVNTTCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCmlu
ZGV4IGJhMzgxMTIuLjVmM2RiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcApAQCAtMzksNiArMzksNiBAQCB2
b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBn
ZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihz
aW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNM
IG91dHB1dEdMU0woc2luayk7CisgICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKICAgICByb290
LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UeXBlcy5oCmluZGV4IGUxYTE4ZmQuLmQ0NTc2NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSwxMCArMTEsMTIgQEAKICNp
bmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgog
CitjbGFzcyBUVHlwZTsKK3N0cnVjdCBUUHVibGljVHlwZTsKKwogLy8KIC8vIE5lZWQgdG8gaGF2
ZSBhc3NvY2lhdGlvbiBvZiBsaW5lIG51bWJlcnMgdG8gdHlwZXMgaW4gYSBsaXN0IGZvciBidWls
ZGluZyBzdHJ1Y3RzLgogLy8KLWNsYXNzIFRUeXBlOwogc3RydWN0IFRUeXBlTGluZSB7CiAgICAg
VFR5cGUqIHR5cGU7CiAgICAgaW50IGxpbmU7CkBAIC0yNyw1OSArMjksMTQgQEAgaW5saW5lIFRU
eXBlTGlzdCogTmV3UG9vbFRUeXBlTGlzdCgpCiAgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRUeXBl
TGlzdDsKIH0KIAotLy8KLS8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gd2l0
aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKLS8vIHR5cGVzIHRoYXQgaXQgdGhpbmtz
IGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hvdWxkCi0vLyBqdXN0IGJlIHVz
ZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBhbnl0aGluZyBlbHNlLiAgUG9p
bnRlcnMKLS8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWluZyB0byBhdm9pZCBsb3RzIG9m
IG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgotLy8KLS8vIE5vdCBhcyBiYWQgYXMgaXQgbG9v
a3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpZWxkcwotLy8gbWF0
Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgotLy8KLWNs
YXNzIFRQdWJsaWNUeXBlIHsKLXB1YmxpYzoKLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci0gICAgVFF1
YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgaW50IHNp
emU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJy
YXkKLSAgICBib29sIG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7
Ci0gICAgVFR5cGUqIHVzZXJEZWY7Ci0gICAgaW50IGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2lj
KFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIgcSwgaW50IGxuID0gMCkKLSAgICB7Ci0gICAgICAg
IHR5cGUgPSBidDsKLSAgICAgICAgcXVhbGlmaWVyID0gcTsKLSAgICAgICAgcHJlY2lzaW9uID0g
RWJwVW5kZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7
Ci0gICAgICAgIGFycmF5ID0gZmFsc2U7Ci0gICAgICAgIGFycmF5U2l6ZSA9IDA7Ci0gICAgICAg
IHVzZXJEZWYgPSAwOwotICAgICAgICBsaW5lID0gbG47Ci0gICAgfQotCi0gICAgdm9pZCBzZXRB
Z2dyZWdhdGUoaW50IHMsIGJvb2wgbSA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7
Ci0gICAgICAgIG1hdHJpeCA9IG07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShib29sIGEs
IGludCBzID0gMCkKLSAgICB7Ci0gICAgICAgIGFycmF5ID0gYTsKLSAgICAgICAgYXJyYXlTaXpl
ID0gczsKLSAgICB9Ci19OwotCiB0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj4g
VFN0cnVjdHVyZU1hcDsKIHR5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlwZUxpc3QqPjo6aXRl
cmF0b3IgVFN0cnVjdHVyZU1hcEl0ZXJhdG9yOworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhp
bmdzIHRoYXQgaGF2ZSBhIHR5cGUuCiAvLwotY2xhc3MgVFR5cGUgeworY2xhc3MgVFR5cGUKK3sK
IHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0
b3IpCiAgICAgVFR5cGUoKSB7fQpAQCAtODgsMTYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgc3RydWN0dXJlKDAp
LCBzdHJ1Y3R1cmVTaXplKDApLCBkZWVwZXN0U3RydWN0TmVzdGluZygwKSwgZmllbGROYW1lKDAp
LCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgVFR5
cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJl
Y2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUp
LCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXpl
KSwKLSAgICAgICAgICAgIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCks
IHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCks
IGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKLSAgICB7Ci0gICAgICAgIGlm
IChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3Ry
dWN0KCk7Ci0gICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+
Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbXB1dGVEZWVwZXN0U3RydWN0
TmVzdGluZygpOwotICAgICAgICB9Ci0gICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQ
dWJsaWNUeXBlICZwKTsKICAgICBUVHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJp
bmcmIG4sIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgogICAgICAgICAgICAgdHlwZShF
YnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEp
LCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKICAgICAgICAgICAg
IG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIHN0cnVjdHVyZSh1c2Vy
RGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCksIGZpZWxkTmFt
ZSgwKSwgbWFuZ2xlZCgwKQpAQCAtMjg0LDYgKzIzMiw4IEBAIHB1YmxpYzoKICAgICAvLyBkZWVw
ZXN0IGZpZWxkIChuZXN0aW5nMi5maWVsZDEucG9zaXRpb24pLgogICAgIGludCBnZXREZWVwZXN0
U3RydWN0TmVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGRlZXBlc3RTdHJ1Y3ROZXN0aW5nOyB9CiAK
KyAgICBib29sIGlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpIGNvbnN0OworCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcmKTsKICAgICBpbnQgZ2V0U3Ry
dWN0U2l6ZSgpIGNvbnN0OwpAQCAtMzA4LDQgKzI1OCw2MSBAQCBwcm90ZWN0ZWQ6CiAgICAgVFN0
cmluZyAqdHlwZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgdHlwZSBuYW1l
CiB9OwogCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRo
ZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2
ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3
aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVy
cworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVt
b3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywg
dGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1
cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworc3RydWN0
IFRQdWJsaWNUeXBlCit7CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAgICAg
ICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgYm9v
bCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRUeXBl
KiB1c2VyRGVmOworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBl
IGJ0LCBUUXVhbGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0gYnQ7
CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5l
ZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBh
cnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0g
MDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKGlu
dCBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBt
YXRyaXggPSBtOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDAp
CisgICAgeworICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAg
fQorCisgICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCF1c2VyRGVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVDb250
YWluaW5nQXJyYXlzKCk7CisgICAgfQorfTsKKwogI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAKaW5kZXggMTc4MmViYy4uZTIyYTc1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5jcHAKQEAgLTk1LDkgKzk1LDkgQEAgYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKaW5kZXggMWU5NDg2
Zi4uZWI2YmVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZhcmlhYmxlSW5mby5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKQEAgLTc3LDIzICs3NywyNSBAQCBzdGF0aWMgdm9pZCBn
ZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogc3RhdGljIHZvaWQgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0
JiBpbmZvTGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CiAKIC8vIFJldHVybnMgaW5m
byBmb3IgYW4gYXR0cmlidXRlIG9yIHVuaWZvcm0uCiBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUlu
Zm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rp
b242NCBoYXNoRnVuY3Rpb24pCiB7CiAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CiAgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7CiAgICAgICAgICAg
ICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJyYWNrZXRzKGkp
OwotICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIGxuYW1l
LCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVk
VmFyaWFibGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5j
dGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnZXRV
c2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7
CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBw
ZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwg
aW5mb0xpc3QpOwpAQCAtMTI0LDcgKzEyNiw4IEBAIHZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5m
byhjb25zdCBUVHlwZSYgdHlwZSwKIHZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29u
c3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKICAgICBBU1NFUlQodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwogCkBAIC0xMzMsMTUgKzEzNiwyOCBAQCB2b2lkIGdl
dFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogICAgICAgICBjb25z
dCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CiAgICAgICAgIGdldFZh
cmlhYmxlSW5mbygqZmllbGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIu
IiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBt
YXBwZWROYW1lICsgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9MaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZE5h
bWUgKyAiLiIgKyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKGZpZWxkVHlwZS0+Z2V0RmllbGROYW1l
KCksIGhhc2hGdW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc2hGdW5jdGlvbik7CiAgICAgfQogfQogCitUVmFyaWFi
bGVJbmZvOjpUVmFyaWFibGVJbmZvKCkKK3sKK30KKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxl
SW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKQorICAgIDogdHlwZSh0eXBlKSwKKyAgICAg
IHNpemUoc2l6ZSkKK3sKK30KKwogQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6Q29sbGVjdEF0dHJp
YnNVbmlmb3JtcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1z
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogICAgIDogbUF0dHJp
YnMoYXR0cmlicyksCi0gICAgICBtVW5pZm9ybXModW5pZm9ybXMpCisgICAgICBtVW5pZm9ybXMo
dW5pZm9ybXMpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pCiB7CiB9CiAKQEAg
LTE5NiwxMCArMjEyLDE2IEBAIGJvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGluaXRpYWxpemVkIGluIGEgc2hhZGVyLCB3ZSBtdXN0IGhhdmUgb25seQogICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZXMgaW4gdGhlIHNlcXVlbmNlLgogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBU
U3RyaW5nIHByb2Nlc3NlZFN5bWJvbDsKKyAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlv
biA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJs
ZS0+Z2V0U3ltYm9sKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRP
cmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJp
YWJsZUluZm8odmFyaWFibGUtPmdldFR5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRTeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaAppbmRleCA2NjdhY2FmLi40
MTMwYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVJbmZvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oCkBAIC0xMyw2ICsxMyw5IEBACiAvLyBQcm92aWRlcyBpbmZvcm1hdGlv
biBhYm91dCBhIHZhcmlhYmxlLgogLy8gSXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3Rv
cmUgaW5mbyBhYm91dCBhY3RpdmUgYXR0cmlicyBhbmQgdW5pZm9ybXMuCiBzdHJ1Y3QgVFZhcmlh
YmxlSW5mbyB7CisgICAgVFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKTsK
KyAgICBUVmFyaWFibGVJbmZvKCk7CisKICAgICBUUGVyc2lzdFN0cmluZyBuYW1lOwogICAgIFRQ
ZXJzaXN0U3RyaW5nIG1hcHBlZE5hbWU7CiAgICAgU2hEYXRhVHlwZSB0eXBlOwpAQCAtMjQsNyAr
MjcsOCBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9M
aXN0OwogY2xhc3MgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKIHB1YmxpYzoKICAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zKFRWYXJpYWJsZUluZm9M
aXN0JiBhdHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xp
c3QmIHVuaWZvcm1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiopOwpAQCAtMzgsNiArNDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRW
YXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKICAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVVuaWZv
cm1zOworCisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOwogfTsKIAogI2VuZGlm
ICAvLyBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBjNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApAQCAtMCww
ICsxLDI5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJs
ZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgImNvbXBpbGVyL1No
SGFuZGxlLmgiCisKK25hbWVzcGFjZSB7CitpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0Ogor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNh
c2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHJldHVy
biAzOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAg
ICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9JTlQ6CisgICAgICAgIGNhc2UgU0hfQk9P
TDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJf
Q1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKKyAgICAgICAgY2Fz
ZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
IDc7CisgICAgfQorfQorfSAgICAvLyBuYW1lc3BhY2UKKworaW50IFZhcmlhYmxlUGFja2VyOjpH
ZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRf
VkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gNDsK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6
CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgor
ICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAg
ICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAg
ICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9J
TlQ6CisgICAgICAgIGNhc2UgU0hfQk9PTDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgor
ICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VY
VEVSTkFMX09FUzoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgfQorfQorCitpbnQgVmFyaWFibGVQYWNr
ZXI6OkdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAg
ICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUM0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hf
SU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIFNIX0ZM
T0FUX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfQk9P
TF9WRUMyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAg
ICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAg
IGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxf
T0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm4gMTAwMDAwOworICAgIH0KK30KKworc3RydWN0IFRWYXJpYWJsZUlu
Zm9Db21wYXJlciB7CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxo
cywgY29uc3QgVFZhcmlhYmxlSW5mbyYgcmhzKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGxo
c1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihsaHMudHlwZSk7CisgICAgICAgIGludCByaHNTb3J0
T3JkZXIgPSBHZXRTb3J0T3JkZXIocmhzLnR5cGUpOworICAgICAgICBpZiAobGhzU29ydE9yZGVy
ICE9IHJoc1NvcnRPcmRlcikgeworICAgICAgICAgICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJo
c1NvcnRPcmRlcjsKKyAgICAgICAgfQorICAgICAgICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3Qu
CisgICAgICAgIHJldHVybiBsaHMuc2l6ZSA+IHJocy5zaXplOworICAgIH0KK307CisKK3Vuc2ln
bmVkIFZhcmlhYmxlUGFja2VyOjptYWtlQ29sdW1uRmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNv
bXBvbmVudHNQZXJSb3cpCit7CisgICAgcmV0dXJuICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1
bW5zIC0gbnVtQ29tcG9uZW50c1BlclJvdykpICYKKyAgICAgICAgICAgICAgICAgICAga0NvbHVt
bk1hc2spID4+IGNvbHVtbjsKK30KKwordm9pZCBWYXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMo
aW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVy
Um93KQoreworICAgIHVuc2lnbmVkIGNvbHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVt
biwgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dz
OyArK3IpIHsKKyAgICAgICAgaW50IHJvdyA9IHRvcFJvdyArIHI7CisgICAgICAgIEFTU0VSVCgo
cm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAwKTsKKyAgICAgICAgcm93c19bcm93XSB8PSBj
b2x1bW5GbGFnczsKKyAgICB9Cit9CisKK2Jvb2wgVmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVt
bihpbnQgY29sdW1uLCBpbnQgbnVtUm93cywgaW50KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQor
eworICAgIEFTU0VSVChkZXN0Um93KTsKKworICAgIGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1h
eFJvd3NfICYmIHJvd3NfW3RvcE5vbkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAg
ICsrdG9wTm9uRnVsbFJvd18pIHsKKyAgICB9CisKKyAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJv
d18gPj0gMCAmJiByb3dzX1tib3R0b21Ob25GdWxsUm93X10gPT0ga0NvbHVtbk1hc2s7CisgICAg
ICAgICAtLWJvdHRvbU5vbkZ1bGxSb3dfKSB7CisgICAgfQorCisgICAgaWYgKGJvdHRvbU5vbkZ1
bGxSb3dfIC0gdG9wTm9uRnVsbFJvd18gKyAxIDwgbnVtUm93cykgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgY29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxh
Z3MoY29sdW1uLCAxKTsKKyAgICBpbnQgdG9wR29vZFJvdyA9IDA7CisgICAgaW50IHNtYWxsZXN0
R29vZFRvcCA9IC0xOworICAgIGludCBzbWFsbGVzdEdvb2RTaXplID0gbWF4Um93c18gKyAxOwor
ICAgIGludCBib3R0b21Sb3cgPSBib3R0b21Ob25GdWxsUm93XyArIDE7CisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgIGZvciAoaW50IHJvdyA9IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90
dG9tUm93OyArK3JvdykgeworICAgICAgICBib29sIHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93
ID8gKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApIDogZmFsc2U7CisgICAgICAgIGlm
IChyb3dFbXB0eSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAg
IHRvcEdvb2RSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSByb3cgLSB0b3BHb29kUm93OworICAgICAgICAgICAgICAg
IGlmIChzaXplID49IG51bVJvd3MgJiYgc2l6ZSA8IHNtYWxsZXN0R29vZFNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc21hbGxlc3RHb29kU2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAg
ICAgIHNtYWxsZXN0R29vZFRvcCA9IHRvcEdvb2RSb3c7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoc21hbGxlc3RHb29kVG9wIDwgMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKmRlc3RSb3cgPSBzbWFsbGVzdEdvb2RUb3A7CisgICAgaWYgKGRlc3RTaXpl
KSB7CisgICAgICAgICpkZXN0U2l6ZSA9IHNtYWxsZXN0R29vZFNpemU7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFZhcmlhYmxlUGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMoaW50IG1heFZlY3RvcnMsIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpCit7CisgICAgQVNTRVJUKG1heFZlY3RvcnMgPiAwKTsKKyAgICBtYXhSb3dz
XyA9IG1heFZlY3RvcnM7CisgICAgdG9wTm9uRnVsbFJvd18gPSAwOworICAgIGJvdHRvbU5vbkZ1
bGxSb3dfID0gbWF4Um93c18gLSAxOworICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhp
bl92YXJpYWJsZXMpOworCisgICAgLy8gQXMgcGVyIEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2Vj
dGlvbiA3IHZhcmlhYmxlcyBhcmUgcGFja2VkIGluIHNwZWNpZmljCisgICAgLy8gb3JkZXIgYnkg
dHlwZSwgdGhlbiBieSBzaXplIG9mIGFycmF5LCBsYXJnZXN0IGZpcnN0LgorICAgIHN0ZDo6c29y
dCh2YXJpYWJsZXMuYmVnaW4oKSwgdmFyaWFibGVzLmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFy
ZXIoKSk7CisgICAgcm93c18uY2xlYXIoKTsKKyAgICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywg
MCk7CisKKyAgICAvLyBQYWNrcyB0aGUgNCBjb2x1bW4gdmFyaWFibGVzLgorICAgIHNpemVfdCBp
aSA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07CisgICAgICAg
IGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDQpIHsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51
bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAgIGlmICh0
b3BOb25GdWxsUm93XyA+IG1heFJvd3NfKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBQYWNrcyB0aGUgMyBjb2x1bW4gdmFyaWFibGVzLgorICAgIGludCBudW0zQ29s
dW1uUm93cyA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Cisg
ICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG51bTNDb2x1bW5Sb3dzICs9
IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAg
IGlmICh0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzID4gbWF4Um93c18pIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3df
LCBudW0zQ29sdW1uUm93cywgMCwgMyk7CisKKyAgICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFy
aWFibGVzLgorICAgIGludCB0b3AyQ29sdW1uUm93ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29s
dW1uUm93czsKKyAgICBpbnQgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9w
MkNvbHVtblJvdzsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1u
Um93c0F2YWlsYWJsZTsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29s
dW1uUm93c0F2YWlsYWJsZTsKKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lp
KSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lp
XTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0g
MikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IG51bVJvd3Mg
PSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICAgICAgaWYg
KG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczAxKSB7CisgICAgICAgICAgICByb3dz
QXZhaWxhYmxlSW5Db2x1bW5zMDEgLT0gbnVtUm93czsKKyAgICAgICAgfSBlbHNlIGlmIChudW1S
b3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMykgeworICAgICAgICAgICAgcm93c0F2YWls
YWJsZUluQ29sdW1uczIzIC09IG51bVJvd3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgbnVtUm93c1VzZWRJ
bkNvbHVtbnMwMSA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxh
YmxlSW5Db2x1bW5zMDE7CisgICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMjMgPQorICAgICAg
ICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzOworICAg
IGZpbGxDb2x1bW5zKHRvcDJDb2x1bW5Sb3csIG51bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIp
OworICAgIGZpbGxDb2x1bW5zKG1heFJvd3NfIC0gbnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVt
Um93c1VzZWRJbkNvbHVtbnMyMywKKyAgICAgICAgICAgICAgICAyLCAyKTsKKworICAgIC8vIFBh
Y2tzIHRoZSAxIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNp
emUoKTsgKytpaSkgeworICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZh
cmlhYmxlc1tpaV07CisgICAgICAgIEFTU0VSVCgxID09IEdldE51bUNvbXBvbmVudHNQZXJSb3co
dmFyaWFibGUudHlwZSkpOworICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFi
bGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAt
MTsKKyAgICAgICAgaW50IHNtYWxsZXN0U2l6ZSA9IG1heFJvd3NfICsgMTsKKyAgICAgICAgaW50
IHRvcFJvdyA9IC0xOworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVt
Q29sdW1uczsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgIGludCByb3cgPSAwOworICAgICAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICAgICAgaWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51
bVJvd3MsICZyb3csICZzaXplKSkgeworICAgICAgICAgICAgICAgIGlmIChzaXplIDwgc21hbGxl
c3RTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0U2l6ZSA9IHNpemU7CisgICAg
ICAgICAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1uID0gY29sdW1uOworICAgICAgICAgICAgICAg
ICAgICB0b3BSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNtYWxsZXN0Q29sdW1uIDwgMCkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmlsbENvbHVtbnModG9wUm93LCBu
dW1Sb3dzLCBzbWFsbGVzdENvbHVtbiwgMSk7CisgICAgfQorCisgICAgQVNTRVJUKHZhcmlhYmxl
cy5zaXplKCkgPT0gaWkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODcwNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIu
aApAQCAtMCwwICsxLDQxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9WQVJJQUJM
RVBBQ0tFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworCisj
aW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNz
IFZhcmlhYmxlUGFja2VyIHsKKyBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXNzZWQgaW4gdmFyaWFibGVzIHBhY2sgaW4gbWF4VmVjdG9ycyBmb2xsb3dpbmcKKyAgICAvLyB0
aGUgcGFja2luZyBydWxlcyBmcm9tIHRoZSBHTFNMIDEuMDE3IHNwZWMsIEFwcGVuZGl4IEEsIHNl
Y3Rpb24gNy4KKyAgICBib29sIENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAg
ICAgICAgaW50IG1heFZlY3RvcnMsCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpOworCisgICAgLy8gR2V0cyBob3cgbWFueSBjb21wb25lbnRzIGluIGEgcm93
IGEgZGF0YSB0eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtQ29tcG9uZW50c1BlclJv
dyhTaERhdGFUeXBlIHR5cGUpOworCisgICAgLy8gR2V0cyBob3cgbWFueSByb3dzIGEgZGF0YSB0
eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpOwor
CisgcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1Db2x1bW5zID0gNDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga0NvbHVtbk1hc2sgPSAoMSA8PCBrTnVtQ29sdW1ucykgLSAx
OworCisgICAgdW5zaWduZWQgbWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGludCBudW1Db21w
b25lbnRzUGVyUm93KTsKKyAgICB2b2lkIGZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1S
b3dzLCBpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgYm9vbCBzZWFy
Y2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywgaW50KiBkZXN0
U2l6ZSk7CisKKyAgICBpbnQgdG9wTm9uRnVsbFJvd187CisgICAgaW50IGJvdHRvbU5vbkZ1bGxS
b3dfOworICAgIGludCBtYXhSb3dzXzsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZD4gcm93c187
Cit9OworCisjZW5kaWYgLy8gX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKaW5kZXgg
MjZjZWUwNS4uN2E4MmJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDE3ICs5LDIyIEBACiBzdGF0aWMgY29uc3Qg
aW50IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7CiBzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lP
Tl8xMjAgPSAxMjA7CiAKLS8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhyZWUgdGhpbmdzOgorLy8g
V2UgbmVlZCB0byBzY2FuIGZvciB0aGUgZm9sbG93aW5nOgogLy8gMS4gImludmFyaWFudCIga2V5
d29yZDogVGhpcyBjYW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cwogLy8gICAgYnV0IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KIC8vIDIuICJnbF9Qb2ludENv
b3JkIiBidWlsdC1pbiB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBz
aGFkZXIKIC8vICAgIGJ1dCBpbnNpZGUgYW55IHNjb3BlLgogLy8gMy4gQ2FsbCB0byBhIG1hdHJp
eCBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAgKFRo
ZXNlIGNvbnN0cnVjdG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8v
Ci0vLyBJZiBpdCB3ZXJlbid0IGZvciAoMykgdGhlbiB3ZSB3b3VsZCBvbmx5IG5lZWQgdG8gc2Nh
biB0aGUgZ2xvYmFsCi0vLyBzY29wZSBvZiB0aGUgdmVydGV4IHNoYWRlci4gSG93ZXZlciwgd2Ug
bmVlZCB0byBzY2FuIHRoZSBlbnRpcmUKLS8vIHNoYWRlciBpbiBib3RoIGNhc2VzLgorLy8gNC4g
QXJyYXlzIGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisvLyAgICBHTFNMIHNwZWMgc2Vj
dGlvbiA2LjEuMTogIldoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLCBleHByZXNzaW9ucyB0aGF0IGRv
CisvLyAgICBub3QgZXZhbHVhdGUgdG8gbC12YWx1ZXMgY2Fubm90IGJlIHBhc3NlZCB0byBwYXJh
bWV0ZXJzIGRlY2xhcmVkIGFzCisvLyAgICBvdXQgb3IgaW5vdXQuIgorLy8gICAgR0xTTCAxLjEg
c2VjdGlvbiA1Ljg6ICJPdGhlciBiaW5hcnkgb3IgdW5hcnkgZXhwcmVzc2lvbnMsCisvLyAgICBu
b24tZGVyZWZlcmVuY2VkIGFycmF5cywgZnVuY3Rpb24gbmFtZXMsIHN3aXp6bGVzIHdpdGggcmVw
ZWF0ZWQgZmllbGRzLAorLy8gICAgYW5kIGNvbnN0YW50cyBjYW5ub3QgYmUgbC12YWx1ZXMuIgor
Ly8gICAgR0xTTCAxLjIgcmVsYXhlZCB0aGUgcmVzdHJpY3Rpb24gb24gYXJyYXlzLCBzZWN0aW9u
IDUuODogIlZhcmlhYmxlcyB0aGF0CisvLyAgICBhcmUgYnVpbHQtaW4gdHlwZXMsIGVudGlyZSBz
dHJ1Y3R1cmVzIG9yIGFycmF5cy4uLiBhcmUgYWxsIGwtdmFsdWVzLiIKIC8vCiAvLyBUT0RPKGFs
b2twKTogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgb2YgaW52YXJpYW50IGRlY2FsYXJhdGlvbiBn
ZXQgbG9zdAogLy8gZHVyaW5nIHBhcnNpbmcgLSB0aGV5IGRvIG5vdCBnZXQgY2FycmllZCBvdmVy
IHRvIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KQEAgLTc5LDYgKzg0LDI2IEBAIGJvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIH0KKyAgICAgIGNhc2UgRU9wUGFyYW1ldGVy
czogeworICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gcGFyYW1zLmJlZ2luKCk7CisgICAgICAgICAgICAgaXRlciAhPSBwYXJhbXMuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiBwYXJh
bSA9ICgqaXRlciktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS0+aXNBcnJh
eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gcGFyYW0tPmdldFF1YWxpZmllcigpOworICAgICAgICAgICAgICAgIGlmICgocXVhbGlmaWVy
ID09IEV2cU91dCkgfHwgKHF1YWxpZmllciA9PSAgRXZxSW5PdXQpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZC4gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzoKICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAppbmRl
eCAzNzZmY2I4Li4xYzFjYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaApAQCAtMjIsMTQgKzIyLDE4IEBACiAvLyAgIC0gYysr
IHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgogLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxlIGdsX1Bv
aW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9y
cyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0
aW9uIHBhcmFtZXRlcnMKIC8vCiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CiBwdWJsaWM6CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsK
IAotICAgIC8vIFJldHVybnMgMTIwIGlmICJpbnZhcmlhbnQiIGtleXdvcmQsICJnbF9Qb2ludENv
b3JkIiwgb3IKLSAgICAvLyBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCBpbiB0
aGUgc2hhZGVyLiBFbHNlIDExMCBpcwotICAgIC8vIHJldHVybmVkLgorICAgIC8vIFJldHVybnMg
MTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUgc2hhZGVyOgorICAgIC8vIC0gImludmFy
aWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIsCisgICAgLy8gLSBtYXRyaXgvbWF0cml4
IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91dCIgcGFyYW1ldGVycworICAgIC8vIEVs
c2UgMTEwIGlzIHJldHVybmVkLgogICAgIGludCBnZXRWZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNp
b247IH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5s
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAppbmRleCBi
OWEzMDJkLi44MzAwZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwKQEAgLTM4LDcgKzM4LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogJXsKICNpbmNsdWRlICJjb21waWxlci9nbHNs
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImds
c2xhbmdfdGFiLmgiCiAKQEAgLTI3MiwxNDggKzI3MiwxMyBAQCBPICAgICAgICAgICBbMC03XQog
CiAlJQogCi0jaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi1leHRlcm4gIkMiIHsKLS8v
IFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaCIKLQotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4g
aW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNy
byhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotCi0jZGVmaW5lIFNFVFVQX0NPTlRFWFQo
cHApIFwKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+
cEM7IFwKLSAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250
ZXh0LT5zY2FubmVyOwotCi0vLyBQcmVwcm9jZXNzb3IgY2FsbGJhY2tzLgotdm9pZCBDUFBEZWJ1
Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPnRyYWNlKG1zZyk7Ci19Ci0KLXZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndh
cm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwotfQotCi12b2lkIENQUFNoSW5mb0xvZ01zZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7Ci0gICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotfQotCi12b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAwOwotICAgIERlY29kZVNv
dXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVT
b3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotdm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0
cmluZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAg
IERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwgJmxpbmUpOwotICAgIHl5bGluZW5vID0g
RW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7Ci19Ci0KLWludCBHZXRTdHJpbmdOdW1iZXIo
KQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMDsKLSAgICBE
ZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwpOwotICAgIHJldHVybiBzdHJp
bmc7Ci19Ci0KLWludCBHZXRMaW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwg
JmxpbmUpOwotICAgIHJldHVybiBsaW5lOwotfQotCi12b2lkIEluY0xpbmVOdW1iZXIoKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7Ci0g
ICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7Ci0gICAgeXlsaW5l
bm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCArK2xpbmUpOwotfQotCi12b2lkIERlY0xpbmVO
dW1iZXIoKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7
Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCAtLWxpbmUpOwotfQotCi12
b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLQotICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJu
OwotICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKLSAgICBpZiAo
c3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5oYW5k
bGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKLX0KLQot
dm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIFRTdHJpbmcgc3RyU3JjOwotICAgIHN0clNyYyA9IFRTdHJpbmcoc3RyaW5nKTsK
LQotICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnICsgIiAiICsg
c3RyU3JjOwotfQotCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQotewotICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjcHAtPkVyck1zZyA9IGNvbnRleHQtPkhhc2hFcnJNc2cu
Y19zdHIoKTsKLSAgICByZXR1cm4gY3BwLT5FcnJNc2c7Ci19Ci0KLXZvaWQgUmVzZXRUU3RyaW5n
KHZvaWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPkhhc2hFcnJN
c2cgPSAiIjsKLX0KLQotdm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBl
eHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgY29udGV4dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1l
LCBiZWhhdmlvcik7Ci19Ci19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vICFBTkdMRV9VU0Vf
TkVXX1BSRVBST0NFU1NPUgotCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9z
aXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuID0gMDsKLQotI2lmIEFOR0xF
X1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgcHA6OlRva2VuIHRva2VuOwogICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICBsZW4gPSB0b2tl
bi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAg
aW50IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQu
c2l6ZSgpOwogICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKLSAgICAgICAg
bWVtY3B5KGJ1ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3Vy
Y2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSksIHl5c2Nhbm5l
cik7Ci0jZWxzZQotICAgIGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKTsKLSNlbmRpZiAg
Ly8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIGlmIChsZW4gPj0gbWF4X3NpemUp
CiAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKQEAgLTQ3
Myw5ICszMzgsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXlsZXhfZGVzdHJveShzY2Fu
bmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgotICAgIEZpbmFsaXplUHJl
cHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDg2LDI3ICszNDgs
MTQgQEAgaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsK
IAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgotI2lmIEFOR0xFX1VTRV9ORVdfUFJF
UFJPQ0VTU09SCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSNlbHNlCi0gICAgaWYgKEluaXRQcmVw
cm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0g
ICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIGlmIChJbml0U2Nhbm5lcklucHV0
KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICAvLyBEZWZpbmUgZXh0ZW5zaW9u
IG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7CiAgICAgICAgICBpdGVy
ICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBS
T0NFU1NPUgogICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0jZWxzZQotICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhp
dGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gMDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IDNjYWQzMzUuLjdjZDQ5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtMzQwLDE4ICszNDAsMTAgQEAgcG9zdGZpeF9leHByZXNzaW9u
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChp
bnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOwotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGlu
ZGV4LCAkMi5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEt
PmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkg
dmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7CisgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxk
cywgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKICAgICAgICAg
ICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwpAQCAtMTIxMSw3ICsxMjAzLDcgQEAgaW5pdF9kZWNs
YXJhdG9yX2xpc3QKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDMubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQz
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
QEAgLTEyMjQsNyArMTIxNiw3IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25J
bml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB0cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAg
ICAgICAkJCA9ICQxOwpAQCAtMTI0Miw3ICsxMjM0LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QK
ICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwg
JDEudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEu
dHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxp
bmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICQkID0gJDE7CkBAIC0xMjk2LDcgKzEyODgsNyBAQCBzaW5nbGVf
ZGVjbGFyYXRpb24KICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDIubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQy
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgJCQudHlwZSA9
ICQxOwpAQCAtMTMyNyw3ICsxMzE5LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCB0
cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJC50eXBl
ID0gJDE7CkBAIC0yMDM3LDYgKzIwMjksMTUgQEAgZXh0ZXJuYWxfZGVjbGFyYXRpb24KIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFRT
eW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlv
bi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJbikKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJ1aWx0LWluIGZ1
bmN0aW9ucyBjYW5ub3QgYmUgcmVkZWZpbmVkIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAg
ICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicg
aWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRl
eCBhM2JmYTEzLi5mNjUxZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBp
bnQxNl90IGZsZXhfaW50MTZfdDsKIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKIHR5
cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMy
X3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CiAjZWxzZQogdHlwZWRlZiBzaWdu
ZWQgY2hhciBmbGV4X2ludDhfdDsKIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKQEAg
LTM3OCw3ICszNzksNyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
IG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVf
QUNUSU9OIFwKIAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXplX3Qp
ICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAogCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCiAJKnl5X2NwID0gJ1wwJzsgXAog
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwpAQCAtODA3LDcgKzgwOCw3IEBAIFdISUNIIEdFTkVS
QVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAj
aW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtMjk0NywxNDggKzI5NDgsMTMgQEAgdm9pZCB5
eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAKICNkZWZpbmUgWVlUQUJM
RVNfTkFNRSAieXl0YWJsZXMiCiAKLSNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKLWV4
dGVybiAiQyIgewotLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgotCi1leHRlcm4gaW50IEluaXRQcmVwcm9jZXNz
b3IoKTsKLWV4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiB2b2lkIFBy
ZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci0KLSNkZWZpbmUg
U0VUVVBfQ09OVEVYVChwcCkgXAotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBhcnNl
Q29udGV4dCopIHBwLT5wQzsgXAotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7Ci0KLS8vIFByZXByb2Nlc3NvciBjYWxsYmFja3Mu
Ci12b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05U
RVhUKGNwcCk7Ci0gICAgY29udGV4dC0+dHJhY2UobXNnKTsKLX0KLQotdm9pZCBDUFBXYXJuaW5n
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIik7Ci19Ci0KLXZvaWQgQ1BQU2hJ
bmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwotICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLX0KLQotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2cs
ICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZvaWQgU2V0TGluZU51bWJlcihp
bnQgbGluZSkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IHN0cmluZyA9IDA7
Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKLSAgICB5eWxp
bmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOwotfQotCi12b2lkIFNldFN0cmlu
Z051bWJlcihpbnQgc3RyaW5nKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0g
ICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotaW50IEdl
dFN0cmluZ051bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJp
bmcgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0g
ICAgcmV0dXJuIHN0cmluZzsKLX0KLQotaW50IEdldExpbmVOdW1iZXIoKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5
bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0gICAgcmV0dXJuIGxpbmU7Ci19Ci0KLXZvaWQgSW5jTGlu
ZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAw
LCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsICZsaW5l
KTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsICsrbGluZSk7Ci19Ci0K
LXZvaWQgRGVjTGluZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlu
dCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZz
dHJpbmcsICZsaW5lKTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIC0t
bGluZSk7Ci19Ci0KLXZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBu
dW1Ub2tlbnMpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotCi0gICAgaWYgKG51bVRva2Vu
cyAhPSA0KSByZXR1cm47Ci0gICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0
dXJuOwotICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKLQotICAg
IGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tl
bnNbMl0pOwotfQotCi12b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgVFN0cmluZyBzdHJTcmM7Ci0gICAgc3RyU3JjID0gVFN0
cmluZyhzdHJpbmcpOwotCi0gICAgY29udGV4dC0+SGFzaEVyck1zZyA9IGNvbnRleHQtPkhhc2hF
cnJNc2cgKyAiICIgKyBzdHJTcmM7Ci19Ci0KLWNvbnN0IGNoYXIqIEdldFN0cmZyb21UU3RyKHZv
aWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNwcC0+RXJyTXNnID0gY29udGV4
dC0+SGFzaEVyck1zZy5jX3N0cigpOwotICAgIHJldHVybiBjcHAtPkVyck1zZzsKLX0KLQotdm9p
ZCBSZXNldFRTdHJpbmcodm9pZCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29u
dGV4dC0+SGFzaEVyck1zZyA9ICIiOwotfQotCi12b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9y
KGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXls
aW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKLX0KLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZiAg
Ly8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi0KIGludCBzdHJpbmdfaW5wdXQoY2hhciog
YnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW4gPSAw
OwotCi0jaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBwcDo6VG9rZW4gdG9rZW47
CiAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOwot
ICAgIGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVl
LnNpemUoKTsKKyAgICBpbnQgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAw
IDogdG9rZW4udGV4dC5zaXplKCk7CiAgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQotICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7CiAgICAgeXlzZXRfbGlu
ZW5vKEVuY29kZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5s
aW5lKSx5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6
ZSk7Ci0jZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICBpZiAobGVu
ID49IG1heF9zaXplKQogICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJm
bG93Iik7CkBAIC0zMTQ4LDkgKzMwMTQsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXls
ZXhfZGVzdHJveShzY2FubmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgot
ICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtMzE2MSwyNyArMzAyNCwxNCBAQCBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICBjb250ZXh0LT5B
ZnRlckVPRiA9IGZhbHNlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0jaWYg
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nv
ci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotI2Vsc2UK
LSAgICBpZiAoSW5pdFByZXByb2Nlc3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBjcHAt
PnBDID0gY29udGV4dDsKLSAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgaWYg
KEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gMTsKLSNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIC8v
IERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwogICAgIGZvciAoVEV4
dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4o
KTsKICAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotI2lmIEFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5w
cmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbHNlCi0gICAgICAgIFBy
ZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotI2VuZGlmCiAgICAgfQog
ICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggNDZiNTE0YS4uNzJjYzg0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
CkBAIC03NTIsMjYgKzc1MiwyNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAg
IDE2OCwgICAxNjgsICAgMjAzLCAgIDIwNiwgICAyMTksICAgMjI0LCAgIDIyOSwgICAyMzUsICAg
MjM4LAotICAgICAzMTcsICAgMzIwLCAgIDQyOSwgICA0MzksICAgNDUyLCAgIDQ2MCwgICA1NjAs
ICAgNTYzLCAgIDU3MSwgICA1NzUsCi0gICAgIDU4MiwgICA1ODYsICAgNTkzLCAgIDU5OSwgICA2
MDgsICAgNjE2LCAgIDY3MSwgICA2NzgsICAgNjg4LCAgIDY5MSwKLSAgICAgNzAxLCAgIDcxMSwg
ICA3MzIsICAgNzMzLCAgIDczNCwgICA3MzksICAgNzQwLCAgIDc0OSwgICA3NjEsICAgNzYyLAot
ICAgICA3NzAsICAgNzgxLCAgIDc4NSwgICA3ODYsICAgNzk2LCAgIDgwNiwgICA4MTYsICAgODI5
LCAgIDgzMCwgICA4NDAsCi0gICAgIDg1MywgICA4NTcsICAgODYxLCAgIDg2NSwgICA4NjYsICAg
ODc5LCAgIDg4MCwgICA4OTMsICAgODk0LCAgIDkwNywKLSAgICAgOTA4LCAgIDkyNSwgICA5MjYs
ICAgOTM5LCAgIDk0MCwgICA5NDEsICAgOTQyLCAgIDk0MywgICA5NDcsICAgOTUwLAotICAgICA5
NjEsICAgOTY5LCAgIDk5NiwgIDEwMDEsICAxMDA4LCAgMTA0NiwgIDEwNDksICAxMDU2LCAgMTA2
NCwgIDEwODUsCi0gICAgMTEwNiwgIDExMTcsICAxMTQ2LCAgMTE1MSwgIDExNjEsICAxMTY2LCAg
MTE3NiwgIDExNzksICAxMTgyLCAgMTE4NSwKLSAgICAxMTkxLCAgMTE5OCwgIDEyMDEsICAxMjIz
LCAgMTI0MSwgIDEyNjUsICAxMjg4LCAgMTI5MiwgIDEzMTAsICAxMzE4LAotICAgIDEzNTAsICAx
MzcwLCAgMTQ1OSwgIDE0NjgsICAxNDkxLCAgMTQ5NCwgIDE1MDAsICAxNTA4LCAgMTUxNiwgIDE1
MjQsCi0gICAgMTUzNCwgIDE1NDEsICAxNTQ0LCAgMTU0NywgIDE1NTMsICAxNTU2LCAgMTU3MSwg
IDE1NzUsICAxNTc5LCAgMTU4MywKLSAgICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYx
MiwgIDE2MTcsICAxNjIyLCAgMTYyNywgIDE2MzIsICAxNjM3LAotICAgIDE2NDMsICAxNjQ5LCAg
MTY1NSwgIDE2NjAsICAxNjY1LCAgMTY3NCwgIDE2ODMsICAxNjg4LCAgMTcwMSwgIDE3MDEsCi0g
ICAgMTcxNSwgIDE3MTUsICAxNzI0LCAgMTcyNywgIDE3NDIsICAxNzc4LCAgMTc4MiwgIDE3ODgs
ICAxNzk2LCAgMTgxMiwKLSAgICAxODE2LCAgMTgyMCwgIDE4MjEsICAxODI3LCAgMTgyOCwgIDE4
MjksICAxODMwLCAgMTgzMSwgIDE4MzUsICAxODM2LAotICAgIDE4MzYsICAxODM2LCAgMTg0Niwg
IDE4NDcsICAxODUxLCAgMTg1MSwgIDE4NTIsICAxODUyLCAgMTg1NywgIDE4NjAsCi0gICAgMTg3
MCwgIDE4NzMsICAxODc5LCAgMTg4MCwgIDE4ODQsICAxODkyLCAgMTg5NiwgIDE5MDYsICAxOTEx
LCAgMTkyOCwKLSAgICAxOTI4LCAgMTkzMywgIDE5MzMsICAxOTQwLCAgMTk0MCwgIDE5NDgsICAx
OTUxLCAgMTk1NywgIDE5NjAsICAxOTY2LAotICAgIDE5NzAsICAxOTc3LCAgMTk4NCwgIDE5OTEs
ICAxOTk4LCAgMjAwOSwgIDIwMTgsICAyMDIyLCAgMjAyOSwgIDIwMzIsCi0gICAgMjAzOCwgIDIw
MzgKKyAgICAgMzE3LCAgIDMyMCwgICA0MjEsICAgNDMxLCAgIDQ0NCwgICA0NTIsICAgNTUyLCAg
IDU1NSwgICA1NjMsICAgNTY3LAorICAgICA1NzQsICAgNTc4LCAgIDU4NSwgICA1OTEsICAgNjAw
LCAgIDYwOCwgICA2NjMsICAgNjcwLCAgIDY4MCwgICA2ODMsCisgICAgIDY5MywgICA3MDMsICAg
NzI0LCAgIDcyNSwgICA3MjYsICAgNzMxLCAgIDczMiwgICA3NDEsICAgNzUzLCAgIDc1NCwKKyAg
ICAgNzYyLCAgIDc3MywgICA3NzcsICAgNzc4LCAgIDc4OCwgICA3OTgsICAgODA4LCAgIDgyMSwg
ICA4MjIsICAgODMyLAorICAgICA4NDUsICAgODQ5LCAgIDg1MywgICA4NTcsICAgODU4LCAgIDg3
MSwgICA4NzIsICAgODg1LCAgIDg4NiwgICA4OTksCisgICAgIDkwMCwgICA5MTcsICAgOTE4LCAg
IDkzMSwgICA5MzIsICAgOTMzLCAgIDkzNCwgICA5MzUsICAgOTM5LCAgIDk0MiwKKyAgICAgOTUz
LCAgIDk2MSwgICA5ODgsICAgOTkzLCAgMTAwMCwgIDEwMzgsICAxMDQxLCAgMTA0OCwgIDEwNTYs
ICAxMDc3LAorICAgIDEwOTgsICAxMTA5LCAgMTEzOCwgIDExNDMsICAxMTUzLCAgMTE1OCwgIDEx
NjgsICAxMTcxLCAgMTE3NCwgIDExNzcsCisgICAgMTE4MywgIDExOTAsICAxMTkzLCAgMTIxNSwg
IDEyMzMsICAxMjU3LCAgMTI4MCwgIDEyODQsICAxMzAyLCAgMTMxMCwKKyAgICAxMzQyLCAgMTM2
MiwgIDE0NTEsICAxNDYwLCAgMTQ4MywgIDE0ODYsICAxNDkyLCAgMTUwMCwgIDE1MDgsICAxNTE2
LAorICAgIDE1MjYsICAxNTMzLCAgMTUzNiwgIDE1MzksICAxNTQ1LCAgMTU0OCwgIDE1NjMsICAx
NTY3LCAgMTU3MSwgIDE1NzUsCisgICAgMTU4NCwgIDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQs
ICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAgMTYyOSwKKyAgICAxNjM1LCAgMTY0MSwgIDE2
NDcsICAxNjUyLCAgMTY1NywgIDE2NjYsICAxNjc1LCAgMTY4MCwgIDE2OTMsICAxNjkzLAorICAg
IDE3MDcsICAxNzA3LCAgMTcxNiwgIDE3MTksICAxNzM0LCAgMTc3MCwgIDE3NzQsICAxNzgwLCAg
MTc4OCwgIDE4MDQsCisgICAgMTgwOCwgIDE4MTIsICAxODEzLCAgMTgxOSwgIDE4MjAsICAxODIx
LCAgMTgyMiwgIDE4MjMsICAxODI3LCAgMTgyOCwKKyAgICAxODI4LCAgMTgyOCwgIDE4MzgsICAx
ODM5LCAgMTg0MywgIDE4NDMsICAxODQ0LCAgMTg0NCwgIDE4NDksICAxODUyLAorICAgIDE4NjIs
ICAxODY1LCAgMTg3MSwgIDE4NzIsICAxODc2LCAgMTg4NCwgIDE4ODgsICAxODk4LCAgMTkwMywg
IDE5MjAsCisgICAgMTkyMCwgIDE5MjUsICAxOTI1LCAgMTkzMiwgIDE5MzIsICAxOTQwLCAgMTk0
MywgIDE5NDksICAxOTUyLCAgMTk1OCwKKyAgICAxOTYyLCAgMTk2OSwgIDE5NzYsICAxOTgzLCAg
MTk5MCwgIDIwMDEsICAyMDEwLCAgMjAxNCwgIDIwMjEsICAyMDI0LAorICAgIDIwMzAsICAyMDMw
CiB9OwogI2VuZGlmCiAKQEAgLTIzNjAsMTggKzIzNjAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
LSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmc7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRTdHJp
bmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZp
ZWxkczsKQEAgLTM0MzAsNyArMzQyMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKQEAgLTM0NDcs
NyArMzQzOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKQEAgLTM0NjksNyArMzQ2MSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNw
WygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkp
CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50
ZXJtKTsKQEAgLTM1MzIsNyArMzUyNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikg
LSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlw
ZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKQEAgLTM1NzEsNyArMzU2Myw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5l
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHRydWUpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7CkBAIC00NTE3LDYgKzQ1MDksMTUgQEAgeXlyZWR1Y2U6
CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVp
bHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBi
ZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVk
aWF0ZS5oCmluZGV4IGU2M2Q0MjUuLjc1ODEyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTE2LDYgKzE2LDggQEAK
ICNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAogI2RlZmluZSBfX0lOVEVSTUVESUFURV9ICiAKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwogI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1v
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQ29u
c3RhbnRVbmlvbi5oIgpAQCAtNTUxLDYgKzU1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNy
ZW1lbnREZXB0aCgpIHtkZXB0aCsrO30KICAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRo
LS07fQogCisgICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24g
cG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1l
LgorICAgIHN0YXRpYyBUU3RyaW5nIGhhc2goY29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVu
Y3Rpb242NCBoYXNoRnVuY3Rpb24pOworCiAgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKICAgICBj
b25zdCBib29sIGluVmlzaXQ7CiAgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKaW5kZXggMWQ5NTkw
Ny4uYWRmMWEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9vc2luY2x1ZGUuaApAQCAtMjQsOSArMjQsNyBAQAogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRm
b3JtLgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEFOR0xFX1VTRV9OU1BSKQotI2luY2x1ZGUgInBy
dGhyZWFkLmgiCi0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKICNkZWZpbmUgU1RSSUNUCiAjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgpAQCAtMzQsNyArMzIsNyBAQAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdM
RV9VU0VfTlNQUgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KIAogCiAjaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKQEAgLTQyLDE2ICs0MCwxMyBAQAogLy8KIC8vIFRocmVhZCBMb2NhbCBTdG9y
YWdlIE9wZXJhdGlvbnMKIC8vCi0jaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKLXR5cGVkZWYg
UFJVaW50biBPU19UTFNJbmRleDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZG
RkZGRgotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjaWYgZGVmaW5lZChBTkdMRV9PU19X
SU4pCiB0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RMU19J
TkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQogI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkK
IHR5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RM
U19JTkRFWCAweEZGRkZGRkZGCi0jZW5kaWYgIC8vIEFOR0xFX1VTRV9OU1BSCisjZW5kaWYgIC8v
IEFOR0xFX09TX1dJTgogCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7CiBib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOwpAQCAtNjAs
OSArNTUsNyBAQCBib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOwogaW5s
aW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKIHsKICAgICBBU1NF
UlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1VT
RV9OU1BSKQotICAgIHJldHVybiBQUl9HZXRUaHJlYWRQcml2YXRlKG5JbmRleCk7Ci0jZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKICAgICByZXR1
cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKICNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCiAg
ICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcAppbmRleCBm
NjNkODFlLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwCkBAIC0xLDQzICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5zcHIgc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0vLwotLy8g
VGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9j
VExTSW5kZXgoKQotewotICAgIFBSVWludG4gaW5kZXg7Ci0gICAgUFJTdGF0dXMgc3RhdHVzID0g
UFJfTmV3VGhyZWFkUHJpdmF0ZUluZGV4KCZpbmRleCwgTlVMTCk7Ci0KLSAgICBpZiAoc3RhdHVz
KSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBh
bGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIE9TX1Nl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0gICAgaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBQUl9TZXRUaHJlYWRQcml2YXRlKG5JbmRleCwgbHB2
VmFsdWUpID09IDA7Ci19Ci0KLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRl
eCkKLXsKLSAgICAvLyBDYW4ndCBkZWxldGUgVExTIGtleXMgd2l0aCBuc3ByCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTIyZTFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFn
bm9zdGljc0Jhc2UuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNl
IHBwCit7CisKK0RpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIERpYWdu
b3N0aWNzOjpyZXBvcnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogS2VlcCBhIGNvdW50IG9mIGVycm9y
cyBhbmQgd2FybmluZ3MuCisgICAgcHJpbnQoaWQsIGxvYywgdGV4dCk7Cit9CisKK0RpYWdub3N0
aWNzOjpTZXZlcml0eSBEaWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCit7CisgICAgaWYgKChp
ZCA+IEVSUk9SX0JFR0lOKSAmJiAoaWQgPCBFUlJPUl9FTkQpKQorICAgICAgICByZXR1cm4gRVJS
T1I7CisKKyAgICBpZiAoKGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlkIDwgV0FSTklOR19FTkQp
KQorICAgICAgICByZXR1cm4gV0FSTklORzsKKworICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0
dXJuIEVSUk9SOworfQorCitzdGQ6OnN0cmluZyBEaWFnbm9zdGljczo6bWVzc2FnZShJRCBpZCkK
K3sKKyAgICBzd2l0Y2ggKGlkKQorICAgIHsKKyAgICAgIC8vIEVycm9ycyBiZWdpbi4KKyAgICAg
IGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICAgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7
CisgICAgICBjYXNlIE9VVF9PRl9NRU1PUlk6CisgICAgICAgICAgcmV0dXJuICJvdXQgb2YgbWVt
b3J5IjsKKyAgICAgIGNhc2UgSU5WQUxJRF9DSEFSQUNURVI6CisgICAgICAgICAgcmV0dXJuICJp
bnZhbGlkIGNoYXJhY3RlciI7CisgICAgICBjYXNlIElOVkFMSURfTlVNQkVSOgorICAgICAgICAg
IHJldHVybiAiaW52YWxpZCBudW1iZXIiOworICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgor
ICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7CisgICAgICBjYXNlIEZMT0FUX09W
RVJGTE9XOgorICAgICAgICAgIHJldHVybiAiZmxvYXQgb3ZlcmZsb3ciOworICAgICAgY2FzZSBU
T0tFTl9UT09fTE9ORzoKKyAgICAgICAgICByZXR1cm4gInRva2VuIHRvbyBsb25nIjsKKyAgICAg
IGNhc2UgSU5WQUxJRF9FWFBSRVNTSU9OOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHBy
ZXNzaW9uIjsKKyAgICAgIGNhc2UgRElWSVNJT05fQllfWkVSTzoKKyAgICAgICAgICByZXR1cm4g
ImRpdmlzaW9uIGJ5IHplcm8iOworICAgICAgY2FzZSBFT0ZfSU5fQ09NTUVOVDoKKyAgICAgICAg
ICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gY29tbWVudCI7CisgICAg
ICBjYXNlIFVORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIjsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lOVkFMSURfTkFNRToKKyAgICAgICAgICByZXR1
cm4gImludmFsaWQgZGlyZWN0aXZlIG5hbWUiOworICAgICAgY2FzZSBNQUNST19OQU1FX1JFU0VS
VkVEOgorICAgICAgICAgIHJldHVybiAibWFjcm8gbmFtZSBpcyByZXNlcnZlZCI7CisgICAgICBj
YXNlIE1BQ1JPX1JFREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gIm1hY3JvIHJlZGVmaW5lZCI7
CisgICAgICBjYXNlIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVEOgorICAgICAgICAgIHJldHVy
biAicHJlZGVmaW5lZCBtYWNybyByZWRlZmluZWQiOworICAgICAgY2FzZSBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5kZWZp
bmVkIjsKKyAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAgICAg
ICAgcmV0dXJuICJ1bnRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbiI7CisgICAgICBjYXNlIE1B
Q1JPX1RPT19GRVdfQVJHUzoKKyAgICAgICAgICByZXR1cm4gIk5vdCBlbm91Z2ggYXJndW1lbnRz
IGZvciBtYWNybyI7CisgICAgICBjYXNlIE1BQ1JPX1RPT19NQU5ZX0FSR1M6CisgICAgICAgICAg
cmV0dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKKyAgICAgIGNhc2UgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vu
ZGlmIGZvdW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05B
TF9FTFNFX1dJVEhPVVRfSUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZv
dW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNF
X0FGVEVSX0VMU0U6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZvdW5kIGFm
dGVyIGFub3RoZXIgI2Vsc2UiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIHdpdGhvdXQgYSBt
YXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6Cisg
ICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIGFmdGVyICNlbHNlIjsKKyAg
ICAgIGNhc2UgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVEOgorICAgICAgICAgIHJldHVybiAidW5l
eHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb25kaXRpb25hbCBibG9jayI7CisgICAgICBj
YXNlIElOVkFMSURfRVhURU5TSU9OX05BTUU6CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4
dGVuc2lvbiBuYW1lIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1I6Cisg
ICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBiZWhhdmlvciI7CisgICAgICBjYXNl
IElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQg
ZXh0ZW5zaW9uIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9OVU1CRVI6
CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIHZlcnNpb24gbnVtYmVyIjsKKyAgICAgIGNhc2Ug
SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgdmVy
c2lvbiBkaXJlY3RpdmUiOworICAgICAgY2FzZSBWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6
CisgICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVmb3JlIGFu
eXRoaW5nIGVsc2UsICIKKyAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRzIGFuZCB3
aGl0ZSBzcGFjZSI7CisgICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIGxpbmUgbnVtYmVyIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05V
TUJFUjoKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgZmlsZSBudW1iZXIiOworICAgICAgY2Fz
ZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5l
IGRpcmVjdGl2ZSI7CisgICAgICAvLyBFcnJvcnMgZW5kLgorICAgICAgLy8gV2FybmluZ3MgYmVn
aW4uCisgICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICAgICAgcmV0dXJuICJ1bmV4
cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIENPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOworICAgICAgY2FzZSBVTlJFQ09HTkla
RURfUFJBR01BOgorICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CisgICAg
ICAvLyBXYXJuaW5ncyBlbmQuCisgICAgICBkZWZhdWx0OgorICAgICAgICAgIGFzc2VydChmYWxz
ZSk7CisgICAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHBw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wN2JjNDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApA
QCAtMCwwICsxLDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGluZyBkaWFnbm9z
dGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IgZm9y
bWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25vc3RpY3MKK3sK
KyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAg
ICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9C
RUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisg
ICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAg
ICAgSU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgRkxPQVRfT1ZFUkZMT1csCisgICAgICAgIFRP
S0VOX1RPT19MT05HLAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBNQUNST19O
QU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BS
RURFRklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwK
KyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RP
T19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VU
X0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJ
VElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9F
TFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIElOVkFMSURf
RVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lP
Tl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFZF
UlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwK
KyAgICAgICAgSU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVD
VElWRSwKKyAgICAgICAgRVJST1JfRU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAg
ICAgIEVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdBUk5JTkdfRU5ECisg
ICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2b2lkIHJlcG9ydChJ
RCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQp
OworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisgICAgc3Rk
OjpzdHJpbmcgbWVzc2FnZShJRCBpZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzVjNmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisKK25hbWVzcGFjZSBwcAor
eworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFz
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5j
bHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9u
OworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vz
c29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgor
Ly8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2li
bGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNz
IERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhh
bmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFt
ZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9j
YXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGZkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5j
cHAKQEAgLTAsMCArMSw5MzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5j
bHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUg
IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgor
I2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUg
IlRva2VuaXplci5oIgorCituYW1lc3BhY2UgeworZW51bSBEaXJlY3RpdmVUeXBlCit7CisgICAg
RElSRUNUSVZFX05PTkUsCisgICAgRElSRUNUSVZFX0RFRklORSwKKyAgICBESVJFQ1RJVkVfVU5E
RUYsCisgICAgRElSRUNUSVZFX0lGLAorICAgIERJUkVDVElWRV9JRkRFRiwKKyAgICBESVJFQ1RJ
VkVfSUZOREVGLAorICAgIERJUkVDVElWRV9FTFNFLAorICAgIERJUkVDVElWRV9FTElGLAorICAg
IERJUkVDVElWRV9FTkRJRiwKKyAgICBESVJFQ1RJVkVfRVJST1IsCisgICAgRElSRUNUSVZFX1BS
QUdNQSwKKyAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAorICAgIERJUkVDVElWRV9WRVJTSU9OLAor
ICAgIERJUkVDVElWRV9MSU5FCit9OworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBEaXJlY3Rp
dmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5lKCJkZWZpbmUiKTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9uIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5lIik7CisKKyAgICBpZiAodG9rZW4t
PnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X05PTkU7CisKKyAgICBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9ERUZJTkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0g
a0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVs
c2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9JRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlSWZkZWYpCisg
ICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQg
PT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUVsc2UpCisgICAgICAgIHJldHVy
biBESVJFQ1RJVkVfRUxTRTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZl
RWxpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2Vu
LT50ZXh0ID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJ
RjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAg
IHJldHVybiBESVJFQ1RJVkVfRVJST1I7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0Rp
cmVjdGl2ZVByYWdtYSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxz
ZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVj
dGl2ZVZlcnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKKyAgICBlbHNl
IGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9MSU5FOworCisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMgYm9v
bCBpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQoreworICAg
IHN3aXRjaCAoZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAg
ICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Cisg
ICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdG9rZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJvb2wg
aXNFT0QoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50eXBl
ID09ICdcbicpIHx8ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitzdGF0
aWMgdm9pZCBza2lwVW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikK
K3sKKyAgICB3aGlsZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxleCh0
b2tlbik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIg
YXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2
ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0
JiBtYWNyb1NldCkKK3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YWNyb1NldC5maW5kKG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8g
aXRlci0+c2Vjb25kLnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERl
ZmluZWRQYXJzZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6CisgICAgICAgIG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1NldCks
CisgICAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4tPnRl
eHQgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJl
biA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tl
bi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisKKyAgICAg
ICAgaWYgKHBhcmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIs
IHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAg
ICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgor
ICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT50
ZXh0ID0gZXhwcmVzc2lvbjsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxleGVy
OworICAgIGNvbnN0IE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFn
bm9zdGljczsKK307CisKK0RpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQq
IG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQoZmFs
c2UpLAorICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQp
LAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZUhhbmRsZXIo
ZGlyZWN0aXZlSGFuZGxlcikKK3sKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tl
biogdG9rZW4pCit7CisgICAgZG8KKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgICAgICAgICBtUGFz
dEZpcnN0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05B
TF9VTlRFUk1JTkFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2subG9jYXRpb24sIGJsb2NrLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBl
ID09ICdcbicpKTsKKworICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQgPSB0cnVlOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIGlmIChpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICAvLyBFbXB0
eSBEaXJlY3RpdmUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEaXJlY3RpdmVUeXBl
IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBl
eGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9ncm91cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNv
bmRpdGlvbmFsIGRpcmVjdGl2ZXMuCisgICAgaWYgKHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9u
YWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKKyAgICB7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGly
ZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2Vu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAg
cGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVf
SUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAg
ICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6Cisg
ICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZl
cnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6
CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0g
VG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVk
KHRva2VuLT50ZXh0LCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnRl
eHQpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFj
cm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5u
YW1lID0gdG9rZW4tPnRleHQ7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICB7
CisgICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgorICAg
ICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVuYzsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRva2VuLT50ZXh0KTsKKworICAgICAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUg
KHRva2VuLT50eXBlID09ICcsJyk7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykK
KyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dGV4
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlw
ZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAg
ICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3Nhcnkg
aW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dz
IHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jv
cy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAg
bWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50
IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1l
bnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2Vt
ZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8g
Q2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBt
TWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8p
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQor
eworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT50ZXh0
KTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1N
YWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lG
KTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9r
ZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYp
OworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRp
b25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxv
Y2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tp
cCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXAp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxz
ZUdyb3VwID0gdHJ1ZTsKKyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3Jv
dXA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYg
dGhlcmUgYXJlIGV4dHJhIHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1D
b25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFj
aygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisgICAgeworICAgICAgICAvLyBObyBkaWFn
bm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5lLgorICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9j
ay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChibG9jay5mb3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3QgcGFy
c2UgdGhlIGV4cHJlc3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1p
dCBhIGRpYWdub3N0aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICBi
bG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxpZEdy
b3VwID0gZXhwcmVzc2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
bmRpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX0VORElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3Rh
Y2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAj
ZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2Vu
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05E
SVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVy
cm9yKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfRVJST1IpOworCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8
PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1E
aXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIo
KSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSld
Lgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAg
IGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BB
UkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsK
KworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOwor
ICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnRl
eHQ7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExFRlRfUEFS
RU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAg
ICAgICB2YWx1ZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYg
KHRva2VuLT50eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFs
aWQgPSB2YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJh
Z21hLgorICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAg
IC8vIFdpdGhvdXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hU
X1BBUkVOICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFH
TUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7
CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90
aWZ5IGZvciBlbXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+
aGFuZGxlUHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKKwor
ICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwK
KyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1F
OworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBl
ICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgor
ICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklF
UikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2
YWxpZCkgbmFtZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBDT0xPTjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzon
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05f
QkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dGV4
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElS
RUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2Nh
dGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VW
ZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBpZiAobVBhc3RGaXJzdFN0YXRlbWVudCkKKyAg
ICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpWRVJTSU9OX05P
VF9GSVJTVF9TVEFURU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW51bSBTdGF0ZQorICAgIHsK
KyAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7
CisgICAgaW50IHZlcnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwor
CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9
ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVS
OgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1Rf
SU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZ2ZXJzaW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVS
RkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAg
ICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
dmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5s
b2NhdGlvbiwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9MSU5FKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIExJTkVfTlVNQkVS
LAorICAgICAgICBGSUxFX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsK
KyAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOworICAgIGludCBzdGF0ZSA9IExJTkVfTlVNQkVS
OworCisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1Nl
dCwgbURpYWdub3N0aWNzKTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBMSU5FX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1CRVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmbGluZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRklM
RV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmZpbGUpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09W
RVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Cisg
ICAgfQorCisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRl
ICE9IEZJTEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHZhbGlk
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6
ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJF
UiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29s
IERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9u
YWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJs
b2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2su
c2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9j
ayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnRleHQ7CisgICAgYmxvY2subG9jYXRp
b24gPSB0b2tlbi0+bG9jYXRpb247CisKKyAgICBpZiAoc2tpcHBpbmcoKSkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9u
YWwgZ3JvdXAKKyAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0
aGlzIHdob2xlIGJsb2NrIGlzIHNraXBwZWQuCisgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRv
IHBhcnNlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKKyAgICAgICAgLy8g
ZW1pdCBhIGRpYWdub3N0aWMuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2Vu
KTsKKworICAgICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAgICAgIHN3aXRjaCAoZGlyZWN0
aXZlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgICAg
ICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4
cHJlc3Npb24gPT0gMDsKKyAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lv
biAhPSAwOworICAgIH0KKyAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwor
fQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4p
Cit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwK
KyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKKwor
ICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1E
aWFnbm9zdGljcyk7CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFy
c2VyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgRXhwcmVzc2lvblBhcnNlciBleHBy
ZXNzaW9uUGFyc2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOworCisgICAgaW50IGV4
cHJlc3Npb24gPSAwOworICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICBleHByZXNz
aW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7CisKKyAgICAvLyBXYXJuIGlmIHRo
ZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCisgICAgaWYgKCFpc0VPRCh0b2tl
bikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09O
RElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK2lu
dCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAor
ICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnRleHQpOworICAg
IGludCBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7CisKKyAg
ICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3ZjAwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmgKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9u
LmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVj
dGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisg
ICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAg
ICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJl
Y3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
RW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVu
c2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmco
KSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAg
IGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJl
c3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sK
KyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAgYm9vbCBza2lwR3Jv
dXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBib29sIGZvdW5kRWxz
ZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAgICAgICAgICBza2lw
QmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAg
IGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBib29sIG1QYXN0Rmlyc3RTdGF0
ZW1lbnQ7CisgICAgc3RkOjp2ZWN0b3I8Q29uZGl0aW9uYWxCbG9jaz4gbUNvbmRpdGlvbmFsU3Rh
Y2s7CisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7
CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVyKiBt
RGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kZjJkY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDE5NjUgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAq
LworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAw
MSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u
KQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogQXMg
YSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNv
bnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBk
aXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxv
bmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5n
IHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJz
ZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9u
KSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg
bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2Fz
IGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4y
IG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5
IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2Fs
bGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxv
dyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24g
dXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAg
dmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1h
Y3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGlu
Y2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5
IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8K
KworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8q
IEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKworLyog
U2tlbGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisv
KiBQdXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBVc2luZyBsb2NhdGlv
bnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJzdGl0dXRlIHRoZSB2YXJp
YWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKKyNk
ZWZpbmUgeXlsZXggICBwcGxleAorI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKKyNkZWZpbmUgeXls
dmFsICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyBwcGRl
YnVnCisjZGVmaW5lIHl5bmVycnMgcHBuZXJycworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVm
IFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisg
ICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRP
S19DT05TVF9JTlQgPSAyNTgsCisgICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FO
RCA9IDI2MCwKKyAgICAgVE9LX09QX05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisg
ICAgIFRPS19PUF9HRSA9IDI2MywKKyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1Bf
UklHSFQgPSAyNjUsCisgICAgIFRPS19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAy
NjcKKyAgIH07CisjZW5kaWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIFRPS19DT05TVF9JTlQg
MjU4CisjZGVmaW5lIFRPS19PUF9PUiAyNTkKKyNkZWZpbmUgVE9LX09QX0FORCAyNjAKKyNkZWZp
bmUgVE9LX09QX05FIDI2MQorI2RlZmluZSBUT0tfT1BfRVEgMjYyCisjZGVmaW5lIFRPS19PUF9H
RSAyNjMKKyNkZWZpbmUgVE9LX09QX0xFIDI2NAorI2RlZmluZSBUT0tfT1BfUklHSFQgMjY1Cisj
ZGVmaW5lIFRPS19PUF9MRUZUIDI2NgorI2RlZmluZSBUT0tfVU5BUlkgMjY3CisKKworCisKKy8q
IENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWYgR0NDIG9yIGNsYW5nLgorI2lmIGRlZmluZWQo
X19HTlVDX18pCisKKy8vIFRlbXBvcmFyaWx5IHR1cm4gb2ZmIHdhcm5pbmdzIGZvciB1bmtub3du
IHByYWdtYXMuCisvLyAtV3Vua25vd24tcHJhZ21hcyBpcyBhdmFpbGFibGUgb24gY2xhbmcgKHRl
c3RlZCA0LjApLCBidXQgbm90IG9uIG9sZCB2ZXJzaW9ucyBvZiBnY2MgKHRlc3RlZCA0LjItNC42
KS4KKy8vIC1XcHJhZ21hcyBpcyBhdmFpbGFibGUgb24gb2xkIGFuZCBuZXcgdmVyc2lvbnMgb2Yg
Z2NjICh0ZXN0ZWQgZ2NjIDQuMi00LjcpLCBidXQgbm90IG9uIGNsYW5nICh0ZXN0ZWQgNC4wKS4K
KyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVd1bmtub3duLXByYWdtYXMiCisjZWxzZQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3ByYWdtYXMiCisjZW5kaWYKKworLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRl
ZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5p
bml0aWFsaXplZCIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtYXliZS11bmlu
aXRpYWxpemVkIgorCisvLyBSZXN0b3JlIHdhcm5pbmdzIGZvciB1bmtub3duIHByYWdtYXMuCisj
aWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHdhcm5pbmcgIi1X
dW5rbm93bi1wcmFnbWFzIgorI2Vsc2UKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgd2FybmluZyAi
LVdwcmFnbWFzIgorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9u
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNp
bmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUg
IlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZ
UEU7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBF
OworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVOQUJMRV9OTFMgMAorI2RlZmluZSBZ
WUxUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmlu
ZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7
CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVy
OworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFt
ZXNwYWNlCisKKworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29u
dGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHJlYXNvbik7CisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRwor
IyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBt
ZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVS
Qk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9S
X1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisj
aWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisK
KyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAor
dHlwZWRlZiBpbnQgWVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVz
Y2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQg
MQorIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKworLyogQ29weSB0
aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8qIExpbmUgMjE2
IG9mIHlhY2MuYy4gICovCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5kaWYK
KworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4
OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYKKwor
I2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OworI2Vs
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWduZWQg
Y2hhciB5eXR5cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsK
KyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5
dHlwZV91aW50MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3Vp
bnQxNjsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQx
NiB5eXR5cGVfaW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2Owor
I2VuZGlmCisKKyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVm
aW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVm
aW5lIFlZU0laRV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNpemVf
dAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisjZW5k
aWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRlZiBZ
WV8KKyMgaWYgWVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGli
aW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZ
Xyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBl
bmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgor
I2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmci
IEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5l
IFlZVVNFKGUpICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5
ICovCisjZW5kaWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2Fy
bmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVm
aW5lIFlZSUQobikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKK3N0YXRpYyBpbnQKK1lZSUQgKGludCBpKQorI2Vsc2UKK3N0YXRpYyBpbnQKK1lZ
SUQgKGkpCisgICAgaW50IGk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIGk7Cit9CisjZW5kaWYKKwor
I2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisvKiBUaGUgcGFy
c2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9s
cy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VTRV9B
TExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1
aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgorIyAg
ICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2Nh
CisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJ
TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxvY2EgX2FsbG9j
YQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgIGlmICEg
ZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5G
UklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERMSUJfSAorIyAg
ICAgIGRlZmluZSBfU1RETElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRp
ZgorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQYWNp
ZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RBQ0tf
RlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZuZGVm
IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25s
eSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBhbmQg
YSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qg
c2FmZWx5CisgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2Ug
YSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21w
aWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUgWVlT
VEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisjICBl
bmRpZgorIyBlbHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVmaW5l
IFlZU1RBQ0tfRlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyMg
ICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRpZgor
IyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCisgICAg
ICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkgICAgICYm
IChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRsaWIu
aD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBfU1RETElC
X0gKKyMgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5k
ZWYgWVlNQUxMT0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZpbmVk
IG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlGUkVF
CisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZp
bmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2
b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMg
ICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxv
dyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwK
KyAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVkIFlZU1RZUEVf
SVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMg
cHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9j
Cit7CisgIHl5dHlwZV9pbnQxNiB5eXNzOworICBZWVNUWVBFIHl5dnM7CisgIH07CisKKy8qIFRo
ZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0
aGUgbmV4dC4gICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9u
IHl5YWxsb2MpIC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdo
IHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVm
aW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2
KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKwor
LyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRl
c3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlmbmRlZiBZWUNPUFkKKyMgIGlm
IGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAgZGVmaW5lIFlZQ09QWShUbywg
RnJvbSwgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQp
ICogc2l6ZW9mICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9t
LCBDb3VudCkJCVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAorCSAgWVlTSVpFX1QgeXlpOwkJ
CQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJICAgIChUbylb
eXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkK
KyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2Nh
dGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQg
WVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBp
biB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAg
c3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3Ig
dGhlIG5leHQKKyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2sp
CQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5
bmV3Ynl0ZXM7CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7
CQkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0
YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0
ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJ
XAorICAgIHdoaWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0gU3RhdGUg
bnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDE0
CisvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNU
ICAgMTc1CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZp
bmUgWVlOVE9LRU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAq
LworI2RlZmluZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICov
CisjZGVmaW5lIFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4g
ICovCisjZGVmaW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJp
c29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZ
VU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlUUkFOU0xB
VEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5
dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0g
Qmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAgICAgIDI1
LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDcs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYsICAgICAy
LCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAx
LCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZ
Tl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGlu
CisgICBZWVJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KK3sK
KyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1LCAgICAx
OSwgICAgMjMsICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAgIDQ3LCAg
ICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUsICAgIDc5
LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNl
cGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVf
aW50OCB5eXJoc1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAgICAtMSwg
ICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAg
NSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAg
ICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAgMjksICAg
ICA5LCAgICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwgICAgMjks
ICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAtMSwgICAg
MjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAgICAtMSwg
ICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAgIC0xLCAg
ICAyOSwKKyAgICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjksICAgIC0x
LCAgICAyOSwgICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAgMjksICAg
IC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwgICAgLTEs
ICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAgICAyOSwK
KyAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlSTElORVtZ
WU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwgICAx
MDcsICAgMTA3LCAgIDExNCwgICAxMTUsICAgMTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LCAgIDEz
MCwKKyAgICAgMTMzLCAgIDEzNiwgICAxMzksICAgMTQyLCAgIDE0NSwgICAxNDgsICAgMTUxLCAg
IDE1NCwgICAxNTcsICAgMTYwLAorICAgICAxNzMsICAgMTg2LCAgIDE4OSwgICAxOTIsICAgMTk1
LCAgIDE5OCwgICAyMDEKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJC
T1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5h
bWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRo
ZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25z
dCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZp
bmVkIiwgIlRPS19DT05TVF9JTlQiLCAiVE9LX09QX09SIiwKKyAgIlRPS19PUF9BTkQiLCAiJ3wn
IiwgIideJyIsICInJiciLCAiVE9LX09QX05FIiwgIlRPS19PUF9FUSIsICInPCciLAorICAiJz4n
IiwgIlRPS19PUF9HRSIsICJUT0tfT1BfTEUiLCAiVE9LX09QX1JJR0hUIiwgIlRPS19PUF9MRUZU
IiwgIicrJyIsCisgICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVE9LX1VOQVJZIiwgIich
JyIsICInficiLCAiJygnIiwgIicpJyIsCisgICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJlc3Np
b24iLCAwCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgt
TlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4g
WVlMRVgtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQor
eworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQsICAg
IDk0LCAgICAzOCwgICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2MywgICAyNjQs
ICAgMjY1LCAgIDI2NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAzNywgICAy
NjcsICAgIDMzLCAgIDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZWVIxW1lZ
Tl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAor
ICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBv
c2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAg
ICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9OworCisv
KiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4g
c3RhdGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGlu
ZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAq
Lworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAg
ICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAg
IDI1LAorICAgICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAor
ICAgICAgMTAsICAgIDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4
LCAgICAxNywgICAgMjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09UT1tOVEVS
TS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7Cisg
ICAgICAtMSwgICAgIDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRl
eCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICov
CisjZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBh
Y3RbXSA9Cit7CisgICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAg
ICA0NiwgICAgMTIsICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEsICAgIDI3
LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
NDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAgIDExNiwg
ICAxMzAsICAgMTQzLCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgIC0x
MCwgICAgMzcsICAgIDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAgLTExCit9
OworCisvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4
IHl5cGdvdG9bXSA9Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZWVRBQkxF
W1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYK
KyAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUg
cnVsZSB3aGljaAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQg
WVlERUZBQ1Qgc2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyNk
ZWZpbmUgWVlUQUJMRV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVb
XSA9Cit7CisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAs
CisgICAgICA1MSwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwK
KyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMgor
fTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAgICAgMiwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwK
KyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxNywgICAgMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywKKyAgICAg
IDI0LCAgICAyNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAgIDcsICAg
ICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAgICA5LAor
ICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlTVE9TW1NU
QVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5
bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXN0b3NbXSA9Cit7CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5
Cit9OworCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xl
YXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZ
WUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlB
Qk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgor
CisKKy8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5z
IGhlcmUgdGVtcG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBt
ZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1
cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisKKyNkZWZpbmUgWVlGQUlMCQln
b3RvIHl5ZXJybGFiCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQor
CisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJCQkJCQlcCisgIGlm
ICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgewkJCQkJCQkJXAor
ICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJ
CQkJCVwKKyAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAgICAg
WVlQT1BTVEFDSyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAg
fQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXllcnJv
ciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisgICAg
ICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQorCisK
KyNkZWZpbmUgWVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9D
X0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisg
ICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNo
IGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAg
Ki8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlMTE9D
X0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJXAor
ICAgIGRvCQkJCQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1cnJl
bnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkgIChD
dXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47CVwK
KwkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7
CQlcCisJICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9j
b2x1bW47CVwKKwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJXAor
CSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlcCisJ
ICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0
X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMs
IDApLmxhc3RfY29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkK
KyNlbmRpZgorCisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBv
biB0aGUgc3RyZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6
IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hl
biB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRlZiBZWV9MT0NB
VElPTl9QUklOVAorIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElP
Tl9QUklOVChGaWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQi
LAkJCVwKKwkgICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKwkg
ICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVm
aW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2Vu
ZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3Vt
ZW50cy4gICovCisKKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5
eWx2YWwsIFlZTEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFs
LCBjb250ZXh0KQorI2VuZGlmCisKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAg
Ki8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8u
aD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5U
RiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJ
CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9
IHdoaWxlIChZWUlEICgwKSkKKworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVn
KQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIs
ICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJ
CQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQg
KDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRo
aXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRw
dXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAq
Y29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAg
ICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBD
b250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJu
OworICBZWVVTRSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZ
TlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFs
dWVwKTsKKyMgZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5
dHlwZSkKKyAgICB7CisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZ
WU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3lt
Ym9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNv
bnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9z
eW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJ
TEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0
IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlw
ZSA8IFlZTlRPS0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5
dG5hbWVbeXl0eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0g
JXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICIpIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUg
c3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQp
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBl
X2ludDE2ICp0b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50IChib3R0b20s
IHRvcCkKKyAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnRvcDsK
KyNlbmRpZgoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsg
Ym90dG9tIDw9IHRvcDsgKytib3R0b20pCisgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAq
Ym90dG9tKTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9T
VEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1
ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9
IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBi
ZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwg
Q29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5
eXZzcCwgeXlydWxlLCBjb250ZXh0KQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1
bGU7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0geXly
Mlt5eXJ1bGVdOworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxp
bmVbeXlydWxlXTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxl
ICVkIChsaW5lICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBUaGUg
c3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7
IHl5aSsrKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSAr
IDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVd
ICsgeXlpXSwKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkgICAg
ICAgCQkgICAgICAgLCBjb250ZXh0KTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Cisg
ICAgfQorfQorCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwK
KyAgaWYgKHl5ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBj
b250ZXh0KTsgXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQg
cGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlw
bGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURF
QlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklO
VChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQo
Qm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAh
WVlERUJVRyAqLworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFy
c2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERF
UFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFj
a3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sg
ZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0
b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBp
bmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1B
WERFUFRICisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworDAorCisjaWYgWVlF
UlJPUl9WRVJCT1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNf
XyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVs
c2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25z
dCBjaGFyICp5eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikK
KyAgICBjb25zdCBjaGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAg
Zm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAg
cmV0dXJuIHl5bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkK
KyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQg
X0dOVV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5
IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGlu
ZyAnXDAnIGluCisgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0
IGNoYXIgKnl5c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5
c3JjKQorICAgIGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgor
eworICBjaGFyICp5eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisg
IHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJl
dHVybiB5eWQgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJy
CisvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcg
YXdheSB1bm5lY2Vzc2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdz
IHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUt
cXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4g
YXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xh
c2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlz
CisgICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hh
dCB0aGUgcmVzdWx0CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5
eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0
ciA9PSAnIicpCisgICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29u
c3QgKnl5cCA9IHl5c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAg
eworCSAgY2FzZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1
b3RlczsKKworCSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAg
Z290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAg
ZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAg
ICB5eW4rKzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJ
ICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9f
bm90X3N0cmlwX3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4g
eXlzdHJsZW4gKHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5
eXJlczsKK30KKyMgZW5kaWYKKworLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3Nh
Z2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZ
WVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVkaW5n
IHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QK
KyAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3
b3VsZCBiZQorICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9y
ZGluYXJ5ICJzeW50YXggZXJyb3IiCisgICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpF
X01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlvbi4g
ICovCitzdGF0aWMgWVlTSVpFX1QKK3l5c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50
IHl5c3RhdGUsIGludCB5eWNoYXIpCit7CisgIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisK
KyAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJldHVy
biAwOworICBlbHNlCisgICAgeworICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOworICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5
cGVdKTsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVfVCB5
eXNpemUxOworICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsgWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5YXJn
W1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworICAgICAgaW50IHl5eDsKKworIyBpZiAw
CisgICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3Jt
YXRzIHRoYXQgYXJlCisJIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLworICAgICAgWVlfKCJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1
bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1
bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVy
cm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAgIFlZ
Xygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMg
b3IgJXMiKTsKKyMgZW5kaWYKKyAgICAgIGNoYXIgKnl5Zm10OworICAgICAgY2hhciBjb25zdCAq
eXlmOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVy
cm9yLCB1bmV4cGVjdGVkICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5n
W10gPSAiLCBleHBlY3RpbmcgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0g
IiBvciAlcyI7CisgICAgICBjaGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJICAg
ICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQorCQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0gLSAyKQorCQkgICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAgY2hh
ciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVjdGluZzsKKworICAgICAgLyogU3RhcnQgWVlYIGF0
IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNIRUNL
LiAgKi8KKyAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKworICAgICAg
LyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisg
ICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4ZW5k
ID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisgICAg
ICBpbnQgeXljb3VudCA9IDE7CisKKyAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOwor
ICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAgICAg
IGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hlY2tb
eXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAoeXlj
b3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXljb3Vu
dCA9IDE7CisJCXl5c2l6ZSA9IHl5c2l6ZTA7CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0
ZWQgLSAxXSA9ICdcMCc7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3VudCsr
XSA9IHl5dG5hbWVbeXl4XTsKKwkgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwg
eXl0bmFtZVt5eXhdKTsKKwkgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXpl
KTsKKwkgICAgeXlzaXplID0geXlzaXplMTsKKwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQs
IHl5cHJlZml4KTsKKwkgICAgeXlwcmVmaXggPSB5eW9yOworCSAgfQorCisgICAgICB5eWYgPSBZ
WV8oeXlmb3JtYXQpOworICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOwor
ICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5c2l6
ZSA9IHl5c2l6ZTE7CisKKyAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZU0la
RV9NQVhJTVVNOworCisgICAgICBpZiAoeXlyZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3ByaW50
ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAgRG9u
J3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkgICAg
IHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCisJ
ICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKKwkgIGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgqeXlw
ID0gKnl5ZikgIT0gJ1wwJykKKwkgICAgeworCSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZb
MV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJyICh5
eXAsIHl5YXJnW3l5aSsrXSk7CisJCSAgeXlmICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsK
KwkJICB5eXArKzsKKwkJICB5eWYrKzsKKwkJfQorCSAgICB9CisJfQorICAgICAgcmV0dXJuIHl5
c2l6ZTsKKyAgICB9Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2Ug
dGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVz
dHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwg
Q29udGV4dCAqY29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXltc2cs
IHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisgICAgY29uc3QgY2hhciAqeXltc2c7CisgICAg
aW50IHl5dHlwZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0
OworI2VuZGlmCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZVVNFIChjb250ZXh0KTsKKwor
ICBpZiAoIXl5bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5U
ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAoeXl0
eXBlKQorICAgIHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisMCisKKy8q
IFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisKKyNpZmRl
ZiBZWVBBUlNFX1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCitpbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFy
c2UgKCk7CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQgKmNv
bnRleHQpOworI2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBB
UlNFX1BBUkFNICovCisKKworCisKKworCisvKi0tLS0tLS0tLS0uCit8IHl5cGFyc2UuICB8Citg
LS0tLS0tLS0tLSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFN
KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBBUlNF
X1BBUkFNOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKENvbnRleHQgKmNv
bnRleHQpCisjZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIENvbnRleHQgKmNvbnRl
eHQ7CisjZW5kaWYKKyNlbmRpZgoreworICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwor
aW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5
bWJvbC4gICovCitZWVNUWVBFIHl5bHZhbDsKKworLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMg
c28gZmFyLiAgKi8KK2ludCB5eW5lcnJzOworCisgIGludCB5eXN0YXRlOworICBpbnQgeXluOwor
ICBpbnQgeXlyZXN1bHQ7CisgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVy
cm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICBpbnQgeXllcnJzdGF0dXM7CisgIC8qIExvb2st
YWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICov
CisgIGludCB5eXRva2VuID0gMDsKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZv
ciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXlt
c2didWZbMTI4XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2df
YWxsb2MgPSBzaXplb2YgeXltc2didWY7CisjZW5kaWYKKworICAvKiBUaHJlZSBzdGFja3MgYW5k
IHRoZWlyIHRvb2xzOgorICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAorICAgICBgeXl2
cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorICAgICBgeXlscyc6IHJlbGF0ZWQgdG8g
bG9jYXRpb25zLgorCisgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2lu
dGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdo
ZXJlLiAgKi8KKworICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICB5eXR5cGVfaW50MTYgeXlz
c2FbWVlJTklUREVQVEhdOworICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKKyAgeXl0eXBl
X2ludDE2ICp5eXNzcDsKKworICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICBZ
WVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOworICBZ
WVNUWVBFICp5eXZzcDsKKworCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAo
TiksIHl5c3NwIC09IChOKSkKKworICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRI
OworCisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5k
IGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUg
eXl2YWw7CisKKworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUg
cmVkdWNlZCBydWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJl
IHBvcHBlZC4gICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
U3RhcnRpbmcgcGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAw
OworICB5eW5lcnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4g
dG8gYmUgcmVhZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAg
V2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRo
YXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAg
VGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworCisgIHl5c3Nw
ID0geXlzczsKKyAgeXl2c3AgPSB5eXZzOworCisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlz
dGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5
b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUganVz
dCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3Mu
ICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKwor
ICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBH
ZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRz
LiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRl
ZiB5eW92ZXJmbG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2Nh
dGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBk
b24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUg
Knl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworCisJLyogRWFj
aCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJ
ICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUg
YQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRo
YXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8K
Kwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlz
aXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5
eXZzcCksCisKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9
IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlT
VEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAgICAg
LyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhERVBU
SCA8PSB5eXN0YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFja3Np
emUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFja3Np
emUgPSBZWU1BWERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7
CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19B
TExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdv
dG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7CisJWVlTVEFDS19S
RUxPQ0FURSAoeXl2cyk7CisKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEg
IT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNl
bmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAt
IDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisKKyAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWdu
ZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3Np
emUgLSAxIDw9IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgZ290byB5eWJhY2t1cDsK
KworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNr
dXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBz
dGF0ZS4gIFJlYWQgYQorICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBk
b24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdo
YXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCisgIHl5
biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAgICBnb3Rv
IHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBp
ZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZ
RU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIGlmICh5
eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFk
aW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAo
eXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsK
KyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7Cisg
ICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIp
OworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVp
bmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9y
LCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAw
IHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5
ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgewor
ICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVycmxh
YjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKworICBp
ZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogQ291bnQgdG9rZW5zIHNo
aWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorICAgICBzdGF0
dXMuICAqLworICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsKKworICAvKiBT
aGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0
aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hp
ZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikK
KyAgICB5eWNoYXIgPSBZWUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNwID0g
eXlsdmFsOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQgLS0g
ZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5
eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisg
ICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRoZSBu
dW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5bl07
CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVl
IG9mIHRoZSBhY3Rpb246CisgICAgIGAkJCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRoZSBm
b2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZpb3Ig
aXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBv
biBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhl
IHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5pbmcg
dGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5eXZz
cFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4p
CisgICAgeworICAgICAgICBjYXNlIDI6CisKKyAgICB7CisgICAgICAgICooY29udGV4dC0+cmVz
dWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgWVlB
Q0NFUFQ7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkg
LSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5
eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8
PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzOgor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygz
KSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisKKyAgICB7CisgICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSArICh5eXZz
cFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAgICB7
CisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEp
IC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIo
KSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6Om9zdHJpbmdz
dHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8
PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0
ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAg
ICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWygy
KSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygyKSAt
ICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAyNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyld
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisKKy8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwor
CisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQk
ID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7
CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5
eXZzcCA9IHl5dmFsOworCisKKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVk
dWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBv
biB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJlciBy
ZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdv
dG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0
YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRl
ID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXlu
IC0gWVlOVE9LRU5TXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5n
IGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJs
YWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0
IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXlu
ZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwgWVlf
KCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorICAgICAgeworCVlZU0laRV9UIHl5c2l6ZSA9IHl5
c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOworCWlmICh5eW1zZ19hbGxvYyA8IHl5
c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKKwkgIHsKKwkgICAg
WVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7CisJICAgIGlmICghICh5eXNpemUgPD0geXlh
bGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisJICAgICAgeXlhbGxv
YyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKwkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQor
CSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RB
Q0tfQUxMT0MgKHl5YWxsb2MpOworCSAgICBpZiAoeXltc2cpCisJICAgICAgeXltc2dfYWxsb2Mg
PSB5eWFsbG9jOworCSAgICBlbHNlCisJICAgICAgeworCQl5eW1zZyA9IHl5bXNnYnVmOworCQl5
eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKwkgICAgICB9CisJICB9CisKKwlpZiAoMCA8
IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCisJICB7CisJICAgICh2b2lkKSB5eXN5
bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7CisJICAgIHl5ZXJyb3IgKGNvbnRl
eHQsIHl5bXNnKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZ
Xygic3ludGF4IGVycm9yIikpOworCSAgICBpZiAoeXlzaXplICE9IDApCisJICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYg
KHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFp
bGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQg
aXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBm
YWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQor
CSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6
IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkgIHl5
Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNl
IGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAg
Ki8KKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4
cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGls
ZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJS
T1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVz
ZXIKKyAgICAgY29kZS4gICovCisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXll
cnJvcmxhYjsKKworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3
aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RB
Q0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OworICB5eXN0YXRlID0gKnl5c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJS
T1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCBy
ZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQorICAg
IHsKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQQUNU
X05JTkYpCisJeworCSAgeXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8
PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXlu
ID0geXl0YWJsZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQor
CX0KKworICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhh
bmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJWVlB
Qk9SVDsKKworCisgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rv
c1t5eXN0YXRlXSwgeXl2c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAg
ICB5eXN0YXRlID0gKnl5c3NwOworICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsK
KyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgICorK3l5
dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlf
U1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKwor
ICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21l
cyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Y2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNv
bWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlh
Ym9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWZuZGVmIHl5
b3ZlcmZsb3cKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
K3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0
ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgor
Cit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkK
KyAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKwkJIHl5
dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9s
cyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBv
ciBZWUFDQ0VQVC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQg
KHl5c3MsIHl5c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlk
ZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwg
Y29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZs
b3cKKyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRp
ZgorI2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlT
VEFDS19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4g
ICovCisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4KFlZ
U1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKwor
ICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2Vu
LT50eXBlKQorICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICB7
CisgICAgICAgIHVuc2lnbmVkIGludCB2YWwgPSAwOworICAgICAgICBpZiAoIXRva2VuLT51VmFs
dWUoJnZhbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5y
ZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
KyAgICAgICAgfQorICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwpOwor
ICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9Cisg
ICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBUT0tfT1BfT1I7IGJyZWFrOworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9IFRPS19PUF9BTkQ7IGJyZWFrOworICAg
ICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gVE9LX09QX05FOyBicmVhazsKKyAgICAg
IGNhc2UgcHA6OlRva2VuOjpPUF9FUTogdHlwZSA9IFRPS19PUF9FUTsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBUT0tfT1BfR0U7IGJyZWFrOworICAgICAgY2Fz
ZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gVE9LX09QX0xFOyBicmVhazsKKyAgICAgIGNhc2Ug
cHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IFRPS19PUF9SSUdIVDsgYnJlYWs7CisgICAgICBj
YXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IFRPS19PUF9MRUZUOyBicmVhazsKKyAgICAg
IGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14n
OyBicmVhazsKKyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2Ug
Jz4nOiB0eXBlID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVh
azsKKyAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0
eXBlID0gJysnOyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAg
ICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0g
JyonOyBicmVhazsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNh
c2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBi
cmVhazsKKyAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0
aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4
ZXItPmxleCh0b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNl
IHBwIHsKKworRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIs
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURp
YWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBh
cnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0Owor
ICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhl
ciA9IG1MZXhlcjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1
bHQgPSByZXN1bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRj
aCAocmV0KQorICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJl
YWs7CisKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVh
azsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9j
YXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAw
OworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJkMDU5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hf
CisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworCisj
aW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0
aWNzOworY2xhc3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25QYXJz
ZXIKK3sKKyAgcHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGlu
dCogcmVzdWx0KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihFeHByZXNzaW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25vc3Rp
Y3MqIG1EaWFnbm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lv
blBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9FeHByZXNzaW9uUGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTVmYjFhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEsMzAx
IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFt
bWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZ
IFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElD
SCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgor
Ki8KKworJXsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWYgR0NDIG9yIGNsYW5n
LgorI2lmIGRlZmluZWQoX19HTlVDX18pCisKKy8vIFRlbXBvcmFyaWx5IHR1cm4gb2ZmIHdhcm5p
bmdzIGZvciB1bmtub3duIHByYWdtYXMuCisvLyAtV3Vua25vd24tcHJhZ21hcyBpcyBhdmFpbGFi
bGUgb24gY2xhbmcgKHRlc3RlZCA0LjApLCBidXQgbm90IG9uIG9sZCB2ZXJzaW9ucyBvZiBnY2Mg
KHRlc3RlZCA0LjItNC42KS4KKy8vIC1XcHJhZ21hcyBpcyBhdmFpbGFibGUgb24gb2xkIGFuZCBu
ZXcgdmVyc2lvbnMgb2YgZ2NjICh0ZXN0ZWQgZ2NjIDQuMi00LjcpLCBidXQgbm90IG9uIGNsYW5n
ICh0ZXN0ZWQgNC4wKS4KKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisjZWxzZQorI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3ByYWdtYXMiCisjZW5kaWYKKworLy8gVHJpZ2dlcmVkIGJ5IHRo
ZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisjcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgorCisvLyBSZXN0b3JlIHdhcm5pbmdzIGZvciB1bmtu
b3duIHByYWdtYXMuCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIHdhcm5pbmcgIi1XdW5rbm93bi1wcmFnbWFzIgorI2Vsc2UKKyNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgd2FybmluZyAiLVdwcmFnbWFzIgorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX01TQ19W
RVIpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNs
dWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUg
PHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJMZXhl
ci5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRl
ZiBfX2ludDY0IFlZU1RZUEU7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBp
bnRtYXhfdCBZWVNUWVBFOworI2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVOQUJMRV9O
TFMgMAorI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX1RS
SVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0
cnVjdCBDb250ZXh0Cit7CisgICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBw
cDo6TGV4ZXIqIGxleGVyOworICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7
Cit9OworfSAgLy8gbmFtZXNwYWNlCislfQorCislcHVyZS1wYXJzZXIKKyVuYW1lLXByZWZpeD0i
cHAiCislcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CislbGV4LXBhcmFtIHtDb250ZXh0
ICpjb250ZXh0fQorCisleworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4
dCogY29udGV4dCk7CitzdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIHJlYXNvbik7CislfQorCisldG9rZW4gVE9LX0NPTlNUX0lOVAorJWxlZnQgVE9LX09Q
X09SCislbGVmdCBUT0tfT1BfQU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQgJyYnCisl
bGVmdCBUT0tfT1BfRVEgVE9LX09QX05FCislbGVmdCAnPCcgJz4nIFRPS19PUF9MRSBUT0tfT1Bf
R0UKKyVsZWZ0IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAorJWxlZnQgJysnICctJworJWxlZnQg
JyonICcvJyAnJScKKyVyaWdodCBUT0tfVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJl
c3Npb24geworICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCQx
KTsKKyAgICAgICAgWVlBQ0NFUFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAgOiBUT0tf
Q09OU1RfSU5UCisgICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSB8fCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9BTkQgZXhw
cmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biAnfCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBl
eHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0K
KyAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7
CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgIT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfRVEgZXhwcmVz
c2lvbiB7CisgICAgICAgICQkID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBU
T0tfT1BfR0UgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPD0g
JDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gJDEgPiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc8JyBleHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSAkMSA8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09QX1JJR0hU
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4+ICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gVE9LX09QX0xFRlQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7Cisg
ICAgfQorICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEg
LSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMSArICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24gewor
ICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0
cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4t
PmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICQkID0gJDEgJSAkMzsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
Jy8nIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiIC8g
IiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6
RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAgfQorICAgIH0K
KyAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICogJDM7
CisgICAgfQorICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAgICAgICAg
JCQgPSAhICQyOworICAgIH0KKyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7
CisgICAgICAgICQkID0gfiAkMjsKKyAgICB9CisgICAgfCAnLScgZXhwcmVzc2lvbiAlcHJlYyBU
T0tfVU5BUlkgeworICAgICAgICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJlc3Np
b24gJXByZWMgVE9LX1VOQVJZIHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAgICB8ICco
JyBleHByZXNzaW9uICcpJyB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCislJQorCitp
bnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5
cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3
aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lO
VDoKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CisgICAgICAgIGlmICgh
dG9rZW4tPnVWYWx1ZSgmdmFsKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZGlh
Z25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnRleHQpOworICAgICAgICB9CisgICAgICAgICpsdmFscCA9IHN0YXRpY19jYXN0PFlZU1RZ
UEU+KHZhbCk7CisgICAgICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBicmVhazsK
KyAgICAgIH0KKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVh
azsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7
CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOwor
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVh
azsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJy
ZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6
IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOwor
ICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUg
PSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAg
Y2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7
IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAn
Kic6IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFr
OworICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5
cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisg
ICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0
IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBj
b250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lk
IHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNv
bnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJF
U1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQor
CituYW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExl
eGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVy
KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lv
blBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0
IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBj
b250ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBj
b250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7
CisgICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgor
ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOwor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1Is
IHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg2OGMxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9JbnB1dC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJJ
bnB1dC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5j
bHVkZSA8Y3N0cmluZz4KKworbmFtZXNwYWNlIHBwCit7CisKK0lucHV0OjpJbnB1dCgpIDogbUNv
dW50KDApLCBtU3RyaW5nKDApCit7Cit9CisKK0lucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBtQ291bnQo
Y291bnQpLAorICAgIG1TdHJpbmcoc3RyaW5nKQoreworICAgIGFzc2VydChtQ291bnQgPj0gMCk7
CisgICAgbUxlbmd0aC5yZXNlcnZlKG1Db3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt
Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGludCBsZW4gPSBsZW5ndGggPyBsZW5ndGhbaV0g
OiAtMTsKKyAgICAgICAgbUxlbmd0aC5wdXNoX2JhY2sobGVuIDwgMCA/IHN0ZDo6c3RybGVuKG1T
dHJpbmdbaV0pIDogbGVuKTsKKyAgICB9Cit9CisKK2ludCBJbnB1dDo6cmVhZChjaGFyKiBidWYs
IGludCBtYXhTaXplKQoreworICAgIGludCBuUmVhZCA9IDA7CisgICAgd2hpbGUgKChuUmVhZCA8
IG1heFNpemUpICYmIChtUmVhZExvYy5zSW5kZXggPCBtQ291bnQpKQorICAgIHsKKyAgICAgICAg
aW50IHNpemUgPSBtTGVuZ3RoW21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7Cisg
ICAgICAgIHNpemUgPSBzdGQ6Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgc3RkOjptZW1j
cHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRl
eCwgc2l6ZSk7CisgICAgICAgIG5SZWFkICs9IHNpemU7CisgICAgICAgIG1SZWFkTG9jLmNJbmRl
eCArPSBzaXplOworCisgICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNoZWQgdGhl
IGVuZCBvZiBjdXJyZW50IHN0cmluZy4KKyAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRleCA9PSBt
TGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbVJlYWRM
b2Muc0luZGV4OworICAgICAgICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gblJlYWQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0lucHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjNzM0Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvSW5wdXQuaApAQCAtMCwwICsxLDQ4IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lm
bmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0lOUFVUX0hfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBwcAor
eworCisvLyBIb2xkcyBhbmQgcmVhZHMgaW5wdXQgZm9yIExleGVyLgorY2xhc3MgSW5wdXQKK3sK
KyAgcHVibGljOgorICAgIElucHV0KCk7CisgICAgSW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFy
KiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKKworICAgIGludCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0aChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGhbaW5kZXhdOyB9CisKKyAgICBpbnQgcmVhZChj
aGFyKiBidWYsIGludCBtYXhTaXplKTsKKworICAgIHN0cnVjdCBMb2NhdGlvbgorICAgIHsKKyAg
ICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50IGNJbmRleDsg
IC8vIENoYXIgaW5kZXguCisKKyAgICAgICAgTG9jYXRpb24oKSA6IHNJbmRleCgwKSwgY0luZGV4
KDApIHsgfQorICAgIH07CisgICAgY29uc3QgTG9jYXRpb24mIHJlYWRMb2MoKSBjb25zdCB7IHJl
dHVybiBtUmVhZExvYzsgfQorCisgIHByaXZhdGU6CisgICAgLy8gSW5wdXQuCisgICAgaW50IG1D
b3VudDsKKyAgICBjb25zdCBjaGFyKiBjb25zdCogbVN0cmluZzsKKyAgICBzdGQ6OnZlY3Rvcjxp
bnQ+IG1MZW5ndGg7CisKKyAgICBMb2NhdGlvbiBtUmVhZExvYzsKK307CisKK30gIC8vIG5hbWVz
cGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9MZXhlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0xleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY2
M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpbmNsdWRlICJMZXhlci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6On5MZXhl
cigpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmgK
QEAgLTAsMCArMSwyNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX0xFWEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwor
CituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhlcgoreworICBw
dWJsaWM6CisgICAgdmlydHVhbCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9r
ZW4qIHRva2VuKSA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlMzA4OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8u
Y3BwCkBAIC0wLDAgKzEsMjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFjcm8uaCIK
KworI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSBwcAoreworCitib29sIE1hY3JvOjpl
cXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAodHlwZSA9PSBv
dGhlci50eXBlKSAmJgorICAgICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAmJgorICAgICAg
ICAgICAocGFyYW1ldGVycyA9PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAgICAgICAocmVw
bGFjZW1lbnRzID09IG90aGVyLnJlcGxhY2VtZW50cyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBw
cAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL01hY3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL01hY3JvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2VjMDE0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaApAQCAtMCwwICsxLDQ0IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KKyNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8
c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBU
b2tlbjsKKworc3RydWN0IE1hY3JvCit7CisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBr
VHlwZU9iaiwKKyAgICAgICAga1R5cGVGdW5jCisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9r
ZW4+IFJlcGxhY2VtZW50czsKKworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNlKSwgZGlz
YWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhjb25zdCBN
YWNybyYgb3RoZXIpIGNvbnN0OworCisgICAgYm9vbCBwcmVkZWZpbmVkOworICAgIG11dGFibGUg
Ym9vbCBkaXNhYmxlZDsKKworICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOwor
ICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRz
OworfTsKKwordHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3JvU2V0Owor
Cit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01B
Q1JPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE2YzUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVy
LmNwcApAQCAtMCwwICsxLDM3MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJNYWNyb0V4
cGFuZGVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKwor
I2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVz
cGFjZSBwcAoreworCitjbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExleGVyCit7CisgcHVibGlj
OgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9yOworCisgICAgVG9r
ZW5MZXhlcihUb2tlblZlY3RvciogdG9rZW5zKQorICAgIHsKKyAgICAgICAgdG9rZW5zLT5zd2Fw
KG1Ub2tlbnMpOworICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIGlmIChtSXRl
ciA9PSBtVG9rZW5zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+cmVzZXQo
KTsKKyAgICAgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqdG9rZW4gPSAqbUl0ZXIrKzsKKyAg
ICAgICAgfQorICAgIH0KKworIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRva2VuTGV4ZXIpOworCisgICAgVG9rZW5WZWN0b3IgbVRva2VuczsKKyAgICBUb2tlblZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4cGFuZGVyOjpNYWNyb0V4
cGFuZGVyKExleGVyKiBsZXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDoKKyAgICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1Nl
dCksCisgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQoreworfQorCitNYWNyb0V4cGFuZGVy
Ojp+TWFjcm9FeHBhbmRlcigpCit7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG1D
b250ZXh0U3RhY2suc2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBkZWxldGUgbUNvbnRleHRT
dGFja1tpXTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2VuKiB0b2tl
bikKK3sKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRva2VuKHRva2VuKTsK
KworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2FibGVkKCkpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIGlmIChpdGVyID09IG1N
YWNyb1NldC0+ZW5kKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25zdCBNYWNy
byYgbWFjcm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxlZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5vdCBleHBh
bmRlZCwgaXQgaXMgbmV2ZXIgZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0RXhwYW5z
aW9uRGlzYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoKG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRva2VuTGVm
dFBhcmVuKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBpbW1lZGlh
dGVseSBhZnRlciB0aGUgbWFjcm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAgICAvLyB0
aGlzIG1hY3JvIHNob3VsZCBub3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9Cit9CisK
K3ZvaWQgTWFjcm9FeHBhbmRlcjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAgIGlmICht
UmVzZXJ2ZVRva2VuLmdldCgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNlcnZlVG9r
ZW47CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEZpcnN0IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisgICAgd2hp
bGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCktPmVtcHR5
KCkpCisgICAgeworICAgICAgICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICghbUNvbnRl
eHRTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRTdGFjay5i
YWNrKCktPmdldCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4ZXItPmxl
eCh0b2tlbik7CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4oY29u
c3QgVG9rZW4mIHRva2VuKQoreworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAg
IHsKKyAgICAgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5iYWNrKCk7
CisgICAgICAgIGNvbnRleHQtPnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5yZXBs
YWNlbWVudHNbY29udGV4dC0+aW5kZXhdID09IHRva2VuKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgYXNzZXJ0KCFtUmVzZXJ2ZVRva2VuLmdldCgpKTsKKyAgICAgICAgbVJlc2Vy
dmVUb2tlbi5yZXNldChuZXcgVG9rZW4odG9rZW4pKTsKKyAgICB9Cit9CisKK2Jvb2wgTWFjcm9F
eHBhbmRlcjo6aXNOZXh0VG9rZW5MZWZ0UGFyZW4oKQoreworICAgIFRva2VuIHRva2VuOworICAg
IGdldFRva2VuKCZ0b2tlbik7CisKKyAgICBib29sIGxwYXJlbiA9IHRva2VuLnR5cGUgPT0gJygn
OworICAgIHVuZ2V0VG9rZW4odG9rZW4pOworCisgICAgcmV0dXJuIGxwYXJlbjsKK30KKworYm9v
bCBNYWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tl
biYgaWRlbnRpZmllcikKK3sKKyAgICBhc3NlcnQoIW1hY3JvLmRpc2FibGVkKTsKKyAgICBhc3Nl
cnQoIWlkZW50aWZpZXIuZXhwYW5zaW9uRGlzYWJsZWQoKSk7CisgICAgYXNzZXJ0KGlkZW50aWZp
ZXIudHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudGV4
dCA9PSBtYWNyby5uYW1lKTsKKworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7
CisgICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBl
eHBhbnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCisgICAgbWFjcm8uZGlz
YWJsZWQgPSB0cnVlOworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29u
dGV4dDsKKyAgICBjb250ZXh0LT5tYWNybyA9ICZtYWNybzsKKyAgICBjb250ZXh0LT5yZXBsYWNl
bWVudHMuc3dhcChyZXBsYWNlbWVudHMpOworICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNv
bnRleHQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1h
Y3JvKCkKK3sKKyAgICBhc3NlcnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7CisKKyAgICBNYWNy
b0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKKyAgICBtQ29udGV4dFN0
YWNrLnBvcF9iYWNrKCk7CisKKyAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7CisgICAgYXNz
ZXJ0KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7CisgICAgY29udGV4dC0+bWFjcm8tPmRpc2Fi
bGVkID0gZmFsc2U7CisgICAgZGVsZXRlIGNvbnRleHQ7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRl
cjo6ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgcmVw
bGFjZW1lbnRzLT5jbGVhcigpOworICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZU9i
aikKKyAgICB7CisgICAgICAgIHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50
cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVu
dHMuZW5kKCkpOworCisgICAgICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18iOwor
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsK
KworICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOworICAgICAg
ICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmZyb250KCk7CisgICAgICAgICAgICBp
ZiAobWFjcm8ubmFtZSA9PSBrTGluZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBz
dGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVu
dGlmaWVyLmxvY2F0aW9uLmxpbmU7CisgICAgICAgICAgICAgICAgcmVwbC50ZXh0ID0gc3RyZWFt
LnN0cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9
PSBrRmlsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJl
YW0gc3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9u
LmZpbGU7CisgICAgICAgICAgICAgICAgcmVwbC50ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2Vy
dChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpOworICAgICAgICBzdGQ6OnZlY3RvcjxN
YWNyb0FyZz4gYXJnczsKKyAgICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6
ZSgpKTsKKyAgICAgICAgaWYgKCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAm
YXJncykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVwbGFjZU1hY3Jv
UGFyYW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVudHMpOworICAgIH0KKworICAgIGZvciAoc3Rk
OjpzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQorICAgIHsKKyAg
ICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmF0KGkpOworICAgICAgICBpZiAoaSA9
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaW4gdGhlIHJl
cGxhY2VtZW50IGxpc3QgaW5oZXJpdHMgdGhlIHBhZGRpbmcKKyAgICAgICAgICAgIC8vIHByb3Bl
cnRpZXMgb2YgdGhlIGlkZW50aWZpZXIgdG9rZW4uCisgICAgICAgICAgICByZXBsLnNldEF0U3Rh
cnRPZkxpbmUoaWRlbnRpZmllci5hdFN0YXJ0T2ZMaW5lKCkpOworICAgICAgICAgICAgcmVwbC5z
ZXRIYXNMZWFkaW5nU3BhY2UoaWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgICAg
IH0KKyAgICAgICAgcmVwbC5sb2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RNYWNyb0Fy
Z3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncykKK3sKKyAgICBUb2tlbiB0b2tl
bjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworICAgIGFzc2VydCh0b2tlbi50eXBlID09ICcoJyk7
CisKKyAgICBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgZm9yIChpbnQgb3BlblBh
cmVucyA9IDE7IG9wZW5QYXJlbnMgIT0gMDsgKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4oJnRv
a2VuKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAg
eworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1VO
VEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci50ZXh0KTsKKyAgICAgICAgICAgIC8vIERv
IG5vdCBsb3NlIEVPRiB0b2tlbi4KKyAgICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4pOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0FyZyA9
IGZhbHNlOyAvLyBUcnVlIGlmIHRva2VuIGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYXJndW1lbnQu
CisgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
JygnOgorICAgICAgICAgICAgKytvcGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAgICAt
LW9wZW5QYXJlbnM7CisgICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgLy8gVGhlIGlu
ZGl2aWR1YWwgYXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWEgdG9rZW5zLCBidXQKKyAg
ICAgICAgICAgIC8vIHRoZSBjb21tYSB0b2tlbnMgYmV0d2VlbiBtYXRjaGluZyBpbm5lciBwYXJl
bnRoZXNlcyBkbyBub3QKKyAgICAgICAgICAgIC8vIHNlcGVyYXRlIGFyZ3VtZW50cy4KKyAgICAg
ICAgICAgIGlmIChvcGVuUGFyZW5zID09IDEpIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsK
KyAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAxOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpc0FyZykKKyAgICAgICAgeworICAg
ICAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmJhY2soKTsKKyAgICAgICAgICAgIC8vIElu
aXRpYWwgd2hpdGVzcGFjZSBpcyBub3QgcGFydCBvZiB0aGUgYXJndW1lbnQuCisgICAgICAgICAg
ICBpZiAoYXJnLmVtcHR5KCkpIHRva2VuLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAg
ICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNv
bnN0IE1hY3JvOjpQYXJhbWV0ZXJzJiBwYXJhbXMgPSBtYWNyby5wYXJhbWV0ZXJzOworICAgIC8v
IElmIHRoZXJlIGlzIG9ubHkgb25lIGVtcHR5IGFyZ3VtZW50LCBpdCBpcyBlcXVpdmFsZW50IHRv
IG5vIGFyZ3VtZW50LgorICAgIGlmIChwYXJhbXMuZW1wdHkoKSAmJiAoYXJncy0+c2l6ZSgpID09
IDEpICYmIGFyZ3MtPmZyb250KCkuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGFyZ3MtPmNsZWFy
KCk7CisgICAgfQorICAgIC8vIFZhbGlkYXRlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICAg
IGlmIChhcmdzLT5zaXplKCkgIT0gcGFyYW1zLnNpemUoKSkKKyAgICB7CisgICAgICAgIERpYWdu
b3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNpemUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpID8K
KyAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fRkVXX0FSR1MgOgorICAgICAgICAg
ICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19NQU5ZX0FSR1M7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KGlkLCBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnRleHQpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3Vt
ZW50IGJlZm9yZSBzdWJzdGl0dXRpb24uCisgICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBh
cmd1bWVudCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkgYXJlCisgICAgLy8gaW5zZXJ0ZWQgaW50
byB0aGUgbWFjcm8gYm9keS4KKyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgYXJncy0+
c2l6ZSgpOyArK2kpCisgICAgeworICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YXQoaSk7
CisgICAgICAgIFRva2VuTGV4ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAgIE1hY3JvRXhwYW5kZXIg
ZXhwYW5kZXIoJmxleGVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisKKyAgICAgICAgYXJn
LmNsZWFyKCk7CisgICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB3aGlsZSAo
dG9rZW4udHlwZSAhPSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgYXJnLnB1
c2hfYmFjayh0b2tlbik7CisgICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpy
ZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+
KiByZXBsYWNlbWVudHMpCit7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG1hY3Jv
LnJlcGxhY2VtZW50cy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRva2VuJiBy
ZXBsID0gbWFjcm8ucmVwbGFjZW1lbnRzW2ldOworICAgICAgICBpZiAocmVwbC50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1
c2hfYmFjayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVE9ETyhhbG9rcCk6IE9wdGltaXplIHRoaXMuCisgICAgICAgIC8vIFRoZXJlIGlzIG5v
IG5lZWQgdG8gc2VhcmNoIGZvciBtYWNybyBwYXJhbXMgZXZlcnkgdGltZS4KKyAgICAgICAgLy8g
VGhlIHBhcmFtIGluZGV4IGNhbiBiZSBjYWNoZWQgd2l0aCB0aGUgcmVwbGFjZW1lbnQgdG9rZW4u
CisgICAgICAgIE1hY3JvOjpQYXJhbWV0ZXJzOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3RkOjpm
aW5kKAorICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBtYWNyby5wYXJhbWV0
ZXJzLmVuZCgpLCByZXBsLnRleHQpOworICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0
ZXJzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFj
ayhyZXBsKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc3Rk
OjpzaXplX3QgaUFyZyA9IHN0ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBp
dGVyKTsKKyAgICAgICAgY29uc3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107CisgICAgICAg
IGlmIChhcmcuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgc3RkOjpzaXplX3QgaVJlcGwgPSByZXBsYWNlbWVudHMtPnNpemUoKTsK
KyAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNlcnQocmVwbGFjZW1lbnRzLT5lbmQoKSwgYXJnLmJl
Z2luKCksIGFyZy5lbmQoKSk7CisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCB0b2tlbiBpbmhl
cml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJvbQorICAgICAgICAvLyBtYWNybyByZXBsYWNlbWVu
dCB0b2tlbi4KKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hdChpUmVwbCkuc2V0SGFzTGVhZGluZ1Nw
YWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNl
IHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjFiNjc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5oCkBA
IC0wLDAgKzEsNzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9NQUNST19FWFBBTkRFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFD
Uk9fRVhQQU5ERVJfSF8KKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8bWVtb3J5Pgor
I2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8u
aCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlh
Z25vc3RpY3M7CisKK2NsYXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVi
bGljOgorICAgIE1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQs
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBhbmRlcigp
OworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6Cisg
ICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgdm9p
ZCBnZXRUb2tlbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25zdCBUb2tl
biYgdG9rZW4pOworICAgIGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAgIGJvb2wg
cHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpOwor
ICAgIHZvaWQgcG9wTWFjcm8oKTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8m
IG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisK
KyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29sIGNvbGxl
Y3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1BhcmFtcyhj
b25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNyb0NvbnRl
eHQKKyAgICB7CisgICAgICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc3RkOjpzaXpl
X3QgaW5kZXg7CisgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CisKKyAg
ICAgICAgTWFjcm9Db250ZXh0KCkgOiBtYWNybygwKSwgaW5kZXgoMCkgeyB9CisgICAgICAgIGJv
b2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBpbmRleCA9PSByZXBsYWNlbWVudHMuc2l6ZSgpOyB9
CisgICAgICAgIGNvbnN0IFRva2VuJiBnZXQoKSB7IHJldHVybiByZXBsYWNlbWVudHNbaW5kZXgr
K107IH0KKyAgICAgICAgdm9pZCB1bmdldCgpIHsgYXNzZXJ0KGluZGV4ID4gMCk7IC0taW5kZXg7
IH0KKyAgICB9OworCisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0
OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFRv
a2VuPiBtUmVzZXJ2ZVRva2VuOworICAgIHN0ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+IG1Db250
ZXh0U3RhY2s7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJf
UFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJv
Y2Vzc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTAyNGZlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIlByZXByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNp
bmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3NCYXNlLmgiCisjaW5jbHVk
ZSAiRGlyZWN0aXZlUGFyc2VyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNy
b0V4cGFuZGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCit7CisgICAgRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAgIFRva2Vu
aXplciB0b2tlbml6ZXI7CisgICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNlcjsKKyAg
ICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKERp
YWdub3N0aWNzKiBkaWFnLAorICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciog
ZGlyZWN0aXZlSGFuZGxlcikgOgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAgICAgICAg
dG9rZW5pemVyKGRpYWcpLAorICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXplciwgJm1h
Y3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBhbmRlcigm
ZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0KK307CisKK1By
ZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIp
Cit7CisgICAgbUltcGwgPSBuZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywgZGlyZWN0
aXZlSGFuZGxlcik7Cit9CisKK1ByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCit7CisgICAg
ZGVsZXRlIG1JbXBsOworfQorCitib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBzdGF0aWMgY29u
c3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBwcmUtZGVm
aW5lZCBtYWNyb3MuCisgICAgcHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7CisgICAgcHJl
ZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fVkVSU0lP
Tl9fIiwga0dMU0xWZXJzaW9uKTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAxKTsKKwor
ICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsK
K30KKwordm9pZCBQcmVwcm9jZXNzb3I6OnByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUs
IGludCB2YWx1ZSkKK3sKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgIHN0cmVh
bSA8PCB2YWx1ZTsKKworICAgIFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUgPSBUb2tlbjo6
Q09OU1RfSU5UOworICAgIHRva2VuLnRleHQgPSBzdHJlYW0uc3RyKCk7CisKKyAgICBNYWNybyBt
YWNybzsKKyAgICBtYWNyby5wcmVkZWZpbmVkID0gdHJ1ZTsKKyAgICBtYWNyby50eXBlID0gTWFj
cm86OmtUeXBlT2JqOworICAgIG1hY3JvLm5hbWUgPSBuYW1lOworICAgIG1hY3JvLnJlcGxhY2Vt
ZW50cy5wdXNoX2JhY2sodG9rZW4pOworCisgICAgbUltcGwtPm1hY3JvU2V0W25hbWVdID0gbWFj
cm87Cit9CisKK3ZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGJv
b2wgdmFsaWRUb2tlbiA9IGZhbHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAgICB7Cisg
ICAgICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3aXRjaCAo
dG9rZW4tPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJl
dHVybmluZyBpbnRlcm5hbCBwcmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAvLyBDb252
ZXJ0IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBvcnQKKyAg
ICAgICAgICAvLyBkaWFnbm9zdGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgor
ICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgVG9rZW46OkNPTlNUX0lOVDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgdmFs
ID0gMDsKKyAgICAgICAgICAgIGlmICghdG9rZW4tPmlWYWx1ZSgmdmFsKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAvLyBEbyBub3QgbWFyayB0aGUgdG9rZW4gYXMgaW52YWxpZC4K
KyAgICAgICAgICAgICAgICAvLyBKdXN0IGVtaXQgdGhlIGRpYWdub3N0aWMgYW5kIHJlc2V0IHZh
bHVlIHRvIDAuCisgICAgICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAg
ICAgICAgdG9rZW4tPnRleHQuYXNzaWduKCIwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YWxpZFRva2VuID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg
ICAgICAgICBjYXNlIFRva2VuOjpDT05TVF9GTE9BVDoKKyAgICAgICAgICB7CisgICAgICAgICAg
ICBmbG9hdCB2YWwgPSAwOworICAgICAgICAgICAgaWYgKCF0b2tlbi0+ZlZhbHVlKCZ2YWwpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSB0b2tlbiBh
cyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIC8vIEp1c3QgZW1pdCB0aGUgZGlhZ25vc3RpYyBh
bmQgcmVzZXQgdmFsdWUgdG8gMC4wLgorICAgICAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpGTE9BVF9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
KyAgICAgICAgICAgICAgICB0b2tlbi0+dGV4dC5hc3NpZ24oIjAuMCIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFsaWRUb2tlbiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICB9CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgorICAgICAgICAgICAg
bUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRva2VuOjpQ
UF9PVEhFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBw
cAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi41ZmUzNWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaApAQCAtMCww
ICsxLDQ5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
UFJFUFJPQ0VTU09SX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNT
T1JfSF8KKworI2luY2x1ZGUgInBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFz
cyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVjdGl2ZUhhbmRsZXI7CitzdHJ1Y3QgUHJlcHJvY2Vz
c29ySW1wbDsKK3N0cnVjdCBUb2tlbjsKKworY2xhc3MgUHJlcHJvY2Vzc29yCit7CisgIHB1Ymxp
YzoKKyAgICBQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJlY3RpdmVI
YW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKKyAgICB+UHJlcHJvY2Vzc29yKCk7CisKKyAgICAv
LyBjb3VudDogc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0cmluZyBh
bmQgbGVuZ3RoIGFycmF5cy4KKyAgICAvLyBzdHJpbmc6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBw
b2ludGVycyB0byBzdHJpbmdzLgorICAgIC8vIGxlbmd0aDogc3BlY2lmaWVzIGFuIGFycmF5IG9m
IHN0cmluZyBsZW5ndGhzLgorICAgIC8vIElmIGxlbmd0aCBpcyBOVUxMLCBlYWNoIHN0cmluZyBp
cyBhc3N1bWVkIHRvIGJlIG51bGwgdGVybWluYXRlZC4KKyAgICAvLyBJZiBsZW5ndGggaXMgYSB2
YWx1ZSBvdGhlciB0aGFuIE5VTEwsIGl0IHBvaW50cyB0byBhbiBhcnJheSBjb250YWluaW5nCisg
ICAgLy8gYSBzdHJpbmcgbGVuZ3RoIGZvciBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1l
bnRzIG9mIHN0cmluZy4KKyAgICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGxlbmd0aCBhcnJheSBt
YXkgY29udGFpbiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5n
IG9yIGEgdmFsdWUgbGVzcyB0aGFuIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nCisgICAg
Ly8gaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworICAgIC8vIEFkZHMgYSBw
cmUtZGVmaW5lZCBtYWNyby4KKyAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5h
bWUsIGludCB2YWx1ZSk7CisKKyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZh
dGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CisKKyAg
ICBQcmVwcm9jZXNzb3JJbXBsKiBtSW1wbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2Vu
ZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvU291
cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvU291cmNlTG9jYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42OTgyNjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oCkBAIC0wLDAgKzEsMzgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0Vf
TE9DQVRJT05fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElP
Tl9IXworCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7CisgICAg
U291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNlTG9jYXRp
b24oaW50IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29sIGVxdWFs
cyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7CisgICAgfQor
CisgICAgaW50IGZpbGU7CisgICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMp
Cit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhz
KQoreworICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1lc3BhY2Ug
cHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
N2Y1MGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKQEAgLTAsMCArMSw4MyBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworI2luY2x1
ZGUgIm51bWVyaWNfbGV4LmgiCisKK25hbWVzcGFjZSBwcAoreworCit2b2lkIFRva2VuOjpyZXNl
dCgpCit7CisgICAgdHlwZSA9IDA7CisgICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9uID0gU291
cmNlTG9jYXRpb24oKTsKKyAgICB0ZXh0LmNsZWFyKCk7Cit9CisKK2Jvb2wgVG9rZW46OmVxdWFs
cyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICh0eXBlID09IG90aGVy
LnR5cGUpICYmCisgICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKKyAgICAgICAg
ICAgKGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgorICAgICAgICAgICAodGV4dCA9PSBv
dGhlci50ZXh0KTsKK30KKwordm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0
KQoreworICAgIGlmIChzdGFydCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsK
KyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOworfQorCit2b2lk
IFRva2VuOjpzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAoc3BhY2Up
CisgICAgICAgIGZsYWdzIHw9IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAgICAgICAg
ZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRFeHBhbnNp
b25EaXNhYmxlZChib29sIGRpc2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAgICAgIGZs
YWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5F
WFBBTlNJT05fRElTQUJMRUQ7Cit9CisKK2Jvb2wgVG9rZW46OmlWYWx1ZShpbnQqIHZhbHVlKSBj
b25zdAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0lOVCk7CisgICAgcmV0dXJuIG51bWVy
aWNfbGV4X2ludCh0ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wgVG9rZW46OnVWYWx1ZSh1bnNpZ25l
ZCBpbnQqIHZhbHVlKSBjb25zdAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0lOVCk7Cisg
ICAgcmV0dXJuIG51bWVyaWNfbGV4X2ludCh0ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wgVG9rZW46
OmZWYWx1ZShmbG9hdCogdmFsdWUpIGNvbnN0Cit7CisgICAgYXNzZXJ0KHR5cGUgPT0gQ09OU1Rf
RkxPQVQpOworICAgIHJldHVybiBudW1lcmljX2xleF9mbG9hdCh0ZXh0LCB2YWx1ZSk7Cit9CisK
K3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4m
IHRva2VuKQoreworICAgIGlmICh0b2tlbi5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICAgICAgb3V0
IDw8ICIgIjsKKworICAgIG91dCA8PCB0b2tlbi50ZXh0OworICAgIHJldHVybiBvdXQ7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjhiNTUzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgKQEAgLTAsMCArMSwx
MDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tF
Tl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KKworI2luY2x1ZGUg
PG9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiU291cmNlTG9jYXRpb24u
aCIKKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBUb2tlbgoreworICAgIGVudW0gVHlwZQor
ICAgIHsKKyAgICAgICAgTEFTVCA9IDAsICAvLyBFT0YuCisKKyAgICAgICAgSURFTlRJRklFUiA9
IDI1OCwKKworICAgICAgICBDT05TVF9JTlQsCisgICAgICAgIENPTlNUX0ZMT0FULAorCisgICAg
ICAgIE9QX0lOQywKKyAgICAgICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAgICAgICBP
UF9SSUdIVCwKKyAgICAgICAgT1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBPUF9FUSwK
KyAgICAgICAgT1BfTkUsCisgICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAorICAgICAg
ICBPUF9PUiwKKyAgICAgICAgT1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FTU0lHTiwK
KyAgICAgICAgT1BfTVVMX0FTU0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAgICAgICAg
T1BfTU9EX0FTU0lHTiwKKyAgICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9QX1JJR0hU
X0FTU0lHTiwKKyAgICAgICAgT1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FTU0lHTiwK
KyAgICAgICAgT1BfT1JfQVNTSUdOLAorCisgICAgICAgIC8vIFByZXByb2Nlc3NpbmcgdG9rZW4g
dHlwZXMuCisgICAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSB1c2VkIGJ5IHRoZSBwcmVwcm9jZXNz
b3IgaW50ZXJuYWxseS4KKyAgICAgICAgLy8gUHJlcHJvY2Vzc29yIGNsaWVudHMgbXVzdCBub3Qg
ZGVwZW5kIG9yIGNoZWNrIGZvciB0aGVtLgorICAgICAgICBQUF9IQVNILAorICAgICAgICBQUF9O
VU1CRVIsCisgICAgICAgIFBQX09USEVSCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisgICAgewor
ICAgICAgICBBVF9TVEFSVF9PRl9MSU5FICAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5H
X1NQQUNFICA9IDEgPDwgMSwKKyAgICAgICAgRVhQQU5TSU9OX0RJU0FCTEVEID0gMSA8PCAyCisg
ICAgfTsKKworICAgIFRva2VuKCkgOiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAgIHZvaWQg
cmVzZXQoKTsKKyAgICBib29sIGVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OworCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCisg
ICAgLy8gSXQgZGlzcmVnYXJkcyBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRT
dGFydE9mTGluZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9
IDA7IH0KKyAgICB2b2lkIHNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAgICBib29s
IGhhc0xlYWRpbmdTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQ
QUNFKSAhPSAwOyB9CisgICAgdm9pZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7CisK
KyAgICBib29sIGV4cGFuc2lvbkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgRVhQ
QU5TSU9OX0RJU0FCTEVEKSAhPSAwOyB9CisgICAgdm9pZCBzZXRFeHBhbnNpb25EaXNhYmxlZChi
b29sIGRpc2FibGUpOworCisgICAgLy8gQ29udmVydHMgdGV4dCBpbnRvIG51bWVyaWMgdmFsdWUg
Zm9yIENPTlNUX0lOVCBhbmQgQ09OU1RfRkxPQVQgdG9rZW4uCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiB0aGUgcGFyc2VkIHZhbHVlIGNhbm5vdCBmaXQgaW50byBhbiBpbnQgb3IgZmxvYXQuCisg
ICAgYm9vbCBpVmFsdWUoaW50KiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCB1VmFsdWUodW5zaWdu
ZWQgaW50KiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCBmVmFsdWUoZmxvYXQqIHZhbHVlKSBjb25z
dDsKKworICAgIGludCB0eXBlOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBTb3VyY2VM
b2NhdGlvbiBsb2NhdGlvbjsKKyAgICBzdGQ6OnN0cmluZyB0ZXh0OworfTsKKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAg
IHJldHVybiBsaHMuZXF1YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVh
bHMocmhzKTsKK30KKworZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKKworfSAgLy8gbmFtZXBzYWNlIHBwCisjZW5k
aWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTc2NDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5jcHAKQEAgLTAsMCArMSwyMzU2IEBACisjbGluZSAxNiAiLi9U
b2tlbml6ZXIubCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIu
L1Rva2VuaXplci5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisv
KiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhf
U0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVY
X01JTk9SX1ZFUlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNp
ZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlm
CisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVy
LXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8K
KworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5U
X0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+
LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NU
RENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNh
eXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQu
aCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlw
ZXMuIAorICovCisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJ
TUlUX01BQ1JPUyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGlu
dDhfdCBmbGV4X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVm
IGludDE2X3QgZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90Owor
dHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50
MzJfdDsKK3R5cGVkZWYgdWludDY0X3QgZmxleF91aW50NjRfdDsKKyNlbHNlCit0eXBlZGVmIHNp
Z25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90Owor
dHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWlu
dDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwordHlwZWRl
ZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5OSAqLworCisvKiBM
aW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElO
VDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisj
ZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVm
IElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0x
KQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAg
ICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAg
ICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElO
VDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhf
TUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5k
ZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisj
ZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAg
ICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KKworI2lm
ZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIg
aXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkvKiAhIF9fY3BsdXNw
bHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICov
CisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbmRp
ZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCisK
KyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAorI2Vsc2UKKyNkZWZp
bmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCisj
ZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3Nz
aWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBmb3IgdXNlIGFzIGFu
IGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAorICogd2Ugd2Fu
dCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRo
ZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25l
ZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KKyNp
Zm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FO
TkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyogRm9yIGNvbnZlbmll
bmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKKyAgIGFyZSBt
YWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5eWluIHl5Zy0+eXlp
bl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXll
eHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5lIHl5dGV4dCB5eWct
Pnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19y
CisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQg
dG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVm
dHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJ
Ti4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgorCisvKiBUcmFu
c2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxh
dGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNU
QVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlf
U1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJU
CisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUu
ICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0
ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBu
ZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5eXNjYW5u
ZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUgb2YgZGVm
YXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisjZGVmaW5lIFlZX0JV
Rl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVu
b3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4K
KyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNp
emVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFU
RQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXpl
X3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAK
KyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRD
SCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCisgICAgCisvKiBSZXR1cm4gYWxs
IGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBz
dHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBl
ZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFj
cm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcp
O1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JF
X09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFj
cm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQo
YykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZ
WV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKwor
CWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9wb3M7
CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBvZiBp
bnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICogY2hh
cmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2Yg
Y2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNo
YXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdl
ICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5k
IGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkg
KiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVy
IHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBp
ZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0Yygp
CisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBp
bnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3Rp
dmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUg
bmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisK
KyAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5
eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBXaGV0aGVy
IHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBl
bmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9z
dGF0dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZFUl9OT1JN
QUwgMQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUg
dGV4dCB0byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BF
TkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJv
bSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEg
YnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJs
ZSBiYWNraW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2Ug
Y2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhh
dCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5
aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5E
SU5HIDIKKworCX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KKwor
LyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2Ug
aW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBt
b3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Ag
b2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICgg
eXlnLT55eV9idWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+
eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1
c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwg
b3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisj
ZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWct
Pnl5X2J1ZmZlcl9zdGFja190b3BdCisKK3ZvaWQgcHByZXN0YXJ0IChGSUxFICppbnB1dF9maWxl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVG
RkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NU
QVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nh
bm5lciApOwordm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZG
RVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcG9wX2J1
ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBwcF9sb2Fk
X2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBwcF9pbml0
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5U
X0JVRkZFUiAseXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgKGNo
YXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVS
X1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpi
eXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqcHBhbGxv
YyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnBwcmVhbGxvYyAodm9p
ZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwZnJlZSAodm9pZCAq
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0
ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwK
Kwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICBwcGVuc3VyZV9i
dWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
ICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNj
YW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFj
dGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9s
KSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICBwcGVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gICAgXAorICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wg
PSBhdF9ib2w7IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUg
cHB3cmFwKG4pIDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIFlZX0NIQVI7CisKK3R5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZpbmUgeXl0
ZXh0X3B0ciB5eXRleHRfcgorCitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5
X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2Fu
bmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKK3N0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFz
IGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBz
ZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwl5eWct
Pnl5dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5
X2JwKTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsg
XAorCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyAzNwor
I2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBp
biB0aGlzIHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0
cnVjdCB5eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9p
bnQzMl90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2Vw
dFs4NF0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM4LCAg
IDM2LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAorICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMz
LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAorICAgICAgICA5LCAgIDMzLCAg
IDMzLCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAorICAgICAgICA0
LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAgIDIzLAor
ICAgICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDEx
LCAgIDExLAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAg
IDE1LCAgICA4LCAgIDMxLAorICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAgICA2
LCAgIDExLCAgIDEwLCAgIDExLCAgICAxLAorICAgICAgIDEwLCAgIDExLCAgICAwLCAgIDEwLCAg
ICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgIDEwLCAgICAw
CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAg
ICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAg
NSwgICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKKyAgICAgICAgOSwg
ICAxMCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKKyAg
ICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwgICAgOSwg
ICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAy
MSwgICAyMiwgICAyMSwKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKKyAgICAgICAgOSwgICAgMSwgICAgOSwg
ICAyNSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAgIDIyLCAg
IDIxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAg
ICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDI0LAorICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKwor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KKyAgICB7ICAgMCwKKyAg
ICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMQor
ICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0gPQorICAg
IHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAgMTUwLCAg
MTU5LCAgMTQ1LCAgMTI4LAorICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTExLCAgIDIx
LCAgIDI1LCAgIDMwLCAgIDI5LCAgIDM2LAorICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAgIDQ1LCAg
ICAwLCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAorICAgICAgIDY1LCAgIDczLCAgMTU5
LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAorICAgICAgMTU5LCAg
MTU5LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgzLAorICAg
ICAgIDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAgICAwLCAg
MTU5LAorICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4LCAgICAw
LCAgMTEwLCAgICAwLAorICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAgMTU5LCAg
MTU5LCAgMTAxLCAgIDk3LCAgMTEyLAorICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQwLCAgIDI4
LCAgMTQ1LCAgMTUwLCAgMTUyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9kZWZbODldID0KKyAgICB7ICAgMCwKKyAgICAgICA4MywgICAgMSwgICA4NCwgICA4NCwg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICAyMCwg
ICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywKKyAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4MywgICAy
MCwgICAyMCwgICA0NywKKyAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4NSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4NiwgICA4
MywgICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKKyAgICAgICA0NywgICA1MCwgICA4Mywg
ICA1MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKKyAgICAgICA4MywgICA4
MywgICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICA2
LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAor
ICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIz
LCAgIDI0LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI5LCAg
IDMwLCAgIDI5LCAgIDMwLAorICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYwLCAgIDMx
LCAgIDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAorICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAgIDQyLCAg
IDQzLCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ5
LCAgIDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAorICAgICAgIDUzLCAg
IDUzLCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUwLAorICAg
ICAgIDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY2LCAg
IDUwLAorICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1LCAgIDcx
LCAgIDcxLCAgIDcxLAorICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAgIDUwLCAg
IDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgODMsICAgODMsICAgNTAsICAgNTAsICAg
NTAsICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNjcs
ICAgNjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCisgICAgICAgNzgsICAg
NzgsICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgsCisgICAg
ICAgMzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAg
ODIsCisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQsICAgMzMs
ICAgNjQsICAgNjQsCisgICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAgNzUsICAg
NzUsICAgODMsICAgIDUsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90
IHl5X2Noa1sxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAgNCwKKyAg
ICAgICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwgICAxOSwg
ICAxNiwKKyAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAx
OSwgICAyMCwgICA1NCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwgICA0OCwg
ICAyMCwgICAyMCwgICAyMCwgICAyMCwKKyAgICAgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAy
NCwgICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKKyAgICAgICA0OSwgICA0OSwgICAyNywg
ICA0MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKKyAgICAgICA1MiwgICA0
MywgICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywKKyAgICAg
ICA1MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1MCwgICA1
MCwKKworICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUxLCAgIDc5
LCAgIDc5LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDc4LCAg
IDc4LCAgIDc4LCAgIDIzLCAgIDY3LAorICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgwLCAgIDY5
LCAgIDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAorICAgICAgIDEyLCAgIDcyLCAgIDcyLCAg
IDcyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDg0LCAgIDg0
LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAorICAgICAg
IDg3LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgzLCAgIDgz
LAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisg
ICAgfSA7CisKKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0
J2xsIGNhdGNoCisgKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8K
KyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXlt
b3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAw
CisjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVT
IHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJl
cHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJh
cnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVE
IFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisjaW5jbHVkZSAiVG9rZW5pemVyLmgi
CisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisj
aWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQg
eXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZ
UEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVu
dXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNk
ZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAg
ICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9
IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBm
YWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0g
d2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0
cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4
IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChz
Y2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAg
ICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChz
Y2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5v
ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5n
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKwor
I2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5
ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFMIDAKKyNk
ZWZpbmUgQ09NTUVOVCAxCisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpD
b250ZXh0KgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nh
bm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4g
Tm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKwor
ICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0
aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7
CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0
YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9m
IHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBT
dGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICB5eV9zaXpl
X3QgeXlfbl9jaGFyczsKKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19i
dWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAg
IGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAg
IHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKKworICAgIGludCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4
X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOwor
ICAgIGludCB5eV9tb3JlX2xlbjsKKworICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKKworICAgIFlZ
TFRZUEUgKiB5eWxsb2NfcjsKKworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKwor
c3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAg
LyogVGhpcyBtdXN0IGdvIGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNs
dWRlZAorICAgICAqIGZyb20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLworICAgICMgICAg
ZGVmaW5lIHl5bHZhbCB5eWctPnl5bHZhbF9yCisgICAgCisgICAgIyAgICBkZWZpbmUgeXlsbG9j
IHl5Zy0+eXlsbG9jX3IKKyAgICAKK2ludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7
CisKK2ludCBwcGxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNj
YW5fdCogc2Nhbm5lcik7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRo
ZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVu
aWVuY2UuICovCisKK2ludCBwcGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
aW50IHBwZ2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9kZWJ1
ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWV9FWFRSQV9UWVBF
IHBwZ2V0X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9leHRyYSAo
WVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxF
ICpwcGdldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfaW4gIChGSUxF
ICogaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfb3V0ICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK3l5X3NpemVfdCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworY2hhciAqcHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2lu
dCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2xpbmVu
byAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHBw
Z2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZ
UEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgICAgWVlMVFlQ
RSAqcHBnZXRfbGxvYyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisgICAgICAgIHZvaWQg
cHBzZXRfbGxvYyAoWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7
CisgICAgCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4g
YnkgdXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlf
U0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitleHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRp
YyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2Fu
X3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBp
bnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwor
I2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0
aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQg
aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91
bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JF
QURfQlVGX1NJWkUKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyog
Q29weSB3aGF0ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1
dC4gKi8KKyNpZm5kZWYgRUNITworLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBz
aW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0
ZSgpLgorICovCisjZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQg
KQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJy
ZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1
bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50
ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQl5eV9zaXplX3QgbjsgXAor
CQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWlu
ICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBc
CisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAo
IGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1
dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJ
ZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1
ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJ
aWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1
dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJ
CWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKK1wKKworI2Vu
ZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRv
IHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycg
YWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBp
bGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZu
ZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNl
bmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3Rh
Y2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RB
UlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwor
I2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2Zh
dGFsX2Vycm9yKCBtc2cgLCB5eXNjYW5uZXIpCisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJp
YWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNs
YXJhdGlvbiBvZiBnZW5lcmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgor
ICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUg
WVlfREVDTF9JU19PVVJTIDEKKworZXh0ZXJuIGludCBwcGxleCBcCisgICAgICAgICAgICAgICAo
WVlTVFlQRSAqIHl5bHZhbF9wYXJhbSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5
eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAg
IChZWVNUWVBFICogeXlsdmFsX3BhcmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisKKy8qIENvZGUgZXhlY3V0ZWQg
YXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCisg
KiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VTRVJfQUNUSU9OCisjZGVmaW5l
IFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9m
IGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7
CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisv
KiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAq
LworWVlfREVDTAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsK
KwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9hY3Q7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisgICAgLyogTGluZSBjb21tZW50ICovCisKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07CisK
KyAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CisKKwlpZiAoICF5eWctPnl5X2luaXQgKQorCQl7
CisJCXl5Zy0+eXlfaW5pdCA9IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9J
TklUOworI2VuZGlmCisKKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFy
dCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlp
biA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlp
ZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXBwX2NyZWF0ZV9i
dWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwkJfQorCisJCXBwX2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CisKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50
aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1
Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1
ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAg
PSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNo
OgorCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9f
VUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQkJ
eworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwor
CQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJCX0KKwkJCXdoaWxl
ICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50
X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9j
dXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCQl5
eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAh
PSA4MyApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0
aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9f
QkVGT1JFX0FDVElPTjsKKworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0
byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJl
Z2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAq
LworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9SVUxFX1NFVFVQ
CisKKwlZWV9CUkVBSworLyogQmxvY2sgY29tbWVudCAqLworLyogTGluZSBicmVha3MgYXJlIGp1
c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKy8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2Vk
IGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4o
Q09NTUVOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJF
QUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDU6CisvKiBydWxl
IDUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreyArK3l5bGluZW5vOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWV4dHJhLT5sZWFkaW5nU3Bh
Y2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCVlZX0JSRUFLCitjYXNlIDc6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUg
Zm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4
dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFT
SCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwlZWV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQorCVlZX0JSRUFLCisvKiBBbnl0aGluZyB0aGF0IHN0
YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworLyog
UnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLworY2FzZSAx
MToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOworfQorCVlZX0JSRUFLCitjYXNlIDEy
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0xFOworfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9HRTsKK30KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfRVE7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05F
OworfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZ
WV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJ
R047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRf
QVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9S
SUdIVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0FORF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX1hPUl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQ
Cit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRl
eHRbMF07Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUg
Y2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87CisgICAg
eXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0
WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKwlZWV9CUkVBSworY2Fz
ZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKK3sK
KyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgor
ICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6
SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24q
IHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjpt
YXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJ
bmRleE1heCkKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhl
cmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQu
CisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0g
MDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9Cisg
ICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87
CisgICAgeXlsdmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisg
ICAgeworICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGlj
czo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQor
CVlZX0JSRUFLCitjYXNlIDM3OgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJ
Y2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQg
bm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5k
byB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcg
KQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2Uu
ICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNl
cgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJ
CSAqIHBwbGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lz
dGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAg
SGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMg
dGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0
aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWct
Pnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsK
KwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIg
dG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2lu
Y2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBh
c3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0
aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3Qg
dGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+
eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0
YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRl
eHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdl
J3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdl
IGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFu
ZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFs
CisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJ
CSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICog
d2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90
cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAg
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRl
ICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWct
Pnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJ
Z290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJ
CQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkK
KwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOworCisJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVy
ICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgor
CQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRl
eHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21l
IHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkg
KiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwg
aXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1
cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJ
CQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYg
KCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxF
OworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVf
U0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9h
bW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9w
cmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8g
eXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19i
dWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlf
bl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRl
KCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2Jw
ID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAor
CQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiAp
OworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcg
b25lIHRva2VuICovCit9IC8qIGVuZCBvZiBwcGxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZm
ZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSBy
ZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9B
Q1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlv
bgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQg
eXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNo
YXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3Rl
ciBjaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90
b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQor
CQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0t
ZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1
ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXln
LT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVk
IGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBm
aW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQor
CisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBF
T0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9M
QVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisK
KwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJl
cl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAx
OworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0Kysp
ID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUg
cmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZv
cmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90IG51bV90
b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1i
ZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyog
Tm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0
IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9T
VEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9
CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICgg
Yi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGIt
Pnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5
X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1
Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNs
dWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikg
Yi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJ
ZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55
eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9F
UlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIg
KTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNl
dF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
c2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90
b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVG
X1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWct
Pnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9j
aGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkK
KwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0KHl5
aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0Jf
QUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQor
CQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5
eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRo
ZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2Mo
KHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5
c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYg
KQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25l
eHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3Zl
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5
eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07
CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0
IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAg
IHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwly
ZWdpc3RlciBjaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFy
dDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2Nw
IDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5
X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5
eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3Vy
cmVudF9zdGF0ZSA+PSA4NCApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlf
Y107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVu
dF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNp
dGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRl
ID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOwor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsg
LyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJl
Z2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hB
UiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJ
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7
CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5
eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5
eV9jdXJyZW50X3N0YXRlID09IDgzKTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3Vy
cmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVz
CisgICAgc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAg
IHN0YXRpYyBpbnQgaW5wdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWlu
dCBjOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICgg
Knl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5
X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgor
CQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQn
cyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRo
ZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2Fz
IHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UK
KwkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJ
CXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQlj
YXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlf
Z19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0
b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUg
dG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJ
CSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQg
dGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgor
CQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3Rh
cnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2Ug
RU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIg
KSApCisJCQkJCQlyZXR1cm4gMDsKKworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisjaWZkZWYgX19jcGx1c3BsdXMKKwkJ
CQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKKyNlbHNlCisJCQkJCXJldHVybiBpbnB1dCh5
eXNjYW5uZXIpOworI2VuZGlmCisJCQkJCX0KKworCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9T
Q0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJ
CQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5
eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLworCSp5eWctPnl5X2Nf
YnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9
ICorK3l5Zy0+eXlfY19idWZfcDsKKworCXJldHVybiBjOworfQorI2VuZGlmCS8qIGlmbmRlZiBZ
WV9OT19JTlBVVCAqLworCisvKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlu
cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAbm90ZSBUaGlzIGZ1bmN0
aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCisg
Ki8KKyAgICB2b2lkIHBwcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKworCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAgICBwcGVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9CisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nh
bm5lcik7CisJfQorCisJcHBfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmls
ZSAseXlzY2FubmVyKTsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKwor
LyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1
ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVS
X1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCS8qIFRPRE8u
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQor
CSAqIHdpdGgKKwkgKgkJcHBwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXBwcHVzaF9idWZmZXJf
c3RhdGUobmV3X2J1ZmZlcik7CisgICAgICovCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCisJCXJldHVy
bjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZv
cm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWct
Pnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1
ZmZlcjsKKwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdlIGRvbid0
IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9G
IChwcHdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICog
aXMgbG9va2VkIGF0IGlzIGFmdGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJ
ICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9z
dGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+
eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWlu
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFs
aXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3Ry
ZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4g
V2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRl
LgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmls
ZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBi
OworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKwor
CWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFy
YWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRv
IHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYg
PSAoY2hhciAqKSBwcGFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJaWYg
KCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZmZXIgPSAx
OworCisJcHBfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCisJcmV0dXJuIGI7Cit9
CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVk
IHdpdGggcHBfY3JlYXRlX2J1ZmZlcigpCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqLworICAgIHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRF
ICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBiICkKKwkJcmV0dXJuOwor
CisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxk
IHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NU
QVRFKSAwOworCisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJcHBmcmVlKCh2b2lkICop
IGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisKKwlwcGZyZWUoKHZvaWQgKikgYiAseXlzY2Fu
bmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisg
KiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhl
IHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0Yu
CisgKi8KKyAgICBzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAg
YiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vycm5vID0g
ZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCisJcHBfZmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7CisKKwliLT55eV9pbnB1
dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJZiBiIGlz
IHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5Xwor
ICAgICAqIGNhbGxlZCBmcm9tIHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVm
ZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGlu
ZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7
CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9
IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAgICAKKwll
cnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMu
IE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIg
dGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVG
RkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2
b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOwor
CisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBm
aXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUu
ICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+
eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVm
WzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXBwX2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250
byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcworICogIHRoZSBjdXJyZW50IHN0YXRl
LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5
LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCisgKiAgQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAo
WVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlm
IChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKworCXBwZW5zdXJlX2J1ZmZlcl9zdGFj
ayh5eXNjYW5uZXIpOworCisJLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hf
dG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNo
IG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9w
b3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyogT25seSBwdXNoIGlmIHRvcCBleGlz
dHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQor
CQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8K
KwlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiA9IDE7Cit9CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Ag
b2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0
aGUgbmV3IHRvcC4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
Lwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYg
KCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJcHBfZGVsZXRlX2J1ZmZlcihZWV9D
VVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBO
VUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQlwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9l
b2YgPSAxOworCX0KK30KKworLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBl
eGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KKyAqLwor
c3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNr
KSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5j
ZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0
YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJl
YWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51bV90b19hbGxvYyA9IDE7
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFs
bG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXlnLT55eV9idWZmZXJf
c3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikp
OworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7CisK
KwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2gu
ICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJ
bnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOworCQl5
eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFsbG9j
CisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJ
CWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkvKiB6
ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sg
KyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJfQorfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2Fu
IGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgorICogQHBh
cmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGlu
IGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAq
IGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZG
RVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0g
IT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhl
IEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEg
YiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5f
YnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0
YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFz
ZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwli
LT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAw
OworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5
eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAor
ICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwt
dGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9i
amVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFp
biBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQu
CisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlz
dHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCisJcmV0dXJuIHBwX3NjYW5fYnl0ZXMo
eXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1
dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8g
cHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBh
cmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gbGVuIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3Nj
YW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xl
biAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpi
dWY7CisJeXlfc2l6ZV90IG4sIGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZm
ZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9IF95eWJ5dGVz
X2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgcHBhbGxvYyhuICx5eXNjYW5uZXIgKTsKKwlpZiAo
ICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBf
c2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSAp
CisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXli
eXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0gcHBfc2Nhbl9idWZm
ZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJh
ZCBidWZmZXIgaW4gcHBfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cg
ZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3
ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7
Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAy
CisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNn
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAi
JXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmlu
ZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5
bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0
cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2Fy
ZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJ
CXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9w
ID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5
eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5n
ID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3Nv
ciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisv
KiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgcHBnZXRf
ZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQor
CisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWxpbmVubzsKK30KKworLyoqIEdl
dCB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIAorICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIHJldHVybiB5eWNvbHVtbjsKK30KKworLyoqIEdldCB0aGUg
aW5wdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK0ZJTEUgKnBwZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4g
eXlpbjsKK30KKworLyoqIEdldCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3Ro
IG9mIHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KK3l5X3NpemVfdCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICByZXR1cm4geXlsZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgor
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKworY2hhciAqcHBn
ZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5dGV4dDsKK30K
KworLyoqIFNldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3Vj
aGVkIGJ5IHRoZSBzY2FubmVyLgorICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBi
ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVz
ZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlleHRyYSA9IHVzZXJf
ZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFy
YW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCit2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKyAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQg
YnVmZmVyIGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAg
ICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZm
ZXIiICwgeXlzY2FubmVyKTsgCisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKK30K
KworLyoqIFNldCB0aGUgY3VycmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2Nv
bHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAg
IC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisg
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJy
b3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAor
ICAgIAorICAgIHl5Y29sdW1uID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBz
dHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVy
LgorICogQHBhcmFtIGluX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCisgKi8K
K3ZvaWQgcHBzZXRfaW4gKEZJTEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICB5eWluID0gaW5fc3RyIDsKK30KKwordm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3RyIDsKK30KKwor
aW50IHBwZ2V0X2RlYnVnICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlf
ZmxleF9kZWJ1ZzsKK30KKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCisvKiBB
Y2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNUWVBFICogcHBn
ZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bHZhbDsKK30K
Kwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZWUxUWVBFICpw
cGdldF9sbG9jICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsbG9jOwor
fQorICAgIAordm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworfQorICAgIAor
LyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVz
ZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJl
ZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFz
dCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xh
cmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50IHBwbGV4X2lu
aXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95eV9nbG9iYWxz
ID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9m
KCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9
PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAg
IH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5p
dF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0
cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisgICAgcmV0dXJu
IHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiBwcGxleF9pbml0
X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xs
b3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3Qg
YXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBh
IHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCisgKiBp
cyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRz
IG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJz
dCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCisgKiB0aGUgeXlleHRy
YSBmaWVsZC4KKyAqLworCitpbnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3Vz
ZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAgc3RydWN0IHl5
Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQs
ICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAg
ICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCQorICAgICpw
dHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0
c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5V
TEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
ICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5
eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNl
dCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisgICAgCisg
ICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKKyAgICAK
KyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKK3N0
YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIC8q
IEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2Fu
bmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgp
LCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55eV9idWZmZXJf
c3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisgICAgeXlnLT55
eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAw
OworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7CisKKyAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0
aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBEZWZpbmVkIGlu
IG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47CisgICAgeXlv
dXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAgIHl5b3V0ID0g
KEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBl
cnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHBwbGV4X2luaXQo
KQorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKiBwcGxleF9kZXN0cm95IGlzIGZvciBi
b3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCBwcGxleF9k
ZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0aGUgYnVmZmVy
IHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9DVVJSRU5UX0JV
RkZFUil7CisJCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciAp
OworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQlwcHBvcF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJ
cHBmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFj
ay4gKi8KKyAgICAgICAgcHBmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwor
ICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBn
bG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0
aGUgbmV4dCB0aW1lCisgICAgICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdp
bGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisgICAgLyog
RGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICBwcGZyZWUg
KCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJl
dHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisj
aWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEs
IHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdp
c3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07
Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhf
c3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lz
dGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsK
K30KKyNlbmRpZgorCit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOworfQorCit2b2lk
ICpwcHJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2Nv
bW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmlj
IHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJz
LiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQg
QysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUg
dG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91
Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYygg
KGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3ZvaWQgcHBmcmVlICh2b2lkICogcHRyICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgcHByZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKKworbmFtZXNwYWNlIHBwIHsKKworLy8gVE9ETyhhbG9rcCk6IE1heGltdW0gdG9r
ZW4gbGVuZ3RoIHNob3VsZCBpZGVhbGx5IGJlIHNwZWNpZmllZCBieQorLy8gdGhlIHByZXByb2Nl
c3NvciBjbGllbnQsIGkuZS4sIHRoZSBjb21waWxlci4KK2NvbnN0IHNpemVfdCBUb2tlbml6ZXI6
OmtNYXhUb2tlbkxlbmd0aCA9IDI1NjsKKworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFnbm9zdGlj
cyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworICAgIGRl
c3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwgY29u
c3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBpZiAo
Y291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDApICYmIChzdHJpbmcg
PT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQs
IHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwordm9pZCBU
b2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8gV2UgdXNlIGNvbHVt
biBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5vLgorICAg
IHBwc2V0X2NvbHVtbihmaWxlLG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0TGlu
ZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICBwcHNldF9saW5lbm8obGluZSxtSGFuZGxlKTsKK30K
Kwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4tPnR5cGUg
PSBwcGxleCgmdG9rZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKKyAgICBpZiAo
dG9rZW4tPnRleHQuc2l6ZSgpID4ga01heFRva2VuTGVuZ3RoKQorICAgIHsKKyAgICAgICAgbUNv
bnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dGV4dCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0aCk7Cisg
ICAgfQorCisgICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZM
aW5lKG1Db250ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4t
PnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQu
bGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKwor
Ym9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVM
TCkgJiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBwcHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRs
ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUp
OworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9U
b2tlbml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYw
MzEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgKQEAgLTAsMCArMSw1OCBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5o
IgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNl
IHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMg
TGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAg
IC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBz
aG91bGQgdHJhY2sKKyAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExv
YyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlz
IGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6
OkxvY2F0aW9uIHNjYW5Mb2M7CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAg
IGJvb2wgbGluZVN0YXJ0OworICAgIH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGtN
YXhUb2tlbkxlbmd0aDsKKworICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3Mp
OworICAgIH5Ub2tlbml6ZXIoKTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisgICAgdm9pZCBzZXRG
aWxlTnVtYmVyKGludCBmaWxlKTsKKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOwor
CisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAg
UFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuaXplcik7CisgICAgYm9vbCBpbml0U2Nh
bm5lcigpOworICAgIHZvaWQgZGVzdHJveVNjYW5uZXIoKTsKKworICAgIHZvaWQqIG1IYW5kbGU7
ICAvLyBTY2FubmVyIGhhbmRsZS4KKyAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8gU2Nhbm5lciBl
eHRyYS4KK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfVE9LRU5JWkVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OWFlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXpl
ci5sCkBAIC0wLDAgKzEsMzQwIEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxl
IGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3Iu
CitCYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFt
bWFyOgoraHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFz
cHgKKworSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJh
dGVfcGFyc2VyLnNoLgorKi8KKworJXRvcHsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUg
aXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKK30K
KworJXsKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFz
ZS5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJp
Z2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KKyNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgorI2VuZGlm
CisKK3R5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0
aW9uIFlZTFRZUEU7CisKKy8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRy
YWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisj
ZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxp
bmVTdGFydCA9IHRydWU7ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VS
X0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5
ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1
dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAg
ICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVu
Z3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5M
b2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAg
ICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxp
bmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0
LCBtYXhTaXplKSBcCisgICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNp
emUpOworCislfQorCislb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUK
KyVvcHRpb24gcmVlbnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKKyVvcHRpb24g
cHJlZml4PSJwcCIKKyVvcHRpb24gZXh0cmEtdHlwZT0icHA6OlRva2VuaXplcjo6Q29udGV4dCoi
CisleCBDT01NRU5UCisKK05FV0xJTkUgICAgIFxufFxyfFxyXG4KK0lERU5USUZJRVIgIFtfYS16
QS1aXVtfYS16QS1aMC05XSoKK1BVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9d
CisKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTldKgorT0NUQUxfQ09OU1RBTlQgICAg
ICAgIDBbMC03XSoKK0hFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworCitE
SUdJVCAgICAgICAgICAgICAgICBbMC05XQorRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/
e0RJR0lUfSsKK0ZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJ
R0lUfSsiLiIpCisKKyUlCisKKyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKyIvLyJbXlxyXG5dKgor
CisgICAgLyogQmxvY2sgY29tbWVudCAqLworICAgIC8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNv
dW50ZWQgLSBub3QgcmV0dXJuZWQuICovCisgICAgLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQg
YnkgYSBzaW5nbGUgc3BhY2UuICovIAorIi8qIiB7IEJFR0lOKENPTU1FTlQpOyB9Cis8Q09NTUVO
VD5bXipcclxuXSsKKzxDT01NRU5UPiIqIgorPENPTU1FTlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVu
bzsgfQorPENPTU1FTlQ+IiovIiB7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsK
KyAgICBCRUdJTihJTklUSUFMKTsKK30KKworIyB7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0
IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+
YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBw
OjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKK3tJREVOVElGSUVS
fSB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46OklERU5USUZJRVI7Cit9CisKK3tERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RB
TlR9fHtIRVhBREVDSU1BTF9DT05TVEFOVH0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisKKyh7RElHSVR9
K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8p
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisKKyAgICAvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRo
IGEge0RJR0lUfSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworICAgIC8qIFJ1bGUg
dG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KKyh7RElHSVR9K1tf
YS16QS1aMC05Ll0qKXwoIi4ie0RJR0lUfStbX2EtekEtWjAtOS5dKikgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7
Cit9CisKKyIrKyIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9JTkM7Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0xFRlQ7Cit9CisiPj4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7
Cit9CisiPj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTkU7Cit9CisiJiYiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8
fCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9PUjsKK30KKyIrPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09IiB7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX1NVQl9BU1NJR047Cit9CisiKj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgewor
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9ESVZfQVNTSUdOOworfQorIiU9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0xFRlRfQVNTSUdOOworfQorIj4+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9Cisi
Jj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKyJePSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQor
Inw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX09SX0FTU0lHTjsKK30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwt
PmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRc
dlxmXSsgICB7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsK
KyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVy
biAnXG4nOworfQorCisuIHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAg
IHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOworfQorCis8Kj48PEVPRj4+IHsKKyAgICAvLyBZ
WV9VU0VSX0FDVElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNl
dCB0aGUgbG9jYXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlu
cHV0ID0gJnl5ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2Mg
PSAmeXlleHRyYS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5w
dXQtPmNvdW50KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkK
KyAgICB7CisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVt
cHR5IHN0cmluZ3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAg
IHNjYW5Mb2MtPnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAg
ICAgeXlmaWxlbm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9j
LT5maWxlID0geXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXls
dmFsLT5jbGVhcigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAg
ICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lO
X0NPTU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJj
ZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCislJQorCitu
YW1lc3BhY2UgcHAgeworCisvLyBUT0RPKGFsb2twKTogTWF4aW11bSB0b2tlbiBsZW5ndGggc2hv
dWxkIGlkZWFsbHkgYmUgc3BlY2lmaWVkIGJ5CisvLyB0aGUgcHJlcHJvY2Vzc29yIGNsaWVudCwg
aS5lLiwgdGhlIGNvbXBpbGVyLgorY29uc3Qgc2l6ZV90IFRva2VuaXplcjo6a01heFRva2VuTGVu
Z3RoID0gMjU2OworCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3Rp
Y3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIo
KTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25z
dCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJu
IGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5n
dGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0
RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBm
aWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCisgICAgeXlzZXRfY29sdW1u
KGZpbGUsIG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQg
bGluZSkKK3sKKyAgICB5eXNldF9saW5lbm8obGluZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9r
ZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRv
a2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKKyAgICBpZiAodG9rZW4tPnRl
eHQuc2l6ZSgpID4ga01heFRva2VuTGVuZ3RoKQorICAgIHsKKyAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7
CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0aCk7CisgICAgfQorCisg
ICAgdG9rZW4tPmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250
ZXh0LmxpbmVTdGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0g
J1xuJzsKKworICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1Nw
YWNlKTsKKyAgICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tl
bml6ZXI6OmluaXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgeXls
ZXhfaW5pdF9leHRyYSgmbUNvbnRleHQsICZtSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgeXlyZXN0YXJ0KDAsIG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09IE5V
TEwpCisgICAgICAgIHJldHVybjsKKworICAgIHl5bGV4X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAg
bUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTE1OGQyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCisr
KyAvZGV2L251bGwKQEAgLTEsNzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29w
eXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlv
bigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRp
b24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNl
LAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBO
VklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJ
ZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwg
aW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0K
LUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxv
d2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlv
dSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5
cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29m
dHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQot
TlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNl
IGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUg
dGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGlj
ZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNj
bGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2Fy
ZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29z
IG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHBy
ZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMK
LWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVk
aW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5m
cmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hp
Y2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUg
aXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQ
Uk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcg
V0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1O
T04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBD
T01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJ
RElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhF
TVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
Ci1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNU
SU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZU
V0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNU
LAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVS
V0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vCi0vLyBhdG9tLmMK
LS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2Jh
bHMuaCIKLQotI3VuZGVmIG1hbGxvYwotI3VuZGVmIHJlYWxsb2MKLSN1bmRlZiBmcmVlCi0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0gICAgaW50IHZhbDsKLSAgICBjb25zdCBjaGFy
ICpzdHI7Ci19IHRva2Vuc1tdID0gewotICAgIHsgQ1BQX0FORF9PUCwgICAgICAgICAiJiYiIH0s
Ci0gICAgeyBDUFBfQU5EX0FTU0lHTiwgICAgICImPSIgfSwKLSAgICB7IENQUF9TVUJfQVNTSUdO
LCAgICAgIi09IiB9LAotICAgIHsgQ1BQX01PRF9BU1NJR04sICAgICAiJT0iIH0sCi0gICAgeyBD
UFBfQUREX0FTU0lHTiwgICAgICIrPSIgfSwKLSAgICB7IENQUF9ESVZfQVNTSUdOLCAgICAgIi89
IiB9LAotICAgIHsgQ1BQX01VTF9BU1NJR04sICAgICAiKj0iIH0sCi0gICAgeyBDUFBfUklHSFRf
QlJBQ0tFVCwgICI6PiIgfSwKLSAgICB7IENQUF9FUV9PUCwgICAgICAgICAgIj09IiB9LAotICAg
IHsgQ1BQX1hPUl9PUCwgICAgICAgICAiXl4iIH0sIAotICAgIHsgQ1BQX1hPUl9BU1NJR04sICAg
ICAiXj0iIH0sIAotICAgIHsgQ1BQX0ZMT0FUQ09OU1RBTlQsICAiPGZsb2F0LWNvbnN0PiIgfSwK
LSAgICB7IENQUF9HRV9PUCwgICAgICAgICAgIj49IiB9LAotICAgIHsgQ1BQX1JJR0hUX09QLCAg
ICAgICAiPj4iIH0sCi0gICAgeyBDUFBfUklHSFRfQVNTSUdOLCAgICI+Pj0iIH0sIAotICAgIHsg
Q1BQX0lERU5USUZJRVIsICAgICAiPGlkZW50PiIgfSwKLSAgICB7IENQUF9JTlRDT05TVEFOVCwg
ICAgIjxpbnQtY29uc3Q+IiB9LAotICAgIHsgQ1BQX0xFX09QLCAgICAgICAgICAiPD0iIH0sCi0g
ICAgeyBDUFBfTEVGVF9PUCwgICAgICAgICI8PCIgfSwKLSAgICB7IENQUF9MRUZUX0FTU0lHTiwg
ICAgIjw8PSIgfSwKLSAgICB7IENQUF9MRUZUX0JSQUNLRVQsICAgIjw6IiB9LAotICAgIHsgQ1BQ
X0xFRlRfQlJBQ0UsICAgICAiPCUiIH0sIAotICAgIHsgQ1BQX0RFQ19PUCwgICAgICAgICAiLS0i
IH0sCi0gICAgeyBDUFBfUklHSFRfQlJBQ0UsICAgICIlPiIgfSwgCi0gICAgeyBDUFBfTkVfT1As
ICAgICAgICAgICIhPSIgfSwKLSAgICB7IENQUF9PUl9PUCwgICAgICAgICAgInx8IiB9LAotICAg
IHsgQ1BQX09SX0FTU0lHTiwgICAgICAifD0iIH0sIAotICAgIHsgQ1BQX0lOQ19PUCwgICAgICAg
ICAiKysiIH0sCi0gICAgeyBDUFBfU1RSQ09OU1RBTlQsICAgICI8c3RyaW5nLWNvbnN0PiIgfSwK
LSAgICB7IENQUF9UWVBFSURFTlRJRklFUiwgIjx0eXBlLWlkZW50PiIgfSwKLX07Ci0KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQotI2RlZmluZSBJTklUX1NUUklOR19UQUJMRV9TSVpFIDE2Mzg0Ci0KLXR5cGVkZWYgc3RydWN0
IFN0cmluZ1RhYmxlX1JlYyB7Ci0gICAgY2hhciAqc3RyaW5nczsKLSAgICBpbnQgbmV4dEZyZWU7
Ci0gICAgaW50IHNpemU7Ci19IFN0cmluZ1RhYmxlOwotCi0vKgotICogSW5pdFN0cmluZ1RhYmxl
KCkgLSBJbml0aWFsaXplIHRoZSBzdHJpbmcgdGFibGUuCi0gKgotICovCi0KLXN0YXRpYyBpbnQg
SW5pdFN0cmluZ1RhYmxlKFN0cmluZ1RhYmxlICpzdGFibGUpCi17Ci0gICAgc3RhYmxlLT5zdHJp
bmdzID0gKGNoYXIgKikgbWFsbG9jKElOSVRfU1RSSU5HX1RBQkxFX1NJWkUpOwotICAgIGlmICgh
c3RhYmxlLT5zdHJpbmdzKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBaZXJvLXRoIG9mZnNl
dCBtZWFucyAiZW1wdHkiIHNvIGRvbid0IHVzZSBpdC4KLSAgICBzdGFibGUtPm5leHRGcmVlID0g
MTsKLSAgICBzdGFibGUtPnNpemUgPSBJTklUX1NUUklOR19UQUJMRV9TSVpFOwotICAgIHJldHVy
biAxOwotfSAvLyBJbml0U3RyaW5nVGFibGUKLQotLyoKLSAqIEZyZWVTdHJpbmdUYWJsZSgpIC0g
RnJlZSB0aGUgc3RyaW5nIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBGcmVlU3RyaW5n
VGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKLXsKLSAgICBpZiAoc3RhYmxlLT5zdHJpbmdzKQot
ICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7Ci0gICAgc3RhYmxlLT5zdHJpbmdzID0gTlVM
TDsKLSAgICBzdGFibGUtPm5leHRGcmVlID0gMDsKLSAgICBzdGFibGUtPnNpemUgPSAwOwotfSAv
LyBGcmVlU3RyaW5nVGFibGUKLQotLyoKLSAqIEhhc2hTdHJpbmcoKSAtIEhhc2ggYSBzdHJpbmcg
d2l0aCB0aGUgYmFzZSBoYXNoIGZ1bmN0aW9uLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEhhc2hT
dHJpbmcoY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0KLSAgICB3aGlsZSAo
KnMpIHsKLSAgICAgICAgaHZhbCA9IChodmFsKjEzNTA3ICsgKnMqMTk3KSBeIChodmFsID4+IDIp
OwotICAgICAgICBzKys7Ci0gICAgfQotICAgIHJldHVybiBodmFsICYgMHg3ZmZmZmZmZjsKLX0g
Ly8gSGFzaFN0cmluZwotCi0vKgotICogSGFzaFN0cmluZzIoKSAtIEhhc2ggYSBzdHJpbmcgd2l0
aCB0aGUgaW5jcmltZW50aW5nIGhhc2ggZnVuY3Rpb24uCi0gKgotICovCi0KLXN0YXRpYyBpbnQg
SGFzaFN0cmluZzIoY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0KLSAgICB3
aGlsZSAoKnMpIHsKLSAgICAgICAgaHZhbCA9IChodmFsKjcyOSArICpzKjM3KSBeIChodmFsID4+
IDEpOwotICAgICAgICBzKys7Ci0gICAgfQotICAgIHJldHVybiBodmFsOwotfSAvLyBIYXNoU3Ry
aW5nMgotCi0vKgotICogQWRkU3RyaW5nKCkgLSBBZGQgYSBzdHJpbmcgdG8gYSBzdHJpbmcgdGFi
bGUuICBSZXR1cm4gaXQncyBvZmZzZXQuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgQWRkU3RyaW5n
KFN0cmluZ1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGxlbiwgbG9j
OwotICAgIGNoYXIgKnN0cjsKLQotICAgIGxlbiA9IChpbnQpIHN0cmxlbihzKTsKLSAgICB3aGls
ZSAoc3RhYmxlLT5uZXh0RnJlZSArIGxlbiArIDEgPj0gc3RhYmxlLT5zaXplKSB7Ci0gICAgICAg
IGFzc2VydChzdGFibGUtPnNpemUgPCAxMDAwMDAwKTsKLSAgICAgICAgc3RyID0gKGNoYXIgKikg
bWFsbG9jKHN0YWJsZS0+c2l6ZSoyKTsKLSAgICAgICAgbWVtY3B5KHN0ciwgc3RhYmxlLT5zdHJp
bmdzLCBzdGFibGUtPnNpemUpOwotICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7Ci0gICAg
ICAgIHN0YWJsZS0+c3RyaW5ncyA9IHN0cjsKLSAgICAgICAgc3RhYmxlLT5zaXplID0gc3RhYmxl
LT5zaXplKjI7Ci0gICAgfQotICAgIGxvYyA9IHN0YWJsZS0+bmV4dEZyZWU7Ci0gICAgc3RyY3B5
KCZzdGFibGUtPnN0cmluZ3NbbG9jXSwgcyk7Ci0gICAgc3RhYmxlLT5uZXh0RnJlZSArPSBsZW4g
KyAxOwotICAgIHJldHVybiBsb2M7Ci19IC8vIEFkZFN0cmluZwotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLyBIYXNoIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNkZWZpbmUg
SU5JVF9IQVNIX1RBQkxFX1NJWkUgMjA0NwotI2RlZmluZSBIQVNIX1RBQkxFX01BWF9DT0xMSVNJ
T05TIDMKLQotdHlwZWRlZiBzdHJ1Y3QgSGFzaEVudHJ5X1JlYyB7Ci0gICAgaW50IGluZGV4OyAg
ICAgIC8vIFN0cmluZyB0YWJsZSBvZmZzZXQgb2Ygc3RyaW5nIHJlcHJlc2VudGF0aW9uCi0gICAg
aW50IHZhbHVlOyAgICAgIC8vIEF0b20gKHN5bWJvbCkgdmFsdWUKLX0gSGFzaEVudHJ5OwotCi10
eXBlZGVmIHN0cnVjdCBIYXNoVGFibGVfUmVjIHsKLSAgICBIYXNoRW50cnkgKmVudHJ5OwotICAg
IGludCBzaXplOwotICAgIGludCBlbnRyaWVzOwotICAgIGludCBjb3VudHNbSEFTSF9UQUJMRV9N
QVhfQ09MTElTSU9OUyArIDFdOwotfSBIYXNoVGFibGU7Ci0KLS8qCi0gKiBJbml0SGFzaFRhYmxl
KCkgLSBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMgaW50IElu
aXRIYXNoVGFibGUoSGFzaFRhYmxlICpodGFibGUsIGludCBmc2l6ZSkKLXsKLSAgICBpbnQgaWk7
Ci0KLSAgICBodGFibGUtPmVudHJ5ID0gKEhhc2hFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKEhhc2hF
bnRyeSkqZnNpemUpOwotICAgIGlmICghaHRhYmxlLT5lbnRyeSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaHRhYmxlLT5zaXplID0gZnNpemU7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDwgZnNpemU7
IGlpKyspIHsKLSAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0uaW5kZXggPSAwOwotICAgICAgICBo
dGFibGUtPmVudHJ5W2lpXS52YWx1ZSA9IDA7Ci0gICAgfQotICAgIGh0YWJsZS0+ZW50cmllcyA9
IDA7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlp
KyspCi0gICAgICAgIGh0YWJsZS0+Y291bnRzW2lpXSA9IDA7Ci0gICAgcmV0dXJuIDE7Ci19IC8v
IEluaXRIYXNoVGFibGUKLQotLyoKLSAqIEZyZWVIYXNoVGFibGUoKSAtIEZyZWUgdGhlIGhhc2gg
dGFibGUuCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIEZyZWVIYXNoVGFibGUoSGFzaFRhYmxlICpo
dGFibGUpCi17Ci0gICAgaWYgKGh0YWJsZS0+ZW50cnkpCi0gICAgICAgIGZyZWUoaHRhYmxlLT5l
bnRyeSk7Ci0gICAgaHRhYmxlLT5lbnRyeSA9IE5VTEw7Ci0gICAgaHRhYmxlLT5zaXplID0gMDsK
LSAgICBodGFibGUtPmVudHJpZXMgPSAwOwotfSAvLyBGcmVlSGFzaFRhYmxlCi0KLS8qCi0gKiBF
bXB0eSgpIC0gU2VlIGlmIGEgaGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4KLSAqCi0gKi8KLQot
c3RhdGljIGludCBFbXB0eShIYXNoVGFibGUgKmh0YWJsZSwgaW50IGhhc2hsb2MpCi17Ci0gICAg
YXNzZXJ0KGhhc2hsb2MgPj0gMCAmJiBoYXNobG9jIDwgaHRhYmxlLT5zaXplKTsKLSAgICBpZiAo
aHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAxOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0gLy8gRW1wdHkKLQotLyoK
LSAqIE1hdGNoKCkgLSBTZWUgaWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlzIG1hdGNoZXMgYSBzdHJp
bmcuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgTWF0Y2goSGFzaFRhYmxlICpodGFibGUsIFN0cmlu
Z1RhYmxlICpzdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBoYXNobG9jKQotewotICAgIGludCBz
dHJsb2M7Ci0KLSAgICBzdHJsb2MgPSBodGFibGUtPmVudHJ5W2hhc2hsb2NdLmluZGV4OwotICAg
IGlmICghc3RyY21wKHMsICZzdGFibGUtPnN0cmluZ3Nbc3RybG9jXSkpIHsKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfSAvLyBNYXRj
aAotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBBdG9tIHRhYmxlOiAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLSNkZWZpbmUgSU5JVF9BVE9NX1RBQkxFX1NJWkUgMTAyNAotCi0KLXN0cnVj
dCBBdG9tVGFibGVfUmVjIHsKLSAgICBTdHJpbmdUYWJsZSBzdGFibGU7IC8vIFN0cmluZyB0YWJs
ZS4KLSAgICBIYXNoVGFibGUgaHRhYmxlOyAgIC8vIEhhc2hlcyBzdHJpbmcgdG8gYXRvbSBudW1i
ZXIgYW5kIHRva2VuIHZhbHVlLiAgTXVsdGlwbGUgc3RyaW5ncyBjYW4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgdGhlIHNhbWUgdG9rZW4gdmFsdWUgYnV0IGVhY2ggdW5pcXVlIHN0
cmluZyBpcyBhIHVuaXF1ZSBhdG9tLgotICAgIGludCAqYW1hcDsgICAgICAgICAgLy8gTWFwcyBh
dG9tIHZhbHVlIHRvIG9mZnNldCBpbiBzdHJpbmcgdGFibGUuICBBdG9tcyBhbGwgbWFwIHRvIHVu
aXF1ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5ncyBleGNlcHQgZm9yIHNvbWUg
dW5kZWZpbmVkIHZhbHVlcyBpbiB0aGUgbG93ZXIsIGZpeGVkIHBhcnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9mIHRoZSBhdG9tIHRhYmxlIHRoYXQgbWFwIHRvICI8dW5kZWZpbmVkPiIu
ICBUaGUgbG93ZXN0IDI1NiBhdG9tcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVz
cG9uZCB0byBzaW5nbGUgY2hhcmFjdGVyIEFTQ0lJIHZhbHVlcyBleGNlcHQgZm9yIGFscGhhbnVt
ZXJpYwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBhbmQgJ18nLCB3aGlj
aCBjYW4gYmUgb3RoZXIgdG9rZW5zLiAgTmV4dCBjb21lIHRoZQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbGFuZ3VhZ2UgdG9rZW5zIHdpdGggdGhlaXIgYXRvbSB2YWx1ZXMgZXF1YWwgdG8g
dGhlIHRva2VuIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBjb21lIHBy
ZWRlZmluZWQgYXRvbXMsIGZvbGxvd2VkIGJ5IHVzZXIgc3BlY2lmaWVkIGlkZW50aWZpZXJzLgot
ICAgIGludCAqYXJldjsgICAgICAgICAgLy8gUmV2ZXJzZWQgYXRvbSBmb3Igc3ltYm9sIHRhYmxl
IHVzZS4KLSAgICBpbnQgbmV4dEZyZWU7Ci0gICAgaW50IHNpemU7Ci19OwotCi1zdGF0aWMgQXRv
bVRhYmxlIGxhdGFibGUgPSB7IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHswfSB9LCBO
VUxMLCBOVUxMLCAwLCAwIH07Ci1BdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwotCi1zdGF0
aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50
IGF0b20pOwotCi0vKgotICogR3Jvd0F0b21UYWJsZSgpIC0gR3JvdyB0aGUgYXRvbSB0YWJsZSB0
byBhdCBsZWFzdCAic2l6ZSIgaWYgaXQncyBzbWFsbGVyLgotICoKLSAqLwotCi1zdGF0aWMgaW50
IEdyb3dBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBzaXplKQotewotICAgIGludCAq
bmV3bWFwLCAqbmV3cmV2OwotCi0gICAgaWYgKGF0YWJsZS0+c2l6ZSA8IHNpemUpIHsKLSAgICAg
ICAgaWYgKGF0YWJsZS0+YW1hcCkgewotICAgICAgICAgICAgbmV3bWFwID0gcmVhbGxvYyhhdGFi
bGUtPmFtYXAsIHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgbmV3cmV2ID0gcmVhbGxv
YyhhdGFibGUtPmFyZXYsIHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbmV3bWFwID0gbWFsbG9jKHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAg
bmV3cmV2ID0gbWFsbG9jKHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgYXRhYmxlLT5z
aXplID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW5ld21hcCB8fCAhbmV3cmV2KSB7Ci0g
ICAgICAgICAgICAvKiBmYWlsZWQgdG8gZ3JvdyAtLSBlcnJvciAqLwotICAgICAgICAgICAgaWYg
KG5ld21hcCkKLSAgICAgICAgICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdtYXA7Ci0gICAgICAg
ICAgICBpZiAobmV3cmV2KQotICAgICAgICAgICAgICAgIGF0YWJsZS0+YXJldiA9IG5ld3JldjsK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoJm5ld21h
cFthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7
Ci0gICAgICAgIG1lbXNldCgmbmV3cmV2W2F0YWJsZS0+c2l6ZV0sIDAsIChzaXplIC0gYXRhYmxl
LT5zaXplKSAqIHNpemVvZihpbnQpKTsKLSAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3bWFwOwot
ICAgICAgICBhdGFibGUtPmFyZXYgPSBuZXdyZXY7Ci0gICAgICAgIGF0YWJsZS0+c2l6ZSA9IHNp
emU7Ci0gICAgfQotICAgIHJldHVybiAwOwotfSAvLyBHcm93QXRvbVRhYmxlCi0KLS8qCi0gKiBs
UmV2ZXJzZSgpIC0gUmV2ZXJzZSB0aGUgYm90dG9tIDIwIGJpdHMgb2YgYSAzMiBiaXQgaW50Lgot
ICoKLSAqLwotCi1zdGF0aWMgaW50IGxSZXZlcnNlKGludCBmdmFsKQotewotICAgIHVuc2lnbmVk
IGludCBpbiA9IGZ2YWw7Ci0gICAgaW50IHJlc3VsdCA9IDAsIGNudCA9IDA7Ci0KLSAgICB3aGls
ZShpbikgewotICAgICAgICByZXN1bHQgPDw9IDE7Ci0gICAgICAgIHJlc3VsdCB8PSBpbiYxOwot
ICAgICAgICBpbiA+Pj0gMTsKLSAgICAgICAgY250Kys7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3Qg
dXNlIGFsbCAzMSBiaXRzLiAgT25lIG1pbGxpb24gYXRvbXMgaXMgcGxlbnR5IGFuZCBzb21ldGlt
ZXMgdGhlCi0gICAgLy8gdXBwZXIgYml0cyBhcmUgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLgotCi0g
ICAgaWYgKGNudCA8IDIwKQotICAgICAgICByZXN1bHQgPDw9IDIwIC0gY250OwotICAgIHJldHVy
biByZXN1bHQ7Ci19IC8vIGxSZXZlcnNlCi0KLS8qCi0gKiBBbGxvY2F0ZUF0b20oKSAtIEFsbG9j
YXRlIGEgbmV3IGF0b20uICBBc3NvY2lhdGVkIHdpdGggdGhlICJ1bmRlZmluZWQiIHZhbHVlIG9m
IC0xLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEFsbG9jYXRlQXRvbShBdG9tVGFibGUgKmF0YWJs
ZSkKLXsKLSAgICBpZiAoYXRhYmxlLT5uZXh0RnJlZSA+PSBhdGFibGUtPnNpemUpCi0gICAgICAg
IEdyb3dBdG9tVGFibGUoYXRhYmxlLCBhdGFibGUtPm5leHRGcmVlKjIpOwotICAgIGF0YWJsZS0+
YW1hcFthdGFibGUtPm5leHRGcmVlXSA9IC0xOwotICAgIGF0YWJsZS0+YXJldlthdGFibGUtPm5l
eHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOwotICAgIGF0YWJsZS0+bmV4dEZy
ZWUrKzsKLSAgICByZXR1cm4gYXRhYmxlLT5uZXh0RnJlZSAtIDE7Ci19IC8vIEFsbG9jYXRlQXRv
bQotCi0vKgotICogU2V0QXRvbVZhbHVlKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tIGFzc29jaWF0
ZWQgd2l0aCAiaGFzaGluZGV4Ii4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgU2V0QXRvbVZhbHVl
KEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbW51bWJlciwgaW50IGhhc2hpbmRleCkKLXsKLSAg
ICBhdGFibGUtPmFtYXBbYXRvbW51bWJlcl0gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5k
ZXhdLmluZGV4OwotICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWUgPSBh
dG9tbnVtYmVyOwotfSAvLyBTZXRBdG9tVmFsdWUKLQotLyoKLSAqIEZpbmRIYXNoTG9jKCkgLSBG
aW5kIHRoZSBoYXNoIGxvY2F0aW9uIGZvciB0aGlzIHN0cmluZy4gIFJldHVybiAtMSBpdCBoYXNo
IHRhYmxlIGlzIGZ1bGwuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgRmluZEhhc2hMb2MoQXRvbVRh
YmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGhhc2hsb2MsIGhhc2hkZWx0
YSwgY291bnQ7Ci0gICAgaW50IEZvdW5kRW1wdHlTbG90ID0gMDsKLSAgICBpbnQgY29sbGlzaW9u
W0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsKLQotICAgIGhhc2hsb2MgPSBIYXNoU3Ry
aW5nKHMpICUgYXRhYmxlLT5odGFibGUuc2l6ZTsKLSAgICBpZiAoIUVtcHR5KCZhdGFibGUtPmh0
YWJsZSwgaGFzaGxvYykpIHsKLSAgICAgICAgaWYgKE1hdGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0
YWJsZS0+c3RhYmxlLCBzLCBoYXNobG9jKSkKLSAgICAgICAgICAgIHJldHVybiBoYXNobG9jOwot
ICAgICAgICBjb2xsaXNpb25bMF0gPSBoYXNobG9jOwotICAgICAgICBoYXNoZGVsdGEgPSBIYXNo
U3RyaW5nMihzKTsKLSAgICAgICAgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAoY291bnQgPCBI
QVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKSB7Ci0gICAgICAgICAgICBoYXNobG9jID0gKChoYXNo
bG9jICsgaGFzaGRlbHRhKSAmIDB4N2ZmZmZmZmYpICUgYXRhYmxlLT5odGFibGUuc2l6ZTsKLSAg
ICAgICAgICAgIGlmICghRW1wdHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkgewotICAgICAg
ICAgICAgICAgIGlmIChNYXRjaCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJsZSwgcywg
aGFzaGxvYykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hsb2M7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBGb3VuZEVt
cHR5U2xvdCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgY29sbGlzaW9uW2NvdW50XSA9IGhhc2hsb2M7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIUZvdW5kRW1wdHlTbG90KSB7Ci0gICAgICAgICAg
ICBpZiAoY3BwLT5vcHRpb25zLkR1bXBBdG9tVGFibGUpIHsKLSAgICAgICAgICAgICAgICBpbnQg
aWk7Ci0gICAgICAgICAgICAgICAgY2hhciBzdHJbMjAwXTsKLSAgICAgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVk
IGNvbGxpc2lvbnMuIE11c3QgaW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAotICAgICAg
ICAgICAgICAgICAgICAgICBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKTsKLSAgICAgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKLQotICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9
JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKLSAgICAgICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2coc3RyKTsKLSAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFT
SF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIENvbGxpZGVzIG9uIHRyeSAlZCBhdCBoYXNoIGVu
dHJ5ICUwNHggd2l0aCBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgKyAx
LCBjb2xsaXNpb25baWldLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRhYmxlLT5odGFibGUuZW50
cnlbY29sbGlzaW9uW2lpXV0udmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKHN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXRhYmxlLT5odGFi
bGUuY291bnRzW2NvdW50XSsrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBoYXNobG9j
OwotfSAvLyBGaW5kSGFzaExvYwotCi0vKgotICogSW5jcmVhc2VIYXNoVGFibGVTaXplKCkKLSAq
Ci0gKi8KLQotc3RhdGljIGludCBJbmNyZWFzZUhhc2hUYWJsZVNpemUoQXRvbVRhYmxlICphdGFi
bGUpCi17Ci0gICAgaW50IGlpLCBzdHJsb2MsIG9sZGhhc2hsb2MsIHZhbHVlLCBzaXplOwotICAg
IEF0b21UYWJsZSBvbGR0YWJsZTsKLSAgICBjaGFyICpzOwotCi0gICAgLy8gU2F2ZSB0aGUgb2xk
IGF0b20gdGFibGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmU6Ci0KLSAgICBvbGR0YWJsZSA9ICphdGFi
bGU7Ci0gICAgc2l6ZSA9IG9sZHRhYmxlLmh0YWJsZS5zaXplKjIgKyAxOwotICAgIGlmICghSW5p
dEF0b21UYWJsZShhdGFibGUsIHNpemUpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEFk
ZCBhbGwgdGhlIGV4aXN0aW5nIHZhbHVlcyB0byB0aGUgbmV3IGF0b20gdGFibGUgcHJlc2Vydmlu
ZyB0aGVpciBhdG9tIHZhbHVlczoKLQotICAgIGZvciAoaWkgPSBhdGFibGUtPm5leHRGcmVlOyBp
aSA8IG9sZHRhYmxlLm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHN0cmxvYyA9IG9sZHRhYmxl
LmFtYXBbaWldOwotICAgICAgICBzID0gJm9sZHRhYmxlLnN0YWJsZS5zdHJpbmdzW3N0cmxvY107
Ci0gICAgICAgIG9sZGhhc2hsb2MgPSBGaW5kSGFzaExvYygmb2xkdGFibGUsIHMpOwotICAgICAg
ICBhc3NlcnQob2xkaGFzaGxvYyA+PSAwKTsKLSAgICAgICAgdmFsdWUgPSBvbGR0YWJsZS5odGFi
bGUuZW50cnlbb2xkaGFzaGxvY10udmFsdWU7Ci0gICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUs
IHMsIHZhbHVlKTsKLSAgICB9Ci0gICAgRnJlZUF0b21UYWJsZSgmb2xkdGFibGUpOwotICAgIHJl
dHVybiAxOwotfSAvLyBJbmNyZWFzZUhhc2hUYWJsZVNpemUKLQotLyoKLSAqIExvb2tVcEFkZFN0
cmluZ0hhc2goKSAtIExvb2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElmIGl0J3Mg
bm90IHRoZXJlLCBhZGQgaXQgYW5kCi0gKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRvbSB2YWx1
ZSBpbiB0aGUgaGFzaCB0YWJsZSB0byAwLiAgUmV0dXJuIHRoZSBoYXNoIHRhYmxlIGluZGV4Lgot
ICovCi0KLXN0YXRpYyBpbnQgTG9va1VwQWRkU3RyaW5nSGFzaChBdG9tVGFibGUgKmF0YWJsZSwg
Y29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaGFzaGxvYywgc3RybG9jOwotCi0gICAgd2hpbGUo
MSkgewotICAgICAgICBoYXNobG9jID0gRmluZEhhc2hMb2MoYXRhYmxlLCBzKTsKLSAgICAgICAg
aWYgKGhhc2hsb2MgPj0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBJbmNyZWFzZUhh
c2hUYWJsZVNpemUoYXRhYmxlKTsKLSAgICB9Ci0KLSAgICBpZiAoRW1wdHkoJmF0YWJsZS0+aHRh
YmxlLCBoYXNobG9jKSkgewotICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKys7Ci0gICAg
ICAgIHN0cmxvYyA9IEFkZFN0cmluZygmYXRhYmxlLT5zdGFibGUsIHMpOwotICAgICAgICBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtoYXNobG9jXS5pbmRleCA9IHN0cmxvYzsKLSAgICAgICAgYXRhYmxl
LT5odGFibGUuZW50cnlbaGFzaGxvY10udmFsdWUgPSAwOwotICAgIH0KLSAgICByZXR1cm4gaGFz
aGxvYzsKLX0gLy8gTG9va1VwQWRkU3RyaW5nSGFzaAotCi0vKgotICogTG9va1VwQWRkU3RyaW5n
KCkgLSBMb29rdXAgYSBzdHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVy
ZSwgYWRkIGl0IGFuZAotICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhl
IGhhc2ggdGFibGUgdG8gdGhlIG5leHQgYXRvbSBudW1iZXIuCi0gKiAgICAgICAgUmV0dXJuIHRo
ZSBhdG9tIHZhbHVlIG9mIHN0cmluZy4KLSAqLwotCi1pbnQgTG9va1VwQWRkU3RyaW5nKEF0b21U
YWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQotewotICAgIGludCBoYXNoaW5kZXgsIGF0b207
Ci0KLSAgICBoYXNoaW5kZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7Ci0gICAg
YXRvbSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWU7Ci0gICAgaWYgKGF0
b20gPT0gMCkgewotICAgICAgICBhdG9tID0gQWxsb2NhdGVBdG9tKGF0YWJsZSk7Ci0gICAgICAg
IFNldEF0b21WYWx1ZShhdGFibGUsIGF0b20sIGhhc2hpbmRleCk7Ci0gICAgfQotICAgIHJldHVy
biBhdG9tOwotfSAvLyBMb29rVXBBZGRTdHJpbmcKLQotLyoKLSAqIEdldEF0b21TdHJpbmcoKQot
ICoKLSAqLwotCi1jb25zdCAgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwg
aW50IGF0b20pCi17Ci0gICAgaW50IHNvZmZzZXQ7Ci0KLSAgICBpZiAoYXRvbSA+IDAgJiYgYXRv
bSA8IGF0YWJsZS0+bmV4dEZyZWUpIHsKLSAgICAgICAgc29mZnNldCA9IGF0YWJsZS0+YW1hcFth
dG9tXTsKLSAgICAgICAgaWYgKHNvZmZzZXQgPiAwICYmIHNvZmZzZXQgPCBhdGFibGUtPnN0YWJs
ZS5uZXh0RnJlZSkgewotICAgICAgICAgICAgcmV0dXJuICZhdGFibGUtPnN0YWJsZS5zdHJpbmdz
W3NvZmZzZXRdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICI8aW50ZXJu
YWwgZXJyb3I6IGJhZCBzb2Zmc2V0PiI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoYXRvbSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gIjxudWxsIGF0b20+IjsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdG9tID09IEVPRikgewotICAgICAgICAg
ICAgICAgIHJldHVybiAiPEVPRj4iOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIjxpbnZhbGlkIGF0b20+IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0gLy8gR2V0QXRvbVN0cmluZwotCi0vKgotICogR2V0UmV2ZXJzZWRBdG9tKCkKLSAq
Ci0gKi8KLQotaW50IEdldFJldmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20p
Ci17Ci0gICAgaWYgKGF0b20gPiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7Ci0gICAg
ICAgIHJldHVybiBhdGFibGUtPmFyZXZbYXRvbV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfSAvLyBHZXRSZXZlcnNlZEF0b20KLQotLyoKLSAqIEFkZEF0b20oKSAt
IEFkZCBhIHN0cmluZyB0byB0aGUgYXRvbSwgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBp
c24ndCBhbHJlYWR5IHRoZXJlLgotICogICAgICAgICBSZXR1cm4gaXQncyBhdG9tIGluZGV4Lgot
ICovCi0KLWludCBBZGRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQotewot
ICAgIGludCBhdG9tOwotCi0gICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHMpOwot
ICAgIHJldHVybiBhdG9tOwotfSAvLyBBZGRBdG9tCi0KLS8qCi0gKiBBZGRBdG9tRml4ZWQoKSAt
IEFkZCBhbiBhdG9tIHRvIHRoZSBoYXNoIGFuZCBzdHJpbmcgdGFibGVzIGlmIGl0IGlzbid0IGFs
cmVhZHkgdGhlcmUuCi0gKiAgICAgICAgIEFzc2lnbiBpdCB0aGUgYXRvbSB2YWx1ZSBvZiAiYXRv
bSIuCi0gKi8KLQotc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNv
bnN0IGNoYXIgKnMsIGludCBhdG9tKQotewotICAgIGludCBoYXNoaW5kZXgsIGxzaXplOwotCi0g
ICAgaGFzaGluZGV4ID0gTG9va1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOwotICAgIGlmIChh
dGFibGUtPm5leHRGcmVlID49IGF0YWJsZS0+c2l6ZSB8fCBhdG9tID49IGF0YWJsZS0+c2l6ZSkg
ewotICAgICAgICBsc2l6ZSA9IGF0YWJsZS0+c2l6ZSoyOwotICAgICAgICBpZiAobHNpemUgPD0g
YXRvbSkKLSAgICAgICAgICAgIGxzaXplID0gYXRvbSArIDE7Ci0gICAgICAgIEdyb3dBdG9tVGFi
bGUoYXRhYmxlLCBsc2l6ZSk7Ci0gICAgfQotICAgIGF0YWJsZS0+YW1hcFthdG9tXSA9IGF0YWJs
ZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0uaW5kZXg7Ci0gICAgYXRhYmxlLT5odGFibGUuZW50
cnlbaGFzaGluZGV4XS52YWx1ZSA9IGF0b207Ci0gICAgLy9pZiAoYXRvbSA+PSBhdGFibGUtPm5l
eHRGcmVlKQotICAgIC8vICAgIGF0YWJsZS0+bmV4dEZyZWUgPSBhdG9tICsgMTsKLSAgICB3aGls
ZSAoYXRvbSA+PSBhdGFibGUtPm5leHRGcmVlKSB7Ci0gICAgICAgIGF0YWJsZS0+YXJldlthdGFi
bGUtPm5leHRGcmVlXSA9IGxSZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOwotICAgICAgICBhdGFi
bGUtPm5leHRGcmVlKys7Ci0gICAgfQotICAgIHJldHVybiBhdG9tOwotfSAvLyBBZGRBdG9tRml4
ZWQKLQotLyoKLSAqIEluaXRBdG9tVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGF0b20gdGFibGUu
Ci0gKgotICovCi0KLWludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRz
aXplKQotewotICAgIHVuc2lnbmVkIGludCBpaTsKLQotICAgIGh0c2l6ZSA9IGh0c2l6ZSA8PSAw
ID8gSU5JVF9IQVNIX1RBQkxFX1NJWkUgOiBodHNpemU7Ci0gICAgaWYgKCFJbml0U3RyaW5nVGFi
bGUoJmF0YWJsZS0+c3RhYmxlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFJbml0SGFz
aFRhYmxlKCZhdGFibGUtPmh0YWJsZSwgaHRzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBhdGFibGUtPm5leHRGcmVlID0gMDsKLSAgICBhdGFibGUtPmFtYXAgPSBOVUxMOwotICAgIGF0
YWJsZS0+c2l6ZSA9IDA7Ci0gICAgR3Jvd0F0b21UYWJsZShhdGFibGUsIElOSVRfQVRPTV9UQUJM
RV9TSVpFKTsKLSAgICBpZiAoIWF0YWJsZS0+YW1hcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAvLyBJbml0aWFsaXplIGxvd2VyIHBhcnQgb2YgYXRvbSB0YWJsZSB0byAiPHVuZGVmaW5lZD4i
IGF0b206Ci0KLSAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCAiPHVuZGVmaW5lZD4iLCAwKTsKLSAg
ICBmb3IgKGlpID0gMDsgaWkgPCBGSVJTVF9VU0VSX1RPS0VOX1NZOyBpaSsrKQotICAgICAgICBh
dGFibGUtPmFtYXBbaWldID0gYXRhYmxlLT5hbWFwWzBdOwotCi0gICAgLy8gQWRkIHNpbmdsZSBj
aGFyYWN0ZXIgdG9rZW5zIHRvIHRoZSBhdG9tIHRhYmxlOgotCi0gICAgewotCQljb25zdCBjaGFy
ICpzID0gIn4hJV4mKigpLSs9fCwuPD4vPzs6W117fSMiOwotICAgICAgICBjaGFyIHRbMl07Ci0K
LSAgICAgICAgdFsxXSA9ICdcMCc7Ci0gICAgICAgIHdoaWxlICgqcykgewotICAgICAgICAgICAg
dFswXSA9ICpzOwotICAgICAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdCwgc1swXSk7Ci0g
ICAgICAgICAgICBzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBZGQgbXVsdGlwbGUg
Y2hhcmFjdGVyIHNjYW5uZXIgdG9rZW5zIDoKLQotICAgIGZvciAoaWkgPSAwOyBpaSA8IHNpemVv
Zih0b2tlbnMpL3NpemVvZih0b2tlbnNbMF0pOyBpaSsrKQotICAgICAgICBBZGRBdG9tRml4ZWQo
YXRhYmxlLCB0b2tlbnNbaWldLnN0ciwgdG9rZW5zW2lpXS52YWwpOwotCi0gICAgLy8gQWRkIGVy
cm9yIHN5bWJvbCBpZiBydW5uaW5nIGluIGVycm9yIG1vZGU6Ci0KLSAgICBpZiAoY3BwLT5vcHRp
b25zLkVycm9yTW9kZSkKLSAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgImVycm9yIiwgRVJS
T1JfU1kpOwotCi0gICAgQWRkQXRvbShhdGFibGUsICI8KioqIGVuZCBmaXhlZCBhdG9tcyAqKio+
Iik7Ci0KLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdEF0b21UYWJsZQotCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLyBEZWJ1ZyBQcmludGluZyBGdW5jdGlvbnM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8qCi0g
KiBQcmludEF0b21UYWJsZSgpCi0gKgotICovCi0KLXZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRh
YmxlICphdGFibGUpCi17Ci0gICAgaW50IGlpOwotICAgIGNoYXIgc3RyWzIwMF07Ci0KLSAgICBm
b3IgKGlpID0gMDsgaWkgPCBhdGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNucHJp
bnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5z
dHJpbmdzW2F0YWJsZS0+YW1hcFtpaV1dKTsKLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
LSAgICB9Ci0gICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9
JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9IiwKLSAgICAgICAgICAgYXRhYmxlLT5odGFibGUu
c2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmllcyk7Ci0gICAgQ1BQRGVidWdMb2dNc2coc3RyKTsK
LSAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7
Ci0gICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJs
ZS5jb3VudHNbaWldKTsKLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9Ci0KLX0g
Ly8gUHJpbnRBdG9tVGFibGUKLQotCi0vKgotICogR2V0U3RyaW5nT2ZBdG9tKCkKLSAqCi0gKi8K
LQotY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSkKLXsK
LQkgY2hhciogY2hyX3N0cjsKLQkgY2hyX3N0cj0mYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFi
bGUtPmFtYXBbYXRvbV1dOwotCSByZXR1cm4gY2hyX3N0cjsKLX0gLy8gR2V0U3RyaW5nT2ZBdG9t
Ci0KLS8qCi0gKiBGcmVlQXRvbVRhYmxlKCkgLSBGcmVlIHRoZSBhdG9tIHRhYmxlIGFuZCBhc3Nv
Y2lhdGVkIG1lbW9yeQotICoKLSAqLwotCi12b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRhYmxlICph
dGFibGUpCi17Ci0gICAgRnJlZVN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSk7Ci0gICAgRnJl
ZUhhc2hUYWJsZSgmYXRhYmxlLT5odGFibGUpOwotICAgIGlmIChhdGFibGUtPmFtYXApCi0gICAg
ICAgIGZyZWUoYXRhYmxlLT5hbWFwKTsKLSAgICBpZiAoYXRhYmxlLT5hcmV2KQotICAgICAgICBm
cmVlKGF0YWJsZS0+YXJldik7Ci0gICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKLSAgICBhdGFibGUt
PmFyZXYgPSBOVUxMOwotICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOwotICAgIGF0YWJsZS0+c2l6
ZSA9IDA7Ci19IC8vIEZyZWVBdG9tVGFibGUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVu
ZCBvZiBhdG9tLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDg0YzMyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQg
KGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklE
SUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5
b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0
YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBz
b2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBk
byBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxs
LCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRl
cm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVy
c29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMg
aW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIp
LCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEg
U29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29y
IGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJ
RElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5W
SURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJz
IGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVp
dGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJ
RElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBz
dGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVz
cyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0
IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQg
YnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUg
TlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNl
bnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVE
IE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VU
IExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZS
SU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFU
SU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUg
TElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlks
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBM
T1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1P
RElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBI
T1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBF
VkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBhdG9tLmgKLS8vCi0KLSNp
ZiAhZGVmaW5lZChfX0FUT01fSCkKLSNkZWZpbmUgX19BVE9NX0ggMQotCi10eXBlZGVmIHN0cnVj
dCBBdG9tVGFibGVfUmVjIEF0b21UYWJsZTsKLQotZXh0ZXJuIEF0b21UYWJsZSAqYXRhYmxlOwot
Ci1pbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci12b2lk
IEZyZWVBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOwotaW50IEFkZEF0b20oQXRvbVRhYmxl
ICphdGFibGUsIGNvbnN0IGNoYXIgKnMpOwotdm9pZCBQcmludEF0b21UYWJsZShBdG9tVGFibGUg
KmF0YWJsZSk7Ci1pbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBj
aGFyICpzKTsKLWNvbnN0IGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGlu
dCBhdG9tKTsKLWludCBHZXRSZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9t
KTsKLWNoYXIqIEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwot
I2VuZGlmIC8vICFkZWZpbmVkKF9fQVRPTV9IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4MDg1My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdo
dCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5W
SURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWlu
c3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElB
IHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91
IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3Rh
bGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBw
ZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0
cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJl
IiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJ
QSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQv
b3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBO
VklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2Yg
TlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1l
cnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1O
ZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBO
VklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5
IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHBy
ZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBi
dXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdl
ZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRo
ZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxp
Y2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklE
RUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhP
VVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlO
RlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklO
QVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBC
RSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFS
WSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8s
IExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwg
TU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUs
IEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0Us
IEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGNvbXBpbGUuaAotLy8K
LQotI2lmICFkZWZpbmVkKF9fQ09NUElMRV9IKQotI2RlZmluZSBfX0NPTVBJTEVfSCAxCi0KLWlu
dCBJbml0Q1BQU3RydWN0KHZvaWQpOwotCi10eXBlZGVmIHN0cnVjdCBPcHRpb25zX1JlY3sKLSAg
ICBjb25zdCBjaGFyICpwcm9maWxlU3RyaW5nOwotICAgIGludCBFcnJvck1vZGU7Ci0gICAgaW50
IFF1aWV0OwotCQotICAgIC8vIERlYnVnIFRoZSBDb21waWxlciBvcHRpb25zOgotICAgIGludCBE
dW1wQXRvbVRhYmxlOwotfSBPcHRpb25zOwotCi0jZGVmaW5lIE1BWF9JRl9ORVNUSU5HICA2NAot
c3RydWN0IENQUFN0cnVjdF9SZWMgewotICAgIC8vIFB1YmxpYyBtZW1iZXJzCi0gICAgU291cmNl
TG9jICpwTGFzdFNvdXJjZUxvYzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzdGF0ZW1l
bnQgYnkgdGhlIHRyZWUgd2Fsa2VycwotICAgIE9wdGlvbnMgb3B0aW9uczsgICAgICAgICAgICAv
LyBDb21waWxlIG9wdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQotICAgIC8vIFByaXZhdGUgbWVtYmVy
cwotICAgIFNvdXJjZUxvYyBsYXN0U291cmNlTG9jOwotCi0gICAgLy8gU2Nhbm5lciBkYXRhOgot
Ci0gICAgU291cmNlTG9jICp0b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2NhdGlvbiBvZiBt
b3N0IHJlY2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCi0gICAgaW50IG1vc3RSZWNlbnRU
b2tlbjsgICAgICAgIC8vIE1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIKLSAg
ICBJbnB1dFNyYyAqY3VycmVudElucHV0OwotICAgIGludCBwcmV2aW91c190b2tlbjsKLSAgICBp
bnQgcGFzdEZpcnN0U3RhdGVtZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUgdGhhdCAjdmVy
c2lvbiBpcyB0aGUgZmlyc3Qgc3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlmIHByZXNlbnQK
LSAgICAKLQl2b2lkICpwQzsgICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0aGUgcGFyc2VD
b250ZXh0IG9mIHRoZSBjb21waWxlIG9iamVjdCBpbiBjcHAuICAKLSAgICAgCi0gICAgLy8gUHJp
dmF0ZSBtZW1iZXJzOgotICAgIFNvdXJjZUxvYyBsdG9rZW5Mb2M7Ci0JaW50IGlmZGVwdGg7ICAg
ICAgICAgICAgICAgIC8vY3VycmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3RpbmcgaW4gdGhlIGNw
cC5jIGZpbGUgKHByZS1wcm9jZXNzb3IpICAgIAotICAgIGludCBlbHNlZGVwdGhbTUFYX0lGX05F
U1RJTkddOy8vS2VlcCBhIHRyYWNrIG9mICNpZiBkZXB0aC4uTWF4IGFsbG93ZWQgaXMgNjQuCi0g
ICAgaW50IGVsc2V0cmFja2VyOyAgICAgICAgICAgIC8vI2lmLSNlbHNlIGFuZCAjZW5kaWYgY29u
c3RydWN0cy4uLkNvdW50ZXIuCi0gICAgY29uc3QgY2hhciAqRXJyTXNnOwotICAgIGludCBDb21w
aWxlRXJyb3I7ICAgICAgICAgICAvL0luZGljYXRlIGNvbXBpbGUgZXJyb3Igd2hlbiAjZXJyb3Is
ICNlbHNlLCNlbGlmIG1pc21hdGNoLgotCi0gICAgLy8KLSAgICAvLyBHbG9iYWxzIHVzZWQgdG8g
Y29tbXVuaWNhdGUgYmV0d2VlbiBQYVBhcnNlU3RyaW5ncygpIGFuZCB5eV9pbnB1dCgpYW5kIAot
ICAgIC8vIGFsc28gYWNyb3NzIHRoZSBmaWxlcy4oZ2VuX2dsc2xhbmcuY3BwIGFuZCBzY2FubmVy
LmMpCi0gICAgLy8KLSAgICBpbnQgUGFXaGljaFN0cjsgICAgICAgICAgICAgLy8gd2hpY2ggc3Ry
aW5nIHdlJ3JlIHBhcnNpbmcKLSAgICBjb25zdCBpbnQqIFBhU3RyTGVuOyAgICAgICAgLy8gYXJy
YXkgb2YgbGVuZ3RocyBvZiB0aGUgUGFBcmd2IHN0cmluZ3MKLSAgICBpbnQgUGFBcmdjOyAgICAg
ICAgICAgICAgICAgLy8gY291bnQgb2Ygc3RyaW5ncyBpbiB0aGUgYXJyYXkKLSAgICBjb25zdCBj
aGFyKiBjb25zdCogUGFBcmd2OyAgLy8gb3VyIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UgICAg
Ci0gICAgdW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVPRiA6IDE7Ci19OwotCi0jZW5kaWYgLy8g
IWRlZmluZWQoX19DT01QSUxFX0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOGExMDc2Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTExOCAr
MCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
Ci0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgot
UFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotLy8KLS8vIGNwcC5jCi0vLwotCi0jaW5jbHVkZSA8c3RkYXJnLmg+
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJp
bmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0KLSNpZiBk
ZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNTQpCi0jcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDE1MikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzA2KQot
I2VuZGlmCi0KLXN0YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0vKiBE
b24ndCB1c2UgbWVtb3J5LmMncyByZXBsYWNlbWVudHMsIGFzIHdlIGNsZWFuIHVwIHByb3Blcmx5
IGhlcmUgKi8KLSN1bmRlZiBtYWxsb2MKLSN1bmRlZiBmcmVlCi0KLXN0YXRpYyBpbnQgYmluZEF0
b20gPSAwOwotc3RhdGljIGludCBjb25zdEF0b20gPSAwOwotc3RhdGljIGludCBkZWZhdWx0QXRv
bSA9IDA7Ci1zdGF0aWMgaW50IGRlZmluZUF0b20gPSAwOwotc3RhdGljIGludCBkZWZpbmVkQXRv
bSA9IDA7Ci1zdGF0aWMgaW50IGVsc2VBdG9tID0gMDsKLXN0YXRpYyBpbnQgZWxpZkF0b20gPSAw
Owotc3RhdGljIGludCBlbmRpZkF0b20gPSAwOwotc3RhdGljIGludCBpZkF0b20gPSAwOwotc3Rh
dGljIGludCBpZmRlZkF0b20gPSAwOwotc3RhdGljIGludCBpZm5kZWZBdG9tID0gMDsKLXN0YXRp
YyBpbnQgaW5jbHVkZUF0b20gPSAwOwotc3RhdGljIGludCBsaW5lQXRvbSA9IDA7Ci1zdGF0aWMg
aW50IHByYWdtYUF0b20gPSAwOwotc3RhdGljIGludCB0ZXh1bml0QXRvbSA9IDA7Ci1zdGF0aWMg
aW50IHVuZGVmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVycm9yQXRvbSA9IDA7Ci1zdGF0aWMgaW50
IF9fTElORV9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IF9fRklMRV9fQXRvbSA9IDA7Ci1zdGF0aWMg
aW50IF9fVkVSU0lPTl9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IHZlcnNpb25BdG9tID0gMDsKLXN0
YXRpYyBpbnQgZXh0ZW5zaW9uQXRvbSA9IDA7Ci0KLXN0YXRpYyBTY29wZSAqbWFjcm9zID0gMDsK
LSNkZWZpbmUgTUFYX01BQ1JPX0FSR1MgIDY0Ci0KLXN0YXRpYyBTb3VyY2VMb2MgaWZsb2M7IC8q
IG91dGVybW9zdCAjaWYgKi8KLQotaW50IEluaXRDUFAodm9pZCkKLXsKLSAgICBjaGFyICAgICAg
ICBidWZmZXJbNjRdLCAqdDsKLSAgICBjb25zdCBjaGFyICAqZjsKLQotICAgIC8vIEFkZCB2YXJp
b3VzIGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKLSAgICBiaW5kQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJiaW5kIik7Ci0gICAgY29uc3RBdG9tID0gTG9va1Vw
QWRkU3RyaW5nKGF0YWJsZSwgImNvbnN0Iik7Ci0gICAgZGVmYXVsdEF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiZGVmYXVsdCIpOwotICAgIGRlZmluZUF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCAiZGVmaW5lIik7Ci0gICAgZGVmaW5lZEF0b20gPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCAiZGVmaW5lZCIpOwotICAgIGVsaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgImVsaWYiKTsKLSAgICBlbHNlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlbHNl
Iik7Ci0gICAgZW5kaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVuZGlmIik7Ci0g
ICAgaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmIik7Ci0gICAgaWZkZWZBdG9t
ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmZGVmIik7Ci0gICAgaWZuZGVmQXRvbSA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsICJpZm5kZWYiKTsKLSAgICBpbmNsdWRlQXRvbSA9IExvb2tV
cEFkZFN0cmluZyhhdGFibGUsICJpbmNsdWRlIik7Ci0gICAgbGluZUF0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAibGluZSIpOwotICAgIHByYWdtYUF0b20gPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCAicHJhZ21hIik7Ci0gICAgdGV4dW5pdEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRh
YmxlLCAidGV4dW5pdCIpOwotICAgIHVuZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJ1bmRlZiIpOwotCWVycm9yQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlcnJvciIp
OwotICAgIF9fTElORV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0xJTkVfXyIp
OwotICAgIF9fRklMRV9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0ZJTEVfXyIp
OwotCV9fVkVSU0lPTl9fQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX1ZFUlNJT05f
XyIpOwotICAgIHZlcnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInZlcnNpb24i
KTsKLSAgICBleHRlbnNpb25BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImV4dGVuc2lv
biIpOwotICAgIG1hY3JvcyA9IE5ld1Njb3BlSW5Qb29sKG1lbV9DcmVhdGVQb29sKDAsIDApKTsK
LSAgICBzdHJjcHkoYnVmZmVyLCAiUFJPRklMRV8iKTsKLSAgICB0ID0gYnVmZmVyICsgc3RybGVu
KGJ1ZmZlcik7Ci0gICAgZiA9IGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nOwotICAgIHdoaWxl
ICgoaXNhbG51bSgqZikgfHwgKmYgPT0gJ18nKSAmJiB0IDwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZl
cikgLSAxKQotICAgICAgICAqdCsrID0gdG91cHBlcigqZisrKTsKLSAgICAqdCA9IDA7Ci0KLSAg
ICBQcmVkZWZpbmVJbnRNYWNybygiR0xfRVMiLCAxKTsKLSAgICBQcmVkZWZpbmVJbnRNYWNybygi
R0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKLQotCXJldHVybiAxOwotfSAvLyBJbml0
Q1BQCi0KLWludCBGcmVlQ1BQKHZvaWQpCi17Ci0gICAgaWYgKG1hY3JvcykKLSAgICB7Ci0gICAg
ICAgIG1lbV9GcmVlUG9vbChtYWNyb3MtPnBvb2wpOwotICAgICAgICBtYWNyb3MgPSAwOwotICAg
IH0KLQotICAgIHJldHVybiAxOwotfQotCi1pbnQgRmluYWxDUFAodm9pZCkKLXsKLQlpZiAoY3Bw
LT5pZmRlcHRoKQotCQlDUFBFcnJvclRvSW5mb0xvZygiI2lmIG1pc21hdGNoIik7Ci0gICAgcmV0
dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgQ1BQZGVmaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQot
ewotICAgIGludCB0b2tlbiwgbmFtZSwgYXJnc1tNQVhfTUFDUk9fQVJHU10sIGFyZ2M7Ci0gICAg
Y29uc3QgY2hhciAqbWVzc2FnZTsKLSAgICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgU3ltYm9sICpz
eW1iOwotICAgIFNvdXJjZUxvYyBkdW1teUxvYzsKLSAgICBtZW1zZXQoJm1hYywgMCwgc2l6ZW9m
KG1hYykpOwotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKLSAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgIH0KLSAgICBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBp
ZiAodG9rZW4gPT0gJygnICYmICF5eWx2YWxwcC0+c2NfaW50KSB7Ci0gICAgICAgIC8vIGdhdGhl
ciBhcmd1bWVudHMKLSAgICAgICAgYXJnYyA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgIGlmIChhcmdjID09IDAgJiYgdG9rZW4gPT0gJyknKSBicmVhazsK
LSAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgewotCQkJCUNQUEVycm9y
VG9JbmZvTG9nKCIjZGVmaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyZ2MgPCBNQVhfTUFDUk9fQVJHUykKLSAgICAg
ICAgICAgICAgICBhcmdzW2FyZ2MrK10gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Ci0gICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgIH0gd2hpbGUgKHRva2VuID09ICcsJyk7Ci0gICAgICAgIGlmICh0b2tl
biAhPSAnKScpIHsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7Ci0g
ICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIH0KLSAgICAgICAgbWFjLmFyZ2MgPSBh
cmdjOwotICAgICAgICBtYWMuYXJncyA9IG1lbV9BbGxvYyhtYWNyb3MtPnBvb2wsIGFyZ2MgKiBz
aXplb2YoaW50KSk7Ci0gICAgICAgIG1lbWNweShtYWMuYXJncywgYXJncywgYXJnYyAqIHNpemVv
ZihpbnQpKTsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCX0KLSAgICBtYWMuYm9keSA9IE5ld1Rva2VuU3RyZWFt
KEdldEF0b21TdHJpbmcoYXRhYmxlLCBuYW1lKSwgbWFjcm9zLT5wb29sKTsKLSAgICB3aGlsZSAo
dG9rZW4gIT0gJ1xuJykgewotICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykgewotICAgICAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKFxc
KSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKLSAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA8PSAwKSB7IC8v
IEVPRiBvciBlcnJvcgotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQg
ZW5kIG9mIGlucHV0IGluICNkZWZpbmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVk
IGEgbmV3bGluZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAg
UmVjb3JkVG9rZW4obWFjLmJvZHksIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAg
ICB9OwotCi0gICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOwotICAgIGlmIChz
eW1iKSB7Ci0gICAgICAgIGlmICghc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYpIHsKLSAgICAgICAg
ICAgIC8vIGFscmVhZHkgZGVmaW5lZCAtLSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBpZGVu
dGljYWwKLSAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdjICE9IG1hYy5hcmdj
KSBnb3RvIGVycm9yOwotICAgICAgICAgICAgZm9yIChhcmdjPTA7IGFyZ2MgPCBtYWMuYXJnYzsg
YXJnYysrKQotICAgICAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdzW2FyZ2Nd
ICE9IG1hYy5hcmdzW2FyZ2NdKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAg
ICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSk7Ci0gICAg
ICAgICAgICBSZXdpbmRUb2tlblN0cmVhbShtYWMuYm9keSk7Ci0gICAgICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICAgICAgaW50IG9sZF9sdmFsLCBvbGRfdG9rZW47Ci0gICAgICAgICAgICAgICAg
b2xkX3Rva2VuID0gUmVhZFRva2VuKHN5bWItPmRldGFpbHMubWFjLmJvZHksIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgICAgICBvbGRfbHZhbCA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAgICAgICAg
ICAgICAgdG9rZW4gPSBSZWFkVG9rZW4obWFjLmJvZHksIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
ICAgICBpZiAodG9rZW4gIT0gb2xkX3Rva2VuIHx8IHl5bHZhbHBwLT5zY19pbnQgIT0gb2xkX2x2
YWwpIHsgCi0gICAgICAgICAgICAgICAgZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIFN0b3Jl
U3RyKCJNYWNybyBSZWRlZmluZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0
U3RyaW5nT2ZBdG9tKGF0YWJsZSxuYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9
R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgRGVjTGluZU51bWJlcigpOwot
ICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVzZXRUU3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyB9Ci0gICAgICAgICAgICB9IHdoaWxl
ICh0b2tlbiA+IDApOwotICAgICAgICB9Ci0gICAgICAgIC8vRnJlZU1hY3JvKCZzeW1iLT5kZXRh
aWxzLm1hYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHVtbXlMb2MuZmlsZSA9IDA7Ci0gICAg
ICAgIGR1bW15TG9jLmxpbmUgPSAwOwotICAgICAgICBzeW1iID0gQWRkU3ltYm9sKCZkdW1teUxv
YywgbWFjcm9zLCBuYW1lLCBNQUNST19TKTsKLSAgICB9Ci0gICAgc3ltYi0+ZGV0YWlscy5tYWMg
PSBtYWM7Ci0gICAgcmV0dXJuICdcbic7Ci19IC8vIENQUGRlZmluZQotCi1zdGF0aWMgaW50IENQ
UHVuZGVmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgU3ltYm9s
ICpzeW1iOwotCWlmKHRva2VuID09ICdcbicpewotCQlDUFBFcnJvclRvSW5mb0xvZygiI3VuZGVm
Iik7Ci0JICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgaWYgKHRva2VuICE9IENQUF9JREVO
VElGSUVSKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc3ltYiA9IExvb2tVcFN5bWJvbCht
YWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgaWYgKHN5bWIpIHsKLSAgICAgICAgc3lt
Yi0+ZGV0YWlscy5tYWMudW5kZWYgPSAxOwotICAgIH0KLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2Vu
ICE9ICdcbicpIHsKLSAgICBlcnJvcjoKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN1bmRl
ZiIpOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUHVuZGVmCi0KLS8qIENQUGVs
c2UgLS0gc2tpcCBmb3J3YXJkIHRvIGFwcHJvcHJpYXRlIHNwb3QuICBUaGlzIGlzIGFjdHVhbGx5
IHVzZWQKLSoqIHRvIHNraXAgdG8gYW5kICNlbmRpZiBhZnRlciBzZWVpbmcgYW4gI2Vsc2UsIEFO
RCB0byBza2lwIHRvIGEgI2Vsc2UsCi0qKiAjZWxpZiwgb3IgI2VuZGlmIGFmdGVyIGEgI2lmLyNp
ZmRlZi8jaWZuZGVmLyNlbGlmIHRlc3Qgd2FzIGZhbHNlCi0qLwotCi1zdGF0aWMgaW50IENQUGVs
c2UoaW50IG1hdGNoZWxzZSwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50IGF0b20s
ZGVwdGg9MDsKLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQotCXdoaWxlICh0b2tlbiA+IDApIHsKLSAgICAgICAg
aWYgKHRva2VuICE9ICcjJykgewotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsK
LSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsg
Ly8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1
bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0g
ZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0JCWlmICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApKSAhPSBDUFBfSURFTlRJRklFUikK
LQkJCWNvbnRpbnVlOwotICAgICAgICBhdG9tID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgICAg
ICBpZiAoYXRvbSA9PSBpZkF0b20gfHwgYXRvbSA9PSBpZmRlZkF0b20gfHwgYXRvbSA9PSBpZm5k
ZWZBdG9tKXsKLSAgICAgICAgICAgIGRlcHRoKys7IGNwcC0+aWZkZXB0aCsrOyBjcHAtPmVsc2V0
cmFja2VyKys7Ci0gICAgICAgICAgICBpZiAoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05FU1RJTkcp
IHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRl
cHRoIGV4Y2VlZGVkIik7Ci0gICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8g
c2FuaXR5IGNoZWNrIGVsc2V0cmFja2VyCi0gICAgICAgICAgICBpZiAoY3BwLT5lbHNldHJhY2tl
ciA8IDAgfHwgY3BwLT5lbHNldHJhY2tlciA+PSBNQVhfSUZfTkVTVElORykgewotICAgICAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtaXNtYXRjaGVkICNpZi8jZW5kaWYgc3RhdGVtZW50
cyIpOwotICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNwcC0+ZWxzZWRlcHRo
W2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChhdG9t
ID09IGVuZGlmQXRvbSkgewotICAgICAgICAgICAgaWYoLS1kZXB0aDwwKXsKLSAgICAgICAgICAg
ICAgICBpZiAoY3BwLT5lbHNldHJhY2tlcikKLSAgICAgICAgICAgICAgICAgICAgLS1jcHAtPmVs
c2V0cmFja2VyOwotICAgICAgICAgICAgICAgIGlmIChjcHAtPmlmZGVwdGgpIAotICAgICAgICAg
ICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0gICAgICAgICAgICAgCi0gICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7Ci0g
ICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgo
KGludCkobWF0Y2hlbHNlKSAhPSAwKSYmIGRlcHRoPT0wKSB7Ci0JCQlpZiAoYXRvbSA9PSBlbHNl
QXRvbSApIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2Vu
ICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5l
eHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBl
eHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9
ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBm
b2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGlu
ZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAK
LQkJCQlicmVhazsKLQkJCX0gCi0JCQllbHNlIGlmIChhdG9tID09IGVsaWZBdG9tKSB7Ci0gICAg
ICAgICAgICAgICAgLyogd2UgZGVjcmVtZW50IGNwcC0+aWZkZXB0aCBoZXJlLCBiZWNhdXNlIENQ
UGlmIHdpbGwgaW5jcmVtZW50Ci0gICAgICAgICAgICAgICAgICogaXQgYW5kIHdlIHJlYWxseSB3
YW50IHRvIGxlYXZlIGl0IGFsb25lICovCi0JCQkJaWYgKGNwcC0+aWZkZXB0aCl7Ci0JCQkJCS0t
Y3BwLT5pZmRlcHRoOwotCQkJCSAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7Ci0JCQkJfQotICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBpZih5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0JCX0KLSAg
ICAgICAgZWxzZSBpZigoYXRvbT09ZWxzZUF0b20pICYmICghQ2hrQ29ycmVjdEVsc2VOZXN0aW5n
KCkpKXsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNl
Iik7Ci0gICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KLQl9OwotICAgIHJldHVybiB0b2tlbjsKLX0KLQotZW51bSBldmFsX3By
ZWMgewotICAgIE1JTl9QUkVDLAotICAgIENPTkQsIExPR09SLCBMT0dBTkQsIE9SLCBYT1IsIEFO
RCwgRVFVQUwsIFJFTEFUSU9OLCBTSElGVCwgQURELCBNVUwsIFVOQVJZLAotICAgIE1BWF9QUkVD
Ci19OwotCi1zdGF0aWMgaW50IG9wX2xvZ29yKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSB8fCBi
OyB9Ci1zdGF0aWMgaW50IG9wX2xvZ2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiYgYjsg
fQotc3RhdGljIGludCBvcF9vcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgfCBiOyB9Ci1zdGF0
aWMgaW50IG9wX3hvcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgXiBiOyB9Ci1zdGF0aWMgaW50
IG9wX2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiBiOyB9Ci1zdGF0aWMgaW50IG9wX2Vx
KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci1zdGF0aWMgaW50IG9wX25lKGludCBh
LCBpbnQgYikgeyByZXR1cm4gYSAhPSBiOyB9Ci1zdGF0aWMgaW50IG9wX2dlKGludCBhLCBpbnQg
YikgeyByZXR1cm4gYSA+PSBiOyB9Ci1zdGF0aWMgaW50IG9wX2xlKGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSA8PSBiOyB9Ci1zdGF0aWMgaW50IG9wX2d0KGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSA+IGI7IH0KLXN0YXRpYyBpbnQgb3BfbHQoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDwgYjsg
fQotc3RhdGljIGludCBvcF9zaGwoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw8IGI7IH0KLXN0
YXRpYyBpbnQgb3Bfc2hyKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PiBiOyB9Ci1zdGF0aWMg
aW50IG9wX2FkZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9Ci1zdGF0aWMgaW50IG9w
X3N1YihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgLSBiOyB9Ci1zdGF0aWMgaW50IG9wX211bChp
bnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKiBiOyB9Ci1zdGF0aWMgaW50IG9wX2RpdihpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgLyBiOyB9Ci1zdGF0aWMgaW50IG9wX21vZChpbnQgYSwgaW50IGIp
IHsgcmV0dXJuIGEgJSBiOyB9Ci1zdGF0aWMgaW50IG9wX3BvcyhpbnQgYSkgeyByZXR1cm4gYTsg
fQotc3RhdGljIGludCBvcF9uZWcoaW50IGEpIHsgcmV0dXJuIC1hOyB9Ci1zdGF0aWMgaW50IG9w
X2NtcGwoaW50IGEpIHsgcmV0dXJuIH5hOyB9Ci1zdGF0aWMgaW50IG9wX25vdChpbnQgYSkgeyBy
ZXR1cm4gIWE7IH0KLQotc3RydWN0IHsKLSAgICBpbnQgdG9rZW4sIHByZWMsICgqb3ApKGludCwg
aW50KTsKLX0gYmlub3BbXSA9IHsKLSAgICB7IENQUF9PUl9PUCwgTE9HT1IsIG9wX2xvZ29yIH0s
Ci0gICAgeyBDUFBfQU5EX09QLCBMT0dBTkQsIG9wX2xvZ2FuZCB9LAotICAgIHsgJ3wnLCBPUiwg
b3Bfb3IgfSwKLSAgICB7ICdeJywgWE9SLCBvcF94b3IgfSwKLSAgICB7ICcmJywgQU5ELCBvcF9h
bmQgfSwKLSAgICB7IENQUF9FUV9PUCwgRVFVQUwsIG9wX2VxIH0sCi0gICAgeyBDUFBfTkVfT1As
IEVRVUFMLCBvcF9uZSB9LAotICAgIHsgJz4nLCBSRUxBVElPTiwgb3BfZ3QgfSwKLSAgICB7IENQ
UF9HRV9PUCwgUkVMQVRJT04sIG9wX2dlIH0sCi0gICAgeyAnPCcsIFJFTEFUSU9OLCBvcF9sdCB9
LAotICAgIHsgQ1BQX0xFX09QLCBSRUxBVElPTiwgb3BfbGUgfSwKLSAgICB7IENQUF9MRUZUX09Q
LCBTSElGVCwgb3Bfc2hsIH0sCi0gICAgeyBDUFBfUklHSFRfT1AsIFNISUZULCBvcF9zaHIgfSwK
LSAgICB7ICcrJywgQURELCBvcF9hZGQgfSwKLSAgICB7ICctJywgQURELCBvcF9zdWIgfSwKLSAg
ICB7ICcqJywgTVVMLCBvcF9tdWwgfSwKLSAgICB7ICcvJywgTVVMLCBvcF9kaXYgfSwKLSAgICB7
ICclJywgTVVMLCBvcF9tb2QgfSwKLX07Ci0KLXN0cnVjdCB7Ci0gICAgaW50IHRva2VuLCAoKm9w
KShpbnQpOwotfSB1bm9wW10gPSB7Ci0gICAgeyAnKycsIG9wX3BvcyB9LAotICAgIHsgJy0nLCBv
cF9uZWcgfSwKLSAgICB7ICd+Jywgb3BfY21wbCB9LAotICAgIHsgJyEnLCBvcF9ub3QgfSwKLX07
Ci0KLSNkZWZpbmUgQUxFTihBKSAoc2l6ZW9mKEEpL3NpemVvZihBWzBdKSkKLQotc3RhdGljIGlu
dCBldmFsKGludCB0b2tlbiwgaW50IHByZWMsIGludCAqcmVzLCBpbnQgKmVyciwgeXlzdHlwZXBw
ICogeXlsdmFscHApCi17Ci0gICAgaW50ICAgICAgICAgaSwgdmFsOwotICAgIFN5bWJvbCAgICAg
ICpzOwotICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewotICAgICAgICBpZiAoeXls
dmFscHAtPnNjX2lkZW50ID09IGRlZmluZWRBdG9tKSB7Ci0gICAgICAgICAgICBpbnQgbmVlZGNs
b3NlID0gMDsKLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKCcp
IHsKLSAgICAgICAgICAgICAgICBuZWVkY2xvc2UgPSAxOwotICAgICAgICAgICAgICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikK
LSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgKnJlcyA9IChzID0gTG9v
a1VwU3ltYm9sKG1hY3JvcywgeXlsdmFscHAtPnNjX2lkZW50KSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgID8gIXMtPmRldGFpbHMubWFjLnVuZGVmIDogMDsKLSAgICAgICAgICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIGlmIChuZWVkY2xvc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0g
JyknKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgIH0KLQkJfSBlbHNlIGlmIChNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2Nf
aWRlbnQsIHl5bHZhbHBwKSkgewotCQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgcmV0dXJuIGV2YWwodG9r
ZW4sIHByZWMsIHJlcywgZXJyLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0JfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5U
Q09OU1RBTlQpIHsKLSAgICAgICAgKnJlcyA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICB9IGVsc2UgaWYgKHRva2VuID09ICcoJykgewotICAgICAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
IHRva2VuID0gZXZhbCh0b2tlbiwgTUlOX1BSRUMsIHJlcywgZXJyLCB5eWx2YWxwcCk7Ci0gICAg
ICAgIGlmICghKmVycikgewotICAgICAgICAgICAgaWYgKHRva2VuICE9ICcpJykKLSAgICAgICAg
ICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgZm9yIChpID0gQUxFTih1bm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0g
ICAgICAgICAgICBpZiAodW5vcFtpXS50b2tlbiA9PSB0b2tlbikKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIFVOQVJZLCByZXMsIGVyciwgeXlsdmFs
cHApOwotICAgICAgICAgICAgKnJlcyA9IHVub3BbaV0ub3AoKnJlcyk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxl
ICghKmVycikgewotICAgICAgICBpZiAodG9rZW4gPT0gJyknIHx8IHRva2VuID09ICdcbicpIGJy
ZWFrOwotICAgICAgICBmb3IgKGkgPSBBTEVOKGJpbm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0g
ICAgICAgICAgICBpZiAoYmlub3BbaV0udG9rZW4gPT0gdG9rZW4pCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPCAwIHx8IGJpbm9wW2ldLnByZWMgPD0g
cHJlYykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB2YWwgPSAqcmVzOwotICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgYmlub3BbaV0ucHJlYywgcmVzLCBlcnIs
IHl5bHZhbHBwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiaW5vcFtpXS5vcCA9PSBvcF9kaXYg
fHwgYmlub3BbaV0ub3AgPT0gb3BfbW9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKnJl
cyA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCJwcmVwcm9jZXNzb3IgZGl2aWRlIG9yIG1vZHVsbyBieSB6ZXJvIik7Ci0gICAgICAgICAgICAg
ICAgKmVyciA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgKnJlcyA9IGJpbm9wW2ldLm9wKHZhbCwgKnJlcyk7Ci0g
ICAgfQotICAgIHJldHVybiB0b2tlbjsKLWVycm9yOgotICAgIENQUEVycm9yVG9JbmZvTG9nKCJp
bmNvcnJlY3QgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSIpOwotICAgICplcnIgPSAxOwotICAgICpy
ZXMgPSAwOwotICAgIHJldHVybiB0b2tlbjsKLX0gLy8gZXZhbAotCi1zdGF0aWMgaW50IENQUGlm
KHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpbnQgcmVzID0gMCwg
ZXJyID0gMDsKLQotICAgIGlmICghY3BwLT5pZmRlcHRoKyspCi0gICAgICAgIGlmbG9jID0gKmNw
cC0+dG9rZW5Mb2M7Ci0gICAgaWYoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05FU1RJTkcpewotICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkIik7
Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGNwcC0+ZWxzZXRyYWNrZXIrKzsKLSAgICAvLyBzYW5pdHkgY2hlY2sgZWxzZXRyYWNr
ZXIKLSAgICBpZiAoY3BwLT5lbHNldHJhY2tlciA8IDAgfHwgY3BwLT5lbHNldHJhY2tlciA+PSBN
QVhfSUZfTkVTVElORykgewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWlzbWF0Y2hlZCAj
aWYvI2VuZGlmIHN0YXRlbWVudHMiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJh
Y2tlcl0gPSAwOwotCi0gICAgdG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywgJnJlcywgJmVy
ciwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgIENQUFdhcm5p
bmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjaWYgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICB3aGlsZSAodG9rZW4g
IT0gJ1xuJykgewotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKHRva2VuIDw9IDAp
IHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVu
ZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluICNpZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhw
ZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9IAotICAgIGlmICghcmVzICYmICFlcnIpIHsKLSAgICAgICAg
dG9rZW4gPSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9rZW47
Ci19IC8vIENQUGlmCi0KLXN0YXRpYyBpbnQgQ1BQaWZkZWYoaW50IGRlZmluZWQsIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaW50IG5hbWUgPSB5eWx2YWxwcC0+
c2NfaWRlbnQ7Ci0gICAgaWYoKytjcHAtPmlmZGVwdGggPiBNQVhfSUZfTkVTVElORyl7Ci0gICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsK
LSAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgY3BwLT5lbHNldHJhY2tlcisrOwotICAgIC8vIHNhbml0eSBjaGVjayBlbHNldHJhY2tl
cgotICAgIGlmIChjcHAtPmVsc2V0cmFja2VyIDwgMCB8fCBjcHAtPmVsc2V0cmFja2VyID49IE1B
WF9JRl9ORVNUSU5HKSB7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtaXNtYXRjaGVkICNp
Zi8jZW5kaWYgc3RhdGVtZW50cyIpOwotICAgICAgICBjcHAtPkNvbXBpbGVFcnJvciA9IDE7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFj
a2VyXSA9IDA7Ci0KLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAg
ICAgIGRlZmluZWQgPyBDUFBFcnJvclRvSW5mb0xvZygiaWZkZWYiKTpDUFBFcnJvclRvSW5mb0xv
ZygiaWZuZGVmIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3ltYm9sICpzID0gTG9va1VwU3lt
Ym9sKG1hY3JvcywgbmFtZSk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2VuICE9ICdc
bicpIHsKLSAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5z
IGZvbGxvd2luZyAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3
bGluZSIpOwotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVy
cm9yCi0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVu
ZCBvZiBpbnB1dCBpbiAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEg
bmV3bGluZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgocyAmJiAhcy0+ZGV0
YWlscy5tYWMudW5kZWYpID8gMSA6IDApICE9IGRlZmluZWQpCi0gICAgICAgICAgICB0b2tlbiA9
IENQUGVsc2UoMSwgeXlsdmFscHApOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQ
UGlmZGVmCi0KLXN0YXRpYyBpbnQgQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkgCi17Ci0g
ICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLQlpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1iZXIoKTsKLSAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0gICAgICAgIEluY0xpbmVOdW1iZXIoKTsK
LQkJcmV0dXJuIHRva2VuOwotCX0KLQllbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQp
IHsKLQkJeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JCVNl
dExpbmVOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgCi0J
CWlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5z
Y19pbnQ9YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotCQkJU2V0U3RyaW5nTnVtYmVyKHl5
bHZhbHBwLT5zY19pbnQpOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQkJaWYodG9rZW4hPSdcbicpCi0J
CQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0gICAgICAgIH0KLQkJZWxzZSBpZiAodG9r
ZW4gPT0gJ1xuJyl7Ci0JCQlyZXR1cm4gdG9rZW47Ci0JCX0KLQkJZWxzZXsKLSAgICAgICAgICAg
IENQUEVycm9yVG9JbmZvTG9nKCIjbGluZSIpOwotCQl9Ci0JfQotCWVsc2V7Ci0gICAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0JfQotICAgIHJldHVybiB0b2tlbjsKLX0KLQot
c3RhdGljIGludCBDUFBlcnJvcih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotCi0JaW50IHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICBjb25zdCBjaGFyICptZXNzYWdlOwotCQotICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7
Ci0gICAgICAgIGlmICh0b2tlbiA8PSAwKXsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2
ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IH1lbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9PSBDUFBfSU5U
Q09OU1RBTlQpewotICAgICAgICAgICAgU3RvcmVTdHIoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsK
LQkJfWVsc2UgaWYodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgfHwgdG9rZW4gPT0gQ1BQX1NUUkNP
TlNUQU5UKXsKLQkJCVN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAtPnNj
X2lkZW50KSk7Ci0JCX1lbHNlIHsKLQkJICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFi
bGUsdG9rZW4pKTsKLQkJfQotCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotCURlY0xpbmVOdW1iZXIoKTsKLQkvL3N0b3Jl
IHRoaXMgbXNnIGludG8gdGhlIHNoYWRlcidzIGluZm9ybWF0aW9uIGxvZy4uc2V0IHRoZSBDb21w
aWxlIEVycm9yIGZsYWchISEhCi0JbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgIENQUFNo
SW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICBSZXNldFRTdHJpbmcoKTsKLSAgICBjcHAtPkNvbXBp
bGVFcnJvcj0xOwotICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0vL0NQ
UGVycm9yCi0KLXN0YXRpYyBpbnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewot
CWNoYXIgU3JjU3RyTmFtZVsyXTsKLQljaGFyKiogYWxsVG9rZW5zOwotCWludCB0b2tlbkNvdW50
ID0gMDsKLQlpbnQgbWF4VG9rZW5Db3VudCA9IDEwOwotCWNvbnN0IGNoYXIqIFNyY1N0cjsKLQlp
bnQgaTsKLQotCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0JCi0JaWYgKHRva2VuPT0nXG4nKSB7Ci0JCURlY0xpbmVOdW1i
ZXIoKTsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNwcmFnbWEiKTsKLSAgICAgICAgSW5j
TGluZU51bWJlcigpOwotCSAgICByZXR1cm4gdG9rZW47Ci0JfQotCQotCWFsbFRva2VucyA9IChj
aGFyKiopbWFsbG9jKHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsJCi0KLQl3aGlsZSAo
dG9rZW4gIT0gJ1xuJykgewotCQlpZiAodG9rZW5Db3VudCA+PSBtYXhUb2tlbkNvdW50KSB7Ci0J
CQltYXhUb2tlbkNvdW50ICo9IDI7Ci0JCQlhbGxUb2tlbnMgPSAoY2hhcioqKXJlYWxsb2MoKGNo
YXIqKilhbGxUb2tlbnMsIHNpemVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsKLQkJfQotCQlz
d2l0Y2ggKHRva2VuKSB7Ci0JCWNhc2UgQ1BQX0lERU5USUZJRVI6Ci0JCQlTcmNTdHIgPSBHZXRB
dG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKLQkJCWFsbFRva2Vuc1t0b2tl
bkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJCXN0cmNweShh
bGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQljYXNlIENQUF9J
TlRDT05TVEFOVDoKLQkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKLQkJCWFsbFRv
a2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJ
CXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQlj
YXNlIENQUF9GTE9BVENPTlNUQU5UOgotCQkJU3JjU3RyID0geXlsdmFscHAtPnN5bWJvbF9uYW1l
OwotCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oU3JjU3Ry
KSArIDEpOwotCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIpOwotCQkJ
YnJlYWs7Ci0JCWNhc2UgLTE6Ci0gICAgICAgICAgICAvLyBFT0YKLSAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiI3ByYWdtYSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0aCBhIG5ld2xpbmUiKTsJ
CQkKLQkJCWdvdG8gZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOwotCQlkZWZhdWx0OgotCQkJU3Jj
U3RyTmFtZVswXSA9IHRva2VuOwotCQkJU3JjU3RyTmFtZVsxXSA9ICdcMCc7Ci0JCQlhbGxUb2tl
bnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKDIpOwotCQkJc3RyY3B5KGFsbFRva2Vuc1t0
b2tlbkNvdW50KytdLCBTcmNTdHJOYW1lKTsKLQkJfQotCQl0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotCi0JSGFuZGxlUHJh
Z21hKChjb25zdCBjaGFyKiopYWxsVG9rZW5zLCB0b2tlbkNvdW50KTsKLQkKLWZyZWVNZW1vcnlB
bmRSZXR1cm5Ub2tlbjoKLQlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7Ci0JCWZy
ZWUgKGFsbFRva2Vuc1tpXSk7Ci0JfQotCWZyZWUgKGFsbFRva2Vucyk7CQotCi0JcmV0dXJuIHRv
a2VuOyAgICAKLX0gLy8gQ1BQcHJhZ21hCi0KLSNkZWZpbmUgRVNTTF9WRVJTSU9OX05VTUJFUiAx
MDAKLSNkZWZpbmUgRVNTTF9WRVJTSU9OX1NUUklORyAiMTAwIgotCi1zdGF0aWMgaW50IENQUHZl
cnNpb24oeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCi0gICAgaWYg
KGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID09IDEpCi0gICAgICAgIENQUFNoSW5mb0xvZ01zZygi
I3ZlcnNpb24gbXVzdCBvY2N1ciBiZWZvcmUgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGUgcHJv
Z3JhbSIpOwotCi0gICAgaWYodG9rZW49PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0gICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotICAgICAgICBJbmNMaW5lTnVtYmVy
KCk7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0gICAgaWYgKHRva2VuICE9IENQUF9JTlRDT05TVEFO
VCkKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7Ci0JCi0gICAgeXlsdmFs
cHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JLy9TZXRWZXJzaW9uTnVt
YmVyKHl5bHZhbHBwLT5zY19pbnQpOwotICAgIAotICAgIGlmICh5eWx2YWxwcC0+c2NfaW50ICE9
IEVTU0xfVkVSU0lPTl9OVU1CRVIpCi0gICAgICAgIENQUFNoSW5mb0xvZ01zZygiVmVyc2lvbiBu
dW1iZXIgbm90IHN1cHBvcnRlZCBieSBFU1NMIik7Ci0KLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgCi0JaWYgKHRv
a2VuID09ICdcbicpewotCQlyZXR1cm4gdG9rZW47Ci0JfQotCWVsc2V7Ci0gICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQ
UHZlcnNpb24KLQotc3RhdGljIGludCBDUFBleHRlbnNpb24oeXlzdHlwZXBwICogeXlsdmFscHAp
Ci17Ci0KLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgIGNoYXIgZXh0ZW5zaW9uTmFtZVtNQVhfU1lNQk9MX05B
TUVfTEVOICsgMV07Ci0KLSAgICBpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1iZXIoKTsK
LSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gbmFtZSBub3Qgc3BlY2lmaWVkIik7
Ci0gICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQotICAgIGlm
ICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNl
eHRlbnNpb24iKTsKLSAgICAKLSAgICBzdHJuY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJp
bmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAg
ICBleHRlbnNpb25OYW1lW01BWF9TWU1CT0xfTkFNRV9MRU5dID0gJ1wwJzsKLQkgICAgCi0gICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotICAgIGlmICh0b2tlbiAhPSAnOicpIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIn
OicgbWlzc2luZyBhZnRlciBleHRlbnNpb24gbmFtZSIpOwotICAgICAgICByZXR1cm4gdG9rZW47
Ci0gICAgfQotICAgIAotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIp
IHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJiZWhhdmlvciBmb3IgZXh0ZW5zaW9uIG5vdCBz
cGVjaWZpZWQiKTsKLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIHVwZGF0ZUV4
dGVuc2lvbkJlaGF2aW9yKGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2
YWxwcC0+c2NfaWRlbnQpKTsKLQotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQlpZiAodG9rZW4gPT0gJ1xuJyl7Ci0JCXJl
dHVybiB0b2tlbjsKLQl9Ci0JZWxzZXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRl
bnNpb24iKTsKLQl9Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBDUFBleHRlbnNpb24KLQotaW50
IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
Y29uc3QgY2hhciAqbWVzc2FnZTsKLQotICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikg
ewotICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsKLSAgICAg
ICAgICAgICB0b2tlbiA9IENQUGRlZmluZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
eXlsdmFscHAtPnNjX2lkZW50ID09IGVsc2VBdG9tKSB7Ci0JCQkgaWYoQ2hrQ29ycmVjdEVsc2VO
ZXN0aW5nKCkpewotICAgICAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCApewotICAgICAg
ICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIG1pc21hdGNoIik7Ci0gICAg
ICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAg
ICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNl
IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8v
IEVPRiBvciBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gI2lmZGVmIHByZXByb2Nlc3NvciBkaXJl
Y3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICB9Ci0JCQkgICAgIHRva2VuID0gQ1BQZWxzZSgwLCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7Ci0gICAgICAgICAgICAgICAgIGNwcC0+
aWZkZXB0aCA9IDA7Ci0gICAgICAgICAgICAgICAgIGNwcC0+ZWxzZXRyYWNrZXIgPSAwOwotICAg
ICAgICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0gICAgICAgICAgICAg
ICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgfQotCQl9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlbGlmQXRv
bSkgewotICAgICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpewotICAgICAgICAgICAgICAgICBD
UFBFcnJvclRvSW5mb0xvZygiI2VsaWYgbWlzbWF0Y2giKTsKLSAgICAgICAgICAgICAgICAgY3Bw
LT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICB9IAotICAgICAgICAgICAgLy8gdGhpcyB0b2tlbiBpcyByZWFsbHkgYSBkb250IGNhcmUsIGJ1
dCB3ZSBzdGlsbCBuZWVkIHRvIGVhdCB0aGUgdG9rZW5zCi0gICAgICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7IAotICAg
ICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdCB0b2tlbnMgZm9sbG93aW5n
ICNlbGlmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAg
ICAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0JCSAgICB0
b2tlbiA9IENQUGVsc2UoMCwgeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBw
LT5zY19pZGVudCA9PSBlbmRpZkF0b20pIHsKLSAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0
aCl7Ci0gICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzbWF0Y2gi
KTsKLSAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgLS1jcHAtPmlmZGVwdGg7Ci0KLSAgICAgICAgICAgICBpZiAoY3BwLT5lbHNldHJh
Y2tlcikKLSAgICAgICAgICAgICAgICAgLS1jcHAtPmVsc2V0cmFja2VyOwotCi0JICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlmQXRvbSkgewotICAgICAgICAgICAgIHRva2Vu
ID0gQ1BQaWYoeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVu
dCA9PSBpZmRlZkF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDEsIHl5bHZh
bHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZuZGVmQXRv
bSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQaWZkZWYoMCwgeXlsdmFscHApOwotICAgICAg
ICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBsaW5lQXRvbSkgewotICAgICAgICAg
ICAgIHRva2VuID0gQ1BQbGluZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFs
cHAtPnNjX2lkZW50ID09IHByYWdtYUF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUHBy
YWdtYSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IHVuZGVmQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQdW5kZWYoeXlsdmFscHApOwot
ICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlcnJvckF0b20pIHsKLSAg
ICAgICAgICAgICB0b2tlbiA9IENQUGVycm9yKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gdmVyc2lvbkF0b20pIHsKLSAgICAgICAgICAgIHRva2Vu
ID0gQ1BQdmVyc2lvbih5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGV4dGVuc2lvbkF0b20pIHsKLSAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5z
aW9uKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0b3JlU3RyKCJJ
bnZhbGlkIERpcmVjdGl2ZSIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9t
KGF0YWJsZSx5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3Ry
ZnJvbVRTdHIoKTsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICAg
ICAgICAgIFJlc2V0VFN0cmluZygpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlICh0b2tl
biAhPSAnXG4nICYmIHRva2VuICE9IDAgJiYgdG9rZW4gIT0gRU9GKSB7Ci0JCXRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQl9Ci0g
ICAgICAgIAotICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKLQotICAgIHJldHVybiB0
b2tlbjsKLX0gLy8gcmVhZENQUGxpbmUKLQotdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMp
IHsKLSAgICBEZWxldGVUb2tlblN0cmVhbShzLT5ib2R5KTsKLX0KLQotdm9pZCBQcmVkZWZpbmVJ
bnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9j
YXRpb24gPSB7MCwgMH07Ci0gICAgU3ltYm9sICpzeW1ib2wgPSBOVUxMOwotICAgIE1hY3JvU3lt
Ym9sIG1hY3JvID0gezAsIE5VTEwsIE5VTEwsIDAsIDB9OwotICAgIHl5c3R5cGVwcCB2YWwgPSB7
MCwgMC4wLCAwLCB7MH19OwotICAgIGludCBhdG9tID0gMDsKLQotICAgIG1hY3JvLmJvZHkgPSBO
ZXdUb2tlblN0cmVhbShuYW1lLCBtYWNyb3MtPnBvb2wpOwotICAgIHZhbC5zY19pbnQgPSB2YWx1
ZTsKLSAgICBzbnByaW50Zih2YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwg
IiVkIiwgdmFsdWUpOwotICAgIFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFO
VCwgJnZhbCk7Ci0gICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwotICAg
IHN5bWJvbCA9IEFkZFN5bWJvbCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7Ci0g
ICAgc3ltYm9sLT5kZXRhaWxzLm1hYyA9IG1hY3JvOwotfQotCi1zdGF0aWMgaW50IGVvZl9zY2Fu
KElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgcmV0dXJuIC0xOyB9Ci1zdGF0
aWMgdm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkg
eyB9Ci0KLXN0YXRpYyB2b2lkIFB1c2hFb2ZTcmMoKSB7Ci0gICAgSW5wdXRTcmMgKmluID0gbWFs
bG9jKHNpemVvZihJbnB1dFNyYykpOwotICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKElucHV0U3Jj
KSk7Ci0gICAgaW4tPnNjYW4gPSBlb2Zfc2NhbjsKLSAgICBpbi0+Z2V0Y2ggPSBlb2Zfc2NhbjsK
LSAgICBpbi0+dW5nZXRjaCA9IG5vb3A7Ci0gICAgaW4tPnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1
dDsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluOwotfQotCi1zdGF0aWMgdm9pZCBQb3BFb2ZT
cmMoKSB7Ci0gICAgaWYgKGNwcC0+Y3VycmVudElucHV0LT5zY2FuID09IGVvZl9zY2FuKSB7Ci0g
ICAgICAgIElucHV0U3JjICppbiA9IGNwcC0+Y3VycmVudElucHV0OwotICAgICAgICBjcHAtPmN1
cnJlbnRJbnB1dCA9IGluLT5wcmV2OwotICAgICAgICBmcmVlKGluKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyBUb2tlblN0cmVhbSAqUHJlc2Nhbk1hY3JvQXJnKFRva2VuU3RyZWFtICphLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkgewotICAgIGludCB0b2tlbjsKLSAgICBUb2tlblN0cmVhbSAqbjsKLSAg
ICBSZXdpbmRUb2tlblN0cmVhbShhKTsKLSAgICBkbyB7Ci0gICAgICAgIHRva2VuID0gUmVhZFRv
a2VuKGEsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYm
IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICB9IHdoaWxlICh0b2tlbiA+IDApOwotICAgIGlmICh0b2tlbiA8PSAwKSByZXR1
cm4gYTsKLSAgICBuID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwotICAgIFB1c2hF
b2ZTcmMoKTsKLSAgICBSZWFkRnJvbVRva2VuU3RyZWFtKGEsIDAsIDApOwotICAgIHdoaWxlICgo
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApKSA+IDApIHsKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYmIE1hY3Jv
RXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIFJlY29yZFRva2VuKG4sIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgfQotICAg
IFBvcEVvZlNyYygpOwotICAgIERlbGV0ZVRva2VuU3RyZWFtKGEpOwotICAgIHJldHVybiBuOwot
fSAvLyBQcmVzY2FuTWFjcm9BcmcKLQotdHlwZWRlZiBzdHJ1Y3QgTWFjcm9JbnB1dFNyYyB7Ci0g
ICAgSW5wdXRTcmMgICAgYmFzZTsKLSAgICBNYWNyb1N5bWJvbCAqbWFjOwotICAgIFRva2VuU3Ry
ZWFtICoqYXJnczsKLX0gTWFjcm9JbnB1dFNyYzsKLQotLyogbWFjcm9fc2NhbiAtLS0KLSoqIHJl
dHVybiB0aGUgbmV4dCB0b2tlbiBmb3IgYSBtYWNybyBleHBhbmlvbiwgaGFuZGxpbmcgbWFjcm8g
YXJncyAKLSovCi1zdGF0aWMgaW50IG1hY3JvX3NjYW4oTWFjcm9JbnB1dFNyYyAqaW4sIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IGk7Ci0gICAgaW50IHRva2VuID0gUmVhZFRva2Vu
KGluLT5tYWMtPmJvZHksIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJ
RVIpIHsKLSAgICAgICAgZm9yIChpID0gaW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0pCi0gICAg
ICAgICAgICBpZiAoaW4tPm1hYy0+YXJnc1tpXSA9PSB5eWx2YWxwcC0+c2NfaWRlbnQpIGJyZWFr
OwotICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICBSZWFkRnJvbVRva2VuU3RyZWFt
KGluLT5hcmdzW2ldLCB5eWx2YWxwcC0+c2NfaWRlbnQsIDApOwotICAgICAgICAgICAgcmV0dXJu
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2VuOwotICAgIGlu
LT5tYWMtPmJ1c3kgPSAwOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsK
LSAgICBpZiAoaW4tPmFyZ3MpIHsKLSAgICAgICAgZm9yIChpPWluLT5tYWMtPmFyZ2MtMTsgaT49
MDsgaS0tKQotICAgICAgICAgICAgRGVsZXRlVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0pOwotICAg
ICAgICBmcmVlKGluLT5hcmdzKTsKLSAgICB9Ci0gICAgZnJlZShpbik7Ci0gICAgcmV0dXJuIGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci19IC8v
IG1hY3JvX3NjYW4KLQotLyogTWFjcm9FeHBhbmQKLSoqIGNoZWNrIGFuIGlkZW50aWZpZXIgKGF0
b20pIHRvIHNlZSBpZiBpdCBhIG1hY3JvIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgotKiogSWYg
aXQgaXMsIHB1c2ggYW4gSW5wdXRTcmMgdGhhdCB3aWxsIHByb2R1Y2UgdGhlIGFwcHJvcHJpYXRl
IGV4cGFuc2lvbgotKiogYW5kIHJldHVybiBUUlVFLiAgSWYgbm90LCByZXR1cm4gRkFMU0UuCi0q
LwotCi1pbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewot
ICAgIFN5bWJvbCAgICAgICAgICAgICAgKnN5bSA9IExvb2tVcFN5bWJvbChtYWNyb3MsIGF0b20p
OwotICAgIE1hY3JvSW5wdXRTcmMgICAgICAgKmluOwotICAgIGludCBpLGosIHRva2VuLCBkZXB0
aD0wOwotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0JaWYgKGF0b20gPT0gX19MSU5FX19BdG9t
KSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAg
IHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAi
JWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RB
TlQsIHl5bHZhbHBwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmIChhdG9tID09
IF9fRklMRV9fQXRvbSkgewotICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVt
YmVyKCk7Ci0gICAgICAgIHNucHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJP
TF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgVW5nZXRUb2tl
bihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQot
CWlmIChhdG9tID09IF9fVkVSU0lPTl9fQXRvbSkgewotICAgICAgICBzdHJjcHkoeXlsdmFscHAt
PnN5bWJvbF9uYW1lLEVTU0xfVkVSU0lPTl9TVFJJTkcpOwotICAgICAgICB5eWx2YWxwcC0+c2Nf
aW50ID0gYXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotICAgICAgICBVbmdldFRva2VuKENQ
UF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAg
aWYgKCFzeW0gfHwgc3ltLT5kZXRhaWxzLm1hYy51bmRlZikgcmV0dXJuIDA7Ci0gICAgaWYgKHN5
bS0+ZGV0YWlscy5tYWMuYnVzeSkgcmV0dXJuIDA7ICAgICAgICAvLyBubyByZWN1cnNpdmUgZXhw
YW5zaW9ucwotICAgIGluID0gbWFsbG9jKHNpemVvZigqaW4pKTsKLSAgICBtZW1zZXQoaW4sIDAs
IHNpemVvZigqaW4pKTsKLSAgICBpbi0+YmFzZS5zY2FuID0gKHZvaWQgKiltYWNyb19zY2FuOwot
ICAgIGluLT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICBpbi0+YmFz
ZS5uYW1lID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7Ci0gICAgaW4tPm1hYyA9ICZzeW0tPmRl
dGFpbHMubWFjOwotICAgIGlmIChzeW0tPmRldGFpbHMubWFjLmFyZ3MpIHsKLSAgICAgICAgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotCQlpZiAodG9rZW4gIT0gJygnKSB7Ci0gICAgICAgICAgICBVbmdldFRva2VuKHRva2VuLCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBhdG9tOwotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaW4tPmFyZ3MgPSBtYWxsb2MoaW4t
Pm1hYy0+YXJnYyAqIHNpemVvZihUb2tlblN0cmVhbSAqKSk7Ci0gICAgICAgIGZvciAoaT0wOyBp
PGluLT5tYWMtPmFyZ2M7IGkrKykKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0gTmV3VG9rZW5T
dHJlYW0oIm1hY3JvIGFyZyIsIDApOwotCQlpPTA7aj0wOwotICAgICAgICBkb3sKLSAgICAgICAg
ICAgIGRlcHRoID0gMDsKLQkJCXdoaWxlKDEpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVT
dHIoIkVPRiBpbiBNYWNybyAiKTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3Ry
aW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0
U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3Nh
Z2UpOwotICAgICAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKChp
bi0+bWFjLT5hcmdjPT0wKSAmJiAodG9rZW4hPScpJykpIGJyZWFrOwotICAgICAgICAgICAgICAg
IGlmIChkZXB0aCA9PSAwICYmICh0b2tlbiA9PSAnLCcgfHwgdG9rZW4gPT0gJyknKSkgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKLSAgICAgICAgICAg
ICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOwotICAgICAgICAgICAgICAgIFJlY29yZFRv
a2VuKGluLT5hcmdzW2ldLCB0b2tlbiwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGo9MTsK
LQkJCX0KLSAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIHsKLSAgICAgICAgICAgICAgICBp
ZigoaW4tPm1hYy0+YXJnYz09MSkgJiZqPT0wKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpKys7Ci0JCX13aGlsZShpIDwgaW4tPm1hYy0+YXJnYyk7Ci0KLSAg
ICAgICAgaWYgKGkgPCBpbi0+bWFjLT5hcmdjKSB7Ci0gICAgICAgICAgICBTdG9yZVN0cigiVG9v
IGZldyBhcmdzIGluIE1hY3JvICIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZB
dG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7
Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAgICBSZXNl
dFRTdHJpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiAhPSAnKScpIHsKLSAgICAgICAg
ICAgIGRlcHRoPTA7Ci0JCQl3aGlsZSAodG9rZW4gPj0gMCAmJiAoZGVwdGggPiAwIHx8IHRva2Vu
ICE9ICcpJykpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOwot
ICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBk
ZXB0aCsrOwotICAgICAgICAgICAgfQotCQkJCi0gICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkg
ewotICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7Ci0gICAgICAgICAg
ICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAg
ICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZyhtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0b3JlU3Ry
KCJUb28gbWFueSBhcmdzIGluIE1hY3JvICIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3Ry
aW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21U
U3RyKCk7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAg
ICBSZXNldFRTdHJpbmcoKTsKLQkJfQotCQlmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBpKysp
IHsKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0gUHJlc2Nhbk1hY3JvQXJnKGluLT5hcmdzW2ld
LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgMAotICAgIHByaW50ZigiICA8JXM6
JWQ+Zm91bmQgbWFjcm8gJXNcbiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBsb2MuZmlsZSksCi0g
ICAgICAgICAgIGxvYy5saW5lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRvbSkpOwotICAgIGZv
ciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykgewotICAgICAgICBwcmludGYoIlx0YXJnICVz
ID0gJyIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBpbi0+bWFjLT5hcmdzW2ldKSk7Ci0gICAgICAg
IER1bXBUb2tlblN0cmVhbShzdGRvdXQsIGluLT5hcmdzW2ldKTsKLSAgICAgICAgcHJpbnRmKCIn
XG4iKTsKLSAgICB9Ci0jZW5kaWYKLQkvKnJldGFpbiB0aGUgaW5wdXQgc291cmNlKi8KLSAgICBp
bi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgc3ltLT5kZXRhaWxzLm1hYy5i
dXN5ID0gMTsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShzeW0tPmRldGFpbHMubWFjLmJvZHkpOwot
ICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVybiAxOwotfSAvLyBN
YWNyb0V4cGFuZAotCi1pbnQgQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZvaWQpCi17Ci0gICAgLy8g
c2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBlbHNldHJhY2tlciBpcyBpbiBhIHZhbGlkIHJhbmdl
Ci0gICAgaWYgKGNwcC0+ZWxzZXRyYWNrZXIgPCAwIHx8IGNwcC0+ZWxzZXRyYWNrZXIgPj0gTUFY
X0lGX05FU1RJTkcpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGNwcC0+
ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID09IDApIHsKLSAgICAgICAgY3BwLT5lbHNlZGVw
dGhbY3BwLT5lbHNldHJhY2tlcl0gPSAxOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDgwMmUyM2UuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAK
LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9y
YXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0
d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZv
bGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24g
b3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFj
Y2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UK
LXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3Jl
ZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRo
ZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1s
aWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElB
IHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1v
ZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhv
dXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRl
ZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QK
LXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0
aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1
dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFy
a3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5W
SURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBm
cm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBu
byBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50
ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBh
dGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29y
a3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUK
LWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhF
IE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBX
SVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBS
RVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJ
VFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BF
UkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNU
Uy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUws
IElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZ
Ci1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RS
SUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRI
RVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Up
LCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVO
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0vLwotLy8gY3BwLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX0NQUF9IKQotI2Rl
ZmluZSBfX0NQUF9IIDEKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIu
aCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0KLWludCBJbml0
Q1BQKHZvaWQpOwotaW50IEZpbmFsQ1BQKHZvaWQpOwotaW50ICByZWFkQ1BQbGluZSh5eXN0eXBl
cHAgKiB5eWx2YWxwcCk7Ci1pbnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5
bHZhbHBwKTsKLWludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9pZCk7Ci0KLXR5cGVkZWYgc3Ry
dWN0IE1hY3JvU3ltYm9sIHsKLSAgICBpbnQgYXJnYzsKLSAgICBpbnQgKmFyZ3M7Ci0gICAgVG9r
ZW5TdHJlYW0gKmJvZHk7Ci0gICAgdW5zaWduZWQgYnVzeToxOwotICAgIHVuc2lnbmVkIHVuZGVm
OjE7Ci19IE1hY3JvU3ltYm9sOwotCi12b2lkIEZyZWVNYWNybyhNYWNyb1N5bWJvbCAqKTsKLXZv
aWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKLQotdm9p
ZCAgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKTsgICAgICAvLyBQcmludHMgaW5mb3Jt
YXRpb24gaW50byBkZWJ1ZyBsb2cKLXZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7
ICAgICAgICAgLy8gU3RvcmUgY3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvZwotdm9pZCAgQ1BQ
V2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpOyAvLyBQcmludHMgd2FybmluZyBtZXNz
YWdlcyBpbnRvIGluZm8gbG9nCi12b2lkICBIYW5kbGVQcmFnbWEoY29uc3QgY2hhcioqLCBpbnQg
bnVtVG9rZW5zKTsgIC8vICNwcmFnbWEgZGlyZWN0aXZlIGNvbnRhaW5lci4KLXZvaWQgIFJlc2V0
VFN0cmluZyh2b2lkKTsgICAgICAgICAgICAgICAgICAgLy8gI2Vycm9yIE1lc3NhZ2UgYXMgVFN0
cmluZy4KLXZvaWQgIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIqKTsgICAgICAgLy8gU3Rp
Y2sgYWxsIGNwcCBlcnJvcnMgaW50byBTaC5JbmZvLmxvZy4KLXZvaWQgIFN0b3JlU3RyKGNvbnN0
IGNoYXIqKTsgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIFRTdHJpbmcgaW4gUGFyc2UgQ29u
dGV4dC4KLXZvaWQgIFNldExpbmVOdW1iZXIoaW50KTsgICAgICAgICAgICAgICAgICAgLy8gU2V0
IGxpbmUgbnVtYmVyLiAgCi12b2lkICBTZXRTdHJpbmdOdW1iZXIoaW50KTsgICAgICAgICAgICAg
ICAgIC8vIFNldCBzdHJpbmcgbnVtYmVyLiAgICAKLWludCAgIEdldExpbmVOdW1iZXIodm9pZCk7
ICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIuIAotaW50
ICAgR2V0U3RyaW5nTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgU3RyaW5nIE51bWJlci4gCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKTsgICAg
ICAgICAgIC8vIENvbnZlcnQgVFN0cmluZyB0byBTdHJpbmcuICAKLXZvaWQgIHVwZGF0ZUV4dGVu
c2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsK
LWludCAgIEZyZWVDUFAodm9pZCk7Ci0KLSNlbmRpZiAvLyAhKGRlZmluZWQoX19DUFBfSCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY3Bwc3RydWN0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NwcHN0cnVjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNm
ZjMxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3
YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBv
ciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNj
ZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQot
dGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
IHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhl
c2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxp
Y2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEg
c29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9k
aWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91
dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVk
IHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAot
cmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRo
ZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0
aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJr
cywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJ
RElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZy
b20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5v
IG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRl
ZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0
ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3Jr
cyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQot
aW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUg
TlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJ
VEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF
U1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElU
WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVS
QVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RT
LgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg
SU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkK
LU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJ
QlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhF
UiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSks
IFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KLS8vCi0vLyBjcHBzdHJ1Y3QuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgiCi0KLUNQUFN0cnVjdCAgKmNwcCAgICAgID0gTlVMTDsKLXN0YXRpYyBpbnQgIHJl
ZkNvdW50ID0gMDsKLQotaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1pbnQgUmVzZXRQcmVw
cm9jZXNzb3Iodm9pZCk7Ci1pbnQgRnJlZUNQUFN0cnVjdCh2b2lkKTsKLWludCBGaW5hbGl6ZVBy
ZXByb2Nlc3Nvcih2b2lkKTsKLQotLyoKLSAqIEluaXRDUFBTdHJ1Y3QoKSAtIEluaXRpbGFpemUg
dGhlIENQUCBzdHJ1Y3R1cmUuCi0gKgotICovCi0KLWludCBJbml0Q1BQU3RydWN0KHZvaWQpCi17
Ci0gICAgaW50IGxlbjsKLSAgICBjaGFyICpwOwotCi0gICAgY3BwID0gKENQUFN0cnVjdCAqKSBt
YWxsb2Moc2l6ZW9mKENQUFN0cnVjdCkpOwotICAgIGlmIChjcHAgPT0gTlVMTCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZWZDb3VudCsrOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwdWJsaWMg
bWVtYmVyczoKLSAgICBjcHAtPnBMYXN0U291cmNlTG9jID0gJmNwcC0+bGFzdFNvdXJjZUxvYzsK
LSAgICAKLQlwID0gKGNoYXIgKikgJmNwcC0+b3B0aW9uczsKLSAgICBsZW4gPSBzaXplb2YoY3Bw
LT5vcHRpb25zKTsKLSAgICB3aGlsZSAoLS1sZW4gPj0gMCkKLSAgICAgICAgcFtsZW5dID0gMDsK
LSAgICAgCi0gICAgUmVzZXRQcmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gMTsKLX0gLy8gSW5p
dENQUFN0cnVjdAotCi1pbnQgUmVzZXRQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICAvLyBJbml0
aWFsaXplIHByaXZhdGUgbWVtYmVyczoKLQotICAgIGNwcC0+bGFzdFNvdXJjZUxvYy5maWxlID0g
MDsKLSAgICBjcHAtPmxhc3RTb3VyY2VMb2MubGluZSA9IDA7Ci0gICAgY3BwLT5wQyA9IDA7Ci0g
ICAgY3BwLT5Db21waWxlRXJyb3IgPSAwOwotICAgIGNwcC0+aWZkZXB0aCA9IDA7Ci0gICAgZm9y
KGNwcC0+ZWxzZXRyYWNrZXIgPSAwOyBjcHAtPmVsc2V0cmFja2VyIDwgTUFYX0lGX05FU1RJTkc7
IGNwcC0+ZWxzZXRyYWNrZXIrKykKLSAgICAgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJh
Y2tlcl0gPSAwOwotICAgIGNwcC0+ZWxzZXRyYWNrZXIgPSAwOwotICAgIGNwcC0+dG9rZW5zQmVm
b3JlRU9GID0gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotLy9JbnRpYWxpemluZyB0aGUgUHJlcHJv
Y2Vzc29yLgotCi1pbnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKQotewotICAgIyAgZGVmaW5lIENQ
UF9TVFVGRiB0cnVlCi0gICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgotICAgICAgICAgICAgRnJl
ZUNQUFN0cnVjdCgpOwotICAgICAgICAgICAgSW5pdENQUFN0cnVjdCgpOwotICAgICAgICAgICAg
Y3BwLT5vcHRpb25zLlF1aWV0ID0gMTsKLSAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5wcm9maWxl
U3RyaW5nID0gImdlbmVyaWMiOwotICAgICAgICAgICAgaWYgKCFJbml0QXRvbVRhYmxlKGF0YWJs
ZSwgMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAoIUluaXRT
Y2FubmVyKGNwcCkpCi0JICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIyAgZW5kaWYKLSAg
cmV0dXJuIDA7IAotfQotCi0vL0ZyZWVDUFBTdHJ1Y3QoKSAtIEZyZWUgdGhlIENQUCBzdHJ1Y3R1
cmUuCi0KLWludCBGcmVlQ1BQU3RydWN0KHZvaWQpCi17Ci0gICAgaWYgKHJlZkNvdW50KQotICAg
IHsKLSAgICAgICBmcmVlKGNwcCk7Ci0gICAgICAgcmVmQ291bnQtLTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIDE7Ci19Ci0KLS8vRmluYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgotCi1pbnQg
RmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICMgIGRlZmluZSBDUFBfU1RVRkYgdHJ1
ZQotICAgICAgICAjICBpZmRlZiBDUFBfU1RVRkYKLSAgICAgICAgICAgIEZyZWVBdG9tVGFibGUo
YXRhYmxlKTsKLSAgICAgICAgICAgIEZyZWVDUFBTdHJ1Y3QoKTsKLSAgICAgICAgICAgIEZyZWVT
Y2FubmVyKCk7Ci0gICAgICAgIyAgZW5kaWYKLSAgcmV0dXJuIDA7IAotfQotCi0KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLyBFbmQgb2YgY3Bwc3RydWN0LmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2dlbmVyYXRlX3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvZ2VuZXJhdGVfcGFyc2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLmU5YzcwYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2dlbmVyYXRlX3BhcnNlci5zaApA
QCAtMCwwICsxLDI2IEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyB2YXJpb3VzIGNv
bXBvbmVudHMgb2YgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCisKK3J1bl9mbGV4KCkKK3sKK2lucHV0
X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2ZsZXgg
LS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUK
K30KKworcnVuX2Jpc29uKCkKK3sKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9z
b3VyY2U9JHNjcmlwdF9kaXIvJDIKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMg
LS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK30KKworc2NyaXB0X2Rpcj0kKGRp
cm5hbWUgJDApCisKKyMgR2VuZXJhdGUgcHJlcHJvY2Vzc29yCitydW5fZmxleCBUb2tlbml6ZXIu
bCBUb2tlbml6ZXIuY3BwCitydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJlc3Npb25Q
YXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDI5NTIxYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAg
QEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29y
cG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBz
b2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhl
IGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRp
b24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVz
IGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhl
c2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJp
YnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBh
Z3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRv
IHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZl
Ci1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJ
RElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2Us
IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdp
dGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92
aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11
c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFu
ZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3Ry
aWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRl
bWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUK
LU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
biBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNl
LCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdy
YW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55
IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQot
d29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkg
YmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQot
VEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lT
LCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBF
WFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFC
SUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQg
T1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9E
VUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJ
QUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkg
V0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJ
U1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdI
RVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCi0vLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZuZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8c3Rk
aW50Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
aCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcw
NikKLSNlbmRpZgotCi0vLyBkZWZhdWx0IGFsaWdubWVudCBhbmQgY2h1bmtzaXplLCBpZiBjYWxs
ZWQgd2l0aCAwIGFyZ3VtZW50cwotI2RlZmluZSBDSFVOS1NJWkUgICAgICAgKDY0KjEwMjQpCi0j
ZGVmaW5lIEFMSUdOICAgICAgICAgICA4Ci0KLS8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgYHJlYWwn
IG1hbGxvYyBhbmQgZnJlZSwgbm90IG91ciByZXBsYWNlbWVudHMKLSN1bmRlZiBtYWxsb2MKLSN1
bmRlZiBmcmVlCi0KLXN0cnVjdCBjaHVuayB7Ci0gICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4
dDsKLX07Ci0KLXN0cnVjdCBjbGVhbnVwIHsKLSAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpuZXh0
OwotICAgIHZvaWQgICAgICAgICAgICAgICAgKCpmbikodm9pZCAqKTsKLSAgICB2b2lkICAgICAg
ICAgICAgICAgICphcmc7Ci19OwotCi1zdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgewotICAgIHN0cnVj
dCBjaHVuayAgICAgICAgKm5leHQ7Ci0gICAgdWludHB0cl90ICAgICAgICAgICBmcmVlLCBlbmQ7
Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICBjaHVua3NpemU7Ci0gICAgdWludHB0cl90ICAgICAg
ICAgICBhbGlnbm1hc2s7Ci0gICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsKLX07Ci0K
LU1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGlu
dCBhbGlnbikKLXsKLSAgICBNZW1vcnlQb29sICAqcG9vbDsKLQotICAgIGlmIChhbGlnbiA9PSAw
KSBhbGlnbiA9IEFMSUdOOwotICAgIGlmIChjaHVua3NpemUgPT0gMCkgY2h1bmtzaXplID0gQ0hV
TktTSVpFOwotICAgIGlmIChhbGlnbiAmIChhbGlnbi0xKSkgcmV0dXJuIDA7Ci0gICAgaWYgKGNo
dW5rc2l6ZSA8IHNpemVvZihNZW1vcnlQb29sKSkgcmV0dXJuIDA7Ci0gICAgaWYgKGNodW5rc2l6
ZSAmIChhbGlnbi0xKSkgcmV0dXJuIDA7Ci0gICAgaWYgKCEocG9vbCA9IG1hbGxvYyhjaHVua3Np
emUpKSkgcmV0dXJuIDA7Ci0gICAgcG9vbC0+bmV4dCA9IDA7Ci0gICAgcG9vbC0+Y2h1bmtzaXpl
ID0gY2h1bmtzaXplOwotICAgIHBvb2wtPmFsaWdubWFzayA9ICh1aW50cHRyX3QpKGFsaWduKS0x
OyAgCi0gICAgcG9vbC0+ZnJlZSA9ICgodWludHB0cl90KShwb29sICsgMSkgKyBwb29sLT5hbGln
bm1hc2spICYgfnBvb2wtPmFsaWdubWFzazsKLSAgICBwb29sLT5lbmQgPSAodWludHB0cl90KXBv
b2wgKyBjaHVua3NpemU7Ci0gICAgcG9vbC0+Y2xlYW51cCA9IDA7Ci0gICAgcmV0dXJuIHBvb2w7
Ci19Ci0KLXZvaWQgbWVtX0ZyZWVQb29sKE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0gICAgc3RydWN0
IGNsZWFudXAgICAgICAqY2xlYW51cDsKLSAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpwLCAqbmV4
dDsKLQotICAgIGZvciAoY2xlYW51cCA9IHBvb2wtPmNsZWFudXA7IGNsZWFudXA7IGNsZWFudXAg
PSBjbGVhbnVwLT5uZXh0KSB7Ci0gICAgICAgIGNsZWFudXAtPmZuKGNsZWFudXAtPmFyZyk7Ci0g
ICAgfQotICAgIGZvciAocCA9IChzdHJ1Y3QgY2h1bmsgKilwb29sOyBwOyBwID0gbmV4dCkgewot
ICAgICAgICBuZXh0ID0gcC0+bmV4dDsKLSAgICAgICAgZnJlZShwKTsKLSAgICB9Ci19Ci0KLXZv
aWQgKm1lbV9BbGxvYyhNZW1vcnlQb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzdHJ1
Y3QgY2h1bmsgKmNoOwotICAgIHZvaWQgKnJ2ID0gKHZvaWQgKilwb29sLT5mcmVlOwotICAgIHNp
emUgPSAoc2l6ZSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOwotICAgIGlm
IChzaXplIDw9IDApIHNpemUgPSBwb29sLT5hbGlnbm1hc2s7Ci0gICAgcG9vbC0+ZnJlZSArPSBz
aXplOwotICAgIGlmIChwb29sLT5mcmVlID4gcG9vbC0+ZW5kIHx8IHBvb2wtPmZyZWUgPCAodWlu
dHB0cl90KXJ2KSB7Ci0gICAgICAgIHNpemVfdCBtaW5yZXEgPSAoc2l6ZSArIHNpemVvZihzdHJ1
Y3QgY2h1bmspICsgcG9vbC0+YWxpZ25tYXNrKQotICAgICAgICAgICAgICAgICAgICAgICYgfnBv
b2wtPmFsaWdubWFzazsKLSAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpcnY7Ci0gICAg
ICAgIGlmIChtaW5yZXEgPj0gcG9vbC0+Y2h1bmtzaXplKSB7Ci0gICAgICAgICAgICAvLyByZXF1
ZXN0IHNpemUgaXMgdG9vIGJpZyBmb3IgdGhlIGNodW5rc2l6ZSwgc28gYWxsb2NhdGUgaXQgYXMK
LSAgICAgICAgICAgIC8vIGEgc2luZ2xlIGNodW5rIG9mIHRoZSByaWdodCBzaXplCi0gICAgICAg
ICAgICBjaCA9IG1hbGxvYyhtaW5yZXEpOwotICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaCA9IG1hbGxvYyhwb29sLT5jaHVua3Np
emUpOwotICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICBwb29sLT5m
cmVlID0gKHVpbnRwdHJfdCljaCArIG1pbnJlcTsKLSAgICAgICAgICAgIHBvb2wtPmVuZCA9ICh1
aW50cHRyX3QpY2ggKyBwb29sLT5jaHVua3NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgY2gtPm5l
eHQgPSBwb29sLT5uZXh0OwotICAgICAgICBwb29sLT5uZXh0ID0gY2g7Ci0gICAgICAgIHJ2ID0g
KHZvaWQgKikoKCh1aW50cHRyX3QpKGNoKzEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5h
bGlnbm1hc2spOwotICAgIH0KLSAgICByZXR1cm4gcnY7Ci19Ci0KLWludCBtZW1fQWRkQ2xlYW51
cChNZW1vcnlQb29sICpwb29sLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykgewotICAg
IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOwotCi0gICAgcG9vbC0+ZnJlZSA9IChwb29sLT5mcmVl
ICsgc2l6ZW9mKHZvaWQgKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQgKiktMSk7Ci0gICAgY2xlYW51
cCA9IG1lbV9BbGxvYyhwb29sLCBzaXplb2Yoc3RydWN0IGNsZWFudXApKTsKLSAgICBpZiAoIWNs
ZWFudXApIHJldHVybiAtMTsKLSAgICBjbGVhbnVwLT5uZXh0ID0gcG9vbC0+Y2xlYW51cDsKLSAg
ICBjbGVhbnVwLT5mbiA9IGZuOwotICAgIGNsZWFudXAtPmFyZyA9IGFyZzsKLSAgICBwb29sLT5j
bGVhbnVwID0gY2xlYW51cDsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmNhZGIzLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
LWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1J
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
Ci1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1l
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAot
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
LVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLSNpZm5kZWYgX19NRU1P
UllfSAotI2RlZmluZSBfX01FTU9SWV9ICi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotdHlwZWRl
ZiBzdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgTWVtb3J5UG9vbDsKLQotZXh0ZXJuIE1lbW9yeVBvb2wg
Km1lbV9DcmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7Ci1l
eHRlcm4gdm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5UG9vbCAqKTsKLWV4dGVybiB2b2lkICptZW1f
QWxsb2MoTWVtb3J5UG9vbCAqcCwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIHZvaWQgKm1lbV9SZWFs
bG9jKE1lbW9yeVBvb2wgKnAsIHZvaWQgKm9sZCwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBuZXdz
aXplKTsKLWV4dGVybiBpbnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcCwgdm9pZCAoKmZu
KSh2b2lkICopLCB2b2lkICphcmcpOwotCi0jZW5kaWYgLyogX19NRU1PUllfSCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlhZ25vc3RpY3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFhNzVhOWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaAorKysgL2Rldi9udWxsCkBAIC0x
LDgyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESUFHTk9TVElDU19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJ
Q1NfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBT
b3VyY2VMb2NhdGlvbjsKLQotLy8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5nIGRpYWdub3N0aWMg
bWVzc2FnZXMuCi0vLyBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBmb3JtYXR0
aW5nIGFuZCBwcmludGluZyB0aGUgbWVzc2FnZXMuCi1jbGFzcyBEaWFnbm9zdGljcwotewotICBw
dWJsaWM6Ci0gICAgZW51bSBTZXZlcml0eQotICAgIHsKLSAgICAgICAgRVJST1IsCi0gICAgICAg
IFdBUk5JTkcKLSAgICB9OwotICAgIGVudW0gSUQKLSAgICB7Ci0gICAgICAgIEVSUk9SX0JFR0lO
LAotICAgICAgICBJTlRFUk5BTF9FUlJPUiwKLSAgICAgICAgT1VUX09GX01FTU9SWSwKLSAgICAg
ICAgSU5WQUxJRF9DSEFSQUNURVIsCi0gICAgICAgIElOVkFMSURfTlVNQkVSLAotICAgICAgICBJ
TlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgIERJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgIEVP
Rl9JTl9DT01NRU5ULAotICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICBVTkVYUEVD
VEVEX1RPS0VOLAotICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAgICBNQUNS
T19OQU1FX1JFU0VSVkVELAotICAgICAgICBNQUNST19SRURFRklORUQsCi0gICAgICAgIE1BQ1JP
X1BSRURFRklORURfUkVERUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5F
RCwKLSAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAgIE1BQ1JP
X1RPT19GRVdfQVJHUywKLSAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKLSAgICAgICAgQ09O
RElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRI
T1VUX0lGLAotICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCi0gICAgICAgIENP
TkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRF
Ul9FTFNFLAotICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAgICAgIElOVkFM
SURfRVhURU5TSU9OX05BTUUsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAot
ICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFMSURfVkVS
U0lPTl9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAg
IElOVkFMSURfTElORV9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfRklMRV9OVU1CRVIsCi0gICAg
ICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCi0gICAgICAgIEVSUk9SX0VORCwKLQotICAgICAg
ICBXQVJOSU5HX0JFR0lOLAotICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAot
ICAgICAgICBVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAgICBXQVJOSU5HX0VORAotICAgIH07
Ci0KLSAgICB2aXJ0dWFsIH5EaWFnbm9zdGljcygpOwotCi0gICAgdm9pZCByZXBvcnQoSUQgaWQs
IGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKLQot
ICBwcm90ZWN0ZWQ6Ci0gICAgU2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOwotCi0gICAgdmlydHVh
bCB2b2lkIHByaW50KElEIGlkLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VM
b2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
dGV4dCkgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzQmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMzI1
NDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLQotI2lu
Y2x1ZGUgPGNhc3NlcnQ+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1EaWFnbm9zdGljczo6fkRpYWdu
b3N0aWNzKCkKLXsKLX0KLQotdm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgLy8gVE9ETyhh
bG9rcCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgotICAgIHByaW50KGlk
LCBsb2MsIHRleHQpOwotfQotCi1EaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNl
dmVyaXR5KElEIGlkKQotewotICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJS
T1JfRU5EKSkKLSAgICAgICAgcmV0dXJuIEVSUk9SOwotCi0gICAgaWYgKChpZCA+IFdBUk5JTkdf
QkVHSU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKLSAgICAgICAgcmV0dXJuIFdBUk5JTkc7Ci0K
LSAgICBhc3NlcnQoZmFsc2UpOwotICAgIHJldHVybiBFUlJPUjsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYWVlYzIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZl
SGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCi0jZGVm
aW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotCi0jaW5jbHVk
ZSA8c3RyaW5nPgotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFNvdXJjZUxvY2F0aW9uOwot
Ci0vLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgotLy8gUHJlcHJvY2Vzc29y
IHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgotLy8g
cHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUg
Zm9yCi0vLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KLWNsYXNzIERp
cmVjdGl2ZUhhbmRsZXIKLXsKLSAgcHVibGljOgotICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRs
ZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlv
biYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
bXNnKSA9IDA7Ci0KLSAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVso
dmFsdWUpXQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRp
b24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNv
dXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0j
ZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTkxZTFjLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXJCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaW5jbHVkZSAiRGlyZWN0aXZlSGFuZGxlci5oIgotCi1uYW1lc3BhY2UgcHAKLXsK
LQotRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVjdGl2ZUhhbmRsZXIoKQotewotfQotCi19ICAvLyBu
YW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODVhOTBlLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZVBhcnNlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTkgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKLQotI2luY2x1ZGUgPGNhc3Nl
cnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCi0jaW5jbHVkZSAi
RXhwcmVzc2lvblBhcnNlci5oIgotI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKLSNpbmNsdWRl
ICJUb2tlbi5oIgotI2luY2x1ZGUgIlRva2VuaXplci5oIgotCi1uYW1lc3BhY2UgewotZW51bSBE
aXJlY3RpdmVUeXBlCi17Ci0gICAgRElSRUNUSVZFX05PTkUsCi0gICAgRElSRUNUSVZFX0RFRklO
RSwKLSAgICBESVJFQ1RJVkVfVU5ERUYsCi0gICAgRElSRUNUSVZFX0lGLAotICAgIERJUkVDVElW
RV9JRkRFRiwKLSAgICBESVJFQ1RJVkVfSUZOREVGLAotICAgIERJUkVDVElWRV9FTFNFLAotICAg
IERJUkVDVElWRV9FTElGLAotICAgIERJUkVDVElWRV9FTkRJRiwKLSAgICBESVJFQ1RJVkVfRVJS
T1IsCi0gICAgRElSRUNUSVZFX1BSQUdNQSwKLSAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAotICAg
IERJUkVDVElWRV9WRVJTSU9OLAotICAgIERJUkVDVElWRV9MSU5FCi19OwotfSAgLy8gbmFtZXNw
YWNlCi0KLXN0YXRpYyBEaXJlY3RpdmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4q
IHRva2VuKQotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5l
KCJkZWZpbmUiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVm
KCJ1bmRlZiIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlm
Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYi
KTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVm
Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7
Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7Ci0g
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKLSAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOwotICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKLSAg
ICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9u
Iik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJz
aW9uIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5l
Iik7Ci0KLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQotICAg
ICAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Ci0KLSAgICBpZiAodG9rZW4tPnZhbHVlID09IGtE
aXJlY3RpdmVEZWZpbmUpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfREVGSU5FOwotICAgIGVs
c2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCi0gICAgICAgIHJldHVybiBE
SVJFQ1RJVkVfVU5ERUY7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJ
ZikKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZUlmZGVmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGREVGOwot
ICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQotICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX0lGTkRFRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUVsc2UpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRUxTRTsKLSAgICBlbHNlIGlm
ICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsaWYpCi0gICAgICAgIHJldHVybiBESVJFQ1RJ
VkVfRUxJRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQot
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VORElGOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlRXJyb3IpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVJST1I7Ci0g
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCi0gICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfUFJBR01BOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlRXh0ZW5zaW9uKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VYVEVOU0lPTjsKLSAg
ICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24pCi0gICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0Rp
cmVjdGl2ZUxpbmUpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfTElORTsKLQotICAgIHJldHVy
biBESVJFQ1RJVkVfTk9ORTsKLX0KLQotc3RhdGljIGJvb2wgaXNDb25kaXRpb25hbERpcmVjdGl2
ZShEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSkKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKLSAg
ICB7Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRjoKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVG
OgotICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgotICAgICAgY2FzZSBESVJFQ1RJVkVfRUxT
RToKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6Ci0gICAgICBjYXNlIERJUkVDVElWRV9FTkRJ
RjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIHJlcHJlc2Vu
dHMgRW5kIE9mIERpcmVjdGl2ZS4KLXN0YXRpYyBib29sIGlzRU9EKGNvbnN0IHBwOjpUb2tlbiog
dG9rZW4pCi17Ci0gICAgcmV0dXJuICh0b2tlbi0+dHlwZSA9PSAnXG4nKSB8fCAodG9rZW4tPnR5
cGUgPT0gcHA6OlRva2VuOjpMQVNUKTsKLX0KLQotc3RhdGljIHZvaWQgc2tpcFVudGlsRU9EKHBw
OjpMZXhlciogbGV4ZXIsIHBwOjpUb2tlbiogdG9rZW4pCi17Ci0gICAgd2hpbGUoIWlzRU9EKHRv
a2VuKSkKLSAgICB7Ci0gICAgICAgIGxleGVyLT5sZXgodG9rZW4pOwotICAgIH0KLX0KLQotc3Rh
dGljIGJvb2wgaXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKLXsK
LSAgICAvLyBOYW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSByZXNlcnZlZC4KLSAgICBpZiAo
bmFtZS5zdWJzdHIoMCwgMykgPT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Ly8gTmFtZXMgY29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2Vy
dmVkLgotICAgIGlmIChuYW1lLmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBp
c01hY3JvUHJlZGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpNYWNyb1NldCYgbWFjcm9TZXQpCi17Ci0gICAgcHA6
Ok1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFjcm9TZXQuZmluZChuYW1lKTsKLSAg
ICByZXR1cm4gaXRlciAhPSBtYWNyb1NldC5lbmQoKSA/IGl0ZXItPnNlY29uZC5wcmVkZWZpbmVk
IDogZmFsc2U7Ci19Ci0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBEZWZpbmVkUGFyc2VyIDog
cHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhl
ciwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvU2V0KiBtYWNyb1NldCwKLSAgICAgICAg
ICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgotICAgICAgICBtTGV4ZXIobGV4
ZXIpLAotICAgICAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAotICAgICAgICBtRGlhZ25vc3RpY3Mo
ZGlhZ25vc3RpY3MpCi0gICAgewotICAgIH0KLQotICBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIGxleChUb2tlbiogdG9rZW4pCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RlZmluZWQoImRlZmluZWQiKTsKLQotICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
Ci0gICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRva2VuLT52YWx1ZSAhPSBrRGVmaW5lZCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBib29sIHBhcmVuID0gZmFsc2U7Ci0gICAgICAgIG1M
ZXhlci0+bGV4KHRva2VuKTsKLSAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcoJykKLSAgICAg
ICAgewotICAgICAgICAgICAgcGFyZW4gPSB0cnVlOwotICAgICAgICAgICAgbUxleGVyLT5sZXgo
dG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJ
REVOVElGSUVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIHNraXBV
bnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0
b2tlbi0+dmFsdWUpOwotICAgICAgICBzdGQ6OnN0cmluZyBleHByZXNzaW9uID0gaXRlciAhPSBt
TWFjcm9TZXQtPmVuZCgpID8gIjEiIDogIjAiOwotCi0gICAgICAgIGlmIChwYXJlbikKLSAgICAg
ICAgewotICAgICAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOwotICAgICAgICAgICAgaWYgKHRv
a2VuLT50eXBlICE9ICcpJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdl
IGhhdmUgYSB2YWxpZCBkZWZpbmVkIG9wZXJhdG9yLgotICAgICAgICAvLyBDb252ZXJ0IHRoZSBj
dXJyZW50IHRva2VuIGludG8gYSBDT05TVF9JTlQgdG9rZW4uCi0gICAgICAgIHRva2VuLT50eXBl
ID0gVG9rZW46OkNPTlNUX0lOVDsKLSAgICAgICAgdG9rZW4tPnZhbHVlID0gZXhwcmVzc2lvbjsK
LSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAgICBMZXhlciogbUxleGVyOwotICAgIGNvbnN0IE1hY3Jv
U2V0KiBtTWFjcm9TZXQ7Ci0gICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKLX07Ci0KLURp
cmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZl
SGFuZGxlcikgOgotICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKLSAgICBtTWFjcm9TZXQobWFj
cm9TZXQpLAotICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCi0gICAgbURpcmVjdGl2ZUhh
bmRsZXIoZGlyZWN0aXZlSGFuZGxlcikKLXsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6Omxl
eChUb2tlbiogdG9rZW4pCi17Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxl
eCh0b2tlbik7Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghbUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRp
b25hbFN0YWNrLmJhY2soKTsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5URVJNSU5BVEVELAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLmxvY2F0aW9uLCBibG9jay50eXBlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICB9IHdoaWxlIChza2lw
cGluZygpIHx8ICh0b2tlbi0+dHlwZSA9PSAnXG4nKSk7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KHRva2VuLT50
eXBlID09IFRva2VuOjpQUF9IQVNIKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0g
ICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4pOwotCi0gICAg
Ly8gV2hpbGUgaW4gYW4gZXhjbHVkZWQgY29uZGl0aW9uYWwgYmxvY2svZ3JvdXAsCi0gICAgLy8g
d2Ugb25seSBwYXJzZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzLgotICAgIGlmIChza2lwcGluZygp
ICYmICFpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKGRpcmVjdGl2ZSkpCi0gICAgewotICAgICAgICBz
a2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc3dpdGNoKGRpcmVjdGl2ZSkKLSAgICB7Ci0gICAgICBjYXNlIERJUkVDVElWRV9OT05F
OgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RElSRUNUSVZFX0lO
VkFMSURfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0RFRklORToKLSAgICAgICAg
cGFyc2VEZWZpbmUodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZF
X1VOREVGOgotICAgICAgICBwYXJzZVVuZGVmKHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIERJUkVDVElWRV9JRjoKLSAgICAgICAgcGFyc2VJZih0b2tlbik7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6Ci0gICAgICAgIHBhcnNlSWZkZWYodG9r
ZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKLSAgICAg
ICAgcGFyc2VJZm5kZWYodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNU
SVZFX0VMU0U6Ci0gICAgICAgIHBhcnNlRWxzZSh0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKLSAgICAgICAgcGFyc2VFbGlmKHRva2VuKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9FTkRJRjoKLSAgICAgICAgcGFyc2VFbmRp
Zih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfRVJST1I6Ci0g
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElS
RUNUSVZFX1BSQUdNQToKLSAgICAgICAgcGFyc2VQcmFnbWEodG9rZW4pOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VYVEVOU0lPTjoKLSAgICAgICAgcGFyc2VFeHRlbnNp
b24odG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX1ZFUlNJT046
Ci0gICAgICAgIHBhcnNlVmVyc2lvbih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBESVJFQ1RJVkVfTElORToKLSAgICAgICAgcGFyc2VMaW5lKHRva2VuKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6TEFTVCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgfQotfQot
Ci12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQotewotICAg
IGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOwotCi0gICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklE
RU5USUZJRVIpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChpc01hY3JvUHJlZGVmaW5lZCh0b2tlbi0+dmFsdWUsICptTWFjcm9TZXQpKQotICAgIHsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURFRklORURf
UkVERUZJTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9O
YW1lUmVzZXJ2ZWQodG9rZW4tPnZhbHVlKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19OQU1FX1JFU0VSVkVELAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBNYWNybyBtYWNybzsKLSAgICBtYWNyby50eXBlID0gTWFjcm86
OmtUeXBlT2JqOwotICAgIG1hY3JvLm5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0KLSAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOwotICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5o
YXNMZWFkaW5nU3BhY2UoKSkKLSAgICB7Ci0gICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8u
IENvbGxlY3QgYXJndW1lbnRzLgotICAgICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVu
YzsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAg
ICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRv
a2VuLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBH
ZXQgJywnLgotICAgICAgICB9IHdoaWxlICh0b2tlbi0+dHlwZSA9PSAnLCcpOwotCi0gICAgICAg
IGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcpJy4KLSAgICB9
Ci0KLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24g
YmVjYXVzZSBpdCBpcyB1bm5lY2Vzc2FyeSBpbiByZXBsYWNlbWVudAotICAgICAgICAvLyBsaXN0
LiBSZXNldHRpbmcgaXQgYWxzbyBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRv
Ci0gICAgICAgIC8vIGNvbXBhcmUgbWFjcm9zLgotICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBT
b3VyY2VMb2NhdGlvbigpOwotICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0
b2tlbik7Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgfQotICAgIGlmICgh
bWFjcm8ucmVwbGFjZW1lbnRzLmVtcHR5KCkpCi0gICAgewotICAgICAgICAvLyBXaGl0ZXNwYWNl
IHByZWNlZGluZyB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0IG9m
Ci0gICAgICAgIC8vIHRoZSByZXBsYWNlbWVudCBsaXN0IGZvciBlaXRoZXIgZm9ybSBvZiBtYWNy
by4KLSAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmZyb250KCkuc2V0SGFzTGVhZGluZ1NwYWNl
KGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBmb3IgbWFjcm8gcmVkZWZpbml0aW9uLgot
ICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKG1hY3Jv
Lm5hbWUpOwotICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgJiYgIW1hY3JvLmVxdWFs
cyhpdGVyLT5zZWNvbmQpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6Ok1BQ1JPX1JFREVGSU5FRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5uYW1l
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtTWFjcm9TZXQtPmluc2VydChzdGQ6Om1h
a2VfcGFpcihtYWNyby5uYW1lLCBtYWNybykpOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6
cGFyc2VVbmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tl
bikgPT0gRElSRUNUSVZFX1VOREVGKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0g
ICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgIHsKLSAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0g
bU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7Ci0gICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0
LT5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX1BSRURFRklORURfVU5ERUZJTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbU1hY3JvU2V0LT5lcmFzZShpdGVyKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci19Ci0KLXZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZUlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGly
ZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUYpOwotICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0
b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmZGVmKFRva2VuKiB0b2tl
bikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYp
OwotICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGTkRFRik7Ci0gICAgcGFyc2VDb25kaXRpb25hbElmKHRv
a2VuKTsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZShUb2tlbiogdG9rZW4p
Ci17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMU0UpOwot
Ci0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lG
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRp
b25hbFN0YWNrLmJhY2soKTsKLSAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQotICAgIHsKLSAgICAg
ICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KLSAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCi0gICAgewotICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7
Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBibG9jay5mb3VuZEVsc2VHcm91cCA9IHRydWU7Ci0gICAgYmxvY2su
c2tpcEdyb3VwID0gYmxvY2suZm91bmRWYWxpZEdyb3VwOwotICAgIGJsb2NrLmZvdW5kVmFsaWRH
cm91cCA9IHRydWU7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMgYWZ0
ZXIgI2Vsc2UuCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAoIWlzRU9EKHRv
a2VuKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpD
T05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7Ci0gICAgfQotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VFbGlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfRUxJRik7Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkK
LSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9FTElGX1dJVEhPVVRfSUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbmRpdGlvbmFsQmxv
Y2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgIGlmIChibG9jay5za2lw
QmxvY2spCi0gICAgewotICAgICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lwIHRoZSB3
aG9sZSBsaW5lLgotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkKLSAgICB7
Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9F
TElGX0FGVEVSX0VMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYmxvY2suZm91bmRWYWxpZEdy
b3VwKQotICAgIHsKLSAgICAgICAgLy8gRG8gbm90IHBhcnNlIHRoZSBleHByZXNzaW9uLgotICAg
ICAgICAvLyBBbHNvIGJlIGNhcmVmdWwgbm90IHRvIGVtaXQgYSBkaWFnbm9zdGljLgotICAgICAg
ICBibG9jay5za2lwR3JvdXAgPSB0cnVlOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGV4cHJlc3Npb24g
PSBwYXJzZUV4cHJlc3Npb25JZih0b2tlbik7Ci0gICAgYmxvY2suc2tpcEdyb3VwID0gZXhwcmVz
c2lvbiA9PSAwOwotICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsK
LX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQotewot
ICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTkRJRik7Ci0KLSAg
ICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtQ29uZGl0aW9uYWxTdGFjay5wb3BfYmFjaygpOwotCi0gICAg
Ly8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNlbmRpZi4KLSAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOwotICAgIGlmICghaXNFT0QodG9rZW4pKQotICAgIHsKLSAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICB9
Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKFRva2VuKiB0b2tlbikKLXsK
LSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVJST1IpOwotCi0g
ICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9r
ZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3RyZWFtIDw8ICp0b2tlbjsKLSAgICAgICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB9Ci0gICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRs
ZUVycm9yKHRva2VuLT5sb2NhdGlvbiwgc3RyZWFtLnN0cigpKTsKLX0KLQotLy8gUGFyc2VzIHBy
YWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0uCi12b2lkIERpcmVjdGl2ZVBhcnNl
cjo6cGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9QUkFHTUEpOwotCi0gICAgZW51bSBTdGF0ZQotICAgIHsKLSAg
ICAgICAgUFJBR01BX05BTUUsCi0gICAgICAgIExFRlRfUEFSRU4sCi0gICAgICAgIFBSQUdNQV9W
QUxVRSwKLSAgICAgICAgUklHSFRfUEFSRU4KLSAgICB9OwotCi0gICAgYm9vbCB2YWxpZCA9IHRy
dWU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZSwgdmFsdWU7Ci0gICAgaW50IHN0YXRlID0gUFJBR01B
X05BTUU7Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIHdoaWxlICgodG9rZW4t
PnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaChzdGF0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBQUkFHTUFf
TkFNRToKLSAgICAgICAgICAgIG5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgICAgICAgICB2YWxp
ZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIExFRlRfUEFSRU46Ci0gICAgICAgICAgICB2YWxp
ZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6Ci0gICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52
YWx1ZTsKLSAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2Vu
OjpJREVOVElGSUVSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgUklHSFRf
UEFSRU46Ci0gICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHZh
bGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0KLQotICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0
ZSA9PSBQUkFHTUFfTkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KLSAgICAgICAgICAgICAg
ICAgICAgICAoc3RhdGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgot
ICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdp
dGggdmFsdWUuCi0gICAgaWYgKCF2YWxpZCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOwotICAgIH0KLSAgICBlbHNlIGlm
IChzdGF0ZSA+IFBSQUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21h
LgotICAgIHsKLSAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+
bG9jYXRpb24sIG5hbWUsIHZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2Vy
OjpwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VYVEVOU0lPTik7Ci0KLSAgICBlbnVtIFN0YXRlCi0gICAg
ewotICAgICAgICBFWFRfTkFNRSwKLSAgICAgICAgQ09MT04sCi0gICAgICAgIEVYVF9CRUhBVklP
UgotICAgIH07Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1l
LCBiZWhhdmlvcjsKLSAgICBpbnQgc3RhdGUgPSBFWFRfTkFNRTsKLQotICAgIG1Ub2tlbml6ZXIt
PmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFWFRfTkFNRToKLSAgICAgICAgICAgIGlmICh2YWxp
ZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElE
X0VYVEVOU0lPTl9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZhbGlkKSBuYW1lID0gdG9rZW4t
PnZhbHVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDT0xPTjoKLSAgICAg
ICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzonKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRVhUX0JF
SEFWSU9SOgotICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6
SURFTlRJRklFUikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHZhbGlkKSBiZWhhdmlvciA9IHRva2VuLT52YWx1ZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsaWQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAodmFsaWQgJiYg
KHN0YXRlICE9IEVYVF9CRUhBVklPUiArIDEpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwot
ICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAgICAgIG1E
aXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFeHRlbnNpb24odG9rZW4tPmxvY2F0aW9uLCBuYW1lLCBi
ZWhhdmlvcik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4q
IHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9W
RVJTSU9OKTsKLQotICAgIGVudW0gU3RhdGUKLSAgICB7Ci0gICAgICAgIFZFUlNJT05fTlVNQkVS
Ci0gICAgfTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIGludCB2ZXJzaW9uID0gMDsK
LSAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05VTUJFUjsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0
b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKLSAgICAgICAgICAgIGlmICh2YWxp
ZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
VkVSU0lPTl9OVU1CRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIHZlcnNpb24gPSBhdG9p
KHRva2VuLT52YWx1ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVN
QkVSICsgMSkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB2YWxpZCA9IGZhbHNl
OwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5k
bGVWZXJzaW9uKHRva2VuLT5sb2NhdGlvbiwgdmVyc2lvbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9MSU5FKTsKLQotICAgIGVudW0gU3RhdGUKLSAgICB7Ci0g
ICAgICAgIExJTkVfTlVNQkVSLAotICAgICAgICBGSUxFX05VTUJFUgotICAgIH07Ci0KLSAgICBi
b29sIHZhbGlkID0gdHJ1ZTsKLSAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgIGludCBz
dGF0ZSA9IExJTkVfTlVNQkVSOwotCi0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1U
b2tlbml6ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKLSAgICBtYWNyb0V4cGFuZGVyLmxl
eCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBMSU5FX05VTUJFUjoKLSAgICAgICAgICAgIGlmICh2YWxp
ZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURf
TElORV9OVU1CRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIGxpbmUgPSBhdG9pKHRva2Vu
LT52YWx1ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRklM
RV9OVU1CRVI6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsK
LSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHZhbGlkKSBmaWxlID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHZhbGlkKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwotICAgIH0KLQotICAgIGlmICh2
YWxpZCAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUiAr
IDEpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VkFMSURfTElORV9ESVJFQ1RJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICB9
Ci0gICAgaWYgKHZhbGlkKQotICAgIHsKLSAgICAgICAgbVRva2VuaXplci0+c2V0TGluZU51bWJl
cihsaW5lKTsKLSAgICAgICAgaWYgKHN0YXRlID09IEZJTEVfTlVNQkVSICsgMSkgbVRva2VuaXpl
ci0+c2V0RmlsZU51bWJlcihmaWxlKTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlyZWN0aXZlUGFyc2Vy
Ojpza2lwcGluZygpIGNvbnN0Ci17Ci0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkp
IHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNv
bmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgIHJldHVybiBibG9jay5za2lwQmxvY2sgfHwgYmxv
Y2suc2tpcEdyb3VwOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VDb25kaXRpb25h
bElmKFRva2VuKiB0b2tlbikKLXsKLSAgICBDb25kaXRpb25hbEJsb2NrIGJsb2NrOwotICAgIGJs
b2NrLnR5cGUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgYmxvY2subG9jYXRpb24gPSB0b2tlbi0+bG9j
YXRpb247Ci0KLSAgICBpZiAoc2tpcHBpbmcoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgY29u
ZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9uYWwgZ3JvdXAKLSAgICAg
ICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0aGlzIHdob2xlIGJsb2Nr
IGlzIHNraXBwZWQuCi0gICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRvIHBhcnNlIHRoZSBjb25k
aXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gZW1pdCBhIGRpYWdub3N0
aWMuCi0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIGJs
b2NrLnNraXBCbG9jayA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIERp
cmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKLQotICAgICAgICBp
bnQgZXhwcmVzc2lvbiA9IDA7Ci0gICAgICAgIHN3aXRjaCAoZGlyZWN0aXZlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6Ci0gICAgICAgICAgICBleHByZXNzaW9uID0g
cGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBESVJFQ1RJVkVfSUZERUY6Ci0gICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHBy
ZXNzaW9uSWZkZWYodG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBE
SVJFQ1RJVkVfSUZOREVGOgotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lv
bklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsK
LSAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lvbiAhPSAwOwotICAgIH0K
LSAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwotfQotCi1pbnQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0
KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwKLSAgICAgICAgICAgKGdl
dERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKLQotICAgIERlZmluZWRQYXJz
ZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7Ci0g
ICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFyc2VyLCBtTWFjcm9TZXQs
IG1EaWFnbm9zdGljcyk7Ci0gICAgRXhwcmVzc2lvblBhcnNlciBleHByZXNzaW9uUGFyc2VyKCZt
YWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOwotCi0gICAgaW50IGV4cHJlc3Npb24gPSAwOwot
ICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKLSAgICBleHByZXNzaW9uUGFyc2VyLnBhcnNl
KHRva2VuLCAmZXhwcmVzc2lvbik7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMg
YWZ0ZXIgI2lmIGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0VPRCh0b2tlbikpCi0gICAgewotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBF
Q1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OwotICAgIH0KLQotICAgIHJldHVybiBleHByZXNzaW9uOwotfQotCi1pbnQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KChn
ZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRkRFRikgfHwKLSAgICAgICAgICAgKGdl
dERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGTkRFRikpOwotCi0gICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
Ci0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOwotICAgIGludCBleHByZXNz
aW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7Ci0KLSAgICAvLyBXYXJuIGlm
IHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCi0gICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKLSAgICBpZiAoIWlzRU9EKHRva2VuKSkKLSAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RP
S0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAg
fQotICAgIHJldHVybiBleHByZXNzaW9uOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZVBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDExNWEwMWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXwotCi0jaW5jbHVkZSAiTGV4ZXIuaCIKLSNpbmNs
dWRlICJNYWNyby5oIgotI2luY2x1ZGUgInBwX3V0aWxzLmgiCi0jaW5jbHVkZSAiU291cmNlTG9j
YXRpb24uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotY2xhc3Mg
RGlyZWN0aXZlSGFuZGxlcjsKLWNsYXNzIFRva2VuaXplcjsKLQotY2xhc3MgRGlyZWN0aXZlUGFy
c2VyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBEaXJlY3RpdmVQYXJzZXIoVG9r
ZW5pemVyKiB0b2tlbml6ZXIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1Nl
dCwKLSAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAotICAgICAg
ICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXJlY3RpdmVQYXJzZXIpOwotCi0gICAgdm9pZCBwYXJz
ZURpcmVjdGl2ZShUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9rZW4qIHRv
a2VuKTsKLSAgICB2b2lkIHBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNl
SWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKTsKLSAg
ICB2b2lkIHBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUVsc2UoVG9r
ZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQg
cGFyc2VFbmRpZihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VFcnJvcihUb2tlbiogdG9r
ZW4pOwotICAgIHZvaWQgcGFyc2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNl
RXh0ZW5zaW9uKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZVZlcnNpb24oVG9rZW4qIHRv
a2VuKTsKLSAgICB2b2lkIHBhcnNlTGluZShUb2tlbiogdG9rZW4pOwotCi0gICAgYm9vbCBza2lw
cGluZygpIGNvbnN0OwotICAgIHZvaWQgcGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0b2tlbik7
Ci0gICAgaW50IHBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbik7Ci0gICAgaW50IHBhcnNl
RXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbik7Ci0KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxC
bG9jawotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgdHlwZTsKLSAgICAgICAgU291cmNlTG9j
YXRpb24gbG9jYXRpb247Ci0gICAgICAgIGJvb2wgc2tpcEJsb2NrOwotICAgICAgICBib29sIHNr
aXBHcm91cDsKLSAgICAgICAgYm9vbCBmb3VuZFZhbGlkR3JvdXA7Ci0gICAgICAgIGJvb2wgZm91
bmRFbHNlR3JvdXA7Ci0KLSAgICAgICAgQ29uZGl0aW9uYWxCbG9jaygpIDoKLSAgICAgICAgICAg
IHNraXBCbG9jayhmYWxzZSksCi0gICAgICAgICAgICBza2lwR3JvdXAoZmFsc2UpLAotICAgICAg
ICAgICAgZm91bmRWYWxpZEdyb3VwKGZhbHNlKSwKLSAgICAgICAgICAgIGZvdW5kRWxzZUdyb3Vw
KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHN0ZDo6dmVjdG9yPENv
bmRpdGlvbmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOwotICAgIFRva2VuaXplciogbVRva2Vu
aXplcjsKLSAgICBNYWNyb1NldCogbU1hY3JvU2V0OwotICAgIERpYWdub3N0aWNzKiBtRGlhZ25v
c3RpY3M7Ci0gICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Ci19OwotCi19
ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVD
VElWRV9QQVJTRVJfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9u
UGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhOWNlOS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NDAgKzAsMCBA
QAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNr
ZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMK
LQotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K
LQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwg
ZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAg
IHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUg
dGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0
IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxl
dG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRv
bi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUg
cGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0
aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24g
YW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1
bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVj
aWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24u
ICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBT
dGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFu
dGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBi
ZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUg
c3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJpYWJsZXMs
IGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgotICAg
VGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxl
cyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVk
ICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0vKiBJZGVu
dGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlzb24gdmVy
c2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2VsZXRvbiBu
YW1lLiAgKi8KLSNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1cmUgcGFy
c2Vycy4gICovCi0jZGVmaW5lIFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0j
ZGVmaW5lIFlZTFNQX05FRURFRCAwCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBm
dW5jdGlvbiBuYW1lcy4gICovCi0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmluZSB5eWxl
eCAgIHBwbGV4Ci0jZGVmaW5lIHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwgIHBwbHZh
bAotI2RlZmluZSB5eWNoYXIgIHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcKLSNkZWZp
bmUgeXluZXJycyBwcG5lcnJzCi0KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZ
UEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBz
eW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cg
YWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgVE9LX0NPTlNUX0lO
VCA9IDI1OCwKLSAgICAgVE9LX09QX09SID0gMjU5LAotICAgICBUT0tfT1BfQU5EID0gMjYwLAot
ICAgICBUT0tfT1BfTkUgPSAyNjEsCi0gICAgIFRPS19PUF9FUSA9IDI2MiwKLSAgICAgVE9LX09Q
X0dFID0gMjYzLAotICAgICBUT0tfT1BfTEUgPSAyNjQsCi0gICAgIFRPS19PUF9SSUdIVCA9IDI2
NSwKLSAgICAgVE9LX09QX0xFRlQgPSAyNjYsCi0gICAgIFRPS19VTkFSWSA9IDI2NwotICAgfTsK
LSNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgVE9LX0NPTlNUX0lOVCAyNTgKLSNkZWZp
bmUgVE9LX09QX09SIDI1OQotI2RlZmluZSBUT0tfT1BfQU5EIDI2MAotI2RlZmluZSBUT0tfT1Bf
TkUgMjYxCi0jZGVmaW5lIFRPS19PUF9FUSAyNjIKLSNkZWZpbmUgVE9LX09QX0dFIDI2MwotI2Rl
ZmluZSBUT0tfT1BfTEUgMjY0Ci0jZGVmaW5lIFRPS19PUF9SSUdIVCAyNjUKLSNkZWZpbmUgVE9L
X09QX0xFRlQgMjY2Ci0jZGVmaW5lIFRPS19VTkFSWSAyNjcKLQotCi0KLQotLyogQ29weSB0aGUg
Zmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERP
IE5PVCBFRElUIQotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLS8vIFRyaWdnZXJlZCBieSB0aGUg
YXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp
Z25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQwNjUgNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiRXhwcmVz
c2lvblBhcnNlci5oIgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RkbGliPgot
I2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUg
IkxleGVyLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi10
eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKLSNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKLSNlbHNl
Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci10eXBlZGVmIGludG1heF90IFlZU1RZUEU7Ci0jZW5kaWYg
IC8vIF9NU0NfVkVSCi0jZGVmaW5lIFlZRU5BQkxFX05MUyAwCi0jZGVmaW5lIFlZTFRZUEVfSVNf
VFJJVklBTCAxCi0jZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZGVmaW5lIFlZU1RZUEVf
SVNfREVDTEFSRUQgMQotCi1uYW1lc3BhY2Ugewotc3RydWN0IENvbnRleHQKLXsKLSAgICBwcDo6
RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOwotICAgIHBwOjpMZXhlciogbGV4ZXI7Ci0gICAgcHA6
OlRva2VuKiB0b2tlbjsKLSAgICBpbnQqIHJlc3VsdDsKLX07Ci19ICAvLyBuYW1lc3BhY2UKLQot
Ci1zdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKLXN0
YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsK
LQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZ
WURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAg
Ki8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRl
ZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAw
Ci0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlU
T0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVm
aW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIGlu
dCBZWVNUWVBFOwotIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxs
IGJlIHdpdGhkcmF3biAqLwotIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmlu
ZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0KLQotCi0vKiBDb3B5IHRoZSBzZWNvbmQg
cGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCi0KLQotLyogTGluZSAyMTYgb2YgeWFjYy5j
LiAgKi8KLQotCi0jaWZkZWYgc2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0jaWZkZWYg
WVlUWVBFX1VJTlQ4Ci10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0jZWxzZQot
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlU
WVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAoZGVmaW5l
ZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9f
Y3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlw
ZV9pbnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2VuZGlmCi0K
LSNpZmRlZiBZWVRZUEVfVUlOVDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQx
NjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OwotI2Vu
ZGlmCi0KLSNpZmRlZiBZWVRZUEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9p
bnQxNjsKLSNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5kaWYKLQot
I2lmbmRlZiBZWVNJWkVfVAotIyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUgWVlTSVpF
X1QgX19TSVpFX1RZUEVfXwotIyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUgWVlTSVpF
X1Qgc2l6ZV90Ci0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsc2UK
LSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jZGVm
aW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwotIyBpZiBZ
WUVOQUJMRV9OTFMKLSMgIGlmIEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1zZ2lkKSBk
Z2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlm
bmRlZiBZWV8KLSMgIGRlZmluZSBZWV8obXNnaWQpIG1zZ2lkCi0jIGVuZGlmCi0jZW5kaWYKLQot
LyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCi0j
aWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlVU0UoZSkg
KCh2b2lkKSAoZSkpCi0jZWxzZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KLSNlbmRp
ZgotCi0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91
dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUgWVlJRChu
KSAobikKLSNlbHNlCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQot
c3RhdGljIGludAotWVlJRCAoaW50IGkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAoaSkKLSAg
ICBpbnQgaTsKLSNlbmRpZgotewotICByZXR1cm4gaTsKLX0KLSNlbmRpZgotCi0jaWYgISBkZWZp
bmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJzZXIgaW52b2tl
cyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KLQot
IyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAg
IGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxv
Y2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGluY2x1ZGUg
PGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZWxpZiBk
ZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMgICBlbGlm
IGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jICAgZWxz
ZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVkIF9B
TExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCi0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAgZGVmaW5l
IF9TVERMSUJfSCAxCi0jICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRp
ZgotIyBlbmRpZgotCi0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBg
ZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikg
ZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFDS19B
TExPQ19NQVhJTVVNCi0gICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFy
ZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6
ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAg
ICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5
IHNtYWxsZXIgbnVtYmVyCi0gICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9j
YXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9D
X01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVs
c2UKLSMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFDS19G
UkVFIFlZRlJFRQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAoZGVm
aW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKLSAgICAgICAmJiAhICgo
ZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotCSAgICAgJiYgKGRlZmluZWQg
WVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICBk
ZWZpbmUgX1NURExJQl9IIDEKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExP
QwotIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYm
ICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZp
bmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJ
Ql9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAo
dm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0j
ICBlbmRpZgotIyBlbmRpZgotI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJS
T1JfVkVSQk9TRSAqLwotCi0KLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAo
ISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLQkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFM
ICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBh
bGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0
eXBlX2ludDE2IHl5c3M7Ci0gIFlZU1RZUEUgeXl2czsKLSAgfTsKLQotLyogVGhlIHNpemUgb2Yg
dGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAg
Ki8KLSMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykg
LSAxKQotCi0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBh
bGwgc3RhY2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFD
S19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9m
IChZWVNUWVBFKSkgXAotICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0vKiBDb3B5IENP
VU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24g
ZG8KLSAgIG5vdCBvdmVybGFwLiAgKi8KLSMgaWZuZGVmIFlZQ09QWQotIyAgaWYgZGVmaW5lZCBf
X0dOVUNfXyAmJiAxIDwgX19HTlVDX18KLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3Vu
dCkgXAotICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2Yg
KCooRnJvbSkpKQotIyAgZWxzZQotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJ
XAotICAgICAgZG8JCQkJCVwKLQl7CQkJCQlcCi0JICBZWVNJWkVfVCB5eWk7CQkJCVwKLQkgIGZv
ciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKLQkgICAgKFRvKVt5eWldID0gKEZy
b20pW3l5aV07CQlcCi0JfQkJCQkJXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAgZW5kaWYK
LSMgZW5kaWYKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRo
ZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0la
RSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFj
aywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFk
dmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAot
ICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKLSAg
ICBkbwkJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWVlTSVpFX1QgeXluZXdieXRlczsJ
CQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAotCVN0
YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCi0JeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICog
c2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotCXl5cHRyICs9IHl5bmV3
Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgd2hp
bGUgKFlZSUQgKDApKQotCi0jZW5kaWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2Yg
dGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMTQKLS8qIFlZTEFT
VCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAxNzUKLQot
LyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tF
TlMgIDI3Ci0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5l
IFlZTk5UUyAgMwotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUg
WVlOUlVMRVMgIDI2Ci0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZp
bmUgWVlOU1RBVEVTICA1MgotCi0vKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9s
IG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAg
MgotI2RlZmluZSBZWU1BWFVUT0sgICAyNjcKLQotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJ
CQkJXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVb
WVlYXSA6IFlZVU5ERUZUT0spCi0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1i
b2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIzLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAyMSwgICAgIDgsICAgICAyLAotICAgICAgMjUsICAgIDI2LCAg
ICAxOSwgICAgMTcsICAgICAyLCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIsICAgIDI0LCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAg
ICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMjIKLX07Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAtLSBJbmRl
eCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAgIFlZUkhT
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAgICAgIDAs
ICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywg
ICAgMjcsCi0gICAgICAzMSwgICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1
NSwgICAgNTksICAgIDYzLCAgICA2NywKLSAgICAgIDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAg
ICA4NSwgICAgODgsICAgIDkxCi19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxp
c3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhz
W10gPQotewotICAgICAgMjgsICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAgMywgICAg
LTEsICAgIDI5LCAgICAgNCwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgICA1LCAgICAyOSwg
ICAgLTEsICAgIDI5LCAgICAgNiwgICAgMjksICAgIC0xLCAgICAyOSwKLSAgICAgICA3LCAgICAy
OSwgICAgLTEsICAgIDI5LCAgICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5
LAotICAgICAgLTEsICAgIDI5LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTMsICAg
IDI5LCAgICAtMSwgICAgMjksCi0gICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIs
ICAgIDI5LCAgICAtMSwgICAgMjksICAgIDExLCAgICAyOSwKLSAgICAgIC0xLCAgICAyOSwgICAg
MTUsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5LAotICAg
ICAgMTgsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAg
ICAyMSwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5
LCAgICAxOSwgICAgMjksICAgIC0xLCAgICAyMywKLSAgICAgIDI5LCAgICAtMSwgICAgMjQsICAg
IDI5LCAgICAtMSwgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAotICAgICAgLTEs
ICAgIDI1LCAgICAyOSwgICAgMjYsICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291
cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlybGluZVtdID0KLXsKLSAgICAgICAwLCAgICA4OSwgICAgODks
ICAgIDk2LCAgICA5NywgICAxMDAsICAgMTAzLCAgIDEwNiwgICAxMDksICAgMTEyLAotICAgICAx
MTUsICAgMTE4LCAgIDEyMSwgICAxMjQsICAgMTI3LCAgIDEzMCwgICAxMzMsICAgMTM2LCAgIDEz
OSwgICAxNDIsCi0gICAgIDE1NSwgICAxNjgsICAgMTcxLCAgIDE3NCwgICAxNzcsICAgMTgwLCAg
IDE4MwotfTsKLSNlbmRpZgotCi0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlU
T0tFTl9UQUJMRQotLyogWVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUg
c3ltYm9sIFNZTUJPTC1OVU0uCi0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRp
bmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNv
bnN0IHl5dG5hbWVbXSA9Ci17Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVE9L
X0NPTlNUX0lOVCIsICJUT0tfT1BfT1IiLAotICAiVE9LX09QX0FORCIsICInfCciLCAiJ14nIiwg
IicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VRIiwgIic8JyIsCi0gICInPiciLCAiVE9LX09Q
X0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklHSFQiLCAiVE9LX09QX0xFRlQiLCAiJysnIiwK
LSAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIsICJUT0tfVU5BUlkiLCAiJyEnIiwgIid+JyIs
ICInKCciLCAiJyknIiwKLSAgIiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKLX07
Ci0jZW5kaWYKLQotIyBpZmRlZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIElu
dGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxFWC1OVU0u
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0gICAgICAg
MCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4
LCAgIDI2MSwKLSAgICAgMjYyLCAgICA2MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAg
MjY2LCAgICA0MywgICAgNDUsICAgIDQyLAotICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMs
ICAgMTI2LCAgICA0MCwgICAgNDEKLX07Ci0jIGVuZGlmCi0KLS8qIFlZUjFbWVlOXSAtLSBTeW1i
b2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwotc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQotewotICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
Ci19OwotCi0vKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0
IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
cjJbXSA9Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAgICAgIDMsICAg
ICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMKLX07Ci0KLS8qIFlZREVGQUNU
W1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQotICAg
U1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8g
ZG8uICBaZXJvCi0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1zdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQotewotICAgICAgIDAsICAgICAzLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgMjUsCi0gICAg
ICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MjYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwg
ICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAg
ICAyMSwKLSAgICAgIDIwLCAgICAxOQotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAq
Lwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAg
ICAgNywgICAgIDgKLX07Ci0KLS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFC
TEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUg
WVlQQUNUX05JTkYgLTExCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsK
LSAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAx
MiwgICAgNjgsICAgLTExLAotICAgICAtMTEsICAgLTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAg
ICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCi0gICAgICA0NiwgICAgNDYsICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKLSAgICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAgICA4NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAx
NDMsICAgMTU0LAotICAgICAxNTQsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywg
ICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEsCi0gICAgIC0xMSwgICAtMTEKLX07Ci0KLS8qIFlZ
UEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1td
ID0KLXsKLSAgICAgLTExLCAgIC0xMSwgICAgLTIKLX07Ci0KLS8qIFlZVEFCTEVbWVlQQUNUW1NU
QVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgotICAgcG9zaXRp
dmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNo
Ci0gICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBz
YXlzLgotICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRB
QkxFX05JTkYgLTEKLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0KLXsKLSAg
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwKLSAgICAgIDUx
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgIDEsCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0
LAotICAgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAg
ICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwg
ICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
Ci0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCi19OwotCi1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KLXsKLSAgICAgICAyLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAotICAg
ICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgIDMsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAg
ICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIzLAotICAgICAgMjQsICAgIDI1
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
Ci0gICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgOCwgICAgIDksCi0gICAgICAxMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCi19OwotCi0vKiBZWVNUT1NbU1RBVEUtTlVNXSAt
LSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3ltYm9sIG9mIHN0
YXRlIFNUQVRFLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0K
LXsKLSAgICAgICAwLCAgICAgMywgICAgMTcsICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyOCwgICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAw
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAg
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjkKLX07Ci0KLSNk
ZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmluCSh5eWNo
YXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZCQkoLTIpCi0jZGVmaW5lIFlZRU9GCQkwCi0K
LSNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUCQlnb3Rv
IHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCi0KLQotLyogTGlr
ZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1w
b3JhcmlseQotICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2Yg
WVlFUlJPUiwgZm9yIEdDQy4KLSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2
ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJs
YWIKLQotI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUg
WVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAotZG8JCQkJCQkJCVwKLSAgaWYgKHl5Y2hhciA9
PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAgICB5eWNo
YXIgPSAoVG9rZW4pOwkJCQkJCVwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAotICAg
ICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCi0gICAgICBZWVBPUFNUQUNL
ICgxKTsJCQkJCQlcCi0gICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKLSAgICB9CQkJCQkJCQlc
Ci0gIGVsc2UJCQkJCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAgICB5eWVycm9yIChjb250ZXh0
LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7
CQkJCQkJCVwKLSAgICB9CQkJCQkJCQlcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2RlZmluZSBZ
WVRFUlJPUgkxCi0jZGVmaW5lIFlZRVJSQ09ERQkyNTYKLQotCi0vKiBZWUxMT0NfREVGQVVMVCAt
LSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KLSAgIElmIE4gaXMg
MCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcwotICAg
dGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwotCi0jZGVm
aW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxMT0NfREVGQVVMVAot
IyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCi0gICAgZG8JCQkJ
CQkJCQlcCi0gICAgICBpZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3Rf
bGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAotCSAgKEN1cnJlbnQpLmZp
cnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAotCSAgKEN1cnJl
bnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKLQkgIChD
dXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAot
CX0JCQkJCQkJCVwKLSAgICAgIGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVu
dCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKLQkgICAgWVlSSFNM
T0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0g
KEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9j
b2x1bW47CQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0K
LQotLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJl
YW0uCi0gICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9u
bHkgaWYgd2Uga25vdwotICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFy
ZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5U
Ci0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZp
bGUsIExvYykJCQlcCi0gICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAotCSAg
ICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAotCSAgICAgIChMb2Mp
Lmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9D
QVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQotCi0v
KiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8K
LQotI2lmZGVmIFlZTEVYX1BBUkFNCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlM
RVhfUEFSQU0pCi0jZWxzZQotIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNvbnRleHQp
Ci0jZW5kaWYKLQotLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZ
REVCVUcKLQotIyBpZm5kZWYgWVlGUFJJTlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYK
LSMgZW5kaWYKLQotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAotZG8gewkJCQkJCVwKLSAg
aWYgKHl5ZGVidWcpCQkJCQlcCi0gICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKLX0gd2hpbGUgKFlZ
SUQgKDApKQotCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBM
b2NhdGlvbikJCQkgIFwKLWRvIHsJCQkJCQkJCQkgIFwKLSAgaWYgKHl5ZGVidWcpCQkJCQkJCQkg
IFwKLSAgICB7CQkJCQkJCQkJICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRp
dGxlKTsJCQkJCSAgXAotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJICBcCi0J
CSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxu
Iik7CQkJCQkJICBcCi0gICAgfQkJCQkJCQkJCSAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wg
b24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0v
KkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1z
dGF0aWMgdm9pZAoteXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5
dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQot
I2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5
cGU7Ci0gICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIENvbnRleHQgKmNv
bnRleHQ7Ci0jZW5kaWYKLXsKLSAgaWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47Ci0gIFlZVVNF
IChjb250ZXh0KTsKLSMgaWZkZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQot
ICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBl
bHNlCi0gIFlZVVNFICh5eW91dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBlKQotICAg
IHsKLSAgICAgIGRlZmF1bHQ6Ci0JYnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAg
fAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQg
KEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1
ZXAsIENvbnRleHQgKmNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmlu
dCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRw
dXQ7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7
Ci0gICAgQ29udGV4dCAqY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoeXl0eXBlIDwgWVlOVE9L
RU5TKQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5
cGVdKTsKLSAgZWxzZQotICAgIFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0
bmFtZVt5eXR5cGVdKTsKLQotICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5
cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0K
LQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCi18IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFj
ayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Ci0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9p
ZAoteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRv
cCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAg
IHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17
Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0g
dG9wOyArK2JvdHRvbSkKLSAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwot
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5U
KEJvdHRvbSwgVG9wKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJCQlc
Ci0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKLX0gd2hpbGUgKFlZ
SUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQu
ICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lk
Ci15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpj
b250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1
bGUsIGNvbnRleHQpCi0gICAgWVlTVFlQRSAqeXl2c3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBD
b250ZXh0ICpjb250ZXh0OwotI2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07
Ci0gIGludCB5eWk7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVd
OwotICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUg
JWx1KTpcbiIsCi0JICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJl
aW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCi0g
ICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0gICAg
ICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAot
CQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0JCSAgICAgICAJCSAgICAg
ICAsIGNvbnRleHQpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0K
LSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAotZG8gewkJCQkJXAotICBpZiAoeXlk
ZWJ1ZykJCQkJXAotICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBc
Ci19IHdoaWxlIChZWUlEICgwKSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFj
ZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJz
IGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMg
ZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBU
eXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRv
cCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICov
Ci0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFj
a3MuICAqLwotI2lmbmRlZglZWUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0j
ZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3Jv
dyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24g
bWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsg
dGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwg
WVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXBy
ZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMg
ZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJP
U0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmlu
ZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0
dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5
c3RyKQotI2Vsc2UKLXN0YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0
IGNoYXIgKnl5c3RyOwotI2VuZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVu
ID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1cm4geXls
ZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVm
aW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJD
RQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8g
WVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4K
LSAgIFlZREVTVC4gICovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlz
cmMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAg
Y2hhciAqeXlkZXN0OwotICAgIGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIg
Knl5ZCA9IHl5ZGVzdDsKLSAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgq
eXlkKysgPSAqeXlzKyspICE9ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAt
IDE7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkg
dG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVj
ZXNzYXJ5Ci0gICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUg
Zm9yIHl5ZXJyb3IuICBUaGUKLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlz
IHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9zdHJvcGhl
LCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xh
c2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGws
IGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1
bHQKLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAo
Y2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09ICciJykK
LSAgICB7Ci0gICAgICBZWVNJWkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAqeXlwID0g
eXlzdHI7Ci0KLSAgICAgIGZvciAoOzspCi0Jc3dpdGNoICgqKyt5eXApCi0JICB7Ci0JICBjYXNl
ICdcJyc6Ci0JICBjYXNlICcsJzoKLQkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0J
ICBjYXNlICdcXCc6Ci0JICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLQkgICAgICBnb3RvIGRvX25v
dF9zdHJpcF9xdW90ZXM7Ci0JICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0JICBkZWZhdWx0Ogot
CSAgICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0JICAgIHl5bisrOwot
CSAgICBicmVhazsKLQotCSAgY2FzZSAnIic6Ci0JICAgIGlmICh5eXJlcykKLQkgICAgICB5eXJl
c1t5eW5dID0gJ1wwJzsKLQkgICAgcmV0dXJuIHl5bjsKLQkgIH0KLSAgICBkb19ub3Rfc3RyaXBf
cXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAo
eXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQot
IyBlbmRpZgotCi0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0
aGUgdW5leHBlY3RlZCB0b2tlbgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBS
ZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1p
bmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAgY29weSBh
bnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0g
ICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5
bnRheCBlcnJvciIKLSAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBp
ZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRp
YyBZWVNJWkVfVAoteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwg
aW50IHl5Y2hhcikKLXsKLSAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAo
WVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVs
c2UKLSAgICB7Ci0gICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAg
ICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAg
ICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0g
ICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJP
U0VfQVJHU19NQVhJTVVNID0gNSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9W
RVJCT1NFX0FSR1NfTUFYSU1VTV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8q
IFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBh
cmUKLQkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXgg
ZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwot
IyBlbmRpZgotICAgICAgY2hhciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAg
ICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhw
ZWN0ZWQgJXMiOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4
cGVjdGluZyAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsK
LSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotCQkgICAgKyBzaXplb2Yg
eXlleHBlY3RpbmcgLSAxCi0JCSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAt
IDIpCi0JCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5
eXByZWZpeCA9IHl5ZXhwZWN0aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBu
ZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCi0JIFlZQ0hFQ0suICAqLwotICAg
ICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdp
dGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5
eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNr
bGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNv
dW50ID0gMTsKLQotICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZt
dCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXgg
PSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKLQlpZiAoeXljaGVja1t5eXggKyB5eW5d
ID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCi0JICB7Ci0JICAgIGlmICh5eWNvdW50ID09IFlZ
RVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCi0JICAgICAgewotCQl5eWNvdW50ID0gMTsKLQkJ
eXlzaXplID0geXlzaXplMDsKLQkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0g
J1wwJzsKLQkJYnJlYWs7Ci0JICAgICAgfQotCSAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFt
ZVt5eXhdOwotCSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5
eF0pOwotCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotCSAgICB5
eXNpemUgPSB5eXNpemUxOwotCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgp
OwotCSAgICB5eXByZWZpeCA9IHl5b3I7Ci0JICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1h
dCk7Ci0gICAgICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNp
emVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXpl
MTsKLQotICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKLQlyZXR1cm4gWVlTSVpFX01BWElNVU07
Ci0KLSAgICAgIGlmICh5eXJlc3VsdCkKLQl7Ci0JICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0
IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCi0JICAgICBEb24ndCBoYXZlIHVu
ZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotCSAgICAgcHJvZHVjZWQg
YSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLQkgIGNoYXIgKnl5
cCA9IHl5cmVzdWx0OwotCSAgaW50IHl5aSA9IDA7Ci0JICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAh
PSAnXDAnKQotCSAgICB7Ci0JICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycg
JiYgeXlpIDwgeXljb3VudCkKLQkJewotCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdb
eXlpKytdKTsKLQkJICB5eWYgKz0gMjsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkgIHl5cCsr
OwotCQkgIHl5ZisrOwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgICByZXR1cm4geXlzaXplOwotICAg
IH0KLX0KLSNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5
IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29u
c3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpj
b250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5
eXZhbHVlcCwgY29udGV4dCkKLSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBl
OwotICAgIFlZU1RZUEUgKnl5dmFsdWVwOwotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0jZW5kaWYK
LXsKLSAgWVlVU0UgKHl5dmFsdWVwKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0gIGlmICgheXlt
c2cpCi0gICAgeXltc2cgPSAiRGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5
eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5cGUpCi0gICAg
ewotCi0gICAgICBkZWZhdWx0OgotCWJyZWFrOwotICAgIH0KLX0KLQwKLQotLyogUHJldmVudCB3
YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lmZGVmIFlZUEFSU0Vf
UEFSQU0KLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5
eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNl
bmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCk7Ci0j
ZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0g
Ki8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0t
Ki8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCi1pbnQKLXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0jZWxzZQot
aW50Ci15eXBhcnNlIChZWVBBUlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFSQU07Ci0j
ZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19f
IHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMg
fHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCkKLSNl
bHNlCi1pbnQKLXl5cGFyc2UgKGNvbnRleHQpCi0gICAgQ29udGV4dCAqY29udGV4dDsKLSNlbmRp
ZgotI2VuZGlmCi17Ci0gIC8qIFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQgeXljaGFy
OwotCi0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8K
LVlZU1RZUEUgeXlsdmFsOwotCi0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAq
LwotaW50IHl5bmVycnM7Ci0KLSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJl
c3VsdDsKLSAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2Fn
ZXMgZW5hYmxlZC4gICovCi0gIGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tl
biBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5
dG9rZW4gPSAwOwotI2lmIFlZRVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1l
c3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhd
OwotICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNp
emVvZiB5eW1zZ2J1ZjsKLSNlbmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9v
bHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRl
ZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMu
Ci0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBh
bGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwot
Ci0gIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRE
RVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5
c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2
c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5
dnNwOwotCi0KLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3Ag
LT0gKE4pKQotCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyog
VGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24g
ZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLQot
Ci0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1
bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAg
Ki8KLSAgaW50IHl5bGVuID0gMDsKLQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBw
YXJzZVxuIikpOwotCi0gIHl5c3RhdGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVy
cnMgPSAwOwotICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFk
LiAgKi8KLQotICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUg
ZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0
YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVk
IGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwot
ICB5eXZzcCA9IHl5dnM7Ci0KLSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdz
dGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVy
ZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVz
aGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5
c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNz
ICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3Vy
cmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAg
ICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZs
b3cKLSAgICAgIHsKLQkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3Rh
Y2suICBVc2UgY29waWVzIG9mCi0JICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNl
IHRoZSByZWFsIG9uZXMgaW50bwotCSAgIG1lbW9yeS4gICovCi0JWVlTVFlQRSAqeXl2czEgPSB5
eXZzOwotCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotCi0KLQkvKiBFYWNoIHN0YWNrIHBv
aW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBkYXRhIGlu
IHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0JICAgY29u
ZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAot
CSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5b3ZlcmZs
b3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXpl
b2YgKCp5eXNzcCksCi0JCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQot
CQkgICAgJnl5c3RhY2tzaXplKTsKLQotCXl5c3MgPSB5eXNzMTsKLQl5eXZzID0geXl2czE7Ci0g
ICAgICB9Ci0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNLX1JFTE9D
QVRFCi0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBFeHRlbmQg
dGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3Rh
Y2tzaXplKQotCWdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAqPSAyOwot
ICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLQl5eXN0YWNrc2l6ZSA9IFlZTUFY
REVQVEg7Ci0KLSAgICAgIHsKLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLQl1bmlvbiB5
eWFsbG9jICp5eXB0ciA9Ci0JICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNU
QUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotCWlmICghIHl5cHRyKQotCSAgZ290byB5eWV4aGF1
c3RlZGxhYjsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9DQVRFICh5
eXZzKTsKLQotIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQotCWlmICh5eXNzMSAhPSB5eXNzYSkK
LQkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8qIG5v
IHl5b3ZlcmZsb3cgKi8KLQotICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAgICAg
IHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7Ci0KLQotICAgICAgWVlEUFJJTlRGICgoc3RkZXJy
LCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAotCQkgICh1bnNpZ25lZCBsb25nIGlu
dCkgeXlzdGFja3NpemUpKTsKLQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0g
eXlzc3ApCi0JWVlBQk9SVDsKLSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJp
bmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwotCi0vKi0tLS0t
LS0tLS0tLgotfCB5eWJhY2t1cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoKLQotICAv
KiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVh
ZCBhCi0gICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVh
ZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3
aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0
W3l5c3RhdGVdOwotICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8geXlkZWZhdWx0
OwotCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUuICAqLwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZ
WUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZ
WUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tl
bjogIikpOwotICAgICAgeXljaGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0g
WVlFT0YpCi0gICAgewotICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlE
UFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVs
c2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZ
WV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxv
Yyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZ
WVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhh
dCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNU
IDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0Owot
ICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAo
eXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKLQlnb3RvIHl5ZXJybGFiOwotICAgICAg
eXluID0gLXl5bjsKLSAgICAgIGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0g
WVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5j
ZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0g
IGlmICh5eWVycnN0YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBs
b29rLWFoZWFkIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRv
a2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2Vu
IHVubGVzcyBpdCBpcyBlb2YuICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hh
ciA9IFlZRU1QVFk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0K
LSAgZ290byB5eW5ld3N0YXRlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVm
YXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoK
LSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5
ZXJybGFiOwotICBnb3RvIHl5cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCi18IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBh
IHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJ
ZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFj
dGlvbjoKLSAgICAgYCQkID0gJDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBs
aW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3Vt
ZW50ZWQgYW5kIEJpc29uCi0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNz
aWduaW5nIHRvIFlZVkFMCi0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEg
Yml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFM
IG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5d
OwotCi0KLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOwotICBzd2l0Y2ggKHl5bikKLSAgICB7Ci0g
ICAgICAgIGNhc2UgMjoKLQotICAgIHsKLSAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3Rh
dGljX2Nhc3Q8aW50PigoeXl2c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICBZWUFDQ0VQVDsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA2OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwg
KHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAt
ICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA4OgotCi0gICAgewotICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0pOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygxKSAtICgzKV0pICE9ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgMTA6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEp
IC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSAxMToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+
PSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFso
MykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0KLSAgICB7Ci0g
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7
Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSAxNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZz
cFsoMSkgLSAoMyldKSA+PiAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDE2OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgz
KV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2Ug
MTc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2
c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE4OgotCi0gICAg
ewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgz
KV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxOToKLQotICAgIHsKLSAgICAgICAg
aWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8
ICIgJSAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRl
eHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwotICAgICAg
ICAgICAgWVlBQk9SVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXSkgJSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgIH0KLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjA6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3Bb
KDMpIC0gKDMpXSkgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFt
OwotICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8PCAo
eXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFt
LnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZQUJP
UlQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOwotICAgICAgICB9Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDIxOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAyMjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgyKV0pOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
KSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAy
NDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0pOwotICAg
IDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9
ICsgKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoK
LQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKLSAgICA7fQot
ICAgIGJyZWFrOwotCi0KLS8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZh
dWx0OiBicmVhazsKLSAgICB9Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5
bl0sICZ5eXZhbCwgJnl5bG9jKTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0g
MDsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFs
OwotCi0KLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0
ZXJtaW5lIHdoYXQgc3RhdGUKLSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUg
d2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCi0gICAgIG51bWJlciByZWR1Y2VkIGJ5LiAg
Ki8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlO
VE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFT
VCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0YWJsZVt5
eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5T
XTsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKLWAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWI6Ci0gIC8qIElm
IG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3Iu
ICAqLwotICBpZiAoIXl5ZXJyc3RhdHVzKQotICAgIHsKLSAgICAgICsreXluZXJyczsKLSNpZiAh
IFlZRVJST1JfVkVSQk9TRQotICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJy
b3IiKSk7Ci0jZWxzZQotICAgICAgewotCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9y
ICgwLCB5eXN0YXRlLCB5eWNoYXIpOwotCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1z
Z19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKLQkgIHsKLQkgICAgWVlTSVpFX1QgeXlh
bGxvYyA9IDIgKiB5eXNpemU7Ci0JICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFs
bG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCi0JICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tf
QUxMT0NfTUFYSU1VTTsKLQkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotCSAgICAgIFlZU1RB
Q0tfRlJFRSAoeXltc2cpOwotCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5
YWxsb2MpOwotCSAgICBpZiAoeXltc2cpCi0JICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOwot
CSAgICBlbHNlCi0JICAgICAgewotCQl5eW1zZyA9IHl5bXNnYnVmOwotCQl5eW1zZ19hbGxvYyA9
IHNpemVvZiB5eW1zZ2J1ZjsKLQkgICAgICB9Ci0JICB9Ci0KLQlpZiAoMCA8IHl5c2l6ZSAmJiB5
eXNpemUgPD0geXltc2dfYWxsb2MpCi0JICB7Ci0JICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAo
eXltc2csIHl5c3RhdGUsIHl5Y2hhcik7Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsK
LQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVy
cm9yIikpOwotCSAgICBpZiAoeXlzaXplICE9IDApCi0JICAgICAgZ290byB5eWV4aGF1c3RlZGxh
YjsKLQkgIH0KLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotCi0KLSAgaWYgKHl5ZXJyc3RhdHVz
ID09IDMpCi0gICAgewotICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNl
IGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0g
ICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotCXsKLQkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0
IGVuZCBvZiBpbnB1dC4gICovCi0JICBpZiAoeXljaGFyID09IFlZRU9GKQotCSAgICBZWUFCT1JU
OwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmci
LAotCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKLQkgIHl5Y2hhciA9IFlZRU1Q
VFk7Ci0JfQotICAgIH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQg
dG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCi0gICAgIHRva2VuLiAgKi8KLSAgZ290byB5
eWVycmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkg
WVlFUlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwoteXllcnJvcmxhYjoKLQotICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0ND
IHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCi0gICAgIFlZRVJST1IgYW5kIHRoZSBs
YWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKLSAgICAgY29k
ZS4gICovCi0gIGlmICgvKkNPTlNUQ09ORCovIDApCi0gICAgIGdvdG8geXllcnJvcmxhYjsKLQot
ICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24g
dHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsK
LSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB5eXN0YXRl
ID0gKnl5c3NwOwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiMSAt
LSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8Ci1gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCi15eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNo
aWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAgIHsKLSAgICAgIHl5
biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCi0Jewot
CSAgeXluICs9IFlZVEVSUk9SOwotCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYg
eXljaGVja1t5eW5dID09IFlZVEVSUk9SKQotCSAgICB7Ci0JICAgICAgeXluID0geXl0YWJsZVt5
eW5dOwotCSAgICAgIGlmICgwIDwgeXluKQotCQlicmVhazsKLQkgICAgfQotCX0KLQotICAgICAg
LyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJy
b3IgdG9rZW4uICAqLwotICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0JWVlBQk9SVDsKLQotCi0g
ICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1t5eXN0YXRlXSwg
eXl2c3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0YXRlID0g
Knl5c3NwOwotICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAg
aWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gICorK3l5dnNwID0geXlsdmFs
OwotCi0KLSAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5U
ICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0g
eXluOwotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgotfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAot
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0g
IHl5cmVzdWx0ID0gMDsKLSAgZ290byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAg
eXlyZXN1bHQgPSAxOwotICBnb3RvIHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZsb3cKLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXll
eGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVk
bGFiOgotICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Ci0gIHl5
cmVzdWx0ID0gMjsKLSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJldHVybjoK
LSAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0
cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLQkJIHl5dG9rZW4sICZ5eWx2
YWwsIGNvbnRleHQpOwotICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVs
ZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4g
ICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkNs
ZWFudXA6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7Ci0g
ICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAgaWYgKHl5
c3MgIT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lmIFlZRVJS
T1JfVkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19GUkVFICh5
eW1zZyk7Ci0jZW5kaWYKLSAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0gIHJldHVy
biBZWUlEICh5eXJlc3VsdCk7Ci19Ci0KLQotCi0KLQotaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxw
LCBDb250ZXh0KiBjb250ZXh0KQotewotICAgIGludCB0eXBlID0gMDsKLQotICAgIHBwOjpUb2tl
biogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKLSAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAg
IHsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6Ci0gICAgICAgICpsdmFscCA9IHN0
cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOwotICAgICAgICB0eXBlID0gVE9L
X0NPTlNUX0lOVDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9P
UjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5E
OiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6
IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0
eXBlID0gVE9LX09QX0VROyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlw
ZSA9IFRPS19PUF9HRTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUg
PSBUT0tfT1BfTEU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBl
ID0gVE9LX09QX1JJR0hUOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0
eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOwotICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJy
ZWFrOwotICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOwotICAgICAgY2FzZSAnJic6
IHR5cGUgPSAnJic7IGJyZWFrOwotICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOwot
ICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwotICAgICAgY2FzZSAnLSc6IHR5cGUg
PSAnLSc7IGJyZWFrOwotICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOwotICAgICAg
Y2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOwotICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7
IGJyZWFrOwotICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOwotICAgICAgY2FzZSAn
ISc6IHR5cGUgPSAnISc7IGJyZWFrOwotICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFr
OwotICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFrOwotICAgICAgY2FzZSAnKSc6IHR5
cGUgPSAnKSc7IGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAv
LyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4K
LSAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKLQotICAgIHJl
dHVybiB0eXBlOwotfQotCi12b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hh
ciogcmVhc29uKQotewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFzb24pOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1FeHByZXNzaW9uUGFyc2Vy
OjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCi17
Ci19Ci0KLWJvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJl
c3VsdCkKLXsKLSAgICBDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5kaWFnbm9zdGljcyA9
IG1EaWFnbm9zdGljczsKLSAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOwotICAgIGNvbnRleHQu
dG9rZW4gPSB0b2tlbjsKLSAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKLSAgICBpbnQgcmV0
ID0geXlwYXJzZSgmY29udGV4dCk7Ci0gICAgc3dpdGNoIChyZXQpCi0gICAgewotICAgICAgY2Fz
ZSAwOgotICAgICAgY2FzZSAxOgotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAyOgotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9r
ZW4tPmxvY2F0aW9uLCAiIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAg
ICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0ID09IDA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBw
cAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MmQwNTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCi0jZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwotCi0jaW5jbHVkZSAi
cHBfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotY2xh
c3MgTGV4ZXI7Ci1zdHJ1Y3QgVG9rZW47Ci0KLWNsYXNzIEV4cHJlc3Npb25QYXJzZXIKLXsKLSAg
cHVibGljOgotICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpOwotCi0gICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0
KTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNz
aW9uUGFyc2VyKTsKLQotICAgIExleGVyKiBtTGV4ZXI7Ci0gICAgRGlhZ25vc3RpY3MqIG1EaWFn
bm9zdGljczsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJz
ZXIueSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdj
OWYwNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkKKysrIC9kZXYvbnVsbApAQCAtMSwy
ODEgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlh
Y2MgZ3JhbW1hciBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbi4KLQotSUYgWU9V
IE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNo
LAotV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHBh
cnNlci4KLSovCi0KLSV7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpZiBkZWZpbmVk
KF9fR05VQ19fKQotLy8gVG9nZ2xlIHRoZSB3YXJuaW5nIGZvciAtV3ByYWdtYXMgdG8gZW5zdXJl
IHdlIGRvIG5vdCBicmVhayB0aGUgYnVpbGQKLS8vIHdpdGggZWFybGllciBjb21waWxlciB2ZXJz
aW9ucyBiZWNhdXNlIG9mIHVua25vd24gcHJhZ21hIG9wdGlvbnMuCi0jcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XcHJhZ21hcyIKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5l
cmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3VuaW5pdGlhbGl6ZWQiCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWF5YmUt
dW5pbml0aWFsaXplZCIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgd2FybmluZyAiLVdwcmFnbWFz
IgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1
IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKLQotI2luY2x1
ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0j
aW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJMZXhlci5oIgotI2luY2x1ZGUgIlRv
a2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7
Ci0jZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGludC5oPgot
dHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOwotI2VuZGlmICAvLyBfTVNDX1ZFUgotI2RlZmluZSBZ
WUVOQUJMRV9OTFMgMAotI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2RlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQotI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLQotbmFtZXNw
YWNlIHsKLXN0cnVjdCBDb250ZXh0Ci17Ci0gICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGlj
czsKLSAgICBwcDo6TGV4ZXIqIGxleGVyOwotICAgIHBwOjpUb2tlbiogdG9rZW47Ci0gICAgaW50
KiByZXN1bHQ7Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0lfQotCi0lcHVyZS1wYXJzZXIKLSVuYW1l
LXByZWZpeD0icHAiCi0lcGFyc2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9Ci0lbGV4LXBhcmFt
IHtDb250ZXh0ICpjb250ZXh0fQotCi0lewotc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFs
cCwgQ29udGV4dCogY29udGV4dCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0lfQotCi0ldG9rZW4gVE9LX0NPTlNUX0lOVAotJWxl
ZnQgVE9LX09QX09SCi0lbGVmdCBUT0tfT1BfQU5ECi0lbGVmdCAnfCcKLSVsZWZ0ICdeJwotJWxl
ZnQgJyYnCi0lbGVmdCBUT0tfT1BfRVEgVE9LX09QX05FCi0lbGVmdCAnPCcgJz4nIFRPS19PUF9M
RSBUT0tfT1BfR0UKLSVsZWZ0IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAotJWxlZnQgJysnICct
JwotJWxlZnQgJyonICcvJyAnJScKLSVyaWdodCBUT0tfVU5BUlkKLQotJSUKLQotaW5wdXQKLSAg
ICA6IGV4cHJlc3Npb24gewotICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2Fz
dDxpbnQ+KCQxKTsKLSAgICAgICAgWVlBQ0NFUFQ7Ci0gICAgfQotOwotCi1leHByZXNzaW9uCi0g
ICAgOiBUT0tfQ09OU1RfSU5UCi0gICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNzaW9u
IHsKLSAgICAgICAgJCQgPSAkMSB8fCAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uIFRPS19P
UF9BTkQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgJiYgJDM7Ci0gICAgfQotICAgIHwg
ZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgfCAkMzsKLSAgICB9
Ci0gICAgfCBleHByZXNzaW9uICdeJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSBeICQz
OwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyYnIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9
ICQxICYgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lvbiB7
Ci0gICAgICAgICQkID0gJDEgIT0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1Bf
RVEgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPT0gJDM7Ci0gICAgfQotICAgIHwgZXhw
cmVzc2lvbiBUT0tfT1BfR0UgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPj0gJDM7Ci0g
ICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQk
ID0gJDEgPD0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7Ci0g
ICAgICAgICQkID0gJDEgPiAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICc8JyBleHByZXNz
aW9uIHsKLSAgICAgICAgJCQgPSAkMSA8ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gVE9L
X09QX1JJR0hUIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxID4+ICQzOwotICAgIH0KLSAg
ICB8IGV4cHJlc3Npb24gVE9LX09QX0xFRlQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEg
PDwgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7Ci0gICAgICAg
ICQkID0gJDEgLSAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSAkMSArICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJl
c3Npb24gewotICAgICAgICBpZiAoJDMgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdz
dHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOwot
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9C
WV9aRVJPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT50b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQuY19zdHIoKSk7Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgJCQgPSAkMSAlICQzOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgZXhw
cmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmICgkMyA9PSAwKSB7Ci0gICAgICAg
ICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0gPDwgJDEg
PDwgIiAvICIgPDwgJDM7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0
cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZQUJPUlQ7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkJCA9ICQxIC8gJDM7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgfCBleHByZXNzaW9uICcqJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAk
MSAqICQzOwotICAgIH0KLSAgICB8ICchJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7Ci0g
ICAgICAgICQkID0gISAkMjsKLSAgICB9Ci0gICAgfCAnficgZXhwcmVzc2lvbiAlcHJlYyBUT0tf
VU5BUlkgewotICAgICAgICAkJCA9IH4gJDI7Ci0gICAgfQotICAgIHwgJy0nIGV4cHJlc3Npb24g
JXByZWMgVE9LX1VOQVJZIHsKLSAgICAgICAgJCQgPSAtICQyOwotICAgIH0KLSAgICB8ICcrJyBl
eHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7Ci0gICAgICAgICQkID0gKyAkMjsKLSAgICB9Ci0g
ICAgfCAnKCcgZXhwcmVzc2lvbiAnKScgewotICAgICAgICAkJCA9ICQyOwotICAgIH0KLTsKLQot
JSUKLQotaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQotewotICAg
IGludCB0eXBlID0gMDsKLQotICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsK
LSAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpD
T05TVF9JTlQ6Ci0gICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCks
IE5VTEwsIDApOwotICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7
Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7
Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOwot
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsKLSAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7Ci0gICAg
ICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOwotICAgICAg
Y2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsKLSAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOwot
ICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOwotICAgICAgY2FzZSAnXic6IHR5cGUg
PSAnXic7IGJyZWFrOwotICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOwotICAgICAg
Y2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOwotICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7
IGJyZWFrOwotICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwotICAgICAgY2FzZSAn
Kyc6IHR5cGUgPSAnKyc7IGJyZWFrOwotICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFr
OwotICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOwotICAgICAgY2FzZSAnKic6IHR5
cGUgPSAnKic7IGJyZWFrOwotICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOwotICAg
ICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOwotICAgICAgY2FzZSAnKCc6IHR5cGUgPSAn
KCc7IGJyZWFrOwotICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOwotCi0gICAgICBk
ZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2Vu
IGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KLSAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0
LT5sZXhlci0+bGV4KHRva2VuKTsKLQotICAgIHJldHVybiB0eXBlOwotfQotCi12b2lkIHl5ZXJy
b3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIGNvbnRleHQt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRp
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwotfQotCi1uYW1l
c3BhY2UgcHAgewotCi1FeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBs
ZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAg
ICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCi17Ci19Ci0KLWJvb2wgRXhwcmVzc2lvblBhcnNl
cjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKLXsKLSAgICBDb250ZXh0IGNvbnRl
eHQ7Ci0gICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKLSAgICBjb250ZXh0
LmxleGVyID0gbUxleGVyOwotICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKLSAgICBjb250ZXh0
LnJlc3VsdCA9IHJlc3VsdDsKLSAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7Ci0gICAg
c3dpdGNoIChyZXQpCi0gICAgewotICAgICAgY2FzZSAwOgotICAgICAgY2FzZSAxOgotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2Vu
LT5sb2NhdGlvbiwgIiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0
ID09IDA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2RlOTVmLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aW5jbHVkZSAiSW5wdXQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjYXNz
ZXJ0PgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1JbnB1dDo6SW5w
dXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQotewotfQotCi1JbnB1dDo6SW5wdXQoaW50IGNv
dW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6Ci0g
ICAgbUNvdW50KGNvdW50KSwKLSAgICBtU3RyaW5nKHN0cmluZykKLXsKLSAgICBhc3NlcnQobUNv
dW50ID49IDApOwotICAgIG1MZW5ndGgucmVzZXJ2ZShtQ291bnQpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbUNvdW50OyArK2kpCi0gICAgewotICAgICAgICBpbnQgbGVuID0gbGVuZ3RoID8g
bGVuZ3RoW2ldIDogLTE7Ci0gICAgICAgIG1MZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAgPyBzdHJs
ZW4obVN0cmluZ1tpXSkgOiBsZW4pOwotICAgIH0KLX0KLQotaW50IElucHV0OjpyZWFkKGNoYXIq
IGJ1ZiwgaW50IG1heFNpemUpCi17Ci0gICAgaW50IG5SZWFkID0gMDsKLSAgICB3aGlsZSAoKG5S
ZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCi0gICAgewotICAg
ICAgICBpbnQgc2l6ZSA9IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFkTG9jLmNJbmRl
eDsKLSAgICAgICAgc2l6ZSA9IHN0ZDo6bWluKHNpemUsIG1heFNpemUpOwotICAgICAgICBtZW1j
cHkoYnVmICsgblJlYWQsIG1TdHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRl
eCwgc2l6ZSk7Ci0gICAgICAgIG5SZWFkICs9IHNpemU7Ci0gICAgICAgIG1SZWFkTG9jLmNJbmRl
eCArPSBzaXplOwotCi0gICAgICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNoZWQgdGhl
IGVuZCBvZiBjdXJyZW50IHN0cmluZy4KLSAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRleCA9PSBt
TGVuZ3RoW21SZWFkTG9jLnNJbmRleF0pCi0gICAgICAgIHsKLSAgICAgICAgICAgICsrbVJlYWRM
b2Muc0luZGV4OwotICAgICAgICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gblJlYWQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9JbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvSW5wdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNzM0
Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9JbnB1dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCi0jZGVm
aW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgot
Ci1uYW1lc3BhY2UgcHAKLXsKLQotLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4K
LWNsYXNzIElucHV0Ci17Ci0gIHB1YmxpYzoKLSAgICBJbnB1dCgpOwotICAgIElucHV0KGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci0K
LSAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7IH0KLSAgICBjb25zdCBjaGFy
KiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQotICAg
IGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQot
Ci0gICAgaW50IHJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7Ci0KLSAgICBzdHJ1Y3QgTG9j
YXRpb24KLSAgICB7Ci0gICAgICAgIGludCBzSW5kZXg7ICAvLyBTdHJpbmcgaW5kZXg7Ci0gICAg
ICAgIGludCBjSW5kZXg7ICAvLyBDaGFyIGluZGV4LgotCi0gICAgICAgIExvY2F0aW9uKCkgOiBz
SW5kZXgoMCksIGNJbmRleCgwKSB7IH0KLSAgICB9OwotICAgIGNvbnN0IExvY2F0aW9uJiByZWFk
TG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KLQotICBwcml2YXRlOgotICAgIC8vIElu
cHV0LgotICAgIGludCBtQ291bnQ7Ci0gICAgY29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0g
ICAgc3RkOjp2ZWN0b3I8aW50PiBtTGVuZ3RoOwotCi0gICAgTG9jYXRpb24gbVJlYWRMb2M7Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0lOUFVUX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggN2M2NjNlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkxleGVyLmgiCi0K
LW5hbWVzcGFjZSBwcAotewotCi1MZXhlcjo6fkxleGVyKCkKLXsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWI4NWNlYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xF
WEVSX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwotCi1uYW1lc3Bh
Y2UgcHAKLXsKLQotc3RydWN0IFRva2VuOwotCi1jbGFzcyBMZXhlcgotewotICBwdWJsaWM6Ci0g
ICAgdmlydHVhbCB+TGV4ZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2Vu
KSA9IDA7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0xFWEVSX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlMzA4OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIk1h
Y3JvLmgiCi0KLSNpbmNsdWRlICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotYm9vbCBN
YWNybzo6ZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gKHR5
cGUgPT0gb3RoZXIudHlwZSkgJiYKLSAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIubmFtZSkgJiYK
LSAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYKLSAgICAgICAg
ICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBsYWNlbWVudHMpOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDdlYzAxNDkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaAorKysgL2Rldi9udWxsCkBAIC0x
LDQ0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9NQUNST19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KLQotI2lu
Y2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1l
c3BhY2UgcHAKLXsKLQotc3RydWN0IFRva2VuOwotCi1zdHJ1Y3QgTWFjcm8KLXsKLSAgICBlbnVt
IFR5cGUKLSAgICB7Ci0gICAgICAgIGtUeXBlT2JqLAotICAgICAgICBrVHlwZUZ1bmMKLSAgICB9
OwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7Ci0gICAg
dHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gUmVwbGFjZW1lbnRzOwotCi0gICAgTWFjcm8oKSA6
IHByZWRlZmluZWQoZmFsc2UpLCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQot
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBib29sIHBy
ZWRlZmluZWQ7Ci0gICAgbXV0YWJsZSBib29sIGRpc2FibGVkOwotCi0gICAgVHlwZSB0eXBlOwot
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIFJl
cGxhY2VtZW50cyByZXBsYWNlbWVudHM7Ci19OwotCi10eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3Ry
aW5nLCBNYWNybz4gTWFjcm9TZXQ7Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm9FeHBhbmRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNWE3YWUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCi0KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxzc3RyZWFtPgot
Ci0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi1uYW1lc3Bh
Y2UgcHAKLXsKLQotY2xhc3MgVG9rZW5MZXhlciA6IHB1YmxpYyBMZXhlcgotewotIHB1YmxpYzoK
LSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBUb2tlblZlY3RvcjsKLQotICAgIFRva2Vu
TGV4ZXIoVG9rZW5WZWN0b3IqIHRva2VucykKLSAgICB7Ci0gICAgICAgIHRva2Vucy0+c3dhcCht
VG9rZW5zKTsKLSAgICAgICAgbUl0ZXIgPSBtVG9rZW5zLmJlZ2luKCk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pCi0gICAgewotICAgICAgICBpZiAobUl0ZXIg
PT0gbVRva2Vucy5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdG9rZW4tPnJlc2V0KCk7
Ci0gICAgICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpMQVNUOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgKnRva2VuID0gKm1JdGVyKys7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUb2tlbkxleGVyKTsKLQotICAgIFRva2VuVmVjdG9yIG1Ub2tlbnM7Ci0gICAgVG9rZW5WZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIG1JdGVyOwotfTsKLQotTWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBh
bmRlcihMZXhlciogbGV4ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0
KiBtYWNyb1NldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAgICBtTWFjcm9TZXQobWFjcm9TZXQp
LAotICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsKLX0KLQotTWFjcm9FeHBhbmRlcjo6
fk1hY3JvRXhwYW5kZXIoKQotewotICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0eSgpKSBw
b3BNYWNybygpOwotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCi17
Ci0gICAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgICBnZXRUb2tlbih0b2tlbik7Ci0KLSAg
ICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgaWYgKHRva2VuLT5leHBhbnNpb25EaXNhYmxlZCgpKQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
TWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbU1hY3Jv
U2V0LT5lbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNvbnN0IE1hY3JvJiBt
YWNybyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgaWYgKG1hY3JvLmRpc2FibGVkKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBJZiBhIHBhcnRpY3VsYXIgdG9rZW4gaXMgbm90IGV4cGFuZGVk
LCBpdCBpcyBuZXZlciBleHBhbmRlZC4KLSAgICAgICAgICAgIHRva2VuLT5zZXRFeHBhbnNpb25E
aXNhYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICgobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5jKSAmJiAhaXNOZXh0VG9rZW5MZWZ0UGFy
ZW4oKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgdGhlIHRva2VuIGltbWVkaWF0ZWx5
IGFmdGVyIHRoZSBtYWNybyBuYW1lIGlzIG5vdCBhICcoJywKLSAgICAgICAgICAgIC8vIHRoaXMg
bWFjcm8gc2hvdWxkIG5vdCBiZSBleHBhbmRlZC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcHVzaE1hY3JvKG1hY3JvLCAqdG9rZW4pOwotICAgIH0KLX0KLQotdm9p
ZCBNYWNyb0V4cGFuZGVyOjpnZXRUb2tlbihUb2tlbiogdG9rZW4pCi17Ci0gICAgaWYgKG1SZXNl
cnZlVG9rZW4uZ2V0KCkpCi0gICAgewotICAgICAgICAqdG9rZW4gPSAqbVJlc2VydmVUb2tlbjsK
LSAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gRmlyc3QgcG9wIGFsbCBlbXB0eSBtYWNybyBjb250ZXh0cy4KLSAgICB3aGlsZSAo
IW1Db250ZXh0U3RhY2suZW1wdHkoKSAmJiBtQ29udGV4dFN0YWNrLmJhY2soKS0+ZW1wdHkoKSkK
LSAgICB7Ci0gICAgICAgIHBvcE1hY3JvKCk7Ci0gICAgfQotCi0gICAgaWYgKCFtQ29udGV4dFN0
YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAgICAqdG9rZW4gPSBtQ29udGV4dFN0YWNrLmJhY2so
KS0+Z2V0KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1MZXhlci0+bGV4KHRv
a2VuKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6dW5nZXRUb2tlbihjb25zdCBU
b2tlbiYgdG9rZW4pCi17Ci0gICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCi0gICAgewot
ICAgICAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKLSAg
ICAgICAgY29udGV4dC0+dW5nZXQoKTsKLSAgICAgICAgYXNzZXJ0KGNvbnRleHQtPnJlcGxhY2Vt
ZW50c1tjb250ZXh0LT5pbmRleF0gPT0gdG9rZW4pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBhc3NlcnQoIW1SZXNlcnZlVG9rZW4uZ2V0KCkpOwotICAgICAgICBtUmVzZXJ2ZVRv
a2VuLnJlc2V0KG5ldyBUb2tlbih0b2tlbikpOwotICAgIH0KLX0KLQotYm9vbCBNYWNyb0V4cGFu
ZGVyOjppc05leHRUb2tlbkxlZnRQYXJlbigpCi17Ci0gICAgVG9rZW4gdG9rZW47Ci0gICAgZ2V0
VG9rZW4oJnRva2VuKTsKLQotICAgIGJvb2wgbHBhcmVuID0gdG9rZW4udHlwZSA9PSAnKCc7Ci0g
ICAgdW5nZXRUb2tlbih0b2tlbik7Ci0KLSAgICByZXR1cm4gbHBhcmVuOwotfQotCi1ib29sIE1h
Y3JvRXhwYW5kZXI6OnB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBp
ZGVudGlmaWVyKQotewotICAgIGFzc2VydCghbWFjcm8uZGlzYWJsZWQpOwotICAgIGFzc2VydCgh
aWRlbnRpZmllci5leHBhbnNpb25EaXNhYmxlZCgpKTsKLSAgICBhc3NlcnQoaWRlbnRpZmllci50
eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKLSAgICBhc3NlcnQoaWRlbnRpZmllci52YWx1ZSA9
PSBtYWNyby5uYW1lKTsKLQotICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7Ci0g
ICAgaWYgKCFleHBhbmRNYWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBleHBh
bnNpb24gdW50aWwgaXQgaXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCi0gICAgbWFjcm8uZGlzYWJs
ZWQgPSB0cnVlOwotCi0gICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29udGV4
dDsKLSAgICBjb250ZXh0LT5tYWNybyA9ICZtYWNybzsKLSAgICBjb250ZXh0LT5yZXBsYWNlbWVu
dHMuc3dhcChyZXBsYWNlbWVudHMpOwotICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNvbnRl
eHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1hY3Jv
KCkKLXsKLSAgICBhc3NlcnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7Ci0KLSAgICBNYWNyb0Nv
bnRleHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKLSAgICBtQ29udGV4dFN0YWNr
LnBvcF9iYWNrKCk7Ci0KLSAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7Ci0gICAgYXNzZXJ0
KGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCk7Ci0gICAgY29udGV4dC0+bWFjcm8tPmRpc2FibGVk
ID0gZmFsc2U7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci19Ci0KLWJvb2wgTWFjcm9FeHBhbmRlcjo6
ZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCi17Ci0gICAgcmVwbGFj
ZW1lbnRzLT5jbGVhcigpOwotICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZU9iaikK
LSAgICB7Ci0gICAgICAgIHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50cy5i
ZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMu
ZW5kKCkpOwotCi0gICAgICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18iOwotICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsKLQot
ICAgICAgICAgICAgYXNzZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOwotICAgICAgICAg
ICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmZyb250KCk7Ci0gICAgICAgICAgICBpZiAo
bWFjcm8ubmFtZSA9PSBrTGluZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZp
ZXIubG9jYXRpb24ubGluZTsKLSAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0
cigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9PSBr
RmlsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBz
dHJlYW07Ci0gICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24uZmls
ZTsKLSAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGFzc2VydCht
YWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpOwotICAgICAgICBzdGQ6OnZlY3RvcjxNYWNy
b0FyZz4gYXJnczsKLSAgICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgp
KTsKLSAgICAgICAgaWYgKCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAmYXJn
cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmVwbGFjZU1hY3JvUGFy
YW1zKG1hY3JvLCBhcmdzLCByZXBsYWNlbWVudHMpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVwbGFjZW1lbnRzLT5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAgICAgIFRv
a2VuJiByZXBsID0gcmVwbGFjZW1lbnRzLT5hdChpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSByZXBsYWNlbWVu
dCBsaXN0IGluaGVyaXRzIHRoZSBwYWRkaW5nCi0gICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG9m
IHRoZSBpZGVudGlmaWVyIHRva2VuLgotICAgICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0T2ZMaW5l
KGlkZW50aWZpZXIuYXRTdGFydE9mTGluZSgpKTsKLSAgICAgICAgICAgIHJlcGwuc2V0SGFzTGVh
ZGluZ1NwYWNlKGlkZW50aWZpZXIuaGFzTGVhZGluZ1NwYWNlKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHJlcGwubG9jYXRpb24gPSBpZGVudGlmaWVyLmxvY2F0aW9uOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0
IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUb2tlbiYgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4qIGFyZ3MpCi17Ci0gICAgVG9rZW4gdG9rZW47Ci0gICAg
Z2V0VG9rZW4oJnRva2VuKTsKLSAgICBhc3NlcnQodG9rZW4udHlwZSA9PSAnKCcpOwotCi0gICAg
YXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOwotICAgIGZvciAoaW50IG9wZW5QYXJlbnMgPSAx
OyBvcGVuUGFyZW5zICE9IDA7ICkKLSAgICB7Ci0gICAgICAgIGdldFRva2VuKCZ0b2tlbik7Ci0K
LSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFU
RURfSU5WT0NBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOwotICAgICAgICAgICAgLy8gRG8gbm90IGxv
c2UgRU9GIHRva2VuLgotICAgICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzQXJnID0gZmFsc2U7
IC8vIFRydWUgaWYgdG9rZW4gaXMgcGFydCBvZiB0aGUgY3VycmVudCBhcmd1bWVudC4KLSAgICAg
ICAgc3dpdGNoICh0b2tlbi50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAnKCc6Ci0g
ICAgICAgICAgICArK29wZW5QYXJlbnM7Ci0gICAgICAgICAgICBpc0FyZyA9IHRydWU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICcpJzoKLSAgICAgICAgICAgIC0tb3BlblBh
cmVuczsKLSAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVucyAhPSAwOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSAnLCc6Ci0gICAgICAgICAgICAvLyBUaGUgaW5kaXZpZHVh
bCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBjb21tYSB0b2tlbnMsIGJ1dAotICAgICAgICAg
ICAgLy8gdGhlIGNvbW1hIHRva2VucyBiZXR3ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVudGhlc2Vz
IGRvIG5vdAotICAgICAgICAgICAgLy8gc2VwZXJhdGUgYXJndW1lbnRzLgotICAgICAgICAgICAg
aWYgKG9wZW5QYXJlbnMgPT0gMSkgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOwotICAgICAg
ICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaXNBcmcgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzQXJnKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YmFjaygpOwotICAgICAgICAgICAgLy8gSW5pdGlhbCB3
aGl0ZXNwYWNlIGlzIG5vdCBwYXJ0IG9mIHRoZSBhcmd1bWVudC4KLSAgICAgICAgICAgIGlmIChh
cmcuZW1wdHkoKSkgdG9rZW4uc2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKLSAgICAgICAgICAg
IGFyZy5wdXNoX2JhY2sodG9rZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgTWFj
cm86OlBhcmFtZXRlcnMmIHBhcmFtcyA9IG1hY3JvLnBhcmFtZXRlcnM7Ci0gICAgLy8gSWYgdGhl
cmUgaXMgb25seSBvbmUgZW1wdHkgYXJndW1lbnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gbm8gYXJn
dW1lbnQuCi0gICAgaWYgKHBhcmFtcy5lbXB0eSgpICYmIChhcmdzLT5zaXplKCkgPT0gMSkgJiYg
YXJncy0+ZnJvbnQoKS5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgYXJncy0+Y2xlYXIoKTsKLSAg
ICB9Ci0gICAgLy8gVmFsaWRhdGUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCi0gICAgaWYgKGFy
Z3MtPnNpemUoKSAhPSBwYXJhbXMuc2l6ZSgpKQotICAgIHsKLSAgICAgICAgRGlhZ25vc3RpY3M6
OklEIGlkID0gYXJncy0+c2l6ZSgpIDwgbWFjcm8ucGFyYW1ldGVycy5zaXplKCkgPwotICAgICAg
ICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19GRVdfQVJHUyA6Ci0gICAgICAgICAgICBEaWFn
bm9zdGljczo6TUFDUk9fVE9PX01BTllfQVJHUzsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3VtZW50IGJl
Zm9yZSBzdWJzdGl0dXRpb24uCi0gICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBhcmd1bWVu
dCBpbmRpdmlkdWFsbHkgYmVmb3JlIHRoZXkgYXJlCi0gICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUg
bWFjcm8gYm9keS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3MtPnNpemUoKTsgKytp
KQotICAgIHsKLSAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmF0KGkpOwotICAgICAgICBU
b2tlbkxleGVyIGxleGVyKCZhcmcpOwotICAgICAgICBNYWNyb0V4cGFuZGVyIGV4cGFuZGVyKCZs
ZXhlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwotCi0gICAgICAgIGFyZy5jbGVhcigpOwot
ICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKLSAgICAgICAgd2hpbGUgKHRva2VuLnR5cGUg
IT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9r
ZW4pOwotICAgICAgICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3Jv
UGFyYW1zKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1l
bnRzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1lbnRzLnNp
emUoKTsgKytpKQotICAgIHsKLSAgICAgICAgY29uc3QgVG9rZW4mIHJlcGwgPSBtYWNyby5yZXBs
YWNlbWVudHNbaV07Ci0gICAgICAgIGlmIChyZXBsLnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUT0RPKGFsb2tw
KTogT3B0aW1pemUgdGhpcy4KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2gg
Zm9yIG1hY3JvIHBhcmFtcyBldmVyeSB0aW1lLgotICAgICAgICAvLyBUaGUgcGFyYW0gaW5kZXgg
Y2FuIGJlIGNhY2hlZCB3aXRoIHRoZSByZXBsYWNlbWVudCB0b2tlbi4KLSAgICAgICAgTWFjcm86
OlBhcmFtZXRlcnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdGQ6OmZpbmQoCi0gICAgICAgICAg
ICBtYWNyby5wYXJhbWV0ZXJzLmJlZ2luKCksIG1hY3JvLnBhcmFtZXRlcnMuZW5kKCksIHJlcGwu
dmFsdWUpOwotICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGlBcmcgPSBzdGQ6
OmRpc3RhbmNlKG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgaXRlcik7Ci0gICAgICAgIGNvbnN0
IE1hY3JvQXJnJiBhcmcgPSBhcmdzW2lBcmddOwotICAgICAgICBpZiAoYXJnLmVtcHR5KCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHNpemVf
dCBpUmVwbCA9IHJlcGxhY2VtZW50cy0+c2l6ZSgpOwotICAgICAgICByZXBsYWNlbWVudHMtPmlu
c2VydChyZXBsYWNlbWVudHMtPmVuZCgpLCBhcmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsKLSAgICAg
ICAgLy8gVGhlIHJlcGxhY2VtZW50IHRva2VuIGluaGVyaXRzIHBhZGRpbmcgcHJvcGVydGllcyBm
cm9tCi0gICAgICAgIC8vIG1hY3JvIHJlcGxhY2VtZW50IHRva2VuLgotICAgICAgICByZXBsYWNl
bWVudHMtPmF0KGlSZXBsKS5zZXRIYXNMZWFkaW5nU3BhY2UocmVwbC5oYXNMZWFkaW5nU3BhY2Uo
KSk7Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBh
bmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm9FeHBhbmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTA0
ZWJhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNS
T19FWFBBTkRFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5E
RVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRl
ICJMZXhlci5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQot
bmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBNYWNyb0V4cGFu
ZGVyIDogcHVibGljIExleGVyCi17Ci0gIHB1YmxpYzoKLSAgICBNYWNyb0V4cGFuZGVyKExleGVy
KiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOwot
ICAgIHZpcnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9r
ZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihNYWNyb0V4cGFuZGVyKTsKLQotICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2VuKTsKLSAg
ICB2b2lkIHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKLSAgICBib29sIGlzTmV4dFRv
a2VuTGVmdFBhcmVuKCk7Ci0KLSAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8s
IGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKTsKLSAgICB2b2lkIHBvcE1hY3JvKCk7Ci0KLSAgICBi
b29sIGV4cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tl
bj4gTWFjcm9Bcmc7Ci0gICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNy
bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncyk7Ci0g
ICAgdm9pZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50
cyk7Ci0KLSAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0Ci0gICAgewotICAgICAgICBjb25zdCBNYWNy
byogbWFjcm87Ci0gICAgICAgIHNpemVfdCBpbmRleDsKLSAgICAgICAgc3RkOjp2ZWN0b3I8VG9r
ZW4+IHJlcGxhY2VtZW50czsKLQotICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBp
bmRleCgwKSB7IH0KLSAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09
IHJlcGxhY2VtZW50cy5zaXplKCk7IH0KLSAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0
dXJuIHJlcGxhY2VtZW50c1tpbmRleCsrXTsgfQotICAgICAgICB2b2lkIHVuZ2V0KCkgeyAtLWlu
ZGV4OyB9Ci0gICAgfTsKLQotICAgIExleGVyKiBtTGV4ZXI7Ci0gICAgTWFjcm9TZXQqIG1NYWNy
b1NldDsKLSAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOwotCi0gICAgc3RkOjphdXRvX3B0
cjxUb2tlbj4gbVJlc2VydmVUb2tlbjsKLSAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBt
Q29udGV4dFN0YWNrOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNz
b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvUHJlcHJvY2Vzc29yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5
MDFmYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiUHJlcHJvY2Vzc29yLmgiCi0KLSNp
bmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJEaWFnbm9z
dGljcy5oIgotI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgotI2luY2x1ZGUgIk1hY3JvLmgi
Ci0jaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0jaW5jbHVk
ZSAiVG9rZW5pemVyLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgUHJlcHJvY2Vzc29y
SW1wbAotewotICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKLSAgICBNYWNyb1NldCBtYWNy
b1NldDsKLSAgICBUb2tlbml6ZXIgdG9rZW5pemVyOwotICAgIERpcmVjdGl2ZVBhcnNlciBkaXJl
Y3RpdmVQYXJzZXI7Ci0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyOwotCi0gICAgUHJl
cHJvY2Vzc29ySW1wbChEaWFnbm9zdGljcyogZGlhZywKLSAgICAgICAgICAgICAgICAgICAgIERp
cmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKLSAgICAgICAgZGlhZ25vc3RpY3Mo
ZGlhZyksCi0gICAgICAgIHRva2VuaXplcihkaWFnKSwKLSAgICAgICAgZGlyZWN0aXZlUGFyc2Vy
KCZ0b2tlbml6ZXIsICZtYWNyb1NldCwgZGlhZywgZGlyZWN0aXZlSGFuZGxlciksCi0gICAgICAg
IG1hY3JvRXhwYW5kZXIoJmRpcmVjdGl2ZVBhcnNlciwgJm1hY3JvU2V0LCBkaWFnKQotICAgIHsK
LSAgICB9Ci19OwotCi1QcmVwcm9jZXNzb3I6OlByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBk
aXJlY3RpdmVIYW5kbGVyKQotewotICAgIG1JbXBsID0gbmV3IFByZXByb2Nlc3NvckltcGwoZGlh
Z25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpOwotfQotCi1QcmVwcm9jZXNzb3I6On5QcmVwcm9j
ZXNzb3IoKQotewotICAgIGRlbGV0ZSBtSW1wbDsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6Omlu
aXQoaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCi17
Ci0gICAgc3RhdGljIGNvbnN0IGludCBrR0xTTFZlcnNpb24gPSAxMDA7Ci0KLSAgICAvLyBBZGQg
c3RhbmRhcmQgcHJlLWRlZmluZWQgbWFjcm9zLgotICAgIHByZWRlZmluZU1hY3JvKCJfX0xJTkVf
XyIsIDApOwotICAgIHByZWRlZmluZU1hY3JvKCJfX0ZJTEVfXyIsIDApOwotICAgIHByZWRlZmlu
ZU1hY3JvKCJfX1ZFUlNJT05fXyIsIGtHTFNMVmVyc2lvbik7Ci0gICAgcHJlZGVmaW5lTWFjcm8o
IkdMX0VTIiwgMSk7Ci0KLSAgICByZXR1cm4gbUltcGwtPnRva2VuaXplci5pbml0KGNvdW50LCBz
dHJpbmcsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVNYWNybyhj
b25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ry
ZWFtOwotICAgIHN0cmVhbSA8PCB2YWx1ZTsKLQotICAgIFRva2VuIHRva2VuOwotICAgIHRva2Vu
LnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOwotICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0cigp
OwotCi0gICAgTWFjcm8gbWFjcm87Ci0gICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7Ci0gICAg
bWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKLSAgICBtYWNyby5uYW1lID0gbmFtZTsKLSAg
ICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsKLQotICAgIG1JbXBsLT5tYWNy
b1NldFtuYW1lXSA9IG1hY3JvOwotfQotCi12b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRva2VuKiB0
b2tlbikKLXsKLSAgICBib29sIHZhbGlkVG9rZW4gPSBmYWxzZTsKLSAgICB3aGlsZSAoIXZhbGlk
VG9rZW4pCi0gICAgewotICAgICAgICBtSW1wbC0+bWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwot
ICAgICAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2Ug
c2hvdWxkIG5vdCBiZSByZXR1cm5pbmcgaW50ZXJuYWwgcHJlcHJvY2Vzc2luZyB0b2tlbnMuCi0g
ICAgICAgICAgLy8gQ29udmVydCBwcmVwcm9jZXNzaW5nIHRva2VucyB0byBjb21waWxlciB0b2tl
bnMgb3IgcmVwb3J0Ci0gICAgICAgICAgLy8gZGlhZ25vc3RpY3MuCi0gICAgICAgICAgY2FzZSBU
b2tlbjo6UFBfSEFTSDoKLSAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIFRva2VuOjpQUF9OVU1CRVI6Ci0gICAgICAgICAgICBtSW1w
bC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9OVU1CRVIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT52YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRva2VuOjpQUF9P
VEhFUjoKLSAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpJTlZBTElEX0NIQVJBQ1RFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWZlMzViMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1BSRVBST0NFU1NPUl9IXwotCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQotbmFtZXNwYWNl
IHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKLXN0
cnVjdCBQcmVwcm9jZXNzb3JJbXBsOwotc3RydWN0IFRva2VuOwotCi1jbGFzcyBQcmVwcm9jZXNz
b3IKLXsKLSAgcHVibGljOgotICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwotICAgIH5QcmVwcm9jZXNz
b3IoKTsKLQotICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBp
biB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgotICAgIC8vIHN0cmluZzogc3BlY2lmaWVz
IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCi0gICAgLy8gbGVuZ3RoOiBzcGVjaWZp
ZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCi0gICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEws
IGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgotICAgIC8vIElm
IGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5
IGNvbnRhaW5pbmcKLSAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJl
c3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgotICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUg
bGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCi0gICAgLy8gY29ycmVz
cG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSBzdHJpbmcKLSAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0gICAgYm9vbCBpbml0KGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci0g
ICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgotICAgIHZvaWQgcHJlZGVmaW5lTWFjcm8o
Y29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLQotICAgIHZvaWQgbGV4KFRva2VuKiB0b2tl
bik7Ci0KLSAgcHJpdmF0ZToKLSAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJlcHJv
Y2Vzc29yKTsKLQotICAgIFByZXByb2Nlc3NvckltcGwqIG1JbXBsOwotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1Jf
SF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ODI2MTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVm
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KLSNkZWZpbmUgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwotCi1uYW1lc3BhY2UgcHAKLXsKLQot
c3RydWN0IFNvdXJjZUxvY2F0aW9uCi17Ci0gICAgU291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCks
IGxpbmUoMCkgeyB9Ci0gICAgU291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZpbGUoZiks
IGxpbmUobCkgeyB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3Ro
ZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYg
KGxpbmUgPT0gb3RoZXIubGluZSk7Ci0gICAgfQotCi0gICAgaW50IGZpbGU7Ci0gICAgaW50IGxp
bmU7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBs
aHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCi17Ci0gICAgcmV0dXJuIGxocy5lcXVhbHMo
cmhzKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYg
bGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQotewotICAgIHJldHVybiAhbGhzLmVxdWFs
cyhyaHMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjAzODBjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5j
bHVkZSAiVG9rZW4uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLXZvaWQgVG9rZW46OnJlc2V0KCkK
LXsKLSAgICB0eXBlID0gMDsKLSAgICBmbGFncyA9IDA7Ci0gICAgbG9jYXRpb24gPSBTb3VyY2VM
b2NhdGlvbigpOwotICAgIHZhbHVlLmNsZWFyKCk7Ci19Ci0KLWJvb2wgVG9rZW46OmVxdWFscyhj
b25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5
cGUpICYmCi0gICAgICAgICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKLSAgICAgICAgICAg
KGxvY2F0aW9uID09IG90aGVyLmxvY2F0aW9uKSAmJgotICAgICAgICAgICAodmFsdWUgPT0gb3Ro
ZXIudmFsdWUpOwotfQotCi12b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQp
Ci17Ci0gICAgaWYgKHN0YXJ0KQotICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9MSU5FOwot
ICAgIGVsc2UKLSAgICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7Ci19Ci0KLXZvaWQg
VG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKQotewotICAgIGlmIChzcGFjZSkK
LSAgICAgICAgZmxhZ3MgfD0gSEFTX0xFQURJTkdfU1BBQ0U7Ci0gICAgZWxzZQotICAgICAgICBm
bGFncyAmPSB+SEFTX0xFQURJTkdfU1BBQ0U7Ci19Ci0KLXZvaWQgVG9rZW46OnNldEV4cGFuc2lv
bkRpc2FibGVkKGJvb2wgZGlzYWJsZSkKLXsKLSAgICBpZiAoZGlzYWJsZSkKLSAgICAgICAgZmxh
Z3MgfD0gRVhQQU5TSU9OX0RJU0FCTEVEOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3MgJj0gfkVY
UEFOU0lPTl9ESVNBQkxFRDsKLX0KLQotc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0
cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4pCi17Ci0gICAgaWYgKHRva2VuLmhhc0xlYWRp
bmdTcGFjZSgpKQotICAgICAgICBvdXQgPDwgIiAiOwotCi0gICAgb3V0IDw8IHRva2VuLnZhbHVl
OwotICAgIHJldHVybiBvdXQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzEwMjEuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLSNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCi0KLSNpbmNsdWRlIDxvc3RyZWFtPgotI2luY2x1
ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCi0KLW5hbWVzcGFjZSBw
cAotewotCi1zdHJ1Y3QgVG9rZW4KLXsKLSAgICBlbnVtIFR5cGUKLSAgICB7Ci0gICAgICAgIExB
U1QgPSAwLCAgLy8gRU9GLgotCi0gICAgICAgIElERU5USUZJRVIgPSAyNTgsCi0KLSAgICAgICAg
Q09OU1RfSU5ULAotICAgICAgICBDT05TVF9GTE9BVCwKLQotICAgICAgICBPUF9JTkMsCi0gICAg
ICAgIE9QX0RFQywKLSAgICAgICAgT1BfTEVGVCwKLSAgICAgICAgT1BfUklHSFQsCi0gICAgICAg
IE9QX0xFLAotICAgICAgICBPUF9HRSwKLSAgICAgICAgT1BfRVEsCi0gICAgICAgIE9QX05FLAot
ICAgICAgICBPUF9BTkQsCi0gICAgICAgIE9QX1hPUiwKLSAgICAgICAgT1BfT1IsCi0gICAgICAg
IE9QX0FERF9BU1NJR04sCi0gICAgICAgIE9QX1NVQl9BU1NJR04sCi0gICAgICAgIE9QX01VTF9B
U1NJR04sCi0gICAgICAgIE9QX0RJVl9BU1NJR04sCi0gICAgICAgIE9QX01PRF9BU1NJR04sCi0g
ICAgICAgIE9QX0xFRlRfQVNTSUdOLAotICAgICAgICBPUF9SSUdIVF9BU1NJR04sCi0gICAgICAg
IE9QX0FORF9BU1NJR04sCi0gICAgICAgIE9QX1hPUl9BU1NJR04sCi0gICAgICAgIE9QX09SX0FT
U0lHTiwKLQotICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgotICAgICAgICAv
LyBUaGVzZSB0eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFsbHkuCi0g
ICAgICAgIC8vIFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBjaGVjayBm
b3IgdGhlbS4KLSAgICAgICAgUFBfSEFTSCwKLSAgICAgICAgUFBfTlVNQkVSLAotICAgICAgICBQ
UF9PVEhFUgotICAgIH07Ci0gICAgZW51bSBGbGFncwotICAgIHsKLSAgICAgICAgQVRfU1RBUlRf
T0ZfTElORSAgID0gMSA8PCAwLAotICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAxIDw8IDEs
Ci0gICAgICAgIEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgotICAgIH07Ci0KLSAgICBUb2tl
bigpIDogdHlwZSgwKSwgZmxhZ3MoMCkgeyB9Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9v
bCBlcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgotICAgIC8vIEl0IGRpc3JlZ2Fy
ZHMgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25z
dCB7IHJldHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9Ci0gICAgdm9pZCBz
ZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOwotCi0gICAgYm9vbCBoYXNMZWFkaW5nU3BhY2Uo
KSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsgfQotICAg
IHZvaWQgc2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOwotCi0gICAgYm9vbCBleHBhbnNp
b25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNBQkxFRCkg
IT0gMDsgfQotICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKTsKLQot
ICAgIGludCB0eXBlOwotICAgIHVuc2lnbmVkIGludCBmbGFnczsKLSAgICBTb3VyY2VMb2NhdGlv
biBsb2NhdGlvbjsKLSAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKLX07Ci0KLWlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKLXsKLSAgICByZXR1
cm4gbGhzLmVxdWFscyhyaHMpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRv
a2VuJiBsaHMsIGNvbnN0IFRva2VuJiByaHMpCi17Ci0gICAgcmV0dXJuICFsaHMuZXF1YWxzKHJo
cyk7Ci19Ci0KLWV4dGVybiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBv
dXQsIGNvbnN0IFRva2VuJiB0b2tlbik7Ci0KLX0gIC8vIG5hbWVwc2FjZSBwcAotI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9U
b2tlbml6ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmMzZDFjLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQ0ICswLDAgQEAKLSNs
aW5lIDE2ICIuL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwiCi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8g
Tk9UIEVESVQhCi0KLQotCi0jbGluZSAxMyAiLi9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5j
cHAiCi0KLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwg
c2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2Rl
ZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJ
T04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVYX1NV
Qk1JTk9SX1ZFUlNJT04gPiAwCi0jZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0
LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlz
c3Vlcy4gKi8KLQotLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0
ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLQotLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxleCBp
bnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUg
RkxFWElOVF9ICi0KLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5
c3RlbXMgbWF5IG9yIG1heSBub3QuICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9f
KSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVmaW5l
IF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlv
dSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICovCi0j
aWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAx
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4X2lu
dDhfdDsKLXR5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxl
eF9pbnQxNl90OwotdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBpbnQz
Ml90IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNlbHNl
Ci10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxl
eF9pbnQxNl90OwotdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIGZsZXhfdWludDhfdDsgCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQx
Nl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5
OSAqLwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlO
Ci0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYg
SU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2Vu
ZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgt
MjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFY
ICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUg
SU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFY
Ci0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNp
Zm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0j
ZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAg
ICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFY
ICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5U
X0ggKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xh
c3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZQkv
KiAhIF9fY3BsdXNwbHVzICovCi0KLS8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZp
bmVkIGFzIDEuICovCi0jaWYgZGVmaW5lZCAoX19TVERDX18pCi0KLSNkZWZpbmUgWVlfVVNFX0NP
TlNUCi0KLSNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZgkvKiAhIF9fY3Bs
dXNwbHVzICovCi0KLSNpZmRlZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBjb25zdAot
I2Vsc2UKLSNkZWZpbmUgeXljb25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24gZW5kLW9m
LWZpbGUuICovCi0jZGVmaW5lIFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5l
Z2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50ZWdlciBm
b3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZl
LAotICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNo
YXIsIGhlbmNlIHRoZQotICogZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0NfVE9fVUko
YykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFxdWUgcG9p
bnRlci4gKi8KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUgWVlfVFlQ
RURFRl9ZWV9TQ0FOTkVSX1QKLXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYKLQotLyog
Rm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxv
dykKLSAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2RlZmluZSB5
eWluIHl5Zy0+eXlpbl9yCi0jZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmluZSB5eWV4
dHJhIHl5Zy0+eXlleHRyYV9yCi0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0jZGVmaW5l
IHl5dGV4dCB5eWctPnl5dGV4dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2JzX2xpbmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlf
ZmxleF9kZWJ1Z19yCi0KLS8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyBy
ZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlz
Z3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5p
dGlvbiBvZiBCRUdJTi4KLSAqLwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIg
KgotCi0vKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRo
YXQgY2FuIGJlIGxhdGVyIGhhbmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0
ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8K
LSNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmluZSBZWVNU
QVRFIFlZX1NUQVJUCi0KLS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4g
c3RhcnQgc3RhdGUuICovCi0jZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9C
VUZGRVIgKyBzdGF0ZSArIDEpCi0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHBy
b2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5
eWluICx5eXNjYW5uZXIgKQotCi0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCi0KLS8q
IFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9TSVpFCi0j
ZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1ZiBtdXN0
IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBt
YWluIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJ
WkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotdHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2lm
bmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAot
dHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIDAKLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9B
Q1RfTEFTVF9NQVRDSCAyCi0KLSAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCi0gICAgCi0v
KiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRv
IHRoZSBpbnB1dCBzdHJlYW0uICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwK
LQkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGlu
dCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVz
c19tYWNyb19hcmcpO1wKLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0JCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAg
KyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLQkJWVlfRE9fQkVGT1JFX0FDVElP
TjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLSNk
ZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkK
LQotI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NUUlVDVF9Z
WV9CVUZGRVJfU1RBVEUKLXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAqeXlfaW5w
dXRfZmlsZTsKLQotCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwotCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0J
LyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3Ig
RU9CCi0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLQkv
KiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5n
IEVPQgotCSAqIGNoYXJhY3RlcnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLQkv
KiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQg
aXQsCi0JICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVl
KCkgaXQgdG8KLQkgKiBkZWxldGUgaXQuCi0JICovCi0JaW50IHl5X2lzX291cl9idWZmZXI7Ci0K
LQkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNv
LCBhbmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0
byB1c2UgZ2V0YygpCi0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3Rv
cCBmZXRjaGluZyBpbnB1dCBhZnRlcgotCSAqIGVhY2ggbmV3bGluZS4KLQkgKi8KLQlpbnQgeXlf
aXNfaW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQg
dGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0JICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFj
dGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0JICogbm90LgotCSAqLwotCWludCB5
eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAq
LwotICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAK
LQkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFj
aCB0aGUKLQkgKiBlbmQgb2YgaXQuCi0JICovCi0JaW50IHl5X2ZpbGxfYnVmZmVyOwotCi0JaW50
IHl5X2J1ZmZlcl9zdGF0dXM7Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVmaW5lIFlZ
X0JVRkZFUl9OT1JNQUwgMQotCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdz
IHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0JICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIg
YXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLQkgKiBzaG91bGRuJ3QgdHJ5
IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLQkgKiBz
dGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YK
LQkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotCSAqCi0JICogV2hlbiB3ZSBhY3R1YWxseSBzZWUg
dGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHBwcmVzdGFy
dCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLQkgKiBqdXN0
IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KLQkgKi8KLSNkZWZpbmUgWVlfQlVG
RkVSX0VPRl9QRU5ESU5HIDIKLQotCX07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUgKi8KLQotLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3Rh
dGVzIGluIGNhc2UgaW4gdGhlCi0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBz
dGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBSZXR1
cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NVUlJF
TlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlvdXMg
bWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBu
b3QKLSAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBv
bmx5LgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZl
cl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0IChGSUxF
ICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNoX3RvX2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
WVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RB
VEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVG
RkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0
YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12
b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRpYyB2
b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMg
dm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMg
dm9pZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nh
bl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXlj
b25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQot
dm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBw
cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBw
ZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVm
ZmVyIHBwX2NyZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50
ZXJhY3RpdmUpIFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAg
ICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JV
Rl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5lIHl5X3Nl
dF9ib2woYXRfYm9sKSBcCi0JeyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAotICAg
ICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gICAgXAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZ
X0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLQl9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNlY3QzICov
Ci0KLSNkZWZpbmUgcHB3cmFwKG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0K
LSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5X3N0YXRl
X3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlz
Y2FuX3QgeXlzY2FubmVyKTsKLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIg
bXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50
IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGlu
ZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNU
SU9OIFwKLQl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXplX3QpICh5
eV9jcCAtIHl5X2JwKTsgXAotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0JKnl5X2Nw
ID0gJ1wwJzsgXAotCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9S
VUxFUyAzNwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDM4Ci0vKiBUaGlzIHN0cnVjdCBpcyBu
b3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2Fy
eS4gKi8KLXN0cnVjdCB5eV90cmFuc19pbmZvCi0JewotCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7
Ci0JZmxleF9pbnQzMl90IHl5X254dDsKLQl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90
IHl5X2FjY2VwdFs4NF0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgIDM4LCAgIDM2LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAotICAgICAgICA3LCAgIDMzLCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAotICAgICAgICA5
LCAgIDMzLCAgIDMzLCAgIDMzLCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAot
ICAgICAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEy
LCAgIDIzLAotICAgICAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAg
ICA5LCAgIDExLCAgIDExLAotICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4
LCAgIDE3LCAgIDE1LCAgICA4LCAgIDMxLAotICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAg
ICA1LCAgICA2LCAgIDExLCAgIDEwLCAgIDExLCAgICAxLAotICAgICAgIDEwLCAgIDExLCAgICAw
LCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAotICAgICAgIDEwLCAg
IDEwLCAgICAwCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMiwgICAgMywKLSAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKLSAg
ICAgICAgOSwgICAxMCwgICAxMSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwg
ICAxNiwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAg
OSwgICAgOSwgICAxOCwKLSAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwg
ICAyMSwgICAyMSwgICAyMiwgICAyMSwKLSAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwgICAyMywgICAyMywKLSAgICAgICAgOSwgICAg
MSwgICAgOSwgICAyNSwgICAyMywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLQotICAg
ICAgIDIyLCAgIDIxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLAotICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDI0LAotICAgICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKLSAg
ICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KLSAgICB7
ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMywKLSAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwg
ICAgNSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
MSwgICAgMQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4
OV0gPQotICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5
LCAgMTUwLCAgMTU5LCAgMTQ1LCAgMTI4LAotICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAg
MTExLCAgIDIxLCAgIDI1LCAgIDMwLCAgIDI5LCAgIDM2LAotICAgICAgIDQ2LCAgIDM2LCAgMTAw
LCAgIDQ1LCAgICAwLCAgIDE2LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAotICAgICAgIDY1LCAg
IDczLCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAotICAg
ICAgMTU5LCAgMTU5LCAgIDYxLCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAg
IDgzLAotICAgICAgIDk1LCAgIDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5
LCAgICAwLCAgMTU5LAotICAgICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAg
IDk4LCAgICAwLCAgMTEwLCAgICAwLAotICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgw
LCAgMTU5LCAgMTU5LCAgMTAxLCAgIDk3LCAgMTEyLAotICAgICAgMTIwLCAgMTIzLCAgMTU5LCAg
MTQwLCAgIDI4LCAgMTQ1LCAgMTUwLCAgMTUyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9kZWZbODldID0KLSAgICB7ICAgMCwKLSAgICAgICA4MywgICAgMSwgICA4
NCwgICA4NCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAg
ICAgICAyMCwgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4Mywg
ICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4Mywg
ICA4MywgICAyMCwgICAyMCwgICA0NywKLSAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4NSwgICA4MywKLSAgICAgICA4MywgICA4MywgICA4Mywg
ICA4NiwgICA4MywgICA4MywgICA0MywgICA0MywgICA2NywgICA4NywKLSAgICAgICA0NywgICA1
MCwgICA4MywgICA1MSwgICA4OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKLSAgICAg
ICA4MywgICA4MywgICAgMCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MwotICAgIH0gOwot
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQotICAgIHsgICAwLAot
ICAgICAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0
LCAgIDE1LAotICAgICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAg
IDIyLCAgIDIzLCAgIDI0LAotICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3
LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMwLAotICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAg
IDYwLCAgIDMxLCAgIDQxLCAgIDc3LCAgIDQ0LCAgIDQwLAotICAgICAgIDYxLCAgIDM3LCAgIDQ1
LCAgIDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAotICAgICAgIDQ4LCAg
IDQ4LCAgIDQ5LCAgIDU0LCAgIDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAotICAg
ICAgIDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAg
IDUwLAotICAgICAgIDQ5LCAgIDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4
LCAgIDY2LCAgIDUwLAotICAgICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAg
IDY1LCAgIDcxLCAgIDcxLCAgIDcxLAotICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcy
LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAotCi0gICAgICAgODMsICAgODMsICAgNTAs
ICAgNTAsICAgNTAsICAgNzMsICAgNzMsICAgODMsICAgODMsICAgNzQsCi0gICAgICAgNzQsICAg
NzQsICAgNjcsICAgNjcsICAgNjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCi0gICAg
ICAgNzgsICAgNzgsICAgODMsICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAg
MzgsCi0gICAgICAgMzUsICAgODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIs
ICAgODIsICAgODIsCi0gICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAg
MzQsICAgMzMsICAgNjQsICAgNjQsCi0gICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAs
ICAgNzUsICAgNzUsICAgODMsICAgIDUsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X2Noa1sxODZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwg
ICAgNCwKLSAgICAgICAxMywgICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1
OCwgICAxOSwgICAxNiwKLSAgICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwg
ICAxOCwgICAxOSwgICAyMCwgICA1NCwKLSAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAy
MiwgICA0OCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwKLSAgICAgICAyMSwgICAyMSwgICAyMSwg
ICAyNCwgICAyNCwgICAyNywgICA3MywgICA3MywgICA3MywgICAyMSwKLSAgICAgICA0OSwgICA0
OSwgICAyNywgICA0MywgICAzMiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKLSAgICAg
ICA1MiwgICA0MywgICA0MywgICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0
NywKLSAgICAgICA1MiwgICA1MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwg
ICA1MCwgICA1MCwKLQotICAgICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAg
IDUxLCAgIDc5LCAgIDc5LCAgIDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3
LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDIzLCAgIDY3LAotICAgICAgIDY5LCAgIDY5LCAgIDgwLCAg
IDgwLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDcyLCAgIDcyLCAgIDE1LAotICAgICAgIDEyLCAgIDcy
LCAgIDcyLCAgIDcyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAotICAgICAg
IDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2
LAotICAgICAgIDg3LCAgICA3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAg
IDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzCi0gICAgfSA7Ci0KLS8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBp
cyB0aGF0IGl0J2xsIGNhdGNoCi0gKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNz
ZWQuCi0gKi8KLSNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNk
ZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSBZWV9N
T1JFX0FESiAwCi0jZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLS8qCi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZv
ciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlv
IDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2Vu
LXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1Ug
QUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0jaW5jbHVkZSAiVG9r
ZW5pemVyLmgiCi0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIlRva2VuLmgi
Ci0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVy
YXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgotI2VuZGlmCi0KLXR5cGVkZWYgc3RkOjpzdHJpbmcg
WVlTVFlQRTsKLXR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7Ci0KLS8vIFVzZSB0
aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVy
LgotI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgotCi0jZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAg
ICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGlu
ZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFj
ZSA9IGZhbHNlOyBcCi0gICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCi0g
ICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAm
eXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKLSAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5z
SW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBc
Ci0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVu
Z3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAotICAgICAgICAgICAgKyt5eWZpbGVubzsgeXls
aW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5
eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDAp
OwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0
ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOwotCi0jZGVmaW5lIElOSVRJQUwg
MAotI2RlZmluZSBDT01NRU5UIDEKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpUb2tlbml6
ZXI6OkNvbnRleHQqCi0KLS8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFu
dCBzY2FubmVyLiAqLwotc3RydWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1kZWZp
bmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9y
OwotCi0gICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVk
IGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAqeXlv
dXRfcjsKLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Ag
b2Ygc3RhY2suICovCi0gICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNp
dHkgb2Ygc3RhY2suICovCi0gICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAv
Kio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIHl5
X3NpemVfdCB5eV9uX2NoYXJzOwotICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKLSAgICBjaGFyICp5
eV9jX2J1Zl9wOwotICAgIGludCB5eV9pbml0OwotICAgIGludCB5eV9zdGFydDsKLSAgICBpbnQg
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOwotICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7
Ci0gICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOwotICAgIGludCAqeXlfc3RhcnRfc3RhY2s7
Ci0gICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBjaGFyKiB5
eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCi0gICAgaW50IHl5bGluZW5vX3I7Ci0gICAgaW50IHl5
X2ZsZXhfZGVidWdfcjsKLQotICAgIGNoYXIgKnl5dGV4dF9yOwotICAgIGludCB5eV9tb3JlX2Zs
YWc7Ci0gICAgaW50IHl5X21vcmVfbGVuOwotCi0gICAgWVlTVFlQRSAqIHl5bHZhbF9yOwotCi0g
ICAgWVlMVFlQRSAqIHl5bGxvY19yOwotCi0gICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAq
LwotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LSAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJl
IGluY2x1ZGVkCi0gICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCi0gICAg
IyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKLSAgICAKLSAgICAjICAgIGRlZmluZSB5
eWxsb2MgeXlnLT55eWxsb2NfcgotICAgIAotaW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2Fu
bmVyKTsKLQotaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVk
LHl5c2Nhbl90KiBzY2FubmVyKTsKLQotLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgot
ICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBj
b252ZW5pZW5jZS4gKi8KLQotaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OwotCi1pbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0
X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZX0VYVFJB
X1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2V4
dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LUZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9pbiAg
KEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9vdXQg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3Ry
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQoteXlfc2l6ZV90IHBwZ2V0X2xlbmcgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi1jaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRf
bGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWVNUWVBF
ICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbHZhbCAo
WVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAgICBZ
WUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICAgICAg
dm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLSAgICAKLS8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJp
ZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRl
ZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGludCBwcHdy
YXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLWV4dGVybiBpbnQgcHB3cmFwICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgot
c3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5
eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgotc3Rh
dGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5l
cik7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1c3BsdXMK
LXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotc3RhdGlj
IGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLQotI2VuZGlmCi0KLS8q
IEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNpZm5kZWYg
WVlfUkVBRF9CVUZfU0laRQotI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNlbmRpZgot
Ci0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQg
b3V0cHV0LiAqLwotI2lmbmRlZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwg
YnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5vdyB1c2Ug
ZndyaXRlKCkuCi0gKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5
eW91dCApCi0jZW5kaWYKLQotLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIu
ICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0dXJuZWQg
aW4gInJlc3VsdCIuCi0gKi8KLSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5QVVQoYnVm
LHJlc3VsdCxtYXhfc2l6ZSkgXAotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSApIFwKLQkJeyBcCi0JCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBu
OyBcCi0JCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAotCQkJICAgICAoYyA9IGdldGMo
IHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAotCQkJYnVmW25dID0gKGNoYXIp
IGM7IFwKLQkJaWYgKCBjID09ICdcbicgKSBcCi0JCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCi0J
CWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0JCQlZWV9GQVRBTF9FUlJPUigg
ImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJcmVzdWx0ID0gbjsgXAotCQl9
IFwKLQllbHNlIFwKLQkJeyBcCi0JCWVycm5vPTA7IFwKLQkJd2hpbGUgKCAocmVzdWx0ID0gZnJl
YWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotCQkJeyBc
Ci0JCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKLQkJCQl7IFwKLQkJCQlZWV9GQVRBTF9FUlJPUigg
ImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLQkJCQlicmVhazsgXAotCQkJCX0g
XAotCQkJZXJybm89MDsgXAotCQkJY2xlYXJlcnIoeXlpbik7IFwKLQkJCX0gXAotCQl9XAotXAot
Ci0jZW5kaWYKLQotLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2Ug
aXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJh
ICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUg
Y29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8K
LSNpZm5kZWYgeXl0ZXJtaW5hdGUKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVM
TAotI2VuZGlmCi0KLS8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlv
biBzdGFjayBncm93cy4gKi8KLSNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZ
WV9TVEFSVF9TVEFDS19JTkNSIDI1Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3Iu
ICovCi0jaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykg
eXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVz
IHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0
IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIg
Y2FuCi0gKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2Rl
ZmluZSBZWV9ERUNMX0lTX09VUlMgMQotCi1leHRlcm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAg
ICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nh
bl90IHl5c2Nhbm5lcik7Ci0KLSNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAotICAgICAgICAg
ICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVj
dXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxl
bmcKLSAqIGhhdmUgYmVlbiBzZXQgdXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04KLSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBl
bmQgb2YgZWFjaCBydWxlLiAqLwotI2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBi
cmVhazsKLSNlbmRpZgotCi0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotCVlZX1VTRVJfQUNUSU9O
Ci0KLS8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3Jr
LgotICovCi1ZWV9ERUNMCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlOwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0JcmVnaXN0ZXIgaW50IHl5X2Fj
dDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0KLSAgICAvKiBMaW5lIGNvbW1lbnQgKi8KLQotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJh
bTsKLQotICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKLQotCWlmICggIXl5Zy0+eXlfaW5pdCAp
Ci0JCXsKLQkJeXlnLT55eV9pbml0ID0gMTsKLQotI2lmZGVmIFlZX1VTRVJfSU5JVAotCQlZWV9V
U0VSX0lOSVQ7Ci0jZW5kaWYKLQotCQlpZiAoICEgeXlnLT55eV9zdGFydCApCi0JCQl5eWctPnl5
X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KLQotCQlpZiAoICEgeXlpbiApCi0J
CQl5eWluID0gc3RkaW47Ci0KLQkJaWYgKCAhIHl5b3V0ICkKLQkJCXl5b3V0ID0gc3Rkb3V0Owot
Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLQkJCXBwZW5zdXJlX2J1ZmZlcl9zdGFj
ayAoeXlzY2FubmVyKTsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0JCQkJcHBfY3Jl
YXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotCQl9Ci0KLQkJcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0JCX0KLQotCXdoaWxlICggMSApCQkvKiBsb29w
cyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCi0JCXsKLQkJeXlfY3AgPSB5eWctPnl5
X2NfYnVmX3A7Ci0KLQkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0JCSp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOwotCi0JCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlf
Y2hfYnVmIG9mIHRoZSBzdGFydCBvZgotCQkgKiB0aGUgY3VycmVudCBydW4uCi0JCSAqLwotCQl5
eV9icCA9IHl5X2NwOwotCi0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwoteXlf
bWF0Y2g6Ci0JCWRvCi0JCQl7Ci0JCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9T
Q19UT19VSSgqeXlfY3ApXTsKLQkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkK
LQkJCQl7Ci0JCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7Ci0JCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCQkJfQotCQkJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQotCQkJCXsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCi0J
CQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJCX0KLQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOwotCQkJKyt5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0
YXRlICE9IDgzICk7Ci0JCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCQl5
eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQoteXlfZmlu
ZF9hY3Rpb246Ci0JCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKLQotCQlZ
WV9ET19CRUZPUkVfQUNUSU9OOwotCi1kb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBv
bmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KLQotCQlzd2l0Y2ggKCB5eV9hY3QgKQotCXsg
LyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLQkJCWNhc2UgMDogLyogbXVzdCBiYWNr
IHVwICovCi0JCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8K
LQkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQkJeXlfY3AgPSB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3M7Ci0JCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZTsKLQkJCWdvdG8geXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVf
U0VUVVAKLQotCVlZX0JSRUFLCi0vKiBCbG9jayBjb21tZW50ICovCi0vKiBMaW5lIGJyZWFrcyBh
cmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLwotLyogVGhlIGNvbW1lbnQgaXMgcmVw
bGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAotY2FzZSAyOgotWVlfUlVMRV9TRVRVUAoteyBC
RUdJTihDT01NRU5UKTsgfQotCVlZX0JSRUFLCi1jYXNlIDM6Ci1ZWV9SVUxFX1NFVFVQCi0KLQlZ
WV9CUkVBSwotY2FzZSA0OgotWVlfUlVMRV9TRVRVUAotCi0JWVlfQlJFQUsKLWNhc2UgNToKLS8q
IHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17ICsreXlsaW5lbm87IH0K
LQlZWV9CUkVBSwotY2FzZSA2OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IHRydWU7Ci0gICAgQkVHSU4oSU5JVElBTCk7Ci19Ci0JWVlfQlJFQUsKLWNhc2Ug
NzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2Yg
bGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCi0gICAgeXlsdmFsLT5hc3NpZ24oMSwg
eXl0ZXh0WzBdKTsKLSAgICByZXR1cm4geXlleHRyYS0+bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQ
UF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKLX0KLQlZWV9CUkVBSwotY2FzZSA4OgotWVlf
UlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwotfQotCVlZX0JSRUFLCi1jYXNlIDk6Ci1ZWV9S
VUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JV
TEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Ci19Ci0JWVlfQlJFQUsKLS8qIEFueXRoaW5nIHRo
YXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICov
Ci0vKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCi1j
YXNlIDExOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Ci19Ci0JWVlfQlJFQUsKLWNh
c2UgMTI6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKLX0KLQlZWV9CUkVBSwotY2FzZSAx
MzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOwotfQotCVlZX0JSRUFLCi1jYXNlIDE0Ogot
WVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOwotfQotCVlZX0JSRUFLCi1jYXNlIDE1OgotWVlf
UlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JV
TEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfTEU7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9SVUxFX1NF
VFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0dFOwotfQotCVlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9TRVRVUAot
ewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9FUTsKLX0KLQlZWV9CUkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VUVVAKLXsKLSAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfTkU7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FO
RDsKLX0KLQlZWV9CUkVBSwotY2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SOwot
fQotCVlZX0JSRUFLCi1jYXNlIDIyOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKLX0KLQlZ
WV9CUkVBSwotY2FzZSAyMzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjsKLX0K
LQlZWV9CUkVBSwotY2FzZSAyNDoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsK
LX0KLQlZWV9CUkVBSwotY2FzZSAyNToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lH
TjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FT
U0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9E
X0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyODoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
TEVGVF9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX1JJR0hUX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMDoKLVlZX1JVTEVfU0VUVVAK
LXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfQU5EX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMToKLVlZX1JVTEVfU0VU
VVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMjoKLVlZX1JVTEVf
U0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDMzOgotWVlfUlVM
RV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Ci0gICAgcmV0dXJu
IHl5dGV4dFswXTsKLX0KLQlZWV9CUkVBSwotY2FzZSAzNDoKLVlZX1JVTEVfU0VUVVAKLXsgeXll
eHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQotCVlZX0JSRUFLCi1jYXNlIDM1OgotLyogcnVs
ZSAzNSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxpbmVubzsK
LSAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0KLQlZWV9C
UkVBSwotY2FzZSAzNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbigxLCB5
eXRleHRbMF0pOwotICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOwotfQotCVlZX0JSRUFL
Ci1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKLWNhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQp
OgotewotICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBF
T0YuCi0gICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgotICAg
IHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7Ci0gICAgcHA6OklucHV0OjpMb2Nh
dGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOwotICAgIGludCBzSW5kZXhNYXggPSBz
dGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOwotICAgIGlmIChzY2FuTG9jLT5zSW5kZXgg
IT0gc0luZGV4TWF4KQotICAgIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBp
ZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKLSAgICAgICAgLy8gZW5kIG9mIHRoZSBp
bnB1dC4KLSAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5k
ZXggPSAwOwotICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOwotICAg
IH0KLSAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKLSAgICB5eWxsb2MtPmxpbmUgPSB5eWxp
bmVubzsKLSAgICB5eWx2YWwtPmNsZWFyKCk7Ci0KLSAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVO
VCkKLSAgICB7Ci0gICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7Ci0gICAgfQotICAgIHl5dGVybWluYXRlKCk7
Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMzc6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotCVlZX0JSRUFL
Ci0KLQljYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0JCXsKLQkJLyogQW1vdW50IG9mIHRleHQgbWF0
Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLQkJaW50IHl5X2Ftb3VudF9vZl9t
YXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotCQkv
KiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0JCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0KLQkJaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVS
X05FVyApCi0JCQl7Ci0JCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNv
dXJjZS4gIEl0J3MKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRo
ZSB1c2VyCi0JCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxl
ZAotCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0JCQkgKiBj
b25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLQkJCSAqIGdsb2Jh
bHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotCQkJICogdGhp
cyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLQkJCSAqIGJhY2st
dXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0JCQkgKi8KLQkJ
CXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsK
LQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47Ci0JCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9S
TUFMOwotCQkJfQotCi0JCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3Ag
Ijw9IiB0byB0aGUgcG9zaXRpb24KLQkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVy
LCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLQkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50
ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRy
YW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLQkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250
cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLQkJICogaW4gaW5wdXQoKS4KLQkJICovCi0JCWlmICgg
eXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5
eWctPnl5X25fY2hhcnNdICkKLQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJ
eXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0JCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJLyogT2th
eSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0JCQkgKiB0cmFuc2l0aW9u
LiAgV2UgY291bGRuJ3QgaGF2ZQotCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhl
YWQgYW5kIGRvIGl0Ci0JCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRv
IGRlYWwKLQkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24n
dAotCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0J
CQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0JCQkgKi8KLQotCQkJeXlfbmV4dF9zdGF0ZSA9
IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0JCQl5
eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0JCQlpZiAoIHl5X25leHRf
c3RhdGUgKQotCQkJCXsKLQkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCi0JCQkJeXlfY3AgPSAr
K3l5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsK
LQkJCQlnb3RvIHl5X21hdGNoOwotCQkJCX0KLQotCQkJZWxzZQotCQkJCXsKLQkJCQl5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwotCQkJ
CX0KLQkJCX0KLQotCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQotCQkJewotCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCXsKLQkJCQl5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLQkJCQlpZiAoIHBwd3JhcCh5eXNj
YW5uZXIgKSApCi0JCQkJCXsKLQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJl
IGluCi0JCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0JCQkJCSAq
IHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKLQkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlm
IHNvbWUgdG90YWwKLQkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCi0J
CQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotCQkJCQkgKiBZWV9O
VUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0
IHJldHVybmVkLgotCQkJCQkgKi8KLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7Ci0KLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJU
KTsKLQkJCQkJZ290byBkb19hY3Rpb247Ci0JCQkJCX0KLQotCQkJCWVsc2UKLQkJCQkJewotCQkJ
CQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJCQkJWVlfTkVX
X0ZJTEU7Ci0JCQkJCX0KLQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOOgotCQkJCXl5Zy0+eXlfY19idWZfcCA9Ci0JCQkJCXl5Zy0+eXl0ZXh0X3B0ciAr
IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOwotCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0JCQkJ
Z290byB5eV9tYXRjaDsKLQotCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJeXlnLT55
eV9jX2J1Zl9wID0KLQkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzXTsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNf
c3RhdGUoIHl5c2Nhbm5lciApOwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0JCQkJ
eXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOwotCQkJfQotCQlicmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJWVlfRkFUQUxfRVJS
T1IoCi0JCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91
bmQiICk7Ci0JfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQl9IC8qIGVuZCBvZiBzY2Fu
bmluZyBvbmUgdG9rZW4gKi8KLX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0
X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBj
b2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQotICoJ
RU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBv
c2l0aW9uCi0gKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JcmVnaXN0
ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotCXJl
Z2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLQlyZWdpc3RlciBpbnQgbnVt
YmVyX3RvX21vdmUsIGk7Ci0JaW50IHJldF92YWw7Ci0KLQlpZiAoIHl5Zy0+eXlfY19idWZfcCA+
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAx
XSApCi0JCVlZX0ZBVEFMX0VSUk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVy
cm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0
aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLQkJaWYgKCB5eWctPnl5X2NfYnVmX3Ag
LSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsKLQkJCS8qIFdlIG1h
dGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICogdHJlYXQgdGhpcyBh
cyBhIGZpbmFsIEVPRi4KLQkJCSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0J
CQl9Ci0KLQkJZWxzZQotCQkJewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8g
dGhlIEVPQiwgZmlyc3QKLQkJCSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXJldHVybiBFT0Jf
QUNUX0xBU1RfTUFUQ0g7Ci0JCQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4g
Ki8KLQotCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0J
bnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotCQkqKGRl
c3QrKykgPSAqKHNvdXJjZSsrKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0JCS8qIGRvbid0IGRv
IHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0JCSAqIGp1
c3QgZm9yY2UgYW4gRU9GCi0JCSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0JZWxzZQotCQl7Ci0JCQl5eV9zaXplX3Qg
bnVtX3RvX3JlYWQgPQotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAt
IG51bWJlcl90b19tb3ZlIC0gMTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotCQkJ
eyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLQkJCS8q
IGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVG
RkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5X2NfYnVmX3Bfb2Zm
c2V0ID0KLQkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotCQkJ
aWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLQkJCQl7Ci0JCQkJeXlfc2l6ZV90IG5ld19zaXpl
ID0gYi0+eXlfYnVmX3NpemUgKiAyOwotCi0JCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKLQkJCQkJ
Yi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotCQkJCWVsc2UKLQkJCQkJYi0+
eXlfYnVmX3NpemUgKj0gMjsKLQotCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0JCQkJCS8q
IEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0JCQkJCXBwcmVhbGxvYygodm9p
ZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQkJCQl9
Ci0JCQllbHNlCi0JCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwotCQkJ
CWItPnl5X2NoX2J1ZiA9IDA7Ci0KLQkJCWlmICggISBiLT55eV9jaF9idWYgKQotCQkJCVlZX0ZB
VEFMX0VSUk9SKAotCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJm
bG93IiApOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bf
b2Zmc2V0XTsKLQotCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9zaXplIC0KLQkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKLQotCQkJfQotCi0JCWlmICgg
bnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLQkJCW51bV90b19yZWFkID0gWVlfUkVB
RF9CVUZfU0laRTsKLQotCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLQkJWVlfSU5QVVQoICgm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKLQkJ
CXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKLQotCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCWlmICggeXlnLT55
eV9uX2NoYXJzID09IDAgKQotCQl7Ci0JCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9B
REogKQotCQkJewotCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQlwcHJlc3Rh
cnQoeXlpbiAgLHl5c2Nhbm5lcik7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJcmV0X3ZhbCA9
IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9Ci0JCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJfQotCQl9Ci0KLQll
bHNlCi0JCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlpZiAoKHl5X3NpemVf
dCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBs
dXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLQkJeXlfc2l6ZV90IG5ld19zaXplID0g
eXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEp
OwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVh
bGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6
ZSAseXlzY2FubmVyICk7Ci0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZiApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9n
ZXRfbmV4dF9idWZmZXIoKSIgKTsKLQl9Ci0KLQl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3Rv
X21vdmU7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
LQotCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZlswXTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUg
LSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLwot
Ci0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRl
OwotCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5
X3N0YXJ0OwotCi0JZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsg
eXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotCQl7Ci0JCXJlZ2lzdGVyIFlZX0NI
QVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotCQlp
ZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCQl7Ci0JCQl5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJCXl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfY3BvcyA9IHl5X2NwOwotCQkJfQotCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCQl7Ci0JCQl5eV9j
dXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5
eV9jdXJyZW50X3N0YXRlID49IDg0ICkKLQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKLQkJCX0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQotCXJldHVybiB5eV9j
dXJyZW50X3N0YXRlOwotfQotCi0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0
cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCi0gKgotICogc3lub3BzaXMKLSAqCW5leHRf
c3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAgICBzdGF0
aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCB5eV9pc19q
YW07Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICov
Ci0JcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLQlyZWdpc3RlciBZ
WV9DSEFSIHl5X2MgPSAxOwotCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLQkJ
ewotCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJ
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCX0KLQl3aGlsZSAoIHl5X2No
a1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSAp
Ci0JCXsKLQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRl
XTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKLQkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOwotCQl9Ci0JeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFt
ID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOwotCi0JcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5
eV9jdXJyZW50X3N0YXRlOwotfQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1
c3BsdXMKLSAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNl
Ci0gICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17
Ci0JaW50IGM7Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotCi0JKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0J
aWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0JCXsKLQkJ
LyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1
cm4uCi0JCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhl
biBpdCdzIGEKLQkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQg
b2YgdGhlIGJ1ZmZlci4KLQkJICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJLyogVGhp
cyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLQkJ
ZWxzZQotCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLQkJCXl5X3NpemVfdCBvZmZzZXQgPSB5
eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0JCQkrK3l5Zy0+eXlfY19idWZfcDsK
LQotCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0JCQkJewot
CQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVz
ZSB5eV9nX25fYigpCi0JCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0JCQkJ
CSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLQkJCQkJICogdHJ5IG1hdGNoaW5n
IHRoZSB0b2tlbiBiZWZvcmUKLQkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwK
LQkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLQkJCQkJICogU28gY29u
dmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0JCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJ
TEUuCi0JCQkJCSAqLwotCi0JCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0JCQkJCXBw
cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOwotCi0JCQkJCS8qRkFMTFRIUk9VR0gqLwotCi0JCQkJ
Y2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlmICggcHB3cmFwKHl5c2Nh
bm5lciApICkKLQkJCQkJCXJldHVybiAwOwotCi0JCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiApCi0JCQkJCQlZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1
cwotCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLQkJCQkJcmV0dXJuIGlu
cHV0KHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQkJCQkJfQotCi0JCQkJY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46Ci0JCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNl
dDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQljID0gKih1bnNpZ25lZCBjaGFy
ICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0JKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLwotCXl5Zy0+eXlfaG9sZF9j
aGFyID0gKisreXlnLT55eV9jX2J1Zl9wOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJLyogaWZu
ZGVmIFlZX05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJl
bnQgaW5wdXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0u
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMg
ZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFM
IC4KLSAqLwotICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAg
IHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0KLSAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAs
eXlzY2FubmVyKTsKLQl9Ci0KLQlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1
dF9maWxlICx5eXNjYW5uZXIpOwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwot
fQotCi0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBu
ZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9C
VUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JLyog
VE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBi
b2R5Ci0JICogd2l0aAotCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJcHBwdXNoX2J1
ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8KLQlwcGVuc3VyZV9idWZmZXJfc3RhY2sg
KHl5c2Nhbm5lcik7Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLQkJ
cmV0dXJuOwotCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0
IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eV9ob2xkX2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9
IHl5Zy0+eXlfY19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBu
ZXdfYnVmZmVyOwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0JLyogV2Ug
ZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLQkg
KiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcK
LQkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNh
ZmUKLQkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQl5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVm
ZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQl5eWctPnl5X25fY2hhcnMgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0JeXlnLT55eXRleHRfcHRyID0g
eXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwot
CXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0JeXlnLT55
eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGlu
aXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJs
ZSBzdHJlYW0uCi0gKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5
dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIg
c3RhdGUuCi0gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUg
KiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVGRkVSX1NU
QVRFIGI7Ci0gICAgCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiAp
OwotCi0JYi0+eXlfYnVmX3NpemUgPSBzaXplOwotCi0JLyogeXlfY2hfYnVmIGhhcyB0byBiZSAy
IGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotCSAqIHdlIG5l
ZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotCSAqLwotCWItPnl5X2No
X2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsK
LQlpZiAoICEgYi0+eXlfY2hfYnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3VyX2J1ZmZl
ciA9IDE7Ci0KLQlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLQlyZXR1cm4g
YjsKLX0KLQotLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNy
ZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIGIgKQotCQlyZXR1
cm47Ci0KLQlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBz
aG91bGQgcG9wIGhlcmUuICovCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZG
RVJfU1RBVEUpIDA7Ci0KLQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQlwcGZyZWUoKHZv
aWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKLQotCXBwZnJlZSgodm9pZCAqKSBiICx5
eXNjYW5uZXIgKTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZl
ci4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBv
biB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0
IEVPRi4KLSAqLwotICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NU
QVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotCWludCBvZXJy
bm8gPSBlcnJubzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0KLQlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQotCWItPnl5
X2lucHV0X2ZpbGUgPSBmaWxlOwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElm
IGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFi
bHlfCi0gICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4
dF9idWZmZXIuCi0gICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRo
ZSBsaW5lbm8gb3IgY29sdW1uLgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVG
RkVSKXsKLSAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29s
dW1uID0gMDsKLSAgICB9Ci0KLSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAg
IAotCWVycm5vID0gb2Vycm5vOwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFj
dGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFy
YW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVO
VF9CVUZGRVIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
ICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotCWlmICggISBiICkKLQkJcmV0dXJuOwotCi0JYi0+eXlfbl9jaGFycyA9
IDA7Ci0KLQkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAg
VGhlIGZpcnN0IGNhdXNlcwotCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBz
dGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLQkgKi8K
LQliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JYi0+eXlfY2hfYnVm
WzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0JYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9j
aF9idWZbMF07Ci0KLQliLT55eV9hdF9ib2wgPSAxOwotCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZ
WV9CVUZGRVJfTkVXOwotCi0JaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0
ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQg
c3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNl
c3NhcnkuCi0gKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0
YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0JaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JcHBlbnN1cmVfYnVmZmVy
X3N0YWNrKHl5c2Nhbm5lcik7Ci0KLQkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3
aXRjaF90b19idWZmZXIuICovCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyog
Rmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotCQl9Ci0KLQkvKiBPbmx5IHB1c2ggaWYgdG9w
IGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KLQlpZiAoWVlfQ1VSUkVOVF9CVUZG
RVIpCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IG5ld19idWZmZXI7Ci0KLQkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVy
LiAqLwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCXl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhl
IHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNv
bWVzIHRoZSBuZXcgdG9wLgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi12b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LQlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotCQlyZXR1cm47Ci0KLQlwcF9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7Ci0JaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0JCS0teXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wOwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0JCXBwX2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZiA9IDE7Ci0JfQotfQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMg
bm90IGV4aXN0LgotICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgot
ICovCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLQl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCWlmICgheXlnLT55eV9idWZmZXJf
c3RhY2spIHsKLQotCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMs
IHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVk
IGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBpbW1lZGlh
dGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLQkJbnVtX3RvX2FsbG9j
ID0gMTsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq
KXBwYWxsb2MKLQkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKikKLQkJCQkJCQkJLCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9idWZmZXJf
c3RhY2sgKQotCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBl
bnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0JCQkJCQkJCSAgCi0JCW1lbXNldCh5eWctPnl5X2J1
ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKSk7Ci0JCQkJCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
LQkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAx
KXsKLQotCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUg
cHVzaC4gKi8KLQkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsK
LQotCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7
Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJl
YWxsb2MKLQkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotCQkJCQkJCQludW1fdG9fYWxs
b2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlzY2FubmVy
KTsKLQkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0J
CS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9z
dGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51
bV90b19hbGxvYzsKLQl9Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0g
KiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNp
emUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuIAotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChj
aGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZ
X0JVRkZFUl9TVEFURSBiOwotICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJhc2Vbc2l6
ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZv
ciB0aGUgRU9CJ3MuICovCi0JCXJldHVybiAwOwotCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBw
YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlm
ICggISBiICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBf
c2Nhbl9idWZmZXIoKSIgKTsKLQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIi
IHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYg
PSBiYXNlOwotCWItPnl5X2lzX291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2ZpbGUgPSAw
OwotCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRlcmFjdGl2
ZSA9IDA7Ci0JYi0+eXlfYXRfYm9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0JYi0+
eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQlwcF9zd2l0Y2hfdG9fYnVmZmVy
KGIgLHl5c2Nhbm5lciApOwotCi0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQg
YnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3
aWxsCi0gKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBh
IE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LgotICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBj
b250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5z
dGVhZC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIg
KiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAKLQlyZXR1cm4gcHBfc2Nhbl9i
eXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhl
IGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2Fs
bCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0g
KiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhl
IG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0g
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5l
d2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0
ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwotCWNo
YXIgKmJ1ZjsKLQl5eV9zaXplX3QgbiwgaTsKLSAgICAKLQkvKiBHZXQgbWVtb3J5IGZvciBmdWxs
IGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLQluID0gX3l5
Ynl0ZXNfbGVuICsgMjsKLQlidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOwot
CWlmICggISBidWYgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsg
KytpICkKLQkJYnVmW2ldID0geXlieXRlc1tpXTsKLQotCWJ1ZltfeXlieXRlc19sZW5dID0gYnVm
W195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIgPSBwcF9zY2Fu
X2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9S
KCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9rYXkgdG8g
Z3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICogYXdheSB3
aGVuIHdlJ3JlIGRvbmUuCi0JICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQlyZXR1
cm4gYjsKLX0KLQotI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlM
VVJFIDIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
KiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRl
cnIsICIlc1xuIiwgbXNnICk7Ci0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJl
ZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5k
ZWYgeXlsZXNzCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyogVW5kbyBl
ZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFj
cm9fYXJnID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcp
O1wKLQkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCi0JCXl5Zy0+eXlfaG9sZF9jaGFy
ID0gKnl5Zy0+eXlfY19idWZfcDsgXAotCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotCQl5
eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLS8qIEFj
Y2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICov
Ci0KLS8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSBw
cGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7
Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0v
KiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0
IHRoZSBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJl
dHVybiB5eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBs
ZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwoteXlfc2l6ZV90IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwotICAgIHJldHVybiB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9r
ZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFy
ICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0
OwotfQotCi0vKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVy
IHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRh
IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQ
RSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0g
dXNlcl9kZWZpbmVkIDsKLX0KLQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAq
IEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmpl
Y3QuCi0gKi8KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLQotICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBp
bnB1dCBidWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiAp
Ci0gICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5v
IGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVy
OwotfQotCi0vKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJl
cgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBz
ZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAg
ICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4g
Ki8KLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRh
bF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVy
KTsgCi0gICAgCi0gICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlu
cHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBi
dWZmZXIuCi0gKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIK
LSAqLwotdm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOwotICAgIHl5aW4gPSBpbl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklMRSAqICBv
dXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwot
fQotCi1pbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eV9mbGV4X2RlYnVnOwotfQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0K
LS8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUg
KiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFs
OwotfQotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZ
UEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxs
b2M7Ci19Ci0gICAgCi12b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0g
ICAgCi0vKiBVc2VyLXZpc2libGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBi
ZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9O
TFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRo
ZSBsYXN0IGFyZ3VtZW50LgotICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUg
ZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgcHBs
ZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2ds
b2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4g
MTsKLSAgICB9Ci0KLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBz
aXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9i
YWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgfQotCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5
eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNl
dCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICBy
ZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHBwbGV4
X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0
IGZvbGxvd3MgdGhlCi0gKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUg
bGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIq
IHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQK
LSAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRs
ZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhl
IGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAqIHRoZSB5
eWV4dHJhIGZpZWxkLgotICovCi0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUg
eXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVm
aW5lZCwgJmR1bW15X3l5Z3V0cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7
Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0JCi0g
ICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3Qg
eXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotCQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMg
PT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAg
ICB9Ci0gICAgCi0gICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgot
ICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAg
bWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAg
ICAKLSAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwot
ICAgIAotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0K
LQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50
IHNjYW5uZXIuCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0
cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1
ZmZlcl9zdGFjayA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5
eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFy
ICopIDA7Ci0gICAgeXlnLT55eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQot
ICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNr
X2RlcHRoID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmlu
ZWQgaW4gbWFpbi5jICovCi0jaWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAg
ICB5eW91dCA9IHN0ZG91dDsKLSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlv
dXQgPSAoRklMRSAqKSAwOwotI2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTog
U2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogcHBsZXhf
aW5pdCgpCi0gICAgICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4X2Rlc3Ryb3kgaXMg
Zm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHBw
bGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBi
dWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdoaWxlKFlZX0NVUlJF
TlRfQlVGRkVSKXsKLQkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2Fu
bmVyICk7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JCXBwcG9wX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIpOwotCX0KLQotCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4g
Ki8KLQlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0JeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9u
IHN0YWNrLiAqLwotICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVy
ICk7Ci0gICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQg
dGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVy
IHNvIHRoZSBuZXh0IHRpbWUKLSAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRp
b24gd2lsbCBvY2N1ci4gKi8KLSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAg
ICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHBw
ZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICov
Ci0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFy
KiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
CXJlZ2lzdGVyIGludCBpOwotCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLQkJczFbaV0gPSBz
MltpXTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlf
ZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0J
cmVnaXN0ZXIgaW50IG47Ci0JZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQotCXJldHVy
biBuOwotfQotI2VuZGlmCi0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLQlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0K
LXZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLQkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5n
IGFjY29tbW9kYXRlcyBib3RoCi0JICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdl
bmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9p
bnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLQkgKiBiZWNhdXNlIGJvdGggQU5TSSBD
IGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0JICogYW55IHBvaW50ZXIg
dHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwotCSAqIGFz
IHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotCSAqLwotCXJldHVybiAodm9pZCAqKSByZWFs
bG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKLX0KLQotdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSBw
cHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05B
TUUgInl5dGFibGVzIgotCi1uYW1lc3BhY2UgcHAgewotCi1Ub2tlbml6ZXI6OlRva2VuaXplcihE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQotewotICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Ci19Ci0KLVRva2VuaXplcjo6flRva2VuaXplcigpCi17
Ci0gICAgZGVzdHJveVNjYW5uZXIoKTsKLX0KLQotYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNv
dW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotewot
ICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKLSAgICBpZiAoKGNvdW50ID4gMCkgJiYg
KHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1
dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgIHJldHVybiBpbml0U2Nhbm5lcigpOwotfQot
Ci12b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKLXsKLSAgICAvLyBXZSB1
c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KLSAgICAvLyBTZWUgbWFjcm8geXlmaWxl
bm8uCi0gICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Ci19Ci0KLXZvaWQgVG9rZW5pemVy
OjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQotewotICAgIHBwc2V0X2xpbmVubyhsaW5lLG1IYW5k
bGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKLXsKLSAgICB0b2tl
bi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsK
LSAgICB0b2tlbi0+ZmxhZ3MgPSAwOwotCi0gICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUobUNv
bnRleHQubGluZVN0YXJ0KTsKLSAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlwZSA9
PSAnXG4nOwotCi0gICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFkaW5n
U3BhY2UpOwotICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwotfQotCi1ib29sIFRv
a2VuaXplcjo6aW5pdFNjYW5uZXIoKQotewotICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAmJiBw
cGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQotewotICAgIGlmIChtSGFuZGxlID09IE5V
TEwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7Ci0gICAg
bUhhbmRsZSA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjRhMjg4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9I
XwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCi0KLSNpbmNsdWRl
ICJJbnB1dC5oIgotI2luY2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQot
bmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBUb2tlbml6ZXIg
OiBwdWJsaWMgTGV4ZXIKLXsKLSAgcHVibGljOgotICAgIHN0cnVjdCBDb250ZXh0Ci0gICAgewot
ICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7Ci0KLSAgICAgICAgSW5wdXQgaW5wdXQ7
Ci0gICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBs
b2NhdGlvbiBzaG91bGQgdHJhY2sKLSAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0
OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQotICAgICAgICAvLyBp
ZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KLSAgICAg
ICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7Ci0KLSAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7
Ci0gICAgICAgIGJvb2wgbGluZVN0YXJ0OwotICAgIH07Ci0KLSAgICBUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKTsKLSAgICB+VG9rZW5pemVyKCk7Ci0KLSAgICBib29sIGluaXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KTsKLQotICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7Ci0gICAgdm9pZCBzZXRMaW5l
TnVtYmVyKGludCBsaW5lKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsK
LQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbml6ZXIp
OwotICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lTY2FubmVyKCk7Ci0K
LSAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCi0gICAgQ29udGV4dCBtQ29u
dGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCi19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRp
ZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDFjNzMy
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5sCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAK
LS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVj
aWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBW
aXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNy
b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRI
SVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0l
dG9wewotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBn
ZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUgIlRva2Vu
aXplci5oIgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgot
Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0
ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XbWlzc2luZy1ub3JldHVybiIKLSNlbmRpZgotCi10eXBlZGVmIHN0ZDo6c3RyaW5nIFlZ
U1RZUEU7Ci10eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOwotCi0vLyBVc2UgdGhl
IHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4K
LSNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KLQotI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAg
ICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxpbmVu
byA9IDE7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2Ug
PSBmYWxzZTsgXAotICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAotICAg
IH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5
ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCi0gICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0lu
ZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
IChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAot
ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0
aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKLSAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGlu
ZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXls
ZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsK
LQotI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9
IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKLQotJX0KLQotJW9wdGlvbiBub3l5
d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCi0lb3B0aW9uIHJlZW50cmFudCBiaXNvbi1i
cmlkZ2UgYmlzb24tbG9jYXRpb25zCi0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9uIGV4dHJh
LXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgotJXggQ09NTUVOVAotCi1ORVdMSU5FICAg
ICBcbnxccnxcclxuCi1JREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCi1QVU5DVFVB
VE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NPTlNUQU5UICAgICAg
WzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1BTF9D
T05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAgICAgICAgWzAtOV0K
LUVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFDVElPTkFMX0NPTlNU
QU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0lJQotCi0gICAgLyog
TGluZSBjb21tZW50ICovCi0iLy8iW15cclxuXSoKLQotICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8K
LSAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLwot
ICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKLSIv
KiIgeyBCRUdJTihDT01NRU5UKTsgfQotPENPTU1FTlQ+W14qXHJcbl0rCi08Q09NTUVOVD4iKiIK
LTxDT01NRU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87IH0KLTxDT01NRU5UPiIqLyIgewotICAg
IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7Ci0gICAgQkVHSU4oSU5JVElBTCk7Ci19Ci0K
LSMgewotICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9j
ZXNzb3IgZGlyZWN0aXZlcy4KLSAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwotICAg
IHJldHVybiB5eWV4dHJhLT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9r
ZW46OlBQX09USEVSOwotfQotCi17SURFTlRJRklFUn0gewotICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwotfQotCi17
REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9
IHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpU
b2tlbjo6Q09OU1RfSU5UOwotfQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJ
T05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwotfQotCi0g
ICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVz
dCBiZSBhIG51bWJlci4gKi8KLSAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVn
ZXJzIGFuZCBmbG9hdHMuICovCi0oe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0r
W19hLXpBLVowLTkuXSopIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOwotfQotCi0iKysiIHsKLSAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOwot
fQotIi0tIiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0RFQzsKLX0KLSI8PCIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOwotfQotIj4+IiB7Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX1JJR0hUOwotfQotIjw9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOwotfQotIj49IiB7Ci0gICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOwotfQot
Ij09IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0VROwotfQotIiE9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOwotfQotIiYmIiB7Ci0gICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FO
RDsKLX0KLSJeXiIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Ci19Ci0ifHwiIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Ci19Ci0iKz0iIHsK
LSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfQUREX0FTU0lHTjsKLX0KLSItPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwg
eXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOwotfQotIio9IiB7
Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX01VTF9BU1NJR047Ci19Ci0iLz0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKLX0KLSIlPSIg
ewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9NT0RfQVNTSUdOOwotfQotIjw8PSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKLX0KLSI+
Pj0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOwotfQotIiY9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Ci19
Ci0iXj0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKLX0KLSJ8PSIgewotICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Ci19
Ci0KLXtQVU5DVFVBVE9SfSB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAg
ICByZXR1cm4geXl0ZXh0WzBdOwotfQotCi1bIFx0XHZcZl0rICAgeyB5eWV4dHJhLT5sZWFkaW5n
U3BhY2UgPSB0cnVlOyB9Ci0KLXtORVdMSU5FfSB7Ci0gICAgKyt5eWxpbmVubzsKLSAgICB5eWx2
YWwtPmFzc2lnbigxLCAnXG4nKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0KLQotLiB7Ci0gICAgeXls
dmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhF
UjsKLX0KLQotPCo+PDxFT0Y+PiB7Ci0gICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9r
ZWQgZm9yIGhhbmRsaW5nIEVPRi4KLSAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9r
ZW4gbWFudWFsbHkuCi0gICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKLSAg
ICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7Ci0gICAg
aW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7Ci0gICAgaWYg
KHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCi0gICAgewotICAgICAgICAvLyBXZSBjYW4g
b25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQotICAgICAg
ICAvLyBlbmQgb2YgdGhlIGlucHV0LgotICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhN
YXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7Ci0gICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5
eWxpbmVubyA9IDE7Ci0gICAgfQotICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOwotICAgIHl5
bGxvYy0+bGluZSA9IHl5bGluZW5vOwotICAgIHl5bHZhbC0+Y2xlYXIoKTsKLQotICAgIGlmIChZ
WV9TVEFSVCA9PSBDT01NRU5UKQotICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5l
bm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAgICB9Ci0g
ICAgeXl0ZXJtaW5hdGUoKTsKLX0KLQotJSUKLQotbmFtZXNwYWNlIHBwIHsKLQotVG9rZW5pemVy
OjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKLXsKLSAg
ICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOwotfQotCi1Ub2tlbml6ZXI6On5U
b2tlbml6ZXIoKQotewotICAgIGRlc3Ryb3lTY2FubmVyKCk7Ci19Ci0KLWJvb2wgVG9rZW5pemVy
Ojppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSkKLXsKLSAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKChj
b3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKLQotICAgIG1Db250ZXh0
LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICByZXR1cm4gaW5pdFNj
YW5uZXIoKTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCi17
Ci0gICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCi0gICAgLy8gU2Vl
IG1hY3JvIHl5ZmlsZW5vLgotICAgIHl5c2V0X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsKLX0KLQot
dm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0gICAgeXlzZXRfbGlu
ZW5vKGxpbmUsIG1IYW5kbGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tl
bikKLXsKLSAgICB0b2tlbi0+dHlwZSA9IHl5bGV4KCZ0b2tlbi0+dmFsdWUsICZ0b2tlbi0+bG9j
YXRpb24sIG1IYW5kbGUpOwotICAgIHRva2VuLT5mbGFncyA9IDA7Ci0KLSAgICB0b2tlbi0+c2V0
QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOwotICAgIG1Db250ZXh0LmxpbmVTdGFy
dCA9IHRva2VuLT50eXBlID09ICdcbic7Ci0KLSAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNl
KG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7Ci0gICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFs
c2U7Ci19Ci0KLWJvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCi17Ci0gICAgaWYgKChtSGFu
ZGxlID09IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKLXsKLSAg
ICBpZiAobUhhbmRsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICB5eWxleF9kZXN0
cm95KG1IYW5kbGUpOwotICAgIG1IYW5kbGUgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
cHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlOWM3MGIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3Bh
cnNlci5zaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0K
LSMgR2VuZXJhdGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nlc3Nvci4K
LQotcnVuX2ZsZXgoKQotewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQotb3V0cHV0X3NvdXJj
ZT0kc2NyaXB0X2Rpci8kMgotZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0
cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1ydW5fYmlzb24oKQotewotaW5wdXRfZmlsZT0k
c2NyaXB0X2Rpci8kMQotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgotYmlzb24gLS1uby1s
aW5lcyAtLXNrZWxldG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmls
ZQotfQotCi1zY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKLQotIyBHZW5lcmF0ZSBwcmVwcm9jZXNz
b3IKLXJ1bl9mbGV4IFRva2VuaXplci5sIFRva2VuaXplci5jcHAKLXJ1bl9iaXNvbiBFeHByZXNz
aW9uUGFyc2VyLnkgRXhwcmVzc2lvblBhcnNlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25l
d19maWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFhNWZkOC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9uZXdfZmlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0gICAgU29tZSBu
ZXcgY29kZSB0aGF0IHVzZXMgdGFicwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L25ld19maWxlMi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9uZXdfZmlsZTIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMGUxNmRmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlMi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi1zb21lIG90aGVyIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzE2NGVhLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0
aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
cHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKLQotI2lmbmRlZiBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfUFBVVElMU19IXwotCi0vLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVj
dG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCi0vLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUg
cHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgotI2RlZmluZSBQUF9ESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKLSAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsg
ICAgICAgICAgICAgICBcCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKLQotI2Vu
ZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9j
ZXNzb3IudmNwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzZhOTc1OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCisrKyAvZGV2L251
bGwKQEAgLTEsMzkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRv
d3MtMTI1MiI/PgotPFZpc3VhbFN0dWRpb1Byb2plY3QKLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMr
KyIKLQlWZXJzaW9uPSI5LjAwIgotCU5hbWU9InByZXByb2Nlc3NvciIKLQlQcm9qZWN0R1VJRD0i
e0ZCRTMyREYzLTBGQjAtNEYyRi1BNDI0LTJDMjFCRDdCQzMyNX0iCi0JUm9vdE5hbWVzcGFjZT0i
cHJlcHJvY2Vzc29yIgotCUtleXdvcmQ9IldpbjMyUHJvaiIKLQlUYXJnZXRGcmFtZXdvcmtWZXJz
aW9uPSIxOTY2MTMiCi0JPgotCTxQbGF0Zm9ybXM+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0iV2lu
MzIiCi0JCS8+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0ieDY0IgotCQkvPgotCTwvUGxhdGZvcm1z
PgotCTxUb29sRmlsZXM+Ci0JPC9Ub29sRmlsZXM+Ci0JPENvbmZpZ3VyYXRpb25zPgotCQk8Q29u
ZmlndXJhdGlvbgotCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQo
U29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rv
cnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCi0JCQlD
aGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVu
dFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgotCQkJCU1pbmltYWxSZWJ1aWxk
PSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0i
MSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0J
CQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKLQkJ
CQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxp
bmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1
aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlv
bgotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlv
bkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChD
b25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKLQkJCUNoYXJhY3Rl
clNldD0iMSIKLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxE
YXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2Vydmlj
ZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9w
dGltaXphdGlvbj0iMiIKLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCi0JCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElCIgotCQkJCVJ1bnRpbWVM
aWJyYXJ5PSIwIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgotCQkJCVVz
ZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlXYXJuQXNF
cnJvcj0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCURpc2FibGVT
cGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlicmFy
aWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29w
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgot
CQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iRGVi
dWd8eDY0IgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1l
KVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0
Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjQi
Ci0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVp
bGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdldEVudmly
b25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
LQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMy
O19ERUJVRztfTElCIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGlt
ZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhl
YWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0J
CQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cz0iNDEwMDs0MTI3OzQyNDQ7NDI2Nzs0NzAyIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
cmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaWJyYXJpYW5U
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkv
PgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNl
fHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlc
JChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZv
cm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0Igot
CQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgotCQkJ
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJ
CUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJRW5h
YmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9
IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJCURl
YnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQx
MDA7NDEyNzs0MjQ0OzQyNjciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRS
ZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3Vy
Y2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVu
dFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01h
a2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCTwvQ29u
ZmlndXJhdGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwvUmVmZXJl
bmNlcz4KLQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKLQkJCUZp
bHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCi0JCQlVbmlx
dWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKLQkJ
CT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVIYW5k
bGVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
LlxEaXJlY3RpdmVQYXJzZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXElucHV0LmNwcCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5jcHAiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIu
Y3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFBy
ZXByb2Nlc3Nvci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cVG9rZW4uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXFRva2VuaXplci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRl
cj4KLQkJPEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDto
eHg7aG07aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00
YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXERpYWdub3N0aWNzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXExleGVy
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFj
cm8uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxN
YWNyb0V4cGFuZGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5ccHBfdXRpbHMuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQk8L0ZpbGVzPgotCTxHbG9iYWxzPgotCTwvR2xvYmFs
cz4KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDQxMjVkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
dW1lcmljX2xleC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBudW1lcmlj
X2xleC5oOiBGdW5jdGlvbnMgdG8gZXh0cmFjdCBudW1lcmljIHZhbHVlcyBmcm9tIHN0cmluZy4K
KworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTlVNRVJJQ19MRVhfSF8KKyNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX05VTUVSSUNfTEVYX0hfCisKKyNpbmNsdWRlIDxzc3RyZWFt
PgorCituYW1lc3BhY2UgcHAgeworCitpbmxpbmUgc3RkOjppb3M6OmZtdGZsYWdzIG51bWVyaWNf
YmFzZV9pbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3sKKyAgICBpZiAoKHN0ci5zaXplKCkg
Pj0gMikgJiYKKyAgICAgICAgKHN0clswXSA9PSAnMCcpICYmCisgICAgICAgIChzdHJbMV0gPT0g
J3gnIHx8IHN0clsxXSA9PSAnWCcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW9zOjpo
ZXg7CisgICAgfQorICAgIGVsc2UgaWYgKChzdHIuc2l6ZSgpID49IDEpICYmIChzdHJbMF0gPT0g
JzAnKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Omlvczo6b2N0OworICAgIH0KKyAgICBy
ZXR1cm4gc3RkOjppb3M6OmRlYzsKK30KKworLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcGFy
c2UgdGhlIGdpdmVuIHN0cmluZyB0byBleHRyYWN0IGEgbnVtZXJpY2FsCisvLyB2YWx1ZSBvZiB0
aGUgZ2l2ZW4gdHlwZS4gVGhlc2UgZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBzdHJpbmcgaXMK
Ky8vIG9mIHRoZSBjb3JyZWN0IGZvcm0uIFRoZXkgY2FuIG9ubHkgZmFpbCBpZiB0aGUgcGFyc2Vk
IHZhbHVlIGlzIHRvbyBiaWcsCisvLyBpbiB3aGljaCBjYXNlIGZhbHNlIGlzIHJldHVybmVkLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPgorYm9vbCBudW1lcmljX2xleF9pbnQoY29uc3Qg
c3RkOjpzdHJpbmcmIHN0ciwgSW50VHlwZSogdmFsdWUpCit7CisgICAgc3RkOjppc3RyaW5nc3Ry
ZWFtIHN0cmVhbShzdHIpOworICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGJ1
dCBNU1ZTIGhhcyBhIGJ1Z2d5IGltcGxlbWVudGF0aW9uLgorICAgIC8vIEl0IHJldHVybnMgaW5j
b3JyZWN0IHJlc3VsdHMgaWYgdGhlIGJhc2UgaXMgbm90IHNwZWNpZmllZC4KKyAgICBzdHJlYW0u
c2V0ZihudW1lcmljX2Jhc2VfaW50KHN0ciksIHN0ZDo6aW9zOjpiYXNlZmllbGQpOworCisgICAg
c3RyZWFtID4+ICgqdmFsdWUpOworICAgIHJldHVybiAhc3RyZWFtLmZhaWwoKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgorYm9vbCBudW1lcmljX2xleF9mbG9hdChjb25zdCBz
dGQ6OnN0cmluZyYgc3RyLCBGbG9hdFR5cGUqIHZhbHVlKQoreworICAgIHN0ZDo6aXN0cmluZ3N0
cmVhbSBzdHJlYW0oc3RyKTsKKyAgICAvLyBGb3JjZSAiQyIgbG9jYWxlIHNvIHRoYXQgZGVjaW1h
bCBjaGFyYWN0ZXIgaXMgYWx3YXlzICcuJywgYW5kCisgICAgLy8gbm90IGRlcGVuZGVudCBvbiB0
aGUgY3VycmVudCBsb2NhbGUuCisgICAgc3RyZWFtLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2lj
KCkpOworCisgICAgc3RyZWFtID4+ICgqdmFsdWUpOworICAgIHJldHVybiAhc3RyZWFtLmZhaWwo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgcHAuCisjZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJPQ0VT
U09SX05VTUVSSUNfTEVYX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjY3MzQyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5W
SURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGll
cyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1v
ZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29u
c3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUg
d2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3Ig
cmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBv
ZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1
YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1l
eGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmln
aW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJl
cHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdp
dGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9y
bXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJl
LCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBu
b3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNo
IHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFt
ZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3Jh
dGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhp
cyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVk
LCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRl
ZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJp
dmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3
YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5k
ZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJ
UyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
RUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04s
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1F
UkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMg
VVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RI
RVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBB
TlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5H
IElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBB
TkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNF
RCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklE
SUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1c
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBCSVNPTl9QQVJTRVJfSAotIyBkZWZpbmUg
QklTT05fUEFSU0VSX0gKLQotI2lmbmRlZiB5eXN0eXBlcHAKLXR5cGVkZWYgc3RydWN0IHsKLSAg
ICBpbnQgICAgc2NfaW50OwotICAgIGZsb2F0ICBzY19mdmFsOwotICAgIGludCAgICBzY19pZGVu
dDsKLQljaGFyICAgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTisxXTsKLX0geXlzdHlw
ZXBwOwotCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0jIGRlZmluZQlD
UFBfQU5EX09QCSAgICAgICAgMjU3Ci0jIGRlZmluZQlDUFBfU1VCX0FTU0lHTgkgICAgMjU5Ci0j
IGRlZmluZQlDUFBfTU9EX0FTU0lHTgkgICAgMjYwCi0jIGRlZmluZQlDUFBfQUREX0FTU0lHTgky
NjEKLSMgZGVmaW5lCUNQUF9ESVZfQVNTSUdOCTI2MgotIyBkZWZpbmUJQ1BQX01VTF9BU1NJR04J
MjYzCi0jIGRlZmluZQlDUFBfRVFfT1AJICAgICAgICAyNjQKLSMgZGVmaW5lICAgIENQUF9YT1Jf
T1AgICAgICAgICAyNjUgCi0jIGRlZmluZQlFUlJPUl9TWQkgICAgMjY2Ci0jIGRlZmluZQlDUFBf
RkxPQVRDT05TVEFOVAkyNjcKLSMgZGVmaW5lCUNQUF9HRV9PUAkgICAgICAgIDI2OAotIyBkZWZp
bmUJQ1BQX1JJR0hUX09QICAgICAgICAyNjkKLSMgZGVmaW5lCUNQUF9JREVOVElGSUVSCSAgICAy
NzAKLSMgZGVmaW5lCUNQUF9JTlRDT05TVEFOVAkgICAgMjcxCi0jIGRlZmluZQlDUFBfTEVfT1AJ
ICAgICAgICAyNzIKLSMgZGVmaW5lCUNQUF9MRUZUX09QCSAgICAgICAgMjczCi0jIGRlZmluZQlD
UFBfREVDX09QCTI3NAotIyBkZWZpbmUJQ1BQX05FX09QCSAgICAgICAgMjc1Ci0jIGRlZmluZQlD
UFBfT1JfT1AJICAgICAgICAyNzYKLSMgZGVmaW5lCUNQUF9JTkNfT1AJICAgIDI3NwotIyBkZWZp
bmUJQ1BQX1NUUkNPTlNUQU5UCSAgICAyNzgKLSMgZGVmaW5lCUNQUF9UWVBFSURFTlRJRklFUgky
NzkKLQotIyBkZWZpbmUJRklSU1RfVVNFUl9UT0tFTl9TWQkyODkKLQotIyBkZWZpbmUJQ1BQX1JJ
R0hUX0FTU0lHTgkgICAgMjgwCi0jIGRlZmluZQlDUFBfTEVGVF9BU1NJR04JICAgIDI4MQotIyBk
ZWZpbmUJQ1BQX0FORF9BU1NJR04JMjgyCi0jIGRlZmluZQlDUFBfT1JfQVNTSUdOICAJMjgzCi0j
IGRlZmluZQlDUFBfWE9SX0FTU0lHTgkyODQKLSMgZGVmaW5lCUNQUF9MRUZUX0JSQUNLRVQJMjg1
Ci0jIGRlZmluZQlDUFBfUklHSFRfQlJBQ0tFVAkyODYKLSMgZGVmaW5lCUNQUF9MRUZUX0JSQUNF
CTI4NwotIyBkZWZpbmUJQ1BQX1JJR0hUX0JSQUNFCTI4OAotCi0jZW5kaWYgLyogbm90IEJJU09O
X1BBUlNFUl9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMTcxNjRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaApAQCAtMCwwICsx
LDE4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3Nv
ciB1dGlsaXRpZXMKKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwor
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRv
IGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisv
LyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNs
YXNzLgorI2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAg
VHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFR5cGVOYW1lJikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9Q
UFVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxNTA1NmRhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIs
IE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBw
bGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24s
IG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQot
Y29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdy
ZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkg
b3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQK
LXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5v
bi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBv
cmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2Us
IHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUs
IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQot
Zm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3
YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhp
cyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBz
dWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUg
bmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jw
b3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4g
dGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBs
aWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGlt
aXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBk
ZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNv
ZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJl
dW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJB
UyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJ
T04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQs
IE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1J
VFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEgg
T1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZP
UiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJ
VFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YK
LVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklT
SU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElP
TiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENB
VVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1O
VklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zbGdsb2JhbHMuaCIKLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKLWludCBJbml0Q1BQU3RydWN0
KHZvaWQpOwotaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsKLWludCBJbml0QXRvbVRh
YmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXplKTsKLWNoYXIqIEdldFN0cmluZ09mQXRv
bShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlODUzYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYworKysg
L2Rldi9udWxsCkBAIC0xLDY5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
LWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1J
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
Ci1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1l
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAot
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
LVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIHNjYW5uZXIuYwot
Ly8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUg
PHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNp
ZiAwCi0gICAgI2luY2x1ZGUgPGllZWVmcC5oPgotI2Vsc2UKLSAgICAjZGVmaW5lIGlzaW5mZih4
KSAoKCgqKGludCAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBMKSAmJiBcCi0gICAg
ICAgICAgICAgICAgICAgICAgICgoKihpbnQgKikmKHgpICYgMHgwMDdmZmZmZkwpPT0wMDAwMDAw
MDAwTCkpCi0jZW5kaWYKLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2Jh
bHMuaCIKLSNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCi0KLXR5cGVkZWYgc3RydWN0IFN0cmlu
Z0lucHV0U3JjIHsKLSAgICBJbnB1dFNyYyBiYXNlOwotICAgIGNoYXIgKnA7Ci19IFN0cmluZ0lu
cHV0U3JjOwotCi1zdGF0aWMgaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpOwotCi1z
dGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppcywgeXlzdHlwZXBwICogeXlsdmFscHApCi17
Ci0gICAgcmV0dXJuIEVPRjsKLX0gLy8gZW9mX3NjYW4KLQotc3RhdGljIHZvaWQgbm9vcChJbnB1
dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHt9Ci0KLXN0YXRpYyBJbnB1
dFNyYyBlb2ZfaW5wdXRzcmMgPSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCwgMCwg
MCB9OwotCi1zdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKiB5eWx2
YWxwcCk7Ci0KLSNkZWZpbmUgRU9MX1NZICdcbicKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0g
ICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIF9fYXNtIGludCAzCi0jZWxpZiBkZWZpbmVkKF9N
X0FNRDY0KQotICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQoKSBhc3NlcnQoISJEYmdfQnJlYWtw
b2ludCIpOwotI2Vsc2UKLSAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkKLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX01fQU1ENjQpCi0gICAgX19pbnQ2NCBS
RFRTQyAoIHZvaWQgKSB7Ci0KLSAgICAgICAgX19pbnQ2NCB2OwotICAgIAotICAgICAgICBfX2Fz
bSBfX2VtaXQgMHgwZgotICAgICAgICBfX2FzbSBfX2VtaXQgMHgzMQotICAgICAgICBfX2FzbSBt
b3YgZHdvcmQgcHRyIHYsIGVheAotICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYrNCwgZWR4
Ci0gICAgCi0gICAgICAgIHJldHVybiB2OwotICAgIH0KLSNlbmRpZgotCi0KLWludCBJbml0U2Nh
bm5lcihDUFBTdHJ1Y3QgKmNwcCkKLXsKLSAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBuZWVkZWQg
YnkgdGhlIENQUCBsaW5lIHNjYW5uZXI6Ci0gICAgaWYgKCFJbml0Q1BQKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgY3BwLT5tb3N0UmVjZW50VG9rZW4gPSAwOwotICAgIGNwcC0+dG9rZW5M
b2MgPSAmY3BwLT5sdG9rZW5Mb2M7Ci0KLSAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0gMDsKLSAg
ICBjcHAtPmx0b2tlbkxvYy5saW5lID0gMDsKLQotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmVv
Zl9pbnB1dHNyYzsKLSAgICBjcHAtPnByZXZpb3VzX3Rva2VuID0gJ1xuJzsKLSAgICBjcHAtPnBh
c3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0KLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdFNjYW5uZXIK
LQotaW50IEZyZWVTY2FubmVyKHZvaWQpCi17Ci0gICAgcmV0dXJuIChGcmVlQ1BQKCkpOwotfQot
Ci1pbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBjb25zdCBj
aGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIGNwcC0+UGFX
aGljaFN0ciA9IDA7Ci0gICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFB
cmdjICAgICA9IGNvdW50OwotICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKLSAgICBTY2Fu
RnJvbVN0cmluZyhzdHJpbmdbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogc3RyX2dl
dGNoKCkKLSAqIHRha2VzIGNhcmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCi0g
KiByZXR1cm5zIHRoZSBuZXh0LWNoYXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgotICogcmV0dXJu
cyBFT0Ygd2hlbiB0aGUgY29tcGxldGUgc2hhZGVyIGlzIHBhcnNlZC4KLSAqLwotc3RhdGljIGlu
dCBzdHJfZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluKQotewotICAgIGZvcig7Oyl7Ci0gICAgICAg
aWYgKCppbi0+cCl7Ci0gICAgICAgICAgaWYgKCppbi0+cCA9PSAnXG4nKSB7Ci0gICAgICAgICAg
ICAgaW4tPmJhc2UubGluZSsrOwotICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgcmV0dXJuICppbi0+cCsrOwotICAgICAgIH0KLSAgICAgICBpZigr
KyhjcHAtPlBhV2hpY2hTdHIpIDwgY3BwLT5QYUFyZ2MpewotICAgICAgICAgIGZyZWUoaW4pOwot
ICAgICAgICAgIFNldFN0cmluZ051bWJlcihjcHAtPlBhV2hpY2hTdHIpOwotICAgICAgICAgIFNl
dExpbmVOdW1iZXIoMSk7Ci0gICAgICAgICAgU2NhbkZyb21TdHJpbmcoY3BwLT5QYUFyZ3ZbY3Bw
LT5QYVdoaWNoU3RyXSk7Ci0gICAgICAgICAgaW49KFN0cmluZ0lucHV0U3JjKiljcHAtPmN1cnJl
bnRJbnB1dDsKLSAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgCi0gICAgICAgfQotICAg
ICAgIGVsc2V7Ci0gICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2Owot
ICAgICAgICAgIGNwcC0+UGFXaGljaFN0cj0wOwotICAgICAgICAgIGZyZWUoaW4pOwotICAgICAg
ICAgIHJldHVybiBFT0Y7Ci0gICAgICAgfSAgCi0gICAgfQotfSAvLyBzdHJfZ2V0Y2gKLQotc3Rh
dGljIHZvaWQgc3RyX3VuZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVw
cCAqdHlwZSkgewotICAgIGlmIChpbi0+cFstMV0gPT0gY2gpaW4tPnAtLTsKLSAgICBlbHNlIHsK
LSAgICAgICAgKihpbi0+cCk9J1wwJzsgLy90aGlzIHdvdWxkIHRha2UgY2FyZSBvZiBzaGlmdGlu
ZyB0byB0aGUgcHJldmlvdXMgc3RyaW5nLgotICAgICAgICBjcHAtPlBhV2hpY2hTdHItLTsKLSAg
ICB9ICAKLSAgICBpZiAoY2ggPT0gJ1xuJykgewotICAgICAgICBpbi0+YmFzZS5saW5lLS07Ci0g
ICAgICAgIERlY0xpbmVOdW1iZXIoKTsKLSAgICB9Ci19IC8vIHN0cl91bmdldGNoCi0KLWludCBT
Y2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKQotewotICAgIAotICAgIFN0cmluZ0lucHV0U3Jj
ICppbiA9IG1hbGxvYyhzaXplb2YoU3RyaW5nSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQoaW4sIDAs
IHNpemVvZihTdHJpbmdJbnB1dFNyYykpOwotICAgIGluLT5wID0gKGNoYXIqKSBzOwotICAgIGlu
LT5iYXNlLmxpbmUgPSAxOwotICAgIGluLT5iYXNlLnNjYW4gPSBieXRlX3NjYW47Ci0gICAgaW4t
PmJhc2UuZ2V0Y2ggPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc3RyX2dldGNo
OwotICAgIGluLT5iYXNlLnVuZ2V0Y2ggPSAodm9pZCAoKikoSW5wdXRTcmMgKiwgaW50LCB5eXN0
eXBlcHAgKikpc3RyX3VuZ2V0Y2g7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElu
cHV0OwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotCi0gICAgcmV0dXJuIDE7
Ci19IC8vIFNjYW5Gcm9tU3RyaW5nOwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGbG9hdGluZyBw
b2ludCBjb25zdGFudHM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2RlZmluZSBBUFBFTkRfQ0hBUl9T
KGNoLCBzdHIsIGxlbiwgbWF4X2xlbikgXAotICAgICAgaWYgKGxlbiA8IG1heF9sZW4pIHsgXAot
ICAgICAgICAgIHN0cltsZW4rK10gPSBjaDsgXAotICAgICAgfSBlbHNlIGlmICghYWxyZWFkeUNv
bXBsYWluZWQpIHsgXAotICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJCVUZGRVIgT1ZFUkZM
T1ciKTsgXAotICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVkID0gMTsgXAotICAgICAgfQotCi0v
KgotICogbEZsb2F0Q29uc3QoKSAtIFNjYW4gYSBmbG9hdGluZyBwb2ludCBjb25zdGFudC4gIEFz
c3VtZXMgdGhhdCB0aGUgc2Nhbm5lcgotICogICAgICAgICBoYXMgc2VlbiBhdCBsZWFzdCBvbmUg
ZGlnaXQsIGZvbGxvd2VkIGJ5IGVpdGhlciBhIGRlY2ltYWwgJy4nIG9yIHRoZQotICogICAgICAg
ICBsZXR0ZXIgJ2UnLgotICogY2ggLSAnLicgb3IgJ2UnCi0gKiBsZW4gLSBsZW5ndGggb2Ygc3Ry
aW5nIGFscmVhZHkgY29waWVkIGludG8geXlsdmFscHAtPnN5bWJvbF9uYW1lLgotICovCi0KLXN0
YXRpYyBpbnQgbEZsb2F0Q29uc3QoaW50IGNoLCBpbnQgbGVuLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCkKLXsKLSAgICBpbnQgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwotICAgIGFzc2VydCgoY2ggPT0g
Jy4nKSB8fCAoY2ggPT0gJ2UnKSB8fCAoY2ggPT0gJ0UnKSk7Ci0KLSAgICBpZiAoY2ggPT0gJy4n
KSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBw
LT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgIGNo
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwotICAgIH0KLQotICAg
IC8vIEV4cG9uZW50OgotICAgIGlmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7Ci0gICAgICAg
IEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9M
X05BTUVfTEVOKTsKLSAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKGNoID09ICcrJykgewotICAgICAg
ICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9T
WU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaCA9
PSAnLScpIHsKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xf
bmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgIHdo
aWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgQVBQRU5EX0NI
QVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4p
OwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVhQT05FTlQgSU5WQUxJRCIpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCBjaCwgeXlsdmFscHApOwotCi0gICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVf
TEVOKTsKLSAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgeXlsdmFs
cHAtPnNjX2Z2YWwgPSAoZmxvYXQpIGF0b2ZfZG90KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0g
ICAgaWYgKGlzaW5mZih5eWx2YWxwcC0+c2NfZnZhbCkpIHsKLSAgICAgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coIkZMT0FUIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgfQotICAgIHJldHVybiBDUFBf
RkxPQVRDT05TVEFOVDsKLX0gLy8gbEZsb2F0Q29uc3QKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIE5vcm1hbCBTY2FubmVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAotc3RhdGljIGlu
dCBieXRlX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBj
aGFyIHN0cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKLSAgICBpbnQgYWxyZWFkeUNvbXBs
YWluZWQgPSAwOwotICAgIGludCBsZW4sIGNoLCBpaSwgaXZhbCA9IDA7Ci0KLSAgICBmb3IgKDs7
KSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSAwOwotICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotIAotICAgICAg
ICB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xyJykgewotICAgICAg
ICAgICAgeXlsdmFscHAtPnNjX2ludCA9IDE7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0gY3BwLT5jdXJyZW50SW5wdXQt
Pm5hbWU7Ci0gICAgICAgIGNwcC0+bHRva2VuTG9jLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+
bGluZTsKLSAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwotICAgICAgICBsZW4gPSAwOwot
ICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gY2g7IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KLSAgICAgICAgY2FzZSBFT0Y6Ci0gICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6
IGNhc2UgJ0QnOiBjYXNlICdFJzoKLSAgICAgICAgY2FzZSAnRic6IGNhc2UgJ0cnOiBjYXNlICdI
JzogY2FzZSAnSSc6IGNhc2UgJ0onOgotICAgICAgICBjYXNlICdLJzogY2FzZSAnTCc6IGNhc2Ug
J00nOiBjYXNlICdOJzogY2FzZSAnTyc6Ci0gICAgICAgIGNhc2UgJ1AnOiBjYXNlICdRJzogY2Fz
ZSAnUic6IGNhc2UgJ1MnOiBjYXNlICdUJzoKLSAgICAgICAgY2FzZSAnVSc6IGNhc2UgJ1YnOiBj
YXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOgotICAgICAgICBjYXNlICdaJzogY2FzZSAnXyc6
Ci0gICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdl
JzoKLSAgICAgICAgY2FzZSAnZic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2Ug
J2onOgotICAgICAgICBjYXNlICdrJzogY2FzZSAnbCc6IGNhc2UgJ20nOiBjYXNlICduJzogY2Fz
ZSAnbyc6Ci0gICAgICAgIGNhc2UgJ3AnOiBjYXNlICdxJzogY2FzZSAncic6IGNhc2UgJ3MnOiBj
YXNlICd0JzoKLSAgICAgICAgY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6
IGNhc2UgJ3knOgotICAgICAgICBjYXNlICd6JzogICAgICAgICAgICAKLSAgICAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25h
bWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgIH0gd2hpbGUgKChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fAotICAgICAgICAgICAg
ICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAgIGNoID09
ICdfJyk7Ci0gICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwot
ICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAg
ICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2
YWxwcCk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotICAgICAgICAgICAgcmV0dXJuIENQUF9J
REVOVElGSUVSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJzAnOgotICAgICAg
ICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9T
WU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAn
eCcgfHwgY2ggPT0gJ1gnKSB7ICAvLyBoZXhhZGVjaW1hbCBpbnRlZ2VyIGNvbnN0YW50cwotICAg
ICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVu
LCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAg
ICAgIGlmICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAg
KGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChjaCA+PSAn
YScgJiYgY2ggPD0gJ2YnKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGl2YWwgPSAwOwotICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoKGl2YWwgPD0gMHgwZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9M
RU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1l
W2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcg
JiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2gg
LSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnQScg
JiYgY2ggPD0gJ0YnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2gg
LSAnQScgKyAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJ2EnICsgMTA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAo
aXZhbCA8PCA0KSB8IGlpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYWxy
ZWFkeUNvbXBsYWluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiSEVYIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAo
KGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJIRVggQ09OU1RBTlQgSU5WQUxJ
RCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1B
WF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICB5eWx2
YWxwcC0+c2NfaW50ID0gaXZhbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNU
QU5UOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7IC8v
IG9jdGFsIGludGVnZXIgY29uc3RhbnRzCi0gICAgICAgICAgICAgICAgaXZhbCA9IDA7Ci0gICAg
ICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBpZiAoKGl2YWwgPD0gMHgxZmZm
ZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpaSA9IGNoIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICAgICAgaXZhbCA9
IChpdmFsIDw8IDMpIHwgaWk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFscmVh
ZHlDb21wbGFpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xv
ZygiT0NUIENPTlNUQU5UIE9WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbHJl
YWR5Q29tcGxhaW5lZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcn
KTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBjaCA9PSAn
ZicgfHwgY2ggPT0gJ2gnIHx8IGNoID09ICd4J3x8IGNoID09ICdFJykgCi0gICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoY2gsIGxlbiwgeXlsdmFscHApOwotICAgICAgICAg
ICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAg
ICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOwotICAgICAgICAgICAg
ICAgIHJldHVybiBDUFBfSU5UQ09OU1RBTlQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGNoID0gJzAnOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLi4uCi0gICAgICAgIGNhc2UgJzEnOiBjYXNlICcy
JzogY2FzZSAnMyc6IGNhc2UgJzQnOgotICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2Ug
JzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1C
T0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2gg
PT0gJ2UnIHx8IGNoID09ICdFJykgewotICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25z
dChjaCwgbGVuLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAg
eXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgICAgIGl2YWwgPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBp
aSA8IGxlbjsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICBjaCA9IHl5bHZhbHBwLT5zeW1i
b2xfbmFtZVtpaV0gLSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgIGl2YWwgPSBpdmFsKjEwICsg
Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoaXZhbCA+IDIxNDc0ODM2NCkgfHwgKGl2YWwg
PT0gMjE0NzQ4MzY0ICYmIGNoID49IDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiSU5URUdFUiBDT05TVEFOVCBPVkVSRkxPVyIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Ci0gICAgICAgICAg
ICAgICAgaWYoaXZhbD09MCkKLSAgICAgICAgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5
bWJvbF9uYW1lLCIwIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICctJzoKLSAg
ICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIENQUF9ERUNfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9Jykg
ewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1VCX0FTU0lHTjsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICctJzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICAgICAgaWYgKGNoID09ICcrJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5DX09Q
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX0FERF9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnKyc7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgJyonOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPScp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01VTF9BU1NJR047Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnKic7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01PRF9B
U1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jyl7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIENQUF9SSUdIVF9CUkFDRTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclJzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09
ICc+JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJBQ0tFVDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICc6JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnXic6Ci0gICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgICAgICAgICAgaWYgKGNoID09ICdeJykgewotICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfWE9SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2gg
PT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9BU1NJR047Ci0gICAg
ICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51
bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAg
ICAgcmV0dXJuICdeJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2gg
PT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9FUV9PUDsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICc9
JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnISc6Ci0gICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTkVf
T1A7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgICAgIHJldHVybiAnISc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ3wnOgotICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnfCcpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX09SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09SX0FTU0lH
TjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50
SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICAgICAgICByZXR1cm4gJ3wnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09
ICcmJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5EX09QOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0FORF9BU1NJR047Ci0gICAgICAgICAgICAgICAgZWxzZXsKLSAgICAg
ICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJzsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJzwnOgotICAgICAgICAgICAg
Y2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKLSAgICAgICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgIGlmKGNoID09ICc9JykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQ
UF9MRUZUX0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX09QOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09
ICc9JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFX09QOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnJScpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0U7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNoID09ICc6JykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDUFBfTEVGVF9CUkFDS0VUOwotICAgICAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAg
ICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0g
Jz4nKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaCA9PSAnPScp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQVNTSUdOOwotICAgICAgICAg
ICAgICAgIGVsc2V7Ci0gICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX1JJR0hUX09QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0dFX09QOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0
LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz4nOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAg
ICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAg
ICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoJy4nLCAwLCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjaCA9
PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBTcGVjaWFsIEVPRiBo
YWNrCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAnLic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBp
ZiAoY2ggPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAg
ICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKTsK
LSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gLTE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdcbic7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKGNoID09ICcqJykgewotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgZG8g
ewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIkVPRiBJTiBDT01NRU5UIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9GIElOIENPTU1FTlQiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9ICcvJyk7Ci0gICAgICAgICAgICAgICAgLy8gR28g
dHJ5IGl0IGFnYWluLi4uCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgewotICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfRElWX0FTU0lHTjsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcvJzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyInICYmIGNoICE9ICdcbicgJiYgY2gg
IT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICdcXCcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0
ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCBzdHJpbmdfdmFsLCBsZW4sIE1BWF9TVFJJTkdf
TEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGFz
c2VydChsZW4gPD0gTUFYX1NUUklOR19MRU4pOwotICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5d
ID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnIicpIHsKLSAgICAgICAgICAgICAgICB5
eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1NUUkNPTlNUQU5UOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9MIElOIFNUUklORyIp
OwotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9TWTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBieXRlX3NjYW4KLQotaW50IHl5
bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKQoteyAgICAKLSAgICB5eXN0eXBlcHAgeXls
dmFscHA7Ci0gICAgaW50IHRva2VuID0gJ1xuJzsgICAKLQotICAgIGZvcig7OykgewotCi0gICAg
ICAgIGNoYXIqIHRva2VuU3RyaW5nID0gMDsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKLSAgICAgICAgaWYoY2hl
Y2tfRU9GKHRva2VuKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAodG9rZW4g
PCAwKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNrIG1heSBuZWVkIHRvIGJlIGltcHJvdmVk
IHRvIHN1cHBvcnQgVVRGLTgKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgaW4gY29tbWVudHMu
Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGVuY291bnRlcmVk
IG5vbi1BU0NJSSBjaGFyYWN0ZXIgaW4gc2hhZGVyIHNvdXJjZSIpOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuID09ICcjJykgewotICAgICAgICAg
ICAgaWYgKGNwcC0+cHJldmlvdXNfdG9rZW4gPT0gJ1xuJ3x8IGNwcC0+cHJldmlvdXNfdG9rZW4g
PT0gMCkgewotICAgICAgICAgICAgICAgIHRva2VuID0gcmVhZENQUGxpbmUoJnl5bHZhbHBwKTsK
LSAgICAgICAgICAgICAgICBpZihjaGVja19FT0YodG9rZW4pKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInByZXByb2Nlc3NvciBjb21t
YW5kIG11c3Qgbm90IGJlIHByZWNlZGVkIGJ5IGFueSBvdGhlciBzdGF0ZW1lbnQgaW4gdGhhdCBs
aW5lIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgY3BwLT5wcmV2aW91c190b2tlbiA9IHRva2VuOwotICAgICAgICAvLyBleHBh
bmQgbWFjcm9zCi0gICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBNYWNyb0V4
cGFuZCh5eWx2YWxwcC5zY19pZGVudCwgJnl5bHZhbHBwKSkgewotICAgICAgICAgICAgY3BwLT5w
YXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodG9rZW4gPT0gJ1xuJykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0KLSAgICAgICAgaWYgKHRva2VuID09
IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0cmluZ09m
QXRvbShhdGFibGUseXlsdmFscHAuc2NfaWRlbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHRva2Vu
ID09IENQUF9GTE9BVENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7Ci0gICAg
ICAgICAgICB0b2tlblN0cmluZyA9IHl5bHZhbHBwLnN5bWJvbF9uYW1lOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRv
a2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlblN0cmluZykgewotICAgICAgICAg
ICAgaW50IGxlbiA9IHN0cmxlbih0b2tlblN0cmluZyk7Ci0gICAgICAgICAgICBjcHAtPnRva2Vu
c0JlZm9yZUVPRiA9IDE7Ci0gICAgICAgICAgICBpZiAobGVuID49IG1heFNpemUpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbWF4U2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZSAgaWYgKGxlbiA+
IDApIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGxlbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIHl5bGV4Ci0KLS8vQ2hlY2tzIGlmIHRoZSB0b2tl
biBqdXN0IHJlYWQgaXMgRU9GIG9yIG5vdC4KLWludCBjaGVja19FT0YoaW50IHRva2VuKQotewot
ICAgaWYodG9rZW49PS0xKXsKLSAgICAgICBpZihjcHAtPmlmZGVwdGggPjApewotICAgICAgICBD
UFBFcnJvclRvSW5mb0xvZygiI2VuZGlmIG1pc3NpbmchISBDb21waWxhdGlvbiBzdG9wcGVkIik7
Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAgICAgfQotICAgICAgcmV0dXJuIDE7
Ci0gICB9Ci0gICByZXR1cm4gMDsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2Yg
c2Nhbm5lci5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdjMWQ2Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCisr
KyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
Ci1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQot
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1O
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwot
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
LVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
Ci1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBzY2FubmVyLmgK
LS8vCi0KLSNpZiAhZGVmaW5lZChfX1NDQU5ORVJfSCkKLSNkZWZpbmUgX19TQ0FOTkVSX0ggMQot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKLSNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCi0KLS8vIE5vdCByZWFsbHkgYXRv
bSB0YWJsZSBzdHVmZiBidXQgbmVlZGVkIGZpcnN0Li4uCi0KLXR5cGVkZWYgc3RydWN0IFNvdXJj
ZUxvY19SZWMgewotICAgIHVuc2lnbmVkIHNob3J0IGZpbGUsIGxpbmU7Ci19IFNvdXJjZUxvYzsK
LQotaW50IHl5bGV4X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLQotdHlwZWRlZiBzdHJ1
Y3QgSW5wdXRTcmMgewotICAgIHN0cnVjdCBJbnB1dFNyYwkqcHJldjsKLSAgICBpbnQJCQkoKnNj
YW4pKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7Ci0gICAgaW50CQkJKCpnZXRjaCko
c3RydWN0IElucHV0U3JjICosIHl5c3R5cGVwcCAqKTsKLSAgICB2b2lkCQkoKnVuZ2V0Y2gpKHN0
cnVjdCBJbnB1dFNyYyAqLCBpbnQsIHl5c3R5cGVwcCAqKTsKLSAgICBpbnQJCQluYW1lOyAgLyog
YXRvbSAqLwotICAgIGludAkJCWxpbmU7Ci19IElucHV0U3JjOwotCi1pbnQgSW5pdFNjYW5uZXIo
Q1BQU3RydWN0ICpjcHApOyAgIC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAotaW50IElu
aXRTY2FubmVySW5wdXQoQ1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci1pbnQgY2hlY2tfRU9GKGludCk7ICAg
ICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lkIENQUEVy
cm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGlu
dG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCi12b2lkIFNldExpbmVOdW1iZXIoaW50KTsKLXZvaWQg
U2V0U3RyaW5nTnVtYmVyKGludCk7Ci12b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7Ci12b2lkIERl
Y0xpbmVOdW1iZXIodm9pZCk7Ci1pbnQgRnJlZVNjYW5uZXIodm9pZCk7ICAgICAgICAgICAgICAg
ICAvLyBGcmVlIHRoZSBjcHAgc2Nhbm5lcgotI2VuZGlmIC8vICEoZGVmaW5lZChfX1NDQU5ORVJf
SCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ2MzQ2MjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICsw
LDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
LQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1Q
Uk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0vLwotLy8gc2xnbG9iYWxzLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChf
X1NMR0xPQkFMU19IKQotI2RlZmluZSBfX1NMR0xPQkFMU19IIDEKLQotdHlwZWRlZiBzdHJ1Y3Qg
Q1BQU3RydWN0X1JlYyBDUFBTdHJ1Y3Q7Ci0KLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKLQotI3Vu
ZGVmICBDUFBDX0RFQlVHX1RIRV9DT01QSUxFUgotI2lmIGRlZmluZWQoX0RFQlVHKQotI2RlZmlu
ZSBDUFBDX0RFQlVHX1RIRV9DT01QSUxFUiAxCi0jZW5kaWYKLQotI3VuZGVmICBDUFBDX0VOQUJM
RV9UT09MUwotI2RlZmluZSBDUFBDX0VOQUJMRV9UT09MUyAxCi0KLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2F0b20uaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIKLSNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIgotI2lm
ICFkZWZpbmVkKE5PX1BBUlNFUikKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFy
c2VyLmgiCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKE5VTEwpCi0jZGVmaW5lIE5VTEwgMAotI2Vu
ZGlmCi0KLSNlbmRpZiAvLyAhKGRlZmluZWQoX19TTEdMT0JBTFNfSCkKLQotCi0gICAgCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3Ivc3ltYm9scy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zeW1ib2xzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOGIyNTYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zeW1ib2xzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4K
LQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRv
IHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5n
IHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRp
c3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5j
ZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMs
IHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMg
TlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0
byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVy
bXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2Us
IHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdh
cmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFu
ZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2Rp
ZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQg
aWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWlu
IHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xs
b3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBv
ZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2Vy
dmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJ
RElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVy
IHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBO
VklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJp
Z2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBi
eSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jw
b3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElB
IFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQK
LVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1Ig
SU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04g
RUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1J
TiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJF
Q1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBP
RiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9O
IE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRF
UiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklD
VCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLS8vCi0vLyBzeW1ib2xzLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0NzA2KQotI2VuZGlmCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTeW1i
b2wgVGFibGUgVmFyaWFibGVzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotU2NvcGUgKlNjb3BlTGlz
dCA9IE5VTEw7Ci1TY29wZSAqQ3VycmVudFNjb3BlID0gTlVMTDsKLVNjb3BlICpHbG9iYWxTY29w
ZSA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkgewotICAg
IFNjb3BlICpzY29wZSA9IF9zY29wZTsKLQotICAgIGlmIChzY29wZS0+bmV4dCkKLSAgICAgICAg
c2NvcGUtPm5leHQtPnByZXYgPSBzY29wZS0+cHJldjsKLSAgICBpZiAoc2NvcGUtPnByZXYpCi0g
ICAgICAgIHNjb3BlLT5wcmV2LT5uZXh0ID0gc2NvcGUtPm5leHQ7Ci0gICAgZWxzZQotICAgICAg
ICBTY29wZUxpc3QgPSBzY29wZS0+bmV4dDsKLX0KLQotLyoKLSAqIE5ld1Njb3BlKCkKLSAqCi0g
Ki8KLVNjb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICpwb29sKQotewotICAgIFNjb3Bl
ICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNjb3BlKSk7
Ci0gICAgbFNjb3BlLT5wb29sID0gcG9vbDsKLSAgICBsU2NvcGUtPnBhcmVudCA9IE5VTEw7Ci0g
ICAgbFNjb3BlLT5mdW5TY29wZSA9IE5VTEw7Ci0gICAgbFNjb3BlLT5zeW1ib2xzID0gTlVMTDsK
LSAgICAKLSAgICBsU2NvcGUtPmxldmVsID0gMDsKLQotICAgIGxTY29wZS0+cHJvZ3JhbXMgPSBO
VUxMOwotICAgIGlmICgobFNjb3BlLT5uZXh0ID0gU2NvcGVMaXN0KSkKLSAgICAgICAgU2NvcGVM
aXN0LT5wcmV2ID0gbFNjb3BlOwotICAgIGxTY29wZS0+cHJldiA9IDA7Ci0gICAgU2NvcGVMaXN0
ID0gbFNjb3BlOwotICAgIG1lbV9BZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBsU2NvcGUp
OwotICAgIHJldHVybiBsU2NvcGU7Ci19IC8vIE5ld1Njb3BlCi0KLS8qCi0gKiBQdXNoU2NvcGUo
KQotICoKLSAqLwotCi12b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3BlKQotewotICAgIFNjb3Bl
ICpsU2NvcGU7Ci0KLSAgICBpZiAoQ3VycmVudFNjb3BlKSB7Ci0gICAgICAgIGZTY29wZS0+bGV2
ZWwgPSBDdXJyZW50U2NvcGUtPmxldmVsICsgMTsKLSAgICAgICAgaWYgKGZTY29wZS0+bGV2ZWwg
PT0gMSkgewotICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZSkgewotICAgICAgICAgICAgICAg
IC8qIEhBQ0sgLSBDVEQgLS0gaWYgR2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0xLCB3ZSdy
ZQotICAgICAgICAgICAgICAgICAqIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1cGVyZ2xv
YmFsIHNjb3BlLiAgVGhpbmdzCi0gICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBpZiB3ZSBs
ZWF2ZSB0aGUgbGV2ZWwgYXMgMSwgc28gd2UgYXJiaXRyYXJpbHkKLSAgICAgICAgICAgICAgICAg
KiBzZXQgaXQgdG8gMiAqLwotICAgICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAyOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49IDIpIHsK
LSAgICAgICAgICAgIGxTY29wZSA9IGZTY29wZTsKLSAgICAgICAgICAgIHdoaWxlIChsU2NvcGUt
PmxldmVsID4gMikKLSAgICAgICAgICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7Ci0gICAg
ICAgICAgICBmU2NvcGUtPmZ1blNjb3BlID0gbFNjb3BlOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDA7Ci0gICAgfQotICAgIGZTY29wZS0+cGFyZW50
ID0gQ3VycmVudFNjb3BlOwotICAgIEN1cnJlbnRTY29wZSA9IGZTY29wZTsKLX0gLy8gUHVzaFNj
b3BlCi0KLS8qCi0gKiBQb3BTY29wZSgpCi0gKgotICovCi0KLVNjb3BlICpQb3BTY29wZSh2b2lk
KQotewotICAgIFNjb3BlICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBDdXJyZW50U2NvcGU7Ci0g
ICAgaWYgKEN1cnJlbnRTY29wZSkKLSAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVudFNjb3Bl
LT5wYXJlbnQ7Ci0gICAgcmV0dXJuIGxTY29wZTsKLX0gLy8gUG9wU2NvcGUKLQotLyoKLSAqIE5l
d1N5bWJvbCgpIC0gQWxsb2NhdGUgYSBuZXcgc3ltYm9sIG5vZGU7Ci0gKgotICovCi0KLVN5bWJv
bCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3lt
Ym9sa2luZCBraW5kKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgY2hhciAqcGNoOwotICAg
IHVuc2lnbmVkIGludCBpaTsKLQotICAgIGxTeW1iID0gKFN5bWJvbCAqKSBtZW1fQWxsb2MoZlNj
b3BlLT5wb29sLCBzaXplb2YoU3ltYm9sKSk7Ci0gICAgbFN5bWItPmxlZnQgPSBOVUxMOwotICAg
IGxTeW1iLT5yaWdodCA9IE5VTEw7Ci0gICAgbFN5bWItPm5leHQgPSBOVUxMOwotICAgIGxTeW1i
LT5uYW1lID0gbmFtZTsKLSAgICBsU3ltYi0+bG9jID0gKmxvYzsKLSAgICBsU3ltYi0+a2luZCA9
IGtpbmQ7Ci0gICAgCi0gICAgLy8gQ2xlYXIgdW5pb24gYXJlYToKLQotICAgIHBjaCA9IChjaGFy
ICopICZsU3ltYi0+ZGV0YWlsczsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YobFN5bWIt
PmRldGFpbHMpOyBpaSsrKQotICAgICAgICAqcGNoKysgPSAwOwotICAgIHJldHVybiBsU3ltYjsK
LX0gLy8gTmV3U3ltYm9sCi0KLS8qCi0gKiBsQWRkVG9UcmVlKCkgLSBVc2luZyBhIGJpbmFyeSB0
cmVlIGlzIG5vdCBhIGdvb2QgaWRlYSBmb3IgYmFzaWMgYXRvbSB2YWx1ZXMgYmVjYXVzZSB0aGV5
Ci0gKiAgICAgICAgIGFyZSBnZW5lcmF0ZWQgaW4gb3JkZXIuICBXZSdsbCBmaXggdGhpcyBsYXRl
ciAoYnkgcmV2ZXJzaW5nIHRoZSBiaXQgcGF0dGVybikuCi0gKi8KLQotc3RhdGljIHZvaWQgbEFk
ZFRvVHJlZShTeW1ib2wgKipmU3ltYm9scywgU3ltYm9sICpmU3ltYikKLXsKLSAgICBTeW1ib2wg
KmxTeW1iOwotICAgIGludCBscmV2LCBmcmV2OwotCi0gICAgbFN5bWIgPSAqZlN5bWJvbHM7Ci0g
ICAgaWYgKGxTeW1iKSB7Ci0gICAgICAgIGZyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBm
U3ltYi0+bmFtZSk7Ci0gICAgICAgIHdoaWxlIChsU3ltYikgewotICAgICAgICAgICAgbHJldiA9
IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKLSAgICAgICAgICAgIGlmIChs
cmV2ID09IGZyZXYpIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiR2V0QXRv
bVN0cmluZyhhdGFibGUsIGZTeW1iLT5uYW1lKSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobHJldiA+IGZyZXYpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5sZWZ0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWItPmxlZnQgPSBmU3ltYjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5yaWdodCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+cmlnaHQg
PSBmU3ltYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgKmZTeW1ib2xzID0gZlN5bWI7Ci0gICAgfQotfSAvLyBsQWRkVG9U
cmVlCi0KLQotLyoKLSAqIEFkZFN5bWJvbCgpIC0gQWRkIGEgdmFyaWFibGUsIHR5cGUsIG9yIGZ1
bmN0aW9uIG5hbWUgdG8gYSBzY29wZS4KLSAqCi0gKi8KLQotU3ltYm9sICpBZGRTeW1ib2woU291
cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpCi17
Ci0gICAgU3ltYm9sICpsU3ltYjsKLQotICAgIGlmICghZlNjb3BlKQotICAgICAgICBmU2NvcGUg
PSBDdXJyZW50U2NvcGU7Ci0gICAgbFN5bWIgPSBOZXdTeW1ib2wobG9jLCBmU2NvcGUsIGF0b20s
IGtpbmQpOwotICAgIGxBZGRUb1RyZWUoJmZTY29wZS0+c3ltYm9scywgbFN5bWIpOwotICAgIHJl
dHVybiBsU3ltYjsKLX0gLy8gQWRkU3ltYm9sCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogU3lt
Ym9sIFNlbWFudGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0v
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTG9va1VwTG9j
YWxTeW1ib2woKQotICoKLSAqLwotCi1TeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpm
U2NvcGUsIGludCBhdG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgaW50IHJuYW1lLCBy
YXRvbTsKLQotICAgIHJhdG9tID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgYXRvbSk7Ci0gICAg
aWYgKCFmU2NvcGUpCi0gICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKLSAgICBsU3ltYiA9
IGZTY29wZS0+c3ltYm9sczsKLSAgICB3aGlsZSAobFN5bWIpIHsKLSAgICAgICAgcm5hbWUgPSBH
ZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+bmFtZSk7Ci0gICAgICAgIGlmIChybmFtZSA9
PSByYXRvbSkgewotICAgICAgICAgICAgcmV0dXJuIGxTeW1iOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKHJuYW1lID4gcmF0b20pIHsKLSAgICAgICAgICAgICAgICBsU3ltYiA9
IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsU3lt
YiA9IGxTeW1iLT5yaWdodDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwTG9jYWxTeW1ib2wKLQotLyoKLSAqIExvb2tVcFN5bWJv
bCgpCi0gKgotICovCi0KLVN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBh
dG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0KLSAgICBpZiAoIWZTY29wZSkKLSAgICAgICAg
ZlNjb3BlID0gQ3VycmVudFNjb3BlOwotICAgIHdoaWxlIChmU2NvcGUpIHsKLSAgICAgICAgbFN5
bWIgPSBMb29rVXBMb2NhbFN5bWJvbChmU2NvcGUsIGF0b20pOwotICAgICAgICBpZiAobFN5bWIp
Ci0gICAgICAgICAgICByZXR1cm4gbFN5bWI7Ci0gICAgICAgIGZTY29wZSA9IGZTY29wZS0+cGFy
ZW50OwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwU3ltYm9sCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zeW1ib2xzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZDBiMDcuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zeW1ib2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQot
TlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlv
dSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRl
cm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3Ry
aWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBv
ZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBs
ZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJ
RElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBh
YmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMs
IE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVu
ZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUg
KHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCBy
ZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmlj
YXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYg
eW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRo
ZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dp
bmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0
aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2Vydmlj
ZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElB
LgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJp
Z2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklE
SUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0
cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBv
dGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3Jh
dGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNP
RlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1Q
TElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlU
SEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBO
TyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1Qs
Ci1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBU
SEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9G
IFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBU
SEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBM
SUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LS8vCi0vLyBzeW1ib2xzLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX1NZTUJPTFNfSCkKLSNkZWZp
bmUgX19TWU1CT0xTX0ggMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oIgotCi10eXBlZGVmIGVudW0gc3ltYm9sa2luZCB7Ci0gICBNQUNST19TCi19IHN5bWJvbGtp
bmQ7Ci0KLS8vIFR5cGVkZWZzIGZvciB0aGluZ3MgZGVmaW5lZCBoZXJlIGluICJzeW1ib2xzLmgi
OgotCi10eXBlZGVmIHN0cnVjdCBTY29wZV9SZWMgU2NvcGU7Ci10eXBlZGVmIHN0cnVjdCBTeW1i
b2xfUmVjIFN5bWJvbDsKLQotdHlwZWRlZiBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgewotICAgIHN0
cnVjdCBTeW1ib2xMaXN0X1JlYyAqbmV4dDsKLSAgICBTeW1ib2wgKnN5bWI7Ci19IFN5bWJvbExp
c3Q7Ci0KLXN0cnVjdCBTY29wZV9SZWMgewotICAgIFNjb3BlICpuZXh0LCAqcHJldjsgICAgIC8v
IGRvdWJseS1saW5rZWQgbGlzdCBvZiBhbGwgc2NvcGVzCi0gICAgU2NvcGUgKnBhcmVudDsKLSAg
ICBTY29wZSAqZnVuU2NvcGU7ICAgICAgICAvLyBQb2ludHMgdG8gYmFzZSBzY29wZSBvZiBlbmNs
b3NpbmcgZnVuY3Rpb24KLSAgICBNZW1vcnlQb29sICpwb29sOyAgICAgICAvLyBwb29sIHVzZWQg
Zm9yIGFsbG9jYXRpb24gaW4gdGhpcyBzY29wZQotICAgIFN5bWJvbCAqc3ltYm9sczsKLSAgICAK
LQlpbnQgbGV2ZWw7ICAgICAgICAgICAgICAvLyAwID0gc3VwZXIgZ2xvYmFscywgMSA9IGdsb2Jh
bHMsIGV0Yy4KLQotICAgIC8vIE9ubHkgdXNlZCBhdCBnbG9iYWwgc2NvcGUgKGxldmVsIDEpOgot
ICAgIFN5bWJvbExpc3QgKnByb2dyYW1zOyAgIC8vIExpc3Qgb2YgcHJvZ3JhbXMgZm9yIHRoaXMg
Y29tcGlsYXRpb24uCi19OwotCi0KLS8vIFN5bWJvbCB0YWJsZSBpcyBhIHNpbXBsZSBiaW5hcnkg
dHJlZS4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIgICAgICAgIC8v
IHRvIGdldCBNYWNyb1N5bWJvbCBkZWYKLQotc3RydWN0IFN5bWJvbF9SZWMgewotICAgIFN5bWJv
bCAqbGVmdCwgKnJpZ2h0OwotICAgIFN5bWJvbCAqbmV4dDsKLSAgICBpbnQgbmFtZTsgICAgICAg
Ly8gTmFtZSBhdG9tCi0gICAgU291cmNlTG9jIGxvYzsKLSAgICBzeW1ib2xraW5kIGtpbmQ7Ci0g
ICAgdW5pb24gewotICAgICAgICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgfSBkZXRhaWxzOwotfTsK
LQotZXh0ZXJuIFNjb3BlICpDdXJyZW50U2NvcGU7Ci1leHRlcm4gU2NvcGUgKkdsb2JhbFNjb3Bl
OwotZXh0ZXJuIFNjb3BlICpTY29wZUxpc3Q7Ci0KLVNjb3BlICpOZXdTY29wZUluUG9vbChNZW1v
cnlQb29sICopOwotI2RlZmluZSBOZXdTY29wZSgpICAgICAgTmV3U2NvcGVJblBvb2woQ3VycmVu
dFNjb3BlLT5wb29sKQotdm9pZCBQdXNoU2NvcGUoU2NvcGUgKmZTY29wZSk7Ci1TY29wZSAqUG9w
U2NvcGUodm9pZCk7Ci1TeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZT
Y29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCk7Ci1TeW1ib2wgKkFkZFN5bWJvbChTb3Vy
Y2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7Ci1T
eW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLVN5bWJv
bCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLQotCi0jZW5kaWYgLy8g
IWRlZmluZWQoX19TWU1CT0xTX0gpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiOTRjMDVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKysrIC9kZXYvbnVsbApA
QCAtMSw0NjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIw
MDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBz
dXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRp
b24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2Fy
ZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3Qg
YWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWws
IG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhp
cyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1
c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdh
cmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFy
eQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNv
ZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwg
dGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFs
bCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0
aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1D
b3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQg
aW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBp
bXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAot
bGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91
ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElB
IFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBo
ZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlU
QVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1F
TlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9S
Ci1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJ
VEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxF
IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBS
T0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBB
UklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNB
VElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVS
IENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElG
Ci1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyB0b2tlbnMuYwotLy8KLQotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j
aW5jbHVkZSA8Y3R5cGUuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
c2xnbG9iYWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgotCi0jaWYgZGVmaW5lZChf
TVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDU0KQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQxNTIpCi0jZW5kaWYKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBQcmVwcm9jZXNzb3IgYW5kIFRva2Vu
IFJlY29yZGVyIGFuZCBQbGF5YmFjazogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogaWRzdHIoKQotICogQ29w
eSBhIHN0cmluZyB0byBhIG1hbGxvYydlZCBibG9jayBhbmQgY29udmVydCBpdCBpbnRvIHNvbWV0
aGluZyBzdWl0YWJsZQotICogZm9yIGFuIElECi0gKgotICovCi0KLXN0YXRpYyBjaGFyICppZHN0
cihjb25zdCBjaGFyICpmc3RyLCBNZW1vcnlQb29sICpwb29sKQotewotICAgIHNpemVfdCBsZW47
Ci0gICAgY2hhciAqc3RyLCAqdDsKLSAgICBjb25zdCBjaGFyICpmOwotCi0gICAgbGVuID0gc3Ry
bGVuKGZzdHIpOwotICAgIGlmICghcG9vbCkKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWFsbG9j
KGxlbiArIDEpOwotICAgIGVsc2UKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWVtX0FsbG9jKHBv
b2wsIGxlbiArIDEpOwotICAgIAotICAgIGZvciAoZj1mc3RyLCB0PXN0cjsgKmY7IGYrKykgewot
ICAgICAgICBpZiAoaXNhbG51bSgqZikpICp0KysgPSAqZjsKLSAgICAgICAgZWxzZSBpZiAoKmYg
PT0gJy4nIHx8ICpmID09ICcvJykgKnQrKyA9ICdfJzsKLSAgICB9Ci0gICAgKnQgPSAwOwotICAg
IHJldHVybiBzdHI7Ci19IC8vIGlkc3RyCi0KLQotLyoKLSAqIGxOZXdCbG9jaygpCi0gKgotICov
Ci0KLXN0YXRpYyBUb2tlbkJsb2NrICpsTmV3QmxvY2soVG9rZW5TdHJlYW0gKmZUb2ssIE1lbW9y
eVBvb2wgKnBvb2wpCi17Ci0gICAgVG9rZW5CbG9jayAqbEJsb2NrOwotCi0gICAgaWYgKCFwb29s
KQotICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtYWxsb2Moc2l6ZW9mKFRva2VuQmxv
Y2spICsgMjU2KTsKLSAgICBlbHNlCi0gICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2NrICopIG1l
bV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOwotICAgIGxCbG9jay0+Y291
bnQgPSAwOwotICAgIGxCbG9jay0+Y3VycmVudCA9IDA7Ci0gICAgbEJsb2NrLT5kYXRhID0gKHVu
c2lnbmVkIGNoYXIgKikgbEJsb2NrICsgc2l6ZW9mKFRva2VuQmxvY2spOwotICAgIGxCbG9jay0+
bWF4ID0gMjU2OwotICAgIGxCbG9jay0+bmV4dCA9IE5VTEw7Ci0gICAgaWYgKGZUb2stPmhlYWQp
IHsKLSAgICAgICAgZlRvay0+Y3VycmVudC0+bmV4dCA9IGxCbG9jazsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBmVG9rLT5oZWFkID0gbEJsb2NrOwotICAgIH0KLSAgICBmVG9rLT5jdXJyZW50ID0g
bEJsb2NrOwotICAgIHJldHVybiBsQmxvY2s7Ci19IC8vIGxOZXdCbG9jawotCi0vKgotICogbEFk
ZEJ5dGUoKQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBsQWRkQnl0ZShUb2tlblN0cmVhbSAqZlRv
aywgdW5zaWduZWQgY2hhciBmVmFsKQotewotICAgIFRva2VuQmxvY2sgKmxCbG9jazsKLSAgICBs
QmxvY2sgPSBmVG9rLT5jdXJyZW50OwotICAgIGlmIChsQmxvY2stPmNvdW50ID49IGxCbG9jay0+
bWF4KQotICAgICAgICBsQmxvY2sgPSBsTmV3QmxvY2soZlRvaywgMCk7Ci0gICAgbEJsb2NrLT5k
YXRhW2xCbG9jay0+Y291bnQrK10gPSBmVmFsOwotfSAvLyBsQWRkQnl0ZQotCi0KLQotLyoKLSAq
IGxSZWFkQnl0ZSgpIC0gR2V0IHRoZSBuZXh0IGJ5dGUgZnJvbSBhIHN0cmVhbS4KLSAqCi0gKi8K
LQotc3RhdGljIGludCBsUmVhZEJ5dGUoVG9rZW5TdHJlYW0gKnBUb2spCi17Ci0gICAgVG9rZW5C
bG9jayAqbEJsb2NrOwotICAgIGludCBsdmFsID0gLTE7Ci0KLSAgICBsQmxvY2sgPSBwVG9rLT5j
dXJyZW50OwotICAgIGlmIChsQmxvY2spIHsKLSAgICAgICAgaWYgKGxCbG9jay0+Y3VycmVudCA+
PSBsQmxvY2stPmNvdW50KSB7Ci0gICAgICAgICAgICBsQmxvY2sgPSBsQmxvY2stPm5leHQ7Ci0g
ICAgICAgICAgICBpZiAobEJsb2NrKQotICAgICAgICAgICAgICAgIGxCbG9jay0+Y3VycmVudCA9
IDA7Ci0gICAgICAgICAgICBwVG9rLT5jdXJyZW50ID0gbEJsb2NrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChsQmxvY2spCi0gICAgICAgICAgICBsdmFsID0gbEJsb2NrLT5kYXRhW2xCbG9jay0+
Y3VycmVudCsrXTsKLSAgICB9Ci0gICAgcmV0dXJuIGx2YWw7Ci19IC8vIGxSZWFkQnl0ZQotCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gR2xvYmFsIEZ1bmN0aW9uczov
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogTmV3VG9rZW5T
dHJlYW0oKQotICoKLSAqLwotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29uc3QgY2hh
ciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCkKLXsKLSAgICBUb2tlblN0cmVhbSAqcFRvazsKLQot
ICAgIGlmICghcG9vbCkKLSAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSAqKSBtYWxsb2Moc2l6
ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgZWxzZQotICAgICAgICBwVG9rID0gKFRva2VuU3RyZWFt
KiltZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgcFRvay0+bmV4dCA9
IE5VTEw7Ci0gICAgcFRvay0+bmFtZSA9IGlkc3RyKG5hbWUsIHBvb2wpOwotICAgIHBUb2stPmhl
YWQgPSBOVUxMOwotICAgIHBUb2stPmN1cnJlbnQgPSBOVUxMOwotICAgIGxOZXdCbG9jayhwVG9r
LCBwb29sKTsKLSAgICByZXR1cm4gcFRvazsKLX0gLy8gTmV3VG9rZW5TdHJlYW0KLQotLyoKLSAq
IERlbGV0ZVRva2VuU3RyZWFtKCkKLSAqCi0gKi8KLQotdm9pZCBEZWxldGVUb2tlblN0cmVhbShU
b2tlblN0cmVhbSAqcFRvaykKLXsKLSAgICBUb2tlbkJsb2NrICpwQmxvY2ssICpuQmxvY2s7Ci0K
LSAgICBpZiAocFRvaykgewotICAgICAgICBwQmxvY2sgPSBwVG9rLT5oZWFkOwotICAgICAgICB3
aGlsZSAocEJsb2NrKSB7Ci0gICAgICAgICAgICBuQmxvY2sgPSBwQmxvY2stPm5leHQ7Ci0gICAg
ICAgICAgICBmcmVlKHBCbG9jayk7Ci0gICAgICAgICAgICBwQmxvY2sgPSBuQmxvY2s7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHBUb2stPm5hbWUpCi0gICAgICAgICAgICBmcmVlKHBUb2stPm5h
bWUpOwotICAgICAgICBmcmVlKHBUb2spOwotICAgIH0KLX0gLy8gRGVsZXRlVG9rZW5TdHJlYW0K
LQotLyoKLSAqIFJlY29yZFRva2VuKCkgLSBBZGQgYSB0b2tlbiB0byB0aGUgZW5kIG9mIGEgbGlz
dCBmb3IgbGF0ZXIgcGxheWJhY2sgb3IgcHJpbnRvdXQuCi0gKgotICovCi0KLXZvaWQgUmVjb3Jk
VG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHAp
Ci17Ci0gICAgY29uc3QgY2hhciAqczsKLSAgICBjaGFyICpzdHI9TlVMTDsKLQotICAgIGlmICh0
b2tlbiA+IDI1NikKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKCh0b2tl
biAmIDB4N2YpICsgMHg4MCkpOwotICAgIGVsc2UKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVu
c2lnbmVkIGNoYXIpKHRva2VuICYgMHg3ZikpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBj
YXNlIENQUF9JREVOVElGSUVSOgotICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgotICAgIGNh
c2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICBzID0gR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5
bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgICAgIHdoaWxlICgqcykKLSAgICAgICAgICAgIGxBZGRC
eXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSAqcysrKTsKLSAgICAgICAgbEFkZEJ5dGUocFRvaywg
MCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0gICAgY2Fz
ZSBDUFBfSU5UQ09OU1RBTlQ6Ci0gICAgICAgICBzdHI9eXlsdmFscHAtPnN5bWJvbF9uYW1lOwot
ICAgICAgICAgd2hpbGUgKCpzdHIpewotICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2ln
bmVkIGNoYXIpICpzdHIrKyk7Ci0gICAgICAgICB9Ci0gICAgICAgICBsQWRkQnl0ZShwVG9rLCAw
KTsKLSAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgJygnOgotICAgICAgICBsQWRkQnl0ZShwVG9r
LCAodW5zaWduZWQgY2hhcikoeXlsdmFscHAtPnNjX2ludCA/IDEgOiAwKSk7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfSAvLyBSZWNvcmRUb2tlbgotCi0vKgotICogUmV3
aW5kVG9rZW5TdHJlYW0oKSAtIFJlc2V0IGEgdG9rZW4gc3RyZWFtIGluIHByZXBlcmF0aW9uIGZv
ciByZWFkaW5nLgotICoKLSAqLwotCi12b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2VuU3RyZWFt
ICpwVG9rKQotewotICAgIGlmIChwVG9rLT5oZWFkKSB7Ci0gICAgICAgIHBUb2stPmN1cnJlbnQg
PSBwVG9rLT5oZWFkOwotICAgICAgICBwVG9rLT5jdXJyZW50LT5jdXJyZW50ID0gMDsKLSAgICB9
Ci19IC8vIFJld2luZFRva2VuU3RyZWFtCi0KLS8qCi0gKiBSZWFkVG9rZW4oKSAtIFJlYWQgdGhl
IG5leHQgdG9rZW4gZnJvbSBhIHN0cmVhbS4KLSAqCi0gKi8KLQotaW50IFJlYWRUb2tlbihUb2tl
blN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgY2hhciBzeW1ib2xf
bmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07Ci0gICAgY2hhciBzdHJpbmdfdmFsW01BWF9T
VFJJTkdfTEVOICsgMV07Ci0gICAgaW50IGx0b2tlbiwgbGVuOwotICAgIGNoYXIgY2g7Ci0gICAg
aW50IGJhc2UsIGFjY3VtOwotICAgIGNoYXIgY2hfdmFsOwotCi0gICAgbHRva2VuID0gbFJlYWRC
eXRlKHBUb2spOwotICAgIGlmIChsdG9rZW4gPj0gMCkgewotICAgICAgICBpZiAobHRva2VuID4g
MTI3KQotICAgICAgICAgICAgbHRva2VuICs9IDEyODsKLSAgICAgICAgc3dpdGNoIChsdG9rZW4p
IHsKLSAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBfVFlQRUlE
RU5USUZJRVI6Ci0gICAgICAgICAgICBsZW4gPSAwOwotICAgICAgICAgICAgY2ggPSBsUmVhZEJ5
dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKLSAgICAg
ICAgICAgICAgICAgICAgIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAotICAgICAgICAgICAg
ICAgICAgICAgY2ggPT0gJ18nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChs
ZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbF9u
YW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9r
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzeW1ib2xf
bmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAg
ICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5bWJv
bF9uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKLSAgICAgICAgICAgIGxlbiA9
IDA7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAwKQotICAg
ICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1RSSU5HX0xFTikKLSAgICAgICAgICAgICAgICAg
ICAgc3RyaW5nX3ZhbFtsZW4rK10gPSBjaDsKLSAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9
ICdcMCc7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCBzdHJpbmdfdmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQ
UF9GTE9BVENPTlNUQU5UOgotICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAgIGNoID0g
bFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0g
JzknKXx8KGNoPT0nZSd8fGNoPT0nRSd8fGNoPT0nLicpfHwoY2g9PScrJ3x8Y2g9PSctJykpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9M
RU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAg
ICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBw
LT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfZnZh
bD0oZmxvYXQpYXRvZl9kb3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKLSAgICAgICAgICAgIGxlbiA9IDA7
Ci0JICAgIGFjY3VtID0gMDsKLSAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAg
ICAgICAgICAgaWYgKGNoID09ICcwJykgewotICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bisrXSA9IGNoOwotICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAg
ICAgICAgICAgIGlmIChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBiYXNlID0g
MTY7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSA4OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IDEw
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAobGVuIDwgTUFYX1NZTUJPTF9O
QU1FX0xFTikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaF92YWwgPSAtMTsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNkaWdpdChjaCkpCi0gICAgICAgICAgICAgICAgICAgIGNoX3Zh
bCA9IGNoIC0gJzAnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzeGRpZ2l0KGNoKSkKLSAg
ICAgICAgICAgICAgICAgICAgY2hfdmFsID0gdG9sb3dlcihjaCkgLSAnYScgKyAxMDsKLQotICAg
ICAgICAgICAgICAgIGlmIChjaF92YWwgPCAwIHx8IGNoX3ZhbCA+PSBiYXNlKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9
IGNoOwotICAgICAgICAgICAgICAgIGFjY3VtID0gYWNjdW0gKiBiYXNlICsgY2hfdmFsOwotICAg
ICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICBhc3NlcnQoY2ggPT0g
J1wwJyk7Ci0gICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xf
bmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAnKCc6Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50
ID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGx0b2tlbjsKLSAgICB9Ci0gICAgcmV0dXJuIEVPRl9TWTsKLX0gLy8gUmVhZFRv
a2VuCi0KLXR5cGVkZWYgc3RydWN0IFRva2VuSW5wdXRTcmMgewotICAgIElucHV0U3JjICAgICAg
ICAgICAgYmFzZTsKLSAgICBUb2tlblN0cmVhbSAgICAgICAgICp0b2tlbnM7Ci0gICAgaW50ICAg
ICAgICAgICAgICAgICAoKmZpbmFsKShDUFBTdHJ1Y3QgKik7Ci19IFRva2VuSW5wdXRTcmM7Ci0K
LXN0YXRpYyBpbnQgc2Nhbl90b2tlbihUb2tlbklucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXls
dmFscHApCi17Ci0gICAgaW50IHRva2VuID0gUmVhZFRva2VuKGluLT50b2tlbnMsIHl5bHZhbHBw
KTsKLSAgICBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopOwotICAgIGNwcC0+dG9rZW5Mb2MtPmZp
bGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICBjcHAtPnRva2VuTG9jLT5saW5lID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Ci0gICAgaWYgKHRva2VuID09ICdcbicpIHsKLSAgICAg
ICAgaW4tPmJhc2UubGluZSsrOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotICAgIGlm
ICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5i
YXNlLnByZXY7Ci0gICAgZmluYWwgPSBpbi0+ZmluYWw7Ci0gICAgZnJlZShpbik7Ci0gICAgaWYg
KGZpbmFsICYmICFmaW5hbChjcHApKSByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci19Ci0KLWludCBSZWFk
RnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICp0cywgaW50IG5hbWUsIGludCAoKmZpbmFsKShD
UFBTdHJ1Y3QgKikpCi17Ci0gICAgVG9rZW5JbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKFRv
a2VuSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihUb2tlbklucHV0U3JjKSk7
Ci0gICAgaW4tPmJhc2UubmFtZSA9IG5hbWU7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3Vy
cmVudElucHV0OwotICAgIGluLT5iYXNlLnNjYW4gPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0
eXBlcHAgKikpc2Nhbl90b2tlbjsKLSAgICBpbi0+YmFzZS5saW5lID0gMTsKLSAgICBpbi0+dG9r
ZW5zID0gdHM7Ci0gICAgaW4tPmZpbmFsID0gZmluYWw7Ci0gICAgUmV3aW5kVG9rZW5TdHJlYW0o
dHMpOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVybiAxOwot
fQotCi10eXBlZGVmIHN0cnVjdCBVbmdvdFRva2VuIHsKLSAgICBJbnB1dFNyYyAgICBiYXNlOwot
ICAgIGludCAgICAgICAgIHRva2VuOwotICAgIHl5c3R5cGVwcCAgICAgbHZhbDsKLX0gVW5nb3RU
b2tlbjsKLQotc3RhdGljIGludCByZWdldF90b2tlbihVbmdvdFRva2VuICp0LCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4gPSB0LT50b2tlbjsKLSAgICAqeXlsdmFscHAg
PSB0LT5sdmFsOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gdC0+YmFzZS5wcmV2OwotICAgIGZy
ZWUodCk7Ci0gICAgcmV0dXJuIHRva2VuOwotfQotCi12b2lkIFVuZ2V0VG9rZW4oaW50IHRva2Vu
LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAgIFVuZ290VG9rZW4gKnQgPSBtYWxsb2Moc2l6
ZW9mKFVuZ290VG9rZW4pKTsKLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKFVuZ290VG9rZW4pKTsK
LSAgICB0LT50b2tlbiA9IHRva2VuOwotICAgIHQtPmx2YWwgPSAqeXlsdmFscHA7Ci0gICAgdC0+
YmFzZS5zY2FuID0gKHZvaWQgKilyZWdldF90b2tlbjsKLSAgICB0LT5iYXNlLnByZXYgPSBjcHAt
PmN1cnJlbnRJbnB1dDsKLSAgICB0LT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFt
ZTsKLSAgICB0LT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICBjcHAt
PmN1cnJlbnRJbnB1dCA9ICZ0LT5iYXNlOwotfQotCi0KLXZvaWQgRHVtcFRva2VuU3RyZWFtKEZJ
TEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAgICBpbnQg
dG9rZW47Ci0gICAgY2hhciBzdHJbMTAwXTsKLQotICAgIGlmIChmcCA9PSAwKSBmcCA9IHN0ZG91
dDsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShzKTsKLSAgICB3aGlsZSAoKHRva2VuID0gUmVhZFRv
a2VuKHMsIHl5bHZhbHBwKSkgPiAwKSB7Ci0gICAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
ICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6
Ci0gICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0
cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICAgICAgc25wcmludGYoc3RyLCBz
aXplb2Yoc3RyKSwgIlwiJXNcIiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2Nf
aWRlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNU
QU5UOgotICAgICAgICAgICAgLy9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19mdmFsKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKLSAgICAg
ICAgICAgIC8vcHJpbnRmKCIlZCAiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAg
ICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0
cmluZyhhdGFibGUsIHRva2VuKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9Ci19Ci0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHRva2Vucy5jIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
YmY0YTJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0v
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0
aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdh
cmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9y
IHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2Nl
cHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10
ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUg
dGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVz
ZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGlj
ZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBz
b2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2Rp
ZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0
IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQg
dGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1y
ZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhl
IGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRp
b25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtz
LCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklE
SUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJv
bSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8g
b3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVk
IGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRl
bnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtz
IG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1p
bmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBO
VklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lU
SE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT
UyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZ
LCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJB
VElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMu
Ci0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJ
TkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQot
T1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklC
VVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVS
IFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwg
U1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotLy8KLS8vIHRva2Vucy5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19UT0tFTlNfSCkK
LSNkZWZpbmUgX19UT0tFTlNfSCAxCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKLQotI2RlZmluZSBFT0ZfU1kgKC0xKQotCi10
eXBlZGVmIHN0cnVjdCBUb2tlbkJsb2NrX1JlYyBUb2tlbkJsb2NrOwotCi10eXBlZGVmIHN0cnVj
dCBUb2tlblN0cmVhbV9SZWMgewotICAgIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgKm5leHQ7Ci0g
ICAgY2hhciAqbmFtZTsKLSAgICBUb2tlbkJsb2NrICpoZWFkOwotICAgIFRva2VuQmxvY2sgKmN1
cnJlbnQ7Ci19IFRva2VuU3RyZWFtOwotCi1zdHJ1Y3QgVG9rZW5CbG9ja19SZWMgewotICAgIFRv
a2VuQmxvY2sgKm5leHQ7Ci0gICAgaW50IGN1cnJlbnQ7Ci0gICAgaW50IGNvdW50OwotICAgIGlu
dCBtYXg7Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLX07Ci0KLWV4dGVybiBUb2tlblN0cmVh
bSBzdGRsaWJfY3BwX3N0cmVhbTsKLQotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29u
c3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCk7Ci12b2lkIERlbGV0ZVRva2VuU3RyZWFt
KFRva2VuU3RyZWFtICpwVG9rKTsgCi12b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFtICpwVG9r
LCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLXZvaWQgUmV3aW5kVG9rZW5TdHJl
YW0oVG9rZW5TdHJlYW0gKnBUb2spOwotaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywg
eXlzdHlwZXBwICogeXlsdmFscHApOwotaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9rZW5TdHJl
YW0gKnBUb2ssIGludCBuYW1lLCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKTsKLXZvaWQgVW5n
ZXRUb2tlbihpbnQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLQotI2lmIGRlZmluZWQoQ1BQQ19F
TkFCTEVfVE9PTFMpCi0KLXZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKiwgVG9rZW5TdHJlYW0g
KiwgeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0jZW5kaWYgLy8gZGVmaW5lZChDUFBDX0VOQUJM
RV9UT09MUykKLQotI2VuZGlmIC8vICFkZWZpbmVkKF9fVE9LRU5TX0gpCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg5YmM4ZDguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9Db25maWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzk5ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbmZpZy5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6Q29u
ZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRoZSBmb3JtYXQsIHR5cGUKLS8vIGFuZCBzaXplIGZvciBh
biBlZ2w6OlN1cmZhY2UuIEltcGxlbWVudHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuCi0vLyBbRUdMIDEuNF0gc2VjdGlvbiAzLjQgcGFnZSAxNS4KLQotI2luY2x1ZGUgImxp
YkVHTC9Db25maWcuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx2ZWN0b3I+
Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQot
bmFtZXNwYWNlIGVnbAotewotQ29uZmlnOjpDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1v
ZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVydmFsLCBEM0RGT1JNQVQgcmVu
ZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVs
dGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdodCkKLSAgICA6IG1EaXNw
bGF5TW9kZShkaXNwbGF5TW9kZSksIG1SZW5kZXJUYXJnZXRGb3JtYXQocmVuZGVyVGFyZ2V0Rm9y
bWF0KSwgbURlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpLCBtTXVsdGlTYW1w
bGUobXVsdGlTYW1wbGUpCi17Ci0gICAgc2V0KGRpc3BsYXlNb2RlLCBtaW5JbnRlcnZhbCwgbWF4
SW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNh
bXBsZSwgdGV4V2lkdGgsIHRleEhlaWdodCk7Ci19Ci0KLXZvaWQgQ29uZmlnOjpzZXREZWZhdWx0
cygpCi17Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotICAgIG1SZWRTaXplID0gMDsKLSAgICBtR3Jl
ZW5TaXplID0gMDsKLSAgICBtQmx1ZVNpemUgPSAwOwotICAgIG1MdW1pbmFuY2VTaXplID0gMDsK
LSAgICBtQWxwaGFTaXplID0gMDsKLSAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7Ci0gICAgbUJpbmRU
b1RleHR1cmVSR0IgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1CaW5kVG9UZXh0dXJlUkdCQSA9IEVH
TF9ET05UX0NBUkU7Ci0gICAgbUNvbG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVSOwotICAg
IG1Db25maWdDYXZlYXQgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1Db25maWdJRCA9IEVHTF9ET05U
X0NBUkU7Ci0gICAgbUNvbmZvcm1hbnQgPSAwOwotICAgIG1EZXB0aFNpemUgPSAwOwotICAgIG1M
ZXZlbCA9IDA7Ci0gICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7Ci0gICAgbU1heFBC
dWZmZXJXaWR0aCA9IDA7Ci0gICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOwotICAgIG1NYXhQQnVm
ZmVyUGl4ZWxzID0gMDsKLSAgICBtTWF4U3dhcEludGVydmFsID0gRUdMX0RPTlRfQ0FSRTsKLSAg
ICBtTWluU3dhcEludGVydmFsID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtTmF0aXZlUmVuZGVyYWJs
ZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbU5hdGl2ZVZpc3VhbElEID0gMDsKLSAgICBtTmF0aXZl
VmlzdWFsVHlwZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbVJlbmRlcmFibGVUeXBlID0gRUdMX09Q
RU5HTF9FU19CSVQ7Ci0gICAgbVNhbXBsZUJ1ZmZlcnMgPSAwOwotICAgIG1TYW1wbGVzID0gMDsK
LSAgICBtU3RlbmNpbFNpemUgPSAwOwotICAgIG1TdXJmYWNlVHlwZSA9IEVHTF9XSU5ET1dfQklU
OwotICAgIG1UcmFuc3BhcmVudFR5cGUgPSBFR0xfTk9ORTsKLSAgICBtVHJhbnNwYXJlbnRSZWRW
YWx1ZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IEVHTF9E
T05UX0NBUkU7Ci0gICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKLX0K
LQotdm9pZCBDb25maWc6OnNldChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1p
bkludGVydmFsLCBFR0xpbnQgbWF4SW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3Jt
YXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdM
aW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KQotewotICAgIG1CaW5kVG9UZXh0dXJlUkdC
ID0gRUdMX0ZBTFNFOwotICAgIG1CaW5kVG9UZXh0dXJlUkdCQSA9IEVHTF9GQUxTRTsKLSAgICBz
d2l0Y2ggKHJlbmRlclRhcmdldEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKLSAgICAgICAgbVJlZFNpemUgPSA1Owot
ICAgICAgICBtR3JlZW5TaXplID0gNTsKLSAgICAgICAgbUJsdWVTaXplID0gNTsKLSAgICAgICAg
bUFscGhhU2l6ZSA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBH
MTBCMTA6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMzI7Ci0gICAgICAgIG1SZWRTaXplID0gMTA7
Ci0gICAgICAgIG1HcmVlblNpemUgPSAxMDsKLSAgICAgICAgbUJsdWVTaXplID0gMTA7Ci0gICAg
ICAgIG1BbHBoYVNpemUgPSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwotICAgICAgICBtUmVkU2l6ZSA9IDg7
Ci0gICAgICAgIG1HcmVlblNpemUgPSA4OwotICAgICAgICBtQmx1ZVNpemUgPSA4OwotICAgICAg
ICBtQWxwaGFTaXplID0gODsKLSAgICAgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIG1CdWZmZXJT
aXplID0gMTY7Ci0gICAgICAgIG1SZWRTaXplID0gNTsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDY7
Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDU7Ci0gICAgICAgIG1BbHBoYVNpemUgPSAwOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICBtQnVmZmVyU2l6
ZSA9IDMyOwotICAgICAgICBtUmVkU2l6ZSA9IDg7Ci0gICAgICAgIG1HcmVlblNpemUgPSA4Owot
ICAgICAgICBtQmx1ZVNpemUgPSA4OwotICAgICAgICBtQWxwaGFTaXplID0gMDsKLSAgICAgICAg
bUJpbmRUb1RleHR1cmVSR0IgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3RoZXIgZm9ybWF0cyBzaG91bGQgbm90IGJl
IHZhbGlkCi0gICAgfQotCi0gICAgbUx1bWluYW5jZVNpemUgPSAwOwotICAgIG1BbHBoYU1hc2tT
aXplID0gMDsKLSAgICBtQ29sb3JCdWZmZXJUeXBlID0gRUdMX1JHQl9CVUZGRVI7Ci0gICAgbUNv
bmZpZ0NhdmVhdCA9IChkaXNwbGF5TW9kZS5Gb3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9ybWF0KSA/
IEVHTF9OT05FIDogRUdMX1NMT1dfQ09ORklHOwotICAgIG1Db25maWdJRCA9IDA7Ci0gICAgbUNv
bmZvcm1hbnQgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7Ci0KLSAgICBzd2l0Y2ggKGRlcHRoU3RlbmNp
bEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICBtRGVw
dGhTaXplID0gMDsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0v
LyAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0vLyAgICAgIG1EZXB0aFNpemUgPSAxNjsK
LS8vICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLS8vICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQz
REZNVF9EMzI6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAzMjsKLSAgICAgICAgbVN0ZW5jaWxTaXpl
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAgICAgICAg
bURlcHRoU2l6ZSA9IDE1OwotICAgICAgICBtU3RlbmNpbFNpemUgPSAxOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICBtRGVwdGhTaXplID0gMjQ7Ci0g
ICAgICAgIG1TdGVuY2lsU2l6ZSA9IDg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RG
TVRfRDI0WDg6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAyNDsKLSAgICAgICAgbVN0ZW5jaWxTaXpl
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgotICAgICAg
ICBtRGVwdGhTaXplID0gMjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgICBtRGVwdGhTaXplID0gMTY7Ci0g
ICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotLy8gICAgY2FzZSBEM0RG
TVRfRDMyRl9MT0NLQUJMRToKLS8vICAgICAgbURlcHRoU2l6ZSA9IDMyOwotLy8gICAgICBtU3Rl
bmNpbFNpemUgPSAwOwotLy8gICAgICBicmVhazsKLS8vICAgIGNhc2UgRDNERk1UX0QyNEZTODoK
LS8vICAgICAgbURlcHRoU2l6ZSA9IDI0OwotLy8gICAgICBtU3RlbmNpbFNpemUgPSA4OwotLy8g
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgbUxldmVsID0gMDsKLSAgICBtTWF0Y2hOYXRpdmVQaXhtYXAgPSBFR0xfTk9ORTsK
LSAgICBtTWF4UEJ1ZmZlcldpZHRoID0gdGV4V2lkdGg7Ci0gICAgbU1heFBCdWZmZXJIZWlnaHQg
PSB0ZXhIZWlnaHQ7Ci0gICAgbU1heFBCdWZmZXJQaXhlbHMgPSB0ZXhXaWR0aCp0ZXhIZWlnaHQ7
Ci0gICAgbU1heFN3YXBJbnRlcnZhbCA9IG1heEludGVydmFsOwotICAgIG1NaW5Td2FwSW50ZXJ2
YWwgPSBtaW5JbnRlcnZhbDsKLSAgICBtTmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9GQUxTRTsKLSAg
ICBtTmF0aXZlVmlzdWFsSUQgPSAwOwotICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gMDsKLSAgICBt
UmVuZGVyYWJsZVR5cGUgPSBFR0xfT1BFTkdMX0VTMl9CSVQ7Ci0gICAgbVNhbXBsZUJ1ZmZlcnMg
PSBtdWx0aVNhbXBsZSA/IDEgOiAwOwotICAgIG1TYW1wbGVzID0gbXVsdGlTYW1wbGU7Ci0gICAg
bVN1cmZhY2VUeXBlID0gRUdMX1BCVUZGRVJfQklUIHwgRUdMX1dJTkRPV19CSVQgfCBFR0xfU1dB
UF9CRUhBVklPUl9QUkVTRVJWRURfQklUOwotICAgIG1UcmFuc3BhcmVudFR5cGUgPSBFR0xfTk9O
RTsKLSAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7Ci0gICAgbVRyYW5zcGFyZW50R3JlZW5W
YWx1ZSA9IDA7Ci0gICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gMDsKLX0KLQotRUdMQ29uZmln
IENvbmZpZzo6Z2V0SGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKEVHTENvbmZpZykoc2l6
ZV90KW1Db25maWdJRDsKLX0KLQotU29ydENvbmZpZzo6U29ydENvbmZpZyhjb25zdCBFR0xpbnQg
KmF0dHJpYkxpc3QpCi0gICAgOiBtV2FudFJlZChmYWxzZSksIG1XYW50R3JlZW4oZmFsc2UpLCBt
V2FudEJsdWUoZmFsc2UpLCBtV2FudEFscGhhKGZhbHNlKSwgbVdhbnRMdW1pbmFuY2UoZmFsc2Up
Ci17Ci0gICAgc2NhbkZvcldhbnRlZENvbXBvbmVudHMoYXR0cmliTGlzdCk7Ci19Ci0KLXZvaWQg
U29ydENvbmZpZzo6c2NhbkZvcldhbnRlZENvbXBvbmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJM
aXN0KQotewotICAgIC8vIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNAotICAgIC8vIFNvcnRp
bmcgcnVsZSAjMzogYnkgbGFyZ2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBub3QgY29u
c2lkZXJpbmcKLSAgICAvLyBjb21wb25lbnRzIHRoYXQgYXJlIDAgb3IgZG9uJ3QtY2FyZS4KLSAg
ICBmb3IgKGNvbnN0IEVHTGludCAqYXR0ciA9IGF0dHJpYkxpc3Q7IGF0dHJbMF0gIT0gRUdMX05P
TkU7IGF0dHIgKz0gMikKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyWzFdICE9IDAgJiYgYXR0clsx
XSAhPSBFR0xfRE9OVF9DQVJFKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dHJb
MF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAg
ICBtV2FudFJlZCA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9HUkVFTl9T
SVpFOiAgICAgbVdhbnRHcmVlbiA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVH
TF9CTFVFX1NJWkU6ICAgICAgbVdhbnRCbHVlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICBtV2FudEFscGhhID0gdHJ1ZTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiBtV2FudEx1bWluYW5jZSA9IHRydWU7
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1FR0xpbnQgU29y
dENvbmZpZzo6d2FudGVkQ29tcG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcpIGNvbnN0
Ci17Ci0gICAgRUdMaW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtV2FudFJlZCkgICAgICAgdG90
YWwgKz0gY29uZmlnLm1SZWRTaXplOwotICAgIGlmIChtV2FudEdyZWVuKSAgICAgdG90YWwgKz0g
Y29uZmlnLm1HcmVlblNpemU7Ci0gICAgaWYgKG1XYW50Qmx1ZSkgICAgICB0b3RhbCArPSBjb25m
aWcubUJsdWVTaXplOwotICAgIGlmIChtV2FudEFscGhhKSAgICAgdG90YWwgKz0gY29uZmlnLm1B
bHBoYVNpemU7Ci0gICAgaWYgKG1XYW50THVtaW5hbmNlKSB0b3RhbCArPSBjb25maWcubUx1bWlu
YW5jZVNpemU7Ci0KLSAgICByZXR1cm4gdG90YWw7Ci19Ci0KLWJvb2wgU29ydENvbmZpZzo6b3Bl
cmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0IENvbmZpZyAqeSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKCp0aGlzKSgqeCwgKnkpOwotfQotCi1ib29sIFNvcnRDb25maWc6Om9wZXJhdG9yKCko
Y29uc3QgQ29uZmlnICZ4LCBjb25zdCBDb25maWcgJnkpIGNvbnN0Ci17Ci0gICAgI2RlZmluZSBT
T1JUKGF0dHJpYnV0ZSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICh4LmF0
dHJpYnV0ZSAhPSB5LmF0dHJpYnV0ZSkgICAgICAgICAgICBcCi0gICAgICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXR1cm4geC5h
dHRyaWJ1dGUgPCB5LmF0dHJpYnV0ZTsgICAgICBcCi0gICAgICAgIH0KLQotICAgIE1FVEFfQVNT
RVJUKEVHTF9OT05FIDwgRUdMX1NMT1dfQ09ORklHICYmIEVHTF9TTE9XX0NPTkZJRyA8IEVHTF9O
T05fQ09ORk9STUFOVF9DT05GSUcpOwotICAgIFNPUlQobUNvbmZpZ0NhdmVhdCk7Ci0KLSAgICBN
RVRBX0FTU0VSVChFR0xfUkdCX0JVRkZFUiA8IEVHTF9MVU1JTkFOQ0VfQlVGRkVSKTsKLSAgICBT
T1JUKG1Db2xvckJ1ZmZlclR5cGUpOwotCi0gICAgLy8gQnkgbGFyZ2VyIHRvdGFsIG51bWJlciBv
ZiBjb2xvciBiaXRzLCBvbmx5IGNvbnNpZGVyaW5nIHRob3NlIHRoYXQgYXJlIHJlcXVlc3RlZCB0
byBiZSA+IDAuCi0gICAgRUdMaW50IHhDb21wb25lbnRzU2l6ZSA9IHdhbnRlZENvbXBvbmVudHNT
aXplKHgpOwotICAgIEVHTGludCB5Q29tcG9uZW50c1NpemUgPSB3YW50ZWRDb21wb25lbnRzU2l6
ZSh5KTsKLSAgICBpZiAoeENvbXBvbmVudHNTaXplICE9IHlDb21wb25lbnRzU2l6ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB4Q29tcG9uZW50c1NpemUgPiB5Q29tcG9uZW50c1NpemU7Ci0gICAg
fQotCi0gICAgU09SVChtQnVmZmVyU2l6ZSk7Ci0gICAgU09SVChtU2FtcGxlQnVmZmVycyk7Ci0g
ICAgU09SVChtU2FtcGxlcyk7Ci0gICAgU09SVChtRGVwdGhTaXplKTsKLSAgICBTT1JUKG1TdGVu
Y2lsU2l6ZSk7Ci0gICAgU09SVChtQWxwaGFNYXNrU2l6ZSk7Ci0gICAgU09SVChtTmF0aXZlVmlz
dWFsVHlwZSk7Ci0gICAgU09SVChtQ29uZmlnSUQpOwotCi0gICAgI3VuZGVmIFNPUlQKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotLy8gV2UnZCBsaWtlIHRvIHVzZSBTb3J0Q29uZmlnIHRvIGFs
c28gZWxpbWluYXRlIGR1cGxpY2F0ZSBjb25maWdzLgotLy8gVGhpcyB3b3JrcyBhcyBsb25nIGFz
IHdlIG5ldmVyIGhhdmUgdHdvIGNvbmZpZ3Mgd2l0aCBkaWZmZXJlbnQgcGVyLVJHQi1jb21wb25l
bnQgbGF5b3V0cywKLS8vIGJ1dCB0aGUgc2FtZSB0b3RhbC4KLS8vIDU1NTEgYW5kIDU2NSBhcmUg
ZGlmZmVyZW50IGJlY2F1c2UgUitHK0IgaXMgZGlmZmVyZW50LgotLy8gNTU1MSBhbmQgNTU1IGFy
ZSBkaWZmZXJlbnQgYmVjYXVzZSBidWZmZXJTaXplIGlzIGRpZmZlcmVudC4KLWNvbnN0IEVHTGlu
dCBDb25maWdTZXQ6Om1Tb3J0QXR0cmlic1tdID0KLXsKLSAgICBFR0xfUkVEX1NJWkUsIDEsCi0g
ICAgRUdMX0dSRUVOX1NJWkUsIDEsCi0gICAgRUdMX0JMVUVfU0laRSwgMSwKLSAgICBFR0xfTFVN
SU5BTkNFX1NJWkUsIDEsCi0gICAgLy8gQlVUIE5PVCBBTFBIQQotICAgIEVHTF9OT05FCi19Owot
Ci1Db25maWdTZXQ6OkNvbmZpZ1NldCgpCi0gICAgOiBtU2V0KFNvcnRDb25maWcobVNvcnRBdHRy
aWJzKSkKLXsKLX0KLQotdm9pZCBDb25maWdTZXQ6OmFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5
TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNE
Rk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwg
RUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWlnaHQpCi17
Ci0gICAgQ29uZmlnIGNvbmZpZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBtYXhTd2Fw
SW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNh
bXBsZSwgdGV4V2lkdGgsIHRleEhlaWdodCk7Ci0KLSAgICBtU2V0Lmluc2VydChjb25maWcpOwot
fQotCi1zaXplX3QgQ29uZmlnU2V0OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNldC5z
aXplKCk7Ci19Ci0KLWJvb2wgQ29uZmlnU2V0OjpnZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmln
cywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpu
dW1Db25maWcpCi17Ci0gICAgdmVjdG9yPGNvbnN0IENvbmZpZyo+IHBhc3NlZDsKLSAgICBwYXNz
ZWQucmVzZXJ2ZShtU2V0LnNpemUoKSk7Ci0KLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1T
ZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsKLSAgICAg
ICAgYm9vbCBtYXRjaCA9IHRydWU7Ci0gICAgICAgIGNvbnN0IEVHTGludCAqYXR0cmlidXRlID0g
YXR0cmliTGlzdDsKLQotICAgICAgICB3aGlsZSAoYXR0cmlidXRlWzBdICE9IEVHTF9OT05FKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVswXSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1CdWZmZXJTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6
ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUJsdWVTaXplID49IGF0dHJpYnV0ZVsx
XTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xf
R1JFRU5fU0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1HcmVlblNpemUgPj0g
YXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tUmVk
U2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU1RFTkNJTF9TSVpFOiAgICAgICAgICAgICAg
bWF0Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAg
ICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29uZmlnQ2F2ZWF0ID09IChFR0xlbnVtKSBhdHRy
aWJ1dGVbMV07ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9DT05GSUdf
SUQ6ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNvbmZpZ0lEID09IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
R0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MZXZlbCA+PSBh
dHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5t
TmF0aXZlUmVuZGVyYWJsZSA9PSAoRUdMQm9vbGVhbikgYXR0cmlidXRlWzFdOyAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICBtYXRjaCA9
IGNvbmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU0FNUExFUzogICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1NBTVBMRV9CVUZGRVJT
OiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxlQnVmZmVycyA+PSBhdHRyaWJ1dGVb
MV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9TVVJG
QUNFX1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1TdXJmYWNlVHlwZSAmIGF0
dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3Bh
cmVudFR5cGUgPT0gKEVHTGVudW0pIGF0dHJpYnV0ZVsxXTsgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgIG1hdGNoID0gY29uZmln
LT5tVHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTogICBtYXRj
aCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVF
OiAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFJlZFZhbHVlID09IGF0dHJpYnV0ZVsx
XTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVY
VFVSRV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmlnLT5tQmluZFRvVGV4dHVyZVJHQiA9PSAoRUdM
Qm9vbGVhbikgYXR0cmlidXRlWzFdOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9C
SU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRjaCA9IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVS
R0JBID09IChFR0xCb29sZWFuKSBhdHRyaWJ1dGVbMV07ICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NaW5T
d2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFMOiAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tTWF4U3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAgICAgICBt
YXRjaCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfTUFTS19TSVpFOiAg
ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBoYU1hc2tTaXplID49IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTE9SX0JV
RkZFUl9UWVBFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29sb3JCdWZmZXJUeXBlID09IChF
R0xlbnVtKSBhdHRyaWJ1dGVbMV07ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVH
TF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1SZW5kZXJhYmxl
VHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAgbWF0Y2ggPSBmYWxzZTsgVU5J
TVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgIG1hdGNoID0g
KGNvbmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9XSURUSDogICAgICAg
ICBtYXRjaCA9IGNvbmZpZy0+bU1heFBCdWZmZXJXaWR0aCA+PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTUFYX1BCVUZGRVJfSEVJ
R0hUOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NYXhQQnVmZmVySGVpZ2h0ID49IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9Q
QlVGRkVSX1BJWEVMUzogICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4UEJ1ZmZlclBpeGVscyA+
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCFtYXRjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobWF0Y2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhc3NlZC5w
dXNoX2JhY2soJipjb25maWcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbmZpZ3Mp
Ci0gICAgewotICAgICAgICBzb3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCksIFNvcnRD
b25maWcoYXR0cmliTGlzdCkpOwotCi0gICAgICAgIEVHTGludCBpbmRleDsKLSAgICAgICAgZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PEVH
TGludD4ocGFzc2VkLnNpemUoKSk7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bmZpZ3NbaW5kZXhdID0gcGFzc2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAqbnVtQ29uZmlnID0gaW5kZXg7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgICpudW1Db25maWcgPSBwYXNzZWQuc2l6ZSgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1jb25zdCBlZ2w6OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmlnIGNvbmZp
Z0hhbmRsZSkKLXsKLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29u
ZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZy0+
Z2V0SGFuZGxlKCkgPT0gY29uZmlnSGFuZGxlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gJigqY29uZmlnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NjI2ZWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOCAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBDb25maWcuaDogRGVmaW5lcyB0aGUgZWds
OjpDb25maWcgY2xhc3MsIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCwgdHlwZQotLy8gYW5kIHNpemUg
Zm9yIGFuIGVnbDo6U3VyZmFjZS4gSW1wbGVtZW50cyBFR0xDb25maWcgYW5kIHJlbGF0ZWQgZnVu
Y3Rpb25hbGl0eS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDMuNCBwYWdlIDE1LgotCi0jaWZuZGVm
IElOQ0xVREVfQ09ORklHX0hfCi0jZGVmaW5lIElOQ0xVREVfQ09ORklHX0hfCi0KLSNkZWZpbmUg
RUdMQVBJCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1
ZGUgPHNldD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBl
Z2wKLXsKLWNsYXNzIERpc3BsYXk7Ci0KLWNsYXNzIENvbmZpZwotewotICBwdWJsaWM6Ci0gICAg
Q29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFs
LCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBE
M0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0
ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdodCk7Ci0KLSAgICB2b2lkIHNldERlZmF1bHRzKCk7Ci0g
ICAgdm9pZCBzZXQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50
ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3Jt
YXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdM
aW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KTsKLSAgICBFR0xDb25maWcgZ2V0SGFuZGxl
KCkgY29uc3Q7Ci0KLSAgICBjb25zdCBEM0RESVNQTEFZTU9ERSBtRGlzcGxheU1vZGU7Ci0gICAg
Y29uc3QgRDNERk9STUFUIG1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgY29uc3QgRDNERk9STUFU
IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgY29uc3QgRUdMaW50IG1NdWx0aVNhbXBsZTsKLQot
ICAgIEVHTGludCBtQnVmZmVyU2l6ZTsgICAgICAgICAgICAgIC8vIERlcHRoIG9mIHRoZSBjb2xv
ciBidWZmZXIKLSAgICBFR0xpbnQgbVJlZFNpemU7ICAgICAgICAgICAgICAgICAvLyBCaXRzIG9m
IFJlZCBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1HcmVlblNpemU7ICAgICAgICAg
ICAgICAgLy8gQml0cyBvZiBHcmVlbiBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1C
bHVlU2l6ZTsgICAgICAgICAgICAgICAgLy8gQml0cyBvZiBCbHVlIGluIHRoZSBjb2xvciBidWZm
ZXIKLSAgICBFR0xpbnQgbUx1bWluYW5jZVNpemU7ICAgICAgICAgICAvLyBCaXRzIG9mIEx1bWlu
YW5jZSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1BbHBoYVNpemU7ICAgICAgICAg
ICAgICAgLy8gQml0cyBvZiBBbHBoYSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1B
bHBoYU1hc2tTaXplOyAgICAgICAgICAgLy8gQml0cyBvZiBBbHBoYSBNYXNrIGluIHRoZSBtYXNr
IGJ1ZmZlcgotICAgIEVHTEJvb2xlYW4gbUJpbmRUb1RleHR1cmVSR0I7ICAgIC8vIFRydWUgaWYg
YmluZGFibGUgdG8gUkdCIHRleHR1cmVzLgotICAgIEVHTEJvb2xlYW4gbUJpbmRUb1RleHR1cmVS
R0JBOyAgIC8vIFRydWUgaWYgYmluZGFibGUgdG8gUkdCQSB0ZXh0dXJlcy4KLSAgICBFR0xlbnVt
IG1Db2xvckJ1ZmZlclR5cGU7ICAgICAgICAvLyBDb2xvciBidWZmZXIgdHlwZQotICAgIEVHTGVu
dW0gbUNvbmZpZ0NhdmVhdDsgICAgICAgICAgIC8vIEFueSBjYXZlYXRzIGZvciB0aGUgY29uZmln
dXJhdGlvbgotICAgIEVHTGludCBtQ29uZmlnSUQ7ICAgICAgICAgICAgICAgIC8vIFVuaXF1ZSBF
R0xDb25maWcgaWRlbnRpZmllcgotICAgIEVHTGludCBtQ29uZm9ybWFudDsgICAgICAgICAgICAg
IC8vIFdoZXRoZXIgY29udGV4dHMgY3JlYXRlZCB3aXRoIHRoaXMgY29uZmlnIGFyZSBjb25mb3Jt
YW50Ci0gICAgRUdMaW50IG1EZXB0aFNpemU7ICAgICAgICAgICAgICAgLy8gQml0cyBvZiBaIGlu
IHRoZSBkZXB0aCBidWZmZXIKLSAgICBFR0xpbnQgbUxldmVsOyAgICAgICAgICAgICAgICAgICAv
LyBGcmFtZSBidWZmZXIgbGV2ZWwKLSAgICBFR0xCb29sZWFuIG1NYXRjaE5hdGl2ZVBpeG1hcDsg
ICAvLyBNYXRjaCB0aGUgbmF0aXZlIHBpeG1hcCBmb3JtYXQKLSAgICBFR0xpbnQgbU1heFBCdWZm
ZXJXaWR0aDsgICAgICAgICAvLyBNYXhpbXVtIHdpZHRoIG9mIHBidWZmZXIKLSAgICBFR0xpbnQg
bU1heFBCdWZmZXJIZWlnaHQ7ICAgICAgICAvLyBNYXhpbXVtIGhlaWdodCBvZiBwYnVmZmVyCi0g
ICAgRUdMaW50IG1NYXhQQnVmZmVyUGl4ZWxzOyAgICAgICAgLy8gTWF4aW11bSBzaXplIG9mIHBi
dWZmZXIKLSAgICBFR0xpbnQgbU1heFN3YXBJbnRlcnZhbDsgICAgICAgICAvLyBNYXhpbXVtIHN3
YXAgaW50ZXJ2YWwKLSAgICBFR0xpbnQgbU1pblN3YXBJbnRlcnZhbDsgICAgICAgICAvLyBNaW5p
bXVtIHN3YXAgaW50ZXJ2YWwKLSAgICBFR0xCb29sZWFuIG1OYXRpdmVSZW5kZXJhYmxlOyAgICAv
LyBFR0xfVFJVRSBpZiBuYXRpdmUgcmVuZGVyaW5nIEFQSXMgY2FuIHJlbmRlciB0byBzdXJmYWNl
Ci0gICAgRUdMaW50IG1OYXRpdmVWaXN1YWxJRDsgICAgICAgICAgLy8gSGFuZGxlIG9mIGNvcnJl
c3BvbmRpbmcgbmF0aXZlIHZpc3VhbAotICAgIEVHTGludCBtTmF0aXZlVmlzdWFsVHlwZTsgICAg
ICAgIC8vIE5hdGl2ZSB2aXN1YWwgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2aXN1YWwKLSAgICBF
R0xpbnQgbVJlbmRlcmFibGVUeXBlOyAgICAgICAgICAvLyBXaGljaCBjbGllbnQgcmVuZGVyaW5n
IEFQSXMgYXJlIHN1cHBvcnRlZC4KLSAgICBFR0xpbnQgbVNhbXBsZUJ1ZmZlcnM7ICAgICAgICAg
ICAvLyBOdW1iZXIgb2YgbXVsdGlzYW1wbGUgYnVmZmVycwotICAgIEVHTGludCBtU2FtcGxlczsg
ICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBzYW1wbGVzIHBlciBwaXhlbAotICAgIEVHTGlu
dCBtU3RlbmNpbFNpemU7ICAgICAgICAgICAgIC8vIEJpdHMgb2YgU3RlbmNpbCBpbiB0aGUgc3Rl
bmNpbCBidWZmZXIKLSAgICBFR0xpbnQgbVN1cmZhY2VUeXBlOyAgICAgICAgICAgICAvLyBXaGlj
aCB0eXBlcyBvZiBFR0wgc3VyZmFjZXMgYXJlIHN1cHBvcnRlZC4KLSAgICBFR0xlbnVtIG1UcmFu
c3BhcmVudFR5cGU7ICAgICAgICAvLyBUeXBlIG9mIHRyYW5zcGFyZW5jeSBzdXBwb3J0ZWQKLSAg
ICBFR0xpbnQgbVRyYW5zcGFyZW50UmVkVmFsdWU7ICAgICAvLyBUcmFuc3BhcmVudCByZWQgdmFs
dWUKLSAgICBFR0xpbnQgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZTsgICAvLyBUcmFuc3BhcmVudCBn
cmVlbiB2YWx1ZQotICAgIEVHTGludCBtVHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgIC8vIFRyYW5z
cGFyZW50IGJsdWUgdmFsdWUKLX07Ci0KLS8vIEZ1bmN0aW9uIG9iamVjdCB1c2VkIGJ5IFNUTCBz
b3J0aW5nIHJvdXRpbmVzIGZvciBvcmRlcmluZyBDb25maWdzIGFjY29yZGluZyB0byBbRUdMXSBz
ZWN0aW9uIDMuNC4xIHBhZ2UgMjQuCi1jbGFzcyBTb3J0Q29uZmlnCi17Ci0gIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBTb3J0Q29uZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0KLSAgICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICp4LCBjb25zdCBDb25maWcgKnkpIGNvbnN0Owot
ICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAmeSkgY29u
c3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICB2b2lkIHNjYW5Gb3JXYW50ZWRDb21wb25lbnRzKGNvbnN0
IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMaW50IHdhbnRlZENvbXBvbmVudHNTaXplKGNv
bnN0IENvbmZpZyAmY29uZmlnKSBjb25zdDsKLQotICAgIGJvb2wgbVdhbnRSZWQ7Ci0gICAgYm9v
bCBtV2FudEdyZWVuOwotICAgIGJvb2wgbVdhbnRCbHVlOwotICAgIGJvb2wgbVdhbnRBbHBoYTsK
LSAgICBib29sIG1XYW50THVtaW5hbmNlOwotfTsKLQotY2xhc3MgQ29uZmlnU2V0Ci17Ci0gICAg
ZnJpZW5kIERpc3BsYXk7Ci0KLSAgcHVibGljOgotICAgIENvbmZpZ1NldCgpOwotCi0gICAgdm9p
ZCBhZGQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWws
IEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQz
REZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdMaW50IHRl
eFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAg
IGJvb2wgZ2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmli
TGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKTsKLSAgICBjb25zdCBl
Z2w6OkNvbmZpZyAqZ2V0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmZpZ1NldCk7Ci0KLSAgICB0eXBlZGVmIHN0
ZDo6c2V0PENvbmZpZywgU29ydENvbmZpZz4gU2V0OwotICAgIHR5cGVkZWYgU2V0OjppdGVyYXRv
ciBJdGVyYXRvcjsKLSAgICBTZXQgbVNldDsKLQotICAgIHN0YXRpYyBjb25zdCBFR0xpbnQgbVNv
cnRBdHRyaWJzW107Ci19OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0NPTkZJR19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYzBiOTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEy
NTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRGlzcGxheS5jcHA6IEltcGxlbWVu
dHMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFjdAotLy8g
ZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdMRGlzcGxh
eS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KLQotI2luY2x1ZGUgImxpYkVH
TC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWFwPgotI2lu
Y2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQot
I2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0KLS8vIENhbiBhbHNvIGJlIGVuYWJsZWQgYnkgZGVm
aW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2plY3QncyBwcmVkZWZpbmVkIG1hY3Jvcwot
I2RlZmluZSBSRUZfUkFTVCAwCi0KLS8vIFRoZSAiRGVidWcgVGhpcyBQaXhlbC4uLiIgZmVhdHVy
ZSBpbiBQSVggb2Z0ZW4gZmFpbHMgd2hlbiB1c2luZyB0aGUKLS8vIEQzRDlFeCBpbnRlcmZhY2Vz
LiAgSW4gb3JkZXIgdG8gZ2V0IGRlYnVnIHBpeGVsIHRvIHdvcmsgb24gYSBWaXN0YS9XaW4gNwot
Ly8gbWFjaGluZSwgZGVmaW5lICJBTkdMRV9FTkFCTEVfRDNEOUVYPTAiIGluIHlvdXIgcHJvamVj
dCBmaWxlLgotI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgpCi0vLyBFbmFibGVzIHVz
ZSBvZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwgd2hlbiBhdmFpbGFibGUKLSNkZWZpbmUg
QU5HTEVfRU5BQkxFX0QzRDlFWCAxCi0jZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5BQkxFX0Qz
RDlFWCkKLQotbmFtZXNwYWNlIGVnbAotewotbmFtZXNwYWNlCi17Ci0gICAgdHlwZWRlZiBzdGQ6
Om1hcDxFR0xOYXRpdmVEaXNwbGF5VHlwZSwgRGlzcGxheSo+IERpc3BsYXlNYXA7IAotICAgIERp
c3BsYXlNYXAgZGlzcGxheXM7Ci19Ci0KLWVnbDo6RGlzcGxheSAqRGlzcGxheTo6Z2V0RGlzcGxh
eShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5SWQpCi17Ci0gICAgaWYgKGRpc3BsYXlzLmZp
bmQoZGlzcGxheUlkKSAhPSBkaXNwbGF5cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBk
aXNwbGF5c1tkaXNwbGF5SWRdOwotICAgIH0KLQotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9
IE5VTEw7Ci0KLSAgICBpZiAoZGlzcGxheUlkID09IEVHTF9ERUZBVUxUX0RJU1BMQVkpCi0gICAg
ewotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6RGlzcGxheShkaXNwbGF5SWQsIChIREMpTlVM
TCwgZmFsc2UpOwotICAgIH0KLSAgICBlbHNlIGlmIChkaXNwbGF5SWQgPT0gRUdMX1NPRlRXQVJF
X0RJU1BMQVlfQU5HTEUpCi0gICAgewotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6RGlzcGxh
eShkaXNwbGF5SWQsIChIREMpTlVMTCwgdHJ1ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBDaGVjayBpZiBkaXNwbGF5SWQgaXMgYSB2YWxpZCBkaXNwbGF5IGRl
dmljZSBjb250ZXh0Ci0KLSAgICAgICAgZGlzcGxheSA9IG5ldyBlZ2w6OkRpc3BsYXkoZGlzcGxh
eUlkLCAoSERDKWRpc3BsYXlJZCwgZmFsc2UpOwotICAgIH0KLQotICAgIGRpc3BsYXlzW2Rpc3Bs
YXlJZF0gPSBkaXNwbGF5OwotICAgIHJldHVybiBkaXNwbGF5OwotfQotCi1EaXNwbGF5OjpEaXNw
bGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCwgSERDIGRldmljZUNvbnRleHQsIGJv
b2wgc29mdHdhcmUpIDogbURjKGRldmljZUNvbnRleHQpCi17Ci0gICAgbUQzZDlNb2R1bGUgPSBO
VUxMOwotICAgIAotICAgIG1EM2Q5ID0gTlVMTDsKLSAgICBtRDNkOUV4ID0gTlVMTDsKLSAgICBt
RGV2aWNlID0gTlVMTDsKLSAgICBtRGV2aWNlRXggPSBOVUxMOwotICAgIG1EZXZpY2VXaW5kb3cg
PSBOVUxMOwotCi0gICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7Ci0KLSAgICAjaWYg
UkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAgICAgICBtRGV2aWNl
VHlwZSA9IEQzRERFVlRZUEVfUkVGOwotICAgICNlbHNlCi0gICAgICAgIG1EZXZpY2VUeXBlID0g
RDNEREVWVFlQRV9IQUw7Ci0gICAgI2VuZGlmCi0KLSAgICBtTWluU3dhcEludGVydmFsID0gMTsK
LSAgICBtTWF4U3dhcEludGVydmFsID0gMTsKLSAgICBtU29mdHdhcmVEZXZpY2UgPSBzb2Z0d2Fy
ZTsKLSAgICBtRGlzcGxheUlkID0gZGlzcGxheUlkOwotICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7
Ci19Ci0KLURpc3BsYXk6On5EaXNwbGF5KCkKLXsKLSAgICB0ZXJtaW5hdGUoKTsKLQotICAgIERp
c3BsYXlNYXA6Oml0ZXJhdG9yIHRoaXNEaXNwbGF5ID0gZGlzcGxheXMuZmluZChtRGlzcGxheUlk
KTsKLQotICAgIGlmICh0aGlzRGlzcGxheSAhPSBkaXNwbGF5cy5lbmQoKSkKLSAgICB7Ci0gICAg
ICBkaXNwbGF5cy5lcmFzZSh0aGlzRGlzcGxheSk7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6
OmluaXRpYWxpemUoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQotICAgIHsK
LSAgICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hhZGVyX2Qz
ZDkuZGxsIikpOwotICAgIH0gCi0gICAgZWxzZQotICAgIHsKLSAgICAgIG1EM2Q5TW9kdWxlID0g
R2V0TW9kdWxlSGFuZGxlKFRFWFQoImQzZDkuZGxsIikpOwotICAgIH0KLSAgICBpZiAobUQzZDlN
b2R1bGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRpcmVjdDNE
Q3JlYXRlOUV4RnVuYykoVUlOVCwgSURpcmVjdDNEOUV4KiopOwotICAgIERpcmVjdDNEQ3JlYXRl
OUV4RnVuYyBEaXJlY3QzRENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RD
cmVhdGU5RXhGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRl
OUV4IikpOwotCi0gICAgLy8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1vbmcgb3Ro
ZXIgdGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVzcwotICAgIC8vIGluY2xpbmVkIHRvIHJlcG9y
dCBhIGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcwotICAg
IC8vIGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZpc3RhIGFu
ZCBsYXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCi0gICAgaWYgKEFOR0xF
X0VOQUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVj
dDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgpKSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtRDNkOUV4KTsKLSAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKLSAgICAgICAg
QVNTRVJUKG1EM2Q5KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUQzZDkgPSBE
aXJlY3QzRENyZWF0ZTkoRDNEX1NES19WRVJTSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDkp
Ci0gICAgewotICAgICAgICBpZiAobURjICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgLy8g
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoaWNoIGFkYXB0ZXIgaW5k
ZXggdGhlIGRldmljZSBjb250ZXh0IGNvcnJlc3BvbmRzIHRvCi0gICAgICAgIH0KLQotICAgICAg
ICBIUkVTVUxUIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIC8vIEdpdmUgdXAgb24gZ2V0dGlu
ZyBkZXZpY2UgY2FwcyBhZnRlciBhYm91dCBvbmUgc2Vjb25kLgotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDEwOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5
LT5HZXREZXZpY2VDYXBzKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBzKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAocmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29tZSB0aW1l
IHRvIGluaXRpYWxpemUvcmVjb3ZlcgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoRkFJTEVEKHJlc3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVfT1VUT0ZN
RU1PUlksIEQzREVSUl9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNhbid0IHJl
Y292ZXIgZnJvbQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRlcm1pbmF0ZSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFk
ZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKLSAgICAgICAgewotICAgICAgICAgICAg
dGVybWluYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpF
RCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBEaXJlY3RYOSBpcyBydW5u
aW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0Y2hSZWN0IGZyb20gYSBy
ZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgaXMgbm90IHN1cHBvcnRl
ZC4KLSAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1Jl
bmRlclRhcmdldC4KLSAgICAgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQzRERFVkNB
UFMyX0NBTl9TVFJFVENIUkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0ZXJtaW5hdGUoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lO
SVRJQUxJWkVELCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtTWluU3dhcEludGVydmFs
ID0gNDsKLSAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7Ci0KLSAgICAgICAgaWYgKG1EZXZp
Y2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJ
QVRFKSB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDApOyBt
TWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7fQotICAgICAg
ICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRF
UlZBTF9PTkUpICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRl
cnZhbCwgMSk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAx
KTt9Ci0gICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQ
UkVTRU5UX0lOVEVSVkFMX1RXTykgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbiht
TWluU3dhcEludGVydmFsLCAyKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2Fw
SW50ZXJ2YWwsIDIpO30KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVy
dmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUpICAgICB7bU1pblN3YXBJbnRlcnZhbCA9
IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjpt
YXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQotICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2Vu
dGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAgICAgIHttTWluU3dh
cEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7IG1NYXhTd2FwSW50ZXJ2
YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTt9Ci0KLSAgICAgICAgbUQzZDktPkdl
dEFkYXB0ZXJJZGVudGlmaWVyKG1BZGFwdGVyLCAwLCAmbUFkYXB0ZXJJZGVudGlmaWVyKTsKLQot
ICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KLSAgICAgICAg
ewotICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAotICAgICAgICAvLyAgRDNERk1UX0EyUjEw
RzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4
ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5n
IHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCi0gICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0g
ICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAvLyAgRDNERk1UX1gxUjVHNUI1LCAg
ICAgIC8vIEhhcyBubyBjb21wYXRpYmxlIE9wZW5HTCBFUyByZW5kZXJidWZmZXIgZm9ybWF0Ci0g
ICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICAgICAgfTsKLQotICAgICAgICBjb25zdCBE
M0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KLSAgICAgICAgewotICAgICAgICAgICAg
RDNERk1UX1VOS05PV04sCi0gICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxFLAotICAgICAg
ICAgICAgRDNERk1UX0QzMiwKLSAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKLSAgICAgICAgICAg
IEQzREZNVF9EMjRTOCwKLSAgICAgICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAgICAgLy8gIEQz
REZNVF9EMjRYNFM0LAotICAgICAgICAgICAgRDNERk1UX0QxNiwKLSAgICAgICAgLy8gIEQzREZN
VF9EMzJGX0xPQ0tBQkxFLAotICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAotICAgICAgICB9Owot
Ci0gICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICAgICAgbUQz
ZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7
Ci0KLSAgICAgICAgQ29uZmlnU2V0IGNvbmZpZ1NldDsKLQotICAgICAgICBmb3IgKGludCBmb3Jt
YXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgc2l6ZW9mKHJlbmRlclRhcmdldEZvcm1hdHMpIC8g
c2l6ZW9mKEQzREZPUk1BVCk7IGZvcm1hdEluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1h
dEluZGV4XTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZv
cm1hdCk7Ci0KLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRo
U3RlbmNpbEluZGV4IDwgc2l6ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZP
Uk1BVCk7IGRlcHRoU3RlbmNpbEluZGV4KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVuY2lsRm9y
bWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gRDNEX09LOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZv
cm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
U1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2ls
Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2Ft
cGxpbmcKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NldC5hZGQoY3VycmVu
dERpc3BsYXlNb2RlLCBtTWluU3dhcEludGVydmFsLCBtTWF4U3dhcEludGVydmFsLCByZW5kZXJU
YXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aCwgbURldmlj
ZUNhcHMuTWF4VGV4dHVyZUhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1ZSBJRCBh
bmQgc3RvcmUgdGhlbSBpbnRlcm5hbGx5Ci0gICAgICAgIEVHTGludCBpbmRleCA9IDE7Ci0gICAg
ICAgIGZvciAoQ29uZmlnU2V0OjpJdGVyYXRvciBjb25maWcgPSBjb25maWdTZXQubVNldC5iZWdp
bigpOyBjb25maWcgIT0gY29uZmlnU2V0Lm1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDb25maWcgY29uZmlndXJhdGlvbiA9ICpjb25maWc7Ci0gICAgICAgICAg
ICBjb25maWd1cmF0aW9uLm1Db25maWdJRCA9IGluZGV4OwotICAgICAgICAgICAgaW5kZXgrKzsK
LQotICAgICAgICAgICAgbUNvbmZpZ1NldC5tU2V0Lmluc2VydChjb25maWd1cmF0aW9uKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgIHsKLSAgICAg
ICAgdGVybWluYXRlKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlu
aXRFeHRlbnNpb25TdHJpbmcoKTsKLQotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1l
W10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOwotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBj
bGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOwotCi0gICAgbURldmljZVdpbmRvdyA9IENyZWF0
ZVdpbmRvd0V4KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgV1NfRElT
QUJMRUQgfCBXU19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBHZXRNb2R1
bGVIYW5kbGUoTlVMTCksIE5VTEwpOwotCi0gICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICB7
Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKLXsKLSAgICB3
aGlsZSAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZXN0cm95U3VyZmFj
ZSgqbVN1cmZhY2VTZXQuYmVnaW4oKSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtQ29udGV4dFNl
dC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVzdHJveUNvbnRleHQoKm1Db250ZXh0U2V0LmJl
Z2luKCkpOwotICAgIH0KLQotICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCi0g
ICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGlmIChtRGV2aWNlKQot
ICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIGRldmljZSBpcyBsb3N0LCByZXNldCBpdCBmaXJzdCB0
byBwcmV2ZW50IGxlYXZpbmcgdGhlIGRyaXZlciBpbiBhbiB1bnN0YWJsZSBzdGF0ZQotICAgICAg
ICBpZiAodGVzdERldmljZUxvc3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzZXREZXZp
Y2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKLSAgICAgICAg
bURldmljZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2VFeC0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlRXggPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtRDNkOSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1EM2Q5ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZVdpbmRvdykKLSAg
ICB7Ci0gICAgICAgIERlc3Ryb3lXaW5kb3cobURldmljZVdpbmRvdyk7Ci0gICAgICAgIG1EZXZp
Y2VXaW5kb3cgPSBOVUxMOwotICAgIH0KLSAgICAKLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0g
ICAgICAgIG1EM2Q5RXgtPlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDlFeCA9IE5VTEw7Ci0gICAg
fQotCi0gICAgaWYgKG1EM2Q5TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBO
VUxMOwotICAgIH0KLX0KLQotdm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKLXsKLSAgICBpZiAo
IW1TY2VuZVN0YXJ0ZWQpCi0gICAgewotICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkJl
Z2luU2NlbmUoKTsKLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKSB7Ci0gICAgICAgICAg
ICAvLyBUaGlzIGlzIGRlZmVuc2l2ZSBjaGVja2luZyBhZ2FpbnN0IHRoZSBkZXZpY2UgYmVpbmcK
LSAgICAgICAgICAgIC8vIGxvc3QgYXQgdW5leHBlY3RlZCB0aW1lcy4KLSAgICAgICAgICAgIG1T
Y2VuZVN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIERpc3BsYXk6
OmVuZFNjZW5lKCkKLXsKLSAgICBpZiAobVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAgICAgIC8v
IEVuZFNjZW5lIGNhbiBmYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIGxvc3QsIGZvciBleGFtcGxlIGR1
ZQotICAgICAgICAvLyB0byBhIFREUiBkdXJpbmcgYSBkcmF3IGNhbGwuCi0gICAgICAgIG1EZXZp
Y2UtPkVuZFNjZW5lKCk7Ci0gICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgRGlzcGxheTo6Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVH
TGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQot
ewotICAgIHJldHVybiBtQ29uZmlnU2V0LmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliTGlzdCwg
Y29uZmlnU2l6ZSwgbnVtQ29uZmlnKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRDb25maWdBdHRy
aWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKLXsK
LSAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNv
bmZpZyk7Ci0KLSAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKLSAgICB7Ci0gICAgICBjYXNlIEVHTF9C
VUZGRVJfU0laRTogICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQnVmZmVy
U2l6ZTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAg
ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFTaXplOyAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tQmx1ZVNpemU7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tR3JlZW5TaXplOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9SRURf
U0laRTogICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVkU2l6ZTsg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAg
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTaXplOyAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TVEVOQ0lMX1NJWkU6ICAgICAgICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tU3RlbmNpbFNpemU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT05GSUdf
SUQ6ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnSUQ7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9MRVZFTDogICAgICAgICAgICAgICAg
ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTGV2ZWw7ICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVHTF9OQVRJVkVfUkVOREVSQUJMRTogICAgICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tTmF0aXZlUmVuZGVyYWJsZTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
TmF0aXZlVmlzdWFsVHlwZTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TQU1QTEVTOiAg
ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlczsgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlQnVmZmVyczsgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tU3VyZmFjZVR5cGU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVH
TF9UUkFOU1BBUkVOVF9UWVBFOiAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJh
bnNwYXJlbnRUeXBlOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9C
TFVFX1ZBTFVFOiAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRCbHVlVmFs
dWU7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTogICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9SRURfVkFMVUU6ICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9C
SU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRv
VGV4dHVyZVJHQjsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVf
UkdCQTogICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQkE7ICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NSU5fU1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tTWluU3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVHTF9NQVhfU1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tTWF4U3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9MVU1J
TkFOQ0VfU0laRTogICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTHVtaW5hbmNl
U2l6ZTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9NQVNLX1NJWkU6ICAg
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQWxwaGFNYXNrU2l6ZTsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tQ29sb3JCdWZmZXJUeXBlOyAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVRDSF9O
QVRJVkVfUElYTUFQOiAgICAgICAqdmFsdWUgPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT05GT1JNQU5UOiAgICAgICAgICAg
ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZm9ybWFudDsgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9XSURUSDogICAgICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZlcldpZHRoOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVHTF9NQVhfUEJVRkZFUl9IRUlHSFQ6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
TWF4UEJ1ZmZlckhlaWdodDsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhfUEJVRkZF
Ul9QSVhFTFM6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZlclBpeGVs
czsgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGlzcGxheTo6Y3JlYXRlRGV2aWNl
KCkKLXsKLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXRE
ZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKLSAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNE
Q1JFQVRFX0ZQVV9QUkVTRVJWRSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7Ci0KLSAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRF
WFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAm
bURldmljZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAg
fQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbUQz
ZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJl
aGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNl
bnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfTk9U
QVZBSUxBQkxFIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKG1EM2Q5RXgpCi0gICAgewotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUlu
dGVyZmFjZShJSURfSURpcmVjdDNERGV2aWNlOUV4LCAodm9pZCoqKSAmbURldmljZUV4KTsKLSAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXpl
RGV2aWNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gZG8gYW55IG9uZS10aW1lIGRl
dmljZSBpbml0aWFsaXphdGlvbgotLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBhZnRlciBh
IGRldmljZSBsb3N0L3Jlc2V0Ci0vLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFuZCBlbnN1
cmUgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSByZXNldC4KLXZvaWQgRGlzcGxheTo6aW5pdGlhbGl6
ZURldmljZSgpCi17Ci0gICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcwotICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKLSAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19MQVNUUElYRUwsIEZBTFNFKTsKLQotICAg
IG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBEaXNwbGF5OjpyZXNldERldmljZSgp
Ci17Ci0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVm
YXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsK
LSAgICBib29sIGxvc3QgPSB0ZXN0RGV2aWNlTG9zdCgpOwotICAgIGludCBhdHRlbXB0cyA9IDM7
ICAgIAotCi0gICAgd2hpbGUgKGxvc3QgJiYgYXR0ZW1wdHMgPiAwKQotICAgIHsKLSAgICAgICAg
aWYgKG1EZXZpY2VFeCkKLSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoNTAwKTsgICAvLyBH
aXZlIHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQotICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZUV4LT5SZXNldEV4KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGls
ZSAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNvbWUgQ1BV
IHRpbWUKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVM
ZXZlbCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVS
Ul9ERVZJQ0VOT1RSRVNFVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5SZXNldCgmcHJlc2VudFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgbG9zdCA9IHRlc3REZXZpY2VMb3N0KCk7Ci0gICAgICAgIGF0dGVt
cHRzIC0tOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IEVSUigiUmVzZXQvUmVzZXRFeCBmYWlsZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIsIHJlc3Vs
dCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgLy8gcmVzZXQgZGV2aWNlIGRlZmF1bHRzCi0gICAgaW5pdGlhbGl6ZURldmljZSgpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93
U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRy
aWJMaXN0KQotewotICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQu
Z2V0KGNvbmZpZyk7Ci0gICAgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBFR0xfRkFM
U0U7Ci0KLSAgICBpZiAoYXR0cmliTGlzdCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICgqYXR0cmli
TGlzdCAhPSBFR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJM
aXN0WzBdKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJfQlVG
RkVSOgotICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9CQUNLX0JVRkZFUjoKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9TSU5HTEVfQlVG
RkVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdM
X05PX1NVUkZBQ0UpOyAgIC8vIFJlbmRlcmluZyBkaXJlY3RseSB0byBmcm9udCBidWZmZXIgbm90
IHN1cHBvcnRlZAotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgotICAgICAgICAgICAgICAgIHBvc3RT
dWJCdWZmZXJTdXBwb3J0ZWQgPSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAg
ICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05P
X1NVUkZBQ0UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJMaXN0ICs9IDI7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdp
bmRvdykpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05P
X1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKSAKLSAgICB7Ci0g
ICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAgICAgICAgICAgIHJldHVybiBFR0xf
Tk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2Uo
dGhpcywgY29uZmlndXJhdGlvbiwgd2luZG93LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKLQot
ICAgIGlmICghc3VyZmFjZS0+aW5pdGlhbGl6ZSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHN1
cmZhY2U7Ci0gICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAgICBtU3Vy
ZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7Ci0KLSAgICByZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsK
LX0KLQotRUdMU3VyZmFjZSBEaXNwbGF5OjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENvbmZp
ZyBjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQot
ewotICAgIEVHTGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgRUdMZW51bSB0ZXh0dXJl
Rm9ybWF0ID0gRUdMX05PX1RFWFRVUkU7Ci0gICAgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gRUdM
X05PX1RFWFRVUkU7Ci0gICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1Nl
dC5nZXQoY29uZmlnKTsKLQotICAgIGlmIChhdHRyaWJMaXN0KQotICAgIHsKLSAgICAgICAgd2hp
bGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKGF0dHJpYkxpc3RbMF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRUdM
X1dJRFRIOgotICAgICAgICAgICAgICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgotICAgICAgICAg
ICAgICAgIGhlaWdodCA9IGF0dHJpYkxpc3RbMV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRUdMX0xBUkdFU1RfUEJVRkZFUjoKLSAgICAgICAgICAgICAgICBp
ZiAoYXR0cmliTGlzdFsxXSAhPSBFR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7IC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRUdMX1RFWFRVUkVfRk9STUFUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmli
TGlzdFsxXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9O
T19URVhUVVJFOgotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9SR0I6Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1JHQkE6Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGb3JtYXQgPSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVEVY
VFVSRV9UQVJHRVQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzFdKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX05PX1RFWFRVUkU6Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlVGFyZ2V0ID0gYXR0cmliTGlzdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01J
UE1BUF9URVhUVVJFOgotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJMaXN0WzFdICE9IEVHTF9G
QUxTRSkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwg
RUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FM
UEhBX0ZPUk1BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwg
RUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJMaXN0ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAg
ICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlm
ICh0ZXh0dXJlRm9ybWF0ICE9IEVHTF9OT19URVhUVVJFICYmICFnZXROb25Qb3dlcjJUZXh0dXJl
U3VwcG9ydCgpICYmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZB
Q0UpOwotICAgIH0KLQotICAgIGlmICgodGV4dHVyZUZvcm1hdCAhPSBFR0xfTk9fVEVYVFVSRSAm
JiB0ZXh0dXJlVGFyZ2V0ID09IEVHTF9OT19URVhUVVJFKSB8fAotICAgICAgICAodGV4dHVyZUZv
cm1hdCA9PSBFR0xfTk9fVEVYVFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ICE9IEVHTF9OT19URVhUVVJF
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VS
RkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKCEoY29uZmlndXJhdGlvbi0+bVN1cmZhY2VUeXBlICYg
RUdMX1BCVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01B
VENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKCh0ZXh0dXJlRm9ybWF0ID09
IEVHTF9URVhUVVJFX1JHQiAmJiBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQiAhPSBF
R0xfVFJVRSkgfHwKLSAgICAgICAgKHRleHR1cmVGb3JtYXQgPT0gRUdMX1RFWFRVUkVfUkdCQSAm
JiBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQkEgIT0gRUdMX1RSVUUpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7
Ci0gICAgfQotCi0gICAgaWYgKHRlc3REZXZpY2VMb3N0KCkpIAotICAgIHsKLSAgICAgICAgaWYg
KCFyZXN0b3JlTG9zdERldmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNF
OwotICAgIH0KLQotICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBjb25m
aWd1cmF0aW9uLCBzaGFyZUhhbmRsZSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZUZvcm1hdCwgdGV4
dHVyZVRhcmdldCk7Ci0KLSAgICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZSBzdXJmYWNlOwotICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0g
ICAgfQotCi0gICAgbVN1cmZhY2VTZXQuaW5zZXJ0KHN1cmZhY2UpOwotCi0gICAgcmV0dXJuIHN1
Y2Nlc3Moc3VyZmFjZSk7Ci19Ci0KLUVHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4dChF
R0xDb25maWcgY29uZmlnSGFuZGxlLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCi17Ci0gICAgaWYgKCFtRGV2aWNl
KQotICAgIHsKLSAgICAgICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGVzdERl
dmljZUxvc3QoKSkgICAvLyBMb3N0IGRldmljZQotICAgIHsKLSAgICAgICAgaWYgKCFyZXN0b3Jl
TG9zdERldmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgY29u
c3QgZWdsOjpDb25maWcgKmNvbmZpZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRsZSk7Ci0K
LSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcsIHNoYXJl
Q29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwotICAgIG1Db250ZXh0U2V0Lmlu
c2VydChjb250ZXh0KTsKLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOwotCi0gICAgcmV0dXJuIGNv
bnRleHQ7Ci19Ci0KLWJvb2wgRGlzcGxheTo6cmVzdG9yZUxvc3REZXZpY2UoKQotewotICAgIGZv
ciAoQ29udGV4dFNldDo6aXRlcmF0b3IgY3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY3R4ICE9
IG1Db250ZXh0U2V0LmVuZCgpOyBjdHgrKykKLSAgICB7Ci0gICAgICAgIGlmICgoKmN0eCktPmlz
UmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAg
Ly8gSWYgcmVzZXQgbm90aWZpY2F0aW9ucyBoYXZlIGJlZW4gcmVxdWVzdGVkLCBhcHBsaWNhdGlv
biBtdXN0IGRlbGV0ZSBhbGwgY29udGV4dHMgZmlyc3QKLSAgICB9Ci0gCi0gICAgLy8gUmVsZWFz
ZSBzdXJmYWNlIHJlc291cmNlcyB0byBtYWtlIHRoZSBSZXNldCgpIHN1Y2NlZWQKLSAgICBmb3Ig
KFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJm
YWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCi0gICAgewotICAgICAgICAoKnN1
cmZhY2UpLT5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wu
ZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2Uo
KTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0gICAgaWYg
KCFyZXNldERldmljZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFJlc3RvcmUgYW55IHN1cmZhY2VzIHRoYXQgbWF5IGhhdmUgYmVlbiBsb3N0Ci0gICAg
Zm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsg
c3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQotICAgIHsKLSAgICAgICAg
KCpzdXJmYWNlKS0+cmVzZXRTd2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotCi12b2lkIERpc3BsYXk6OmRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFj
ZSkKLXsKLSAgICBkZWxldGUgc3VyZmFjZTsKLSAgICBtU3VyZmFjZVNldC5lcmFzZShzdXJmYWNl
KTsKLX0KLQotdm9pZCBEaXNwbGF5OjpkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4
dCkKLXsKLSAgICBnbERlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwotICAgIG1Db250ZXh0U2V0LmVy
YXNlKGNvbnRleHQpOwotfQotCi12b2lkIERpc3BsYXk6Om5vdGlmeURldmljZUxvc3QoKQotewot
ICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3IgY29udGV4dCA9IG1Db250ZXh0U2V0LmJlZ2lu
KCk7IGNvbnRleHQgIT0gbUNvbnRleHRTZXQuZW5kKCk7IGNvbnRleHQrKykKLSAgICB7Ci0gICAg
ICAgICgqY29udGV4dCktPm1hcmtDb250ZXh0TG9zdCgpOwotICAgIH0KLSAgICBtRGV2aWNlTG9z
dCA9IHRydWU7Ci0gICAgZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCk7Ci19Ci0KLWJvb2wgRGlzcGxh
eTo6aXNEZXZpY2VMb3N0KCkKLXsKLSAgICByZXR1cm4gbURldmljZUxvc3Q7Ci19Ci0KLWJvb2wg
RGlzcGxheTo6aXNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM2Q5ICE9IE5V
TEwgJiYgbUNvbmZpZ1NldC5zaXplKCkgPiAwOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRD
b25maWcoRUdMQ29uZmlnIGNvbmZpZykKLXsKLSAgICByZXR1cm4gbUNvbmZpZ1NldC5nZXQoY29u
ZmlnKSAhPSBOVUxMOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRDb250ZXh0KGdsOjpDb250
ZXh0ICpjb250ZXh0KQotewotICAgIHJldHVybiBtQ29udGV4dFNldC5maW5kKGNvbnRleHQpICE9
IG1Db250ZXh0U2V0LmVuZCgpOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRTdXJmYWNlKGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICByZXR1cm4gbVN1cmZhY2VTZXQuZmluZChzdXJm
YWNlKSAhPSBtU3VyZmFjZVNldC5lbmQoKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpoYXNFeGlzdGlu
Z1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpCi17Ci0gICAgZm9yIChTdXJmYWNlU2V0OjppdGVy
YXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFjZVNl
dC5lbmQoKTsgc3VyZmFjZSsrKQotICAgIHsKLSAgICAgICAgaWYgKCgqc3VyZmFjZSktPmdldFdp
bmRvd0hhbmRsZSgpID09IHdpbmRvdykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUVHTGludCBE
aXNwbGF5OjpnZXRNaW5Td2FwSW50ZXJ2YWwoKQotewotICAgIHJldHVybiBtTWluU3dhcEludGVy
dmFsOwotfQotCi1FR0xpbnQgRGlzcGxheTo6Z2V0TWF4U3dhcEludGVydmFsKCkKLXsKLSAgICBy
ZXR1cm4gbU1heFN3YXBJbnRlcnZhbDsKLX0KLQotSURpcmVjdDNERGV2aWNlOSAqRGlzcGxheTo6
Z2V0RGV2aWNlKCkKLXsKLSAgICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBpZiAoIWNy
ZWF0ZURldmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBtRGV2aWNlOwotfQotCi1EM0RDQVBTOSBEaXNwbGF5
OjpnZXREZXZpY2VDYXBzKCkKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHM7Ci19Ci0KLUQzREFE
QVBURVJfSURFTlRJRklFUjkgKkRpc3BsYXk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkKLXsKLSAg
ICByZXR1cm4gJm1BZGFwdGVySWRlbnRpZmllcjsKLX0KLQotYm9vbCBEaXNwbGF5Ojp0ZXN0RGV2
aWNlTG9zdCgpCi17Ci0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBG
QUlMRUQobURldmljZUV4LT5DaGVja0RldmljZVN0YXRlKE5VTEwpKTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAobURldmljZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBGQUlMRUQobURldmljZS0+VGVz
dENvb3BlcmF0aXZlTGV2ZWwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5v
IGRldmljZSB5ZXQsIHNvIG5vIHJlc2V0IHJlcXVpcmVkCi19Ci0KLWJvb2wgRGlzcGxheTo6dGVz
dERldmljZVJlc2V0dGFibGUoKQotewotICAgIEhSRVNVTFQgc3RhdHVzID0gRDNEX09LOwotCi0g
ICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IG1EZXZpY2VFeC0+Q2hl
Y2tEZXZpY2VTdGF0ZShOVUxMKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURldmljZSkKLSAgICB7
Ci0gICAgICAgIHN0YXR1cyA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0gICAg
fQotCi0gICAgc3dpdGNoIChzdGF0dXMpCi0gICAgewotICAgICAgY2FzZSBEM0RFUlJfREVWSUNF
Tk9UUkVTRVQ6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJQ0VIVU5HOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LXZvaWQgRGlzcGxheTo6c3luYyhib29sIGJsb2NrKQotewotICAgIEhSRVNVTFQgcmVzdWx0Owot
Ci0gICAgSURpcmVjdDNEUXVlcnk5KiBxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAg
IGlmICghcXVlcnkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0
ID0gcXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKLQotICAgIGRvCi0gICAgewotICAgICAgICByZXN1bHQgPSBxdWVyeS0+R2V0RGF0YShO
VUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKLQotICAgICAgICBpZihibG9jayAmJiByZXN1bHQg
PT0gU19GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQg
YWxsb3cgb3RoZXIgdGhyZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAg
ICAgICBTbGVlcCgwKTsKLSAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmlj
ZSBsb3NzCi0gICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxT
RSBldmVuIGlmIHRoZSBkZXZpY2UgaXMgbG9zdAotICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBE
M0RFUlJfREVWSUNFTE9TVCBsaWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAgICBpZiAodGVzdERl
dmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBEM0RF
UlJfREVWSUNFTE9TVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB3aGls
ZShibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSk7Ci0KLSAgICBmcmVlRXZlbnRRdWVyeShxdWVy
eSk7Ci0KLSAgICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IG5vdGlmeURldmljZUxvc3QoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFF1ZXJ5OSogRGlzcGxh
eTo6YWxsb2NhdGVFdmVudFF1ZXJ5KCkKLXsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0g
TlVMTDsKLQotICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5U
LCAmcXVlcnkpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBxdWVyeSA9IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCk7Ci0g
ICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIHJldHVybiBx
dWVyeTsKLX0KLQotdm9pZCBEaXNwbGF5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0RRdWVyeTkq
IHF1ZXJ5KQotewotICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpID4gMTAwMCkKLSAgICB7
Ci0gICAgICAgIHF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIG1FdmVudFF1ZXJ5UG9vbC5wdXNoX2JhY2socXVlcnkpOwotICAgIH0KLX0KLQotdm9pZCBE
aXNwbGF5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVs
dGlTYW1wbGVBcnJheSkKLXsKLSAgICBmb3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0gMDsgbXVs
dGlTYW1wbGVJbmRleCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNhbXBsZUlu
ZGV4KyspCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0Rldmlj
ZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwg
KEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7Ci0KLSAgICAgICAg
bXVsdGlTYW1wbGVBcnJheVttdWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1bHQpOwot
ICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQotewotICAg
IEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRl
ckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHJldHVy
biBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1U
X0RYVDEpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQotewot
ICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRh
cHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHJl
dHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNE
Rk1UX0RYVDMpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQot
ewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0
QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAg
IHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwg
RDNERk1UX0RYVDUpKTsKLX0KLQotLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGlu
IERpcmVjdDNEOQotLy8gd2UgYWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3Vy
ZSB0aGUgd2UgY2FuIG1ha2UgZGVwdGgtb25seSBGQk9zCi0vLyBzZWUgaHR0cDovL2FyYXMtcC5p
bmZvL3RleHRzL0QzRDlHUFVIYWNrcy5odG1sCi1ib29sIERpc3BsYXk6OmdldERlcHRoVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdAotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9k
ZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERp
c3BsYXlNb2RlKTsKLQotICAgIGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
VVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpOwotICAg
IGJvb2wgbnVsbCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LCBEM0RSVFlQRV9TVVJGQUNFLCBEM0RGTVRfTlVMTCkpOwotCi0gICAgcmV0dXJuIGludHogJiYg
bnVsbDsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAq
ZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJl
bnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVy
LCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgICpmaWx0ZXJpbmcgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RG
TVRfQTMyQjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+
Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1v
ZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZN
VF9BMzJCMzJHMzJSMzJGKSk7Ci0gICAgCi0gICAgKnJlbmRlcmFibGUgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RG
TVRfQTMyQjMyRzMyUjMyRikpJiYKLSAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+
Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1v
ZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RG
TVRfQTMyQjMyRzMyUjMyRikpOwotCi0gICAgaWYgKCEqZmlsdGVyaW5nICYmICEqcmVuZGVyYWJs
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJU
WVBFX1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKLSAgICAgICAgICAgICAgIFNV
Q0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBj
dXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIz
MkczMlIzMkYpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29s
ICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0gICAgRDNERElTUExBWU1PREUgY3Vy
cmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0
ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgKmZpbHRlcmluZyA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQz
REZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNE
Rk1UX0ExNkIxNkcxNlIxNkYpKTsKLSAgICAKLSAgICAqcmVuZGVyYWJsZSA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQz
REZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNE
Rk1UX0ExNkIxNkcxNlIxNkYpKTsKLQotICAgIGlmICghKmZpbHRlcmluZyAmJiAhKnJlbmRlcmFi
bGUpCi0gICAgewotICAgICAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZv
cm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RS
VFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCi0gICAgICAgICAgICAgICBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZC
MTZHMTZSMTZGKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgp
Ci17Ci0gICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5H
ZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0g
ICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfTDgpKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VBbHBoYVRleHR1
cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0g
ICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5
TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJU
WVBFX1RFWFRVUkUsIEQzREZNVF9BOEw4KSk7Ci19Ci0KLUQzRFBPT0wgRGlzcGxheTo6Z2V0QnVm
ZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QKLXsKLSAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgaWYgKCEodXNhZ2UgJiBEM0RVU0FHRV9EWU5BTUlDKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci19Ci0KLUQzRFBPT0wgRGlzcGxheTo6Z2V0
VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXggIT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIGlmICghKHVzYWdlICYgKEQzRFVTQUdFX0RFUFRIU1RFTkNJTCB8
IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
RDNEUE9PTF9NQU5BR0VEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzRFBPT0xf
REVGQVVMVDsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCi17Ci0g
ICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIGlm
IChxdWVyeSkKLSAgICB7Ci0gICAgICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLUQzRFBSRVNFTlRfUEFSQU1FVEVSUyBEaXNwbGF5OjpnZXREZWZhdWx0
UHJlc2VudFBhcmFtZXRlcnMoKQotewotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1ldGVycyA9IHswfTsKLQotICAgIC8vIFRoZSBkZWZhdWx0IHN3YXAgY2hhaW4gaXMgbmV2
ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFjZSB3aWxsIGNyZWF0ZSBhIG5ldyBzd2FwIGNoYWluIHdp
dGggdGhlIHByb3BlciBwYXJhbWV0ZXJzLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0
aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3Jt
YXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lk
dGggPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSAxOwotICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKLSAgICBw
cmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmlj
ZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1w
bGVRdWFsaXR5ID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBE
M0RNVUxUSVNBTVBMRV9OT05FOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbklu
dGVydmFsID0gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0RJU0NBUkQ7Ci0gICAgcHJlc2VudFBhcmFt
ZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIHByZXNlbnRQYXJhbWV0ZXJzOwot
fQotCi12b2lkIERpc3BsYXk6OmluaXRFeHRlbnNpb25TdHJpbmcoKQotewotICAgIEhNT0RVTEUg
c3dpZnRTaGFkZXIgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgic3dpZnRzaGFkZXJfZDNkOS5kbGwi
KSk7Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gIiI7Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3Ig
KEVYVCkgZXh0ZW5zaW9ucwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9FWFRfY3JlYXRl
X2NvbnRleHRfcm9idXN0bmVzcyAiOwotCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9u
cwotICAgIGlmIChzaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQotICAgIHsKLSAgICAgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVfY2xpZW50X2J1ZmZlciAi
OwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9xdWVyeV9zdXJm
YWNlX3BvaW50ZXIgIjsKLQotICAgIGlmIChzd2lmdFNoYWRlcikKLSAgICB7Ci0gICAgICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9zb2Z0d2FyZV9kaXNwbGF5ICI7Ci0gICAgfQot
Ci0gICAgaWYgKHNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJFR0xfQU5HTEVfc3VyZmFjZV9kM2RfdGV4dHVyZV8yZF9zaGFyZV9oYW5k
bGUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJf
YnVmZmVyIjsKLQotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0
cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6
bnBvcykKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKLSAg
ICB9Ci19Ci0KLWNvbnN0IGNoYXIgKkRpc3BsYXk6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19zdHIoKTsKLX0KLQotYm9vbCBEaXNw
bGF5OjpzaGFyZUhhbmRsZVN1cHBvcnRlZCgpIGNvbnN0IAotewotICAgIC8vIFBJWCBkb2Vzbid0
IHNlZW0gdG8gc3VwcG9ydCB1c2luZyBzaGFyZSBoYW5kbGVzLCBzbyBkaXNhYmxlIHRoZW0uCi0g
ICAgcmV0dXJuIGlzRDNkOUV4RGV2aWNlKCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Ci19Ci0KLS8v
IE9ubHkgRGlyZWN0M0QgMTAgcmVhZHkgZGV2aWNlcyBzdXBwb3J0IGFsbCB0aGUgbmVjZXNzYXJ5
IHZlcnRleCB0ZXh0dXJlIGZvcm1hdHMuCi0vLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNEOSBieSBj
aGVja2luZyBzdXBwb3J0IGZvciB0aGUgUjE2RiBmb3JtYXQuCi1ib29sIERpc3BsYXk6OmdldFZl
cnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8
fCBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDMsIDApKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVY
VFVSRSwgRDNERk1UX1IxNkYpOwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChyZXN1bHQpOwotfQot
Ci1ib29sIERpc3BsYXk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19QT1cy
KSAmJgotICAgICAgICAgICAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVD
QVBTX0NVQkVNQVBfUE9XMikgJiYKLSAgICAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2Fw
cyAmIEQzRFBURVhUVVJFQ0FQU19OT05QT1cyQ09ORElUSU9OQUwpOwotfQotCi1ib29sIERpc3Bs
YXk6OmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0luaXRp
YWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURp
cmVjdDNEUXVlcnk5ICpxdWVyeSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmcXVlcnkpOwotICAgIAotICAg
IGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBxdWVyeSkKLSAgICB7Ci0gICAgICAgIHF1ZXJ5LT5S
ZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldEluc3Rh
bmNpbmdTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHMuUGl4ZWxTaGFk
ZXJWZXJzaW9uID49IEQzRFBTX1ZFUlNJT04oMywgMCk7IAotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0ZjdkYmQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIERpc3BsYXkuaDogRGVmaW5lcyB0aGUgZWdsOjpEaXNwbGF5IGNs
YXNzLCByZXByZXNlbnRpbmcgdGhlIGFic3RyYWN0Ci0vLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBo
aWNzIGFyZSBkcmF3bi4gSW1wbGVtZW50cyBFR0xEaXNwbGF5LgotLy8gW0VHTCAxLjRdIHNlY3Rp
b24gMi4xLjIgcGFnZSAzLgotCi0jaWZuZGVmIElOQ0xVREVfRElTUExBWV9IXwotI2RlZmluZSBJ
TkNMVURFX0RJU1BMQVlfSF8KLQotI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0jZGVmaW5l
IFdJTjMyX0xFQU5fQU5EX01FQU4KLSNlbmRpZgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNs
dWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIK
LSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBE
aXNwbGF5Ci17Ci0gIHB1YmxpYzoKLSAgICB+RGlzcGxheSgpOwotCi0gICAgYm9vbCBpbml0aWFs
aXplKCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydFNj
ZW5lKCk7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFNjZW5lKCk7Ci0KLSAgICBzdGF0aWMgZWdsOjpE
aXNwbGF5ICpnZXREaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCk7Ci0KLSAg
ICBib29sIGdldENvbmZpZ3MoRUdMQ29uZmlnICpjb25maWdzLCBjb25zdCBFR0xpbnQgKmF0dHJp
Ykxpc3QsIEVHTGludCBjb25maWdTaXplLCBFR0xpbnQgKm51bUNvbmZpZyk7Ci0gICAgYm9vbCBn
ZXRDb25maWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50
ICp2YWx1ZSk7Ci0KLSAgICBFR0xTdXJmYWNlIGNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5k
b3csIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdM
U3VyZmFjZSBjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENvbmZpZyBjb25maWcsIEhBTkRMRSBz
aGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKLSAgICBFR0xDb250ZXh0IGNy
ZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQgKnNo
YXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKLQotICAg
IHZvaWQgZGVzdHJveVN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKLSAgICB2b2lkIGRl
c3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLQotICAgIGJvb2wgaXNJbml0aWFs
aXplZCgpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29uZmlnKTsK
LSAgICBib29sIGlzVmFsaWRDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLSAgICBib29s
IGlzVmFsaWRTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgYm9vbCBoYXNFeGlz
dGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3cpOwotCi0gICAgRUdMaW50IGdldE1pblN3YXBJ
bnRlcnZhbCgpOwotICAgIEVHTGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKTsKLQotICAgIHZpcnR1
YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7Ci0gICAgdmlydHVhbCBEM0RDQVBTOSBn
ZXREZXZpY2VDYXBzKCk7Ci0gICAgdmlydHVhbCBEM0RBREFQVEVSX0lERU5USUZJRVI5ICpnZXRB
ZGFwdGVySWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlTG9zdCgpOwot
ICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jKGJvb2wgYmxvY2spOwotICAgIHZpcnR1YWwgSURpcmVjdDNEUXVlcnk5KiBhbGxvY2F0
ZUV2ZW50UXVlcnkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnJlZUV2ZW50UXVlcnkoSURpcmVjdDNE
UXVlcnk5KiBxdWVyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChE
M0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KTsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0
dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVy
YWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpm
aWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFu
Y2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBE
M0RQT09MIGdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNE
UE9PTCBnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIGJvb2wgaXNEZXZpY2VMb3N0KCk7Ci0KLSAgICBi
b29sIGlzRDNkOUV4RGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbUQzZDlFeCAhPSBOVUxMOyB9Ci0g
ICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBzaGFy
ZUhhbmRsZVN1cHBvcnRlZCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKERpc3BsYXkpOwotCi0gICAgRGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlw
ZSBkaXNwbGF5SWQsIEhEQyBkZXZpY2VDb250ZXh0LCBib29sIHNvZnR3YXJlKTsKLQotICAgIEQz
RFBSRVNFTlRfUEFSQU1FVEVSUyBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKLQotICAg
IGJvb2wgcmVzdG9yZUxvc3REZXZpY2UoKTsKLQotICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG1E
aXNwbGF5SWQ7Ci0gICAgY29uc3QgSERDIG1EYzsKLQotICAgIEhNT0RVTEUgbUQzZDlNb2R1bGU7
Ci0gICAgCi0gICAgVUlOVCBtQWRhcHRlcjsKLSAgICBEM0RERVZUWVBFIG1EZXZpY2VUeXBlOwot
ICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVyIHN1Y2Nlc3NmdWwg
aW5pdGlhbGl6YXRpb24uCi0gICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAgLy8gTWlnaHQgYmUg
bnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpt
RGV2aWNlOwotICAgIElEaXJlY3QzRERldmljZTlFeCAqbURldmljZUV4OyAgLy8gTWlnaHQgYmUg
bnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KLQotICAgIC8vIEEgcG9vbCBvZiBldmVu
dCBxdWVyaWVzIHRoYXQgYXJlIGN1cnJlbnRseSB1bnVzZWQuCi0gICAgc3RkOjp2ZWN0b3I8SURp
cmVjdDNEUXVlcnk5Kj4gbUV2ZW50UXVlcnlQb29sOwotCi0gICAgRDNEQ0FQUzkgbURldmljZUNh
cHM7Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSBtQWRhcHRlcklkZW50aWZpZXI7Ci0gICAg
SFdORCBtRGV2aWNlV2luZG93OwotCi0gICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAgIEVHTGlu
dCBtTWF4U3dhcEludGVydmFsOwotICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOwotICAgIGJv
b2wgbVNvZnR3YXJlRGV2aWNlOwotICAgIAotICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3VyZmFjZSo+
IFN1cmZhY2VTZXQ7Ci0gICAgU3VyZmFjZVNldCBtU3VyZmFjZVNldDsKLQotICAgIENvbmZpZ1Nl
dCBtQ29uZmlnU2V0OwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+IENvbnRl
eHRTZXQ7Ci0gICAgQ29udGV4dFNldCBtQ29udGV4dFNldDsKLSAgICBib29sIG1EZXZpY2VMb3N0
OwotCi0gICAgYm9vbCBjcmVhdGVEZXZpY2UoKTsKLSAgICB2b2lkIGluaXRpYWxpemVEZXZpY2Uo
KTsKLSAgICBib29sIHJlc2V0RGV2aWNlKCk7Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJp
bmcoKTsKLSAgICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3RyaW5nOwotfTsKLX0KLQotI2VuZGlm
ICAgLy8gSU5DTFVERV9ESVNQTEFZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML1JFQURNRSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJF
R0wvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZjA3YzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1JFQURN
RQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qgc3luY2Vk
IGZyb20gdGhlIEFOR0xFIHByb2plY3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJLaXQgbmVl
ZHMgdGhlbSB5ZXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML1N1cmZhY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJm
YWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk5Yjc3OS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjgyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFN1cmZh
Y2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBh
IGRyYXdpbmcgc3VyZmFjZQotLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3cs
IGluY2x1ZGluZyBhbnkgYmFjayBidWZmZXJzLgotLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFu
ZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCi0K
LSNpbmNsdWRlIDx0Y2hhci5oPgotCi0jaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKLQotI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0K
LSNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0K
LSNpbmNsdWRlIDxkd21hcGkuaD4KLQotbmFtZXNwYWNlIGVnbAotewotCi1uYW1lc3BhY2UKLXsK
LWNvbnN0IGludCB2ZXJzaW9uV2luZG93c1Zpc3RhID0gTUFLRVdPUkQoMHgwMCwgMHgwNik7Ci1j
b25zdCBpbnQgdmVyc2lvbldpbmRvd3M3ID0gTUFLRVdPUkQoMHgwMSwgMHgwNik7Ci0KLS8vIFJl
dHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiBhIGZvcm1hdCBzdWl0
YWJsZSBmb3Igb3JkZXJpbmcKLS8vIGNvbXBhcmlzb24uCi1pbnQgZ2V0Q29tcGFyYWJsZU9TVmVy
c2lvbigpCi17Ci0gICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKLSAgICBpbnQgbWFq
b3JWZXJzaW9uID0gTE9CWVRFKExPV09SRCh2ZXJzaW9uKSk7Ci0gICAgaW50IG1pbm9yVmVyc2lv
biA9IEhJQllURShMT1dPUkQodmVyc2lvbikpOwotICAgIHJldHVybiBNQUtFV09SRChtaW5vclZl
cnNpb24sIG1ham9yVmVyc2lvbik7Ci19Ci19Ci0KLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAq
ZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZCkgCi0gICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZpZyhjb25m
aWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZm
ZXJTdXBwb3J0ZWQpCi17Ci0gICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tCdWZmZXIg
PSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hhcmVIYW5kbGUgPSBO
VUxMOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9OT19U
RVhUVVJFOwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0KLSAgICBtUGl4
ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8v
IEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwotICAgIG1SZW5kZXJC
dWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJf
UFJFU0VSVkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRTd2FwSW50ZXJ2YWwo
MSk7Ci0KLSAgICBzdWJjbGFzc1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpTdXJmYWNlKERpc3Bs
YXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVH
TGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVt
IHRleHR1cmVUeXBlKQotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1D
b25maWcoY29uZmlnKSwgbVNoYXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwg
bUhlaWdodChoZWlnaHQpLCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpCi17Ci0g
ICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIG1EZXB0
aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1PZmZzY3Jl
ZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgIG1U
ZXh0dXJlID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7Ci0gICAg
bVRleHR1cmVUYXJnZXQgPSB0ZXh0dXJlVHlwZTsKLQotICAgIG1QaXhlbEFzcGVjdFJhdGlvID0g
KEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWlu
ZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlvCi0gICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNL
X0JVRkZFUjsKLSAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Ci0gICAg
bVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLX0KLQotU3VyZmFj
ZTo6flN1cmZhY2UoKQotewotICAgIHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICByZWxlYXNlKCk7
Ci19Ci0KLWJvb2wgU3VyZmFjZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtU3dhcENo
YWluICYmICFtT2Zmc2NyZWVuVGV4dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7Ci0KLSAgICBpZiAo
IXJlc2V0U3dhcENoYWluKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBNb2RpZnkg
cHJlc2VudCBwYXJhbWV0ZXJzIGZvciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBvc2l0ZWQs
Ci0gICAgLy8gdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBxdWV1aW5nIGRvbmUgYnkgRFdNIGJl
dHdlZW4gb3VyIGNhbGxzIHRvCi0gICAgLy8gcHJlc2VudCBhbmQgdGhlIGFjdHVhbCBzY3JlZW4u
Ci0gICAgaWYgKG1XaW5kb3cgJiYgKGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9u
V2luZG93c1Zpc3RhKSkgewotICAgICAgQk9PTCBpc0NvbXBvc2l0ZWQ7Ci0gICAgICBIUkVTVUxU
IHJlc3VsdCA9IER3bUlzQ29tcG9zaXRpb25FbmFibGVkKCZpc0NvbXBvc2l0ZWQpOwotICAgICAg
aWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIGlzQ29tcG9zaXRlZCkgewotICAgICAgICBEV01fUFJF
U0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbXM7Ci0gICAgICAgIG1lbXNldCgmcHJlc2VudFBh
cmFtcywgMCwgc2l6ZW9mKHByZXNlbnRQYXJhbXMpKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5j
YlNpemUgPSBzaXplb2YoRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHByZXNlbnRQ
YXJhbXMuY0J1ZmZlciA9IDI7Ci0KLSAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFt
ZXRlcnMobVdpbmRvdywgJnByZXNlbnRQYXJhbXMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgICAgRVJSKCJVbmFibGUgdG8gc2V0IHByZXNlbnQgcGFyYW1ldGVyczogMHgl
MDhYIiwgcmVzdWx0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBTdXJmYWNlOjpyZWxlYXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0g
ICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZm
ZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAg
IGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFz
ZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJl
bmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAg
ICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5U
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsKLSAgICAgICAg
bVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7Ci19Ci0K
LWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQotewotICAgIGlmICghbVdpbmRvdykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiByZXNldFN3YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQpOwotICAg
IH0KLQotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2lu
ZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7
Ci0KLSAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgdGhlIHdpbmRvdyBkaW1lbnNpb25z
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzZXRTd2Fw
Q2hhaW4od2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2luZG93UmVjdC5ib3R0
b20gLSB3aW5kb3dSZWN0LnRvcCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4o
aW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgaWYgKGRl
dmljZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIEV2aWN0IGFsbCBub24tcmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5
IGFuZCByZWxlYXNlIGFsbCByZXNvdXJjZXMKLSAgICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRo
ZW0gdG8gZnJlZSB1cCBhcyBtdWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4KLSAgICBkZXZp
Y2UtPkV2aWN0TWFuYWdlZFJlc291cmNlcygpOwotCi0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJT
IHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgcHJl
c2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0
ZW5jaWxGb3JtYXQ7Ci0gICAgLy8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZlbiB3aGVu
IHdlIHVzZSBEM0RTV0FQRUZGRUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2Ug
RGlyZWN0WCBkb2NzIGFyZSBhIGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRvIDEKLSAg
ICAvLyBvciAyLiBUaGUgcnVudGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRl
IHRoYXQgZWl0aGVyIGl0IGlzCi0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQgdGVsbGlu
ZyB1cywgb3IgYmV0dGVyLCBkb2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhpbmQgdGhl
IHNjZW5lcyBrbm93aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckZvcm1hdCA9IG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0g
Z2V0V2luZG93SGFuZGxlKCk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFs
aXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAg
Ly8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRp
b25JbnRlcnZhbCA9IG1QcmVzZW50SW50ZXJ2YWw7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuU3dh
cEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5X
aW5kb3dlZCA9IFRSVUU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0g
YmFja2J1ZmZlcldpZHRoOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQg
PSBiYWNrYnVmZmVySGVpZ2h0OwotCi0gICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMg
dG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCi0g
ICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBw
cmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAg
ICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXIt
PlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVh
c2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgbVNoYXJl
SGFuZGxlID0gTlVMTDsKLSAgICBIQU5ETEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7Ci0gICAgaWYg
KCFtV2luZG93ICYmIG1EaXNwbGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQotICAgIHsKLSAg
ICAgICAgcFNoYXJlSGFuZGxlID0gJm1TaGFyZUhhbmRsZTsKLSAgICB9Ci0KLSAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRo
LCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0dXJl
LCBwU2hhcmVIYW5kbGUpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQp
OwotICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3Qo
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqb2xkUmVuZGVyVGFy
Z2V0ID0gbVJlbmRlclRhcmdldDsKLQotICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwoMCwgJm1SZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0KLSAgICBpZiAob2xkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgUkVD
VCByZWN0ID0KLSAgICAgICAgewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgIG1XaWR0
aCwgbUhlaWdodAotICAgICAgICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gc3RhdGlj
X2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVjdC5yaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJX
aWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRpY19jYXN0
PExPTkc+KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZWN0LmJvdHRvbSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWln
aHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1S
ZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
IH0KLQotICAgIGlmIChtV2luZG93KQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4p
OwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBE
M0RFUlJfREVWSUNFTE9TVCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBh
ZGRpdGlvbmFsIHN3YXAgY2hhaW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4bFgiLCByZXN1
bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZihpc0RldmljZUxv
c3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaXNwbGF5
LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAs
IEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVwdGhTdGVu
Y2lsRm9ybWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2ls
LCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7Ci0KLSAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3Ig
bmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7
Ci0KLSAgICAgICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1XaWR0
aCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0ID0gcHJl
c2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodDsKLQotICAgIG1QcmVzZW50SW50ZXJ2YWxE
aXJ0eSA9IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN1cmZhY2U6OnN3YXBS
ZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQotewot
ICAgIGlmICghbVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmICh4ICsgd2lkdGggPiBtV2lkdGgpCi0gICAgewotICAgICAgICB3aWR0aCA9IG1X
aWR0aCAtIHg7Ci0gICAgfQotCi0gICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQotICAgIHsK
LSAgICAgICAgaGVpZ2h0ID0gbUhlaWdodCAtIHk7Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID09
IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0K
LSAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCi0gICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVF
TkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5B
QkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+
U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7
Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7Ci0gICAgZGV2
aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRUZXh0
dXJlKDAsIG1PZmZzY3JlZW5UZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0
YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgZGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhUVVJFKTsK
LSAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBEM0RU
T1BfRElTQUJMRSk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdG
SUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0gICAgZGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVAp
OwotICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7Ci0KLSAg
ICBEM0RWSUVXUE9SVDkgdmlld3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAx
LjBmfTsKLSAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0KLSAgICBmbG9hdCB4
MSA9IHggLSAwLjVmOwotICAgIGZsb2F0IHkxID0gKG1IZWlnaHQgLSB5IC0gaGVpZ2h0KSAtIDAu
NWY7Ci0gICAgZmxvYXQgeDIgPSAoeCArIHdpZHRoKSAtIDAuNWY7Ci0gICAgZmxvYXQgeTIgPSAo
bUhlaWdodCAtIHkpIC0gMC41ZjsKLQotICAgIGZsb2F0IHUxID0geCAvIGZsb2F0KG1XaWR0aCk7
Ci0gICAgZmxvYXQgdjEgPSB5IC8gZmxvYXQobUhlaWdodCk7Ci0gICAgZmxvYXQgdTIgPSAoeCAr
IHdpZHRoKSAvIGZsb2F0KG1XaWR0aCk7Ci0gICAgZmxvYXQgdjIgPSAoeSArIGhlaWdodCkgLyBm
bG9hdChtSGVpZ2h0KTsKLQotICAgIGZsb2F0IHF1YWRbNF1bNl0gPSB7e3gxLCB5MSwgMC4wZiwg
MS4wZiwgdTEsIHYyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTEsIDAuMGYsIDEu
MGYsIHUyLCB2Mn0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBmLCAxLjBm
LCB1MiwgdjF9LAotICAgICAgICAgICAgICAgICAgICAgICAge3gxLCB5MiwgMC4wZiwgMS4wZiwg
dTEsIHYxfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2Ci0KLSAgICBtRGlzcGxheS0+c3RhcnRT
Y2VuZSgpOwotICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAy
LCBxdWFkLCA2ICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0K
LSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAgICBSRUNUIHJlY3QgPQotICAg
IHsKLSAgICAgICAgeCwgbUhlaWdodCAtIHkgLSBoZWlnaHQsCi0gICAgICAgIHggKyB3aWR0aCwg
bUhlaWdodCAtIHkKLSAgICB9OwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5Q
cmVzZW50KCZyZWN0LCAmcmVjdCwgTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oZ2xHZXRDdXJyZW50Q29udGV4dCgp
KTsKLSAgICBpZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPm1hcmtBbGxTdGF0
ZURpcnR5KCk7Ci0gICAgfQotCi0gICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0g
ICAgewotICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZF
UklOVEVSTkFMRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgZmFsc2UpOwotICAgIH0KLQotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAg
ICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LUhXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbVdpbmRvdzsK
LX0KLQotCi0jZGVmaW5lIGtTdXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFjZU93bmVy
IikKLSNkZWZpbmUga1BhcmVudFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFBy
b2MiKQotCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBTdXJmYWNlV2luZG93UHJvYyhIV05EIGh3
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkKLXsKLSAgaWYg
KG1lc3NhZ2UgPT0gV01fU0laRSkKLSAgewotICAgICAgU3VyZmFjZSogc3VyZiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkpOwotICAg
ICAgaWYoc3VyZikKLSAgICAgIHsKLSAgICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9mRGF0ZVN3
YXBDaGFpbigpOwotICAgICAgfQotICB9Ci0gIFdORFBST0MgcHJldlduZEZ1bmMgPSByZWludGVy
cHJldF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7Ci0gIHJl
dHVybiBDYWxsV2luZG93UHJvYyhwcmV2V25kRnVuYywgaHduZCwgbWVzc2FnZSwgd3BhcmFtLCBs
cGFyYW0pOwotfQotCi12b2lkIFN1cmZhY2U6OnN1YmNsYXNzV2luZG93KCkKLXsKLSAgICBpZiAo
IW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRFdPUkQgcHJv
Y2Vzc0lkOwotICAgIERXT1JEIHRocmVhZElkID0gR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKG1X
aW5kb3csICZwcm9jZXNzSWQpOwotICAgIGlmIChwcm9jZXNzSWQgIT0gR2V0Q3VycmVudFByb2Nl
c3NJZCgpIHx8IHRocmVhZElkICE9IEdldEN1cnJlbnRUaHJlYWRJZCgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNldExhc3RFcnJvcigwKTsKLSAgICBMT05HX1BUUiBv
bGRXbmRQcm9jID0gU2V0V2luZG93TG9uZ1B0cihtV2luZG93LCBHV0xQX1dORFBST0MsIHJlaW50
ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgaWYob2xkV25k
UHJvYyA9PSAwICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgewotICAg
ICAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgU2V0UHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5LCByZWludGVycHJldF9jYXN0
PEhBTkRMRT4odGhpcykpOwotICAgIFNldFByb3AobVdpbmRvdywga1BhcmVudFduZFByb2MsIHJl
aW50ZXJwcmV0X2Nhc3Q8SEFORExFPihvbGRXbmRQcm9jKSk7Ci0gICAgbVdpbmRvd1N1YmNsYXNz
ZWQgPSB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3coKQotewotICAg
IGlmKCFtV2luZG93U3ViY2xhc3NlZCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyB1bi1zdWJjbGFzcwotICAgIExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSByZWludGVy
cHJldF9jYXN0PExPTkdfUFRSPihHZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKSk7Ci0K
LSAgICAvLyBDaGVjayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93UHJvYy4K
LSAgICAvLyBJZiB0aGlzIGFzc2VydCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhlIGFwcGxp
Y2F0aW9uIGhhcyBzdWJjbGFzc2VkIHRoZQotICAgIC8vIGh3bmQgYXMgd2VsbCBhbmQgZGlkIG5v
dCB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBFR0wgY29udGV4dC4gVGhlCi0gICAg
Ly8gYXBwbGljYXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFzcyBiZWZv
cmUgaW5pdGlhbGl6aW5nIHRoZQotICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1YmNsYXNz
IGJlZm9yZSBkZXN0cm95aW5nIHRoZSBFR0wgY29udGV4dC4KLSAgICBpZihwYXJlbnRXbmRGdW5j
KQotICAgIHsKLSAgICAgICAgTE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dMb25nUHRy
KG1XaW5kb3csIEdXTFBfV05EUFJPQywgcGFyZW50V25kRnVuYyk7Ci0gICAgICAgIEFTU0VSVChw
cmV2V25kRnVuYyA9PSByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2luZG93UHJv
YykpOwotICAgIH0KLQotICAgIFJlbW92ZVByb3AobVdpbmRvdywga1N1cmZhY2VQcm9wZXJ0eSk7
Ci0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYyk7Ci0gICAgbVdpbmRvd1N1
YmNsYXNzZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3
YXBDaGFpbigpCi17Ci0gICAgUkVDVCBjbGllbnQ7Ci0gICAgaWYgKCFHZXRDbGllbnRSZWN0KGdl
dFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIg
bm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9p
ZCBsb3NpbmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0
IC0gY2xpZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBj
bGllbnQudG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgo
KSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoc2l6ZURpcnR5IHx8
IG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSkKLSAgICB7Ci0gICAgICAgIHJlc2V0U3dhcENoYWluKGNs
aWVudFdpZHRoLCBjbGllbnRIZWlnaHQpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZWdsOjpT
dXJmYWNlKj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRoaXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGdsTWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwgdGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1E
V09SRCBTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIHN3
aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJW
QUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087Ci0g
ICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFOwotICAgICAgY2Fz
ZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZB
VUxUOwotfQotCi1ib29sIFN1cmZhY2U6OnN3YXAoKQotewotICAgIHJldHVybiBzd2FwUmVjdCgw
LCAwLCBtV2lkdGgsIG1IZWlnaHQpOwotfQotCi1ib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIo
RUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAg
aWYgKCFtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNwZWMgaXMg
bm90IGNsZWFyIGFib3V0IGhvdyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN3YXBSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotfQotCi1FR0xpbnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJl
dHVybiBtV2lkdGg7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25zdAotewot
ICAgIHJldHVybiBtSGVpZ2h0OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVy
U3VwcG9ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQ7
Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZh
Y2U6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewot
ICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVJl
bmRlclRhcmdldDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJm
YWNlOSAqU3VyZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotICAgIH0KLQotICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqU3VyZmFjZTo6
Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAg
IHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJl
dHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2
YWwoRUdMaW50IGludGVydmFsKQotewotICAgIGlmIChtU3dhcEludGVydmFsID09IGludGVydmFs
KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtU3dhcEludGVydmFs
ID0gaW50ZXJ2YWw7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1Td2FwSW50ZXJ2YWws
IG1EaXNwbGF5LT5nZXRNaW5Td2FwSW50ZXJ2YWwoKSk7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50ZXJ2YWwoKSk7Ci0K
LSAgICBtUHJlc2VudEludGVydmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2YWwpOwot
ICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IHRydWU7Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6
Z2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlRm9ybWF0Owot
fQotCi1FR0xlbnVtIFN1cmZhY2U6OmdldFRleHR1cmVUYXJnZXQoKSBjb25zdAotewotICAgIHJl
dHVybiBtVGV4dHVyZVRhcmdldDsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRCb3VuZFRleHR1cmUo
Z2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAgICBtVGV4dHVyZSA9IHRleHR1cmU7Ci19Ci0K
LWdsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1UZXh0dXJlOwotfQotCi1EM0RGT1JNQVQgU3VyZmFjZTo6Z2V0Rm9ybWF0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsKLX0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQwYmQ3MDIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gU3VyZmFjZS5oOiBEZWZpbmVzIHRoZSBlZ2w6
OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQotLy8gc3VjaCBh
cyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBidWZmZXJz
LgotLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtF
R0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCi0KLSNpZm5kZWYgSU5DTFVERV9TVVJGQUNFX0hf
Ci0jZGVmaW5lIElOQ0xVREVfU1VSRkFDRV9IXwotCi0jZGVmaW5lIEVHTEFQSQotI2luY2x1ZGUg
PEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFRleHR1cmUyRDsKLX0KLQotbmFtZXNw
YWNlIGVnbAotewotY2xhc3MgRGlzcGxheTsKLWNsYXNzIENvbmZpZzsKLQotY2xhc3MgU3VyZmFj
ZQotewotICBwdWJsaWM6Ci0gICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0
ZWQpOwotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25maWcgKmNv
bmZpZywgSEFORExFIHNoYXJlSGFuZGxlLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQsIEVH
TGVudW0gdGV4dHVyZUZvcm1hdCwgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0KTsKLQotICAgIH5TdXJm
YWNlKCk7Ci0KLSAgICBib29sIGluaXRpYWxpemUoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAg
ICBib29sIHJlc2V0U3dhcENoYWluKCk7Ci0KLSAgICBIV05EIGdldFdpbmRvd0hhbmRsZSgpOwot
ICAgIGJvb2wgc3dhcCgpOwotICAgIGJvb2wgcG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwgRUdMaW50
IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIEVHTGludCBn
ZXRXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBFR0xpbnQgaXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2
aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB2aXJ0dWFs
IElEaXJlY3QzRFRleHR1cmU5ICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICBIQU5ETEUg
Z2V0U2hhcmVIYW5kbGUoKSB7IHJldHVybiBtU2hhcmVIYW5kbGU7IH0KLQotICAgIHZvaWQgc2V0
U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCk7Ci0gICAgYm9vbCBjaGVja0Zvck91dE9mRGF0
ZVN3YXBDaGFpbigpOyAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzd2FwY2hhaW4gY2hhbmdlZCBkdWUg
dG8gcmVzaXplIG9yIGludGVydmFsIHVwZGF0ZQotCi0gICAgdmlydHVhbCBFR0xlbnVtIGdldFRl
eHR1cmVGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEVHTGVudW0gZ2V0VGV4dHVyZVRhcmdl
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEZvcm1hdCgpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKTsK
LSAgICB2aXJ0dWFsIGdsOjpUZXh0dXJlMkQgKmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKLQotICAgIERp
c3BsYXkgKmNvbnN0IG1EaXNwbGF5OwotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKm1Td2FwQ2hh
aW47Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1CYWNrQnVmZmVyOwotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICptRGVwdGhTdGVuY2lsOwotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBtUmVuZGVyVGFy
Z2V0OwotICAgIElEaXJlY3QzRFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVyZTsKLQotICAgIEhB
TkRMRSBtU2hhcmVIYW5kbGU7Ci0KLSAgICB2b2lkIHN1YmNsYXNzV2luZG93KCk7Ci0gICAgdm9p
ZCB1bnN1YmNsYXNzV2luZG93KCk7Ci0gICAgYm9vbCByZXNldFN3YXBDaGFpbihpbnQgYmFja2J1
ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7Ci0gICAgYm9vbCBzd2FwUmVjdChFR0xp
bnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0gICAgc3RhdGlj
IERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOwotCi0gICAgY29uc3QgSFdO
RCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGF0IHRoZSBzdXJmYWNlIGlzIGNyZWF0
ZWQgZm9yLgotICAgIGJvb2wgbVdpbmRvd1N1YmNsYXNzZWQ7ICAgICAgICAvLyBJbmRpY2F0ZXMg
d2hldGhlciB3ZSBzdWNjZXNzZnVsbHkgc3ViY2xhc3NlZCBtV2luZG93IGZvciBXTV9SRVNJWkUg
aG9va2luZwotICAgIGNvbnN0IGVnbDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wgY29uZmln
IHN1cmZhY2Ugd2FzIGNyZWF0ZWQgd2l0aAotICAgIEVHTGludCBtSGVpZ2h0OyAgICAgICAgICAg
ICAgICAvLyBIZWlnaHQgb2Ygc3VyZmFjZQotICAgIEVHTGludCBtV2lkdGg7ICAgICAgICAgICAg
ICAgICAvLyBXaWR0aCBvZiBzdXJmYWNlCi0vLyAgRUdMaW50IGhvcml6b250YWxSZXNvbHV0aW9u
OyAgIC8vIEhvcml6b250YWwgZG90IHBpdGNoCi0vLyAgRUdMaW50IHZlcnRpY2FsUmVzb2x1dGlv
bjsgICAgIC8vIFZlcnRpY2FsIGRvdCBwaXRjaAotLy8gIEVHTEJvb2xlYW4gbGFyZ2VzdFBCdWZm
ZXI7ICAgICAvLyBJZiB0cnVlLCBjcmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxlCi0vLyAg
RUdMQm9vbGVhbiBtaXBtYXBUZXh0dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBoYXMgbWlw
bWFwcwotLy8gIEVHTGludCBtaXBtYXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAgbGV2ZWwg
dG8gcmVuZGVyIHRvCi0vLyAgRUdMZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8vIE11bHRp
c2FtcGxlIHJlc29sdmUgYmVoYXZpb3IKLSAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0aW87ICAg
ICAgLy8gRGlzcGxheSBhc3BlY3QgcmF0aW8KLSAgICBFR0xlbnVtIG1SZW5kZXJCdWZmZXI7ICAg
ICAgICAgLy8gUmVuZGVyIGJ1ZmZlcgotICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsgICAgICAg
ICAvLyBCdWZmZXIgc3dhcCBiZWhhdmlvcgotICAgIEVHTGVudW0gbVRleHR1cmVGb3JtYXQ7ICAg
ICAgICAvLyBGb3JtYXQgb2YgdGV4dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJlCi0gICAg
RUdMZW51bSBtVGV4dHVyZVRhcmdldDsgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTogMkQgb3Ig
bm8gdGV4dHVyZQotLy8gIEVHTGVudW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBBbHBoYSBm
b3JtYXQgZm9yIE9wZW5WRwotLy8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBD
b2xvciBzcGFjZSBmb3IgT3BlblZHCi0gICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7Ci0gICAgRUdM
aW50IG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwotICAgIAotICAgIERXT1JEIG1QcmVzZW50SW50
ZXJ2YWw7Ci0gICAgYm9vbCBtUHJlc2VudEludGVydmFsRGlydHk7Ci0gICAgZ2w6OlRleHR1cmUy
RCAqbVRleHR1cmU7Ci19OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0VfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4OWQyYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgx
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGxpYkVHTC5jcHA6IEltcGxlbWVudHMg
dGhlIGV4cG9ydGVkIEVHTCBmdW5jdGlvbnMuCi0KLSNpbmNsdWRlIDxleGNlcHRpb24+Ci0KLSNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUu
aCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXku
aCIKLQotCi1ib29sIHZhbGlkYXRlRGlzcGxheShlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCi17Ci0g
ICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFkaXNwbGF5
LT5pc0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9J
TklUSUFMSVpFRCwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IHZhbGlkYXRlQ29uZmlnKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmlnIGNvbmZpZykK
LXsKLSAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb25maWcoY29u
ZmlnKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgZmFsc2Up
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHZhbGlkYXRlQ29udGV4dChl
Z2w6OkRpc3BsYXkgKmRpc3BsYXksIGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIGlmICgh
dmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdXJmYWNlKGVnbDo6RGlzcGxh
eSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIGlmICghdmFsaWRhdGVE
aXNwbGF5KGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmICghZGlzcGxheS0+aXNWYWxpZFN1cmZhY2Uoc3VyZmFjZSkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWV4dGVybiAiQyIKLXsKLUVHTGludCBfX3N0ZGNhbGwgZWdsR2V0RXJy
b3Iodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIEVHTGludCBlcnJvciA9IGVnbDo6
Z2V0Q3VycmVudEVycm9yKCk7Ci0KLSAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1MpCi0gICAg
ewotICAgICAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihFR0xfU1VDQ0VTUyk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGVycm9yOwotfQotCi1FR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXREaXNwbGF5
KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQpCi17Ci0gICAgRVZFTlQoIihFR0xOYXRp
dmVEaXNwbGF5VHlwZSBkaXNwbGF5X2lkID0gMHglMC44cCkiLCBkaXNwbGF5X2lkKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVnbDo6RGlzcGxheTo6Z2V0RGlzcGxheShkaXNw
bGF5X2lkKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKLSAgICB9Ci19
Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVH
TGludCAqbWFqb3IsIEVHTGludCAqbWlub3IpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRw
eSA9IDB4JTAuOHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9yID0gMHgl
MC44cCkiLAotICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBFR0xfRkFM
U0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOwotICAgICAg
ICBpZiAobWlub3IpICptaW5vciA9IDQ7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RS
VUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbFRlcm1pbmF0ZShFR0xEaXNwbGF5IGRweSkKLXsKLSAgICBFVkVO
VCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCkiLCBkcHkpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAoZHB5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKLQotICAgICAgICBkaXNwbGF5LT50ZXJtaW5hdGUoKTsKLQotICAgICAgICByZXR1
cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwot
ICAgIH0KLX0KLQotY29uc3QgY2hhciAqX19zdGRjYWxsIGVnbFF1ZXJ5U3RyaW5nKEVHTERpc3Bs
YXkgZHB5LCBFR0xpbnQgbmFtZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHgl
MC44cCwgRUdMaW50IG5hbWUgPSAlZCkiLCBkcHksIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkq
PihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRj
aCAobmFtZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRUdMX0NMSUVOVF9BUElTOgotICAg
ICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoIk9wZW5HTF9FUyIpOwotICAgICAgICAgIGNhc2UgRUdM
X0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gZGlzcGxheS0+Z2V0RXh0ZW5zaW9uU3Ry
aW5nKCk7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVORE9SOgotICAgICAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoIkdvb2dsZSBJbmMuIik7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVSU0lPTjoKLSAgICAg
ICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKEFOR0xFICJWRVJTSU9OX1NUUklORyIpIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIChjb25z
dCBjaGFyKilOVUxMKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChjb25zdCBjaGFyKilOVUxMKTsK
LSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxh
eSBkcHksIEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51
bV9jb25maWcpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENv
bmZpZyAqY29uZmlncyA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiRUdMaW50IGNvbmZpZ19zaXpl
ID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGNv
bmZpZ3MsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
bnVtX2NvbmZpZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
UEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgRUdMaW50
IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07Ci0KLSAgICAgICAgaWYgKCFkaXNwbGF5LT5n
ZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJpYkxpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBF
R0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRweSwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmlnX3NpemUsIEVH
TGludCAqbnVtX2NvbmZpZykKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44
cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiRUdM
Q29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZpZ19zaXplID0gJWQsIEVHTGlu
dCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGF0dHJpYl9saXN0LCBj
b25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IW51bV9jb25maWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IEVHTGlu
dCBhdHRyaWJMaXN0W10gPSAgICB7RUdMX05PTkV9OwotCi0gICAgICAgIGlmICghYXR0cmliX2xp
c3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYl9saXN0ID0gYXR0cmliTGlzdDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGRpc3BsYXktPmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliX2xp
c3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhF
R0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQot
RUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsR2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQotewotICAg
IEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHgl
MC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAot
ICAgICAgICAgIGRweSwgY29uZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZp
ZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZpZ0F0dHJpYihjb25maWcsIGF0dHJpYnV0
ZSwgdmFsdWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
VFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3VjY2Vz
cyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0K
LQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlV2luZG93U3VyZmFjZShFR0xEaXNwbGF5
IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4sIGNvbnN0IEVH
TGludCAqYXR0cmliX2xpc3QpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiA9
IDB4JTAuOHAsICIKLSAgICAgICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAu
OHApIiwgZHB5LCBjb25maWcsIHdpbiwgYXR0cmliX2xpc3QpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkq
PihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29uZmlnKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAgICAgICB9
Ci0KLSAgICAgICAgSFdORCB3aW5kb3cgPSAoSFdORCl3aW47Ci0KLSAgICAgICAgaWYgKCFJc1dp
bmRvdyh3aW5kb3cpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9OQVRJVkVfV0lORE9XLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gZGlzcGxheS0+Y3JlYXRlV2luZG93U3VyZmFjZSh3aW5kb3csIGNvbmZpZywgYXR0cmli
X2xpc3QpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLX0K
LQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxh
eSBkcHksIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0g
ICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAw
eCUwLjhwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAotICAgICAgICAg
IGRweSwgY29uZmlnLCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0K
LSAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZGlzcGxheS0+Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShjb25maWcsIE5VTEwsIGF0
dHJpYl9saXN0KTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9
Ci19Ci0KLUVHTFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVBpeG1hcFN1cmZhY2UoRUdMRGlz
cGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwLCBj
b25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkg
PSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlUGl4bWFwVHlw
ZSBwaXhtYXAgPSAweCUwLjhwLCAiCi0gICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xp
c3QgPSAweCUwLjhwKSIsIGRweSwgY29uZmlnLCBwaXhtYXAsIGF0dHJpYl9saXN0KTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8
ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3Bs
YXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFD
RTsKLSAgICAgICAgfQotCi0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0g
ICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bERlc3Ryb3lTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UpCi17Ci0g
ICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9
IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAg
ICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNl
Kj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWds
U3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGRpc3BsYXktPmRlc3Ryb3lTdXJmYWNlKChlZ2w6OlN1cmZh
Y2UqKXN1cmZhY2UpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3Rk
Y2FsbCBlZ2xRdWVyeVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwg
RUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0
dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwg
c3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0g
ICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7
Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBF
R0xfVkdfQUxQSEFfRk9STUFUOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNF
OgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6Ci0gICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RUdMX0hFSUdIVDoKLSAgICAgICAgICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmdldEhlaWdodCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfSE9SSVpPTlRBTF9SRVNP
TFVUSU9OOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9MQVJHRVNUX1BCVUZGRVI6Ci0gICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRUdMX01JUE1BUF9URVhUVVJFOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9N
SVBNQVBfTEVWRUw6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX01VTFRJU0FNUExFX1JFU09MVkU6
Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1BJWEVMX0FTUEVDVF9SQVRJTzoKLSAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBFR0xfUkVOREVSX0JVRkZFUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfU1dBUF9C
RUhBVklPUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9GT1JNQVQ6Ci0gICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfVEFSR0VUOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9W
RVJUSUNBTF9SRVNPTFVUSU9OOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9XSURUSDoKLSAgICAg
ICAgICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgotICAg
ICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdM
X0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5U3VyZmFj
ZVBvaW50ZXJBTkdMRShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQg
YXR0cmlidXRlLCB2b2lkICoqdmFsdWUpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUg
PSAlZCwgdm9pZCAqKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgc3VyZmFjZSwg
YXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVn
bDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7Ci0KLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
c3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAoYXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xfRDNEX1RF
WFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFOgotICAgICAgICAgICAgKnZhbHVlID0gKHZvaWQq
KSBlZ2xTdXJmYWNlLT5nZXRTaGFyZUhhbmRsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVU
RSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9U
UlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xC
b29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kQVBJKEVHTGVudW0gYXBpKQotewotICAgIEVWRU5UKCIo
RUdMZW51bSBhcGkgPSAweCVYKSIsIGFwaSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoYXBpKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0FQSToKLSAg
ICAgICAgICBjYXNlIEVHTF9PUEVOVkdfQVBJOgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOyAgIC8vIE5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBp
bXBsZW1lbnRhdGlvbgotICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9FU19BUEk6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWds
OjpzZXRDdXJyZW50QVBJKGFwaSk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTGVudW0g
X19zdGRjYWxsIGVnbFF1ZXJ5QVBJKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIEVHTGVudW0gQVBJID0gZWdsOjpnZXRDdXJyZW50QVBJKCk7Ci0K
LSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoQVBJKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xpZW50KHZv
aWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbFJlbGVhc2VUaHJlYWQodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZWdsTWFrZUN1cnJlbnQoRUdMX05PX0RJU1BMQVksIEVHTF9O
T19DT05URVhULCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UpOwotCi0gICAgICAgIHJl
dHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7
Ci0gICAgfQotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQYnVmZmVyRnJvbUNs
aWVudEJ1ZmZlcihFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBidWZ0eXBlLCBFR0xDbGllbnRCdWZm
ZXIgYnVmZmVyLCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQot
ewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xlbnVtIGJ1ZnR5cGUg
PSAweCVYLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyID0gMHglMC44cCwgIgotICAgICAgICAgICJF
R0xDb25maWcgY29uZmlnID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4
JTAuOHApIiwKLSAgICAgICAgICBkcHksIGJ1ZnR5cGUsIGJ1ZmZlciwgY29uZmlnLCBhdHRyaWJf
bGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9
IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0
ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
RUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVmdHlwZSAhPSBFR0xf
RDNEX1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFIHx8ICFidWZmZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZB
Q0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZU9mZnNjcmVl
blN1cmZhY2UoY29uZmlnLCAoSEFORExFKWJ1ZmZlciwgYXR0cmliX2xpc3QpOwotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0
ZGNhbGwgZWdsU3VyZmFjZUF0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNl
LCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgdmFsdWUpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBh
dHRyaWJ1dGUgPSAlZCwgRUdMaW50IHZhbHVlID0gJWQpIiwKLSAgICAgICAgICBkcHksIHN1cmZh
Y2UsIGF0dHJpYnV0ZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAg
ICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihz
dXJmYWNlKTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBlZ2xTdXJm
YWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAg
fQotCi0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVy
biBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0g
ICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxh
eSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKLXsKLSAgICBFVkVOVCgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwg
RUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpE
aXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1
cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnVmZmVyICE9IEVHTF9CQUNL
X0JVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFS
QU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0g
RUdMX05PX1NVUkZBQ0UgfHwgZWdsU3VyZmFjZS0+Z2V0V2luZG93SGFuZGxlKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWdsU3VyZmFjZS0+Z2V0Qm91bmRUZXh0dXJlKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FDQ0VTUywgRUdM
X0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5nZXRUZXh0dXJl
Rm9ybWF0KCkgPT0gRUdMX05PX1RFWFRVUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFnbEJpbmRUZXhJbWFnZShlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
RkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFzZVRleElt
YWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpCi17
Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFj
ZSA9IDB4JTAuOHAsIEVHTGludCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3Vy
ZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAgIGlm
ICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJ1ZmZl
ciAhPSBFR0xfQkFDS19CVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFIHx8IGVnbFN1cmZhY2UtPmdldFdpbmRvd0hhbmRs
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNF
LCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2UtPmdldFRl
eHR1cmVGb3JtYXQoKSA9PSBFR0xfTk9fVEVYVFVSRSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gZWdsU3VyZmFjZS0+Z2V0Qm91bmRUZXh0dXJl
KCk7Ci0KLSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRleHR1
cmUtPnJlbGVhc2VUZXhJbWFnZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19
Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFN3YXBJbnRlcnZhbChFR0xEaXNwbGF5IGRweSwg
RUdMaW50IGludGVydmFsKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhw
LCBFR0xpbnQgaW50ZXJ2YWwgPSAlZCkiLCBkcHksIGludGVydmFsKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGVnbDo6U3VyZmFjZSAqZHJhd19zdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNl
Kj4oZWdsOjpnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSk7Ci0KLSAgICAgICAgaWYgKGRyYXdfc3Vy
ZmFjZSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkcmF3
X3N1cmZhY2UtPnNldFN3YXBJbnRlcnZhbChpbnRlcnZhbCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9
Ci19Ci0KLUVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUdMRGlzcGxheSBk
cHksIEVHTENvbmZpZyBjb25maWcsIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCwgY29uc3QgRUdM
aW50ICphdHRyaWJfbGlzdCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44
cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCA9
IDB4JTAuOHAsICIKLSAgICAgICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAu
OHApIiwgZHB5LCBjb25maWcsIHNoYXJlX2NvbnRleHQsIGF0dHJpYl9saXN0KTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRl
ZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KLSAgICAgICAgRUdMaW50IGNsaWVudF92
ZXJzaW9uID0gMTsKLSAgICAgICAgYm9vbCByZXNldF9ub3RpZmljYXRpb24gPSBmYWxzZTsKLSAg
ICAgICAgYm9vbCByb2J1c3RfYWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGF0dHJpYl9s
aXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEVHTGludCogYXR0cmlidXRl
ID0gYXR0cmliX2xpc3Q7IGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORTsgYXR0cmlidXRlICs9IDIp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVbMF0pCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfQ09OVEVYVF9DTElF
TlRfVkVSU0lPTjoKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50X3ZlcnNpb24gPSBhdHRyaWJ1
dGVbMV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBFR0xfQ09OVEVYVF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVbMV0gPT0gRUdMX1RSVUUpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgRUdM
X05PX0NPTlRFWFQpOyAgIC8vIFVuaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJvYnVzdF9hY2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZVsxXSAhPSBFR0xfRkFMU0UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19D
T05URVhUKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlWzFdID09IEVHTF9MT1NFX0NPTlRFWFRf
T05fUkVTRVRfRVhUKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfbm90aWZpY2F0aW9u
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlWzFdICE9IEVH
TF9OT19SRVNFVF9OT1RJRklDQVRJT05fRVhUKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09OVEVYVCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGNsaWVudF92ZXJzaW9uICE9IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0NPTkZJRywgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHNoYXJlX2NvbnRleHQgJiYgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9j
b250ZXh0KS0+aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKSAhPSByZXNldF9ub3RpZmljYXRp
b24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBF
R0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFs
aWRhdGVDb25maWcoZGlzcGxheSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEVHTF9OT19DT05URVhUOwotICAgICAgICB9Ci0KLSAgICAgICAgRUdMQ29udGV4dCBjb250
ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGdsOjpDb250
ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2FjY2Vzcyk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250
ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhU
X0xPU1QsIEVHTF9OT19DT05URVhUKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19DT05U
RVhUKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbERlc3Ryb3lDb250ZXh0
KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsIGRweSwgY3R4KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0
ZUNvbnRleHQoZGlzcGxheSwgY29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3R4ID09IEVHTF9OT19DT05U
RVhUKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhU
LCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+ZGVzdHJveUNvbnRl
eHQoY29udGV4dCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRj
YWxsIGVnbE1ha2VDdXJyZW50KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIGRyYXcsIEVHTFN1
cmZhY2UgcmVhZCwgRUdMQ29udGV4dCBjdHgpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRw
eSA9IDB4JTAuOHAsIEVHTFN1cmZhY2UgZHJhdyA9IDB4JTAuOHAsIEVHTFN1cmZhY2UgcmVhZCA9
IDB4JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgZHJh
dywgcmVhZCwgY3R4KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0gICAgICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOwotCi0gICAg
ICAgIGlmICghZGV2aWNlIHx8IGRpc3BsYXktPnRlc3REZXZpY2VMb3N0KCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGRpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJl
dHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlzcGxheS0+aXNEZXZp
Y2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVY
VF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGN0eCAhPSBFR0xf
Tk9fQ09OVEVYVCAmJiAhdmFsaWRhdGVDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKChkcmF3ICE9IEVHTF9OT19TVVJGQUNFICYmICF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwg
c3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZHJhdykpKSB8fAotICAgICAgICAgICAgKHJlYWQg
IT0gRUdMX05PX1NVUkZBQ0UgJiYgIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBzdGF0aWNfY2Fz
dDxlZ2w6OlN1cmZhY2UqPihyZWFkKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
RUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRyYXcgIT0gcmVhZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgIH0K
LQotICAgICAgICBlZ2w6OnNldEN1cnJlbnREaXNwbGF5KGRweSk7Ci0gICAgICAgIGVnbDo6c2V0
Q3VycmVudERyYXdTdXJmYWNlKGRyYXcpOwotICAgICAgICBlZ2w6OnNldEN1cnJlbnRSZWFkU3Vy
ZmFjZShyZWFkKTsKLQotICAgICAgICBnbE1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3BsYXksIHN0
YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGRyYXcpKTsKLQotICAgICAgICByZXR1cm4gc3VjY2Vz
cyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0K
LQotRUdMQ29udGV4dCBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudENvbnRleHQodm9pZCkKLXsKLSAg
ICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgRUdMQ29udGV4dCBjb250
ZXh0ID0gZ2xHZXRDdXJyZW50Q29udGV4dCgpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKGNv
bnRleHQpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0NPTlRFWFQpOwotICAgIH0KLX0K
LQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMaW50IHJlYWRk
cmF3KQotewotICAgIEVWRU5UKCIoRUdMaW50IHJlYWRkcmF3ID0gJWQpIiwgcmVhZGRyYXcpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAocmVhZGRyYXcgPT0gRUdMX1JFQUQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVHTFN1cmZhY2UgcmVhZCA9IGVnbDo6Z2V0Q3VycmVudFJlYWRT
dXJmYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhyZWFkKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChyZWFkZHJhdyA9PSBFR0xfRFJBVykKLSAgICAgICAgewotICAgICAg
ICAgICAgRUdMU3VyZmFjZSBkcmF3ID0gZWdsOjpnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKLSAg
ICAgICAgICAgIHJldHVybiBzdWNjZXNzKGRyYXcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBF
R0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19T
VVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTERpc3BsYXkgX19zdGRjYWxsIGVnbEdldEN1cnJlbnRE
aXNwbGF5KHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIEVHTERpc3BsYXkgZHB5ID0gZWdsOjpnZXRDdXJyZW50RGlzcGxheSgpOwotCi0gICAgICAg
IHJldHVybiBzdWNjZXNzKGRweSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fRElTUExB
WSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeUNvbnRleHQoRUdM
RGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4LCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZh
bHVlKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb250ZXh0
IGN0eCA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4
JTAuOHApIiwKLSAgICAgICAgICBkcHksIGN0eCwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb250ZXh0
KGRpc3BsYXksIGNvbnRleHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZB
TFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0K
LSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdEdMKHZvaWQpCi17
Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxs
IGVnbFdhaXROYXRpdmUoRUdMaW50IGVuZ2luZSkKLXsKLSAgICBFVkVOVCgiKEVHTGludCBlbmdp
bmUgPSAlZCkiLCBlbmdpbmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2Fs
bCBlZ2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQotewot
ICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2Ug
PSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0g
ICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7
Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZGlzcGxheS0+aXNEZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZWdsU3VyZmFjZS0+c3dhcCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9GQUxTRTsKLX0KLQot
RUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1
cmZhY2Ugc3VyZmFjZSwgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpCi17Ci0gICAgRVZFTlQo
IihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAs
IEVHTE5hdGl2ZVBpeG1hcFR5cGUgdGFyZ2V0ID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UsIHRh
cmdldCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9
IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAq
ZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAg
ICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGRpc3BsYXktPmlzRGV2aWNlTG9zdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDAp
OwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xl
YW4gX19zdGRjYWxsIGVnbFBvc3RTdWJCdWZmZXJOVihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFj
ZSBzdXJmYWNlLCBFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdo
dCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBz
dXJmYWNlID0gMHglMC44cCwgRUdMaW50IHggPSAlZCwgRUdMaW50IHkgPSAlZCwgRUdMaW50IHdp
ZHRoID0gJWQsIEVHTGludCBoZWlnaHQgPSAlZCkiLCBkcHksIHN1cmZhY2UsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoeCA8IDAgfHwgeSA8IDAg
fHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6
U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3Bs
YXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNF
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZB
TFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNF
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBF
R0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2UtPnBvc3RTdWJC
dWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdM
X0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1fX2VnbE11c3RD
YXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBlZ2xHZXRQcm9jQWRkcmVz
cyhjb25zdCBjaGFyICpwcm9jbmFtZSkKLXsKLSAgICBFVkVOVCgiKGNvbnN0IGNoYXIgKnByb2Nu
YW1lID0gXCIlc1wiKSIsIHByb2NuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3Ry
dWN0IEV4dGVuc2lvbgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOwot
ICAgICAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRy
ZXNzOwotICAgICAgICB9OwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24gZWdsRXh0
ZW5zaW9uc1tdID0KLSAgICAgICAgewotICAgICAgICAgICAgeyJlZ2xRdWVyeVN1cmZhY2VQb2lu
dGVyQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xR
dWVyeVN1cmZhY2VQb2ludGVyQU5HTEV9LAotICAgICAgICAgICAgeyJlZ2xQb3N0U3ViQnVmZmVy
TlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xQb3N0U3Vi
QnVmZmVyTlZ9LAotICAgICAgICAgICAgeyIiLCBOVUxMfSwKLSAgICAgICAgfTsKLQotICAgICAg
ICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2YoZWdsRXh0ZW5zaW9ucykgLyBzaXplb2Yo
RXh0ZW5zaW9uKTsgZXh0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAocHJv
Y25hbWUsIGVnbEV4dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSllZ2xFeHRlbnNpb25zW2V4dF0uYWRkcmVzczsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBnbEdldFByb2NBZGRyZXNzKHByb2NuYW1lKTsKLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKU5V
TEwpOwotICAgIH0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
bGliRUdMLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNWU2Ny4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5kZWYKKysr
IC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1MSUJSQVJZCWxpYkVHTAotRVhQT1JUUwotCWVn
bEJpbmRBUEkgICAgICAgICAgICAgICAgICAgICAgQDE0Ci0JZWdsQmluZFRleEltYWdlICAgICAg
ICAgICAgICAgICBAMjAKLQllZ2xDaG9vc2VDb25maWcgICAgICAgICAgICAgICAgIEA3Ci0JZWds
Q29weUJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzMKLQllZ2xDcmVhdGVDb250ZXh0ICAgICAg
ICAgICAgICAgIEAyMwotCWVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAgICAgICBA
MTgKLQllZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZSAgICAgICAgIEAxMAotCWVnbENyZWF0ZVBpeG1h
cFN1cmZhY2UgICAgICAgICAgQDExCi0JZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAgICAgICBA
OQotCWVnbERlc3Ryb3lDb250ZXh0ICAgICAgICAgICAgICAgQDI0Ci0JZWdsRGVzdHJveVN1cmZh
Y2UgICAgICAgICAgICAgICBAMTIKLQllZ2xHZXRDb25maWdBdHRyaWIgICAgICAgICAgICAgIEA4
Ci0JZWdsR2V0Q29uZmlncyAgICAgICAgICAgICAgICAgICBANgotCWVnbEdldEN1cnJlbnRDb250
ZXh0ICAgICAgICAgICAgQDI2Ci0JZWdsR2V0Q3VycmVudERpc3BsYXkgICAgICAgICAgICBAMjgK
LQllZ2xHZXRDdXJyZW50U3VyZmFjZSAgICAgICAgICAgIEAyNwotCWVnbEdldERpc3BsYXkgICAg
ICAgICAgICAgICAgICAgQDIKLQllZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgIEAxCi0J
ZWdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICBAMzQKLQllZ2xJbml0aWFsaXplICAgICAg
ICAgICAgICAgICAgIEAzCi0JZWdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICBAMjUKLQll
Z2xRdWVyeUFQSSAgICAgICAgICAgICAgICAgICAgIEAxNQotCWVnbFF1ZXJ5Q29udGV4dCAgICAg
ICAgICAgICAgICAgQDI5Ci0JZWdsUXVlcnlTdHJpbmcgICAgICAgICAgICAgICAgICBANQotCWVn
bFF1ZXJ5U3VyZmFjZSAgICAgICAgICAgICAgICAgQDEzCi0JZWdsUmVsZWFzZVRleEltYWdlICAg
ICAgICAgICAgICBAMjEKLQllZ2xSZWxlYXNlVGhyZWFkICAgICAgICAgICAgICAgIEAxNwotCWVn
bFN1cmZhY2VBdHRyaWIgICAgICAgICAgICAgICAgQDE5Ci0JZWdsU3dhcEJ1ZmZlcnMgICAgICAg
ICAgICAgICAgICBAMzIKLQllZ2xTd2FwSW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAyMgotCWVn
bFRlcm1pbmF0ZSAgICAgICAgICAgICAgICAgICAgQDQKLQllZ2xXYWl0Q2xpZW50ICAgICAgICAg
ICAgICAgICAgIEAxNgotCWVnbFdhaXRHTCAgICAgICAgICAgICAgICAgICAgICAgQDMwCi0JZWds
V2FpdE5hdGl2ZSAgICAgICAgICAgICAgICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVH
TC5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDFmMzJmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjCisrKyAvZGV2L251bGwKQEAgLTEs
MTAyICswLDAgQEAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBz
Y3JpcHQuCi0vLwotI2luY2x1ZGUgInJlc291cmNlLmgiCi0KLSNkZWZpbmUgQVBTVFVESU9fUkVB
RE9OTFlfU1lNQk9MUwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5lcmF0ZWQgZnJv
bSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KLS8vCi0jaW5jbHVkZSA8d2luZG93cy5oPgot
I2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0j
dW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0Vf
RExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdVQUdFIExB
TkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQot
I2VuZGlmIC8vX1dJTjMyCi0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8KLS8vIFRFWFRJTkNMVURFCi0vLwotCi0xIFRFWFRJTkNMVURFIAotQkVHSU4K
LSAgICAicmVzb3VyY2UuaFwwIgotRU5ECi0KLTIgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICIj
aW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1vbi92ZXJz
aW9uLmgiIlwwIgotRU5ECi0KLTMgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJcclxuIgotICAg
ICJcMCIKLUVORAotCi0jZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAotCi0KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLwotLy8gVmVyc2lvbgotLy8KLQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJ
T05JTkZPCi0gRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZF
UlNJT04sQlVJTERfUkVWSVNJT04KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9S
X1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTgotIEZJTEVGTEFHU01BU0sgMHgx
N0wKLSNpZmRlZiBfREVCVUcKLSBGSUxFRkxBR1MgMHgxTAotI2Vsc2UKLSBGSUxFRkxBR1MgMHgw
TAotI2VuZGlmCi0gRklMRU9TIDB4NEwKLSBGSUxFVFlQRSAweDJMCi0gRklMRVNVQlRZUEUgMHgw
TAotQkVHSU4KLSAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCi0gICAgQkVHSU4KLSAgICAgICAg
QkxPQ0sgIjA0MDkwNGIwIgotICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUgIkZpbGVE
ZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnkiCi0gICAgICAg
ICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFM
VUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5
cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgotICAgICAgICAgICAgVkFM
VUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliRUdMLmRsbCIKLSAgICAgICAgICAgIFZBTFVFICJQ
cml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RO
YW1lIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAgICAgIFZB
TFVFICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgIEVORAotICAgIEVO
RAotICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBWQUxVRSAiVHJh
bnNsYXRpb24iLCAweDQwOSwgMTIwMAotICAgIEVORAotRU5ECi0KLSNlbmRpZiAgICAvLyBFbmds
aXNoIChVLlMuKSByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0jaWZuZGVm
IEFQU1RVRElPX0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVk
IGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0jZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvaiBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDAyZDI5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML2xpYkVHTC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw0NDMgKzAs
MCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Ci08Vmlz
dWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgotCVZlcnNpb249Ijku
MDAiCi0JTmFtZT0ibGliRUdMIgotCVByb2plY3RHVUlEPSJ7RTc0NkZDQTktNjRDMy00MzNFLTg1
RTgtOUE1QTY3QUI3RUQ2fSIKLQlSb290TmFtZXNwYWNlPSJsaWJFR0wiCi0JS2V5d29yZD0iV2lu
MzJQcm9qIgotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiIKLQk+Ci0JPFBsYXRmb3Jt
cz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJLz4KLQkJPFBsYXRmb3JtCi0JCQlO
YW1lPSJ4NjQiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8L1Rvb2xGaWxl
cz4KLQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJEZWJ1Z3xX
aW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25O
YW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0J
CQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNY
TUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2Vy
dmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlE
TFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFBy
b2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vz
c29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBP
UlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5pbWFsUmVidWls
ZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9
IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0Igot
CQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0
NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIK
LQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvU0FG
RVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBkeGd1aWQubGliIGR3
bWFwaS5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIgotCQkJCU1vZHVsZURlZmluaXRpb25G
aWxlPSJsaWJFR0wuZGVmIgotCQkJCURlbGF5TG9hZERMTHM9ImR3bWFwaS5kbGwiCi0JCQkJR2Vu
ZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlSYW5k
b21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0J
CQkJVGFyZ2V0TWFjaGluZT0iMSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5k
TGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5c
bGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChP
dXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENv
bmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxs
aWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0
aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4K
LQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXxX
aW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25O
YW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0J
CQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJv
Z3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWls
ZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlJ
bmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y
aWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJ
QkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1ND
TD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIw
IgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEw
MDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyIgotCQkJCURldGVjdDY0Qml0UG9y
dGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIK
LQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFu
YWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNS
ZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlu
a0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJ
CQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2ll
cz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21hcGkubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0i
MSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJCQlEZWxheUxvYWRE
TExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJ
CQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJsZUNP
TURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFF
eGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjEiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVp
bGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIg
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsm
I3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wuZGxsJnF1b3Q7ICZxdW90OyQo
UHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4
MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3RE
aXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hv
IG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3Vy
YXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlv
bkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlh
dGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNv
bmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERh
dGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNl
UHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9v
bCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4v
aW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5E
T1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlO
TUFYIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0i
MyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIK
LQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7
NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRh
YmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0J
CQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFn
ZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVz
b3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtF
dmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJ
QWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9
ImQzZDkubGliIGR4Z3VpZC5saWIgZHdtYXBpLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIi
Ci0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiCi0JCQkJRGVsYXlMb2FkRExM
cz0iZHdtYXBpLmRsbCIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJ
U3ViU3lzdGVtPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhl
Y3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWls
ZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAm
cXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYj
eDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gw
QTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERp
cikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8g
b2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJh
dGlvbgotCQkJTmFtZT0iUmVsZWFzZXx4NjQiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRp
b25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRp
YXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlD
b25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJvZ3Jh
bU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2
ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkJVGFyZ2V0RW52aXJvbm1l
bnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CU9wdGltaXphdGlvbj0iMiIKLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIKLQkJCQlB
ZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3RE
aXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05E
RUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJF
Q0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJ
CVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNh
YmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0
NzAyIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVi
dWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0J
CQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21hcGkubGli
IgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGli
RUdMLmRlZiIKLQkJCQlEZWxheUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVyYXRlRGVi
dWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVSZWZl
cmVuY2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXplZEJh
c2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdl
dE1hY2hpbmU9IjE3IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRMaW5lPSJA
ZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilc
bGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJh
dGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5s
aWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1l
KVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgotCQk8L0Nv
bmZpZ3VyYXRpb24+Ci0JPC9Db25maWd1cmF0aW9ucz4KLQk8UmVmZXJlbmNlcz4KLQk8L1JlZmVy
ZW5jZXM+Ci0JPEZpbGVzPgotCQk8RmlsdGVyCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiCi0JCQlG
aWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgotCQkJVW5p
cXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCi0J
CQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxDb21tb25cZGVidWcuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpc3Bs
YXkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XGxpYkVHTC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii5cbWFpbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cU3VyZmFjZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQkJ
PEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07
aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4
RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXENv
bmZpZy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XERpc3BsYXkuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdMXGVnbGV4dC5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxl
Z2xwbGF0Zm9ybS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXG1haW4uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxyZXNvdXJjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXFN1cmZhY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXHZlcnNpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CTwvRmlsdGVyPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkVHTC5kZWYiCi0JCQk+
Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wucmMiCi0JCQk+
Ci0JCTwvRmlsZT4KLQk8L0ZpbGVzPgotCTxHbG9iYWxzPgotCTwvR2xvYmFscz4KLTwvVmlzdWFs
U3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbWFpbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzEwN2JmLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5jcHA6IERM
TCBlbnRyeSBwb2ludCBhbmQgbWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQotI2lu
Y2x1ZGUgImxpYkVHTC9tYWluLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotc3Rh
dGljIERXT1JEIGN1cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7Ci0KLUJPT0wgV0lOQVBJ
IERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZl
ZCkKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikKLSAgICB7Ci0gICAgICBjYXNlIERMTF9QUk9DRVNT
X0FUVEFDSDoKLSAgICAgICAgewotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpCi0g
ICAgICAgICAgICBGSUxFICpkZWJ1ZyA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAicnQiKTsK
LQotICAgICAgICAgICAgaWYgKGRlYnVnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZjbG9zZShkZWJ1Zyk7Ci0gICAgICAgICAgICAgICAgZGVidWcgPSBmb3BlbihUUkFDRV9PVVRQ
VVRfRklMRSwgInd0Iik7ICAgLy8gRXJhc2UKLSAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcp
OwotICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNB
bGxvYygpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVY
RVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6
ZSBpbmRleAotICAgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewotICAgICAg
ICAgICAgZWdsOjpDdXJyZW50ICpjdXJyZW50ID0gKGVnbDo6Q3VycmVudCopTG9jYWxBbGxvYyhM
UFRSLCBzaXplb2YoZWdsOjpDdXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1
cnJlbnQpOwotCi0gICAgICAgICAgICAgICAgY3VycmVudC0+ZXJyb3IgPSBFR0xfU1VDQ0VTUzsK
LSAgICAgICAgICAgICAgICBjdXJyZW50LT5BUEkgPSBFR0xfT1BFTkdMX0VTX0FQSTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAgICAgICAg
ICAgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgICAg
ICAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFD
SDoKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNI
OgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3Vy
cmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBUbHNGcmVlKGN1cnJlbnRUTFMpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLXZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGlu
dCBlcnJvcikKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVl
KGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+ZXJyb3IgPSBlcnJvcjsKLX0KLQotRUdMaW50
IGdldEN1cnJlbnRFcnJvcigpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilU
bHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5lcnJvcjsKLX0K
LQotdm9pZCBzZXRDdXJyZW50QVBJKEVHTGVudW0gQVBJKQotewotICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5B
UEkgPSBBUEk7Ci19Ci0KLUVHTGVudW0gZ2V0Q3VycmVudEFQSSgpCi17Ci0gICAgQ3VycmVudCAq
Y3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVy
biBjdXJyZW50LT5BUEk7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBk
cHkpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJy
ZW50VExTKTsKLQotICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBkcHk7Ci19Ci0KLUVHTERpc3BsYXkg
Z2V0Q3VycmVudERpc3BsYXkoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCop
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsK
LX0KLQotdm9pZCBzZXRDdXJyZW50RHJhd1N1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKQotewot
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7
Ci0KLSAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IHN1cmZhY2U7Ci19Ci0KLUVHTFN1cmZhY2Ug
Z2V0Q3VycmVudERyYXdTdXJmYWNlKCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJl
bnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmRyYXdT
dXJmYWNlOwotfQotCi12b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1cmZh
Y2UpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJy
ZW50VExTKTsKLQotICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gc3VyZmFjZTsKLX0KLQotRUdM
U3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQg
PSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVu
dC0+cmVhZFN1cmZhY2U7Ci19Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29kZSkKLXsK
LSAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihlcnJvckNvZGUpOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML21haW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDA5ZDllNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L21haW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIG1haW4uaDogTWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQotI2lmbmRl
ZiBMSUJFR0xfTUFJTl9IXwotI2RlZmluZSBMSUJFR0xfTUFJTl9IXwotCi0jZGVmaW5lIEVHTEFQ
SQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Ci0KLW5hbWVz
cGFjZSBlZ2wKLXsKLXN0cnVjdCBDdXJyZW50Ci17Ci0gICAgRUdMaW50IGVycm9yOwotICAgIEVH
TGVudW0gQVBJOwotICAgIEVHTERpc3BsYXkgZGlzcGxheTsKLSAgICBFR0xTdXJmYWNlIGRyYXdT
dXJmYWNlOwotICAgIEVHTFN1cmZhY2UgcmVhZFN1cmZhY2U7Ci19OwotCi12b2lkIHNldEN1cnJl
bnRFcnJvcihFR0xpbnQgZXJyb3IpOwotRUdMaW50IGdldEN1cnJlbnRFcnJvcigpOwotCi12b2lk
IHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpOwotRUdMZW51bSBnZXRDdXJyZW50QVBJKCk7Ci0K
LXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpOwotRUdMRGlzcGxheSBnZXRD
dXJyZW50RGlzcGxheSgpOwotCi12b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNl
IHN1cmZhY2UpOwotRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKLQotdm9pZCBz
ZXRDdXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKLUVHTFN1cmZhY2UgZ2V0
Q3VycmVudFJlYWRTdXJmYWNlKCk7Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29kZSk7
Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdCBUICZlcnJvcihFR0xpbnQgZXJyb3JDb2RlLCBj
b25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0gICAgcmV0
dXJuIHJldHVyblZhbHVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPgotY29uc3QgVCAmc3VjY2Vz
cyhjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihFR0xf
U1VDQ0VTUyk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLSNlbmRpZiAgLy8gTElC
RUdMX01BSU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJF
R0wvcmVzb3VyY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvcmVzb3Vy
Y2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyMWY0Yy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML3Jlc291cmNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNCArMCwwIEBACi0vL3t7Tk9fREVQRU5ERU5DSUVTfX0KLS8vIE1pY3Jvc29m
dCBWaXN1YWwgQysrIGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUuCi0vLyBVc2VkIGJ5IGxpYkVHTC5y
YwotCi0vLyBOZXh0IGRlZmF1bHQgdmFsdWVzIGZvciBuZXcgb2JqZWN0cwotLy8gCi0jaWZkZWYg
QVBTVFVESU9fSU5WT0tFRAotI2lmbmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCi0jZGVm
aW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTAxCi0jZGVmaW5lIF9BUFNfTkVY
VF9DT01NQU5EX1ZBTFVFICAgICAgICAgNDAwMDEKLSNkZWZpbmUgX0FQU19ORVhUX0NPTlRST0xf
VkFMVUUgICAgICAgICAxMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9TWU1FRF9WQUxVRSAgICAgICAg
ICAgMTAxCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQmxpdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDhkNjku
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwNCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvQmxpdC5oIgotCi0jaW5jbHVkZSA8ZDNkeDkuaD4KLQotI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlCi17
Ci0vLyBTdGFuZGFyZCBWZXJ0ZXggU2hhZGVyCi0vLyBJbnB1dCAwIGlzIHRoZSBob21vZ2Vub3Vz
IHBvc2l0aW9uLgotLy8gT3V0cHV0cyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBhcy1pcy4KLS8v
IE91dHB1dHMgYSB0ZXggY29vcmQgd2l0aCAoMCwwKSBpbiB0aGUgdXBwZXItbGVmdCBjb3JuZXIg
b2YgdGhlIHNjcmVlbiBhbmQgKDEsMSkgaW4gdGhlIGJvdHRvbSByaWdodC4KLS8vIEMwLlggbXVz
dCBiZSBuZWdhdGl2ZSBoYWxmLXBpeGVsIHdpZHRoLCBDMC5ZIG11c3QgYmUgaGFsZi1waXhlbCBo
ZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KLWNvbnN0IGNoYXIgc3RhbmRhcmR2c1tdID0KLSJzdHJ1
Y3QgVlNfT1VUUFVUXG4iCi0ie1xuIgotIiAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTjtc
biIKLSIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgotIn07XG4iCi0iXG4iCi0i
dW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgotIlxuIgotIlZTX09VVFBVVCBt
YWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgotIntcbiIKLSIgICAgVlNfT1VU
UFVUIE91dDtcbiIKLSJcbiIKLSIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4
ZWxTaXplO1xuIgotIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgwLjUsIC0w
LjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0iICAgIHJl
dHVybiBPdXQ7XG4iCi0ifVxuIjsKLQotLy8gRmxpcCBZIFZlcnRleCBTaGFkZXIKLS8vIElucHV0
IDAgaXMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCi0vLyBPdXRwdXRzIHRoZSBob21vZ2Vub3Vz
IHBvc2l0aW9uIGFzLWlzLgotLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDEpIGluIHRo
ZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUgYm90dG9t
IHJpZ2h0LgotLy8gQzAuWFkgbXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQgaGVpZ2h0
LiBDMC5aVyBtdXN0IGJlIDAuCi1jb25zdCBjaGFyIGZsaXB5dnNbXSA9Ci0ic3RydWN0IFZTX09V
VFBVVFxuIgotIntcbiIKLSIgICAgZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT047XG4iCi0iICAg
IGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMDtcbiIKLSJ9O1xuIgotIlxuIgotInVuaWZvcm0g
ZmxvYXQ0IGhhbGZQaXhlbFNpemUgOiBjMDtcbiIKLSJcbiIKLSJWU19PVVRQVVQgbWFpbihpbiBm
bG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTilcbiIKLSJ7XG4iCi0iICAgIFZTX09VVFBVVCBPdXQ7
XG4iCi0iXG4iCi0iICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTtc
biIKLSIgICAgT3V0LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUsIDEuMCwg
MS4wKSArIGZsb2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0iICAgIHJldHVybiBPdXQ7
XG4iCi0ifVxuIjsKLQotLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHRl
eHR1cmUgMCBzYW1wbGVkIGF0IHRleGNvb3JkIDAuCi1jb25zdCBjaGFyIHBhc3N0aHJvdWdocHNb
XSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotImZsb2F0NCBtYWluKGZsb2F0NCB0
ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgotIntcbiIKLSIJcmV0dXJuIHRleDJEKHRl
eCwgdGV4Y29vcmQueHkpO1xuIgotIn1cbiI7Ci0KLS8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBp
eGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgotLy8gRm9yIExB
IG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8gRm9yIEwgb3V0cHV0
IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KLWNvbnN0IGNoYXIgbHVtaW5hbmNlcHNb
XSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0IG1vZGUg
OiBjMDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDAp
IDogQ09MT1JcbiIKLSJ7XG4iCi0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5
KTtcbiIKLSIJdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTtcbiIKLSIJcmV0dXJuIHRt
cC54eHh3O1xuIgotIn1cbiI7Ci0KLS8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRl
cgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdC
ID0gMCBhbmQvb3IgQSA9IDEuCi0vLyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90
aGVyd2lzZSBDMC5YID0gMS4KLS8vIFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcg
PSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcgPSAwLgotY29uc3QgY2hhciBjb21wb25lbnRt
YXNrcHNbXSA9Ci0ic2FtcGxlcjJEIHRleCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0
IG1vZGUgOiBjMDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDApIDogQ09MT1JcbiIKLSJ7XG4iCi0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNv
b3JkLnh5KTtcbiIKLSIJdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7XG4iCi0iCXRtcC53ID0g
dG1wLncgKiBtb2RlLnogKyBtb2RlLnc7XG4iCi0iCXJldHVybiB0bXA7XG4iCi0ifVxuIjsKLQot
fQotCi1uYW1lc3BhY2UgZ2wKLXsKLQotY29uc3QgY2hhciAqIGNvbnN0IEJsaXQ6Om1TaGFkZXJT
b3VyY2VbXSA9Ci17Ci0gICAgc3RhbmRhcmR2cywKLSAgICBmbGlweXZzLAotICAgIHBhc3N0aHJv
dWdocHMsCi0gICAgbHVtaW5hbmNlcHMsCi0gICAgY29tcG9uZW50bWFza3BzCi19OwotCi1CbGl0
OjpCbGl0KENvbnRleHQgKmNvbnRleHQpCi0gIDogbUNvbnRleHQoY29udGV4dCksIG1RdWFkVmVy
dGV4QnVmZmVyKE5VTEwpLCBtUXVhZFZlcnRleERlY2xhcmF0aW9uKE5VTEwpLCBtU2F2ZWRSZW5k
ZXJUYXJnZXQoTlVMTCksIG1TYXZlZERlcHRoU3RlbmNpbChOVUxMKSwgbVNhdmVkU3RhdGVCbG9j
ayhOVUxMKQotewotICAgIGluaXRHZW9tZXRyeSgpOwotICAgIG1lbXNldChtQ29tcGlsZWRTaGFk
ZXJzLCAwLCBzaXplb2YobUNvbXBpbGVkU2hhZGVycykpOwotfQotCi1CbGl0Ojp+QmxpdCgpCi17
Ci0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2spIG1TYXZlZFN0YXRlQmxvY2stPlJlbGVhc2UoKTsK
LSAgICBpZiAobVF1YWRWZXJ0ZXhCdWZmZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7
Ci0gICAgaWYgKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pIG1RdWFkVmVydGV4RGVjbGFyYXRpb24t
PlJlbGVhc2UoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBREVSX0NPVU5UOyBpKysp
Ci0gICAgewotICAgICAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tpXSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tpXS0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEJsaXQ6OmluaXRHZW9tZXRyeSgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGZs
b2F0IHF1YWRbXSA9Ci0gICAgewotICAgICAgICAtMSwgLTEsCi0gICAgICAgIC0xLCAgMSwKLSAg
ICAgICAgIDEsIC0xLAotICAgICAgICAgMSwgIDEKLSAgICB9OwotCi0gICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemVvZihxdWFkKSwgRDNEVVNBR0VfV1JJVEVPTkxZLCAw
LCBEM0RQT09MX0RFRkFVTFQsICZtUXVhZFZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHZvaWQgKmxvY2tQdHIg
PSBOVUxMOwotICAgIHJlc3VsdCA9IG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2Nr
UHRyLCAwKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSB8fCBsb2NrUHRyID09IE5VTEwpCi0g
ICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLQotICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXplb2YocXVh
ZCkpOwotICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgIHN0YXRpYyBjb25z
dCBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KLSAgICB7Ci0gICAgICAgIHsgMCwgMCwg
RDNEREVDTFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xVU0FHRV9Q
T1NJVElPTiwgMCB9LAotICAgICAgICBEM0RERUNMX0VORCgpCi0gICAgfTsKLQotICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRl
eERlY2xhcmF0aW9uKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KLWJvb2wgQmxpdDo6c2V0
U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAgICAg
ICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5OjoqY3JlYXRlU2hhZGVy
KShjb25zdCBEV09SRCAqLCBEM0RTaGFkZXJUeXBlKiopLAotICAgICAgICAgICAgICAgICAgICAg
SFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5
cGUqKSkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQot
ICAgIEQzRFNoYWRlclR5cGUgKnNoYWRlcjsKLQotICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW3Nv
dXJjZV0gIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHNoYWRlciA9IHN0YXRpY19jYXN0PEQzRFNo
YWRlclR5cGUqPihtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0pOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBJRDNEWEJ1ZmZlciAqc2hhZGVyQ29kZTsKLSAgICAgICAgSFJFU1VMVCBo
ciA9IEQzRFhDb21waWxlU2hhZGVyKG1TaGFkZXJTb3VyY2Vbc291cmNlXSwgc3RybGVuKG1TaGFk
ZXJTb3VyY2Vbc291cmNlXSksIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwgJnNoYWRl
ckNvZGUsIE5VTEwsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjb21waWxlICVzIHNoYWRlciBmb3IgYmxpdCBv
cGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaHIgPSAoZGV2
aWNlLT4qY3JlYXRlU2hhZGVyKShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KHNoYWRlckNvZGUt
PkdldEJ1ZmZlclBvaW50ZXIoKSksICZzaGFkZXIpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkK
LSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyQ29kZS0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQs
IGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgc2hhZGVyQ29kZS0+UmVsZWFzZSgp
OwotCi0gICAgICAgIG1Db21waWxlZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsKLSAgICB9Ci0K
LSAgICBIUkVTVUxUIGhyID0gKGRldmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKLQotICAgIGlm
IChGQUlMRUQoaHIpKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0ICVzIHNoYWRl
ciBmb3IgYmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNv
dXJjZSwgaHIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQmxpdDo6c2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsK
LSAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgbUNv
bnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiLCAmSURp
cmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0
VmVydGV4U2hhZGVyKTsKLX0KLQotYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBz
aGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNo
YWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18y
XzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0M0REZXZp
Y2U5OjpTZXRQaXhlbFNoYWRlcik7Ci19Ci0KLVJFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJlY3QoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0Ci17Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRl
c2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAg
cmVjdC5sZWZ0ID0gMDsKLSAgICByZWN0LnRvcCA9IDA7Ci0gICAgcmVjdC5yaWdodCA9IGRlc2Mu
V2lkdGg7Ci0gICAgcmVjdC5ib3R0b20gPSBkZXNjLkhlaWdodDsKLQotICAgIHJldHVybiByZWN0
OwotfQotCi1ib29sIEJsaXQ6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVy
ZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwgZ2V0U3VyZmFjZVJlY3Qoc291cmNlKSk7
Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgc2F2
ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0gICAgZGV2
aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hB
REVSX1ZTX1NUQU5EQVJEKTsKLSAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9V
R0gpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVy
U3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLSAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOwot
Ci0gICAgc2V0Vmlld3BvcnQoZ2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOwotCi0gICAgcmVu
ZGVyKCk7Ci0KLSAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3RhdGUoKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmNvcHkoSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQotewot
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRDNEU1VS
RkFDRV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc3REZXNjOwotICAg
IHNvdXJjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7Ci0gICAgZGVzdC0+R2V0RGVzYygmZGVzdERl
c2MpOwotCi0gICAgaWYgKHNvdXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZvcm1hdCAmJiBk
ZXN0RGVzYy5Vc2FnZSAmIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkgICAvLyBDYW4gdXNlIFN0cmV0
Y2hSZWN0Ci0gICAgewotICAgICAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQs
IHhvZmZzZXQgKyAoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCksIHlvZmZzZXQg
KyAoc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCl9OwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCAmc291cmNlUmVjdCwgZGVzdCwg
JmRlc3RSZWN0LCBEM0RURVhGX1BPSU5UKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2UsIHNvdXJjZVJl
Y3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OmZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFj
ZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQotewot
ICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291
cmNlLCBzb3VyY2VSZWN0KTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2
aWNlKCk7Ci0KLSAgICBzYXZlU3RhdGUoKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0
ZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKLQotICAgIHNl
dFZpZXdwb3J0KHNvdXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOwotCi0gICAgc2V0Q29tbW9u
QmxpdFN0YXRlKCk7Ci0gICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQp
KQotICAgIHsKLSAgICAgICAgcmVuZGVyKCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZS0+UmVsZWFz
ZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKLXsKLSAg
ICBib29sIG9rYXkgPSBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLQotICAg
IHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYg
c2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0NPTVBPTkVOVE1BU0spOwotICAgICAgICBicmVhazsK
LQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0xVTUlO
QU5DRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghb2theSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsgWCA9IDAsIFkgPSAxLCBa
ID0gMiwgVyA9IDMgfTsKLQotICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3RhbnQgZGVw
ZW5kcyBvbiB0aGUgc2hhZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgotICAgIC8vIFNlZSB0aGUgc2hh
ZGVyIGFzc2VtYmx5IGNvZGUgYWJvdmUgZm9yIGRldGFpbHMuCi0gICAgZmxvYXQgcHNDb25zdDBb
NF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
Y2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0Nv
bnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAg
ICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtXXSA9IDE7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgcHNDb25z
dDBbWV0gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgZ2V0RGV2aWNlKCktPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1
cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNv
dXJjZVJlY3QpCi17Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotCi0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwot
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRDNEU1VS
RkFDRV9ERVNDIHNvdXJjZURlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7
Ci0KLSAgICAvLyBDb3B5IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0gICAgSURp
cmVjdDNEVGV4dHVyZTkgKnRleHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUoc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVj
dC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3Vy
Y2VEZXNjLkZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7
Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOwotICAgIHJl
c3VsdCA9IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOwotCi0g
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgZGlzcGxheS0+
ZW5kU2NlbmUoKTsKLSAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHN1cmZhY2UsICZz
b3VyY2VSZWN0LCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgIHRl
eHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilO
VUxMKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9pZCBCbGl0OjpzZXRW
aWV3cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0g
ICAgRDNEVklFV1BPUlQ5IHZwOwotICAgIHZwLlggICAgICA9IHhvZmZzZXQ7Ci0gICAgdnAuWSAg
ICAgID0geW9mZnNldDsKLSAgICB2cC5XaWR0aCAgPSBzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNl
UmVjdC5sZWZ0OwotICAgIHZwLkhlaWdodCA9IHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVj
dC50b3A7Ci0gICAgdnAuTWluWiAgID0gMC4wZjsKLSAgICB2cC5NYXhaICAgPSAxLjBmOwotICAg
IGRldmljZS0+U2V0Vmlld3BvcnQoJnZwKTsKLQotICAgIGZsb2F0IGhhbGZQaXhlbEFkanVzdFs0
XSA9IHsgLTEuMGYvdnAuV2lkdGgsIDEuMGYvdnAuSGVpZ2h0LCAwLCAwIH07Ci0gICAgZGV2aWNl
LT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwgaGFsZlBpeGVsQWRqdXN0LCAxKTsKLX0KLQot
dm9pZCBCbGl0OjpzZXRDb21tb25CbGl0U3RhdGUoKQotewotICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJm
YWNlKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwg
RDNERklMTF9TT0xJRCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRF
U1RFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhB
QkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NV
TExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NP
TE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRF
RU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVO
QUJMRV9SRUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5B
QkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVT
VEVOQUJMRSwgRkFMU0UpOwotCi0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NQUdGSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRl
KDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZSgwLCBEM0RTQU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5T
ZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOwot
ICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERS
RVNTX0NMQU1QKTsKLQotICAgIFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Npc3Nvcmlu
ZyBpcyBkaXNhYmxlZCBmb3IgZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2FwdHVyZSBh
bmQgcmVzdG9yZSB0aGUgb2xkIHJlY3RhbmdsZQotICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3Qo
JnNjaXNzb3JSZWN0KTsKLQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAx
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQmxpdDo6cmVuZGVyKCkKLXsKLSAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2Uo
MCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBociA9IGRl
dmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAg
ICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgaHIgPSBkZXZpY2UtPkRyYXdQcmltaXRpdmUo
RDNEUFRfVFJJQU5HTEVTVFJJUCwgMCwgMik7Ci19Ci0KLXZvaWQgQmxpdDo6c2F2ZVN0YXRlKCkK
LXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEhS
RVNVTFQgaHI7Ci0KLSAgICBkZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERl
cHRoU3RlbmNpbCk7Ci0gICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRl
clRhcmdldCk7Ci0KLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQotICAgIHsKLSAg
ICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09V
VE9GTUVNT1JZKTsKLQotICAgICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKLQotICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXQgZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9OwotCi0gICAg
ICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2UtPlNldFZl
cnRleFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLSAgICAgICAgZGV2aWNlLT5T
ZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50RigwLCBkdW1teUNvbnN0LCAxKTsKLQotICAgICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsK
LSAgICAgICAgZHVtbXlWcC5YID0gMDsKLSAgICAgICAgZHVtbXlWcC5ZID0gMDsKLSAgICAgICAg
ZHVtbXlWcC5XaWR0aCA9IDE7Ci0gICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKLSAgICAgICAg
ZHVtbXlWcC5NaW5aID0gMDsKLSAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKLQotICAgICAgICBk
ZXZpY2UtPlNldFZpZXdwb3J0KCZkdW1teVZwKTsKLQotICAgICAgICBkZXZpY2UtPlNldFRleHR1
cmUoMCwgTlVMTCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRW
ZXJ0ZXhCdWZmZXIsIDAsIDApOwotCi0gICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRp
b24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0
YXRlQmxvY2soJm1TYXZlZFN0YXRlQmxvY2spOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZ
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAg
IGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBociA9IG1TYXZl
ZFN0YXRlQmxvY2stPkNhcHR1cmUoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwot
ICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZXN0b3JlU3RhdGUoKQotewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKG1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAgaWYgKG1TYXZlZERlcHRoU3RlbmNp
bCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1TYXZlZERlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGV2aWNl
LT5TZXRSZW5kZXJUYXJnZXQoMCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAobVNhdmVk
UmVuZGVyVGFyZ2V0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAgIGlmIChtU2F2ZWRT
dGF0ZUJsb2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5BcHBs
eSgpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CbGl0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0JsaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyOGVjZC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQu
Y3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQkxJ
VF9IXwotI2RlZmluZSBMSUJHTEVTVjJfQkxJVF9IXwotCi0jaW5jbHVkZSA8bWFwPgotCi0jZGVm
aW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgPGQzZDku
aD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBnbAotewot
Y2xhc3MgQ29udGV4dDsKLQotY2xhc3MgQmxpdAotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
QmxpdChDb250ZXh0ICpjb250ZXh0KTsKLSAgICB+QmxpdCgpOwotCi0gICAgLy8gQ29weSBmcm9t
IHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3VyY2VSZWN0LCB4b2Zm
c2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQot
ICAgIGJvb2wgY29weShJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwotCi0gICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJm
YWNlIHRvIGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0
IGFyZSBpbiBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQotICAgIC8vIHNvdXJj
ZSBpcyBpbnRlcnByZXRlZCBhcyBSR0JBIGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmllcyB0aGUgZGVz
aXJlZCByZXN1bHQgZm9ybWF0LiBGb3IgZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9IEdMX1JHQiwg
dGhlIGFscGhhIGNoYW5uZWwgd2lsbCBiZSBmb3JjZWQgdG8gMC4KLSAgICBib29sIGZvcm1hdENv
bnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwg
R0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0KTsKLQotICAgIC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBsZSBmcm9tIHNv
dXJjZSB0byBkZXN0LgotICAgIC8vIFJlcXVpcmVzIHRoYXQgc291cmNlIGlzIFJHQihBKSBhbmQg
ZGVzdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHNvdXJjZS4KLSAgICBib29sIGJveEZpbHRlcihJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAg
cHJpdmF0ZToKLSAgICBDb250ZXh0ICptQ29udGV4dDsKLQotICAgIElEaXJlY3QzRFZlcnRleEJ1
ZmZlcjkgKm1RdWFkVmVydGV4QnVmZmVyOwotICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9u
OSAqbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbjsKLQotICAgIHZvaWQgaW5pdEdlb21ldHJ5KCk7Ci0K
LSAgICBib29sIHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0KTsKLQot
ICAgIElEaXJlY3QzRFRleHR1cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCk7Ci0gICAgdm9pZCBzZXRWaWV3
cG9ydChjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
KTsKLSAgICB2b2lkIHNldENvbW1vbkJsaXRTdGF0ZSgpOwotICAgIFJFQ1QgZ2V0U3VyZmFjZVJl
Y3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBlbnVt
IGlzIHVzZWQgdG8gaW5kZXggbUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNvdXJjZS4KLSAg
ICBlbnVtIFNoYWRlcklkCi0gICAgewotICAgICAgICBTSEFERVJfVlNfU1RBTkRBUkQsCi0gICAg
ICAgIFNIQURFUl9WU19GTElQWSwKLSAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJPVUdILAotICAg
ICAgICBTSEFERVJfUFNfTFVNSU5BTkNFLAotICAgICAgICBTSEFERVJfUFNfQ09NUE9ORU5UTUFT
SywKLSAgICAgICAgU0hBREVSX0NPVU5UCi0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFy
ICogY29uc3QgbVNoYWRlclNvdXJjZVtdOwotCi0gICAgLy8gVGhpcyBhY3R1YWxseSBjb250YWlu
cyBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5IG9yIElEaXJlY3QzRFBpeGVsU2hhZGVyOSBjYXN0ZWQg
dG8gSVVua25vd24uCi0gICAgSVVua25vd24gKm1Db21waWxlZFNoYWRlcnNbU0hBREVSX0NPVU5U
XTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotICAgIGJvb2wgc2V0U2hh
ZGVyKFNoYWRlcklkIHNvdXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAgICAgICAg
ICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KmNyZWF0ZVNoYWRlcikoY29u
c3QgRFdPUkQgKiwgRDNEU2hhZGVyVHlwZSAqKiksCi0gICAgICAgICAgICAgICAgICAgSFJFU1VM
VCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSk7
Ci0KLSAgICBib29sIHNldFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOwotICAgIGJvb2wg
c2V0UGl4ZWxTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKLSAgICB2b2lkIHJlbmRlcigpOwotCi0g
ICAgdm9pZCBzYXZlU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOwotICAgIElEaXJl
Y3QzRFN0YXRlQmxvY2s5ICptU2F2ZWRTdGF0ZUJsb2NrOwotICAgIElEaXJlY3QzRFN1cmZhY2U5
ICptU2F2ZWRSZW5kZXJUYXJnZXQ7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZERlcHRo
U3RlbmNpbDsKLQotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsKLX07Ci19Ci0K
LSNlbmRpZiAgIC8vIExJQkdMRVNWMl9CTElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRkMTJlM2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9CdWZmZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIEJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpCdWZmZXIg
Y2xhc3MsIHJlcHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKLS8vIGluZGV4IGRh
dGEuIEltcGxlbWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0
eS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvSW5kZXhEYXRhTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotQnVmZmVyOjpCdWZm
ZXIoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQotewotICAgIG1Db250ZW50cyA9IE5V
TEw7Ci0gICAgbVNpemUgPSAwOwotICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsKLQotICAg
IG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5V
TEw7Ci0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKLX0KLQotQnVmZmVyOjp+QnVmZmVyKCkK
LXsKLSAgICBkZWxldGVbXSBtQ29udGVudHM7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZm
ZXI7Ci0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKLX0KLQotdm9pZCBCdWZmZXI6OmJ1
ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2Up
Ci17Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1Db250ZW50
czsKLSAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSAh
PSBtU2l6ZSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLSAgICAgICAgbUNv
bnRlbnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07Ci0gICAgICAgIG1lbXNldChtQ29udGVudHMsIDAs
IHNpemUpOwotICAgIH0KLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSA+IDApCi0gICAg
ewotICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBzaXplKTsKLSAgICB9Ci0KLSAgICBt
U2l6ZSA9IHNpemU7Ci0gICAgbVVzYWdlID0gdXNhZ2U7Ci0KLSAgICBpbnZhbGlkYXRlU3RhdGlj
RGF0YSgpOwotCi0gICAgaWYgKHVzYWdlID09IEdMX1NUQVRJQ19EUkFXKQotICAgIHsKLSAgICAg
ICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNl
KCkpOwotICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhCdWZmZXIo
Z2V0RGV2aWNlKCkpOwotICAgIH0KLX0KLQotdm9pZCBCdWZmZXI6OmJ1ZmZlclN1YkRhdGEoY29u
c3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpCi17Ci0gICAg
bWVtY3B5KG1Db250ZW50cyArIG9mZnNldCwgZGF0YSwgc2l6ZSk7Ci0gICAgCi0gICAgaWYgKCht
U3RhdGljVmVydGV4QnVmZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPnNpemUoKSAhPSAwKSB8
fCAobVN0YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+c2l6ZSgpICE9IDAp
KQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Ci0KLSAgICBt
VW5tb2RpZmllZERhdGFVc2UgPSAwOwotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXIgKkJ1ZmZlcjo6
Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRpY1ZlcnRleEJ1ZmZl
cjsKLX0KLQotU3RhdGljSW5kZXhCdWZmZXIgKkJ1ZmZlcjo6Z2V0U3RhdGljSW5kZXhCdWZmZXIo
KQotewotICAgIHJldHVybiBtU3RhdGljSW5kZXhCdWZmZXI7Ci19Ci0KLXZvaWQgQnVmZmVyOjpp
bnZhbGlkYXRlU3RhdGljRGF0YSgpCi17Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7
Ci0gICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVN0YXRpY0lu
ZGV4QnVmZmVyOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBtVW5tb2Rp
ZmllZERhdGFVc2UgPSAwOwotfQotCi0vLyBDcmVhdGVzIHN0YXRpYyBidWZmZXJzIGlmIHN1ZmZp
Y2llbnQgdXNlZCBkYXRhIGhhcyBiZWVuIGxlZnQgdW5tb2RpZmllZAotdm9pZCBCdWZmZXI6OnBy
b21vdGVTdGF0aWNVc2FnZShpbnQgZGF0YVNpemUpCi17Ci0gICAgaWYgKCFtU3RhdGljVmVydGV4
QnVmZmVyICYmICFtU3RhdGljSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVW5tb2RpZmll
ZERhdGFVc2UgKz0gZGF0YVNpemU7Ci0KLSAgICAgICAgaWYgKG1Vbm1vZGlmaWVkRGF0YVVzZSA+
IDMgKiBtU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9
IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOwotICAgICAgICAgICAgbVN0YXRp
Y0luZGV4QnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKGdldERldmljZSgpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTljNGUuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEJ1ZmZlci5oOiBEZWZpbmVzIHRoZSBnbDo6QnVmZmVyIGNsYXNzLCByZXByZXNlbnRpbmcgc3Rv
cmFnZSBvZiB2ZXJ0ZXggYW5kL29yCi0vLyBpbmRleCBkYXRhLiBJbXBsZW1lbnRzIEdMIGJ1ZmZl
ciBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCi0vLyBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAyLjkgcGFnZSAyMS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQlVGRkVSX0hfCi0j
ZGVmaW5lIExJQkdMRVNWMl9CVUZGRVJfSF8KLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVk
ZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
LQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNv
dW50T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgU3RhdGljVmVydGV4QnVmZmVy
OwotY2xhc3MgU3RhdGljSW5kZXhCdWZmZXI7Ci0KLWNsYXNzIEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQnVmZmVyKEdMdWludCBpZCk7
Ci0KLSAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShjb25zdCB2
b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZm
ZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zm
c2V0KTsKLQotICAgIHZvaWQgKmRhdGEoKSB7IHJldHVybiBtQ29udGVudHM7IH0KLSAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9Ci0gICAgR0xlbnVtIHVzYWdlKCkgY29u
c3QgeyByZXR1cm4gbVVzYWdlOyB9Ci0KLSAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKmdldFN0YXRp
Y1ZlcnRleEJ1ZmZlcigpOwotICAgIFN0YXRpY0luZGV4QnVmZmVyICpnZXRTdGF0aWNJbmRleEJ1
ZmZlcigpOwotICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB2b2lkIHByb21v
dGVTdGF0aWNVc2FnZShpbnQgZGF0YVNpemUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEJ1ZmZlcik7Ci0KLSAgICBHTHVieXRlICptQ29udGVudHM7Ci0gICAg
R0xzaXplaXB0ciBtU2l6ZTsKLSAgICBHTGVudW0gbVVzYWdlOwotCi0gICAgU3RhdGljVmVydGV4
QnVmZmVyICptU3RhdGljVmVydGV4QnVmZmVyOwotICAgIFN0YXRpY0luZGV4QnVmZmVyICptU3Rh
dGljSW5kZXhCdWZmZXI7Ci0gICAgR0xzaXplaXB0ciBtVW5tb2RpZmllZERhdGFVc2U7Ci19Owot
Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9CVUZGRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2ZWM2MDc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzM5ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5n
Ci0vLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxl
bWVudGF0aW9uIG9mIEVHTENvbnRleHQuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5o
IgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIK
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1
dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9CbGl0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL1F1ZXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4
dHVyZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLSN1bmRlZiBuZWFyCi0jdW5kZWYg
ZmFyCi0KLW5hbWVzcGFjZSBnbAotewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJl
c2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbUNvbmZpZyhjb25maWcpCi17Ci0gICAgQVNTRVJU
KHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAotCi0gICAgbURpc3Bs
YXkgPSBOVUxMOwotICAgIG1EZXZpY2UgPSBOVUxMOwotCi0gICAgbUZlbmNlSGFuZGxlQWxsb2Nh
dG9yLnNldEJhc2VIYW5kbGUoMCk7Ci0KLSAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAu
MGYsIDAuMGYpOwotCi0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7Ci0gICAgbVN0
YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsKLQotICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNl
OwotICAgIG1TdGF0ZS5jdWxsTW9kZSA9IEdMX0JBQ0s7Ci0gICAgbVN0YXRlLmZyb250RmFjZSA9
IEdMX0NDVzsKLSAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLmRlcHRo
RnVuYyA9IEdMX0xFU1M7Ci0gICAgbVN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNv
dXJjZUJsZW5kUkdCID0gR0xfT05FOwotICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xf
T05FOwotICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIG1TdGF0ZS5kZXN0
QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9G
VU5DX0FERDsKLSAgICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19BREQ7Ci0g
ICAgbVN0YXRlLmJsZW5kQ29sb3IucmVkID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVl
biA9IDA7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSA9IDA7Ci0gICAgbVN0YXRlLmJsZW5k
Q29sb3IuYWxwaGEgPSAwOwotICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOwotICAgIG1T
dGF0ZS5zdGVuY2lsRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IDA7
Ci0gICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1h
c2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOwotICAgIG1T
dGF0ZS5zdGVuY2lsQmFja1JlZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IC0g
MTsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3Rl
bmNpbEZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IEdM
X0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsKLSAgICBt
U3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQ
YXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzID0gR0xfS0VFUDsKLSAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsKLSAg
ICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciA9IDAuMGY7Ci0gICAgbVN0YXRlLnBvbHlnb25P
ZmZzZXRVbml0cyA9IDAuMGY7Ci0gICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZh
bHNlOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5zYW1w
bGVDb3ZlcmFnZVZhbHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQg
PSBmYWxzZTsKLSAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGl0
aGVyID0gdHJ1ZTsKLSAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9OVF9DQVJF
OwotICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gR0xfRE9OVF9DQVJF
OwotCi0gICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7Ci0KLSAgICBtU3RhdGUudmlld3BvcnRY
ID0gMDsKLSAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAgICBtU3RhdGUudmlld3BvcnRXaWR0
aCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLldpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdo
dCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsKLSAgICBtU3RhdGUuek5lYXIgPSAwLjBm
OwotICAgIG1TdGF0ZS56RmFyID0gMS4wZjsKLQotICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7Ci0g
ICAgbVN0YXRlLnNjaXNzb3JZID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gY29uZmln
LT5tRGlzcGxheU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBjb25maWct
Pm1EaXNwbGF5TW9kZS5IZWlnaHQ7Ci0KLSAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsK
LSAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tC
bHVlID0gdHJ1ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwotICAgIG1TdGF0
ZS5kZXB0aE1hc2sgPSB0cnVlOwotCi0gICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQotICAg
IHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFu
YWdlcjsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2Vy
KCk7Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2Ug
ODM6Ci0gICAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVf
Q1VCRV9NQVAgaGF2ZSB0d29kaW1lbnNpb25hbAotICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJl
IHN0YXRlIHZlY3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgotICAgIC8v
IEluIG9yZGVyIHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxv
c3QsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQotICAgIC8vIG9iamVjdHMgYWxsIG9mIHdo
b3NlIG5hbWVzIGFyZSAwLgotCi0gICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQo
MCkpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcCgwKSk7
Ci0KLSAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7Ci0gICAgYmluZEFycmF5QnVmZmVyKDAp
OwotICAgIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZFRleHR1cmVDdWJlTWFw
KDApOwotICAgIGJpbmRUZXh0dXJlMkQoMCk7Ci0gICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsK
LSAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0K
LSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwotCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1l
bnQgPSA0OwotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNr
UmV2ZXJzZVJvd09yZGVyID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
OwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtQmxpdCA9IE5VTEw7Ci0gICAg
bUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0gICAgbUlu
dmFsaWRWYWx1ZSA9IGZhbHNlOwotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAg
bU91dE9mTWVtb3J5ID0gZmFsc2U7Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9
IGZhbHNlOwotCi0gICAgbUhhc0JlZW5DdXJyZW50ID0gZmFsc2U7Ci0gICAgbUNvbnRleHRMb3N0
ID0gZmFsc2U7Ci0gICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJST1I7Ci0gICAgbVJlc2V0U3Ry
YXRlZ3kgPSAobm90aWZ5UmVzZXRzID8gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCA6IEdM
X05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQpOwotICAgIG1Sb2J1c3RBY2Nlc3MgPSByb2J1c3RB
Y2Nlc3M7Ci0KLSAgICBtU3VwcG9ydHNEWFQxVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9y
dHNEWFQzVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBmYWxz
ZTsKLSAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNPY2Ns
dXNpb25RdWVyaWVzID0gZmFsc2U7Ci0gICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9
IDA7Ci0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIG1NYXNrZWRDbGVhclNhdmVk
U3RhdGUgPSBOVUxMOwotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLUNvbnRleHQ6On5D
b250ZXh0KCkKLXsKLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApCi0gICAgewot
ICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJv
Z3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOwotICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkK
LSAgICAgICAgewotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOwotICAgICAg
ICB9Ci0gICAgICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0gICAgfQotCi0gICAgd2hp
bGUgKCFtRnJhbWVidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1l
YnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hp
bGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5j
ZU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUXVlcnlNYXAuZW1w
dHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJz
dCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCi0g
ICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNv
bmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3VwcG9y
dC5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRV
UkVfVFlQRV9DT1VOVDsgdHlwZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9
IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBs
ZXIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdLnNldChOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHR5
cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAg
ICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0K
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBt
U3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXIuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwotCi0gICAg
bVRleHR1cmUyRFplcm8uc2V0KE5VTEwpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5V
TEwpOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBkZWxldGUgbUluZGV4
RGF0YU1hbmFnZXI7Ci0gICAgZGVsZXRlIG1CbGl0OwotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsK
LQotICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAgbU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFn
ZXItPnJlbGVhc2UoKTsKLX0KLQotdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBtRGlzcGxheSA9IGRp
c3BsYXk7Ci0gICAgbURldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgIGlmICgh
bUhhc0JlZW5DdXJyZW50KQotICAgIHsKLSAgICAgICAgbURldmljZUNhcHMgPSBtRGlzcGxheS0+
Z2V0RGV2aWNlQ2FwcygpOwotCi0gICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0
ZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIg
PSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUJsaXQgPSBu
ZXcgQmxpdCh0aGlzKTsKLQotICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBtRGV2aWNl
Q2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKLSAgICAgICAg
bVN1cHBvcnRzVmVydGV4VGV4dHVyZSA9IG1EaXNwbGF5LT5nZXRWZXJ0ZXhUZXh0dXJlU3VwcG9y
dCgpOwotICAgICAgICBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlID0gbURpc3BsYXktPmdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0luc3RhbmNpbmcgPSBt
RGlzcGxheS0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKLQotICAgICAgICBtTWF4VGV4dHVyZURp
bWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZVdp
ZHRoLCAoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX1NJWkUpOwotICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbiht
TWF4VGV4dHVyZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4
VGV4dHVyZURpbWVuc2lvbjsKLSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1heFRl
eHR1cmVEaW1lbnNpb24pICsgMTsKLSAgICAgICAgVFJBQ0UoIk1heFRleHR1cmVEaW1lbnNpb249
JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249
JWQsIE1heFRleHR1cmVMZXZlbD0lZCIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGltZW5z
aW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24s
IG1NYXhUZXh0dXJlTGV2ZWwpOwotCi0gICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5kZXJCdWZm
ZXJGb3JtYXRzW10gPQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0g
ICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAot
ICAgICAgICAgICAgRDNERk1UX0QyNFM4Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW50IG1heCA9
IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHJlbmRlckJ1ZmZlckZvcm1h
dHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9v
bCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMg
KyAxXTsKLSAgICAgICAgICAgIG1EaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQocmVuZGVy
QnVmZmVyRm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBtTXVsdGlT
YW1wbGVTdXBwb3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsK
LQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGog
Pj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBs
ZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbU1heFN1cHBv
cnRlZFNhbXBsZXMgPSBtYXg7Ci0KLSAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbURp
c3BsYXktPmdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c09jY2x1c2lv
blF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7Ci0gICAgICAg
IG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1cHBvcnQo
KTsKLSAgICAgICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERYVDNUZXh0
dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtRGlzcGxheS0+
Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsKLSAgICAg
ICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJl
U3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9
IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9y
dHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4
dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5
LT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7Ci0KLSAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRp
Y2VzID0gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwotCi0gICAgICAg
IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOwotICAgICAgICBpZiAoc3VwcG9ydHNE
WFQxVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cyArPSAyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0
dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXRzICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0g
MTsKLSAgICAgICAgfQotCi0gICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAgICAgICAg
aW5pdFJlbmRlcmVyU3RyaW5nKCk7Ci0KLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7Ci0g
ICAgICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOwotICAgICAgICBtU3RhdGUudmlld3BvcnRXaWR0
aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9
IHN1cmZhY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7Ci0g
ICAgICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGgg
PSBzdXJmYWNlLT5nZXRXaWR0aCgpOwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IHN1
cmZhY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgIG1IYXNCZWVuQ3VycmVudCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gV3JhcCB0aGUgZXhpc3RpbmcgRGlyZWN0M0QgOSByZXNvdXJjZXMgaW50
byBHTCBvYmplY3RzIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgJzAnIG5hbWVzCi0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlZmF1bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5kZXJUYXJn
ZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gc3VyZmFjZS0+Z2V0
RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJvID0gbmV3
IENvbG9yYnVmZmVyKGRlZmF1bHRSZW5kZXJUYXJnZXQpOwotICAgIERlcHRoU3RlbmNpbGJ1ZmZl
ciAqZGVwdGhTdGVuY2lsYnVmZmVyWmVybyA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhT
dGVuY2lsKTsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRG
cmFtZWJ1ZmZlcihjb2xvcmJ1ZmZlclplcm8sIGRlcHRoU3RlbmNpbGJ1ZmZlclplcm8pOwotCi0g
ICAgc2V0RnJhbWVidWZmZXJaZXJvKGZyYW1lYnVmZmVyWmVybyk7Ci0KLSAgICBpZiAoZGVmYXVs
dFJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPlJlbGVh
c2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgZGVw
dGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIG1hcmtBbGxTdGF0ZURpcnR5
KCk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxh
dGVkIGRpcnR5IGZsYWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJl
LWRyYXcuCi12b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKLXsKLSAgICBmb3IgKGlu
dCB0ID0gMDsgdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspCi0gICAgewotICAgICAg
ICBtQXBwbGllZFRleHR1cmVTZXJpYWxQU1t0XSA9IDA7Ci0gICAgfQotCi0gICAgZm9yIChpbnQg
dCA9IDA7IHQgPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyB0KyspCi0gICAg
ewotICAgICAgICBtQXBwbGllZFRleHR1cmVTZXJpYWxWU1t0XSA9IDA7Ci0gICAgfQotCi0gICAg
bUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlh
bCA9IDA7Ci0gICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRT
dGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKLSAgICBt
RGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtVmlld3BvcnRJbml0aWFsaXpl
ZCA9IGZhbHNlOwotICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQot
ICAgIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7Ci0KLSAgICBtQ2xl
YXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1E
ZXB0aFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
bUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsK
LSAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1TY2lzc29yU3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1EaXRoZXJT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAgIG1EeFVu
aWZvcm1zRGlydHkgPSB0cnVlOwotICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6bWFya0R4VW5pZm9ybXNEaXJ0eSgpCi17Ci0gICAgbUR4VW5pZm9y
bXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0KCkKLXsK
LSAgICBpZiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCkK
LSAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VYVDsKLSAg
ICBtQ29udGV4dExvc3QgPSB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmlzQ29udGV4dExvc3Qo
KQotewotICAgIHJldHVybiBtQ29udGV4dExvc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q2xl
YXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkK
LXsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKLSAgICBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLmdyZWVuID0gZ3JlZW47Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5i
bHVlID0gYmx1ZTsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhID0gYWxwaGE7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q2xlYXJEZXB0aChmbG9hdCBkZXB0aCkKLXsKLSAgICBtU3Rh
dGUuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q2xlYXJT
dGVuY2lsKGludCBzdGVuY2lsKQotewotICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0
ZW5jaWw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKQotewot
ICAgIGlmIChtU3RhdGUuY3VsbEZhY2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5jdWxsRmFjZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7Ci0g
ICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1bGxNb2Rl
KEdMZW51bSBtb2RlKQotewotICAgIGlmIChtU3RhdGUuY3VsbE1vZGUgIT0gbW9kZSkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5jdWxsTW9kZSA9IG1vZGU7Ci0gICAgICAgIG1DdWxsU3RhdGVEaXJ0
eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEZyb250RmFjZShHTGVudW0g
ZnJvbnQpCi17Ci0gICAgaWYgKG1TdGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpCi0gICAgewotICAg
ICAgICBtU3RhdGUuZnJvbnRGYWNlID0gZnJvbnQ7Ci0gICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9
IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoVGVzdChib29sIGVuYWJs
ZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAg
ICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBlbmFibGVkOwotICAgICAgICBtRGVwdGhTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNEZXB0aFRlc3RFbmFibGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLmRlcHRoVGVzdDsKLX0KLQotdm9pZCBDb250ZXh0
OjpzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYykKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRo
RnVuYyAhPSBkZXB0aEZ1bmMpCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhGdW5jID0gZGVw
dGhGdW5jOwotICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcikKLXsKLSAg
ICBtU3RhdGUuek5lYXIgPSB6TmVhcjsKLSAgICBtU3RhdGUuekZhciA9IHpGYXI7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0QmxlbmQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuYmxl
bmQgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZCA9IGVuYWJsZWQ7Ci0g
ICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0
Ojppc0JsZW5kRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5ibGVuZDsKLX0K
LQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVt
IGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSkKLXsKLSAgICBp
ZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IHNvdXJjZVJHQiB8fAotICAgICAgICBtU3RhdGUu
c291cmNlQmxlbmRBbHBoYSAhPSBzb3VyY2VBbHBoYSB8fAotICAgICAgICBtU3RhdGUuZGVzdEJs
ZW5kUkdCICE9IGRlc3RSR0IgfHwKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhICE9IGRl
c3RBbHBoYSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNvdXJjZVJH
QjsKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IGRlc3RSR0I7Ci0gICAgICAgIG1TdGF0
ZS5zb3VyY2VCbGVuZEFscGhhID0gc291cmNlQWxwaGE7Ci0gICAgICAgIG1TdGF0ZS5kZXN0Qmxl
bmRBbHBoYSA9IGRlc3RBbHBoYTsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0g
ICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBn
cmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5ibGVuZENv
bG9yLnJlZCAhPSByZWQgfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gIT0gZ3Jl
ZW4gfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8Ci0gICAgICAg
IG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhICE9IGFscGhhKQotICAgIHsKLSAgICAgICAgbVN0YXRl
LmJsZW5kQ29sb3IucmVkID0gcmVkOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9
IGdyZWVuOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gYmx1ZTsKLSAgICAgICAg
bVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0
eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kRXF1YXRpb24oR0xl
bnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbikKLXsKLSAgICBpZiAobVN0YXRl
LmJsZW5kRXF1YXRpb25SR0IgIT0gcmdiRXF1YXRpb24gfHwKLSAgICAgICAgbVN0YXRlLmJsZW5k
RXF1YXRpb25BbHBoYSAhPSBhbHBoYUVxdWF0aW9uKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmJs
ZW5kRXF1YXRpb25SR0IgPSByZ2JFcXVhdGlvbjsKLSAgICAgICAgbVN0YXRlLmJsZW5kRXF1YXRp
b25BbHBoYSA9IGFscGhhRXF1YXRpb247Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsVGVzdChib29sIGVuYWJsZWQp
Ci17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0gZW5hYmxlZDsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTdGVuY2lsVGVzdEVuYWJs
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc3RlbmNpbFRlc3Q7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0U3RlbmNpbFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5j
aWxSZWYsIEdMdWludCBzdGVuY2lsTWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxGdW5j
ICE9IHN0ZW5jaWxGdW5jIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0ZW5jaWxS
ZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IHN0ZW5jaWxNYXNrKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0gc3RlbmNpbEZ1bmM7Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsUmVmID0gKHN0ZW5jaWxSZWYgPiAwKSA/IHN0ZW5jaWxSZWYgOiAwOwotICAgICAg
ICBtU3RhdGUuc3RlbmNpbE1hc2sgPSBzdGVuY2lsTWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tQ
YXJhbXMoR0xlbnVtIHN0ZW5jaWxCYWNrRnVuYywgR0xpbnQgc3RlbmNpbEJhY2tSZWYsIEdMdWlu
dCBzdGVuY2lsQmFja01hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgIT0g
c3RlbmNpbEJhY2tGdW5jIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiAhPSBzdGVu
Y2lsQmFja1JlZiB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrICE9IHN0ZW5jaWxC
YWNrTWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBzdGVuY2ls
QmFja0Z1bmM7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IChzdGVuY2lsQmFja1Jl
ZiA+IDApID8gc3RlbmNpbEJhY2tSZWYgOiAwOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tN
YXNrID0gc3RlbmNpbEJhY2tNYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKEdMdWludCBz
dGVuY2lsV3JpdGVtYXNrKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAhPSBz
dGVuY2lsV3JpdGVtYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBzdGVuY2lsV3JpdGVtYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayhHTHVpbnQg
c3RlbmNpbEJhY2tXcml0ZW1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRl
bWFzayAhPSBzdGVuY2lsQmFja1dyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVu
Y2lsQmFja1dyaXRlbWFzayA9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgICAgICBtU3RlbmNp
bFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2ls
T3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFp
bCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNp
bEZhaWwgIT0gc3RlbmNpbEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhG
YWlsICE9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoUGFzcyAhPSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsRmFpbCA9IHN0ZW5jaWxGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NE
ZXB0aEZhaWwgPSBzdGVuY2lsUGFzc0RlcHRoRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQ
YXNzRGVwdGhQYXNzID0gc3RlbmNpbFBhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1TdGVuY2lsU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNr
T3BlcmF0aW9ucyhHTGVudW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNz
RGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotewotICAgIGlmICht
U3RhdGUuc3RlbmNpbEJhY2tGYWlsICE9IHN0ZW5jaWxCYWNrRmFpbCB8fAotICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCB8
fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxCYWNr
UGFzc0RlcHRoUGFzcykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBz
dGVuY2lsQmFja0ZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwg
PSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bh
c3NEZXB0aFBhc3MgPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1TdGVuY2ls
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFBvbHlnb25P
ZmZzZXRGaWxsKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRG
aWxsICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwg
PSBlbmFibGVkOwotICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAg
IH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsKLQotfQotCi12b2lkIENv
bnRleHQ6OnNldFBvbHlnb25PZmZzZXRQYXJhbXMoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5p
dHMpCi17Ci0gICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9IGZhY3RvciB8fAot
ICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzICE9IHVuaXRzKQotICAgIHsKLSAgICAg
ICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBmYWN0b3I7Ci0gICAgICAgIG1TdGF0ZS5w
b2x5Z29uT2Zmc2V0VW5pdHMgPSB1bml0czsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQWxwaGFUb0Nv
dmVyYWdlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3Zl
cmFnZSAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3Zl
cmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1T
dGF0ZS5zYW1wbGVDb3ZlcmFnZSAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNh
bXBsZUNvdmVyYWdlID0gZW5hYmxlZDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBpbnZlcnQp
Ci17Ci0gICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8Ci0gICAg
ICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCAhPSBpbnZlcnQpCi0gICAgewotICAgICAg
ICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA9IHZhbHVlOwotICAgICAgICBtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2VJbnZlcnQgPSBpbnZlcnQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3QoYm9vbCBlbmFi
bGVkKQotewotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QgIT0gZW5hYmxlZCkKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TY2lzc29yU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2Npc3NvclRlc3RF
bmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNjaXNzb3JUZXN0OwotfQotCi12
b2lkIENvbnRleHQ6OnNldERpdGhlcihib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5k
aXRoZXIgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kaXRoZXIgPSBlbmFibGVk
OwotICAgICAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENv
bnRleHQ6OmlzRGl0aGVyRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kaXRo
ZXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpCi17Ci0g
ICAgbVN0YXRlLmxpbmVXaWR0aCA9IHdpZHRoOwotfQotCi12b2lkIENvbnRleHQ6OnNldEdlbmVy
YXRlTWlwbWFwSGludChHTGVudW0gaGludCkKLXsKLSAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBI
aW50ID0gaGludDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRlcml2YXRp
dmVIaW50KEdMZW51bSBoaW50KQotewotICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRp
dmVIaW50ID0gaGludDsKLSAgICAvLyBUT0RPOiBQcm9wYWdhdGUgdGhlIGhpbnQgdG8gc2hhZGVy
IHRyYW5zbGF0b3Igc28gd2UgY2FuIHdyaXRlCi0gICAgLy8gZGR4LCBkZHhfY29hcnNlLCBvciBk
ZHhfZmluZSBkZXBlbmRpbmcgb24gdGhlIGhpbnQuCi0gICAgLy8gSWdub3JlIGZvciBub3cuIEl0
IGlzIHZhbGlkIGZvciBpbXBsZW1lbnRhdGlvbnMgdG8gaWdub3JlIGhpbnQuCi19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7Ci0gICAgbVN0
YXRlLnZpZXdwb3J0WSA9IHk7Ci0gICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsKLSAg
ICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBoZWlnaHQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0
U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZ
ICE9IHkgfHwgCi0gICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRl
LnNjaXNzb3JIZWlnaHQgIT0gaGVpZ2h0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JY
ID0geDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0geTsKLSAgICAgICAgbVN0YXRlLnNjaXNz
b3JXaWR0aCA9IHdpZHRoOwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhlaWdodDsK
LSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wg
YWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0ZS5j
b2xvck1hc2tHcmVlbiAhPSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAh
PSBibHVlIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKLSAgICB7Ci0gICAgICAg
IG1TdGF0ZS5jb2xvck1hc2tSZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVl
biA9IGdyZWVuOwotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7Ci0gICAgICAg
IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IGFscGhhOwotICAgICAgICBtTWFza1N0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9vbCBtYXNr
KQotewotICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCi0gICAgewotICAgICAgICBt
U3RhdGUuZGVwdGhNYXNrID0gbWFzazsKLSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25lZCBpbnQg
YWN0aXZlKQotewotICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOwotfQotCi1HTHVp
bnQgQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldERyYXdG
cmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVi
dWZmZXI7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25z
dAotewotICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7Ci19Ci0KLUdMdWludCBD
b250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0
ZS5hcnJheUJ1ZmZlci5pZCgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZlUXVlcnko
R0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBOVUxMOwot
ICAgIAotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlb
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICBxdWVy
eU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09O
U0VSVkFUSVZFXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlQoZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkKLXsK
LSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUFycmF5RW5hYmxlZCA9IGVu
YWJsZWQ7Ci19Ci0KLWNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0
cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0
dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdM
aW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQot
ewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0
KGJvdW5kQnVmZmVyKTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVNp
emUgPSBzaXplOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9
IHR5cGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVk
ID0gbm9ybWFsaXplZDsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVN0
cmlkZSA9IHN0cmlkZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBv
aW50ZXIgPSBwb2ludGVyOwotfQotCi1jb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlcjsKLX0KLQotY29uc3QgVmVy
dGV4QXR0cmlidXRlQXJyYXkgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMoKQotewotICAg
IHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFBh
Y2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQotewotICAgIG1TdGF0ZS5wYWNrQWxpZ25tZW50
ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3RhdGUudW5w
YWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRVbnBhY2tB
bGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25tZW50Owot
fQotCi12b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93
T3JkZXIpCi17Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3Jk
ZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOwotfQotCi1HTHVpbnQgQ29u
dGV4dDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3Jl
YXRlQnVmZmVyKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUHJvZ3JhbSgpOwotfQotCi1HTHVpbnQg
Q29udGV4dDo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVh
dGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlVGV4dHVy
ZSgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBy
ZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci19Ci0KLS8vIFJl
dHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1GcmFtZWJ1ZmZlckhhbmRsZUFs
bG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbUZyYW1lYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxM
OwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZlbmNl
KCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRl
KCk7Ci0KLSAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtRGlzcGxheSk7Ci0KLSAg
ICByZXR1cm4gaGFuZGxlOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBxdWVyeSBuYW1lCi1H
THVpbnQgQ29udGV4dDo6Y3JlYXRlUXVlcnkoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtUXVl
cnlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1RdWVyeU1hcFtoYW5kbGVdID0g
TlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlQnVm
ZmVyKEdMdWludCBidWZmZXIpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZl
cihidWZmZXIpKQotICAgIHsKLSAgICAgICAgZGV0YWNoQnVmZmVyKGJ1ZmZlcik7Ci0gICAgfQot
ICAgIAotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZUJ1ZmZlcihidWZmZXIpOwotfQotCi12
b2lkIENvbnRleHQ6OmRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0
ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRl
UHJvZ3JhbShwcm9ncmFtKTsKLSAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwotfQot
Ci12b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgaWYg
KG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUodGV4dHVyZSkpCi0gICAgewotICAgICAgICBk
ZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRl
bGV0ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVm
ZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdl
dFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQotICAgIHsKLSAgICAgICAgZGV0YWNoUmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgfQotICAgIAotICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBGcmFtZWJ1ZmZlck1h
cDo6aXRlcmF0b3IgZnJhbWVidWZmZXJPYmplY3QgPSBtRnJhbWVidWZmZXJNYXAuZmluZChmcmFt
ZWJ1ZmZlcik7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QgIT0gbUZyYW1lYnVmZmVyTWFw
LmVuZCgpKQotICAgIHsKLSAgICAgICAgZGV0YWNoRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwot
Ci0gICAgICAgIG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZyYW1lYnVmZmVy
T2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGRlbGV0ZSBmcmFtZWJ1ZmZlck9iamVjdC0+c2Vjb25k
OwotICAgICAgICBtRnJhbWVidWZmZXJNYXAuZXJhc2UoZnJhbWVidWZmZXJPYmplY3QpOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVGZW5jZShHTHVpbnQgZmVuY2UpCi17Ci0gICAg
RmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVuY2UpOwot
Ci0gICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAg
IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7Ci0gICAg
ICAgIGRlbGV0ZSBmZW5jZU9iamVjdC0+c2Vjb25kOwotICAgICAgICBtRmVuY2VNYXAuZXJhc2Uo
ZmVuY2VPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVRdWVyeShHTHVp
bnQgcXVlcnkpCi17Ci0gICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0gbVF1ZXJ5
TWFwLmZpbmQocXVlcnkpOwotICAgIGlmIChxdWVyeU9iamVjdCAhPSBtUXVlcnlNYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICBtUXVlcnlIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVyeU9iamVj
dC0+Zmlyc3QpOwotICAgICAgICBpZiAocXVlcnlPYmplY3QtPnNlY29uZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcXVlcnlPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0g
ICAgICAgIG1RdWVyeU1hcC5lcmFzZShxdWVyeU9iamVjdCk7Ci0gICAgfQotfQotCi1CdWZmZXIg
KkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKLX0KLQotU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0
U2hhZGVyKGhhbmRsZSk7Ci19Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50
IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5k
bGUpOwotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpCi17
Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUoaGFuZGxlKTsKLX0KLQot
UmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSkKLXsK
LSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7Ci19
Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIoKQotewotICAgIHJl
dHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsKLX0KLQotRnJhbWVi
dWZmZXIgKkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1Cb3Vu
ZERyYXdGcmFtZWJ1ZmZlcjsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5z
aWduZWQgaW50IGJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFs
bG9jYXRpb24oYnVmZmVyKTsKLQotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVy
KGJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5z
aWduZWQgaW50IGJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFs
bG9jYXRpb24oYnVmZmVyKTsKLQotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KGdl
dEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWlu
dCB0ZXh0dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRp
b24odGV4dHVyZSwgVEVYVFVSRV8yRCk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVY
VFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsK
LX0KLQotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpCi17
Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBU
RVhUVVJFX0NVQkUpOwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAg
ICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIG1GcmFt
ZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAgICB9Ci0KLSAg
ICBtU3RhdGUucmVhZEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQgQ29udGV4
dDo6YmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFn
ZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAgICBtRnJhbWVidWZmZXJN
YXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAgfQotCi0gICAgbVN0YXRl
LmRyYXdGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotCi0gICAgbUJvdW5kRHJhd0ZyYW1lYnVm
ZmVyID0gZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmJp
bmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24ocmVuZGVyYnVmZmVyKTsKLQotICAgIG1T
dGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKLX0K
LQotdm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIEdMdWlu
dCBwcmlvclByb2dyYW0gPSBtU3RhdGUuY3VycmVudFByb2dyYW07Ci0gICAgbVN0YXRlLmN1cnJl
bnRQcm9ncmFtID0gcHJvZ3JhbTsgICAgICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBiZWZvcmUg
dHJ5aW5nIHRvIGRlbGV0ZSwgb3RoZXJ3aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLgotCi0gICAg
aWYgKHByaW9yUHJvZ3JhbSAhPSBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgUHJvZ3JhbSAqbmV3
UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAg
IFByb2dyYW0gKm9sZFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByaW9y
UHJvZ3JhbSk7Ci0gICAgICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7Ci0gICAgICAg
IG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotCi0gICAgICAgIGlmIChuZXdQcm9ncmFtKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBuZXdQcm9ncmFtLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG9sZFByb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9s
ZFByb2dyYW0tPnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSkKLXsKLSAgICAvLyBGcm9t
IEVYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbjogSWYgQmVnaW5RdWVyeUVYVCBpcyBjYWxsZWQg
d2l0aCBhbiA8aWQ+ICAKLSAgICAvLyBvZiB6ZXJvLCBpZiB0aGUgYWN0aXZlIHF1ZXJ5IG9iamVj
dCBuYW1lIGZvciA8dGFyZ2V0PiBpcyBub24temVybyAoZm9yIHRoZSAgCi0gICAgLy8gdGFyZ2V0
cyBBTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFX0VYVCwgaWYgIAotICAgIC8vIHRoZSBhY3RpdmUgcXVlcnkgZm9yIGVpdGhlciB0YXJnZXQg
aXMgbm9uLXplcm8pLCBpZiA8aWQ+IGlzIHRoZSBuYW1lIG9mIGFuIAotICAgIC8vIGV4aXN0aW5n
IHF1ZXJ5IG9iamVjdCB3aG9zZSB0eXBlIGRvZXMgbm90IG1hdGNoIDx0YXJnZXQ+LCBvciBpZiA8
aWQ+IGlzIHRoZQotICAgIC8vIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgYW55IHF1ZXJ5
IHR5cGUsIHRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcwotICAgIC8vIGdlbmVyYXRlZC4K
LQotICAgIC8vIEVuc3VyZSBubyBvdGhlciBxdWVyaWVzIGFyZSBhY3RpdmUKLSAgICAvLyBOT1RF
OiBJZiBvdGhlciBxdWVyaWVzIHRoYW4gb2NjbHVzaW9uIGFyZSBzdXBwb3J0ZWQsIHdlIHdpbGwg
bmVlZCB0byBjaGVjawotICAgIC8vIHNlcGFyYXRlbHkgdGhhdDoKLSAgICAvLyAgICBhKSBUaGUg
cXVlcnkgSUQgcGFzc2VkIGlzIG5vdCB0aGUgY3VycmVudCBhY3RpdmUgcXVlcnkgZm9yIGFueSB0
YXJnZXQvdHlwZQotICAgIC8vICAgIGIpIFRoZXJlIGFyZSBubyBhY3RpdmUgcXVlcmllcyBmb3Ig
dGhlIHJlcXVlc3RlZCB0YXJnZXQgKGFuZCBpbiB0aGUgY2FzZQotICAgIC8vICAgICAgIG9mIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJW
QVRJVkVfRVhULAotICAgIC8vICAgICAgIG5vIHF1ZXJ5IG1heSBiZSBhY3RpdmUgZm9yIGVpdGhl
ciBpZiBnbEJlZ2luUXVlcnkgdGFyZ2V0cyBlaXRoZXIuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBRVUVSWV9UWVBFX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLmFjdGl2
ZVF1ZXJ5W2ldLmdldCgpICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBRdWVy
eVR5cGUgcVR5cGU7Ci0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExF
U19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVl
cnkgKnF1ZXJ5T2JqZWN0ID0gZ2V0UXVlcnkocXVlcnksIHRydWUsIHRhcmdldCk7Ci0KLSAgICAv
LyBjaGVjayB0aGF0IG5hbWUgd2FzIG9idGFpbmVkIHdpdGggZ2xHZW5RdWVyaWVzCi0gICAgaWYg
KCFxdWVyeU9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgLy8gY2hlY2sgZm9yIHR5cGUgbWlzbWF0Y2gKLSAgICBp
ZiAocXVlcnlPYmplY3QtPmdldFR5cGUoKSAhPSB0YXJnZXQpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIHNldCBxdWVy
eSBhcyBhY3RpdmUgZm9yIHNwZWNpZmllZCB0YXJnZXQKLSAgICBtU3RhdGUuYWN0aXZlUXVlcnlb
cVR5cGVdLnNldChxdWVyeU9iamVjdCk7Ci0KLSAgICAvLyBiZWdpbiBxdWVyeQotICAgIHF1ZXJ5
T2JqZWN0LT5iZWdpbigpOwotfQotCi12b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJn
ZXQpCi17Ci0gICAgUXVlcnlUeXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUg
PSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9
IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FU
eXBlXS5nZXQoKTsKLQotICAgIGlmIChxdWVyeU9iamVjdCA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBxdWVy
eU9iamVjdC0+ZW5kKCk7Ci0KLSAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLnNldChOVUxM
KTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1
ZmZlcikKLXsKLSAgICBkZWxldGUgbUZyYW1lYnVmZmVyTWFwWzBdOwotICAgIG1GcmFtZWJ1ZmZl
ck1hcFswXSA9IGJ1ZmZlcjsKLSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSAwKQot
ICAgIHsKLSAgICAgICAgbUJvdW5kRHJhd0ZyYW1lYnVmZmVyID0gYnVmZmVyOwotICAgIH0KLX0K
LQotdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UgKnJlbmRlcmJ1ZmZlcikKLXsKLSAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVj
dCA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuZ2V0KCk7Ci0gICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5z
ZXRTdG9yYWdlKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRG
cmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZyYW1lYnVmZmVyTWFwOjpp
dGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAg
ICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
cmFtZWJ1ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KLQotRmVuY2UgKkNvbnRleHQ6OmdldEZlbmNl
KHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0g
bUZlbmNlTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VNYXAuZW5k
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZlbmNlLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1RdWVyeSAqQ29udGV4
dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51bSB0eXBl
KQotewotICAgIFF1ZXJ5TWFwOjppdGVyYXRvciBxdWVyeSA9IG1RdWVyeU1hcC5maW5kKGhhbmRs
ZSk7Ci0KLSAgICBpZiAocXVlcnkgPT0gbVF1ZXJ5TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghcXVlcnkt
PnNlY29uZCAmJiBjcmVhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5LT5zZWNvbmQg
PSBuZXcgUXVlcnkoaGFuZGxlLCB0eXBlKTsKLSAgICAgICAgICAgIHF1ZXJ5LT5zZWNvbmQtPmFk
ZFJlZigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBxdWVyeS0+c2Vjb25kOwotICAgIH0K
LX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1T
dGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRFbGVtZW50
QXJyYXlCdWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdl
dCgpOwotfQotCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCi17Ci0gICAg
aWYgKCFtQ2FjaGVkQ3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICBtQ2FjaGVkQ3VycmVu
dFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbSk7Ci0gICAgfQotICAgIHJldHVybiBtQ2FjaGVkQ3VycmVudFByb2dyYW07Ci19Ci0KLVRl
eHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VGV4dHVyZTJEKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRF
WFRVUkVfMkQpKTsKLX0KLQotVGV4dHVyZUN1YmVNYXAgKkNvbnRleHQ6OmdldFRleHR1cmVDdWJl
TWFwKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihnZXRTYW1w
bGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJFKSk7Ci19Ci0KLVRl
eHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBU
ZXh0dXJlVHlwZSB0eXBlKQotewotICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpOwotCi0gICAgaWYgKHRleGlkID09IDApICAgLy8gU3Bl
Y2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBiYXNlZCBv
biB0aGUgdGFyZ2V0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgIGNhc2UgVEVYVFVSRV8y
RDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOwotICAgICAgICAgIGNhc2UgVEVYVFVSRV9D
VUJFOiByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVyby5nZXQoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uZ2V0KCk7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4g
KnBhcmFtcykKLXsKLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfU0hB
REVSX0NPTVBJTEVSOiAgICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJU
OiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhNYXNrOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09M
T1JfV1JJVEVNQVNLOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JNYXNrUmVkOwot
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JNYXNrR3JlZW47Ci0gICAgICAgIHBhcmFt
c1syXSA9IG1TdGF0ZS5jb2xvck1hc2tCbHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUu
Y29sb3JNYXNrQWxwaGE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICpw
YXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7ICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1w
bGVBbHBoYVRvQ292ZXJhZ2U7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09W
RVJBR0U6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc2Npc3NvclRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVu
Y2lsVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9URVNU
OiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuYmxlbmQ7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kaXRo
ZXI7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05URVhUX1JP
QlVTVF9BQ0NFU1NfRVhUOiAqcGFyYW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0RmxvYXR2KEdMZW51
bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBERVBUSF9D
TEVBUl9WQUxVRSBpcyBpbmNsdWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0RmxvYXR2IGltcGxlbWVu
dGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0
aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8vIEdldEludGVnZXJ2
IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVy
c2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2Ug
dG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5s
aW5lV2lkdGg7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFH
RV9WQUxVRTogICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aENsZWFyVmFsdWU7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZG
U0VUX0ZBQ1RPUjogICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOyAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHM7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMSUFTRURf
TElORV9XSURUSF9SQU5HRToKLSAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfTElORV9X
SURUSF9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0VfTUFYOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0gc3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/
IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMyA6IGdsOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0VfTUFYX1NNMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRI
X1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7Ci0gICAgICAgIHBhcmFt
c1sxXSA9IG1TdGF0ZS56RmFyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1Jf
Q0xFQVJfVkFMVUU6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUu
cmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuOwot
ICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWU7Ci0gICAgICAg
IHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRl
LmJsZW5kQ29sb3IucmVkOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRDb2xvci5n
cmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsKLSAgICAg
ICAgcGFyYW1zWzNdID0gbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xp
bnQgKnBhcmFtcykKLXsKLSAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMg
bm90IGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRhdGlvbgot
ICAgIC8vIGJlY2F1c2UgaXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhlIGZhY3Qg
dGhhdCB0aGUgR0wgRVMgMi4wIHNwZWMgbmFtZXMKLSAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMg
bmF0aXZlIHF1ZXJ5IGZ1bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4g
YW55Ci0gICAgLy8gY2FzZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBj
YWxsaW5nIGFwcGxpY2F0aW9uLiBZb3UgbWF5IGZpbmQgaXQgaW4gCi0gICAgLy8gQ29udGV4dDo6
Z2V0RmxvYXR2LgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9NQVhf
VkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5J
Rk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNU
T1JTOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAg
ICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzog
KnBhcmFtcyA9IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwot
ICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9
IGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtRnJhZ21lbnRV
bmlmb3JtVmVjdG9ycygpOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVS
X1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNp
b24oKTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6
ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNo
YWRlciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJV
RkZFUl9CSU5ESU5HOiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJB
TUVCVUZGRVJfQklORElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJ
TkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdM
RTogICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BB
Q0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGln
bm1lbnQ7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNF
X1JPV19PUkRFUl9BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRl
cjsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJh
bXMgPSBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0
ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZ1
bmM7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjog
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFTSzogICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxNYXNrOyAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0
ZW5jaWxCYWNrTWFzazsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZhaWw7
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQ
VEhfRkFJTDogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbDsg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsOyAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfRlVO
QzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhGdW5jOyAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOiAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVzdEJsZW5kUkdCOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JM
RU5EX0VRVUFUSU9OX1JHQjogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1
YXRpb25SR0I7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJ
T05fQUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhh
OyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzogICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrOyAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9U
RVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVRleHR1cmVE
aW1lbnNpb24oKTsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RF
WFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNp
b24oKTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZP
Uk1BVFM6ICAgCi0gICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1h
dHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKLSAg
ICAgICAgewotICAgICAgICAgICAgR0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3VwcG9ydGVk
U2FtcGxlcygpOwotICAgICAgICAgICAgaWYgKG1heFNhbXBsZXMgIT0gMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gbWF4U2FtcGxlczsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAKLSAgICAgIGNh
c2UgR0xfU0FNUExFUzoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKGZyYW1l
YnVmZmVyLT5jb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAxOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBmcmFtZWJ1
ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEU6ICAgKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7ICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOiAq
cGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9u
KCksIGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkpOwotICAgICAgICAgICAgcGFyYW1zWzBd
ID0gbWF4RGltZW5zaW9uOwotICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRV
UkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1
cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRl
LnZpZXdwb3J0WDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsKLSAgICAg
ICAgcGFyYW1zWzJdID0gbVN0YXRlLnZpZXdwb3J0V2lkdGg7Ci0gICAgICAgIHBhcmFtc1szXSA9
IG1TdGF0ZS52aWV3cG9ydEhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ND
SVNTT1JfQk9YOgotICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7Ci0gICAgICAg
IHBhcmFtc1sxXSA9IG1TdGF0ZS5zY2lzc29yWTsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRl
LnNjaXNzb3JXaWR0aDsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnNjaXNzb3JIZWlnaHQ7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERTogICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsTW9kZTsgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5mcm9udEZhY2U7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9SRURfQklUUzoKLSAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKLSAgICAgIGNhc2UgR0xfQkxV
RV9CSVRTOgotICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0g
ICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXIpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1JFRF9CSVRTOiAgICpwYXJhbXMgPSBjb2xvcmJ1
ZmZlci0+Z2V0UmVkU2l6ZSgpOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9H
UkVFTl9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEdyZWVuU2l6ZSgpOyBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOiAgKnBhcmFtcyA9IGNvbG9yYnVm
ZmVyLT5nZXRCbHVlU2l6ZSgpOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0FM
UEhBX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7IGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdG
cmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGRlcHRo
YnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBkZXB0aGJ1
ZmZlci0+Z2V0RGVwdGhTaXplKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoK
LSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdl
dERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNp
bGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgICAg
IGlmIChzdGVuY2lsYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9URVhUVVJFX0JJTkRJTkdfMkQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUu
YWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnZXRNYXhpbXVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VC
RV9NQVA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8
IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RF
WFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6
Ci0gICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKLSAgICAgICAgKnBhcmFt
cyA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JN
QVRTX09FUzoKLSAgICAgICAgKnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRl
ckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1z
KQotewotICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBmb3IgREVQ
VEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGlzIEZMT0FUIHJh
dGhlciB0aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3Bl
Yy4gVGhpcyBpcyBkdWUKLSAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRl
cm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24KLSAgICAv
LyBpZiByZXR1cm5lZCBmcm9tIENvbnRleHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlzIGNvbnZl
cnNpb24gaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCAKLSAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9u
ZSBjYWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFy
aWFibGUsIHdlCi0gICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRz
LiBUaGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKLSAgICAvLyBh
cHBsaWNhdGlvbi4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0g
R0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZv
cm1hdHM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9C
SU5BUllfRk9STUFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0g
ICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVY
X1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzoKLSAg
ICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICBjYXNl
IEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlM6Ci0gICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgIGNhc2Ug
R0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNT
RURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzoK
LSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfUkVOREVS
QlVGRkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTToKLSAgICAgIGNh
c2UgR0xfUEFDS19BTElHTk1FTlQ6Ci0gICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JE
RVJfQU5HTEU6Ci0gICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6Ci0gICAgICBjYXNlIEdM
X0dFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVS
SVZBVElWRV9ISU5UX09FUzoKLSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBjYXNlIEdM
X0dSRUVOX0JJVFM6Ci0gICAgICBjYXNlIEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2UgR0xfQUxQ
SEFfQklUUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9CSVRTOgotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERToKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRToKLSAg
ICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1JFRjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1BBU1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6
Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOgotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfVkFMVUVfTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoKLSAgICAg
IGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BB
U1M6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19S
R0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQToKLSAgICAgIGNhc2UgR0xfQkxFTkRf
RFNUX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOgotICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9SR0I6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOgot
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAg
IGNhc2UgR0xfU1VCUElYRUxfQklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRToK
LSAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAgICAgIGNhc2UgR0xf
U0FNUExFX0JVRkZFUlM6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICBjYXNlIEdMX0lN
UExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9GT1JNQVQ6Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoK
LSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgY2FzZSBHTF9S
RVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgY2FzZSBHTF9OVU1fUFJPR1JB
TV9CSU5BUllfRk9STUFUU19PRVM6Ci0gICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1B
VFNfT0VTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9NQVhfU0FNUExFU19BTkdMRToKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGdldE1h
eFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgY2FzZSBHTF9T
Q0lTU09SX0JPWDoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAg
ICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0Vf
SU5WRVJUOgotICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6Ci0gICAgICBjYXNlIEdMX0NV
TExfRkFDRTogICAgICAgICAgICAgICAgLy8gQ1VMTF9GQUNFIHRocm91Z2ggRElUSEVSIGFyZSBu
YXR1cmFsIHRvIElzRW5hYmxlZCwKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDog
ICAgICAvLyBidXQgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12IHF1ZXJp
ZXMuCi0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogLy8gRm9yIHRoaXMg
cHVycG9zZSwgdGhleSBhcmUgdHJlYXRlZCBoZXJlIGFzIGJvb2wtbmF0dXJhbAotICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQ09WRVJBR0U6Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDoKLSAgICAg
IGNhc2UgR0xfU1RFTkNJTF9URVNUOgotICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOgotICAgICAg
Y2FzZSBHTF9CTEVORDoKLSAgICAgIGNhc2UgR0xfRElUSEVSOgotICAgICAgY2FzZSBHTF9DT05U
RVhUX1JPQlVTVF9BQ0NFU1NfRVhUOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdM
X0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOgotICAgICAgICB7Ci0gICAgICAg
ICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9S
OgotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzoKLSAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRToKLSAg
ICAgIGNhc2UgR0xfTElORV9XSURUSDoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBH
TF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICBj
YXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgIGNhc2UgR0xfREVQVEhfUkFO
R0U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7Ci0gICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQ09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgotICAgICAg
ICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFwcGxp
ZXMgdGhlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3
cG9ydCByZWN0YW5nbGUgYW5kCi0vLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgRGlyZWN0M0Qg
OSBkZXZpY2UKLWJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3
cG9ydCkKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJh
bWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJP
YmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3
ZSBtdXN0IHN5bnRoZXNpemUgYSBOVUxMIGNvbG9yYXR0YWNobWVudAotICAgIC8vIHRvIGtlZXAg
dGhlIEQzRCBydW50aW1lIGhhcHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBk
ZXB0aCB0ZXh0dXJpbmcuCi0gICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBO
VUxMOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0g
R0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXRDb2xvcmJ1ZmZlcigpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0TnVsbENvbG9yYnVm
ZmVyKCk7Ci0gICAgfQotICAgIGlmICghcmVuZGVyYnVmZmVyT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgRVJSKCJ1bmFibGUgdG8gbG9jYXRlIHJlbmRlcmJ1ZmZlciBmb3IgRkJPLiIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCByZW5kZXJUYXJnZXRDaGFuZ2VkID0g
ZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlcmJ1ZmZl
ck9iamVjdC0+Z2V0U2VyaWFsKCk7Ci0gICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBw
bGllZFJlbmRlclRhcmdldFNlcmlhbCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwot
ICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJy
ZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgfQotICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbUFw
cGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgICAgIG1T
Y2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7IC8vIFNjaXNzb3IgYXJlYSBtdXN0IGJlIGNsYW1wZWQg
dG8gcmVuZGVyIHRhcmdldCdzIHNpemUtLSB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50
IHJlbmRlciB0YXJnZXRzLgotICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVy
U2VyaWFsID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0g
ICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05F
KQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBkZXB0aGJ1
ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVk
bHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7
Ci0gICAgfQotICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVy
VHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICBk
ZXB0aFN0ZW5jaWwgPSBzdGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAg
aWYgKCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3Rl
bmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0g
c3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoYnVmZmVy
U2VyaWFsICE9IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNpbGJ1
ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgIW1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldERlcHRo
U3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsKTsKLSAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZl
clNlcmlhbCA9IGRlcHRoYnVmZmVyU2VyaWFsOwotICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZm
ZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgICAgICBtRGVwdGhTdGVuY2lsSW5p
dGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewot
ICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1SZW5k
ZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgfHwgcmVuZGVyVGFyZ2V0Q2hhbmdlZCkKLSAgICB7Ci0g
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmpl
Y3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0
Ci0gICAgICAgIH0KLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVyVGFyZ2V0
RGVzYyk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
ICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RWSUVXUE9SVDkg
dmlld3BvcnQ7Ci0KLSAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKLSAg
ICBmbG9hdCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBpZiAoaWdub3JlVmll
d3BvcnQpCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmlld3BvcnQu
WSA9IDA7Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGg7
Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsKLSAg
ICAgICAgdmlld3BvcnQuTWluWiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFogPSAxLjBm
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAobVN0
YXRlLnZpZXdwb3J0WCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldp
ZHRoKSk7Ci0gICAgICAgIHZpZXdwb3J0LlkgPSBjbGFtcChtU3RhdGUudmlld3BvcnRZLCAwTCwg
c3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgIHZp
ZXdwb3J0LldpZHRoID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBMLCBzdGF0aWNfY2Fz
dDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3
cG9ydC5YKSk7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9y
dEhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkg
LSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5ZKSk7Ci0gICAgICAgIHZpZXdwb3J0Lk1pblog
PSB6TmVhcjsKLSAgICAgICAgdmlld3BvcnQuTWF4WiA9IHpGYXI7Ci0gICAgfQotCi0gICAgaWYg
KHZpZXdwb3J0LldpZHRoIDw9IDAgfHwgdmlld3BvcnQuSGVpZ2h0IDw9IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgLy8gTm90aGluZyB0byByZW5kZXIKLSAgICB9Ci0KLSAgICBp
ZiAocmVuZGVyVGFyZ2V0Q2hhbmdlZCB8fCAhbVZpZXdwb3J0SW5pdGlhbGl6ZWQgfHwgbWVtY21w
KCZ2aWV3cG9ydCwgJm1TZXRWaWV3cG9ydCwgc2l6ZW9mIG1TZXRWaWV3cG9ydCkgIT0gMCkKLSAg
ICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0gICAgICAgIG1T
ZXRWaWV3cG9ydCA9IHZpZXdwb3J0OwotICAgICAgICBtVmlld3BvcnRJbml0aWFsaXplZCA9IHRy
dWU7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICht
U2Npc3NvclN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHJlY3Q7Ci0gICAgICAgICAgICByZWN0Lmxl
ZnQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVy
VGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcChtU3RhdGUu
c2Npc3NvclksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQp
KTsKLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclggKyBtU3Rh
dGUuc2Npc3NvcldpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2Mu
V2lkdGgpKTsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZ
ICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFy
Z2V0RGVzYy5IZWlnaHQpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZy
ZWN0KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JU
RVNURU5BQkxFLCBUUlVFKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxF
LCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVuaWZvcm1z
RGlydHkpCi0gICAgewotICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVu
dFByb2dyYW0oKTsKLSAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgICAgICBHTGludCBoYWxmUGl4ZWxT
aXplID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKLSAgICAg
ICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3Bv
cnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4
ZWxTaXplLCAxLCB4eSk7Ci0KLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciBj
b21wdXRpbmcgZ2xfRnJhZ0Nvb3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLgotICAgICAg
ICBHTGludCBjb29yZCA9IHByb2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOwotICAg
ICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCBtU3Rh
dGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGZs
b2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52
aWV3cG9ydEhlaWdodCAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3Jt
NGZ2KGNvb3JkLCAxLCB3aHh5KTsKLQotICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1CaW5h
cnktPmdldER4RGVwdGhMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IGR6WzJdID0geyh6RmFy
IC0gek5lYXIpIC8gMi4wZiwgKHpOZWFyICsgekZhcikgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOwotCi0gICAgICAgIEdMaW50IGRl
cHRoUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpOwotICAg
ICAgICBHTGZsb2F0IG5lYXJGYXJEaWZmWzNdID0ge3pOZWFyLCB6RmFyLCB6RmFyIC0gek5lYXJ9
OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5l
YXJGYXJEaWZmKTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBcHBsaWVzIHRoZSBmaXhlZC1mdW5jdGlvbiBzdGF0
ZSAoY3VsbGluZywgZGVwdGggdGVzdCwgYWxwaGEgYmxlbmRpbmcsIHN0ZW5jaWxpbmcsIGV0Yykg
dG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVt
IGRyYXdNb2RlKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJv
Z3JhbSgpOwotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0
LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmpl
Y3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0RHhGcm9udENDV0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQgY2N3ID0gKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ0NXKTsKLSAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2
KGZyb250Q0NXLCAxLCAmY2N3KTsKLQotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBwcm9ncmFt
QmluYXJ5LT5nZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpOwotICAgIEdMaW50IGFsd2F5c0Zy
b250ID0gIWlzVHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLSAgICBwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtMWl2KHBvaW50c09yTGluZXMsIDEsICZhbHdheXNGcm9udCk7Ci0KLSAgICBEM0RBREFQ
VEVSX0lERU5USUZJRVI5ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlm
aWVyKCk7Ci0gICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGlkZW50aWZpZXItPlZlbmRv
cklkICE9IDB4MTAwMjsKLSAgICAvLyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBi
dWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJvIGNvbG9yCi0gICAgLy8gd3JpdGUgbWFzayBjYW4g
Y2F1c2UgbGF0ZXIgZHJhd3MgdG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwKLSAg
ICAvLyBzZXQgYSBub256ZXJvIGNvbG9yIHdyaXRlIG1hc2sgYnV0IG1vZGlmeSB0aGUgYmxlbmQg
c3RhdGUgc28gdGhhdCBubwotICAgIC8vIGRyYXdpbmcgaXMgZG9uZS4KLSAgICAvLyBodHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5Ci0KLSAg
ICBpZiAobUN1bGxTdGF0ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0gICAgICAg
IGlmIChtU3RhdGUuY3VsbEZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0
ZS5jdWxsTW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VM
TE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3VsbFN0YXRlRGly
dHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9UUlVFKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENv
bXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJM
RSwgRDNEWkJfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9
IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93ZWQgJiYgKG1NYXNr
U3RhdGVEaXJ0eSB8fCBtQmxlbmRTdGF0ZURpcnR5KSkKLSAgICB7Ci0gICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSB0cnVlOwotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIH0K
LQotICAgIGlmIChtQmxlbmRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5i
bGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChtU3RhdGUuc291
cmNlQmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLnNvdXJjZUJsZW5kUkdC
ICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAmJgotICAgICAgICAgICAgICAgIG1TdGF0
ZS5kZXN0QmxlbmRSR0IgIT0gR0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLmRlc3RCbGVuZFJH
QiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVzMmR4
OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19CTEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQSh1bm9ybTw4PihtU3Rh
dGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxl
bmRDb2xvci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xv
ci5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBo
YSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1JDQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3VyY2VC
bGVuZFJHQikpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVT
VEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBlczJkeDo6
Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKLQotICAgICAgICAgICAg
aWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCAK
LSAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRB
bHBoYSB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSBtU3Rh
dGUuYmxlbmRFcXVhdGlvbkFscGhhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJV
RSk7Ci0KLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNC
TEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBo
YSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RC
TEVOREFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEp
KTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9Q
QUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5E
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBI
QUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQmxlbmRTdGF0ZURp
cnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8fCBtRnJv
bnRGYWNlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGZy
YW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2lsKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwg
VFJVRSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5Ci0gICAg
ICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxSRUYgPSBE
M0RSU19TVEVOQ0lMUkVGOwotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQz
RFJTX0NDV19TVEVOQ0lMTUFTSyA9IEQzRFJTX1NURU5DSUxNQVNLOwotICAgICAgICAgICAgY29u
c3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLID0gRDNEUlNf
U1RFTkNJTFdSSVRFTUFTSzsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFz
ayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgfHwgCi0gICAgICAgICAgICAgICAgbVN0
YXRlLnN0ZW5jaWxSZWYgIT0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIHx8IAotICAgICAgICAgICAg
ICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2ls
IHdyaXRlbWFza3MsIHJlZmVyZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJl
IGludmFsaWQgdW5kZXIgV2ViR0wuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZ2V0
IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKLSAgICAgICAgICAgIEdMdWludCBtYXhTdGVuY2lsID0gKDEgPDwgc3RlbmNpbGJ1
ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSkgLSAxOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklU
RU1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1h
c2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFj
ZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFy
aXNvbihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDog
RDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbFJlZiA8IChHTGludCltYXhTdGVu
Y2lsKSA/IG1TdGF0ZS5zdGVuY2lsUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NU
RU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOwot
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09
IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJT
X0NDV19TVEVOQ0lMWkZBSUwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
czJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q0NXID8gRDNEUlNfU1RFTkNJTFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3Rh
dGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1B
U0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVt
YXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZh
Y2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFy
aXNvbihtU3RhdGUuc3RlbmNpbEJhY2tGdW5jKSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVG
IDogRDNEUlNfQ0NXX1NURU5DSUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQp
bWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cg
PyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5j
aWxCYWNrTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVO
Q0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252
ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVO
Q0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNr
UGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0
YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NU
RU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNv
bnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtTWFza1N0YXRlRGlydHkpCi0gICAgewotICAgICAg
ICBpbnQgY29sb3JNYXNrID0gZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9yTWFz
a1JlZCwgbVN0YXRlLmNvbG9yTWFza0dyZWVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JN
YXNrQWxwaGEpOwotICAgICAgICBpZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tB
bGxvd2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwg
YnV0IHNldCBibGVuZGluZyBzbyBub3RoaW5nIHdpbGwgYmUgZHJhd24uCi0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldS
SVRFRU5BQkxFX0dSRUVOKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgRDNEQkxFTkRfWkVSTyk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkQsIEQzREJMRU5EX09ORSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBEM0RCTEVO
RE9QX0FERCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBjb2xvck1h
c2spOwotICAgICAgICB9Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pX
UklURUVOQUJMRSwgbVN0YXRlLmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAg
bU1hc2tTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1Qb2x5Z29uT2Zmc2V0
U3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0g
ZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICBpZiAoZGVw
dGhidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgKigoRFdPUkQqKSZtU3RhdGUucG9s
eWdvbk9mZnNldEZhY3RvcikpOwotICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxk
ZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVw
dGhTaXplKCkpKTsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19ERVBUSEJJQVMsICooKERXT1JEKikmZGVwdGhCaWFzKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAwKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobVNhbXBsZVN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUFs
cGhhVG9Db3ZlcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBhbHBo
YSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVMsIFRSVUUp
OwotICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBs
ZUNvdmVyYWdlVmFsdWUgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9h
dCB0aHJlc2hvbGQgPSAwLjVmOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICgoaSArIDEpICogbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPj0gdGhyZXNob2xkKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQg
Kz0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgfD0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywg
bWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAobURpdGhlclN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19ESVRIRVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDog
RkFMU0UpOwotCi0gICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotfQot
Ci1HTGVudW0gQ29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewotICAgIFRy
YW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAg
R0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEoZmlyc3Qs
IGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJS
T1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiBtVmVy
dGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMs
IGdldEN1cnJlbnRQcm9ncmFtKCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7Ci19Ci0KLS8vIEFw
cGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVj
dDNEIDkgZGV2aWNlCi1HTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZv
aWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJh
bnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQotewotICAgIEdMZW51bSBlcnIgPSBtSW5kZXhE
YXRhTWFuYWdlci0+cHJlcGFyZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlci5nZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsKLQotICAgIGlmIChlcnIgPT0g
R0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFw
cGxpZWRJQlNlcmlhbCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNl
cyhpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKLSAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwg
PSBpbmRleEluZm8tPnNlcmlhbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlcnI7
Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCi17Ci0gICAg
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnko
KTsKLQotICAgIGlmIChwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGllZFByb2dy
YW1TZXJpYWwpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhT
aGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAgSURpcmVj
dDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hh
ZGVyKCk7Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAg
cHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwotICAgICAgICBtQXBwbGllZFByb2dy
YW1TZXJpYWwgPSBwcm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBwcm9n
cmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHRleHR1cmVz
IGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4
dDo6YXBwbHlUZXh0dXJlcygpCi17Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1BJWEVMKTsK
LQotICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQotICAgIHsKLSAgICAgICAgYXBwbHlU
ZXh0dXJlcyhTQU1QTEVSX1ZFUlRFWCk7Ci0gICAgfQotfQotCi0vLyBGb3IgZWFjaCBEaXJlY3Qz
RCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCi0vLyBsb29r
cyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFuZCB0ZXh0
dXJlIHR5cGUsCi0vLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3NpbmcvZmls
dGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGludCBzYW1wbGVy
Q291bnQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
IDogTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBvZiBEaXJl
Y3QzRCA5IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQotICAgIHVuc2lnbmVkIGludCAq
YXBwbGllZFRleHR1cmVTZXJpYWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVk
VGV4dHVyZVNlcmlhbFBTIDogbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7Ci0gICAgaW50IGQzZFNh
bXBsZXJPZmZzZXQgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhU
VVJFU0FNUExFUjA7Ci0gICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVz
ZWRTYW1wbGVyUmFuZ2UodHlwZSk7Ci0KLSAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBz
YW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQotICAgIHsKLSAgICAg
ICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlw
ZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Ci0g
ICAgICAgIGludCBkM2RTYW1wbGVyID0gc2FtcGxlckluZGV4ICsgZDNkU2FtcGxlck9mZnNldDsK
LQotICAgICAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1
cmVUeXBlKHR5cGUsIHNhbXBsZXJJbmRleCk7Ci0KLSAgICAgICAgICAgIFRleHR1cmUgKnRleHR1
cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwotICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwo
KTsKLQotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0g
IT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUt
Pmhhc0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpkM2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGQzZFRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0
ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRleHR1cmUt
PmdldFdyYXBTKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0
dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1pbkZpbHRl
ciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIG1hZ0ZpbHRlciA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9B
RERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBf
QUREUkVTU1YsIGVzMmR4OjpDb252ZXJ0VGV4dHVyZVdyYXAod3JhcFQpKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNB
TVBfTUFHRklMVEVSLCBlczJkeDo6Q29udmVydE1hZ0ZpbHRlcihtYWdGaWx0ZXIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNk
TWlwRmlsdGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0
ZXIobWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1Q
X01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlw
RmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0
dXJlLT5oYXNEaXJ0eUltYWdlcygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFRleHR1cmUoZDNkU2FtcGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUp
LT5nZXRUZXh0dXJlKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFw
cGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSB0ZXhTZXJpYWw7Ci0gICAgICAgICAg
ICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2Vy
aWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAgICAgICAgICAgIGFw
cGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJhbmdl
OyBzYW1wbGVySW5kZXggPCBzYW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQotICAgIHsKLSAg
ICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVySW5kZXggKyBkM2RT
YW1wbGVyT2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3Nh
bXBsZXJJbmRleF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJl
YWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
c2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29t
cGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQot
ICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5n
ZXRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQ
aXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVudCk7Ci0gICAgLy8g
c2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAg
ICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAgIGlmIChy
ZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0
KCk7Ci0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm47ICAgLy8g
Q29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQotICAgIH0KLQotICAgIEQzRFNV
UkZBQ0VfREVTQyBkZXNjOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7Ci0KLSAg
ICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKLSAgICB7
Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1
c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAg
ICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRvUGl4ZWxz
ID0gIWdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0gNCAm
JiBtRGlzcGxheS0+aXNEM2Q5RXhEZXZpY2UoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVCho
ZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Mu
Rm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlw
ZSA9PSBHTF9VTlNJR05FRF9CWVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0g
ICAgICAgIC8vIFVzZSB0aGUgcGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3JpdGUg
ZGlyZWN0bHkgaW50byBjbGllbnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNj
LkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7Ci0gICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5IGFn
YWluIHdpdGhvdXQgdGhlIHNoYXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRvUGl4ZWxz
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4ZWxzKQot
ICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJm
YWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVN
LCAmc3lzdGVtU3VyZmFjZSwgTlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICByZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJlbmRlclRh
cmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKLSAgICByZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICByZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAg
ICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUg
ZXJyb3IKLSAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgotICAgICAgICBp
ZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgfQotCi0g
ICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVs
ZWFzZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCByZWN0OwotICAgIHJl
Y3QubGVmdCA9IGNsYW1wKHgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7Ci0g
ICAgcmVjdC50b3AgPSBjbGFtcCh5LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQp
KTsKLSAgICByZWN0LnJpZ2h0ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9O
Rz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdodCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBs
b2NrOwotICAgIHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwg
RDNETE9DS19SRUFET05MWSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0K
LSAgICAgICAgcmV0dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCi0gICAg
fQotCi0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0g
ICAgdW5zaWduZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCi0g
ICAgdW5zaWduZWQgY2hhciAqc291cmNlOwotICAgIGludCBpbnB1dFBpdGNoOwotICAgIGlmIChn
ZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkpCi0gICAgewotICAgICAgICBzb3VyY2UgPSAoKHVuc2ln
bmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3Qu
dG9wIC0gMSk7Ci0gICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7
Ci0gICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0KLQotICAgIGZvciAoaW50
IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsKLSAgICAgICAg
aWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgZm9ybWF0
ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0
X2JncmEsIGdpdmVuCi0gICAgICAgICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3Rl
IHRoYXQgYnVmZmVycyB3aXRoIG5vCi0gICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRo
ZSBzbG93IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQ
aXRjaCwKLSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAg
ICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiA0KTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7
Ci0gICAgICAgICAgICBmbG9hdCBnOwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAg
IGZsb2F0IGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hv
cnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICog
KDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkg
KiAoMS4wZiAvIDB4MDdFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAw
KSAqICgxLjBmIC8gMHhGODAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoodW5zaWdu
ZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7Ci0gICAgICAgICAg
ICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAg
ICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSAr
IGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZG
MDAwMDAwKSAqICgxLjBmIC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAo
YXJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAg
ICAgICAgZyA9IChhcmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAg
ICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZG
MDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2Ug
KyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4w
ZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICh4cmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAv
IDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAw
KSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAm
IDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEw
QjEwOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gp
OwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYg
LyAweEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNG
RikgKiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2Ig
JiAweDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAg
IHIgPSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRo
ZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291
cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGcgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwot
ICAgICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICog
aW5wdXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291
cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQg
Zm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5
IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGFiZ3JbNF07Ci0KLSAgICAgICAgICAg
ICAgICAgICAgRDNEWEZsb2F0MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNl
ICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCksIDQpOwotCi0gICAgICAgICAgICAgICAgICAgIGEg
PSBhYmdyWzNdOwotICAgICAgICAgICAgICAgICAgICBiID0gYWJnclsyXTsKLSAgICAgICAgICAg
ICAgICAgICAgZyA9IGFiZ3JbMV07Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBhYmdyWzBdOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNo
ICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhciko
MjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWdu
ZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhU
OgotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUg
KiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBj
aGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBq
ICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29y
ZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVj
dGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFj
a2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAg
MTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAx
ICAgIDAKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAg
ICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAg
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQs
IEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZb
aSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwK
LSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYp
IDw8IDgpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICog
ZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hv
cnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgot
ICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBp
biB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAg
ICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAg
ICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAg
ICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8
ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAx
c3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VY
VCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4K
LSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X0ZPUk1BVAotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElN
UExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQotICAgICAgICAgICAgICAgICAgICBkZXN0MTZb
aSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVm
KSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAq
IHIgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5V
bmxvY2tSZWN0KCk7Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1
ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIERXT1JEIGZsYWdzID0gMDsK
LQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1h
c2sgJj0gfkdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0KLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5H
TF9ERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAg
ewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIEdMdWludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0KLSAgICBpZiAobWFzayAm
IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5D
SUxfQlVGRkVSX0JJVDsKLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1
ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgICAgIGlmICghZGVwdGhTdGVuY2ls
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2lu
dGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7
Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwotICAgICAgICAgICAg
ZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGVu
Y2lsU2l6ZSA9IGR4MmVzOjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7Ci0gICAgICAgICAg
ICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0KLSAgICAgICAg
ICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJn
ZXQodHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBi
dXQgbm90IHRoZSB2aWV3cG9ydAotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVh
clZhbHVlLmFscGhhKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkKSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xl
YXJWYWx1ZS5ibHVlKSk7Ci0gICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5kZXB0aENs
ZWFyVmFsdWUpOwotICAgIGludCBzdGVuY2lsID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlICYg
MHgwMDAwMDBGRjsKLQotICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0QWxwaGFT
aXplKG1SZW5kZXJUYXJnZXREZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9yTWFza0Fs
cGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGZsYWdzICYg
RDNEQ0xFQVJfU1RFTkNJTCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5j
aWxVbm1hc2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGZsYWdz
ICYgRDNEQ0xFQVJfVEFSR0VUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhKG1TdGF0ZS5jb2xvck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9yTWFza0dyZWVuICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0Js
dWUgJiYgYWxwaGFVbm1hc2tlZCk7Ci0KLSAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwg
bmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKLSAgICB7Ci0gICAgICAgIC8vIFN0YXRlIHdoaWNoIGlz
IGFsdGVyZWQgaW4gYWxsIHBhdGhzIGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBp
cyBzYXZlZC4KLSAgICAgICAgLy8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5IHNvbWUg
cGF0aHMgd2lsbCBiZSBmbGFnZ2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKLSAgICAgICAgLy8g
IHRoYXQgcGF0aCBpcyB0YWtlbi4KLSAgICAgICAgSFJFU1VMVCBocjsKLSAgICAgICAgaWYgKG1N
YXNrZWRDbGVhclNhdmVkU3RhdGUgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIg
PSBtRGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZN
RU1PUlkpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJ
VEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBG
QUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJM
RU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZl
cnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEZWRihEM0RGVkZfWFla
UkhXIHwgRDNERlZGX0RJRkZVU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291
cmNlKDAsIE5VTEwsIDAsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNU
QVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RU
U1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFB
UkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2VGcmVxKGksIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBociA9IG1EZXZpY2Ut
PkVuZFN0YXRlQmxvY2soJm1NYXNrZWRDbGVhclNhdmVkU3RhdGUpOwotICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIg
PT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQobU1hc2tlZENs
ZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKTsKLQotICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRT
dGF0ZSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBociA9IG1NYXNrZWRDbGVhclNh
dmVkU3RhdGUtPkNhcHR1cmUoKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklU
RUVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1pFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLQot
ICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4
OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tH
cmVlbiwgbVN0YXRlLmNvbG9yTWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVO
Q0lMKSkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUkVGLCBzdGVu
Y2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxX
UklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZBSUws
IEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxQQVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAgICAgICAg
ICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxT
aGFkZXIoTlVMTCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAg
ICAgICAgbURldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcpOwotICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNE
VE9QX1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgw
LCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0
VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsK
LSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJH
MSwgRDNEVEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1RFWFRVUkVGQUNUT1IsIGNvbG9yKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLQotICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmbG9hdCBxdWFkWzRdWzRdOyAgIC8vIEEgcXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0aGUgdGFy
Z2V0LCBhbGlnbmVkIHRvIG1hdGNoIHRoZSBlZGdlcwotICAgICAgICBxdWFkWzBdWzBdID0gLTAu
NWY7Ci0gICAgICAgIHF1YWRbMF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVm
OwotICAgICAgICBxdWFkWzBdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7
Ci0KLSAgICAgICAgcXVhZFsxXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41ZjsK
LSAgICAgICAgcXVhZFsxXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAuNWY7Ci0g
ICAgICAgIHF1YWRbMV1bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzFdWzNdID0gMS4wZjsKLQot
ICAgICAgICBxdWFkWzJdWzBdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMl1bMV0gPSAtMC41ZjsK
LSAgICAgICAgcXVhZFsyXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOwot
Ci0gICAgICAgIHF1YWRbM11bMF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7Ci0g
ICAgICAgIHF1YWRbM11bMV0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFszXVsyXSA9IDAuMGY7Ci0g
ICAgICAgIHF1YWRbM11bM10gPSAxLjBmOwotCi0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5l
KCk7Ci0gICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQ
LCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBEM0RD
TEVBUl9aQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5D
bGVhcigwLCBOVUxMLCBEM0RDTEVBUl9aQlVGRkVSLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkK
LSAgICAgICAgewotICAgICAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+QXBwbHkoKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChmbGFncykKLSAgICB7Ci0gICAgICAgIG1E
ZXZpY2UtPkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUu
Y3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgIH0KLQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsK
LSAgICBpbnQgcHJpbWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRp
dmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJpbWl0aXZl
Q291bnQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWFw
cGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBhcHBseVN0YXRlKG1vZGUpOwotCi0gICAgR0xzaXplaSByZXBlYXREcmF3ID0gMTsKLSAg
ICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMs
ICZyZXBlYXREcmF3KTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKGVycik7Ci0gICAgfQotCi0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAg
YXBwbHlUZXh0dXJlcygpOwotCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9n
cmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghY3VsbFNr
aXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgU3RhdGljSW5kZXhCdWZmZXIgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0
Q291bnRpbmdJbmRpY2VzKGNvdW50KTsKLSAgICAgICAgICAgIGlmIChjb3VudGluZ0lCKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50
aW5nSUItPmdldFNlcmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgbURldmljZS0+U2V0SW5kaWNlcyhjb3VudGluZ0lCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJlcGVhdERyYXc7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50
LCAwLCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBhIGNvdW50aW5nIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzSW5z
dGFuY2VkLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gUmVndWxhciBj
YXNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0
aXZlVHlwZSwgMCwgcHJpbWl0aXZlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAg
aWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghaW5kaWNlcyAmJiAhbVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRp
dmVUeXBlOwotICAgIGludCBwcmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVy
dFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291
bnQpKQotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChw
cmltaXRpdmVDb3VudCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGFwcGx5U3RhdGUobW9kZSk7Ci0KLSAgICBUcmFuc2xhdGVkSW5kZXhEYXRh
IGluZGV4SW5mbzsKLSAgICBHTGVudW0gZXJyID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBj
b3VudCwgbW9kZSwgdHlwZSwgJmluZGV4SW5mbyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJP
UikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIEdMc2l6
ZWkgdmVydGV4Q291bnQgPSBpbmRleEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXgg
KyAxOwotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAgZXJyID0gYXBwbHlWZXJ0ZXhC
dWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0
RHJhdyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4
dHVyZXMoKTsKLQotICAgIGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFy
eSgpLT52YWxpZGF0ZVNhbXBsZXJzKGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFjdWxsU2tpcHNEcmF3
KG1vZGUpKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLQotICAgICAg
ICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdM
aW5lTG9vcChjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4KTsgICAKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcmVwZWF0RHJhdzsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1EZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4
SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJbmZv
LnN0YXJ0SW5kZXgsIHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotLy8gSW1wbGVtZW50cyBnbEZsdXNoIHdoZW4gYmxvY2sgaXMgZmFsc2UsIGds
RmluaXNoIHdoZW4gYmxvY2sgaXMgdHJ1ZQotdm9pZCBDb250ZXh0OjpzeW5jKGJvb2wgYmxvY2sp
Ci17Ci0gICAgbURpc3BsYXktPnN5bmMoYmxvY2spOwotfQotCi12b2lkIENvbnRleHQ6OmRyYXdM
aW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBpbnQgbWluSW5kZXgpCi17Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5k
ZXhlZCBkcmF3Ci0gICAgaWYgKHR5cGUgIT0gR0xfTk9ORSAmJiBtU3RhdGUuZWxlbWVudEFycmF5
QnVmZmVyLmdldCgpKQotICAgIHsKLSAgICAgICAgQnVmZmVyICppbmRleEJ1ZmZlciA9IG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIGludHB0cl90IG9mZnNldCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOwotICAgICAgICBpbmRpY2VzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGV4QnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0Owot
ICAgIH0KLQotICAgIFVJTlQgc3RhcnRJbmRleCA9IDA7Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSBm
YWxzZTsKLQotICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQotICAgIHsKLSAgICAgICAg
Y29uc3QgaW50IHNwYWNlTmVlZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgaW50
KTsKLQotICAgICAgICBpZiAoIW1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
TGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lO
REVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgzMik7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCLT5yZXNl
cnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCk7Ci0KLSAgICAgICAgICAgIFVJ
TlQgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQp
KTsKLSAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyA0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9O
T05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVieXRlKj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5k
aWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2Vz
KVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2Nv
dW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbMF07Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0x1aW50Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBtTGluZUxvb3BJQi0+dW5tYXAoKTsKLSAgICAgICAgICAgICAg
ICBzdWNjZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEp
ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLQotICAgICAgICBpZiAoIW1MaW5lTG9vcElCKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1
ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgxNik7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1MaW5lTG9vcElCLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVE
X1NIT1JUKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1MaW5lTG9v
cElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgICAgIHN0YXJ0SW5kZXgg
PSBvZmZzZXQgLyAyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdM
dXNob3J0Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+
KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtTGluZUxv
b3BJQi0+dW5tYXAoKTsKLSAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChzdWNjZWVkZWQpCi0gICAg
ewotICAgICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFs
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMobUxpbmVMb29w
SUItPmdldEJ1ZmZlcigpKTsKLSAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtTGluZUxv
b3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5EcmF3SW5k
ZXhlZFByaW1pdGl2ZShEM0RQVF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50
LCBzdGFydEluZGV4LCBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVS
UigiQ291bGQgbm90IGNyZWF0ZSBhIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xP
T1AuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEVudW0oKQotewotICAgIG1JbnZhbGlkRW51
bSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkKLXsKLSAg
ICBtSW52YWxpZFZhbHVlID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlk
T3BlcmF0aW9uKCkKLXsKLSAgICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6cmVjb3JkT3V0T2ZNZW1vcnkoKQotewotICAgIG1PdXRPZk1lbW9yeSA9IHRydWU7
Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCkK
LXsKLSAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uID0gdHJ1ZTsKLX0KLQotLy8gR2V0
IG9uZSBvZiB0aGUgcmVjb3JkZWQgZXJyb3JzIGFuZCBjbGVhciBpdHMgZmxhZywgaWYgYW55Lgot
Ly8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMuCi1HTGVudW0gQ29udGV4
dDo6Z2V0RXJyb3IoKQotewotICAgIGlmIChtSW52YWxpZEVudW0pCi0gICAgewotICAgICAgICBt
SW52YWxpZEVudW0gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9FTlVNOwot
ICAgIH0KLQotICAgIGlmIChtSW52YWxpZFZhbHVlKQotICAgIHsKLSAgICAgICAgbUludmFsaWRW
YWx1ZSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX1ZBTFVFOwotICAgIH0K
LQotICAgIGlmIChtSW52YWxpZE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIG1JbnZhbGlkT3Bl
cmF0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwot
ICAgIH0KLQotICAgIGlmIChtT3V0T2ZNZW1vcnkpCi0gICAgewotICAgICAgICBtT3V0T2ZNZW1v
cnkgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAgICB9Ci0K
LSAgICBpZiAobUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIG1J
bnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05P
X0VSUk9SOwotfQotCi1HTGVudW0gQ29udGV4dDo6Z2V0UmVzZXRTdGF0dXMoKQotewotICAgIGlm
IChtUmVzZXRTdGF0dXMgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBib29sIGxvc3Qg
PSBtRGlzcGxheS0+dGVzdERldmljZUxvc3QoKTsKLQotICAgICAgICBpZiAobG9zdCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsgICAvLyBTZXRz
IG1SZXNldFN0YXR1cwotICAgICAgICB9Ci0gICAgfQotCi0gICAgR0xlbnVtIHN0YXR1cyA9IG1S
ZXNldFN0YXR1czsKLQotICAgIGlmIChtUmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpCi0gICAg
ewotICAgICAgICBpZiAobURpc3BsYXktPnRlc3REZXZpY2VSZXNldHRhYmxlKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1SZXNldFN0YXR1cyA9IEdMX05PX0VSUk9SOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNSZXNl
dE5vdGlmaWNhdGlvbkVuYWJsZWQoKQotewotICAgIHJldHVybiAobVJlc2V0U3RyYXRlZ3kgPT0g
R0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9y
dHNTaGFkZXJNb2RlbDMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2Rl
bDM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfVkFSWUlOR19WRUNUT1JT
X1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwotfQotCi11bnNpZ25lZCBpbnQgQ29udGV4
dDo6Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzVmVydGV4VGV4dHVyZSA/IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
U19WVEYgOiAwOwotfQotCi11bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUyArIGdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotfQotCi1pbnQg
Q29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAg
IHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTX1NNMyA6IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOwotfQotCi1pbnQgQ29u
dGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhT
dXBwb3J0ZWRTYW1wbGVzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNh
bXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKLXsKLSAgICBpZiAo
cmVxdWVzdGVkID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gcmVxdWVzdGVkOwotICAgIH0K
LQotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0g
bU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7Ci0gICAgaWYgKGl0ciA9PSBtTXVsdGlT
YW1wbGVTdXBwb3J0LmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQot
ICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExF
UzsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIENvbnRleHQ6OnN1
cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRXZlbnRR
dWVyaWVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci19Ci0KLWJvb2wg
Q29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3Vw
cG9ydHNEWFQxVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQzVGV4dHVy
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7Ci19Ci0KLWJv
b2wgQ29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBt
U3VwcG9ydHNEWFQ1VGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMy
VGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsKLX0KLQotYm9vbCBD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAotewotICAg
IHJldHVybiBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1ib29sIENv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1
cHBvcnRzRmxvYXQxNlRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZMaW5l
YXJGaWx0ZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRl
eHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlczsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNp
b24oKSBjb25zdAotewotICAgIHJldHVybiBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uOwotfQot
Ci1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGlt
dW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhDdWJlVGV4
dHVyZURpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwo
KSBjb25zdAotewotICAgIHJldHVybiBtTWF4VGV4dHVyZUxldmVsOwotfQotCi1ib29sIENvbnRl
eHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3Vw
cG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWlu
YW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFu
Y2VBbHBoYVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJl
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Ci19Ci0KLWJv
b2wgQ29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdAotewotICAgIHJldHVybiBt
U3VwcG9ydHMzMmJpdEluZGljZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVy
ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdAotewotICAg
IHJldHVybiBtU3VwcG9ydHNJbnN0YW5jaW5nOwotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEJ1
ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDIuOSBwYWdlIDIyOgotICAgIC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxl
IGl0IGlzIGJvdW5kLCBhbGwgYmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1cnJlbnQg
Y29udGV4dAotICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVsZXRlLUJ1
ZmZlcnMpIGFyZSByZXNldCB0byB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5hcnJheUJ1ZmZlci5p
ZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVM
TCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBi
dWZmZXIpCi0gICAgewotICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxM
KTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5t
Qm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgLy8gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMy44IHBhZ2UgODQ6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBp
cyBkZWxldGVkLCBpdCBpcyBhcyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUgYm91bmQg
dG8gdGhhdCB0ZXh0dXJlIG9iamVjdCBhcmUKLSAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2Jq
ZWN0IHplcm8KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NP
VU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxl
ciA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBs
ZXJdLmlkKCkgPT0gdGV4dHVyZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24g
NC40IHBhZ2UgMTEyOgotICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3aGls
ZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZl
ciwgdGhlbiBpdCBpcwotICAgIC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVu
IGNhbGxlZCwgd2l0aCBhIHRleHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0
byB3aGljaCB0aGlzCi0gICAgLy8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkg
Ym91bmQgZnJhbWVidWZmZXIuCi0KLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0g
Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9
IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9
Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJh
bWVidWZmZXIpCi0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFRleHR1cmUo
dGV4dHVyZSk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKEdM
dWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0
LjQgcGFnZSAxMDc6Ci0gICAgLy8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBi
b3VuZCB0byB0aGUgdGFyZ2V0IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3Vn
aAotICAgIC8vIEJpbmRGcmFtZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJn
ZXQgb2YgRlJBTUVCVUZGRVIgYW5kIGZyYW1lYnVmZmVyIG9mIHplcm8uCi0KLSAgICBpZiAobVN0
YXRlLnJlYWRGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmRS
ZWFkRnJhbWVidWZmZXIoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZm
ZXIgPT0gZnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDAp
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJl
bmRlcmJ1ZmZlcikKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFn
ZSAxMDk6Ci0gICAgLy8gSWYgYSByZW5kZXJidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQg
dG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaCBCaW5kUmVuZGVyYnVm
ZmVyCi0gICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZF
UiBhbmQgbmFtZSBvZiB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKSA9
PSByZW5kZXJidWZmZXIpCi0gICAgewotICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwotICAg
IH0KLQotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToKLSAg
ICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2Ug
aXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwKLSAgICAvLyB0
aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwg
d2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50Ci0gICAgLy8gcG9p
bnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3Vu
ZCBmcmFtZWJ1ZmZlci4KLQotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRS
ZWFkRnJhbWVidWZmZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0
RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAg
ICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsK
LSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSBy
ZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFJl
bmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIH0KLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6
Z2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBUZXh0dXJlICp0
ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsKLQotICAgIGlmICh0ID09IE5VTEwp
Ci0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAw
LCAyNTUgfTsKLQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIC8vIGRlZmF1
bHQgZmFsbHMgdGhyb3VnaCB0byBURVhUVVJFXzJECi0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVf
MkQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRl
MmQgPSBuZXcgVGV4dHVyZTJEKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0gICAg
ICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgICAgdCA9IGluY29tcGxldGUy
ZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBU
RVhUVVJFX0NVQkU6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFw
ICppbmNvbXBsZXRlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcChUZXh0dXJlOjpJTkNPTVBMRVRF
X1RFWFRVUkVfSUQpOwotCi0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBv
c1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUt
PnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xv
cik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNv
bXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVn
WigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0KLSAgICAg
ICAgICAgICAgdCA9IGluY29tcGxldGVDdWJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNl
dCh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotYm9vbCBDb250ZXh0OjpjdWxsU2tp
cHNEcmF3KEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYm
IG1TdGF0ZS5jdWxsTW9kZSA9PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShk
cmF3TW9kZSk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdN
b2RlKQotewotICAgIHN3aXRjaCAoZHJhd01vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9UUklB
TkdMRVM6Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgIGNhc2UgR0xfVFJJQU5H
TEVfU1RSSVA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0g
ICAgICBjYXNlIEdMX0xJTkVTOgotICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6Ci0gICAgICBjYXNl
IEdMX0xJTkVfU1RSSVA6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvbnRl
eHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykK
LXsKLSAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1ZXNbMF07
Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZh
bHVlc1sxXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVl
WzJdID0gdmFsdWVzWzJdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJy
ZW50VmFsdWVbM10gPSB2YWx1ZXNbM107Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5
Q3VycmVudFZhbHVlKGluZGV4KTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJE
aXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgQVNTRVJUKGluZGV4
IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Ci19Ci0KLS8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4g
Zm9sbG93aW5nIG9yZGVyCi0vLyBPRVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lvbnMKLS8v
IFZlbmRvciBleHRlbnNpb25zCi12b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQot
ewotICAgIG1FeHRlbnNpb25TdHJpbmcgPSAiIjsKLQotICAgIC8vIE9FUyBleHRlbnNpb25zCi0g
ICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQotCi0gICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0gICAgLy9t
RXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7Ci0gICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKLQotICAgIGlmIChzdXBwb3J0
c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9y
dHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX25wb3QgIjsKLSAgICB9Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0
ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAi
OwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9i
Z3JhICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3MgIjsKLQot
ICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KLQot
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAi
OwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLQot
ICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNEZXB0aFRl
eHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9k
ZXB0aF90ZXh0dXJlICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfZnJhbWVidWZmZXJfYmxpdCAiOwotICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkg
IT0gMCkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlICI7Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzSW5zdGFuY2lu
ZygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xF
X3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgIjsKLQotICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJl
cygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJl
cygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQ1ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAiOwotCi0gICAgLy8gT3RoZXIgdmVuZG9yLXNw
ZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSkKLSAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7Ci0gICAgfQotCi0g
ICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFz
dF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsK
LSAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOwotICAgIH0KLX0KLQotY29u
c3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6OmluaXRSZW5k
ZXJlclN0cmluZygpCi17Ci0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9
IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotCi0gICAgbVJlbmRlcmVyU3RyaW5n
ID0gIkFOR0xFICgiOwotICAgIG1SZW5kZXJlclN0cmluZyArPSBpZGVudGlmaWVyLT5EZXNjcmlw
dGlvbjsKLSAgICBtUmVuZGVyZXJTdHJpbmcgKz0gIikiOwotfQotCi1jb25zdCBjaGFyICpDb250
ZXh0OjpnZXRSZW5kZXJlclN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJlclN0
cmluZy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBz
cmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgx
LCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQg
bWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1l
YnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFt
ZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1lYnVmZmVy
LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fAotICAgICAgICAh
ZHJhd0ZyYW1lYnVmZmVyIHx8IGRyYXdGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVi
dWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpbnQgcmVhZEJ1ZmZlcldpZHRoID0g
cmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOwotICAgIGludCBy
ZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRI
ZWlnaHQoKTsKLSAgICBpbnQgZHJhd0J1ZmZlcldpZHRoID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOwotICAgIGludCBkcmF3QnVmZmVySGVpZ2h0ID0gZHJh
d0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsKLQotICAgIFJFQ1Qg
c291cmNlUmVjdDsKLSAgICBSRUNUIGRlc3RSZWN0OwotCi0gICAgaWYgKHNyY1gwIDwgc3JjWDEp
Ci0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsKLSAgICAgICAgc291cmNl
UmVjdC5yaWdodCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7Ci0gICAg
ICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0
WDE7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3Qu
cmlnaHQgPSBkc3RYMDsKLSAgICB9Ci0KLSAgICBpZiAoc3JjWTAgPCBzcmNZMSkKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LmJvdHRv
bSA9IGRzdFkxOwotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kwOwotICAgICAgICBkZXN0
UmVjdC50b3AgPSBkc3RZMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNl
UmVjdC5ib3R0b20gPSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTA7Ci0g
ICAgICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnRvcCA9IGRz
dFkxOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJjZVJlY3Q7
Ci0gICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYgKG1TdGF0
ZS5zY2lzc29yVGVzdCkKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMgb2Yg
dGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVzdAot
ICAgICAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIGRlc3RSZWN0IGlzIG5vdyBpbiBEM0Qtc3R5bGUg
Y29vcmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBvZiB0aGUKLSAgICAgICAgLy8gcmVjdCB3aWxsIGJl
IGNoZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4KLSAgICAg
ICAgaWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7Ci0gICAg
ICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5sZWZ0ICs9IHhEaWZmOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4gbVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNz
b3JXaWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJlY3Qucmln
aHQgLSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7Ci0gICAgICAgICAg
ICBkZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lz
c29yV2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnJpZ2h0IC09IHhEaWZm
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8IG1TdGF0ZS5zY2lzc29y
WSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gbVN0YXRlLnNjaXNzb3JZIC0g
ZGVzdFJlY3QudG9wOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QudG9wID0gbVN0YXRl
LnNjaXNzb3JZOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0geURpZmY7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QuYm90dG9tID4gbVN0YXRlLnNjaXNz
b3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5
RGlmZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3Nv
ckhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5ib3R0b20gPSBtU3RhdGUu
c2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNz
b3JlZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBi
bGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFs
c2U7Ci0KLSAgICBSRUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsK
LSAgICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lzc29yZWRSZWN0OwotCi0gICAgLy8g
VGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0
cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5kcyBvZiAKLSAgICAvLyB0aGUgYWN0
dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0Lmxl
ZnQgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0
LmxlZnQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPSAwOwotICAgICAgICBkZXN0
VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1l
ZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCi0gICAgewotICAgICAgICBpbnQgeERpZmYg
PSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZmZXJXaWR0aDsKLSAgICAgICAgc291
cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJl
Y3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVk
UmVjdC50b3A7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIGRl
c3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1t
ZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURp
ZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAg
ICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJp
bW1lZFJlY3QubGVmdCA8IDApCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSAwIC0gZGVzdFRy
aW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVz
dFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQotICAgIHsKLSAgICAgICAgaW50
IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJj
ZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1l
ZFJlY3QudG9wIDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1l
ZFJlY3QudG9wOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wID0gMDsKLSAgICAgICAgc291
cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1l
ZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlm
ZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNl
VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGJvb2wgcGFydGlhbEJ1
ZmZlckNvcHkgPSBmYWxzZTsKLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gc291
cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1ZmZlckhlaWdodCB8fAotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVmZmVyV2lk
dGggfHwgCi0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3Qu
dG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQg
LSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291
cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApCi0g
ICAgewotICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgY29uc3QgYm9vbCB2
YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBH
TF9URVhUVVJFXzJEIHx8Ci0gICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgY29uc3QgYm9vbCB2YWxpZERy
YXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhU
VVJFXzJEIHx8Ci0gICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlw
ZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKLSAgICAgICAgaWYgKCF2YWxpZFJlYWRUeXBlIHx8ICF2
YWxpZERyYXdUeXBlIHx8Ci0gICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29sb3IgYnVm
ZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0
ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHBh
cnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgIH0KLQotICAgICAgICBibGl0UmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKLQotICAgIH0K
LQotICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZF
Ul9CSVQpKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNCdWZmZXIgPSBOVUxM
OwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7Ci0KLSAgICAgICAg
Ly8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBkbyBub3Qgc3VwcG9y
dCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBzbyBpZiB3
ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIGl0IHdp
bGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYgR0xfREVQVEhfQlVG
RkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhi
dWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSB8fAot
ICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdl
dEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RDNE
Rm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWRE
U0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAgICAgICAg
ICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxf
QlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdl
dFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVy
VHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHBhcnRpYWxCdWZmZXJDb3B5KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk9ubHkgd2hv
bGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBp
bXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCi0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNh
bXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVhZERTQnVm
ZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
YmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURp
c3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiByZWFkUmVuZGVyVGFyZ2V0ID0g
cmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgICAgIElEaXJlY3Qz
RFN1cmZhY2U5KiBkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRSZW5kZXJU
YXJnZXQoKTsKLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNo
UmVjdChyZWFkUmVuZGVyVGFyZ2V0LCAmc291cmNlVHJpbW1lZFJlY3QsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LCAm
ZGVzdFRyaW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOwotCi0gICAgICAgICAgICByZWFkUmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJl
Y3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAg
ICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0ZW5jaWwg
PSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkqIGRyYXdEZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRo
U3RlbmNpbCgpOwotCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0
Y2hSZWN0KHJlYWREZXB0aFN0ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5VTEwsIEQz
RFRFWEZfTk9ORSk7Ci0KLSAgICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
LSAgICAgICAgICAgIGRyYXdEZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigi
QmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCBy
ZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25D
YWNoZSgpIDogbU1heExydSgwKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRF
WF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2Fj
aGVbaV0udmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOwotICAgICAgICBtVmVydGV4RGVjbENhY2hl
W2ldLmxydUNvdW50ID0gMDsKLSAgICB9Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5W
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9W
RVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRl
eERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAg
bVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1HTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNs
YXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tdLCBQcm9ncmFtICpwcm9ncmFtLCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAq
cmVwZWF0RHJhdykKLXsKLSAgICAqcmVwZWF0RHJhdyA9IDE7Ci0KLSAgICBpbnQgaW5kZXhlZEF0
dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRl
ID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotCi0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewot
ICAgICAgICAvLyBGaW5kIGFuIGluZGV4ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qg
c3RyZWFtIDAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IE1B
WF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
aW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0gMCkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vk
QXR0cmlidXRlID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBh
bmQgaW5zdGFuY2VkIGF0dHJpYnV0ZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGluZGV4ZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBEM0RWRVJURVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMg
KyAxXTsKLSAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKLQot
ICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmlu
YXJ5KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgc3RyZWFtID0gaTsKLQotICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVnIG9uIEFU
SSBjYXJkcyB3ZSBjYW4ndCBlbmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhlIGF0dHJp
YnV0ZXMgYXJlIGluc3RhbmNlZC4KLSAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0cmli
dXRlID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICpyZXBlYXREcmF3ID0gaW5zdGFuY2VzOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA9PSBpbmRleGVkQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0ZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIFVJTlQgZnJlcXVlbmN5
ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzW2ldLmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwg
aW5zdGFuY2VzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVl
bmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOU1RBTkNFREFUQSB8IGF0dHJpYnV0ZXNbaV0uZGl2aXNv
cjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJlcXVlbmN5
KTsKLSAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtQXBwbGllZFZC
c1tzdHJlYW1dLnNlcmlhbCAhPSBhdHRyaWJ1dGVzW2ldLnNlcmlhbCB8fAotICAgICAgICAgICAg
ICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8
Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRl
c1tpXS5vZmZzZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2Uoc3RyZWFtLCBhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZlciwgYXR0cmlidXRl
c1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKLSAgICAgICAgICAgICAgICBtQXBw
bGllZFZCc1tzdHJlYW1dLnNlcmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOwotICAgICAgICAg
ICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc3RyaWRlID0gYXR0cmlidXRlc1tpXS5zdHJpZGU7
Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1dGVz
W2ldLm9mZnNldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFt
ID0gc3RyZWFtOwotICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsKLSAgICAgICAgICAg
IGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLnR5cGU7Ci0gICAgICAgICAgICBlbGVtZW50
LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7Ci0gICAgICAgICAgICBlbGVtZW50LT5V
c2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdl
SW5kZXggPSBwcm9ncmFtQmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGkpOwotICAgICAgICAgICAg
ZWxlbWVudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8
IGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAg
ICBpZiAobUluc3RhbmNpbmdFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNE
REVDTF9FTkQoKTsKLSAgICAqKGVsZW1lbnQrKykgPSBlbmQ7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAg
ICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKLSAg
ICAgICAgaWYgKG1lbWNtcChlbnRyeS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVu
dCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkpID09IDAgJiYgZW50cnkt
PnZlcnRleERlY2xhcmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbnRyeS0+bHJ1Q291
bnQgPSArK21NYXhMcnU7Ci0gICAgICAgICAgICBpZihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24g
IT0gbUxhc3RTZXRWRGVjbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2Ut
PlNldFZlcnRleERlY2xhcmF0aW9uKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgICAg
ICAgICAgICAgbUxhc3RTZXRWRGVjbCA9IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEdMX05PX0VSUk9SOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgVmVydGV4RGVjbENhY2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNs
Q2FjaGU7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9F
TlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS5scnVD
b3VudCA8IGxhc3RDYWNoZS0+bHJ1Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RD
YWNoZSA9ICZtVmVydGV4RGVjbENhY2hlW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGxh
c3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hl
LT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Ci0gICAgICAgIC8vIG1MYXN0U2V0VkRlY2wgaXMg
c2V0IHRvIHRoZSByZXBsYWNlbWVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQotICAgICAg
ICAvLyBhYm91dCBpdC4KLSAgICB9Ci0KLSAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNoZWRFbGVt
ZW50cywgZWxlbWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVM
RU1FTlQ5KSk7Ci0gICAgZGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywg
Jmxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgIGRldmljZS0+U2V0VmVydGV4RGVj
bGFyYXRpb24obGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgbUxhc3RTZXRWRGVj
bCA9IGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb247Ci0gICAgbGFzdENhY2hlLT5scnVDb3Vu
dCA9ICsrbU1heExydTsKLQotICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotdm9pZCBWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlOjptYXJrU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVk
VkJzW2ldLnNlcmlhbCA9IDA7Ci0gICAgfQotCi0gICAgbUxhc3RTZXRWRGVjbCA9IE5VTEw7Ci0g
ICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsgICAvLyBGb3JjZXMgaXQgdG8gYmUgZGlzYWJs
ZWQgd2hlbiBub3QgdXNlZAotfQotCi19Ci0KLWV4dGVybiAiQyIKLXsKLWdsOjpDb250ZXh0ICpn
bENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQot
ewotICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29uZmlnLCBzaGFyZUNvbnRleHQsIG5vdGlm
eVJlc2V0cywgcm9idXN0QWNjZXNzKTsKLX0KLQotdm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpD
b250ZXh0ICpjb250ZXh0KQotewotICAgIGRlbGV0ZSBjb250ZXh0OwotCi0gICAgaWYgKGNvbnRl
eHQgPT0gZ2w6OmdldENvbnRleHQoKSkKLSAgICB7Ci0gICAgICAgIGdsOjptYWtlQ3VycmVudChO
VUxMLCBOVUxMLCBOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29u
dGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpCi17Ci0gICAgZ2w6Om1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3BsYXksIHN1cmZhY2UpOwot
fQotCi1nbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgpCi17Ci0gICAgcmV0dXJuIGds
OjpnZXRDb250ZXh0KCk7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDQ3Y2U3
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIENvbnRleHQuaDogRGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5n
IGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0
IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgotCi0j
aWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05URVhUX0hf
Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUg
PEdMRVMyL2dsMmV4dC5oPgotI2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0j
aW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGhhc2hfbWFwPgot
Ci0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1j
bGFzcyBEaXNwbGF5OwotY2xhc3MgU3VyZmFjZTsKLWNsYXNzIENvbmZpZzsKLX0KLQotbmFtZXNw
YWNlIGdsCi17Ci1zdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKLXN0cnVjdCBUcmFuc2xhdGVk
SW5kZXhEYXRhOwotCi1jbGFzcyBCdWZmZXI7Ci1jbGFzcyBTaGFkZXI7Ci1jbGFzcyBQcm9ncmFt
OwotY2xhc3MgVGV4dHVyZTsKLWNsYXNzIFRleHR1cmUyRDsKLWNsYXNzIFRleHR1cmVDdWJlTWFw
OwotY2xhc3MgRnJhbWVidWZmZXI7Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBSZW5kZXJi
dWZmZXJTdG9yYWdlOwotY2xhc3MgQ29sb3JidWZmZXI7Ci1jbGFzcyBEZXB0aGJ1ZmZlcjsKLWNs
YXNzIFN0cmVhbWluZ0luZGV4QnVmZmVyOwotY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIERl
cHRoU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwotY2xhc3MgSW5kZXhE
YXRhTWFuYWdlcjsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBGZW5jZTsKLWNsYXNzIFF1ZXJ5OwotCi1l
bnVtCi17Ci0gICAgRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTID0gMjU2LAotICAgIEQzRDlfTUFY
X0JPT0xfQ09OU1RBTlRTID0gMTYsCi0gICAgRDNEOV9NQVhfSU5UX0NPTlNUQU5UUyA9IDE2LAot
Ci0gICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsCi0gICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlMgPSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgLSAyLCAgIC8vIFJlc2VydmUgc3BhY2Ug
Zm9yIGR4X0hhbGZQaXhlbFNpemUgYW5kIGR4X0RlcHRoUmFuZ2UuCi0gICAgTUFYX1ZBUllJTkdf
VkVDVE9SU19TTTIgPSA4LAotICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAsCi0gICAg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFNfVlRGID0gNCwgICAvLyBGb3IgZGV2aWNlcyBzdXBwb3J0aW5nIHZlcnRleCB0ZXh0
dXJlIGZldGNoCi0gICAgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGID0gTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
LCAgICAKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMiA9IDMyIC0gMywgICAg
Ly8gUmVzZXJ2ZSBzcGFjZSBmb3IgZHhfQ29vcmQsIGR4X0RlcHRoLCBhbmQgZHhfRGVwdGhSYW5n
ZS4gZHhfUG9pbnRPckxpbmVzIGFuZCBkeF9Gcm9udENDVyB1c2Ugc2VwYXJhdGUgYm9vbCByZWdp
c3RlcnMuCi0gICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTMgPSAyMjQgLSAzLAot
ICAgIE1BWF9EUkFXX0JVRkZFUlMgPSAxLAotCi0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9GT1JNQVQgPSBHTF9SR0IsCi0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFID0g
R0xfVU5TSUdORURfU0hPUlRfNV82XzUKLX07Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0gICAgUVVF
UllfQU5ZX1NBTVBMRVNfUEFTU0VELAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05T
RVJWQVRJVkUsCi0KLSAgICBRVUVSWV9UWVBFX0NPVU5UCi19OwotCi1jb25zdCBmbG9hdCBBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfTElO
RV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0Vf
TUFYX1NNMiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFY
X1NNMyA9IDY0LjBmOwotCi1zdHJ1Y3QgQ29sb3IKLXsKLSAgICBmbG9hdCByZWQ7Ci0gICAgZmxv
YXQgZ3JlZW47Ci0gICAgZmxvYXQgYmx1ZTsKLSAgICBmbG9hdCBhbHBoYTsKLX07Ci0KLS8vIEhl
bHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCi1jbGFz
cyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDog
bVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDAp
LCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCi0gICAg
ewotICAgICAgICBtQ3VycmVudFZhbHVlWzBdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1
ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMl0gPSAwLjBmOwotICAgICAgICBt
Q3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAgICB9Ci0KLSAgICBpbnQgdHlwZVNpemUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQllURTogICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOwotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVi
eXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJu
IG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKLSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAg
ICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhlZCk7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAgfQotCi0g
ICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBvaW50ZXIKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAg
R0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9ybWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7
ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlkZQotCi0gICAgdW5pb24KLSAgICB7Ci0gICAgICAg
IGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAgICAgICBpbnRwdHJfdCBtT2Zmc2V0OwotICAgIH07
Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBDYXB0dXJl
ZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRlciBpcyBjYWxsZWQuCi0KLSAgICBib29sIG1BcnJh
eUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKLSAg
ICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKLSAgICB1
bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19OwotCi10eXBlZGVmIFZlcnRleEF0dHJpYnV0ZSBWZXJ0
ZXhBdHRyaWJ1dGVBcnJheVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0vLyBIZWxwZXIgc3RydWN0
dXJlIHRvIHN0b3JlIGFsbCByYXcgc3RhdGUKLXN0cnVjdCBTdGF0ZQotewotICAgIENvbG9yIGNv
bG9yQ2xlYXJWYWx1ZTsKLSAgICBHTGNsYW1wZiBkZXB0aENsZWFyVmFsdWU7Ci0gICAgaW50IHN0
ZW5jaWxDbGVhclZhbHVlOwotCi0gICAgYm9vbCBjdWxsRmFjZTsKLSAgICBHTGVudW0gY3VsbE1v
ZGU7Ci0gICAgR0xlbnVtIGZyb250RmFjZTsKLSAgICBib29sIGRlcHRoVGVzdDsKLSAgICBHTGVu
dW0gZGVwdGhGdW5jOwotICAgIGJvb2wgYmxlbmQ7Ci0gICAgR0xlbnVtIHNvdXJjZUJsZW5kUkdC
OwotICAgIEdMZW51bSBkZXN0QmxlbmRSR0I7Ci0gICAgR0xlbnVtIHNvdXJjZUJsZW5kQWxwaGE7
Ci0gICAgR0xlbnVtIGRlc3RCbGVuZEFscGhhOwotICAgIEdMZW51bSBibGVuZEVxdWF0aW9uUkdC
OwotICAgIEdMZW51bSBibGVuZEVxdWF0aW9uQWxwaGE7Ci0gICAgQ29sb3IgYmxlbmRDb2xvcjsK
LSAgICBib29sIHN0ZW5jaWxUZXN0OwotICAgIEdMZW51bSBzdGVuY2lsRnVuYzsKLSAgICBHTGlu
dCBzdGVuY2lsUmVmOwotICAgIEdMdWludCBzdGVuY2lsTWFzazsKLSAgICBHTGVudW0gc3RlbmNp
bEZhaWw7Ci0gICAgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsOwotICAgIEdMZW51bSBzdGVu
Y2lsUGFzc0RlcHRoUGFzczsKLSAgICBHTHVpbnQgc3RlbmNpbFdyaXRlbWFzazsKLSAgICBHTGVu
dW0gc3RlbmNpbEJhY2tGdW5jOwotICAgIEdMaW50IHN0ZW5jaWxCYWNrUmVmOwotICAgIEdMdWlu
dCBzdGVuY2lsQmFja01hc2s7Ci0gICAgR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbDsKLSAgICBHTGVu
dW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAgIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NE
ZXB0aFBhc3M7Ci0gICAgR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgIGJvb2wgcG9s
eWdvbk9mZnNldEZpbGw7Ci0gICAgR0xmbG9hdCBwb2x5Z29uT2Zmc2V0RmFjdG9yOwotICAgIEdM
ZmxvYXQgcG9seWdvbk9mZnNldFVuaXRzOwotICAgIGJvb2wgc2FtcGxlQWxwaGFUb0NvdmVyYWdl
OwotICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2U7Ci0gICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VW
YWx1ZTsKLSAgICBib29sIHNhbXBsZUNvdmVyYWdlSW52ZXJ0OwotICAgIGJvb2wgc2Npc3NvclRl
c3Q7Ci0gICAgYm9vbCBkaXRoZXI7Ci0KLSAgICBHTGZsb2F0IGxpbmVXaWR0aDsKLQotICAgIEdM
ZW51bSBnZW5lcmF0ZU1pcG1hcEhpbnQ7Ci0gICAgR0xlbnVtIGZyYWdtZW50U2hhZGVyRGVyaXZh
dGl2ZUhpbnQ7Ci0KLSAgICBHTGludCB2aWV3cG9ydFg7Ci0gICAgR0xpbnQgdmlld3BvcnRZOwot
ICAgIEdMc2l6ZWkgdmlld3BvcnRXaWR0aDsKLSAgICBHTHNpemVpIHZpZXdwb3J0SGVpZ2h0Owot
ICAgIGZsb2F0IHpOZWFyOwotICAgIGZsb2F0IHpGYXI7Ci0KLSAgICBHTGludCBzY2lzc29yWDsK
LSAgICBHTGludCBzY2lzc29yWTsKLSAgICBHTHNpemVpIHNjaXNzb3JXaWR0aDsKLSAgICBHTHNp
emVpIHNjaXNzb3JIZWlnaHQ7Ci0KLSAgICBib29sIGNvbG9yTWFza1JlZDsKLSAgICBib29sIGNv
bG9yTWFza0dyZWVuOwotICAgIGJvb2wgY29sb3JNYXNrQmx1ZTsKLSAgICBib29sIGNvbG9yTWFz
a0FscGhhOwotICAgIGJvb2wgZGVwdGhNYXNrOwotCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVNh
bXBsZXI7ICAgLy8gQWN0aXZlIHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCi0g
ICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5nUG9pbnRl
cjxCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlcjsKLSAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVy
OwotICAgIEdMdWludCBkcmF3RnJhbWVidWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVy
YnVmZmVyPiByZW5kZXJidWZmZXI7Ci0gICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwotCi0gICAg
VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAg
IEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfVFlQRV9DT1VO
VF1bTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLSAgICBCaW5kaW5nUG9p
bnRlcjxRdWVyeT4gYWN0aXZlUXVlcnlbUVVFUllfVFlQRV9DT1VOVF07Ci0KLSAgICBHTGludCB1
bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXI7Ci19OwotCi0vLyBIZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGFuZCBj
YWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zCi1jbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCi17
Ci0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0gICAgflZlcnRleERl
Y2xhcmF0aW9uQ2FjaGUoKTsKLQotICAgIEdMZW51bSBhcHBseURlY2xhcmF0aW9uKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSwgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dy
YW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KTsKLQot
ICAgIHZvaWQgbWFya1N0YXRlRGlydHkoKTsKLQotICBwcml2YXRlOgotICAgIFVJTlQgbU1heExy
dTsKLQotICAgIGVudW0geyBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07Ci0K
LSAgICBzdHJ1Y3QgVkJEYXRhCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc2VyaWFsOwot
ICAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlOwotICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0
OwotICAgIH07Ci0KLSAgICBWQkRhdGEgbUFwcGxpZWRWQnNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
LSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7Ci0gICAgYm9v
bCBtSW5zdGFuY2luZ0VuYWJsZWQ7Ci0KLSAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hlRW50cnkK
LSAgICB7Ci0gICAgICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW01BWF9WRVJU
RVhfQVRUUklCUyArIDFdOwotICAgICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBJRGlyZWN0
M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKnZlcnRleERlY2xhcmF0aW9uOwotICAgIH0gbVZlcnRleERl
Y2xDYWNoZVtOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFU107Ci19OwotCi1jbGFzcyBDb250
ZXh0Ci17Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcs
IGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29s
IHJvYnVzdEFjY2Vzcyk7Ci0KLSAgICB+Q29udGV4dCgpOwotCi0gICAgdm9pZCBtYWtlQ3VycmVu
dChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKLSAgICB2b2lkIG1hcmtEeFVuaWZvcm1z
RGlydHkoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrQ29udGV4dExvc3QoKTsKLSAgICBib29s
IGlzQ29udGV4dExvc3QoKTsKLQotICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgotICAgIHZvaWQg
c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBh
bHBoYSk7Ci0KLSAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOwotCi0gICAgdm9p
ZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwotCi0gICAgdm9pZCBzZXRDdWxsRmFjZShi
b29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdDsKLQotICAg
IHZvaWQgc2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBzZXRGcm9udEZhY2Uo
R0xlbnVtIGZyb250KTsKLQotICAgIHZvaWQgc2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCk7Ci0g
ICAgYm9vbCBpc0RlcHRoVGVzdEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0RGVwdGhG
dW5jKEdMZW51bSBkZXB0aEZ1bmMpOwotCi0gICAgdm9pZCBzZXREZXB0aFJhbmdlKGZsb2F0IHpO
ZWFyLCBmbG9hdCB6RmFyKTsKLSAgICAKLSAgICB2b2lkIHNldEJsZW5kKGJvb2wgZW5hYmxlZCk7
Ci0gICAgYm9vbCBpc0JsZW5kRW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRCbGVuZEZh
Y3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBo
YSwgR0xlbnVtIGRlc3RBbHBoYSk7Ci0gICAgdm9pZCBzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwg
ZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHNldEJsZW5k
RXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbik7Ci0KLSAg
ICB2b2lkIHNldFN0ZW5jaWxUZXN0KGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1N0ZW5jaWxU
ZXN0RW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBz
dGVuY2lsRnVuYywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKTsKLSAgICB2
b2lkIHNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0
ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5j
aWxXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spOwotICAgIHZvaWQgc2V0U3RlbmNp
bEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICB2b2lkIHNl
dFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNz
RGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpOwotICAgIHZvaWQgc2V0U3Rl
bmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBzdGVuY2ls
QmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpOwotCi0g
ICAgdm9pZCBzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNQ
b2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UG9seWdvbk9m
ZnNldFBhcmFtcyhHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7Ci0KLSAgICB2b2lkIHNl
dFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNTYW1wbGVB
bHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFNhbXBsZUNvdmVy
YWdlKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNv
bnN0OwotCi0gICAgdm9pZCBzZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwg
Ym9vbCBpbnZlcnQpOwotCi0gICAgdm9pZCBzZXRTY2lzc29yVGVzdChib29sIGVuYWJsZWQpOwot
ICAgIGJvb2wgaXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0RGl0
aGVyKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0RpdGhlckVuYWJsZWQoKSBjb25zdDsKLQot
ICAgIHZvaWQgc2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwotCi0gICAgdm9pZCBzZXRHZW5l
cmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpOwotICAgIHZvaWQgc2V0RnJhZ21lbnRTaGFkZXJE
ZXJpdmF0aXZlSGludChHTGVudW0gaGludCk7Ci0KLSAgICB2b2lkIHNldFZpZXdwb3J0UGFyYW1z
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAg
IHZvaWQgc2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIHNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBn
cmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKLSAgICB2b2lkIHNldERlcHRoTWFzayhib29s
IG1hc2spOwotCi0gICAgdm9pZCBzZXRBY3RpdmVTYW1wbGVyKHVuc2lnbmVkIGludCBhY3RpdmUp
OwotCi0gICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OwotICAgIEdM
dWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0UmVu
ZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7Ci0KLSAgICBHTHVpbnQgZ2V0QXJyYXlCdWZmZXJIYW5k
bGUoKSBjb25zdDsKLQotICAgIEdMdWludCBnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBj
b25zdDsKLQotICAgIHZvaWQgc2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50
IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmdl
dFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pOwotICAgIHZvaWQgc2V0
VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1
ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVy
KTsKLSAgICBjb25zdCB2b2lkICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBh
dHRyaWJOdW0pIGNvbnN0OwotCi0gICAgY29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJmdldFZl
cnRleEF0dHJpYnV0ZXMoKTsKLQotICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFs
aWdubWVudCk7Ci0gICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKLSAgICBHTGludCBnZXRQYWNr
QWxpZ25tZW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9v
bCByZXZlcnNlUm93T3JkZXIpOwotICAgIGJvb2wgZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNv
bnN0OwotCi0gICAgLy8gVGhlc2UgY3JlYXRlICBhbmQgZGVzdHJveSBtZXRob2RzIGFyZSBtZXJl
bHkgcGFzcy10aHJvdWdocyB0byAKLSAgICAvLyBSZXNvdXJjZU1hbmFnZXIsIHdoaWNoIG93bnMg
dGhlc2Ugb2JqZWN0IHR5cGVzCi0gICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOwotICAgIEdMdWlu
dCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7
Ci0gICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVm
ZmVyKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lk
IGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0g
ICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICAv
LyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2Rz
IGRvIG5vdCBwYXNzIHRocm91Z2gKLSAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAg
ICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0KLSAgICAvLyBG
ZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LgotICAgIEdMdWludCBjcmVhdGVGZW5jZSgp
OwotICAgIHZvaWQgZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKTsKLSAgICAKLSAgICAvLyBRdWVy
aWVzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dDsKLSAgICBHTHVpbnQgY3JlYXRlUXVlcnkoKTsK
LSAgICB2b2lkIGRlbGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSk7Ci0KLSAgICB2b2lkIGJpbmRBcnJh
eUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIo
R0x1aW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsK
LSAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBi
aW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kRHJh
d0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kUmVuZGVyYnVm
ZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVpbnQgcHJv
Z3JhbSk7Ci0KLSAgICB2b2lkIGJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5
KTsKLSAgICB2b2lkIGVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpOwotCi0gICAgdm9pZCBzZXRGcmFt
ZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKLQotICAgIHZvaWQgc2V0UmVu
ZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpOwotCi0g
ICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZXMpOwotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWlu
dCBkaXZpc29yKTsKLQotICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAg
IEZlbmNlICpnZXRGZW5jZShHTHVpbnQgaGFuZGxlKTsKLSAgICBTaGFkZXIgKmdldFNoYWRlcihH
THVpbnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwot
ICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7Ci0gICAgRnJhbWVidWZmZXIg
KmdldEZyYW1lYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVu
ZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFu
ZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUpOwotCi0gICAgQnVmZmVyICpnZXRBcnJheUJ1
ZmZlcigpOwotICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgUHJvZ3Jh
bSAqZ2V0Q3VycmVudFByb2dyYW0oKTsKLSAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwot
ICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdl
dFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsK
LSAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIg
KmdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVtIHBuYW1l
LCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBH
TGludCAqcGFyYW1zKTsKLSAgICBib29sIGdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29s
ZWFuICpwYXJhbXMpOwotCi0gICAgYm9vbCBnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBu
YW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKTsKLQotICAgIHZvaWQg
cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBp
eGVscyk7Ci0gICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwotICAgIHZvaWQgZHJhd0Fy
cmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzKTsKLSAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMp
OwotICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAvLyBmbHVzaC9maW5pc2gKLQotICAgIHZv
aWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIGludCBtaW5JbmRleCk7Ci0KLSAgICB2b2lkIHJlY29yZEludmFsaWRFbnVtKCk7
Ci0gICAgdm9pZCByZWNvcmRJbnZhbGlkVmFsdWUoKTsKLSAgICB2b2lkIHJlY29yZEludmFsaWRP
cGVyYXRpb24oKTsKLSAgICB2b2lkIHJlY29yZE91dE9mTWVtb3J5KCk7Ci0gICAgdm9pZCByZWNv
cmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKTsKLQotICAgIEdMZW51bSBnZXRFcnJvcigp
OwotICAgIEdMZW51bSBnZXRSZXNldFN0YXR1cygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1Jlc2V0
Tm90aWZpY2F0aW9uRW5hYmxlZCgpOwotCi0gICAgYm9vbCBzdXBwb3J0c1NoYWRlck1vZGVsMygp
IGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsKLSAgICB1
bnNpZ25lZCBpbnQgZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7Ci0g
ICAgdW5zaWduZWQgaW50IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3Q7Ci0gICAgaW50IGdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0g
ICAgaW50IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQg
Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bUN1
YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSBjb25zdDsKLSAgICBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsK
LSAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50
IHJlcXVlc3RlZCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkg
Y29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0UmVuZGVyZXJTdHJpbmcoKSBjb25zdDsKLSAgICBi
b29sIHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c09jY2x1
c2lvblF1ZXJpZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRFhUMVRleHR1cmVzKCkgY29u
c3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgc3Vw
cG9ydHNEWFQ1VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQzMlRleHR1
cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSBjb25z
dDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0Owot
ICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBv
cnRzRmxvYXQxNkxpbmVhckZpbHRlcigpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRl
eHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMo
KSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0OwotICAgIGJv
b2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzTm9uUG93
ZXIyVGV4dHVyZSgpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7
Ci0KLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdM
aW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
ZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKLQotICAgIEJsaXQgKmdldEJsaXR0ZXIo
KSB7IHJldHVybiBtQmxpdDsgfQotCi0gICAgY29uc3QgRDNEQ0FQUzkgJmdldERldmljZUNhcHMo
KSB7IHJldHVybiBtRGV2aWNlQ2FwczsgfQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKENvbnRleHQpOwotCi0gICAgYm9vbCBhcHBseVJlbmRlclRhcmdldChib29s
IGlnbm9yZVZpZXdwb3J0KTsKLSAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsK
LSAgICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KTsKLSAgICBHTGVudW0gYXBw
bHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKLSAg
ICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwotICAgIHZv
aWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIHZvaWQgZGV0YWNoQnVm
ZmVyKEdMdWludCBidWZmZXIpOwotICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSk7Ci0gICAgdm9pZCBkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwotICAg
IHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0gICAgVGV4
dHVyZSAqZ2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSk7Ci0KLSAgICBib29s
IGN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKLSAgICBib29sIGlzVHJpYW5nbGVNb2Rl
KEdMZW51bSBkcmF3TW9kZSk7Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAg
ICB2b2lkIGluaXRSZW5kZXJlclN0cmluZygpOwotCi0gICAgY29uc3QgZWdsOjpDb25maWcgKmNv
bnN0IG1Db25maWc7Ci0gICAgZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICptRGV2aWNlOwotCi0gICAgU3RhdGUgbVN0YXRlOwotCi0gICAgQmluZGluZ1BvaW50
ZXI8VGV4dHVyZTJEPiBtVGV4dHVyZTJEWmVybzsKLSAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJl
Q3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwWmVybzsKLQotICAgIHR5cGVkZWYgc3RkZXh0OjpoYXNo
X21hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7Ci0gICAgRnJhbWVidWZm
ZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtRnJhbWVidWZmZXJI
YW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1aW50LCBG
ZW5jZSo+IEZlbmNlTWFwOwotICAgIEZlbmNlTWFwIG1GZW5jZU1hcDsKLSAgICBIYW5kbGVBbGxv
Y2F0b3IgbUZlbmNlSGFuZGxlQWxsb2NhdG9yOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hf
bWFwPEdMdWludCwgUXVlcnkqPiBRdWVyeU1hcDsKLSAgICBRdWVyeU1hcCBtUXVlcnlNYXA7Ci0g
ICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHN0ZDo6c3Ry
aW5nIG1FeHRlbnNpb25TdHJpbmc7Ci0gICAgc3RkOjpzdHJpbmcgbVJlbmRlcmVyU3RyaW5nOwot
Ci0gICAgVmVydGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBJbmRleERh
dGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKLQotICAgIEJsaXQgKm1CbGl0OwotCi0gICAg
U3RyZWFtaW5nSW5kZXhCdWZmZXIgKm1MaW5lTG9vcElCOwotICAgIAotICAgIEJpbmRpbmdQb2lu
dGVyPFRleHR1cmU+IG1JbmNvbXBsZXRlVGV4dHVyZXNbVEVYVFVSRV9UWVBFX0NPVU5UXTsKLQot
ICAgIC8vIFJlY29yZGVkIGVycm9ycwotICAgIGJvb2wgbUludmFsaWRFbnVtOwotICAgIGJvb2wg
bUludmFsaWRWYWx1ZTsKLSAgICBib29sIG1JbnZhbGlkT3BlcmF0aW9uOwotICAgIGJvb2wgbU91
dE9mTWVtb3J5OwotICAgIGJvb2wgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbjsKLQotICAg
IC8vIEN1cnJlbnQvbG9zdCBjb250ZXh0IGZsYWdzCi0gICAgYm9vbCBtSGFzQmVlbkN1cnJlbnQ7
Ci0gICAgYm9vbCBtQ29udGV4dExvc3Q7Ci0gICAgR0xlbnVtIG1SZXNldFN0YXR1czsKLSAgICBH
TGVudW0gbVJlc2V0U3RyYXRlZ3k7Ci0gICAgYm9vbCBtUm9idXN0QWNjZXNzOwotCi0gICAgdW5z
aWduZWQgaW50IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNbTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3Jh
bVNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7Ci0g
ICAgdW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQg
aW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxp
ZWRJQlNlcmlhbDsKLSAgICBib29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAgICBib29s
IG1WaWV3cG9ydEluaXRpYWxpemVkOwotICAgIEQzRFZJRVdQT1JUOSBtU2V0Vmlld3BvcnQ7Ci0g
ICAgYm9vbCBtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVkOwotICAgIEQzRFNVUkZBQ0VfREVT
QyBtUmVuZGVyVGFyZ2V0RGVzYzsKLSAgICBib29sIG1EeFVuaWZvcm1zRGlydHk7Ci0gICAgUHJv
Z3JhbSAqbUNhY2hlZEN1cnJlbnRQcm9ncmFtOwotICAgIEZyYW1lYnVmZmVyICptQm91bmREcmF3
RnJhbWVidWZmZXI7Ci0KLSAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKLSAgICBib29s
IG1TdXBwb3J0c1ZlcnRleFRleHR1cmU7Ci0gICAgYm9vbCBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlOwotICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKLSAgICBpbnQgIG1NYXhSZW5kZXJi
dWZmZXJEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQg
IG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJlTGV2ZWw7Ci0g
ICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBsZVN1cHBvcnQ7Ci0gICAg
R0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLSAgICBib29sIG1TdXBwb3J0c0V2ZW50UXVl
cmllczsKLSAgICBib29sIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci0gICAgYm9vbCBtU3Vw
cG9ydHNEWFQxVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7Ci0gICAg
Ym9vbCBtU3VwcG9ydHNEWFQ1VGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyOwotICAgIGJvb2wg
bVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0Zs
b2F0MTZUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXI7Ci0g
ICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwotICAgIGJvb2wgbVN1
cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VBbHBo
YVRleHR1cmVzOwotICAgIGJvb2wgbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsKLSAgICBib29sIG1T
dXBwb3J0czMyYml0SW5kaWNlczsKLSAgICBpbnQgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0
czsKLQotICAgIC8vIHN0YXRlIGNhY2hpbmcgZmxhZ3MKLSAgICBib29sIG1DbGVhclN0YXRlRGly
dHk7Ci0gICAgYm9vbCBtQ3VsbFN0YXRlRGlydHk7Ci0gICAgYm9vbCBtRGVwdGhTdGF0ZURpcnR5
OwotICAgIGJvb2wgbU1hc2tTdGF0ZURpcnR5OwotICAgIGJvb2wgbVBpeGVsUGFja2luZ1N0YXRl
RGlydHk7Ci0gICAgYm9vbCBtQmxlbmRTdGF0ZURpcnR5OwotICAgIGJvb2wgbVN0ZW5jaWxTdGF0
ZURpcnR5OwotICAgIGJvb2wgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5OwotICAgIGJvb2wgbVNj
aXNzb3JTdGF0ZURpcnR5OwotICAgIGJvb2wgbVNhbXBsZVN0YXRlRGlydHk7Ci0gICAgYm9vbCBt
RnJvbnRGYWNlRGlydHk7Ci0gICAgYm9vbCBtRGl0aGVyU3RhdGVEaXJ0eTsKLQotICAgIElEaXJl
Y3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOwotCi0gICAgRDNEQ0FQUzkg
bURldmljZUNhcHM7Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7Ci0K
LSAgICBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOwotfTsK
LX0KLQotZXh0ZXJuICJDIgotewotLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdM
Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcs
IGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29s
IHJvYnVzdEFjY2Vzcyk7Ci12b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOwotdm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci1nbDo6Q29udGV4dCAqZ2xHZXRD
dXJyZW50Q29udGV4dCgpOwotX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7Ci1ib29s
IF9fc3RkY2FsbCBnbEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotfQotCi0j
ZW5kaWYgICAvLyBJTkNMVURFX0NPTlRFWFRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE0ZDEyMzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GZW5jZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6RmVuY2UgY2xhc3Ms
IHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNpb24uCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvRmVuY2UuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVz
cGFjZSBnbAotewotCi1GZW5jZTo6RmVuY2UoZWdsOjpEaXNwbGF5KiBkaXNwbGF5KQotewotICAg
IG1EaXNwbGF5ID0gZGlzcGxheTsKLSAgICBtUXVlcnkgPSBOVUxMOwotICAgIG1Db25kaXRpb24g
PSBHTF9OT05FOwotICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLX0KLQotRmVuY2U6On5GZW5jZSgp
Ci17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmZy
ZWVFdmVudFF1ZXJ5KG1RdWVyeSk7Ci0gICAgfQotfQotCi1HTGJvb2xlYW4gRmVuY2U6OmlzRmVu
Y2UoKQotewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJldHVybmVk
IGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0
aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KLSAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7
Ci19Ci0KLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCi17Ci0gICAgaWYg
KCFtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnkgPSBtRGlzcGxheS0+YWxsb2NhdGVFdmVu
dFF1ZXJ5KCk7Ci0gICAgICAgIGlmICghbVF1ZXJ5KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBI
UkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgbUNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKLSAgICBt
U3RhdHVzID0gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTo6dGVzdEZlbmNlKCkKLXsK
LSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0gICAgaWYg
KGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQotICAgIHsKLSAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA9PSBT
X09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBtU3RhdHVzID0gcmVzdWx0ID09IFNfT0s7
Ci0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0KLXZvaWQgRmVuY2U6OmZpbmlzaEZlbmNlKCkKLXsK
LSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0g
ICAgewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2U6OmdldEZlbmNl
aXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVM
TCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0Vf
U1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgot
ICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNo
ZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMg
aXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAgLy8gb3IgR2V0RmVu
Y2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMg
VFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KLSAgICAgICAgICAg
IGlmIChtU3RhdHVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9
IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxM
LCAwLCAwKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChy
ZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RS
VUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0
ID09IFNfRkFMU0UpOwotICAgICAgICAgICAgbVN0YXR1cyA9IHJlc3VsdCA9PSBTX09LOwotICAg
ICAgICAgICAgcGFyYW1zWzBdID0gbVN0YXR1czsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6Ci0g
ICAgICAgICAgICBwYXJhbXNbMF0gPSBtQ29uZGl0aW9uOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5NjI2Y2IwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRmVuY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIEZlbmNlLmg6IERlZmluZXMgdGhlIGdsOjpGZW5jZSBjbGFzcywgd2hp
Y2ggc3VwcG9ydHMgdGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfRkVOQ0VfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0ZFTkNFX0hfCi0KLSNkZWZpbmUgR0xfQVBJ
Q0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNzIERpc3Bs
YXk7Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBGZW5jZQotewotICBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgRmVuY2UoZWdsOjpEaXNwbGF5KiBkaXNwbGF5KTsKLSAgICB2aXJ0dWFsIH5G
ZW5jZSgpOwotCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdM
ZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZp
bmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBh
cmFtcyk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2Up
OwotCi0gICAgZWdsOjpEaXNwbGF5KiBtRGlzcGxheTsKLSAgICBJRGlyZWN0M0RRdWVyeTkqIG1R
dWVyeTsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKLSAgICBHTGJvb2xlYW4gbVN0YXR1czsKLX07
Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0ZFTkNFX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQ0MjgzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTA5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZyYW1lYnVmZmVyLmNw
cDogSW1wbGVtZW50cyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZy
YW1lYnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1G
cmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIoKQotewotICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9O
T05FOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVmZmVy
VHlwZSA9IEdMX05PTkU7Ci19Ci0KLUZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQotewotICAg
IG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgbU51
bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotfQotCi1SZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNv
bnN0Ci17Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAg
IFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLQotICAgIGlmICh0eXBlID09IEdMX05PTkUp
Ci0gICAgewotICAgICAgICBidWZmZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
ID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4
dHVyZVRhcmdldCh0eXBlKSkKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFRl
eHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVyKHR5cGUpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVp
bnQgY29sb3JidWZmZXIpCi17Ci0gICAgbUNvbG9yYnVmZmVyVHlwZSA9IChjb2xvcmJ1ZmZlciAh
PSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1
cFJlbmRlcmJ1ZmZlcih0eXBlLCBjb2xvcmJ1ZmZlcikpOwotfQotCi12b2lkIEZyYW1lYnVmZmVy
OjpzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQotewotICAg
IG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsK
LSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVw
dGhidWZmZXIpKTsKLX0KLQotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCi17Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBl
ID0gKHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1
ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7
Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17
Ci0gICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQotICAgIHsKLSAgICAgICAgbUNvbG9y
YnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5V
TEwpOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVy
ZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKLSAgICB7Ci0g
ICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQ
b2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVy
LmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZl
clR5cGUpKQotICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAg
ICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQg
RnJhbWVidWZmZXI6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewot
ICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1Db2xv
cmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVm
ZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwp
OwotICAgIH0KLQotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVm
ZmVyICYmIG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAg
ICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclBvaW50
ZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQo
KSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZF
UikKLSAgICB7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAg
IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgfQotfQotCi11bnNpZ25lZCBp
bnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldFNlcmlhbCgpCi17Ci0gICAgUmVuZGVyYnVm
ZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAo
Y29sb3JidWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY29sb3JidWZmZXItPmdldFNlcmlh
bCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsK
LSAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQo
KTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb2xvcmJ1
ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0K
LS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVm
ZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICAKLSAgICBpZiAoIWRlcHRoc3Rl
bmNpbGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2ls
YnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhzdGVuY2lsYnVmZmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXVuc2lnbmVkIGludCBGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqZGVw
dGhidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGRlcHRoYnVm
ZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRT
dGVuY2lsYnVmZmVyU2VyaWFsKCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIg
PSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAoc3RlbmNpbGJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Q29s
b3JidWZmZXIoKQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOwotfQot
Ci1SZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCi17Ci0gICAgcmV0
dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqRnJhbWVi
dWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKQotewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldE51bGxDb2xv
cmJ1ZmZlcigpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpudWxsYnVmZmVyICA9IG1OdWxsQ29sb3Ji
dWZmZXJQb2ludGVyLmdldCgpOwotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBnZXRE
ZXB0aGJ1ZmZlcigpOwotCi0gICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIEVS
UigiVW5leHBlY3RlZCBudWxsIGRlcHRoYnVmZmVyIGZvciBkZXB0aC1vbmx5IEZCTy4iKTsKLSAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgR0xzaXplaSB3aWR0aCAgPSBkZXB0aGJ1
ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRI
ZWlnaHQoKTsKLQotICAgIGlmICghbnVsbGJ1ZmZlciB8fAotICAgICAgICB3aWR0aCAhPSBudWxs
YnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBudWxsYnVmZmVyLT5nZXRIZWlnaHQoKSkK
LSAgICB7Ci0gICAgICAgIG51bGxidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKDAsIG5ldyBDb2xv
cmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBHTF9OT05FLCAwKSk7Ci0gICAgICAgIG1OdWxsQ29sb3Ji
dWZmZXJQb2ludGVyLnNldChudWxsYnVmZmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbGJ1
ZmZlcjsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUoKQotewot
ICAgIHJldHVybiBtQ29sb3JidWZmZXJUeXBlOwotfQotCi1HTGVudW0gRnJhbWVidWZmZXI6Omdl
dERlcHRoYnVmZmVyVHlwZSgpCi17Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7Ci19Ci0K
LUdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKQotewotICAgIHJldHVy
biBtU3RlbmNpbGJ1ZmZlclR5cGU7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3Ji
dWZmZXJIYW5kbGUoKQotewotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmlkKCk7Ci19
Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKQotewotICAgIHJl
dHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmlkKCk7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6
Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpCi17Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9p
bnRlci5pZCgpOwotfQotCi1ib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkKLXsKLSAgICBp
ZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBSZW5kZXJi
dWZmZXIgKnN0ZW5jaWxidWZmZXJPYmplY3QgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAg
ICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgpID4gMDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21w
bGV0ZW5lc3MoKQotewotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBoZWlnaHQgPSAwOwotICAgIGludCBzYW1w
bGVzID0gLTE7Ci0gICAgYm9vbCBtaXNzaW5nQXR0YWNobWVudCA9IHRydWU7Ci0KLSAgICBpZiAo
bUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFjb2xvcmJ1
ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+
Z2V0V2lkdGgoKSA9PSAwIHx8IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVO
REVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVy
YWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFs
VGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAg
R0xlbnVtIGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7
Ci0gICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZv
cm1hdCgpOwotCi0gICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8
fAotICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0FMUEhBIHx8Ci0gICAgICAg
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAg
ICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGQzZGZv
cm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8
fAotICAgICAgICAgICAgICAgIChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1hdCkgJiYg
IWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aFRleHR1cmVG
b3JtYXQoZDNkZm9ybWF0KSB8fCBkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChkM2Rmb3Jt
YXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAg
fQotCi0gICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgIGhl
aWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgc2FtcGxlcyA9IGNvbG9y
YnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7
Ci0gICAgfQotCi0gICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7Ci0gICAgUmVu
ZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKLQotICAgIGlmIChtRGVwdGhidWZmZXJU
eXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVm
ZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGRlcHRoYnVm
ZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJU
eXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGRlcHRo
YnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBh
dHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAgICAgICBp
ZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZHgyZXM6OklzRGVwdGhUZXh0dXJl
Rm9ybWF0KGQzZGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQotICAgICAg
ICB7Ci0gICAgICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAg
ICAgICAgaGVpZ2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICAgICAgc2Ft
cGxlcyA9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBtaXNzaW5nQXR0
YWNobWVudCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRl
cHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0RJTUVOU0lPTlM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBk
ZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKLSAgICB7Ci0g
ICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYg
KCFzdGVuY2lsYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0
ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQo
KSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TdGVuY2lsYnVm
ZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
Z2w6OklzU3RlbmNpbFJlbmRlcmFibGUoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0RDNERm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRh
Y2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKLSAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRleHR1cmVG
b3JtYXQoZDNkZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAg
ICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICAgICAg
c2FtcGxlcyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgIG1pc3Np
bmdBdHRhY2htZW50ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGgg
IT0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+
Z2V0SGVpZ2h0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2Ft
cGxlcyAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FOR0xFOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGggYW5kIHN0
ZW5jaWwgYnVmZmVyLCB0aGV5IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0Ci0gICAgLy8g
c2luY2Ugd2Ugb25seSBzdXBwb3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qgc2VwYXJh
dGUgZGVwdGggYW5kIHN0ZW5jaWwKLSAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNpbGJ1ZmZl
ciAmJiAoZGVwdGhidWZmZXIgIT0gc3RlbmNpbGJ1ZmZlcikpCi0gICAgewotICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgfQotCi0gICAgLy8gd2UgbmVlZCB0
byBoYXZlIGF0IGxlYXN0IG9uZSBhdHRhY2htZW50IHRvIGJlIGNvbXBsZXRlCi0gICAgaWYgKG1p
c3NpbmdBdHRhY2htZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURTsKLX0KLQotRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVi
dWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRo
U3RlbmNpbCkKLXsKLSAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChuZXcgUmVuZGVyYnVmZmVy
KDAsIGNvbG9yYnVmZmVyKSk7Ci0KLSAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRl
cmJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIoMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhi
dWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2ls
YnVmZmVyUG9pbnRlci5zZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKLQotICAgIG1Db2xv
cmJ1ZmZlclR5cGUgPSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChk
ZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVS
QlVGRkVSIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2ls
UmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDog
R0xfTk9ORTsKLX0KLQotaW50IEZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkKLXsKLSAgICBpZiAo
Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAg
ICByZXR1cm4gZ2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMZW51bSBEZWZhdWx0RnJh
bWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCi17Ci0gICAgLy8gVGhlIGRlZmF1bHQgZnJhbWVidWZm
ZXIgc2hvdWxkIGFsd2F5cyBiZSBjb21wbGV0ZQotICAgIEFTU0VSVChGcmFtZWJ1ZmZlcjo6Y29t
cGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpOwotCi0gICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDE0ZDljMmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRnJhbWVidWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6
OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCi0vLyBvYmplY3Rz
IGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQu
NCBwYWdlIDEwNS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KLSNkZWZpbmUg
TElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0KLW5hbWVzcGFj
ZSBnbAotewotY2xhc3MgUmVuZGVyYnVmZmVyOwotY2xhc3MgQ29sb3JidWZmZXI7Ci1jbGFzcyBE
ZXB0aGJ1ZmZlcjsKLWNsYXNzIFN0ZW5jaWxidWZmZXI7Ci1jbGFzcyBEZXB0aFN0ZW5jaWxidWZm
ZXI7Ci0KLWNsYXNzIEZyYW1lYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBGcmFtZWJ1ZmZlcigp
OwotCi0gICAgdmlydHVhbCB+RnJhbWVidWZmZXIoKTsKLQotICAgIHZvaWQgc2V0Q29sb3JidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXREZXB0aGJ1
ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lkIHNldFN0ZW5j
aWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKLQotICAgIHZvaWQg
ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZXRhY2hSZW5kZXJidWZm
ZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwot
Ci0gICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbCgpOwotICAgIHVuc2lnbmVk
IGludCBnZXREZXB0aGJ1ZmZlclNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRTdGVuY2ls
YnVmZmVyU2VyaWFsKCk7Ci0KLSAgICBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKCk7Ci0g
ICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0
U3RlbmNpbGJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKCk7
Ci0KLSAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgR0xlbnVtIGdldERlcHRo
YnVmZmVyVHlwZSgpOwotICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwotCi0gICAg
R0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKCk7Ci0gICAgR0x1aW50IGdldERlcHRoYnVmZmVy
SGFuZGxlKCk7Ci0gICAgR0x1aW50IGdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKLQotICAgIGJv
b2wgaGFzU3RlbmNpbCgpOwotICAgIGludCBnZXRTYW1wbGVzKCk7Ci0KLSAgICB2aXJ0dWFsIEdM
ZW51bSBjb21wbGV0ZW5lc3MoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgR0xlbnVtIG1Db2xvcmJ1
ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQ
b2ludGVyOwotCi0gICAgR0xlbnVtIG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50
ZXI8UmVuZGVyYnVmZmVyPiBtRGVwdGhidWZmZXJQb2ludGVyOwotCi0gICAgR0xlbnVtIG1TdGVu
Y2lsYnVmZmVyVHlwZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2ls
YnVmZmVyUG9pbnRlcjsKLQotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxD
b2xvcmJ1ZmZlclBvaW50ZXI7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oRnJhbWVidWZmZXIpOwotCi0gICAgUmVuZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0OwotfTsKLQotY2xhc3MgRGVmYXVs
dEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBEZWZh
dWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZm
ZXIgKmRlcHRoU3RlbmNpbCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsK
LQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0RnJhbWVi
dWZmZXIpOwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxl
QWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFu
ZGxlQWxsb2NhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5OGY4YS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRs
ZUFsbG9jYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBIYW5kbGVBbGxvY2F0b3IuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6SGFu
ZGxlQWxsb2NhdG9yIGNsYXNzLCB3aGljaCBpcyB1c2VkCi0vLyB0byBhbGxvY2F0ZSBHTCBoYW5k
bGVzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLUhhbmRsZUFsbG9jYXRv
cjo6SGFuZGxlQWxsb2NhdG9yKCkgOiBtQmFzZVZhbHVlKDEpLCBtTmV4dFZhbHVlKDEpCi17Ci19
Ci0KLUhhbmRsZUFsbG9jYXRvcjo6fkhhbmRsZUFsbG9jYXRvcigpCi17Ci19Ci0KLXZvaWQgSGFu
ZGxlQWxsb2NhdG9yOjpzZXRCYXNlSGFuZGxlKEdMdWludCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQo
bUJhc2VWYWx1ZSA9PSBtTmV4dFZhbHVlKTsKLSAgICBtQmFzZVZhbHVlID0gdmFsdWU7Ci0gICAg
bU5leHRWYWx1ZSA9IHZhbHVlOwotfQotCi1HTHVpbnQgSGFuZGxlQWxsb2NhdG9yOjphbGxvY2F0
ZSgpCi17Ci0gICAgaWYgKG1GcmVlVmFsdWVzLnNpemUoKSkKLSAgICB7Ci0gICAgICAgIEdMdWlu
dCBoYW5kbGUgPSBtRnJlZVZhbHVlcy5iYWNrKCk7Ci0gICAgICAgIG1GcmVlVmFsdWVzLnBvcF9i
YWNrKCk7Ci0gICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgfQotICAgIHJldHVybiBtTmV4dFZh
bHVlKys7Ci19Ci0KLXZvaWQgSGFuZGxlQWxsb2NhdG9yOjpyZWxlYXNlKEdMdWludCBoYW5kbGUp
Ci17Ci0gICAgaWYgKGhhbmRsZSA9PSBtTmV4dFZhbHVlIC0gMSkKLSAgICB7Ci0gICAgICAgIC8v
IERvbid0IGRyb3AgYmVsb3cgYmFzZSB2YWx1ZQotICAgICAgICBpZihtTmV4dFZhbHVlID4gbUJh
c2VWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbU5leHRWYWx1ZS0tOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgZnJlZSBoYW5kbGVzIHRo
YXQgd2Ugb3duIC0gZG9uJ3QgZHJvcCBiZWxvdyB0aGUgYmFzZSB2YWx1ZQotICAgICAgICBpZiAo
aGFuZGxlID49IG1CYXNlVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmVlVmFsdWVz
LnB1c2hfYmFjayhoYW5kbGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyZTE2OC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSGFu
ZGxlQWxsb2NhdG9yLmg6IERlZmluZXMgdGhlIGdsOjpIYW5kbGVBbGxvY2F0b3IgY2xhc3MsIHdo
aWNoIGlzIHVzZWQgdG8KLS8vIGFsbG9jYXRlIEdMIGhhbmRsZXMuCi0KLSNpZm5kZWYgTElCR0xF
U1YyX0hBTkRMRUFMTE9DQVRPUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfSEFORExFQUxMT0NBVE9S
X0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5j
bHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNw
YWNlIGdsCi17Ci0KLWNsYXNzIEhhbmRsZUFsbG9jYXRvcgotewotICBwdWJsaWM6Ci0gICAgSGFu
ZGxlQWxsb2NhdG9yKCk7Ci0gICAgdmlydHVhbCB+SGFuZGxlQWxsb2NhdG9yKCk7Ci0KLSAgICB2
b2lkIHNldEJhc2VIYW5kbGUoR0x1aW50IHZhbHVlKTsKLQotICAgIEdMdWludCBhbGxvY2F0ZSgp
OwotICAgIHZvaWQgcmVsZWFzZShHTHVpbnQgaGFuZGxlKTsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihIYW5kbGVBbGxvY2F0b3IpOwotCi0gICAgR0x1aW50IG1C
YXNlVmFsdWU7Ci0gICAgR0x1aW50IG1OZXh0VmFsdWU7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxHTHVpbnQ+IEhhbmRsZUxpc3Q7Ci0gICAgSGFuZGxlTGlzdCBtRnJlZVZhbHVlczsKLX07Ci0K
LX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFu
YWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYzBhZWYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFNYW5h
Z2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBJbmRleERhdGFNYW5hZ2VyLmNwcDogRGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdl
ciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBm
b3IgaW5kZXggYnVmZmVycy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2Vy
LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBJbmRleEJ1ZmZl
cjo6bUN1cnJlbnRTZXJpYWwgPSAxOwotCi1JbmRleERhdGFNYW5hZ2VyOjpJbmRleERhdGFNYW5h
Z2VyKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmRldmljZSkgOiBtRGV2aWNl
KGRldmljZSkKLXsKLSAgICBtU3RyZWFtaW5nQnVmZmVyU2hvcnQgPSBuZXcgU3RyZWFtaW5nSW5k
ZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVY
MTYpOwotCi0gICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgewot
ICAgICAgICBtU3RyZWFtaW5nQnVmZmVySW50ID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1E
ZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsKLQotICAg
ICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXJJbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IERvbid0IGxlYXZlIGl0IGluIGEgaGFsZi1pbml0aWFsaXplZCBzdGF0ZQotICAgICAgICAgICAg
ZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICAgICAgICAgIG1TdHJlYW1pbmdCdWZm
ZXJTaG9ydCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgbVN0cmVhbWluZ0J1ZmZlckludCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFtU3RyZWFt
aW5nQnVmZmVyU2hvcnQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSB0
aGUgc3RyZWFtaW5nIGluZGV4IGJ1ZmZlcihzKS4iKTsKLSAgICB9Ci0KLSAgICBtQ291bnRpbmdC
dWZmZXIgPSBOVUxMOwotfQotCi1JbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFuYWdlcigp
Ci17Ci0gICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICBkZWxldGUgbVN0cmVh
bWluZ0J1ZmZlckludDsKLSAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotfQotCi12b2lkIGNv
bnZlcnRJbmRpY2VzKEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCwgR0xzaXplaSBjb3Vu
dCwgdm9pZCAqb3V0cHV0KQotewotICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0g
ICAgewotICAgICAgICBjb25zdCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihpbnB1dCk7Ci0gICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9y
dCo+KG91dHB1dCk7Ci0KLSAgICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0W2ldID0gaW5baV07Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCi0gICAgewotICAgICAg
ICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1aW50KSk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpCi0gICAgewotICAgICAgICBt
ZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1c2hvcnQpKTsKLSAgICB9Ci0g
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhUeXBlPgot
dm9pZCBjb21wdXRlUmFuZ2UoY29uc3QgSW5kZXhUeXBlICppbmRpY2VzLCBHTHNpemVpIGNvdW50
LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQotewotICAgICptaW5JbmRleCA9
IGluZGljZXNbMF07Ci0gICAgKm1heEluZGV4ID0gaW5kaWNlc1swXTsKLQotICAgIGZvciAoR0xz
aXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBpZiAoKm1pbkluZGV4
ID4gaW5kaWNlc1tpXSkgKm1pbkluZGV4ID0gaW5kaWNlc1tpXTsKLSAgICAgICAgaWYgKCptYXhJ
bmRleCA8IGluZGljZXNbaV0pICptYXhJbmRleCA9IGluZGljZXNbaV07Ci0gICAgfQotfQotCi12
b2lkIGNvbXB1dGVSYW5nZShHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNp
emVpIGNvdW50LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQotewotICAgIGlm
ICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBjb21wdXRlUmFuZ2Uo
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpLCBjb3VudCwgbWluSW5kZXgsIG1h
eEluZGV4KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCi0g
ICAgewotICAgICAgICBjb21wdXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5k
aWNlcyksIGNvdW50LCBtaW5JbmRleCwgbWF4SW5kZXgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0
eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUKQotICAgIHsKLSAgICAgICAgY29tcHV0ZVJhbmdlKHN0
YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRleCwgbWF4
SW5kZXgpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLUdMZW51bSBJbmRl
eERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50
LCBCdWZmZXIgKmJ1ZmZlciwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhE
YXRhICp0cmFuc2xhdGVkKQotewotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlclNob3J0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAgRDNERk9S
TUFUIGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCkgPyBEM0RGTVRfSU5ERVgzMiA6
IEQzREZNVF9JTkRFWDE2OwotICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGluZGljZXMpOwotICAgIGJvb2wgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwotCi0g
ICAgaWYgKGJ1ZmZlciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgYWxpZ25lZE9mZnNldCA9
IChvZmZzZXQgJSBzaXplb2YoR0x1Ynl0ZSkgPT0gMCk7ICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOiBhbGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAlIHNpemVvZihHTHVz
aG9ydCkgPT0gMCk7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgIGFs
aWduZWRPZmZzZXQgPSAob2Zmc2V0ICUgc2l6ZW9mKEdMdWludCkgPT0gMCk7ICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBvZmZzZXQg
PiBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgp
KSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqc3RyZWFtaW5n
QnVmZmVyID0gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSA/IG1TdHJlYW1pbmdCdWZmZXJJbnQg
OiBtU3RyZWFtaW5nQnVmZmVyU2hvcnQ7Ci0KLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAqc3RhdGlj
QnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNJbmRleEJ1ZmZlcigpIDogTlVMTDsK
LSAgICBJbmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIgPSBzdHJlYW1pbmdCdWZmZXI7Ci0gICAgVUlO
VCBzdHJlYW1PZmZzZXQgPSAwOwotCi0gICAgaWYgKHN0YXRpY0J1ZmZlciAmJiBzdGF0aWNCdWZm
ZXItPmxvb2t1cFR5cGUodHlwZSkgJiYgYWxpZ25lZE9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlu
ZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOwotICAgICAgICBzdHJlYW1PZmZzZXQgPSBzdGF0aWNC
dWZmZXItPmxvb2t1cFJhbmdlKG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwg
JnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKLQotICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0ID09IC0x
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gdHlwZVNp
emUodHlwZSkpICogaW5kZXhTaXplKGZvcm1hdCk7Ci0gICAgICAgICAgICBjb21wdXRlUmFuZ2Uo
dHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQt
Pm1heEluZGV4KTsKLSAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+YWRkUmFuZ2Uob2Zmc2V0LCBj
b3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsIHRyYW5zbGF0ZWQtPm1heEluZGV4LCBzdHJlYW1P
ZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGludCBj
b252ZXJ0Q291bnQgPSBjb3VudDsKLQotICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyLT5zaXplKCkgPT0gMCAmJiBhbGlnbmVk
T2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyID0gc3Rh
dGljQnVmZmVyOwotICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IGJ1ZmZlci0+c2l6ZSgp
IC8gdHlwZVNpemUodHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT5pbnZhbGlkYXRlU3RhdGljRGF0YSgp
OwotICAgICAgICAgICAgICAgIHN0YXRpY0J1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkICpvdXRwdXQgPSBOVUxMOwotICAgICAgICAKLSAgICAg
ICAgaWYgKGluZGV4QnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleEJ1ZmZlci0+
cmVzZXJ2ZVNwYWNlKGNvbnZlcnRDb3VudCAqIGluZGV4U2l6ZShmb3JtYXQpLCB0eXBlKTsKLSAg
ICAgICAgICAgIG91dHB1dCA9IGluZGV4QnVmZmVyLT5tYXAoaW5kZXhTaXplKGZvcm1hdCkgKiBj
b252ZXJ0Q291bnQsICZzdHJlYW1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAob3V0cHV0ID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVk
IHRvIG1hcCBpbmRleCBidWZmZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01F
TU9SWTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnZlcnRJbmRpY2VzKHR5cGUsIHN0YXRpY0J1
ZmZlciA/IGJ1ZmZlci0+ZGF0YSgpIDogaW5kaWNlcywgY29udmVydENvdW50LCBvdXRwdXQpOwot
ICAgICAgICBpbmRleEJ1ZmZlci0+dW5tYXAoKTsKLQotICAgICAgICBjb21wdXRlUmFuZ2UodHlw
ZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1h
eEluZGV4KTsKLQotICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gdHlwZVNpemUodHlwZSkpICogaW5kZXhTaXpl
KGZvcm1hdCk7Ci0gICAgICAgICAgICBzdGF0aWNCdWZmZXItPmFkZFJhbmdlKG9mZnNldCwgY291
bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LCB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zm
c2V0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVmZmVyID0g
aW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgIHRyYW5zbGF0ZWQtPnNlcmlhbCA9IGluZGV4
QnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0gc3RyZWFt
T2Zmc2V0IC8gaW5kZXhTaXplKGZvcm1hdCk7Ci0KLSAgICBpZiAoYnVmZmVyKQotICAgIHsKLSAg
ICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiB0eXBlU2l6ZSh0eXBlKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1zdGQ6OnNpemVfdCBJbmRl
eERhdGFNYW5hZ2VyOjppbmRleFNpemUoRDNERk9STUFUIGZvcm1hdCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKGZvcm1hdCA9PSBEM0RGTVRfSU5ERVgzMikgPyBzaXplb2YodW5zaWduZWQgaW50KSA6
IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci19Ci0KLXN0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFn
ZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdAotewotICAgIHN3aXRjaCAodHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICByZXR1cm4gc2l6ZW9mKEdMdWludCk7
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsK
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKLSAg
ICB9Ci19Ci0KLVN0YXRpY0luZGV4QnVmZmVyICpJbmRleERhdGFNYW5hZ2VyOjpnZXRDb3VudGlu
Z0luZGljZXMoR0xzaXplaSBjb3VudCkKLXsKLSAgICBpZiAoY291bnQgPD0gNjU1MzYpICAgLy8g
MTYtYml0IGluZGljZXMKLSAgICB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5l
ZWRlZCA9IGNvdW50ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLQotICAgICAgICBpZiAoIW1D
b3VudGluZ0J1ZmZlciB8fCBtQ291bnRpbmdCdWZmZXItPnNpemUoKSA8IHNwYWNlTmVlZGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAgICAgICAg
ICAgbUNvdW50aW5nQnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKG1EZXZpY2UpOwotICAg
ICAgICAgICAgbUNvdW50aW5nQnVmZmVyLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VO
U0lHTkVEX1NIT1JUKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQ7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUNvdW50
aW5nQnVmZmVyLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1D
b3VudGluZ0J1ZmZlci0+dW5tYXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlIGlmIChtU3RyZWFtaW5nQnVmZmVySW50KSAgIC8vIDMyLWJpdCBpbmRpY2VzIHN1
cHBvcnRlZAotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNwYWNlTmVlZGVkID0g
Y291bnQgKiBzaXplb2YodW5zaWduZWQgaW50KTsKLQotICAgICAgICBpZiAoIW1Db3VudGluZ0J1
ZmZlciB8fCBtQ291bnRpbmdCdWZmZXItPnNpemUoKSA8IHNwYWNlTmVlZGVkKQotICAgICAgICB7
Ci0gICAgICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAgICAgICAgICAgbUNvdW50
aW5nQnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKG1EZXZpY2UpOwotICAgICAgICAgICAg
bUNvdW50aW5nQnVmZmVyLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lO
VCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zmc2V0OwotICAgICAgICAgICAgdW5zaWduZWQgaW50
ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUNvdW50aW5nQnVmZmVyLT5tYXAo
c3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
Q291bnRpbmdCdWZmZXItPnVubWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZSByZXR1cm4gTlVMTDsKLSAgICAKLSAgICByZXR1cm4gbUNvdW50aW5nQnVmZmVy
OwotfQotCi1JbmRleEJ1ZmZlcjo6SW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
LCBVSU5UIHNpemUsIEQzREZPUk1BVCBmb3JtYXQpIDogbURldmljZShkZXZpY2UpLCBtQnVmZmVy
U2l6ZShzaXplKSwgbUluZGV4QnVmZmVyKE5VTEwpCi17Ci0gICAgaWYgKHNpemUgPiAwKQotICAg
IHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQz
RFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8
IEQzRFVTQUdFX1dSSVRFT05MWSwgZm9ybWF0LCBwb29sLCAmbUluZGV4QnVmZmVyLCBOVUxMKTsK
LSAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2Nh
dGluZyBhbiBpbmRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLUluZGV4QnVmZmVyOjp+SW5kZXhCdWZmZXIoKQotewotICAgIGlmIChtSW5kZXhC
dWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICB9Ci19
Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSAqSW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1JbmRleEJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgaW50IEluZGV4QnVm
ZmVyOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNp
Z25lZCBpbnQgSW5kZXhCdWZmZXI6Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJl
bnRTZXJpYWwrKzsKLX0KLQotdm9pZCBJbmRleEJ1ZmZlcjo6dW5tYXAoKQotewotICAgIGlmICht
SW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotICAg
IH0KLX0KLQotU3RyZWFtaW5nSW5kZXhCdWZmZXI6OlN0cmVhbWluZ0luZGV4QnVmZmVyKElEaXJl
Y3QzRERldmljZTkgKmRldmljZSwgVUlOVCBpbml0aWFsU2l6ZSwgRDNERk9STUFUIGZvcm1hdCkg
OiBJbmRleEJ1ZmZlcihkZXZpY2UsIGluaXRpYWxTaXplLCBmb3JtYXQpCi17Ci0gICAgbVdyaXRl
UG9zaXRpb24gPSAwOwotfQotCi1TdHJlYW1pbmdJbmRleEJ1ZmZlcjo6flN0cmVhbWluZ0luZGV4
QnVmZmVyKCkKLXsKLX0KLQotdm9pZCAqU3RyZWFtaW5nSW5kZXhCdWZmZXI6Om1hcChVSU5UIHJl
cXVpcmVkU3BhY2UsIFVJTlQgKm9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxMOwot
Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUluZGV4QnVmZmVyLT5Mb2NrKG1Xcml0ZVBvc2l0aW9uLCByZXF1aXJlZFNwYWNlLCAmbWFwUHRy
LCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKLSAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBlcnJvciAw
eCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQot
ICAgICAgICAqb2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0ZVBvc2l0aW9u
ICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9p
ZCBTdHJlYW1pbmdJbmRleEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwg
R0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1J
bmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbUluZGV4QnVmZmVyID0gTlVMTDsK
LSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgocmVxdWlyZWRTcGFj
ZSwgMiAqIG1CdWZmZXJTaXplKTsKLQotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXREaXNwbGF5
KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSk7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIobUJ1
ZmZlclNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIHR5cGUgPT0g
R0xfVU5TSUdORURfSU5UID8gRDNERk1UX0lOREVYMzIgOiBEM0RGTVRfSU5ERVgxNiwgcG9vbCwg
Jm1JbmRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOwot
ICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVs
dS4iLCBtQnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtV3JpdGVQb3NpdGlvbiA9
IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgcmVxdWlyZWRTcGFjZSA+
IG1CdWZmZXJTaXplKSAgIC8vIFJlY3ljbGUKLSAgICB7Ci0gICAgICAgIHZvaWQgKmR1bW15Owot
ICAgICAgICBtSW5kZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQp
OwotICAgICAgICBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAgIG1Xcml0ZVBvc2l0
aW9uID0gMDsKLSAgICB9Ci19Ci0KLVN0YXRpY0luZGV4QnVmZmVyOjpTdGF0aWNJbmRleEJ1ZmZl
cihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogSW5kZXhCdWZmZXIoZGV2aWNlLCAwLCBEM0RG
TVRfVU5LTk9XTikKLXsKLSAgICBtQ2FjaGVUeXBlID0gR0xfTk9ORTsKLX0KLQotU3RhdGljSW5k
ZXhCdWZmZXI6On5TdGF0aWNJbmRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQgKlN0YXRpY0luZGV4
QnVmZmVyOjptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpCi17Ci0gICAgdm9p
ZCAqbWFwUHRyID0gTlVMTDsKLQotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jaygwLCByZXF1aXJlZFNwYWNlLCAm
bWFwUHRyLCAwKTsKLSAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAqb2Zm
c2V0ID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIFN0YXRpY0lu
ZGV4QnVmZmVyOjpyZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSkK
LXsKLSAgICBpZiAoIW1JbmRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAwKQotICAgIHsKLSAg
ICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdF
X1dSSVRFT05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5k
ZXhCdWZmZXIocmVxdWlyZWRTcGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09IEdMX1VO
U0lHTkVEX0lOVCA/IEQzREZNVF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2wsICZtSW5k
ZXhCdWZmZXIsIE5VTEwpOwotICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKLSAgICAK
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
Ik91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwg
bUJ1ZmZlclNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSByZXF1aXJl
ZFNwYWNlOwotICAgICAgICBtQ2FjaGVUeXBlID0gdHlwZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
bUluZGV4QnVmZmVyICYmIG1CdWZmZXJTaXplID49IHJlcXVpcmVkU3BhY2UgJiYgbUNhY2hlVHlw
ZSA9PSB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQKLSAgICB9Ci0g
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOyAgIC8vIFN0YXRpYyBpbmRleCBidWZmZXJzIGNhbid0IGJl
IHJlc2l6ZWQKLX0KLQotYm9vbCBTdGF0aWNJbmRleEJ1ZmZlcjo6bG9va3VwVHlwZShHTGVudW0g
dHlwZSkKLXsKLSAgICByZXR1cm4gbUNhY2hlVHlwZSA9PSB0eXBlOwotfQotCi1VSU5UIFN0YXRp
Y0luZGV4QnVmZmVyOjpsb29rdXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQs
IFVJTlQgKm1pbkluZGV4LCBVSU5UICptYXhJbmRleCkKLXsKLSAgICBJbmRleFJhbmdlIHJhbmdl
ID0ge29mZnNldCwgY291bnR9OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5kZXhSZXN1
bHQ+OjppdGVyYXRvciByZXMgPSBtQ2FjaGUuZmluZChyYW5nZSk7Ci0gICAgCi0gICAgaWYgKHJl
cyA9PSBtQ2FjaGUuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0g
ICAgKm1pbkluZGV4ID0gcmVzLT5zZWNvbmQubWluSW5kZXg7Ci0gICAgKm1heEluZGV4ID0gcmVz
LT5zZWNvbmQubWF4SW5kZXg7Ci0gICAgcmV0dXJuIHJlcy0+c2Vjb25kLnN0cmVhbU9mZnNldDsK
LX0KLQotdm9pZCBTdGF0aWNJbmRleEJ1ZmZlcjo6YWRkUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBH
THNpemVpIGNvdW50LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0cmVhbU9m
ZnNldCkKLXsKLSAgICBJbmRleFJhbmdlIGluZGV4UmFuZ2UgPSB7b2Zmc2V0LCBjb3VudH07Ci0g
ICAgSW5kZXhSZXN1bHQgaW5kZXhSZXN1bHQgPSB7bWluSW5kZXgsIG1heEluZGV4LCBzdHJlYW1P
ZmZzZXR9OwotICAgIG1DYWNoZVtpbmRleFJhbmdlXSA9IGluZGV4UmVzdWx0OwotfQotCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0luZGV4RGF0
YU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhE
YXRhTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWQ0MTY4Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRh
TWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIEluZGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdl
ciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBm
b3IgaW5kZXggYnVmZmVycy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfSU5ERVhEQVRBTUFOQUdFUl9I
XwotI2RlZmluZSBMSUJHTEVTVjJfSU5ERVhEQVRBTUFOQUdFUl9IXwotCi0jaW5jbHVkZSA8dmVj
dG9yPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNw
YWNlCi17Ci0gICAgZW51bSB7IElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUgPSA0MDk2ICogc2l6
ZW9mKEdMdWludCkgfTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBUcmFuc2xhdGVk
SW5kZXhEYXRhCi17Ci0gICAgVUlOVCBtaW5JbmRleDsKLSAgICBVSU5UIG1heEluZGV4OwotICAg
IFVJTlQgc3RhcnRJbmRleDsKLQotICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqaW5kZXhCdWZm
ZXI7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbDsKLX07Ci0KLWNsYXNzIEluZGV4QnVmZmVyCi17
Ci0gIHB1YmxpYzoKLSAgICBJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFVJ
TlQgc2l6ZSwgRDNERk9STUFUIGZvcm1hdCk7Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZmZXIoKTsK
LQotICAgIFVJTlQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9Ci0gICAgdmly
dHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpID0gMDsKLSAg
ICB2b2lkIHVubWFwKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2VydmVTcGFjZShVSU5UIHJlcXVp
cmVkU3BhY2UsIEdMZW51bSB0eXBlKSA9IDA7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkg
KmdldEJ1ZmZlcigpIGNvbnN0OwotICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsK
LQotICBwcm90ZWN0ZWQ6Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURldmljZTsKLQot
ICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqbUluZGV4QnVmZmVyOwotICAgIFVJTlQgbUJ1ZmZl
clNpemU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKLSAgICBzdGF0aWMgdW5zaWduZWQg
aW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlh
bDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZl
cik7Ci19OwotCi1jbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlciA6IHB1YmxpYyBJbmRleEJ1ZmZl
cgotewotICBwdWJsaWM6Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBVSU5UIGluaXRpYWxTaXplLCBEM0RGT1JNQVQgZm9ybWF0KTsKLSAgICB+U3Ry
ZWFtaW5nSW5kZXhCdWZmZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKFVJTlQgcmVxdWly
ZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2ZVNwYWNlKFVJ
TlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpOwotCi0gIHByaXZhdGU6Ci0gICAgVUlOVCBt
V3JpdGVQb3NpdGlvbjsKLX07Ci0KLWNsYXNzIFN0YXRpY0luZGV4QnVmZmVyIDogcHVibGljIElu
ZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdGF0aWNJbmRleEJ1ZmZlcihJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOwotICAgIH5TdGF0aWNJbmRleEJ1ZmZlcigpOwotCi0g
ICAgdmlydHVhbCB2b2lkICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpOwot
ICAgIHZpcnR1YWwgdm9pZCByZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0g
dHlwZSk7Ci0KLSAgICBib29sIGxvb2t1cFR5cGUoR0xlbnVtIHR5cGUpOwotICAgIFVJTlQgbG9v
a3VwUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UICptaW5JbmRleCwg
VUlOVCAqbWF4SW5kZXgpOyAgIC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBpbmRleCBi
dWZmZXIsIG9yIC0xIGlmIG5vdCBmb3VuZAotICAgIHZvaWQgYWRkUmFuZ2UoaW50cHRyX3Qgb2Zm
c2V0LCBHTHNpemVpIGNvdW50LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0
cmVhbU9mZnNldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBHTGVudW0gbUNhY2hlVHlwZTsKLSAgICAK
LSAgICBzdHJ1Y3QgSW5kZXhSYW5nZQotICAgIHsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0Owot
ICAgICAgICBHTHNpemVpIGNvdW50OwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IElu
ZGV4UmFuZ2UmIHJocykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG9mZnNldCAh
PSByaHMub2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBvZmZz
ZXQgPCByaHMub2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvdW50ICE9
IHJocy5jb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY291bnQg
PCByaHMuY291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IEluZGV4UmVzdWx0Ci0gICAgewotICAgICAg
ICBVSU5UIG1pbkluZGV4OwotICAgICAgICBVSU5UIG1heEluZGV4OwotICAgICAgICBVSU5UIHN0
cmVhbU9mZnNldDsKLSAgICB9OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5kZXhSZXN1
bHQ+IG1DYWNoZTsKLX07Ci0KLWNsYXNzIEluZGV4RGF0YU1hbmFnZXIKLXsKLSAgcHVibGljOgot
ICAgIEluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAq
ZXZpY2UpOwotICAgIHZpcnR1YWwgfkluZGV4RGF0YU1hbmFnZXIoKTsKLQotICAgIEdMZW51bSBw
cmVwYXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIgKmFycmF5
RWxlbWVudEJ1ZmZlciwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICp0cmFuc2xhdGVkKTsKLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAqZ2V0Q291bnRpbmdJbmRpY2Vz
KEdMc2l6ZWkgY291bnQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKEluZGV4RGF0YU1hbmFnZXIpOwotCi0gICAgc3RkOjpzaXplX3QgdHlwZVNpemUoR0xlbnVt
IHR5cGUpIGNvbnN0OwotICAgIHN0ZDo6c2l6ZV90IGluZGV4U2l6ZShEM0RGT1JNQVQgZm9ybWF0
KSBjb25zdDsKLQotICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZpY2U7Ci0KLSAgICBT
dHJlYW1pbmdJbmRleEJ1ZmZlciAqbVN0cmVhbWluZ0J1ZmZlclNob3J0OwotICAgIFN0cmVhbWlu
Z0luZGV4QnVmZmVyICptU3RyZWFtaW5nQnVmZmVySW50OwotICAgIFN0YXRpY0luZGV4QnVmZmVy
ICptQ291bnRpbmdCdWZmZXI7Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9JTkRF
WERBVEFNQU5BR0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9Qcm9ncmFtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4YTlkOC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTA3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFByb2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1w
bGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHku
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFp
bi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
dXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBnbAotewotY29u
c3QgY2hhciAqIGNvbnN0IGdfZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKLQotdW5zaWduZWQg
aW50IFByb2dyYW06Om1DdXJyZW50U2VyaWFsID0gMTsKLQotQXR0cmlidXRlQmluZGluZ3M6OkF0
dHJpYnV0ZUJpbmRpbmdzKCkKLXsKLX0KLQotQXR0cmlidXRlQmluZGluZ3M6On5BdHRyaWJ1dGVC
aW5kaW5ncygpCi17Ci19Ci0KLUluZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5VTEwpCi17
Ci19Ci0KLUluZm9Mb2c6On5JbmZvTG9nKCkKLXsKLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLX0K
LQotCi1pbnQgSW5mb0xvZzo6Z2V0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1JbmZvTG9n
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KLX0KLQotdm9pZCBJbmZvTG9n
OjpnZXRMb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cp
Ci17Ci0gICAgaW50IGluZGV4ID0gMDsKLQotICAgIGlmIChidWZTaXplID4gMCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtSW5mb0xvZykKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6
Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgICAgIG1l
bWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5m
b0xvZ1tpbmRleF0gPSAnXDAnOwotICAgIH0KLQotICAgIGlmIChsZW5ndGgpCi0gICAgewotICAg
ICAgICAqbGVuZ3RoID0gaW5kZXg7Ci0gICAgfQotfQotCi0vLyBhcHBlbmQgYSBzYW50aXplZCBt
ZXNzYWdlIHRvIHRoZSBwcm9ncmFtIGluZm8gbG9nLgotLy8gVGhlIEQzRCBjb21waWxlciBpbmNs
dWRlcyBhIGZha2UgZmlsZSBwYXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCi0v
LyBtZXNzYWdlcywgc28gbGV0cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBm
aWxlIHBhdGggZnJvbSB0aGUgbG9nLgotdm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQoY29u
c3QgY2hhciAqbWVzc2FnZSkKLXsKLSAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7Ci0KLSAg
ICBzaXplX3QgZm91bmQ7Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQo
Z19mYWtlcGF0aCk7Ci0gICAgICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAg
ICAgICAgewotICAgICAgICAgICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZ19mYWtlcGF0aCkp
OwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cyk7Ci0KLSAgICBhcHBlbmQoIiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZvaWQgSW5mb0xv
Zzo6YXBwZW5kKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9ybWF0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQot
ICAgIHZhX2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2
c25wcmludGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgdmFfZW5k
KHZhcmFyZyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKLQotICAg
IGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9M
ZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7
Ci0gICAgICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGgg
KyAxXTsKLSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBzdHJjcHko
bmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsK
LSAgICAgICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIEluZm9Mb2c6OnJl
c2V0KCkKLXsKLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICBkZWxldGUgW10gbUlu
Zm9Mb2c7Ci0gICAgICAgIG1JbmZvTG9nID0gTlVMTDsKLSAgICB9Ci19Ci0KLVByb2dyYW06OlBy
b2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJj
ZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgp
KQotewotICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgbVZlcnRleFNoYWRlciA9IE5V
TEw7Ci0gICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOwotICAgIG1EZWxldGVTdGF0dXMgPSBmYWxz
ZTsKLSAgICBtUmVmQ291bnQgPSAwOwotfQotCi1Qcm9ncmFtOjp+UHJvZ3JhbSgpCi17Ci0gICAg
dW5saW5rKHRydWUpOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdt
ZW50U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVh
c2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRlciAqc2hh
ZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQot
ICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVy
dGV4U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOwotICAg
IH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIp
Ci0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRTaGFkZXIg
PSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRS
ZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAg
IGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAg
ICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNl
KCk7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmIChz
aGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBp
ZiAobUZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNl
KCk7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0QXR0
YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/
IDEgOiAwKSArIChtRnJhZ21lbnRTaGFkZXIgPyAxIDogMCk7Ci19Ci0KLXZvaWQgQXR0cmlidXRl
QmluZGluZ3M6OmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIg
Km5hbWUpCi17Ci0gICAgaWYgKGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgbUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwot
ICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGlu
ZGV4LCBjb25zdCBjaGFyICpuYW1lKQotewotICAgIG1BdHRyaWJ1dGVCaW5kaW5ncy5iaW5kQXR0
cmlidXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOwotfQotCi0vLyBMaW5rcyB0aGUgSExTTCBjb2Rl
IG9mIHRoZSB2ZXJ0ZXggYW5kIHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5
aW5ncywKLS8vIGNvbXBpbGluZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5nIHRoZSBh
dHRyaWJ1dGUgbWFwcGluZ3MsIGFuZCBjb2xsZWN0aW5nCi0vLyBhIGxpc3Qgb2YgdW5pZm9ybXMK
LXZvaWQgUHJvZ3JhbTo6bGluaygpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLQotICAgIG1JbmZv
TG9nLnJlc2V0KCk7Ci0KLSAgICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5Owot
ICAgIGlmICghbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5n
cywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAgIHVubGlu
ayhmYWxzZSk7Ci0gICAgfQotfQotCi1pbnQgQXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0
ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQg
bG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykK
LSAgICB7Ci0gICAgICAgIGlmIChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1l
KSAhPSBtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZW5kKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAt
MTsKLX0KLQotLy8gUmV0dXJucyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3Rh
dGUsIGJlZm9yZSByZS1saW5raW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1
bmxpbmsoYm9vbCBkZXN0cm95KQotewotICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWlu
ZyBkZXN0cnVjdGVkCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAg
IG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVZlcnRl
eFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgp
OwotICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBkZWxldGUgbVByb2dyYW1C
aW5hcnk7Ci0gICAgICAgIG1Qcm9ncmFtQmluYXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0KLVByb2dy
YW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKQotewotICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeTsKLX0KLQotdm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLSAgICBtUHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1CaW5hcnk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCi17
Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0
YXR1cykKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0obUhh
bmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmFkZFJlZigpCi17Ci0gICAgbVJlZkNv
dW50Kys7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1SZWZDb3VudDsKLX0KLQotdW5zaWduZWQgaW50IFByb2dyYW06OmdldFNl
cmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBQ
cm9ncmFtOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19
Ci0KLWludCBQcm9ncmFtOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUluZm9Mb2cuZ2V0TGVuZ3RoKCk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAgICByZXR1
cm4gbUluZm9Mb2cuZ2V0TG9nKGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7Ci19Ci0KLXZvaWQg
UHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNv
dW50LCBHTHVpbnQgKnNoYWRlcnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQotICAgIGlmICht
VmVydGV4U2hhZGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFu
ZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAgIGlmICht
RnJhZ21lbnRTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAg
ICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdl
dEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9Ci0KLSAgICBp
ZiAoY291bnQpCi0gICAgewotICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9Ci19Ci0KLXZv
aWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAq
bmFtZSkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBtUHJvZ3Jh
bUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUs
IHR5cGUsIG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoYnVmc2l6
ZSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAq
bGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICp0eXBlID0gR0xfTk9ORTsKLSAgICAg
ICAgKnNpemUgPSAxOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmli
dXRlQ291bnQoKQotewotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1HTGludCBQcm9n
cmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQotewotICAgIGlmIChtUHJvZ3JhbUJp
bmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0
cmlidXRlTWF4TGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBp
bmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVu
dW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAg
ewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm0oaW5kZXgs
IGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGlmIChidWZzaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbmFt
ZVswXSA9ICdcMCc7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7
Ci0gICAgICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICpzaXplID0g
MDsKLSAgICAgICAgKnR5cGUgPSBHTF9OT05FOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6
Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAg
ewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgp
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0K
LUdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQotewotICAgIGlmICht
UHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0
QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkK
LXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjppc0ZsYWdn
ZWRGb3JEZWxldGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7Ci19Ci0K
LXZvaWQgUHJvZ3JhbTo6dmFsaWRhdGUoKQotewotICAgIG1JbmZvTG9nLnJlc2V0KCk7Ci0KLSAg
ICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+dmFs
aWRhdGUobUluZm9Mb2cpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtSW5mb0xv
Zy5hcHBlbmQoIlByb2dyYW0gaGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0g
ICAgfQotfQotCi1ib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKLXsKLSAgICBpZiAo
bVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmlz
VmFsaWRhdGVkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9Qcm9ncmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDczMWQuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBH
TCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaWZuZGVmIExJQkdMRVNWMl9Q
Uk9HUkFNX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0hfCi0KLSNpbmNsdWRlIDxkM2R4
OS5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlICJsaWJH
TEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNw
YWNlIGdsCi17Ci1jbGFzcyBSZXNvdXJjZU1hbmFnZXI7Ci1jbGFzcyBGcmFnbWVudFNoYWRlcjsK
LWNsYXNzIFZlcnRleFNoYWRlcjsKLQotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBnX2Zha2Vw
YXRoOwotCi1jbGFzcyBBdHRyaWJ1dGVCaW5kaW5ncwotewotICBwdWJsaWM6Ci0gICAgQXR0cmli
dXRlQmluZGluZ3MoKTsKLSAgICB+QXR0cmlidXRlQmluZGluZ3MoKTsKLQotICAgIHZvaWQgYmlu
ZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0gICAg
aW50IGdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0Owot
Ci0gIHByaXZhdGU6Ci0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5n
W01BWF9WRVJURVhfQVRUUklCU107Ci19OwotCi1jbGFzcyBJbmZvTG9nCi17Ci0gIHB1YmxpYzoK
LSAgICBJbmZvTG9nKCk7Ci0gICAgfkluZm9Mb2coKTsKLQotICAgIGludCBnZXRMZW5ndGgoKSBj
b25zdDsKLSAgICB2b2lkIGdldExvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZyk7Ci0KLSAgICB2b2lkIGFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICpt
ZXNzYWdlKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyICppbmZvLCAuLi4pOwotICAgIHZv
aWQgcmVzZXQoKTsKLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5m
b0xvZyk7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci19OwotCi1jbGFzcyBQcm9ncmFtCi17Ci0gIHB1
YmxpYzoKLSAgICBQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRs
ZSk7Ci0KLSAgICB+UHJvZ3JhbSgpOwotCi0gICAgYm9vbCBhdHRhY2hTaGFkZXIoU2hhZGVyICpz
aGFkZXIpOwotICAgIGJvb2wgZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKLSAgICBpbnQg
Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKSBjb25zdDsKLQotICAgIHZvaWQgYmluZEF0dHJpYnV0
ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLSAgICB2b2lkIGxp
bmsoKTsKLSAgICB2b2lkIHNldFByb2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0gICAgaW50
IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwotICAgIHZvaWQgZ2V0QXR0
YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNo
YWRlcnMpOwotCi0gICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwg
R0xjaGFyICpuYW1lKTsKLSAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAg
IEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xpbnQgZ2V0
QWN0aXZlVW5pZm9ybUNvdW50KCk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0
aCgpOwotCi0gICAgdm9pZCBhZGRSZWYoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAgICB1bnNp
Z25lZCBpbnQgZ2V0UmVmQ291bnQoKSBjb25zdDsKLSAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigp
OwotICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKLQotICAgIHZvaWQgdmFs
aWRhdGUoKTsKLSAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBp
bnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUHJvZ3JhbSk7Ci0KLSAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBmYWxz
ZSk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0KLSAgICBGcmFn
bWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwotICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNo
YWRlcjsKLQotICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsKLQotICAg
IFByb2dyYW1CaW5hcnkqIG1Qcm9ncmFtQmluYXJ5OwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsg
ICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hl
biBubyBsb25nZXIgaW4gdXNlCi0KLSAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OwotCi0gICAg
Y29uc3QgdW5zaWduZWQgaW50IG1TZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1D
dXJyZW50U2VyaWFsOwotCi0gICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwot
ICAgIGNvbnN0IEdMdWludCBtSGFuZGxlOwotCi0gICAgSW5mb0xvZyBtSW5mb0xvZzsKLX07Ci19
Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyOGU1MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjQ4MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9ncmFtLmNw
cDogSW1wbGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3Jh
bSBvYmplY3RzCi0vLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLQotI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENP
TVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMwotI2VuZGlmCi0KLW5hbWVzcGFjZSBnbAotewotc3Rk
OjpzdHJpbmcgc3RyKGludCBpKQotewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwot
fQotCi1Vbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25h
bWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFt
ZSksIG5hbWUoUHJvZ3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlT
aXplKGFycmF5U2l6ZSkKLXsKLSAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5
cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0g
ICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0KLVVuaWZv
cm06On5Vbmlmb3JtKCkKLXsKLSAgICBkZWxldGVbXSBkYXRhOwotfQotCi1ib29sIFVuaWZvcm06
OmlzQXJyYXkoKQotewotICAgIHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAw
OwotfQotCi1Vbmlmb3JtTG9jYXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmlu
ZyAmX25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAotICAg
IDogbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBlbGVtZW50
KGVsZW1lbnQpLCBpbmRleChpbmRleCkKLXsKLX0KLQotUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJp
bmFyeSgpCi17Ci0gICAgbURldmljZSA9IGdldERldmljZSgpOwotCi0gICAgbVBpeGVsRXhlY3V0
YWJsZSA9IE5VTEw7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1Db25zdGFu
dFRhYmxlUFMgPSBOVUxMOwotICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotCi0gICAgbVZh
bGlkYXRlZCA9IGZhbHNlOwotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TZW1hbnRpY0luZGV4W2lu
ZGV4XSA9IC0xOwotICAgIH0KLQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1BT
W2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKLSAg
ICB7Ci0gICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZSA9IDA7Ci0KLSAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0
aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbiA9IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAg
ICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKLX0KLQotUHJvZ3JhbUJpbmFyeTo6flBy
b2dyYW1CaW5hcnkoKQotewotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAg
ICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4
RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7
Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCi0gICAgewotICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxl
VlMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgfQot
Ci0gICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBt
VW5pZm9ybXMuYmFjaygpOwotICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKLSAgICB9Ci19
Ci0KLUlEaXJlY3QzRFBpeGVsU2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIo
KQotewotICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJldHVybiBt
VmVydGV4RXhlY3V0YWJsZTsKLX0KLQotR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0
ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRl
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0u
bmFtZSA9PSBzdGQ6OnN0cmluZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLWludCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KGludCBh
dHRyaWJ1dGVJbmRleCkKLXsKLSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRy
aWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1h
bnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLX0KLQotLy8gUmV0dXJucyBvbmUgbW9yZSB0aGFu
IHRoZSBoaWdoZXN0IHNhbXBsZXIgaW5kZXggdXNlZC4KLUdMaW50IFByb2dyYW1CaW5hcnk6Omdl
dFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4gbVVzZWRQ
aXhlbFNhbXBsZXJSYW5nZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIHJl
dHVybiBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0
aGUgaW5kZXggb2YgdGhlIHRleHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9uZGluZyB0
byBhIERpcmVjdDNEIDkgc2FtcGxlcgotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFk
ZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJ
bmRleCkKLXsKLSAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKLQotICAgIHN3aXRj
aCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VS
VChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1sw
XSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4
IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLQotICAgICAg
ICBpZiAobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9n
aWNhbFRleHR1cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49
IDAgJiYgbG9naWNhbFRleHR1cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11
bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2dp
Y2FsVGV4dHVyZVVuaXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBSZXR1cm5z
IHRoZSB0ZXh0dXJlIHR5cGUgZm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5k
Ci0vLyBpbmRleCAoMC0xNSBmb3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVy
dGV4IHNoYWRlcikuCi1UZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVy
ZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKLXsKLSAg
ICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAg
ICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBs
ZXJzUFNbMF0pKTsKLSAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0
aXZlKTsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5
cGU7Ci0gICAgICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlcklu
ZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLSAgICAg
ICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgcmV0
dXJuIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBURVhUVVJFXzJEOwotfQotCi1H
TGludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkK
LXsKLSAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlwIGFueSB0
cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAotICAgIHNp
emVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xvc2UgPSBu
YW1lLmZpbmRfbGFzdF9vZignXScpOwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9z
ICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vic2NyaXB0
ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5hbWUuZXJh
c2Uob3Blbik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZv
cm1JbmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2Nh
dGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBsb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsK
LX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9B
VCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNp
emU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5v
bi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAg
ICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAg
ICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAg
ICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0g
dlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRb
Ml0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNb
aV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCi0gICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0
WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJn
ZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJp
bmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKLSAgICB7Ci0gICAg
ICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiA0LAotICAgICAgICAgICAgICAgdiwgNCAq
IHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXpl
ID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0g
MSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBm
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxT
RTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFy
Z2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4K
LXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17
Ci0gICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7Ci0g
ICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7Ci0K
LSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsKLSAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCAr
IHhdOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUK
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAoaW50IHkg
PSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
dGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRp
b24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0
VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0g
R0xfRkxPQVRfTUFUMikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0
YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA4OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwg
dmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3Rk
OjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBj
b3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCw0LDMsMywzPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwot
ICAgICAgICB2YWx1ZSArPSA5OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZM
T0FUX01BVDQpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2
YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
QmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2Yo
R0xpbnQpLAotICAgICAgICAgICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2
W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9
IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNp
emUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGlu
dCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVt
Y3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogc2l6ZW9mKEdMaW50KSAqIDIsCi0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50
KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChH
TGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lO
VF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAotICAg
ICAgICAgICAgICAgdiwgMyAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5p
Zm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGlu
dCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFy
cmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
YXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFu
IElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAg
ICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2Yo
R0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRV
bmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBh
biBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0K
LSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1z
ID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0
OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAv
LyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVu
b3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMg
PSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAo
KmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
ZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3Jt
RXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291
bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNv
bXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShw
YXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgY291bnQgKiBzaXplb2YoR0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAg
Ly8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBl
bm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVz
ID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYg
KCpidWZTaXplIDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50
eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgewotICAgICAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJh
bXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
aW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50
IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlw
ZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRl
cm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBz
d2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdM
ZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChH
TGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdM
aW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAgIHsKLSAg
ICAgICAgbVVuaWZvcm1zW2luZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotLy8gQXBw
bGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUg
RGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCi17
Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1z
LmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgewotICAgICAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5kaXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiop
dGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3Jt
LT50eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAg
IGFwcGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6
ZSwgMywgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFw
cGx5VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMyOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUNDogYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDog
ICAgICAgIGFwcGx5VW5pZm9ybTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0y
aXYodGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfSU5UX1ZFQzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFy
cmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0
OiAgIGFwcGx5VW5pZm9ybTRpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2Rl
IG9mIHRoZSBhdHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRDEw
QmxvYiAqUHJvZ3JhbUJpbmFyeTo6Y29tcGlsZVRvQmluYXJ5KEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAq
KmNvbnN0YW50VGFibGUpCi17Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgfQotCi0gICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwot
ICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7
Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAg
ICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAg
ICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0g
ICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBz
b3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6
OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxl
KHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUo
KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9
Ci0KLSAgICBJRDNEMTBCbG9iICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9y
TWVzc2FnZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxz
bCksIGdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MsIDAsICZi
aW5hcnksICZlcnJvck1lc3NhZ2UpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5H
ZXRCdWZmZXJQb2ludGVyKCk7Ci0KLSAgICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVz
c2FnZSk7Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgIFRSQUNFKCJcbiVz
IiwgbWVzc2FnZSk7Ci0KLSAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IGVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9
Ci0KLSAgICByZXN1bHQgPSBEM0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNfY2FzdDxj
b25zdCBEV09SRCo+KGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRUYWJsZSk7
Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGJpbmFyeS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAg
IH0KLQotICAgIHJldHVybiBiaW5hcnk7Ci19Ci0KLS8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2Vu
ZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wg
RVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBh
Z2UgMTExCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywg
b3IgLTEgaWYgdW5zdWNjZXNmdWwKLWludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIpCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQo
KTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVt
VmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaW50
IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKLSAg
ICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8
fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1h
eFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7
IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIg
Pj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWls
YWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdmFp
bGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
cnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAy
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2
YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4
VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOwotCi0gICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0p
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNwYWNlW2Nv
bHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0g
MDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdb
eV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47Ci0K
LSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgaWYgKCFzdWNjZXNzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFy
eWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAt
MTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQg
cmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsg
ciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1ty
XVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVnaXN0ZXJzOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5
aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmlu
ZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlcikKLXsKLSAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4
SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIFJlc2V0IHRoZSB2YXJ5aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgZnJhZ1ZhciAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFnVmFy
KyspCi0gICAgewotICAgICAgICBmcmFnVmFyLT5yZWcgPSAtMTsKLSAgICAgICAgZnJhZ1Zhci0+
Y29sID0gLTE7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4VmFy
ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0eFZhci0+cmVn
ID0gLTE7Ci0gICAgICAgIHZ0eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgLy8gTWFwIHRo
ZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tp
bmdbTUFYX1ZBUllJTkdfVkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGludCByZWdpc3Rl
cnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIpOwotCi0g
ICAgaWYgKHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBj
b250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5n
VmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYg
KHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdp
c3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZCIpOwotCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZy
YWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9
IGZhbHNlOwotCi0gICAgICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1W
YXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRw
dXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQt
PnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRo
ZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5j
b2wgPSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGcmFn
bWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0
LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9S
IiA6ICJURVhDT09SRCIpOwotCi0gICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4i
Ci0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7
Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0
cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJp
YnV0ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
dmVydGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4
SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JE
IiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXgg
Kz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIHZlcnRl
eEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsKLQot
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAgICBp
bnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMg
OiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
IGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFy
eWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3Rl
cnMpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNp
emUgJiYgc20zKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1Bv
aW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgot
ICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1h
aW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAi
ICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0gICAgICAg
IGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAot
ICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0
ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0g
IlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAg
ICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0
aW9uLnggLSBkeF9IYWxmUGl4ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKyBk
eF9IYWxmUGl4ZWxTaXplLnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlv
bi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlv
bi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1Bv
aW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0
LmdsX1BvaW50U2l6ZSA9IGNsYW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9
Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4U2hhZGVy
LT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5l
bmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxl
Um93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGludCByID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOwotICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2hhcmVkUmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5
IG11bHRpcGxlIHZhcnlpbmdzCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4
XSAhPSBwYWNraW5nW3JdWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICIuIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0
OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5aW5nKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0g
InoiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZl
cnRleEhMU0wgKz0gInciOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleEhM
U0wgKz0gIiA9ICIgKyB2YXJ5aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJd
IjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dz
ID4gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVy
dGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtc
biI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
b3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgIAotICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93
Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAg
ICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlp
bmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0
cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0g
ICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRF
WENPT1JEMDtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250
RmFjaW5nKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBW
RkFDRTtcbiI7Ci0gICAgfQotCi0gICAgcGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAg
ICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xv
clsxXSA6IENPTE9SO1xuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5w
dXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9h
dCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc20zKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9D
b29yZCBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFu
ZCBjZW50ZXIueS4gU2VlIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54
ICogcmh3KSAqIGR4X0Nvb3JkLnggKyBkeF9Db29yZC56O1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3
KSAqIGR4X0Nvb3JkLnkgKyBkeF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54
O1xuIjsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0g
aW5wdXQuZ2xfUG9pbnRDb29yZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBn
bF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0
LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOwotICAgIH0KLQotICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93
Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAg
ICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4g
MSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07
XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
QXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQotewotICAgIGlmICghZnJh
Z21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZl
cnRleFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVyLT5nZXRI
TFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExT
TCgpOwotCi0gICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgcGl4ZWxITFNMLCB2ZXJ0ZXhI
TFNMLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwot
ICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1v
ZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIjsKLSAgICBjb25zdCBjaGFyICpwaXhlbFByb2Zp
bGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8w
IjsKLQotICAgIElEM0QxMEJsb2IgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZv
TG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZT
KTsKLSAgICBJRDNEMTBCbG9iICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9n
LCBwaXhlbEhMU0wuY19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7Ci0K
LSAgICBpZiAodmVydGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAgICAgSFJF
U1VMVCB2ZXJ0ZXhSZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2
ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKLSAg
ICAgICAgSFJFU1VMVCBwaXhlbFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChE
V09SRCopcGl4ZWxCaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUp
OwotCi0gICAgICAgIGlmICh2ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgdmVydGV4UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBT
VUNDRUVERUQocGl4ZWxSZXN1bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2Uo
KTsKLSAgICAgICAgcGl4ZWxCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4QmluYXJ5
ID0gTlVMTDsKLSAgICAgICAgcGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVmVy
dGV4RXhlY3V0YWJsZSAmJiBtUGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0ZUJpbmRpbmdzLCBmcmFnbWVu
dFNoYWRlciwgdmVydGV4U2hhZGVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZv
cm1zKGluZm9Mb2csIEdMX0ZSQUdNRU5UX1NIQURFUiwgbUNvbnN0YW50VGFibGVQUykpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9WRVJURVhfU0hBREVS
LCBtQ29uc3RhbnRUYWJsZVZTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1z
IGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCi0g
ICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBh
ZGRpdGlvbmFsIGRlY29yYXRpb24KLSAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIpOwotICAgICAgICAgICAgbUR4RGVw
dGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKLSAgICAgICAgICAg
IG1EeENvb3JkTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7Ci0gICAg
ICAgICAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4
X0hhbGZQaXhlbFNpemUiKTsKLSAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0Zyb250Q0NXIik7Ci0gICAgICAgICAgICBtRHhQb2ludHNPckxp
bmVzTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKLQot
ICAgICAgICAgICAgY29udGV4dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOwotCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotLy8gRGV0ZXJtaW5lcyB0aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERp
cmVjdDNEIDkgdmVydGV4IHN0cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW1CaW5hcnk6
OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdz
ICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0
ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKLXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9u
cyA9IDA7Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2Nh
dGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0
aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5h
bWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0
cmliTG9jYXRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRl
W2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ly8gTXVsdGlwbGUgYWN0aXZlIGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247
IG5vdCBhbiBlcnJvcgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmli
dXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFy
aWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyAr
IGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24g
JWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24p
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhh
dCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6
Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsr
KQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0
cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwot
ICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1
c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAgICAgICBp
ZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZF
UlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNf
c3RyKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGlu
awotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJs
ZUluZGV4XSA9ICphdHRyaWJ1dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBh
dHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyAp
Ci0gICAgewotICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5k
ZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAgIGludCBy
b3dzID0gc3RkOjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS50eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyBy
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4
KytdID0gaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBHTGVu
dW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0gICAgRDNE
WENPTlNUQU5UVEFCTEVfREVTQyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Ci0KLSAgICBjb25z
dGFudFRhYmxlLT5HZXREZXNjKCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFu
dFRhYmxlRGVzY3JpcHRpb24uQ29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAg
ICAgICBEM0RYSEFORExFIGNvbnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3Rh
bnQoMCwgY29uc3RhbnRJbmRleCk7Ci0KLSAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3Rh
bnREZXNjcmlwdGlvbjsKLSAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3Rh
bnRIYW5kbGUsICZjb25zdGFudERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlm
b3JtKGluZm9Mb2csIHNoYWRlciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24p
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBj
b25zdGFudCBmb3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3Jt
cwotLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZp
bmVkKQotYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2cs
IEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBE
M0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkK
LXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FN
UExFUikKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3Rh
bnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEQzRFhIQU5ETEUgcHNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlO
YW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICAgICAgICBEM0RYSEFO
RExFIHZzQ29uc3RhbnQgPSBtQ29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxM
LCBjb25zdGFudERlc2NyaXB0aW9uLk5hbWUpOwotCi0gICAgICAgICAgICBpZiAocHNDb25zdGFu
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlcklu
ZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsK
LQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BT
W3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBs
ZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5
cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0g
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9
IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUGl4ZWwgc2hhZGVyIHNhbXBsZXIg
Y291bnQgZXhjZWVkcyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHZzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0
YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4
dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZl
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50
ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJD
VUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5k
ZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJWZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGlt
dW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAg
IGNhc2UgRDNEWFBDX1NUUlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzOyBhcnJheUluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZmllbGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3Ry
dWN0TWVtYmVyczsgZmllbGQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEQzRFhIQU5ETEUgZmllbGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFu
dChjb25zdGFudEhhbmRsZSwgZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05T
VEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVz
Y3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERl
c2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcg
c3RydWN0SW5kZXggPSAoY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiAr
IHN0cihhcnJheUluZGV4KSArICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
IWRlZmluZVVuaWZvcm0oaW5mb0xvZywgc2hhZGVyLCBmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlw
dGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSArIHN0cnVjdEluZGV4ICsgIi4i
KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgY2Fz
ZSBEM0RYUENfU0NBTEFSOgotICAgICAgY2FzZSBEM0RYUENfVkVDVE9SOgotICAgICAgY2FzZSBE
M0RYUENfTUFUUklYX0NPTFVNTlM6Ci0gICAgICBjYXNlIEQzRFhQQ19PQkpFQ1Q6Ci0gICAgICAg
IHJldHVybiBkZWZpbmVVbmlmb3JtKHNoYWRlciwgY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSAr
IGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFByb2dy
YW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsK
LSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9u
LCBfbmFtZSk7Ci0KLSAgICBpZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBHTGludCBs
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVudW0g
dHlwZSA9IHVuaWZvcm0tPnR5cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZSB1bmlmb3JtOwotICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyID09IEdM
X0ZSQUdNRU5UX1NIQURFUikgdW5pZm9ybS0+cHMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24pOwot
ICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikgICB1bmlmb3JtLT52cy5zZXQoY29u
c3RhbnREZXNjcmlwdGlvbik7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB1bmlmb3JtLT50eXBlID09IHR5cGU7Ci0gICAgfQotCi0gICAgbVVuaWZvcm1z
LnB1c2hfYmFjayh1bmlmb3JtKTsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVu
aWZvcm1zLnNpemUoKSAtIDE7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVu
aWZvcm0tPmFycmF5U2l6ZTsgKytpKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNo
X2JhY2soVW5pZm9ybUxvY2F0aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9ybSAqUHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5p
Zm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qg
c3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3Mg
PT0gMSkgICAvLyBWZWN0b3JzIGFuZCBzY2FsYXJzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBU
X1NBTVBMRVIyRDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1
bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9TQU1QTEVSXzJELCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKLSAg
ICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVS
X0NVQkUsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0JPT0w6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNv
bnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9CT09MX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfSU5U
OgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lO
VCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBj
YXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5p
Zm9ybShHTF9JTlRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDNCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVz
Y3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbnN0YW50
RGVzY3JpcHRpb24uUm93cyA9PSBjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVh
cmUgbWF0cmljZXMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5U
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgX25hbWUs
IGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0ZMT0FUX01BVDQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8v
IFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0
cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSkKLXsKLSAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUu
Y29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBu
YW1lOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpzdHJpbmcgUHJv
Z3JhbUJpbmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQot
ewotICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBfbmFtZTsKLSAgICAKLSAgICAvLyBSZW1vdmUgYW55
IHN0cnVjdHVyZSBmaWVsZCBkZWNvcmF0aW9uCi0gICAgc2l6ZV90IHBvcyA9IDA7Ci0gICAgd2hp
bGUgKChwb3MgPSBuYW1lLmZpbmQoIi5fIiwgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0g
ICAgewotICAgICAgICBuYW1lLnJlcGxhY2UocG9zLCAyLCAiLiIpOwotICAgIH0KLQotICAgIC8v
IFJlbW92ZSB0aGUgbGVhZGluZyBkZWNvcmF0aW9uCi0gICAgaWYgKG5hbWVbMF0gPT0gJ18nKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlm
IChuYW1lLmNvbXBhcmUoMCwgMywgImFyXyIpID09IDApCi0gICAgewotICAgICAgICByZXR1cm4g
bmFtZS5zdWJzdHIoMyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lOwotfQotCi12b2lk
IFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBH
THNpemVpIGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9h
dCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVj
dG9yW0QzRDlfTUFYX0JPT0xfQ09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5w
cy5mbG9hdDRJbmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDAp
Ci0gICAgewotICAgICAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRT
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaiA8IHdpZHRoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAodltpICogd2lkdGggKyBqXSA9PSBHTF9G
QUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0
ICsgal0gPSAwLjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCB8fCB0
YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIGludCBwc0Nv
dW50ID0gdGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3Jt
LT52cy5ib29sSW5kZXggPj0gMCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAw
OwotICAgICAgICBpbnQgY29weUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjpt
YXgocHNDb3VudCwgdnNDb3VudCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlf
TUFYX0JPT0xfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291
bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0g
R0xfRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMu
ZmxvYXQ0SW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnBzLmJvb2xJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4LCBib29sVmVj
dG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApCi0gICAgewotICAgICAgICBt
RGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0
SW5kZXgsIHZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQot
ICAgICAgICAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDApCi0gICAg
ewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9y
bS0+dnMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmZ2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQ
aXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdiwgdGFy
Z2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0
ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3Jb
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2
W2ldLCAwLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0
ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5k
ZXggPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXgg
PSB0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVy
SW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOwotICAgICAgICAg
ICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxv
YXQ0SW5kZXgsIChjb25zdCBmbG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5y
ZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnNhbXBs
ZXJJbmRleCA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJ
bmRleCA9IHRhcmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRleDsKLQotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNh
bXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+
PSAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJn
ZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTJpdihVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBB
U1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9S
NCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0
KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgMCwgMCk7Ci0KLSAgICAgICAgdiArPSAyOwotICAg
IH0KLQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAg
ICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9
IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIDApOwot
Ci0gICAgICAgIHYgKz0gMzsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5p
Zm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9n
cmFtQmluYXJ5OjphcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZb
MV0sIChmbG9hdCl2WzJdLCAoZmxvYXQpdlszXSk7Ci0KLSAgICAgICAgdiArPSA0OwotICAgIH0K
LQotICAgIGFwcGx5VW5pZm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5p
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9S
NCAqdmVjdG9yKQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAp
OwotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3Jt
LT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5w
cy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9h
dDRJbmRleCA+PSAwKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFt
QmluYXJ5Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFsaWRhdGVkOwot
fQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgs
IEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0
ZXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNpZ25lZCBp
bnQgYXR0cmlidXRlOwotICAgIGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGlmIChtTGlua2VkQXR0
cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5k
ZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
YWN0aXZlQXR0cmlidXRlKys7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQotICAgIHsK
LSAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm5hbWUuY19zdHIoKTsKLQotICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7
Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAgICBpZiAobGVuZ3Ro
KQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgKnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScg
aW5zdGFuY2UKLQotICAgICp0eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7
Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKLXsK
LSAgICBpbnQgY291bnQgPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBh
dHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKLSAg
ICB7Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5l
bXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3Rp
dmVBdHRyaWJ1dGVNYXhMZW5ndGgoKQotewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAg
Zm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbUxpbmtlZEF0
dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lLmxlbmd0aCgpICsgMSksIG1heExlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmdldEFj
dGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAgIC8vIFNr
aXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3Jt
ID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKLSAgICBmb3IgKHVuaWZvcm0gPSAwOyB1
bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQotICAgIHsKLSAgICAgICAgaWYg
KG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh
Y3RpdmVVbmlmb3JtID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGFjdGl2ZVVuaWZvcm0rKzsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
dW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0
aGFuIGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0KLSAgICBpZiAoYnVmc2l6ZSA+IDApCi0gICAg
ewotICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7
Ci0KLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdHJpbmcgKz0gIlswXSI7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJu
Y3B5KG5hbWUsIHN0cmluZy5jX3N0cigpLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXpl
IC0gMV0gPSAnXDAnOwotCi0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICpsZW5ndGggPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6
ZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+YXJyYXlTaXplOwotCi0gICAgKnR5cGUgPSBtVW5pZm9y
bXNbdW5pZm9ybV0tPnR5cGU7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVu
aWZvcm1Db3VudCgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBu
dW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5p
Zm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsr
KQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBh
cmUoMCwgMywgImR4XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQotewotICAgIGludCBtYXhMZW5ndGgg
PSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBu
dW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IGxlbmd0aCA9IChpbnQpKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgp
ICsgMSk7Ci0gICAgICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXko
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50
aW5nIGluICJbMF0iLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3Rk
OjptYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1heExlbmd0aDsKLX0KLQotdm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZvTG9nICZp
bmZvTG9nKQotewotICAgIGFwcGx5VW5pZm9ybXMoKTsKLSAgICBpZiAoIXZhbGlkYXRlU2FtcGxl
cnMoJmluZm9Mb2cpKQotICAgIHsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LWJvb2wgUHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKQot
ewotICAgIC8vIGlmIGFueSB0d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2Yg
ZGlmZmVyZW50IHR5cGVzLCBidXQgcmVmZXIgdG8gdGhlIHNhbWUKLSAgICAvLyB0ZXh0dXJlIGlt
YWdlIHVuaXQsIGFuZCB0aGlzIGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQ
cm9ncmFtIHdpbGwgZmFpbCwgYW5kCi0gICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRz
IHdpbGwgaXNzdWUgdGhlIElOVkFMSURfT1BFUkFUSU9OIGVycm9yLgotCi0gICAgY29uc3QgdW5z
aWduZWQgaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7Ci0gICAgVGV4dHVyZVR5cGUgdGV4
dHVyZVVuaXRUeXBlW01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTX1ZURjsgKytpKQotICAgIHsKLSAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVY
VFVSRV9VTktOT1dOOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVy
c1BTW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQg
PSBtU2FtcGxlcnNQU1tpXS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICh1bml0ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9ybSAoJWQp
IGV4Y2VlZHMgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KHRleHR1cmVVbml0VHlwZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1
cmVVbml0VHlwZVt1bml0XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpbmZvTG9nKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVy
IHRvIHRoZSBzYW1lIHRleHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tp
XS50ZXh0dXJlVHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkK
LSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1
cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChp
bmZvTG9nKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+
YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVY
VFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2FtcGxl
cnNWU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVy
cyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVu
aXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVu
aXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0xpbnQgUHJvZ3Jh
bUJpbmFyeTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBt
RHhEZXB0aFJhbmdlTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVw
dGhMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0K
LUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1EeENvb3JkTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4
SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVs
U2l6ZUxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9j
YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOwotfQotCi1H
TGludCBQcm9ncmFtQmluYXJ5OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5YzVlMi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAorKysgL2Rl
di9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9ncmFt
Lmg6IERlZmluZXMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0g
b2JqZWN0cwotLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fQklO
QVJZX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwotCi0jaW5jbHVkZSA8
ZDNkeDkuaD4KLSNpbmNsdWRlIDxkM2Rjb21waWxlci5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNp
bmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBGcmFnbWVu
dFNoYWRlcjsKLWNsYXNzIFZlcnRleFNoYWRlcjsKLQotLy8gSGVscGVyIHN0cnVjdCByZXByZXNl
bnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0gICAgVW5p
Zm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplKTsKLQotICAgIH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXkoKTsKLQot
ICAgIGNvbnN0IEdMZW51bSB0eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8v
IERlY29yYXRlZCBuYW1lCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNv
cmF0ZWQgbmFtZQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7Ci0KLSAgICB1bnNp
Z25lZCBjaGFyICpkYXRhOwotICAgIGJvb2wgZGlydHk7Ci0KLSAgICBzdHJ1Y3QgUmVnaXN0ZXJJ
bmZvCi0gICAgewotICAgICAgICBSZWdpc3RlckluZm8oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmbG9hdDRJbmRleCA9IC0xOwotICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7Ci0gICAg
ICAgICAgICBib29sSW5kZXggPSAtMTsKLSAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAwOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNv
bnN0YW50RGVzY3JpcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaChjb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEQzRFhSU19CT09MOiAgICBib29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVySW5kZXg7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9BVDQ6ICBm
bG9hdDRJbmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEQzRFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFu
dERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGludCljb25z
dGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQpOwotICAgICAgICAgICAgcmVnaXN0ZXJDb3Vu
dCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGludCBmbG9hdDRJbmRleDsKLSAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKLSAgICAgICAg
aW50IGJvb2xJbmRleDsKLQotICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9OwotCi0g
ICAgUmVnaXN0ZXJJbmZvIHBzOwotICAgIFJlZ2lzdGVySW5mbyB2czsKLX07Ci0KLS8vIFN0cnVj
dCB1c2VkIGZvciBjb3JyZWxhdGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5
cyB0byBoYW5kbGVzCi1zdHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCi17Ci0gICAgVW5pZm9ybUxvY2F0
aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2ln
bmVkIGludCBpbmRleCk7Ci0KLSAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIHVuc2lnbmVkIGlu
dCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBpbmRleDsKLX07Ci0KLS8vIFRoaXMgaXMgdGhl
IHJlc3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQg
YmUgcGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCi1jbGFzcyBQcm9ncmFtQmluYXJ5Ci17Ci0gIHB1
YmxpYzoKLSAgICBQcm9ncmFtQmluYXJ5KCk7Ci0gICAgflByb2dyYW1CaW5hcnkoKTsKLQotICAg
IElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICpnZXRWZXJ0ZXhTaGFkZXIoKTsKLQotICAgIEdMdWludCBnZXRBdHRyaWJ1
dGVMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChp
bnQgYXR0cmlidXRlSW5kZXgpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxl
clR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUg
Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1w
bGVySW5kZXgpOwotICAgIEdMaW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlw
ZSk7Ci0KLSAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0g
ICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9v
bCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9y
bWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwot
ICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBH
TGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29u
c3Q7Ci0gICAgR0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0
RHhDb29yZExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9j
YXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9p
ZCBkaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7Ci0KLSAgICBi
b29sIGxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJp
YnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKTsKLSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1h
eENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKLQotICAgIHZvaWQgZ2V0
QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xp
bnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1
dGVNYXhMZW5ndGgoKTsKLQotICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgs
IEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpOwotICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwot
ICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKLQotICAgIHZvaWQgdmFsaWRh
dGUoSW5mb0xvZyAmaW5mb0xvZyk7Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cg
KmluZm9Mb2cpOwotICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKLQotICAgIHN0YXRpYyBz
dGQ6OnN0cmluZyBkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAg
IC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29y
YXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5n
IHVuZGVyc2NvcmUKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQ
cm9ncmFtQmluYXJ5KTsKLQotICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENv
bnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKTsKLQotICAgIGludCBwYWNrVmFyeWluZ3MoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIpOwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9M
b2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsK
LQotICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmli
dXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLQotICAgIGJvb2wgbGlua1VuaWZv
cm1zKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAq
Y29uc3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2cs
IEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBE
M0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9
ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBh
cHBseVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBi
b29sIGFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBw
bHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEQzRFhWRUNUT1I0ICp2ZWN0b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFu
ICp2KTsKLQotICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7Ci0KLSAgICBJRGlyZWN0M0RQ
aXhlbFNoYWRlcjkgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVy
OSAqbVZlcnRleEV4ZWN1dGFibGU7Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmlu
ZyBsaW5raW5nLgotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAg
ICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBBdHRyaWJ1dGUg
bUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJ
bmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0g
ICAgICAgIGJvb2wgYWN0aXZlOwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0g
ICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1T
YW1wbGVyc1BTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVy
c1ZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNl
ZFZlcnRleFNhbXBsZXJSYW5nZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsK
LQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBV
bmlmb3JtQXJyYXkgbVVuaWZvcm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxv
Y2F0aW9uPiBVbmlmb3JtSW5kZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0K
LSAgICBHTGludCBtRHhEZXB0aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2Nh
dGlvbjsKLSAgICBHTGludCBtRHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhl
bFNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKLQotICAgIGJvb2wgbVZhbGlkYXRlZDsKLX07Ci19
Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTBlZGRhNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnkuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UXVl
cnkgY2xhc3MKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLVF1ZXJ5OjpRdWVyeShHTHVpbnQg
aWQsIEdMZW51bSB0eXBlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQoteyAKLSAgICBtUXVlcnkgPSBO
VUxMOwotICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLSAgICBtUmVzdWx0ID0gR0xfRkFMU0U7Ci0g
ICAgbVR5cGUgPSB0eXBlOwotfQotCi1RdWVyeTo6flF1ZXJ5KCkKLXsKLSAgICBpZiAobVF1ZXJ5
ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1
ZXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0KLXZvaWQgUXVlcnk6OmJlZ2luKCkKLXsKLSAgICBpZiAo
bVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBpZiAoRkFJTEVEKGdldERldmljZSgpLT5D
cmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmbVF1ZXJ5KSkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJ
Tik7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLX0KLQotdm9pZCBRdWVyeTo6ZW5k
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgCi0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1SZXN1bHQgPSBHTF9GQUxT
RTsKLX0KLQotR0x1aW50IFF1ZXJ5OjpnZXRSZXN1bHQoKQotewotICAgIGlmIChtUXVlcnkgIT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghdGVzdFF1ZXJ5KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFNsZWVwKDApOwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVjayBmb3Ig
ZGV2aWNlIGxvc3MKLSAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJldHVybiBT
X0ZBTFNFIGV2ZW4gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAvLyBpbnN0ZWFk
IG9mIEQzREVSUl9ERVZJQ0VMT1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAgICAgIGlmIChn
bDo6Z2V0RGlzcGxheSgpLT50ZXN0RGV2aWNlTG9zdCgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGdsOjpnZXREaXNwbGF5KCktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gKEdMdWludCltUmVzdWx0OwotfQotCi1H
TGJvb2xlYW4gUXVlcnk6OmlzUmVzdWx0QXZhaWxhYmxlKCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9
IE5VTEwpCi0gICAgewotICAgICAgICB0ZXN0UXVlcnkoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG1TdGF0dXM7Ci19Ci0KLUdMZW51bSBRdWVyeTo6Z2V0VHlwZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1UeXBlOwotfQotCi1HTGJvb2xlYW4gUXVlcnk6OnRlc3RRdWVyeSgpCi17Ci0gICAg
aWYgKG1RdWVyeSAhPSBOVUxMICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKLSAgICB7Ci0gICAgICAg
IERXT1JEIG51bVBpeGVscyA9IDA7Ci0KLSAgICAgICAgSFJFU1VMVCBocmVzID0gbVF1ZXJ5LT5H
ZXREYXRhKCZudW1QaXhlbHMsIHNpemVvZihEV09SRCksIEQzREdFVERBVEFfRkxVU0gpOwotICAg
ICAgICBpZiAoaHJlcyA9PSBTX09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0g
R0xfVFJVRTsKLQotICAgICAgICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAg
ICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChjaGVja0RldmljZUxvc3QoaHJlcykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIG1TdGF0dXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1RSVUU7
IC8vIHByZXZlbnQgYmxvY2tpbmcgd2hlbiBxdWVyeSBpcyBudWxsCi19Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc5MzU3YTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFF1ZXJ5Lmg6IERlZmluZXMgdGhlIGdsOjpRdWVyeSBjbGFzcwot
Ci0jaWZuZGVmIExJQkdMRVNWMl9RVUVSWV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUVVFUllfSF8K
LQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8
ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21t
b24vUmVmQ291bnRPYmplY3QuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIFF1ZXJ5IDog
cHVibGljIFJlZkNvdW50T2JqZWN0Ci17Ci0gIHB1YmxpYzoKLSAgICBRdWVyeShHTHVpbnQgaWQs
IEdMZW51bSB0eXBlKTsKLSAgICB2aXJ0dWFsIH5RdWVyeSgpOwotCi0gICAgdm9pZCBiZWdpbigp
OwotICAgIHZvaWQgZW5kKCk7Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9vbGVh
biBpc1Jlc3VsdEF2YWlsYWJsZSgpOwotCi0gICAgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLQot
ICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeSk7Ci0KLSAgICBH
TGJvb2xlYW4gdGVzdFF1ZXJ5KCk7Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIG1RdWVyeTsKLSAg
ICBHTGVudW0gbVR5cGU7Ci0gICAgR0xib29sZWFuIG1TdGF0dXM7Ci0gICAgR0xpbnQgbVJlc3Vs
dDsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1FVRVJZX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUyN2QzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVj
dG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qgc3luY2VkIGZyb20gdGhlIEFOR0xFIHByb2plY3QgYmVj
YXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJLaXQgbmVlZHMgdGhlbSB5ZXQuClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YjkxMWU4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUmVuZGVyYnVmZmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBSZW5kZXJidWZmZXIuY3BwOiB0aGUgZ2w6OlJlbmRlcmJ1ZmZl
ciBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8gQ29sb3JidWZmZXIsIERlcHRoYnVm
ZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgotLy8gb2Jq
ZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biA0LjQuMyBwYWdlIDEwOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIK
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1
cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAot
ewotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Om1DdXJyZW50U2VyaWFsID0gMTsK
LQotUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpSZW5kZXJidWZmZXJJbnRlcmZhY2UoKQotewotfQot
Ci0vLyBUaGUgZGVmYXVsdCBjYXNlIGZvciBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIFJlbmRlcmJ1
ZmZlckludGVyZmFjZSBpcyBub3QgdG8KLS8vIG5lZWQgdG8gZG8gYW55dGhpbmcgdXBvbiB0aGUg
cmVmZXJlbmNlIGNvdW50IHRvIHRoZSBwYXJlbnQgUmVuZGVyYnVmZmVyIGluY3JlbWVudGluZwot
Ly8gb3IgZGVjcmVtZW50aW5nLiAKLXZvaWQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjphZGRQcm94
eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotfQotCi12b2lkIFJlbmRlcmJ1ZmZl
ckludGVyZmFjZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci19
Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBkeDJlczo6R2V0UmVkU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUdMdWlu
dCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGR4MmVzOjpHZXRHcmVlblNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVu
ZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4
MmVzOjpHZXRCbHVlU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZm
ZXJJbnRlcmZhY2U6OmdldEFscGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4MmVzOjpH
ZXRBbHBoYVNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50
ZXJmYWNlOjpnZXREZXB0aFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0RGVw
dGhTaXplKGdldEQzREZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFj
ZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNp
bFNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi0vLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQg
SW1wbGVtZW50YXRpb24gLy8vLy8vLy8KLQotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJn
ZXQodGFyZ2V0KQotewotICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwotfQotCi1SZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6On5SZW5kZXJidWZmZXJUZXh0dXJlMkQoKQotewotICAgIG1UZXh0dXJl
MkQuc2V0KE5VTEwpOwotfQotCi0vLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93
biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCi0vLyBSZW5kZXJidWZmZXJzIGFj
dGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVu
Y2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Ci19
Ci0KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOwot
fQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1UZXh0dXJl
MkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0
ZW5jaWwoKQotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdl
dCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOwotfQotCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRl
eHR1cmUyRC0+Z2V0SGVpZ2h0KDApOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdl
dEludGVybmFsRm9ybWF0KDApOwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREM0RG
b3JtYXQoMCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwotfQotCi0vLy8vLyBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLwotCi1SZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCi17Ci0gICAgbVRleHR1cmVD
dWJlTWFwLnNldCh0ZXh0dXJlKTsKLX0KLQotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5S
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFwLnNldChO
VUxMKTsKLX0KLQotLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJl
bmNlIGNvdW50IGZvciByZWZlcmVuY2VzIHZpYQotLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMg
cHJveGllcy4gSGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgotdm9p
ZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZUN1YmVNYXAtPmFkZFByb3h5UmVmKHByb3h5KTsK
LX0KLQotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFwLT5yZWxlYXNlUHJv
eHkocHJveHkpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZh
Y2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAg
ICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7Ci19Ci0K
LS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBOVUxMOwot
fQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5n
ZXRIZWlnaHQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotR0xlbnVt
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVy
ZUN1YmVNYXAtPmdldEQzREZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAp
OwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZUN1
YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKLX0KLQotLy8vLy8vIFJlbmRl
cmJ1ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KLQotUmVuZGVyYnVmZmVyOjpSZW5kZXJidWZm
ZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNlKSA6IFJlZkNvdW50
T2JqZWN0KGlkKQotewotICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsKLSAgICBtSW5zdGFu
Y2UgPSBpbnN0YW5jZTsKLX0KLQotUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkKLXsKLSAg
ICBkZWxldGUgbUluc3RhbmNlOwotfQotCi0vLyBUaGUgUmVuZGVyYnVmZmVySW50ZXJmYWNlIGNv
bnRhaW5lZCBpbiB0aGlzIFJlbmRlcmJ1ZmZlciBtYXkgbmVlZCB0byBtYWludGFpbgotLy8gaXRz
IG93biByZWZlcmVuY2UgY291bnQsIHNvIHdlIHBhc3MgaXQgb24gaGVyZS4KLXZvaWQgUmVuZGVy
YnVmZmVyOjphZGRSZWYoKSBjb25zdAotewotICAgIG1JbnN0YW5jZS0+YWRkUHJveHlSZWYodGhp
cyk7Ci0KLSAgICBSZWZDb3VudE9iamVjdDo6YWRkUmVmKCk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVm
ZmVyOjpyZWxlYXNlKCkgY29uc3QKLXsKLSAgICBtSW5zdGFuY2UtPnJlbGVhc2VQcm94eSh0aGlz
KTsKLQotICAgIFJlZkNvdW50T2JqZWN0OjpyZWxlYXNlKCk7Ci19Ci0KLS8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFy
Z2V0KCkKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLX0KLQot
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3Rl
bmNpbCgpOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25zdAotewot
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVm
ZmVyOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEhlaWdo
dCgpOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLX0KLQotRDNE
Rk9STUFUIFJlbmRlcmJ1ZmZlcjo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUluc3RhbmNlLT5nZXREM0RGb3JtYXQoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0
UmVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVkU2l6ZSgpOwot
fQotCi1HTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRHcmVlblNpemUoKSBjb25zdAotewotICAgIHJl
dHVybiBtSW5zdGFuY2UtPmdldEdyZWVuU2l6ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVy
OjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0Qmx1ZVNp
emUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRBbHBoYVNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRl
cmJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5n
ZXREZXB0aFNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFN0ZW5jaWxTaXplKCk7Ci19Ci0K
LUdMc2l6ZWkgUmVuZGVyYnVmZmVyOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUluc3RhbmNlLT5nZXRTYW1wbGVzKCk7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXI6
OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2VyaWFsKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyYnVmZmVyOjpzZXRTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
Km5ld1N0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKG5ld1N0b3JhZ2UgIT0gTlVMTCk7Ci0KLSAgICBk
ZWxldGUgbUluc3RhbmNlOwotICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7Ci19Ci0KLVJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJpYWwoaXNzdWVTZXJp
YWwoKSkKLXsKLSAgICBtV2lkdGggPSAwOwotICAgIG1IZWlnaHQgPSAwOwotICAgIG1JbnRlcm5h
bEZvcm1hdCA9IEdMX1JHQkE0OwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfQThSOEc4Qjg7Ci0g
ICAgbVNhbXBsZXMgPSAwOwotfQotCi1SZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVy
U3RvcmFnZSgpCi17Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0
dXJuIE5VTEw7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNh
bGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFj
ZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgcmV0dXJu
IE5VTEw7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25z
dAotewotICAgIHJldHVybiBtV2lkdGg7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0KLQotR0xlbnVt
IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUludGVybmFsRm9ybWF0OwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzREZvcm1hdDsKLX0KLQot
R0xzaXplaSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVNhbXBsZXM7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpn
ZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBp
bnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3Vy
cmVudFNlcmlhbCsrOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVDdWJlU2VyaWFscygpCi17Ci0gICAgdW5zaWduZWQgaW50IGZpcnN0U2VyaWFsID0gbUN1cnJl
bnRTZXJpYWw7Ci0gICAgbUN1cnJlbnRTZXJpYWwgKz0gNjsKLSAgICByZXR1cm4gZmlyc3RTZXJp
YWw7Ci19Ci0KLUNvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0KSA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotewotICAgIGlmIChyZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotCi0gICAg
ICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgbVdpZHRoID0gZGVzY3JpcHRpb24uV2lk
dGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlwdGlvbi5IZWlnaHQ7Ci0gICAgICAgIG1JbnRl
cm5hbEZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChkZXNjcmlwdGlvbi5G
b3JtYXQpOwotICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwotICAgICAg
ICBtU2FtcGxlcyA9IGR4MmVzOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlw
dGlvbi5NdWx0aVNhbXBsZVR5cGUpOwotICAgIH0KLX0KLQotQ29sb3JidWZmZXI6OkNvbG9yYnVm
ZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVz
KSA6IG1SZW5kZXJUYXJnZXQoTlVMTCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKLQotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBlczJkeDo6
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBzdXBwb3J0ZWRTYW1w
bGVzID0gZ2V0Q29udGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRG
b3JtYXQsIHNhbXBsZXMpOwotCi0gICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPT0gLTEpCi0gICAg
ewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0
LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBw
b3J0ZWRTYW1wbGVzKSwgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKLQotICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSB3aWR0aDsKLSAgICBtSGVp
Z2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKLSAgICBtRDNERm9y
bWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsK
LX0KLQotQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotfQot
Ci0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZl
cjo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0g
ICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtUmVu
ZGVyVGFyZ2V0OwotfQotCi1EZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKSA6IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVu
Y2lsKQotewotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5j
aWwtPkFkZFJlZigpOwotCi0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAg
ICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgbVdp
ZHRoID0gZGVzY3JpcHRpb24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlwdGlvbi5I
ZWlnaHQ7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0RGVwdGhTdGVu
Y2lsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7Ci0gICAgICAgIG1TYW1wbGVzID0gZHgyZXM6
OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlw
ZSk7IAotICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwotICAgIH0KLX0K
LQotRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICAKLSAgICBp
bnQgc3VwcG9ydGVkU2FtcGxlcyA9IGdldENvbnRleHQoKS0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNh
bXBsZXMoRDNERk1UX0QyNFM4LCBzYW1wbGVzKTsKLQotICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVz
ID09IC0xKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKLSAg
ICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxT
dXJmYWNlKHdpZHRoLCBoZWlnaHQsIEQzREZNVF9EMjRTOCwgZXMyZHg6OkdldE11bHRpc2FtcGxl
VHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1EZXB0aFN0
ZW5jaWwsIDApOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIG1XaWR0
aCA9IHdpZHRoOwotICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgbUQzREZvcm1hdCA9IEQzREZNVF9EMjRTODsK
LSAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLURlcHRoU3RlbmNpbGJ1ZmZl
cjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAg
ewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6
OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAg
ICAgICBtRGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbURlcHRo
U3RlbmNpbDsKLX0KLQotRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5
ICpkZXB0aFN0ZW5jaWwpIDogRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCkKLXsKLSAg
ICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gR0xf
REVQVEhfQ09NUE9ORU5UMTY7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFy
ZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlk
IHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotICAg
IH0KLX0KLQotRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwg
R0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1w
bGVzKQotewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFs
Rm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBw
YXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUg
b2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZQotICAgIH0KLX0KLQotRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCi17Ci19Ci0K
LVN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3Rl
bmNpbCkgOiBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQotewotICAgIGlmIChkZXB0
aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9TVEVOQ0lMX0lO
REVYODsgICAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRo
ZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZv
cm1hdHMgZm9yIHVzZSBpbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCi0gICAgfQotfQotCi1TdGVuY2lsYnVm
ZmVyOjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVz
KSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQotewotICAgIGlm
IChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfU1RF
TkNJTF9JTkRFWDg7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVy
aWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1
ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotICAgIH0KLX0KLQotU3Rl
bmNpbGJ1ZmZlcjo6flN0ZW5jaWxidWZmZXIoKQotewotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkNWRkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlcmJ1ZmZlci5oOiBE
ZWZpbmVzIHRoZSB3cmFwcGVyIGNsYXNzIGdsOjpSZW5kZXJidWZmZXIsIGFzIHdlbGwgYXMgdGhl
Ci0vLyBjbGFzcyBoaWVyYXJjaHkgdXNlZCB0byBzdG9yZSBpdHMgY29udGVudHM6IFJlbmRlcmJ1
ZmZlclN0b3JhZ2UsIENvbG9yYnVmZmVyLAotLy8gRGVwdGhTdGVuY2lsYnVmZmVyLCBEZXB0aGJ1
ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIKLS8vIG9i
amVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gNC40LjMgcGFnZSAxMDguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwot
I2RlZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAot
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0K
LW5hbWVzcGFjZSBnbAotewotY2xhc3MgVGV4dHVyZTJEOwotY2xhc3MgVGV4dHVyZUN1YmVNYXA7
Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBDb2xvcmJ1ZmZlcjsKLWNsYXNzIERlcHRoU3Rl
bmNpbGJ1ZmZlcjsKLQotY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoK
LSAgICBSZW5kZXJidWZmZXJJbnRlcmZhY2UoKTsKLQotICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZl
ckludGVyZmFjZSgpIHt9OwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHkoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRSZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0
RGVwdGhTdGVuY2lsKCkgPSAwOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRTYW1wbGVzKCkgY29uc3QgPSAwOwotCi0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25z
dDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVT
aXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWlu
dCBnZXREZXB0aFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0ID0gMDsKLQot
ICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJJbnRl
cmZhY2UpOwotfTsKLQotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRl
cmJ1ZmZlckludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
KFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5k
ZXJidWZmZXJUZXh0dXJlMkQoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgdmlydHVhbCBH
THNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBH
THNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dFNlcmlhbCgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7Ci0KLSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVy
ZTJEPiBtVGV4dHVyZTJEOwotICAgIEdMZW51bSBtVGFyZ2V0OwotfTsKLQotY2xhc3MgUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCi17Ci0g
IHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAq
dGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5
KTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0V2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0U2FtcGxlcygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFs
KCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXApOwotCi0gICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmVD
dWJlTWFwPiBtVGV4dHVyZUN1YmVNYXA7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7Ci19OwotCi0vLyBB
IGNsYXNzIGRlcml2ZWQgZnJvbSBSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNyZWF0ZWQgd2hlbmV2
ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCi0vLyBpcyBjYWxsZWQuIFRoZSBzcGVjaWZpYyBjb25j
cmV0ZSB0eXBlIGRlcGVuZHMgb24gd2hldGhlciB0aGUgaW50ZXJuYWwgZm9ybWF0IGlzCi0vLyBj
b2xvdXIgZGVwdGgsIHN0ZW5jaWwgb3IgcGFja2VkIGRlcHRoL3N0ZW5jaWwuCi1jbGFzcyBSZW5k
ZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQotewotICBwdWJs
aWM6Ci0gICAgUmVuZGVyYnVmZmVyU3RvcmFnZSgpOwotCi0gICAgdmlydHVhbCB+UmVuZGVyYnVm
ZmVyU3RvcmFnZSgpID0gMDsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJl
bmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3Rl
bmNpbCgpOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldElu
dGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gICAgc3RhdGljIHVu
c2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVD
dWJlU2VyaWFscygpOwotCi0gIHByb3RlY3RlZDoKLSAgICBHTHNpemVpIG1XaWR0aDsKLSAgICBH
THNpemVpIG1IZWlnaHQ7Ci0gICAgR0xlbnVtIG1JbnRlcm5hbEZvcm1hdDsKLSAgICBEM0RGT1JN
QVQgbUQzREZvcm1hdDsKLSAgICBHTHNpemVpIG1TYW1wbGVzOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOwotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50IG1TZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJy
ZW50U2VyaWFsOwotfTsKLQotLy8gUmVuZGVyYnVmZmVyIGltcGxlbWVudHMgdGhlIEdMIHJlbmRl
cmJ1ZmZlciBvYmplY3QuCi0vLyBJdCdzIG9ubHkgYSBwcm94eSBmb3IgYSBSZW5kZXJidWZmZXJJ
bnRlcmZhY2UgaW5zdGFuY2U7IHRoZSBpbnRlcm5hbCBvYmplY3QKLS8vIGNhbiBjaGFuZ2Ugd2hl
bmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNhbGxlZC4KLWNsYXNzIFJlbmRlcmJ1ZmZl
ciA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVy
KEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50ZXJmYWNlICpzdG9yYWdlKTsKLQotICAgIHZpcnR1
YWwgflJlbmRlcmJ1ZmZlcigpOwotCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGZyb20gUmVmQ291
bnRPYmplY3QgYXJlIG92ZXJsb2FkZWQgaGVyZSBiZWNhdXNlCi0gICAgLy8gVGV4dHVyZXMgbmVl
ZCB0byBtYWludGFpbiB0aGVpciBvd24gY291bnQgb2YgcmVmZXJlbmNlcyB0byB0aGVtIHZpYQot
ICAgIC8vIFJlbmRlcmJ1ZmZlcnMvUmVuZGVyYnVmZmVyVGV4dHVyZXMuIFRoZXNlIGZ1bmN0aW9u
cyBpbnZva2UgdGhvc2UKLSAgICAvLyByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rpb25zIG9uIHRo
ZSBSZW5kZXJidWZmZXJJbnRlcmZhY2UuCi0gICAgdm9pZCBhZGRSZWYoKSBjb25zdDsKLSAgICB2
b2lkIHJlbGVhc2UoKSBjb25zdDsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJU
YXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAg
ICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25z
dDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICBEM0RGT1JNQVQg
Z2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25zdDsKLSAg
ICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVTaXplKCkg
Y29uc3Q7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRE
ZXB0aFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25zdDsKLSAg
ICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRTZXJp
YWwoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpu
ZXdTdG9yYWdlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXIpOwotCi0gICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICptSW5zdGFuY2U7Ci19
OwotCi1jbGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdlCi17Ci0g
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVu
ZGVyVGFyZ2V0KTsKLSAgICBDb2xvcmJ1ZmZlcihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKLQotICAgIHZpcnR1YWwgfkNvbG9y
YnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJn
ZXQoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb2xvcmJ1
ZmZlcik7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKLX07Ci0KLWNs
YXNzIERlcHRoU3RlbmNpbGJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdlCi17Ci0g
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBEZXB0aFN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlcHRoU3RlbmNpbCk7Ci0gICAgRGVwdGhTdGVuY2lsYnVmZmVyKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgfkRlcHRoU3RlbmNpbGJ1
ZmZlcigpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2ls
KCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2ls
OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoU3RlbmNp
bGJ1ZmZlcik7Ci19OwotCi1jbGFzcyBEZXB0aGJ1ZmZlciA6IHB1YmxpYyBEZXB0aFN0ZW5jaWxi
dWZmZXIKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IERlcHRoYnVmZmVyKElEaXJlY3QzRFN1
cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwotICAgIERlcHRoYnVmZmVyKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+RGVwdGhidWZm
ZXIoKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXB0aGJ1
ZmZlcik7Ci19OwotCi1jbGFzcyBTdGVuY2lsYnVmZmVyIDogcHVibGljIERlcHRoU3RlbmNpbGJ1
ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RT
dXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKLSAgICBTdGVuY2lsYnVmZmVyKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+U3RlbmNp
bGJ1ZmZlcigpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN0
ZW5jaWxidWZmZXIpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFTkRFUkJVRkZF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9S
ZXNvdXJjZU1hbmFnZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTI2
MzUyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UmVzb3VyY2VNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBSZXNvdXJjZU1hbmFnZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBn
bDo6UmVzb3VyY2VNYW5hZ2VyIGNsYXNzLCB3aGljaCB0cmFja3MgYW5kIAotLy8gcmV0cmlldmVz
IG9iamVjdHMgd2hpY2ggbWF5IGJlIHNoYXJlZCBieSBtdWx0aXBsZSBDb250ZXh0cy4KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1SZXNvdXJj
ZU1hbmFnZXI6OlJlc291cmNlTWFuYWdlcigpCi17Ci0gICAgbVJlZkNvdW50ID0gMTsKLX0KLQot
UmVzb3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKCkKLXsKLSAgICB3aGlsZSAoIW1CdWZm
ZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVyTWFwLmJl
Z2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVtcHR5KCkp
Ci0gICAgewotICAgICAgICBkZWxldGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCktPmZpcnN0
KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZVNoYWRlcihtU2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAg
ICB3aGlsZSAoIW1SZW5kZXJidWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihtUmVuZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0K
LSAgICB3aGlsZSAoIW1UZXh0dXJlTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVU
ZXh0dXJlKG1UZXh0dXJlTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
b3VyY2VNYW5hZ2VyOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi12b2lkIFJl
c291cmNlTWFuYWdlcjo6cmVsZWFzZSgpCi17Ci0gICAgaWYgKC0tbVJlZkNvdW50ID09IDApCi0g
ICAgewotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51
c2VkIGJ1ZmZlciBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVCdWZmZXIoKQot
ewotICAgIEdMdWludCBoYW5kbGUgPSBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7
Ci0KLSAgICBtQnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsK
LX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgc2hhZGVyL3Byb2dyYW0gbmFtZQotR0x1aW50IFJl
c291cmNlTWFuYWdlcjo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewotICAgIEdMdWludCBo
YW5kbGUgPSBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAg
aWYgKHR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIG1TaGFkZXJNYXBb
aGFuZGxlXSA9IG5ldyBWZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAodHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBtU2hhZGVy
TWFwW2hhbmRsZV0gPSBuZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0g
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0
dXJucyBhbiB1bnVzZWQgcHJvZ3JhbS9zaGFkZXIgbmFtZQotR0x1aW50IFJlc291cmNlTWFuYWdl
cjo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1Qcm9ncmFtU2hhZGVy
SGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtUHJvZ3JhbU1hcFtoYW5kbGVdID0g
bmV3IFByb2dyYW0odGhpcywgaGFuZGxlKTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8v
IFJldHVybnMgYW4gdW51c2VkIHRleHR1cmUgbmFtZQotR0x1aW50IFJlc291cmNlTWFuYWdlcjo6
Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1UZXh0dXJlSGFuZGxlQWxs
b2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVMTDsKLQot
ICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZl
ciBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewot
ICAgIEdMdWludCBoYW5kbGUgPSBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRl
KCk7Ci0KLSAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJu
IGhhbmRsZTsKLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQg
YnVmZmVyKQotewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyT2JqZWN0ID0gbUJ1ZmZl
ck1hcC5maW5kKGJ1ZmZlcik7Ci0KLSAgICBpZiAoYnVmZmVyT2JqZWN0ICE9IG1CdWZmZXJNYXAu
ZW5kKCkpCi0gICAgewotICAgICAgICBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoYnVm
ZmVyT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlmIChidWZmZXJPYmplY3QtPnNlY29uZCkgYnVm
ZmVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlck1hcC5lcmFzZShi
dWZmZXJPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVNo
YWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyT2Jq
ZWN0ID0gbVNoYWRlck1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAoc2hhZGVyT2JqZWN0ICE9
IG1TaGFkZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyT2JqZWN0LT5zZWNv
bmQtPmdldFJlZkNvdW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbVByb2dyYW1T
aGFkZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShzaGFkZXJPYmplY3QtPmZpcnN0KTsKLSAgICAg
ICAgICAgIGRlbGV0ZSBzaGFkZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1TaGFkZXJN
YXAuZXJhc2Uoc2hhZGVyT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVByb2dy
YW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9i
amVjdCA9IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3JhbU9iamVj
dCAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFtT2JqZWN0
LT5zZWNvbmQtPmdldFJlZkNvdW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbVBy
b2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShwcm9ncmFtT2JqZWN0LT5maXJzdCk7
Ci0gICAgICAgICAgICBkZWxldGUgcHJvZ3JhbU9iamVjdC0+c2Vjb25kOwotICAgICAgICAgICAg
bVByb2dyYW1NYXAuZXJhc2UocHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7IAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5mbGFnRm9y
RGVsZXRpb24oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6
OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgVGV4dHVyZU1hcDo6aXRlcmF0
b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7Ci0KLSAgICBpZiAo
dGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UodGV4dHVyZU9iamVjdC0+Zmlyc3QpOwotICAgICAg
ICBpZiAodGV4dHVyZU9iamVjdC0+c2Vjb25kKSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQtPnJlbGVh
c2UoKTsKLSAgICAgICAgbVRleHR1cmVNYXAuZXJhc2UodGV4dHVyZU9iamVjdCk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5k
ZXJidWZmZXIpCi17Ci0gICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJidWZmZXJP
YmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsKLQotICAgIGlmIChy
ZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAg
ICAgIG1SZW5kZXJidWZmZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShyZW5kZXJidWZmZXJPYmpl
Y3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdC0+c2Vjb25kKSByZW5k
ZXJidWZmZXJPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVyYnVmZmVy
TWFwLmVyYXNlKHJlbmRlcmJ1ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi1CdWZmZXIgKlJlc291
cmNlTWFuYWdlcjo6Z2V0QnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgQnVmZmVy
TWFwOjppdGVyYXRvciBidWZmZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlm
IChidWZmZXIgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gYnVmZmVyLT5zZWNvbmQ7
Ci0gICAgfQotfQotCi1TaGFkZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2hhZGVyKHVuc2lnbmVk
IGludCBoYW5kbGUpCi17Ci0gICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXIgPSBtU2hhZGVy
TWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChzaGFkZXIgPT0gbVNoYWRlck1hcC5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICByZXR1cm4gc2hhZGVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1UZXh0dXJlICpSZXNvdXJj
ZU1hbmFnZXI6OmdldFRleHR1cmUodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBpZiAoaGFu
ZGxlID09IDApIHJldHVybiBOVUxMOwotCi0gICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVy
ZSA9IG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmICh0ZXh0dXJlID09IG1UZXh0
dXJlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1Q
cm9ncmFtICpSZXNvdXJjZU1hbmFnZXI6OmdldFByb2dyYW0odW5zaWduZWQgaW50IGhhbmRsZSkK
LXsKLSAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtID0gbVByb2dyYW1NYXAuZmluZCho
YW5kbGUpOwotCi0gICAgaWYgKHByb2dyYW0gPT0gbVByb2dyYW1NYXAuZW5kKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHByb2dyYW0tPnNlY29uZDsKLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqUmVzb3VyY2VN
YW5hZ2VyOjpnZXRSZW5kZXJidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBSZW5k
ZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlciA9IG1SZW5kZXJidWZmZXJNYXAuZmlu
ZChoYW5kbGUpOwotCi0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtUmVuZGVyYnVmZmVyTWFwLmVu
ZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHJldHVybiByZW5kZXJidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0KLXZvaWQg
UmVzb3VyY2VNYW5hZ2VyOjpzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVm
ZmVyICpidWZmZXIpCi17Ci0gICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gYnVmZmVyOwot
fQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVuc2lnbmVk
IGludCBidWZmZXIpCi17Ci0gICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVy
KSkKLSAgICB7Ci0gICAgICAgIEJ1ZmZlciAqYnVmZmVyT2JqZWN0ID0gbmV3IEJ1ZmZlcihidWZm
ZXIpOwotICAgICAgICBtQnVmZmVyTWFwW2J1ZmZlcl0gPSBidWZmZXJPYmplY3Q7Ci0gICAgICAg
IGJ1ZmZlck9iamVjdC0+YWRkUmVmKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdl
cjo6Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQgdGV4dHVyZSwgVGV4dHVyZVR5cGUgdHlw
ZSkKLXsKLSAgICBpZiAoIWdldFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAwKQotICAg
IHsKLSAgICAgICAgVGV4dHVyZSAqdGV4dHVyZU9iamVjdDsKLQotICAgICAgICBpZiAodHlwZSA9
PSBURVhUVVJFXzJEKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3
IFRleHR1cmUyRCh0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09
IFRFWFRVUkVfQ1VCRSkKLSAgICAgICAgewotICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5l
dyBUZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9IHRleHR1cmVPYmplY3Q7
Ci0gICAgICAgIHRleHR1cmVPYmplY3QtPmFkZFJlZigpOwotICAgIH0KLX0KLQotdm9pZCBSZXNv
dXJjZU1hbmFnZXI6OmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVuZGVyYnVm
ZmVyKQotewotICAgIGlmIChyZW5kZXJidWZmZXIgIT0gMCAmJiAhZ2V0UmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9i
amVjdCA9IG5ldyBSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLCBuZXcgQ29sb3JidWZmZXIoMCwg
MCwgR0xfUkdCQTQsIDApKTsKLSAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcFtyZW5kZXJidWZmZXJd
ID0gcmVuZGVyYnVmZmVyT2JqZWN0OwotICAgICAgICByZW5kZXJidWZmZXJPYmplY3QtPmFkZFJl
ZigpOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDUxODVmYzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZXNvdXJjZU1hbmFnZXIuaCA6IERlZmluZXMg
dGhlIFJlc291cmNlTWFuYWdlciBjbGFzcywgd2hpY2ggdHJhY2tzIG9iamVjdHMKLS8vIHNoYXJl
ZCBieSBtdWx0aXBsZSBHTCBjb250ZXh0cy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVTT1VSQ0VN
QU5BR0VSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KLQotI2RlZmlu
ZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlIDxoYXNoX21h
cD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L0hhbmRsZUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJ1ZmZlcjsKLWNs
YXNzIFNoYWRlcjsKLWNsYXNzIFByb2dyYW07Ci1jbGFzcyBUZXh0dXJlOwotY2xhc3MgUmVuZGVy
YnVmZmVyOwotCi1lbnVtIFRleHR1cmVUeXBlCi17Ci0gICAgVEVYVFVSRV8yRCwKLSAgICBURVhU
VVJFX0NVQkUsCi0KLSAgICBURVhUVVJFX1RZUEVfQ09VTlQsCi0gICAgVEVYVFVSRV9VTktOT1dO
Ci19OwotCi1lbnVtIFNhbXBsZXJUeXBlCi17Ci0gICAgU0FNUExFUl9QSVhFTCwKLSAgICBTQU1Q
TEVSX1ZFUlRFWAotfTsKLQotY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCi17Ci0gIHB1YmxpYzoKLSAg
ICBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB+UmVzb3VyY2VNYW5hZ2VyKCk7Ci0KLSAgICB2b2lk
IGFkZFJlZigpOwotICAgIHZvaWQgcmVsZWFzZSgpOwotCi0gICAgR0x1aW50IGNyZWF0ZUJ1ZmZl
cigpOwotICAgIEdMdWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIEdMdWludCBj
cmVhdGVQcm9ncmFtKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQg
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKLSAgICB2b2lkIGRl
bGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVp
bnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1
ZmZlcik7Ci0KLSAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBTaGFk
ZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdM
dWludCBoYW5kbGUpOwotICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7Ci0g
ICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgCi0g
ICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpyZW5k
ZXJidWZmZXIpOwotCi0gICAgdm9pZCBjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50
IGJ1ZmZlcik7Ci0gICAgdm9pZCBjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJl
LCBUZXh0dXJlVHlwZSB0eXBlKTsKLSAgICB2b2lkIGNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlv
bihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZXNvdXJjZU1hbmFnZXIpOwotCi0gICAgc3RkOjpzaXplX3QgbVJlZkNvdW50
OwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgQnVmZmVyKj4gQnVmZmVy
TWFwOwotICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtQnVm
ZmVySGFuZGxlQWxsb2NhdG9yOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWlu
dCwgU2hhZGVyKj4gU2hhZGVyTWFwOwotICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOwotCi0gICAg
dHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1NYXA7Ci0g
ICAgUHJvZ3JhbU1hcCBtUHJvZ3JhbU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbVByb2dyYW1T
aGFkZXJIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1
aW50LCBUZXh0dXJlKj4gVGV4dHVyZU1hcDsKLSAgICBUZXh0dXJlTWFwIG1UZXh0dXJlTWFwOwot
ICAgIEhhbmRsZUFsbG9jYXRvciBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHR5cGVk
ZWYgc3RkZXh0OjpoYXNoX21hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1h
cDsKLSAgICBSZW5kZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKLSAgICBIYW5kbGVBbGxv
Y2F0b3IgbVJlbmRlcmJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTdmZDNkNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1NoYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gU2hhZGVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlNoYWRlciBj
bGFzcyBhbmQgaXRzICBkZXJpdmVkIGNsYXNzZXMKLS8vIFZlcnRleFNoYWRlciBhbmQgRnJhZ21l
bnRTaGFkZXIuIEltcGxlbWVudHMgR0wgc2hhZGVyIG9iamVjdHMgYW5kIHJlbGF0ZWQKLS8vIGZ1
bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAyNCBhbmQg
c2VjdGlvbiAzLjggcGFnZSA4NC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLQot
I2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVybGFuZy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgotCi1uYW1lc3BhY2UgZ2wKLXsKLXZvaWQgKlNoYWRlcjo6bUZyYWdtZW50Q29tcGlsZXIgPSBO
VUxMOwotdm9pZCAqU2hhZGVyOjptVmVydGV4Q29tcGlsZXIgPSBOVUxMOwotCi1TaGFkZXI6OlNo
YWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbUhhbmRsZSho
YW5kbGUpLCBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpCi17Ci0gICAgbVNvdXJjZSA9IE5VTEw7
Ci0gICAgbUhsc2wgPSBOVUxMOwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQotICAgIHVuY29tcGls
ZSgpOwotICAgIGluaXRpYWxpemVDb21waWxlcigpOwotCi0gICAgbVJlZkNvdW50ID0gMDsKLSAg
ICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci19Ci0KLVNoYWRlcjo6flNoYWRlcigpCi17Ci0gICAg
ZGVsZXRlW10gbVNvdXJjZTsKLSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBkZWxldGVbXSBtSW5m
b0xvZzsKLX0KLQotR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUhhbmRsZTsKLX0KLQotdm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNvdW50LCBj
b25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQotewotICAgIGRlbGV0ZVtd
IG1Tb3VyY2U7Ci0gICAgaW50IHRvdGFsTGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ld
ID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVu
Z3RoICs9IChpbnQpc3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBt
U291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAxXTsKLSAgICBjaGFyICpjb2RlID0gbVNv
dXJjZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGludCBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0g
Pj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gbGVuZ3RoW2ldOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVu
Z3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cm5j
cHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgpOwotICAgICAgICBjb2RlICs9IHN0cmlu
Z0xlbmd0aDsKLSAgICB9Ci0KLSAgICBtU291cmNlW3RvdGFsTGVuZ3RoXSA9ICdcMCc7Ci19Ci0K
LWludCBTaGFkZXI6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAotewotICAgIGlmICghbUluZm9M
b2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQotfQotCi12b2lkIFNoYWRl
cjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5m
b0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKGJ1ZlNpemUgPiAwKQotICAg
IHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCA9
IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICAg
ICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7
Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLWludCBTaGFkZXI6OmdldFNv
dXJjZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbiht
U291cmNlKSArIDE7Ci0gICAgfQotfQotCi1pbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNl
TGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkg
KyAxOwotICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNl
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQotewotICAg
IGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAoYnVmU2l6ZSA+IDApCi0gICAgewotICAgICAgICBp
ZiAoc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNp
emUgLSAxLCAoaW50KXN0cmxlbihzb3VyY2UpKTsKLSAgICAgICAgICAgIG1lbWNweShidWZmZXIs
IHNvdXJjZSwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdc
MCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBp
bmRleDsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhZGVyOjpnZXRTb3VyY2UoR0xzaXplaSBidWZTaXpl
LCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBnZXRTb3VyY2VJbXBsKG1T
b3VyY2UsIGJ1ZlNpemUsIGxlbmd0aCwgYnVmZmVyKTsKLX0KLQotdm9pZCBTaGFkZXI6OmdldFRy
YW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1
ZmZlcikKLXsKLSAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgsIGJ1ZmZl
cik7Ci19Ci0KLWJvb2wgU2hhZGVyOjppc0NvbXBpbGVkKCkKLXsKLSAgICByZXR1cm4gbUhsc2wg
IT0gTlVMTDsKLX0KLQotY29uc3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKLXsKLSAgICByZXR1
cm4gbUhsc2w7Ci19Ci0KLXZvaWQgU2hhZGVyOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsr
OwotfQotCi12b2lkIFNoYWRlcjo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAg
ICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAgICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsKLSAgICB9Ci19Ci0KLXVuc2ln
bmVkIGludCBTaGFkZXI6OmdldFJlZkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlZkNv
dW50OwotfQotCi1ib29sIFNoYWRlcjo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFNoYWRlcjo6ZmxhZ0ZvckRlbGV0
aW9uKCkKLXsKLSAgICBtRGVsZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotLy8gUGVyZm9ybSBhIG9u
ZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzaGFkZXIgY29tcGlsZXIgKG9yIGFmdGVyIGJl
aW5nIGRlc3RydWN0ZWQgYnkgcmVsZWFzZUNvbXBpbGVyKQotdm9pZCBTaGFkZXI6OmluaXRpYWxp
emVDb21waWxlcigpCi17Ci0gICAgaWYgKCFtRnJhZ21lbnRDb21waWxlcikKLSAgICB7Ci0gICAg
ICAgIGludCByZXN1bHQgPSBTaEluaXRpYWxpemUoKTsKLQotICAgICAgICBpZiAocmVzdWx0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgcmVzb3VyY2VzOwotICAg
ICAgICAgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmcmVzb3VyY2VzKTsKLSAgICAgICAgICAg
IENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgIHJlc291cmNl
cy5NYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgICAgICAgICAgcmVz
b3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5n
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IGNvbnRleHQtPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMgPSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwot
ICAgICAgICAgICAgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7Ci0gICAg
ICAgICAgICByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZGRVJTOwotICAg
ICAgICAgICAgcmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAg
ICAgICAvLyByZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IGdldERpc3BsYXkoKS0+
aXNEM2Q5RXhEZXZpY2UoKSA/IDEgOiAwOyAvLyBUT0RPOiBjb21tZW50ZWQgb3V0IHVudGlsIHRo
ZSBleHRlbnNpb24gaXMgYWN0dWFsbHkgc3VwcG9ydGVkLgotCi0gICAgICAgICAgICBtRnJhZ21l
bnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRfU0hBREVSLCBTSF9H
TEVTMl9TUEVDLCBTSF9ITFNMX09VVFBVVCwgJnJlc291cmNlcyk7Ci0gICAgICAgICAgICBtVmVy
dGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRFWF9TSEFERVIsIFNIX0dM
RVMyX1NQRUMsIFNIX0hMU0xfT1VUUFVULCAmcmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpCi17Ci0gICAgU2hEZXN0cnVjdCht
RnJhZ21lbnRDb21waWxlcik7Ci0gICAgU2hEZXN0cnVjdChtVmVydGV4Q29tcGlsZXIpOwotCi0g
ICAgbUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwotICAgIG1WZXJ0ZXhDb21waWxlciA9IE5VTEw7
Ci0KLSAgICBTaEZpbmFsaXplKCk7Ci19Ci0KLXZvaWQgU2hhZGVyOjpwYXJzZVZhcnlpbmdzKCkK
LXsKLSAgICBpZiAobUhsc2wpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IHN0
cnN0cihtSGxzbCwgIi8vIFZhcnlpbmdzIikgKyAxMjsKLQotICAgICAgICB3aGlsZSh0cnVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAgICAgICAg
ICBjaGFyIHZhcnlpbmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3Nj
YW5mKGlucHV0LCAic3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlpbmdOYW1l
KTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hhciAqYXJy
YXkgPSBzdHJzdHIodmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IDE7
Ci0KLSAgICAgICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBzaXplID0gYXRvaShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9ICdcMCc7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soVmFyeWlu
ZyhwYXJzZVR5cGUodmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVM
TCkpOwotCi0gICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNf
RlJBR19DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIo
bUhsc2wsICJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9p
bnRTaXplID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVMTDsKLSAg
ICAgICAgbVVzZXNQb2ludENvb3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9DT09S
RCIpICE9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBpbml0aWFsaXplL2NsZWFuIHVwIHByZXZpb3Vz
IHN0YXRlCi12b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKLXsKLSAgICAvLyBzZXQgYnkgY29tcGls
ZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAgICBkZWxl
dGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0KLSAgICAvLyBzZXQgYnkgcGFy
c2VWYXJ5aW5ncwotICAgIG1WYXJ5aW5ncy5jbGVhcigpOwotCi0gICAgbVVzZXNGcmFnQ29vcmQg
PSBmYWxzZTsKLSAgICBtVXNlc0Zyb250RmFjaW5nID0gZmFsc2U7Ci0gICAgbVVzZXNQb2ludFNp
emUgPSBmYWxzZTsKLSAgICBtVXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKLX0KLQotdm9pZCBTaGFk
ZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpCi17Ci0gICAgLy8gZW5zdXJlIHdlIGRv
bid0IHBhc3MgYSBOVUxMIHNvdXJjZSB0byB0aGUgY29tcGlsZXIKLSAgICBjaGFyICpzb3VyY2Ug
PSAiXDAiOwotICAgIGlmIChtU291cmNlKQotICAgIHsKLSAgICAgICAgc291cmNlID0gbVNvdXJj
ZTsKLSAgICB9Ci0KLSAgICAvLyBlbnN1cmUgdGhlIGNvbXBpbGVyIGlzIGxvYWRlZAotICAgIGlu
aXRpYWxpemVDb21waWxlcigpOwotCi0gICAgaW50IGNvbXBpbGVPcHRpb25zID0gU0hfT0JKRUNU
X0NPREU7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aDsKLSAgICBpZiAocGVyZkFjdGl2ZSgp
KQotICAgIHsKLSAgICAgICAgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHdy
aXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZSwgc3RybGVuKHNvdXJjZSkpOwotICAg
ICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7Ci0gICAgfQotCi0gICAg
aW50IHJlc3VsdDsKLSAgICBpZiAoc291cmNlUGF0aC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAg
cmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0aW9ucyk7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZVN0cmlu
Z3NbMl0gPQotICAgICAgICB7Ci0gICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3RyKCksCi0gICAg
ICAgICAgICBzb3VyY2UKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUo
Y29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BB
VEgpOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQpCi0gICAgewotICAgICAgICBpbnQgb2JqQ29k
ZUxlbiA9IDA7Ci0gICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVO
R1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1IbHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07
Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgbUhsc2wpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBpbnQgaW5mb0xvZ0xlbiA9IDA7Ci0gICAgICAgIFNoR2V0SW5m
byhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xvZ0xlbik7Ci0gICAgICAgIG1J
bmZvTG9nID0gbmV3IGNoYXJbaW5mb0xvZ0xlbl07Ci0gICAgICAgIFNoR2V0SW5mb0xvZyhjb21w
aWxlciwgbUluZm9Mb2cpOwotCi0gICAgICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cpOwotICAg
IH0KLX0KLQotR0xlbnVtIFNoYWRlcjo6cGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBl
KQotewotICAgIGlmICh0eXBlID09ICJmbG9hdCIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xf
RkxPQVQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MiIpCi0gICAgewotICAg
ICAgICByZXR1cm4gR0xfRkxPQVRfVkVDMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAi
ZmxvYXQzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgIH0KLSAg
ICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZM
T0FUX1ZFQzQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
ID09ICJmbG9hdDN4MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEdMX0ZMT0FUX01BVDQ7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAg
IHJldHVybiBHTF9OT05FOwotfQotCi0vLyB0cnVlIGlmIHZhcnlpbmcgeCBoYXMgYSBoaWdoZXIg
cHJpb3JpdHkgaW4gcGFja2luZyB0aGFuIHkKLWJvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhj
b25zdCBWYXJ5aW5nICZ4LCBjb25zdCBWYXJ5aW5nICZ5KQotewotICAgIGlmKHgudHlwZSA9PSB5
LnR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOwotICAgIH0KLQot
ICAgIHN3aXRjaCAoeC50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0
dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3aXRjaCh5LnR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAg
IHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVl
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gZmFsc2U7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotVmVydGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2Vy
LCBHTHVpbnQgaGFuZGxlKSA6IFNoYWRlcihtYW5hZ2VyLCBoYW5kbGUpCi17Ci19Ci0KLVZlcnRl
eFNoYWRlcjo6flZlcnRleFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBWZXJ0ZXhTaGFkZXI6Omdl
dFR5cGUoKQotewotICAgIHJldHVybiBHTF9WRVJURVhfU0hBREVSOwotfQotCi12b2lkIFZlcnRl
eFNoYWRlcjo6dW5jb21waWxlKCkKLXsKLSAgICBTaGFkZXI6OnVuY29tcGlsZSgpOwotCi0gICAg
Ly8gc2V0IGJ5IFBhcnNlQXR0cmlidXRlcwotICAgIG1BdHRyaWJ1dGVzLmNsZWFyKCk7Ci19Owot
Ci12b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxlKCk7Ci0KLSAg
ICBjb21waWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7Ci0gICAgcGFyc2VBdHRyaWJ1dGVzKCk7
Ci0gICAgcGFyc2VWYXJ5aW5ncygpOwotfQotCi1pbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRp
Y0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQotewotICAgIGlmICghYXR0
cmlidXRlTmFtZS5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgaW50IHNlbWFudGljSW5kZXggPSAw
OwotICAgICAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtQXR0
cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0
ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lID09IGF0dHJp
YnV0ZU5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGlj
SW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFy
aWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIC0xOwotfQotCi12b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVzKCkKLXsK
LSAgICBjb25zdCBjaGFyICpobHNsID0gZ2V0SExTTCgpOwotICAgIGlmIChobHNsKQotICAgIHsK
LSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIoaGxzbCwgIi8vIEF0dHJpYnV0ZXMi
KSArIDE0OwotCi0gICAgICAgIHdoaWxlKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNo
YXIgYXR0cmlidXRlVHlwZVsyNTZdOwotICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVOYW1lWzI1
Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICUy
NTVzIF8lMjU1cyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgICAgICAg
ICBpZiAobWF0Y2hlcyAhPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQXR0cmlidXRlcy5wdXNoX2JhY2soQXR0
cmlidXRlKHBhcnNlVHlwZShhdHRyaWJ1dGVUeXBlKSwgYXR0cmlidXRlTmFtZSkpOwotCi0gICAg
ICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLUZyYWdtZW50U2hhZGVyOjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1h
bmFnZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKLXsKLX0KLQot
RnJhZ21lbnRTaGFkZXI6On5GcmFnbWVudFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBGcmFnbWVu
dFNoYWRlcjo6Z2V0VHlwZSgpCi17Ci0gICAgcmV0dXJuIEdMX0ZSQUdNRU5UX1NIQURFUjsKLX0K
LQotdm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxlKCk7Ci0K
LSAgICBjb21waWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBwYXJzZVZhcnlpbmdz
KCk7Ci0gICAgbVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOwotfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQzMDgzZWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXIuaDogRGVmaW5lcyB0aGUgYWJzdHJh
Y3QgZ2w6OlNoYWRlciBjbGFzcyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMg
VmVydGV4U2hhZGVyIGFuZCBGcmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2Jq
ZWN0cyBhbmQKLS8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gMi4xMCBwYWdlIDI0IGFuZCBzZWN0aW9uCi0vLyAzLjggcGFnZSA4NC4KLQotI2lmbmRl
ZiBMSUJHTEVTVjJfU0hBREVSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KLQotI2Rl
ZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNkeDku
aD4KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1zdHJ1Y3QgVmFyeWlu
ZwotewotICAgIFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBp
bnQgc2l6ZSwgYm9vbCBhcnJheSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpLCBz
aXplKHNpemUpLCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQgc2l6ZTsg
ICAvLyBOdW1iZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQotICAgIGlu
dCByZWc7ICAgIC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmluZyBsaW5r
Ci0gICAgaW50IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWduZWQgZHVy
aW5nIGxpbmsKLX07Ci0KLXR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0Owot
Ci1jbGFzcyBTaGFkZXIKLXsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKLQotICBw
dWJsaWM6Ci0gICAgU2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRs
ZSk7Ci0KLSAgICB2aXJ0dWFsIH5TaGFkZXIoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5
cGUoKSA9IDA7Ci0gICAgR0x1aW50IGdldEhhbmRsZSgpIGNvbnN0OwotCi0gICAgdm9pZCBkZWxl
dGVTb3VyY2UoKTsKLSAgICB2b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFy
ICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKTsKLSAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0
aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7Ci0gICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0
OwotICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICpidWZmZXIpOwotICAgIGludCBnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBjaGFyICpidWZmZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwotICAgIGJvb2wgaXNDb21waWxlZCgpOwot
ICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKLQotICAgIHZvaWQgYWRkUmVmKCk7Ci0gICAgdm9p
ZCByZWxlYXNlKCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwotICAgIHZvaWQgZmxhZ0ZvckRlbGV0
aW9uKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlQ29tcGlsZXIoKTsKLQotICBwcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBwYXJzZVZhcnlpbmdzKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVUb0hMU0wo
dm9pZCAqY29tcGlsZXIpOwotCi0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Ci0KLSAgICBz
dGF0aWMgR0xlbnVtIHBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSk7Ci0gICAgc3Rh
dGljIGJvb2wgY29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWluZyAm
eSk7Ci0KLSAgICBWYXJ5aW5nTGlzdCBtVmFyeWluZ3M7Ci0KLSAgICBib29sIG1Vc2VzRnJhZ0Nv
b3JkOwotICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1Vc2VzUG9pbnRTaXpl
OwotICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwotCi0gICAgc3RhdGljIHZvaWQgKm1GcmFnbWVu
dENvbXBpbGVyOwotICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29tcGlsZXI7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2hhZGVyKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZUNvbXBpbGVyKCk7Ci0KLSAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsKLSAgICB1bnNp
Z25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dyYW0gb2JqZWN0cyB0aGlz
IHNoYWRlciBpcyBhdHRhY2hlZCB0bwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAgICAgICAv
LyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUgZGVsZXRlZCB3aGVuIG5v
IGxvbmdlciBpbiB1c2UKLQotICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAgY2hhciAqbUhsc2w7Ci0g
ICAgY2hhciAqbUluZm9Mb2c7Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFn
ZXI7Ci19OwotCi1zdHJ1Y3QgQXR0cmlidXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0eXBlKEdM
X05PTkUpLCBuYW1lKCIiKQotICAgIHsKLSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5
cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLX07
Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKLQotY2xh
c3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgotewotICAgIGZyaWVuZCBjbGFzcyBQcm9n
cmFtQmluYXJ5OwotCi0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2Vy
ICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIH5WZXJ0ZXhTaGFkZXIoKTsKLQotICAg
IHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZSgpOwot
ICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChj
b25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4U2hhZGVyKTsKLQotICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGVzKCk7Ci0KLSAgICBBdHRyaWJ1dGVBcnJheSBtQXR0cmlidXRlczsKLX07Ci0KLWNsYXNz
IEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgotewotICBwdWJsaWM6Ci0gICAgRnJhZ21l
bnRTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQotICAg
IH5GcmFnbWVudFNoYWRlcigpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpOwotICAg
IHZpcnR1YWwgdm9pZCBjb21waWxlKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oRnJhZ21lbnRTaGFkZXIpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xF
U1YyX1NIQURFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVGV4dHVyZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZjI0NTMuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MDkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gVGV4dHVyZS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBp
dHMgZGVyaXZlZCBjbGFzc2VzCi0vLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBs
ZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBhbmQgcmVsYXRlZAotLy8gZnVuY3Rpb25hbGl0eS4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgNjMuCi0KLSNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSA8ZDNkeDl0ZXguaD4KLQotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxpbnRyaW4uaD4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdW5zaWduZWQgaW50
IFRleHR1cmVTdG9yYWdlOjptQ3VycmVudFRleHR1cmVTZXJpYWwgPSAxOwotCi1zdGF0aWMgRDNE
Rk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSkKLXsKLSAgICBpZiAoSXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBEM0RGTVRfSU5UWjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1U
X0RYVDE7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQzOwotICAg
IH0KLSAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTMy
QjMyRzMyUjMyRjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09F
UykKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgaWYg
KGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1bWluYW5j
ZVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTDg7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAm
JiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9YOFI4RzhCODsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0RGTVRfQThS
OEc4Qjg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLX0KLQotc3RhdGlj
IGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAg
IGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoK
LSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAg
Y2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBE
M0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIGlubGluZSBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwg
R0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAgIERXT1JEIGQzZHVz
YWdlID0gMDsKLQotICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAg
ICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7Ci0gICAgfQotICAgIGVsc2UgaWYo
Zm9yY2VSZW5kZXJhYmxlIHx8IChJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYg
KGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQotICAgIHsKLSAg
ICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOwotICAgIH0KLSAgICByZXR1
cm4gZDNkdXNhZ2U7Ci19Ci0KLUltYWdlOjpJbWFnZSgpCi17Ci0gICAgbVdpZHRoID0gMDsgCi0g
ICAgbUhlaWdodCA9IDA7Ci0gICAgbUZvcm1hdCA9IEdMX05PTkU7Ci0gICAgbVR5cGUgPSBHTF9V
TlNJR05FRF9CWVRFOwotCi0gICAgbVN1cmZhY2UgPSBOVUxMOwotCi0gICAgbURpcnR5ID0gZmFs
c2U7Ci0KLSAgICBtRDNEUG9vbCA9IEQzRFBPT0xfU1lTVEVNTUVNOwotICAgIG1EM0RGb3JtYXQg
PSBEM0RGTVRfVU5LTk9XTjsKLX0KLQotSW1hZ2U6On5JbWFnZSgpCi17Ci0gICAgaWYgKG1TdXJm
YWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgSW1hZ2U6OnJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYgKG1XaWR0
aCAhPSB3aWR0aCB8fAotICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAgICBtRm9y
bWF0ICE9IGZvcm1hdCB8fAotICAgICAgICBtVHlwZSAhPSB0eXBlIHx8Ci0gICAgICAgIGZvcmNl
UmVsZWFzZSkKLSAgICB7Ci0gICAgICAgIG1XaWR0aCA9IHdpZHRoOwotICAgICAgICBtSGVpZ2h0
ID0gaGVpZ2h0OwotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtVHlwZSA9IHR5
cGU7Ci0gICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQK
LSAgICAgICAgbUQzREZvcm1hdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShtRm9ybWF0LCBt
VHlwZSk7Ci0KLSAgICAgICAgaWYgKG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
U3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIEltYWdlOjpjcmVhdGVTdXJmYWNlKCkKLXsKLSAgICBpZihtU3VyZmFjZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3
VGV4dHVyZSA9IE5VTEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxM
OwotICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAg
Y29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOwotICAgIEFTU0VSVChk
M2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9y
IGRlcHRoIHRleHR1cmVzCi0KLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQot
ICAgIHsKLSAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6ZWkgcmVx
dWVzdFdpZHRoID0gbVdpZHRoOwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVp
Z2h0OwotICAgICAgICBpZiAoSXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9
IDAgfHwgbUhlaWdodCAlIDQgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaXNN
dWx0NCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOwotICAgICAg
ICAgICAgd2hpbGUgKCFpc011bHQ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
cXVlc3RXaWR0aCA8PD0gMTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0SGVpZ2h0IDw8PSAxOwot
ICAgICAgICAgICAgICAgIHVwc2FtcGxlQ291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAocmVx
dWVzdFdpZHRoICUgNCA9PSAwICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBs
ZUNvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2Uo
KS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRj
aCArIDEsIE5VTEwsIGQzZEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsKLQotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBzdXJmYWNlIGZhaWxlZC4iKTsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdT
dXJmYWNlKTsKLSAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1T
dXJmYWNlID0gbmV3U3VyZmFjZTsKLSAgICBtRGlydHkgPSBmYWxzZTsKLSAgICBtRDNEUG9vbCA9
IHBvb2xUb1VzZTsKLX0KLQotSFJFU1VMVCBJbWFnZTo6bG9jayhEM0RMT0NLRURfUkVDVCAqbG9j
a2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAg
ICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsKLQotICAgIGlmIChtU3VyZmFj
ZSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2NrZWRSZWN0
LCByZWN0LCAwKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAg
ICBtRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
SW1hZ2U6OnVubG9jaygpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgIH0KLX0KLQotYm9vbCBJbWFnZTo6aXNSZW5kZXJhYmxlRm9y
bWF0KCkgY29uc3QKLXsgICAgCi0gICAgcmV0dXJuIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
Z2V0RDNERm9ybWF0KCkpOwotfQotCi1EM0RGT1JNQVQgSW1hZ2U6OmdldEQzREZvcm1hdCgpIGNv
bnN0Ci17Ci0gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24n
dCBiZWVuIHJlZGVmaW5lZCBmaXJzdAotICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVnIGJ5IHRo
ZSBjYWxsZXIKLSAgICBBU1NFUlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7Ci0KLSAg
ICByZXR1cm4gbUQzREZvcm1hdDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOjpnZXRT
dXJmYWNlKCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICByZXR1cm4gbVN1cmZhY2U7
Ci19Ci0KLXZvaWQgSW1hZ2U6OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEQzRFhMb2FkU3Vy
ZmFjZUZyb21TdXJmYWNlKHN1cmZhY2UsIE5VTEwsIE5VTEwsIG1TdXJmYWNlLCBOVUxMLCBOVUxM
LCBEM0RYX0ZJTFRFUl9CT1gsIDApOwotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAg
IH0KLQotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHN1cmZhY2UtPkdldERlc2MoJmRl
c2MpOwotICAgIEFTU0VSVChkZXNjLlBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLQotICAgIG1T
dXJmYWNlID0gc3VyZmFjZTsKLSAgICBtRDNEUG9vbCA9IGRlc2MuUG9vbDsKLX0KLQotdm9pZCBJ
bWFnZTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQot
ewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOwot
Ci0gICAgaWYgKHNvdXJjZVN1cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkK
LSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdDsKLSAgICAgICAgcmVjdC5sZWZ0ID0geG9mZnNldDsK
LSAgICAgICAgcmVjdC50b3AgPSB5b2Zmc2V0OwotICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNl
dCArIHdpZHRoOwotICAgICAgICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0KLSAg
ICAgICAgaWYgKG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCkKLSAgICAgICAgewotICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0U3Vy
ZmFjZSwgTlVMTCwgJnJlY3QsIHNvdXJjZVN1cmZhY2UsIE5VTEwsICZyZWN0LCBEM0RYX0ZJTFRF
Ul9CT1gsIDApOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZVN1cmZh
Y2U6IHNvdXJjZSBtdXN0IGJlIFNZU1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQgcG9vbHMg
Ci0gICAgICAgICAgICBQT0lOVCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3QudG9wfTsKLSAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uoc291cmNl
U3VyZmFjZSwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOwotICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gU3RvcmUgdGhl
IHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWln
aHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRo
ZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICppbnB1dCkKLXsKLSAgICBSRUNUIGxvY2tSZWN0ID0KLSAgICB7Ci0gICAgICAgIHhv
ZmZzZXQsIHlvZmZzZXQsCi0gICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdo
dAotICAgIH07Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgSFJFU1VMVCByZXN1
bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9
IENvbXB1dGVQaXRjaCh3aWR0aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKLQot
ICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0g
ICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQUxQ
SEE6Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNTU0UyKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbG9hZEFscGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRh
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNE
Rm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAg
ICAgICAgaWYgKHN1cHBvcnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X0JHUkFfRVhUOgotICAgICAgICAgICAgbG9hZEJHUkFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAg
c3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgICAgICBsb2FkUkdCNTY1RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgc3dpdGNoIChtRm9y
bWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9h
ZFJHQkE0NDQ0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE1NTUx
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6
Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0
IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3Rv
cmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAg
ICBsb2FkQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJH
QkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9S
R0JBOgotICAgICAgICAgICAgbG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2gg
KG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29u
dmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBE
M0QKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZs
b2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JIYWxm
RmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IHVubG9jaygpOwotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVM
TDsKLSAgICBfX20xMjhpIHplcm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7
Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQotICAgICAg
ICBpbnQgeDsKLSAgICAgICAgLy8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAgICAgICAg
Zm9yICh4ID0gMDsgKChyZWludGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAweEYp
ICE9IDAgJiYgeCA8IHdpZHRoKTsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0W3hd
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OwotICAgICAgICB9
Ci0KLSAgICAgICAgZm9yICg7IHggKyA3IDwgd2lkdGg7IHggKz0gOCkKLSAgICAgICAgewotICAg
ICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWRsX2VwaTY0KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKLSAgICAgICAgICAgIC8vIEludGVy
bGVhdmUgZWFjaCBieXRlIHRvIDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRlIHRvIHplcm8KLSAg
ICAgICAgICAgIHNvdXJjZURhdGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwgc291cmNl
RGF0YSk7Ci0gICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggMTZiaXQgdG8gMzJiaXQsIG1h
a2UgdGhlIGxvd2VyIDE2Yml0IHRvIHplcm8KLSAgICAgICAgICAgIF9fbTEyOGkgbG8gPSBfbW1f
dW5wYWNrbG9fZXBpMTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOwotICAgICAgICAgICAgX19tMTI4
aSBoaSA9IF9tbV91bnBhY2toaV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7Ci0KLSAgICAg
ICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4
XSksIGxvKTsKLSAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9f
bTEyOGkqPigmZGVzdFt4ICsgNF0pLCBoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5k
bGUgdGhlIHJlbWFpbmRlcgotICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJj
ZVt4XSkgPDwgMjQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBo
YUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpz
b3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVu
c2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
Ci0KLSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVt
Y3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAot
ewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewot
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNo
b3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
c291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVF
RUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRh
dGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAotewot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNl
LCB3aWR0aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVt
aW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsK
LSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJj
ZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIq
eCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWdu
ZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9
IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAm
IDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkUkdCRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0
ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpk
ZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZi
aXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAot
ewotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBp
bnQgKmRlc3QgPSBOVUxMOwotICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBpMzIoMHgw
MGZmMDBmZik7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAg
IGludCB4ID0gMDsKLQotICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZAotICAg
ICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0W3hdKSAm
IDE1KSAhPSAwKSAmJiB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3Rs
KHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZvciAoOyB4ICsgMyA8IHdpZHRoOyB4ICs9IDQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIF9fbTEyOGkgc291cmNlRGF0YSA9IF9tbV9sb2FkdV9zaTEyOChyZWludGVycHJl
dF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW3hdKSk7Ci0gICAgICAgICAgICAvLyBNYXNr
IG91dCBnIGFuZCBhLCB3aGljaCBkb24ndCBjaGFuZ2UKLSAgICAgICAgICAgIF9fbTEyOGkgZ2FD
b21wb25lbnRzID0gX21tX2FuZG5vdF9zaTEyOChick1hc2ssIHNvdXJjZURhdGEpOwotICAgICAg
ICAgICAgLy8gTWFzayBvdXQgYiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBickNvbXBvbmVu
dHMgPSBfbW1fYW5kX3NpMTI4KHNvdXJjZURhdGEsIGJyTWFzayk7Ci0gICAgICAgICAgICAvLyBT
d2FwIGIgYW5kIHIKLSAgICAgICAgICAgIF9fbTEyOGkgYnJTd2FwcGVkID0gX21tX3NodWZmbGVo
aV9lcGkxNihfbW1fc2h1ZmZsZWxvX2VwaTE2KGJyQ29tcG9uZW50cywgX01NX1NIVUZGTEUoMiwg
MywgMCwgMSkpLCBfTU1fU0hVRkZMRSgyLCAzLCAwLCAxKSk7Ci0gICAgICAgICAgICBfX20xMjhp
IHJlc3VsdCA9IF9tbV9vcl9zaTEyOChnYUNvbXBvbmVudHMsIGJyU3dhcHBlZCk7Ci0gICAgICAg
ICAgICBfbW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeF0p
LCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUGVyZm9ybSBsZWZ0b3ZlciB3cml0
ZXMKLSAgICAgICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbeF0gPSAo
X3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJn
YmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYg
MHgwMEYwKSA+PiA0KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4
MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4g
MTIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0
KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVz
dCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8
ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAo
KHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAw
eEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgw
MDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2Fk
UkdCQUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwot
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5z
aWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwg
d2lkdGgqNCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsKLSAg
ICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDAp
OwotCi0gICAgUkVDVCBsb2NrUmVjdCA9IHsKLSAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKLSAg
ICAgICAgeG9mZnNldCArIHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0Ci0gICAgfTsKLQotICAgIEQz
RExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwg
JmxvY2tSZWN0KTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNp
emUod2lkdGgsIGhlaWdodCwgbUZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1
dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQot
ICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBs
b2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5w
dXRQaXRjaCk7Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci19Ci0KLS8vIFRoaXMgaW1wbGVtZW50
cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1
cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTo6Y29weShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkKLXsKLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqcmVuZGVyVGFyZ2V0RGF0YSA9IE5VTEw7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRl
c2NyaXB0aW9uOwotICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwotICAg
IAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZh
Y2UoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9y
bWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOwotCi0gICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IG1hdGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRl
clRhcmdldERhdGEocmVuZGVyVGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsKLQotICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1
bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNl
KCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAg
ICBSRUNUIHNvdXJjZVJlY3QgPSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsKLSAgICBS
RUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNl
dCArIGhlaWdodH07Ci0KLSAgICBpZiAoaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAg
ICAgICByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShnZXRTdXJmYWNlKCksIE5V
TEwsICZkZXN0UmVjdCwgcmVuZGVyVGFyZ2V0RGF0YSwgTlVMTCwgJnNvdXJjZVJlY3QsIEQzRFhf
RklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29weWluZyBzdXJmYWNlcyB1bmV4cGVjdGVkbHkg
ZmFpbGVkLiIpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sgPSB7
MH07Ci0gICAgICAgIHJlc3VsdCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3VyY2VM
b2NrLCAmc291cmNlUmVjdCwgMCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFj
ZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICAgICAgcmVuZGVyVGFy
Z2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7
MH07Ci0gICAgICAgIHJlc3VsdCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkZhaWxlZCB0byBsb2NrIHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWln
aHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tS
ZWN0KCk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoZGVzdExvY2sucEJpdHMgJiYgc291cmNlTG9jay5wQml0cykKLSAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxv
Y2sucEJpdHM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNo
YXIqKWRlc3RMb2NrLnBCaXRzOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLkZv
cm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgICAgICAgIHN3
aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3ggKiA0
ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0g
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsg
M107Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVk
ID0gc291cmNlW3ggKiAyICsgMV0gJiAweEY4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeF0gPSByZWQgfCAocmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfQTFSNUc1QjU6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAg
ICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+
PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAg
ICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3
QzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8
IDEpIHwgKHJlZCA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAy
ICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNlW3ggKiAyICsgMV0gPj4gNzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJj
ZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBp
dGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVubG9jaygpOwotICAgICAgICByZW5kZXJUYXJn
ZXREYXRhLT5VbmxvY2tSZWN0KCk7Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVs
ZWFzZSgpOwotCi0gICAgbURpcnR5ID0gdHJ1ZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U6OlRleHR1
cmVTdG9yYWdlKERXT1JEIHVzYWdlKQotICAgIDogbUQzRFVzYWdlKHVzYWdlKSwKLSAgICAgIG1E
M0RQb29sKGdldERpc3BsYXkoKS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwKLSAgICAgIG1UZXh0
dXJlU2VyaWFsKGlzc3VlVGV4dHVyZVNlcmlhbCgpKQotewotfQotCi1UZXh0dXJlU3RvcmFnZTo6
flRleHR1cmVTdG9yYWdlKCkKLXsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJU
YXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCB8IEQzRFVTQUdFX0RFUFRIU1RFTkNJTCkpICE9IDA7Ci19Ci0KLWJvb2wgVGV4dHVy
ZVN0b3JhZ2U6OmlzTWFuYWdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9vbCA9PSBE
M0RQT09MX01BTkFHRUQpOwotfQotCi1EM0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQb29sKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFBvb2w7Ci19Ci0KLURXT1JEIFRleHR1cmVTdG9yYWdl
OjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM0RVc2FnZTsKLX0KLQotdW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVRleHR1cmVTZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6
aXNzdWVUZXh0dXJlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFs
Kys7Ci19Ci0KLVRleHR1cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlk
KQotewotICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7Ci0gICAgbU1h
Z0ZpbHRlciA9IEdMX0xJTkVBUjsKLSAgICBtV3JhcFMgPSBHTF9SRVBFQVQ7Ci0gICAgbVdyYXBU
ID0gR0xfUkVQRUFUOwotICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgIG1Vc2FnZSA9
IEdMX05PTkU7Ci0gICAgCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLQotICAgIG1JbW11dGFi
bGUgPSBmYWxzZTsKLX0KLQotVGV4dHVyZTo6flRleHR1cmUoKQotewotfQotCi0vLyBSZXR1cm5z
IHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFt
ZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17Ci0gICAg
c3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAg
ICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9N
SVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1NaW5GaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAgICAgICAg
bURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRl
IHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldE1hZ0ZpbHRl
cihHTGVudW0gZmlsdGVyKQotewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobU1hZ0ZpbHRlciAhPSBmaWx0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbU1hZ0ZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0
ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQg
ZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQotewot
ICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNh
c2UgR0xfQ0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbVdyYXBTID0gd3JhcDsKLSAgICAgICAgICAgICAgICBtRGlydHlQYXJh
bWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFs
aWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3cmFwKQot
ewotICAgIHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAg
IGNhc2UgR0xfQ0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVdyYXBUICE9IHdyYXApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbVdyYXBUID0gd3JhcDsKLSAgICAgICAgICAgICAgICBtRGlydHlQ
YXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1cGRhdGUg
KHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRVc2FnZShHTGVudW0gdXNh
Z2UpCi17Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0g
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAgIG1Vc2Fn
ZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRNaW5GaWx0ZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtTWluRmlsdGVyOwotfQotCi1HTGVudW0gVGV4dHVyZTo6
Z2V0TWFnRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1hZ0ZpbHRlcjsKLX0KLQotR0xl
bnVtIFRleHR1cmU6OmdldFdyYXBTKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdyYXBTOwotfQot
Ci1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFQoKSBjb25zdAotewotICAgIHJldHVybiBtV3JhcFQ7
Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1V
c2FnZTsKLX0KLQotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmIChwaXhlbHMgIT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lk
dGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12
b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQot
ICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0
V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOwotICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsK
LSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJ
bWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9IE5VTEwp
Ci0gICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAq
VGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8gZW5zdXJlIHRoZSB1
bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKGZhbHNlKSA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRl
VGV4dHVyZSgpOwotCi0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7Ci19Ci0KLWJvb2wgVGV4
dHVyZTo6aGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURpcnR5UGFy
YW1ldGVyczsKLX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1EaXJ0eUltYWdlczsKLX0KLQotdm9pZCBUZXh0dXJlOjpyZXNldERpcnR5KCkK
LXsKLSAgICBtRGlydHlQYXJhbWV0ZXJzID0gZmFsc2U7Ci0gICAgbURpcnR5SW1hZ2VzID0gZmFs
c2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKCkKLXsKLSAg
ICBUZXh0dXJlU3RvcmFnZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAgIHJldHVy
biB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIDogMDsKLX0KLQotdW5zaWdu
ZWQgaW50IFRleHR1cmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KQotewot
ICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsKLSAgICByZXR1
cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQpIDogMDsK
LX0KLQotYm9vbCBUZXh0dXJlOjppc0ltbXV0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1J
bW11dGFibGU7Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdAotewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBp
c1BvdzIoaGVpZ2h0KSkgfHwgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOyAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGxldmVs
cwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHdpdGhv
dXQgR0xfT0VTX3RleHR1cmVfbnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBzLgotICAg
ICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxz
KEdMc2l6ZWkgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwg
c2l6ZSk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSA6
IDA7Ci19Ci0KLUJsaXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQotewotICAgIENvbnRleHQgKmNv
bnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQtPmdldEJsaXR0ZXIoKTsK
LX0KLQotYm9vbCBUZXh0dXJlOjpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCi17Ci0g
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0K
LSAgICAgICAgaWYgKGZyb21NYW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQg
PSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0LCBOVUxMLCBOVUxMLCBzb3VyY2UsIE5V
TEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5
KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXRE
ZXZpY2UoKTsKLQotICAgICAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBE
M0RURVhGX05PTkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0dXJl
U3RvcmFnZTJEOjpUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4
dHVyZSkgOiBUZXh0dXJlU3RvcmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVuZGVyVGFy
Z2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0gICAgbVRl
eHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0
b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtUmVuZGVyVGFy
Z2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0gICAgbVRl
eHR1cmUgPSBOVUxMOwotICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0
aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAg
Ly8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRp
b24KLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAgewotICAgICAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBnZXRVc2Fn
ZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAg
ICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LVRleHR1cmVTdG9yYWdlMkQ6On5UZXh0dXJlU3RvcmFnZTJEKCkKLXsKLSAgICBpZiAobVRleHR1
cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2Uy
RDo6Z2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZzdXJmYWNlKTsK
LSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
c3VyZmFjZTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTJEOjpn
ZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi11bnNp
Z25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0
YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRTZXJpYWw7Ci19Ci0KLVRl
eHR1cmUyRDo6VGV4dHVyZTJEKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAgIG1UZXhT
dG9yYWdlID0gTlVMTDsKLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgbUNvbG9yYnVmZmVyUHJv
eHkgPSBOVUxMOwotICAgIG1Qcm94eVJlZnMgPSAwOwotfQotCi1UZXh0dXJlMkQ6On5UZXh0dXJl
MkQoKQotewotICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtVGV4
U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgCi0gICAgaWYgKG1TdXJmYWNl
KQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsKLSAgICAg
ICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIH0KLX0KLQotLy8gV2UgbmVlZCB0byBtYWludGFpbiBh
IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94
aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8gdXNlIGEg
cG9pbnRlciAKLS8vIHRvIGEgcmVuZGVyYnVmZmVyIHByb3h5IHdoaWNoIGhhcyBiZWVuIGRlbGV0
ZWQuCi12b2lkIFRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkKLXsKLSAgICBtUHJveHlSZWZzKys7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxlYXNlUHJv
eHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBpZiAobVByb3h5UmVmcyA+IDAp
Ci0gICAgICAgIG1Qcm94eVJlZnMtLTsKLQotICAgIGlmIChtUHJveHlSZWZzID09IDApCi0gICAg
ICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0
VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKLX0KLQotR0xzaXpl
aSBUZXh0dXJlMkQ6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZl
bCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1J
bWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7
Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17
Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAg
ICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0
KEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRG
b3JtYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBHTF9OT05FOwotfQotCi1EM0RGT1JN
QVQgVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYg
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldEQzREZvcm1hdCgpOwotICAgIGVsc2UKLSAgICAgICAg
cmV0dXJuIEQzREZNVF9VTktOT1dOOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFn
ZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSB0eXBlKQotewotICAgIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgYm9vbCBy
ZWRlZmluZWQgPSBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCB0eXBlLCBmYWxzZSk7Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQot
ICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0u
bWFya0RpcnR5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0g
ICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUlt
YWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwotCi0gICAgVGV4dHVyZTo6
c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOwot
fQotCi12b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkK
LXsKLSAgICByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIEdMZW51bSBmb3JtYXQ7Ci0KLSAgICBz
d2l0Y2goc3VyZmFjZS0+Z2V0Rm9ybWF0KCkpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6Ci0gICAgICAgIGZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIGZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtSW1hZ2VBcnJheVswXS5yZWRlZmluZShmb3JtYXQsIHN1
cmZhY2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCBHTF9VTlNJR05FRF9CWVRF
LCB0cnVlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
dyBUZXh0dXJlU3RvcmFnZTJEKHN1cmZhY2UtPmdldE9mZnNjcmVlblRleHR1cmUoKSk7Ci0KLSAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAgICBtU3Vy
ZmFjZS0+c2V0Qm91bmRUZXh0dXJlKHRoaXMpOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFz
ZVRleEltYWdlKCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFj
ZS0+c2V0Qm91bmRUZXh0dXJlKE5VTEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0KLSAg
ICAgICAgaWYgKG1UZXhTdG9yYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVRl
eFN0b3JhZ2U7Ci0gICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5yZWRlZmlu
ZShHTF9SR0JBLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIFRleHR1cmU6
OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVs
XSk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsKLQot
ICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0TGV2ZWwgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsK
LQotICAgICAgICBpZiAoZGVzdExldmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFnZSAq
aW1hZ2UgPSAmbUltYWdlQXJyYXlbbGV2ZWxdOwotICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1
cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAg
ICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpbWFnZS0+bWFya0Ns
ZWFuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZShH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1h
Z2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpCi0gICAgewotICAgICAgICBj
b21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9
Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQot
ewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2xl
dmVsXSkpCi0gICAgewotICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOwotCi0g
ICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLQotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAKLSAgICBpZiAoIW1JbWFnZUFycmF5
W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5
W2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0g
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLm1hcmtDbGVhbigpOwotCi0g
ICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3Vu
dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LmxlZnQgPSB4OwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHgg
KyB3aWR0aDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAgICAgICAgICAgIHNv
dXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxl
dmVsKTsKLQotICAgICAgICAgICAgaWYgKGRlc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgZm9ybWF0
LCAwLCAwLCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsK
LX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpIHx8IHlv
ZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0uaXNS
ZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUo
KSkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSh4b2Zmc2V0LCB5b2Zm
c2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1UZXhT
dG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgICAg
IHNvdXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCAr
IHdpZHRoOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OwotICAgICAgICAgICAgc291
cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OwotCi0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAg
ICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJs
aXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmdl
dEZvcm1hdCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXpl
aSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCi17Ci0gICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFs
Zm9ybWF0KTsKLSAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgRDNERk9STUFUIGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3Jt
YXQsIHR5cGUpOwotICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwg
bVVzYWdlLCBmYWxzZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3Jh
Z2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRo
LCBoZWlnaHQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCi0gICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5
W2xldmVsXS5yZWRlZmluZShmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHRydWUpOwotICAg
ICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOwotICAgICAgICBoZWlnaHQgPSBz
dGQ6Om1heCgxLCBoZWlnaHQgPj4gMSk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSBs
ZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsr
KQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKEdMX05PTkUsIDAs
IDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgIH0KLQotICAgIGlmIChtVGV4U3RvcmFn
ZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
OwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRl
eFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1Nh
bXBsZXJDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5
WzBdLmdldFdpZHRoKCk7Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRI
ZWlnaHQoKTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgbWlwbWFwcGluZyA9IGZhbHNl
OwotCi0gICAgc3dpdGNoIChtTWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVT
VDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAg
ICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1Rf
TUlQTUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAg
ICAgIG1pcG1hcHBpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBH
TF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkg
fHwKLSAgICAgICAgKGdldEludGVybmFsRm9ybWF0KDApID09IEdMX0hBTEZfRkxPQVRfT0VTICYm
ICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xf
TkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBib29sIG5wb3RTdXBwb3J0ID0gZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1
cmUoKTsKLQotICAgIGlmICghbnBvdFN1cHBvcnQpCi0gICAgewotICAgICAgICBpZiAoKGdldFdy
YXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKLSAgICAgICAg
ICAgIChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1pcG1hcHBpbmcpCi0gICAgewotICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWln
aHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNNaXBtYXBDb21wbGV0ZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkg
Y29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4K
LWJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJ
bW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEdM
c2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVp
Z2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8
fCBoZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgaWYgKG1JbWFn
ZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0
VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgo
MSwgd2lkdGggPj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgp
ICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAotewotICAg
IHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKLX0KLQotYm9v
bCBUZXh0dXJlMkQ6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElz
RGVwdGhUZXh0dXJlKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7Ci19Ci0KLUlEaXJlY3QzREJh
c2VUZXh0dXJlOSAqVGV4dHVyZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOwot
fQotCi0vLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhl
IHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAg
R0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgR0xzaXplaSBo
ZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKLSAgICBHTGludCBsZXZlbHMgPSBj
cmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUlt
YWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0
dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFn
ZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10
LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5p
c01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0K
LSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3Rv
cmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJl
KCkKLXsKLSAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIEltYWdlICpp
bWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07Ci0KLSAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFn
ZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVy
VGFyZ2V0KCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZTJEICpuZXdUZXhTdG9yYWdlID0gTlVMTDsK
LQotICAgIGlmIChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlb
MF0uZ2V0SGVpZ2h0KCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1h
Z2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFy
cmF5WzBdLmdldEhlaWdodCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVs
cyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5
WzBdLmdldEQzREZvcm1hdCgpOwotICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVV
c2FnZShkM2RmbXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOwotCi0g
ICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZt
dCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAh
PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
OwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0
b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAgICB7ICAgCi0gICAgICAgICAgICAgICAg
ICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkg
c291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291
cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3Rv
cmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkKLXsKLSAg
ICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewot
ICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpKSB8fCAhaXNQb3cy
KG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXBy
ZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0g
bG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVswXS5n
ZXRIZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykK
LSAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0
KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdl
dFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUlt
YWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3Jh
Z2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwo
aSAtIDEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3Jh
Z2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwg
JiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0
dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGlm
IChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBtSW1hZ2VB
cnJheVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQoRDNEWExvYWRTdXJm
YWNlRnJvbVN1cmZhY2UobUltYWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBt
SW1hZ2VBcnJheVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9C
T1gsIDApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8g
bG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KQotewotICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwot
ICAgIH0KLQotICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlclByb3h5OwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0v
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1
cmZhY2U5ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQotewotICAg
IEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVu
ZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRl
eHR1cmUoKTsKLSAgICAKLSAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJl
Ci0gICAgaWYgKGlzRGVwdGgoMCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9
Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Ci19Ci0KLS8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVw
dGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0
ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgLy8gZW5zdXJl
IHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKCFpc0RlcHRoKDApKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBtVGV4U3RvcmFn
ZS0+Z2V0U3VyZmFjZUxldmVsKDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpn
ZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwg
KHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsK
LSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gbVRleFN0b3JhZ2U7Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3Jh
Z2VDdWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQg
c2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2Vy
aWFsKFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKLXsKLSAgICBtVGV4
dHVyZSA9IE5VTEw7Ci0gICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAgLy8gd2UgaGFuZGxl
IHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KLSAgICBpZiAo
c2l6ZSA+IDApCi0gICAgewotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0
dXJlKHNpemUsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVy
ZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6On5UZXh0dXJl
U3RvcmFnZUN1YmVNYXAoKQotewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1U
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
LUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJm
YWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZXMyZHg6OkNvbnZl
cnRDdWJlRmFjZShmYWNlVGFyZ2V0KSwgbGV2ZWwsICZzdXJmYWNlKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQot
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEJhc2VUZXh0
dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXVuc2lnbmVkIGludCBU
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
KSBjb25zdAotewotICAgIHJldHVybiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgKyBUZXh0dXJl
Q3ViZU1hcDo6ZmFjZUluZGV4KHRhcmdldCk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjpUZXh0dXJl
Q3ViZU1hcChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAgICBtVGV4U3RvcmFnZSA9IE5V
TEw7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBtRmFj
ZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSA9IDA7Ci0gICAg
fQotfQotCi1UZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKLXsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5V
TEw7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0g
TlVMTDsKLX0KLQotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMg
dG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUs
IHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZl
cmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8s
Ci0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0
IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVD
dWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGll
c1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQot
fQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94eVJl
ZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDApCi0gICAg
ICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVy
biBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRX
aWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0gICAgZWxzZQotICAg
ICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZv
cm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci19Ci0KLUQzREZPUk1BVCBUZXh0dXJlQ3ViZU1hcDo6
Z2V0RDNERm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlm
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0
dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047Ci19Ci0KLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0K
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgxLCBs
ZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJ
bWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsK
LSAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
UG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBp
eGVscykKLXsKLSAgICBzZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4
KGZhY2UpLCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsK
LQotICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1J
bWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEFTU0VS
VChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwotCi0gICAg
aWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3RMZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAgICAgIEFTU0VSVChkZXN0
TGV2ZWwgIT0gTlVMTCk7Ci0KLSAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
OwotICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpCi0gICAg
ewotICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAg
IGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRl
eCh0YXJnZXQpXVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgo
dGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0K
LX0KLQotLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5
WzBdWzBdLmdldFdpZHRoKCk7Ci0KLSAgICBib29sIG1pcG1hcHBpbmc7Ci0KLSAgICBzd2l0Y2gg
KG1NaW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBH
TF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVB
Ul9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgot
ICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgoZ2V0SW50ZXJu
YWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAm
JiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAg
ICAgKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkg
PT0gR0xfSEFMRl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGlu
ZWFyRmlsdGVyKCkpKQotICAgIHsKLSAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVT
VCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRDb250ZXh0
KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKGdldFdy
YXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VE
R0UgfHwgbWlwbWFwcGluZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtaXBtYXBwaW5nKQotICAgIHsKLSAgICAgICAg
aWYgKCFpc0N1YmVDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFpc01p
cG1hcEN1YmVDb21wbGV0ZSgpKSAgIC8vIEFsc28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBsZXRlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRlc3RzIGZvciBjdWJlIHRleHR1cmUgY29tcGxl
dGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wg
VGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobUltYWdl
QXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdo
dCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZhY2Ug
PCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0
V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEhl
aWdodCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRGb3JtYXQoKSAh
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJy
YXlbZmFjZV1bMF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNv
bXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHNpemUgPSBtSW1h
Z2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotCi0gICAgaW50IHEgPSBsb2cyKHNpemUpOwotCi0g
ICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFdpZHRo
KCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3Nl
ZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXNDb21w
cmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKLX0KLQotSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewot
ICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDog
TlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBm
cm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1J
bWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25M
ZXZlbHMoc2l6ZSwgMCk7Ci0gICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldEQzREZvcm1hdCgpOwotICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQz
ZGZtdCwgbVVzYWdlLCBmYWxzZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRl
eFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1
c2FnZSwgc2l6ZSk7Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsK
LSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBm
YWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBs
ZXZlbCk7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFn
ZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6dXBkYXRl
VGV4dHVyZSgpCi17Ci0gICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0g
ICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwotCi0gICAgICAg
ICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBUZXh0dXJl
U3RvcmFnZUN1YmVNYXAgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1JbWFnZUFy
cmF5WzBdWzBdLmdldFdpZHRoKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9
IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0gICAgICAgIEdMaW50IGxldmVscyA9IGNy
ZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdl
QXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgICAgIERXT1JEIGQzZHVzYWdlID0gR2V0
VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1
ZSk7Ci0KLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAo
bGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKLQotICAgICAgICBpZiAobVRleFN0b3Jh
Z2UgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291
bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGYsIGkpOwotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCA9IG5ld1RleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
Y29weVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgp
KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
bmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxl
YXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChz
b3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkg
ZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9
IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUlt
YWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0KLSAg
ICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdKTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpm
YWNlSW5kZXgoR0xlbnVtIGZhY2UpCi17Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDEpOwot
ICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAyKTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0g
Myk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCA9PSA1KTsKLQotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlLCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSB0eXBlKQotewotICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOwotCi0g
ICAgaWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAg
ICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0K
LSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJ
bmRleCh0YXJnZXQpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIGlmICghbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAgICAg
ICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9y
YWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0ubWFya0NsZWFuKCk7Ci0KLSAgICAgICAgQVNTRVJUKHdpZHRoID09
IGhlaWdodCk7Ci0KLSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICAgICAg
c291cmNlUmVjdC5sZWZ0ID0geDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsg
d2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwp
OwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAs
IDAsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotfQot
Ci12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAg
IEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0
V2lkdGgoKTsKLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBo
ZWlnaHQgPiBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3Vy
Y2UtPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgodGFyZ2V0KTsKLQotICAgIGlmICghbUltYWdl
QXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3Rv
cmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJh
eVtmYWNlaW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRl
clRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRl
clRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQo
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAg
ICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVD
VCBzb3VyY2VSZWN0OwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0
LnRvcCA9IHk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7Ci0K
LSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1
YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFy
Z2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwg
eW9mZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQotewotICAgIEdMZW51bSBmb3JtYXQgPSBn
bDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252
ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBEV09SRCBkM2R1c2FnZSA9
IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwotCi0gICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChs
ZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwot
Ci0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7
Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCBz
aXplLCBzaXplLCB0eXBlLCB0cnVlKTsKLSAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1heCgxLCBz
aXplID4+IDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZl
bHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQot
ICAgIHsKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmluZShHTF9O
T05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2
ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwg
NjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxl
dmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNl
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsKLSAgICAgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFj
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCi17Ci0gICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0g
ICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91
Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2
ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0
aCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5nZXRGb3Jt
YXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJy
YXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0VHlwZSgp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFn
ZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGYg
PSAwOyBmIDwgNjsgZisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGktMSk7Ci0gICAgICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNl
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dl
cik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5V
TEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwp
IGxvd2VyLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5t
YXJrQ2xlYW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5nZXRT
dXJmYWNlKCkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFn
ZUFycmF5W2ZdW2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbZl1baSAt
IDFdLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBm
aWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi1SZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRS
ZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGlu
dCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7Ci0KLSAgICBpZiAobUZhY2VQcm94aWVzW2ZhY2Vd
ID09IE5VTEwpCi0gICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVy
YnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwotfQotCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKElzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSk7Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVy
ZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAK
LSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgMCk7Ci19
Ci0KLVRleHR1cmVTdG9yYWdlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRl
clRhcmdldCkKLXsKLSAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1U
ZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJU
YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4
dHVyZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Rl
eHR1cmUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTNhMTYyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuaDog
RGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBk
ZXJpdmVkCi0vLyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVu
dHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJHTEVTVjJf
VEVYVFVSRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVkZSA8dmVj
dG9yPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNs
dWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21t
b24vUmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1j
bGFzcyBTdXJmYWNlOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBG
cmFtZWJ1ZmZlcjsKLQotZW51bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhl
IGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBHTCBjYXBzIGFy
ZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQgYmUgcXVlcmll
ZCBmcm9tIHRoZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9
IDE2Mzg0LAotICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAx
NjM4NCwKLQotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8g
MStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17Ci0gIHB1Ymxp
YzoKLSAgICBJbWFnZSgpOwotICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmluZShHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJv
b2wgZm9yY2VSZWxlYXNlKTsKLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30K
LSAgICB2b2lkIG1hcmtDbGVhbigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBib29sIGlzUmVu
ZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25z
dDsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9Ci0gICAg
R0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7cmV0dXJuIG1IZWlnaHQ7fQotICAgIEdMZW51bSBn
ZXRGb3JtYXQoKSBjb25zdCB7cmV0dXJuIG1Gb3JtYXQ7fQotICAgIEdMZW51bSBnZXRUeXBlKCkg
Y29uc3Qge3JldHVybiBtVHlwZTt9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBt
U3VyZmFjZSAmJiBtRGlydHk7fQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7
Ci0KLSAgICB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
KTsKLSAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
LQotICAgIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2b2lkIGxv
YWRBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRGF0YVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNl
QWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
LSAgICB2b2lkIGxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQg
bG9hZFJHQkhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRSR0JBVUJ5dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxv
YWRSR0JBVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTQ0
NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICppbnB1dCk7Ci0KLSAgICB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElE
aXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlKTsKLQotICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOwot
Ci0gICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNU
ICpyZWN0KTsKLSAgICB2b2lkIHVubG9jaygpOwotCi0gICAgR0xzaXplaSBtV2lkdGg7Ci0gICAg
R0xzaXplaSBtSGVpZ2h0OwotICAgIEdMZW51bSBtRm9ybWF0OwotICAgIEdMZW51bSBtVHlwZTsK
LQotICAgIGJvb2wgbURpcnR5OwotCi0gICAgRDNEUE9PTCBtRDNEUG9vbDsgICAvLyBjYW4gb25s
eSBiZSBEM0RQT09MX1NZU1RFTU1FTSBvciBEM0RQT09MX01BTkFHRUQgc2luY2UgaXQgbmVlZHMg
dG8gYmUgbG9ja2FibGUuCi0gICAgRDNERk9STUFUIG1EM0RGb3JtYXQ7Ci0KLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbVN1cmZhY2U7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZQotewotICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpOwotCi0gICAg
dmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UoKTsKLQotICAgIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBj
b25zdDsKLSAgICBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIEQzRFBPT0wgZ2V0UG9vbCgp
IGNvbnN0OwotICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdl
dFRleHR1cmVTZXJpYWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QgPSAwOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKLQotICAgIGNvbnN0
IERXT1JEIG1EM0RVc2FnZTsKLSAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwotCi0gICAgY29u
c3QgdW5zaWduZWQgaW50IG1UZXh0dXJlU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
aXNzdWVUZXh0dXJlU2VyaWFsKCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50
VGV4dHVyZVNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmpl
Y3QKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsKLQotICAg
IHZpcnR1YWwgflRleHR1cmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94
eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRUYXJnZXQoKSBjb25zdCA9IDA7Ci0KLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmls
dGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNl
dFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAg
ICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7Ci0KLSAgICBHTGVudW0gZ2V0TWluRmlsdGVy
KCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwotICAgIEdMZW51bSBn
ZXRXcmFwUygpIGNvbnN0OwotICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwotICAgIEdMZW51
bSBnZXRVc2FnZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRl
KCkgY29uc3QgPSAwOwotCi0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7
Ci0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKSA9IDA7Ci0KLSAgICBib29sIGhh
c0RpcnR5UGFyYW1ldGVycygpIGNvbnN0OwotICAgIGJvb2wgaGFzRGlydHlJbWFnZXMoKSBjb25z
dDsKLSAgICB2b2lkIHJlc2V0RGlydHkoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNl
cmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRh
cmdldCk7Ci0KLSAgICBib29sIGlzSW1tdXRhYmxlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29u
c3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEp
OyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZh
bHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUg
cmVzb3VyY2UgbWFuYWdlci4KLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFnZShHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAg
ICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgdm9p
ZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
YWdlKTsKLQotICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KSBjb25zdDsKLSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJl
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAq
Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAgIGludCBsZXZlbENvdW50
KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgQmxpdCAqZ2V0QmxpdHRlcigpOwotICAgIHN0YXRpYyBi
b29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNE
U3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7Ci0KLSAgICBHTGVudW0gbU1pbkZp
bHRlcjsKLSAgICBHTGVudW0gbU1hZ0ZpbHRlcjsKLSAgICBHTGVudW0gbVdyYXBTOwotICAgIEdM
ZW51bSBtV3JhcFQ7Ci0gICAgYm9vbCBtRGlydHlQYXJhbWV0ZXJzOwotICAgIEdMZW51bSBtVXNh
Z2U7Ci0KLSAgICBib29sIG1EaXJ0eUltYWdlczsKLQotICAgIGJvb2wgbUltbXV0YWJsZTsKLQot
ICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKLQotICAg
IHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0g
MDsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UK
LXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4
dHVyZTkgKnN1cmZhY2VUZXh0dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMs
IEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwot
Ci0gICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQotICAgIElE
aXJlY3QzRFRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRl
clRhcmdldFNlcmlhbDsKLX07Ci0KLWNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCi17
Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQotICAgIH5U
ZXh0dXJlMkQoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIEdMc2l6ZWkg
Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwp
IGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Owot
ICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBib29sIGlzRGVw
dGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBz
ZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUlt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVh
bCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFnZShHTHNp
emVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgYmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdl
bmVyYXRlTWlwbWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJl
bmRlcmJ1ZmZlclRleHR1cmUyRDsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyRCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgYm9vbCBpc01p
cG1hcENvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
dHlwZSk7Ci0gICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICBJbWFn
ZSBtSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAg
VGV4dHVyZVN0b3JhZ2UyRCAqbVRleFN0b3JhZ2U7Ci0gICAgZWdsOjpTdXJmYWNlICptU3VyZmFj
ZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtlcHQg
Zm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMgdGhl
IHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9p
bnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1
bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVyZS4g
VGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQgdG8g
TlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1
c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1Db2xv
cmJ1ZmZlclByb3h5OwotICAgIHVuc2lnbmVkIGludCBtUHJveHlSZWZzOwotfTsKLQotY2xhc3Mg
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1Ymxp
YzoKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1h
dCwgRFdPUkQgdXNhZ2UsIGludCBzaXplKTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdl
Q3ViZU1hcCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdM
ZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
Z2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJl
bmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOwotCi0gICAg
SURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBw
dWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZUN1YmVNYXAo
R0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBhZGRQcm94
eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdl
dCgpIGNvbnN0OwotICAgIAotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIGJvb2wgaXNDb21wcmVzc2VkKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2VQb3NY
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1koR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAg
IHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBz
ZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2Us
IEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2b2lkIHN1
YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwot
ICAgIHZvaWQgY29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJh
bWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpOwotICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHNpemUpOwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBs
ZXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7Ci0KLSAg
ICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOwot
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwotCi0gIHBy
b3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7Ci0g
ICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVD
dWJlTWFwKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4
dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29s
IHJlbmRlclRhcmdldCk7Ci0KLSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShp
bnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50
IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIHR5cGUpOwotCi0gICAgSW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTXTsKLQotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAqbVRleFN0b3Jh
Z2U7Ci0KLSAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0
IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRo
ZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBv
aW50ZXIKLSAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJj
dWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUu
IFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRv
IE5VTEwgaWYKLSAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNh
dXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptRmFj
ZVByb3hpZXNbNl07Ci0gICAgdW5zaWduZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsKLX07Ci19
Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hfClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNzBmNDc1Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4NCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBWZXJ0ZXhEYXRhTWFuYWdlci5oOiBEZWZpbmVz
IHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIg
dHJhbnNsYXRpb24gcHJvY2Vzcy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFu
YWdlci5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLW5hbWVzcGFjZQotewotICAgIGVudW0geyBJTklU
SUFMX1NUUkVBTV9CVUZGRVJfU0laRSA9IDEwMjQqMTAyNCB9OwotICAgIC8vIFRoaXMgaGFzIHRv
IGJlIGF0IGxlYXN0IDRrIG9yIGVsc2UgaXQgZmFpbHMgb24gQVRJIGNhcmRzLgotICAgIGVudW0g
eyBDT05TVEFOVF9WRVJURVhfQlVGRkVSX1NJWkUgPSA0MDk2IH07Ci19Ci0KLW5hbWVzcGFjZSBn
bAotewotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAxOwotCi1p
bnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgaW50
IHNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IGF0dHJpYnV0ZS5zdHJpZGUoKTsKLSAgICByZXR1
cm4gKHNpemUgLSBhdHRyaWJ1dGUubU9mZnNldCAlIHN0cmlkZSArIChzdHJpZGUgLSBhdHRyaWJ1
dGUudHlwZVNpemUoKSkpIC8gc3RyaWRlOwotfQotCi1WZXJ0ZXhEYXRhTWFuYWdlcjo6VmVydGV4
RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6
IG1Db250ZXh0KGNvbnRleHQpLCBtRGV2aWNlKGRldmljZSkKLXsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbURpcnR5Q3Vy
cmVudFZhbHVlW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXSA9IE5V
TEw7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gMDsKLSAgICB9Ci0KLSAgICBj
b25zdCBEM0RDQVBTOSAmY2FwcyA9IGNvbnRleHQtPmdldERldmljZUNhcHMoKTsKLSAgICBjaGVj
a1ZlcnRleENhcHMoY2Fwcy5EZWNsVHlwZXMpOwotCi0gICAgbVN0cmVhbWluZ0J1ZmZlciA9IG5l
dyBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9TVFJFQU1fQlVGRkVSX1NJ
WkUpOwotCi0gICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJG
YWlsZWQgdG8gYWxsb2NhdGUgdGhlIHN0cmVhbWluZyB2ZXJ0ZXggYnVmZmVyLiIpOwotICAgIH0K
LX0KLQotVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCi17Ci0gICAgZGVs
ZXRlIG1TdHJlYW1pbmdCdWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1DdXJyZW50VmFsdWVCdWZm
ZXJbaV07Ci0gICAgfQotfQotCi1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6d3JpdGVB
dHRyaWJ1dGVEYXRhKEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50IHN0YXJ0
LCBHTHNpemVpIGNvdW50LCBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXpl
aSBpbnN0YW5jZXMpCi17Ci0gICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJ1dGUubUJvdW5kQnVm
ZmVyLmdldCgpOwotCi0gICAgaW50IGlucHV0U3RyaWRlID0gYXR0cmlidXRlLnN0cmlkZSgpOwot
ICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYnV0ZS50eXBlU2l6ZSgpOwotICAgIGNvbnN0IEZv
cm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnV0ZSk7Ci0g
ICAgc3RkOjpzaXplX3Qgc3RyZWFtT2Zmc2V0ID0gMDsKLQotICAgIHZvaWQgKm91dHB1dCA9IE5V
TEw7Ci0gICAgCi0gICAgaWYgKHZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG91dHB1dCA9
IHZlcnRleEJ1ZmZlci0+bWFwKGF0dHJpYnV0ZSwgc3BhY2VSZXF1aXJlZChhdHRyaWJ1dGUsIGNv
dW50LCBpbnN0YW5jZXMpLCAmc3RyZWFtT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBpZiAob3V0cHV0
ID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZl
ci4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIgKmlucHV0
ID0gTlVMTDsKLQotICAgIGlmIChidWZmZXIpCi0gICAgewotICAgICAgICBpbnQgb2Zmc2V0ID0g
YXR0cmlidXRlLm1PZmZzZXQ7Ci0KLSAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oYnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWJ1dGUubVBvaW50
ZXIpOwotICAgIH0KLQotICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWJ1dGUubURpdmlz
b3IgPT0gMCkKLSAgICB7Ci0gICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7Ci0g
ICAgfQotCi0gICAgaWYgKGNvbnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVt
ZW50U2l6ZSkKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGlu
cHV0U3RyaWRlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29udmVydGVyLmNv
bnZlcnRBcnJheShpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwotICAgIH0KLQot
ICAgIHZlcnRleEJ1ZmZlci0+dW5tYXAoKTsKLQotICAgIHJldHVybiBzdHJlYW1PZmZzZXQ7Ci19
Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQsIEdMc2l6
ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAgIGNvbnN0IFZlcnRleEF0
dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsK
LSAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0g
ICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5h
cnkoKTsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXgg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAgICB0
cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2Vt
YW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOwotICAgIH0KLQotICAgIC8vIERldGVy
bWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFs
aWRhdGUgc3RhdGljIGJ1ZmZlcnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0
ZXMKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0ubUFycmF5
RW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJz
W2ldLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAq
c3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6
IE5VTEw7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+c2l6ZSgpID09IDApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1lbnRzSW5C
dWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBz
dGF0aWNCdWZmZXItPmFkZFJlcXVpcmVkU3BhY2Uoc3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCB0
b3RhbENvdW50LCAwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRlKGF0dHJpYnNbaV0pID09IC0xKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGF0aWMgYnVmZmVy
IGRvZXNuJ3QgaGF2ZSBtYXRjaGluZyBhdHRyaWJ1dGVzLCBzbyBmYWxsIGJhY2sgdG8gdXNpbmcg
dGhlIHN0cmVhbWluZyBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBzcGFj
ZSBvZiBhbGwgcHJldmlvdXMgYXR0cmlidXRlcyBiZWxvbmdpbmcgdG8gdGhlIGludmFsaWRhdGVk
IHN0YXRpYyBidWZmZXIgdG8gdGhlIHN0cmVhbWluZyBidWZmZXIKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgcHJldmlvdXMgPSAwOyBwcmV2aW91cyA8IGk7IHByZXZpb3VzKyspCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVk
W3ByZXZpb3VzXS5hY3RpdmUgJiYgYXR0cmlic1twcmV2aW91c10ubUFycmF5RW5hYmxlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZm
ZXIgKnByZXZpb3VzQnVmZmVyID0gYXR0cmlic1twcmV2aW91c10ubUJvdW5kQnVmZmVyLmdldCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAqcHJldmlv
dXNTdGF0aWNCdWZmZXIgPSBwcmV2aW91c0J1ZmZlciA/IHByZXZpb3VzQnVmZmVyLT5nZXRTdGF0
aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGljQnVmZmVyID09IHByZXZpb3VzU3RhdGljQnVmZmVyKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0cmVhbWlu
Z0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNbcHJldmlvdXNd
LCBjb3VudCwgaW5zdGFuY2VzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgbVN0cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVp
cmVkKGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0YW5jZXMpKTsKLQotICAgICAgICAgICAgICAgICAg
ICBidWZmZXItPmludmFsaWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSAgICAK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtU3RyZWFtaW5nQnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHNwYWNlUmVxdWlyZWQo
YXR0cmlic1tpXSwgY291bnQsIGluc3RhbmNlcykpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gUmVzZXJ2ZSB0aGUgcmVxdWlyZWQgc3BhY2UgcGVyIHVzZWQgYnVm
ZmVyCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAg
ICB7Ci0gICAgICAgIGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJh
eUVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmli
c1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0gICAgICAgICAgICBBcnJheVZlcnRleEJ1ZmZlciAq
c3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6
IE5VTEw7Ci0gICAgICAgICAgICBBcnJheVZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyID0gc3Rh
dGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogbVN0cmVhbWluZ0J1ZmZlcjsKLQotICAgICAgICAg
ICAgaWYgKHZlcnRleEJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZXJ0
ZXhCdWZmZXItPnJlc2VydmVSZXF1aXJlZFNwYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBQZXJmb3JtIHRoZSB2ZXJ0ZXggZGF0YSB0cmFuc2xhdGlvbnMK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsK
LSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoYXR0cmlic1tpXS5tQXJyYXlFbmFibGVkKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlciAmJiBhdHRyaWJzW2ldLm1Qb2ludGVyID09IE5V
TEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGFwcGxpY2F0aW9uIGVycm9yIHRoYXQgd291bGQgbm9ybWFsbHkgcmVzdWx0IGluIGEgY3Jhc2gs
IGJ1dCB3ZSBjYXRjaCBpdCBhbmQgcmV0dXJuIGFuIGVycm9yCi0gICAgICAgICAgICAgICAgICAg
IEVSUigiQW4gZW5hYmxlZCB2ZXJ0ZXggYXJyYXkgaGFzIG5vIGJ1ZmZlciBhbmQgbm8gcG9pbnRl
ci4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdENvbnZlcnRl
ciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnNbaV0pOwotCi0gICAgICAgICAg
ICAgICAgU3RhdGljVmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZmZXIt
PmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBBcnJheVZl
cnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDog
c3RhdGljX2Nhc3Q8QXJyYXlWZXJ0ZXhCdWZmZXIqPihtU3RyZWFtaW5nQnVmZmVyKTsKLQotICAg
ICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IHN0cmVhbU9mZnNldCA9IC0xOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0cmVhbU9mZnNldCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRlKGF0dHJp
YnNbaV0pOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgPT0gLTEpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQg
dGhlIGVudGlyZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50
ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0
dHJpYnNbaV0uc3RyaWRlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNl
dCA9IHdyaXRlQXR0cmlidXRlRGF0YShzdGF0aWNCdWZmZXIsIC1zdGFydEluZGV4LCB0b3RhbENv
dW50LCBhdHRyaWJzW2ldLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCArPSAoYXR0cmlic1tpXS5tT2Zm
c2V0IC8gYXR0cmlic1tpXS5zdHJpZGUoKSkgKiBjb252ZXJ0ZXIub3V0cHV0RWxlbWVudFNpemU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWJz
W2ldLm1EaXZpc29yID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ICs9IHN0YXJ0ICogY29udmVydGVyLm91dHB1
dEVsZW1lbnRTaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHdyaXRlQXR0cmli
dXRlRGF0YShtU3RyZWFtaW5nQnVmZmVyLCBzdGFydCwgY291bnQsIGF0dHJpYnNbaV0sIGluc3Rh
bmNlcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN0cmVhbU9m
ZnNldCA9PSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHRyYW5zbGF0ZWRbaV0udmVydGV4QnVmZmVyID0gdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsK
LSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnNlcmlhbCA9IHZlcnRleEJ1ZmZlci0+Z2V0
U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmli
c1tpXS5tRGl2aXNvcjsKLQotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9IGNv
bnZlcnRlci5kM2REZWNsVHlwZTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlk
ZSA9IGNvbnZlcnRlci5vdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAgICAgICAgICB0cmFuc2xh
dGVkW2ldLm9mZnNldCA9IHN0cmVhbU9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1DdXJyZW50VmFsdWVC
dWZmZXJbaV0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVu
dFZhbHVlQnVmZmVyW2ldID0gbmV3IFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihtRGV2aWNlLCBDT05T
VEFOVF9WRVJURVhfQlVGRkVSX1NJWkUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciAqYnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZl
cltpXTsKLQotICAgICAgICAgICAgICAgIGlmIChtRGlydHlDdXJyZW50VmFsdWVbaV0pCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVxdWlyZWRTcGFj
ZSA9IDQgKiBzaXplb2YoZmxvYXQpOwotICAgICAgICAgICAgICAgICAgICBidWZmZXItPmFkZFJl
cXVpcmVkU3BhY2UocmVxdWlyZWRTcGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+
cmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmRhdGEg
PSBzdGF0aWNfY2FzdDxmbG9hdCo+KGJ1ZmZlci0+bWFwKFZlcnRleEF0dHJpYnV0ZSgpLCByZXF1
aXJlZFNwYWNlLCAmbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0pKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhWzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzFdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsyXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFs
dWVbM107Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnVubWFwKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtRGlydHlDdXJyZW50VmFsdWVbaV0gPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRyYW5z
bGF0ZWRbaV0udmVydGV4QnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXS0+Z2V0QnVmZmVy
KCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zZXJpYWwgPSBtQ3VycmVudFZhbHVl
QnVmZmVyW2ldLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmRp
dmlzb3IgPSAwOwotCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50eXBlID0gRDNEREVD
TFRZUEVfRkxPQVQ0OwotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsK
LSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZz
ZXRzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh0
cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIu
Z2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBhdHRyaWJzW2ldLnR5
cGVTaXplKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IEdMX05PX0VSUk9SOwotfQotCi1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6c3BhY2VS
ZXF1aXJlZChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzKSBjb25zdAotewotICAgIHNpemVfdCBlbGVtZW50U2l6ZSA9IGZv
cm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgaWYgKGluc3Rh
bmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVsZW1lbnRTaXplICogY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlbGVtZW50U2l6ZSAqICgoaW5zdGFuY2VzICsgYXR0cmliLm1EaXZpc29yIC0gMSkgLyBh
dHRyaWIubURpdmlzb3IpOwotICAgIH0KLX0KLQotLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2
ZXJ0ZXggYXR0cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAgICAgICAg
ICAgICAgICBTSE9SVCAoQ2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3Jt
YWxpemUpIChjYW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCi0vLyBV
TlNJR05FRF9CWVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKLS8v
IFVOU0lHTkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFs
aXplKQotLy8gU0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8gU0hPUlQt
bm9ybSAgICAgICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUp
Ci0vLyBVTlNJR05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX1NIT1JU
LW5vcm0gIFVTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIEZJ
WEVEIChub3QgaW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAgICAgICAg
ICAgICAgICBGTE9BVCAoSWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlw
ZSAoYXMgR0xlbnVtKSB0byB0aGUgQyB0eXBlZGVmLiAKLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBl
PiBzdHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9CWVRFPiB7IHR5cGVkZWYgR0xieXRlIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xU
b0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+IHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiB7IHR5cGVkZWYgR0xzaG9ydCB0eXBl
OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0
eXBlZGVmIEdMdXNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdM
X0ZJWEVEPiB7IHR5cGVkZWYgR0x1aW50IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xU
b0NUeXBlPEdMX0ZMT0FUPiB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyB9OwotCi0vLyBUaGlzIGRp
ZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFu
c2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNEVlRf
RkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBEM0RW
VF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JNCi19
OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNE
VmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVuc2ln
bmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQg
dHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+
IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8
RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQg
Y2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JU
X05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUgdGhl
IHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9z
aXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3By
aWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4K
LXN0cnVjdCBXaWRlblJ1bGUKLXsKLX07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6Tm9XaWRlbjxzaXplPiB7
IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNp
emU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQg
c2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBnbDo6
V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5S
dWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7
IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9S
TSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQg
c2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAgOiBnbDo6
V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUg
RDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBl
YWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8dW5zaWdu
ZWQgaW50IGQzZHR5cGUsIGludCBzaXplPgotc3RydWN0IFZlcnRleFR5cGVGbGFncwotewotfTsK
LQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjYXBmbGFnLCB1bnNpZ25lZCBpbnQgZGVjbGZsYWc+
Ci1zdHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBj
YXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gZGVjbGZsYWcgfTsKLX07Ci0KLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlw
ZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMT4geyB9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxw
ZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RE
RUNMVFlQRV9GTE9BVDM+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfRkxPQVQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZM
T0FUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9S
VCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZl
cnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwg
ND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBF
X1NIT1JUNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
VUJZVEUsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERF
Q0xUWVBFX1VCWVRFND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxE
M0RWVF9VQllURV9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZ
VEU0TiwgRDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
RDNERFRDQVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4g
eyB9OwotCi0KLS8vIFZlcnRleFR5cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQg
ZmxhZyB0byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZl
cnRleFR5cGUgZW51bXMpLgotdGVtcGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXpl
ZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZwotewotfTsKLQotdGVtcGxhdGUgPEQzRFZlcnRl
eFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVkPgotc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nQmFzZQotewotICAgIGVudW0geyBwcmVmZXJyZWQgPSBQcmVm
ZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFsbGJhY2sgPSBGYWxsYmFjayB9OwotfTsKLQotdGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAgICAgICAg
ICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAg
ICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhU
eXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8v
IE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lH
TkVEX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwgQ2FzdAot
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRy
dWU+ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFX05P
Uk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCi10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAgICAgICAg
ICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAg
IC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5n
PEdMX1VOU0lHTkVEX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIHRy
dWU+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05P
Uk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPGJv
b2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBub3JtYWxp
emVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGaXhlZFRvRmxvYXQKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6IFZlcnRl
eFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWRlbnRpdHkKLQotCi0vLyBHaXZlbiBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNE
IHR5cGUsIENvbnZlcnNpb25SdWxlIHByb3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAo
Q2FzdCwgTm9ybWFsaXplLCBJZGVudGl0eSwgRml4ZWRUb0Zsb2F0KS4KLS8vIFRoZSBjb252ZXJz
aW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lvbi5oLgot
Ci0vLyBBbG1vc3QgYWxsIGNhc2VzIGFyZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGluZyB0aG9z
ZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVudGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3MgaXQncyBh
biBpZGVudGl0eSBtYXBwaW5nKS4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9y
bWFsaXplZCwgdW5zaWduZWQgaW50IHRvVHlwZT4KLXN0cnVjdCBDb252ZXJzaW9uUnVsZSA6IGds
OjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRv
Q1R5cGU8dG9UeXBlPjo6dHlwZT4KLXsKLX07Ci0KLS8vIEFsbCBjb252ZXJzaW9ucyBmcm9tIG5v
cm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3BlcmF0b3IuCi10ZW1w
bGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRy
dWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21U
eXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlz
IHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBu
b3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1
bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZh
bHNlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotCi0v
LyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMg
YmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKLS8v
IHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9v
bCBub3JtYWxpemVkPgotc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKLXsKLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0
cnVlPiAgOiBnbDo6Tm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IGdsOjpT
aW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFs
dWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZCAKLXRl
bXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgRGVmYXVsdFZlcnRleFZh
bHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4KLXsKLX07Ci0K
LXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZs
b2F0LCBub3JtYWxpemVkPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07Ci0K
LS8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhl
ciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8gVGhlIGZh
bGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNl
cyBtdXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7
IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3Ry
dWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9OwotCi0vLyBD
b252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0v
c2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAotLy8gaXQg
cHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29u
dmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0vLyBhbmQg
dGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24g
aW4gZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQs
IGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+Ci1zdHJ1
Y3QgQ29udmVydGVyCi0gICAgOiBnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRv
Q1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lk
ZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFs
aXplZD4gPjo6dHlwZSwgc2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252
ZXJzaW9uUnVsZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5v
cm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVs
dFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhU
eXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6
ZWQgPiA+Ci17Ci1wcml2YXRlOgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8
IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07Ci0gICAg
ZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsK
LQotcHVibGljOgotICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUs
IGQzZHNpemU+OjpjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZs
YWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlhbGlzZSBh
IFRyYW5zbGF0aW9uSW5mbwotI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwg
cHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6
ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUs
IHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBD
b252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAotICAg
ICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAg
XAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAg
ICAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIp
LCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAgIH0KLQot
I2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAg
ICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4RGF0YU1h
bmFnZXI6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVydGV4RGF0YU1hbmFnZXI6Om1Qb3NzaWJs
ZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wg
dHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQot
ewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdM
X1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAot
ICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKLSAgICBUUkFOU0xB
VElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0KLXZvaWQgVmVydGV4RGF0YU1h
bmFnZXI6OmNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1b
al1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25z
W2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25z
W2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1B
dHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5m
YWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotfQotCi0vLyBUaGlzIGlzIHVzZWQgdG8gaW5kZXggbUF0dHJpYnV0ZVR5
cGVzIGFuZCBtUG9zc2libGVUcmFuc2xhdGlvbnMuCi11bnNpZ25lZCBpbnQgVmVydGV4RGF0YU1h
bmFnZXI6OnR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GSVhF
RDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1WZXJ0ZXhCdWZmZXI6
OlZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUs
IERXT1JEIHVzYWdlRmxhZ3MpIDogbURldmljZShkZXZpY2UpLCBtVmVydGV4QnVmZmVyKE5VTEwp
Ci17Ci0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0
RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKHVzYWdlRmxhZ3MpOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIHVzYWdlRmxhZ3MsIDAsIHBv
b2wsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFs
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBv
ZiBzaXplICVsdS4iLCBzaXplKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4QnVmZmVy
Ojp+VmVydGV4QnVmZmVyKCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVmVydGV4QnVm
ZmVyOjp1bm1hcCgpCi17Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBt
VmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFZlcnRleEJ1ZmZl
cjkgKlZlcnRleEJ1ZmZlcjo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVZlcnRl
eEJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZl
cjo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwotfQotCi1B
cnJheVZlcnRleEJ1ZmZlcjo6QXJyYXlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKSA6IFZlcnRleEJ1ZmZlcihk
ZXZpY2UsIHNpemUsIHVzYWdlRmxhZ3MpCi17Ci0gICAgbUJ1ZmZlclNpemUgPSBzaXplOwotICAg
IG1Xcml0ZVBvc2l0aW9uID0gMDsKLSAgICBtUmVxdWlyZWRTcGFjZSA9IDA7Ci19Ci0KLUFycmF5
VmVydGV4QnVmZmVyOjp+QXJyYXlWZXJ0ZXhCdWZmZXIoKQotewotfQotCi12b2lkIEFycmF5VmVy
dGV4QnVmZmVyOjphZGRSZXF1aXJlZFNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSkKLXsKLSAgICBt
UmVxdWlyZWRTcGFjZSArPSByZXF1aXJlZFNwYWNlOwotfQotCi1TdHJlYW1pbmdWZXJ0ZXhCdWZm
ZXI6OlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6
c2l6ZV90IGluaXRpYWxTaXplKSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgaW5pdGlhbFNp
emUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpCi17Ci19Ci0KLVN0cmVh
bWluZ1ZlcnRleEJ1ZmZlcjo6flN0cmVhbWluZ1ZlcnRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQg
KlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6bWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KQotewot
ICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0KLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhtV3JpdGVQb3Np
dGlvbiwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAqb2Zmc2V0ID0gbVdyaXRlUG9z
aXRpb247Ci0gICAgICAgIG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6OnJl
c2VydmVSZXF1aXJlZFNwYWNlKCkKLXsKLSAgICBpZiAobVJlcXVpcmVkU3BhY2UgPiBtQnVmZmVy
U2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4QnVm
ZmVyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgo
bVJlcXVpcmVkU3BhY2UsIDMgKiBtQnVmZmVyU2l6ZSAvIDIpOyAgIC8vIDEuNSB4IG1CdWZmZXJT
aXplIGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdlIGRvbid0IGhh
dmUgdG9vIG1hbnkgcmVhbGxvY2F0aW9ucy4KLQotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXRE
aXNwbGF5KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRF
T05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4QnVm
ZmVyKG1CdWZmZXJTaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCAw
LCBwb29sLCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNl
cmlhbCgpOwotICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBv
ZiBzaXplICVsdS4iLCBtQnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtV3JpdGVQ
b3NpdGlvbiA9IDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgbVJlcXVp
cmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkgICAvLyBSZWN5Y2xlCi0gICAgewotICAgICAgICBpZiAo
bVZlcnRleEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAg
ICAgICAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJE
KTsKLSAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbVdyaXRlUG9zaXRpb24gPSAwOwotICAgIH0KLQotICAgIG1SZXF1aXJlZFNwYWNlID0g
MDsKLX0KLQotU3RhdGljVmVydGV4QnVmZmVyOjpTdGF0aWNWZXJ0ZXhCdWZmZXIoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlKSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgMCwgRDNEVVNBR0Vf
V1JJVEVPTkxZKQotewotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXI6On5TdGF0aWNWZXJ0ZXhCdWZm
ZXIoKQotewotfQotCi12b2lkICpTdGF0aWNWZXJ0ZXhCdWZmZXI6Om1hcChjb25zdCBWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYnV0ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXpl
X3QgKnN0cmVhbU9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0gICAgaWYg
KG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhC
dWZmZXItPkxvY2sobVdyaXRlUG9zaXRpb24sIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIsIDApOwot
ICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGF0dHJpYnV0ZU9m
ZnNldCA9IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpOwotICAgICAgICBW
ZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7YXR0cmlidXRlLm1UeXBlLCBhdHRyaWJ1dGUubVNpemUs
IGF0dHJpYnV0ZS5zdHJpZGUoKSwgYXR0cmlidXRlLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZz
ZXQsIG1Xcml0ZVBvc2l0aW9ufTsKLSAgICAgICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsK
LQotICAgICAgICAqc3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0
ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsK
LX0KLQotdm9pZCBTdGF0aWNWZXJ0ZXhCdWZmZXI6OnJlc2VydmVSZXF1aXJlZFNwYWNlKCkKLXsK
LSAgICBpZiAoIW1WZXJ0ZXhCdWZmZXIgJiYgbUJ1ZmZlclNpemUgPT0gMCkKLSAgICB7Ci0gICAg
ICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9X
UklURU9OTFkpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRl
eEJ1ZmZlcihtUmVxdWlyZWRTcGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBwb29sLCAmbVZl
cnRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOwotCi0g
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJP
dXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIG1S
ZXF1aXJlZFNwYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gbVJlcXVp
cmVkU3BhY2U7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1WZXJ0ZXhCdWZmZXIgJiYgbUJ1ZmZlclNp
emUgPj0gbVJlcXVpcmVkU3BhY2UpCi0gICAgewotICAgICAgICAvLyBBbHJlYWR5IGFsbG9jYXRl
ZAotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU3RhdGljIHZlcnRleCBidWZm
ZXJzIGNhbid0IGJlIHJlc2l6ZWQKLQotICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKLX0KLQotc3Rk
OjpzaXplX3QgU3RhdGljVmVydGV4QnVmZmVyOjpsb29rdXBBdHRyaWJ1dGUoY29uc3QgVmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudCA9
IDA7IGVsZW1lbnQgPCBtQ2FjaGUuc2l6ZSgpOyBlbGVtZW50KyspCi0gICAgewotICAgICAgICBp
ZiAobUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCi0gICAgICAgICAg
ICBtQ2FjaGVbZWxlbWVudF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKLSAgICAgICAgICAg
IG1DYWNoZVtlbGVtZW50XS5zdHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYmCi0gICAgICAg
ICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5vcm1hbGl6ZWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmlidXRlT2Zm
c2V0ID09IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVbZWxlbWVudF0uc3RyZWFtT2Zmc2V0
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQot
Ci1jb25zdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhEYXRhTWFu
YWdlcjo6Zm9ybWF0Q29udmVydGVyKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKSBj
b25zdAotewotICAgIHJldHVybiBtQXR0cmlidXRlVHlwZXNbdHlwZUluZGV4KGF0dHJpYnV0ZS5t
VHlwZSldW2F0dHJpYnV0ZS5tTm9ybWFsaXplZF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRl
eERhdGFNYW5hZ2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Zl
cnRleERhdGFNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NzU5MWEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0
ZXhEYXRhTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIFZlcnRleERhdGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIFZlcnRleERh
dGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKLS8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBw
cm9jZXNzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXwotI2RlZmlu
ZSBMSUJHTEVTVjJfVkVSVEVYREFUQU1BTkFHRVJfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNp
bmNsdWRlIDxjc3RkZGVmPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAot
ewotCi1zdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZQotewotICAgIGJvb2wgYWN0aXZlOwotCi0g
ICAgRDNEREVDTFRZUEUgdHlwZTsKLSAgICBVSU5UIG9mZnNldDsKLSAgICBVSU5UIHN0cmlkZTsg
ICAvLyAwIG1lYW5zIG5vdCB0byBhZHZhbmNlIHRoZSByZWFkIHBvaW50ZXIgYXQgYWxsCi0KLSAg
ICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICp2ZXJ0ZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50
IHNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgZGl2aXNvcjsKLX07Ci0KLWNsYXNzIFZlcnRleEJ1
ZmZlcgotewotICBwdWJsaWM6Ci0gICAgVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRl
dmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0gICAgdmlydHVhbCB+
VmVydGV4QnVmZmVyKCk7Ci0KLSAgICB2b2lkIHVubWFwKCk7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0
ZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFs
KCkgY29uc3Q7Ci0KLSAgcHJvdGVjdGVkOgotICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1E
ZXZpY2U7Ci0gICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1ZmZlcjsKLQotICAg
IHVuc2lnbmVkIGludCBtU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJp
YWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwotCi0gIHByaXZh
dGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcik7Ci19OwotCi1j
bGFzcyBBcnJheVZlcnRleEJ1ZmZlciA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVibGlj
OgotICAgIEFycmF5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpz
aXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0gICAgfkFycmF5VmVydGV4QnVmZmVyKCk7
Ci0KLSAgICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgKm1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwg
c3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNldCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgpID0gMDsKLSAgICB2b2lk
IGFkZFJlcXVpcmVkU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlKTsKLQotICBwcm90ZWN0ZWQ6Ci0g
ICAgc3RkOjpzaXplX3QgbUJ1ZmZlclNpemU7Ci0gICAgc3RkOjpzaXplX3QgbVdyaXRlUG9zaXRp
b247Ci0gICAgc3RkOjpzaXplX3QgbVJlcXVpcmVkU3BhY2U7Ci19OwotCi1jbGFzcyBTdHJlYW1p
bmdWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgQXJyYXlWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVibGljOgot
ICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6
c2l6ZV90IGluaXRpYWxTaXplKTsKLSAgICB+U3RyZWFtaW5nVmVydGV4QnVmZmVyKCk7Ci0KLSAg
ICB2b2lkICptYXAoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6c2l6ZV90
IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpzdHJlYW1PZmZzZXQpOwotICAgIHZvaWQgcmVz
ZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLX07Ci0KLWNsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZlciA6IHB1
YmxpYyBBcnJheVZlcnRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RhdGlj
VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7Ci0gICAgflN0YXRpY1ZlcnRl
eEJ1ZmZlcigpOwotCi0gICAgdm9pZCAqbWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqc3RyZWFtT2Zmc2V0
KTsKLSAgICB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNlKCk7Ci0KLSAgICBzdGQ6OnNpemVfdCBs
b29rdXBBdHRyaWJ1dGUoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOyAgIC8vIFJl
dHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSB2ZXJ0ZXggYnVmZmVyLCBvciAtMSBpZiBub3QgZm91
bmQKLQotICBwcml2YXRlOgotICAgIHN0cnVjdCBWZXJ0ZXhFbGVtZW50Ci0gICAgewotICAgICAg
ICBHTGVudW0gdHlwZTsKLSAgICAgICAgR0xpbnQgc2l6ZTsKLSAgICAgICAgR0xzaXplaSBzdHJp
ZGU7Ci0gICAgICAgIGJvb2wgbm9ybWFsaXplZDsKLSAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNl
dDsKLQotICAgICAgICBzdGQ6OnNpemVfdCBzdHJlYW1PZmZzZXQ7Ci0gICAgfTsKLQotICAgIHN0
ZDo6dmVjdG9yPFZlcnRleEVsZW1lbnQ+IG1DYWNoZTsKLX07Ci0KLWNsYXNzIFZlcnRleERhdGFN
YW5hZ2VyCi17Ci0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250
ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpiYWNrZW5kKTsKLSAgICB2aXJ0dWFsIH5WZXJ0ZXhEYXRh
TWFuYWdlcigpOwotCi0gICAgdm9pZCBkaXJ0eUN1cnJlbnRWYWx1ZShpbnQgaW5kZXgpIHsgbURp
cnR5Q3VycmVudFZhbHVlW2luZGV4XSA9IHRydWU7IH0KLQotICAgIEdMZW51bSBwcmVwYXJlVmVy
dGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAq
b3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKLQotICAgIHN0ZDo6c2l6ZV90
IHNwYWNlUmVxdWlyZWQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgY29uc3Q7Ci0gICAgc3RkOjpzaXplX3Qgd3JpdGVB
dHRyaWJ1dGVEYXRhKEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50IHN0YXJ0
LCBHTHNpemVpIGNvdW50LCBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXpl
aSBpbnN0YW5jZXMpOwotCi0gICAgQ29udGV4dCAqY29uc3QgbUNvbnRleHQ7Ci0gICAgSURpcmVj
dDNERGV2aWNlOSAqY29uc3QgbURldmljZTsKLQotICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciAq
bVN0cmVhbWluZ0J1ZmZlcjsKLQotICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlW01BWF9WRVJU
RVhfQVRUUklCU107Ci0gICAgU3RyZWFtaW5nVmVydGV4QnVmZmVyICptQ3VycmVudFZhbHVlQnVm
ZmVyW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9m
ZnNldHNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQgY29u
dmVyc2lvbgotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIGJvb2wg
aWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwotICAgICAg
ICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRl
LCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNs
VHlwZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0g
NiB9OwotCi0gICAgRm9ybWF0Q29udmVydGVyIG1BdHRyaWJ1dGVUeXBlc1tOVU1fR0xfVkVSVEVY
X0FUVFJJQl9UWVBFU11bMl1bNF07ICAgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlw
ZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RydWN0IFRyYW5zbGF0aW9u
RGVzY3JpcHRpb24KLSAgICB7Ci0gICAgICAgIERXT1JEIGNhcHNGbGFnOwotICAgICAgICBGb3Jt
YXRDb252ZXJ0ZXIgcHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgRm9ybWF0Q29udmVydGVy
IGZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBpcyB1c2Vk
IHRvIGdlbmVyYXRlIG1BdHRyaWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRp
b25EZXNjcmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJf
VFlQRVNdWzJdWzRdOyAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1b
bm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0KLSAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhEV09SRCBk
ZWNsVHlwZXMpOwotCi0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlwZSkgY29u
c3Q7Ci0gICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgVmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpIGNvbnN0OwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBM
SUJHTEVTVjJfVkVSVEVYREFUQU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmJhMjUzZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OTc1ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGxpYkdMRVN2Mi5jcHA6IEltcGxlbWVudHMgdGhl
IGV4cG9ydGVkIE9wZW5HTCBFUyAyLjAgZnVuY3Rpb25zLgotCi0jZGVmaW5lIEdMX0FQSUNBTEwK
LSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLQotI2lu
Y2x1ZGUgPGV4Y2VwdGlvbj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotCi0jaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVy
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
UXVlcnkuaCIKLQotYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoZ2w6OmdldENvbnRleHQoKSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
IChsZXZlbCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
aWYgKGdsOjppc1BvdzIod2lkdGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVy
aWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFi
bGUgMy40LgotYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlKQotewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBz
ZWNvbmRhcnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0g
ICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAgIC8v
IGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVS
QVRJT04KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgIGNhc2UgR0xf
UkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2Ug
R0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfUkdCQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
LSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoK
LSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKLSAg
ICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRI
X1NURU5DSUxfT0VTOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OwotICAgICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci19Ci1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXMyRChib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0K
LQotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsK
LSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUt
PmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2Vk
KQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJl
LT5nZXRXaWR0aCgwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0
ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKGxldmVsKSB8fAot
ICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KGxldmVsKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1
YmUoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKLXsKLSAgICBp
ZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5p
c0NvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9
IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwg
bGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewotICAgICAgICBp
ZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwg
MCkpIHx8Ci0gICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJl
LT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwp
IHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0
LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwg
ZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBmb3IgY29t
YmluYXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVs
cwotYm9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQot
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAg
ICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QkdSQV9FWFQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzRfUkVWX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVf
UkVWX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgICAgc3dpdGNoICh0
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1Jf
UkVBRF9UWVBFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWV4dGVybiAiQyIKLXsKLQotdm9pZCBfX3N0ZGNhbGwgZ2xBY3RpdmVUZXh0dXJlKEdMZW51
bSB0ZXh0dXJlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRleHR1cmUgPSAweCVYKSIsIHRleHR1
cmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9U
RVhUVVJFMCArIGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkg
LSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRBY3Rp
dmVTYW1wbGVyKHRleHR1cmUgLSBHTF9URVhUVVJFMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xBdHRhY2hTaGFkZXIo
R0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICVkLCBHTHVpbnQgc2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOwotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0
U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdC0+YXR0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbEJlZ2luUXVlcnlFWFQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGlk
KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCAlZCkiLCB0YXJn
ZXQsIGlkKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpZCA9PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRB
dHRyaWJMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIq
IG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXgg
PSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBpbmRleCwgbmFt
ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHN0cm5jbXAobmFtZSwgImdsXyIsIDMpID09IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+YmluZEF0dHJpYnV0
ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIoR0xlbnVtIHRhcmdl
dCwgR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
THVpbnQgYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIo
YnVmZmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZy
YW1lYnVmZmVyKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBm
cmFtZWJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgZnJhbWVidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9E
UkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FO
R0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSB8fCB0YXJnZXQg
PT0gR0xfRlJBTUVCVUZGRVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+YmluZFJlYWRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfRFJBV19GUkFNRUJVRkZFUl9B
TkdMRSB8fCB0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+YmluZERyYXdGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWlu
dCByZW5kZXJidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1
aW50IHJlbmRlcmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4
dC0+YmluZFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZFRleHR1cmUo
R0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0x1aW50IHRleHR1cmUgPSAlZCkiLCB0YXJnZXQsIHRleHR1cmUpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4
dHVyZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0ICYmIHRleHR1cmVPYmplY3Qt
PmdldFRhcmdldCgpICE9IHRhcmdldCAmJiB0ZXh0dXJlICE9IDApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kVGV4dHVyZTJEKHRleHR1cmUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlQ3ViZU1hcCh0ZXh0dXJlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZENvbG9yKEdMY2xh
bXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKQot
ewotICAgIEVWRU5UKCIoR0xjbGFtcGYgcmVkID0gJWYsIEdMY2xhbXBmIGdyZWVuID0gJWYsIEdM
Y2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFtcGYgYWxwaGEgPSAlZikiLAotICAgICAgICAgIHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRl
eHQqIGNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRDb2xvcihnbDo6
Y2xhbXAwMShyZWQpLCBnbDo6Y2xhbXAwMShncmVlbiksIGdsOjpjbGFtcDAxKGJsdWUpLCBnbDo6
Y2xhbXAwMShhbHBoYSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlvbihHTGVudW0gbW9kZSkKLXsK
LSAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlLCBtb2RlKTsKLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2Rl
QWxwaGEpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZVJHQiA9IDB4JVgsIEdMZW51bSBtb2Rl
QWxwaGEgPSAweCVYKSIsIG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAobW9kZVJHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRlVO
Q19BREQ6Ci0gICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgotICAgICAgICAgIGNhc2Ug
R0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChtb2RlQWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX0ZVTkNfQUREOgotICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKLSAg
ICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhh
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbEJsZW5kRnVuYyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpCi17
Ci0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShzZmFjdG9yLCBkZmFjdG9yLCBzZmFjdG9yLCBkZmFj
dG9yKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudW0gc3Jj
UkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSkKLXsK
LSAgICBFVkVOVCgiKEdMZW51bSBzcmNSR0IgPSAweCVYLCBHTGVudW0gZHN0UkdCID0gMHglWCwg
R0xlbnVtIHNyY0FscGhhID0gMHglWCwgR0xlbnVtIGRzdEFscGhhID0gMHglWCkiLAotICAgICAg
ICAgIHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBzd2l0Y2ggKHNyY1JHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
WkVSTzoKLSAgICAgICAgICBjYXNlIEdMX09ORToKLSAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xP
UjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9EU1RfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgot
ICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVT
X1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xP
UjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKLSAgICAgICAg
ICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NP
TlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChkc3RS
R0IpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBH
TF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAg
Y2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhB
OgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBI
QToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoc3JjQWxwaGEp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9P
TkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAg
IGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBI
QToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2Fz
ZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgot
ICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToK
LSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBj
YXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZHN0QWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBH
TF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAg
ICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RT
VF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAg
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6
Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgY29uc3RhbnRDb2xvclVzZWQgPSAoc3JjUkdCID09IEdMX0NP
TlNUQU5UX0NPTE9SIHx8IHNyY1JHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSR0IgPT0gR0xfQ09OU1RBTlRf
Q09MT1IgfHwgZHN0UkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUik7Ci0KLSAgICAg
ICAgYm9vbCBjb25zdGFudEFscGhhVXNlZCA9IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEg
fHwgc3JjUkdCID09IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSB8fAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRzdFJHQiA9PSBHTF9DT05TVEFOVF9BTFBIQSB8fCBkc3RS
R0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKTsKLQotICAgICAgICBpZiAoY29uc3Rh
bnRDb2xvclVzZWQgJiYgY29uc3RhbnRBbHBoYVVzZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVSUigiU2ltdWx0YW5lb3VzIHVzZSBvZiBHTF9DT05TVEFOVF9BTFBIQS9HTF9PTkVfTUlOVVNf
Q09OU1RBTlRfQUxQSEEgYW5kIEdMX0NPTlNUQU5UX0NPTE9SL0dMX09ORV9NSU5VU19DT05TVEFO
VF9DT0xPUiBpbnZhbGlkIHVuZGVyIFdlYkdMIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JH
QiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQnVmZmVyRGF0YShHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSwgR0xlbnVtIHVz
YWdlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWlwdHIgc2l6
ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwLCBHTGVudW0gdXNhZ2UgPSAlZCki
LAotICAgICAgICAgIHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAodXNh
Z2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1NUUkVBTV9EUkFXOgotICAgICAgICAg
IGNhc2UgR0xfU1RBVElDX0RSQVc6Ci0gICAgICAgICAgY2FzZSBHTF9EWU5BTUlDX0RSQVc6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRB
cnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlcikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXItPmJ1ZmZlckRhdGEo
ZGF0YSwgc2l6ZSwgdXNhZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0
LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQot
ewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVk
LCBHTHNpemVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAot
ICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKHNpemUgPCAwIHx8IG9mZnNldCA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAg
ICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQgPiBidWZmZXItPnNpemUoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlci0+YnVmZmVyU3ViRGF0YShkYXRh
LCBzaXplLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51
bSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVS
ICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FO
R0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4
dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNr
ID0gJVgpIiwgbWFzayk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
Q2xlYXJDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBH
TGNsYW1wZiBhbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHJlZCA9ICVmLCBHTGNsYW1w
ZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYsIEdMY2xhbXBmIGFscGhhID0gJWYpIiwK
LSAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xlYXJEZXB0
aGYoR0xjbGFtcGYgZGVwdGgpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiBkZXB0aCA9ICVmKSIs
IGRlcHRoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJEZXB0aChkZXB0aCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xDbGVhclN0ZW5jaWwoR0xpbnQgcykKLXsKLSAgICBFVkVOVCgiKEdMaW50IHMgPSAlZCkiLCBz
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udGV4dC0+c2V0Q2xlYXJTdGVuY2lsKHMpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ29sb3JN
YXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9v
bGVhbiBhbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xib29sZWFu
IGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9ICVkKSIs
Ci0gICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRDb2xvck1hc2socmVkID09IEdMX1RSVUUsIGdyZWVuID09IEdMX1RSVUUsIGJsdWUgPT0gR0xf
VFJVRSwgYWxwaGEgPT0gR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb21waWxlU2hhZGVyKEdMdWludCBz
aGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRl
cik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBz
aGFkZXJPYmplY3QtPmNvbXBpbGUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRh
KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgIiAKLSAg
ICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsIEdMc2l6ZWkg
aW1hZ2VTaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKLSAgICAgICAg
ICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBp
bWFnZVNpemUsIGRhdGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoIXZhbGlkSW1h
Z2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNpemUg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVs
ID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAo
Y29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAg
ICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3Vi
ZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVp
Z2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVs
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
aW50ZXJuYWxmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9T
M1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRo
ZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhv
dWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3Mg
YXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSAh
PSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJE
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21w
cmVzc2VkSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNp
emUsIGRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQotewotICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwg
R0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xz
aXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xz
aXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAotICAg
ICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCFn
bDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3
aWR0aCwgaGVpZ2h0KSB8fCBpbWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdM
RToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGgg
PT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0
KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9y
bWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdM
RToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJu
YWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1
cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUg
aW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVD
b21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAlIDQgIT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOyAvLyB3ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGlsIHRoaXMg
cG9pbnQsIGJlY2F1c2UgdGhlIG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBl
eGlzdCB1bmxlc3MgRFhUIHRleHR1cmVzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRCh0
cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0
dXJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1
YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdl
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBp
ZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGlt
YWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdM
c2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQp
IiwKLSAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZElt
YWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChi
b3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZl
bCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAg
ICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNp
b24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQt
PmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+
IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4
dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21w
bGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZy
YW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+
Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
KCk7Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldElu
dGVybmFsRm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJs
ZSAzLjkKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9y
YnVmZmVyRm9ybWF0ICE9IEdMX0FMUEhBICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0IgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0g
R0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZv
cm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBw
b3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBv
cnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9y
dHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdM
X0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOgotICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5j
b3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFt
ZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFw
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBF
VkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zm
c2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIs
Ci0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgMCB8
fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1h
eCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1h
eCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09
IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBj
b250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVm
ZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKCk7Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3Vy
Y2UtPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVy
ZSA9IE5VTEw7Ci0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7Ci0K
LSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1
cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQo
ZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0
ZXgyZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8v
IGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgyZC0+Z2V0
SW50ZXJuYWxGb3JtYXQobGV2ZWwpOwotICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgyZDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAg
ICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRo
LCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRleGN1
YmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBl
cnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4Y3ViZS0+Z2V0
SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9
IHRleGN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAg
ICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0g
R0xfQUxQSEEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JB
NCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0Ex
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09F
UykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQiAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1
NjUgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCOF9P
RVMgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAm
JgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgot
ICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0JBICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVf
QTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThf
T0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
OgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0x1aW50IF9fc3RkY2FsbCBn
bENyZWF0ZVByb2dyYW0odm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGNvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUdMdWludCBfX3N0ZGNhbGwg
Z2xDcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdHlwZSA9
IDB4JVgpIiwgdHlwZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRl
U2hhZGVyKHR5cGUpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xDdWxsRmFjZShHTGVudW0gbW9kZSkKLXsKLSAgICBFVkVOVCgi
KEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAg
ICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsTW9kZSht
b2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVCdWZmZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50
KiBidWZmZXJzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCog
YnVmZmVycyA9IDB4JTAuOHApIiwgbiwgYnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcnNbaV0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRmVuY2VzTlYoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIGZlbmNlcykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVp
bnQqIGZlbmNlcyA9IDB4JTAuOHApIiwgbiwgZmVuY2VzKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZShmZW5jZXNbaV0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgY29u
c3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwg
Y29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZyYW1lYnVmZmVycyk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVm
ZmVyc1tpXSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXJzW2ldKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFt
KQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xE
ZWxldGVRdWVyaWVzRVhUKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50ICppZHMpCi17Ci0gICAgRVZF
TlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50ICppZHMgPSAweCUwLjhwKSIsIG4sIGlk
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZGVsZXRlUXVlcnkoaWRzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCi17Ci0gICAg
RVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJzID0gMHgl
MC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYg
KG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyc1tp
XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikK
LXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoc2hhZGVyID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcikpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVUZXh0
dXJlcyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgRVZFTlQoIihH
THNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4
dHVyZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0
ZXh0dXJlc1tpXSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQotewotICAgIEVW
RU5UKCIoR0xlbnVtIGZ1bmMgPSAweCVYKSIsIGZ1bmMpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBzd2l0Y2ggKGZ1bmMpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FVkVSOgot
ICAgICAgICAgIGNhc2UgR0xfQUxXQVlTOgotICAgICAgICAgIGNhc2UgR0xfTEVTUzoKLSAgICAg
ICAgICBjYXNlIEdMX0xFUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX0VRVUFMOgotICAgICAgICAg
IGNhc2UgR0xfR1JFQVRFUjoKLSAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKLSAgICAgICAgICBj
YXNlIEdMX05PVEVRVUFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+
c2V0RGVwdGhGdW5jKGZ1bmMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKQot
ewotICAgIEVWRU5UKCIoR0xib29sZWFuIGZsYWcgPSAlZCkiLCBmbGFnKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0RGVwdGhNYXNrKGZsYWcgIT0gR0xfRkFMU0UpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhSYW5n
ZWYoR0xjbGFtcGYgek5lYXIsIEdMY2xhbXBmIHpGYXIpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1w
ZiB6TmVhciA9ICVmLCBHTGNsYW1wZiB6RmFyID0gJWYpIiwgek5lYXIsIHpGYXIpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zZXREZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERldGFjaFNo
YWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVOVCgiKEdMdWlu
dCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFkZXIpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0KLSAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRl
eHQtPmdldFNoYWRlcihzaGFkZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlNoYWRlciAq
c2hhZGVyQnlQcm9ncmFtSGFuZGxlOwotICAgICAgICAgICAgICAgIHNoYWRlckJ5UHJvZ3JhbUhh
bmRsZSA9IGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXNoYWRlckJ5UHJvZ3JhbUhhbmRsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtQnlTaGFkZXJI
YW5kbGUgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcik7Ci0gICAgICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQnlTaGFkZXJIYW5kbGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmRl
dGFjaFNoYWRlcihzaGFkZXJPYmplY3QpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xEaXNhYmxlKEdMZW51bSBjYXApCi17Ci0gICAgRVZFTlQoIihHTGVudW0gY2FwID0gMHgl
WCkiLCBjYXApOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxG
YWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwoZmFs
c2UpOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NP
VkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQt
PnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3Qo
ZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9U
RVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Qmxl
bmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2UpOyAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZFTlQoIihH
THVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShpbmRleCwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5cyhHTGVu
dW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpCi17Ci0gICAgRVZFTlQoIihHTGVu
dW0gbW9kZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCkiLCBt
b2RlLCBmaXJzdCwgY291bnQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQg
PCAwIHx8IGZpcnN0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291
bnQsIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBH
TGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgRVZF
TlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgR0xzaXplaSBwcmltY291bnQgPSAlZCkiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgZmlyc3Qg
PCAwIHx8IHByaW1jb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcmltY291bnQg
PiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBj
b3VudCwgcHJpbWNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5k
aWNlcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9
ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHAp
IiwKLSAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgaW5kaWNlcywgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdM
RShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZSA9
IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZv
aWQqIGluZGljZXMgPSAweCUwLjhwLCBHTHNpemVpIHByaW1jb3VudCA9ICVkKSIsCi0gICAgICAg
ICAgbW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIHByaW1jb3VudCk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgcHJpbWNvdW50IDwgMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHByaW1jb3VudCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAgICAKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdF
bGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgcHJpbWNvdW50KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEVuYWJsZShHTGVudW0gY2FwKQotewotICAgIEVWRU5UKCIoR0xlbnVt
IGNhcCA9IDB4JVgpIiwgY2FwKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRDdWxsRmFjZSh0cnVlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNl
dEZpbGwodHJ1ZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBj
b250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3Nv
clRlc3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXREZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
QmxlbmQodHJ1ZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZFTlQoIihH
THVpbnQgaW5kZXggPSAlZCkiLCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShpbmRleCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeUVYVChHTGVu
dW0gdGFyZ2V0KQotewotICAgIEVWRU5UKCJHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgICAgY2Fz
ZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZW5kUXVlcnkodGFyZ2V0KTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bEZpbmlzaEZlbmNlTlYoR0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZlbmNl
ID0gJWQpIiwgZmVuY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4
dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVM
TCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5jZU9iamVjdC0+
ZmluaXNoRmVuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEZpbmlzaCh2b2lkKQotewotICAgIEVWRU5UKCIoKSIp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zeW5jKHRydWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRmx1c2godm9pZCkKLXsK
LSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c3luYyhmYWxzZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgs
IEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQgPSAweCVYLCAiCi0gICAgICAgICAgIkdMdWludCBy
ZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgcmVuZGVyYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCh0YXJnZXQg
IT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUg
JiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB8fCAo
cmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUiAmJiByZW5kZXJidWZmZXIgIT0g
MCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBH
THVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBH
TF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5k
bGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigp
OwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJhd0Zy
YW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZnJh
bWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9IDAp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNo
bWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hN
RU5UMDoKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXItPnNldERlcHRoYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFD
SE1FTlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIoR0xf
UkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWlu
dCB0ZXh0dXJlLCBHTGludCBsZXZlbCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSB0ZXh0YXJnZXQgPSAweCVYLCAi
Ci0gICAgICAgICAgIkdMdWludCB0ZXh0dXJlID0gJWQsIEdMaW50IGxldmVsID0gJWQpIiwgdGFy
Z2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0g
R0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZF
Ul9BTkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOgotICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVO
VDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9ORTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQotICAgICAg
ICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQo
KSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXgyZCA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgp
ICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1h
cCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJl
c3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxldmVsICE9IDApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIEdMdWludCBm
cmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURf
RlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZm
ZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVy
SGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDogIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1
ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdl
dCwgdGV4dHVyZSk7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRB
Q0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUp
OyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEZyb250RmFjZShHTGVudW0gbW9kZSkK
LXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9DVzoKLSAgICAgICAgICBjYXNlIEdMX0NDVzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRGcm9udEZhY2UobW9kZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2Vu
QnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogYnVmZmVycykKLXsKLSAgICBFVkVOVCgiKEdMc2l6
ZWkgbiA9ICVkLCBHTHVpbnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlcnNbaV0gPSBjb250
ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlw
bWFwKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCki
LCB0YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAodGV4MmQtPmlzRGVwdGgoMCkpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0ZXgyZC0+
Z2VuZXJhdGVNaXBtYXBzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVyYXRlTWlwbWFwcygpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbkZlbmNlc05WKEdMc2l6ZWkgbiwgR0x1aW50
KiBmZW5jZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBmZW5jZXMg
PSAweCUwLjhwKSIsIG4sIGZlbmNlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChu
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogZnJhbWVi
dWZmZXJzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogZnJhbWVidWZm
ZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5RdWVyaWVzRVhUKEdMc2l6
ZWkgbiwgR0x1aW50KiBpZHMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50
KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWRzW2ldID0gY29udGV4dC0+Y3JlYXRlUXVlcnkoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIHJlbmRl
cmJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiByZW5kZXJi
dWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZW5kZXJidWZmZXJzW2ldID0gY29udGV4dC0+Y3Jl
YXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0dXJlcyhH
THNpemVpIG4sIEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAl
ZCwgR0x1aW50KiB0ZXh0dXJlcyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlc1tpXSA9IGNvbnRleHQt
PmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZUF0dHJp
YihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAg
IEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdMc2l6ZWkg
YnVmc2l6ZSA9ICVkLCBHTHNpemVpICpsZW5ndGggPSAweCUwLjhwLCAiCi0gICAgICAgICAgIkdM
aW50ICpzaXplID0gMHglMC44cCwgR0xlbnVtICp0eXBlID0gJTAuOHAsIEdMY2hhciAqbmFtZSA9
ICUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6
ZSwgdHlwZSwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0
ZUNvdW50KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlw
ZSwgbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3JtKEdMdWludCBwcm9ncmFtLCBHTHVp
bnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwg
R0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3Jh
bSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsICIKLSAgICAg
ICAgICAiR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQqIHNpemUgPSAweCUwLjhwLCBH
TGVudW0qIHR5cGUgPSAweCUwLjhwLCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsCi0gICAgICAg
ICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAo
R0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9y
bShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdl
dEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXpl
aSogY291bnQsIEdMdWludCogc2hhZGVycykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFt
ID0gJWQsIEdMc2l6ZWkgbWF4Y291bnQgPSAlZCwgR0xzaXplaSogY291bnQgPSAweCUwLjhwLCBH
THVpbnQqIHNoYWRlcnMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgbWF4Y291bnQs
IGNvdW50LCBzaGFkZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG1heGNvdW50
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnMobWF4Y291bnQs
IGNvdW50LCBzaGFkZXJzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi1pbnQgX19zdGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0g
JWQsIGNvbnN0IEdMY2hhciogbmFtZSA9ICVzKSIsIHByb2dyYW0sIG5hbWUpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0KLSAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFt
KTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUsIC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgLTEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJp
bmFyeS0+Z2V0QXR0cmlidXRlTG9jYXRpb24obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsR2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcykKLXsK
LSAgICBFVkVOVCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMYm9vbGVhbiogcGFyYW1zID0gMHgl
MC44cCkiLCAgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEJvb2xl
YW52KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVu
dW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0g
MDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhw
bmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1QYXJh
bXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0
IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVy
bgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5V
TEw7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFy
YW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZs
b2F0UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZmxvYXRQYXJhbXNbaV0gPT0gMC4wZikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9UUlVF
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtd
IGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQ
YXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50UGFyYW1zW2ldID09
IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9
IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRh
cmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdl
dEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29u
dGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJvdW5kIHRv
IHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldAotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVS
X1VTQUdFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJWkU6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi1HTGVudW0gX19zdGRjYWxsIGdsR2V0RXJyb3Iodm9pZCkKLXsKLSAgICBF
VkVOVCgiKCkiKTsKLQotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKLQotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdl
dEVycm9yKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi12b2lkIF9f
c3RkY2FsbCBnbEdldEZlbmNlaXZOVihHTHVpbnQgZmVuY2UsIEdMZW51bSBwbmFtZSwgR0xpbnQg
KnBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkLCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGludCAqcGFyYW1zID0gMHglMC44cCkiLCBmZW5jZSwgcG5hbWUsIHBhcmFtcyk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5j
ZShmZW5jZSk7Ci0KLSAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZlbmNlT2JqZWN0LT5nZXRGZW5jZWl2
KHBuYW1lLCBwYXJhbXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9h
dCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCog
cGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4
dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVt
UGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1l
dGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlm
IChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBr
bm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFt
ZXRlcnMgdG8gcmV0dXJuLgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
Qk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAq
Ym9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcg
R0xib29sZWFuW251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZB
TFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zW2ldID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAg
ICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoR0xmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0
dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHgl
MC44cCkiLAotICAgICAgICAgIHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHBhcmFtcyk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdf
RlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1F
QlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNvbnRleHQt
PmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIAot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXREcmF3RnJhbWVi
dWZmZXJIYW5kbGUoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1
ZmZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudFR5
cGU7Ci0gICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgIHN3
aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMDogICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBm
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNo
bWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgpOyAKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OiAgICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAKLSAgICAgICAg
ICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlw
ZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRPYmplY3RUeXBlOyAgIC8vIFR5cGUg
Y2F0ZWdvcnkKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50VHlwZSA9PSBHTF9OT05FIHx8IGF0
dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KGF0
dGFjaG1lbnRUeXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50
T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVu
dE9iamVjdFR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKLSAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1lbnRP
YmplY3RUeXBlID09IEdMX1RFWFRVUkUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9i
amVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxv
dyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAgICAgICAg
ICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0
KGF0dGFjaG1lbnRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKHZvaWQpCi17
Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlc2V0U3RhdHVzKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZ
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VydihHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVYLCBHTGlu
dCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29u
dGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQ
YXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgICAgICAgICAg
ICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0
IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVy
cyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9v
bGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xl
YW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUg
W10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAg
ICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbmFt
ZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBw
bmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoR0xpbnQpKCgoR0xmbG9hdCkoMHhGRkZGRkZGRikgKiBmbG9hdFBhcmFtc1tp
XSAtIDEuMGYpIC8gMi4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMaW50KShmbG9hdFBhcmFtc1tpXSA+IDAuMGYgPyBmbG9vcihmbG9hdFBhcmFtc1tpXSAr
IDAuNSkgOiBjZWlsKGZsb2F0UGFyYW1zW2ldIC0gMC41KSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBw
cm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICVkLCBHTGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAu
OHApIiwgcHJvZ3JhbSwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERUxF
VEVfU1RBVFVTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0Zs
YWdnZWRGb3JEZWxldGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9MSU5LX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpICE9IE5VTEw7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nTGVuZ3RoKCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FUVEFDSEVE
X1NIQURFUlM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEF0
dGFjaGVkU2hhZGVyc0NvdW50KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0FDVElWRV9BVFRSSUJVVEVTOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9M
RU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2
ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RI
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlm
b3JtTWF4TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBj
YXNlIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAgICAgICAgIHBy
b2dyYW0sIGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250
ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5n
ZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeWl2
RVhUKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBF
VkVOVCgiR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50ICpw
YXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X0NVUlJFTlRfUVVFUllfRVhUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcGFyYW1z
WzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFyZ2V0KTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFF1ZXJ5
T2JqZWN0dWl2RVhUKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcykKLXsK
LSAgICBFVkVOVCgiKEdMdWludCBpZCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHVpbnQg
KnBhcmFtcyA9IDB4JTAuOHApIiwgaWQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9R
VUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJM
RV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVj
dCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAgICAg
IGlmICghcXVlcnlPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09
IGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaChwbmFt
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhU
OgotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNV
TFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBxdWVyeU9iamVj
dC0+aXNSZXN1bHRBdmFpbGFibGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIs
IHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVS
QlVGRkVSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBjb250ZXh0LT5n
ZXRSZW5kZXJidWZmZXIoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkpOwotCi0gICAg
ICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkJVRkZFUl9XSURUSDogICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXIt
PmdldFdpZHRoKCk7ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRF
UkJVRkZFUl9IRUlHSFQ6ICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEhlaWdo
dCgpOyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9J
TlRFUk5BTF9GT1JNQVQ6ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0
KCk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRTog
ICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOiAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldEdyZWVuU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkU6ICAgICAgICpwYXJhbXMgPSBy
ZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZm
ZXItPmdldEFscGhhU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JF
TkRFUkJVRkZFUl9ERVBUSF9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldERl
cHRoU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXpl
KCk7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVT
X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSByZW5kZXJidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
R2V0U2hhZGVyaXYoR0x1aW50IHNoYWRlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQot
ewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTGVudW0gcG5hbWUgPSAlZCwgR0xp
bnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2hhZGVyLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0K
LSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9TSEFERVJfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2Jq
ZWN0LT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBj
YXNlIEdMX0RFTEVURV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9i
amVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHNoYWRlck9iamVjdC0+aXNDb21waWxlZCgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTkZPX0xPR19M
RU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0SW5mb0xv
Z0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9TSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVy
T2JqZWN0LT5nZXRTb3VyY2VMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRToK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xhdGVkU291
cmNlTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVySW5mb0xvZyhHTHVpbnQgc2hhZGVyLCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQotewotICAgIEVW
RU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSog
bGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAgICAgICAg
IHNoYWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250
ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzaGFkZXJPYmplY3QtPmdldElu
Zm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50
KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBzaGFkZXJ0
eXBlID0gMHglWCwgR0xlbnVtIHByZWNpc2lvbnR5cGUgPSAweCVYLCBHTGludCogcmFuZ2UgPSAw
eCUwLjhwLCBHTGludCogcHJlY2lzaW9uID0gMHglMC44cCkiLAotICAgICAgICAgIHNoYWRlcnR5
cGUsIHByZWNpc2lvbnR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBzd2l0Y2ggKHNoYWRlcnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9TSEFERVI6Ci0gICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHByZWNp
c2lvbnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0xPV19GTE9BVDoKLSAgICAg
ICAgICBjYXNlIEdMX01FRElVTV9GTE9BVDoKLSAgICAgICAgICBjYXNlIEdMX0hJR0hfRkxPQVQ6
Ci0gICAgICAgICAgICAvLyBBc3N1bWUgSUVFRSA3NTQgcHJlY2lzaW9uCi0gICAgICAgICAgICBy
YW5nZVswXSA9IDEyNzsKLSAgICAgICAgICAgIHJhbmdlWzFdID0gMTI3OwotICAgICAgICAgICAg
KnByZWNpc2lvbiA9IDIzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9M
T1dfSU5UOgotICAgICAgICAgIGNhc2UgR0xfTUVESVVNX0lOVDoKLSAgICAgICAgICBjYXNlIEdM
X0hJR0hfSU5UOgotICAgICAgICAgICAgLy8gU29tZSAobW9zdCkgaGFyZHdhcmUgb25seSBzdXBw
b3J0cyBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsCi0gICAgICAgICAg
ICAvLyB3aGljaCBjYW4gYWNjdXJhdGVseSByZXByZXNlbnQgaW50ZWdlcnMgdXAgdG8gKy8tMTY3
NzcyMTYKLSAgICAgICAgICAgIHJhbmdlWzBdID0gMjQ7Ci0gICAgICAgICAgICByYW5nZVsxXSA9
IDI0OwotICAgICAgICAgICAgKnByZWNpc2lvbiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKQotewotICAgIEVWRU5UKCIoR0x1
aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0g
MHglMC44cCwgR0xjaGFyKiBzb3VyY2UgPSAweCUwLjhwKSIsCi0gICAgICAgICAgc2hhZGVyLCBi
dWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChi
dWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hh
ZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0U291cmNlKGJ1
ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zbGF0ZWRTaGFkZXJTb3Vy
Y2VBTkdMRShHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwg
R0xjaGFyKiBzb3VyY2UpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6
ZWkgYnVmc2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIHNvdXJj
ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwgc291cmNl
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hh
ZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAg
ICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xhdGVkU291cmNlKGJ1ZnNpemUsIGxlbmd0
aCwgc291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi1jb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmcoR0xlbnVtIG5hbWUpCi17
Ci0gICAgRVZFTlQoIihHTGVudW0gbmFtZSA9IDB4JVgpIiwgbmFtZSk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgc3dpdGNoIChuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9WRU5ET1I6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJHb29nbGUgSW5jLiI7Ci0g
ICAgICAgICAgY2FzZSBHTF9SRU5ERVJFUjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSop
KChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6ICJBTkdM
RSIpOwotICAgICAgICAgIGNhc2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1
Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICJWRVJTSU9OX1NUUklORyIpIjsKLSAgICAgICAg
ICBjYXNlIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAo
R0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKEFOR0xFICJWRVJTSU9OX1NUUklORyIp
IjsKLSAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gKEdM
dWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygp
IDogIiIpOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNLCAoR0x1Ynl0ZSopTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIChHTHVieXRlKilOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
R2V0VGV4UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBw
YXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1l
ID0gMHglWCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJh
bXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQotICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdyYXBTKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdy
YXBUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9JTU1VVEFCTEVfRk9STUFUX0VYVDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
ZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0Vf
QU5HTEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFVz
YWdlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5h
bWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBw
bmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1
cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9U
UlVFIDogR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4
dHVyZS0+Z2V0VXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50IHByb2dyYW0s
IEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAg
ICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgYnVmU2l6ZSA9ICVkLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsCi0gICAgICAgICAg
cHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChidWZTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0
aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCog
cGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwg
cGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxM
LCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9y
bWl2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBH
TGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsIAotICAgICAgICAgIHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcm9ncmFt
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PmdldFVuaWZvcm1pdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQg
bG9jYXRpb24sIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9
ICVkLCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9n
cmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2
KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotaW50IF9fc3RkY2Fs
bCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1l
KQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1l
ID0gMHglMC44cCkiLCBwcm9ncmFtLCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoc3Ryc3RyKG5hbWUsICJnbF8iKSA9PSBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlksIC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliZnYoR0x1aW50IGluZGV4LCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9
ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIGlu
ZGV4LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0
YXRlKGluZGV4KTsKLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVk
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmli
U3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFM
U0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50
VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRToKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubURpdmlzb3I7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0
cmliaXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAg
RVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBh
cmFtcyA9IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4
dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHBu
YW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1B
cnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVNpemU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tVHlwZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklC
X0FSUkFZX05PUk1BTElaRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0
ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklO
RElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubUJvdW5kQnVmZmVy
LmlkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VS
UkVOVF9WRVJURVhfQVRUUklCOgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NDsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3Vy
cmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3Vy
cmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlzb3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoR0x1aW50IGlu
ZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBvaW50ZXIpCi17Ci0gICAgRVZFTlQoIihHTHVp
bnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcG9pbnRlciA9IDB4
JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwb2ludGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAocG5hbWUgIT0gR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAqcG9pbnRlciA9IGNvbnN0X2Nhc3Q8R0x2b2lkKj4o
Y29udGV4dC0+Z2V0VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsSGludChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQg
PSAweCVYLCBHTGVudW0gbW9kZSA9IDB4JVgpIiwgdGFyZ2V0LCBtb2RlKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9GQVNURVNUOgotICAgICAgICAgIGNhc2UgR0xfTklDRVNUOgotICAgICAgICAgIGNhc2UgR0xf
RE9OVF9DQVJFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0gICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9HRU5FUkFU
RV9NSVBNQVBfSElOVDoKLSAgICAgICAgICAgIGlmIChjb250ZXh0KSBjb250ZXh0LT5zZXRHZW5l
cmF0ZU1pcG1hcEhpbnQobW9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOgotICAgICAgICAgICAgaWYg
KGNvbnRleHQpIGNvbnRleHQtPnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQobW9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzQnVmZmVyKEdMdWlu
dCBidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgYnVmZmVyID0gJWQpIiwgYnVmZmVyKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCAmJiBidWZmZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdl
dEJ1ZmZlcihidWZmZXIpOwotCi0gICAgICAgICAgICBpZiAoYnVmZmVyT2JqZWN0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNFbmFibGVk
KEdMZW51bSBjYXApCi17Ci0gICAgRVZFTlQoIihHTGVudW0gY2FwID0gMHglWCkiLCBjYXApOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGNhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0N1bGxGYWNlRW5h
YmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAg
cmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4gY29udGV4dC0+aXNT
YW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVDb3ZlcmFnZUVu
YWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAg
IHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU3RlbmNp
bFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNC
bGVuZEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBm
YWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZl
bmNlID0gJWQpIiwgZmVuY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29u
dGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0g
TlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmZW5jZU9iamVjdC0+aXNGZW5jZSgp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNGcmFt
ZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgZnJhbWVi
dWZmZXIgPSAlZCkiLCBmcmFtZWJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQgJiYgZnJhbWVidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQot
ICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUHJvZ3Jh
bShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwg
cHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQgJiYgcHJv
Z3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAocHJvZ3Jh
bU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFM
U0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3Rk
Y2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IGlkKQotewotICAgIEVWRU5UKCIoR0x1aW50IGlkID0g
JWQpIiwgaWQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9i
amVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAg
ICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xi
b29sZWFuIF9fc3RkY2FsbCBnbElzUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17
Ci0gICAgRVZFTlQoIihHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgcmVuZGVyYnVmZmVyKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCAmJiByZW5kZXJidWZmZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9i
amVjdCA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotCi0gICAgICAg
ICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwot
fQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAg
ICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7
Ci0KLSAgICAgICAgICAgIGlmIChzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRkFM
U0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1RleHR1cmUoR0x1aW50IHRleHR1cmUp
Ci17Ci0gICAgRVZFTlQoIihHTHVpbnQgdGV4dHVyZSA9ICVkKSIsIHRleHR1cmUpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHRleHR1cmUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4
dHVyZSh0ZXh0dXJlKTsKLQotICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsTGluZVdpZHRoKEdMZmxv
YXQgd2lkdGgpCi17Ci0gICAgRVZFTlQoIihHTGZsb2F0IHdpZHRoID0gJWYpIiwgd2lkdGgpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAod2lkdGggPD0gMC4wZikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+
c2V0TGluZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbExpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFt
KQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHByb2dyYW1PYmplY3QtPmxpbmsoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFBpeGVsU3RvcmVpKEdMZW51bSBwbmFt
ZSwgR0xpbnQgcGFyYW0pCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVYLCBHTGlu
dCBwYXJhbSA9ICVkKSIsIHBuYW1lLCBwYXJhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKLSAg
ICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFtICE9IDQg
JiYgcGFyYW0gIT0gOCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRVbnBhY2tBbGlnbm1lbnQocGFyYW0pOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJhbSAhPSA0
ICYmIHBhcmFtICE9IDgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja0FsaWdubWVudChwYXJhbSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09S
REVSX0FOR0xFOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFBhY2tSZXZlcnNlUm93T3Jk
ZXIocGFyYW0gIT0gMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdM
ZmxvYXQgdW5pdHMpCi17Ci0gICAgRVZFTlQoIihHTGZsb2F0IGZhY3RvciA9ICVmLCBHTGZsb2F0
IHVuaXRzID0gJWYpIiwgZmFjdG9yLCB1bml0cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFBvbHln
b25PZmZzZXRQYXJhbXMoZmFjdG9yLCB1bml0cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkblBpeGVsc0VYVChH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6
ZWkgYnVmU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x2b2lkICpkYXRh
KQotewotICAgIEVWRU5UKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lk
dGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgotICAgICAgICAgICJHTGVudW0gZm9ybWF0
ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVpIGJ1ZlNpemUgPSAweCVkLCBHTHZv
aWQgKmRhdGEgPSAweCUwLjhwKSIsCi0gICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBidWZTaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYg
KHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IGJ1ZlNpemUgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAmYnVmU2l6
ZSwgZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHZvaWQqIHBpeGVscykKLXsKLSAgICBFVkVOVCgiKEdM
aW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVp
Z2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBl
ID0gMHglWCwgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBOVUxMLCBwaXhlbHMp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQg
X19zdGRjYWxsIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKHZvaWQpCi17Ci0gICAgRVZFTlQoIigp
Iik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpTaGFkZXI6OnJlbGVhc2VDb21waWxl
cigpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMZW51bSB0YXJnZXQsIEdM
c2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVp
IHNhbXBsZXMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0
aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJC
VUZGRVI6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJc0RlcHRo
UmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKGlu
dGVybmFsZm9ybWF0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdo
dCA8IDAgfHwgc2FtcGxlcyA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1S
ZW5kZXJidWZmZXJEaW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250
ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAg
ICBzYW1wbGVzID4gY29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgR0x1aW50IGhhbmRsZSA9IGNvbnRleHQtPmdldFJl
bmRlcmJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6
OkRlcHRoYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6OkNvbG9y
YnVmZmVyKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6OlN0
ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpEZXB0aFN0
ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlQU5HTEUodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsU2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVh
biBpbnZlcnQpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiB2YWx1ZSA9ICVmLCBHTGJvb2xlYW4g
aW52ZXJ0ID0gJWQpIiwgdmFsdWUsIGludmVydCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBs
ZUNvdmVyYWdlUGFyYW1zKGdsOjpjbGFtcDAxKHZhbHVlKSwgaW52ZXJ0ID09IEdMX1RSVUUpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsU2V0RmVuY2VOVihHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24pCi17Ci0g
ICAgRVZFTlQoIihHTHVpbnQgZmVuY2UgPSAlZCwgR0xlbnVtIGNvbmRpdGlvbiA9IDB4JVgpIiwg
ZmVuY2UsIGNvbmRpdGlvbik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb25kaXRp
b24gIT0gR0xfQUxMX0NPTVBMRVRFRF9OVikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29u
dGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0g
TlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5jZU9iamVj
dC0+c2V0RmVuY2UoY29uZGl0aW9uKTsgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTY2lzc29yKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5UKCIoR0xp
bnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWln
aHQgPSAlZCkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCogY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lzc29yUGFy
YW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25zdCBHTHZv
aWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAl
ZCwgY29uc3QgR0x1aW50KiBzaGFkZXJzID0gMHglMC44cCwgR0xlbnVtIGJpbmFyeWZvcm1hdCA9
IDB4JVgsICIKLSAgICAgICAgICAiY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhwLCBHTHNp
emVpIGxlbmd0aCA9ICVkKSIsCi0gICAgICAgICAgbiwgc2hhZGVycywgYmluYXJ5Zm9ybWF0LCBi
aW5hcnksIGxlbmd0aCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIC8vIE5vIGJpbmFyeSBz
aGFkZXIgZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQotewotICAgIEVWRU5UKCIo
R0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhcioqIHN0
cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhwKSIsCi0gICAgICAg
ICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0
LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hh
ZGVyKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+c2V0U291cmNlKGNvdW50LCBzdHJpbmcsIGxl
bmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsRnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVp
bnQgbWFzaykKLXsKLSAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ss
IGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1bmNTZXBh
cmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCi17
Ci0gICAgRVZFTlQoIihHTGVudW0gZmFjZSA9IDB4JVgsIEdMZW51bSBmdW5jID0gMHglWCwgR0xp
bnQgcmVmID0gJWQsIEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAg
Y2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN3aXRjaCAoZnVuYykKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfTkVWRVI6Ci0gICAgICAgICAgY2FzZSBHTF9BTFdBWVM6Ci0gICAgICAgICAgY2FzZSBHTF9M
RVNTOgotICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgotICAgICAgICAgIGNhc2UgR0xfRVFVQUw6
Ci0gICAgICAgICAgY2FzZSBHTF9HRVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgot
ICAgICAgICAgIGNhc2UgR0xfTk9URVFVQUw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxQYXJhbXMoZnVu
YywgcmVmLCBtYXNrKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZhY2UgPT0g
R0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxCYWNrUGFyYW1zKGZ1bmMsIHJlZiwgbWFz
ayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsTWFzayhHTHVpbnQgbWFzaykKLXsK
LSAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIG1hc2spOwotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWlu
dCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTHVpbnQgbWFzayA9
ICVkKSIsIGZhY2UsIG1hc2spOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICAgIGNhc2Ug
R0xfQkFDSzoKLSAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9O
VF9BTkRfQkFDSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dGVuY2lsV3JpdGVtYXNrKG1hc2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
ZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2sobWFz
ayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51
bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQotewotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUoR0xfRlJP
TlRfQU5EX0JBQ0ssIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
U3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWws
IEdMZW51bSB6cGFzcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBmYWNlID0gMHglWCwgR0xlbnVt
IGZhaWwgPSAweCVYLCBHTGVudW0gemZhaWwgPSAweCVYLCBHTGVudW0genBhcyA9IDB4JVhzKSIs
Ci0gICAgICAgICAgZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9O
VDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRf
QkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3
aXRjaCAoZmFpbCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAgICAgICAg
ICBjYXNlIEdMX0tFRVA6Ci0gICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgotICAgICAgICAgIGNh
c2UgR0xfSU5DUjoKLSAgICAgICAgICBjYXNlIEdMX0RFQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9J
TlZFUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6Ci0gICAgICAgICAgY2FzZSBHTF9E
RUNSX1dSQVA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzd2l0Y2ggKHpmYWlsKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9aRVJPOgotICAg
ICAgICAgIGNhc2UgR0xfS0VFUDoKLSAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6Ci0gICAgICAg
ICAgY2FzZSBHTF9JTkNSOgotICAgICAgICAgIGNhc2UgR0xfREVDUjoKLSAgICAgICAgICBjYXNl
IEdMX0lOVkVSVDoKLSAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKLSAgICAgICAgICBjYXNl
IEdMX0RFQ1JfV1JBUDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN3aXRjaCAoenBhc3MpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86
Ci0gICAgICAgICAgY2FzZSBHTF9LRUVQOgotICAgICAgICAgIGNhc2UgR0xfUkVQTEFDRToKLSAg
ICAgICAgICBjYXNlIEdMX0lOQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSOgotICAgICAgICAg
IGNhc2UgR0xfSU5WRVJUOgotICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgotICAgICAgICAg
IGNhc2UgR0xfREVDUl9XUkFQOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGZh
Y2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsT3BlcmF0aW9ucyhmYWlsLCB6
ZmFpbCwgenBhc3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmFjZSA9PSBH
TF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKGZhaWwsIHpmYWls
LCB6cGFzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5WKEdMdWlu
dCBmZW5jZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkKSIsIGZlbmNlKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsK
LQotICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVF
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZlbmNlT2JqZWN0LT50ZXN0
RmVuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIEdMX1RSVUU7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQotewot
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50
IGludGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQg
PSAlZCwgIgotICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4
JVgsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHglMC44cCki
LAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNv
bmRhcnkga2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9I
QUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gKyA8
dHlwZT4gY29tYmluYXRpb25zCi0gICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0PiAtPiBzZXRz
IElOVkFMSURfRU5VTQotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJp
bmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICAgICAgc3dpdGNoIChmb3JtYXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAg
ICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBh
cmUgaGFuZGxlZCBiZWxvdwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FO
R0xFOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToK
LSAgICAgICAgICAgIGJyZWFrOyAKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9PRVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChs
ZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRo
ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAg
ICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11
bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAg
IGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBs
ZXZlbCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19B
TkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBPRVNf
ZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEgYW5kIG11bHRpcGxlIGxl
dmVscywKLSAgICAgICAgICAgICAgICAvLyBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5v
dAotICAgICAgICAgICAgICAgIGlmIChwaXhlbHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAwKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11
dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
LQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxl
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWChs
ZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGln
bm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZU5lZ1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVudW0gdGFy
Z2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pCi17Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUsIChHTGludClwYXJhbSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4
UGFyYW1ldGVyZnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0KiBw
YXJhbXMpCi17Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGludCkqcGFy
YW1zKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCB0YXJnZXQs
IHBuYW1lLCBwYXJhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRX
cmFwVCgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9G
SUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51
bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBnbFRleFBhcmFtZXRlcmko
dGFyZ2V0LCBwbmFtZSwgKnBhcmFtcyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFn
ZTJERVhUKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgbGV2ZWxzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAotICAg
ICAgICAgICB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQgJiYg
dGFyZ2V0ICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdp
ZHRoIDwgMSB8fCBoZWlnaHQgPCAxIHx8IGxldmVscyA8IDEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiBsZXZlbHMgIT0gZ2w6OmxvZzIo
c3RkOjptYXgod2lkdGgsIGhlaWdodCkpICsgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdM
ZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAg
IEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLQotICAgICAg
ICBpZiAoZm9ybWF0ID09IEdMX05PTkUgfHwgdHlwZSA9PSBHTF9OT05FKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1l
bnNpb24oKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtVGV4dHVyZURpbWVuc2lvbigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IGNv
bnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxICYmICFjb250ZXh0
LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWdsOjppc1BvdzIod2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JB
MzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Uz
MkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdM
X1JHQjE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhU
VVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVy
ZXMKLSAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgpID09IDAp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0
dXJlLT5pZCgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9y
YWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKLXsKLSAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4
b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVu
dW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUw
LjhwKSIsCi0gICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdp
ZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1l
cmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1l
cmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIWNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQgYnkgaGVscGVyIGZ1
bmN0aW9uCi0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0ZM
T0FUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9IQUxGX0ZMT0FU
X09FUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9y
bWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0
dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJE
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwg
eW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0
LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlv
biwgR0xmbG9hdCB4KQotewotICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgMSwgJngpOwotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVk
LCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0
aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRD
dXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2NhdGlvbiwg
R0xpbnQgeCkKLXsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3Vu
dCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJv
Z3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4
LCBHTGZsb2F0IHkpCi17Ci0gICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsKLQotICAgIGdsVW5p
Zm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFBy
b2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgs
IEdMaW50IHkpCi17Ci0gICAgR0xpbnQgeHlbNF0gPSB7eCwgeX07Ci0KLSAgICBnbFVuaWZvcm0y
aXYobG9jYXRpb24sIDEsIChHTGludCopJnh5KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKLXsK
LSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29u
c3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChs
b2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFt
QmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3Jt
Mml2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0zZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxv
YXQgeikKLXsKLSAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6fTsKLQotICAgIGdsVW5pZm9y
bTNmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXopOwotfQotCi12b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQq
IHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwot
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5n
ZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm0zaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xpbnQgeikKLXsKLSAgICBHTGludCB4eXpbM10gPSB7eCwgeSwgen07Ci0KLSAgICBnbFVuaWZv
cm0zaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5eik7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYp
Ci17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJv
Z3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5p
Zm9ybTNpdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtNGYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBH
TGZsb2F0IHosIEdMZmxvYXQgdykKLXsKLSAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwgeSwgeiwg
d307Ci0KLSAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6dyk7Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0g
JWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9j
YXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdl
dEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9u
LCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQotewotICAgIEdMaW50IHh5endb
NF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIDEsIChHTGlu
dCopJnh5encpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQotewotICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAu
OHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYg
KGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50
LCB2KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCogdmFsdWUpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBH
THNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9h
dCogdmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0
cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9z
ZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2Nh
dGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7
Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
KQotewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44
cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZB
TFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+
Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQs
IHZhbHVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShH
THVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJv
Z3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHBy
b2dyYW0gIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3Jh
bU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWYWxp
ZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3Jh
bSA9ICVkKSIsIHByb2dyYW0pOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUoKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4KQotewotICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmKSIsIGluZGV4LCB4KTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJp
YjFmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGlu
ZGV4LCB2YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIDAs
IDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFs
cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVm
LCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNb
NF0gPSB7IHgsIHksIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
Y29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xWZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZs
b2F0IHopCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYs
IEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIz
ZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZFTlQoIihH
THVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRl
eCwgdmFsdWVzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1
ZXNbMV0sIHZhbHVlc1syXSwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmKEdMdWludCBpbmRleCwg
R0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAgIEVWRU5U
KCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xm
bG9hdCB6ID0gJWYsIEdMZmxvYXQgdyA9ICVmKSIsIGluZGV4LCB4LCB5LCB6LCB3KTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OwotICAgICAgICAgICAgY29udGV4
dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjRm
dihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBFVkVOVCgiKEdM
dWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4
LCB2YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1
ZXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1
aW50IGRpdmlzb3IpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0x1aW50IGRp
dmlzb3IgPSAlZCkiLCBpbmRleCwgZGl2aXNvcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0
ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYlBv
aW50ZXIoR0x1aW50IGluZGV4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5v
cm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikKLXsKLSAgICBFVkVO
VCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBlID0gMHgl
WCwgIgotICAgICAgICAgICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICVkLCBHTHNpemVpIHN0cmlk
ZSA9ICVkLCBjb25zdCBHTHZvaWQqIHB0ciA9IDB4JTAuOHApIiwKLSAgICAgICAgICBpbmRleCwg
c2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBwdHIpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCksIHNpemUsIHR5cGUsIChu
b3JtYWxpemVkID09IEdMX1RSVUUpLCBzdHJpZGUsIHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWaWV3cG9ydChH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBF
VkVOVCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdM
c2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0
Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVi
dWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBz
cmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywg
R0xlbnVtIGZpbHRlcikKLXsKLSAgICBFVkVOVCgiKEdMaW50IHNyY1gwID0gJWQsIEdMaW50IHNy
Y1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNyY1kxID0gJWQsICIKLSAgICAgICAg
ICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xpbnQgZHN0WDEgPSAlZCwg
R0xpbnQgZHN0WTEgPSAlZCwgIgotICAgICAgICAgICJHTGJpdGZpZWxkIG1hc2sgPSAweCVYLCBH
TGVudW0gZmlsdGVyID0gMHglWCkiLAotICAgICAgICAgIHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKSkgIT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RYMCB8fCBzcmNZMSAtIHNyY1kwICE9
IGRzdFkxIC0gZHN0WTApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2NhbGluZyBhbmQg
ZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGlt
cGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IGNv
bnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEVSUigiQmxpdHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u
IGZyYW1lYnVmZmVyIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gw
LCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzayk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQotewotICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNp
emVpIGhlaWdodCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCAi
Ci0gICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JXgsIGNv
bnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbEdldFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gKmJpbmFyeUZvcm1hdCwgdm9pZCAqYmluYXJ5KQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHByb2dyYW0gPSAweCVYLCBidWZTaXplID0gJXMsIGxlbmd0aCA9IDB4JTAuOHAsIGJp
bmFyeUZvcm1hdCA9IDB4JTAuOHAsIGJpbmFyeSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBwcm9n
cmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwgYmluYXJ5KTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwot
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqYmluYXJ5
Rm9ybWF0ID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7Ci0KLSAgICAgICAgICAgIGlmIChsZW5n
dGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTGVudW0g
YmluYXJ5Rm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZv
aWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0g
PSAweCVYLCBiaW5hcnlGb3JtYXQgPSAweCV4LCBiaW5hcnkgPSAweCUwLjhwLCBsZW5ndGggPSAl
ZCkiLAotICAgICAgICAgIHByb2dyYW0sIGJpbmFyeUZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoYmluYXJ5Rm9ybWF0ICE9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9n
cmFtT2JqZWN0LT5zZXRQcm9ncmFtQmluYXJ5KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLV9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25h
bWUpCi17Ci0gICAgc3RydWN0IEV4dGVuc2lvbgotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAq
bmFtZTsKLSAgICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBh
ZGRyZXNzOwotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9u
c1tdID0KLSAgICB7Ci0gICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKLSAgICAgICAgeyJn
bEJsaXRGcmFtZWJ1ZmZlckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xCbGl0RnJhbWVidWZmZXJBTkdMRX0sCi0gICAgICAgIHsiZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlKWdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEV9LAotICAg
ICAgICB7ImdsRGVsZXRlRmVuY2VzTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbERlbGV0ZUZlbmNlc05WfSwKLSAgICAgICAgeyJnbEdlbkZlbmNlc05WIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5GZW5jZXNOVn0s
Ci0gICAgICAgIHsiZ2xJc0ZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbElzRmVuY2VOVn0sCi0gICAgICAgIHsiZ2xUZXN0RmVuY2VOViIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGVzdEZlbmNlTlZ9LAotICAg
ICAgICB7ImdsR2V0RmVuY2Vpdk5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xHZXRGZW5jZWl2TlZ9LAotICAgICAgICB7ImdsRmluaXNoRmVuY2VOViIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRmluaXNoRmVuY2VOVn0s
Ci0gICAgICAgIHsiZ2xTZXRGZW5jZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xTZXRGZW5jZU5WfSwKLSAgICAgICAgeyJnbEdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsR2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFfSwKLSAgICAgICAgeyJnbFRleFN0b3Jh
Z2UyREVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGV4
U3RvcmFnZTJERVhUfSwKLSAgICAgICAgeyJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQiLCAo
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNFWFR9LAotICAgICAgICB7ImdsUmVhZG5QaXhlbHNFWFQiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFJlYWRuUGl4ZWxzRVhUfSwKLSAgICAgICAg
eyJnbEdldG5Vbmlmb3JtZnZFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEdldG5Vbmlmb3JtZnZFWFR9LAotICAgICAgICB7ImdsR2V0blVuaWZvcm1pdkVY
VCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0blVuaWZv
cm1pdkVYVH0sCi0gICAgICAgIHsiZ2xHZW5RdWVyaWVzRVhUIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5RdWVyaWVzRVhUfSwKLSAgICAgICAgeyJnbERl
bGV0ZVF1ZXJpZXNFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbERlbGV0ZVF1ZXJpZXNFWFR9LAotICAgICAgICB7ImdsSXNRdWVyeUVYVCIsIChfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsSXNRdWVyeUVYVH0sCi0gICAgICAg
IHsiZ2xCZWdpblF1ZXJ5RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUpZ2xCZWdpblF1ZXJ5RVhUfSwKLSAgICAgICAgeyJnbEVuZFF1ZXJ5RVhUIiwgKF9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xFbmRRdWVyeUVYVH0sCi0gICAg
ICAgIHsiZ2xHZXRRdWVyeWl2RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xHZXRRdWVyeWl2RVhUfSwKLSAgICAgICAgeyJnbEdldFF1ZXJ5T2JqZWN0dWl2
RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRRdWVy
eU9iamVjdHVpdkVYVH0sCi0gICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCAo
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRleEF0dHJpYkRp
dmlzb3JBTkdMRX0sCi0gICAgICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLCAoX19l
Z2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJheXNJbnN0YW5j
ZWRBTkdMRX0sCi0gICAgICAgIHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEV9LAotICAgICAgICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RD
YXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30sCi0g
ICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKLQotICAgIGZvciAoaW50
IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7
IGV4dCsrKQotICAgIHsKLSAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZ2xFeHRlbnNpb25z
W2V4dF0ubmFtZSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRXh0ZW5zaW9uc1tleHRdLmFkZHJl
c3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLy8gTm9uLXB1
YmxpYyBmdW5jdGlvbnMgdXNlZCBieSBFR0wKLQotYm9vbCBfX3N0ZGNhbGwgZ2xCaW5kVGV4SW1h
Z2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIEVWRU5UKCIoZWdsOjpTdXJmYWNlKiBz
dXJmYWNlID0gMHglMC44cCkiLAotICAgICAgICAgIHN1cmZhY2UpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAg
ICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRleHR1cmVPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZU9iamVjdC0+YmluZFRleEltYWdlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbGliR0xFU3YyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE3NzY5
Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotTElCUkFSWSBsaWJH
TEVTdjIKLUVYUE9SVFMKLSAgICBnbEFjdGl2ZVRleHR1cmUgICAgICAgICAgICAgICAgIEAxCi0g
ICAgZ2xBdHRhY2hTaGFkZXIgICAgICAgICAgICAgICAgICBAMgotICAgIGdsQmluZEF0dHJpYkxv
Y2F0aW9uICAgICAgICAgICAgQDMKLSAgICBnbEJpbmRCdWZmZXIgICAgICAgICAgICAgICAgICAg
IEA0Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIgICAgICAgICAgICAgICBANQotICAgIGdsQmluZFJl
bmRlcmJ1ZmZlciAgICAgICAgICAgICAgQDYKLSAgICBnbEJpbmRUZXh0dXJlICAgICAgICAgICAg
ICAgICAgIEA3Ci0gICAgZ2xCbGVuZENvbG9yICAgICAgICAgICAgICAgICAgICBAOAotICAgIGds
QmxlbmRFcXVhdGlvbiAgICAgICAgICAgICAgICAgQDkKLSAgICBnbEJsZW5kRXF1YXRpb25TZXBh
cmF0ZSAgICAgICAgIEAxMAotICAgIGdsQmxlbmRGdW5jICAgICAgICAgICAgICAgICAgICAgQDEx
Ci0gICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgICBAMTIKLSAgICBnbEJ1ZmZlckRh
dGEgICAgICAgICAgICAgICAgICAgIEAxMwotICAgIGdsQnVmZmVyU3ViRGF0YSAgICAgICAgICAg
ICAgICAgQDE0Ci0gICAgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzICAgICAgICBAMTUKLSAgICBn
bENsZWFyICAgICAgICAgICAgICAgICAgICAgICAgIEAxNgotICAgIGdsQ2xlYXJDb2xvciAgICAg
ICAgICAgICAgICAgICAgQDE3Ci0gICAgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAgICAgICBA
MTgKLSAgICBnbENsZWFyU3RlbmNpbCAgICAgICAgICAgICAgICAgIEAxOQotICAgIGdsQ29sb3JN
YXNrICAgICAgICAgICAgICAgICAgICAgQDIwCi0gICAgZ2xDb21waWxlU2hhZGVyICAgICAgICAg
ICAgICAgICBAMjEKLSAgICBnbENvbXByZXNzZWRUZXhJbWFnZTJEICAgICAgICAgIEAyMgotICAg
IGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQgICAgICAgQDIzCi0gICAgZ2xDb3B5VGV4SW1hZ2Uy
RCAgICAgICAgICAgICAgICBAMjQKLSAgICBnbENvcHlUZXhTdWJJbWFnZTJEICAgICAgICAgICAg
IEAyNQotICAgIGdsQ3JlYXRlUHJvZ3JhbSAgICAgICAgICAgICAgICAgQDI2Ci0gICAgZ2xDcmVh
dGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMjcKLSAgICBnbEN1bGxGYWNlICAgICAgICAgICAg
ICAgICAgICAgIEAyOAotICAgIGdsRGVsZXRlQnVmZmVycyAgICAgICAgICAgICAgICAgQDI5Ci0g
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMgICAgICAgICAgICBAMzAKLSAgICBnbERlbGV0ZVByb2dy
YW0gICAgICAgICAgICAgICAgIEAzMgotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAgICAgICAg
ICAgQDMzCi0gICAgZ2xEZWxldGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMzQKLSAgICBnbERl
bGV0ZVRleHR1cmVzICAgICAgICAgICAgICAgIEAzMQotICAgIGdsRGVwdGhGdW5jICAgICAgICAg
ICAgICAgICAgICAgQDM2Ci0gICAgZ2xEZXB0aE1hc2sgICAgICAgICAgICAgICAgICAgICBAMzcK
LSAgICBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgIEAzOAotICAgIGdsRGV0YWNoU2hh
ZGVyICAgICAgICAgICAgICAgICAgQDM1Ci0gICAgZ2xEaXNhYmxlICAgICAgICAgICAgICAgICAg
ICAgICBAMzkKLSAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgIEA0MAotICAgIGds
RHJhd0FycmF5cyAgICAgICAgICAgICAgICAgICAgQDQxCi0gICAgZ2xEcmF3RWxlbWVudHMgICAg
ICAgICAgICAgICAgICBANDIKLSAgICBnbEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgIEA0
MwotICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICAgQDQ0Ci0gICAgZ2xGaW5pc2gg
ICAgICAgICAgICAgICAgICAgICAgICBANDUKLSAgICBnbEZsdXNoICAgICAgICAgICAgICAgICAg
ICAgICAgIEA0NgotICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgICAgICAgQDQ3Ci0gICAg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAgICAgICAgICBANDgKLSAgICBnbEZyb250RmFjZSAgICAg
ICAgICAgICAgICAgICAgIEA0OQotICAgIGdsR2VuQnVmZmVycyAgICAgICAgICAgICAgICAgICAg
QDUwCi0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMgICAgICAgICAgICAgICBANTIKLSAgICBnbEdlblJl
bmRlcmJ1ZmZlcnMgICAgICAgICAgICAgIEA1MwotICAgIGdsR2VuVGV4dHVyZXMgICAgICAgICAg
ICAgICAgICAgQDU0Ci0gICAgZ2xHZW5lcmF0ZU1pcG1hcCAgICAgICAgICAgICAgICBANTEKLSAg
ICBnbEdldEFjdGl2ZUF0dHJpYiAgICAgICAgICAgICAgIEA1NQotICAgIGdsR2V0QWN0aXZlVW5p
Zm9ybSAgICAgICAgICAgICAgQDU2Ci0gICAgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgICAgICAgICAg
ICBANTcKLSAgICBnbEdldEF0dHJpYkxvY2F0aW9uICAgICAgICAgICAgIEA1OAotICAgIGdsR2V0
Qm9vbGVhbnYgICAgICAgICAgICAgICAgICAgQDU5Ci0gICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJp
diAgICAgICAgICBANjAKLSAgICBnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAgIEA2MQot
ICAgIGdsR2V0RmxvYXR2ICAgICAgICAgICAgICAgICAgICAgQDYyCi0gICAgZ2xHZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAgIEA2MwotICAgIGdsR2V0SW50ZWdlcnYgICAgICAg
ICAgICAgICAgICAgQDY0Ci0gICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyAgICAgICAgICAgICBANjYK
LSAgICBnbEdldFByb2dyYW1pdiAgICAgICAgICAgICAgICAgIEA2NQotICAgIGdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYgICAgQDY3Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nICAgICAgICAg
ICAgICBANjkKLSAgICBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAgICAgIEA3MAotICAgIGds
R2V0U2hhZGVyU291cmNlICAgICAgICAgICAgICAgQDcxCi0gICAgZ2xHZXRTaGFkZXJpdiAgICAg
ICAgICAgICAgICAgICBANjgKLSAgICBnbEdldFN0cmluZyAgICAgICAgICAgICAgICAgICAgIEA3
MgotICAgIGdsR2V0VGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgQDczCi0gICAgZ2xHZXRUZXhQ
YXJhbWV0ZXJpdiAgICAgICAgICAgICBANzQKLSAgICBnbEdldFVuaWZvcm1Mb2NhdGlvbiAgICAg
ICAgICAgIEA3NwotICAgIGdsR2V0VW5pZm9ybWZ2ICAgICAgICAgICAgICAgICAgQDc1Ci0gICAg
Z2xHZXRVbmlmb3JtaXYgICAgICAgICAgICAgICAgICBANzYKLSAgICBnbEdldFZlcnRleEF0dHJp
YlBvaW50ZXJ2ICAgICAgIEA4MAotICAgIGdsR2V0VmVydGV4QXR0cmliZnYgICAgICAgICAgICAg
QDc4Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAgICAgICAgICAgICBANzkKLSAgICBnbEhpbnQg
ICAgICAgICAgICAgICAgICAgICAgICAgIEA4MQotICAgIGdsSXNCdWZmZXIgICAgICAgICAgICAg
ICAgICAgICAgQDgyCi0gICAgZ2xJc0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICBAODMKLSAg
ICBnbElzRnJhbWVidWZmZXIgICAgICAgICAgICAgICAgIEA4NAotICAgIGdsSXNQcm9ncmFtICAg
ICAgICAgICAgICAgICAgICAgQDg1Ci0gICAgZ2xJc1JlbmRlcmJ1ZmZlciAgICAgICAgICAgICAg
ICBAODYKLSAgICBnbElzU2hhZGVyICAgICAgICAgICAgICAgICAgICAgIEA4NwotICAgIGdsSXNU
ZXh0dXJlICAgICAgICAgICAgICAgICAgICAgQDg4Ci0gICAgZ2xMaW5lV2lkdGggICAgICAgICAg
ICAgICAgICAgICBAODkKLSAgICBnbExpbmtQcm9ncmFtICAgICAgICAgICAgICAgICAgIEA5MAot
ICAgIGdsUGl4ZWxTdG9yZWkgICAgICAgICAgICAgICAgICAgQDkxCi0gICAgZ2xQb2x5Z29uT2Zm
c2V0ICAgICAgICAgICAgICAgICBAOTIKLSAgICBnbFJlYWRQaXhlbHMgICAgICAgICAgICAgICAg
ICAgIEA5MwotICAgIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICAgICAgICAgQDk0Ci0gICAgZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlICAgICAgICAgICBAOTUKLSAgICBnbFNhbXBsZUNvdmVyYWdlICAg
ICAgICAgICAgICAgIEA5NgotICAgIGdsU2Npc3NvciAgICAgICAgICAgICAgICAgICAgICAgQDk3
Ci0gICAgZ2xTaGFkZXJCaW5hcnkgICAgICAgICAgICAgICAgICBAOTgKLSAgICBnbFNoYWRlclNv
dXJjZSAgICAgICAgICAgICAgICAgIEA5OQotICAgIGdsU3RlbmNpbEZ1bmMgICAgICAgICAgICAg
ICAgICAgQDEwMAotICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgQDEwMQotICAg
IGdsU3RlbmNpbE1hc2sgICAgICAgICAgICAgICAgICAgQDEwMgotICAgIGdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZSAgICAgICAgICAgQDEwMwotICAgIGdsU3RlbmNpbE9wICAgICAgICAgICAgICAgICAg
ICAgQDEwNAotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUgICAgICAgICAgICAgQDEwNQotICAgIGds
VGV4SW1hZ2UyRCAgICAgICAgICAgICAgICAgICAgQDEwNgotICAgIGdsVGV4UGFyYW1ldGVyZiAg
ICAgICAgICAgICAgICAgQDEwNwotICAgIGdsVGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgICAg
QDEwOAotICAgIGdsVGV4UGFyYW1ldGVyaSAgICAgICAgICAgICAgICAgQDEwOQotICAgIGdsVGV4
UGFyYW1ldGVyaXYgICAgICAgICAgICAgICAgQDExMAotICAgIGdsVGV4U3ViSW1hZ2UyRCAgICAg
ICAgICAgICAgICAgQDExMQotICAgIGdsVW5pZm9ybTFmICAgICAgICAgICAgICAgICAgICAgQDEx
MgotICAgIGdsVW5pZm9ybTFmdiAgICAgICAgICAgICAgICAgICAgQDExMwotICAgIGdsVW5pZm9y
bTFpICAgICAgICAgICAgICAgICAgICAgQDExNAotICAgIGdsVW5pZm9ybTFpdiAgICAgICAgICAg
ICAgICAgICAgQDExNQotICAgIGdsVW5pZm9ybTJmICAgICAgICAgICAgICAgICAgICAgQDExNgot
ICAgIGdsVW5pZm9ybTJmdiAgICAgICAgICAgICAgICAgICAgQDExNwotICAgIGdsVW5pZm9ybTJp
ICAgICAgICAgICAgICAgICAgICAgQDExOAotICAgIGdsVW5pZm9ybTJpdiAgICAgICAgICAgICAg
ICAgICAgQDExOQotICAgIGdsVW5pZm9ybTNmICAgICAgICAgICAgICAgICAgICAgQDEyMAotICAg
IGdsVW5pZm9ybTNmdiAgICAgICAgICAgICAgICAgICAgQDEyMQotICAgIGdsVW5pZm9ybTNpICAg
ICAgICAgICAgICAgICAgICAgQDEyMgotICAgIGdsVW5pZm9ybTNpdiAgICAgICAgICAgICAgICAg
ICAgQDEyMwotICAgIGdsVW5pZm9ybTRmICAgICAgICAgICAgICAgICAgICAgQDEyNAotICAgIGds
VW5pZm9ybTRmdiAgICAgICAgICAgICAgICAgICAgQDEyNQotICAgIGdsVW5pZm9ybTRpICAgICAg
ICAgICAgICAgICAgICAgQDEyNgotICAgIGdsVW5pZm9ybTRpdiAgICAgICAgICAgICAgICAgICAg
QDEyNwotICAgIGdsVW5pZm9ybU1hdHJpeDJmdiAgICAgICAgICAgICAgQDEyOAotICAgIGdsVW5p
Zm9ybU1hdHJpeDNmdiAgICAgICAgICAgICAgQDEyOQotICAgIGdsVW5pZm9ybU1hdHJpeDRmdiAg
ICAgICAgICAgICAgQDEzMAotICAgIGdsVXNlUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgQDEz
MQotICAgIGdsVmFsaWRhdGVQcm9ncmFtICAgICAgICAgICAgICAgQDEzMgotICAgIGdsVmVydGV4
QXR0cmliMWYgICAgICAgICAgICAgICAgQDEzMwotICAgIGdsVmVydGV4QXR0cmliMWZ2ICAgICAg
ICAgICAgICAgQDEzNAotICAgIGdsVmVydGV4QXR0cmliMmYgICAgICAgICAgICAgICAgQDEzNQot
ICAgIGdsVmVydGV4QXR0cmliMmZ2ICAgICAgICAgICAgICAgQDEzNgotICAgIGdsVmVydGV4QXR0
cmliM2YgICAgICAgICAgICAgICAgQDEzNwotICAgIGdsVmVydGV4QXR0cmliM2Z2ICAgICAgICAg
ICAgICAgQDEzOAotICAgIGdsVmVydGV4QXR0cmliNGYgICAgICAgICAgICAgICAgQDEzOQotICAg
IGdsVmVydGV4QXR0cmliNGZ2ICAgICAgICAgICAgICAgQDE0MAotICAgIGdsVmVydGV4QXR0cmli
UG9pbnRlciAgICAgICAgICAgQDE0MQotICAgIGdsVmlld3BvcnQgICAgICAgICAgICAgICAgICAg
ICAgQDE0MgotCi0gICAgOyBFeHRlbnNpb25zCi0gICAgZ2xUZXhJbWFnZTNET0VTICAgICAgICAg
ICAgICAgICBAMTQzCi0gICAgZ2xCbGl0RnJhbWVidWZmZXJBTkdMRSAgICAgICAgICBAMTQ5Ci0g
ICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSBAMTUwCi0gICAgZ2xEZWxl
dGVGZW5jZXNOViAgICAgICAgICAgICAgICBAMTUxCi0gICAgZ2xGaW5pc2hGZW5jZU5WICAgICAg
ICAgICAgICAgICBAMTUyCi0gICAgZ2xHZW5GZW5jZXNOViAgICAgICAgICAgICAgICAgICBAMTUz
Ci0gICAgZ2xHZXRGZW5jZWl2TlYgICAgICAgICAgICAgICAgICBAMTU0Ci0gICAgZ2xJc0ZlbmNl
TlYgICAgICAgICAgICAgICAgICAgICBAMTU1Ci0gICAgZ2xTZXRGZW5jZU5WICAgICAgICAgICAg
ICAgICAgICBAMTU2Ci0gICAgZ2xUZXN0RmVuY2VOViAgICAgICAgICAgICAgICAgICBAMTU3Ci0g
ICAgZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUgQDE1OQotICAgIGdsVGV4U3RvcmFn
ZTJERVhUICAgICAgICAgICAgICAgQDE2MAotICAgIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VY
VCAgICAgQDE2MQotICAgIGdsUmVhZG5QaXhlbHNFWFQgICAgICAgICAgICAgICAgQDE2MgotICAg
IGdsR2V0blVuaWZvcm1mdkVYVCAgICAgICAgICAgICAgQDE2MwotICAgIGdsR2V0blVuaWZvcm1p
dkVYVCAgICAgICAgICAgICAgQDE2NAotICAgIGdsR2VuUXVlcmllc0VYVCAgICAgICAgICAgICAg
ICAgQDE2NQotICAgIGdsRGVsZXRlUXVlcmllc0VYVCAgICAgICAgICAgICAgQDE2NgotICAgIGds
SXNRdWVyeUVYVCAgICAgICAgICAgICAgICAgICAgQDE2NwotICAgIGdsQmVnaW5RdWVyeUVYVCAg
ICAgICAgICAgICAgICAgQDE2OAotICAgIGdsRW5kUXVlcnlFWFQgICAgICAgICAgICAgICAgICAg
QDE2OQotICAgIGdsR2V0UXVlcnlpdkVYVCAgICAgICAgICAgICAgICAgQDE3MAotICAgIGdsR2V0
UXVlcnlPYmplY3R1aXZFWFQgICAgICAgICAgQDE3MQotICAgIGdsVmVydGV4QXR0cmliRGl2aXNv
ckFOR0xFICAgICAgQDE3MgotICAgIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFICAgICAgQDE3
MwotICAgIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUgICAgQDE3NAotCi0gICAgOyBFR0wg
ZGVwZW5kZW5jaWVzCi0gICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBAMTQ0IE5P
TkFNRQotICAgIGdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICAgQDE0NSBOT05BTUUKLSAg
ICBnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgIEAxNDYgTk9OQU1FCi0gICAgZ2xHZXRD
dXJyZW50Q29udGV4dCAgICAgICAgICAgICBAMTQ3IE5PTkFNRQotICAgIGdsR2V0UHJvY0FkZHJl
c3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKLSAgICBnbEJpbmRUZXhJbWFnZSAgICAgICAg
ICAgICAgICAgIEAxNTggTk9OQU1FCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
YWQyMWU0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLnJjCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8vIE1pY3Jv
c29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCi0vLwotI2luY2x1ZGUg
InJlc291cmNlLmgiCi0KLSNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiBy
ZXNvdXJjZS4KLS8vCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgIi4uL2NvbW1vbi92
ZXJzaW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jdW5kZWYgQVBTVFVESU9fUkVBRE9O
TFlfU1lNQk9MUwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRW5nbGlzaCAoVS5TLikgcmVz
b3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9U
QVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19F
TkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQotI2VuZGlmIC8vX1dJTjMyCi0KLSNp
ZmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIFRFWFRJ
TkNMVURFCi0vLwotCi0xIFRFWFRJTkNMVURFIAotQkVHSU4KLSAgICAicmVzb3VyY2UuaFwwIgot
RU5ECi0KLTIgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJc
clxuIgotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1vbi92ZXJzaW9uLmgiIlwwIgotRU5ECi0KLTMg
VEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJcclxuIgotICAgICJcMCIKLUVORAotCi0jZW5kaWYg
ICAgLy8gQVBTVFVESU9fSU5WT0tFRAotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
VmVyc2lvbgotLy8KLQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCi0gRklMRVZFUlNJT04g
TUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04K
LSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lP
TixCVUlMRF9SRVZJU0lPTgotIEZJTEVGTEFHU01BU0sgMHgxN0wKLSNpZmRlZiBfREVCVUcKLSBG
SUxFRkxBR1MgMHgxTAotI2Vsc2UKLSBGSUxFRkxBR1MgMHgwTAotI2VuZGlmCi0gRklMRU9TIDB4
NEwKLSBGSUxFVFlQRSAweDJMCi0gRklMRVNVQlRZUEUgMHgwTAotQkVHSU4KLSAgICBCTE9DSyAi
U3RyaW5nRmlsZUluZm8iCi0gICAgQkVHSU4KLSAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgotICAg
ICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBs
aWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJhcnkiCi0gICAgICAgICAgICBWQUxVRSAiRmlsZVZl
cnNpb24iLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIs
ICJsaWJHTEVTdjIiCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIgotICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmls
ZW5hbWUiLCAibGliR0xFU3YyLmRsbCIKLSAgICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQi
LCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xF
IGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAgICAgIFZBTFVFICJQcm9k
dWN0VmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgIEVORAotICAgIEVORAotICAgIEJM
T0NLICJWYXJGaWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24i
LCAweDQwOSwgMTIwMAotICAgIEVORAotRU5ECi0KLSNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMu
KSByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0jaWZuZGVmIEFQU1RVRElP
X0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZyb20gdGhl
IFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0j
ZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDk3ZDRlOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAt
MSw1NjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUy
Ij8+Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgotCVZl
cnNpb249IjkuMDAiCi0JTmFtZT0ibGliR0xFU3YyIgotCVByb2plY3RHVUlEPSJ7QjU4NzFBN0Et
OTY4Qy00MkUzLUEzM0ItOTgxRTZGNDQ4RTc4fSIKLQlSb290TmFtZXNwYWNlPSJsaWJHTEVTdjIi
Ci0JS2V5d29yZD0iV2luMzJQcm9qIgotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiIK
LQk+Ci0JPFBsYXRmb3Jtcz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJLz4KLQkJ
PFBsYXRmb3JtCi0JCQlOYW1lPSJ4NjQiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxl
cz4KLQk8L1Rvb2xGaWxlcz4KLQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0J
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikk
KENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1
cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0i
MSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUi
Ci0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNS
RExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIK
LQkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0J
CQkJUnVudGltZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJ
V2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7
NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0
eVByb2JsZW1zPSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgotCQkJCVdh
cm5Bc0Vycm9yPSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVz
b3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNl
Q29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0
aW9uYWxPcHRpb25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5
LmxpYiBEM2R4OS5saWIgZDNkY29tcGlsZXIubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIK
LQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliR0xFU3YyLmRlZiIKLQkJCQlHZW5lcmF0ZURl
YnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRvbWl6ZWRC
YXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJn
ZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRMaW5lPSJA
ZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilc
bGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdM
RVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgot
CQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlfFdp
bjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5h
bWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJ
CUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxk
RXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlu
bGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQ
cmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElC
R0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVf
U0NMPTAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9
IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0
MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxOCIKLQkJCQlEZXRlY3Q2
NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ9IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRv
b2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBl
bmRlbmNpZXM9ImQzZDkubGliIEQzZHg5LmxpYiBkM2Rjb21waWxlci5saWIiCi0JCQkJTGlua0lu
Y3JlbWVudGFsPSIxIgotCQkJCUlnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM9ImZhbHNlIgotCQkJ
CU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIgotCQkJCUdlbmVyYXRlRGVidWdJ
bmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVSZWZlcmVu
Y2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXplZEJhc2VB
ZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1h
Y2hpbmU9IjEiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNj
TWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hv
IG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJH
TEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0
aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3Yy
LmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5h
bWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwv
Q29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2NCIKLQkJ
CU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1
cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwk
KENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFj
dGVyU2V0PSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1p
emF0aW9uPSIwIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERp
cikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7
X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0
cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIK
LQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJ
RGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1
MTI7NDcwMjs0NzE4IgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2Ui
Ci0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NB
RkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgRDNkeDkubGliIGQz
ZGNvbXBpbGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCi0JCQkJTW9kdWxlRGVmaW5p
dGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0
cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0J
CQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNY
RENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4
MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1l
KVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1
b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1
b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAm
cXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYj
eDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlv
bj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8eDY0IgotCQkJT3V0cHV0RGly
ZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1l
KSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJh
dGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEi
Ci0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1
c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVy
YXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdl
bmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJ
CVRhcmdldEVudmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBh
bnNpb249IjIiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGly
KS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3NvckRlZmlu
aXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztf
Q1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCIKLQkJCQlSdW50
aW1lTGlicmFyeT0iMCIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5n
TGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQy
Mzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4IgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQ
cm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJu
QXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291
cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNv
bXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlv
bmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5s
aWIgRDNkeDkubGliIGQzZGNvbXBpbGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0J
CQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFsc2UiCi0JCQkJTW9kdWxlRGVmaW5pdGlv
bkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVl
IgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCi0JCQkJRW5h
YmxlQ09NREFURm9sZGluZz0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJ
RGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENN
YWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
b3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7
bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwm
cXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1b3Q7
ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7
JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAmcXVv
dDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBE
OyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4K
LQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwvUmVmZXJlbmNlcz4KLQk8Rmls
ZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKLQkJCUZpbHRlcj0iY3BwO2M7
Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCi0JCQlVbmlxdWVJZGVudGlmaWVy
PSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKLQkJCT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXEJsaXQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJ1ZmZlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxkZWJ1Zy5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRmVuY2UuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEZyYW1l
YnVmZmVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlxIYW5kbGVBbGxvY2F0b3IuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXEluZGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5jcHAiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbS5jcHAi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3Jh
bUJpbmFyeS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii5cUXVlcnkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5jcHAiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VNYW5hZ2Vy
LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxT
aGFkZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXFRleHR1cmUuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXHV0aWxpdGllcy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cVmVydGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IkhlYWRlciBGaWxlcyIKLQkJCUZp
bHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgotCQkJVW5pcXVlSWRlbnRpZmllcj0iezkz
OTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLlxCbGl0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQ29udGV4dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEZlbmNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDIu
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aW5jbHVkZVxHTEVTMlxnbDJleHQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEhhbmRsZUFsbG9jYXRv
ci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXElu
ZGV4RGF0YU1hbmFnZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLlxtYWluLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cbWF0aHV0aWwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5LmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxSZWZDb3VudE9iamVjdC5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRl
cmJ1ZmZlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXHJlc291cmNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cUmVzb3VyY2VNYW5hZ2VyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVyZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHV0aWxpdGllcy5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cdmVyc2lvbi5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHZlcnRleGNvbnZl
cnNpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
LlxWZXJ0ZXhEYXRhTWFuYWdlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0J
CTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmRlZiIKLQkJCT4KLQkJPC9GaWxl
PgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5yYyIKLQkJCT4KLQkJPC9G
aWxlPgotCTwvRmlsZXM+Ci0JPEdsb2JhbHM+Ci0JPC9HbG9iYWxzPgotPC9WaXN1YWxTdHVkaW9Q
cm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9tYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NGQyNzcuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE3NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBtYWluLmNwcDog
RExMIGVudHJ5IHBvaW50IGFuZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVz
LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFj
ZS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLXN0YXRpYyBEV09S
RCBjdXJyZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOwotCi1CT09MIFdJTkFQSSBEbGxNYWlu
KEhJTlNUQU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCi17Ci0g
ICAgc3dpdGNoIChyZWFzb24pCi0gICAgewotICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOwotCi0gICAg
ICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAotICAgICAg
Y2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkN1cnJl
bnQgKmN1cnJlbnQgPSAoZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGdsOjpD
dXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOwotCi0gICAgICAg
ICAgICAgICAgY3VycmVudC0+Y29udGV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dC0+ZGlzcGxheSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAg
ICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAg
IGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgo
SExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAgICAgICAg
aWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxGcmVlKChI
TE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRsc0ZyZWUoY3Vy
cmVudFRMUyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotbmFtZXNwYWNlIGds
Ci17Ci12b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlz
cGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAo
Q3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5jb250ZXh0
ID0gY29udGV4dDsKLSAgICBjdXJyZW50LT5kaXNwbGF5ID0gZGlzcGxheTsKLQotICAgIGlmIChj
b250ZXh0ICYmIGRpc3BsYXkgJiYgc3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPm1h
a2VDdXJyZW50KGRpc3BsYXksIHN1cmZhY2UpOwotICAgIH0KLX0KLQotQ29udGV4dCAqZ2V0Q29u
dGV4dCgpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5jb250ZXh0OwotfQotCi1Db250ZXh0
ICpnZXROb25Mb3N0Q29udGV4dCgpCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRl
eHQoKTsKLSAgICAKLSAgICBpZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dDsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCkK
LXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRU
TFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7Ci19Ci0KLUlEaXJlY3QzRERldmlj
ZTkgKmdldERldmljZSgpCi17Ci0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxh
eSgpOwotCi0gICAgcmV0dXJuIGRpc3BsYXktPmdldERldmljZSgpOwotfQotCi1ib29sIGNoZWNr
RGV2aWNlTG9zdChIUkVTVUxUIGVycm9yQ29kZSkKLXsKLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBOVUxMOwotCi0gICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKGVycm9yQ29kZSkpCi0gICAg
ewotICAgICAgICBkaXNwbGF5ID0gZ2w6OmdldERpc3BsYXkoKTsKLSAgICAgICAgZGlzcGxheS0+
bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotfQotCi0vLyBSZWNvcmRzIGFuIGVycm9yIGNvZGUKLXZvaWQgZXJyb3Io
R0xlbnVtIGVycm9yQ29kZSkKLXsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsR2V0Q3Vy
cmVudENvbnRleHQoKTsKLQotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChlcnJvckNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfRU5VTToK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRFbnVtKCk7Ci0gICAgICAgICAgICBU
UkFDRSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBlbnVtXG4iKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9WQUxVRToKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY29yZEludmFsaWRWYWx1ZSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBFcnJv
ciBnZW5lcmF0ZWQ6IGludmFsaWQgdmFsdWVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9JTlZBTElEX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y29yZEludmFsaWRPcGVyYXRpb24oKTsKLSAgICAgICAgICAgIFRSQUNFKCJcdCEgRXJyb3IgZ2Vu
ZXJhdGVkOiBpbnZhbGlkIG9wZXJhdGlvblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX09VVF9PRl9NRU1PUlk6Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRP
dXRPZk1lbW9yeSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IG91
dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY29y
ZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBF
cnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgZnJhbWVidWZmZXIgb3BlcmF0aW9uXG4iKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL21haW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFp
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQ4NDhhLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5oOiBNYW5h
Z2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgotCi0jaWZuZGVmIExJQkdMRVNWMl9NQUlOX0hf
Ci0jZGVmaW5lIExJQkdMRVNWMl9NQUlOX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotCi0jaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotc3RydWN0IEN1cnJlbnQK
LXsKLSAgICBDb250ZXh0ICpjb250ZXh0OwotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheTsKLX07
Ci0KLXZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNw
bGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotCi1Db250ZXh0ICpnZXRDb250ZXh0KCk7Ci1D
b250ZXh0ICpnZXROb25Mb3N0Q29udGV4dCgpOwotZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCk7
Ci0KLUlEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpOwotCi1ib29sIGNoZWNrRGV2aWNlTG9z
dChIUkVTVUxUIGVycm9yQ29kZSk7Ci19Ci0KLXZvaWQgZXJyb3IoR0xlbnVtIGVycm9yQ29kZSk7
Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdCBUICZlcnJvcihHTGVudW0gZXJyb3JDb2RlLCBj
b25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0gICAgcmV0
dXJuIHJldHVyblZhbHVlOwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFJTl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmIyMjUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDk5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIG1hdGh1dGlsLmg6IE1hdGgg
YW5kIGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgotCi0jaWZuZGVmIExJQkdMRVNWMl9NQVRI
VVRJTF9IXwotI2RlZmluZSBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KLQotI2luY2x1ZGUgPGludHJp
bi5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFj
ZSBnbAotewotaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQotewotICAgIHJldHVybiAoeCAmICh4
IC0gMSkpID09IDAgJiYgKHggIT0gMCk7Ci19Ci0KLWlubGluZSBpbnQgbG9nMihpbnQgeCkKLXsK
LSAgICBpbnQgciA9IDA7Ci0gICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOwotICAgIHJldHVy
biByOwotfQotCi1pbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQot
ewotICAgIGlmICh4ICE9IDApIHgtLTsKLSAgICB4IHw9IHggPj4gMTsKLSAgICB4IHw9IHggPj4g
MjsKLSAgICB4IHw9IHggPj4gNDsKLSAgICB4IHw9IHggPj4gODsKLSAgICB4IHw9IHggPj4gMTY7
Ci0gICAgeCsrOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIE1JTiwgdHlwZW5hbWUgTUFYPgotaW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWluLCBN
QVggbWF4KQotewotICAgIHJldHVybiB4IDwgbWluID8gbWluIDogKHggPiBtYXggPyBtYXggOiB4
KTsKLX0KLQotaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxvYXQgeCkKLXsKLSAgICByZXR1cm4gY2xh
bXAoeCwgMC4wZiwgMS4wZik7Ci19Ci0KLXRlbXBsYXRlPGNvbnN0IGludCBuPgotaW5saW5lIHVu
c2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXgg
PSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOwotCi0gICAgaWYgKHggPiAxKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1heDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA8IDApCi0gICAgewotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuICh1bnNp
Z25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKLSAgICB9Ci19Ci0KLWlubGluZSBib29sIHN1cHBv
cnRzU1NFMigpCi17Ci0gICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwotICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzID0gZmFsc2U7Ci0KLSAgICBpZiAoY2hlY2tlZCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzdXBwb3J0czsKLSAgICB9Ci0KLSAgICBpbnQgaW5mb1s0XTsKLSAgICBfX2Nw
dWlkKGluZm8sIDApOwotICAgIAotICAgIGlmIChpbmZvWzBdID49IDEpCi0gICAgewotICAgICAg
ICBfX2NwdWlkKGluZm8sIDEpOwotCi0gICAgICAgIHN1cHBvcnRzID0gKGluZm9bM10gPj4gMjYp
ICYgMTsKLSAgICB9Ci0KLSAgICBjaGVja2VkID0gdHJ1ZTsKLQotICAgIHJldHVybiBzdXBwb3J0
czsKLX0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX01BVEhVVElMX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM5YWRhYWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQg
KzAsMCBAQAotLy97e05PX0RFUEVOREVOQ0lFU319Ci0vLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBn
ZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgotLy8gVXNlZCBieSBsaWJHTEVTdjIucmMKLQotLy8gTmV4
dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKLS8vIAotI2lmZGVmIEFQU1RVRElPX0lO
Vk9LRUQKLSNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotI2RlZmluZSBfQVBTX05F
WFRfUkVTT1VSQ0VfVkFMVUUgICAgICAgIDEwMQotI2RlZmluZSBfQVBTX05FWFRfQ09NTUFORF9W
QUxVRSAgICAgICAgIDQwMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAgICAg
ICAgMTAwMQotI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEwMQotI2Vu
ZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvdXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjNjJkOS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxp
dGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIHV0aWxpdGllcy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1
dGlsaXR5IHJvdXRpbmVzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi0j
aW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5o
PgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0
aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgZ2wK
LXsKLQotLy8gVGhpcyBpcyBob3cgbXVjaCBkYXRhIHRoZSBhcHBsaWNhdGlvbiBleHBlY3RzIGZv
ciBhIHVuaWZvcm0KLWludCBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudChHTGVudW0gdHlw
ZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CT09MOgotICAg
ICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzJEOgotICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgcmV0dXJuIDE7
Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAg
ICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0gICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdM
X0lOVF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgY2FzZSBHTF9CT09M
X1ZFQzM6Ci0gICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6Ci0gICAgICAgICAgcmV0dXJuIDk7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
Ci0gICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIGlzIGhvdyBtdWNo
IGRhdGEgd2UgYWN0dWFsbHkgc3RvcmUgZm9yIGEgdW5pZm9ybQotaW50IFVuaWZvcm1JbnRlcm5h
bENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgIGNhc2UgR0xf
U0FNUExFUl8yRDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgIHJldHVy
biAxOwotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMyOgot
ICAgICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMzOgotICAgICAgICAgIHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GTE9BVDoK
LSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAg
ICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAg
Y2FzZSBHTF9JTlRfVkVDNDoKLSAgICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMjoKLSAgICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoK
LSAgICAgICAgICByZXR1cm4gMTI7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAg
ICAgcmV0dXJuIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUo
R0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9C
T09MOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMzoK
LSAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAgICAgIHJldHVybiBHTF9CT09MOwotICAg
ICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDoKLSAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX0lOVDoK
LSAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgot
ICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAgICBj
YXNlIEdMX0lOVF9WRUM0OgotICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PTkU7
Ci19Ci0KLXNpemVfdCBVbmlmb3JtQ29tcG9uZW50U2l6ZShHTGVudW0gdHlwZSkKLXsKLSAgICBz
d2l0Y2godHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JPT0w6ICByZXR1cm4gc2l6ZW9mKEdM
aW50KTsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7Ci0gICAg
ICBjYXNlIEdMX0lOVDogICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICAgIGRlZmF1bHQ6ICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXNpemVfdCBV
bmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBVbmlmb3JtQ29t
cG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3JtSW50ZXJuYWxD
b21wb25lbnRDb3VudCh0eXBlKTsKLX0KLQotc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xl
bnVtIHR5cGUpCi17Ci0gICAgcmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21w
b25lbnRUeXBlKHR5cGUpKSAqIFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHR5cGUpOwot
fQotCi1pbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gMDsKLSAgICAg
IGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0lOVDoK
LSAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAg
ICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgIGNhc2UgR0xf
Qk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBHTF9JTlRf
VkVDNDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAg
ICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICByZXR1cm4g
MzsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwot
fQotCi1pbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gMDsKLSAg
ICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0lO
VDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0gICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoK
LSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xf
Qk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBHTF9JTlRf
VkVDNDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAw
OwotfQotCi1pbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5z
aWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCi17Ci0gICAg
QVNTRVJUKGFsbG9jYXRpb25TaXplIDw9IGJpdHNTaXplKTsKLQotICAgIHVuc2lnbmVkIGludCBt
YXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6ZSk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2NhdGlvblNp
emUgKyAxOyBpKyspCi0gICAgewotICAgICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgKmJpdHMgfD0gbWFzazsKLSAgICAgICAgICAgIHJldHVybiBp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbWFzayA8PD0gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
LTE7Ci19Ci0KLUdMc2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgQVNTRVJUKGFsaWdubWVu
dCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOwotCi0gICAgR0xzaXplaSByYXdQaXRjaCA9IENv
bXB1dGVQaXhlbFNpemUoZm9ybWF0LCB0eXBlKSAqIHdpZHRoOwotICAgIHJldHVybiAocmF3UGl0
Y2ggKyBhbGlnbm1lbnQgLSAxKSAmIH4oYWxpZ25tZW50IC0gMSk7Ci19Ci0KLUdMc2l6ZWkgQ29t
cHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KQotewotICAg
IHJldHVybiBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIDEsIGZvcm1hdCk7Ci19Ci0KLUdM
c2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgIHJldHVybiA4ICogKEdMc2l6ZWkpY2Vp
bCgoZmxvYXQpd2lkdGggLyA0LjBmKSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdodCAvIDQu
MGYpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRToKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdM
RToKLSAgICAgICAgcmV0dXJuIDE2ICogKEdMc2l6ZWkpY2VpbCgoZmxvYXQpd2lkdGggLyA0LjBm
KSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdodCAvIDQuMGYpOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi19Ci0KLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51
bSBmb3JtYXQpCi17Ci0gICAgaWYoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQgfHwKLSAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQgfHwKLSAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdM
RSB8fAotICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xF
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFRleHR1cmUoR0xl
bnVtIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEdMX0RFUFRIX0NPTVBPTkVOVCB8fAot
ICAgICAgICBmb3JtYXQgPT0gR0xfREVQVEhfU1RFTkNJTF9PRVMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFJldHVybnMg
dGhlIHNpemUsIGluIGJ5dGVzLCBvZiBhIHNpbmdsZSB0ZXhlbCBpbiBhbiBJbWFnZQotaW50IENv
bXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRTogICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDI7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQg
Y2hhcikgKiAzOwotICAgICAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICByZXR1cm4gc2l6
ZW9mKHVuc2lnbmVkIGNoYXIpICogNDsKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDQ7Ci0gICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMToKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsK
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVM6Ci0gICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKLSAgICAgIGNh
c2UgR0xfRkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YoZmxvYXQpOwotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsKLSAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZihmbG9hdCkgKiAyOwot
ICAgICAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KSAq
IDM7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXplb2YoZmxv
YXQpICogNDsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6ICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOiByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDI7
Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpICogMzsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcmV0dXJu
IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA0OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1ib29sIElzQ3ViZW1hcFRleHR1
cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICByZXR1cm4gKHRhcmdldCA+PSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggJiYgdGFyZ2V0IDw9IEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWik7Ci19Ci0KLWJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCkKLXsKLSAgICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFw
VGV4dHVyZVRhcmdldCh0YXJnZXQpOwotfQotCi1HTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0g
aW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9S
R0I7Ci0gICAgICBjYXNlIEdMX1JHQkE0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9SR0JBOwotICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThf
QUxQSEE4X0VYVDogICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7Ci0gICAgICBj
YXNlIEdMX0xVTUlOQU5DRThfRVhUOiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFO
Q0U7Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9BTFBIQTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDog
ICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOiAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRTogcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6IHJldHVybiBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCMzJG
X0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xf
QUxQSEEzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5B
TkNFOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOiAgICAgICAgICByZXR1
cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDog
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xfQUxQSEEx
NkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOwot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xf
TFVNSU5BTkNFX0FMUEhBOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQkdSQV9FWFQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDE2OiAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQ7Ci0gICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiAgICAgICAgICAgIHJl
dHVybiBHTF9ERVBUSF9TVEVOQ0lMX09FUzsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKLSAgICB9
Ci19Ci0KLUdMZW51bSBFeHRyYWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAg
c3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTsKLSAg
ICAgIGNhc2UgR0xfUkdCQTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzQ7Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6ICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOwotICAgICAgY2Fz
ZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURf
QllURTsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VY
VDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U4X0VYVDogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAg
ICAgIGNhc2UgR0xfQUxQSEE4X0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
ICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDogICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTogcmV0dXJuIEdMX1VOU0lHTkVEX0JZ
VEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6IHJldHVy
biBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6ICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAgIGNhc2UgR0xfQUxQSEEz
MkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UzMkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9GTE9B
VDsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0hBTEZfRkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOiAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0FMUEhB
MTZGX0VYVDogICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0hB
TEZfRkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOiAgICAg
ICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDog
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURf
U0hPUlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAgICAgIHJl
dHVybiBHTF9VTlNJR05FRF9JTlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OiAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM7Ci0gICAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8v
IFVuc3VwcG9ydGVkCi0gICAgfQotfQotCi1ib29sIElzQ29sb3JSZW5kZXJhYmxlKEdMZW51bSBp
bnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdM
X1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09F
UzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgSXNEZXB0aFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQx
NjoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfUkdCQTQ6
Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgIH0K
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc1N0ZW5jaWxSZW5kZXJhYmxlKEdMZW51
bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0g
ICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2Ug
R0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LX0KLQotbmFtZXNwYWNlIGVzMmR4Ci17Ci0KLUQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24o
R0xlbnVtIGNvbXBhcmlzb24pCi17Ci0gICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FM
V0FZUzsKLSAgICBzd2l0Y2ggKGNvbXBhcmlzb24pCi0gICAgewotICAgICAgY2FzZSBHTF9ORVZF
UjogICAgZDNkQ29tcCA9IEQzRENNUF9ORVZFUjsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9BTFdBWVM6ICAgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9MRVNTOiAgICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9MRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9FUVVBTDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVB
VEVSOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENN
UF9HUkVBVEVSRVFVQUw7IGJyZWFrOwotICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9
IEQzRENNUF9OT1RFUVVBTDsgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQ29tcDsKLX0KLQotRDNEQ09MT1IgQ29udmVydENv
bG9yKGdsOjpDb2xvciBjb2xvcikKLXsKLSAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5v
cm08OD4oY29sb3IucmVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4o
Y29sb3IuZ3JlZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xv
ci5ibHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxw
aGEpKTsKLX0KLQotRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpCi17Ci0g
ICAgRDNEQkxFTkQgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJPOwotCi0gICAgc3dpdGNoIChibGVu
ZCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9aRVJPOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORTog
ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9TUkNDT0xPUjsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5V
U19TUkNfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0RTVF9DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBE
M0RCTEVORF9ERVNUQ09MT1I7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQ09MT1I6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RC
TEVORF9TUkNBTFBIQTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNf
QUxQSEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVO
RF9ERVNUQUxQSEE7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQ
SEE6ICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9C
TEVOREZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9D
T0xPUjogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0NPTlNUQU5UX0FMUEhBOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVO
REZBQ1RPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBI
QTogZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NSQ19BTFBIQV9TQVRVUkFURTogICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBI
QVNBVDsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBkM2RCbGVuZDsKLX0KLQotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVu
dW0gYmxlbmRPcCkKLXsKLSAgICBEM0RCTEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FE
RDsKLQotICAgIHN3aXRjaCAoYmxlbmRPcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZVTkNfQURE
OiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RC
TEVORE9QX1NVQlRSQUNUOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NV
QlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZE9w
OwotfQotCi1EM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQot
ewotICAgIEQzRFNURU5DSUxPUCBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKLQot
ICAgIHN3aXRjaCAoc3RlbmNpbE9wKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICBk
M2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfWkVSTzsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0tFRVA6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SRVBMQUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBM
QUNFOyBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RT
VEVOQ0lMT1BfSU5DUlNBVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3Rl
bmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1JTQVQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTlZF
UlQ6ICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsKLSAgICAg
IGNhc2UgR0xfSU5DUl9XUkFQOiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJ
TE9QX0RFQ1I7ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZDNkU3RlbmNpbE9wOwotfQotCi1EM0RURVhUVVJFQUREUkVTUyBDb252
ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApCi17Ci0gICAgRDNEVEVYVFVSRUFERFJFU1MgZDNk
V3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7Ci0KLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAg
ICAgY2FzZSBHTF9SRVBFQVQ6ICAgICAgICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNE
VEFERFJFU1NfQ0xBTVA7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAg
IGQzZFdyYXAgPSBEM0RUQUREUkVTU19NSVJST1I7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkV3JhcDsKLX0KLQotRDNEQ1VMTCBD
b252ZXJ0Q3VsbE1vZGUoR0xlbnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQotewotICAg
IEQzRENVTEwgY3VsbCA9IEQzRENVTExfQ0NXOwotICAgIHN3aXRjaCAoY3VsbEZhY2UpCi0gICAg
ewotICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xf
Q0NXID8gRDNEQ1VMTF9DVyA6IEQzRENVTExfQ0NXKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0JBQ0s6Ci0gICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENV
TExfQ0NXIDogRDNEQ1VMTF9DVyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUk9O
VF9BTkRfQkFDSzoKLSAgICAgICAgY3VsbCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxs
IGJlIGhhbmRsZWQgZHVyaW5nIGRyYXcKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBjdWxsOwotfQotCi1EM0RDVUJFTUFQ
X0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3ViZUZhY2UpCi17Ci0gICAgRDNEQ1VCRU1B
UF9GQUNFUyBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0KLSAgICBzd2l0Y2gg
KGN1YmVGYWNlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAg
ICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9
IEQzRENVQkVNQVBfRkFDRV9QT1NJVElWRV9ZOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1B
UF9GQUNFX05FR0FUSVZFX1k7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9T
SVRJVkVfWjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9aOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhY2U7Ci19Ci0KLURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJv
b2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICByZXR1cm4gKHJlZCAgID8g
RDNEQ09MT1JXUklURUVOQUJMRV9SRUQgICA6IDApIHwKLSAgICAgICAgICAgKGdyZWVuID8gRDNE
Q09MT1JXUklURUVOQUJMRV9HUkVFTiA6IDApIHwKLSAgICAgICAgICAgKGJsdWUgID8gRDNEQ09M
T1JXUklURUVOQUJMRV9CTFVFICA6IDApIHwKLSAgICAgICAgICAgKGFscGhhID8gRDNEQ09MT1JX
UklURUVOQUJMRV9BTFBIQSA6IDApOwotfQotCi1EM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0
TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpCi17Ci0gICAgRDNEVEVYVFVSRUZJTFRFUlRZUEUg
ZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICBzd2l0Y2ggKG1hZ0ZpbHRlcikKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6IGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSOiAgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9M
SU5FQVI7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZDNkTWFnRmlsdGVyOwotfQotCi12b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVt
IG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVS
RUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKG1pbkZpbHRlcikKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RU
RVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0g
RDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAg
ICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgKmQzZE1pcEZpbHRl
ciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJf
TUlQTUFQX05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsK
LSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5GaWx0
ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5F
QVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoK
LSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAgICAqZDNkTWlw
RmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBG
aWx0ZXIgPSBEM0RURVhGX05PTkU7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQot
Ci1ib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVp
IGVsZW1lbnRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlUSVZFVFlQ
RSAqZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCkKLXsKLSAgICBzd2l0
Y2ggKHByaW1pdGl2ZVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgICAg
ICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOwotICAgICAgICAqZDNkUHJpbWl0
aXZlQ291bnQgPSBlbGVtZW50Q291bnQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9M
SU5FUzoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsKLSAgICAg
ICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC8gMjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9PUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBE
M0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3Vu
dCAtIDE7ICAgLy8gRDNEIGRvZXNuJ3Qgc3VwcG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBkcmF3IHRo
ZSBsYXN0IGxpbmUgc2VwYXJhdGVseQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElO
RV9TVFJJUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7Ci0g
ICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDE7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9UUklBTkdMRVM6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBl
ID0gRDNEUFRfVFJJQU5HTEVMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVt
ZW50Q291bnQgLyAzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RS
SVA6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVTVFJJUDsKLSAg
ICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC0gMjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5
cGUgPSBEM0RQVF9UUklBTkdMRUZBTjsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxl
bWVudENvdW50IC0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUQzREZPUk1BVCBD
b252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9OVUxMOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9B
MToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThS
OEc4Qjg7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1U
X1I1RzZCNTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RG
TVRfWDhSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUQzRE1VTFRJU0FN
UExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKQot
ewotICAgIGlmIChzYW1wbGVzIDw9IDEpCi0gICAgICAgIHJldHVybiBEM0RNVUxUSVNBTVBMRV9O
T05FOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBFKXNhbXBs
ZXM7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGR4MmVzCi17Ci0KLXVuc2lnbmVkIGludCBHZXRTdGVu
Y2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkKLXsKLSAgICBpZiAoc3RlbmNpbEZvcm1h
dCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBz
d2l0Y2goc3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRGUzg6Ci0g
ICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQz
REZNVF9EMjRYNFM0OgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMx
OgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKLSAg
ICAgIGNhc2UgRDNERk1UX0QzMjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgY2Fz
ZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgLy9jYXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4gMDsgICAv
LyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1
cm4gODsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNv
bG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBE
M0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RG
TVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0g
ICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0UmVkU2l6ZShEM0RGT1JN
QVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7Ci0gICAg
ICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBj
YXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAgICBjYXNl
IEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDEwOwotICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0dXJu
IDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZC
NToKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRHcmVlblNpemUoRDNERk9STUFUIGNvbG9yRm9y
bWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRf
QTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJS
MTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAxMDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAg
Y2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiA1OwotICAgICAgY2FzZSBEM0RG
TVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gNjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBj
b2xvckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2Ug
RDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNE
Rk1UX0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMTA7Ci0gICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICByZXR1cm4gODsK
LSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1Ogot
ICAgICAgICByZXR1cm4gNTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLX0KLQotdW5zaWduZWQgaW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQp
Ci17Ci0gICAgaWYgKGRlcHRoRm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIDI0OwotICAgIH0KLSAgICBzd2l0Y2ggKGRlcHRoRm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRTogIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1U
X0QzMjogICAgICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMxOiAgICAg
ICAgIHJldHVybiAxNTsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgIHJldHVybiAy
NDsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OiAgICAgICAgIHJldHVybiAyNDsKLSAgICAgIGNh
c2UgRDNERk1UX0QyNFg0UzQ6ICAgICAgIHJldHVybiAyNDsKLSAgICAgIGNhc2UgRDNERk1UX0Qx
NjogICAgICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6
IHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNEZTODogICAgICAgIHJldHVybiAyNDsK
LSAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAzMjsgICAvLyBEM0Q5RXgg
b25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDA7ICAgIC8vIEQz
RDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19Ci0KLWJvb2wgSXNGbG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQot
ewotICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX1Ix
NkY6Ci0gICAgICBjYXNlIEQzREZNVF9HMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2
RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEM0RGTVRfUjMyRjoK
LSAgICAgIGNhc2UgRDNERk1UX0czMlIzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJS
MzJGOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4Ogot
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToK
LSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICBzd2l0
Y2goc3VyZmFjZUZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9SMTZGOgotICAgICAg
Y2FzZSBEM0RGTVRfRzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEM0RGTVRfUjMyRjoKLSAgICAgIGNhc2Ug
RDNERk1UX0czMlIzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc0RlcHRo
VGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICByZXR1cm4gKHN1
cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOwotfQotCi1ib29sIElzU3RlbmNpbFRleHR1cmVG
b3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgcmV0dXJuIChzdXJmYWNlRm9y
bWF0ID09IEQzREZNVF9JTlRaKTsKLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2Ft
cGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNE
TVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIHR5cGU7Ci19Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChE
M0RGT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1
OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4g
R0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09F
UzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChE
M0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAg
ewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgIGNhc2Ug
RDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAg
ICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLX0KLQotc3RkOjpzdHJpbmcg
Z2V0VGVtcFBhdGgoKQotewotICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07Ci0gICAgRFdPUkQgcGF0
aExlbiA9IEdldFRlbXBQYXRoQShzaXplb2YocGF0aCkgLyBzaXplb2YocGF0aFswXSksIHBhdGgp
OwotICAgIGlmIChwYXRoTGVuID09IDApCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBVSU5UIHVuaXF1ZSA9
IEdldFRlbXBGaWxlTmFtZUEocGF0aCwgInNoIiwgMCwgcGF0aCk7Ci0gICAgaWYgKHVuaXF1ZSA9
PSAwKQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
c3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwYXRoOwotfQotCi12b2lkIHdyaXRl
RmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBjb250ZW50LCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICBGSUxFKiBmaWxlID0gZm9wZW4ocGF0aCwgInciKTsKLSAgICBpZiAoIWZpbGUpCi0g
ICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgZndyaXRlKGNvbnRlbnQsIHNpemVvZihjaGFyKSwgc2l6ZSwgZmlsZSk7Ci0gICAgZmNsb3Nl
KGZpbGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
dXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjI0MTguLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyB1dGlsaXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91
dGluZXMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICi0jZGVmaW5lIExJQkdMRVNW
Ml9VVElMSVRJRVNfSAotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNs
dWRlIDxzdHJpbmc+Ci0KLWNvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFU
KShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKLWNvbnN0IEQzREZPUk1BVCBEM0RGTVRf
TlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKLQotbmFt
ZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBDb2xvcjsKLQotaW50IFVuaWZvcm1FeHRlcm5hbENvbXBv
bmVudENvdW50KEdMZW51bSB0eXBlKTsKLWludCBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3Vu
dChHTGVudW0gdHlwZSk7Ci1HTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUp
Owotc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwotc2l6ZV90IFVuaWZv
cm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwotaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVt
IHR5cGUpOwotaW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOwotCi1pbnQgQWxs
b2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9j
YXRpb25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpOwotCi1pbnQgQ29tcHV0ZVBpeGVsU2l6
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7Ci1HTHNpemVpIENvbXB1dGVQaXRjaChHTHNp
emVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KTsK
LUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9y
bWF0KTsKLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3Jt
YXQpOwotYm9vbCBJc0RlcHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXNDdWJlbWFw
VGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLWJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQoR0xlbnVtIHRhcmdldCk7Ci1HTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxm
b3JtYXQpOwotR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7Ci0KLWJv
b2wgSXNDb2xvclJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLWJvb2wgSXNEZXB0
aFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLWJvb2wgSXNTdGVuY2lsUmVuZGVy
YWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwotCi19Ci0KLW5hbWVzcGFjZSBlczJkeAotewot
Ci1EM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKLUQzRENP
TE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpOwotRDNEQkxFTkQgQ29udmVydEJsZW5k
RnVuYyhHTGVudW0gYmxlbmQpOwotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxl
bmRPcCk7Ci1EM0RTVEVOQ0lMT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsK
LUQzRFRFWFRVUkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7Ci1EM0RD
VUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpOwot
RDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVtIGN1YmVGYWNlKTsKLURXT1JE
IENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBh
bHBoYSk7Ci1EM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdG
aWx0ZXIpOwotdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRV
UkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBG
aWx0ZXIpOwotYm9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwg
R0xzaXplaSBlbGVtZW50Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1J
VElWRVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpOwotRDNE
Rk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EM0RNVUxU
SVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxl
cyk7Ci0KLX0KLQotbmFtZXNwYWNlIGR4MmVzCi17Ci1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGb3Jt
YXQpOwotR0x1aW50IEdldEdyZWVuU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotR0x1aW50
IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0RGVwdGhTaXpl
KEQzREZPUk1BVCBkZXB0aEZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFU
IHN0ZW5jaWxGb3JtYXQpOwotYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VG
b3JtYXQpOwotYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwot
Ym9vbCBJc0RlcHRoVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Ci1ib29s
IElzU3RlbmNpbFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwotCi1HTHNp
emVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlw
ZSk7Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsK
LUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotCi19
Ci0KLXN0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCk7Ci12b2lkIHdyaXRlRmlsZShjb25zdCBjaGFy
KiBwYXRoLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSk7Ci0KLWlubGluZSBib29sIGlz
RGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQotewotICAgIHN3aXRjaCAoZXJyb3JD
b2RlKQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1I6Ci0gICAg
ICBjYXNlIEQzREVSUl9ERVZJQ0VMT1NUOgotICAgICAgY2FzZSBEM0RFUlJfREVWSUNFSFVORzoK
LSAgICAgIGNhc2UgRDNERVJSX0RFVklDRVJFTU9WRUQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX07Ci0KLSNlbmRp
ZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ZlcnRleGNvbnZlcnNpb24uaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1YmI4Yjg5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjA4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHZlcnRleGNvbnZlcnNpb24u
aDogQSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNl
ZCB0byBidWlsZAotLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQgYnkgdGhlIGJ1
ZmZlciBjb252ZXJzaW9uIHN5c3RlbS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVYQ09OVkVS
U0lPTl9IXwotI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwotCi0jaW5jbHVk
ZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29u
dGV4dC5oIiAvLyBEZWZpbmVzIEluZGV4Ci0KLW5hbWVzcGFjZSBnbAotewotCi0vLyBDb252ZXJz
aW9uIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBp
cyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0sIGZhbHNlIG90aGVyd2lzZQotLy8gc3RhdGljIFUgY29u
dmVydChUKTogY29udmVydCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8g
dGhlIG91dHB1dCB0eXBlCi0vLyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9k
dWNlZCBieSB0aGlzIGNvbnZlcnNpb24KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgSWRl
bnRpdHkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7Ci0KLSAgICB0
eXBlZGVmIFQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZyb21ULCBj
bGFzcyBUb1Q+Ci1zdHJ1Y3QgQ2FzdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5
ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIFRvVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFRv
VCBjb252ZXJ0KEZyb21UIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9U
Pih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0PFQsIFQ+
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRl
ZiBUIE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLXN0cnVjdCBOb3JtYWxpemUKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0
eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+IE5MOwotICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOwot
Ci0gICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBj
b25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0gICAgICAg
ICAgICAvLyBzdGF0aWMgY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJz
dCB0aW1lIHdlIGdldCBoZXJlLCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJk
IGFuZCBhbGwgdGhhdC4KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygy
KnN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpKzEpOwotICAgICAgICAgICAgcmV0dXJuICgy
KmYrMSkqZGl2aXNvcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmL05MOjptYXgoKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBGcm9tVHlwZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgotc3RydWN0IEZpeGVk
VG9GbG9hdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAg
ICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChG
cm9tVHlwZSB4KQotICAgIHsKLSAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBz
dGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOwotICAgIH0K
LX07Ci0KLS8vIFdpZGVuIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0
aWFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCi0vLyBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFm
dGVyIGNvbnZlcnNpb24KLQotLy8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgotdGVt
cGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgTm9XaWRlbgotewotICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNp
emVfdCBmaW5hbFdpZHRoID0gTjsKLX07Ci0KLS8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVO
U0lHTkVEX1NIT1JUIGFyZSBzdXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50
cwotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsKLSAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgTj4KLXN0cnVjdCBXaWRlblRvRm91cgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBm
aW5hbFdpZHRoID0gNDsKLX07Ci0KLS8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJl
IGp1c3QgdGhhdC4KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1
ZXMKLXsKLSAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0K
LSAgICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQotfTsKLQot
Ly8gQnV0IG5vcm1hbGlzZWQgdHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4w
IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBtYXggdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0
cnVjdCBOb3JtYWxpemVkRGVmYXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8oKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxUPigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6Ci0vLyBz
dGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRy
YW5zZm9ybSAod2l0aCBubyB3aWRlbmluZykKLS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBm
aW5hbFNpemU6IG51bWJlciBvZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAotLy8gc3RhdGljIHZv
aWQgY29udmVydEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6
c2l6ZV90IG4sIHZvaWQgKm91dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0
IG1heSBiZSBzdHJpZGVkLCBidXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10ZW1wbGF0
ZSA8Y2xhc3MgSW5ULCBjbGFzcyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVm
YXVsdFZhbHVlUnVsZSA9IFNpbXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3QgVmVydGV4
RGF0YUNvbnZlcnRlcgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRU
eXBlIE91dHB1dFR5cGU7Ci0gICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgaWRlbnRpdHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5S
dWxlOjpmaW5hbFdpZHRoKSAmJiBDb252ZXJ0ZXI6OmlkZW50aXR5OwotICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnNpemVfdCBmaW5hbFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2Yo
T3V0cHV0VHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRU
eXBlICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpv
dXQpCi0gICAgewotICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRC
eXRlcyhpbiwgaSAqIHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBl
aW4sIDAsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkp
OwotICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0
cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29t
cG9uZW50KG91dCwgZWluLCAyLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVS
dWxlOjp6ZXJvKCkpKTsKLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0
YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0KLSAgICAg
ICAgICAgIG91dCArPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90
IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRBcnJheShzdGF0aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwg
biwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZSo+KG91dCkpOwotICAgIH0KLQotICBwcml2YXRlOgot
ICAgIC8vIEFkdmFuY2UgdGhlIGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5v
dCBwb2ludGVkLXRvIGVsZW1lbnRzKS4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGF0
aWMgVCAqcG9pbnRlckFkZEJ5dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYmFzZVB0cikgKyBudW1CeXRlcyk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IHZvaWQgY29weUNvbXBvbmVudChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4s
IHN0ZDo6c2l6ZV90IGVsZW1lbnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCi0gICAg
ewotICAgICAgICBpZiAoV2lkZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50
aW5kZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0g
PSBDb252ZXJ0ZXI6OmNvbnZlcnQoaW5bZWxlbWVudGluZGV4XSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1l
bnRpbmRleF0gPSBkZWZhdWx0dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CmluZGV4IGFmMzNmYTAuLmIxNzEzYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0yNzA2LDI0ICsyNzA2LDE3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFs
bG9jLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2F0b20uYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwotICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aWFnbm9zdGljc0Jhc2UuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAotICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCi0gICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0
LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9MZXhlci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCi0gICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIu
Y3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCi0gICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXpl
ci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmMKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYworICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFz
ZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
RXhwcmVzc2lvblBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAK
KyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9R
dWFsaWZpZXJBbGl2ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL1JlbW92ZVRyZWUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCkBAIC0yNzM4LDYgKzI3MzEsNyBAQCBpZiAoV1RG
X1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3V0aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwCiAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKICAgICApCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQ3NmRlODAuLmFiZGYxOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjI5Niw0OCArNjI5NiwzMiBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29s
QWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFs
bG9jLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9t
LmMgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
YXRvbS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NvbXBpbGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jcHAuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
YWdub3N0aWNzQmFzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJz
ZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3Bw
IFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9JbnB1dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9MZXhlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCi0JU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vz
c29yLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNw
cCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKLQlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc3ltYm9scy5jIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFz
ZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9E
aXJlY3RpdmVQYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9JbnB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVy
LmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9NYWNyb0V4cGFuZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaCBcCiAJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBcCiAJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCg==
</data>
<flag name="commit-queue"
          id="199762"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181983</attachid>
            <date>2013-01-09 14:40:43 -0800</date>
            <delta_ts>2013-01-10 11:11:35 -0800</delta_ts>
            <desc>Patch (for bots, not for review)</desc>
            <filename>106274-4.patch</filename>
            <type>text/plain</type>
            <size>1778854</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNWJjOWZmOC4uODA5ODkxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTEsMjIgKzEsMjIgQEAKIDw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICIt
Ly9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1By
b3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotICAgIDxhcnJheT4K
LSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+
Ci0gICAgICAgICAgICA8c3RyaW5nPkFOR0xFPC9zdHJpbmc+Ci0gICAgICAgICAgICA8a2V5Pk9w
ZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0gICAgICAgICAgICA8c3RyaW5nPnIxMTcwPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0gICAgICAgICAg
ICA8c3RyaW5nPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VTQ008L2tleT4KLSAgICAgICAgICAgIDxzdHJp
bmc+c3ZuIGNvIC1yMTE3MCBodHRwOi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL3N2bi90
cnVuay88L3N0cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUltcG9ydERhdGU8L2tl
eT4KLSAgICAgICAgICAgIDxzdHJpbmc+MjAxMi0wNi0xNzwvc3RyaW5nPgotICAgICAgICAgICAg
PGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotICAgICAgICAgICAgPHN0cmluZz5CU0Q8L3N0
cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+Ci0gICAg
ICAgICAgICA8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5nPgotICAgICAgICA8L2RpY3Q+Ci0gICAg
PC9hcnJheT4KLTwvcGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGFycmF5Pgor
CTxkaWN0PgorCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CisJCTxzdHJpbmc+QU5HTEU8
L3N0cmluZz4KKwkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgorCQk8c3RyaW5nPnIxNjQx
PC9zdHJpbmc+CisJCTxrZXk+T3BlblNvdXJjZVdlYnNpdGVVUkw8L2tleT4KKwkJPHN0cmluZz5o
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCQk8a2V5Pk9w
ZW5Tb3VyY2VTQ008L2tleT4KKwkJPHN0cmluZz5zdm4gY28gLXIxNjQxIGh0dHA6Ly9hbmdsZXBy
b2plY3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rLzwvc3RyaW5nPgorCQk8a2V5Pk9wZW5Tb3Vy
Y2VJbXBvcnREYXRlPC9rZXk+CisJCTxzdHJpbmc+MjAxMy0wMS0wNDwvc3RyaW5nPgorCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlPC9rZXk+CisJCTxzdHJpbmc+QlNEPC9zdHJpbmc+CisJCTxrZXk+
T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+CisJCTxzdHJpbmc+QU5HTEUudHh0PC9zdHJpbmc+
CisJPC9kaWN0PgorPC9hcnJheT4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS5wcmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wcmkK
aW5kZXggMmY3YjcwMC4uMmJjN2ZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUucHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnByaQpAQCAt
OCw1ICs4LDYgQEAKIFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFCiAKIElOQ0xVREVQQVRIICs9IFwKLSAgICAkJFNPVVJDRV9ESVIvaW5jbHVk
ZS9HTFNMQU5HCisgICAgJCRTT1VSQ0VfRElSL2luY2x1ZGUvR0xTTEFORyBcCisgICAgJCRTT1VS
Q0VfRElSL2luY2x1ZGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzIwN2VjYS4uNTExM2I3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00Miw2ICs0MiwzNSBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsK
IAkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi87IH07CisJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4OTMxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEy
NjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk0MTY5NzRERUQwMDZGQUE1
QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCAqLzsgfTsKKwkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjRGOEFGMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NEY4OTYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggKi87IH07CisJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OTcxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNjRG
OEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAv
KiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4QjIxNjk3NERFRDAwNkZBQTVBIC8q
IEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NEY4OTkxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwICovOyB9OworCQlBMjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4
QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5j
cHAgKi87IH07CisJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUMxNjk3NERFRDAw
NkZBQTVBIC8qIElucHV0LmggKi87IH07CisJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY0Rjg5RDE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjY0RjhCNzE2
OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oICovOyB9
OworCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUYxNjk3NERFRDAwNkZBQTVB
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhB
MDE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCAqLzsgfTsKKwkJQTI2NEY4QkExNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5k
ZXIuY3BwICovOyB9OworCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCAqLzsgfTsKKwkJQTI2NEY4QkMx
Njk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJp
Y19sZXguaCAqLzsgfTsKKwkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNDE2
OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NEY4QkUxNjk3NERFRDAw
NkZBQTVBIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLzsgfTsKKwkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTYx
Njk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5oICovOyB9OworCQlBMjY0RjhDMDE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEE3MTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovOyB9OworCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgx
Njk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzIxNjk3NERFRDAw
NkZBQTVBIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2
NEY4QzMxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OworCQlBMjY0RjhDODE2
OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVz
LmggKi87IH07CisJCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhD
NjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9OworCQlBMjY0RjhD
QTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBW
YXJpYWJsZVBhY2tlci5oICovOyB9OworCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hy
cGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owog
CQlBMjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUz
OSAvKiBEaWFnbm9zdGljcy5oICovOyB9OwogCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi87IH07CkBAIC00OSwzMCArNzgsNiBAQAogCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CiAJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKIAkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKLQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKLQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07Ci0JCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owot
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OwotCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owot
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OwotCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKLQkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07Ci0JCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07Ci0JCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKLQkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07Ci0JCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07Ci0JCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKLQkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKLQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07Ci0JCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07Ci0JCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07Ci0JCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKLQkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKIAkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKIAkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OwogCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CkBAIC04NCw2ICs4OSw3IEBACiAJCUEyNjU2ODQxMTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OwogCQlBMjY1Njg0MjE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKIAkJQTI2NTY4NDMx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI5QjE1RTgx
Njk3ODQ1NzAwMTExRDk3IC8qIGtocnBsYXRmb3JtLmggaW4gQ29weUZpbGVzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJw
bGF0Zm9ybS5oICovOyB9OwogCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBG
MzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwpAQCAtOTcsMTMgKzEwMyw2IEBACiAJ
CUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKIAkJRkIzOUQyOEYxMjAwRjM1QTAwMDg4RTY5IC8q
IFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07
CiAJCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi87IH07Ci0JCUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAv
KiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovOyB9OwotCQlGQjM5RDI5NjEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi87IH07Ci0JCUZC
MzlEMjk4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRBMTIwMEYzNUEwMDA4OEU2OSAvKiBj
cHBzdHJ1Y3QuYyAqLzsgfTsKLQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNEIx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjM5RDI5RDEyMDBGMzVBMDAw
ODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyNEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJ
RkIzOUQyQTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgKi87IH07Ci0JCUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU0MTIw
MEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLzsgfTsKIAkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4
RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5jcHAgKi87IH07CiAJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQTgxMjAw
RjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovOyB9OwpAQCAtMTMzLDYgKzEzMiwxNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwogCQl9OworCQlBMjlCMTVFNjE2OTc4NDQ1MDAx
MTFEOTcgLyogQ29weUZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOworCQkJZHN0UGF0aCA9IHVzci9sb2NhbC9pbmNs
dWRlL0tIUjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJCUEy
OUIxNUU4MTY5Nzg0NTcwMDExMUQ5NyAvKiBraHJwbGF0Zm9ybS5oIGluIENvcHlGaWxlcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
IC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCkBAIC0xNzUsOCArMTg0LDM1IEBACiAJCUEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBB
QUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4
OTQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTYxNjk3NERF
RDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTgxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTkx
Njk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVB
IC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAv
KiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1
QSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0Rjg5RjE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEg
LyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFj
cm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEEyMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NEY4QTMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG51bWVyaWNfbGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjRGOEE0MTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE2MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVw
cm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE3MTY5NzRERUQwMDZGQUE1
QSAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
b3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBODE2
OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhB
OTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QUExNjk3
NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFy
aWFibGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQ
YWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4Q0MxNjk3NjJBQTAw
NkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0IwMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NCwzMiArMjIwLDYgQEAKIAkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyMiw2OSArMjMyLDYgQEAKIAkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
R2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTg4MTIwMEYy
NjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxODkxMjAwRjI2MjAwMDg4RTY5IC8qIENvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5p
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyog
ZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4RjEy
MDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6
ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk0MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
OTUxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQYXJz
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOTcxMjAwRjI2
MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk4MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1l
ZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAv
KiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDE5QTEyMDBGMjYyMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRl
cm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTlCMTIw
MEYyNjIwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMTlFMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291
cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOUYxMjAw
RjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRw
dXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUExMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQTIxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRI
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTMxMjAwRjI2MjAw
MDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNDEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTgxMjAwRjI2MjAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29s
QWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUExMjAwRjI2MjAw
MDg4RTY5IC8qIGF0b20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gYXRvbS5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkg
LyogYXRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBhdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21w
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUQxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUUxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjExMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzbGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjcxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCODEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI5MTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFs
aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkMxMjAwRjI2MjAw
MDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJFMTIwMEYyNjIwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lt
Ym9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDMjEyMDBG
MjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0Yx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDExMjAw
RjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxNSwyMyArMjYyLDYgQEAKIAkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xB
bGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjQzMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0NTEyMDBG
MzVBMDAwODhFNjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBh
dG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQ2MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8q
IGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyog
Y3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJB
bGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI1ODEyMDBGMzVBMDAw
ODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3Niwz
NSArMzA2LDEzIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OwotCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovID0g
eworCQlBMjY0RjhDQjE2OTc2MkFBMDA2RkFBNUEgLyogS0hSICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyog
cHBfdXRpbHMuaCAqLywKLQkJCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3NCYXNlLmNwcCAqLywKLQkJCQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3MuaCAqLywKLQkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovLAotCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5jcHAgKi8sCi0JCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovLAotCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLywKLQkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBh
cnNlci5oICovLAotCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8s
Ci0JCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi8sCi0JCQkJQTI2NTY3
RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjY1NjdENTE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uY3BwICovLAotCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oICov
LAotCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLywK
LQkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovLAotCQkJ
CUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJCUEy
NjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjY1NjdFNDE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAotCQkJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oICovLAotCQkJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwICovLAotCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIu
aCAqLywKKwkJCQlBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCAqLywK
IAkJCSk7Ci0JCQlwYXRoID0gbmV3OworCQkJbmFtZSA9IEtIUjsKKwkJCXBhdGggPSBpbmNsdWRl
L0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUEyNjU2ODJDMTU5QzIz
RTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKQEAgLTQzMiwyNCArMzQwLDMyIEBACiAJCQlw
YXRoID0gdGltaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI5QjE1
RTkxNjk3OEI3RDAwMTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5H
ICovLAorCQkJCUEyNjRGOENCMTY5NzYyQUEwMDZGQUE1QSAvKiBLSFIgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGQjM5
RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovLAogCQkJCTMx
MkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovLAotCQkJCUZCMzlEMjIwMTIwMEYzNUEw
MDA4OEU2OSAvKiBjb21waWxlciAqLywKLQkJCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyog
U291cmNlICovLAorCQkJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAvKiBzcmMgKi8sCiAJCQkJ
NUQ3QzU5QzQxMjA4QzY4QjAwMUM4NzNFIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCUZCMzlE
MENDMTIwMEVGOUIwMDA4OEU2OSAvKiBQcm9kdWN0cyAqLywKIAkJCSk7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNl
ICovID0geworCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogc3JjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCisJCQkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJ
KTsKLQkJCW5hbWUgPSBTb3VyY2U7CisJCQluYW1lID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKIAkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICov
ID0gewpAQCAtNDYwLDk0ICszNzYsMTIgQEAKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKLQkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCi0JCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAotCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAot
CQkJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAq
LywKLQkJCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5o
ICovLAotCQkJCUZCMzlEMThGMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCi0J
CQkJRkIzOUQxOTAxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCi0JCQkJRkIzOUQx
OTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLAotCQkJCUZCMzlEMTkyMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8sCi0JCQkJRkIzOUQxOTMxMjAwRjI2MjAw
MDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAotCQkJCUZCMzlEMTk0MTIwMEYyNjIwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCi0JCQkJRkIzOUQxOTUxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQxOTYxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDE5NzEyMDBGMjYyMDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhF
NjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQxOTkxMjAwRjI2MjAwMDg4RTY5IC8q
IGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQxOUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxp
bnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5o
ICovLAotCQkJCUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJ
CQlGQjM5RDE5RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJ
CUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAotCQkJCUZC
MzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDFB
MTEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAotCQkJCUZCMzlEMUEyMTIwMEYy
NjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQlGQjM5RDFBMzEyMDBGMjYyMDAw
ODhFNjkgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlEMUE0MTIwMEYyNjIwMDA4OEU2OSAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuY3BwICovLAotCQkJCUZCMzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5oICovLAotCQkJCUZCMzlEMUE3MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3Bw
ICovLAotCQkJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKLQkJ
CQlGQjM5RDFBOTEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAotCQkJCUZCMzlE
MUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQx
QkMxMjAwRjI2MjAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCi0JCQkJRkIzOUQxQkQx
MjAwRjI2MjAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAotCQkJCUZCMzlEMUJFMTIwMEYy
NjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCi0JCQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAv
KiBTaEhhbmRsZS5oICovLAotCQkJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi8sCi0JCQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmggKi8sCi0JCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCAqLywKLQkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAq
LywKLQkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICov
LAotCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAot
CQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUEyNjU2N0I3
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyNjU2
N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCSk7Ci0J
CQlpbmNsdWRlSW5JbmRleCA9IDA7Ci0JCQluYW1lID0gY29tcGlsZXI7Ci0JCQlwYXRoID0gc3Jj
L2NvbXBpbGVyOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQxQTkx
MjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQxQUExMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20u
YyAqLywKLQkJCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkgLyogYXRvbS5oICovLAotCQkJCUZC
MzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCi0JCQkJRkIzOUQxQUQxMjAw
RjI2MjAwMDg4RTY5IC8qIGNwcC5jICovLAotCQkJCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAv
KiBjcHAuaCAqLywKLQkJCQlGQjM5RDFBRjEyMDBGMjYyMDAwODhFNjkgLyogY3Bwc3RydWN0LmMg
Ki8sCi0JCQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAotCQkJCUZC
MzlEMUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLywKLQkJCQlGQjM5RDFCMjEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCi0JCQkJRkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nh
bm5lci5jICovLAotCQkJCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8s
Ci0JCQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAotCQkJCUZC
MzlEMUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywKLQkJCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhF
NjkgLyogdG9rZW5zLmMgKi8sCi0JCQkJRkIzOUQxQkExMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vu
cy5oICovLAotCQkJKTsKLQkJCWluY2x1ZGVJbkluZGV4ID0gMDsKLQkJCXBhdGggPSBwcmVwcm9j
ZXNzb3I7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAq
LywKKwkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICov
LAorCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAog
CQkJCTMxNThFQTBDMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICov
LAogCQkJCTMxNThFQTBEMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAq
LywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCkBAIC02
NDAsMjUgKzQ3NCwzMiBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vz
c29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1
NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAotCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmMgKi8sCi0JCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20u
aCAqLywKLQkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLAotCQkJ
CUZCMzlEMjQ4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuYyAqLywKLQkJCQlGQjM5RDI0OTEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmggKi8sCi0JCQkJRkIzOUQyNEExMjAwRjM1QTAwMDg4RTY5IC8q
IGNwcHN0cnVjdC5jICovLAorCQkJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuaCAqLywKKwkJCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjRGODk2MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oICovLAorCQkJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5OTE2OTc0REVEMDA2RkFBNUEgLyogRXhw
cmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTI2NEY4OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5QjE2OTc0REVEMDA2RkFBNUEgLyogSW5w
dXQuY3BwICovLAorCQkJCUEyNjRGODlDMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oICovLAor
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCisJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uaCAqLywKKwkJCQlBMjY0RjhBMTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5jcHAgKi8sCisJCQkJQTI2NEY4QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLywKKwkJCQlBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXguaCAqLywK
KwkJCQlBMjY0RjhBNDE2OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY0
RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjY0RjhB
NjE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTI2NEY4QTcxNjk3
NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTI2NEY4QTgxNjk3NERF
RDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEg
LyogVG9rZW4uaCAqLywKKwkJCQlBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8s
CiAJCQkJNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKLQkJ
CQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8sCi0JCQkJRkIzOUQyNEMx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5oICovLAotCQkJCUZCMzlEMjREMTIwMEYzNUEwMDA4
OEU2OSAvKiBwYXJzZXIuaCAqLywKLQkJCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJl
cHJvY2Vzcy5oICovLAotCQkJCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMg
Ki8sCi0JCQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLywKLQkJCQlG
QjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQyNTIx
MjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLywKLQkJCQlGQjM5RDI1MzEyMDBGMzVBMDAw
ODhFNjkgLyogc3ltYm9scy5oICovLAotCQkJCUZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAvKiB0
b2tlbnMuYyAqLywKLQkJCQlGQjM5RDI1NTEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03MDAsMjUgKzU0MSwyOSBAQAogCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMDE1OUMyMUIx
MDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMTE1OUMyMUIx
MDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2
NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUEyNjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgwODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODBCMTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODJCMTU5
QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1
Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxNThFQTBGMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY0RjhCQzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXgu
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGls
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8q
IFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM4MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOENBMTY5NzRF
MkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcz
NCw2ICs1NzksNyBAQAogCQkJCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtz
ICovLAogCQkJCTMxMkJEQjBCMTVGRUNBQjAwMDk3RUJDNyAvKiBDb3B5RmlsZXMgKi8sCiAJCQkJ
MzEyQkRCMEQxNUZFQ0FDRTAwOTdFQkM3IC8qIENvcHlGaWxlcyAqLywKKwkJCQlBMjlCMTVFNjE2
OTc4NDQ1MDAxMTFEOTcgLyogQ29weUZpbGVzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAo
CiAJCQkpOwpAQCAtNzg5LDEzICs2MzUsNiBAQAogCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMjhGMTIwMEYzNUEw
MDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDI5MTEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
NjEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5ODEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
OTEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQy
QTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlE
MkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOSwxNyArNjU4LDYgQEAKIAkJCQlBMjY1NjdCQjE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY3QkQxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RjAxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAv
KiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1Mzkg
LyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4M0Ix
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgzNyw2ICs2NjUsMTggQEAKIAkJCQlBMjY1Njg0MDE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1OEVBMEUxNjMwOTY4RDAwNkJF
NUVFIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhB
QzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEIyMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEI0MTY5NzRE
RUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCNjE2OTc0
REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NEY4QjgxNjk3
NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEJBMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjRGOEJFMTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjRGOEMzMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NEY4QzkxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVy
aXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVyaXZlZFNvdXJjZXMu
cHJpCmluZGV4IGIzYTg5ZmMuLjhmOTUwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9E
ZXJpdmVkU291cmNlcy5wcmkKQEAgLTEzLDcgKzEzLDcgQEAgZXF1YWxzKHNhbml0aXplZEZpbGUs
ICQkdG9TYW5pdGl6ZWRQYXRoKCQkX1BST19GSUxFXykpOlRFTVBMQVRFID0gZGVyaXZlZAogCiBB
TkdMRV9GTEVYX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBc
Ci0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKKyAg
ICAkJFBXRC9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCiAKIGFuZ2xlZmxl
eC5vdXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX1fbGV4LmNwcAogYW5nbGVmbGV4LmlucHV0ID0g
QU5HTEVfRkxFWF9TT1VSQ0VTCkBAIC0yMiw3ICsyMiw3IEBAIEdFTkVSQVRPUlMgKz0gYW5nbGVm
bGV4CiAKIEFOR0xFX0JJU09OX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2ds
c2xhbmcueSBcCi0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci55CisgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLnkKIAogYW5nbGViaXNvbl9kZWNsLm91dHB1dCA9ICR7UU1BS0VfRklMRV9CQVNF
fV90YWIuaAogYW5nbGViaXNvbl9kZWNsLmlucHV0ID0gQU5HTEVfQklTT05fU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKaW5kZXggZWFhOTM2ZC4uYjc3OTUzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9UYXJnZXQucHJpCkBAIC0xMyw3ICsxMyw3IEBAIENPTkZJRyArPSBzdGF0aWNs
aWIKIAogSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9zcmMgXAotICAgICQkU09V
UkNFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldyBcCisgICAgJCRTT1VSQ0VfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IgXAogICAgICQkU09VUkNFX0RJUi9pbmNsdWRlCiAK
IEhFQURFUlMgKz0gXApAQCAtMzMsNiArMzMsNyBAQCBIRUFERVJTICs9IFwKICAgICBzcmMvY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCisgICAgc3JjL2NvbXBpbGVyL0hh
c2hOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCiAgICAgc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVEbGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmggXApAQCAtNDQsMjggKzQ1LDE5IEBAIEhFQURFUlMgKz0gXAogICAgIHNyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggXAog
ICAgIHNyYy9jb21waWxlci9QcmFnbWEuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKLSAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5w
dXQuaCBcCiAgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAot
ICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xl
eGVyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAotICAg
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0gICAgc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAotICAgIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNl
ci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCi0gICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXAotICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIFwKKyAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmggXAorICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvTWFjcm8uaCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXgu
aCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisgICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIFwKKyAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRFU1NMLmggXAogICAgIHNy
Yy9jb21waWxlci9PdXRwdXRHTFNMLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5oIFwKQEAgLTg4LDYgKzgwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL3V0
aWwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKKyAgICBzcmMvY29tcGlsZXIvVmFyaWFibGVQYWNr
ZXIuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKIAogU09VUkNFUyArPSBcCkBA
IC0xMzQsMjMgKzEyNywxNyBAQCBTT1VSQ0VTICs9IFwKICAgICBzcmMvY29tcGlsZXIvdXRpbC5j
cHAgXAogICAgIHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgXAorICAgIHNyYy9jb21waWxlci9WYXJpYWJsZVBh
Y2tlci5jcHAgXAogICAgIHNyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwK
LSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
RXhwYW5kZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAg
XAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKLSAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYworICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NC
YXNlLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorICAgIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL01hY3JvLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNz
b3IuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcCBcCiAKIHdp
bjMyOiBTT1VSQ0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCiBlbHNlOiBTT1VS
Q0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4IGQ4Mjkz
MWUuLjQ2MjM3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMjMsNiArMjMsOCBAQAogI2RlZmluZSBDT01QSUxF
Ul9FWFBPUlQKICNlbmRpZgogCisjaW5jbHVkZSAiS0hSL2tocnBsYXRmb3JtLmgiCisKIC8vCiAv
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCkBAIC0xMTAs
NyArMTEyLDEwIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggICA9ICAweDhCODcsCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhC
ODksCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX01B
UFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDhCOEIKKyAgU0hfTUFQUEVEX05BTUVfTUFY
X0xFTkdUSCAgICAgID0gIDB4NjAwMCwKKyAgU0hfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgICAg
ID0gIDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgID0gIDB4NjAwMiwK
KyAgU0hfSEFTSEVEX05BTUVTX0NPVU5UICAgICAgICAgID0gIDB4NjAwMwogfSBTaFNoYWRlcklu
Zm87CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4KQEAgLTE0NCwxMSArMTQ5LDE0IEBAIHR5cGVkZWYg
ZW51bSB7CiAgIC8vIC0gVGhlIHNoYWRlciB0eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KICAg
U0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMCwKIAorICAvLyBFbmZvcmNlIHRoZSBHTFNMIDEu
MDE3IEFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhY2tpbmcgcmVzdHJpY3Rpb25zLgorICBTSF9FTkZP
UkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TID0gMHgwODAwLAorCiAgIC8vIFRoaXMgZmxhZyBlbnN1
cmVzIGFsbCBpbmRpcmVjdCAoZXhwcmVzc2lvbi1iYXNlZCkgYXJyYXkgaW5kZXhpbmcKICAgLy8g
aXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gVGhpcyBlbnN1cmVzLCBmb3Ig
ZXhhbXBsZSwKICAgLy8gdGhhdCB5b3UgY2Fubm90IHJlYWQgb2ZmIHRoZSBlbmQgb2YgYSB1bmlm
b3JtLCB3aGV0aGVyIGFuIGFycmF5CiAgIC8vIHZlYzIzNCwgb3IgbWF0MjM0IHR5cGUuCi0gIFNI
X0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyA9IDB4MDgwMAorICBTSF9DTEFNUF9JTkRJUkVD
VF9BUlJBWV9CT1VORFMgPSAweDEwMDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAogLy8KQEAgLTE2
Myw2ICsxNzEsMTAgQEAgQ09NUElMRVJfRVhQT1JUIGludCBTaEluaXRpYWxpemUoKTsKIC8vCiBD
T01QSUxFUl9FWFBPUlQgaW50IFNoRmluYWxpemUoKTsKIAorLy8gVGhlIDY0IGJpdHMgaGFzaCBm
dW5jdGlvbi4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgaW5wdXQgc3RyaW5nOyB0aGUKKy8v
IHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIHN0cmluZyBsZW5ndGguCit0eXBlZGVmIGtocm9ub3Nf
dWludDY0X3QgKCpTaEhhc2hGdW5jdGlvbjY0KShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KTsK
KwogLy8KIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiByZXNvdXJjZXMgKGNv
bnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCiAvLyBUaGUgbmFtZXMgZm9yIHRoZXNlIHJlc291cmNl
cyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcgZ2xfL0dMXy4KQEAgLTE4NCw2ICsxOTYs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBpbnQgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwog
ICAgIGludCBPRVNfRUdMX2ltYWdlX2V4dGVybmFsOwogICAgIGludCBBUkJfdGV4dHVyZV9yZWN0
YW5nbGU7CisKKyAgICAvLyBOYW1lIEhhc2hpbmcuCisgICAgLy8gU2V0IGEgNjQgYml0IGhhc2gg
ZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCisgICAgLy8gRGVm
YXVsdCBpcyBOVUxMLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgSGFzaEZ1bmN0aW9uOwogfSBTaEJ1
aWx0SW5SZXNvdXJjZXM7CiAKIC8vCkBAIC0yNzAsNiArMjg3LDExIEBAIENPTVBJTEVSX0VYUE9S
VCBpbnQgU2hDb21waWxlKAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWlu
YXRpb24gY2hhcmFjdGVyLgogLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIGxlbmd0
aCBvZiB0aGUgbWFwcGVkIHZhcmlhYmxlIG5hbWUgaW5jbHVkaW5nCiAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9OQU1F
X01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgdXNlci1kZWZpbmVkIG5hbWUgaW5jbHVk
aW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rl
ci4KKy8vIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgaGFz
aGVkIG5hbWUgaW5jbHVkaW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6IHRoZSBu
dW1iZXIgb2YgaGFzaGVkIG5hbWVzIGZyb20gdGhlIGxhdGVzdCBjb21waWxlLgogLy8gCiAvLyBw
YXJhbXM6IFJlcXVlc3RlZCBwYXJhbWV0ZXIKIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoR2V0SW5m
byhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zNTAsNiArMzcyLDI0IEBAIENPTVBJTEVSX0VY
UE9SVCB2b2lkIFNoR2V0QWN0aXZlVW5pZm9ybShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKTsKIAorLy8g
UmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIG5hbWUgaGFzaGluZyBlbnRyeSBmcm9tIHRoZSBs
YXRlc3QgY29tcGlsZS4KKy8vIFBhcmFtZXRlcnM6CisvLyBoYW5kbGU6IFNwZWNpZmllcyB0aGUg
Y29tcGlsZXIKKy8vIGluZGV4OiBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBuYW1lIGhhc2hp
bmcgZW50cnkgdG8gYmUgcXVlcmllZC4KKy8vIG5hbWU6IFJldHVybnMgYSBudWxsIHRlcm1pbmF0
ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHVzZXIgZGVmaW5lZCBuYW1lLgorLy8gICAgICAgSXQg
aXMgYXNzdW1lZCB0aGF0IG5hbWUgaGFzIGVub3VnaCBtZW1vcnkgdG8gYWNjb21vZGF0ZSB0aGUg
bmFtZS4KKy8vICAgICAgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8gc3RvcmUg
dGhlIHVzZXIgZGVmaW5lZCBuYW1lIGNhbgorLy8gICAgICAgYmUgb2J0YWluZWQgYnkgY2FsbGlu
ZyBTaEdldEluZm8gd2l0aCBTSF9OQU1FX01BWF9MRU5HVEguCisvLyBoYXNoZWROYW1lOiBSZXR1
cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBoYXNoZWQgbmFtZSBv
ZgorLy8gICAgICAgICAgICAgdGhlIHVuaWZvcm0gdmFyaWFibGUsIEl0IGlzIGFzc3VtZWQgdGhh
dCBoYXNoZWROYW1lIGhhcyBlbm91Z2gKKy8vICAgICAgICAgICAgIG1lbW9yeSB0byBhY2NvbW9k
YXRlIHRoZSBuYW1lLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJlcXVpcmVkCisvLyAgICAgICAg
ICAgICB0byBzdG9yZSB0aGUgbmFtZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBTaEdldElu
Zm8gd2l0aAorLy8gICAgICAgICAgICAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSC4KK0NPTVBJ
TEVSX0VYUE9SVCB2b2lkIFNoR2V0TmFtZUhhc2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5k
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVk
TmFtZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjVkYjdkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8v
ICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9Owot
CW9iamVjdFZlcnNpb24gPSA0NTsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhBZ2dyZWdh
dGVUYXJnZXQgc2VjdGlvbiAqLwotCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICov
ID0gewotCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAot
CQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlBMTVFNzhCRUNERkYyMEJDM0ZGRjA0MEEg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gQWxsOwotCQkJcHJv
ZHVjdE5hbWUgPSBBbGw7Ci0JCX07Ci0vKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMDU1NjNBREZFQTE1MTE2
RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi87IH07Ci0JCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTEx
OEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3BwICovOyB9OwotCQkwQTIxNjk0OTEw
M0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5p
dGlhbGl6ZURsbC5jcHAgKi87IH07Ci0JCTBBQzE4OTdFNDYxQTBENDc1OEUzRENFMyAvKiBWZXJz
aW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3BwICovOyB9OwotCQkw
RTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQ4RDk2N0I4RDI4OEE4
MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi87IH07Ci0JCTBFQzA5QjNCMjU0
ODI5RjhGMUQ5NTJEMyAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEQzlCNjQ3RTEwRjY1RjY2MTQyRUNDMSAvKiBGb3JM
b29wVW5yb2xsLmNwcCAqLzsgfTsKLQkJMUVEMUQyQzdDNzRDNkI2MjVBRkIxQ0NGIC8qIFZhcmlh
YmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKLQkJ
Mjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhBNkRFRERGMDhEQjM3MDM5NEE3
QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLzsgfTsKLQkJMkU3QzBEMzgwNEI4MzA4QTQ5M0Q5QjRC
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi87
IH07Ci0JCTMwMjFFMEJGMUJDODQ0MkZGMUYyRjJCNCAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0E1N0M2RDQxMzc3M0FF
QkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OwotCQkzMDY1RDI5RTk3RkFDNkUxMjcz
ODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAg
Ki87IH07Ci0JCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2
REMgLyogYXRvbS5jICovOyB9OwotCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3Ry
dWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4
QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07Ci0JCTNBOTZFOUNBQzhB
MjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsg
fTsKLQkJM0YxODM4OUJDQjg5MzcwQTkzMDY2N0Y0IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjcwREM3NEEyMUZC
Q0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07Ci0JCTQwRkMxODlCOEEyNDZF
REYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5j
cHAgKi87IH07Ci0JCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2VuSExTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDk1NDlEQ0NB
RjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovOyB9OwotCQk1MERGMDAwMDVDQzQy
MTJGNkZCMTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovOyB9OwotCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi87IH07Ci0JCTVGN0I1MkE1NERDRTgxNTVFRDk0
RUNGOCAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAq
LzsgfTsKLQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlGRjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUw
MDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07Ci0JCTg4OEYxMzgyNDk4RTJENzRB
RjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovOyB9Owot
CQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdDRjFGODNFODQy
OTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJOTNBNDFB
RjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3Bw
ICovOyB9OwotCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VG
RjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07Ci0JCUEyMDEwODNCMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3Mu
Y3BwICovOyB9OwotCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEy
MDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07Ci0JCUEyMDEwODNFMTU5QzMxQTAwMEU1
N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5
MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07Ci0JCUEyMDEwODQxMTU5QzMxQTAw
MEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9Owot
CQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8q
IE1hY3JvLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OwotCQlB
MjAxMDg0NDE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JC
RSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OwotCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9r
ZW5pemVyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgKi87IH07Ci0JCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07Ci0J
CUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKLQkJQTIw
MTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NjYx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1
N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUEyMDEwODY3MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
dGVjdFJlY3Vyc2lvbi5jcHAgKi87IH07Ci0JCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owot
CQlBMjAxMDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEyMDEwODZBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NkIxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OwotCQlBMjAxMDg2QzE1
OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NzExNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3
QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovOyB9OwotCQlBMjAxMDg3MjE1OUMzMjYy
MDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwICovOyB9OwotCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyog
UmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07Ci0J
CUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyog
c3ltYm9scy5jICovOyB9OwotCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKLQkJ
QjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUw
IC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwotCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKLQkJQzRB
QUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8q
IE91dHB1dEVTU0wuY3BwICovOyB9OwotCQlDNzVFQjkyOTJBMEREQTQ1NTkyQThBQ0YgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07Ci0JCUNC
N0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAq
LzsgfTsKLQkJRDU2RjdEMDBFOUIxNjJFNDE2RDM3REYwIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdDNzVCNTc2
RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07Ci0JCUUxQzdDNURGRjBCMkRGRUMw
OTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07Ci0JCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzRE
MDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKLQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRy
YW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87
IH07Ci0JCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovOyB9OwotCQlGNUFFMkEyOTJERkFGOEMxNTg0MTJBQTIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsg
fTsKLQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3RTVCMEYwNDYzNUU2MDkw
RjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KLQkJ
MUY3MjQyNDk2MTAzRURGMjlDQzI1RDg3IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
LQkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IERB
MTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlw
ZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MTsKLQkJCXJlbW90ZUluZm8gPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCX07Ci0JCTU1RDVGOUJGNzI3
RTRBM0I2NjM3ODAyQiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgw
NzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJ
cmVtb3RlR2xvYmFsSURTdHJpbmcgPSA2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzI7Ci0JCQlyZW1v
dGVJbmZvID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCX07Ci0JCTYwRDM1NDZBQzI3QjA5NEQ2Q0Ew
NENENiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1Mzkx
MzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xv
YmFsSURTdHJpbmcgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQ7Ci0JCQlyZW1vdGVJbmZvID0g
dHJhbnNsYXRvcl9nbHNsOwotCQl9OwotLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkwNTZGRUFE
QzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBMTE4RTUwMDNFNUMwRTI1M0M1MzgzOSAv
KiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9t
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTEyRUFGMDI4MzEx
RUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAv
KiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxODJCQUQ1MEQ0RTU4Qjg4NEY1RUI5RjMg
LyogRm9yTG9vcFVucm9sbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JMb29wVW5yb2xsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFy
Y2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlh
YmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5z
bGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTNF
RTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0
aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjY4QTZBQTgxMTQ5NTcxOEE2
OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2
MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBD
NyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkg
LyogZ2xzbGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBn
bHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MjhGRjIwMTgzOUM2
RjIzM0UyNkZGREEgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1QTIxNTk5QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdXRwdXRITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEOTkz
NTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEQzlCNjQ3RTEwRjY1
RjY2MTQyRUNDMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvckxv
b3BVbnJvbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2MEMzOTk4QzlDRTY2
REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0
aWFsaXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJCNjZBQjU4NzM4
NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QkJDODIyNEI5RDhFMjM0RDExN0ZBMEMg
LyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3RDlDRjM3NkRD
NTc5OUI0QzZCMzMzMUUgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBj
cHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVO
YW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1ODQ1RkZGNUE4RTYz
MzY0MzA4MjM2RCAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
aXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODlB
NkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzbGds
b2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTAyNTQ4NDJENzI5NzU2NzJD
MkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsaWRhdGVM
aW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0Q2MUNCMEJDRTU0
RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAv
KiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMg
LyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIElu
aXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMTY0NEIwMEU5MzA0QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNs
YXRvcl9nbHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3Jf
Z2xzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSAibGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hIjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjAx
NTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODIzMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Np
b25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVz
c2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI2MTU5
QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMwMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3QkJFIC8q
IHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAv
KiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzMx
NTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEyMDEwODM3MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODQ4MTU5QzMyMDkwMEU1N0JCRSAvKiBsZW5n
dGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1p
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NDkxNTlDMzI0RjAwRTU3
QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODRD
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEUxNTlDMzI0RjAwRTU3QkJFIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODRGMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NTAxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MjE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0
ZWN0UmVjdXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
dGVjdFJlY3Vyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU0
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU2MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIw
MTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JCRSAvKiBQcmFnbWEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg2MTE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg3
MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRvcl9o
bHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfaGxzbC5h
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBNTFDNzI4QjYxNUI0MUUx
RDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUU2NUUxMzlBRTEw
REU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIxNDhEOTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRV
bmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNzU3
MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29k
ZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9s
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xT
TEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJh
bnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyog
Q29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxkX2FuZ2xlLmd5cCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBidWls
ZF9hbmdsZS5neXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNGRDEyQzZFNDZFQkUw
ODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENDBG
NzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQ1M0RERDBDREYxNUVFMURE
MDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRB
NzUgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRFU1NMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8q
IFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRl
cm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFM0EyOUI2
RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjAxM0E3MjQwQkRB
RThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2Vh
cmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGN0IyOTcx
RDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1Npbmsu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjk5RTczN0QzRkZEMzBDQTVFMzU0MTUw
IC8qIGNvbW1vbi5neXBpICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IGNvbW1vbi5neXBpOyBwYXRoID0gLi4vYnVpbGQvY29tbW9u
Lmd5cGk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZGM0FBNjk0REY5QTQ0NTVBODEz
MjM0RCAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQlBMjAxMDdGQjE1OUMz
MTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9
OwotCQlBNUM5OTRFNzREQjFFNjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwotCQl9OwotCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyogRnJhbWV3
b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlGRTM2NzlBMDk1NUIyNUVC
N0JGMTE2RTYgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
R3JvdXAgc2VjdGlvbiAqLwotCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vz
c29yICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkwQzlC
NDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovLAotCQkJCTlDRUQzQUZGMUU2MUI0NUVF
MTAwNTY1NiAvKiBhdG9tLmggKi8sCi0JCQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLywKLQkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCi0J
CQkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAotCQkJCTgwNThBMEEyQTBB
MDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKLQkJCQlBMjAxMDg0ODE1OUMzMjA5MDBF
NTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAotCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4
RSAvKiBtZW1vcnkuYyAqLywKLQkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5
LmggKi8sCi0JCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKLQkJCQlDRkQx
MkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCi0JCQkJNkJCQzgyMjRCOUQ4RTIz
NEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovLAotCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2Fu
bmVyLmggKi8sCi0JCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICov
LAotCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJN0Q5
Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKLQkJCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCi0JCQkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRB
IC8qIHRva2Vucy5oICovLAotCQkJKTsKLQkJCXBhdGggPSBwcmVwcm9jZXNzb3I7Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyog
U291cmNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
N0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCi0JCQkJQTIwMTA4NDkx
NTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKLQkJCQlB
MjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywK
LQkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAotCQkJ
CUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCi0JCQkJRjc0
NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAotCQkJCTBBMTE4RTUwMDNFNUMw
RTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCi0JCQkJQjJGNUNBMTFFRUE5MkRGMjM4NEVG
RDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIg
LyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5o
ICovLAotCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywKLQkJCQlB
MjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCi0J
CQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywK
LQkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywK
LQkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCi0J
CQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKLQkJCQlB
MjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKLQkJCQlBMjAxMDg1
NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCi0JCQkJQTIwMTA4
NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKLQkJCQlBMjAxMDg1
OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKLQkJCQk1REM5QjY0
N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCi0JCQkJMTgyQkFENTBE
NEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKLQkJCQk0OTdDNUMyNEVFRjQ2
NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdB
NiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8q
IGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xz
bGFuZ190YWIuaCAqLywKLQkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1Npbmsu
Y3BwICovLAotCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAot
CQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywKLQkJCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovLAotCQkJCTYwQzM5OThD
OUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJCQlBMENFNDM2MzE4
NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAotCQkJCTJFN0M5QjZFNkRCNzUx
RTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAotCQkJCUEyMDEwODVBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQk4NTg0NUZG
RjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCTNG
N0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCTc5OURD
OTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlDNEZFOTg4RUY5QTI5Mzg2
N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCTE1M0JGMDZCRjEyQzZGNTA0
OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCTU3Q0YxRjgzRTg0MjkwMUM0
MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJODFDQzQyNDVBOEU1
QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJREVFQUZDNjE4
QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1
MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9z
c291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRBNzUgLyogT3V0
cHV0RVNTTC5jcHAgKi8sCi0JCQkJNkJCNjZBQjU4NzM4NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVT
U0wuaCAqLywKLQkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAg
Ki8sCi0JCQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLywKLQkJ
CQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJ
CUI1NUIzNTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCTlB
NUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQk1QTIxNTk5
QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUQyQzlDOEVCNEE3RUZG
NUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQk5NzZDODMxQTc1RUJFMDA5QTk4
NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovLAotCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcx
MSAvKiBQYXJzZUhlbHBlci5oICovLAotCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQ
b29sQWxsb2MuY3BwICovLAotCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxs
b2MuaCAqLywKLQkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCi0J
CQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKLQkJCQk0ODU3
RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAotCQkJCTlENDdC
MUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAotCQkJCUI0MzZFRkYw
NjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKLQkJCQlENDBGNzhDQjlCQTBD
ODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAotCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1
N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAotCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdB
RCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAotCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAv
KiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi8sCi0JCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxl
LmggKi8sCi0JCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAq
LywKLQkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJ
CQlBMjAxMDg1RDE1OUMzMjRGMDBFNTdCQkUgLyogdGltaW5nICovLAotCQkJCTBBM0EyNjBGNTM3
OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJRDUzREREMENERjE1
RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJNkZCNzBEQzc0QTIxRkJD
RDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKLQkJCQlEREQzQjdFM0I3QjM1QTBC
ODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKLQkJCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0
RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAotCQkJCUUzQTI5QjZFOUMyMUI2N0MyNUZG
MEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAotCQkJCUFBNTNCNjYzMkM3NkY5MDVERjA4RTU2
NCAvKiBUeXBlcy5oICovLAotCQkJCUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRT
aG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5p
c3RkLmggKi8sCi0JCQkJM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAot
CQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCi0JCQkJQjE0OEQ5NjdC
OEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAotCQkJCTkwMjU0
ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCi0JCQkJMjdD
MTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCi0JCQkJNUQ5OTM1
NEM0RDgxODdEMzg0QzgxMjA3IC8qIFZhcmlhYmxlSW5mby5oICovLAotCQkJCUY3MjdBRUM5MDY3
MTJFQzIzODA0MTQ2NCAvKiBWZXJzaW9uR0xTTC5jcHAgKi8sCi0JCQkJMTIwQUQwQTNCNzY0MkZC
NUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IFNvdXJjZTsK
LQkJCXBhdGggPSBjb21waWxlcjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RCA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMTk2REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLywKLQkJ
CQlFMEVEQzQxMzBFN0QzNzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8sCi0JCQkJQjJDMTg0QzM1
NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07Ci0JCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCi0JCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCi0JCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAotCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCi0JCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCi0JCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAotCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKLQkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAotCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCi0JCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
Ci0JCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAotCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAotCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKLQkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAotCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAot
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAotCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAotCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAotCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbmV3OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewot
CQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKLQkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCi0JCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAotCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCi0JCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCi0JCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAot
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGRlcGdyYXBoOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
LQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAotCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCi0JCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKLQkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gdGltaW5nOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlD
RjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovLAotCQkJCUY5OUU3
MzdEM0ZGRDMwQ0E1RTM1NDE1MCAvKiBjb21tb24uZ3lwaSAqLywKLQkJCSk7Ci0JCQluYW1lID0g
QnVpbGQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlFMEVEQzQxMzBFN0Qz
NzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9y
X2NvbW1vbi5hICovLAotCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xh
dG9yX2dsc2wuYSAqLywKLQkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNs
YXRvcl9obHNsLmEgKi8sCi0JCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJNTg5MkM3QTM2OTUzMzA0
MzdBRkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA4Qjg4MTVDQTJFRkU2MEZEMEMwMzYx
QkYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5z
bGF0b3JfZ2xzbCIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlCQUJDRTcyMTEwNkI1QzE1
MjdFRkVGMEQgLyogU291cmNlcyAqLywKLQkJCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyog
RnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVu
ZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gdHJhbnNsYXRvcl9nbHNsOwotCQkJcHJvZHVj
dE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gQTE2NDRCMDBF
OTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovOwotCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCTZG
NEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhF
M0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRp
dmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovLAotCQkJCUE1Qzk5NEU3NERC
MUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAo
Ci0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSB0cmFuc2xhdG9y
X2NvbW1vbjsKLQkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQlwcm9kdWN0
UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29t
bW9uLmEgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJh
cnkuc3RhdGljIjsKLQkJfTsKLQkJQTIwMTA3REMxNTlDMzEzQzAwRTU3QkJFIC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdCQkUgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXByb2Nlc3NvciIgKi87Ci0JCQlidWlsZFBo
YXNlcyA9ICgKLQkJCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLywKLQkJ
CQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQli
dWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1l
ID0gcHJlcHJvY2Vzc29yOwotCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNs
YXRvcl9jb21tb24gY29weS5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1
Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCUE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hs
c2wiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMDVGM0JDQTk1MTg3NzBCRTNGMUUwQTM4
IC8qIFNvdXJjZXMgKi8sCi0JCQkJRkUzNjc5QTA5NTVCMjVFQjdCRjExNkU2IC8qIEZyYW1ld29y
a3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMg
PSAoCi0JCQkpOwotCQkJbmFtZSA9IHRyYW5zbGF0b3JfaGxzbDsKLQkJCXByb2R1Y3ROYW1lID0g
dHJhbnNsYXRvcl9obHNsOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEE0NDdGNzVGMzNEQTRDNEMx
MjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlCdWlsZEluZGVwZW5kZW50
VGFyZ2V0c0luUGFyYWxsZWwgPSBZRVM7Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENFNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9u
ID0gIlhjb2RlIDMuMSI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJ
CSk7Ci0JCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7Ci0JCQlwcm9qZWN0
RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJ
MTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKLQkJCQk2RjRGRDM1Q0IzREZDODlE
NzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCi0JCQkJNTg5MkM3QTM2OTUzMzA0MzdB
RkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLywKLQkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovLAotCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAv
KiBwcmVwcm9jZXNzb3IgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTA1RjNC
Q0E5NTE4NzcwQkUzRjFFMEEzOCAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJNEI0QkRFN0FENjI2NkIzOUVENDNDMkQ0IC8qIENvZGVHZW5ITFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTVGN0I1MkE1NERDRTgxNTVFRDk0RUNGOCAvKiBPdXRwdXRITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUU5OUQ2RDgwREJGMDVFQ0U3MTA4QjI2RCAvKiBUcmFuc2xh
dG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyOTY0NjY1NjZEOEMwRjAyM0E1NTM3NjAg
LyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODcxMTU5QzMyNjIw
MEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEy
MDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
Ci0JCX07Ci0JCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAvKiBTb3VyY2VzICovID0gewotCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJQTIwMTA4M0IxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdu
b3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNDMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIw
MTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyog
VG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDYxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJQkFCQ0U3MjExMDZCNUMxNTI3RUZFRjBE
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQlENTZGN0QwMEU5
QjE2MkU0MTZEMzdERjAgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEVD
MDlCM0IyNTQ4MjlGOEYxRDk1MkQzIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQzRBQUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOUIxMTFCODNGQjYzNkZENUNERUMzMkEwIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUM3NUVCOTI5MkEwRERBNDU1OTJBOEFDRiAvKiBPdXRwdXRH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2MyAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzRjE4Mzg5QkNCODkzNzBBOTMw
NjY3RjQgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEFDMTg5N0U0
NjFBMEQ0NzU4RTNEQ0UzIC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsK
LQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlFQUEy
MkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMzAyMUUwQkYxQkM4NDQyRkYxRjJGMkI0IC8qIGdsc2xhbmdfbGV4LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTJFN0MwRDM4MDRCODMwOEE0OTNEOUI0QiAvKiBnbHNsYW5n
X3RhYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1
IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEEyMTY5NDkxMDNFMUUyMjhG
OUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTBERjAwMDA1
Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0
MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8q
IHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlG
RjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzdDNURGRjBCMkRG
RUMwOTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDU1NjNBREZF
QTE1MTE2RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUI4QkQyNjg1QTE2QjE4OENDREZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUY2QUJENThGOENBQjc2NDFEOEJGRTkzNSAvKiBTeW1ib2xUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxRUQxRDJDN0M3NEM2QjYyNUFGQjFD
Q0YgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMyQjFEQkNENkI4M0Yy
MTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlDQjdGMEVGMEQ2QTg5RkE4
QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2
MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQkzQTk2RTlDQUM4QTI1QUYx
NTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGMDk4RjQ2M0VEQUJDRjA3
NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ4NTUxN0YwODZGRENF
RjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUU4QzcyN0FBOEU5REM1
RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAotCQkJCUI0ODU4NDE3RTU0MzY1
QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NTE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0
UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2OTE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2QzE1OUMzMjRGMDBF
NTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0v
KiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhUYXJn
ZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KLQkJQTE1RTc4QkVDREZGMjBCQzNGRkYwNDBBIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5Owot
CQkJdGFyZ2V0ID0gNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9u
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA1NUQ1RjlCRjcyN0U0QTNCNjYzNzgwMkIgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQgLyogdHJhbnNsYXRvcl9nbHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA2MEQzNTQ2QUMyN0IwOTRENkNBMDRDRDYgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSBBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9obHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSAxRjcyNDI0OTYxMDNFREYyOUNDMjVEODcgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTMy
MkE4QzYyNDIzQjU5NUUxMUJBRDQyRCAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSBB
bGw7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQk0REE0MkE3OEQzQjg1NUM5Q0Q4
RjY1OEQgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlH
Q0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RS
QUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJCQlIRUFERVJfU0VBUkNIX1BB
VEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9O
QU1FID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07
Ci0JCTRGODUxRjVCQTVGQTQzRTlFMEI5Q0I4NiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9IEFsbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJODhBREM5Mjg1
NTE5QTY2ODgwOEI1MUVFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGli
OwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJ
U0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
PUQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQ
Uk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwot
CQl9OwotCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJN
RURJQVRFX0RJUiA9ICIkKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9O
KSI7Ci0JCQkJU0hBUkVEX0lOVEVSTUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291
cmNlcy8kKENPTkZJR1VSQVRJT04pIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0J
CUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BS
RUZJWCA9IGxpYjsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQki
XCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJ
CQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJ
CSk7Ci0JCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9uIGNvcHkiOwotCQkJfTsK
LQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJQTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJl
bGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0
dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NF
U1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJ
CQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJ
CQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFu
c2xhdG9yX2NvbW1vbiBjb3B5IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJ
QUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0J
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJ
CQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfZ2xzbDsKLQkJCX07Ci0JCQluYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLQkJQjA5NkZBRjAzMkRCMTlBQjYzN0QzOEYwIC8qIFJlbGVhc2Ug
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3Mg
PSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9E
RUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwi
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwK
LQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3Jf
aGxzbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJQzQ1NDZCMTRCMEVCNUVC
OEM1RDM5REMyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJNRURJQVRFX0RJUiA9ICIkKFBST0pF
Q1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9OKSI7Ci0JCQkJU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291cmNlcy8kKENPTkZJR1VSQVRJT04p
IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJRjAyOUUwRDM2OUZBRkVBNDZC
REFGQ0VFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJCUdD
Q19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJB
Q0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFU
SFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQUk9EVUNUX05B
TUUgPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQlG
RjAxQ0RGNDU5NEUwRkY5RTU4MUIzMTkgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwi
QU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJ
SEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkp
OwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQkJfTsKLQkJCW5hbWUg
PSBEZWJ1ZzsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkwRTU5RjhGRTRBODA5
OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJi
dWlsZF9hbmdsZSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVi
dWcgKi8sCi0JCQkJQzQ1NDZCMTRCMEVCNUVCOEM1RDM5REMyIC8qIFJlbGVhc2UgKi8sCi0JCQkp
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0JCTM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRv
cl9jb21tb24iICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCi0JCQkJRkYwMUNERjQ1OTRFMEZGOUU1ODFCMzE5IC8qIERlYnVn
ICovLAotCQkJCTREQTQyQTc4RDNCODU1QzlDRDhGNjU4RCAvKiBSZWxlYXNlICovLAotCQkJKTsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9OwotCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
cyA9ICgKLQkJCQkzMjJBOEM2MjQyM0I1OTVFMTFCQUQ0MkQgLyogRGVidWcgKi8sCi0JCQkJNEY4
NTFGNUJBNUZBNDNFOUUwQjlDQjg2IC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
RGVidWc7Ci0JCX07Ci0JCThCODgxNUNBMkVGRTYwRkQwQzAzNjFCRiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9nbHNsIiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTg4QURDOTI4NTUxOUE2Njg4MDhCNTFFRSAvKiBEZWJ1ZyAqLywKLQkJCQlBRjdDMkNE
MTBDNkZFQTA3NkIxNDFFNkUgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1
ZzsKLQkJfTsKLQkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0gewotCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJ
QTIwMTA3RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAotCQkJCUEyMDEwN0ZFMTU5QzMx
M0MwMEU1N0JCRSAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9
OwotCQlDNzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQlGMDI5
RTBEMzY5RkFGRUE0NkJEQUZDRUUgLyogRGVidWcgKi8sCi0JCQkJQjA5NkZBRjAzMkRCMTlBQjYz
N0QzOEYwIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0v
KiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0g
REExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAppbmRleCA3ZDkz
NDlhLi5mZjk3MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2FuZ2xldXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2FuZ2xldXRpbHMuaApAQCAtMTksNCArMTksOCBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmlu
dGYKICNlbmRpZgogCisjZGVmaW5lIFZFTkRPUl9JRF9BTUQgMHgxMDAyCisjZGVmaW5lIFZFTkRP
Ul9JRF9JTlRFTCAweDgwODYKKyNkZWZpbmUgVkVORE9SX0lEX05WSURJQSAweDEwREUKKwogI2Vu
ZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZGVidWcuY3BwCmluZGV4IGIyMjM4ZjkuLmM0NWIyYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCkBAIC04NCw2ICs4NCwxMiBAQCBi
b29sIHBlcmZBY3RpdmUoKQogU2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRI
ZWxwZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7CiAjaWYgIWRlZmluZWQoQU5HTEVfRElT
QUJMRV9QRVJGKQorI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyAgICBpZiAoIXBl
cmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICB2
YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CiAgICAgb3V0cHV0
KHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2lu
RXZlbnQpLCBmb3JtYXQsIHZhcmFyZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKaW5kZXggOTgyOGVjZi4uNWY4ZjYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaApAQCAtNDIsMjggKzQyLDMwIEBAIG5hbWVzcGFjZSBn
bAogI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNB
QkxFX1BFUkYpCiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQot
I2RlZmluZSBUUkFDRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSh0cnVlLCAidHJhY2U6ICVzKCVk
KTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UodHJ1ZSwgInRyYWNlOiAlcyglZCk6
ICIgbWVzc2FnZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQog
I2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFy
Z3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4gbmVlZCBv
ZiBmaXhpbmcuCiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfUEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkK
ICNlbHNlCi0jZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZml4
bWU6ICVzKCVkKTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJmaXht
ZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZB
X0FSR1NfXykKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3Iu
CiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FC
TEVfUEVSRikKICNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQotI2Rl
ZmluZSBFUlIobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJlcnI6ICVzKCVkKTogIm1l
c3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg
RVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6ICIgbWVzc2Fn
ZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQogI2VuZGlmCiAK
IC8vIEEgbWFjcm8gdG8gbG9nIGEgcGVyZm9ybWFuY2UgZXZlbnQgYXJvdW5kIGEgc2NvcGUuCiAj
aWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikKICNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4pIGdsOjpTY29w
ZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyICMjIF9fTElORV9fKF9fRlVO
Q1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKKyNlbHNlCisjZGVmaW5lIEVWRU5U
KG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29wZWRQZXJmRXZlbnRI
ZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKICNlbmRpZgogCiAvLyBBIG1hY3Jv
IGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVi
dWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3Zl
cnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCmlu
ZGV4IGJkZDE2MjQuLmRiZThjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdmVyc2lvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vdmVyc2lvbi5oCkBAIC0xLDEwICsxLDEyIEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04g
MQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVm
aW5lIEJVSUxEX1JFVklTSU9OIDExNjYKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTY0MQogCiAj
ZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5H
SUZZKHgpCiAKICNkZWZpbmUgUkVWSVNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9S
RVZJU0lPTikKICNkZWZpbmUgVkVSU0lPTl9TVFJJTkcgTUFDUk9fU1RSSU5HSUZZKE1BSk9SX1ZF
UlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoTUlOT1JfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklO
R0lGWShCVUlMRF9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKEJVSUxEX1JFVklTSU9OKQor
CisjZGVmaW5lIFZFUlNJT05fRFdPUkQgKChNQUpPUl9WRVJTSU9OIDw8IDI0KSB8IChNSU5PUl9W
RVJTSU9OIDw8IDE2KSB8IEJVSUxEX1JFVklTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKaW5kZXggZGI1ZjcyOS4uZGNlOGM2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Zh
bGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCkBAIC0xMTQs
NiArMTE1LDkgQEAgVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIAogYm9vbCBUQ29tcGlsZXI6Oklu
aXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCiB7CisgICAgbWF4VW5pZm9y
bVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CisgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CisgICAgICAgIHJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzOwogICAgIFRTY29wZWRQb29sQWxsb2NhdG9yIHNjb3BlZEFs
bG9jKCZhbGxvY2F0b3IsIGZhbHNlKTsKIAogICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5bWJv
bCB0YWJsZS4KQEAgLTEyMSw2ICsxMjUsOCBAQCBib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEluaXRFeHRlbnNpb25CZWhhdmlvcihyZXNvdXJjZXMsIGV4dGVuc2lvbkJlaGF2aW9yKTsKIAor
ICAgIGhhc2hGdW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTk0LDExICsyMDAsMTkgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUo
Y29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICAvLyBDYWxsIG1hcExv
bmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgog
ICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBt
YXBwZWQgc3ltYm9sIG5hbWVzIGFuZAogICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFw
cGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpKQorICAgICAgICAv
LyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlz
IGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCiAg
ICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKIAotICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKSkKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQVRUUklCVVRFU19VTklGT1JN
UykpIHsKICAgICAgICAgICAgIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMocm9vdCk7CisgICAgICAg
ICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
KSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25z
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsICJ0b28gbWFueSB1bmlmb3JtcyIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkK
ICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwpAQCAtMjI4LDYgKzI0
Miw3IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVp
bHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogCiB2b2lkIFRDb21waWxlcjo6Y2xlYXJSZXN1bHRz
KCkKIHsKKyAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51cCgpOwogICAgIGluZm9TaW5rLmlu
Zm8uZXJhc2UoKTsKICAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKICAgICBpbmZvU2luay5kZWJ1
Zy5lcmFzZSgpOwpAQCAtMjM2LDcgKzI1MSw4IEBAIHZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3Vs
dHMoKQogICAgIHVuaWZvcm1zLmNsZWFyKCk7CiAKICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5DbGVhbnVwKCk7Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKworICAgIG5h
bWVNYXAuY2xlYXIoKTsKIH0KIAogYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50
ZXJtTm9kZSogcm9vdCkKQEAgLTMxMiwxMCArMzI4LDE2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZv
cmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQogCiB2
b2lkIFRDb21waWxlcjo6Y29sbGVjdEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkK
IHsKLSAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMp
OworICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcywg
aGFzaEZ1bmN0aW9uKTsKICAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7CiB9CiAKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCit7CisgICAgVmFyaWFibGVQ
YWNrZXIgcGFja2VyOworICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNr
aW5nTGltaXRzKG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Cit9CisKIHZvaWQgVENvbXBp
bGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAKaW5kZXggNWY5M2EwMy4uMDZmMzcwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
CkBAIC02LDEwICs2LDE0IEBACiAKICNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgog
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAot
VERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOiBtSW5mb1Np
bmsoaW5mb1NpbmspCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6CisgICAgbUluZm9TaW5rKGluZm9TaW5rKSwKKyAgICBtTnVtRXJyb3JzKDApLAorICAg
IG1OdW1XYXJuaW5ncygwKQogewogfQogCkBAIC0yMyw5ICsyNywyMyBAQCB2b2lkIFREaWFnbm9z
dGljczo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKIHsKLSAgICBUSW5mb1NpbmtCYXNlJiBz
aW5rID0gbUluZm9TaW5rLmluZm87Ci0gICAgVFByZWZpeFR5cGUgcHJlZml4ID0gc2V2ZXJpdHkg
PT0gRVJST1IgPyBFUHJlZml4RXJyb3IgOiBFUHJlZml4V2FybmluZzsKKyAgICBUUHJlZml4VHlw
ZSBwcmVmaXggPSBFUHJlZml4Tm9uZTsKKyAgICBzd2l0Y2ggKHNldmVyaXR5KQorICAgIHsKKyAg
ICAgIGNhc2UgRVJST1I6CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgcHJlZml4ID0g
RVByZWZpeEVycm9yOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgV0FSTklORzoKKyAgICAg
ICAgKyttTnVtV2FybmluZ3M7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIAorICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1Npbmsu
aW5mbzsKICAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tl
bicgOiBleHRyYWluZm8gKi8KICAgICBzaW5rLnByZWZpeChwcmVmaXgpOwogICAgIHNpbmsubG9j
YXRpb24oRW5jb2RlU291cmNlTG9jKGxvYy5maWxlLCBsb2MubGluZSkpOwpAQCAtNDEsNCArNTks
NSBAQCB2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCiB7CisgICAgd3JpdGVJbmZvKHNldmVyaXR5
KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAppbmRleCA0M2ExMzA2Li5j
YjcxYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJ
Q1NfSF8KICNkZWZpbmUgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KIAotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgiCiAKIGNsYXNzIFRJbmZvU2luazsKIApAQCAt
MTksNiArMTksOSBAQCBjbGFzcyBURGlhZ25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNz
CiAKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9CiAKKyAg
ICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorICAgIGludCBu
dW1XYXJuaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1OdW1XYXJuaW5nczsgfQorCiAgICAgdm9pZCB3
cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHJlYXNvbiwKQEAgLTM0LDYgKzM3LDggQEAgY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGlj
IHBwOjpEaWFnbm9zdGljcwogCiAgIHByaXZhdGU6CiAgICAgVEluZm9TaW5rJiBtSW5mb1Npbms7
CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgaW50IG1OdW1XYXJuaW5nczsKIH07CiAKICNlbmRp
ZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmluZGV4IDIxZDNkZmMu
Ljk1Y2E1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgImNv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgi
CiAKIGNsYXNzIFREaWFnbm9zdGljczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQyMTQxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0hB
U0hfTkFNRVNfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhB
U0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3Ry
aW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNI
X05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwCmluZGV4IDkyYzQ1MDUuLjkwMzJiM2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCkBA
IC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCisjaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5hbWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
bG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKQEAgLTE0NDUsMyArMTQ0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNp
Y1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJtQwogICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSks
IG5vZGUtPmdldExpbmUoKSk7CiB9CiAKKy8vIHN0YXRpYworVFN0cmluZyBUSW50ZXJtVHJhdmVy
c2VyOjpoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uKQoreworICAgIGlmIChoYXNoRnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIGtocm9ub3NfdWludDY0X3QgbnVtYmVyID0gKCpoYXNo
RnVuY3Rpb24pKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgVFN0cmluZ1N0cmVh
bSBzdHJlYW07CisgICAgc3RyZWFtIDw8IEhBU0hFRF9OQU1FX1BSRUZJWCA8PCBzdGQ6OmhleCA8
PCBudW1iZXI7CisgICAgVFN0cmluZyBoYXNoZWROYW1lID0gc3RyZWFtLnN0cigpOworICAgIHJl
dHVybiBoYXNoZWROYW1lOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmluZGV4IDY0ZWU5MmQuLjAzMzE3NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAK
QEAgLTYsOCArNiwxMSBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0RVNTTC5oIgogCi1U
T3V0cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rKQorVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
ICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3lt
Ym9sVGFibGUpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0RVNTTC5oCmluZGV4IDRmYTczYzguLmRkOGM1YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaApAQCAtMTIsNyAr
MTIsMTAgQEAKIGNsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQogewog
cHVibGljOgotICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworICAgIFRP
dXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcAppbmRleCBkZDMxYjRiLi41ODczMDQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCkBAIC02LDgg
KzYsMTEgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKIAotVE91dHB1dEdM
U0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspCi0gICAgOiBUT3V0cHV0R0xT
TEJhc2Uob2JqU2luaykKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuaAppbmRleCAwZmUyMzU2Li45MDMwMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKQEAgLTEyLDcgKzEyLDEwIEBA
CiBjbGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKIHsKIHB1YmxpYzoK
LSAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xT
TChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuY3BwCmluZGV4IDIxMDBlYWEuLjNjM2M5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApAQCAtOSwzNSAr
OSw2IEBACiAKIG5hbWVzcGFjZQogewotVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYg
dHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsKLSAgICBpZiAodHlwZS5pc01hdHJpeCgp
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQiOwotICAgICAgICBvdXQgPDwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJv
b2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNp
emUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmco
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOwotfQotCiBUU3RyaW5n
IGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCiB7CiAgICAgQVNTRVJUKHR5cGUuaXNB
cnJheSgpKTsKQEAgLTY2LDEwICszNywxNiBAQCBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlKiBub2RlKSB7CiB9CiB9ICAvLyBuYW1lc3BhY2UKIAotVE91dHB1dEdMU0xCYXNlOjpU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaykKK1RPdXRwdXRHTFNMQmFzZTo6
VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKICAgICAgIG1PYmpTaW5rKG9ialNpbmsp
LAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKKyAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMoZmFsc2UpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAg
bU5hbWVNYXAobmFtZU1hcCksCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiB7CiB9
CiAKQEAgLTEwMSw3ICs3OCw3IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSAmJgogICAgICAgICAobURlY2xhcmVkU3RydWN0cy5maW5kKHR5cGUuZ2V0VHlw
ZU5hbWUoKSkgPT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCiAgICAgewotICAgICAgICBvdXQg
PDwgInN0cnVjdCAiIDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAie1xuIjsKKyAgICAgICAgb3V0
IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICJ7XG4iOwog
ICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAgLTExMCw3ICs4Nyw3IEBAIHZvaWQg
VE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAg
ICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CiAgICAgICAgICAgICBpZiAod3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZFR5cGUtPmdldFByZWNpc2lvbigpKSkKICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVs
ZFR5cGUpIDw8ICIgIiA8PCBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAg
b3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZFR5cGUpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZFR5
cGUtPmdldEZpZWxkTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXko
KSkKICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKICAg
ICAgICAgICAgIG91dCA8PCAiO1xuIjsKQEAgLTE0MCw3ICsxMTcsNyBAQCB2b2lkIFRPdXRwdXRH
TFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBh
cmdzKQogCiAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOwog
ICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgbmFt
ZTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobmFtZSk7CiAgICAgICAgIGlm
ICh0eXBlLmlzQXJyYXkoKSkKICAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKHR5cGUp
OwogCkBAIC0xNTcsNyArMTM0LDcgQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0xC
YXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCiAKICAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAgICAgewotICAgICAgICBvdXQgPDwgdHlw
ZS5nZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUuZ2V0
VHlwZU5hbWUoKSkgPDwgIigiOwogICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAg
LTE5Niw3ICsxNzMsNyBAQCB2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCogbm9kZSkKICAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VTeW1ib2xX
aXRoVmFsdWUobm9kZSkpCiAgICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29wSW5kZXhW
YWx1ZShub2RlKTsKICAgICBlbHNlCi0gICAgICAgIG91dCA8PCBub2RlLT5nZXRTeW1ib2woKTsK
KyAgICAgICAgb3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCiAg
ICAgaWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkK
ICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKQEAgLTI3Miw3
ICsyNDksNyBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIuIjsKICAgICAgICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogQVNTRVJUCi0gICAgICAg
ICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgaGFzaE5hbWUobm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ5Niw3ICs0NzMsNyBAQCBib29sIFRPdXRwdXRHTFNMQmFz
ZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgIEFTU0VSVCh2
aXNpdCA9PSBQcmVWaXNpdCk7CiAgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBub2RlLT5nZXROYW1lKCk7Cisg
ICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAKICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CiAgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVy
cyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKQEAgLTUwOSw3ICs0ODYsNyBAQCBib29sIFRPdXRwdXRH
TFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCiAgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgogICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5v
ZGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhh
c2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAogICAgICAgICAgICAgaW5jcmVtZW50
RGVwdGgoKTsKICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlu
cyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCkBAIC01MzksOCArNTE2LDcgQEAgYm9vbCBUT3V0
cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQogICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KICAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5n
IGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAg
ICAgICAgICAgewpAQCAtNjAxLDcgKzU3Nyw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpOwotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOwor
ICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICIo
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CiAgICAgICAgICAgICB7CkBAIC03NDcsMyArNzIzLDU5IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgewogICAgICAgICBvdXQgPDwgIntc
bn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgogICAgIH0KIH0KKworVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
b3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2
ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNM
QmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobUhhc2hGdW5j
dGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAg
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5kKG5hbWUuY19zdHIoKSk7
CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhh
c2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFtZS5jX3N0cigpXSA9IGhh
c2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgICAg
IHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHJl
dHVybiBoYXNoTmFtZShuYW1lKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmgKaW5kZXggZWZkMGI1Zi4uMDFlOWQ0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0xCYXNlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEdMU0xCYXNlLmgKQEAgLTE2LDcgKzE2LDEwIEBACiBjbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgogewogcHVibGljOgotICAgIFRPdXRwdXRHTFNMQmFzZShU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFz
ZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
VEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CkBAIC0yNSw2ICsy
OCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbikgPSAwOwogICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKTsKICAgICBjb25zdCBDb25zdGFudFVu
aW9uKiB3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50
VW5pb24qIHBDb25zdFVuaW9uKTsKKyAgICBUU3RyaW5nIGdldFR5cGVOYW1lKGNvbnN0IFRUeXBl
JiB0eXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKTsKQEAgLTM3LDYgKzQxLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQg
dmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpOwogCisKKyAgICAvLyBSZXR1cm4gdGhl
IG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7CisgICAgLy8g
b3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUuCisgICAgVFN0cmluZyBoYXNoTmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRo
b3V0IGhhc2hpbmcgYnVpbHQtaW4gdmFyaWFibGVzLgorICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxl
TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1
dCB3aXRob3V0IGhhc2hpbmcgYnVpbHQtaW4gZnVuY3Rpb25zLgorICAgIFRTdHJpbmcgaGFzaEZ1
bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworCiBwcml2YXRlOgogICAg
IFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOwogICAgIGJvb2wgbURlY2xhcmluZ1ZhcmlhYmxlczsK
QEAgLTQ4LDYgKzYxLDEyIEBAIHByaXZhdGU6CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJl
ZFN0cnVjdHM7CiAKICAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworCisgICAgLy8gbmFt
ZSBoYXNoaW5nLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKKyAgICBOYW1l
TWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwogfTsKIAog
I2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCmluZGV4
IGQ3ZTY5ZDMuLmE0MzA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTg3LDYgKzg3LDggQEAgT3V0cHV0SExTTDo6
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1
ZSwgdHJ1ZSwgdHIKICAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOwogICAg
IG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKICAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSBmYWxzZTsKKworICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwogfQogCiBPdXRw
dXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC00MjAsMjYgKzQyMiwxMiBAQCB2b2lkIE91dHB1dEhM
U0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICBvdXQgPDwgIHVuaWZv
cm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICAvLyBUaGUgdGV4dHVyZSBmZXRj
aCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBhbm90aGVy
LiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9tIGxlZnQi
LCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAgICAgIC8v
IGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zIGV4
cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAgICAgICAg
Ly8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25z
IGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBz
aW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+IDEtWSwg
d2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUg
dGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUg
cHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwotICAgICAg
ICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1osIHdoaWNo
IGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9y
IGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBbLTEsIDFd
IC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3IgdGhlCi0g
ICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndyb25nIHNp
ZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFuZ2luZyB0
aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJvdWdob3V0
IHRoZSBjb2RlLgogICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMs
IGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngs
IHQueSwgMCwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtNDQ4LDcgKzQzNiw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJETG9kKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgbG9kKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKICAg
ICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAg
IH0KQEAgLTQ1NywxMiArNDQ1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVy
MkQgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCAxIC0gdC55
IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAg
ICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ3MSwxMiArNDU5LDEyIEBAIHZvaWQg
T3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIGxvZCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1c
biIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgbG9kKVxuIgog
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgbG9kKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgog
ICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ4NSw3ICs0NzMsNyBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgogICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VC
RWxvZChzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC00OTQsNyArNDgyLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQo
dC54LCAtdC55LCB0LnosIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MTM1Miw3ICsxMzQwLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgog
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUt
PmdldE5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+
Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgpKSA8PCAobU91dHB1
dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwogCiAgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAKQEAgLTEzNzQsNiArMTM2
MiwxNCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQogCiAgICAgICAgICAgICBvdXQgPDwgIik7XG4iOwogCisgICAg
ICAgICAgICAvLyBBbHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAorICAg
ICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rp
b24gPSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
MTg2Miw3ICsxODU4LDIxIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkK
ICAgICB7CiAgICAgICBjYXNlIEVPcEtpbGw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlz
Y2FyZDtcbiIsICIiLCAiIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQnJlYWs6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJicmVhaztcbiIsICIiLCAiIik7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BCcmVhazoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CisgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxv
b3BJbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0cnVl
OyBicmVhazt9XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0cHV0
VHJpcGxldCh2aXNpdCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7CiAgICAgICBjYXNl
IEVPcFJldHVybjoKICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQpAQCAtMjA1MiwxMyAr
MjA2MiwzNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNl
c3NpdmUgbG9vcAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpy
ZXN0b3JlSW5kZXggPSBtRXhjZXNzaXZlTG9vcEluZGV4OworICAgICAgICAgICAgbUV4Y2Vzc2l2
ZUxvb3BJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgIntpbnQgIjsKKyAgICAg
ICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgor
ICAgICAgICAgICAgICAgICAgICJib29sIEJyZWFrIjsKKyAgICAgICAgICAgIGluZGV4LT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiID0gZmFsc2U7XG4iOworCisgICAgICAg
ICAgICBib29sIGZpcnN0TG9vcEZyYWdtZW50ID0gdHJ1ZTsKKwogICAgICAgICAgICAgd2hpbGUg
KGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBjbGFt
cGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFU
SU9OUywgaXRlcmF0aW9ucyk7CiAKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdt
ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJpZigh
QnJlYWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8g
TGFzdCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVh
ayBmbGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5k
ZXggKz0gaW5jcmVtZW50KQogCi0gICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoaW50ICI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKICAgICAgICAgICAgICAgICBpbmRleC0+dHJh
dmVyc2UodGhpcyk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwogICAgICAgICAgICAg
ICAgIG91dCA8PCBpbml0aWFsOwpAQCAtMjA4NSw5ICsyMTE5LDIwIEBAIGJvb2wgT3V0cHV0SExT
TDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAg
b3V0IDw8ICI7fVxuIjsKIAorICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBm
YWxzZTsKKwogICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAq
IGluY3JlbWVudDsKICAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJB
VElPTlM7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAi
fSI7CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7CiAK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAppbmRleCBlYTI4YTNjLi5kYzg0
M2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKQEAgLTE0NCw2ICsxNDQsOCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwogICAg
IGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKICAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3Vz
TG9vcDsKKworICAgIFRJbnRlcm1TeW1ib2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7CiB9OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAppbmRleCBiMzExNTI2Li43ZTVmY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEwLDcgKzEwLDcg
QEAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAogLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KIC8vCkBAIC0xODQsNyArMTg0LDYgQEAgdm9pZCBUUGFyc2VDb250ZXh0OjplcnJv
cihUU291cmNlTG9jIGxvYywKICAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0
aWNzOjpFUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRv
a2VuLCBleHRyYUluZm8pOwogCi0gICAgKytudW1FcnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29u
dGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKQEAgLTg0NywxNCArODQ2LDI2IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBl
KiB0eXBlLCBpbnQgc2l6ZSwKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCitib29sIFRQYXJz
ZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewotICAgIC8vCi0gICAgLy8g
TWFrZSB0aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCi0gICAgLy8KLSAgICBpZiAodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KICAgICAg
ICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNv
bnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzU3RydWN0dXJlQ29udGFp
bmluZ0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAic3RydWN0
dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNl
IHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTUxMCw3ICsxNTIxLDcgQEAgaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKIAogICAgIGds
c2xhbmdfZmluYWxpemUoY29udGV4dCk7CiAKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChj
b250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKKyAgICByZXR1cm4gKGVycm9yID09IDAp
ICYmIChjb250ZXh0LT5udW1FcnJvcnMoKSA9PSAwKSA/IDAgOiAxOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKaW5kZXgg
OGRlZThmZC4uNjY4ZTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIv
RGlhZ25vc3RpY3MuaCIKICNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKQEAgLTMzLDcgKzMzLDYgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCiAgICAgICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAogICAgICAgICAgICAgdHJl
ZVJvb3QoMCksCi0gICAgICAgICAgICBudW1FcnJvcnMoMCksCiAgICAgICAgICAgICBsZXhBZnRl
clR5cGUoZmFsc2UpLAogICAgICAgICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKICAgICAgICAg
ICAgIHN0cnVjdE5lc3RpbmdMZXZlbCgwKSwKQEAgLTUyLDcgKzUxLDYgQEAgc3RydWN0IFRQYXJz
ZUNvbnRleHQgewogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25zdCBjaGFyKiBzb3Vy
Y2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KICAgICBUSW50ZXJt
Tm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVk
Ci0gICAgaW50IG51bUVycm9yczsKICAgICBib29sIGxleEFmdGVyVHlwZTsgICAgICAgICAgIC8v
IHRydWUgaWYgd2UndmUgcmVjb2duaXplZCBhIHR5cGUsIHNvIGNhbiBvbmx5IGJlIGxvb2tpbmcg
Zm9yIGFuIGlkZW50aWZpZXIKICAgICBpbnQgbG9vcE5lc3RpbmdMZXZlbDsgICAgICAgIC8vIDAg
aWYgb3V0c2lkZSBhbGwgbG9vcHMKICAgICBpbnQgc3RydWN0TmVzdGluZ0xldmVsOyAgICAgIC8v
IGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1Y3QgZGVjbGFyYXRpb24KQEAgLTY3LDYg
KzY1LDcgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJl
cHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7CiAKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KICAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwpAQCAtOTgsNyArOTcs
NyBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwog
ICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1Ymxp
Y1R5cGUmIHBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGludCBs
aW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wg
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOwog
ICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBUU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCmluZGV4IDljZDZlNWUuLjM5MDhi
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5h
bWVGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCkBAIC0yMCw3ICsyMCw3IEBAIHB1YmxpYzoKICAgICAsIG1PbGRGdW5j
dGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQogICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5j
dGlvbk5hbWUpIHt9CiAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQogICAgIHsKICAgICAgICAgVE9wZXJh
dG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKICAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8
fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rp
b25OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAppbmRleCAzZWFmMTlmLi5hMmM1ZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUg
ImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZp
b3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9IYXNoTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCkBAIC02OSw2ICs3MCwxMCBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1cm4g
dW5pZm9ybXM7IH0KICAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0OwogCisg
ICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBoYXNo
RnVuY3Rpb247IH0KKyAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1cm4gbmFtZU1hcDsg
fQorICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVybiBzeW1ib2xUYWJs
ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgU2hTaGFkZXJUeXBlIGdldFNoYWRlclR5cGUoKSBjb25z
dCB7IHJldHVybiBzaGFkZXJUeXBlOyB9CiAgICAgU2hTaGFkZXJTcGVjIGdldFNoYWRlclNwZWMo
KSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9CkBAIC04OSw2ICs5NCw5IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIg
YXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYworICAgIC8v
IEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkg
dW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCiAgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCkBAIC0xMDYs
NiArMTE0LDggQEAgcHJpdmF0ZToKICAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsKICAgICBT
aFNoYWRlclNwZWMgc2hhZGVyU3BlYzsKIAorICAgIGludCBtYXhVbmlmb3JtVmVjdG9yczsKKwog
ICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVj
LCBhbmQgcmVzb3VyY2VzLgogICAgIC8vIEl0IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8t
Y29tcGlsZS4KICAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGU7CkBAIC0xMjIsNiArMTMyLDEw
IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2lu
Z2xldG9uLgogICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsKKworICAgIC8vIG5hbWUgaGFz
aGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbjsKKyAgICBOYW1lTWFwIG5h
bWVNYXA7CiB9OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4IDU2ZjVjN2YuLmFiNTY1MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAg
LTEyNSw2ICsxMjUsOSBAQCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVz
b3VyY2VzKiByZXNvdXJjZXMpCiAgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMgPSAwOwogICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7CiAgICAg
cmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworCisgICAgLy8gRGlzYWJsZSBu
YW1lIGhhc2hpbmcgYnkgZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkhhc2hGdW5jdGlvbiA9IE5V
TEw7CiB9CiAKIC8vCkBAIC0yMjQsNiArMjI3LDIyIEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNo
SGFuZGxlIGhhbmRsZSwgU2hTaGFkZXJJbmZvIHBuYW1lLCBpbnQqIHBhcmFtcykKICAgICAgICAg
Ly8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgogICAgICAgICAqcGFyYW1z
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hf
TkFNRV9NQVhfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoK
KyAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDY0
IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKKyAgICAgICAg
ICAgIC8vIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1l
UHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAqcGFyYW1zID0gMTYg
KyBzaXplb2YoSGFzaGVkTmFtZVByZWZpeCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxl
ci0+Z2V0TmFtZU1hcCgpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CiB9CkBAIC0yODMsMyArMzAyLDQ2IEBAIHZvaWQgU2hHZXRBY3Rp
dmVVbmlmb3JtKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKICAgICBnZXRWYXJpYWJsZUluZm8oU0hf
QUNUSVZFX1VOSUZPUk1TLAogICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGluZGV4LCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUpOwogfQorCit2b2lkIFNoR2V0TmFtZUhh
c2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKK3sKKyAgICBpZiAo
IWhhbmRsZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21w
aWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIGNvbnN0IE5hbWVNYXAm
IG5hbWVNYXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOworICAgIGlmIChpbmRleCA+PSBzdGF0
aWNfY2FzdDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBpbmRleDsgKytpKQorICAgICAgICArK2l0OworCisgICAgc2l6ZV90IGxlbiA9
IGl0LT5maXJzdC5sZW5ndGgoKSArIDE7CisgICAgaW50IG1heF9sZW4gPSAwOworICAgIFNoR2V0
SW5mbyhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KGxlbikgPiBtYXhfbGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgIGxlbiA9IG1heF9sZW47CisgICAgfQorICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0
LmNfc3RyKCksIGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRo
ZSBzb3VyY2UgaXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgbmFtZVtsZW5dID0gJ1wwJzsK
KworICAgIGxlbiA9IGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAxOworICAgIG1heF9sZW4gPSAwOwor
ICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVu
KTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsZW4pID4gbWF4X2xlbikgeworICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAgICBzdHJuY3B5
KGhhc2hlZE5hbWUsIGl0LT5zZWNvbmQuY19zdHIoKSwgbGVuKTsKKyAgICAvLyBUbyBiZSBvbiB0
aGUgc2FmZSBzaWRlIGluIGNhc2UgdGhlIHNvdXJjZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZC4K
KyAgICBoYXNoZWROYW1lW2xlbl0gPSAnXDAnOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKaW5kZXggNjhmMDI5ZC4uODQ3
YzFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5
bWJvbFRhYmxlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0yMCw5ICsyMCwxNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKIAotLy8KLS8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNlIHRv
IGxpdmUuCi0vLworVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6CisgICAgICAg
ICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihwLnF1
YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJheSks
IGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAgICAgICBtYXhBcnJheVNpemUoMCksIGFy
cmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIGRl
ZXBlc3RTdHJ1Y3ROZXN0aW5nKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1l
KDApCit7CisgICAgaWYgKHAudXNlckRlZikgeworICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJE
ZWYtPmdldFN0cnVjdCgpOworICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNl
ckRlZi0+Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgY29tcHV0ZURlZXBlc3RTdHJ1
Y3ROZXN0aW5nKCk7CisgICAgfQorfQogCiAvLwogLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFu
Z2xlZCBuYW1lcy4KQEAgLTkyLDYgKzk5LDI1IEBAIHZvaWQgVFR5cGU6OmNvbXB1dGVEZWVwZXN0
U3RydWN0TmVzdGluZygpCiAgICAgZGVlcGVzdFN0cnVjdE5lc3RpbmcgPSAxICsgbWF4TmVzdGlu
ZzsKIH0KIAorYm9vbCBUVHlwZTo6aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyID0gc3RydWN0
dXJlLT5iZWdpbigpOyBtZW1iZXIgIT0gc3RydWN0dXJlLT5lbmQoKTsgbWVtYmVyKyspCisgICAg
eworICAgICAgICBpZiAobWVtYmVyLT50eXBlLT5pc0FycmF5KCkgfHwKKyAgICAgICAgICAgIG1l
bWJlci0+dHlwZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gRHVtcCBmdW5jdGlvbnMuCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAppbmRleCAzMzYxNmRjLi5h
ODk0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaApAQCAtMjk4LDYgKzI5OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzeW1ib2w7CiAgICAgfQogCisgICAgVFN5bWJvbCAqZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsKKyAg
ICB9CisKICAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xvYmFsTGV2ZWwoKSB7CiAgICAgICAg
IGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CiAgICAgICAgIHJldHVybiB0YWJsZVsxXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwCmluZGV4IGQ5MGM3MGMuLmE0ZjA0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcApAQCAtMjYs
NyArMjYsNyBAQCB2b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJv
b3QpIHsKICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9u
RGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAg
IFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luayk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNT
TChzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgp
KTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0RVNTTCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCmlu
ZGV4IGJhMzgxMTIuLjVmM2RiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcApAQCAtMzksNiArMzksNiBAQCB2
b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBn
ZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihz
aW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNM
IG91dHB1dEdMU0woc2luayk7CisgICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKICAgICByb290
LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UeXBlcy5oCmluZGV4IGUxYTE4ZmQuLmQ0NTc2NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSwxMCArMTEsMTIgQEAKICNp
bmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgog
CitjbGFzcyBUVHlwZTsKK3N0cnVjdCBUUHVibGljVHlwZTsKKwogLy8KIC8vIE5lZWQgdG8gaGF2
ZSBhc3NvY2lhdGlvbiBvZiBsaW5lIG51bWJlcnMgdG8gdHlwZXMgaW4gYSBsaXN0IGZvciBidWls
ZGluZyBzdHJ1Y3RzLgogLy8KLWNsYXNzIFRUeXBlOwogc3RydWN0IFRUeXBlTGluZSB7CiAgICAg
VFR5cGUqIHR5cGU7CiAgICAgaW50IGxpbmU7CkBAIC0yNyw1OSArMjksMTQgQEAgaW5saW5lIFRU
eXBlTGlzdCogTmV3UG9vbFRUeXBlTGlzdCgpCiAgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRUeXBl
TGlzdDsKIH0KIAotLy8KLS8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gd2l0
aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKLS8vIHR5cGVzIHRoYXQgaXQgdGhpbmtz
IGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hvdWxkCi0vLyBqdXN0IGJlIHVz
ZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBhbnl0aGluZyBlbHNlLiAgUG9p
bnRlcnMKLS8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWluZyB0byBhdm9pZCBsb3RzIG9m
IG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgotLy8KLS8vIE5vdCBhcyBiYWQgYXMgaXQgbG9v
a3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpZWxkcwotLy8gbWF0
Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgotLy8KLWNs
YXNzIFRQdWJsaWNUeXBlIHsKLXB1YmxpYzoKLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci0gICAgVFF1
YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgaW50IHNp
emU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJy
YXkKLSAgICBib29sIG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7
Ci0gICAgVFR5cGUqIHVzZXJEZWY7Ci0gICAgaW50IGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2lj
KFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIgcSwgaW50IGxuID0gMCkKLSAgICB7Ci0gICAgICAg
IHR5cGUgPSBidDsKLSAgICAgICAgcXVhbGlmaWVyID0gcTsKLSAgICAgICAgcHJlY2lzaW9uID0g
RWJwVW5kZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7
Ci0gICAgICAgIGFycmF5ID0gZmFsc2U7Ci0gICAgICAgIGFycmF5U2l6ZSA9IDA7Ci0gICAgICAg
IHVzZXJEZWYgPSAwOwotICAgICAgICBsaW5lID0gbG47Ci0gICAgfQotCi0gICAgdm9pZCBzZXRB
Z2dyZWdhdGUoaW50IHMsIGJvb2wgbSA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7
Ci0gICAgICAgIG1hdHJpeCA9IG07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShib29sIGEs
IGludCBzID0gMCkKLSAgICB7Ci0gICAgICAgIGFycmF5ID0gYTsKLSAgICAgICAgYXJyYXlTaXpl
ID0gczsKLSAgICB9Ci19OwotCiB0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj4g
VFN0cnVjdHVyZU1hcDsKIHR5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlwZUxpc3QqPjo6aXRl
cmF0b3IgVFN0cnVjdHVyZU1hcEl0ZXJhdG9yOworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhp
bmdzIHRoYXQgaGF2ZSBhIHR5cGUuCiAvLwotY2xhc3MgVFR5cGUgeworY2xhc3MgVFR5cGUKK3sK
IHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0
b3IpCiAgICAgVFR5cGUoKSB7fQpAQCAtODgsMTYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgc3RydWN0dXJlKDAp
LCBzdHJ1Y3R1cmVTaXplKDApLCBkZWVwZXN0U3RydWN0TmVzdGluZygwKSwgZmllbGROYW1lKDAp
LCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgVFR5
cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJl
Y2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUp
LCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXpl
KSwKLSAgICAgICAgICAgIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCks
IHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCks
IGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKLSAgICB7Ci0gICAgICAgIGlm
IChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3Ry
dWN0KCk7Ci0gICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+
Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbXB1dGVEZWVwZXN0U3RydWN0
TmVzdGluZygpOwotICAgICAgICB9Ci0gICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQ
dWJsaWNUeXBlICZwKTsKICAgICBUVHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJp
bmcmIG4sIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgogICAgICAgICAgICAgdHlwZShF
YnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEp
LCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKICAgICAgICAgICAg
IG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIHN0cnVjdHVyZSh1c2Vy
RGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCksIGZpZWxkTmFt
ZSgwKSwgbWFuZ2xlZCgwKQpAQCAtMjg0LDYgKzIzMiw4IEBAIHB1YmxpYzoKICAgICAvLyBkZWVw
ZXN0IGZpZWxkIChuZXN0aW5nMi5maWVsZDEucG9zaXRpb24pLgogICAgIGludCBnZXREZWVwZXN0
U3RydWN0TmVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGRlZXBlc3RTdHJ1Y3ROZXN0aW5nOyB9CiAK
KyAgICBib29sIGlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpIGNvbnN0OworCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcmKTsKICAgICBpbnQgZ2V0U3Ry
dWN0U2l6ZSgpIGNvbnN0OwpAQCAtMzA4LDQgKzI1OCw2MSBAQCBwcm90ZWN0ZWQ6CiAgICAgVFN0
cmluZyAqdHlwZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgdHlwZSBuYW1l
CiB9OwogCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRo
ZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2
ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3
aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVy
cworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVt
b3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywg
dGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1
cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworc3RydWN0
IFRQdWJsaWNUeXBlCit7CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAgICAg
ICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgYm9v
bCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRUeXBl
KiB1c2VyRGVmOworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBl
IGJ0LCBUUXVhbGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0gYnQ7
CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5l
ZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBh
cnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0g
MDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKGlu
dCBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBt
YXRyaXggPSBtOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDAp
CisgICAgeworICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAg
fQorCisgICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCF1c2VyRGVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVDb250
YWluaW5nQXJyYXlzKCk7CisgICAgfQorfTsKKwogI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAKaW5kZXggMTc4MmViYy4uZTIyYTc1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5jcHAKQEAgLTk1LDkgKzk1LDkgQEAgYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKaW5kZXggMWU5NDg2
Zi4uZWI2YmVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZhcmlhYmxlSW5mby5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKQEAgLTc3LDIzICs3NywyNSBAQCBzdGF0aWMgdm9pZCBn
ZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogc3RhdGljIHZvaWQgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0
JiBpbmZvTGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CiAKIC8vIFJldHVybnMgaW5m
byBmb3IgYW4gYXR0cmlidXRlIG9yIHVuaWZvcm0uCiBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUlu
Zm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rp
b242NCBoYXNoRnVuY3Rpb24pCiB7CiAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CiAgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7CiAgICAgICAgICAg
ICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJyYWNrZXRzKGkp
OwotICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIGxuYW1l
LCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVk
VmFyaWFibGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5j
dGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnZXRV
c2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7
CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBw
ZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwg
aW5mb0xpc3QpOwpAQCAtMTI0LDcgKzEyNiw4IEBAIHZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5m
byhjb25zdCBUVHlwZSYgdHlwZSwKIHZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29u
c3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKICAgICBBU1NFUlQodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwogCkBAIC0xMzMsMTUgKzEzNiwyOCBAQCB2b2lkIGdl
dFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogICAgICAgICBjb25z
dCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CiAgICAgICAgIGdldFZh
cmlhYmxlSW5mbygqZmllbGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIu
IiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBt
YXBwZWROYW1lICsgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9MaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZE5h
bWUgKyAiLiIgKyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKGZpZWxkVHlwZS0+Z2V0RmllbGROYW1l
KCksIGhhc2hGdW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc2hGdW5jdGlvbik7CiAgICAgfQogfQogCitUVmFyaWFi
bGVJbmZvOjpUVmFyaWFibGVJbmZvKCkKK3sKK30KKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxl
SW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKQorICAgIDogdHlwZSh0eXBlKSwKKyAgICAg
IHNpemUoc2l6ZSkKK3sKK30KKwogQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6Q29sbGVjdEF0dHJp
YnNVbmlmb3JtcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1z
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogICAgIDogbUF0dHJp
YnMoYXR0cmlicyksCi0gICAgICBtVW5pZm9ybXModW5pZm9ybXMpCisgICAgICBtVW5pZm9ybXMo
dW5pZm9ybXMpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pCiB7CiB9CiAKQEAg
LTE5NiwxMCArMjEyLDE2IEBAIGJvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGluaXRpYWxpemVkIGluIGEgc2hhZGVyLCB3ZSBtdXN0IGhhdmUgb25seQogICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZXMgaW4gdGhlIHNlcXVlbmNlLgogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBU
U3RyaW5nIHByb2Nlc3NlZFN5bWJvbDsKKyAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlv
biA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJs
ZS0+Z2V0U3ltYm9sKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRP
cmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJp
YWJsZUluZm8odmFyaWFibGUtPmdldFR5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRTeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaAppbmRleCA2NjdhY2FmLi40
MTMwYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVJbmZvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oCkBAIC0xMyw2ICsxMyw5IEBACiAvLyBQcm92aWRlcyBpbmZvcm1hdGlv
biBhYm91dCBhIHZhcmlhYmxlLgogLy8gSXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3Rv
cmUgaW5mbyBhYm91dCBhY3RpdmUgYXR0cmlicyBhbmQgdW5pZm9ybXMuCiBzdHJ1Y3QgVFZhcmlh
YmxlSW5mbyB7CisgICAgVFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKTsK
KyAgICBUVmFyaWFibGVJbmZvKCk7CisKICAgICBUUGVyc2lzdFN0cmluZyBuYW1lOwogICAgIFRQ
ZXJzaXN0U3RyaW5nIG1hcHBlZE5hbWU7CiAgICAgU2hEYXRhVHlwZSB0eXBlOwpAQCAtMjQsNyAr
MjcsOCBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9M
aXN0OwogY2xhc3MgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKIHB1YmxpYzoKICAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zKFRWYXJpYWJsZUluZm9M
aXN0JiBhdHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xp
c3QmIHVuaWZvcm1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiopOwpAQCAtMzgsNiArNDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRW
YXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKICAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVVuaWZv
cm1zOworCisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOwogfTsKIAogI2VuZGlm
ICAvLyBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBjNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApAQCAtMCww
ICsxLDI5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJs
ZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgImNvbXBpbGVyL1No
SGFuZGxlLmgiCisKK25hbWVzcGFjZSB7CitpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0Ogor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNh
c2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHJldHVy
biAzOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAg
ICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9JTlQ6CisgICAgICAgIGNhc2UgU0hfQk9P
TDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJf
Q1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKKyAgICAgICAgY2Fz
ZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
IDc7CisgICAgfQorfQorfSAgICAvLyBuYW1lc3BhY2UKKworaW50IFZhcmlhYmxlUGFja2VyOjpH
ZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRf
VkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gNDsK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6
CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgor
ICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAg
ICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAg
ICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9J
TlQ6CisgICAgICAgIGNhc2UgU0hfQk9PTDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgor
ICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VY
VEVSTkFMX09FUzoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgfQorfQorCitpbnQgVmFyaWFibGVQYWNr
ZXI6OkdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAg
ICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUM0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hf
SU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIFNIX0ZM
T0FUX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfQk9P
TF9WRUMyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAg
ICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAg
IGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxf
T0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm4gMTAwMDAwOworICAgIH0KK30KKworc3RydWN0IFRWYXJpYWJsZUlu
Zm9Db21wYXJlciB7CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxo
cywgY29uc3QgVFZhcmlhYmxlSW5mbyYgcmhzKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGxo
c1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihsaHMudHlwZSk7CisgICAgICAgIGludCByaHNTb3J0
T3JkZXIgPSBHZXRTb3J0T3JkZXIocmhzLnR5cGUpOworICAgICAgICBpZiAobGhzU29ydE9yZGVy
ICE9IHJoc1NvcnRPcmRlcikgeworICAgICAgICAgICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJo
c1NvcnRPcmRlcjsKKyAgICAgICAgfQorICAgICAgICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3Qu
CisgICAgICAgIHJldHVybiBsaHMuc2l6ZSA+IHJocy5zaXplOworICAgIH0KK307CisKK3Vuc2ln
bmVkIFZhcmlhYmxlUGFja2VyOjptYWtlQ29sdW1uRmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNv
bXBvbmVudHNQZXJSb3cpCit7CisgICAgcmV0dXJuICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1
bW5zIC0gbnVtQ29tcG9uZW50c1BlclJvdykpICYKKyAgICAgICAgICAgICAgICAgICAga0NvbHVt
bk1hc2spID4+IGNvbHVtbjsKK30KKwordm9pZCBWYXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMo
aW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVy
Um93KQoreworICAgIHVuc2lnbmVkIGNvbHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVt
biwgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dz
OyArK3IpIHsKKyAgICAgICAgaW50IHJvdyA9IHRvcFJvdyArIHI7CisgICAgICAgIEFTU0VSVCgo
cm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAwKTsKKyAgICAgICAgcm93c19bcm93XSB8PSBj
b2x1bW5GbGFnczsKKyAgICB9Cit9CisKK2Jvb2wgVmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVt
bihpbnQgY29sdW1uLCBpbnQgbnVtUm93cywgaW50KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQor
eworICAgIEFTU0VSVChkZXN0Um93KTsKKworICAgIGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1h
eFJvd3NfICYmIHJvd3NfW3RvcE5vbkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAg
ICsrdG9wTm9uRnVsbFJvd18pIHsKKyAgICB9CisKKyAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJv
d18gPj0gMCAmJiByb3dzX1tib3R0b21Ob25GdWxsUm93X10gPT0ga0NvbHVtbk1hc2s7CisgICAg
ICAgICAtLWJvdHRvbU5vbkZ1bGxSb3dfKSB7CisgICAgfQorCisgICAgaWYgKGJvdHRvbU5vbkZ1
bGxSb3dfIC0gdG9wTm9uRnVsbFJvd18gKyAxIDwgbnVtUm93cykgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgY29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxh
Z3MoY29sdW1uLCAxKTsKKyAgICBpbnQgdG9wR29vZFJvdyA9IDA7CisgICAgaW50IHNtYWxsZXN0
R29vZFRvcCA9IC0xOworICAgIGludCBzbWFsbGVzdEdvb2RTaXplID0gbWF4Um93c18gKyAxOwor
ICAgIGludCBib3R0b21Sb3cgPSBib3R0b21Ob25GdWxsUm93XyArIDE7CisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgIGZvciAoaW50IHJvdyA9IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90
dG9tUm93OyArK3JvdykgeworICAgICAgICBib29sIHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93
ID8gKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApIDogZmFsc2U7CisgICAgICAgIGlm
IChyb3dFbXB0eSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAg
IHRvcEdvb2RSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSByb3cgLSB0b3BHb29kUm93OworICAgICAgICAgICAgICAg
IGlmIChzaXplID49IG51bVJvd3MgJiYgc2l6ZSA8IHNtYWxsZXN0R29vZFNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc21hbGxlc3RHb29kU2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAg
ICAgIHNtYWxsZXN0R29vZFRvcCA9IHRvcEdvb2RSb3c7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoc21hbGxlc3RHb29kVG9wIDwgMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKmRlc3RSb3cgPSBzbWFsbGVzdEdvb2RUb3A7CisgICAgaWYgKGRlc3RTaXpl
KSB7CisgICAgICAgICpkZXN0U2l6ZSA9IHNtYWxsZXN0R29vZFNpemU7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFZhcmlhYmxlUGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMoaW50IG1heFZlY3RvcnMsIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpCit7CisgICAgQVNTRVJUKG1heFZlY3RvcnMgPiAwKTsKKyAgICBtYXhSb3dz
XyA9IG1heFZlY3RvcnM7CisgICAgdG9wTm9uRnVsbFJvd18gPSAwOworICAgIGJvdHRvbU5vbkZ1
bGxSb3dfID0gbWF4Um93c18gLSAxOworICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhp
bl92YXJpYWJsZXMpOworCisgICAgLy8gQXMgcGVyIEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2Vj
dGlvbiA3IHZhcmlhYmxlcyBhcmUgcGFja2VkIGluIHNwZWNpZmljCisgICAgLy8gb3JkZXIgYnkg
dHlwZSwgdGhlbiBieSBzaXplIG9mIGFycmF5LCBsYXJnZXN0IGZpcnN0LgorICAgIHN0ZDo6c29y
dCh2YXJpYWJsZXMuYmVnaW4oKSwgdmFyaWFibGVzLmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFy
ZXIoKSk7CisgICAgcm93c18uY2xlYXIoKTsKKyAgICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywg
MCk7CisKKyAgICAvLyBQYWNrcyB0aGUgNCBjb2x1bW4gdmFyaWFibGVzLgorICAgIHNpemVfdCBp
aSA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07CisgICAgICAg
IGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDQpIHsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51
bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAgIGlmICh0
b3BOb25GdWxsUm93XyA+IG1heFJvd3NfKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBQYWNrcyB0aGUgMyBjb2x1bW4gdmFyaWFibGVzLgorICAgIGludCBudW0zQ29s
dW1uUm93cyA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Cisg
ICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG51bTNDb2x1bW5Sb3dzICs9
IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAg
IGlmICh0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzID4gbWF4Um93c18pIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3df
LCBudW0zQ29sdW1uUm93cywgMCwgMyk7CisKKyAgICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFy
aWFibGVzLgorICAgIGludCB0b3AyQ29sdW1uUm93ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29s
dW1uUm93czsKKyAgICBpbnQgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9w
MkNvbHVtblJvdzsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1u
Um93c0F2YWlsYWJsZTsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29s
dW1uUm93c0F2YWlsYWJsZTsKKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lp
KSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lp
XTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0g
MikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IG51bVJvd3Mg
PSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICAgICAgaWYg
KG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczAxKSB7CisgICAgICAgICAgICByb3dz
QXZhaWxhYmxlSW5Db2x1bW5zMDEgLT0gbnVtUm93czsKKyAgICAgICAgfSBlbHNlIGlmIChudW1S
b3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMykgeworICAgICAgICAgICAgcm93c0F2YWls
YWJsZUluQ29sdW1uczIzIC09IG51bVJvd3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgbnVtUm93c1VzZWRJ
bkNvbHVtbnMwMSA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxh
YmxlSW5Db2x1bW5zMDE7CisgICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMjMgPQorICAgICAg
ICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzOworICAg
IGZpbGxDb2x1bW5zKHRvcDJDb2x1bW5Sb3csIG51bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIp
OworICAgIGZpbGxDb2x1bW5zKG1heFJvd3NfIC0gbnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVt
Um93c1VzZWRJbkNvbHVtbnMyMywKKyAgICAgICAgICAgICAgICAyLCAyKTsKKworICAgIC8vIFBh
Y2tzIHRoZSAxIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNp
emUoKTsgKytpaSkgeworICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZh
cmlhYmxlc1tpaV07CisgICAgICAgIEFTU0VSVCgxID09IEdldE51bUNvbXBvbmVudHNQZXJSb3co
dmFyaWFibGUudHlwZSkpOworICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFi
bGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAt
MTsKKyAgICAgICAgaW50IHNtYWxsZXN0U2l6ZSA9IG1heFJvd3NfICsgMTsKKyAgICAgICAgaW50
IHRvcFJvdyA9IC0xOworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVt
Q29sdW1uczsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgIGludCByb3cgPSAwOworICAgICAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICAgICAgaWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51
bVJvd3MsICZyb3csICZzaXplKSkgeworICAgICAgICAgICAgICAgIGlmIChzaXplIDwgc21hbGxl
c3RTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0U2l6ZSA9IHNpemU7CisgICAg
ICAgICAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1uID0gY29sdW1uOworICAgICAgICAgICAgICAg
ICAgICB0b3BSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNtYWxsZXN0Q29sdW1uIDwgMCkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmlsbENvbHVtbnModG9wUm93LCBu
dW1Sb3dzLCBzbWFsbGVzdENvbHVtbiwgMSk7CisgICAgfQorCisgICAgQVNTRVJUKHZhcmlhYmxl
cy5zaXplKCkgPT0gaWkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODcwNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIu
aApAQCAtMCwwICsxLDQxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9WQVJJQUJM
RVBBQ0tFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworCisj
aW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNz
IFZhcmlhYmxlUGFja2VyIHsKKyBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXNzZWQgaW4gdmFyaWFibGVzIHBhY2sgaW4gbWF4VmVjdG9ycyBmb2xsb3dpbmcKKyAgICAvLyB0
aGUgcGFja2luZyBydWxlcyBmcm9tIHRoZSBHTFNMIDEuMDE3IHNwZWMsIEFwcGVuZGl4IEEsIHNl
Y3Rpb24gNy4KKyAgICBib29sIENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAg
ICAgICAgaW50IG1heFZlY3RvcnMsCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpOworCisgICAgLy8gR2V0cyBob3cgbWFueSBjb21wb25lbnRzIGluIGEgcm93
IGEgZGF0YSB0eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtQ29tcG9uZW50c1BlclJv
dyhTaERhdGFUeXBlIHR5cGUpOworCisgICAgLy8gR2V0cyBob3cgbWFueSByb3dzIGEgZGF0YSB0
eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpOwor
CisgcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1Db2x1bW5zID0gNDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga0NvbHVtbk1hc2sgPSAoMSA8PCBrTnVtQ29sdW1ucykgLSAx
OworCisgICAgdW5zaWduZWQgbWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGludCBudW1Db21w
b25lbnRzUGVyUm93KTsKKyAgICB2b2lkIGZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1S
b3dzLCBpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgYm9vbCBzZWFy
Y2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywgaW50KiBkZXN0
U2l6ZSk7CisKKyAgICBpbnQgdG9wTm9uRnVsbFJvd187CisgICAgaW50IGJvdHRvbU5vbkZ1bGxS
b3dfOworICAgIGludCBtYXhSb3dzXzsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZD4gcm93c187
Cit9OworCisjZW5kaWYgLy8gX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKaW5kZXgg
MjZjZWUwNS4uN2E4MmJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDE3ICs5LDIyIEBACiBzdGF0aWMgY29uc3Qg
aW50IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7CiBzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lP
Tl8xMjAgPSAxMjA7CiAKLS8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhyZWUgdGhpbmdzOgorLy8g
V2UgbmVlZCB0byBzY2FuIGZvciB0aGUgZm9sbG93aW5nOgogLy8gMS4gImludmFyaWFudCIga2V5
d29yZDogVGhpcyBjYW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cwogLy8gICAgYnV0IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KIC8vIDIuICJnbF9Qb2ludENv
b3JkIiBidWlsdC1pbiB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBz
aGFkZXIKIC8vICAgIGJ1dCBpbnNpZGUgYW55IHNjb3BlLgogLy8gMy4gQ2FsbCB0byBhIG1hdHJp
eCBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAgKFRo
ZXNlIGNvbnN0cnVjdG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8v
Ci0vLyBJZiBpdCB3ZXJlbid0IGZvciAoMykgdGhlbiB3ZSB3b3VsZCBvbmx5IG5lZWQgdG8gc2Nh
biB0aGUgZ2xvYmFsCi0vLyBzY29wZSBvZiB0aGUgdmVydGV4IHNoYWRlci4gSG93ZXZlciwgd2Ug
bmVlZCB0byBzY2FuIHRoZSBlbnRpcmUKLS8vIHNoYWRlciBpbiBib3RoIGNhc2VzLgorLy8gNC4g
QXJyYXlzIGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisvLyAgICBHTFNMIHNwZWMgc2Vj
dGlvbiA2LjEuMTogIldoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLCBleHByZXNzaW9ucyB0aGF0IGRv
CisvLyAgICBub3QgZXZhbHVhdGUgdG8gbC12YWx1ZXMgY2Fubm90IGJlIHBhc3NlZCB0byBwYXJh
bWV0ZXJzIGRlY2xhcmVkIGFzCisvLyAgICBvdXQgb3IgaW5vdXQuIgorLy8gICAgR0xTTCAxLjEg
c2VjdGlvbiA1Ljg6ICJPdGhlciBiaW5hcnkgb3IgdW5hcnkgZXhwcmVzc2lvbnMsCisvLyAgICBu
b24tZGVyZWZlcmVuY2VkIGFycmF5cywgZnVuY3Rpb24gbmFtZXMsIHN3aXp6bGVzIHdpdGggcmVw
ZWF0ZWQgZmllbGRzLAorLy8gICAgYW5kIGNvbnN0YW50cyBjYW5ub3QgYmUgbC12YWx1ZXMuIgor
Ly8gICAgR0xTTCAxLjIgcmVsYXhlZCB0aGUgcmVzdHJpY3Rpb24gb24gYXJyYXlzLCBzZWN0aW9u
IDUuODogIlZhcmlhYmxlcyB0aGF0CisvLyAgICBhcmUgYnVpbHQtaW4gdHlwZXMsIGVudGlyZSBz
dHJ1Y3R1cmVzIG9yIGFycmF5cy4uLiBhcmUgYWxsIGwtdmFsdWVzLiIKIC8vCiAvLyBUT0RPKGFs
b2twKTogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgb2YgaW52YXJpYW50IGRlY2FsYXJhdGlvbiBn
ZXQgbG9zdAogLy8gZHVyaW5nIHBhcnNpbmcgLSB0aGV5IGRvIG5vdCBnZXQgY2FycmllZCBvdmVy
IHRvIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KQEAgLTc5LDYgKzg0LDI2IEBAIGJvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIH0KKyAgICAgIGNhc2UgRU9wUGFyYW1ldGVy
czogeworICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gcGFyYW1zLmJlZ2luKCk7CisgICAgICAgICAgICAgaXRlciAhPSBwYXJhbXMuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiBwYXJh
bSA9ICgqaXRlciktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS0+aXNBcnJh
eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gcGFyYW0tPmdldFF1YWxpZmllcigpOworICAgICAgICAgICAgICAgIGlmICgocXVhbGlmaWVy
ID09IEV2cU91dCkgfHwgKHF1YWxpZmllciA9PSAgRXZxSW5PdXQpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZC4gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzoKICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAppbmRl
eCAzNzZmY2I4Li4xYzFjYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaApAQCAtMjIsMTQgKzIyLDE4IEBACiAvLyAgIC0gYysr
IHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgogLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxlIGdsX1Bv
aW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9y
cyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0
aW9uIHBhcmFtZXRlcnMKIC8vCiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CiBwdWJsaWM6CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsK
IAotICAgIC8vIFJldHVybnMgMTIwIGlmICJpbnZhcmlhbnQiIGtleXdvcmQsICJnbF9Qb2ludENv
b3JkIiwgb3IKLSAgICAvLyBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCBpbiB0
aGUgc2hhZGVyLiBFbHNlIDExMCBpcwotICAgIC8vIHJldHVybmVkLgorICAgIC8vIFJldHVybnMg
MTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUgc2hhZGVyOgorICAgIC8vIC0gImludmFy
aWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIsCisgICAgLy8gLSBtYXRyaXgvbWF0cml4
IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91dCIgcGFyYW1ldGVycworICAgIC8vIEVs
c2UgMTEwIGlzIHJldHVybmVkLgogICAgIGludCBnZXRWZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNp
b247IH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5s
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAppbmRleCBi
OWEzMDJkLi44MzAwZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwKQEAgLTM4LDcgKzM4LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogJXsKICNpbmNsdWRlICJjb21waWxlci9nbHNs
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImds
c2xhbmdfdGFiLmgiCiAKQEAgLTI3MiwxNDggKzI3MiwxMyBAQCBPICAgICAgICAgICBbMC03XQog
CiAlJQogCi0jaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi1leHRlcm4gIkMiIHsKLS8v
IFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaCIKLQotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4g
aW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNy
byhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotCi0jZGVmaW5lIFNFVFVQX0NPTlRFWFQo
cHApIFwKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+
cEM7IFwKLSAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250
ZXh0LT5zY2FubmVyOwotCi0vLyBQcmVwcm9jZXNzb3IgY2FsbGJhY2tzLgotdm9pZCBDUFBEZWJ1
Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPnRyYWNlKG1zZyk7Ci19Ci0KLXZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndh
cm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwotfQotCi12b2lkIENQUFNoSW5mb0xvZ01zZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7Ci0gICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotfQotCi12b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAwOwotICAgIERlY29kZVNv
dXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVT
b3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotdm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0
cmluZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAg
IERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwgJmxpbmUpOwotICAgIHl5bGluZW5vID0g
RW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7Ci19Ci0KLWludCBHZXRTdHJpbmdOdW1iZXIo
KQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMDsKLSAgICBE
ZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwpOwotICAgIHJldHVybiBzdHJp
bmc7Ci19Ci0KLWludCBHZXRMaW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwg
JmxpbmUpOwotICAgIHJldHVybiBsaW5lOwotfQotCi12b2lkIEluY0xpbmVOdW1iZXIoKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7Ci0g
ICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7Ci0gICAgeXlsaW5l
bm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCArK2xpbmUpOwotfQotCi12b2lkIERlY0xpbmVO
dW1iZXIoKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7
Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCAtLWxpbmUpOwotfQotCi12
b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLQotICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJu
OwotICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKLSAgICBpZiAo
c3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5oYW5k
bGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKLX0KLQot
dm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIFRTdHJpbmcgc3RyU3JjOwotICAgIHN0clNyYyA9IFRTdHJpbmcoc3RyaW5nKTsK
LQotICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnICsgIiAiICsg
c3RyU3JjOwotfQotCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQotewotICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjcHAtPkVyck1zZyA9IGNvbnRleHQtPkhhc2hFcnJNc2cu
Y19zdHIoKTsKLSAgICByZXR1cm4gY3BwLT5FcnJNc2c7Ci19Ci0KLXZvaWQgUmVzZXRUU3RyaW5n
KHZvaWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPkhhc2hFcnJN
c2cgPSAiIjsKLX0KLQotdm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBl
eHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgY29udGV4dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1l
LCBiZWhhdmlvcik7Ci19Ci19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vICFBTkdMRV9VU0Vf
TkVXX1BSRVBST0NFU1NPUgotCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9z
aXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuID0gMDsKLQotI2lmIEFOR0xF
X1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgcHA6OlRva2VuIHRva2VuOwogICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICBsZW4gPSB0b2tl
bi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAg
aW50IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQu
c2l6ZSgpOwogICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKLSAgICAgICAg
bWVtY3B5KGJ1ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3Vy
Y2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSksIHl5c2Nhbm5l
cik7Ci0jZWxzZQotICAgIGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKTsKLSNlbmRpZiAg
Ly8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIGlmIChsZW4gPj0gbWF4X3NpemUp
CiAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKQEAgLTQ3
Myw5ICszMzgsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXlsZXhfZGVzdHJveShzY2Fu
bmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgotICAgIEZpbmFsaXplUHJl
cHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDg2LDI3ICszNDgs
MTQgQEAgaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsK
IAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgotI2lmIEFOR0xFX1VTRV9ORVdfUFJF
UFJPQ0VTU09SCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSNlbHNlCi0gICAgaWYgKEluaXRQcmVw
cm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0g
ICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIGlmIChJbml0U2Nhbm5lcklucHV0
KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICAvLyBEZWZpbmUgZXh0ZW5zaW9u
IG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7CiAgICAgICAgICBpdGVy
ICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBS
T0NFU1NPUgogICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0jZWxzZQotICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhp
dGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gMDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IDNjYWQzMzUuLjdjZDQ5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtMzQwLDE4ICszNDAsMTAgQEAgcG9zdGZpeF9leHByZXNzaW9u
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChp
bnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOwotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGlu
ZGV4LCAkMi5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEt
PmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkg
dmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7CisgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxk
cywgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKICAgICAgICAg
ICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwpAQCAtMTIxMSw3ICsxMjAzLDcgQEAgaW5pdF9kZWNs
YXJhdG9yX2xpc3QKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDMubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQz
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
QEAgLTEyMjQsNyArMTIxNiw3IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25J
bml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB0cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAg
ICAgICAkJCA9ICQxOwpAQCAtMTI0Miw3ICsxMjM0LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QK
ICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwg
JDEudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEu
dHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxp
bmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICQkID0gJDE7CkBAIC0xMjk2LDcgKzEyODgsNyBAQCBzaW5nbGVf
ZGVjbGFyYXRpb24KICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDIubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQy
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgJCQudHlwZSA9
ICQxOwpAQCAtMTMyNyw3ICsxMzE5LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCB0
cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJC50eXBl
ID0gJDE7CkBAIC0yMDM3LDYgKzIwMjksMTUgQEAgZXh0ZXJuYWxfZGVjbGFyYXRpb24KIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFRT
eW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlv
bi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJbikKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJ1aWx0LWluIGZ1
bmN0aW9ucyBjYW5ub3QgYmUgcmVkZWZpbmVkIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAg
ICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicg
aWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRl
eCBhM2JmYTEzLi5mNjUxZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBp
bnQxNl90IGZsZXhfaW50MTZfdDsKIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKIHR5
cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMy
X3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CiAjZWxzZQogdHlwZWRlZiBzaWdu
ZWQgY2hhciBmbGV4X2ludDhfdDsKIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKQEAg
LTM3OCw3ICszNzksNyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
IG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVf
QUNUSU9OIFwKIAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXplX3Qp
ICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAogCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCiAJKnl5X2NwID0gJ1wwJzsgXAog
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwpAQCAtODA3LDcgKzgwOCw3IEBAIFdISUNIIEdFTkVS
QVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAj
aW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtMjk0NywxNDggKzI5NDgsMTMgQEAgdm9pZCB5
eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAKICNkZWZpbmUgWVlUQUJM
RVNfTkFNRSAieXl0YWJsZXMiCiAKLSNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKLWV4
dGVybiAiQyIgewotLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgotCi1leHRlcm4gaW50IEluaXRQcmVwcm9jZXNz
b3IoKTsKLWV4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiB2b2lkIFBy
ZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci0KLSNkZWZpbmUg
U0VUVVBfQ09OVEVYVChwcCkgXAotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBhcnNl
Q29udGV4dCopIHBwLT5wQzsgXAotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7Ci0KLS8vIFByZXByb2Nlc3NvciBjYWxsYmFja3Mu
Ci12b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05U
RVhUKGNwcCk7Ci0gICAgY29udGV4dC0+dHJhY2UobXNnKTsKLX0KLQotdm9pZCBDUFBXYXJuaW5n
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIik7Ci19Ci0KLXZvaWQgQ1BQU2hJ
bmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwotICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLX0KLQotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2cs
ICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZvaWQgU2V0TGluZU51bWJlcihp
bnQgbGluZSkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IHN0cmluZyA9IDA7
Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKLSAgICB5eWxp
bmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOwotfQotCi12b2lkIFNldFN0cmlu
Z051bWJlcihpbnQgc3RyaW5nKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0g
ICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotaW50IEdl
dFN0cmluZ051bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJp
bmcgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0g
ICAgcmV0dXJuIHN0cmluZzsKLX0KLQotaW50IEdldExpbmVOdW1iZXIoKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5
bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0gICAgcmV0dXJuIGxpbmU7Ci19Ci0KLXZvaWQgSW5jTGlu
ZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAw
LCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsICZsaW5l
KTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsICsrbGluZSk7Ci19Ci0K
LXZvaWQgRGVjTGluZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlu
dCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZz
dHJpbmcsICZsaW5lKTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIC0t
bGluZSk7Ci19Ci0KLXZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBu
dW1Ub2tlbnMpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotCi0gICAgaWYgKG51bVRva2Vu
cyAhPSA0KSByZXR1cm47Ci0gICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0
dXJuOwotICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKLQotICAg
IGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tl
bnNbMl0pOwotfQotCi12b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgVFN0cmluZyBzdHJTcmM7Ci0gICAgc3RyU3JjID0gVFN0
cmluZyhzdHJpbmcpOwotCi0gICAgY29udGV4dC0+SGFzaEVyck1zZyA9IGNvbnRleHQtPkhhc2hF
cnJNc2cgKyAiICIgKyBzdHJTcmM7Ci19Ci0KLWNvbnN0IGNoYXIqIEdldFN0cmZyb21UU3RyKHZv
aWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNwcC0+RXJyTXNnID0gY29udGV4
dC0+SGFzaEVyck1zZy5jX3N0cigpOwotICAgIHJldHVybiBjcHAtPkVyck1zZzsKLX0KLQotdm9p
ZCBSZXNldFRTdHJpbmcodm9pZCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29u
dGV4dC0+SGFzaEVyck1zZyA9ICIiOwotfQotCi12b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9y
KGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXls
aW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKLX0KLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZiAg
Ly8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi0KIGludCBzdHJpbmdfaW5wdXQoY2hhciog
YnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW4gPSAw
OwotCi0jaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBwcDo6VG9rZW4gdG9rZW47
CiAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOwot
ICAgIGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVl
LnNpemUoKTsKKyAgICBpbnQgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAw
IDogdG9rZW4udGV4dC5zaXplKCk7CiAgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQotICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7CiAgICAgeXlzZXRfbGlu
ZW5vKEVuY29kZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5s
aW5lKSx5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6
ZSk7Ci0jZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICBpZiAobGVu
ID49IG1heF9zaXplKQogICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJm
bG93Iik7CkBAIC0zMTQ4LDkgKzMwMTQsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXls
ZXhfZGVzdHJveShzY2FubmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgot
ICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtMzE2MSwyNyArMzAyNCwxNCBAQCBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICBjb250ZXh0LT5B
ZnRlckVPRiA9IGZhbHNlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0jaWYg
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nv
ci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotI2Vsc2UK
LSAgICBpZiAoSW5pdFByZXByb2Nlc3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBjcHAt
PnBDID0gY29udGV4dDsKLSAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgaWYg
KEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gMTsKLSNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIC8v
IERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwogICAgIGZvciAoVEV4
dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4o
KTsKICAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotI2lmIEFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5w
cmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbHNlCi0gICAgICAgIFBy
ZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotI2VuZGlmCiAgICAgfQog
ICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggNDZiNTE0YS4uNzJjYzg0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
CkBAIC03NTIsMjYgKzc1MiwyNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAg
IDE2OCwgICAxNjgsICAgMjAzLCAgIDIwNiwgICAyMTksICAgMjI0LCAgIDIyOSwgICAyMzUsICAg
MjM4LAotICAgICAzMTcsICAgMzIwLCAgIDQyOSwgICA0MzksICAgNDUyLCAgIDQ2MCwgICA1NjAs
ICAgNTYzLCAgIDU3MSwgICA1NzUsCi0gICAgIDU4MiwgICA1ODYsICAgNTkzLCAgIDU5OSwgICA2
MDgsICAgNjE2LCAgIDY3MSwgICA2NzgsICAgNjg4LCAgIDY5MSwKLSAgICAgNzAxLCAgIDcxMSwg
ICA3MzIsICAgNzMzLCAgIDczNCwgICA3MzksICAgNzQwLCAgIDc0OSwgICA3NjEsICAgNzYyLAot
ICAgICA3NzAsICAgNzgxLCAgIDc4NSwgICA3ODYsICAgNzk2LCAgIDgwNiwgICA4MTYsICAgODI5
LCAgIDgzMCwgICA4NDAsCi0gICAgIDg1MywgICA4NTcsICAgODYxLCAgIDg2NSwgICA4NjYsICAg
ODc5LCAgIDg4MCwgICA4OTMsICAgODk0LCAgIDkwNywKLSAgICAgOTA4LCAgIDkyNSwgICA5MjYs
ICAgOTM5LCAgIDk0MCwgICA5NDEsICAgOTQyLCAgIDk0MywgICA5NDcsICAgOTUwLAotICAgICA5
NjEsICAgOTY5LCAgIDk5NiwgIDEwMDEsICAxMDA4LCAgMTA0NiwgIDEwNDksICAxMDU2LCAgMTA2
NCwgIDEwODUsCi0gICAgMTEwNiwgIDExMTcsICAxMTQ2LCAgMTE1MSwgIDExNjEsICAxMTY2LCAg
MTE3NiwgIDExNzksICAxMTgyLCAgMTE4NSwKLSAgICAxMTkxLCAgMTE5OCwgIDEyMDEsICAxMjIz
LCAgMTI0MSwgIDEyNjUsICAxMjg4LCAgMTI5MiwgIDEzMTAsICAxMzE4LAotICAgIDEzNTAsICAx
MzcwLCAgMTQ1OSwgIDE0NjgsICAxNDkxLCAgMTQ5NCwgIDE1MDAsICAxNTA4LCAgMTUxNiwgIDE1
MjQsCi0gICAgMTUzNCwgIDE1NDEsICAxNTQ0LCAgMTU0NywgIDE1NTMsICAxNTU2LCAgMTU3MSwg
IDE1NzUsICAxNTc5LCAgMTU4MywKLSAgICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYx
MiwgIDE2MTcsICAxNjIyLCAgMTYyNywgIDE2MzIsICAxNjM3LAotICAgIDE2NDMsICAxNjQ5LCAg
MTY1NSwgIDE2NjAsICAxNjY1LCAgMTY3NCwgIDE2ODMsICAxNjg4LCAgMTcwMSwgIDE3MDEsCi0g
ICAgMTcxNSwgIDE3MTUsICAxNzI0LCAgMTcyNywgIDE3NDIsICAxNzc4LCAgMTc4MiwgIDE3ODgs
ICAxNzk2LCAgMTgxMiwKLSAgICAxODE2LCAgMTgyMCwgIDE4MjEsICAxODI3LCAgMTgyOCwgIDE4
MjksICAxODMwLCAgMTgzMSwgIDE4MzUsICAxODM2LAotICAgIDE4MzYsICAxODM2LCAgMTg0Niwg
IDE4NDcsICAxODUxLCAgMTg1MSwgIDE4NTIsICAxODUyLCAgMTg1NywgIDE4NjAsCi0gICAgMTg3
MCwgIDE4NzMsICAxODc5LCAgMTg4MCwgIDE4ODQsICAxODkyLCAgMTg5NiwgIDE5MDYsICAxOTEx
LCAgMTkyOCwKLSAgICAxOTI4LCAgMTkzMywgIDE5MzMsICAxOTQwLCAgMTk0MCwgIDE5NDgsICAx
OTUxLCAgMTk1NywgIDE5NjAsICAxOTY2LAotICAgIDE5NzAsICAxOTc3LCAgMTk4NCwgIDE5OTEs
ICAxOTk4LCAgMjAwOSwgIDIwMTgsICAyMDIyLCAgMjAyOSwgIDIwMzIsCi0gICAgMjAzOCwgIDIw
MzgKKyAgICAgMzE3LCAgIDMyMCwgICA0MjEsICAgNDMxLCAgIDQ0NCwgICA0NTIsICAgNTUyLCAg
IDU1NSwgICA1NjMsICAgNTY3LAorICAgICA1NzQsICAgNTc4LCAgIDU4NSwgICA1OTEsICAgNjAw
LCAgIDYwOCwgICA2NjMsICAgNjcwLCAgIDY4MCwgICA2ODMsCisgICAgIDY5MywgICA3MDMsICAg
NzI0LCAgIDcyNSwgICA3MjYsICAgNzMxLCAgIDczMiwgICA3NDEsICAgNzUzLCAgIDc1NCwKKyAg
ICAgNzYyLCAgIDc3MywgICA3NzcsICAgNzc4LCAgIDc4OCwgICA3OTgsICAgODA4LCAgIDgyMSwg
ICA4MjIsICAgODMyLAorICAgICA4NDUsICAgODQ5LCAgIDg1MywgICA4NTcsICAgODU4LCAgIDg3
MSwgICA4NzIsICAgODg1LCAgIDg4NiwgICA4OTksCisgICAgIDkwMCwgICA5MTcsICAgOTE4LCAg
IDkzMSwgICA5MzIsICAgOTMzLCAgIDkzNCwgICA5MzUsICAgOTM5LCAgIDk0MiwKKyAgICAgOTUz
LCAgIDk2MSwgICA5ODgsICAgOTkzLCAgMTAwMCwgIDEwMzgsICAxMDQxLCAgMTA0OCwgIDEwNTYs
ICAxMDc3LAorICAgIDEwOTgsICAxMTA5LCAgMTEzOCwgIDExNDMsICAxMTUzLCAgMTE1OCwgIDEx
NjgsICAxMTcxLCAgMTE3NCwgIDExNzcsCisgICAgMTE4MywgIDExOTAsICAxMTkzLCAgMTIxNSwg
IDEyMzMsICAxMjU3LCAgMTI4MCwgIDEyODQsICAxMzAyLCAgMTMxMCwKKyAgICAxMzQyLCAgMTM2
MiwgIDE0NTEsICAxNDYwLCAgMTQ4MywgIDE0ODYsICAxNDkyLCAgMTUwMCwgIDE1MDgsICAxNTE2
LAorICAgIDE1MjYsICAxNTMzLCAgMTUzNiwgIDE1MzksICAxNTQ1LCAgMTU0OCwgIDE1NjMsICAx
NTY3LCAgMTU3MSwgIDE1NzUsCisgICAgMTU4NCwgIDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQs
ICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAgMTYyOSwKKyAgICAxNjM1LCAgMTY0MSwgIDE2
NDcsICAxNjUyLCAgMTY1NywgIDE2NjYsICAxNjc1LCAgMTY4MCwgIDE2OTMsICAxNjkzLAorICAg
IDE3MDcsICAxNzA3LCAgMTcxNiwgIDE3MTksICAxNzM0LCAgMTc3MCwgIDE3NzQsICAxNzgwLCAg
MTc4OCwgIDE4MDQsCisgICAgMTgwOCwgIDE4MTIsICAxODEzLCAgMTgxOSwgIDE4MjAsICAxODIx
LCAgMTgyMiwgIDE4MjMsICAxODI3LCAgMTgyOCwKKyAgICAxODI4LCAgMTgyOCwgIDE4MzgsICAx
ODM5LCAgMTg0MywgIDE4NDMsICAxODQ0LCAgMTg0NCwgIDE4NDksICAxODUyLAorICAgIDE4NjIs
ICAxODY1LCAgMTg3MSwgIDE4NzIsICAxODc2LCAgMTg4NCwgIDE4ODgsICAxODk4LCAgMTkwMywg
IDE5MjAsCisgICAgMTkyMCwgIDE5MjUsICAxOTI1LCAgMTkzMiwgIDE5MzIsICAxOTQwLCAgMTk0
MywgIDE5NDksICAxOTUyLCAgMTk1OCwKKyAgICAxOTYyLCAgMTk2OSwgIDE5NzYsICAxOTgzLCAg
MTk5MCwgIDIwMDEsICAyMDEwLCAgMjAxNCwgIDIwMjEsICAyMDI0LAorICAgIDIwMzAsICAyMDMw
CiB9OwogI2VuZGlmCiAKQEAgLTIzNjAsMTggKzIzNjAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
LSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmc7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRTdHJp
bmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZp
ZWxkczsKQEAgLTM0MzAsNyArMzQyMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKQEAgLTM0NDcs
NyArMzQzOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKQEAgLTM0NjksNyArMzQ2MSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNw
WygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkp
CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50
ZXJtKTsKQEAgLTM1MzIsNyArMzUyNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikg
LSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlw
ZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKQEAgLTM1NzEsNyArMzU2Myw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5l
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHRydWUpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7CkBAIC00NTE3LDYgKzQ1MDksMTUgQEAgeXlyZWR1Y2U6
CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVp
bHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBi
ZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVk
aWF0ZS5oCmluZGV4IGU2M2Q0MjUuLjc1ODEyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTE2LDYgKzE2LDggQEAK
ICNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAogI2RlZmluZSBfX0lOVEVSTUVESUFURV9ICiAKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwogI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1v
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQ29u
c3RhbnRVbmlvbi5oIgpAQCAtNTUxLDYgKzU1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNy
ZW1lbnREZXB0aCgpIHtkZXB0aCsrO30KICAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRo
LS07fQogCisgICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24g
cG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1l
LgorICAgIHN0YXRpYyBUU3RyaW5nIGhhc2goY29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVu
Y3Rpb242NCBoYXNoRnVuY3Rpb24pOworCiAgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKICAgICBj
b25zdCBib29sIGluVmlzaXQ7CiAgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKaW5kZXggMWQ5NTkw
Ny4uYWRmMWEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9vc2luY2x1ZGUuaApAQCAtMjQsOSArMjQsNyBAQAogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRm
b3JtLgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEFOR0xFX1VTRV9OU1BSKQotI2luY2x1ZGUgInBy
dGhyZWFkLmgiCi0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKICNkZWZpbmUgU1RSSUNUCiAjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgpAQCAtMzQsNyArMzIsNyBAQAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdM
RV9VU0VfTlNQUgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KIAogCiAjaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKQEAgLTQyLDE2ICs0MCwxMyBAQAogLy8KIC8vIFRocmVhZCBMb2NhbCBTdG9y
YWdlIE9wZXJhdGlvbnMKIC8vCi0jaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKLXR5cGVkZWYg
UFJVaW50biBPU19UTFNJbmRleDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZG
RkZGRgotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjaWYgZGVmaW5lZChBTkdMRV9PU19X
SU4pCiB0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RMU19J
TkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQogI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkK
IHR5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RM
U19JTkRFWCAweEZGRkZGRkZGCi0jZW5kaWYgIC8vIEFOR0xFX1VTRV9OU1BSCisjZW5kaWYgIC8v
IEFOR0xFX09TX1dJTgogCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7CiBib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOwpAQCAtNjAs
OSArNTUsNyBAQCBib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOwogaW5s
aW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKIHsKICAgICBBU1NF
UlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1VT
RV9OU1BSKQotICAgIHJldHVybiBQUl9HZXRUaHJlYWRQcml2YXRlKG5JbmRleCk7Ci0jZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKICAgICByZXR1
cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKICNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCiAg
ICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcAppbmRleCBm
NjNkODFlLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwCkBAIC0xLDQzICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5zcHIgc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0vLwotLy8g
VGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9j
VExTSW5kZXgoKQotewotICAgIFBSVWludG4gaW5kZXg7Ci0gICAgUFJTdGF0dXMgc3RhdHVzID0g
UFJfTmV3VGhyZWFkUHJpdmF0ZUluZGV4KCZpbmRleCwgTlVMTCk7Ci0KLSAgICBpZiAoc3RhdHVz
KSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBh
bGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIE9TX1Nl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0gICAgaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBQUl9TZXRUaHJlYWRQcml2YXRlKG5JbmRleCwgbHB2
VmFsdWUpID09IDA7Ci19Ci0KLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRl
eCkKLXsKLSAgICAvLyBDYW4ndCBkZWxldGUgVExTIGtleXMgd2l0aCBuc3ByCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTIyZTFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFn
bm9zdGljc0Jhc2UuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNl
IHBwCit7CisKK0RpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIERpYWdu
b3N0aWNzOjpyZXBvcnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogS2VlcCBhIGNvdW50IG9mIGVycm9y
cyBhbmQgd2FybmluZ3MuCisgICAgcHJpbnQoaWQsIGxvYywgdGV4dCk7Cit9CisKK0RpYWdub3N0
aWNzOjpTZXZlcml0eSBEaWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCit7CisgICAgaWYgKChp
ZCA+IEVSUk9SX0JFR0lOKSAmJiAoaWQgPCBFUlJPUl9FTkQpKQorICAgICAgICByZXR1cm4gRVJS
T1I7CisKKyAgICBpZiAoKGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlkIDwgV0FSTklOR19FTkQp
KQorICAgICAgICByZXR1cm4gV0FSTklORzsKKworICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0
dXJuIEVSUk9SOworfQorCitzdGQ6OnN0cmluZyBEaWFnbm9zdGljczo6bWVzc2FnZShJRCBpZCkK
K3sKKyAgICBzd2l0Y2ggKGlkKQorICAgIHsKKyAgICAgIC8vIEVycm9ycyBiZWdpbi4KKyAgICAg
IGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICAgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7
CisgICAgICBjYXNlIE9VVF9PRl9NRU1PUlk6CisgICAgICAgICAgcmV0dXJuICJvdXQgb2YgbWVt
b3J5IjsKKyAgICAgIGNhc2UgSU5WQUxJRF9DSEFSQUNURVI6CisgICAgICAgICAgcmV0dXJuICJp
bnZhbGlkIGNoYXJhY3RlciI7CisgICAgICBjYXNlIElOVkFMSURfTlVNQkVSOgorICAgICAgICAg
IHJldHVybiAiaW52YWxpZCBudW1iZXIiOworICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgor
ICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7CisgICAgICBjYXNlIEZMT0FUX09W
RVJGTE9XOgorICAgICAgICAgIHJldHVybiAiZmxvYXQgb3ZlcmZsb3ciOworICAgICAgY2FzZSBU
T0tFTl9UT09fTE9ORzoKKyAgICAgICAgICByZXR1cm4gInRva2VuIHRvbyBsb25nIjsKKyAgICAg
IGNhc2UgSU5WQUxJRF9FWFBSRVNTSU9OOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHBy
ZXNzaW9uIjsKKyAgICAgIGNhc2UgRElWSVNJT05fQllfWkVSTzoKKyAgICAgICAgICByZXR1cm4g
ImRpdmlzaW9uIGJ5IHplcm8iOworICAgICAgY2FzZSBFT0ZfSU5fQ09NTUVOVDoKKyAgICAgICAg
ICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gY29tbWVudCI7CisgICAg
ICBjYXNlIFVORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIjsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lOVkFMSURfTkFNRToKKyAgICAgICAgICByZXR1
cm4gImludmFsaWQgZGlyZWN0aXZlIG5hbWUiOworICAgICAgY2FzZSBNQUNST19OQU1FX1JFU0VS
VkVEOgorICAgICAgICAgIHJldHVybiAibWFjcm8gbmFtZSBpcyByZXNlcnZlZCI7CisgICAgICBj
YXNlIE1BQ1JPX1JFREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gIm1hY3JvIHJlZGVmaW5lZCI7
CisgICAgICBjYXNlIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVEOgorICAgICAgICAgIHJldHVy
biAicHJlZGVmaW5lZCBtYWNybyByZWRlZmluZWQiOworICAgICAgY2FzZSBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5kZWZp
bmVkIjsKKyAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAgICAg
ICAgcmV0dXJuICJ1bnRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbiI7CisgICAgICBjYXNlIE1B
Q1JPX1RPT19GRVdfQVJHUzoKKyAgICAgICAgICByZXR1cm4gIk5vdCBlbm91Z2ggYXJndW1lbnRz
IGZvciBtYWNybyI7CisgICAgICBjYXNlIE1BQ1JPX1RPT19NQU5ZX0FSR1M6CisgICAgICAgICAg
cmV0dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKKyAgICAgIGNhc2UgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vu
ZGlmIGZvdW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05B
TF9FTFNFX1dJVEhPVVRfSUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZv
dW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNF
X0FGVEVSX0VMU0U6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZvdW5kIGFm
dGVyIGFub3RoZXIgI2Vsc2UiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIHdpdGhvdXQgYSBt
YXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6Cisg
ICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIGFmdGVyICNlbHNlIjsKKyAg
ICAgIGNhc2UgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVEOgorICAgICAgICAgIHJldHVybiAidW5l
eHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb25kaXRpb25hbCBibG9jayI7CisgICAgICBj
YXNlIElOVkFMSURfRVhURU5TSU9OX05BTUU6CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4
dGVuc2lvbiBuYW1lIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1I6Cisg
ICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBiZWhhdmlvciI7CisgICAgICBjYXNl
IElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQg
ZXh0ZW5zaW9uIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9OVU1CRVI6
CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIHZlcnNpb24gbnVtYmVyIjsKKyAgICAgIGNhc2Ug
SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgdmVy
c2lvbiBkaXJlY3RpdmUiOworICAgICAgY2FzZSBWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6
CisgICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVmb3JlIGFu
eXRoaW5nIGVsc2UsICIKKyAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRzIGFuZCB3
aGl0ZSBzcGFjZSI7CisgICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIGxpbmUgbnVtYmVyIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05V
TUJFUjoKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgZmlsZSBudW1iZXIiOworICAgICAgY2Fz
ZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5l
IGRpcmVjdGl2ZSI7CisgICAgICAvLyBFcnJvcnMgZW5kLgorICAgICAgLy8gV2FybmluZ3MgYmVn
aW4uCisgICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICAgICAgcmV0dXJuICJ1bmV4
cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIENPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOworICAgICAgY2FzZSBVTlJFQ09HTkla
RURfUFJBR01BOgorICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CisgICAg
ICAvLyBXYXJuaW5ncyBlbmQuCisgICAgICBkZWZhdWx0OgorICAgICAgICAgIGFzc2VydChmYWxz
ZSk7CisgICAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHBw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wN2JjNDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApA
QCAtMCwwICsxLDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGluZyBkaWFnbm9z
dGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IgZm9y
bWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25vc3RpY3MKK3sK
KyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAg
ICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9C
RUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisg
ICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAg
ICAgSU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgRkxPQVRfT1ZFUkZMT1csCisgICAgICAgIFRP
S0VOX1RPT19MT05HLAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBNQUNST19O
QU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BS
RURFRklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwK
KyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RP
T19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VU
X0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJ
VElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9F
TFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIElOVkFMSURf
RVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lP
Tl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFZF
UlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwK
KyAgICAgICAgSU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVD
VElWRSwKKyAgICAgICAgRVJST1JfRU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAg
ICAgIEVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdBUk5JTkdfRU5ECisg
ICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2b2lkIHJlcG9ydChJ
RCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQp
OworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisgICAgc3Rk
OjpzdHJpbmcgbWVzc2FnZShJRCBpZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzVjNmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisKK25hbWVzcGFjZSBwcAor
eworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFz
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5j
bHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9u
OworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vz
c29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgor
Ly8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2li
bGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNz
IERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhh
bmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFt
ZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9j
YXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGZkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5j
cHAKQEAgLTAsMCArMSw5MzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5j
bHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUg
IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgor
I2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUg
IlRva2VuaXplci5oIgorCituYW1lc3BhY2UgeworZW51bSBEaXJlY3RpdmVUeXBlCit7CisgICAg
RElSRUNUSVZFX05PTkUsCisgICAgRElSRUNUSVZFX0RFRklORSwKKyAgICBESVJFQ1RJVkVfVU5E
RUYsCisgICAgRElSRUNUSVZFX0lGLAorICAgIERJUkVDVElWRV9JRkRFRiwKKyAgICBESVJFQ1RJ
VkVfSUZOREVGLAorICAgIERJUkVDVElWRV9FTFNFLAorICAgIERJUkVDVElWRV9FTElGLAorICAg
IERJUkVDVElWRV9FTkRJRiwKKyAgICBESVJFQ1RJVkVfRVJST1IsCisgICAgRElSRUNUSVZFX1BS
QUdNQSwKKyAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAorICAgIERJUkVDVElWRV9WRVJTSU9OLAor
ICAgIERJUkVDVElWRV9MSU5FCit9OworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBEaXJlY3Rp
dmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5lKCJkZWZpbmUiKTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9uIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5lIik7CisKKyAgICBpZiAodG9rZW4t
PnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X05PTkU7CisKKyAgICBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9ERUZJTkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0g
a0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVs
c2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9JRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlSWZkZWYpCisg
ICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQg
PT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUVsc2UpCisgICAgICAgIHJldHVy
biBESVJFQ1RJVkVfRUxTRTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZl
RWxpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2Vu
LT50ZXh0ID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJ
RjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAg
IHJldHVybiBESVJFQ1RJVkVfRVJST1I7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0Rp
cmVjdGl2ZVByYWdtYSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxz
ZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVj
dGl2ZVZlcnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKKyAgICBlbHNl
IGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9MSU5FOworCisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMgYm9v
bCBpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQoreworICAg
IHN3aXRjaCAoZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAg
ICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Cisg
ICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdG9rZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJvb2wg
aXNFT0QoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50eXBl
ID09ICdcbicpIHx8ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitzdGF0
aWMgdm9pZCBza2lwVW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikK
K3sKKyAgICB3aGlsZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxleCh0
b2tlbik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIg
YXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2
ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0
JiBtYWNyb1NldCkKK3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YWNyb1NldC5maW5kKG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8g
aXRlci0+c2Vjb25kLnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERl
ZmluZWRQYXJzZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6CisgICAgICAgIG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1NldCks
CisgICAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4tPnRl
eHQgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJl
biA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tl
bi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisKKyAgICAg
ICAgaWYgKHBhcmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIs
IHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAg
ICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgor
ICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT50
ZXh0ID0gZXhwcmVzc2lvbjsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxleGVy
OworICAgIGNvbnN0IE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFn
bm9zdGljczsKK307CisKK0RpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQq
IG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQoZmFs
c2UpLAorICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQp
LAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZUhhbmRsZXIo
ZGlyZWN0aXZlSGFuZGxlcikKK3sKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tl
biogdG9rZW4pCit7CisgICAgZG8KKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgICAgICAgICBtUGFz
dEZpcnN0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05B
TF9VTlRFUk1JTkFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2subG9jYXRpb24sIGJsb2NrLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBl
ID09ICdcbicpKTsKKworICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQgPSB0cnVlOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIGlmIChpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICAvLyBFbXB0
eSBEaXJlY3RpdmUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEaXJlY3RpdmVUeXBl
IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBl
eGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9ncm91cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNv
bmRpdGlvbmFsIGRpcmVjdGl2ZXMuCisgICAgaWYgKHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9u
YWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKKyAgICB7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGly
ZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2Vu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAg
cGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVf
SUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAg
ICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6Cisg
ICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZl
cnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6
CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0g
VG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVk
KHRva2VuLT50ZXh0LCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnRl
eHQpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFj
cm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5u
YW1lID0gdG9rZW4tPnRleHQ7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICB7
CisgICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgorICAg
ICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVuYzsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRva2VuLT50ZXh0KTsKKworICAgICAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUg
KHRva2VuLT50eXBlID09ICcsJyk7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykK
KyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dGV4
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlw
ZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAg
ICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3Nhcnkg
aW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dz
IHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jv
cy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAg
bWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50
IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1l
bnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2Vt
ZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8g
Q2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBt
TWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8p
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQor
eworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT50ZXh0
KTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1N
YWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lG
KTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9r
ZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYp
OworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRp
b25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxv
Y2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tp
cCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXAp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxz
ZUdyb3VwID0gdHJ1ZTsKKyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3Jv
dXA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYg
dGhlcmUgYXJlIGV4dHJhIHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1D
b25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFj
aygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisgICAgeworICAgICAgICAvLyBObyBkaWFn
bm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5lLgorICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9j
ay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChibG9jay5mb3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3QgcGFy
c2UgdGhlIGV4cHJlc3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1p
dCBhIGRpYWdub3N0aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICBi
bG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxpZEdy
b3VwID0gZXhwcmVzc2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
bmRpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX0VORElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3Rh
Y2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAj
ZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2Vu
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05E
SVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVy
cm9yKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfRVJST1IpOworCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8
PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1E
aXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIo
KSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSld
Lgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAg
IGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BB
UkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsK
KworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOwor
ICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnRl
eHQ7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExFRlRfUEFS
RU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAg
ICAgICB2YWx1ZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYg
KHRva2VuLT50eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFs
aWQgPSB2YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJh
Z21hLgorICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAg
IC8vIFdpdGhvdXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hU
X1BBUkVOICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFH
TUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7
CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90
aWZ5IGZvciBlbXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+
aGFuZGxlUHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKKwor
ICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwK
KyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1F
OworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBl
ICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgor
ICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklF
UikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2
YWxpZCkgbmFtZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBDT0xPTjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzon
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05f
QkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dGV4
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElS
RUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2Nh
dGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VW
ZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBpZiAobVBhc3RGaXJzdFN0YXRlbWVudCkKKyAg
ICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpWRVJTSU9OX05P
VF9GSVJTVF9TVEFURU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW51bSBTdGF0ZQorICAgIHsK
KyAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7
CisgICAgaW50IHZlcnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwor
CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9
ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVS
OgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1Rf
SU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZ2ZXJzaW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVS
RkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAg
ICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
dmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5s
b2NhdGlvbiwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9MSU5FKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIExJTkVfTlVNQkVS
LAorICAgICAgICBGSUxFX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsK
KyAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOworICAgIGludCBzdGF0ZSA9IExJTkVfTlVNQkVS
OworCisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1Nl
dCwgbURpYWdub3N0aWNzKTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBMSU5FX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1CRVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmbGluZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRklM
RV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmZpbGUpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09W
RVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Cisg
ICAgfQorCisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRl
ICE9IEZJTEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHZhbGlk
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6
ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJF
UiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29s
IERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9u
YWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJs
b2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2su
c2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9j
ayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnRleHQ7CisgICAgYmxvY2subG9jYXRp
b24gPSB0b2tlbi0+bG9jYXRpb247CisKKyAgICBpZiAoc2tpcHBpbmcoKSkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9u
YWwgZ3JvdXAKKyAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0
aGlzIHdob2xlIGJsb2NrIGlzIHNraXBwZWQuCisgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRv
IHBhcnNlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKKyAgICAgICAgLy8g
ZW1pdCBhIGRpYWdub3N0aWMuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2Vu
KTsKKworICAgICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAgICAgIHN3aXRjaCAoZGlyZWN0
aXZlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgICAg
ICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4
cHJlc3Npb24gPT0gMDsKKyAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lv
biAhPSAwOworICAgIH0KKyAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwor
fQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4p
Cit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwK
KyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKKwor
ICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1E
aWFnbm9zdGljcyk7CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFy
c2VyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgRXhwcmVzc2lvblBhcnNlciBleHBy
ZXNzaW9uUGFyc2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOworCisgICAgaW50IGV4
cHJlc3Npb24gPSAwOworICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICBleHByZXNz
aW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7CisKKyAgICAvLyBXYXJuIGlmIHRo
ZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCisgICAgaWYgKCFpc0VPRCh0b2tl
bikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09O
RElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK2lu
dCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAor
ICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnRleHQpOworICAg
IGludCBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7CisKKyAg
ICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3ZjAwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmgKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9u
LmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVj
dGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisg
ICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAg
ICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJl
Y3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
RW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVu
c2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmco
KSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAg
IGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJl
c3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sK
KyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAgYm9vbCBza2lwR3Jv
dXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBib29sIGZvdW5kRWxz
ZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAgICAgICAgICBza2lw
QmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAg
IGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBib29sIG1QYXN0Rmlyc3RTdGF0
ZW1lbnQ7CisgICAgc3RkOjp2ZWN0b3I8Q29uZGl0aW9uYWxCbG9jaz4gbUNvbmRpdGlvbmFsU3Rh
Y2s7CisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7
CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVyKiBt
RGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lODVmMTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDE5NTQgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAq
LworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAw
MSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u
KQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogQXMg
YSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNv
bnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBk
aXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxv
bmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5n
IHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJz
ZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9u
KSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg
bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2Fz
IGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4y
IG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5
IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2Fs
bGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxv
dyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24g
dXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAg
dmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1h
Y3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGlu
Y2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5
IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8K
KworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8q
IEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKworLyog
U2tlbGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisv
KiBQdXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBVc2luZyBsb2NhdGlv
bnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJzdGl0dXRlIHRoZSB2YXJp
YWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKKyNk
ZWZpbmUgeXlsZXggICBwcGxleAorI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKKyNkZWZpbmUgeXls
dmFsICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyBwcGRl
YnVnCisjZGVmaW5lIHl5bmVycnMgcHBuZXJycworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVm
IFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisg
ICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRP
S19DT05TVF9JTlQgPSAyNTgsCisgICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FO
RCA9IDI2MCwKKyAgICAgVE9LX09QX05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisg
ICAgIFRPS19PUF9HRSA9IDI2MywKKyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1Bf
UklHSFQgPSAyNjUsCisgICAgIFRPS19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAy
NjcKKyAgIH07CisjZW5kaWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIFRPS19DT05TVF9JTlQg
MjU4CisjZGVmaW5lIFRPS19PUF9PUiAyNTkKKyNkZWZpbmUgVE9LX09QX0FORCAyNjAKKyNkZWZp
bmUgVE9LX09QX05FIDI2MQorI2RlZmluZSBUT0tfT1BfRVEgMjYyCisjZGVmaW5lIFRPS19PUF9H
RSAyNjMKKyNkZWZpbmUgVE9LX09QX0xFIDI2NAorI2RlZmluZSBUT0tfT1BfUklHSFQgMjY1Cisj
ZGVmaW5lIFRPS19PUF9MRUZUIDI2NgorI2RlZmluZSBUT0tfVU5BUlkgMjY3CisKKworCisKKy8q
IENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWYgY2xhbmcgb3IgZ2NjLgorI2lmIGRlZmluZWQo
X19HTlVDX18pCisKKy8vIFR1cm4gb2ZmIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3Mg
dHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisvLyBUaGUg
ZmxhZyBpcyBjYWxsZWQgIi1XdW5pbml0aWFsaXplZCIgb24gY2xhbmcgYW5kIGdjYyA8IDQuNy4K
Ky8vIE9uIGdjYyA0LjcrLCBpdCdzIGNhbGxlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIi4KKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgKCFkZWZpbmVkKF9fY2xhbmdfXykgJiYgKF9fR05VQ19f
IDwgNCB8fCBfX0dOVUNfTUlOT1JfXyA8IDcpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZWxzZQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQiCisjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfTVND
X1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2lu
Y2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVk
ZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUgIkxl
eGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCit0eXBl
ZGVmIF9faW50NjQgWVlTVFlQRTsKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVm
IGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8vIF9NU0NfVkVSCisjZGVmaW5lIFlZRU5BQkxF
X05MUyAwCisjZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNf
VFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorCituYW1lc3BhY2Ugewor
c3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAg
IHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3Vs
dDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2
YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLwor
I2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGlu
ZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMg
dW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UK
KyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRv
a2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9U
QUJMRSAwCisjZW5kaWYKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNU
WVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgeXlzdHlwZSBZ
WVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlT
VFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlm
CisKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICov
CisKKworLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KKworCisjaWZkZWYgc2hvcnQKKyMgdW5k
ZWYgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9V
SU5UOCB5eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91
aW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDgg
eXl0eXBlX2ludDg7CisjZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Cit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQg
aW50IHl5dHlwZV9pbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVm
IFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IGludCB5eXR5cGVfdWludDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5
cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGlu
dCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJ
WkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmlu
ZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZ
U0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisg
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1
ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZp
bmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBp
bnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1Qp
IC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMK
KyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dp
ZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8obXNnaWQp
IG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdh
cm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBf
X0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQorIyBkZWZpbmUg
WVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNl
ZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KKyNp
Zm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50IGkpCisjZWxz
ZQorc3RhdGljIGludAorWVlJRCAoaSkKKyAgICBpbnQgaTsKKyNlbmRpZgoreworICByZXR1cm4g
aTsKK30KKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJC
T1NFCisKKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhl
IG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMg
IGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElO
X1ZBX0FSR19JTkNSCisjICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgX19hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVk
ZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVm
aW5lIGFsbG9jYSBfYWxsb2NhCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBh
bGxvY2EKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9I
ICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUg
PHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgICBpZm5k
ZWYgX1NURExJQl9ICisjICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgICBlbmRpZgorIyAg
ICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tf
QUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisj
ICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJ
RCAoMCkpCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1p
Z2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0
YWNrLAorICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRl
cy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4
Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxs
b3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAq
LworIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNp
cmNhIDIwMDYgKi8KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZ
TUFMTE9DCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tf
QUxMT0NfTUFYSU1VTQorIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01B
WElNVU0KKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQg
X1NURExJQl9IIFwKKyAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1h
bGxvYykgXAorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAg
IGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICBlbmRpZgor
IyAgZW5kaWYKKyMgIGlmbmRlZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MK
KyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYK
KyMgIGlmbmRlZiBZWUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmlu
ZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEg
ZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZp
bmVkIHl5b3ZlcmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwg
KGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisv
KiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAg
Ki8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3M7CisgIFlZU1RZUEUgeXl2
czsKKyAgfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFs
aWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElN
VU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQorCisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJh
eSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxl
bWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisgICAgICgoTikgKiAoc2l6
ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorICAgICAgKyBZWVNUQUNL
X0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAg
VGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFwLiAgKi8KKyMgaWZu
ZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KKyMgICBk
ZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAorICAgICAgX19idWlsdGluX21lbWNweSAo
VG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorIyAgZWxzZQorIyAgIGRlZmlu
ZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAgICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJ
ICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlp
KyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCisJfQkJCQkJXAorICAgICAg
d2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogUmVsb2NhdGUgU1RBQ0sg
ZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisgICBsb2NhbCB2YXJp
YWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIg
b2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9j
YXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGln
bmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBkZWZpbmUgWVlTVEFD
S19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJ
CQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNr
LCBTdGFjaywgeXlzaXplKTsJCQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJ
eXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBf
TUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwK
KyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorCisjZW5kaWYKKworLyog
WVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNk
ZWZpbmUgWVlGSU5BTCAgMTQKKy8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAq
LworI2RlZmluZSBZWUxBU1QgICAxNzUKKworLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJt
aW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDI3CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9m
IG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5UUyAgMworLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDI2CisvKiBZWU5SVUxFUyAtLSBO
dW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUgWVlOU1RBVEVTICA1MgorCisvKiBZWVRSQU5T
TEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2RlZmluZSBZWU1BWFVUT0sgICAyNjcKKwor
I2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAorICAoKHVuc2lnbmVkIGludCkgKFlZWCkg
PD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisKKy8qIFlZVFJB
TlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAg
ICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgIDIzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMSwgICAgIDgs
ICAgICAyLAorICAgICAgMjUsICAgIDI2LCAgICAxOSwgICAgMTcsICAgICAyLCAgICAxOCwgICAg
IDIsICAgIDIwLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgIDExLCAgICAg
MiwgICAgMTIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgNywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgNiwgICAgIDIsICAgIDI0LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDks
ICAgIDEwLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMjIKK307CisKKyNpZiBZWURF
QlVHCisvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBy
dWxlIG51bWJlciBZWU4gaW4KKyAgIFlZUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAg
ICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcsCisgICAgICAzMSwgICAgMzUsICAgIDM5
LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAgNTksICAgIDYzLCAgICA2NywKKyAgICAg
IDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NSwgICAgODgsICAgIDkxCit9OworCisvKiBZ
WVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLworc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQoreworICAgICAgMjgsICAgICAwLCAgICAt
MSwgICAgMjksICAgIC0xLCAgICAgMywgICAgLTEsICAgIDI5LCAgICAgNCwgICAgMjksCisgICAg
ICAtMSwgICAgMjksICAgICA1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgNiwgICAgMjksICAg
IC0xLCAgICAyOSwKKyAgICAgICA3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOCwgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAxMCwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMTMsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAxNCwg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDExLCAg
ICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTUsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE2
LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMjksICAg
IDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAyMSwgICAgMjksCisgICAgICAtMSwgICAgMjks
ICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxOSwgICAgMjksICAgIC0xLCAgICAyMywK
KyAgICAgIDI5LCAgICAtMSwgICAgMjQsICAgIDI5LCAgICAtMSwgICAgMTgsICAgIDI5LCAgICAt
MSwgICAgMTcsICAgIDI5LAorICAgICAgLTEsICAgIDI1LCAgICAyOSwgICAgMjYsICAgIC0xCit9
OworCisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlO
IHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtdID0K
K3sKKyAgICAgICAwLCAgICA5NiwgICAgOTYsICAgMTAzLCAgIDEwNCwgICAxMDcsICAgMTEwLCAg
IDExMywgICAxMTYsICAgMTE5LAorICAgICAxMjIsICAgMTI1LCAgIDEyOCwgICAxMzEsICAgMTM0
LCAgIDEzNywgICAxNDAsICAgMTQzLCAgIDE0NiwgICAxNDksCisgICAgIDE2MiwgICAxNzUsICAg
MTc4LCAgIDE4MSwgICAxODQsICAgMTg3LCAgIDE5MAorfTsKKyNlbmRpZgorCisjaWYgWVlERUJV
RyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQorLyogWVlUTkFNRVtTWU1CT0wt
TlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCisgICBGaXJzdCwg
dGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMu
ICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Cit7CisgICIkZW5kIiwg
ImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVE9LX0NPTlNUX0lOVCIsICJUT0tfT1BfT1IiLAorICAi
VE9LX09QX0FORCIsICInfCciLCAiJ14nIiwgIicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VR
IiwgIic8JyIsCisgICInPiciLCAiVE9LX09QX0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklH
SFQiLCAiVE9LX09QX0xFRlQiLCAiJysnIiwKKyAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIs
ICJUT0tfVU5BUlkiLCAiJyEnIiwgIid+JyIsICInKCciLCAiJyknIiwKKyAgIiRhY2NlcHQiLCAi
aW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisv
KiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTks
ICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2MCwgICAg
NjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAorICAg
ICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKK307CisjIGVu
ZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUg
WVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQorewor
ICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVy
IG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAg
ICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAg
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0
byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0
IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVs
dCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10g
PQoreworICAgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMiwgICAgMjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAg
IDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAg
IDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQorfTsKKwor
LyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAgNywgICAgIDgKK307CisKKy8qIFlZUEFDVFtT
VEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwor
ICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTExCitzdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAorICAgICAtMTEsICAg
LTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
NDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAgICA4
NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAorICAgICAxNTQsICAgLTEwLCAg
IC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEsCisg
ICAgIC0xMSwgICAtMTEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KK3sKKyAgICAgLTExLCAgIC0xMSwgICAgLTIK
K307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0
ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdh
dGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAg
SWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50
YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXl0YWJsZVtdID0KK3sKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMy
LCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
CisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCisgICAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwK
KyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAg
IDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAyMiwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyCit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1td
ID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwK
KyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgICA1LCAg
ICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAor
ICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCit9
OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUp
IGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMTcsICAg
IDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
CisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0g
MCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZ
CQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2Vw
dGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJ
Z290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJy
b3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNp
dGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0ND
IHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKwor
I2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAg
KCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAor
ZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwK
KyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5
bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFj
a3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJ
CQlcCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJh
Y2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit3aGls
ZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQky
NTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhT
WzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1w
dHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChh
bHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0td
KQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVu
dCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAoTikpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7CQkJ
CQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmly
c3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEp
LmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChS
aHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xP
QyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJ
CVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxh
c3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJ
ICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkg
ICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAg
d2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJp
bnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFu
ZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJl
YWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwor
CisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAg
ZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZp
bGUsICIlZC4lZC0lZC4lZCIsCQkJXAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZp
cnN0X2NvbHVtbiwJXAorCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1u
KQorIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQp
IDApCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0
aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmlu
ZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlM
RVggeXlsZXggKCZ5eWx2YWwsIGNvbnRleHQpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2lu
ZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisj
ICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRG
KEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJ
TlRGIEFyZ3M7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xf
UFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkg
IFwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9s
X3ByaW50IChzdGRlcnIsCQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisg
ICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAg
XAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3By
aW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
dmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJ
TEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0
IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZh
bHVlcCkKKyAgICByZXR1cm47CisgIFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAor
ICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251
bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVu
ZGlmCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7Cisg
ICAgfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0
YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQor
c3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAs
IGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNU
WVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRp
ZgoreworICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAo
eXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1ib2xf
dmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKKyAgWVlG
UFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3By
aW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwK
K3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQx
NiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3Rh
Y2tfcHJpbnQgKGJvdHRvbSwgdG9wKQorICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOworICAgIHl5
dHlwZV9pbnQxNiAqdG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sg
bm93Iik7CisgIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKKyAgICBZWUZQUklOVEYg
KHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Cit9
CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJ
CQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20p
LCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhhdCB0aGUgWVlS
VUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5
dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5
eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2
c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7Cisg
IGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcg
aW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVj
aW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJICAgICB5eXJ1bGUgLSAxLCB5
eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLworICBmb3IgKHl5aSA9
IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAi
ICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXly
aHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAorCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCisJCSAgICAgICAJCSAgICAgICAsIGNvbnRleHQpOworICAgICAgZnByaW50ZiAo
c3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxl
KQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmlu
dCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9u
emVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBz
byB0aGF0CisgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVn
OworI2Vsc2UgLyogIVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmlu
ZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQorI2VuZGlmIC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlh
bCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAor
IyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhp
bXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRo
ZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3Qg
bWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgor
ICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAg
IGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAq
LworCisjaWZuZGVmIFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRp
ZgorCisMCisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlm
IGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3Ry
bGVuIHN0cmxlbgorIyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVf
VAoreXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAor
eXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZ
U0laRV9UIHl5bGVuOworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQor
ICAgIGNvbnRpbnVlOworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisj
IGlmbmRlZiB5eXN0cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkK
KyMgIGVsc2UKKy8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mg
b2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNo
YXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlz
dHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIg
Knl5c3JjOworI2VuZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAq
eXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAg
Y29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisj
IGlmbmRlZiB5eXRuYW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RS
IGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFz
aGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3Rp
YyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5n
CisgICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVy
IHRoYW4KKyAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRu
YW1lLiAgSWYgWVlSRVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4g
dGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitz
dGF0aWMgWVlTSVpFX1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3Ry
KQoreworICBpZiAoKnl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAw
OworICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dp
dGNoICgqKyt5eXApCisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290
byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAg
IT0gJ1xcJykKKwkgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwg
dGhyb3VnaC4gICovCisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNb
eXluXSA9ICp5eXA7CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJ
ICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5
bjsKKwkgIH0KKyAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5
cmVzKQorICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAo
eXlyZXMsIHl5c3RyKSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNV
TFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFS
IHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3Bp
ZWQsCisgICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxU
IGlzIG51bGwsIGRvIG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwg
cmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBk
by4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBz
aXplIGNhbGN1bGF0aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNo
YXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZ
TEFTVCkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK
KyAgICAgIFlZU0laRV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsK
KyAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAg
Y2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBp
bnQgeXl4OworCisjIGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUg
dHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4g
ICovCisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBv
ciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGlu
ZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7Cisg
ICAgICBjaGFyIGNvbnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0
ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIg
Y29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hh
ciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5
dW5leHBlY3RlZAorCQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAt
IDEpKV07CisgICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAg
ICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRl
eGVzIGluCisJIFlZQ0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15
eW4gOiAwOworCisgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFu
ZCB5eXRuYW1lLiAgKi8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsK
KyAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6
IFlZTlRPS0VOUzsKKyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5
eXRuYW1lW3l5dHlwZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4
cGVjdGVkKTsKKworICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5
eCkKKwlpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJ
ICB7CisJICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJ
ICAgICAgeworCQl5eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRb
c2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAg
ICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXpl
ICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0g
KHl5c2l6ZTEgPCB5eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9
IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9
CisKKyAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsg
eXlzdHJsZW4gKHl5Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNp
emUpOworICAgICAgeXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxv
dykKKwlyZXR1cm4gWVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJ
ICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUg
c3BhY2UuCisJICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0
cmFuc2xhdGlvbgorCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVy
IG9mICIlcyJzLiAgKi8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7
CisJICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5
eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5
cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQor
CSAgICAgIGVsc2UKKwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9
CisgICAgICByZXR1cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJP
U0UgKi8KKwwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisv
KkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZ
U1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5
eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBj
aGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAg
IENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlV
U0UgKGNvbnRleHQpOworCisgIGlmICgheXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOwor
ICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7
CisKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOwor
ICAgIH0KK30KKwwKKworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5
cGVzLiAgKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsK
KyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFN
ICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlw
YXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYK
KyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisKKworCisKKy8qLS0tLS0tLS0tLS4K
K3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZv
aWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQor
ICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJB
TSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisg
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlw
YXJzZSAoQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisg
ICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgorI2VuZGlmCit7CisgIC8qIFRoZSBsb29rLWFo
ZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2Yg
dGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisvKiBOdW1iZXIg
b2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworaW50IHl5bmVycnM7CisKKyAgaW50IHl5c3Rh
dGU7CisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTnVtYmVyIG9mIHRva2VucyB0
byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgIGludCB5eWVycnN0
YXR1czsKKyAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkg
dG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAwOworI2lmIFlZRVJST1JfVkVSQk9T
RQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXpl
LiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwor
ICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisgIC8q
IFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgIGB5eXNzJzogcmVsYXRlZCB0byBz
dGF0ZXMsCisgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCisgICAgIGB5
eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0
aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgIHRvIHJlYWxs
b2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisg
IHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgIHl5dHlwZV9pbnQxNiAqeXlzcyA9
IHl5c3NhOworICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgIC8qIFRoZSBzZW1hbnRpYyB2YWx1
ZSBzdGFjay4gICovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICBZWVNUWVBFICp5
eXZzID0geXl2c2E7CisgIFlZU1RZUEUgKnl5dnNwOworCisKKworI2RlZmluZSBZWVBPUFNUQUNL
KE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQorCisgIFlZU0laRV9UIHl5c3RhY2tz
aXplID0gWVlJTklUREVQVEg7CisKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBz
ZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVz
LiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBv
biB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5v
IHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICBZWURQ
UklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOwor
ICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJ
LyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNr
IHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24g
c3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0
YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXpl
ZC4gICovCisKKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNl
dHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGlj
aCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4g
YWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFj
a3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUg
ZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlz
c3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQor
ICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0
YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5
eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBj
aGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ug
c28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9y
eS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOworCisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0
aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4g
IFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBl
eHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93
IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAor
CQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5
c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKworCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3Mg
PSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92ZXJmbG93
ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFi
OworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAg
ICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0ZWRsYWI7
CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNr
c2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5cGVfaW50
MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlh
bGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlm
ICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5
eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKworIyAgdW5kZWYgWVlTVEFDS19SRUxP
Q0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAg
ICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3Ag
PSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisK
KworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1
XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYg
KHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisKKyAg
WVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKwor
ICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0t
LS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdp
dmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2stYWhlYWQgdG9rZW4gaWYg
d2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0
IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFk
IHRva2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFD
VF9OSU5GKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBs
b29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZ
Q0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3lt
Ym9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7
CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAgeXljaGFyID0g
eXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBv
ZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRva2VuID0gWVlU
UkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlz
IiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElmIHRoZSBwcm9w
ZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bworICAg
ICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4gKz0geXl0b2tl
bjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRv
a2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5
eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklO
RikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1
Y2U7CisgICAgfQorCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAv
KiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2Zm
IGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0
YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lN
Qk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAv
KiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLworICBpZiAo
eXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5
bjsKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0
YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Cisg
IGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVk
dWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgor
ICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5
eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQg
dGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAg
IE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAg
ICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNo
b3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0
aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQor
ICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAq
LworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4p
OworICBzd2l0Y2ggKHl5bikKKyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAg
ICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50PigoeXl2c3BbKDEpIC0gKDEp
XSkpOworICAgICAgICBZWUFDQ0VQVDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0p
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
ICYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICE9ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0p
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5
dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2c3BbKDMpIC0g
KDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxOToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7
CisgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3Ry
ZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9O
X0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygz
KSAtICgzKV0pOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIwOgor
CisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAgICAg
ICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5
dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4t
PmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDIzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI1
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygyKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKworLyogTGluZSAxMjY3
IG9mIHlhY2MuYy4gICovCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lN
Qk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZ
UE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywg
eXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUg
cmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0
IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1
bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKwor
ICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8
PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5
c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0
ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0g
aGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9t
IGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisg
ICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVy
cm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlT
SVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYg
KHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJ
TVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYg
KCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVN
KSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworCSAgICBpZiAoeXlt
c2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNn
ID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkg
ICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNn
ID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0K
KwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsK
KwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkg
ICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXll
cnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisJICAgIGlmICh5eXNpemUgIT0g
MCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAgfQorICAgICAgfQorI2VuZGlmCisg
ICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBJZiBq
dXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgor
CSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisJ
eworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5
eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5
ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWws
IGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQorCisgIC8qIEVsc2Ug
d2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJy
b3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAt
LSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisg
IC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGlu
dm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5l
dmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8g
MCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1i
b2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9S
LiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIx
OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRh
eCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0
dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwor
CisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAg
aWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAo
MCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJ
ICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJ
CWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVj
YXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlz
c3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9w
cGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBP
UFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlB
Q0NFUFQ7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3Ig
dG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5
eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFi
IC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0
dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0
bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1
cm47CisKKyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVz
dGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZ
XygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91
Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5
Y2hhciAhPSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBs
b29rYWhlYWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCBy
ZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAg
ICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOwor
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykK
KyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9z
Wyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0K
KyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZS
RUUgKHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5
eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1
cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisK
KworCitpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAg
aW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOwor
ICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNP
TlNUX0lOVDoKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CisgICAgICAg
IGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1cs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB9CisgICAgICAgICpsdmFscCA9IHN0YXRpY19jYXN0
PFlZU1RZUEU+KHZhbCk7CisgICAgICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19P
UF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09Q
X0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1Bf
TkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VR
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hU
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xF
RlQ7IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2Fz
ZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJy
ZWFrOworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6
IHR5cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwor
ICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUg
PSAnJSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAg
Y2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7
IGJyZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAn
KCc6IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFr
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRo
ZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAh
PSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQor
Cit2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQorewor
ICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElE
X0VYUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50
b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24p
OworfQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFy
c2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVy
KGxleGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhw
cmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBD
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsK
KyAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsK
KyAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29u
dGV4dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2Fz
ZSAxOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAi
Iik7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFs
c2UpOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxf
RVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA5MmQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuaApAQCAtMCwwICsx
LDM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQ
UkVTU0lPTl9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJ
T05fUEFSU0VSX0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sK
KworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBUb2tlbjsKKworY2xh
c3MgRXhwcmVzc2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVzc2lvblBhcnNlcihM
ZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICBib29sIHBhcnNl
KFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAgTGV4ZXIqIG1MZXhl
cjsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAgLy8gbmFtZXNwYWNl
IHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43YWE3Mzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2Vy
LnkKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24u
CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRl
X3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhw
cmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBp
cyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisv
LyBJZiBjbGFuZyBvciBnY2MuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKworLy8gVHVybiBvZmYg
dW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2Vu
ZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKy8vIFRoZSBmbGFnIGlzIGNhbGxlZCAiLVd1bmluaXRp
YWxpemVkIiBvbiBjbGFuZyBhbmQgZ2NjIDwgNC43LgorLy8gT24gZ2NjIDQuNyssIGl0J3MgY2Fs
bGVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQiLgorI2lmIGRlZmluZWQoX19jbGFuZ19fKSB8fCAo
IWRlZmluZWQoX19jbGFuZ19fKSAmJiAoX19HTlVDX18gPCA0IHx8IF9fR05VQ19NSU5PUl9fIDwg
NykpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyNl
bHNlCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWF5YmUtdW5pbml0aWFsaXpl
ZCIKKyNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQwNjUgNDcwMSkKKyNlbmRpZgorCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5o
IgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3NCYXNlLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5o
IgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKK3R5cGVkZWYgX19pbnQ2NCBZWVNUWVBFOworI2Vs
c2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgaW50bWF4X3QgWVlTVFlQRTsKKyNlbmRp
ZiAgLy8gX01TQ19WRVIKKyNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKKyNkZWZpbmUgWVlMVFlQRV9J
U19UUklWSUFMIDEKKyNkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNkZWZpbmUgWVlTVFlQ
RV9JU19ERUNMQVJFRCAxCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ29udGV4dAoreworICAgIHBw
OjpEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgcHA6OkxleGVyKiBsZXhlcjsKKyAgICBw
cDo6VG9rZW4qIHRva2VuOworICAgIGludCogcmVzdWx0OworfTsKK30gIC8vIG5hbWVzcGFjZQor
JX0KKworJXB1cmUtcGFyc2VyCislbmFtZS1wcmVmaXg9InBwIgorJXBhcnNlLXBhcmFtIHtDb250
ZXh0ICpjb250ZXh0fQorJWxleC1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KKworJXsKK3N0YXRp
YyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOworc3RhdGljIHZv
aWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworJX0KKwor
JXRva2VuIFRPS19DT05TVF9JTlQKKyVsZWZ0IFRPS19PUF9PUgorJWxlZnQgVE9LX09QX0FORAor
JWxlZnQgJ3wnCislbGVmdCAnXicKKyVsZWZ0ICcmJworJWxlZnQgVE9LX09QX0VRIFRPS19PUF9O
RQorJWxlZnQgJzwnICc+JyBUT0tfT1BfTEUgVE9LX09QX0dFCislbGVmdCBUT0tfT1BfTEVGVCBU
T0tfT1BfUklHSFQKKyVsZWZ0ICcrJyAnLScKKyVsZWZ0ICcqJyAnLycgJyUnCislcmlnaHQgVE9L
X1VOQVJZCisKKyUlCisKK2lucHV0CisgICAgOiBleHByZXNzaW9uIHsKKyAgICAgICAgKihjb250
ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50PigkMSk7CisgICAgICAgIFlZQUNDRVBUOwor
ICAgIH0KKzsKKworZXhwcmVzc2lvbgorICAgIDogVE9LX0NPTlNUX0lOVAorICAgIHwgZXhwcmVz
c2lvbiBUT0tfT1BfT1IgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgfHwgJDM7CisgICAg
fQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfQU5EIGV4cHJlc3Npb24geworICAgICAgICAkJCA9
ICQxICYmICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ3wnIGV4cHJlc3Npb24geworICAg
ICAgICAkJCA9ICQxIHwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnXicgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgXiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICcmJyBl
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAmICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Np
b24gVE9LX09QX05FIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICE9ICQzOworICAgIH0K
KyAgICB8IGV4cHJlc3Npb24gVE9LX09QX0VRIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
ID09ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09QX0dFIGV4cHJlc3Npb24gewor
ICAgICAgICAkJCA9ICQxID49ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09QX0xF
IGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDw9ICQzOworICAgIH0KKyAgICB8IGV4cHJl
c3Npb24gJz4nIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxID4gJDM7CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnPCcgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPCAkMzsKKyAg
ICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9SSUdIVCBleHByZXNzaW9uIHsKKyAgICAgICAg
JCQgPSAkMSA+PiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9MRUZUIGV4cHJl
c3Npb24geworICAgICAgICAkJCA9ICQxIDw8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
Jy0nIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIC0gJDM7CisgICAgfQorICAgIHwgZXhw
cmVzc2lvbiAnKycgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgKyAkMzsKKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uICclJyBleHByZXNzaW9uIHsKKyAgICAgICAgaWYgKCQzID09IDApIHsK
KyAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJl
YW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0g
c3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAg
IFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9ICQxICUgJDM7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcvJyBleHByZXNzaW9uIHsKKyAgICAg
ICAgaWYgKCQzID09IDApIHsKKyAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07
CisgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlh
Z25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2Nh
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0
cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAkJCA9ICQxIC8gJDM7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBleHByZXNzaW9uICcqJyBl
eHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAqICQzOworICAgIH0KKyAgICB8ICchJyBleHBy
ZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7CisgICAgICAgICQkID0gISAkMjsKKyAgICB9CisgICAg
fCAnficgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgeworICAgICAgICAkJCA9IH4gJDI7Cisg
ICAgfQorICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAgICAgICAgJCQg
PSAtICQyOworICAgIH0KKyAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7Cisg
ICAgICAgICQkID0gKyAkMjsKKyAgICB9CisgICAgfCAnKCcgZXhwcmVzc2lvbiAnKScgeworICAg
ICAgICAkJCA9ICQyOworICAgIH0KKzsKKworJSUKKworaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxw
LCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKworICAgIHBwOjpUb2tl
biogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICB7CisgICAgICAgIHVu
c2lnbmVkIGludCB2YWwgPSAwOworICAgICAgICBpZiAoIXRva2VuLT51VmFsdWUoJnZhbCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgfQor
ICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwpOworICAgICAgICB0eXBl
ID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIHBw
OjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBUT0tfT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX0FORDogdHlwZSA9IFRPS19PUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6
VG9rZW46Ok9QX05FOiB0eXBlID0gVE9LX09QX05FOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRv
a2VuOjpPUF9FUTogdHlwZSA9IFRPS19PUF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfR0U6IHR5cGUgPSBUT0tfT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0xFOiB0eXBlID0gVE9LX09QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9SSUdIVDogdHlwZSA9IFRPS19PUF9SSUdIVDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfTEVGVDogdHlwZSA9IFRPS19PUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wnOiB0
eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKKyAg
ICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBlID0g
Jz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAgIGNh
c2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBi
cmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2UgJy8n
OiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsK
KyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0eXBl
ID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAgICAg
IGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBv
bmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tl
bik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKworRXhw
cmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNzKGRp
YWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0
b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQu
ZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsK
KyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7
CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQorICAg
IHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9P
Rl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9ICAv
LyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMTE4NjhjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuY3BwCkBAIC0wLDAgKzEs
NTUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiSW5wdXQuaCIKKworI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdHJpbmc+CisKK25hbWVz
cGFjZSBwcAoreworCitJbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwgbVN0cmluZygwKQorewor
fQorCitJbnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdKSA6CisgICAgbUNvdW50KGNvdW50KSwKKyAgICBtU3RyaW5nKHN0
cmluZykKK3sKKyAgICBhc3NlcnQobUNvdW50ID49IDApOworICAgIG1MZW5ndGgucmVzZXJ2ZSht
Q291bnQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNvdW50OyArK2kpCisgICAgeworICAg
ICAgICBpbnQgbGVuID0gbGVuZ3RoID8gbGVuZ3RoW2ldIDogLTE7CisgICAgICAgIG1MZW5ndGgu
cHVzaF9iYWNrKGxlbiA8IDAgPyBzdGQ6OnN0cmxlbihtU3RyaW5nW2ldKSA6IGxlbik7CisgICAg
fQorfQorCitpbnQgSW5wdXQ6OnJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBp
bnQgblJlYWQgPSAwOworICAgIHdoaWxlICgoblJlYWQgPCBtYXhTaXplKSAmJiAobVJlYWRMb2Mu
c0luZGV4IDwgbUNvdW50KSkKKyAgICB7CisgICAgICAgIGludCBzaXplID0gbUxlbmd0aFttUmVh
ZExvYy5zSW5kZXhdIC0gbVJlYWRMb2MuY0luZGV4OworICAgICAgICBzaXplID0gc3RkOjptaW4o
c2l6ZSwgbWF4U2l6ZSk7CisgICAgICAgIHN0ZDo6bWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5n
W21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOworICAgICAgICBuUmVh
ZCArPSBzaXplOworICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKKworICAgICAgICAv
LyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcu
CisgICAgICAgIGlmIChtUmVhZExvYy5jSW5kZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhd
KQorICAgICAgICB7CisgICAgICAgICAgICArK21SZWFkTG9jLnNJbmRleDsKKyAgICAgICAgICAg
IG1SZWFkTG9jLmNJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5SZWFk
OworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYzczNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmgKQEAg
LTAsMCArMSw0OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0lOUFVUX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXworCisj
aW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgcHAKK3sKKworLy8gSG9sZHMgYW5kIHJlYWRz
IGlucHV0IGZvciBMZXhlci4KK2NsYXNzIElucHV0Cit7CisgIHB1YmxpYzoKKyAgICBJbnB1dCgp
OworICAgIElucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSk7CisKKyAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBtQ291bnQ7
IH0KKyAgICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtU3Ry
aW5nW2luZGV4XTsgfQorICAgIGludCBsZW5ndGgoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
TGVuZ3RoW2luZGV4XTsgfQorCisgICAgaW50IHJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7
CisKKyAgICBzdHJ1Y3QgTG9jYXRpb24KKyAgICB7CisgICAgICAgIGludCBzSW5kZXg7ICAvLyBT
dHJpbmcgaW5kZXg7CisgICAgICAgIGludCBjSW5kZXg7ICAvLyBDaGFyIGluZGV4LgorCisgICAg
ICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgwKSB7IH0KKyAgICB9OworICAgIGNv
bnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1cm4gbVJlYWRMb2M7IH0KKworICBw
cml2YXRlOgorICAgIC8vIElucHV0LgorICAgIGludCBtQ291bnQ7CisgICAgY29uc3QgY2hhciog
Y29uc3QqIG1TdHJpbmc7CisgICAgc3RkOjp2ZWN0b3I8aW50PiBtTGVuZ3RoOworCisgICAgTG9j
YXRpb24gbVJlYWRMb2M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2NjNlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIu
Y3BwCkBAIC0wLDAgKzEsMTYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTGV4ZXIuaCIK
KworbmFtZXNwYWNlIHBwCit7CisKK0xleGVyOjp+TGV4ZXIoKQoreworfQorCit9ICAvLyBuYW1l
c3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvTGV4ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lYjg1Y2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKworbmFtZXNwYWNlIHBwCit7CisKK3N0
cnVjdCBUb2tlbjsKKworY2xhc3MgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkxl
eGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAwOworfTsKKwor
fSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhF
Ul9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL01hY3JvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmIyZTMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvLmNwcApAQCAtMCwwICsxLDIzIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgIk1hY3JvLmgiCisKKyNpbmNsdWRlICJUb2tlbi5oIgor
CituYW1lc3BhY2UgcHAKK3sKKworYm9vbCBNYWNybzo6ZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAg
ICAgKG5hbWUgPT0gb3RoZXIubmFtZSkgJiYKKyAgICAgICAgICAgKHBhcmFtZXRlcnMgPT0gb3Ro
ZXIucGFyYW1ldGVycykgJiYKKyAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9PSBvdGhlci5yZXBs
YWNlbWVudHMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzAxNDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01h
Y3JvLmgKQEAgLTAsMCArMSw0NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX01BQ1JPX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNS
T19IXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgVG9rZW47CisKK3N0cnVjdCBNYWNybwor
eworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAga1R5cGVPYmosCisgICAgICAgIGtUeXBl
RnVuYworICAgIH07CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gUGFyYW1l
dGVyczsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBSZXBsYWNlbWVudHM7CisKKyAg
ICBNYWNybygpIDogcHJlZGVmaW5lZChmYWxzZSksIGRpc2FibGVkKGZhbHNlKSwgdHlwZShrVHlw
ZU9iaikgeyB9CisgICAgYm9vbCBlcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdDsKKwor
ICAgIGJvb2wgcHJlZGVmaW5lZDsKKyAgICBtdXRhYmxlIGJvb2wgZGlzYWJsZWQ7CisKKyAgICBU
eXBlIHR5cGU7CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICBQYXJhbWV0ZXJzIHBhcmFtZXRl
cnM7CisgICAgUmVwbGFjZW1lbnRzIHJlcGxhY2VtZW50czsKK307CisKK3R5cGVkZWYgc3RkOjpt
YXA8c3RkOjpzdHJpbmcsIE1hY3JvPiBNYWNyb1NldDsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFu
ZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvTWFjcm9FeHBhbmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTExNmM1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5jcHAKQEAgLTAsMCArMSwzNzAgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jh
c2UuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgVG9r
ZW5MZXhlciA6IHB1YmxpYyBMZXhlcgoreworIHB1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFRva2VuPiBUb2tlblZlY3RvcjsKKworICAgIFRva2VuTGV4ZXIoVG9rZW5WZWN0b3IqIHRv
a2VucykKKyAgICB7CisgICAgICAgIHRva2Vucy0+c3dhcChtVG9rZW5zKTsKKyAgICAgICAgbUl0
ZXIgPSBtVG9rZW5zLmJlZ2luKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tl
biogdG9rZW4pCisgICAgeworICAgICAgICBpZiAobUl0ZXIgPT0gbVRva2Vucy5lbmQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdG9rZW4tPnJlc2V0KCk7CisgICAgICAgICAgICB0b2tlbi0+
dHlwZSA9IFRva2VuOjpMQVNUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgKnRva2VuID0gKm1JdGVyKys7CisgICAgICAgIH0KKyAgICB9CisKKyBwcml2
YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbkxleGVyKTsKKworICAg
IFRva2VuVmVjdG9yIG1Ub2tlbnM7CisgICAgVG9rZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1J
dGVyOworfTsKKworTWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcihMZXhlciogbGV4ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxl
eGVyKGxleGVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAorICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcykKK3sKK30KKworTWFjcm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5kZXIoKQorewor
ICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBtQ29udGV4dFN0YWNrLnNpemUoKTsgKytp
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Db250ZXh0U3RhY2tbaV07CisgICAgfQorfQorCit2
b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgd2hpbGUgKHRydWUp
CisgICAgeworICAgICAgICBnZXRUb2tlbih0b2tlbik7CisKKyAgICAgICAgaWYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKHRva2VuLT5leHBhbnNpb25EaXNhYmxlZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9r
ZW4tPnRleHQpOworICAgICAgICBpZiAoaXRlciA9PSBtTWFjcm9TZXQtPmVuZCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY29uc3QgTWFjcm8mIG1hY3JvID0gaXRlci0+c2Vjb25k
OworICAgICAgICBpZiAobWFjcm8uZGlzYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IElmIGEgcGFydGljdWxhciB0b2tlbiBpcyBub3QgZXhwYW5kZWQsIGl0IGlzIG5ldmVyIGV4cGFu
ZGVkLgorICAgICAgICAgICAgdG9rZW4tPnNldEV4cGFuc2lvbkRpc2FibGVkKHRydWUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChtYWNyby50eXBlID09IE1h
Y3JvOjprVHlwZUZ1bmMpICYmICFpc05leHRUb2tlbkxlZnRQYXJlbigpKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hY3JvIG5h
bWUgaXMgbm90IGEgJygnLAorICAgICAgICAgICAgLy8gdGhpcyBtYWNybyBzaG91bGQgbm90IGJl
IGV4cGFuZGVkLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwdXNo
TWFjcm8obWFjcm8sICp0b2tlbik7CisgICAgfQorfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6Omdl
dFRva2VuKFRva2VuKiB0b2tlbikKK3sKKyAgICBpZiAobVJlc2VydmVUb2tlbi5nZXQoKSkKKyAg
ICB7CisgICAgICAgICp0b2tlbiA9ICptUmVzZXJ2ZVRva2VuOworICAgICAgICBtUmVzZXJ2ZVRv
a2VuLnJlc2V0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGaXJzdCBwb3Ag
YWxsIGVtcHR5IG1hY3JvIGNvbnRleHRzLgorICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0
eSgpICYmIG1Db250ZXh0U3RhY2suYmFjaygpLT5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcG9w
TWFjcm8oKTsKKyAgICB9CisKKyAgICBpZiAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkKKyAgICB7
CisgICAgICAgICp0b2tlbiA9IG1Db250ZXh0U3RhY2suYmFjaygpLT5nZXQoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgIH0KK30KKwor
dm9pZCBNYWNyb0V4cGFuZGVyOjp1bmdldFRva2VuKGNvbnN0IFRva2VuJiB0b2tlbikKK3sKKyAg
ICBpZiAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgIE1hY3JvQ29udGV4
dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOworICAgICAgICBjb250ZXh0LT51bmdl
dCgpOworICAgICAgICBhc3NlcnQoY29udGV4dC0+cmVwbGFjZW1lbnRzW2NvbnRleHQtPmluZGV4
XSA9PSB0b2tlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydCghbVJl
c2VydmVUb2tlbi5nZXQoKSk7CisgICAgICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQobmV3IFRva2Vu
KHRva2VuKSk7CisgICAgfQorfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmlzTmV4dFRva2VuTGVm
dFBhcmVuKCkKK3sKKyAgICBUb2tlbiB0b2tlbjsKKyAgICBnZXRUb2tlbigmdG9rZW4pOworCisg
ICAgYm9vbCBscGFyZW4gPSB0b2tlbi50eXBlID09ICcoJzsKKyAgICB1bmdldFRva2VuKHRva2Vu
KTsKKworICAgIHJldHVybiBscGFyZW47Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6cHVzaE1h
Y3JvKGNvbnN0IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpCit7CisgICAg
YXNzZXJ0KCFtYWNyby5kaXNhYmxlZCk7CisgICAgYXNzZXJ0KCFpZGVudGlmaWVyLmV4cGFuc2lv
bkRpc2FibGVkKCkpOworICAgIGFzc2VydChpZGVudGlmaWVyLnR5cGUgPT0gVG9rZW46OklERU5U
SUZJRVIpOworICAgIGFzc2VydChpZGVudGlmaWVyLnRleHQgPT0gbWFjcm8ubmFtZSk7CisKKyAg
ICBzdGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworICAgIGlmICghZXhwYW5kTWFjcm8o
bWFjcm8sIGlkZW50aWZpZXIsICZyZXBsYWNlbWVudHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBNYWNybyBpcyBkaXNhYmxlZCBmb3IgZXhwYW5zaW9uIHVudGlsIGl0IGlzIHBv
cHBlZCBvZmYgdGhlIHN0YWNrLgorICAgIG1hY3JvLmRpc2FibGVkID0gdHJ1ZTsKKworICAgIE1h
Y3JvQ29udGV4dCogY29udGV4dCA9IG5ldyBNYWNyb0NvbnRleHQ7CisgICAgY29udGV4dC0+bWFj
cm8gPSAmbWFjcm87CisgICAgY29udGV4dC0+cmVwbGFjZW1lbnRzLnN3YXAocmVwbGFjZW1lbnRz
KTsKKyAgICBtQ29udGV4dFN0YWNrLnB1c2hfYmFjayhjb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpwb3BNYWNybygpCit7CisgICAgYXNzZXJ0KCFt
Q29udGV4dFN0YWNrLmVtcHR5KCkpOworCisgICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNv
bnRleHRTdGFjay5iYWNrKCk7CisgICAgbUNvbnRleHRTdGFjay5wb3BfYmFjaygpOworCisgICAg
YXNzZXJ0KGNvbnRleHQtPmVtcHR5KCkpOworICAgIGFzc2VydChjb250ZXh0LT5tYWNyby0+ZGlz
YWJsZWQpOworICAgIGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCA9IGZhbHNlOworICAgIGRlbGV0
ZSBjb250ZXh0OworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OmV4cGFuZE1hY3JvKGNvbnN0IE1h
Y3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4m
IGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAgIHJlcGxhY2VtZW50cy0+Y2xlYXIoKTsKKyAg
ICBpZiAobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVPYmopCisgICAgeworICAgICAgICByZXBs
YWNlbWVudHMtPmFzc2lnbihtYWNyby5yZXBsYWNlbWVudHMuYmVnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmVuZCgpKTsKKworICAgICAgICBp
ZiAobWFjcm8ucHJlZGVmaW5lZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtMaW5lID0gIl9fTElORV9fIjsKKyAgICAgICAgICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnN0cmluZyBrRmlsZSA9ICJfX0ZJTEVfXyI7CisKKyAgICAgICAgICAgIGFzc2VydChy
ZXBsYWNlbWVudHMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIFRva2VuJiByZXBsID0gcmVw
bGFjZW1lbnRzLT5mcm9udCgpOworICAgICAgICAgICAgaWYgKG1hY3JvLm5hbWUgPT0ga0xpbmUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVh
bTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgaWRlbnRpZmllci5sb2NhdGlvbi5saW5lOwor
ICAgICAgICAgICAgICAgIHJlcGwudGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKG1hY3JvLm5hbWUgPT0ga0ZpbGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAg
ICAgICBzdHJlYW0gPDwgaWRlbnRpZmllci5sb2NhdGlvbi5maWxlOworICAgICAgICAgICAgICAg
IHJlcGwudGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQobWFjcm8udHlwZSA9PSBNYWNybzo6
a1R5cGVGdW5jKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+IGFyZ3M7CisgICAgICAg
IGFyZ3MucmVzZXJ2ZShtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSk7CisgICAgICAgIGlmICghY29s
bGVjdE1hY3JvQXJncyhtYWNybywgaWRlbnRpZmllciwgJmFyZ3MpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHJlcGxhY2VNYWNyb1BhcmFtcyhtYWNybywgYXJncywgcmVw
bGFjZW1lbnRzKTsKKyAgICB9CisKKyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgcmVw
bGFjZW1lbnRzLT5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRva2VuJiByZXBsID0gcmVw
bGFjZW1lbnRzLT5hdChpKTsKKyAgICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSByZXBsYWNlbWVudCBsaXN0IGluaGVyaXRz
IHRoZSBwYWRkaW5nCisgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG9mIHRoZSBpZGVudGlmaWVy
IHRva2VuLgorICAgICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0T2ZMaW5lKGlkZW50aWZpZXIuYXRT
dGFydE9mTGluZSgpKTsKKyAgICAgICAgICAgIHJlcGwuc2V0SGFzTGVhZGluZ1NwYWNlKGlkZW50
aWZpZXIuaGFzTGVhZGluZ1NwYWNlKCkpOworICAgICAgICB9CisgICAgICAgIHJlcGwubG9jYXRp
b24gPSBpZGVudGlmaWVyLmxvY2F0aW9uOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRp
ZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxN
YWNyb0FyZz4qIGFyZ3MpCit7CisgICAgVG9rZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2Vu
KTsKKyAgICBhc3NlcnQodG9rZW4udHlwZSA9PSAnKCcpOworCisgICAgYXJncy0+cHVzaF9iYWNr
KE1hY3JvQXJnKCkpOworICAgIGZvciAoaW50IG9wZW5QYXJlbnMgPSAxOyBvcGVuUGFyZW5zICE9
IDA7ICkKKyAgICB7CisgICAgICAgIGdldFRva2VuKCZ0b2tlbik7CisKKyAgICAgICAgaWYgKHRv
a2VuLnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIubG9jYXRpb24sIGlk
ZW50aWZpZXIudGV4dCk7CisgICAgICAgICAgICAvLyBEbyBub3QgbG9zZSBFT0YgdG9rZW4uCisg
ICAgICAgICAgICB1bmdldFRva2VuKHRva2VuKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNBcmcgPSBmYWxzZTsgLy8gVHJ1ZSBpZiB0b2tl
biBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorICAgICAgICBzd2l0Y2ggKHRva2Vu
LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgICsrb3Bl
blBhcmVuczsKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgJyknOgorICAgICAgICAgICAgLS1vcGVuUGFyZW5zOworICAgICAgICAg
ICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlICcsJzoKKyAgICAgICAgICAgIC8vIFRoZSBpbmRpdmlkdWFsIGFyZ3VtZW50cyBhcmUg
c2VwYXJhdGVkIGJ5IGNvbW1hIHRva2VucywgYnV0CisgICAgICAgICAgICAvLyB0aGUgY29tbWEg
dG9rZW5zIGJldHdlZW4gbWF0Y2hpbmcgaW5uZXIgcGFyZW50aGVzZXMgZG8gbm90CisgICAgICAg
ICAgICAvLyBzZXBlcmF0ZSBhcmd1bWVudHMuCisgICAgICAgICAgICBpZiAob3BlblBhcmVucyA9
PSAxKSBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7CisgICAgICAgICAgICBpc0FyZyA9IG9w
ZW5QYXJlbnMgIT0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBpc0FyZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaXNBcmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIE1hY3JvQXJnJiBhcmcg
PSBhcmdzLT5iYWNrKCk7CisgICAgICAgICAgICAvLyBJbml0aWFsIHdoaXRlc3BhY2UgaXMgbm90
IHBhcnQgb2YgdGhlIGFyZ3VtZW50LgorICAgICAgICAgICAgaWYgKGFyZy5lbXB0eSgpKSB0b2tl
bi5zZXRIYXNMZWFkaW5nU3BhY2UoZmFsc2UpOworICAgICAgICAgICAgYXJnLnB1c2hfYmFjayh0
b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBNYWNybzo6UGFyYW1ldGVycyYg
cGFyYW1zID0gbWFjcm8ucGFyYW1ldGVyczsKKyAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBl
bXB0eSBhcmd1bWVudCwgaXQgaXMgZXF1aXZhbGVudCB0byBubyBhcmd1bWVudC4KKyAgICBpZiAo
cGFyYW1zLmVtcHR5KCkgJiYgKGFyZ3MtPnNpemUoKSA9PSAxKSAmJiBhcmdzLT5mcm9udCgpLmVt
cHR5KCkpCisgICAgeworICAgICAgICBhcmdzLT5jbGVhcigpOworICAgIH0KKyAgICAvLyBWYWxp
ZGF0ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoYXJncy0+c2l6ZSgpICE9IHBh
cmFtcy5zaXplKCkpCisgICAgeworICAgICAgICBEaWFnbm9zdGljczo6SUQgaWQgPSBhcmdzLT5z
aXplKCkgPCBtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSA/CisgICAgICAgICAgICBEaWFnbm9zdGlj
czo6TUFDUk9fVE9PX0ZFV19BUkdTIDoKKyAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19U
T09fTUFOWV9BUkdTOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChpZCwgaWRlbnRpZmll
ci5sb2NhdGlvbiwgaWRlbnRpZmllci50ZXh0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIFByZS1leHBhbmQgZWFjaCBhcmd1bWVudCBiZWZvcmUgc3Vic3RpdHV0aW9u
LgorICAgIC8vIFRoaXMgc3RlcCBleHBhbmRzIGVhY2ggYXJndW1lbnQgaW5kaXZpZHVhbGx5IGJl
Zm9yZSB0aGV5IGFyZQorICAgIC8vIGluc2VydGVkIGludG8gdGhlIG1hY3JvIGJvZHkuCisgICAg
Zm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IGFyZ3MtPnNpemUoKTsgKytpKQorICAgIHsKKyAg
ICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmF0KGkpOworICAgICAgICBUb2tlbkxleGVyIGxl
eGVyKCZhcmcpOworICAgICAgICBNYWNyb0V4cGFuZGVyIGV4cGFuZGVyKCZsZXhlciwgbU1hY3Jv
U2V0LCBtRGlhZ25vc3RpY3MpOworCisgICAgICAgIGFyZy5jbGVhcigpOworICAgICAgICBleHBh
bmRlci5sZXgoJnRva2VuKTsKKyAgICAgICAgd2hpbGUgKHRva2VuLnR5cGUgIT0gVG9rZW46OkxB
U1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAgICAg
ICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKGNvbnN0
IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQoreworICAg
IGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBtYWNyby5yZXBsYWNlbWVudHMuc2l6ZSgpOyAr
K2kpCisgICAgeworICAgICAgICBjb25zdCBUb2tlbiYgcmVwbCA9IG1hY3JvLnJlcGxhY2VtZW50
c1tpXTsKKyAgICAgICAgaWYgKHJlcGwudHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVwbGFjZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE8oYWxva3ApOiBPcHRp
bWl6ZSB0aGlzLgorICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHNlYXJjaCBmb3IgbWFj
cm8gcGFyYW1zIGV2ZXJ5IHRpbWUuCisgICAgICAgIC8vIFRoZSBwYXJhbSBpbmRleCBjYW4gYmUg
Y2FjaGVkIHdpdGggdGhlIHJlcGxhY2VtZW50IHRva2VuLgorICAgICAgICBNYWNybzo6UGFyYW1l
dGVyczo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0ZDo6ZmluZCgKKyAgICAgICAgICAgIG1hY3Jv
LnBhcmFtZXRlcnMuYmVnaW4oKSwgbWFjcm8ucGFyYW1ldGVycy5lbmQoKSwgcmVwbC50ZXh0KTsK
KyAgICAgICAgaWYgKGl0ZXIgPT0gbWFjcm8ucGFyYW1ldGVycy5lbmQoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmVwbGFjZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6c2l6ZV90IGlBcmcgPSBzdGQ6OmRp
c3RhbmNlKG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgaXRlcik7CisgICAgICAgIGNvbnN0IE1h
Y3JvQXJnJiBhcmcgPSBhcmdzW2lBcmddOworICAgICAgICBpZiAoYXJnLmVtcHR5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHN0ZDo6c2l6
ZV90IGlSZXBsID0gcmVwbGFjZW1lbnRzLT5zaXplKCk7CisgICAgICAgIHJlcGxhY2VtZW50cy0+
aW5zZXJ0KHJlcGxhY2VtZW50cy0+ZW5kKCksIGFyZy5iZWdpbigpLCBhcmcuZW5kKCkpOworICAg
ICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgdG9rZW4gaW5oZXJpdHMgcGFkZGluZyBwcm9wZXJ0aWVz
IGZyb20KKyAgICAgICAgLy8gbWFjcm8gcmVwbGFjZW1lbnQgdG9rZW4uCisgICAgICAgIHJlcGxh
Y2VtZW50cy0+YXQoaVJlcGwpLnNldEhhc0xlYWRpbmdTcGFjZShyZXBsLmhhc0xlYWRpbmdTcGFj
ZSgpKTsKKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5k
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
TWFjcm9FeHBhbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYjY3
NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuaApAQCAtMCwwICsxLDc1IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8K
KyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisKKyNpbmNs
dWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNp
bmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMu
aCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworCitjbGFzcyBNYWNy
b0V4cGFuZGVyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAgICBNYWNyb0V4cGFuZGVy
KExleGVyKiBsZXhlciwgTWFjcm9TZXQqIG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpOworICAgIHZpcnR1YWwgfk1hY3JvRXhwYW5kZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBs
ZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihNYWNyb0V4cGFuZGVyKTsKKworICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2Vu
KTsKKyAgICB2b2lkIHVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKTsKKyAgICBib29sIGlz
TmV4dFRva2VuTGVmdFBhcmVuKCk7CisKKyAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYg
bWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHBvcE1hY3JvKCk7CisK
KyAgICBib29sIGV4cGFuZE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbj4gTWFjcm9Bcmc7CisgICAgYm9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3Jv
JiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJn
cyk7CisgICAgdm9pZCByZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJn
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxh
Y2VtZW50cyk7CisKKyAgICBzdHJ1Y3QgTWFjcm9Db250ZXh0CisgICAgeworICAgICAgICBjb25z
dCBNYWNybyogbWFjcm87CisgICAgICAgIHN0ZDo6c2l6ZV90IGluZGV4OworICAgICAgICBzdGQ6
OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOworCisgICAgICAgIE1hY3JvQ29udGV4dCgpIDog
bWFjcm8oMCksIGluZGV4KDApIHsgfQorICAgICAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1
cm4gaW5kZXggPT0gcmVwbGFjZW1lbnRzLnNpemUoKTsgfQorICAgICAgICBjb25zdCBUb2tlbiYg
Z2V0KCkgeyByZXR1cm4gcmVwbGFjZW1lbnRzW2luZGV4KytdOyB9CisgICAgICAgIHZvaWQgdW5n
ZXQoKSB7IGFzc2VydChpbmRleCA+IDApOyAtLWluZGV4OyB9CisgICAgfTsKKworICAgIExleGVy
KiBtTGV4ZXI7CisgICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKKyAgICBEaWFnbm9zdGljcyogbURp
YWdub3N0aWNzOworCisgICAgc3RkOjphdXRvX3B0cjxUb2tlbj4gbVJlc2VydmVUb2tlbjsKKyAg
ICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBtQ29udGV4dFN0YWNrOworfTsKKworfSAgLy8g
bmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBB
TkRFUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwMjRmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29y
LmNwcApAQCAtMCwwICsxLDE0MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJQcmVwcm9j
ZXNzb3IuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2lu
Y2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgor
I2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgorI2luY2x1ZGUg
IlRva2VuLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBwcAoreworCitz
dHJ1Y3QgUHJlcHJvY2Vzc29ySW1wbAoreworICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsK
KyAgICBNYWNyb1NldCBtYWNyb1NldDsKKyAgICBUb2tlbml6ZXIgdG9rZW5pemVyOworICAgIERp
cmVjdGl2ZVBhcnNlciBkaXJlY3RpdmVQYXJzZXI7CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4
cGFuZGVyOworCisgICAgUHJlcHJvY2Vzc29ySW1wbChEaWFnbm9zdGljcyogZGlhZywKKyAgICAg
ICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAg
ICAgICAgZGlhZ25vc3RpY3MoZGlhZyksCisgICAgICAgIHRva2VuaXplcihkaWFnKSwKKyAgICAg
ICAgZGlyZWN0aXZlUGFyc2VyKCZ0b2tlbml6ZXIsICZtYWNyb1NldCwgZGlhZywgZGlyZWN0aXZl
SGFuZGxlciksCisgICAgICAgIG1hY3JvRXhwYW5kZXIoJmRpcmVjdGl2ZVBhcnNlciwgJm1hY3Jv
U2V0LCBkaWFnKQorICAgIHsKKyAgICB9Cit9OworCitQcmVwcm9jZXNzb3I6OlByZXByb2Nlc3Nv
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBE
aXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKQoreworICAgIG1JbXBsID0gbmV3IFBy
ZXByb2Nlc3NvckltcGwoZGlhZ25vc3RpY3MsIGRpcmVjdGl2ZUhhbmRsZXIpOworfQorCitQcmVw
cm9jZXNzb3I6On5QcmVwcm9jZXNzb3IoKQoreworICAgIGRlbGV0ZSBtSW1wbDsKK30KKworYm9v
bCBQcmVwcm9jZXNzb3I6OmluaXQoaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbnQgbGVuZ3RoW10pCit7CisgICAgc3RhdGljIGNvbnN0IGludCBrR0xTTFZlcnNpb24gPSAx
MDA7CisKKyAgICAvLyBBZGQgc3RhbmRhcmQgcHJlLWRlZmluZWQgbWFjcm9zLgorICAgIHByZWRl
ZmluZU1hY3JvKCJfX0xJTkVfXyIsIDApOworICAgIHByZWRlZmluZU1hY3JvKCJfX0ZJTEVfXyIs
IDApOworICAgIHByZWRlZmluZU1hY3JvKCJfX1ZFUlNJT05fXyIsIGtHTFNMVmVyc2lvbik7Cisg
ICAgcHJlZGVmaW5lTWFjcm8oIkdMX0VTIiwgMSk7CisKKyAgICByZXR1cm4gbUltcGwtPnRva2Vu
aXplci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUHJlcHJvY2Vzc29y
OjpwcmVkZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpCit7CisgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgdmFsdWU7CisKKyAgICBUb2tl
biB0b2tlbjsKKyAgICB0b2tlbi50eXBlID0gVG9rZW46OkNPTlNUX0lOVDsKKyAgICB0b2tlbi50
ZXh0ID0gc3RyZWFtLnN0cigpOworCisgICAgTWFjcm8gbWFjcm87CisgICAgbWFjcm8ucHJlZGVm
aW5lZCA9IHRydWU7CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNy
by5uYW1lID0gbmFtZTsKKyAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKHRva2VuKTsK
KworICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOworfQorCit2b2lkIFByZXByb2Nl
c3Nvcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICBib29sIHZhbGlkVG9rZW4gPSBmYWxzZTsK
KyAgICB3aGlsZSAoIXZhbGlkVG9rZW4pCisgICAgeworICAgICAgICBtSW1wbC0+bWFjcm9FeHBh
bmRlci5sZXgodG9rZW4pOworICAgICAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAgICAgICB7
CisgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSByZXR1cm5pbmcgaW50ZXJuYWwgcHJlcHJv
Y2Vzc2luZyB0b2tlbnMuCisgICAgICAgICAgLy8gQ29udmVydCBwcmVwcm9jZXNzaW5nIHRva2Vu
cyB0byBjb21waWxlciB0b2tlbnMgb3IgcmVwb3J0CisgICAgICAgICAgLy8gZGlhZ25vc3RpY3Mu
CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfSEFTSDoKKyAgICAgICAgICAgIGFzc2VydChmYWxz
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRva2VuOjpDT05TVF9JTlQ6
CisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHZhbCA9IDA7CisgICAgICAgICAgICBpZiAo
IXRva2VuLT5pVmFsdWUoJnZhbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8g
RG8gbm90IG1hcmsgdGhlIHRva2VuIGFzIGludmFsaWQuCisgICAgICAgICAgICAgICAgLy8gSnVz
dCBlbWl0IHRoZSBkaWFnbm9zdGljIGFuZCByZXNldCB2YWx1ZSB0byAwLgorICAgICAgICAgICAg
ICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJG
TE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHRva2VuLT50ZXh0LmFzc2ln
bigiMCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsaWRUb2tlbiA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBUb2tlbjo6Q09O
U1RfRkxPQVQ6CisgICAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgdmFsID0gMDsKKyAgICAg
ICAgICAgIGlmICghdG9rZW4tPmZWYWx1ZSgmdmFsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBEbyBub3QgbWFyayB0aGUgdG9rZW4gYXMgaW52YWxpZC4KKyAgICAgICAgICAg
ICAgICAvLyBKdXN0IGVtaXQgdGhlIGRpYWdub3N0aWMgYW5kIHJlc2V0IHZhbHVlIHRvIDAuMC4K
KyAgICAgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
RkxPQVRfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdG9rZW4t
PnRleHQuYXNzaWduKCIwLjAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbGlkVG9r
ZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGNh
c2UgVG9rZW46OlBQX05VTUJFUjoKKyAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpJTlZBTElEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUb2tlbjo6UFBfT1RIRVI6CisgICAgICAgICAgICBt
SW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3Iu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJl
cHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlMzViMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgKQEAgLTAsMCArMSw0OSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCisKKyNpbmNsdWRlICJwcF91
dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBE
aXJlY3RpdmVIYW5kbGVyOworc3RydWN0IFByZXByb2Nlc3NvckltcGw7CitzdHJ1Y3QgVG9rZW47
CisKK2NsYXNzIFByZXByb2Nlc3NvcgoreworICBwdWJsaWM6CisgICAgUHJlcHJvY2Vzc29yKERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcywgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxl
cik7CisgICAgflByZXByb2Nlc3NvcigpOworCisgICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUg
bnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCisgICAg
Ly8gc3RyaW5nOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KKyAg
ICAvLyBsZW5ndGg6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KKyAgICAv
LyBJZiBsZW5ndGggaXMgTlVMTCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRl
cm1pbmF0ZWQuCisgICAgLy8gSWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBp
dCBwb2ludHMgdG8gYW4gYXJyYXkgY29udGFpbmluZworICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBm
b3IgZWFjaCBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCisgICAgLy8g
RWFjaCBlbGVtZW50IGluIHRoZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBv
ZiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAw
IHRvIGluZGljYXRlIHRoYXQgdGhlIHN0cmluZworICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4K
KyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29u
c3QgaW50IGxlbmd0aFtdKTsKKyAgICAvLyBBZGRzIGEgcHJlLWRlZmluZWQgbWFjcm8uCisgICAg
dm9pZCBwcmVkZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpOworCisgICAg
dm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3IpOworCisgICAgUHJlcHJvY2Vzc29ySW1wbCogbUlt
cGw7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1BSRVBST0NFU1NPUl9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjYxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvU291cmNlTG9jYXRpb24uaApAQCAtMCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lm
bmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCisjZGVmaW5lIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KKworbmFtZXNwYWNlIHBwCit7
CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbgoreworICAgIFNvdXJjZUxvY2F0aW9uKCkgOiBmaWxl
KDApLCBsaW5lKDApIHsgfQorICAgIFNvdXJjZUxvY2F0aW9uKGludCBmLCBpbnQgbCkgOiBmaWxl
KGYpLCBsaW5lKGwpIHsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgU291cmNlTG9jYXRpb24m
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChmaWxlID09IG90aGVyLmZpbGUp
ICYmIChsaW5lID09IG90aGVyLmxpbmUpOworICAgIH0KKworICAgIGludCBmaWxlOworICAgIGlu
dCBsaW5lOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VMb2NhdGlv
biYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQoreworICAgIHJldHVybiBsaHMuZXF1
YWxzKHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU291cmNlTG9jYXRp
b24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5l
cXVhbHMocmhzKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmNTBhYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9r
ZW4uY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiVG9rZW4u
aCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisKKyNpbmNsdWRlICJudW1lcmljX2xleC5oIgorCitu
YW1lc3BhY2UgcHAKK3sKKwordm9pZCBUb2tlbjo6cmVzZXQoKQoreworICAgIHR5cGUgPSAwOwor
ICAgIGZsYWdzID0gMDsKKyAgICBsb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7CisgICAgdGV4
dC5jbGVhcigpOworfQorCitib29sIFRva2VuOjplcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAgICAgICAgICAo
ZmxhZ3MgPT0gb3RoZXIuZmxhZ3MpICYmCisgICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5s
b2NhdGlvbikgJiYKKyAgICAgICAgICAgKHRleHQgPT0gb3RoZXIudGV4dCk7Cit9CisKK3ZvaWQg
VG9rZW46OnNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCkKK3sKKyAgICBpZiAoc3RhcnQpCisg
ICAgICAgIGZsYWdzIHw9IEFUX1NUQVJUX09GX0xJTkU7CisgICAgZWxzZQorICAgICAgICBmbGFn
cyAmPSB+QVRfU1RBUlRfT0ZfTElORTsKK30KKwordm9pZCBUb2tlbjo6c2V0SGFzTGVhZGluZ1Nw
YWNlKGJvb2wgc3BhY2UpCit7CisgICAgaWYgKHNwYWNlKQorICAgICAgICBmbGFncyB8PSBIQVNf
TEVBRElOR19TUEFDRTsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5IQVNfTEVBRElOR19T
UEFDRTsKK30KKwordm9pZCBUb2tlbjo6c2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxl
KQoreworICAgIGlmIChkaXNhYmxlKQorICAgICAgICBmbGFncyB8PSBFWFBBTlNJT05fRElTQUJM
RUQ7CisgICAgZWxzZQorICAgICAgICBmbGFncyAmPSB+RVhQQU5TSU9OX0RJU0FCTEVEOworfQor
Citib29sIFRva2VuOjppVmFsdWUoaW50KiB2YWx1ZSkgY29uc3QKK3sKKyAgICBhc3NlcnQodHlw
ZSA9PSBDT05TVF9JTlQpOworICAgIHJldHVybiBudW1lcmljX2xleF9pbnQodGV4dCwgdmFsdWUp
OworfQorCitib29sIFRva2VuOjp1VmFsdWUodW5zaWduZWQgaW50KiB2YWx1ZSkgY29uc3QKK3sK
KyAgICBhc3NlcnQodHlwZSA9PSBDT05TVF9JTlQpOworICAgIHJldHVybiBudW1lcmljX2xleF9p
bnQodGV4dCwgdmFsdWUpOworfQorCitib29sIFRva2VuOjpmVmFsdWUoZmxvYXQqIHZhbHVlKSBj
b25zdAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0ZMT0FUKTsKKyAgICByZXR1cm4gbnVt
ZXJpY19sZXhfZmxvYXQodGV4dCwgdmFsdWUpOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9y
PDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAodG9r
ZW4uaGFzTGVhZGluZ1NwYWNlKCkpCisgICAgICAgIG91dCA8PCAiICI7CisKKyAgICBvdXQgPDwg
dG9rZW4udGV4dDsKKyAgICByZXR1cm4gb3V0OworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW4uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjU1M2Fl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbi5oCkBAIC0wLDAgKzEsMTA2IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KKyNkZWZpbmUgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1RPS0VOX0hfCisKKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPHN0
cmluZz4KKworI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCisKK25hbWVzcGFjZSBwcAorewor
CitzdHJ1Y3QgVG9rZW4KK3sKKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIExBU1QgPSAw
LCAgLy8gRU9GLgorCisgICAgICAgIElERU5USUZJRVIgPSAyNTgsCisKKyAgICAgICAgQ09OU1Rf
SU5ULAorICAgICAgICBDT05TVF9GTE9BVCwKKworICAgICAgICBPUF9JTkMsCisgICAgICAgIE9Q
X0RFQywKKyAgICAgICAgT1BfTEVGVCwKKyAgICAgICAgT1BfUklHSFQsCisgICAgICAgIE9QX0xF
LAorICAgICAgICBPUF9HRSwKKyAgICAgICAgT1BfRVEsCisgICAgICAgIE9QX05FLAorICAgICAg
ICBPUF9BTkQsCisgICAgICAgIE9QX1hPUiwKKyAgICAgICAgT1BfT1IsCisgICAgICAgIE9QX0FE
RF9BU1NJR04sCisgICAgICAgIE9QX1NVQl9BU1NJR04sCisgICAgICAgIE9QX01VTF9BU1NJR04s
CisgICAgICAgIE9QX0RJVl9BU1NJR04sCisgICAgICAgIE9QX01PRF9BU1NJR04sCisgICAgICAg
IE9QX0xFRlRfQVNTSUdOLAorICAgICAgICBPUF9SSUdIVF9BU1NJR04sCisgICAgICAgIE9QX0FO
RF9BU1NJR04sCisgICAgICAgIE9QX1hPUl9BU1NJR04sCisgICAgICAgIE9QX09SX0FTU0lHTiwK
KworICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgorICAgICAgICAvLyBUaGVz
ZSB0eXBlcyBhcmUgdXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFsbHkuCisgICAgICAg
IC8vIFByZXByb2Nlc3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBjaGVjayBmb3IgdGhl
bS4KKyAgICAgICAgUFBfSEFTSCwKKyAgICAgICAgUFBfTlVNQkVSLAorICAgICAgICBQUF9PVEhF
UgorICAgIH07CisgICAgZW51bSBGbGFncworICAgIHsKKyAgICAgICAgQVRfU1RBUlRfT0ZfTElO
RSAgID0gMSA8PCAwLAorICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAxIDw8IDEsCisgICAg
ICAgIEVYUEFOU0lPTl9ESVNBQkxFRCA9IDEgPDwgMgorICAgIH07CisKKyAgICBUb2tlbigpIDog
dHlwZSgwKSwgZmxhZ3MoMCkgeyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBlcXVh
bHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIGlzIHRoZSBmaXJzdCB0b2tlbiBvbiBsaW5lLgorICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55
IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJl
dHVybiAoZmxhZ3MgJiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9CisgICAgdm9pZCBzZXRBdFN0
YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpOworCisgICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25z
dCB7IHJldHVybiAoZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsgfQorICAgIHZvaWQg
c2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpOworCisgICAgYm9vbCBleHBhbnNpb25EaXNh
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNBQkxFRCkgIT0gMDsg
fQorICAgIHZvaWQgc2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKTsKKworICAgIC8v
IENvbnZlcnRzIHRleHQgaW50byBudW1lcmljIHZhbHVlIGZvciBDT05TVF9JTlQgYW5kIENPTlNU
X0ZMT0FUIHRva2VuLgorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhcnNlZCB2YWx1ZSBj
YW5ub3QgZml0IGludG8gYW4gaW50IG9yIGZsb2F0LgorICAgIGJvb2wgaVZhbHVlKGludCogdmFs
dWUpIGNvbnN0OworICAgIGJvb2wgdVZhbHVlKHVuc2lnbmVkIGludCogdmFsdWUpIGNvbnN0Owor
ICAgIGJvb2wgZlZhbHVlKGZsb2F0KiB2YWx1ZSkgY29uc3Q7CisKKyAgICBpbnQgdHlwZTsKKyAg
ICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CisgICAg
c3RkOjpzdHJpbmcgdGV4dDsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9r
ZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRv
a2VuJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CisKK2V4dGVybiBz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0
b2tlbik7CisKK30gIC8vIG5hbWVwc2FjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfVE9LRU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU3NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3Bw
CkBAIC0wLDAgKzEsMjM1NiBAQAorI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5z
aC4gRE8gTk9UIEVESVQhCisKKworCisjbGluZSAxMyAiLi9Ub2tlbml6ZXIuY3BwIgorCisjZGVm
aW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBpbnQKKworLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2Vu
ZXJhdGVkIGJ5IGZsZXggKi8KKworI2RlZmluZSBGTEVYX1NDQU5ORVIKKyNkZWZpbmUgWVlfRkxF
WF9NQUpPUl9WRVJTSU9OIDIKKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKKyNkZWZp
bmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJT
SU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJzdCwgd2UgZGVhbCB3
aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCisK
Ky8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXggaW50ZWdlciB0eXBl
IGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5lIEZMRVhJTlRfSAor
CisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBv
ciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERD
X1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElN
SVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ugd2FudCB0aGUg
bGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lmbmRlZiBfX1NU
RENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorI2VuZGlmCisK
KyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Cit0eXBl
ZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsK
K3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50MzJfdCBmbGV4X2lu
dDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7Cit0eXBlZGVmIHVpbnQ2NF90
IGZsZXhfdWludDY0X3Q7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsK
K3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJf
dDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWlu
dDMyX3Q7CisjZW5kaWYgLyogISBDOTkgKi8KKworLyogTGltaXRzIG9mIGludGVncmFsIHR5cGVz
LiAqLworI2lmbmRlZiBJTlQ4X01JTgorI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgt
MTI4KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01JTgorI2RlZmluZSBJTlQxNl9NSU4gICAgICAg
ICAgICAgICgtMzI3NjctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NSU4KKyNkZWZpbmUgSU5U
MzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKKyNlbmRpZgorI2lmbmRlZiBJTlQ4
X01BWAorI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCisjZW5kaWYKKyNpZm5k
ZWYgSU5UMTZfTUFYCisjZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQorI2Vu
ZGlmCisjaWZuZGVmIElOVDMyX01BWAorI2RlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgy
MTQ3NDgzNjQ3KQorI2VuZGlmCisjaWZuZGVmIFVJTlQ4X01BWAorI2RlZmluZSBVSU5UOF9NQVgg
ICAgICAgICAgICAgICgyNTVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUg
VUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQorI2VuZGlmCisjaWZuZGVmIFVJTlQzMl9N
QVgKKyNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCisjZW5kaWYK
KworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworCisvKiBU
aGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLworI2RlZmluZSBZ
WV9VU0VfQ09OU1QKKworI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLworCisvKiBDOTkgcmVxdWly
ZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19f
KQorCisjZGVmaW5lIFlZX1VTRV9DT05TVAorCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18p
ICovCisjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAqLworCisjaWZkZWYgWVlfVVNFX0NPTlNUCisj
ZGVmaW5lIHl5Y29uc3QgY29uc3QKKyNlbHNlCisjZGVmaW5lIHl5Y29uc3QKKyNlbmRpZgorCisv
KiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyog
UHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4g
dW5zaWduZWQKKyAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBz
aWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBh
cyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICov
CisjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikg
YykKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NB
Tk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5
c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0
aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQg
c2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWct
Pnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcg
eXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxp
bmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5
Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUg
eXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNv
bmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisg
KiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkg
dGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4g
eXlnLT55eV9zdGFydCA9IDEgKyAyICoKKworLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0
IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKKyAqIHRvIEJFR0lO
IHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4Cisg
KiBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAt
IDEpIC8gMikKKyNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAorCisvKiBBY3Rpb24gbnVtYmVyIGZv
ciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLworI2RlZmluZSBZWV9TVEFURV9F
T0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQorCisvKiBTcGVjaWFsIGFj
dGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZ
WV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKKworI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVIgMAorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwor
I2lmbmRlZiBZWV9CVUZfU0laRQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmCisK
Ky8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBvbmUgc3RhdGUg
cGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCisgKi8KKyNkZWZpbmUgWVlfU1RBVEVf
QlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpCisK
KyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfVFlQRURFRl9Z
WV9CVUZGRVJfU1RBVEUKK3R5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVS
X1NUQVRFOworI2VuZGlmCisKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgor
CisjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1RfRU5EX09G
X0ZJTEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgI2RlZmluZSBZWV9M
RVNTX0xJTkVOTyhuKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRj
aGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxl
c3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAg
ICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0
ZXh0X3B0ciAsIHl5c2Nhbm5lciApCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBp
bnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBp
biBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBu
b3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6
ZV90IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5
X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3Np
emVfdCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5l
Liwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdy
b3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWlu
dCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2
ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9y
IGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQo
KSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5l
d2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdy
ZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNv
LCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQor
CSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsg
LyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBj
b2x1bW4gY291bnQuICovCisgICAgCisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5w
dXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5
eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JV
RkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidz
IGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRo
ZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0
IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkg
bW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRj
aCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAq
IFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJu
ZXciCisJICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVl
IHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUu
CisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8q
ICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZv
ciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdh
bnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5l
ciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4K
KyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5
X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQor
CisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0
IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFs
dWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXQor
Cit2b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7
Cit2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVfYnVmZmVyIChG
SUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZGVsZXRl
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBw
cF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
K3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcHBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIFlZX0ZMVVNI
X0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKKwor
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXpl
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0cmluZyAo
eXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NU
QVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6ZV90IGxlbiAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Cit2b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90
IHl5c2Nhbm5lciApOwordm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyICk7
CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCisKKyNkZWZpbmUgeXlf
c2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJF
TlRfQlVGRkVSICl7IFwKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHBwX2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsg
XAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9D
VVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5u
ZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHBw
X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAorCX0gXAorCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVm
aW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKwor
LyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHBwd3JhcChuKSAxCisjZGVmaW5lIFlZ
X1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOworCit0eXBlZGVm
IGludCB5eV9zdGF0ZV90eXBlOworCisjZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKKworc3Rh
dGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5
cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IHl5X2dl
dF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9mYXRh
bF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyog
RG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9y
ZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCisgKi8KKyNk
ZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwK
Kwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5eWctPnl5X2hvbGRf
Y2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5eWctPnl5X2NfYnVmX3AgPSB5
eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVMRVMgMzcKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZF
UiAzOAorLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLAorICAgYnV0
IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCitzdHJ1Y3QgeXlfdHJhbnNfaW5mbworCXsK
KwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50MzJfdCB5eV9ueHQ7CisJfTsKK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbODRdID0KKyAgICB7ICAgMCwKKyAg
ICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAzOCwgICAzNiwgICAzNCwgICAzNSwgICAzNSwg
ICAzMywKKyAgICAgICAgNywgICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAz
MywgICAzMywgICAgOSwKKyAgICAgICAgOSwgICAzMywgICAzMywgICAzMywgICAgOCwgICAzMywg
ICAzMywgICAgMywgICAgNSwgICAgNSwKKyAgICAgICAgNCwgICAzNCwgICAzNSwgICAxOSwgICAy
NywgICAyMCwgICAzMCwgICAyNSwgICAxMiwgICAyMywKKyAgICAgICAxMywgICAyNCwgICAxMCwg
ICAgMiwgICAgMSwgICAyNiwgICAxMCwgICAgOSwgICAxMSwgICAxMSwKKyAgICAgICAxMSwgICAx
MSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAxNywgICAxNSwgICAgOCwgICAzMSwKKyAgICAg
ICAyMSwgICAzMiwgICAyMiwgICAgMywgICAgNSwgICAgNiwgICAxMSwgICAxMCwgICAxMSwgICAg
MSwKKyAgICAgICAxMCwgICAxMSwgICAgMCwgICAxMCwgICAgOSwgICAyOCwgICAyOSwgICAgMCwg
ICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAxMCwgICAgMAorICAgIH0gOworCitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCisgICAg
ICAgIDIsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAg
IDcsICAgIDgsICAgIDEsICAgIDksCisgICAgICAgIDksICAgMTAsICAgMTEsICAgIDksICAgMTIs
ICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAg
MTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAgMTgsCisgICAgICAgMTksICAgMjAs
ICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjEsCisgICAgICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
CisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAg
MjMsICAgMjMsCisgICAgICAgIDksICAgIDEsICAgIDksICAgMjUsICAgMjMsICAgIDEsICAgMjEs
ICAgMjEsICAgMjEsICAgMjEsCisKKyAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKKyAgICAgICAyMywgICAyMywg
ICAgOSwgICAyNiwgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKwor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9tZXRhWzI3XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDIsICAg
IDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAgICAgIDEsICAgIDEs
ICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbODldID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAyNCwgICAyNiwgIDE1OCwgIDE1OSwgIDE1MCwgIDE1OSwgIDE0NSwgIDEyOCwKKyAgICAg
IDE1OSwgIDExMiwgICAyMywgIDE1OSwgIDExMSwgICAyMSwgICAyNSwgICAzMCwgICAyOSwgICAz
NiwKKyAgICAgICA0NiwgICAzNiwgIDEwMCwgICA0NSwgICAgMCwgICAxNiwgICA0NywgICAgMCwg
IDE1OSwgICA4NCwKKyAgICAgICA2NSwgICA3MywgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1
OSwgIDE1OSwgIDE1OSwgIDE1OSwKKyAgICAgIDE1OSwgIDE1OSwgICA2MSwgIDE1OSwgICAgMCwg
IDE1OSwgICA3MywgICAzMiwgICA1NiwgICA4MywKKyAgICAgICA5NSwgICA2OCwgICAgMCwgICAz
MSwgIDE1OSwgIDE1OSwgIDE1OSwgICAxOSwgICAgMCwgIDE1OSwKKyAgICAgIDE1OSwgIDE1OSwg
IDE1OSwgICAgMCwgIDE1OSwgIDE1OSwgICA5OCwgICAgMCwgIDExMCwgICAgMCwKKyAgICAgICAg
MCwgIDExNywgICA1MiwgICA5MCwgICA4MCwgIDE1OSwgIDE1OSwgIDEwMSwgICA5NywgIDExMiwK
KyAgICAgIDEyMCwgIDEyMywgIDE1OSwgIDE0MCwgICAyOCwgIDE0NSwgIDE1MCwgIDE1MgorICAg
IH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzg5XSA9CisgICAgeyAg
IDAsCisgICAgICAgODMsICAgIDEsICAgODQsICAgODQsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgMjAsICAgODMsICAgODMsICAgODMsICAgODUs
ICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODcsICAgODMsICAgODMsICAgMjAsICAgMjAsICAgNDcsCisgICAgICAg
NTAsICAgODgsICAgMjEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODUsICAgODMs
CisgICAgICAgODMsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsICAgNDMsICAgNDMsICAg
NjcsICAgODcsCisgICAgICAgNDcsICAgNTAsICAgODMsICAgNTEsICAgODgsICAgODMsICAgODMs
ICAgODMsICAgNjksICAgNzIsCisgICAgICAgODMsICAgODMsICAgIDAsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X254dFsxODZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgNiwgICAgNywgICAgOCwgICAgOSwgICAx
MCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKKyAgICAgICAxNiwgICAxNywgICAxOCwg
ICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKKyAgICAgICAyNSwgICAy
NSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOSwgICAzMCwgICAyOSwgICAzMCwKKyAgICAg
ICAzNiwgICAzOSwgICA1OSwgICAzMSwgICA2MCwgICAzMSwgICA0MSwgICA3NywgICA0NCwgICA0
MCwKKyAgICAgICA2MSwgICAzNywgICA0NSwgICA0MiwgICA0MywgICA0MywgICA0MywgICA0Niwg
ICA0NywgICA3NiwKKyAgICAgICA0OCwgICA0OCwgICA0OSwgICA1NCwgICA1NSwgICA1MCwgICA1
MCwgICA1MSwgICA1MCwgICA1MiwKKyAgICAgICA1MywgICA1MywgICA1MywgICA1NywgICA1OCwg
ICA2MiwgICA4MSwgICA4MSwgICA4MSwgICA1MCwKKyAgICAgICA0OSwgICA0OSwgICA2MywgICA2
NywgICAzMiwgICA2OCwgICA2OCwgICA2OCwgICA2NiwgICA1MCwKKyAgICAgICA1MCwgICA2Nywg
ICA2OSwgICA2NywgICA2NywgICA1MCwgICA2NSwgICA3MSwgICA3MSwgICA3MSwKKyAgICAgICA1
MCwgICA1MCwgICA1MCwgICA1MCwgICA3MiwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwK
KworICAgICAgIDgzLCAgIDgzLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDczLCAgIDczLCAgIDgzLCAg
IDgzLCAgIDc0LAorICAgICAgIDc0LCAgIDc0LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDgyLCAgIDgy
LCAgIDgyLCAgIDU2LCAgIDY3LAorICAgICAgIDc4LCAgIDc4LCAgIDgzLCAgIDgzLCAgIDc5LCAg
IDc5LCAgIDc5LCAgIDc4LCAgIDc4LCAgIDM4LAorICAgICAgIDM1LCAgIDgwLCAgIDgwLCAgIDgw
LCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDI4LCAgIDI4LCAg
IDI4LCAgIDI4LCAgIDI4LCAgIDY0LCAgIDM0LCAgIDMzLCAgIDY0LCAgIDY0LAorICAgICAgIDcw
LCAgIDMyLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDc1LCAgIDc1LCAgIDgzLCAgICA1LCAgIDgzLAor
ICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAg
fSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMTg2XSA9CisgICAgeyAg
IDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDMsICAgIDMsICAgIDQsICAgIDQsCisgICAgICAgMTMsICAgMTYsICAgODUsICAg
IDMsICAgMjYsICAgIDQsICAgMTcsICAgNTgsICAgMTksICAgMTYsCisgICAgICAgMjYsICAgMTMs
ICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTksICAgMjAsICAgNTQsCisgICAgICAg
MjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNDgsICAgMjAsICAgMjAsICAgMjAsICAgMjAs
CisgICAgICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQsICAgMjcsICAgNzMsICAgNzMsICAg
NzMsICAgMjEsCisgICAgICAgNDksICAgNDksICAgMjcsICAgNDMsICAgMzIsICAgNDMsICAgNDMs
ICAgNDMsICAgMzEsICAgNDksCisgICAgICAgNTIsICAgNDMsICAgNDMsICAgNDMsICAgNDMsICAg
NDcsICAgMzAsICAgNDcsICAgNDcsICAgNDcsCisgICAgICAgNTIsICAgNTIsICAgNzUsICAgNDcs
ICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAgICA3NCwgICA3NCwg
ICA3NSwgICA3NSwgICA1MCwgICA1MSwgICA1MSwgICA3OSwgICA3OSwgICA1MSwKKyAgICAgICA1
MSwgICA1MSwgICA2NywgICA2NywgICA2NywgICA3OCwgICA3OCwgICA3OCwgICAyMywgICA2NywK
KyAgICAgICA2OSwgICA2OSwgICA4MCwgICA4MCwgICA2OSwgICA2OSwgICA2OSwgICA3MiwgICA3
MiwgICAxNSwKKyAgICAgICAxMiwgICA3MiwgICA3MiwgICA3MiwgICA4MSwgICA4MSwgICA4MSwg
ICA4MiwgICA4MiwgICA4MiwKKyAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4NCwgICA4
NiwgICAxMCwgICAgOSwgICA4NiwgICA4NiwKKyAgICAgICA4NywgICAgNywgICA4NywgICA4Nywg
ICA4NywgICA4OCwgICA4OCwgICAgNSwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCisvKiBUaGUgaW50ZW50
IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAorICogYW55IHVzZXMg
b2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJFSkVDVCByZWplY3Rf
dXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91c2VkX2J1dF9u
b3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZWV9SRVNUT1JFX1lZ
X01PUkVfT0ZGU0VUCisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCitCYXNlZCBv
biBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgoraHR0
cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKKworSUYg
WU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2Vy
LnNoLgorKi8KKworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAiRGlhZ25vc3Rp
Y3NCYXNlLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisv
LyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0aW9u
LgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisj
ZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBwcDo6U291cmNl
TG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUg
dG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1u
CisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAgICAgeXlleHRy
YS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisjZGVmaW5lIFlZ
X1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dCogaW5wdXQg
PSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6
OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAg
XAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0
LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
c2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBc
CisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZp
bGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxv
Yy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCBy
ZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1Ziwg
bWF4U2l6ZSk7CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1FTlQgMQorCisjZGVm
aW5lIFlZX0VYVFJBX1RZUEUgcHA6OlRva2VuaXplcjo6Q29udGV4dCoKKworLyogSG9sZHMgdGhl
IGVudGlyZSBzdGF0ZSBvZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCitzdHJ1Y3QgeXlndXRz
X3QKKyAgICB7CisKKyAgICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICov
CisgICAgWVlfRVhUUkFfVFlQRSB5eWV4dHJhX3I7CisKKyAgICAvKiBUaGUgcmVzdCBhcmUgdGhl
IHNhbWUgYXMgdGhlIGdsb2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5l
ci4gKi8KKyAgICBGSUxFICp5eWluX3IsICp5eW91dF9yOworICAgIHNpemVfdCB5eV9idWZmZXJf
c3RhY2tfdG9wOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KKyAgICBzaXplX3QgeXlf
YnVmZmVyX3N0YWNrX21heDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KKyAgICBZWV9CVUZG
RVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCisg
ICAgY2hhciB5eV9ob2xkX2NoYXI7CisgICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgICAgeXlf
c2l6ZV90IHl5bGVuZ19yOworICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgaW50IHl5X2luaXQ7
CisgICAgaW50IHl5X3N0YXJ0OworICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7
CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX3B0cjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVw
dGg7CisgICAgaW50ICp5eV9zdGFydF9zdGFjazsKKyAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlOworICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisKKyAg
ICBpbnQgeXlsaW5lbm9fcjsKKyAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOworCisgICAgY2hhciAq
eXl0ZXh0X3I7CisgICAgaW50IHl5X21vcmVfZmxhZzsKKyAgICBpbnQgeXlfbW9yZV9sZW47CisK
KyAgICBZWVNUWVBFICogeXlsdmFsX3I7CisKKyAgICBZWUxUWVBFICogeXlsbG9jX3I7CisKKyAg
ICB9OyAvKiBlbmQgc3RydWN0IHl5Z3V0c190ICovCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9i
YWxzICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJl
Y2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKKyAgICAgKiBmcm9tIGJpc29u
IG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KKyAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2
YWxfcgorICAgIAorICAgICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCisgICAgCitp
bnQgcHBsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOworCitpbnQgcHBsZXhfaW5pdF9leHRy
YSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBB
Y2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRv
IG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgcHBsZXhf
ZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9kZWJ1ZyAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZp
bmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisKK0ZJTEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3Zv
aWQgcHBzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit5
eV9zaXplX3QgcHBnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2NoYXIgKnBwZ2V0
X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgcHBnZXRfbGluZW5vICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKK1lZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKwordm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworICAgIAorICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5
eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorLyogTWFjcm9zIGFmdGVy
IHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4K
KyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19j
cGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Cisj
ZWxzZQorZXh0ZXJuIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisj
ZW5kaWYKKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkg
KGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYK
KworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNv
bnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05P
X0lOUFVUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVw
IHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjZGVmaW5lIFlZ
X1JFQURfQlVGX1NJWkUgODE5MgorI2VuZGlmCisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3Qg
cnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8q
IFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBj
b250YWluIE5VTCdzLAorICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hP
IGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNlbmRpZgorCisvKiBHZXRzIGlu
cHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQs
IG9yIFlZX05VTEwsCisgKiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KKyAqLworI2lmbmRlZiBZ
WV9JTlBVVAorI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCisJaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJ
aW50IGMgPSAnKic7IFwKKwkJeXlfc2l6ZV90IG47IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhf
c2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4n
OyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwK
KwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5
aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxl
ZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89
MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9
PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAor
CQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxl
ZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBcCisJCQljbGVhcmVy
cih5eWluKTsgXAorCQkJfSBcCisJCX1cCitcCisKKyNlbmRpZgorCisvKiBObyBzZW1pLWNvbG9u
IGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsi
IC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNh
dXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQg
dW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lmbmRlZiB5eXRlcm1pbmF0ZQorI2RlZmlu
ZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGVu
dHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZ
WV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRp
ZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KKyNpZm5kZWYgWVlfRkFUQUxfRVJST1IK
KyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2Fu
bmVyKQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFu
ZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNj
YW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVy
cy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4
dGVybiBpbnQgcHBsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0s
WVlMVFlQRSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZ
WV9ERUNMIGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJh
bSwgWVlMVFlQRSAqIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAv
KiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFj
aCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2ZSBiZWVuIHNldCB1cC4KKyAq
LworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9VU0VSX0FDVElPTgorI2VuZGlm
CisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCisjaWZuZGVm
IFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlf
UlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVu
Y3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwlyZWdpc3Rl
ciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3As
ICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIExpbmUgY29tbWVudCAq
LworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisgICAgeXlsbG9jID0geXlsbG9jX3Bh
cmFtOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOwor
CisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICgg
ISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBz
dGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEg
eXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVS
ICkgeworCQkJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0KKwkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7CisJCX0KKworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
KwkJfQorCisJd2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNo
ZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9m
IHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAg
cG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAq
IHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5
eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNj
ZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5
X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVk
IGludCkgeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkrK3l5X2NwOwor
CQkJfQorCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKKwkJeXlfY3AgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX3N0YXRlOworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNj
ZXB0W3l5X2N1cnJlbnRfc3RhdGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKK2RvX2Fj
dGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAq
LworCisJCXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRj
aCAqLworCQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVj
dHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7CisJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5k
X2FjdGlvbjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKy8qIEJsb2Nr
IGNvbW1lbnQgKi8KKy8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJu
ZWQuICovCisvKiBUaGUgY29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8g
CitjYXNlIDI6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lOKENPTU1FTlQpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NF
VFVQCisKKwlZWV9CUkVBSworY2FzZSA1OgorLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KK1lZ
X1JVTEVfU0VUVVAKK3sgKyt5eWxpbmVubzsgfQorCVlZX0JSRUFLCitjYXNlIDY6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJ
TklUSUFMKTsKK30KKwlZWV9CUkVBSworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreworICAgIC8v
ICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0
aXZlcy4KKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eWV4
dHJhLT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVS
OworfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwor
fQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsK
K30KKwlZWV9CUkVBSworLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3Ig
LntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8KKy8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFs
aWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
OlBQX05VTUJFUjsKK30KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfSU5DOworfQorCVlZX0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9E
RUM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOwor
fQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKK30KKwlZ
WV9CUkVBSworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMTg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROworfQorCVlZX0JSRUFLCitj
YXNlIDE5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKwlZWV9CUkVBSworY2FzZSAy
MDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EOworfQorCVlZX0JSRUFLCitjYXNlIDIxOgor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorCVlZX0JSRUFLCitjYXNlIDIzOgorWVlfUlVMRV9T
RVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI1OgorWVlf
UlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI2Ogor
WVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDI3
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNl
IDI4OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30KKwlZWV9CUkVBSwor
Y2FzZSAyOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorCVlZX0JS
RUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorCVlZ
X0JSRUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQor
CVlZX0JSRUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMzM6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCVlZX0JSRUFLCitj
YXNlIDM0OgorWVlfUlVMRV9TRVRVUAoreyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMzU6CisvKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICArK3l5bGluZW5vOworICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicp
OworICAgIHJldHVybiAnXG4nOworfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRV
UAoreworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6UFBfT1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwp
OgorY2FzZSBZWV9TVEFURV9FT0YoQ09NTUVOVCk6Cit7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04g
aXMgbm90IGludm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9u
IGZvciBFT0YgdG9rZW4gbWFudWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJh
LT5pbnB1dDsKKyAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNj
YW5Mb2M7CisgICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0g
MSk7CisgICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAg
ICAvLyBXZSBjYW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0
IHRoZQorICAgICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5k
ZXggPSBzSW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0g
c0luZGV4TWF4OyB5eWxpbmVubyA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5Zmls
ZW5vOworICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsK
KworICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZp
bGVubywgeXlsaW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIi
KTsKKyAgICB9CisgICAgeXl0ZXJtaW5hdGUoKTsKK30KKwlZWV9CUkVBSworY2FzZSAzNzoKK1lZ
X1JVTEVfU0VUVVAKK0VDSE87CisJWVlfQlJFQUsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoK
KwkJeworCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBj
aGFyLiAqLworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAt
IHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9f
QkVGT1JFX0FDVElPTi4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX1JF
U1RPUkVfWVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNj
YW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUg
dGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5
eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiBwcGxleCgpLiAgSWYgc28sIHRo
ZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVO
VF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNl
IHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVy
IHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUg
bmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0
IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBv
ZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkg
KiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJ
CSAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkg
KiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkg
KiBpbiBpbnB1dCgpLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJeyAvKiBU
aGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7
CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9t
YXRjaGVkX3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3Rh
dGUoIHl5c2Nhbm5lciApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBt
YWtlIHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5
eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBi
ZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2li
aWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1p
bmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4K
KwkJCSAqLworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVu
dF9zdGF0ZSAsIHl5c2Nhbm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1
bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQor
CisJCQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
OworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwor
CQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICgg
eXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1Rf
RU5EX09GX0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMDsKKworCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBO
b3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVm
ZmVyKCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAor
CQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAo
bGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRl
ciB3ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90
aGVyCisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5
eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJ
CQkJfQorCisJCQkJZWxzZQorCQkJCQl7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOwor
CQkJCX0KKworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJeXlnLT55eV9jX2J1
Zl9wID0KKwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsK
KworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5l
ciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5
dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJCQljYXNlIEVP
Ql9BQ1RfTEFTVF9NQVRDSDoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCSZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOworCisJCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5
eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZ
X01PUkVfQURKOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9
CisKKwlkZWZhdWx0OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24g
c3dpdGNoICovCisJCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworfSAvKiBlbmQg
b2YgcHBsZXggKi8KKworLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBu
ZXcgYnVmZmVyCisgKgorICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoK
KyAqCUVPQl9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250
aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJ
TEUgLSBlbmQgb2YgZmlsZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55
eXRleHRfcHRyOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0X3Zh
bDsKKworCWlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJCSJm
YXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiAp
OworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAg
KQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9G
LiAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVf
QURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRo
ZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJCQly
ZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkvKiBX
ZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2Vz
cyBpdC4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQor
CisJLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0IGNo
YXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCWZvciAoIGkgPSAwOyBpIDwg
bnVtYmVyX3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVS
X0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRl
ZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7
CisKKwllbHNlCisJCXsKKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdo
aWxlICggbnVtX3RvX3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUg
YnVmZmVyIC0gZ3JvdyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhl
IGN1cnJlbnQgYnVmZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVG
RkVSOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5X2Nf
YnVmX3AgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQor
CQkJCXsKKwkJCQl5eV9zaXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJ
CQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZf
c2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+
eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBj
aGFycy4gKi8KKwkJCQkJcHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZf
c2l6ZSArIDIgLHl5c2Nhbm5lciApOworCQkJCX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93
IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCisJCQkJYi0+eXlfY2hfYnVmID0gMDsKKworCQkJaWYg
KCAhIGItPnl5X2NoX2J1ZiApCisJCQkJWVlfRkFUQUxfRVJST1IoCisJCQkJImZhdGFsIGVycm9y
IC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7CisKKwkJCXl5Zy0+eXlfY19idWZf
cCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOworCisJCQludW1fdG9fcmVhZCA9
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQorCQkJCQkJbnVtYmVyX3Rv
X21vdmUgLSAxOworCisJCQl9CisKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJ
WkUgKQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOworCisJCS8qIFJlYWQgaW4g
bW9yZSBkYXRhLiAqLworCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVh
ZCApOworCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlf
bl9jaGFyczsKKwkJfQorCisJaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCisJCXsKKwkJaWYg
KCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCisJCQl7CisJCQlyZXRfdmFsID0gRU9C
X0FDVF9FTkRfT0ZfRklMRTsKKwkJCXBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKKwkJCX0K
KworCQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJf
RU9GX1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjsKKworCWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkv
KiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVk
LiAqLworCQl5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9f
bW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKwkJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAi
b3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0KKwor
CXl5Zy0+eXlfbl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyAr
IDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJeXlnLT55eXRleHRfcHRyID0gJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9
CisKKy8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUg
dGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5
eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciB5
eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisKKwlmb3IgKCB5eV9jcCA9IHl5
Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5
eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZ
X1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50
X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQl9CisJ
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJ
CXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKKwkJfQorCisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3Ry
eV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0
ZXIKKyAqCisgKiBzeW5vcHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1
cnJlbnRfc3RhdGUgKTsKKyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxf
dHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVz
ZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5
Zy0+eXlfY19idWZfcDsKKworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODQgKQorCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKwl5
eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5z
aWduZWQgaW50KSB5eV9jXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Myk7
CisKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5k
ZWYgWVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1
dCAoeXlzY2FuX3QgeXlzY2FubmVyKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQorI2VuZGlmCisKK3sKKwlpbnQgYzsKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8g
dGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJl
Zm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlm
IG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYg
KCB5eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkq
eXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1
dCAqLworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0
X3B0cjsKKwkJCSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9i
dWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6
CisJCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0
aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2Ug
bmVlZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBw
cm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5n
IHRvIGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gK
KwkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVz
ZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisK
KwkJCQkJLypGQUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJ
CQkJCXsKKwkJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIDA7CisK
KwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZ
X05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nh
bm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJ
CQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9
CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0
IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2Vy
dmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisK
KwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIElt
bWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0g
aW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUg
c3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCBwcHJlc3RhcnQg
IChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEg
WVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorICAgICAgICAgICAgcHBfY3Jl
YXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCX0KKworCXBwX2luaXRf
YnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7CisJcHBfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJl
bnQgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZm
ZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAgIHZv
aWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byBy
ZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJICoJCXBwcG9wX2J1
ZmZlcl9zdGF0ZSgpOworCSAqCQlwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworICAg
ICAqLworCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRf
QlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIu
ICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKwor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJcHBfbG9hZF9idWZmZXJf
c3RhdGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIg
d2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3Npbmcs
IGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBw
cHdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdh
eXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsK
K30KKworc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKKwl5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7CisJeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfaW5wdXRfZmlsZTsKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVm
X3A7Cit9CisKKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3Rh
dGUuCisgKiBAcGFyYW0gZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSBzaXplIFRo
ZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZ
WV9CVUZfU0laRS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICog
QHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4KKyAqLworICAgIFlZX0JVRkZFUl9T
VEFURSBwcF9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZF
Ul9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2Fu
bmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7
CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUg
c2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVy
IGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55
eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVy
KCkiICk7CisKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXBwX2luaXRfYnVmZmVyKGIs
ZmlsZSAseXlzY2FubmVyKTsKKworCXJldHVybiBiOworfQorCisvKiogRGVzdHJveSB0aGUgYnVm
ZmVyLgorICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIo
KQorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lk
IHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5U
X0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlf
aXNfb3VyX2J1ZmZlciApCisJCXBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5l
ciApOworCisJcHBmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworfQorCisvKiBJbml0aWFs
aXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21l
dGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2gg
YXMgZHVyaW5nIGEgcHByZXN0YXJ0KCkgb3IgYXQgRU9GLgorICovCisgICAgc3RhdGljIHZvaWQg
cHBfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQorCit7CisJaW50IG9lcnJubyA9IGVycm5vOworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXBwX2ZsdXNoX2J1
ZmZlcihiICx5eXNjYW5uZXIpOworCisJYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7CisJYi0+eXlf
ZmlsbF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRo
ZW4gcHBfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KKyAgICAgKiBjYWxsZWQgZnJvbSBwcHJl
c3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAgKiBJbiB0aGF0IGNh
c2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCisgICAgICov
CisgICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpeworICAgICAgICBiLT55eV9ic19saW5l
bm8gPSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOworICAgIH0KKworICAgICAgICBi
LT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJZXJybm8gPSBvZXJybm87Cit9CisKKy8q
KiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9J
TlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUg
Zmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCAhIGIgKQor
CQlyZXR1cm47CisKKwliLT55eV9uX2NoYXJzID0gMDsKKworCS8qIFdlIGFsd2F5cyBuZWVkIHR3
byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFu
c2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkg
KiBhIGphbSBpbiB0aGF0IHN0YXRlLgorCSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUjsKKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
CisKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKKworCWItPnl5X2F0X2JvbCA9
IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlpZiAoIGIgPT0g
WVlfQ1VSUkVOVF9CVUZGRVIgKQorCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
K30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0
YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFs
bG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZl
ciBUaGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgorICovCit2b2lkIHBwcHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVm
ZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQor
CQlyZXR1cm47CisKKwlwcGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKworCS8qIFRo
aXMgYmxvY2sgaXMgY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwor
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7
CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2Ug
dG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tf
dG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNv
cGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJcHBfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQor
CisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2Vu
dC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCisgKiAgQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBwb3BfYnVmZmVyX3N0
YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJ
CXJldHVybjsKKworCXBwX2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5l
cik7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwlpZiAoeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wID4gMCkKKwkJLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7CisKKwlpZiAo
WVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7
CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9CisKKy8qIEFs
bG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBz
cGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHBwZW5zdXJlX2J1
ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5X3NpemVfdCBudW1fdG9fYWxs
b2M7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFsbG9j
YXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlz
CisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBv
ZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwu
CisgICAgICAgICAqLworCQludW1fdG9fYWxsb2MgPSAxOworCQl5eWctPnl5X2J1ZmZlcl9zdGFj
ayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHBhbGxvYworCQkJCQkJCQkobnVtX3RvX2Fs
bG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5l
cik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJ
CQkJCQkJICAKKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2Mg
KiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJCQkKKwkJeXlnLT55eV9idWZm
ZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3Ag
PSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAo
eXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZm
ZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQlpbnQgZ3Jvd19zaXplID0g
OCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9IHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwcmVhbGxvYworCQkJCQkJCQkoeXlnLT55eV9idWZm
ZXJfc3RhY2ssCisJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJf
c3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBl
bnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMu
Ki8KKwkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tf
bWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJ
eXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNl
dHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1z
cGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZlci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIg
YnVmZmVyCisgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVy
IGJ1ZmZlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCisgKi8KK1lZX0JV
RkZFUl9TVEFURSBwcF9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYg
KCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8q
IFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIDA7
CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOworCisJYi0+eXlf
YnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJ
Yi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZl
ciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1
Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOwor
CWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVS
X05FVzsKKworCXBwX3N3aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7CisKKwlyZXR1cm4g
YjsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmlu
Zy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkg
b2YgQGEgc3RyLgorICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNj
YW4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0
aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKiBAbm90ZSBJZiB5b3Ug
d2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UK
KyAqICAgICAgIHBwX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICovCitZWV9CVUZGRVJfU1RBVEUg
cHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVy
KQoreworICAgIAorCXJldHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5
c2Nhbm5lcik7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4g
dGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2NhbiBm
cm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KKyAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZm
ZXIgdG8gc2NhbgorICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZm
ZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFy
ICogeXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisJY2hhciAqYnVmOworCXl5X3NpemVfdCBuLCBpOwor
ICAgIAorCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9y
IHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChjaGFy
ICopIHBwYWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKKworCWZv
ciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQlidWZbaV0gPSB5eWJ5dGVzW2ld
OworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09G
X0JVRkZFUl9DSEFSOworCisJYiA9IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwor
CWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0
ZXMoKSIgKTsKKworCS8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3
ZSBzaG91bGQgdGhyb3cgaXQKKwkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KKwkgKi8KKwliLT55
eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXJldHVybiBiOworfQorCisjaWZuZGVmIFlZX0VYSVRf
RkFJTFVSRQorI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgorI2VuZGlmCisKK3N0YXRpYyB2b2lk
IHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZ
WV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3Mg
aW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4p
IFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQu
ICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlf
TEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+
eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNy
b19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5
eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwK
KwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVu
Y3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgdXNlci1kZWZpbmVk
IGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgorICovCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKyAgICByZXR1cm4geXlleHRyYTsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBs
aW5lIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICov
CitpbnQgcHBnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAg
ICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAK
KyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51
bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQg
cHBnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAgICAgICAgaWYg
KCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBy
ZXR1cm4geXljb2x1bW47Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICpwcGdldF9pbiAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5aW47Cit9CisKKy8qKiBHZXQgdGhl
IG91dHB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqLworRklMRSAqcHBnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1
cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4K
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit5eV9zaXplX3Qg
cHBnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGVuZzsK
K30KKworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCisKK2NoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHJldHVybiB5eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIHVzZXItZGVm
aW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KKyAq
IEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
c2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2
b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOworfQorCisvKiogU2V0
IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9saW5lbm8g
KGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8q
IGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAg
ICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3Io
ICJwcHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAg
IAorICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQg
Y29sdW1uLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxp
ZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5U
X0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxl
ZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWNvbHVtbiA9IGNv
bHVtbl9ubzsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRp
c2NhcmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIgQSBy
ZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
KyAqIEBzZWUgcHBfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHBwc2V0X2luIChGSUxFICog
IGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0ciA7Cit9
CisKK3ZvaWQgcHBzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2Fu
bmVyOworICAgIHl5b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCBwcGdldF9kZWJ1ZyAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3ZvaWQg
cHBzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5
eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXls
dmFsIGFuZCB5eWxsb2MgKi8KKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworICAgIHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgcHBzZXRfbHZhbCAoWVlT
VFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5bHZh
bCA9IHl5bHZhbF9wYXJhbTsKK30KKworWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGxvYzsKK30KKyAgICAKK3ZvaWQgcHBzZXRfbGxv
YyAoWVlMVFlQRSAqICB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAg
IHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKK30KKyAgICAKKy8qIFVzZXItdmlzaWJsZSBBUEkgKi8K
KworLyogcHBsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5l
ciBpdHNlbGYsIHNvIGl0IGlzCisgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBk
b2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgKiBUaGF0J3Mg
d2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2lu
ZyBvdXIgbWFjcm9zLgorICovCisKK2ludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xv
YmFscykKKworeworICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJy
bm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICpwdHJfeXlfZ2xv
YmFscyA9ICh5eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5V
TEwgKTsKKworICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5v
ID0gRU5PTUVNOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBCeSBzZXR0aW5n
IHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgw
MCBmb3IgcmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVv
ZihzdHJ1Y3QgeXlndXRzX3QpKTsKKworICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRy
X3l5X2dsb2JhbHMgKTsKK30KKworLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVu
Y3Rpb25hbGl0eSBhcyBwcGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKKyAqIGNvbnZlbnRpb24g
b2YgdGFraW5nIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIs
IHRoYXQKKyAqIHRoaXMgaXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJl
IGFsbG9jYXRlZCBieSB0aGlzIGNhbGwgKGFuZAorICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkg
dGhpcyBmdW5jdGlvbiBhbHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgorICog
VGhlIHVzZXIgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFp
bGFibGUgdG8gcHBhbGxvYyBpbgorICogdGhlIHl5ZXh0cmEgZmllbGQuCisgKi8KKworaW50IHBw
bGV4X2luaXRfZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0
cl95eV9nbG9iYWxzICkKKworeworICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7CisK
KyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKKworICAg
IGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKwkKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2Fu
X3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7
CisJCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBF
Tk9NRU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICAvKiBCeSBzZXR0aW5n
IHRvIDB4QUEsIHdlIGV4cG9zZSBidWdzIGluCisgICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBh
dCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAs
c2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworICAgIAorICAgIHBwc2V0X2V4dHJhICh5eV91c2Vy
X2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7CisgICAgCisgICAgcmV0dXJuIHl5X2luaXRfZ2xv
YmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFs
cyAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUg
c2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBmcm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVy
ZS4KKyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKKyAgICB5eWctPnl5
X2J1ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7
CisgICAgeXlnLT55eV9jX2J1Zl9wID0gKGNoYXIgKikgMDsKKyAgICB5eWctPnl5X2luaXQgPSAw
OworICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIg
PSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3Rh
cnRfc3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9T
VERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAg
ICB5eWluID0gKEZJTEUgKikgMDsKKyAgICB5eW91dCA9IChGSUxFICopIDA7CisjZW5kaWYKKwor
ICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdl
IGFyZSBjYWxsZWQgYnkKKyAgICAgKiBwcGxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4g
MDsKK30KKworLyogcHBsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNo
IGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQlwcF9kZWxldGVfYnVm
ZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gTlVMTDsKKwkJcHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQorCisJ
LyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLworCXBwZnJlZSh5eWctPnl5X2J1ZmZlcl9z
dGFjayAseXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAv
KiBEZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHBwZnJlZSh5
eWctPnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlnLT55eV9zdGFydF9z
dGFjayA9IE5VTEw7CisKKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRh
bnQgaW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQorICAgICAqIHBw
bGV4KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLworICAgIHl5X2lu
aXRfZ2xvYmFscyggeXlzY2FubmVyKTsKKworICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0
IChyZWVudHJhbnQgb25seSkuICovCisgICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVy
ICk7CisgICAgeXlzY2FubmVyID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIElu
dGVybmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0
aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50
IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9
IDA7IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlmCisKKyNpZmRlZiBZ
WV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICog
cyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0g
MDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqcHBh
bGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiAo
dm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKK30KKwordm9pZCAqcHByZWFsbG9jICAodm9pZCAqIHB0
ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCS8qIFRoZSBjYXN0
IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBs
ZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJ
ICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxh
dHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3Np
Z25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRo
IGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQu
CisJICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwor
fQorCit2b2lkIHBwZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlm
cmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0
ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKK25hbWVzcGFjZSBw
cCB7CisKKy8vIFRPRE8oYWxva3ApOiBNYXhpbXVtIHRva2VuIGxlbmd0aCBzaG91bGQgaWRlYWxs
eSBiZSBzcGVjaWZpZWQgYnkKKy8vIHRoZSBwcmVwcm9jZXNzb3IgY2xpZW50LCBpLmUuLCB0aGUg
Y29tcGlsZXIuCitjb25zdCBzaXplX3QgVG9rZW5pemVyOjprTWF4VG9rZW5MZW5ndGggPSAyNTY7
CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFu
ZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKK30KKwor
VG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBkZXN0cm95U2Nhbm5lcigpOworfQorCiti
b29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNl
OworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7CisK
KyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7CisgICAg
cmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVy
KGludCBmaWxlKQoreworICAgIC8vIFdlIHVzZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVy
LgorICAgIC8vIFNlZSBtYWNybyB5eWZpbGVuby4KKyAgICBwcHNldF9jb2x1bW4oZmlsZSxtSGFu
ZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCit7Cisg
ICAgcHBzZXRfbGluZW5vKGxpbmUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgo
VG9rZW4qIHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT50ZXh0LCZ0
b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7CisgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IGtN
YXhUb2tlbkxlbmd0aCkKKyAgICB7CisgICAgICAgIG1Db250ZXh0LmRpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlRPS0VOX1RPT19MT05HLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICB0b2tl
bi0+dGV4dC5lcmFzZShrTWF4VG9rZW5MZW5ndGgpOworICAgIH0KKworICAgIHRva2VuLT5mbGFn
cyA9IDA7CisKKyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQp
OworICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7CisKKyAgICB0
b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNv
bnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nh
bm5lcigpCit7CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHBwbGV4X2luaXRfZXh0cmEo
Jm1Db250ZXh0LCZtSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHByZXN0
YXJ0KDAsbUhhbmRsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpk
ZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYgKG1IYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHBsZXhfZGVzdHJveShtSGFuZGxlKTsKKyAgICBtSGFuZGxlID0gTlVMTDsK
K30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDMxMzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2Vu
aXplci5oCkBAIC0wLDAgKzEsNTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1RPS0VOSVpFUl9IXworCisjaW5jbHVkZSAiSW5wdXQuaCIKKyNpbmNsdWRlICJMZXhlci5oIgor
I2luY2x1ZGUgInBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9z
dGljczsKKworY2xhc3MgVG9rZW5pemVyIDogcHVibGljIExleGVyCit7CisgIHB1YmxpYzoKKyAg
ICBzdHJ1Y3QgQ29udGV4dAorICAgIHsKKyAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
OworCisgICAgICAgIElucHV0IGlucHV0OworICAgICAgICAvLyBUaGUgbG9jYXRpb24gd2hlcmUg
eXl0ZXh0IHBvaW50cyB0by4gVG9rZW4gbG9jYXRpb24gc2hvdWxkIHRyYWNrCisgICAgICAgIC8v
IHNjYW5Mb2MgaW5zdGVhZCBvZiBJbnB1dDo6bVJlYWRMb2MgYmVjYXVzZSB0aGV5IG1heSBub3Qg
YmUgdGhlIHNhbWUKKyAgICAgICAgLy8gaWYgdGV4dCBpcyBidWZmZXJlZCB1cCBpbiB0aGUgc2Nh
bm5lciBpbnB1dCBidWZmZXIuCisgICAgICAgIElucHV0OjpMb2NhdGlvbiBzY2FuTG9jOworCisg
ICAgICAgIGJvb2wgbGVhZGluZ1NwYWNlOworICAgICAgICBib29sIGxpbmVTdGFydDsKKyAgICB9
OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBrTWF4VG9rZW5MZW5ndGg7CisKKyAgICBU
b2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKKyAgICB+VG9rZW5pemVyKCk7CisK
KyAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29u
c3QgaW50IGxlbmd0aFtdKTsKKworICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7Cisg
ICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgo
VG9rZW4qIHRva2VuKTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUb2tlbml6ZXIpOworICAgIGJvb2wgaW5pdFNjYW5uZXIoKTsKKyAgICB2b2lkIGRlc3Ry
b3lTY2FubmVyKCk7CisKKyAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBoYW5kbGUuCisg
ICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCit9OworCit9ICAvLyBuYW1l
c3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42ODlhZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubApAQCAtMCwwICsxLDM0MCBAQAor
LyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNp
ZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZp
c3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJ
UyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyV0
b3B7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCit9CisKKyV7CisjaW5jbHVkZSAiVG9rZW5p
emVyLmgiCisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJUb2tlbi5o
IgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5l
cmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVuY3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5n
IFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2Ug
dGhlIHVudXNlZCB5eWNvbHVtbiB2YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJl
ci4KKyNkZWZpbmUgeXlmaWxlbm8geXljb2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAg
ICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB5eWZpbGVubyA9IDA7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxp
bmVubyA9IDE7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3Bh
Y2UgPSBmYWxzZTsgXAorICAgICAgICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAor
ICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0g
Jnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAgICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+
c0luZGV4IDwgaW5wdXQtPmNvdW50KCkpICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgIChzY2FuTG9jLT5jSW5kZXggPj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkg
XAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxl
bmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5
bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0g
eXlsZW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgw
KTsKKworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3Vs
dCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQoYnVmLCBtYXhTaXplKTsKKworJX0KKworJW9wdGlvbiBu
b3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIHJlZW50cmFudCBiaXNv
bi1icmlkZ2UgYmlzb24tbG9jYXRpb25zCislb3B0aW9uIHByZWZpeD0icHAiCislb3B0aW9uIGV4
dHJhLXR5cGU9InBwOjpUb2tlbml6ZXI6OkNvbnRleHQqIgorJXggQ09NTUVOVAorCitORVdMSU5F
ICAgICBcbnxccnxcclxuCitJREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCitQVU5D
VFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQorCitERUNJTUFMX0NPTlNUQU5UICAg
ICAgWzEtOV1bMC05XSoKK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCitIRVhBREVDSU1B
TF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKKworRElHSVQgICAgICAgICAgICAgICAgWzAt
OV0KK0VYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0rCitGUkFDVElPTkFMX0NP
TlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorCislJQorCisgICAg
LyogTGluZSBjb21tZW50ICovCisiLy8iW15cclxuXSoKKworICAgIC8qIEJsb2NrIGNvbW1lbnQg
Ki8KKyAgICAvKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAq
LworICAgIC8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAK
KyIvKiIgeyBCRUdJTihDT01NRU5UKTsgfQorPENPTU1FTlQ+W14qXHJcbl0rCis8Q09NTUVOVD4i
KiIKKzxDT01NRU5UPntORVdMSU5FfSB7ICsreXlsaW5lbm87IH0KKzxDT01NRU5UPiIqLyIgewor
ICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9
CisKKyMgeworICAgIC8vICMgaXMgb25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVw
cm9jZXNzb3IgZGlyZWN0aXZlcy4KKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwor
ICAgIHJldHVybiB5eWV4dHJhLT5saW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6
VG9rZW46OlBQX09USEVSOworfQorCit7SURFTlRJRklFUn0geworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQor
Cit7REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RB
TlR9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6Q09OU1RfSU5UOworfQorCisoe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJB
Q1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOworfQor
CisgICAgLyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0g
bXVzdCBiZSBhIG51bWJlci4gKi8KKyAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGlu
dGVnZXJzIGFuZCBmbG9hdHMuICovCisoe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJ
VH0rW19hLXpBLVowLTkuXSopIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfTlVNQkVSOworfQorCisiKysiIHsKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5D
OworfQorIi0tIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0RFQzsKK30KKyI8PCIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOworfQorIj4+IiB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX1JJR0hUOworfQorIjw9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOworfQorIj49IiB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOwor
fQorIj09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX0VROworfQorIiE9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorIiYmIiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X0FORDsKK30KKyJeXiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1I7Cit9CisifHwiIHsKKyAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisiKz0i
IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfQUREX0FTU0lHTjsKK30KKyItPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOworfQorIio9
IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisiLz0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKK30KKyIl
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9NT0RfQVNTSUdOOworfQorIjw8PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKK30K
KyI+Pj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOworfQorIiY9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047
Cit9CisiXj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKK30KKyJ8PSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047
Cit9CisKK3tQVU5DVFVBVE9SfSB7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsK
KyAgICByZXR1cm4geXl0ZXh0WzBdOworfQorCitbIFx0XHZcZl0rICAgeyB5eWV4dHJhLT5sZWFk
aW5nU3BhY2UgPSB0cnVlOyB9CisKK3tORVdMSU5FfSB7CisgICAgKyt5eWxpbmVubzsKKyAgICB5
eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKKyAgICByZXR1cm4gJ1xuJzsKK30KKworLiB7CisgICAg
eXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9P
VEhFUjsKK30KKworPCo+PDxFT0Y+PiB7CisgICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGlu
dm9rZWQgZm9yIGhhbmRsaW5nIEVPRi4KKyAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0Yg
dG9rZW4gbWFudWFsbHkuCisgICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsK
KyAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7Cisg
ICAgaW50IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7CisgICAg
aWYgKHNjYW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCisgICAgeworICAgICAgICAvLyBXZSBj
YW4gb25seSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQorICAg
ICAgICAvLyBlbmQgb2YgdGhlIGlucHV0LgorICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5k
ZXhNYXg7IHNjYW5Mb2MtPmNJbmRleCA9IDA7CisgICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4
OyB5eWxpbmVubyA9IDE7CisgICAgfQorICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOworICAg
IHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOworICAgIHl5bHZhbC0+Y2xlYXIoKTsKKworICAgIGlm
IChZWV9TVEFSVCA9PSBDT01NRU5UKQorICAgIHsKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3Rp
Y3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXls
aW5lbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKKyAgICB9
CisgICAgeXl0ZXJtaW5hdGUoKTsKK30KKworJSUKKworbmFtZXNwYWNlIHBwIHsKKworLy8gVE9E
TyhhbG9rcCk6IE1heGltdW0gdG9rZW4gbGVuZ3RoIHNob3VsZCBpZGVhbGx5IGJlIHNwZWNpZmll
ZCBieQorLy8gdGhlIHByZXByb2Nlc3NvciBjbGllbnQsIGkuZS4sIHRoZSBjb21waWxlci4KK2Nv
bnN0IHNpemVfdCBUb2tlbml6ZXI6OmtNYXhUb2tlbkxlbmd0aCA9IDI1NjsKKworVG9rZW5pemVy
OjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK3sKKyAg
ICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOworfQorCitUb2tlbml6ZXI6On5U
b2tlbml6ZXIoKQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9CisKK2Jvb2wgVG9rZW5pemVy
Ojppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSkKK3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKChj
b3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxzZTsKKworICAgIG1Db250ZXh0
LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKKyAgICByZXR1cm4gaW5pdFNj
YW5uZXIoKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCit7
CisgICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCisgICAgLy8gU2Vl
IG1hY3JvIHl5ZmlsZW5vLgorICAgIHl5c2V0X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsKK30KKwor
dm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCit7CisgICAgeXlzZXRfbGlu
ZW5vKGxpbmUsIG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tl
bikKK3sKKyAgICB0b2tlbi0+dHlwZSA9IHl5bGV4KCZ0b2tlbi0+dGV4dCwgJnRva2VuLT5sb2Nh
dGlvbiwgbUhhbmRsZSk7CisgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IGtNYXhUb2tlbkxl
bmd0aCkKKyAgICB7CisgICAgICAgIG1Db250ZXh0LmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OlRPS0VOX1RPT19MT05HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICB0b2tlbi0+dGV4dC5l
cmFzZShrTWF4VG9rZW5MZW5ndGgpOworICAgIH0KKworICAgIHRva2VuLT5mbGFncyA9IDA7CisK
KyAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOworICAgIG1D
b250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09ICdcbic7CisKKyAgICB0b2tlbi0+c2V0
SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdTcGFjZSk7CisgICAgbUNvbnRleHQubGVh
ZGluZ1NwYWNlID0gZmFsc2U7Cit9CisKK2Jvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCit7
CisgICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHl5bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0
LCAmbUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHl5cmVzdGFydCgwLCBt
SGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lT
Y2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisK
KyAgICB5eWxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBOVUxMOworfQorCit9
ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzkxNThkMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYworKysgL2Rldi9udWxsCkBAIC0xLDczNyAr
MCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
Ci0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgot
UFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi0vLwotLy8gYXRvbS5jCi0vLwotCi0jaW5jbHVkZSA8c3RkbGli
Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0KLSN1bmRlZiBtYWxsb2MK
LSN1bmRlZiByZWFsbG9jCi0jdW5kZWYgZnJlZQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
IFN0cmluZyB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXN0YXRpYyBjb25zdCBzdHJ1
Y3QgewotICAgIGludCB2YWw7Ci0gICAgY29uc3QgY2hhciAqc3RyOwotfSB0b2tlbnNbXSA9IHsK
LSAgICB7IENQUF9BTkRfT1AsICAgICAgICAgIiYmIiB9LAotICAgIHsgQ1BQX0FORF9BU1NJR04s
ICAgICAiJj0iIH0sCi0gICAgeyBDUFBfU1VCX0FTU0lHTiwgICAgICItPSIgfSwKLSAgICB7IENQ
UF9NT0RfQVNTSUdOLCAgICAgIiU9IiB9LAotICAgIHsgQ1BQX0FERF9BU1NJR04sICAgICAiKz0i
IH0sCi0gICAgeyBDUFBfRElWX0FTU0lHTiwgICAgICIvPSIgfSwKLSAgICB7IENQUF9NVUxfQVNT
SUdOLCAgICAgIio9IiB9LAotICAgIHsgQ1BQX1JJR0hUX0JSQUNLRVQsICAiOj4iIH0sCi0gICAg
eyBDUFBfRVFfT1AsICAgICAgICAgICI9PSIgfSwKLSAgICB7IENQUF9YT1JfT1AsICAgICAgICAg
Il5eIiB9LCAKLSAgICB7IENQUF9YT1JfQVNTSUdOLCAgICAgIl49IiB9LCAKLSAgICB7IENQUF9G
TE9BVENPTlNUQU5ULCAgIjxmbG9hdC1jb25zdD4iIH0sCi0gICAgeyBDUFBfR0VfT1AsICAgICAg
ICAgICI+PSIgfSwKLSAgICB7IENQUF9SSUdIVF9PUCwgICAgICAgIj4+IiB9LAotICAgIHsgQ1BQ
X1JJR0hUX0FTU0lHTiwgICAiPj49IiB9LCAKLSAgICB7IENQUF9JREVOVElGSUVSLCAgICAgIjxp
ZGVudD4iIH0sCi0gICAgeyBDUFBfSU5UQ09OU1RBTlQsICAgICI8aW50LWNvbnN0PiIgfSwKLSAg
ICB7IENQUF9MRV9PUCwgICAgICAgICAgIjw9IiB9LAotICAgIHsgQ1BQX0xFRlRfT1AsICAgICAg
ICAiPDwiIH0sCi0gICAgeyBDUFBfTEVGVF9BU1NJR04sICAgICI8PD0iIH0sCi0gICAgeyBDUFBf
TEVGVF9CUkFDS0VULCAgICI8OiIgfSwKLSAgICB7IENQUF9MRUZUX0JSQUNFLCAgICAgIjwlIiB9
LCAKLSAgICB7IENQUF9ERUNfT1AsICAgICAgICAgIi0tIiB9LAotICAgIHsgQ1BQX1JJR0hUX0JS
QUNFLCAgICAiJT4iIH0sIAotICAgIHsgQ1BQX05FX09QLCAgICAgICAgICAiIT0iIH0sCi0gICAg
eyBDUFBfT1JfT1AsICAgICAgICAgICJ8fCIgfSwKLSAgICB7IENQUF9PUl9BU1NJR04sICAgICAg
Inw9IiB9LCAKLSAgICB7IENQUF9JTkNfT1AsICAgICAgICAgIisrIiB9LAotICAgIHsgQ1BQX1NU
UkNPTlNUQU5ULCAgICAiPHN0cmluZy1jb25zdD4iIH0sCi0gICAgeyBDUFBfVFlQRUlERU5USUZJ
RVIsICI8dHlwZS1pZGVudD4iIH0sCi19OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFN0
cmluZyB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNkZWZpbmUgSU5JVF9TVFJJTkdf
VEFCTEVfU0laRSAxNjM4NAotCi10eXBlZGVmIHN0cnVjdCBTdHJpbmdUYWJsZV9SZWMgewotICAg
IGNoYXIgKnN0cmluZ3M7Ci0gICAgaW50IG5leHRGcmVlOwotICAgIGludCBzaXplOwotfSBTdHJp
bmdUYWJsZTsKLQotLyoKLSAqIEluaXRTdHJpbmdUYWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUgc3Ry
aW5nIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEluaXRTdHJpbmdUYWJsZShTdHJpbmdU
YWJsZSAqc3RhYmxlKQotewotICAgIHN0YWJsZS0+c3RyaW5ncyA9IChjaGFyICopIG1hbGxvYyhJ
TklUX1NUUklOR19UQUJMRV9TSVpFKTsKLSAgICBpZiAoIXN0YWJsZS0+c3RyaW5ncykKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgLy8gWmVyby10aCBvZmZzZXQgbWVhbnMgImVtcHR5IiBzbyBkb24n
dCB1c2UgaXQuCi0gICAgc3RhYmxlLT5uZXh0RnJlZSA9IDE7Ci0gICAgc3RhYmxlLT5zaXplID0g
SU5JVF9TVFJJTkdfVEFCTEVfU0laRTsKLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdFN0cmluZ1Rh
YmxlCi0KLS8qCi0gKiBGcmVlU3RyaW5nVGFibGUoKSAtIEZyZWUgdGhlIHN0cmluZyB0YWJsZS4K
LSAqCi0gKi8KLQotc3RhdGljIHZvaWQgRnJlZVN0cmluZ1RhYmxlKFN0cmluZ1RhYmxlICpzdGFi
bGUpCi17Ci0gICAgaWYgKHN0YWJsZS0+c3RyaW5ncykKLSAgICAgICAgZnJlZShzdGFibGUtPnN0
cmluZ3MpOwotICAgIHN0YWJsZS0+c3RyaW5ncyA9IE5VTEw7Ci0gICAgc3RhYmxlLT5uZXh0RnJl
ZSA9IDA7Ci0gICAgc3RhYmxlLT5zaXplID0gMDsKLX0gLy8gRnJlZVN0cmluZ1RhYmxlCi0KLS8q
Ci0gKiBIYXNoU3RyaW5nKCkgLSBIYXNoIGEgc3RyaW5nIHdpdGggdGhlIGJhc2UgaGFzaCBmdW5j
dGlvbi4KLSAqCi0gKi8KLQotc3RhdGljIGludCBIYXNoU3RyaW5nKGNvbnN0IGNoYXIgKnMpCi17
Ci0gICAgaW50IGh2YWwgPSAwOwotCi0gICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgIGh2YWwgPSAo
aHZhbCoxMzUwNyArICpzKjE5NykgXiAoaHZhbCA+PiAyKTsKLSAgICAgICAgcysrOwotICAgIH0K
LSAgICByZXR1cm4gaHZhbCAmIDB4N2ZmZmZmZmY7Ci19IC8vIEhhc2hTdHJpbmcKLQotLyoKLSAq
IEhhc2hTdHJpbmcyKCkgLSBIYXNoIGEgc3RyaW5nIHdpdGggdGhlIGluY3JpbWVudGluZyBoYXNo
IGZ1bmN0aW9uLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEhhc2hTdHJpbmcyKGNvbnN0IGNoYXIg
KnMpCi17Ci0gICAgaW50IGh2YWwgPSAwOwotCi0gICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgIGh2
YWwgPSAoaHZhbCo3MjkgKyAqcyozNykgXiAoaHZhbCA+PiAxKTsKLSAgICAgICAgcysrOwotICAg
IH0KLSAgICByZXR1cm4gaHZhbDsKLX0gLy8gSGFzaFN0cmluZzIKLQotLyoKLSAqIEFkZFN0cmlu
ZygpIC0gQWRkIGEgc3RyaW5nIHRvIGEgc3RyaW5nIHRhYmxlLiAgUmV0dXJuIGl0J3Mgb2Zmc2V0
LgotICoKLSAqLwotCi1zdGF0aWMgaW50IEFkZFN0cmluZyhTdHJpbmdUYWJsZSAqc3RhYmxlLCBj
b25zdCBjaGFyICpzKQotewotICAgIGludCBsZW4sIGxvYzsKLSAgICBjaGFyICpzdHI7Ci0KLSAg
ICBsZW4gPSAoaW50KSBzdHJsZW4ocyk7Ci0gICAgd2hpbGUgKHN0YWJsZS0+bmV4dEZyZWUgKyBs
ZW4gKyAxID49IHN0YWJsZS0+c2l6ZSkgewotICAgICAgICBhc3NlcnQoc3RhYmxlLT5zaXplIDwg
MTAwMDAwMCk7Ci0gICAgICAgIHN0ciA9IChjaGFyICopIG1hbGxvYyhzdGFibGUtPnNpemUqMik7
Ci0gICAgICAgIG1lbWNweShzdHIsIHN0YWJsZS0+c3RyaW5ncywgc3RhYmxlLT5zaXplKTsKLSAg
ICAgICAgZnJlZShzdGFibGUtPnN0cmluZ3MpOwotICAgICAgICBzdGFibGUtPnN0cmluZ3MgPSBz
dHI7Ci0gICAgICAgIHN0YWJsZS0+c2l6ZSA9IHN0YWJsZS0+c2l6ZSoyOwotICAgIH0KLSAgICBs
b2MgPSBzdGFibGUtPm5leHRGcmVlOwotICAgIHN0cmNweSgmc3RhYmxlLT5zdHJpbmdzW2xvY10s
IHMpOwotICAgIHN0YWJsZS0+bmV4dEZyZWUgKz0gbGVuICsgMTsKLSAgICByZXR1cm4gbG9jOwot
fSAvLyBBZGRTdHJpbmcKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gSGFzaCB0YWJsZTog
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jZGVmaW5lIElOSVRfSEFTSF9UQUJMRV9TSVpFIDIw
NDcKLSNkZWZpbmUgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyAzCi0KLXR5cGVkZWYgc3RydWN0
IEhhc2hFbnRyeV9SZWMgewotICAgIGludCBpbmRleDsgICAgICAvLyBTdHJpbmcgdGFibGUgb2Zm
c2V0IG9mIHN0cmluZyByZXByZXNlbnRhdGlvbgotICAgIGludCB2YWx1ZTsgICAgICAvLyBBdG9t
IChzeW1ib2wpIHZhbHVlCi19IEhhc2hFbnRyeTsKLQotdHlwZWRlZiBzdHJ1Y3QgSGFzaFRhYmxl
X1JlYyB7Ci0gICAgSGFzaEVudHJ5ICplbnRyeTsKLSAgICBpbnQgc2l6ZTsKLSAgICBpbnQgZW50
cmllczsKLSAgICBpbnQgY291bnRzW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsKLX0g
SGFzaFRhYmxlOwotCi0vKgotICogSW5pdEhhc2hUYWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUgaGFz
aCB0YWJsZS4KLSAqCi0gKi8KLQotc3RhdGljIGludCBJbml0SGFzaFRhYmxlKEhhc2hUYWJsZSAq
aHRhYmxlLCBpbnQgZnNpemUpCi17Ci0gICAgaW50IGlpOwotCi0gICAgaHRhYmxlLT5lbnRyeSA9
IChIYXNoRW50cnkgKikgbWFsbG9jKHNpemVvZihIYXNoRW50cnkpKmZzaXplKTsKLSAgICBpZiAo
IWh0YWJsZS0+ZW50cnkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGh0YWJsZS0+c2l6ZSA9IGZz
aXplOwotICAgIGZvciAoaWkgPSAwOyBpaSA8IGZzaXplOyBpaSsrKSB7Ci0gICAgICAgIGh0YWJs
ZS0+ZW50cnlbaWldLmluZGV4ID0gMDsKLSAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0udmFsdWUg
PSAwOwotICAgIH0KLSAgICBodGFibGUtPmVudHJpZXMgPSAwOwotICAgIGZvciAoaWkgPSAwOyBp
aSA8PSBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKQotICAgICAgICBodGFibGUtPmNv
dW50c1tpaV0gPSAwOwotICAgIHJldHVybiAxOwotfSAvLyBJbml0SGFzaFRhYmxlCi0KLS8qCi0g
KiBGcmVlSGFzaFRhYmxlKCkgLSBGcmVlIHRoZSBoYXNoIHRhYmxlLgotICoKLSAqLwotCi1zdGF0
aWMgdm9pZCBGcmVlSGFzaFRhYmxlKEhhc2hUYWJsZSAqaHRhYmxlKQotewotICAgIGlmIChodGFi
bGUtPmVudHJ5KQotICAgICAgICBmcmVlKGh0YWJsZS0+ZW50cnkpOwotICAgIGh0YWJsZS0+ZW50
cnkgPSBOVUxMOwotICAgIGh0YWJsZS0+c2l6ZSA9IDA7Ci0gICAgaHRhYmxlLT5lbnRyaWVzID0g
MDsKLX0gLy8gRnJlZUhhc2hUYWJsZQotCi0vKgotICogRW1wdHkoKSAtIFNlZSBpZiBhIGhhc2gg
dGFibGUgZW50cnkgaXMgZW1wdHkuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgRW1wdHkoSGFzaFRh
YmxlICpodGFibGUsIGludCBoYXNobG9jKQotewotICAgIGFzc2VydChoYXNobG9jID49IDAgJiYg
aGFzaGxvYyA8IGh0YWJsZS0+c2l6ZSk7Ci0gICAgaWYgKGh0YWJsZS0+ZW50cnlbaGFzaGxvY10u
aW5kZXggPT0gMCkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9IGVsc2UgewotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci19IC8vIEVtcHR5Ci0KLS8qCi0gKiBNYXRjaCgpIC0gU2VlIGlmIGEg
aGFzaCB0YWJsZSBlbnRyeSBpcyBtYXRjaGVzIGEgc3RyaW5nLgotICoKLSAqLwotCi1zdGF0aWMg
aW50IE1hdGNoKEhhc2hUYWJsZSAqaHRhYmxlLCBTdHJpbmdUYWJsZSAqc3RhYmxlLCBjb25zdCBj
aGFyICpzLCBpbnQgaGFzaGxvYykKLXsKLSAgICBpbnQgc3RybG9jOwotCi0gICAgc3RybG9jID0g
aHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleDsKLSAgICBpZiAoIXN0cmNtcChzLCAmc3RhYmxl
LT5zdHJpbmdzW3N0cmxvY10pKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLX0gLy8gTWF0Y2gKLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8gQXRvbSB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jZGVmaW5lIElO
SVRfQVRPTV9UQUJMRV9TSVpFIDEwMjQKLQotCi1zdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7Ci0gICAg
U3RyaW5nVGFibGUgc3RhYmxlOyAvLyBTdHJpbmcgdGFibGUuCi0gICAgSGFzaFRhYmxlIGh0YWJs
ZTsgICAvLyBIYXNoZXMgc3RyaW5nIHRvIGF0b20gbnVtYmVyIGFuZCB0b2tlbiB2YWx1ZS4gIE11
bHRpcGxlIHN0cmluZ3MgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRoZSBz
YW1lIHRva2VuIHZhbHVlIGJ1dCBlYWNoIHVuaXF1ZSBzdHJpbmcgaXMgYSB1bmlxdWUgYXRvbS4K
LSAgICBpbnQgKmFtYXA7ICAgICAgICAgIC8vIE1hcHMgYXRvbSB2YWx1ZSB0byBvZmZzZXQgaW4g
c3RyaW5nIHRhYmxlLiAgQXRvbXMgYWxsIG1hcCB0byB1bmlxdWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHN0cmluZ3MgZXhjZXB0IGZvciBzb21lIHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhl
IGxvd2VyLCBmaXhlZCBwYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgYXRv
bSB0YWJsZSB0aGF0IG1hcCB0byAiPHVuZGVmaW5lZD4iLiAgVGhlIGxvd2VzdCAyNTYgYXRvbXMK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gc2luZ2xlIGNoYXJhY3Rl
ciBBU0NJSSB2YWx1ZXMgZXhjZXB0IGZvciBhbHBoYW51bWVyaWMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYXJhY3RlcnMgYW5kICdfJywgd2hpY2ggY2FuIGJlIG90aGVyIHRva2Vucy4g
IE5leHQgY29tZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlIHRva2Vu
cyB3aXRoIHRoZWlyIGF0b20gdmFsdWVzIGVxdWFsIHRvIHRoZSB0b2tlbiB2YWx1ZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tZSBwcmVkZWZpbmVkIGF0b21zLCBmb2xsb3dl
ZCBieSB1c2VyIHNwZWNpZmllZCBpZGVudGlmaWVycy4KLSAgICBpbnQgKmFyZXY7ICAgICAgICAg
IC8vIFJldmVyc2VkIGF0b20gZm9yIHN5bWJvbCB0YWJsZSB1c2UuCi0gICAgaW50IG5leHRGcmVl
OwotICAgIGludCBzaXplOwotfTsKLQotc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IE5V
TEwsIDAsIDAgfSwgeyBOVUxMLCAwLCAwLCB7MH0gfSwgTlVMTCwgTlVMTCwgMCwgMCB9OwotQXRv
bVRhYmxlICphdGFibGUgPSAmbGF0YWJsZTsKLQotc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRv
bVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKTsKLQotLyoKLSAqIEdyb3dB
dG9tVGFibGUoKSAtIEdyb3cgdGhlIGF0b20gdGFibGUgdG8gYXQgbGVhc3QgInNpemUiIGlmIGl0
J3Mgc21hbGxlci4KLSAqCi0gKi8KLQotc3RhdGljIGludCBHcm93QXRvbVRhYmxlKEF0b21UYWJs
ZSAqYXRhYmxlLCBpbnQgc2l6ZSkKLXsKLSAgICBpbnQgKm5ld21hcCwgKm5ld3JldjsKLQotICAg
IGlmIChhdGFibGUtPnNpemUgPCBzaXplKSB7Ci0gICAgICAgIGlmIChhdGFibGUtPmFtYXApIHsK
LSAgICAgICAgICAgIG5ld21hcCA9IHJlYWxsb2MoYXRhYmxlLT5hbWFwLCBzaXplb2YoaW50KSpz
aXplKTsKLSAgICAgICAgICAgIG5ld3JldiA9IHJlYWxsb2MoYXRhYmxlLT5hcmV2LCBzaXplb2Yo
aW50KSpzaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5ld21hcCA9IG1hbGxv
YyhzaXplb2YoaW50KSpzaXplKTsKLSAgICAgICAgICAgIG5ld3JldiA9IG1hbGxvYyhzaXplb2Yo
aW50KSpzaXplKTsKLSAgICAgICAgICAgIGF0YWJsZS0+c2l6ZSA9IDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCFuZXdtYXAgfHwgIW5ld3JldikgewotICAgICAgICAgICAgLyogZmFpbGVkIHRv
IGdyb3cgLS0gZXJyb3IgKi8KLSAgICAgICAgICAgIGlmIChuZXdtYXApCi0gICAgICAgICAgICAg
ICAgYXRhYmxlLT5hbWFwID0gbmV3bWFwOwotICAgICAgICAgICAgaWYgKG5ld3JldikKLSAgICAg
ICAgICAgICAgICBhdGFibGUtPmFyZXYgPSBuZXdyZXY7Ci0gICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KCZuZXdtYXBbYXRhYmxlLT5zaXplXSwgMCwgKHNp
emUgLSBhdGFibGUtPnNpemUpICogc2l6ZW9mKGludCkpOwotICAgICAgICBtZW1zZXQoJm5ld3Jl
dlthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7
Ci0gICAgICAgIGF0YWJsZS0+YW1hcCA9IG5ld21hcDsKLSAgICAgICAgYXRhYmxlLT5hcmV2ID0g
bmV3cmV2OwotICAgICAgICBhdGFibGUtPnNpemUgPSBzaXplOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0gLy8gR3Jvd0F0b21UYWJsZQotCi0vKgotICogbFJldmVyc2UoKSAtIFJldmVyc2UgdGhl
IGJvdHRvbSAyMCBiaXRzIG9mIGEgMzIgYml0IGludC4KLSAqCi0gKi8KLQotc3RhdGljIGludCBs
UmV2ZXJzZShpbnQgZnZhbCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgaW4gPSBmdmFsOwotICAgIGlu
dCByZXN1bHQgPSAwLCBjbnQgPSAwOwotCi0gICAgd2hpbGUoaW4pIHsKLSAgICAgICAgcmVzdWx0
IDw8PSAxOwotICAgICAgICByZXN1bHQgfD0gaW4mMTsKLSAgICAgICAgaW4gPj49IDE7Ci0gICAg
ICAgIGNudCsrOwotICAgIH0KLQotICAgIC8vIERvbid0IHVzZSBhbGwgMzEgYml0cy4gIE9uZSBt
aWxsaW9uIGF0b21zIGlzIHBsZW50eSBhbmQgc29tZXRpbWVzIHRoZQotICAgIC8vIHVwcGVyIGJp
dHMgYXJlIHVzZWQgZm9yIG90aGVyIHRoaW5ncy4KLQotICAgIGlmIChjbnQgPCAyMCkKLSAgICAg
ICAgcmVzdWx0IDw8PSAyMCAtIGNudDsKLSAgICByZXR1cm4gcmVzdWx0OwotfSAvLyBsUmV2ZXJz
ZQotCi0vKgotICogQWxsb2NhdGVBdG9tKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tLiAgQXNzb2Np
YXRlZCB3aXRoIHRoZSAidW5kZWZpbmVkIiB2YWx1ZSBvZiAtMS4KLSAqCi0gKi8KLQotc3RhdGlj
IGludCBBbGxvY2F0ZUF0b20oQXRvbVRhYmxlICphdGFibGUpCi17Ci0gICAgaWYgKGF0YWJsZS0+
bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXplKQotICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwg
YXRhYmxlLT5uZXh0RnJlZSoyKTsKLSAgICBhdGFibGUtPmFtYXBbYXRhYmxlLT5uZXh0RnJlZV0g
PSAtMTsKLSAgICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0RnJlZV0gPSBsUmV2ZXJzZShhdGFi
bGUtPm5leHRGcmVlKTsKLSAgICBhdGFibGUtPm5leHRGcmVlKys7Ci0gICAgcmV0dXJuIGF0YWJs
ZS0+bmV4dEZyZWUgLSAxOwotfSAvLyBBbGxvY2F0ZUF0b20KLQotLyoKLSAqIFNldEF0b21WYWx1
ZSgpIC0gQWxsb2NhdGUgYSBuZXcgYXRvbSBhc3NvY2lhdGVkIHdpdGggImhhc2hpbmRleCIuCi0g
KgotICovCi0KLXN0YXRpYyB2b2lkIFNldEF0b21WYWx1ZShBdG9tVGFibGUgKmF0YWJsZSwgaW50
IGF0b21udW1iZXIsIGludCBoYXNoaW5kZXgpCi17Ci0gICAgYXRhYmxlLT5hbWFwW2F0b21udW1i
ZXJdID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKLSAgICBhdGFibGUt
Pmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbW51bWJlcjsKLX0gLy8gU2V0QXRv
bVZhbHVlCi0KLS8qCi0gKiBGaW5kSGFzaExvYygpIC0gRmluZCB0aGUgaGFzaCBsb2NhdGlvbiBm
b3IgdGhpcyBzdHJpbmcuICBSZXR1cm4gLTEgaXQgaGFzaCB0YWJsZSBpcyBmdWxsLgotICoKLSAq
LwotCi1zdGF0aWMgaW50IEZpbmRIYXNoTG9jKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFy
ICpzKQotewotICAgIGludCBoYXNobG9jLCBoYXNoZGVsdGEsIGNvdW50OwotICAgIGludCBGb3Vu
ZEVtcHR5U2xvdCA9IDA7Ci0gICAgaW50IGNvbGxpc2lvbltIQVNIX1RBQkxFX01BWF9DT0xMSVNJ
T05TICsgMV07Ci0KLSAgICBoYXNobG9jID0gSGFzaFN0cmluZyhzKSAlIGF0YWJsZS0+aHRhYmxl
LnNpemU7Ci0gICAgaWYgKCFFbXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7Ci0gICAg
ICAgIGlmIChNYXRjaCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJsZSwgcywgaGFzaGxv
YykpCi0gICAgICAgICAgICByZXR1cm4gaGFzaGxvYzsKLSAgICAgICAgY29sbGlzaW9uWzBdID0g
aGFzaGxvYzsKLSAgICAgICAgaGFzaGRlbHRhID0gSGFzaFN0cmluZzIocyk7Ci0gICAgICAgIGNv
dW50ID0gMDsKLSAgICAgICAgd2hpbGUgKGNvdW50IDwgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9O
UykgewotICAgICAgICAgICAgaGFzaGxvYyA9ICgoaGFzaGxvYyArIGhhc2hkZWx0YSkgJiAweDdm
ZmZmZmZmKSAlIGF0YWJsZS0+aHRhYmxlLnNpemU7Ci0gICAgICAgICAgICBpZiAoIUVtcHR5KCZh
dGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKLSAgICAgICAgICAgICAgICBpZiAoTWF0Y2goJmF0
YWJsZS0+aHRhYmxlLCAmYXRhYmxlLT5zdGFibGUsIHMsIGhhc2hsb2MpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBoYXNobG9jOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgRm91bmRFbXB0eVNsb3QgPSAxOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY291bnQrKzsKLSAgICAg
ICAgICAgIGNvbGxpc2lvbltjb3VudF0gPSBoYXNobG9jOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFGb3VuZEVtcHR5U2xvdCkgewotICAgICAgICAgICAgaWYgKGNwcC0+b3B0aW9ucy5EdW1w
QXRvbVRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgaW50IGlpOwotICAgICAgICAgICAgICAgIGNo
YXIgc3RyWzIwMF07Ci0gICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwg
IioqKiBIYXNoIGZhaWxlZCB3aXRoIG1vcmUgdGhhbiAlZCBjb2xsaXNpb25zLiBNdXN0IGluY3Jl
YXNlIGhhc2ggdGFibGUgc2l6ZS4gKioqIiwKLSAgICAgICAgICAgICAgICAgICAgICAgSEFTSF9U
QUJMRV9NQVhfQ09MTElTSU9OUyk7Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0
cik7Ci0KLSAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiKioqIE5l
dyBzdHJpbmcgXCIlc1wiLCBoYXNoPSUwNHgsIGRlbHRhPSUwNHgiLCBzLCBjb2xsaXNpb25bMF0s
IGhhc2hkZWx0YSk7Ci0gICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7
IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwg
IioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBlbnRyeSAlMDR4IHdpdGggXCIlc1wiIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpICsgMSwgY29sbGlzaW9uW2lpXSwgR2V0QXRv
bVN0cmluZyhhdGFibGUsIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2NvbGxpc2lvbltpaV1dLnZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGF0YWJsZS0+aHRhYmxlLmNvdW50c1tjb3VudF0rKzsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGFzaGxvYzsKLX0gLy8gRmluZEhhc2hMb2MKLQot
LyoKLSAqIEluY3JlYXNlSGFzaFRhYmxlU2l6ZSgpCi0gKgotICovCi0KLXN0YXRpYyBpbnQgSW5j
cmVhc2VIYXNoVGFibGVTaXplKEF0b21UYWJsZSAqYXRhYmxlKQotewotICAgIGludCBpaSwgc3Ry
bG9jLCBvbGRoYXNobG9jLCB2YWx1ZSwgc2l6ZTsKLSAgICBBdG9tVGFibGUgb2xkdGFibGU7Ci0g
ICAgY2hhciAqczsKLQotICAgIC8vIFNhdmUgdGhlIG9sZCBhdG9tIHRhYmxlIGFuZCBjcmVhdGUg
YSBuZXcgb25lOgotCi0gICAgb2xkdGFibGUgPSAqYXRhYmxlOwotICAgIHNpemUgPSBvbGR0YWJs
ZS5odGFibGUuc2l6ZSoyICsgMTsKLSAgICBpZiAoIUluaXRBdG9tVGFibGUoYXRhYmxlLCBzaXpl
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBBZGQgYWxsIHRoZSBleGlzdGluZyB2YWx1
ZXMgdG8gdGhlIG5ldyBhdG9tIHRhYmxlIHByZXNlcnZpbmcgdGhlaXIgYXRvbSB2YWx1ZXM6Ci0K
LSAgICBmb3IgKGlpID0gYXRhYmxlLT5uZXh0RnJlZTsgaWkgPCBvbGR0YWJsZS5uZXh0RnJlZTsg
aWkrKykgewotICAgICAgICBzdHJsb2MgPSBvbGR0YWJsZS5hbWFwW2lpXTsKLSAgICAgICAgcyA9
ICZvbGR0YWJsZS5zdGFibGUuc3RyaW5nc1tzdHJsb2NdOwotICAgICAgICBvbGRoYXNobG9jID0g
RmluZEhhc2hMb2MoJm9sZHRhYmxlLCBzKTsKLSAgICAgICAgYXNzZXJ0KG9sZGhhc2hsb2MgPj0g
MCk7Ci0gICAgICAgIHZhbHVlID0gb2xkdGFibGUuaHRhYmxlLmVudHJ5W29sZGhhc2hsb2NdLnZh
bHVlOwotICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCBzLCB2YWx1ZSk7Ci0gICAgfQotICAg
IEZyZWVBdG9tVGFibGUoJm9sZHRhYmxlKTsKLSAgICByZXR1cm4gMTsKLX0gLy8gSW5jcmVhc2VI
YXNoVGFibGVTaXplCi0KLS8qCi0gKiBMb29rVXBBZGRTdHJpbmdIYXNoKCkgLSBMb29rdXAgYSBz
dHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVyZSwgYWRkIGl0IGFuZAot
ICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUgdG8g
MC4gIFJldHVybiB0aGUgaGFzaCB0YWJsZSBpbmRleC4KLSAqLwotCi1zdGF0aWMgaW50IExvb2tV
cEFkZFN0cmluZ0hhc2goQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAg
aW50IGhhc2hsb2MsIHN0cmxvYzsKLQotICAgIHdoaWxlKDEpIHsKLSAgICAgICAgaGFzaGxvYyA9
IEZpbmRIYXNoTG9jKGF0YWJsZSwgcyk7Ci0gICAgICAgIGlmIChoYXNobG9jID49IDApCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW5jcmVhc2VIYXNoVGFibGVTaXplKGF0YWJsZSk7Ci0g
ICAgfQotCi0gICAgaWYgKEVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKLSAgICAg
ICAgYXRhYmxlLT5odGFibGUuZW50cmllcysrOwotICAgICAgICBzdHJsb2MgPSBBZGRTdHJpbmco
JmF0YWJsZS0+c3RhYmxlLCBzKTsKLSAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGxv
Y10uaW5kZXggPSBzdHJsb2M7Ci0gICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hsb2Nd
LnZhbHVlID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc2hsb2M7Ci19IC8vIExvb2tVcEFkZFN0
cmluZ0hhc2gKLQotLyoKLSAqIExvb2tVcEFkZFN0cmluZygpIC0gTG9va3VwIGEgc3RyaW5nIGlu
IHRoZSBoYXNoIHRhYmxlLiAgSWYgaXQncyBub3QgdGhlcmUsIGFkZCBpdCBhbmQKLSAqICAgICAg
ICBpbml0aWFsaXplIHRoZSBhdG9tIHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlIHRvIHRoZSBuZXh0
IGF0b20gbnVtYmVyLgotICogICAgICAgIFJldHVybiB0aGUgYXRvbSB2YWx1ZSBvZiBzdHJpbmcu
Ci0gKi8KLQotaW50IExvb2tVcEFkZFN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hh
ciAqcykKLXsKLSAgICBpbnQgaGFzaGluZGV4LCBhdG9tOwotCi0gICAgaGFzaGluZGV4ID0gTG9v
a1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOwotICAgIGF0b20gPSBhdGFibGUtPmh0YWJsZS5l
bnRyeVtoYXNoaW5kZXhdLnZhbHVlOwotICAgIGlmIChhdG9tID09IDApIHsKLSAgICAgICAgYXRv
bSA9IEFsbG9jYXRlQXRvbShhdGFibGUpOwotICAgICAgICBTZXRBdG9tVmFsdWUoYXRhYmxlLCBh
dG9tLCBoYXNoaW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gYXRvbTsKLX0gLy8gTG9va1VwQWRk
U3RyaW5nCi0KLS8qCi0gKiBHZXRBdG9tU3RyaW5nKCkKLSAqCi0gKi8KLQotY29uc3QgIGNoYXIg
KkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKQotewotICAgIGludCBz
b2Zmc2V0OwotCi0gICAgaWYgKGF0b20gPiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7
Ci0gICAgICAgIHNvZmZzZXQgPSBhdGFibGUtPmFtYXBbYXRvbV07Ci0gICAgICAgIGlmIChzb2Zm
c2V0ID4gMCAmJiBzb2Zmc2V0IDwgYXRhYmxlLT5zdGFibGUubmV4dEZyZWUpIHsKLSAgICAgICAg
ICAgIHJldHVybiAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1tzb2Zmc2V0XTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHJldHVybiAiPGludGVybmFsIGVycm9yOiBiYWQgc29mZnNldD4i
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF0b20gPT0gMCkgewotICAg
ICAgICAgICAgcmV0dXJuICI8bnVsbCBhdG9tPiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoYXRvbSA9PSBFT0YpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIjxFT0Y+IjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICI8aW52YWxpZCBh
dG9tPiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIEdldEF0b21TdHJp
bmcKLQotLyoKLSAqIEdldFJldmVyc2VkQXRvbSgpCi0gKgotICovCi0KLWludCBHZXRSZXZlcnNl
ZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKQotewotICAgIGlmIChhdG9tID4gMCAm
JiBhdG9tIDwgYXRhYmxlLT5uZXh0RnJlZSkgewotICAgICAgICByZXR1cm4gYXRhYmxlLT5hcmV2
W2F0b21dOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0gLy8gR2V0
UmV2ZXJzZWRBdG9tCi0KLS8qCi0gKiBBZGRBdG9tKCkgLSBBZGQgYSBzdHJpbmcgdG8gdGhlIGF0
b20sIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMgaWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZS4KLSAq
ICAgICAgICAgUmV0dXJuIGl0J3MgYXRvbSBpbmRleC4KLSAqLwotCi1pbnQgQWRkQXRvbShBdG9t
VGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgYXRvbTsKLQotICAgIGF0
b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzKTsKLSAgICByZXR1cm4gYXRvbTsKLX0gLy8g
QWRkQXRvbQotCi0vKgotICogQWRkQXRvbUZpeGVkKCkgLSBBZGQgYW4gYXRvbSB0byB0aGUgaGFz
aCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlLgotICogICAgICAg
ICBBc3NpZ24gaXQgdGhlIGF0b20gdmFsdWUgb2YgImF0b20iLgotICovCi0KLXN0YXRpYyBpbnQg
QWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzLCBpbnQgYXRvbSkK
LXsKLSAgICBpbnQgaGFzaGluZGV4LCBsc2l6ZTsKLQotICAgIGhhc2hpbmRleCA9IExvb2tVcEFk
ZFN0cmluZ0hhc2goYXRhYmxlLCBzKTsKLSAgICBpZiAoYXRhYmxlLT5uZXh0RnJlZSA+PSBhdGFi
bGUtPnNpemUgfHwgYXRvbSA+PSBhdGFibGUtPnNpemUpIHsKLSAgICAgICAgbHNpemUgPSBhdGFi
bGUtPnNpemUqMjsKLSAgICAgICAgaWYgKGxzaXplIDw9IGF0b20pCi0gICAgICAgICAgICBsc2l6
ZSA9IGF0b20gKyAxOwotICAgICAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwgbHNpemUpOwotICAg
IH0KLSAgICBhdGFibGUtPmFtYXBbYXRvbV0gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5k
ZXhdLmluZGV4OwotICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWUgPSBh
dG9tOwotICAgIC8vaWYgKGF0b20gPj0gYXRhYmxlLT5uZXh0RnJlZSkKLSAgICAvLyAgICBhdGFi
bGUtPm5leHRGcmVlID0gYXRvbSArIDE7Ci0gICAgd2hpbGUgKGF0b20gPj0gYXRhYmxlLT5uZXh0
RnJlZSkgewotICAgICAgICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0RnJlZV0gPSBsUmV2ZXJz
ZShhdGFibGUtPm5leHRGcmVlKTsKLSAgICAgICAgYXRhYmxlLT5uZXh0RnJlZSsrOwotICAgIH0K
LSAgICByZXR1cm4gYXRvbTsKLX0gLy8gQWRkQXRvbUZpeGVkCi0KLS8qCi0gKiBJbml0QXRvbVRh
YmxlKCkgLSBJbml0aWFsaXplIHRoZSBhdG9tIHRhYmxlLgotICoKLSAqLwotCi1pbnQgSW5pdEF0
b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSkKLXsKLSAgICB1bnNpZ25lZCBp
bnQgaWk7Ci0KLSAgICBodHNpemUgPSBodHNpemUgPD0gMCA/IElOSVRfSEFTSF9UQUJMRV9TSVpF
IDogaHRzaXplOwotICAgIGlmICghSW5pdFN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGlmICghSW5pdEhhc2hUYWJsZSgmYXRhYmxlLT5odGFibGUs
IGh0c2l6ZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXRhYmxlLT5uZXh0RnJlZSA9IDA7
Ci0gICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKLSAgICBhdGFibGUtPnNpemUgPSAwOwotICAgIEdy
b3dBdG9tVGFibGUoYXRhYmxlLCBJTklUX0FUT01fVEFCTEVfU0laRSk7Ci0gICAgaWYgKCFhdGFi
bGUtPmFtYXApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBsb3dlciBw
YXJ0IG9mIGF0b20gdGFibGUgdG8gIjx1bmRlZmluZWQ+IiBhdG9tOgotCi0gICAgQWRkQXRvbUZp
eGVkKGF0YWJsZSwgIjx1bmRlZmluZWQ+IiwgMCk7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDwgRklS
U1RfVVNFUl9UT0tFTl9TWTsgaWkrKykKLSAgICAgICAgYXRhYmxlLT5hbWFwW2lpXSA9IGF0YWJs
ZS0+YW1hcFswXTsKLQotICAgIC8vIEFkZCBzaW5nbGUgY2hhcmFjdGVyIHRva2VucyB0byB0aGUg
YXRvbSB0YWJsZToKLQotICAgIHsKLQkJY29uc3QgY2hhciAqcyA9ICJ+ISVeJiooKS0rPXwsLjw+
Lz87Oltde30jIjsKLSAgICAgICAgY2hhciB0WzJdOwotCi0gICAgICAgIHRbMV0gPSAnXDAnOwot
ICAgICAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgICAgIHRbMF0gPSAqczsKLSAgICAgICAgICAg
IEFkZEF0b21GaXhlZChhdGFibGUsIHQsIHNbMF0pOwotICAgICAgICAgICAgcysrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gQWRkIG11bHRpcGxlIGNoYXJhY3RlciBzY2FubmVyIHRva2Vu
cyA6Ci0KLSAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YodG9rZW5zKS9zaXplb2YodG9rZW5z
WzBdKTsgaWkrKykKLSAgICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdG9rZW5zW2lpXS5zdHIs
IHRva2Vuc1tpaV0udmFsKTsKLQotICAgIC8vIEFkZCBlcnJvciBzeW1ib2wgaWYgcnVubmluZyBp
biBlcnJvciBtb2RlOgotCi0gICAgaWYgKGNwcC0+b3B0aW9ucy5FcnJvck1vZGUpCi0gICAgICAg
IEFkZEF0b21GaXhlZChhdGFibGUsICJlcnJvciIsIEVSUk9SX1NZKTsKLQotICAgIEFkZEF0b20o
YXRhYmxlLCAiPCoqKiBlbmQgZml4ZWQgYXRvbXMgKioqPiIpOwotCi0gICAgcmV0dXJuIDE7Ci19
IC8vIEluaXRBdG9tVGFibGUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRGVidWcgUHJpbnRpbmcgRnVu
Y3Rpb25zOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogUHJpbnRBdG9tVGFibGUoKQotICoK
LSAqLwotCi12b2lkIFByaW50QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQotewotICAgIGlu
dCBpaTsKLSAgICBjaGFyIHN0clsyMDBdOwotCi0gICAgZm9yIChpaSA9IDA7IGlpIDwgYXRhYmxl
LT5uZXh0RnJlZTsgaWkrKykgewotICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAi
JWQ6IFwiJXNcIiIsIGlpLCAmYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbaWld
XSk7Ci0gICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7Ci0gICAgfQotICAgIHNucHJpbnRmKHN0
ciwgc2l6ZW9mKHN0ciksICJIYXNoIHRhYmxlOiBzaXplPSVkLCBlbnRyaWVzPSVkLCBjb2xsaXNp
b25zPSIsCi0gICAgICAgICAgIGF0YWJsZS0+aHRhYmxlLnNpemUsIGF0YWJsZS0+aHRhYmxlLmVu
dHJpZXMpOwotICAgIENQUERlYnVnTG9nTXNnKHN0cik7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDwg
SEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgewotICAgICAgICBzbnByaW50ZihzdHIs
IHNpemVvZihzdHIpLCAiICVkIiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7Ci0gICAgICAg
IENQUERlYnVnTG9nTXNnKHN0cik7Ci0gICAgfQotCi19IC8vIFByaW50QXRvbVRhYmxlCi0KLQot
LyoKLSAqIEdldFN0cmluZ09mQXRvbSgpCi0gKgotICovCi0KLWNoYXIqIEdldFN0cmluZ09mQXRv
bShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCi17Ci0JIGNoYXIqIGNocl9zdHI7Ci0JIGNo
cl9zdHI9JmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2F0b21dXTsKLQkgcmV0
dXJuIGNocl9zdHI7Ci19IC8vIEdldFN0cmluZ09mQXRvbQotCi0vKgotICogRnJlZUF0b21UYWJs
ZSgpIC0gRnJlZSB0aGUgYXRvbSB0YWJsZSBhbmQgYXNzb2NpYXRlZCBtZW1vcnkKLSAqCi0gKi8K
LQotdm9pZCBGcmVlQXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlKQotewotICAgIEZyZWVTdHJp
bmdUYWJsZSgmYXRhYmxlLT5zdGFibGUpOwotICAgIEZyZWVIYXNoVGFibGUoJmF0YWJsZS0+aHRh
YmxlKTsKLSAgICBpZiAoYXRhYmxlLT5hbWFwKQotICAgICAgICBmcmVlKGF0YWJsZS0+YW1hcCk7
Ci0gICAgaWYgKGF0YWJsZS0+YXJldikKLSAgICAgICAgZnJlZShhdGFibGUtPmFyZXYpOwotICAg
IGF0YWJsZS0+YW1hcCA9IE5VTEw7Ci0gICAgYXRhYmxlLT5hcmV2ID0gTlVMTDsKLSAgICBhdGFi
bGUtPm5leHRGcmVlID0gMDsKLSAgICBhdGFibGUtPnNpemUgPSAwOwotfSAvLyBGcmVlQXRvbVRh
YmxlCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgYXRvbS5jIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWQ4NGMzMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAK
LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9y
YXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0
d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZv
bGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24g
b3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFj
Y2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UK
LXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3Jl
ZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRo
ZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1s
aWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElB
IHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1v
ZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhv
dXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRl
ZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QK
LXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0
aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1
dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFy
a3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5W
SURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBm
cm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBu
byBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50
ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBh
dGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29y
a3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUK
LWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhF
IE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBX
SVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBS
RVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJ
VFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BF
UkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNU
Uy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUws
IElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZ
Ci1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RS
SUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRI
RVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Up
LCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVO
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0vLwotLy8gYXRvbS5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19BVE9NX0gpCi0j
ZGVmaW5lIF9fQVRPTV9IIDEKLQotdHlwZWRlZiBzdHJ1Y3QgQXRvbVRhYmxlX1JlYyBBdG9tVGFi
bGU7Ci0KLWV4dGVybiBBdG9tVGFibGUgKmF0YWJsZTsKLQotaW50IEluaXRBdG9tVGFibGUoQXRv
bVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotdm9pZCBGcmVlQXRvbVRhYmxlKEF0b21UYWJs
ZSAqYXRhYmxlKTsKLWludCBBZGRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpz
KTsKLXZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOwotaW50IExvb2tVcEFk
ZFN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Ci1jb25zdCBjaGFyICpH
ZXRBdG9tU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7Ci1pbnQgR2V0UmV2ZXJz
ZWRBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7Ci1jaGFyKiBHZXRTdHJpbmdPZkF0
b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKLSNlbmRpZiAvLyAhZGVmaW5lZChfX0FU
T01fSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY29tcGlsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDExODA4NTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBA
QAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNv
ZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUg
Zm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlv
biBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMg
YWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVz
ZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmli
dXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8g
dGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUK
LWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklE
SUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwg
bW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0
aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3Zp
ZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVz
dAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5k
IHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJp
YnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVt
YXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQot
TlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
IGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2Us
IG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3Jh
bnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkg
cGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13
b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBi
ZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1U
SEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMs
IFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVY
UFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJ
TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBP
UEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RV
Q1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lB
TCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBX
QVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElT
VFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hF
VEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJF
RU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLS8vCi0vLyBjb21waWxlLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX0NPTVBJ
TEVfSCkKLSNkZWZpbmUgX19DT01QSUxFX0ggMQotCi1pbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsK
LQotdHlwZWRlZiBzdHJ1Y3QgT3B0aW9uc19SZWN7Ci0gICAgY29uc3QgY2hhciAqcHJvZmlsZVN0
cmluZzsKLSAgICBpbnQgRXJyb3JNb2RlOwotICAgIGludCBRdWlldDsKLQkKLSAgICAvLyBEZWJ1
ZyBUaGUgQ29tcGlsZXIgb3B0aW9uczoKLSAgICBpbnQgRHVtcEF0b21UYWJsZTsKLX0gT3B0aW9u
czsKLQotI2RlZmluZSBNQVhfSUZfTkVTVElORyAgNjQKLXN0cnVjdCBDUFBTdHJ1Y3RfUmVjIHsK
LSAgICAvLyBQdWJsaWMgbWVtYmVycwotICAgIFNvdXJjZUxvYyAqcExhc3RTb3VyY2VMb2M7ICAv
LyBTZXQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc3RhdGVtZW50IGJ5IHRoZSB0cmVlIHdhbGtlcnMK
LSAgICBPcHRpb25zIG9wdGlvbnM7ICAgICAgICAgICAgLy8gQ29tcGlsZSBvcHRpb25zIGFuZCBw
YXJhbWV0ZXJzCi0KLSAgICAvLyBQcml2YXRlIG1lbWJlcnMKLSAgICBTb3VyY2VMb2MgbGFzdFNv
dXJjZUxvYzsKLQotICAgIC8vIFNjYW5uZXIgZGF0YToKLQotICAgIFNvdXJjZUxvYyAqdG9rZW5M
b2M7ICAgICAgICAvLyBTb3VyY2UgbG9jYXRpb24gb2YgbW9zdCByZWNlbnQgdG9rZW4gc2VlbiBi
eSB0aGUgc2Nhbm5lcgotICAgIGludCBtb3N0UmVjZW50VG9rZW47ICAgICAgICAvLyBNb3N0IHJl
Y2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCi0gICAgSW5wdXRTcmMgKmN1cnJlbnRJbnB1
dDsKLSAgICBpbnQgcHJldmlvdXNfdG9rZW47Ci0gICAgaW50IHBhc3RGaXJzdFN0YXRlbWVudDsg
ICAgIC8vIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgI3ZlcnNpb24gaXMgdGhlIGZpcnN0IHN0YXRl
bWVudCBzZWVuIGluIHRoZSBmaWxlLCBpZiBwcmVzZW50Ci0gICAgCi0Jdm9pZCAqcEM7ICAgICAg
ICAgICAgICAgICAgIC8vIHN0b3JpbmcgdGhlIHBhcnNlQ29udGV4dCBvZiB0aGUgY29tcGlsZSBv
YmplY3QgaW4gY3BwLiAgCi0gICAgIAotICAgIC8vIFByaXZhdGUgbWVtYmVyczoKLSAgICBTb3Vy
Y2VMb2MgbHRva2VuTG9jOwotCWludCBpZmRlcHRoOyAgICAgICAgICAgICAgICAvL2N1cnJlbnQg
I2lmLSNlbHNlLSNlbmRpZiBuZXN0aW5nIGluIHRoZSBjcHAuYyBmaWxlIChwcmUtcHJvY2Vzc29y
KSAgICAKLSAgICBpbnQgZWxzZWRlcHRoW01BWF9JRl9ORVNUSU5HXTsvL0tlZXAgYSB0cmFjayBv
ZiAjaWYgZGVwdGguLk1heCBhbGxvd2VkIGlzIDY0LgotICAgIGludCBlbHNldHJhY2tlcjsgICAg
ICAgICAgICAvLyNpZi0jZWxzZSBhbmQgI2VuZGlmIGNvbnN0cnVjdHMuLi5Db3VudGVyLgotICAg
IGNvbnN0IGNoYXIgKkVyck1zZzsKLSAgICBpbnQgQ29tcGlsZUVycm9yOyAgICAgICAgICAgLy9J
bmRpY2F0ZSBjb21waWxlIGVycm9yIHdoZW4gI2Vycm9yLCAjZWxzZSwjZWxpZiBtaXNtYXRjaC4K
LQotICAgIC8vCi0gICAgLy8gR2xvYmFscyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gUGFQ
YXJzZVN0cmluZ3MoKSBhbmQgeXlfaW5wdXQoKWFuZCAKLSAgICAvLyBhbHNvIGFjcm9zcyB0aGUg
ZmlsZXMuKGdlbl9nbHNsYW5nLmNwcCBhbmQgc2Nhbm5lci5jKQotICAgIC8vCi0gICAgaW50IFBh
V2hpY2hTdHI7ICAgICAgICAgICAgIC8vIHdoaWNoIHN0cmluZyB3ZSdyZSBwYXJzaW5nCi0gICAg
Y29uc3QgaW50KiBQYVN0ckxlbjsgICAgICAgIC8vIGFycmF5IG9mIGxlbmd0aHMgb2YgdGhlIFBh
QXJndiBzdHJpbmdzCi0gICAgaW50IFBhQXJnYzsgICAgICAgICAgICAgICAgIC8vIGNvdW50IG9m
IHN0cmluZ3MgaW4gdGhlIGFycmF5Ci0gICAgY29uc3QgY2hhciogY29uc3QqIFBhQXJndjsgIC8v
IG91ciBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlICAgIAotICAgIHVuc2lnbmVkIGludCB0b2tl
bnNCZWZvcmVFT0YgOiAxOwotfTsKLQotI2VuZGlmIC8vICFkZWZpbmVkKF9fQ09NUElMRV9IKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMTA3NmIuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuYworKysgL2Rldi9udWxsCkBAIC0xLDExMTggKzAsMCBAQAotLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElB
IENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgot
Y29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlv
biBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVz
ZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBk
byBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1z
b2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBi
eSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJ
QSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5W
SURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQot
Ik5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3Ry
aWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25z
LCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJl
ZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5
cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRl
eHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJ
RElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJr
cyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhj
ZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBv
ciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVy
ZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0
IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3
b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBO
byBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJF
IElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwK
LUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFM
T05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVO
VCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJ
REVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNF
LCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQot
TlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkg
T0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJ
VFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0v
LyBjcHAuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUu
aD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0MDU0KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxNTIp
Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwNikKLSNlbmRpZgotCi1zdGF0aWMgaW50IENQ
UGlmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLQotLyogRG9uJ3QgdXNlIG1lbW9yeS5jJ3MgcmVw
bGFjZW1lbnRzLCBhcyB3ZSBjbGVhbiB1cCBwcm9wZXJseSBoZXJlICovCi0jdW5kZWYgbWFsbG9j
Ci0jdW5kZWYgZnJlZQotCi1zdGF0aWMgaW50IGJpbmRBdG9tID0gMDsKLXN0YXRpYyBpbnQgY29u
c3RBdG9tID0gMDsKLXN0YXRpYyBpbnQgZGVmYXVsdEF0b20gPSAwOwotc3RhdGljIGludCBkZWZp
bmVBdG9tID0gMDsKLXN0YXRpYyBpbnQgZGVmaW5lZEF0b20gPSAwOwotc3RhdGljIGludCBlbHNl
QXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVsaWZBdG9tID0gMDsKLXN0YXRpYyBpbnQgZW5kaWZBdG9t
ID0gMDsKLXN0YXRpYyBpbnQgaWZBdG9tID0gMDsKLXN0YXRpYyBpbnQgaWZkZWZBdG9tID0gMDsK
LXN0YXRpYyBpbnQgaWZuZGVmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGluY2x1ZGVBdG9tID0gMDsK
LXN0YXRpYyBpbnQgbGluZUF0b20gPSAwOwotc3RhdGljIGludCBwcmFnbWFBdG9tID0gMDsKLXN0
YXRpYyBpbnQgdGV4dW5pdEF0b20gPSAwOwotc3RhdGljIGludCB1bmRlZkF0b20gPSAwOwotc3Rh
dGljIGludCBlcnJvckF0b20gPSAwOwotc3RhdGljIGludCBfX0xJTkVfX0F0b20gPSAwOwotc3Rh
dGljIGludCBfX0ZJTEVfX0F0b20gPSAwOwotc3RhdGljIGludCBfX1ZFUlNJT05fX0F0b20gPSAw
Owotc3RhdGljIGludCB2ZXJzaW9uQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGV4dGVuc2lvbkF0b20g
PSAwOwotCi1zdGF0aWMgU2NvcGUgKm1hY3JvcyA9IDA7Ci0jZGVmaW5lIE1BWF9NQUNST19BUkdT
ICA2NAotCi1zdGF0aWMgU291cmNlTG9jIGlmbG9jOyAvKiBvdXRlcm1vc3QgI2lmICovCi0KLWlu
dCBJbml0Q1BQKHZvaWQpCi17Ci0gICAgY2hhciAgICAgICAgYnVmZmVyWzY0XSwgKnQ7Ci0gICAg
Y29uc3QgY2hhciAgKmY7Ci0KLSAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBuZWVkZWQgYnkgdGhl
IENQUCBsaW5lIHNjYW5uZXI6Ci0gICAgYmluZEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCAiYmluZCIpOwotICAgIGNvbnN0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJjb25z
dCIpOwotICAgIGRlZmF1bHRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmF1bHQi
KTsKLSAgICBkZWZpbmVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZSIpOwot
ICAgIGRlZmluZWRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZWQiKTsKLSAg
ICBlbGlmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlbGlmIik7Ci0gICAgZWxzZUF0
b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZWxzZSIpOwotICAgIGVuZGlmQXRvbSA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsICJlbmRpZiIpOwotICAgIGlmQXRvbSA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsICJpZiIpOwotICAgIGlmZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJpZmRlZiIpOwotICAgIGlmbmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAi
aWZuZGVmIik7Ci0gICAgaW5jbHVkZUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaW5j
bHVkZSIpOwotICAgIGxpbmVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImxpbmUiKTsK
LSAgICBwcmFnbWFBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInByYWdtYSIpOwotICAg
IHRleHVuaXRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInRleHVuaXQiKTsKLSAgICB1
bmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAidW5kZWYiKTsKLQllcnJvckF0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZXJyb3IiKTsKLSAgICBfX0xJTkVfX0F0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiX19MSU5FX18iKTsKLSAgICBfX0ZJTEVfX0F0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiX19GSUxFX18iKTsKLQlfX1ZFUlNJT05fX0F0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiX19WRVJTSU9OX18iKTsKLSAgICB2ZXJzaW9uQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJ2ZXJzaW9uIik7Ci0gICAgZXh0ZW5zaW9uQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJleHRlbnNpb24iKTsKLSAgICBtYWNyb3MgPSBOZXdT
Y29wZUluUG9vbChtZW1fQ3JlYXRlUG9vbCgwLCAwKSk7Ci0gICAgc3RyY3B5KGJ1ZmZlciwgIlBS
T0ZJTEVfIik7Ci0gICAgdCA9IGJ1ZmZlciArIHN0cmxlbihidWZmZXIpOwotICAgIGYgPSBjcHAt
Pm9wdGlvbnMucHJvZmlsZVN0cmluZzsKLSAgICB3aGlsZSAoKGlzYWxudW0oKmYpIHx8ICpmID09
ICdfJykgJiYgdCA8IGJ1ZmZlciArIHNpemVvZihidWZmZXIpIC0gMSkKLSAgICAgICAgKnQrKyA9
IHRvdXBwZXIoKmYrKyk7Ci0gICAgKnQgPSAwOwotCi0gICAgUHJlZGVmaW5lSW50TWFjcm8oIkdM
X0VTIiwgMSk7Ci0gICAgUHJlZGVmaW5lSW50TWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9I
SUdIIiwgMSk7Ci0KLQlyZXR1cm4gMTsKLX0gLy8gSW5pdENQUAotCi1pbnQgRnJlZUNQUCh2b2lk
KQotewotICAgIGlmIChtYWNyb3MpCi0gICAgewotICAgICAgICBtZW1fRnJlZVBvb2wobWFjcm9z
LT5wb29sKTsKLSAgICAgICAgbWFjcm9zID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0K
LQotaW50IEZpbmFsQ1BQKHZvaWQpCi17Ci0JaWYgKGNwcC0+aWZkZXB0aCkKLQkJQ1BQRXJyb3JU
b0luZm9Mb2coIiNpZiBtaXNtYXRjaCIpOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50
IENQUGRlZmluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4sIG5hbWUs
IGFyZ3NbTUFYX01BQ1JPX0FSR1NdLCBhcmdjOwotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0g
ICAgTWFjcm9TeW1ib2wgbWFjOwotICAgIFN5bWJvbCAqc3ltYjsKLSAgICBTb3VyY2VMb2MgZHVt
bXlMb2M7Ci0gICAgbWVtc2V0KCZtYWMsIDAsIHNpemVvZihtYWMpKTsKLSAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
aWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCIjZGVmaW5lIik7Ci0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgbmFtZSA9IHl5
bHZhbHBwLT5zY19pZGVudDsKLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2VuID09ICcoJyAmJiAheXls
dmFscHAtPnNjX2ludCkgewotICAgICAgICAvLyBnYXRoZXIgYXJndW1lbnRzCi0gICAgICAgIGFy
Z2MgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAo
YXJnYyA9PSAwICYmIHRva2VuID09ICcpJykgYnJlYWs7Ci0gICAgICAgICAgICBpZiAodG9rZW4g
IT0gQ1BQX0lERU5USUZJRVIpIHsKLQkJCQlDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChhcmdjIDwgTUFYX01BQ1JPX0FSR1MpCi0gICAgICAgICAgICAgICAgYXJnc1thcmdjKytd
ID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9IHdoaWxl
ICh0b2tlbiA9PSAnLCcpOwotICAgICAgICBpZiAodG9rZW4gIT0gJyknKSB7Ci0gICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIpOwotICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgICAgICB9Ci0gICAgICAgIG1hYy5hcmdjID0gYXJnYzsKLSAgICAgICAgbWFjLmFyZ3Mg
PSBtZW1fQWxsb2MobWFjcm9zLT5wb29sLCBhcmdjICogc2l6ZW9mKGludCkpOwotICAgICAgICBt
ZW1jcHkobWFjLmFyZ3MsIGFyZ3MsIGFyZ2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LQl9Ci0gICAgbWFjLmJvZHkgPSBOZXdUb2tlblN0cmVhbShHZXRBdG9tU3RyaW5nKGF0YWJsZSwg
bmFtZSksIG1hY3Jvcy0+cG9vbCk7Ci0gICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAg
ICAgaWYgKHRva2VuID09ICdcXCcpIHsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJU
aGUgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIChcXCkgaXMgbm90IHBhcnQgb2YgdGhlIE9w
ZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIik7Ci0gICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0g
ICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPD0gMCkgeyAvLyBFT0Ygb3IgZXJyb3IKLSAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZGVmaW5l
IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIFJlY29yZFRva2VuKG1hYy5ib2R5LCB0
b2tlbiwgeXlsdmFscHApOwotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgfTsKLQotICAgIHN5bWIgPSBMb29r
VXBTeW1ib2wobWFjcm9zLCBuYW1lKTsKLSAgICBpZiAoc3ltYikgewotICAgICAgICBpZiAoIXN5
bWItPmRldGFpbHMubWFjLnVuZGVmKSB7Ci0gICAgICAgICAgICAvLyBhbHJlYWR5IGRlZmluZWQg
LS0gbmVlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaWRlbnRpY2FsCi0gICAgICAgICAgICBpZiAo
c3ltYi0+ZGV0YWlscy5tYWMuYXJnYyAhPSBtYWMuYXJnYykgZ290byBlcnJvcjsKLSAgICAgICAg
ICAgIGZvciAoYXJnYz0wOyBhcmdjIDwgbWFjLmFyZ2M7IGFyZ2MrKykKLSAgICAgICAgICAgICAg
ICBpZiAoc3ltYi0+ZGV0YWlscy5tYWMuYXJnc1thcmdjXSAhPSBtYWMuYXJnc1thcmdjXSkKLSAg
ICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIFJld2luZFRva2VuU3Ry
ZWFtKHN5bWItPmRldGFpbHMubWFjLmJvZHkpOwotICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJl
YW0obWFjLmJvZHkpOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGludCBvbGRf
bHZhbCwgb2xkX3Rva2VuOwotICAgICAgICAgICAgICAgIG9sZF90b2tlbiA9IFJlYWRUb2tlbihz
eW1iLT5kZXRhaWxzLm1hYy5ib2R5LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgb2xkX2x2
YWwgPSB5eWx2YWxwcC0+c2NfaW50OwotICAgICAgICAgICAgICAgIHRva2VuID0gUmVhZFRva2Vu
KG1hYy5ib2R5LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuICE9IG9sZF90
b2tlbiB8fCB5eWx2YWxwcC0+c2NfaW50ICE9IG9sZF9sdmFsKSB7IAotICAgICAgICAgICAgICAg
IGVycm9yOgotICAgICAgICAgICAgICAgICAgICBTdG9yZVN0cigiTWFjcm8gUmVkZWZpbmVkIik7
Ci0gICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsbmFt
ZSkpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIERlY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBJbmNMaW5lTnVtYmVy
KCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsgfQotICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gPiAwKTsKLSAgICAgICAg
fQotICAgICAgICAvL0ZyZWVNYWNybygmc3ltYi0+ZGV0YWlscy5tYWMpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGR1bW15TG9jLmZpbGUgPSAwOwotICAgICAgICBkdW1teUxvYy5saW5lID0gMDsK
LSAgICAgICAgc3ltYiA9IEFkZFN5bWJvbCgmZHVtbXlMb2MsIG1hY3JvcywgbmFtZSwgTUFDUk9f
Uyk7Ci0gICAgfQotICAgIHN5bWItPmRldGFpbHMubWFjID0gbWFjOwotICAgIHJldHVybiAnXG4n
OwotfSAvLyBDUFBkZWZpbmUKLQotc3RhdGljIGludCBDUFB1bmRlZih5eXN0eXBlcHAgKiB5eWx2
YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIFN5bWJvbCAqc3ltYjsKLQlpZih0b2tlbiA9PSAn
XG4nKXsKLQkJQ1BQRXJyb3JUb0luZm9Mb2coIiN1bmRlZiIpOwotCSAgICByZXR1cm4gdG9rZW47
Ci0gICAgfQotICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKLSAgICAgICAgICBnb3Rv
IGVycm9yOwotICAgIHN5bWIgPSBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2NfaWRl
bnQpOwotICAgIGlmIChzeW1iKSB7Ci0gICAgICAgIHN5bWItPmRldGFpbHMubWFjLnVuZGVmID0g
MTsKLSAgICB9Ci0gICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgZXJyb3I6
Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdW5kZWYiKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRva2VuOwotfSAvLyBDUFB1bmRlZgotCi0vKiBDUFBlbHNlIC0tIHNraXAgZm9yd2FyZCB0byBh
cHByb3ByaWF0ZSBzcG90LiAgVGhpcyBpcyBhY3R1YWxseSB1c2VkCi0qKiB0byBza2lwIHRvIGFu
ZCAjZW5kaWYgYWZ0ZXIgc2VlaW5nIGFuICNlbHNlLCBBTkQgdG8gc2tpcCB0byBhICNlbHNlLAot
KiogI2VsaWYsIG9yICNlbmRpZiBhZnRlciBhICNpZi8jaWZkZWYvI2lmbmRlZi8jZWxpZiB0ZXN0
IHdhcyBmYWxzZQotKi8KLQotc3RhdGljIGludCBDUFBlbHNlKGludCBtYXRjaGVsc2UsIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCBhdG9tLGRlcHRoPTA7Ci0gICAgaW50IHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LQkKLQl3aGlsZSAodG9rZW4gPiAwKSB7Ci0gICAgICAgIGlmICh0b2tlbiAhPSAnIycpIHsKLSAg
ICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAg
ICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQg
aW4gI2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCQlpZiAoKHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKSkgIT0gQ1BQX0lERU5USUZJRVIpCi0JCQljb250aW51ZTsKLSAgICAgICAg
YXRvbSA9IHl5bHZhbHBwLT5zY19pZGVudDsKLSAgICAgICAgaWYgKGF0b20gPT0gaWZBdG9tIHx8
IGF0b20gPT0gaWZkZWZBdG9tIHx8IGF0b20gPT0gaWZuZGVmQXRvbSl7Ci0gICAgICAgICAgICBk
ZXB0aCsrOyBjcHAtPmlmZGVwdGgrKzsgY3BwLT5lbHNldHJhY2tlcisrOwotICAgICAgICAgICAg
aWYgKGNwcC0+aWZkZXB0aCA+IE1BWF9JRl9ORVNUSU5HKSB7Ci0gICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIm1heCAjaWYgbmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOwotICAgICAg
ICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHNhbml0eSBjaGVjayBlbHNldHJhY2tl
cgotICAgICAgICAgICAgaWYgKGNwcC0+ZWxzZXRyYWNrZXIgPCAwIHx8IGNwcC0+ZWxzZXRyYWNr
ZXIgPj0gTUFYX0lGX05FU1RJTkcpIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xv
ZygibWlzbWF0Y2hlZCAjaWYvI2VuZGlmIHN0YXRlbWVudHMiKTsKLSAgICAgICAgICAgICAgICBj
cHAtPkNvbXBpbGVFcnJvciA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYXRvbSA9PSBlbmRpZkF0b20pIHsKLSAgICAg
ICAgICAgIGlmKC0tZGVwdGg8MCl7Ci0gICAgICAgICAgICAgICAgaWYgKGNwcC0+ZWxzZXRyYWNr
ZXIpCi0gICAgICAgICAgICAgICAgICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKLSAgICAgICAgICAg
ICAgICBpZiAoY3BwLT5pZmRlcHRoKSAKLSAgICAgICAgICAgICAgICAgICAgLS1jcHAtPmlmZGVw
dGg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLS1jcHAtPmVsc2V0cmFja2VyOwotICAgICAgICAgICAgLS1jcHAtPmlmZGVw
dGg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKChpbnQpKG1hdGNoZWxzZSkgIT0gMCkm
JiBkZXB0aD09MCkgewotCQkJaWYgKGF0b20gPT0gZWxzZUF0b20gKSB7Ci0gICAgICAgICAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2lu
ZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkg
eyAvLyBFT0Ygb3IgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgZm9sbG93aW5nICNlbHNlIHByZXByb2Nl
c3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gCi0JCQkJYnJlYWs7Ci0JCQl9IAotCQkJ
ZWxzZSBpZiAoYXRvbSA9PSBlbGlmQXRvbSkgewotICAgICAgICAgICAgICAgIC8qIHdlIGRlY3Jl
bWVudCBjcHAtPmlmZGVwdGggaGVyZSwgYmVjYXVzZSBDUFBpZiB3aWxsIGluY3JlbWVudAotICAg
ICAgICAgICAgICAgICAqIGl0IGFuZCB3ZSByZWFsbHkgd2FudCB0byBsZWF2ZSBpdCBhbG9uZSAq
LwotCQkJCWlmIChjcHAtPmlmZGVwdGgpewotCQkJCQktLWNwcC0+aWZkZXB0aDsKLQkJCQkgICAg
LS1jcHAtPmVsc2V0cmFja2VyOwotCQkJCX0KLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQaWYo
eXlsdmFscHApOwotICAgICAgICAgICAgfQotCQl9Ci0gICAgICAgIGVsc2UgaWYoKGF0b209PWVs
c2VBdG9tKSAmJiAoIUNoa0NvcnJlY3RFbHNlTmVzdGluZygpKSl7Ci0gICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIgYSAjZWxzZSIpOwotICAgICAgICAgICAgY3BwLT5D
b21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0JfTsKLSAg
ICByZXR1cm4gdG9rZW47Ci19Ci0KLWVudW0gZXZhbF9wcmVjIHsKLSAgICBNSU5fUFJFQywKLSAg
ICBDT05ELCBMT0dPUiwgTE9HQU5ELCBPUiwgWE9SLCBBTkQsIEVRVUFMLCBSRUxBVElPTiwgU0hJ
RlQsIEFERCwgTVVMLCBVTkFSWSwKLSAgICBNQVhfUFJFQwotfTsKLQotc3RhdGljIGludCBvcF9s
b2dvcihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgfHwgYjsgfQotc3RhdGljIGludCBvcF9sb2dh
bmQoaW50IGEsIGludCBiKSB7IHJldHVybiBhICYmIGI7IH0KLXN0YXRpYyBpbnQgb3Bfb3IoaW50
IGEsIGludCBiKSB7IHJldHVybiBhIHwgYjsgfQotc3RhdGljIGludCBvcF94b3IoaW50IGEsIGlu
dCBiKSB7IHJldHVybiBhIF4gYjsgfQotc3RhdGljIGludCBvcF9hbmQoaW50IGEsIGludCBiKSB7
IHJldHVybiBhICYgYjsgfQotc3RhdGljIGludCBvcF9lcShpbnQgYSwgaW50IGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQotc3RhdGljIGludCBvcF9uZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgIT0g
YjsgfQotc3RhdGljIGludCBvcF9nZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPj0gYjsgfQot
c3RhdGljIGludCBvcF9sZShpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPD0gYjsgfQotc3RhdGlj
IGludCBvcF9ndChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPiBiOyB9Ci1zdGF0aWMgaW50IG9w
X2x0KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8IGI7IH0KLXN0YXRpYyBpbnQgb3Bfc2hsKGlu
dCBhLCBpbnQgYikgeyByZXR1cm4gYSA8PCBiOyB9Ci1zdGF0aWMgaW50IG9wX3NocihpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgPj4gYjsgfQotc3RhdGljIGludCBvcF9hZGQoaW50IGEsIGludCBi
KSB7IHJldHVybiBhICsgYjsgfQotc3RhdGljIGludCBvcF9zdWIoaW50IGEsIGludCBiKSB7IHJl
dHVybiBhIC0gYjsgfQotc3RhdGljIGludCBvcF9tdWwoaW50IGEsIGludCBiKSB7IHJldHVybiBh
ICogYjsgfQotc3RhdGljIGludCBvcF9kaXYoaW50IGEsIGludCBiKSB7IHJldHVybiBhIC8gYjsg
fQotc3RhdGljIGludCBvcF9tb2QoaW50IGEsIGludCBiKSB7IHJldHVybiBhICUgYjsgfQotc3Rh
dGljIGludCBvcF9wb3MoaW50IGEpIHsgcmV0dXJuIGE7IH0KLXN0YXRpYyBpbnQgb3BfbmVnKGlu
dCBhKSB7IHJldHVybiAtYTsgfQotc3RhdGljIGludCBvcF9jbXBsKGludCBhKSB7IHJldHVybiB+
YTsgfQotc3RhdGljIGludCBvcF9ub3QoaW50IGEpIHsgcmV0dXJuICFhOyB9Ci0KLXN0cnVjdCB7
Ci0gICAgaW50IHRva2VuLCBwcmVjLCAoKm9wKShpbnQsIGludCk7Ci19IGJpbm9wW10gPSB7Ci0g
ICAgeyBDUFBfT1JfT1AsIExPR09SLCBvcF9sb2dvciB9LAotICAgIHsgQ1BQX0FORF9PUCwgTE9H
QU5ELCBvcF9sb2dhbmQgfSwKLSAgICB7ICd8JywgT1IsIG9wX29yIH0sCi0gICAgeyAnXicsIFhP
Uiwgb3BfeG9yIH0sCi0gICAgeyAnJicsIEFORCwgb3BfYW5kIH0sCi0gICAgeyBDUFBfRVFfT1As
IEVRVUFMLCBvcF9lcSB9LAotICAgIHsgQ1BQX05FX09QLCBFUVVBTCwgb3BfbmUgfSwKLSAgICB7
ICc+JywgUkVMQVRJT04sIG9wX2d0IH0sCi0gICAgeyBDUFBfR0VfT1AsIFJFTEFUSU9OLCBvcF9n
ZSB9LAotICAgIHsgJzwnLCBSRUxBVElPTiwgb3BfbHQgfSwKLSAgICB7IENQUF9MRV9PUCwgUkVM
QVRJT04sIG9wX2xlIH0sCi0gICAgeyBDUFBfTEVGVF9PUCwgU0hJRlQsIG9wX3NobCB9LAotICAg
IHsgQ1BQX1JJR0hUX09QLCBTSElGVCwgb3Bfc2hyIH0sCi0gICAgeyAnKycsIEFERCwgb3BfYWRk
IH0sCi0gICAgeyAnLScsIEFERCwgb3Bfc3ViIH0sCi0gICAgeyAnKicsIE1VTCwgb3BfbXVsIH0s
Ci0gICAgeyAnLycsIE1VTCwgb3BfZGl2IH0sCi0gICAgeyAnJScsIE1VTCwgb3BfbW9kIH0sCi19
OwotCi1zdHJ1Y3QgewotICAgIGludCB0b2tlbiwgKCpvcCkoaW50KTsKLX0gdW5vcFtdID0gewot
ICAgIHsgJysnLCBvcF9wb3MgfSwKLSAgICB7ICctJywgb3BfbmVnIH0sCi0gICAgeyAnficsIG9w
X2NtcGwgfSwKLSAgICB7ICchJywgb3Bfbm90IH0sCi19OwotCi0jZGVmaW5lIEFMRU4oQSkgKHNp
emVvZihBKS9zaXplb2YoQVswXSkpCi0KLXN0YXRpYyBpbnQgZXZhbChpbnQgdG9rZW4sIGludCBw
cmVjLCBpbnQgKnJlcywgaW50ICplcnIsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGlu
dCAgICAgICAgIGksIHZhbDsKLSAgICBTeW1ib2wgICAgICAqczsKLSAgICBpZiAodG9rZW4gPT0g
Q1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBkZWZp
bmVkQXRvbSkgewotICAgICAgICAgICAgaW50IG5lZWRjbG9zZSA9IDA7Ci0gICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgbmVl
ZGNsb3NlID0gMTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpCi0gICAgICAgICAgICAgICAgZ290byBl
cnJvcjsKLSAgICAgICAgICAgICpyZXMgPSAocyA9IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZh
bHBwLT5zY19pZGVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICA/ICFzLT5kZXRhaWxzLm1h
Yy51bmRlZiA6IDA7Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAobmVlZGNsb3Nl
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuICE9ICcpJykKLSAgICAgICAgICAgICAgICAg
ICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0JCX0g
ZWxzZSBpZiAoTWFjcm9FeHBhbmQoeXlsdmFscHAtPnNjX2lkZW50LCB5eWx2YWxwcCkpIHsKLQkJ
CXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgIHJldHVybiBldmFsKHRva2VuLCBwcmVjLCByZXMsIGVyciwgeXls
dmFscHApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAg
ICAgfQotCX0gZWxzZSBpZiAodG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKSB7Ci0gICAgICAgICpy
ZXMgPSB5eWx2YWxwcC0+c2NfaW50OwotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgfSBlbHNlIGlmICh0b2tl
biA9PSAnKCcpIHsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB0b2tlbiA9IGV2YWwodG9rZW4sIE1J
Tl9QUkVDLCByZXMsIGVyciwgeXlsdmFscHApOwotICAgICAgICBpZiAoISplcnIpIHsKLSAgICAg
ICAgICAgIGlmICh0b2tlbiAhPSAnKScpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAg
ICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaSA9
IEFMRU4odW5vcCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKHVub3BbaV0u
dG9rZW4gPT0gdG9rZW4pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGkgPj0gMCkgewotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgdG9rZW4gPSBl
dmFsKHRva2VuLCBVTkFSWSwgcmVzLCBlcnIsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICpyZXMg
PSB1bm9wW2ldLm9wKCpyZXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ290byBl
cnJvcjsKLSAgICAgICAgfQotICAgIH0KLSAgICB3aGlsZSAoISplcnIpIHsKLSAgICAgICAgaWYg
KHRva2VuID09ICcpJyB8fCB0b2tlbiA9PSAnXG4nKSBicmVhazsKLSAgICAgICAgZm9yIChpID0g
QUxFTihiaW5vcCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKGJpbm9wW2ld
LnRva2VuID09IHRva2VuKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChpIDwgMCB8fCBiaW5vcFtpXS5wcmVjIDw9IHByZWMpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgdmFsID0gKnJlczsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB0b2tlbiA9IGV2
YWwodG9rZW4sIGJpbm9wW2ldLnByZWMsIHJlcywgZXJyLCB5eWx2YWxwcCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoYmlub3BbaV0ub3AgPT0gb3BfZGl2IHx8IGJpbm9wW2ldLm9wID09IG9wX21v
ZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCpyZXMgPT0gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGRpdmlkZSBv
ciBtb2R1bG8gYnkgemVybyIpOwotICAgICAgICAgICAgICAgICplcnIgPSAxOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
ICpyZXMgPSBiaW5vcFtpXS5vcCh2YWwsICpyZXMpOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47
Ci1lcnJvcjoKLSAgICBDUFBFcnJvclRvSW5mb0xvZygiaW5jb3JyZWN0IHByZXByb2Nlc3NvciBk
aXJlY3RpdmUiKTsKLSAgICAqZXJyID0gMTsKLSAgICAqcmVzID0gMDsKLSAgICByZXR1cm4gdG9r
ZW47Ci19IC8vIGV2YWwKLQotc3RhdGljIGludCBDUFBpZih5eXN0eXBlcHAgKiB5eWx2YWxwcCkg
ewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0gICAgaW50IHJlcyA9IDAsIGVyciA9IDA7Ci0KLSAgICBpZiAoIWNw
cC0+aWZkZXB0aCsrKQotICAgICAgICBpZmxvYyA9ICpjcHAtPnRva2VuTG9jOwotICAgIGlmKGNw
cC0+aWZkZXB0aCA+IE1BWF9JRl9ORVNUSU5HKXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
Im1heCAjaWYgbmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOwotICAgICAgICBjcHAtPkNvbXBpbGVF
cnJvciA9IDE7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjcHAtPmVsc2V0cmFja2Vy
Kys7Ci0gICAgLy8gc2FuaXR5IGNoZWNrIGVsc2V0cmFja2VyCi0gICAgaWYgKGNwcC0+ZWxzZXRy
YWNrZXIgPCAwIHx8IGNwcC0+ZWxzZXRyYWNrZXIgPj0gTUFYX0lGX05FU1RJTkcpIHsKLSAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coIm1pc21hdGNoZWQgI2lmLyNlbmRpZiBzdGF0ZW1lbnRzIik7
Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKLQotICAgIHRva2Vu
ID0gZXZhbCh0b2tlbiwgTUlOX1BSRUMsICZyZXMsICZlcnIsIHl5bHZhbHBwKTsKLSAgICBpZiAo
dG9rZW4gIT0gJ1xuJykgewotICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVk
IHRva2VucyBmb2xsb3dpbmcgI2lmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBh
IG5ld2xpbmUiKTsKLSAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBp
biAjaWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSAK
LSAgICBpZiAoIXJlcyAmJiAhZXJyKSB7Ci0gICAgICAgIHRva2VuID0gQ1BQZWxzZSgxLCB5eWx2
YWxwcCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBDUFBpZgotCi1zdGF0aWMg
aW50IENQUGlmZGVmKGludCBkZWZpbmVkLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBp
bnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgIGludCBuYW1lID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgIGlmKCsrY3Bw
LT5pZmRlcHRoID4gTUFYX0lGX05FU1RJTkcpewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
bWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkIik7Ci0gICAgICAgIGNwcC0+Q29tcGlsZUVy
cm9yID0gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGNwcC0+ZWxzZXRyYWNrZXIr
KzsKLSAgICAvLyBzYW5pdHkgY2hlY2sgZWxzZXRyYWNrZXIKLSAgICBpZiAoY3BwLT5lbHNldHJh
Y2tlciA8IDAgfHwgY3BwLT5lbHNldHJhY2tlciA+PSBNQVhfSUZfTkVTVElORykgewotICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygibWlzbWF0Y2hlZCAjaWYvI2VuZGlmIHN0YXRlbWVudHMiKTsK
LSAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOwotCi0gICAgaWYgKHRv
a2VuICE9IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgICAgICBkZWZpbmVkID8gQ1BQRXJyb3JU
b0luZm9Mb2coImlmZGVmIik6Q1BQRXJyb3JUb0luZm9Mb2coImlmbmRlZiIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFN5bWJvbCAqcyA9IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOwotICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICBDUFBX
YXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2lmZGVmIHByZXBy
b2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgIHdo
aWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAg
ICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gI2lmZGVmIHBy
ZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGlmICgoKHMgJiYgIXMtPmRldGFpbHMubWFjLnVuZGVmKSA/IDEgOiAw
KSAhPSBkZWZpbmVkKQotICAgICAgICAgICAgdG9rZW4gPSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBDUFBpZmRlZgotCi1zdGF0aWMgaW50IENQ
UGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApIAotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JaWYodG9rZW49
PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIj
bGluZSIpOwotICAgICAgICBJbmNMaW5lTnVtYmVyKCk7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0J
ZWxzZSBpZiAodG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKSB7Ci0JCXl5bHZhbHBwLT5zY19pbnQ9
YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotCQlTZXRMaW5lTnVtYmVyKHl5bHZhbHBwLT5z
Y19pbnQpOwotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIAotCQlpZiAodG9rZW4gPT0gQ1BQX0lOVENP
TlNUQU5UKSB7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5
bWJvbF9uYW1lKTsKLQkJCVNldFN0cmluZ051bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAg
ICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLQkJCWlmKHRva2VuIT0nXG4nKQotCQkJCUNQUEVycm9yVG9JbmZvTG9nKCIj
bGluZSIpOwotICAgICAgICB9Ci0JCWVsc2UgaWYgKHRva2VuID09ICdcbicpewotCQkJcmV0dXJu
IHRva2VuOwotCQl9Ci0JCWVsc2V7Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2xp
bmUiKTsKLQkJfQotCX0KLQllbHNlewotICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGlu
ZSIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19Ci0KLXN0YXRpYyBpbnQgQ1BQZXJyb3IoeXlz
dHlwZXBwICogeXlsdmFscHApIHsKLQotCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgY29uc3QgY2hhciAqbWVzc2Fn
ZTsKLQkKLSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICBpZiAodG9rZW4gPD0g
MCl7Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5w
dXQgaW4gI2Vycm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUi
KTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9ZWxzZSBpZiAodG9rZW4gPT0gQ1BQ
X0ZMT0FUQ09OU1RBTlQgfHwgdG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKXsKLSAgICAgICAgICAg
IFN0b3JlU3RyKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JCX1lbHNlIGlmKHRva2VuID09IENQ
UF9JREVOVElGSUVSIHx8IHRva2VuID09IENQUF9TVFJDT05TVEFOVCl7Ci0JCQlTdG9yZVN0cihH
ZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLT5zY19pZGVudCkpOwotCQl9ZWxzZSB7Ci0J
CSAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKSk7Ci0JCX0KLQkJdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotCX0KLQlEZWNMaW5lTnVtYmVyKCk7Ci0JLy9zdG9yZSB0aGlzIG1zZyBpbnRvIHRoZSBzaGFk
ZXIncyBpbmZvcm1hdGlvbiBsb2cuLnNldCB0aGUgQ29tcGlsZSBFcnJvciBmbGFnISEhIQotCW1l
c3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0g
ICAgUmVzZXRUU3RyaW5nKCk7Ci0gICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICBJbmNMaW5l
TnVtYmVyKCk7Ci0gICAgcmV0dXJuICdcbic7Ci19Ly9DUFBlcnJvcgotCi1zdGF0aWMgaW50IENQ
UHByYWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLQljaGFyIFNyY1N0ck5hbWVbMl07Ci0J
Y2hhcioqIGFsbFRva2VuczsKLQlpbnQgdG9rZW5Db3VudCA9IDA7Ci0JaW50IG1heFRva2VuQ291
bnQgPSAxMDsKLQljb25zdCBjaGFyKiBTcmNTdHI7Ci0JaW50IGk7Ci0KLQlpbnQgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQot
CWlmICh0b2tlbj09J1xuJykgewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0gICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCIjcHJhZ21hIik7Ci0gICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLQkgICAgcmV0
dXJuIHRva2VuOwotCX0KLQkKLQlhbGxUb2tlbnMgPSAoY2hhcioqKW1hbGxvYyhzaXplb2YoY2hh
ciopICogbWF4VG9rZW5Db3VudCk7CQotCi0Jd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLQkJaWYg
KHRva2VuQ291bnQgPj0gbWF4VG9rZW5Db3VudCkgewotCQkJbWF4VG9rZW5Db3VudCAqPSAyOwot
CQkJYWxsVG9rZW5zID0gKGNoYXIqKilyZWFsbG9jKChjaGFyKiopYWxsVG9rZW5zLCBzaXplb2Yo
Y2hhciopICogbWF4VG9rZW5Db3VudCk7Ci0JCX0KLQkJc3dpdGNoICh0b2tlbikgewotCQljYXNl
IENQUF9JREVOVElGSUVSOgotCQkJU3JjU3RyID0gR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCk7Ci0JCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9j
KHN0cmxlbihTcmNTdHIpICsgMSk7Ci0JCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10s
IFNyY1N0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBDUFBfSU5UQ09OU1RBTlQ6Ci0JCQlTcmNTdHIg
PSB5eWx2YWxwcC0+c3ltYm9sX25hbWU7Ci0JCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hh
ciopbWFsbG9jKHN0cmxlbihTcmNTdHIpICsgMSk7Ci0JCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2Vu
Q291bnQrK10sIFNyY1N0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoK
LQkJCVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKLQkJCWFsbFRva2Vuc1t0b2tlbkNv
dW50XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJCXN0cmNweShhbGxU
b2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQljYXNlIC0xOgotICAg
ICAgICAgICAgLy8gRU9GCi0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNwcmFnbWEgZGly
ZWN0aXZlIG11c3QgZW5kIHdpdGggYSBuZXdsaW5lIik7CQkJCi0JCQlnb3RvIGZyZWVNZW1vcnlB
bmRSZXR1cm5Ub2tlbjsKLQkJZGVmYXVsdDoKLQkJCVNyY1N0ck5hbWVbMF0gPSB0b2tlbjsKLQkJ
CVNyY1N0ck5hbWVbMV0gPSAnXDAnOwotCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIq
KW1hbGxvYygyKTsKLQkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyTmFt
ZSk7Ci0JCX0KLQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotCX0KLQotCUhhbmRsZVByYWdtYSgoY29uc3QgY2hhcioqKWFsbFRv
a2VucywgdG9rZW5Db3VudCk7Ci0JCi1mcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW46Ci0JZm9yIChp
ID0gMDsgaSA8IHRva2VuQ291bnQ7ICsraSkgewotCQlmcmVlIChhbGxUb2tlbnNbaV0pOwotCX0K
LQlmcmVlIChhbGxUb2tlbnMpOwkKLQotCXJldHVybiB0b2tlbjsgICAgCi19IC8vIENQUHByYWdt
YQotCi0jZGVmaW5lIEVTU0xfVkVSU0lPTl9OVU1CRVIgMTAwCi0jZGVmaW5lIEVTU0xfVkVSU0lP
Tl9TVFJJTkcgIjEwMCIKLQotc3RhdGljIGludCBDUFB2ZXJzaW9uKHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQotewotCi0gICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQotICAgIGlmIChjcHAtPnBhc3RGaXJzdFN0YXRlbWVu
dCA9PSAxKQotICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiN2ZXJzaW9uIG11c3Qgb2NjdXIgYmVm
b3JlIGFueSBvdGhlciBzdGF0ZW1lbnQgaW4gdGhlIHByb2dyYW0iKTsKLQotICAgIGlmKHRva2Vu
PT0nXG4nKXsKLQkJRGVjTGluZU51bWJlcigpOwotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
I3ZlcnNpb24iKTsKLSAgICAgICAgSW5jTGluZU51bWJlcigpOwotCQlyZXR1cm4gdG9rZW47Ci0J
fQotICAgIGlmICh0b2tlbiAhPSBDUFBfSU5UQ09OU1RBTlQpCi0gICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCIjdmVyc2lvbiIpOwotCQotICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxw
cC0+c3ltYm9sX25hbWUpOwotCS8vU2V0VmVyc2lvbk51bWJlcih5eWx2YWxwcC0+c2NfaW50KTsK
LSAgICAKLSAgICBpZiAoeXlsdmFscHAtPnNjX2ludCAhPSBFU1NMX1ZFUlNJT05fTlVNQkVSKQot
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlZlcnNpb24gbnVtYmVyIG5vdCBzdXBwb3J0ZWQgYnkg
RVNTTCIpOwotCi0gICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgIAotCWlmICh0b2tlbiA9PSAnXG4nKXsKLQkJcmV0dXJu
IHRva2VuOwotCX0KLQllbHNlewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24i
KTsKLQl9Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBDUFB2ZXJzaW9uCi0KLXN0YXRpYyBpbnQg
Q1BQZXh0ZW5zaW9uKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotCi0gICAgaW50IHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAg
ICBjaGFyIGV4dGVuc2lvbk5hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTiArIDFdOwotCi0gICAgaWYo
dG9rZW49PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01z
ZygiZXh0ZW5zaW9uIG5hbWUgbm90IHNwZWNpZmllZCIpOwotICAgICAgICBJbmNMaW5lTnVtYmVy
KCk7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0KLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJ
RVIpCi0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZXh0ZW5zaW9uIik7Ci0gICAgCi0gICAg
c3RybmNweShleHRlbnNpb25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNj
X2lkZW50KSwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgZXh0ZW5zaW9uTmFtZVtNQVhfU1lN
Qk9MX05BTUVfTEVOXSA9ICdcMCc7Ci0JICAgIAotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gIT0g
JzonKSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygiJzonIG1pc3NpbmcgYWZ0ZXIgZXh0ZW5z
aW9uIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLSAgICAKLSAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgIENQUFNoSW5mb0xv
Z01zZygiYmVoYXZpb3IgZm9yIGV4dGVuc2lvbiBub3Qgc3BlY2lmaWVkIik7Ci0gICAgICAgIHJl
dHVybiB0b2tlbjsKLSAgICB9Ci0KLSAgICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihleHRlbnNp
b25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7Ci0KLSAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0JaWYgKHRva2VuID09ICdcbicpewotCQlyZXR1cm4gdG9rZW47Ci0JfQotCWVsc2V7
Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZXh0ZW5zaW9uIik7Ci0JfQotICAgIHJldHVy
biB0b2tlbjsKLX0gLy8gQ1BQZXh0ZW5zaW9uCi0KLWludCByZWFkQ1BQbGluZSh5eXN0eXBlcHAg
KiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0K
LSAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgaWYgKHl5bHZhbHBw
LT5zY19pZGVudCA9PSBkZWZpbmVBdG9tKSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFBkZWZp
bmUoeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBl
bHNlQXRvbSkgewotCQkJIGlmKENoa0NvcnJlY3RFbHNlTmVzdGluZygpKXsKLSAgICAgICAgICAg
ICAgICAgaWYgKCFjcHAtPmlmZGVwdGggKXsKLSAgICAgICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCIjZWxzZSBtaXNtYXRjaCIpOwotICAgICAgICAgICAgICAgICAgICAgY3BwLT5D
b21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgaWYgKHRv
a2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2co
InVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
IC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9r
ZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgeyAvLyBFT0Ygb3IgZXJyb3IKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQgZW5kIG9m
IGlucHV0IGluICNpZmRlZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXds
aW5lIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgfQotCQkJICAgICB0b2tlbiA9IENQUGVsc2UoMCwgeXlsdmFscHApOwotICAgICAgICAgICAg
IH1lbHNlewotICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIg
YSAjZWxzZSIpOwotICAgICAgICAgICAgICAgICBjcHAtPmlmZGVwdGggPSAwOwotICAgICAgICAg
ICAgICAgICBjcHAtPmVsc2V0cmFja2VyID0gMDsKLSAgICAgICAgICAgICAgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAxOwotICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvciA9
IDE7Ci0gICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgIH0KLQkJfSBlbHNl
IGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZWxpZkF0b20pIHsKLSAgICAgICAgICAgIGlmICgh
Y3BwLT5pZmRlcHRoKXsKLSAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbGlm
IG1pc21hdGNoIik7Ci0gICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIC8vIHRo
aXMgdG9rZW4gaXMgcmVhbGx5IGEgZG9udCBjYXJlLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBlYXQg
dGhlIHRva2VucwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOyAKLSAgICAgICAgICAgIHdoaWxlICh0b2tlbiAh
PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGlmICh0b2tl
biA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygidW5leHBlY3QgdG9rZW5zIGZvbGxvd2luZyAjZWxpZiBwcmVwcm9jZXNzb3IgZGly
ZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgIGNwcC0+
Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCQkgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZh
bHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZW5kaWZBdG9t
KSB7Ci0gICAgICAgICAgICAgaWYgKCFjcHAtPmlmZGVwdGgpewotICAgICAgICAgICAgICAgICBD
UFBFcnJvclRvSW5mb0xvZygiI2VuZGlmIG1pc21hdGNoIik7Ci0gICAgICAgICAgICAgICAgIGNw
cC0+Q29tcGlsZUVycm9yPTE7Ci0gICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgIC0tY3BwLT5pZmRlcHRo
OwotCi0gICAgICAgICAgICAgaWYgKGNwcC0+ZWxzZXRyYWNrZXIpCi0gICAgICAgICAgICAgICAg
IC0tY3BwLT5lbHNldHJhY2tlcjsKLQotCSAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVu
dCA9PSBpZkF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUGlmKHl5bHZhbHBwKTsKLSAg
ICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZkZWZBdG9tKSB7Ci0gICAg
ICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigxLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlmbmRlZkF0b20pIHsKLSAgICAgICAgICAgICB0b2tl
biA9IENQUGlmZGVmKDAsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+
c2NfaWRlbnQgPT0gbGluZUF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUGxpbmUoeXls
dmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBwcmFnbWFB
dG9tKSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFBwcmFnbWEoeXlsdmFscHApOwotICAgICAg
ICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB1bmRlZkF0b20pIHsKLSAgICAgICAg
ICAgICB0b2tlbiA9IENQUHVuZGVmKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2
YWxwcC0+c2NfaWRlbnQgPT0gZXJyb3JBdG9tKSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFBl
cnJvcih5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IHZlcnNpb25BdG9tKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IENQUHZlcnNpb24oeXlsdmFscHAp
OwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBleHRlbnNpb25BdG9t
KSB7Ci0gICAgICAgICAgICB0b2tlbiA9IENQUGV4dGVuc2lvbih5eWx2YWxwcCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBTdG9yZVN0cigiSW52YWxpZCBEaXJlY3RpdmUiKTsKLSAg
ICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAtPnNjX2lk
ZW50KSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJyAmJiB0b2tlbiAhPSAw
ICYmIHRva2VuICE9IEVPRikgewotCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotICAgICAgICAKLSAgICBjcHAtPnBhc3RG
aXJzdFN0YXRlbWVudCA9IDE7Ci0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIHJlYWRDUFBsaW5l
Ci0KLXZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9sICpzKSB7Ci0gICAgRGVsZXRlVG9rZW5TdHJl
YW0ocy0+Ym9keSk7Ci19Ci0KLXZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFt
ZSwgaW50IHZhbHVlKSB7Ci0gICAgU291cmNlTG9jIGxvY2F0aW9uID0gezAsIDB9OwotICAgIFN5
bWJvbCAqc3ltYm9sID0gTlVMTDsKLSAgICBNYWNyb1N5bWJvbCBtYWNybyA9IHswLCBOVUxMLCBO
VUxMLCAwLCAwfTsKLSAgICB5eXN0eXBlcHAgdmFsID0gezAsIDAuMCwgMCwgezB9fTsKLSAgICBp
bnQgYXRvbSA9IDA7Ci0KLSAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJlYW0obmFtZSwgbWFj
cm9zLT5wb29sKTsKLSAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc25wcmludGYodmFsLnN5
bWJvbF9uYW1lLCBNQVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHZhbHVlKTsKLSAgICBSZWNv
cmRUb2tlbihtYWNyby5ib2R5LCBDUFBfSU5UQ09OU1RBTlQsICZ2YWwpOwotICAgIGF0b20gPSBM
b29rVXBBZGRTdHJpbmcoYXRhYmxlLCBuYW1lKTsKLSAgICBzeW1ib2wgPSBBZGRTeW1ib2woJmxv
Y2F0aW9uLCBtYWNyb3MsIGF0b20sIE1BQ1JPX1MpOwotICAgIHN5bWJvbC0+ZGV0YWlscy5tYWMg
PSBtYWNybzsKLX0KLQotc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKSB7IHJldHVybiAtMTsgfQotc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAq
aW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHApIHsgfQotCi1zdGF0aWMgdm9pZCBQdXNo
RW9mU3JjKCkgewotICAgIElucHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoSW5wdXRTcmMpKTsK
LSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihJbnB1dFNyYykpOwotICAgIGluLT5zY2FuID0gZW9m
X3NjYW47Ci0gICAgaW4tPmdldGNoID0gZW9mX3NjYW47Ci0gICAgaW4tPnVuZ2V0Y2ggPSBub29w
OwotICAgIGluLT5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgY3BwLT5jdXJyZW50SW5w
dXQgPSBpbjsKLX0KLQotc3RhdGljIHZvaWQgUG9wRW9mU3JjKCkgewotICAgIGlmIChjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbiA9PSBlb2Zfc2NhbikgewotICAgICAgICBJbnB1dFNyYyAqaW4gPSBj
cHAtPmN1cnJlbnRJbnB1dDsKLSAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+cHJldjsK
LSAgICAgICAgZnJlZShpbik7Ci0gICAgfQotfQotCi1zdGF0aWMgVG9rZW5TdHJlYW0gKlByZXNj
YW5NYWNyb0FyZyhUb2tlblN0cmVhbSAqYSwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAgICBp
bnQgdG9rZW47Ci0gICAgVG9rZW5TdHJlYW0gKm47Ci0gICAgUmV3aW5kVG9rZW5TdHJlYW0oYSk7
Ci0gICAgZG8gewotICAgICAgICB0b2tlbiA9IFJlYWRUb2tlbihhLCB5eWx2YWxwcCk7Ci0gICAg
ICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBMb29rVXBTeW1ib2wobWFjcm9zLCB5
eWx2YWxwcC0+c2NfaWRlbnQpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfSB3aGlsZSAodG9r
ZW4gPiAwKTsKLSAgICBpZiAodG9rZW4gPD0gMCkgcmV0dXJuIGE7Ci0gICAgbiA9IE5ld1Rva2Vu
U3RyZWFtKCJtYWNybyBhcmciLCAwKTsKLSAgICBQdXNoRW9mU3JjKCk7Ci0gICAgUmVhZEZyb21U
b2tlblN0cmVhbShhLCAwLCAwKTsKLSAgICB3aGlsZSAoKHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKSkgPiAwKSB7Ci0gICAgICAgIGlm
ICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRl
bnQsIHl5bHZhbHBwKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWNvcmRUb2tl
bihuLCB0b2tlbiwgeXlsdmFscHApOwotICAgIH0KLSAgICBQb3BFb2ZTcmMoKTsKLSAgICBEZWxl
dGVUb2tlblN0cmVhbShhKTsKLSAgICByZXR1cm4gbjsKLX0gLy8gUHJlc2Nhbk1hY3JvQXJnCi0K
LXR5cGVkZWYgc3RydWN0IE1hY3JvSW5wdXRTcmMgewotICAgIElucHV0U3JjICAgIGJhc2U7Ci0g
ICAgTWFjcm9TeW1ib2wgKm1hYzsKLSAgICBUb2tlblN0cmVhbSAqKmFyZ3M7Ci19IE1hY3JvSW5w
dXRTcmM7Ci0KLS8qIG1hY3JvX3NjYW4gLS0tCi0qKiByZXR1cm4gdGhlIG5leHQgdG9rZW4gZm9y
IGEgbWFjcm8gZXhwYW5pb24sIGhhbmRsaW5nIG1hY3JvIGFyZ3MgCi0qLwotc3RhdGljIGludCBt
YWNyb19zY2FuKE1hY3JvSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAg
IGludCBpOwotICAgIGludCB0b2tlbiA9IFJlYWRUb2tlbihpbi0+bWFjLT5ib2R5LCB5eWx2YWxw
cCk7Ci0gICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgIGZvciAoaSA9
IGluLT5tYWMtPmFyZ2MtMTsgaT49MDsgaS0tKQotICAgICAgICAgICAgaWYgKGluLT5tYWMtPmFy
Z3NbaV0gPT0geXlsdmFscHAtPnNjX2lkZW50KSBicmVhazsKLSAgICAgICAgaWYgKGkgPj0gMCkg
ewotICAgICAgICAgICAgUmVhZEZyb21Ub2tlblN0cmVhbShpbi0+YXJnc1tpXSwgeXlsdmFscHAt
PnNjX2lkZW50LCAwKTsKLSAgICAgICAgICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
ICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsKLSAgICBpbi0+bWFjLT5idXN5ID0gMDsKLSAgICBj
cHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7Ci0gICAgaWYgKGluLT5hcmdzKSB7Ci0g
ICAgICAgIGZvciAoaT1pbi0+bWFjLT5hcmdjLTE7IGk+PTA7IGktLSkKLSAgICAgICAgICAgIERl
bGV0ZVRva2VuU3RyZWFtKGluLT5hcmdzW2ldKTsKLSAgICAgICAgZnJlZShpbi0+YXJncyk7Ci0g
ICAgfQotICAgIGZyZWUoaW4pOwotICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotfSAvLyBtYWNyb19zY2FuCi0KLS8qIE1hY3Jv
RXhwYW5kCi0qKiBjaGVjayBhbiBpZGVudGlmaWVyIChhdG9tKSB0byBzZWUgaWYgaXQgYSBtYWNy
byB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC4KLSoqIElmIGl0IGlzLCBwdXNoIGFuIElucHV0U3Jj
IHRoYXQgd2lsbCBwcm9kdWNlIHRoZSBhcHByb3ByaWF0ZSBleHBhbnNpb24KLSoqIGFuZCByZXR1
cm4gVFJVRS4gIElmIG5vdCwgcmV0dXJuIEZBTFNFLgotKi8KLQotaW50IE1hY3JvRXhwYW5kKGlu
dCBhdG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBTeW1ib2wgICAgICAgICAgICAg
ICpzeW0gPSBMb29rVXBTeW1ib2wobWFjcm9zLCBhdG9tKTsKLSAgICBNYWNyb0lucHV0U3JjICAg
ICAgICppbjsKLSAgICBpbnQgaSxqLCB0b2tlbiwgZGVwdGg9MDsKLSAgICBjb25zdCBjaGFyICpt
ZXNzYWdlOwotCWlmIChhdG9tID09IF9fTElORV9fQXRvbSkgewotICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gR2V0TGluZU51bWJlcigpOwotICAgICAgICBzbnByaW50Zih5eWx2YWxwcC0+c3lt
Ym9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXlsdmFscHAtPnNjX2ludCk7
Ci0gICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7Ci0gICAgICAg
IHJldHVybiAxOwotICAgIH0KLSAgICBpZiAoYXRvbSA9PSBfX0ZJTEVfX0F0b20pIHsKLSAgICAg
ICAgeXlsdmFscHAtPnNjX2ludCA9IEdldFN0cmluZ051bWJlcigpOwotICAgICAgICBzbnByaW50
Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgeXls
dmFscHAtPnNjX2ludCk7Ci0gICAgICAgIFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2
YWxwcCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQlpZiAoYXRvbSA9PSBfX1ZFUlNJT05f
X0F0b20pIHsKLSAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxFU1NMX1ZFUlNJ
T05fU1RSSU5HKTsKLSAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGF0b2koeXlsdmFscHAtPnN5
bWJvbF9uYW1lKTsKLSAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBw
KTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmICghc3ltIHx8IHN5bS0+ZGV0YWls
cy5tYWMudW5kZWYpIHJldHVybiAwOwotICAgIGlmIChzeW0tPmRldGFpbHMubWFjLmJ1c3kpIHJl
dHVybiAwOyAgICAgICAgLy8gbm8gcmVjdXJzaXZlIGV4cGFuc2lvbnMKLSAgICBpbiA9IG1hbGxv
YyhzaXplb2YoKmluKSk7Ci0gICAgbWVtc2V0KGluLCAwLCBzaXplb2YoKmluKSk7Ci0gICAgaW4t
PmJhc2Uuc2NhbiA9ICh2b2lkICopbWFjcm9fc2NhbjsKLSAgICBpbi0+YmFzZS5saW5lID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmxpbmU7Ci0gICAgaW4tPmJhc2UubmFtZSA9IGNwcC0+Y3VycmVudElu
cHV0LT5uYW1lOwotICAgIGluLT5tYWMgPSAmc3ltLT5kZXRhaWxzLm1hYzsKLSAgICBpZiAoc3lt
LT5kZXRhaWxzLm1hYy5hcmdzKSB7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQkJaWYgKHRva2VuICE9ICcoJykg
ewotICAgICAgICAgICAgVW5nZXRUb2tlbih0b2tlbiwgeXlsdmFscHApOwotICAgICAgICAgICAg
eXlsdmFscHAtPnNjX2lkZW50ID0gYXRvbTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0gICAgICAgIGluLT5hcmdzID0gbWFsbG9jKGluLT5tYWMtPmFyZ2MgKiBzaXplb2YoVG9r
ZW5TdHJlYW0gKikpOwotICAgICAgICBmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBpKyspCi0g
ICAgICAgICAgICBpbi0+YXJnc1tpXSA9IE5ld1Rva2VuU3RyZWFtKCJtYWNybyBhcmciLCAwKTsK
LQkJaT0wO2o9MDsKLSAgICAgICAgZG97Ci0gICAgICAgICAgICBkZXB0aCA9IDA7Ci0JCQl3aGls
ZSgxKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7Ci0g
ICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkp
OwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAg
ICAgUmVzZXRUU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZigoaW4tPm1hYy0+YXJnYz09MCkgJiYgKHRv
a2VuIT0nKScpKSBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCAmJiAodG9r
ZW4gPT0gJywnIHx8IHRva2VuID09ICcpJykpIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICh0
b2tlbiA9PSAnKCcpIGRlcHRoKys7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykg
ZGVwdGgtLTsKLSAgICAgICAgICAgICAgICBSZWNvcmRUb2tlbihpbi0+YXJnc1tpXSwgdG9rZW4s
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBqPTE7Ci0JCQl9Ci0gICAgICAgICAgICBpZiAo
dG9rZW4gPT0gJyknKSB7Ci0gICAgICAgICAgICAgICAgaWYoKGluLT5tYWMtPmFyZ2M9PTEpICYm
aj09MCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaSsrOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSsrOwot
CQl9d2hpbGUoaSA8IGluLT5tYWMtPmFyZ2MpOwotCi0gICAgICAgIGlmIChpIDwgaW4tPm1hYy0+
YXJnYykgewotICAgICAgICAgICAgU3RvcmVTdHIoIlRvbyBmZXcgYXJncyBpbiBNYWNybyAiKTsK
LSAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkpOwotICAg
ICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKG1lc3NhZ2UpOwotICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodG9rZW4gIT0gJyknKSB7Ci0gICAgICAgICAgICBkZXB0aD0wOwotCQkJd2hpbGUg
KHRva2VuID49IDAgJiYgKGRlcHRoID4gMCB8fCB0b2tlbiAhPSAnKScpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRva2VuID09ICcpJykgZGVwdGgtLTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKLSAgICAgICAgICAgIH0K
LQkJCQotICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsKLSAgICAgICAgICAgICAgICBTdG9y
ZVN0cigiRU9GIGluIE1hY3JvICIpOwotICAgICAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmlu
Z09mQXRvbShhdGFibGUsYXRvbSkpOwotICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJv
bVRTdHIoKTsKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAg
ICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdG9yZVN0cigiVG9vIG1hbnkgYXJncyBpbiBNYWNy
byAiKTsKLSAgICAgICAgICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsYXRvbSkp
OwotICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKG1lc3NhZ2UpOwotICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7Ci0JCX0K
LQkJZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7Ci0gICAgICAgICAgICBpbi0+YXJn
c1tpXSA9IFByZXNjYW5NYWNyb0FyZyhpbi0+YXJnc1tpXSwgeXlsdmFscHApOwotICAgICAgICB9
Ci0gICAgfQotI2lmIDAKLSAgICBwcmludGYoIiAgPCVzOiVkPmZvdW5kIG1hY3JvICVzXG4iLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgbG9jLmZpbGUpLAotICAgICAgICAgICBsb2MubGluZSwgR2V0
QXRvbVN0cmluZyhhdGFibGUsIGF0b20pKTsKLSAgICBmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdj
OyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCJcdGFyZyAlcyA9ICciLCBHZXRBdG9tU3RyaW5nKGF0
YWJsZSwgaW4tPm1hYy0+YXJnc1tpXSkpOwotICAgICAgICBEdW1wVG9rZW5TdHJlYW0oc3Rkb3V0
LCBpbi0+YXJnc1tpXSk7Ci0gICAgICAgIHByaW50ZigiJ1xuIik7Ci0gICAgfQotI2VuZGlmCi0J
LypyZXRhaW4gdGhlIGlucHV0IHNvdXJjZSovCi0gICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3Vy
cmVudElucHV0OwotICAgIHN5bS0+ZGV0YWlscy5tYWMuYnVzeSA9IDE7Ci0gICAgUmV3aW5kVG9r
ZW5TdHJlYW0oc3ltLT5kZXRhaWxzLm1hYy5ib2R5KTsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9
ICZpbi0+YmFzZTsKLSAgICByZXR1cm4gMTsKLX0gLy8gTWFjcm9FeHBhbmQKLQotaW50IENoa0Nv
cnJlY3RFbHNlTmVzdGluZyh2b2lkKQotewotICAgIC8vIHNhbml0eSBjaGVjayB0byBtYWtlIHN1
cmUgZWxzZXRyYWNrZXIgaXMgaW4gYSB2YWxpZCByYW5nZQotICAgIGlmIChjcHAtPmVsc2V0cmFj
a2VyIDwgMCB8fCBjcHAtPmVsc2V0cmFja2VyID49IE1BWF9JRl9ORVNUSU5HKSB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFj
a2VyXSA9PSAwKSB7Ci0gICAgICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0g
MTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y3BwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDJlMjNlLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwK
LUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9y
YXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRl
cmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3Vy
IHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRo
aXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1z
LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1
c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJl
LgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBm
b2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50
cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3Mg
Y29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElB
IFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNv
dXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmli
dXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBu
b3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQg
ZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29m
dHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBs
b2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMg
ZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vu
c2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGlu
Y2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJl
IGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGlu
IHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3
YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJ
TkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVE
SU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExF
LAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1Ig
SU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxM
IE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUws
IEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJP
RFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEg
U09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05U
UkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBP
VEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGNwcC5o
Ci0vLwotCi0jaWYgIWRlZmluZWQoX19DUFBfSCkKLSNkZWZpbmUgX19DUFBfSCAxCi0KLSNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3Rva2Vucy5oIgotCi1pbnQgSW5pdENQUCh2b2lkKTsKLWludCBGaW5hbENQ
UCh2b2lkKTsKLWludCAgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApOwotaW50IE1h
Y3JvRXhwYW5kKGludCBhdG9tLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Ci1pbnQgQ2hrQ29ycmVj
dEVsc2VOZXN0aW5nKHZvaWQpOwotCi10eXBlZGVmIHN0cnVjdCBNYWNyb1N5bWJvbCB7Ci0gICAg
aW50IGFyZ2M7Ci0gICAgaW50ICphcmdzOwotICAgIFRva2VuU3RyZWFtICpib2R5OwotICAgIHVu
c2lnbmVkIGJ1c3k6MTsKLSAgICB1bnNpZ25lZCB1bmRlZjoxOwotfSBNYWNyb1N5bWJvbDsKLQot
dm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKik7Ci12b2lkIFByZWRlZmluZUludE1hY3JvKGNv
bnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci0KLXZvaWQgIENQUERlYnVnTG9nTXNnKGNvbnN0
IGNoYXIgKm1zZyk7ICAgICAgLy8gUHJpbnRzIGluZm9ybWF0aW9uIGludG8gZGVidWcgbG9nCi12
b2lkICBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciopOyAgICAgICAgIC8vIFN0b3JlIGNwcCBF
cnIgTXNnIGludG8gU2guSW5mby5Mb2cKLXZvaWQgIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3Qg
Y2hhciAqbXNnKTsgLy8gUHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgaW50byBpbmZvIGxvZwotdm9p
ZCAgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIqKiwgaW50IG51bVRva2Vucyk7ICAvLyAjcHJhZ21h
IGRpcmVjdGl2ZSBjb250YWluZXIuCi12b2lkICBSZXNldFRTdHJpbmcodm9pZCk7ICAgICAgICAg
ICAgICAgICAgIC8vICNlcnJvciBNZXNzYWdlIGFzIFRTdHJpbmcuCi12b2lkICBDUFBFcnJvclRv
SW5mb0xvZyhjb25zdCBjaGFyKik7ICAgICAgIC8vIFN0aWNrIGFsbCBjcHAgZXJyb3JzIGludG8g
U2guSW5mby5sb2cuCi12b2lkICBTdG9yZVN0cihjb25zdCBjaGFyKik7ICAgICAgICAgICAgICAg
IC8vIFN0b3JlIHRoZSBUU3RyaW5nIGluIFBhcnNlIENvbnRleHQuCi12b2lkICBTZXRMaW5lTnVt
YmVyKGludCk7ICAgICAgICAgICAgICAgICAgIC8vIFNldCBsaW5lIG51bWJlci4gIAotdm9pZCAg
U2V0U3RyaW5nTnVtYmVyKGludCk7ICAgICAgICAgICAgICAgICAvLyBTZXQgc3RyaW5nIG51bWJl
ci4gICAgCi1pbnQgICBHZXRMaW5lTnVtYmVyKHZvaWQpOyAgICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKLWludCAgIEdldFN0cmluZ051bWJlcih2b2lk
KTsgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIuIAotY29u
c3QgY2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCk7ICAgICAgICAgICAvLyBDb252ZXJ0IFRTdHJp
bmcgdG8gU3RyaW5nLiAgCi12b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFy
KiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7Ci1pbnQgICBGcmVlQ1BQKHZvaWQpOwot
Ci0jZW5kaWYgLy8gIShkZWZpbmVkKF9fQ1BQX0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjZmYzMS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5j
CisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAot
Q29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3Jh
dGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIg
dXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhp
cyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMu
ICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVz
ZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUu
Ci0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZv
bGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRz
IHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBj
b3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEg
U29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRo
ZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291
cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1
dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5v
dGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBk
aXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0
d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxv
Z29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBl
eHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5z
ZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5j
bHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUg
aW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4g
d2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdh
cmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlO
RyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJ
TkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUs
Ci1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJ
TiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwg
TlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwg
RVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9E
VUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBT
T0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRS
QUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9U
SEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gY3Bwc3Ry
dWN0LmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0j
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotCi1DUFBTdHJ1Y3Qg
ICpjcHAgICAgICA9IE5VTEw7Ci1zdGF0aWMgaW50ICByZWZDb3VudCA9IDA7Ci0KLWludCBJbml0
UHJlcHJvY2Vzc29yKHZvaWQpOwotaW50IFJlc2V0UHJlcHJvY2Vzc29yKHZvaWQpOwotaW50IEZy
ZWVDUFBTdHJ1Y3Qodm9pZCk7Ci1pbnQgRmluYWxpemVQcmVwcm9jZXNzb3Iodm9pZCk7Ci0KLS8q
Ci0gKiBJbml0Q1BQU3RydWN0KCkgLSBJbml0aWxhaXplIHRoZSBDUFAgc3RydWN0dXJlLgotICoK
LSAqLwotCi1pbnQgSW5pdENQUFN0cnVjdCh2b2lkKQotewotICAgIGludCBsZW47Ci0gICAgY2hh
ciAqcDsKLQotICAgIGNwcCA9IChDUFBTdHJ1Y3QgKikgbWFsbG9jKHNpemVvZihDUFBTdHJ1Y3Qp
KTsKLSAgICBpZiAoY3BwID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmVmQ291
bnQrKzsKLQotICAgIC8vIEluaXRpYWxpemUgcHVibGljIG1lbWJlcnM6Ci0gICAgY3BwLT5wTGFz
dFNvdXJjZUxvYyA9ICZjcHAtPmxhc3RTb3VyY2VMb2M7Ci0gICAgCi0JcCA9IChjaGFyICopICZj
cHAtPm9wdGlvbnM7Ci0gICAgbGVuID0gc2l6ZW9mKGNwcC0+b3B0aW9ucyk7Ci0gICAgd2hpbGUg
KC0tbGVuID49IDApCi0gICAgICAgIHBbbGVuXSA9IDA7Ci0gICAgIAotICAgIFJlc2V0UHJlcHJv
Y2Vzc29yKCk7Ci0gICAgcmV0dXJuIDE7Ci19IC8vIEluaXRDUFBTdHJ1Y3QKLQotaW50IFJlc2V0
UHJlcHJvY2Vzc29yKHZvaWQpCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSBwcml2YXRlIG1lbWJlcnM6
Ci0KLSAgICBjcHAtPmxhc3RTb3VyY2VMb2MuZmlsZSA9IDA7Ci0gICAgY3BwLT5sYXN0U291cmNl
TG9jLmxpbmUgPSAwOwotICAgIGNwcC0+cEMgPSAwOwotICAgIGNwcC0+Q29tcGlsZUVycm9yID0g
MDsKLSAgICBjcHAtPmlmZGVwdGggPSAwOwotICAgIGZvcihjcHAtPmVsc2V0cmFja2VyID0gMDsg
Y3BwLT5lbHNldHJhY2tlciA8IE1BWF9JRl9ORVNUSU5HOyBjcHAtPmVsc2V0cmFja2VyKyspCi0g
ICAgICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKLSAgICBjcHAtPmVs
c2V0cmFja2VyID0gMDsKLSAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDA7Ci0gICAgcmV0dXJu
IDE7Ci19Ci0KLS8vSW50aWFsaXppbmcgdGhlIFByZXByb2Nlc3Nvci4KLQotaW50IEluaXRQcmVw
cm9jZXNzb3Iodm9pZCkKLXsKLSAgICMgIGRlZmluZSBDUFBfU1RVRkYgdHJ1ZQotICAgICAgICAj
ICBpZmRlZiBDUFBfU1RVRkYKLSAgICAgICAgICAgIEZyZWVDUFBTdHJ1Y3QoKTsKLSAgICAgICAg
ICAgIEluaXRDUFBTdHJ1Y3QoKTsKLSAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5RdWlldCA9IDE7
Ci0gICAgICAgICAgICBjcHAtPm9wdGlvbnMucHJvZmlsZVN0cmluZyA9ICJnZW5lcmljIjsKLSAg
ICAgICAgICAgIGlmICghSW5pdEF0b21UYWJsZShhdGFibGUsIDApKQotICAgICAgICAgICAgICAg
IHJldHVybiAxOwotICAgICAgICAgICAgaWYgKCFJbml0U2Nhbm5lcihjcHApKQotCSAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICMgIGVuZGlmCi0gIHJldHVybiAwOyAKLX0KLQotLy9GcmVl
Q1BQU3RydWN0KCkgLSBGcmVlIHRoZSBDUFAgc3RydWN0dXJlLgotCi1pbnQgRnJlZUNQUFN0cnVj
dCh2b2lkKQotewotICAgIGlmIChyZWZDb3VudCkKLSAgICB7Ci0gICAgICAgZnJlZShjcHApOwot
ICAgICAgIHJlZkNvdW50LS07Ci0gICAgfQotICAgIAotICAgIHJldHVybiAxOwotfQotCi0vL0Zp
bmFsaXppbmcgdGhlIFByZXByb2Nlc3Nvci4KLQotaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKHZv
aWQpCi17Ci0gICAjICBkZWZpbmUgQ1BQX1NUVUZGIHRydWUKLSAgICAgICAgIyAgaWZkZWYgQ1BQ
X1NUVUZGCi0gICAgICAgICAgICBGcmVlQXRvbVRhYmxlKGF0YWJsZSk7Ci0gICAgICAgICAgICBG
cmVlQ1BQU3RydWN0KCk7Ci0gICAgICAgICAgICBGcmVlU2Nhbm5lcigpOwotICAgICAgICMgIGVu
ZGlmCi0gIHJldHVybiAwOyAKLX0KLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIGNw
cHN0cnVjdC5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9nZW5lcmF0ZV9wYXJzZXIuc2gg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2dlbmVy
YXRlX3BhcnNlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOWM3MGIx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9nZW5lcmF0ZV9wYXJzZXIuc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmlu
L2Jhc2gKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKworIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMgcHJl
cHJvY2Vzc29yLgorCitydW5fZmxleCgpCit7CitpbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitv
dXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCitmbGV4IC0tbm9saW5lIC0tbm91bmlzdGQgLS1v
dXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCit9CisKK3J1bl9iaXNvbigpCit7Citp
bnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCitvdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCiti
aXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291cmNl
ICRpbnB1dF9maWxlCit9CisKK3NjcmlwdF9kaXI9JChkaXJuYW1lICQwKQorCisjIEdlbmVyYXRl
IHByZXByb2Nlc3NvcgorcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVyLmNwcAorcnVuX2Jp
c29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyOTUyMWEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1v
cnkuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29y
cG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25z
aWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5
b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9m
IHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRl
cm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5v
dCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3
YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdy
YW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElB
J3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJ
RElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0
ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGlu
IHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0
cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdo
dCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBh
bmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEg
U29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5v
ciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQg
YXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxp
Y2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4s
IGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5
IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtz
IGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhh
cmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMg
QkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5D
TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJ
VExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUg
T1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNI
QUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5U
QUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJF
UFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklE
SUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBD
T05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBP
UiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLSNpbmNs
dWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4K
LQotI2lmbmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2VuZGlmCi0KLSNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCi0KLSNpZiBkZWZpbmVkKF9NU0Nf
VkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDYpCi0jZW5kaWYKLQotLy8gZGVmYXVs
dCBhbGlnbm1lbnQgYW5kIGNodW5rc2l6ZSwgaWYgY2FsbGVkIHdpdGggMCBhcmd1bWVudHMKLSNk
ZWZpbmUgQ0hVTktTSVpFICAgICAgICg2NCoxMDI0KQotI2RlZmluZSBBTElHTiAgICAgICAgICAg
OAotCi0vLyB3ZSBuZWVkIHRvIGNhbGwgdGhlIGByZWFsJyBtYWxsb2MgYW5kIGZyZWUsIG5vdCBv
dXIgcmVwbGFjZW1lbnRzCi0jdW5kZWYgbWFsbG9jCi0jdW5kZWYgZnJlZQotCi1zdHJ1Y3QgY2h1
bmsgewotICAgIHN0cnVjdCBjaHVuayAgICAgICAgKm5leHQ7Ci19OwotCi1zdHJ1Y3QgY2xlYW51
cCB7Ci0gICAgc3RydWN0IGNsZWFudXAgICAgICAqbmV4dDsKLSAgICB2b2lkICAgICAgICAgICAg
ICAgICgqZm4pKHZvaWQgKik7Ci0gICAgdm9pZCAgICAgICAgICAgICAgICAqYXJnOwotfTsKLQot
c3RydWN0IE1lbW9yeVBvb2xfcmVjIHsKLSAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpuZXh0Owot
ICAgIHVpbnRwdHJfdCAgICAgICAgICAgZnJlZSwgZW5kOwotICAgIHNpemVfdCAgICAgICAgICAg
ICAgY2h1bmtzaXplOwotICAgIHVpbnRwdHJfdCAgICAgICAgICAgYWxpZ25tYXNrOwotICAgIHN0
cnVjdCBjbGVhbnVwICAgICAgKmNsZWFudXA7Ci19OwotCi1NZW1vcnlQb29sICptZW1fQ3JlYXRl
UG9vbChzaXplX3QgY2h1bmtzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pCi17Ci0gICAgTWVtb3J5
UG9vbCAgKnBvb2w7Ci0KLSAgICBpZiAoYWxpZ24gPT0gMCkgYWxpZ24gPSBBTElHTjsKLSAgICBp
ZiAoY2h1bmtzaXplID09IDApIGNodW5rc2l6ZSA9IENIVU5LU0laRTsKLSAgICBpZiAoYWxpZ24g
JiAoYWxpZ24tMSkpIHJldHVybiAwOwotICAgIGlmIChjaHVua3NpemUgPCBzaXplb2YoTWVtb3J5
UG9vbCkpIHJldHVybiAwOwotICAgIGlmIChjaHVua3NpemUgJiAoYWxpZ24tMSkpIHJldHVybiAw
OwotICAgIGlmICghKHBvb2wgPSBtYWxsb2MoY2h1bmtzaXplKSkpIHJldHVybiAwOwotICAgIHBv
b2wtPm5leHQgPSAwOwotICAgIHBvb2wtPmNodW5rc2l6ZSA9IGNodW5rc2l6ZTsKLSAgICBwb29s
LT5hbGlnbm1hc2sgPSAodWludHB0cl90KShhbGlnbiktMTsgIAotICAgIHBvb2wtPmZyZWUgPSAo
KHVpbnRwdHJfdCkocG9vbCArIDEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1h
c2s7Ci0gICAgcG9vbC0+ZW5kID0gKHVpbnRwdHJfdClwb29sICsgY2h1bmtzaXplOwotICAgIHBv
b2wtPmNsZWFudXAgPSAwOwotICAgIHJldHVybiBwb29sOwotfQotCi12b2lkIG1lbV9GcmVlUG9v
bChNZW1vcnlQb29sICpwb29sKQotewotICAgIHN0cnVjdCBjbGVhbnVwICAgICAgKmNsZWFudXA7
Ci0gICAgc3RydWN0IGNodW5rICAgICAgICAqcCwgKm5leHQ7Ci0KLSAgICBmb3IgKGNsZWFudXAg
PSBwb29sLT5jbGVhbnVwOyBjbGVhbnVwOyBjbGVhbnVwID0gY2xlYW51cC0+bmV4dCkgewotICAg
ICAgICBjbGVhbnVwLT5mbihjbGVhbnVwLT5hcmcpOwotICAgIH0KLSAgICBmb3IgKHAgPSAoc3Ry
dWN0IGNodW5rICopcG9vbDsgcDsgcCA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IHAtPm5leHQ7
Ci0gICAgICAgIGZyZWUocCk7Ci0gICAgfQotfQotCi12b2lkICptZW1fQWxsb2MoTWVtb3J5UG9v
bCAqcG9vbCwgc2l6ZV90IHNpemUpCi17Ci0gICAgc3RydWN0IGNodW5rICpjaDsKLSAgICB2b2lk
ICpydiA9ICh2b2lkICopcG9vbC0+ZnJlZTsKLSAgICBzaXplID0gKHNpemUgKyBwb29sLT5hbGln
bm1hc2spICYgfnBvb2wtPmFsaWdubWFzazsKLSAgICBpZiAoc2l6ZSA8PSAwKSBzaXplID0gcG9v
bC0+YWxpZ25tYXNrOwotICAgIHBvb2wtPmZyZWUgKz0gc2l6ZTsKLSAgICBpZiAocG9vbC0+ZnJl
ZSA+IHBvb2wtPmVuZCB8fCBwb29sLT5mcmVlIDwgKHVpbnRwdHJfdClydikgewotICAgICAgICBz
aXplX3QgbWlucmVxID0gKHNpemUgKyBzaXplb2Yoc3RydWN0IGNodW5rKSArIHBvb2wtPmFsaWdu
bWFzaykKLSAgICAgICAgICAgICAgICAgICAgICAmIH5wb29sLT5hbGlnbm1hc2s7Ci0gICAgICAg
IHBvb2wtPmZyZWUgPSAodWludHB0cl90KXJ2OwotICAgICAgICBpZiAobWlucmVxID49IHBvb2wt
PmNodW5rc2l6ZSkgewotICAgICAgICAgICAgLy8gcmVxdWVzdCBzaXplIGlzIHRvbyBiaWcgZm9y
IHRoZSBjaHVua3NpemUsIHNvIGFsbG9jYXRlIGl0IGFzCi0gICAgICAgICAgICAvLyBhIHNpbmds
ZSBjaHVuayBvZiB0aGUgcmlnaHQgc2l6ZQotICAgICAgICAgICAgY2ggPSBtYWxsb2MobWlucmVx
KTsKLSAgICAgICAgICAgIGlmICghY2gpIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgY2ggPSBtYWxsb2MocG9vbC0+Y2h1bmtzaXplKTsKLSAgICAgICAgICAgIGlmICgh
Y2gpIHJldHVybiAwOwotICAgICAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpY2ggKyBt
aW5yZXE7Ci0gICAgICAgICAgICBwb29sLT5lbmQgPSAodWludHB0cl90KWNoICsgcG9vbC0+Y2h1
bmtzaXplOwotICAgICAgICB9Ci0gICAgICAgIGNoLT5uZXh0ID0gcG9vbC0+bmV4dDsKLSAgICAg
ICAgcG9vbC0+bmV4dCA9IGNoOwotICAgICAgICBydiA9ICh2b2lkICopKCgodWludHB0cl90KShj
aCsxKSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJ2OwotfQotCi1pbnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcG9vbCwgdm9p
ZCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcpIHsKLSAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51
cDsKLQotICAgIHBvb2wtPmZyZWUgPSAocG9vbC0+ZnJlZSArIHNpemVvZih2b2lkICopIC0gMSkg
JiB+KHNpemVvZih2b2lkICopLTEpOwotICAgIGNsZWFudXAgPSBtZW1fQWxsb2MocG9vbCwgc2l6
ZW9mKHN0cnVjdCBjbGVhbnVwKSk7Ci0gICAgaWYgKCFjbGVhbnVwKSByZXR1cm4gLTE7Ci0gICAg
Y2xlYW51cC0+bmV4dCA9IHBvb2wtPmNsZWFudXA7Ci0gICAgY2xlYW51cC0+Zm4gPSBmbjsKLSAg
ICBjbGVhbnVwLT5hcmcgPSBhcmc7Ci0gICAgcG9vbC0+Y2xlYW51cCA9IGNsZWFudXA7Ci0gICAg
cmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNWZjYWRiMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAs
MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlz
IHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNh
dGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0
ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0
aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3Qg
dG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNp
dmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBO
VklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVj
ZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHBy
b3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3Ug
bXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2Ug
YW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlz
dHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJh
ZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
ZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3Rp
Y2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUg
Z3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBh
bnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZl
Ci13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1h
eSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAot
Ci1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFT
SVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFO
RCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBS
T0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BF
Q0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFO
WSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1Ig
RElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQg
V0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8vCi0jaWZuZGVmIF9fTUVNT1JZX0gKLSNkZWZpbmUgX19NRU1PUllf
SAotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLXR5cGVkZWYgc3RydWN0IE1lbW9yeVBvb2xfcmVj
IE1lbW9yeVBvb2w7Ci0KLWV4dGVybiBNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3Qg
Y2h1bmtzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pOwotZXh0ZXJuIHZvaWQgbWVtX0ZyZWVQb29s
KE1lbW9yeVBvb2wgKik7Ci1leHRlcm4gdm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnAsIHNp
emVfdCBzaXplKTsKLWV4dGVybiB2b2lkICptZW1fUmVhbGxvYyhNZW1vcnlQb29sICpwLCB2b2lk
ICpvbGQsIHNpemVfdCBvbGRzaXplLCBzaXplX3QgbmV3c2l6ZSk7Ci1leHRlcm4gaW50IG1lbV9B
ZGRDbGVhbnVwKE1lbW9yeVBvb2wgKnAsIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnKTsK
LQotI2VuZGlmIC8qIF9fTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9z
dGljcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTc1YTljLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KLSNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCi0KLSNpbmNsdWRlIDxzdHJp
bmc+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgU291cmNlTG9jYXRpb247Ci0KLS8vIEJh
c2UgY2xhc3MgZm9yIHJlcG9ydGluZyBkaWFnbm9zdGljIG1lc3NhZ2VzLgotLy8gRGVyaXZlZCBj
bGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IgZm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1l
c3NhZ2VzLgotY2xhc3MgRGlhZ25vc3RpY3MKLXsKLSAgcHVibGljOgotICAgIGVudW0gU2V2ZXJp
dHkKLSAgICB7Ci0gICAgICAgIEVSUk9SLAotICAgICAgICBXQVJOSU5HCi0gICAgfTsKLSAgICBl
bnVtIElECi0gICAgewotICAgICAgICBFUlJPUl9CRUdJTiwKLSAgICAgICAgSU5URVJOQUxfRVJS
T1IsCi0gICAgICAgIE9VVF9PRl9NRU1PUlksCi0gICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAot
ICAgICAgICBJTlZBTElEX05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9FWFBSRVNTSU9OLAotICAg
ICAgICBESVZJU0lPTl9CWV9aRVJPLAotICAgICAgICBFT0ZfSU5fQ09NTUVOVCwKLSAgICAgICAg
RU9GX0lOX0RJUkVDVElWRSwKLSAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgRElS
RUNUSVZFX0lOVkFMSURfTkFNRSwKLSAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKLSAgICAg
ICAgTUFDUk9fUkVERUZJTkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwK
LSAgICAgICAgTUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCi0gICAgICAgIE1BQ1JPX1VOVEVS
TUlOQVRFRF9JTlZPQ0FUSU9OLAotICAgICAgICBNQUNST19UT09fRkVXX0FSR1MsCi0gICAgICAg
IE1BQ1JPX1RPT19NQU5ZX0FSR1MsCi0gICAgICAgIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRf
SUYsCi0gICAgICAgIENPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKLSAgICAgICAgQ09ORElU
SU9OQUxfRUxTRV9BRlRFUl9FTFNFLAotICAgICAgICBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUYsCi0gICAgICAgIENPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKLSAgICAgICAgQ09ORElU
SU9OQUxfVU5URVJNSU5BVEVELAotICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAotICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKLSAgICAgICAgSU5WQUxJRF9FWFRFTlNJ
T05fRElSRUNUSVZFLAotICAgICAgICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAotICAgICAgICBJ
TlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAotICAgICAgICBJTlZBTElEX0xJTkVfTlVNQkVSLAot
ICAgICAgICBJTlZBTElEX0ZJTEVfTlVNQkVSLAotICAgICAgICBJTlZBTElEX0xJTkVfRElSRUNU
SVZFLAotICAgICAgICBFUlJPUl9FTkQsCi0KLSAgICAgICAgV0FSTklOR19CRUdJTiwKLSAgICAg
ICAgQ09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgVU5SRUNPR05JWkVEX1BS
QUdNQSwKLSAgICAgICAgV0FSTklOR19FTkQKLSAgICB9OwotCi0gICAgdmlydHVhbCB+RGlhZ25v
c3RpY3MoKTsKLQotICAgIHZvaWQgcmVwb3J0KElEIGlkLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYg
bG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIFNldmVy
aXR5IHNldmVyaXR5KElEIGlkKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcmludChJRCBpZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpID0gMDsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJ
Q1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjMyNTQwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0
aWNzQmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCi0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotCi1uYW1l
c3BhY2UgcHAKLXsKLQotRGlhZ25vc3RpY3M6On5EaWFnbm9zdGljcygpCi17Ci19Ci0KLXZvaWQg
RGlhZ25vc3RpY3M6OnJlcG9ydChJRCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiB0ZXh0KQotewotICAgIC8vIFRPRE8oYWxva3ApOiBLZWVwIGEgY291bnQgb2Yg
ZXJyb3JzIGFuZCB3YXJuaW5ncy4KLSAgICBwcmludChpZCwgbG9jLCB0ZXh0KTsKLX0KLQotRGlh
Z25vc3RpY3M6OlNldmVyaXR5IERpYWdub3N0aWNzOjpzZXZlcml0eShJRCBpZCkKLXsKLSAgICBp
ZiAoKGlkID4gRVJST1JfQkVHSU4pICYmIChpZCA8IEVSUk9SX0VORCkpCi0gICAgICAgIHJldHVy
biBFUlJPUjsKLQotICAgIGlmICgoaWQgPiBXQVJOSU5HX0JFR0lOKSAmJiAoaWQgPCBXQVJOSU5H
X0VORCkpCi0gICAgICAgIHJldHVybiBXQVJOSU5HOwotCi0gICAgYXNzZXJ0KGZhbHNlKTsKLSAg
ICByZXR1cm4gRVJST1I7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlSGFuZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYWFlZWMyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNl
IHBwCi17Ci0KLXN0cnVjdCBTb3VyY2VMb2NhdGlvbjsKLQotLy8gQmFzZSBjbGFzcyBmb3IgaGFu
ZGxpbmcgZGlyZWN0aXZlcy4KLS8vIFByZXByb2Nlc3NvciB1c2VzIHRoaXMgY2xhc3MgdG8gbm90
aWZ5IHRoZSBjbGllbnRzIGFib3V0IGNlcnRhaW4KLS8vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVz
LiBEZXJpdmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvcgotLy8gaGFuZGxpbmcgdGhlbSBp
biBhbiBhcHByb3ByaWF0ZSBtYW5uZXIuCi1jbGFzcyBEaXJlY3RpdmVIYW5kbGVyCi17Ci0gIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5EaXJlY3RpdmVIYW5kbGVyKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXJyb3IoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgPSAwOwotCi0gICAgLy8gSGFu
ZGxlIHByYWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0KLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlUHJhZ21hKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZp
b3IpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IFNvdXJjZUxv
Y2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24p
ID0gMDsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJC
YXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2E5MWUxYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkRpcmVj
dGl2ZUhhbmRsZXIuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLURpcmVjdGl2ZUhhbmRsZXI6On5E
aXJlY3RpdmVIYW5kbGVyKCkKLXsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTg1YTkwZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsODk5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiRGly
ZWN0aXZlUGFyc2VyLmgiCi0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPGNzdGRsaWI+
Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCi0jaW5jbHVk
ZSAiRGlyZWN0aXZlSGFuZGxlci5oIgotI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKLSNp
bmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLSNpbmNsdWRlICJU
b2tlbml6ZXIuaCIKLQotbmFtZXNwYWNlIHsKLWVudW0gRGlyZWN0aXZlVHlwZQotewotICAgIERJ
UkVDVElWRV9OT05FLAotICAgIERJUkVDVElWRV9ERUZJTkUsCi0gICAgRElSRUNUSVZFX1VOREVG
LAotICAgIERJUkVDVElWRV9JRiwKLSAgICBESVJFQ1RJVkVfSUZERUYsCi0gICAgRElSRUNUSVZF
X0lGTkRFRiwKLSAgICBESVJFQ1RJVkVfRUxTRSwKLSAgICBESVJFQ1RJVkVfRUxJRiwKLSAgICBE
SVJFQ1RJVkVfRU5ESUYsCi0gICAgRElSRUNUSVZFX0VSUk9SLAotICAgIERJUkVDVElWRV9QUkFH
TUEsCi0gICAgRElSRUNUSVZFX0VYVEVOU0lPTiwKLSAgICBESVJFQ1RJVkVfVkVSU0lPTiwKLSAg
ICBESVJFQ1RJVkVfTElORQotfTsKLX0gIC8vIG5hbWVzcGFjZQotCi1zdGF0aWMgRGlyZWN0aXZl
VHlwZSBnZXREaXJlY3RpdmUoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKLXsKLSAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURlZmluZSgiZGVmaW5lIik7Ci0gICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVVbmRlZigidW5kZWYiKTsKLSAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmKCJpZiIpOwotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlmZGVmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlmbmRlZiIpOwotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxzZSgiZWxzZSIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtEaXJlY3RpdmVFcnJvcigiZXJyb3IiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJp
bmcga0RpcmVjdGl2ZVByYWdtYSgicHJhZ21hIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3Ry
aW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVuc2lvbiIpOwotICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRGlyZWN0aXZlVmVyc2lvbigidmVyc2lvbiIpOwotICAgIHN0YXRpYyBjb25z
dCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgibGluZSIpOwotCi0gICAgaWYgKHRva2VuLT50
eXBlICE9IHBwOjpUb2tlbjo6SURFTlRJRklFUikKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9O
T05FOwotCi0gICAgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRGVmaW5lKQotICAgICAg
ICByZXR1cm4gRElSRUNUSVZFX0RFRklORTsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZVVuZGVmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOwotICAgIGVs
c2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWYpCi0gICAgICAgIHJldHVybiBESVJF
Q1RJVkVfSUY7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZmRlZikK
LSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRkRFRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFs
dWUgPT0ga0RpcmVjdGl2ZUlmbmRlZikKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7
Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbHNlKQotICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX0VMU0U7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJl
Y3RpdmVFbGlmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMSUY7Ci0gICAgZWxzZSBpZiAo
dG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFbmRpZikKLSAgICAgICAgcmV0dXJuIERJUkVDVElW
RV9FTkRJRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVycm9yKQot
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VSUk9SOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlUHJhZ21hKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX1BSQUdNQTsK
LSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKLSAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9FWFRFTlNJT047Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVl
ID09IGtEaXJlY3RpdmVWZXJzaW9uKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX1ZFUlNJT047
Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVMaW5lKQotICAgICAgICBy
ZXR1cm4gRElSRUNUSVZFX0xJTkU7Ci0KLSAgICByZXR1cm4gRElSRUNUSVZFX05PTkU7Ci19Ci0K
LXN0YXRpYyBib29sIGlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoRGlyZWN0aXZlVHlwZSBkaXJlY3Rp
dmUpCi17Ci0gICAgc3dpdGNoIChkaXJlY3RpdmUpCi0gICAgewotICAgICAgY2FzZSBESVJFQ1RJ
VkVfSUY6Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKLSAgICAgIGNhc2UgRElSRUNUSVZF
X0lGTkRFRjoKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VMU0U6Ci0gICAgICBjYXNlIERJUkVDVElW
RV9FTElGOgotICAgICAgY2FzZSBESVJFQ1RJVkVfRU5ESUY6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSB0b2tlbiByZXByZXNlbnRzIEVuZCBPZiBEaXJlY3RpdmUuCi1z
dGF0aWMgYm9vbCBpc0VPRChjb25zdCBwcDo6VG9rZW4qIHRva2VuKQotewotICAgIHJldHVybiAo
dG9rZW4tPnR5cGUgPT0gJ1xuJykgfHwgKHRva2VuLT50eXBlID09IHBwOjpUb2tlbjo6TEFTVCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHNraXBVbnRpbEVPRChwcDo6TGV4ZXIqIGxleGVyLCBwcDo6VG9r
ZW4qIHRva2VuKQotewotICAgIHdoaWxlKCFpc0VPRCh0b2tlbikpCi0gICAgewotICAgICAgICBs
ZXhlci0+bGV4KHRva2VuKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGlzTWFjcm9OYW1lUmVz
ZXJ2ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gTmFtZXMgcHJlZml4ZWQg
d2l0aCAiR0xfIiBhcmUgcmVzZXJ2ZWQuCi0gICAgaWYgKG5hbWUuc3Vic3RyKDAsIDMpID09ICJH
TF8iKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5hbWVzIGNvbnRhaW5pbmcgdHdv
IGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS5maW5k
KCJfXyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgaXNNYWNyb1ByZWRlZmluZWQoY29uc3Qg
c3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
cDo6TWFjcm9TZXQmIG1hY3JvU2V0KQotewotICAgIHBwOjpNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1hY3JvU2V0LmZpbmQobmFtZSk7Ci0gICAgcmV0dXJuIGl0ZXIgIT0gbWFjcm9T
ZXQuZW5kKCkgPyBpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCA6IGZhbHNlOwotfQotCi1uYW1lc3Bh
Y2UgcHAKLXsKLQotY2xhc3MgRGVmaW5lZFBhcnNlciA6IHB1YmxpYyBMZXhlcgotewotICBwdWJs
aWM6Ci0gICAgRGVmaW5lZFBhcnNlcihMZXhlciogbGV4ZXIsCi0gICAgICAgICAgICAgICAgICBj
b25zdCBNYWNyb1NldCogbWFjcm9TZXQsCi0gICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDoKLSAgICAgICAgbUxleGVyKGxleGVyKSwKLSAgICAgICAgbU1hY3JvU2V0
KG1hY3JvU2V0KSwKLSAgICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQotICAgIHsKLSAg
ICB9Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQot
ICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEZWZpbmVkKCJkZWZpbmVk
Iik7Ci0KLSAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOwotICAgICAgICBpZiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OklERU5USUZJRVIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
ICh0b2tlbi0+dmFsdWUgIT0ga0RlZmluZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgYm9vbCBwYXJlbiA9IGZhbHNlOwotICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7Ci0gICAg
ICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcmVu
ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAgICAgICAgewot
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURf
VE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTWFjcm9TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKLSAgICAgICAg
c3RkOjpzdHJpbmcgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSA/ICIxIiA6
ICIwIjsKLQotICAgICAgICBpZiAocGFyZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MZXhl
ci0+bGV4KHRva2VuKTsKLSAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHNraXBV
bnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBv
cGVyYXRvci4KLSAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09O
U1RfSU5UIHRva2VuLgotICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7Ci0g
ICAgICAgIHRva2VuLT52YWx1ZSA9IGV4cHJlc3Npb247Ci0gICAgfQotCi0gIHByaXZhdGU6Ci0g
ICAgTGV4ZXIqIG1MZXhlcjsKLSAgICBjb25zdCBNYWNyb1NldCogbU1hY3JvU2V0OwotICAgIERp
YWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Ci19OwotCi1EaXJlY3RpdmVQYXJzZXI6OkRpcmVjdGl2
ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKLSAgICBtVG9rZW5p
emVyKHRva2VuaXplciksCi0gICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKLSAgICBtRGlhZ25vc3Rp
Y3MoZGlhZ25vc3RpY3MpLAotICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIp
Ci17Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQotewotICAg
IGRvCi0gICAgewotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotCi0gICAgICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCkKLSAgICAgICAgewotICAgICAgICAgICAg
cGFyc2VEaXJlY3RpdmUodG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuLT50
eXBlID09IFRva2VuOjpMQVNUKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1Db25kaXRp
b25hbFN0YWNrLmVtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
Q29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFM
X1VOVEVSTUlOQVRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
ay5sb2NhdGlvbiwgYmxvY2sudHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgfSB3aGlsZSAoc2tpcHBpbmcoKSB8fCAodG9rZW4tPnR5cGUg
PT0gJ1xuJykpOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9r
ZW4qIHRva2VuKQotewotICAgIGFzc2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7
Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0
aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKLQotICAgIC8vIFdoaWxlIGluIGFuIGV4Y2x1ZGVk
IGNvbmRpdGlvbmFsIGJsb2NrL2dyb3VwLAotICAgIC8vIHdlIG9ubHkgcGFyc2UgY29uZGl0aW9u
YWwgZGlyZWN0aXZlcy4KLSAgICBpZiAoc2tpcHBpbmcoKSAmJiAhaXNDb25kaXRpb25hbERpcmVj
dGl2ZShkaXJlY3RpdmUpKQotICAgIHsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIs
IHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaChkaXJlY3RpdmUp
Ci0gICAgewotICAgICAgY2FzZSBESVJFQ1RJVkVfTk9ORToKLSAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OkRJUkVDVElWRV9JTlZBTElEX05BTUUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIERJUkVDVElWRV9ERUZJTkU6Ci0gICAgICAgIHBhcnNlRGVmaW5lKHRva2VuKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKLSAgICAgICAgcGFyc2VV
bmRlZih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6Ci0g
ICAgICAgIHBhcnNlSWYodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNU
SVZFX0lGREVGOgotICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Ci0gICAgICAgIHBhcnNlSWZuZGVmKHRva2VuKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgotICAgICAgICBwYXJz
ZUVsc2UodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VMSUY6
Ci0gICAgICAgIHBhcnNlRWxpZih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBE
SVJFQ1RJVkVfRU5ESUY6Ci0gICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgotICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6Ci0gICAgICAg
IHBhcnNlUHJhZ21hKHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElW
RV9FWFRFTlNJT046Ci0gICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgotICAgICAgICBwYXJzZVZlcnNpb24o
dG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6Ci0gICAg
ICAgIHBhcnNlTGluZSh0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc2tpcFVu
dGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46
OkxBU1QpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
RU9GX0lOX0RJUkVDVElWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfREVGSU5FKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
Ci0gICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNNYWNyb1ByZWRlZmluZWQodG9r
ZW4tPnZhbHVlLCAqbU1hY3JvU2V0KSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc01hY3JvTmFtZVJlc2VydmVkKHRva2VuLT52YWx1
ZSkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFD
Uk9fTkFNRV9SRVNFUlZFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTWFj
cm8gbWFjcm87Ci0gICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKLSAgICBtYWNyby5u
YW1lID0gdG9rZW4tPnZhbHVlOwotCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBp
ZiAodG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+aGFzTGVhZGluZ1NwYWNlKCkpCi0gICAg
ewotICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3JvLiBDb2xsZWN0IGFyZ3VtZW50cy4KLSAg
ICAgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1bmM7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgICAgICAgICBpZiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OklERU5USUZJRVIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0b2tlbi0+dmFsdWUpOwotCi0gICAgICAg
ICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcsJy4KLSAgICAgICAgfSB3aGls
ZSAodG9rZW4tPnR5cGUgPT0gJywnKTsKLQotICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJykn
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCi0gICAgfQotCi0gICAgd2hpbGUgKCh0b2tlbi0+
dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsKLSAg
ICAgICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3Nh
cnkgaW4gcmVwbGFjZW1lbnQKLSAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxs
b3dzIHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0bwotICAgICAgICAvLyBjb21wYXJlIG1h
Y3Jvcy4KLSAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKLSAgICAg
ICAgbWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOwotICAgICAgICBtVG9rZW5p
emVyLT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0
eSgpKQotICAgIHsKLSAgICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2Vt
ZW50IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZgotICAgICAgICAvLyB0aGUgcmVwbGFj
ZW1lbnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFjcm8uCi0gICAgICAgIG1hY3JvLnJlcGxh
Y2VtZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7Ci0gICAgfQotCi0gICAg
Ly8gQ2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KLSAgICBNYWNyb1NldDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKLSAgICBpZiAoaXRlciAh
PSBtTWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKLSAgICB7
Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklO
RUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFj
cm8pKTsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2Vu
KQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7
Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6SURFTlRJRklFUikKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+
dmFsdWUpOwotICAgIGlmIChpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkpCi0gICAgewotICAgICAg
ICBpZiAoaXRlci0+c2Vjb25kLnByZWRlZmluZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1VOREVGSU5F
RCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1NYWNyb1NldC0+ZXJhc2UoaXRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihU
b2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNU
SVZFX0lGKTsKLSAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOwotfQotCi12b2lkIERpcmVj
dGl2ZVBhcnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERp
cmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKLSAgICBwYXJzZUNvbmRpdGlvbmFs
SWYodG9rZW4pOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4q
IHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9J
Rk5ERUYpOwotICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJl
Y3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKLQotICAgIGlmIChtQ29uZGl0aW9uYWxT
dGFjay5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50
aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7Ci0gICAg
aWYgKGJsb2NrLnNraXBCbG9jaykKLSAgICB7Ci0gICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBK
dXN0IHNraXAgdGhlIHdob2xlIGxpbmUuCi0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVy
LCB0b2tlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJsb2NrLmZvdW5kRWxz
ZUdyb3VwKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYmxvY2su
Zm91bmRFbHNlR3JvdXAgPSB0cnVlOwotICAgIGJsb2NrLnNraXBHcm91cCA9IGJsb2NrLmZvdW5k
VmFsaWRHcm91cDsKLSAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSB0cnVlOwotCi0gICAgLy8g
V2FybiBpZiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zIGFmdGVyICNlbHNlLgotICAgIG1Ub2tlbml6
ZXItPmxleCh0b2tlbik7Ci0gICAgaWYgKCFpc0VPRCh0b2tlbikpCi0gICAgewotICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9U
T0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAg
IH0KLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCi17
Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOwotCi0g
ICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25h
bFN0YWNrLmJhY2soKTsKLSAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQotICAgIHsKLSAgICAgICAg
Ly8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KLSAgICAgICAgc2tp
cFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0g
ICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGJsb2NrLmZvdW5kVmFsaWRHcm91cCkKLSAgICB7Ci0gICAgICAgIC8v
IERvIG5vdCBwYXJzZSB0aGUgZXhwcmVzc2lvbi4KLSAgICAgICAgLy8gQWxzbyBiZSBjYXJlZnVs
IG5vdCB0byBlbWl0IGEgZGlhZ25vc3RpYy4KLSAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gdHJ1
ZTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGludCBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9r
ZW4pOwotICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsKLSAgICBibG9jay5m
b3VuZFZhbGlkR3JvdXAgPSBleHByZXNzaW9uICE9IDA7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVuZGlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZl
KHRva2VuKSA9PSBESVJFQ1RJVkVfRU5ESUYpOwotCi0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNr
LmVtcHR5KCkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6Q09ORElUSU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxF
T0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbUNv
bmRpdGlvbmFsU3RhY2sucG9wX2JhY2soKTsKLQotICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRv
a2VucyBhZnRlciAjZW5kaWYuCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAo
IWlzRU9EKHRva2VuKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgfQotfQotCi12b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VSUk9SKTsKLQotICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0
cmVhbTsKLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIHdoaWxlICgodG9rZW4tPnR5
cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAgICB7Ci0gICAg
ICAgIHN0cmVhbSA8PCAqdG9rZW47Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0g
ICAgfQotICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24s
IHN0cmVhbS5zdHIoKSk7Ci19Ci0KLS8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBu
YW1lWyh2YWx1ZSldLgotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0
b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJB
R01BKTsKLQotICAgIGVudW0gU3RhdGUKLSAgICB7Ci0gICAgICAgIFBSQUdNQV9OQU1FLAotICAg
ICAgICBMRUZUX1BBUkVOLAotICAgICAgICBQUkFHTUFfVkFMVUUsCi0gICAgICAgIFJJR0hUX1BB
UkVOCi0gICAgfTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIHN0ZDo6c3RyaW5nIG5h
bWUsIHZhbHVlOwotICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOwotCi0gICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tl
bi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICBzd2l0Y2goc3RhdGUrKykK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6Ci0gICAgICAgICAgICBuYW1l
ID0gdG9rZW4tPnZhbHVlOwotICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5
cGUgPT0gVG9rZW46OklERU5USUZJRVIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBMRUZUX1BBUkVOOgotICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5
cGUgPT0gJygnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgUFJBR01BX1ZB
TFVFOgotICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgICAgICAgICB2YWxp
ZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFJJR0hUX1BBUkVOOgotICAgICAgICAgICAgdmFs
aWQgPSB2YWxpZCAmJiAodG9rZW4tPnR5cGUgPT0gJyknKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAg
ICB9Ci0KLSAgICB2YWxpZCA9IHZhbGlkICYmICgoc3RhdGUgPT0gUFJBR01BX05BTUUpIHx8ICAg
ICAvLyBFbXB0eSBwcmFnbWEuCi0gICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IExFRlRf
UEFSRU4pIHx8ICAgICAgLy8gV2l0aG91dCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAo
c3RhdGUgPT0gUklHSFRfUEFSRU4gKyAxKSk7ICAvLyBXaXRoIHZhbHVlLgotICAgIGlmICghdmFs
aWQpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5S
RUNPR05JWkVEX1BSQUdNQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCBuYW1lKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RhdGUgPiBQUkFHTUFfTkFNRSkg
IC8vIERvIG5vdCBub3RpZnkgZm9yIGVtcHR5IHByYWdtYS4KLSAgICB7Ci0gICAgICAgIG1EaXJl
Y3RpdmVIYW5kbGVyLT5oYW5kbGVQcmFnbWEodG9rZW4tPmxvY2F0aW9uLCBuYW1lLCB2YWx1ZSk7
Ci0gICAgfQotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHRlbnNpb24oVG9rZW4q
IHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9F
WFRFTlNJT04pOwotCi0gICAgZW51bSBTdGF0ZQotICAgIHsKLSAgICAgICAgRVhUX05BTUUsCi0g
ICAgICAgIENPTE9OLAotICAgICAgICBFWFRfQkVIQVZJT1IKLSAgICB9OwotCi0gICAgYm9vbCB2
YWxpZCA9IHRydWU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZSwgYmVoYXZpb3I7Ci0gICAgaW50IHN0
YXRlID0gRVhUX05BTUU7Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIHdoaWxl
ICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgRVhUX05BTUU6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICh2YWxpZCkgbmFtZSA9IHRva2VuLT52YWx1ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgQ09MT046Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRv
a2VuLT50eXBlICE9ICc6JykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUp
OwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVYVF9CRUhBVklPUjoKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0VYVEVOU0lPTl9CRUhBVklPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2YWxpZCkgYmVo
YXZpb3IgPSB0b2tlbi0+dmFsdWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgaWYgKHZhbGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsKLSAgICB9Ci0gICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBFWFRfQkVIQVZJT1Ig
KyAxKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgdmFsaWQgPSBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHZhbGlkKQotICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxl
RXh0ZW5zaW9uKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgYmVoYXZpb3IpOwotfQotCi12b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVkVSU0lPTik7Ci0KLSAgICBlbnVtIFN0
YXRlCi0gICAgewotICAgICAgICBWRVJTSU9OX05VTUJFUgotICAgIH07Ci0KLSAgICBib29sIHZh
bGlkID0gdHJ1ZTsKLSAgICBpbnQgdmVyc2lvbiA9IDA7Ci0gICAgaW50IHN0YXRlID0gVkVSU0lP
Tl9OVU1CRVI7Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIHdoaWxlICgodG9r
ZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgVkVS
U0lPTl9OVU1CRVI6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpDT05TVF9JTlQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZh
bHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHZhbGlkKSB2ZXJzaW9uID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYg
KHZhbGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB9Ci0gICAg
aWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQotICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHZhbGlk
KQotICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRp
b24sIHZlcnNpb24pOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2Vu
KiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVf
TElORSk7Ci0KLSAgICBlbnVtIFN0YXRlCi0gICAgewotICAgICAgICBMSU5FX05VTUJFUiwKLSAg
ICAgICAgRklMRV9OVU1CRVIKLSAgICB9OwotCi0gICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAg
aW50IGxpbmUgPSAwLCBmaWxlID0gMDsKLSAgICBpbnQgc3RhdGUgPSBMSU5FX05VTUJFUjsKLQot
ICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1E
aWFnbm9zdGljcyk7Ci0gICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwotICAgIHdoaWxlICgo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
TElORV9OVU1CRVI6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpDT05TVF9JTlQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfTlVNQkVSLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHZhbGlkKSBsaW5lID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEZJTEVfTlVNQkVSOgotICAgICAgICAgICAg
aWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
SU5WQUxJRF9GSUxFX05VTUJFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2YWxpZCkgZmlsZSA9IGF0
b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1hY3JvRXhwYW5k
ZXIubGV4KHRva2VuKTsKLSAgICB9Ci0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEZJTEVf
TlVNQkVSKSAmJiAoc3RhdGUgIT0gRklMRV9OVU1CRVIgKyAxKSkKLSAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0xJTkVfRElSRUNUSVZFLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1
ZSk7Ci0gICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICh2YWxpZCkKLSAgICB7
Ci0gICAgICAgIG1Ub2tlbml6ZXItPnNldExpbmVOdW1iZXIobGluZSk7Ci0gICAgICAgIGlmIChz
dGF0ZSA9PSBGSUxFX05VTUJFUiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7
Ci0gICAgfQotfQotCi1ib29sIERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAotewot
ICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
b25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsK
LSAgICByZXR1cm4gYmxvY2suc2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKLX0KLQotdm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCi17Ci0g
ICAgQ29uZGl0aW9uYWxCbG9jayBibG9jazsKLSAgICBibG9jay50eXBlID0gdG9rZW4tPnZhbHVl
OwotICAgIGJsb2NrLmxvY2F0aW9uID0gdG9rZW4tPmxvY2F0aW9uOwotCi0gICAgaWYgKHNraXBw
aW5nKCkpCi0gICAgewotICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGJsb2NrIGlzIGluc2lk
ZSBhbm90aGVyIGNvbmRpdGlvbmFsIGdyb3VwCi0gICAgICAgIC8vIHdoaWNoIGlzIHNraXBwZWQu
IEFzIGEgY29uc2VxdWVuY2UgdGhpcyB3aG9sZSBibG9jayBpcyBza2lwcGVkLgotICAgICAgICAv
LyBCZSBjYXJlZnVsIG5vdCB0byBwYXJzZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0aGF0
IG1pZ2h0Ci0gICAgICAgIC8vIGVtaXQgYSBkaWFnbm9zdGljLgotICAgICAgICBza2lwVW50aWxF
T0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICBibG9jay5za2lwQmxvY2sgPSB0cnVlOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9
IGdldERpcmVjdGl2ZSh0b2tlbik7Ci0KLSAgICAgICAgaW50IGV4cHJlc3Npb24gPSAwOwotICAg
ICAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRElSRUNU
SVZFX0lGOgotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2Vu
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgot
ICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKLSAgICAg
ICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbikgPT0gMCA/IDEg
OiAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBi
bG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7Ci0gICAgICAgIGJsb2NrLmZvdW5kVmFs
aWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKLSAgICB9Ci0gICAgbUNvbmRpdGlvbmFsU3RhY2su
cHVzaF9iYWNrKGJsb2NrKTsKLX0KLQotaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNz
aW9uSWYoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfSUYpIHx8Ci0gICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJ
UkVDVElWRV9FTElGKSk7Ci0KLSAgICBEZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJzZXIobVRva2Vu
aXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwotICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9F
eHBhbmRlcigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwotICAgIEV4
cHJlc3Npb25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURpYWdub3N0
aWNzKTsKLQotICAgIGludCBleHByZXNzaW9uID0gMDsKLSAgICBtYWNyb0V4cGFuZGVyLmxleCh0
b2tlbik7Ci0gICAgZXhwcmVzc2lvblBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Npb24pOwot
Ci0gICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNzaW9uLgot
ICAgIGlmICghaXNFT0QodG9rZW4pKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZXhwcmVzc2lvbjsKLX0KLQotaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSWZk
ZWYoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfSUZERUYpIHx8Ci0gICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4pID09IERJ
UkVDVElWRV9JRk5ERUYpKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgaWYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgIHsKLSAgICAgICAgbURpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZp
bmQodG9rZW4tPnZhbHVlKTsKLSAgICBpbnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3JvU2V0
LT5lbmQoKSA/IDEgOiAwOwotCi0gICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVy
ICNpZmRlZiBleHByZXNzaW9uLgotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgaWYg
KCFpc0VPRCh0b2tlbikpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgIH0KLSAgICByZXR1cm4gZXhwcmVzc2lv
bjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZVBhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTVhMDFlLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElW
RV9QQVJTRVJfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJT
RVJfSF8KLQotI2luY2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRl
ICJwcF91dGlscy5oIgotI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCi0KLW5hbWVzcGFjZSBw
cAotewotCi1jbGFzcyBEaWFnbm9zdGljczsKLWNsYXNzIERpcmVjdGl2ZUhhbmRsZXI7Ci1jbGFz
cyBUb2tlbml6ZXI7Ci0KLWNsYXNzIERpcmVjdGl2ZVBhcnNlciA6IHB1YmxpYyBMZXhlcgotewot
ICBwdWJsaWM6Ci0gICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCi0gICAgICAgICAgICAgICAgICAg
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2Vu
KiB0b2tlbik7Ci0KLSAgcHJpdmF0ZToKLSAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04o
RGlyZWN0aXZlUGFyc2VyKTsKLQotICAgIHZvaWQgcGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2Vu
KTsKLSAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZVVu
ZGVmKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUlmKFRva2VuKiB0b2tlbik7Ci0gICAg
dm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUlmbmRlZihUb2tl
biogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBw
YXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlRW5kaWYoVG9rZW4qIHRva2Vu
KTsKLSAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlUHJh
Z21hKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUV4dGVuc2lvbihUb2tlbiogdG9rZW4p
OwotICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUxp
bmUoVG9rZW4qIHRva2VuKTsKLQotICAgIGJvb2wgc2tpcHBpbmcoKSBjb25zdDsKLSAgICB2b2lk
IHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pOwotICAgIGludCBwYXJzZUV4cHJlc3Np
b25JZihUb2tlbiogdG9rZW4pOwotICAgIGludCBwYXJzZUV4cHJlc3Npb25JZmRlZihUb2tlbiog
dG9rZW4pOwotCi0gICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sKLSAgICB7Ci0gICAgICAgIHN0
ZDo6c3RyaW5nIHR5cGU7Ci0gICAgICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwotICAgICAg
ICBib29sIHNraXBCbG9jazsKLSAgICAgICAgYm9vbCBza2lwR3JvdXA7Ci0gICAgICAgIGJvb2wg
Zm91bmRWYWxpZEdyb3VwOwotICAgICAgICBib29sIGZvdW5kRWxzZUdyb3VwOwotCi0gICAgICAg
IENvbmRpdGlvbmFsQmxvY2soKSA6Ci0gICAgICAgICAgICBza2lwQmxvY2soZmFsc2UpLAotICAg
ICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKLSAgICAgICAgICAgIGZvdW5kVmFsaWRHcm91cChm
YWxzZSksCi0gICAgICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxzZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgfTsKLSAgICBzdGQ6OnZlY3RvcjxDb25kaXRpb25hbEJsb2NrPiBtQ29uZGl0
aW9uYWxTdGFjazsKLSAgICBUb2tlbml6ZXIqIG1Ub2tlbml6ZXI7Ci0gICAgTWFjcm9TZXQqIG1N
YWNyb1NldDsKLSAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOwotICAgIERpcmVjdGl2ZUhh
bmRsZXIqIG1EaXJlY3RpdmVIYW5kbGVyOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5k
aWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIzYTljZTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQwICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBt
YWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAqLwotCi0vKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBm
b3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCi0KLSAgIENvcHlyaWdodCAoQykgMTk4
NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgot
ICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp
b24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLiAgKi8KLQotLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVh
dGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zCi0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlz
b24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawotICAgdW5kZXIgdGVy
bXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCi0g
ICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNp
b24gdGhlcmVvZgotICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5
b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQotICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYs
IHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcwotICAgc3BlY2lhbCBleGNlcHRp
b24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCi0gICBC
aXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYwotICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCi0KLSAgIFRo
aXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24gaW4KLSAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KLQotLyogQyBMQUxSKDEpIHBh
cnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5Ci0gICBzaW1wbGlm
eWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KLQotLyog
QWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8g
YXZvaWQKLSAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUg
ZG9uZSBldmVuIGZvciBsb2NhbAotICAgdmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lz
ZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4KLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRh
YmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KLSAgIGRlZmluZSBuZWNlc3Nh
cnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCi0gICBVU0VS
IE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KLQotLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8K
LSNkZWZpbmUgWVlCSVNPTiAxCi0KLS8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJ
U09OX1ZFUlNJT04gIjIuMyIKLQotLyogU2tlbGV0b24gbmFtZS4gICovCi0jZGVmaW5lIFlZU0tF
TEVUT05fTkFNRSAieWFjYy5jIgotCi0vKiBQdXJlIHBhcnNlcnMuICAqLwotI2RlZmluZSBZWVBV
UkUgMQotCi0vKiBVc2luZyBsb2NhdGlvbnMuICAqLwotI2RlZmluZSBZWUxTUF9ORUVERUQgMAot
Ci0vKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2Rl
ZmluZSB5eXBhcnNlIHBwcGFyc2UKLSNkZWZpbmUgeXlsZXggICBwcGxleAotI2RlZmluZSB5eWVy
cm9yIHBwZXJyb3IKLSNkZWZpbmUgeXlsdmFsICBwcGx2YWwKLSNkZWZpbmUgeXljaGFyICBwcGNo
YXIKLSNkZWZpbmUgeXlkZWJ1ZyBwcGRlYnVnCi0jZGVmaW5lIHl5bmVycnMgcHBuZXJycwotCi0K
LS8qIFRva2Vucy4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZWVRPS0VOVFlQ
RQotICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdE
QiBhbmQgb3RoZXIgZGVidWdnZXJzCi0gICAgICBrbm93IGFib3V0IHRoZW0uICAqLwotICAgZW51
bSB5eXRva2VudHlwZSB7Ci0gICAgIFRPS19DT05TVF9JTlQgPSAyNTgsCi0gICAgIFRPS19PUF9P
UiA9IDI1OSwKLSAgICAgVE9LX09QX0FORCA9IDI2MCwKLSAgICAgVE9LX09QX05FID0gMjYxLAot
ICAgICBUT0tfT1BfRVEgPSAyNjIsCi0gICAgIFRPS19PUF9HRSA9IDI2MywKLSAgICAgVE9LX09Q
X0xFID0gMjY0LAotICAgICBUT0tfT1BfUklHSFQgPSAyNjUsCi0gICAgIFRPS19PUF9MRUZUID0g
MjY2LAotICAgICBUT0tfVU5BUlkgPSAyNjcKLSAgIH07Ci0jZW5kaWYKLS8qIFRva2Vucy4gICov
Ci0jZGVmaW5lIFRPS19DT05TVF9JTlQgMjU4Ci0jZGVmaW5lIFRPS19PUF9PUiAyNTkKLSNkZWZp
bmUgVE9LX09QX0FORCAyNjAKLSNkZWZpbmUgVE9LX09QX05FIDI2MQotI2RlZmluZSBUT0tfT1Bf
RVEgMjYyCi0jZGVmaW5lIFRPS19PUF9HRSAyNjMKLSNkZWZpbmUgVE9LX09QX0xFIDI2NAotI2Rl
ZmluZSBUT0tfT1BfUklHSFQgMjY1Ci0jZGVmaW5lIFRPS19PUF9MRUZUIDI2NgotI2RlZmluZSBU
T0tfVU5BUlkgMjY3Ci0KLQotCi0KLS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNs
YXJhdGlvbnMuICAqLwotCi0KLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1n
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotI2lmIGRlZmlu
ZWQoX19HTlVDX18pCi0vLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2
YXJpYWJsZS4KLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVk
IgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1
IDQ3MDEpCi0jZW5kaWYKLQotI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKLQotI2luY2x1
ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0j
aW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJMZXhlci5oIgotI2luY2x1ZGUgIlRv
a2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7
Ci0jZGVmaW5lIHN0cnRvbGwgX3N0cnRvaTY0Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGludC5oPgot
dHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOwotI2VuZGlmICAvLyBfTVNDX1ZFUgotI2RlZmluZSBZ
WUVOQUJMRV9OTFMgMAotI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2RlZmluZSBZWVNU
WVBFX0lTX1RSSVZJQUwgMQotI2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLQotbmFtZXNw
YWNlIHsKLXN0cnVjdCBDb250ZXh0Ci17Ci0gICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGlj
czsKLSAgICBwcDo6TGV4ZXIqIGxleGVyOwotICAgIHBwOjpUb2tlbiogdG9rZW47Ci0gICAgaW50
KiByZXN1bHQ7Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KLQotc3RhdGljIGludCB5eWxleChZWVNU
WVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKENvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLQotLyogRW5hYmxpbmcgdHJhY2Vz
LiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUgWVlERUJVRyAwCi0jZW5kaWYKLQotLyog
RW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0jaWZkZWYgWVlFUlJPUl9WRVJC
T1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEK
LSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5n
IHRoZSB0b2tlbiB0YWJsZS4gICovCi0jaWZuZGVmIFlZVE9LRU5fVEFCTEUKLSMgZGVmaW5lIFlZ
VE9LRU5fVEFCTEUgMAotI2VuZGlmCi0KLSNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmlu
ZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotdHlwZWRlZiBpbnQgWVlTVFlQRTsKLSMgZGVmaW5lIHl5
c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KLSMgZGVm
aW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEK
LSNlbmRpZgotCi0KLQotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlv
bnMuICAqLwotCi0KLS8qIExpbmUgMjE2IG9mIHlhY2MuYy4gICovCi0KLQotI2lmZGVmIHNob3J0
Ci0jIHVuZGVmIHNob3J0Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZ
WVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5
eXR5cGVfdWludDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZVFlQ
RV9JTlQ4IHl5dHlwZV9pbnQ4OwotI2VsaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQotdHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKLSNlbHNlCi10eXBlZGVm
IHNob3J0IGludCB5eXR5cGVfaW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQxNgot
dHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7Ci0jZWxzZQotdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lO
VDE2Ci10eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7Ci0jZWxzZQotdHlwZWRlZiBz
aG9ydCBpbnQgeXl0eXBlX2ludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYgWVlTSVpFX1QKLSMgaWZk
ZWYgX19TSVpFX1RZUEVfXwotIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KLSMgZWxp
ZiBkZWZpbmVkIHNpemVfdAotIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVm
aW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0j
ICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwot
IyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbHNlCi0jICBkZWZpbmUgWVlTSVpFX1QgdW5z
aWduZWQgaW50Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZ
U0laRV9UKSAtMSkKLQotI2lmbmRlZiBZWV8KLSMgaWYgWVlFTkFCTEVfTkxTCi0jICBpZiBFTkFC
TEVfTkxTCi0jICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICAgZGVmaW5lIFlZXyhtc2dpZCkgZGdldHRleHQgKCJiaXNvbi1ydW50aW1l
IiwgbXNnaWQpCi0jICBlbmRpZgotIyBlbmRpZgotIyBpZm5kZWYgWVlfCi0jICBkZWZpbmUgWVlf
KG1zZ2lkKSBtc2dpZAotIyBlbmRpZgotI2VuZGlmCi0KLS8qIFN1cHByZXNzIHVudXNlZC12YXJp
YWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwotI2lmICEgZGVmaW5lZCBsaW50IHx8IGRl
ZmluZWQgX19HTlVDX18KLSMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQotI2Vsc2UKLSMg
ZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCi0jZW5kaWYKLQotLyogSWRlbnRpdHkgZnVuY3Rp
b24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4g
ICovCi0jaWZuZGVmIGxpbnQKLSMgZGVmaW5lIFlZSUQobikgKG4pCi0jZWxzZQotI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBpbnQKLVlZSUQgKGludCBp
KQotI2Vsc2UKLXN0YXRpYyBpbnQKLVlZSUQgKGkpCi0gICAgaW50IGk7Ci0jZW5kaWYKLXsKLSAg
cmV0dXJuIGk7Ci19Ci0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJS
T1JfVkVSQk9TRQotCi0vKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVm
aW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCi0KLSMgaWZkZWYgWVlTVEFDS19VU0VfQUxM
T0NBCi0jICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgICBpZmRlZiBfX0dOVUNfXwotIyAgICBk
ZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9f
QlVJTFRJTl9WQV9BUkdfSU5DUgotIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVsaWYgZGVmaW5lZCBfQUlYCi0jICAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCi0jICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCi0jICAg
IGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0j
ICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQotIyAgIGVsc2UKLSMgICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0MgYWxsb2NhCi0jICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9T
VERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAot
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi0jICAgICBp
bmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAg
ICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgICAgZW5k
aWYKLSMgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLQotIyBpZmRlZiBZ
WVNUQUNLX0FMTE9DCi0gICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcu
ICAqLwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hp
bGUgKFlZSUQgKDApKQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8qIFRo
ZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9m
IHRoZSBzdGFjaywKLSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQw
OTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAoTikg
aWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAgICAg
IHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNs
b3RzLiAgKi8KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29u
YWJsZSBjaXJjYSAyMDA2ICovCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFDS19B
TExPQyBZWU1BTExPQwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRlZiBZ
WVNUQUNLX0FMTE9DX01BWElNVU0KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZ
U0laRV9NQVhJTVVNCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBk
ZWZpbmVkIF9TVERMSUJfSCBcCi0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVm
aW5lZCBtYWxsb2MpIFwKLQkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUp
KSkKLSMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLwotIyAgIGlmbmRlZiBfU1RETElCX0gKLSMgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAg
ZW5kaWYKLSMgIGVuZGlmCi0jICBpZm5kZWYgWVlNQUxMT0MKLSMgICBkZWZpbmUgWVlNQUxMT0Mg
bWFsbG9jCi0jICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgX1NURExJQl9IICYm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgKm1hbGxvYyAoWVlT
SVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZW5kaWYKLSMg
IGVuZGlmCi0jICBpZm5kZWYgWVlGUkVFCi0jICAgZGVmaW5lIFlZRlJFRSBmcmVlCi0jICAgaWYg
ISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRp
ZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotCi0jaWYg
KCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBc
Ci0JIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwp
KSkKLQotLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1l
bWJlci4gICovCi11bmlvbiB5eWFsbG9jCi17Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNU
WVBFIHl5dnM7Ci0gIH07Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVu
IG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCi0jIGRlZmluZSBZWVNUQUNLX0dB
UF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKLQotLyogVGhlIHNpemUgb2Yg
YW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0YWNrcywgZWFjaCB3aXRoCi0g
ICBOIGVsZW1lbnRzLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAotICAgICAoKE4p
ICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlTVFlQRSkpIFwKLSAgICAgICsg
WVlTVEFDS19HQVBfTUFYSU1VTSkKLQotLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gRlJPTSB0
byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCi0gICBub3Qgb3ZlcmxhcC4gICov
Ci0jIGlmbmRlZiBZWUNPUFkKLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19f
Ci0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9t
ZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9mICgqKEZyb20pKSkKLSMgIGVsc2UKLSMg
ICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKLSAgICAgIGRvCQkJCQlcCi0JewkJ
CQkJXAotCSAgWVlTSVpFX1QgeXlpOwkJCQlcCi0JICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3Vu
dCk7IHl5aSsrKQlcCi0JICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAotCX0JCQkJCVwK
LSAgICAgIHdoaWxlIChZWUlEICgwKSkKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLS8qIFJlbG9jYXRl
IFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQotICAgbG9j
YWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcg
bnVtYmVyIG9mCi0gICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUg
bmV3IGxvY2F0aW9uIG9mIHRoZQotICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVy
bHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKLSAgIHN0YWNrLiAgKi8KLSMgZGVmaW5l
IFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spCQkJCQlcCi0gICAgZG8JCQkJCQkJCQlcCi0gICAgICB7
CQkJCQkJCQkJXAotCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAotCVlZQ09QWSAoJnl5cHRy
LT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKLQlTdGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJ
CQkJXAotCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RB
Q0tfR0FQX01BWElNVU07IFwKLQl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIp
OwkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIHdoaWxlIChZWUlEICgwKSkKLQotI2VuZGlm
Ci0KLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4g
ICovCi0jZGVmaW5lIFlZRklOQUwgIDE0Ci0vKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRB
QkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMTc1Ci0KLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIg
b2YgdGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICAyNwotLyogWVlOTlRTIC0tIE51
bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDMKLS8qIFlZTlJVTEVT
IC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICAyNgotLyogWVlOUlVM
RVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgNTIKLQotLyog
WVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0
byBZWUxFWC4gICovCi0jZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAg
MjY3Ci0KLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKLSAgKCh1bnNpZ25lZCBpbnQp
IChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQotCi0v
KiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5n
IHRvIFlZTEVYLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9
Ci17Ci0gICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjEs
ICAgICA4LCAgICAgMiwKLSAgICAgIDI1LCAgICAyNiwgICAgMTksICAgIDE3LCAgICAgMiwgICAg
MTgsICAgICAyLCAgICAyMCwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAx
MSwgICAgIDIsICAgIDEyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDcsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDYsICAgICAyLCAgICAyNCwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUs
ICAgICA5LCAgICAxMCwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDIyCi19OwotCi0j
aWYgWVlERUJVRwotLyogWVlQUkhTW1lZTl0gLS0gSW5kZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1i
b2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCi0gICBZWVJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5cHJoc1tdID0KLXsKLSAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAg
ICAgNywgICAgMTEsICAgIDE1LCAgICAxOSwgICAgMjMsICAgIDI3LAotICAgICAgMzEsICAgIDM1
LCAgICAzOSwgICAgNDMsICAgIDQ3LCAgICA1MSwgICAgNTUsICAgIDU5LCAgICA2MywgICAgNjcs
Ci0gICAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MQotfTsK
LQotLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAg
Ki8KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KLXsKLSAgICAgIDI4LCAgICAg
MCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgIDMsICAgIC0xLCAgICAyOSwgICAgIDQsICAgIDI5
LAotICAgICAgLTEsICAgIDI5LCAgICAgNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDYsICAg
IDI5LCAgICAtMSwgICAgMjksCi0gICAgICAgNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDgs
ICAgIDI5LCAgICAtMSwgICAgMjksICAgICA5LCAgICAyOSwKLSAgICAgIC0xLCAgICAyOSwgICAg
MTAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEzLCAgICAyOSwgICAgLTEsICAgIDI5LAotICAg
ICAgMTQsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEyLCAgICAyOSwgICAgLTEsICAgIDI5LCAg
ICAxMSwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgIDE1LCAgICAyOSwgICAgLTEsICAgIDI5
LCAgICAxNiwgICAgMjksICAgIC0xLCAgICAyOSwKLSAgICAgIDE4LCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAxNywgICAgMjksICAgIC0xLCAgICAyOSwgICAgMjEsICAgIDI5LAotICAgICAgLTEs
ICAgIDI5LCAgICAyMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTksICAgIDI5LCAgICAtMSwg
ICAgMjMsCi0gICAgICAyOSwgICAgLTEsICAgIDI0LCAgICAyOSwgICAgLTEsICAgIDE4LCAgICAy
OSwgICAgLTEsICAgIDE3LCAgICAyOSwKLSAgICAgIC0xLCAgICAyNSwgICAgMjksICAgIDI2LCAg
ICAtMQotfTsKLQotLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVt
YmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxp
bmVbXSA9Ci17Ci0gICAgICAgMCwgICAgODksICAgIDg5LCAgICA5NiwgICAgOTcsICAgMTAwLCAg
IDEwMywgICAxMDYsICAgMTA5LCAgIDExMiwKLSAgICAgMTE1LCAgIDExOCwgICAxMjEsICAgMTI0
LCAgIDEyNywgICAxMzAsICAgMTMzLCAgIDEzNiwgICAxMzksICAgMTQyLAotICAgICAxNTUsICAg
MTY4LCAgIDE3MSwgICAxNzQsICAgMTc3LCAgIDE4MCwgICAxODMKLX07Ci0jZW5kaWYKLQotI2lm
IFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKLS8qIFlZVE5BTUVb
U1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgotICAg
Rmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVy
bWluYWxzLiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQotewotICAi
JGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIlRPS19DT05TVF9JTlQiLCAiVE9LX09QX09S
IiwKLSAgIlRPS19PUF9BTkQiLCAiJ3wnIiwgIideJyIsICInJiciLCAiVE9LX09QX05FIiwgIlRP
S19PUF9FUSIsICInPCciLAotICAiJz4nIiwgIlRPS19PUF9HRSIsICJUT0tfT1BfTEUiLCAiVE9L
X09QX1JJR0hUIiwgIlRPS19PUF9MRUZUIiwgIicrJyIsCi0gICInLSciLCAiJyonIiwgIicvJyIs
ICInJSciLCAiVE9LX1VOQVJZIiwgIichJyIsICInficiLCAiJygnIiwgIicpJyIsCi0gICIkYWNj
ZXB0IiwgImlucHV0IiwgImV4cHJlc3Npb24iLCAwCi19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQ
UklOVAotLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0b2tlbiBudW1iZXIgY29y
cmVzcG9uZGluZyB0bwotICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgs
ICAgMjU5LCAgIDI2MCwgICAxMjQsICAgIDk0LCAgICAzOCwgICAyNjEsCi0gICAgIDI2MiwgICAg
NjAsICAgIDYyLCAgIDI2MywgICAyNjQsICAgMjY1LCAgIDI2NiwgICAgNDMsICAgIDQ1LCAgICA0
MiwKLSAgICAgIDQ3LCAgICAzNywgICAyNjcsICAgIDMzLCAgIDEyNiwgICAgNDAsICAgIDQxCi19
OwotIyBlbmRpZgotCi0vKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhh
dCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtd
ID0KLXsKLSAgICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOQotfTsKLQotLyogWVlSMltZWU5dIC0t
IE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4u
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQotewotICAgICAgIDAsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAg
IDMsCi0gICAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAzCi19OwotCi0vKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0
IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKLSAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUg
ZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybwotICAgbWVhbnMgdGhl
IGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRl
ZmFjdFtdID0KLXsKLSAgICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAotICAgICAgMjQsICAgIDIyLCAgICAyMywgICAg
IDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAgNCwgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDE0LCAgICAxMywgICAgMTEsICAg
IDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxNywgICAgMjEsCi0gICAgICAyMCwgICAgMTkK
LX07Ci0KLS8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVf
aW50OCB5eWRlZmdvdG9bXSA9Ci17Ci0gICAgICAtMSwgICAgIDcsICAgICA4Ci19OwotCi0vKiBZ
WVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2Ny
aWJpbmcKLSAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0xMQotc3RhdGlj
IGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Ci17Ci0gICAgICA0NiwgICAtMTEsICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgMTIsICAgIDY4LCAgIC0xMSwKLSAgICAg
LTExLCAgIC0xMSwgICAtMTEsICAgIDI3LCAgIC0xMSwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
NDYsICAgIDQ2LAotICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCi0gICAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC0x
MSwgICAgODUsICAgMTAxLCAgIDExNiwgICAxMzAsICAgMTQzLCAgIDE1NCwKLSAgICAgMTU0LCAg
IC0xMCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAgMzcsICAgIDM3LCAgICAzMSwgICAgMzEsICAg
LTExLAotICAgICAtMTEsICAgLTExCi19OwotCi0vKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwot
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9Ci17Ci0gICAgIC0xMSwgICAtMTEs
ICAgIC0yCi19OwotCi0vKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8g
aW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKLSAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAg
SWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAotICAgbnVtYmVyIGlzIHRoZSBvcHBv
c2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KLSAgIElmIFlZVEFCTEVfTklO
Riwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCi1zdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9Ci17Ci0gICAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMx
LCAgICAzMiwgICAgMTQsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCi0gICAgICA1MSwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAx
LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxNywgICAgMTgsICAgIDE5LAotICAgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
Ci0gICAgICAzMSwgICAgMzIsICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMgotfTsKLQotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
Y2hlY2tbXSA9Ci17Ci0gICAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgIDAsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAotICAgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCi0gICAgICAzMiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICAzLAotICAgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxNywgICAgMTgsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCi0gICAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAgNiwgICAgIDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwK
LSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMQotfTsKLQotLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIg
b2YgdGhlKSBhY2Nlc3NpbmcKLSAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwotc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgIDMsICAg
IDE3LCAgICAxOCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjgsICAgIDI5LCAgICAyOSwKLSAg
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyNiwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKLSAgICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LAotICAgICAgMjksICAgIDI5Ci19OwotCi0jZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0
YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUg
WVlFTVBUWQkJKC0yKQotI2RlZmluZSBZWUVPRgkJMAotCi0jZGVmaW5lIFlZQUNDRVBUCWdvdG8g
eXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZ
RVJST1IJCWdvdG8geXllcnJvcmxhYgotCi0KLS8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2Fs
bCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKLSAgIHRvIGVhc2UgdGhl
IHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBP
bmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4g
ICovCi0KLSNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCi0KLSNkZWZpbmUgWVlSRUNPVkVS
SU5HKCkgICghIXl5ZXJyc3RhdHVzKQotCi0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJ
CQkJCVwKLWRvCQkJCQkJCQlcCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAx
KQkJCQlcCi0gICAgewkJCQkJCQkJXAotICAgICAgeXljaGFyID0gKFRva2VuKTsJCQkJCQlcCi0g
ICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFU
RSAoeXljaGFyKTsJCQkJXAotICAgICAgWVlQT1BTVEFDSyAoMSk7CQkJCQkJXAotICAgICAgZ290
byB5eWJhY2t1cDsJCQkJCQlcCi0gICAgfQkJCQkJCQkJXAotICBlbHNlCQkJCQkJCQlcCi0gICAg
ewkJCQkJCQkJXAotICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNh
bm5vdCBiYWNrIHVwIikpOyBcCi0gICAgICBZWUVSUk9SOwkJCQkJCQlcCi0gICAgfQkJCQkJCQkJ
XAotd2hpbGUgKFlZSUQgKDApKQotCi0KLSNkZWZpbmUgWVlURVJST1IJMQotI2RlZmluZSBZWUVS
UkNPREUJMjU2Ci0KLQotLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBm
cm9tIFJIU1sxXSB0byBSSFNbTl0uCi0gICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8g
dGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJI
U1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KLQotI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgo
UmhzKVtLXSkKLSNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxU
KEN1cnJlbnQsIFJocywgTikJCQkJXAotICAgIGRvCQkJCQkJCQkJXAotICAgICAgaWYgKFlZSUQg
KE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0JewkJCQkJCQkJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IFlZUkhTTE9DIChSaHMs
IDEpLmZpcnN0X2xpbmU7CVwKLQkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAo
UmhzLCAxKS5maXJzdF9jb2x1bW47CVwKLQkgIChDdXJyZW50KS5sYXN0X2xpbmUgICAgPSBZWVJI
U0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7CQlcCi0JICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0g
WVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47CVwKLQl9CQkJCQkJCQlcCi0gICAgICBlbHNl
CQkJCQkJCQlcCi0JewkJCQkJCQkJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJy
ZW50KS5sYXN0X2xpbmUgICA9CQlcCi0JICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJ
CQkJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9
CQlcCi0JICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCi0JfQkJCQkJCQkJ
XAotICAgIHdoaWxlIChZWUlEICgwKSkKLSNlbmRpZgotCi0KLS8qIFlZX0xPQ0FUSU9OX1BSSU5U
IC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgotICAgVGhpcyBtYWNybyB3YXMg
bm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBvbmx5IGlmIHdlIGtub3cKLSAgIHdlIHdv
bid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBhcmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93
LiAgKi8KLQotI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVAotIyBpZiBZWUxUWVBFX0lTX1RSSVZJ
QUwKLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAotICAgICBmcHJp
bnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKLQkgICAgICAoTG9jKS5maXJzdF9saW5lLCAo
TG9jKS5maXJzdF9jb2x1bW4sCVwKLQkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0
X2NvbHVtbikKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykg
KCh2b2lkKSAwKQotIyBlbmRpZgotI2VuZGlmCi0KLQotLyogWVlMRVggLS0gY2FsbGluZyBgeXls
ZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCi0KLSNpZmRlZiBZWUxFWF9QQVJBTQot
IyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQotI2Vsc2UKLSMgZGVm
aW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0KQotI2VuZGlmCi0KLS8qIEVuYWJsZSBk
ZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KLSNpZiBZWURFQlVHCi0KLSMgaWZuZGVmIFlZRlBS
SU5URgotIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFD
RSAqLwotIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCi0jIGVuZGlmCi0KLSMgZGVmaW5lIFlZ
RFBSSU5URihBcmdzKQkJCVwKLWRvIHsJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJXAotICAg
IFlZRlBSSU5URiBBcmdzOwkJCQlcCi19IHdoaWxlIChZWUlEICgwKSkKLQotIyBkZWZpbmUgWVlf
U1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCi1kbyB7CQkJ
CQkJCQkJICBcCi0gIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCi0gICAgewkJCQkJCQkJCSAgXAot
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKLSAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAotCQkgIFR5cGUsIFZhbHVlLCBjb250ZXh0
KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAotICAgIH0JCQkJ
CQkJCQkgIFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92
YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAoteXlf
c3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkK
LSAgICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3Qg
KiBjb25zdCB5eXZhbHVlcDsKLSAgICBDb250ZXh0ICpjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlm
ICgheXl2YWx1ZXApCi0gICAgcmV0dXJuOwotICBZWVVTRSAoY29udGV4dCk7Ci0jIGlmZGVmIFlZ
UFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWVBSSU5UICh5eW91dHB1dCwg
eXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZWxzZQotICBZWVVTRSAoeXlvdXRwdXQp
OwotIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotCWJy
ZWFrOwotICAgIH0KLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgot
fCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5
dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQot
I2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5
dmFsdWVwLCBjb250ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0g
ICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIENvbnRleHQgKmNvbnRleHQ7
Ci0jZW5kaWYKLXsKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWUZQUklOVEYgKHl5
b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0gIGVsc2UKLSAgICBZWUZQ
UklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7Ci0KLSAgeXlf
c3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7
Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eV9z
dGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRv
IGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5
cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCi0jZWxzZQotc3RhdGljIHZvaWQK
LXl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICB5eXR5cGVfaW50MTYgKmJvdHRvbTsK
LSAgICB5eXR5cGVfaW50MTYgKnRvcDsKLSNlbmRpZgotewotICBZWUZQUklOVEYgKHN0ZGVyciwg
IlN0YWNrIG5vdyIpOwotICBmb3IgKDsgYm90dG9tIDw9IHRvcDsgKytib3R0b20pCi0gICAgWVlG
UFJJTlRGIChzdGRlcnIsICIgJWQiLCAqYm90dG9tKTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJc
biIpOwotfQotCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAotZG8g
ewkJCQkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAotICAgIHl5X3N0YWNrX3ByaW50ICgo
Qm90dG9tKSwgKFRvcCkpOwkJCQlcCi19IHdoaWxlIChZWUlEICgwKSkKLQotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVwb3J0IHRoYXQg
dGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3ByaW50IChZWVNU
WVBFICp5eXZzcCwgaW50IHl5cnVsZSwgQ29udGV4dCAqY29udGV4dCkKLSNlbHNlCi1zdGF0aWMg
dm9pZAoteXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlydWxlLCBjb250ZXh0KQotICAgIFlZU1RZ
UEUgKnl5dnNwOwotICAgIGludCB5eXJ1bGU7Ci0gICAgQ29udGV4dCAqY29udGV4dDsKLSNlbmRp
ZgotewotICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOwotICBpbnQgeXlpOwotICB1bnNpZ25l
ZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKLSAgWVlGUFJJTlRGIChzdGRlcnIs
ICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAotCSAgICAgeXlydWxl
IC0gMSwgeXlsbm8pOwotICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KLSAgZm9y
ICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQotICAgIHsKLSAgICAgIGZwcmludGYgKHN0
ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwotICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRl
cnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLQkJICAgICAgICYoeXl2c3BbKHl5aSAr
IDEpIC0gKHl5bnJocyldKQotCQkgICAgICAgCQkgICAgICAgLCBjb250ZXh0KTsKLSAgICAgIGZw
cmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAgfQotfQotCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJ
TlQoUnVsZSkJCVwKLWRvIHsJCQkJCVwKLSAgaWYgKHl5ZGVidWcpCQkJCVwKLSAgICB5eV9yZWR1
Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBjb250ZXh0KTsgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0K
LS8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlh
bGl6ZWQgc28gdGhhdAotICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCi1pbnQg
eXlkZWJ1ZzsKLSNlbHNlIC8qICFZWURFQlVHICovCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykK
LSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQot
IyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCi0jIGRlZmluZSBZWV9SRURVQ0Vf
UFJJTlQoUnVsZSkKLSNlbmRpZiAvKiAhWVlERUJVRyAqLwotCi0KLS8qIFlZSU5JVERFUFRIIC0t
IGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYJWVlJTklU
REVQVEgKLSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAotI2VuZGlmCi0KLS8qIFlZTUFYREVQVEgg
LS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5Ci0g
ICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KLQotICAg
RG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmlu
ZWQgaWYKLSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQ
VEgpCi0gICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1l
dGljLiAgKi8KLQotI2lmbmRlZiBZWU1BWERFUFRICi0jIGRlZmluZSBZWU1BWERFUFRIIDEwMDAw
Ci0jZW5kaWYKLQotDAotCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0KLSMgaWZuZGVmIHl5c3RybGVu
Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmlu
ZSB5eXN0cmxlbiBzdHJsZW4KLSMgIGVsc2UKLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RS
LiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAot
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMg
WVlTSVpFX1QKLXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKLSNlbHNlCi1zdGF0aWMgWVlT
SVpFX1QKLXl5c3RybGVuICh5eXN0cikKLSAgICBjb25zdCBjaGFyICp5eXN0cjsKLSNlbmRpZgot
ewotICBZWVNJWkVfVCB5eWxlbjsKLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXls
ZW4rKykKLSAgICBjb250aW51ZTsKLSAgcmV0dXJuIHl5bGVuOwotfQotIyAgZW5kaWYKLSMgZW5k
aWYKLQotIyBpZm5kZWYgeXlzdHBjcHkKLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmlu
ZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKLSMgICBkZWZpbmUgeXlzdHBjcHkg
c3RwY3B5Ci0jICBlbHNlCi0vKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBh
ZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCi0gICBZWURFU1QuICAqLwotI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyBjaGFyICoKLXl5c3Rw
Y3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQotI2Vsc2UKLXN0YXRpYyBjaGFy
ICoKLXl5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQotICAgIGNoYXIgKnl5ZGVzdDsKLSAgICBjb25z
dCBjaGFyICp5eXNyYzsKLSNlbmRpZgotewotICBjaGFyICp5eWQgPSB5eWRlc3Q7Ci0gIGNvbnN0
IGNoYXIgKnl5cyA9IHl5c3JjOwotCi0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAn
KQotICAgIGNvbnRpbnVlOwotCi0gIHJldHVybiB5eWQgLSAxOwotfQotIyAgZW5kaWYKLSMgZW5k
aWYKLQotIyBpZm5kZWYgeXl0bmFtZXJyCi0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBv
ZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQotICAgcXVvdGVzIGFuZCBi
YWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5eWVycm9yLiAgVGhlCi0gICBo
ZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhl
IHN0cmluZwotICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNo
IChvdGhlciB0aGFuCi0gICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZy
b20geXl0bmFtZS4gIElmIFlZUkVTIGlzCi0gICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwg
cmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Ci0gICB3b3VsZCBoYXZlIGJlZW4u
ICAqLwotc3RhdGljIFlZU0laRV9UCi15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFy
ICp5eXN0cikKLXsKLSAgaWYgKCp5eXN0ciA9PSAnIicpCi0gICAgewotICAgICAgWVlTSVpFX1Qg
eXluID0gMDsKLSAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3RyOwotCi0gICAgICBmb3IgKDs7
KQotCXN3aXRjaCAoKisreXlwKQotCSAgewotCSAgY2FzZSAnXCcnOgotCSAgY2FzZSAnLCc6Ci0J
ICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotCSAgY2FzZSAnXFwnOgotCSAgICBpZiAo
KisreXlwICE9ICdcXCcpCi0JICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCSAgICAv
KiBGYWxsIHRocm91Z2guICAqLwotCSAgZGVmYXVsdDoKLQkgICAgaWYgKHl5cmVzKQotCSAgICAg
IHl5cmVzW3l5bl0gPSAqeXlwOwotCSAgICB5eW4rKzsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2Ug
JyInOgotCSAgICBpZiAoeXlyZXMpCi0JICAgICAgeXlyZXNbeXluXSA9ICdcMCc7Ci0JICAgIHJl
dHVybiB5eW47Ci0JICB9Ci0gICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwotICAgIH0KLQotICBp
ZiAoISB5eXJlcykKLSAgICByZXR1cm4geXlzdHJsZW4gKHl5c3RyKTsKLQotICByZXR1cm4geXlz
dHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKLX0KLSMgZW5kaWYKLQotLyogQ29weSBpbnRv
IFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KLSAg
IFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0
ZXMgY29waWVkLAotICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBJZiBZ
WVJFU1VMVCBpcyBudWxsLCBkbyBub3QKLSAgIGNvcHkgYW55dGhpbmc7IGp1c3QgcmV0dXJuIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQotICAgY29waWVkLiAgQXMgYSBzcGVjaWFs
IGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCi0gICBtZXNzYWdl
IHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmlu
ZwotICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5c3ludGF4X2Vy
cm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUsIGludCB5eWNoYXIpCi17Ci0gIGludCB5
eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0KLSAgaWYgKCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5
biA8PSBZWUxBU1QpKQotICAgIHJldHVybiAwOwotICBlbHNlCi0gICAgewotICAgICAgaW50IHl5
dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5
dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5
c2l6ZTA7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUxOwotICAgICAgaW50IHl5c2l6ZV9vdmVyZmxv
dyA9IDA7Ci0gICAgICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsK
LSAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOwot
ICAgICAgaW50IHl5eDsKLQotIyBpZiAwCi0gICAgICAvKiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNl
ZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQgYXJlCi0JIGNvbnN0cnVjdGVkIG9uIHRo
ZSBmbHkuICAqLwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKLSAg
ICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMiKTsKLSAg
ICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMi
KTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMg
b3IgJXMgb3IgJXMiKTsKLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBl
eHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsKLSMgZW5kaWYKLSAgICAgIGNoYXIgKnl5
Zm10OwotICAgICAgY2hhciBjb25zdCAqeXlmOwotICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXl1
bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIjsKLSAgICAgIHN0YXRp
YyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOwotICAgICAgc3Rh
dGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7Ci0gICAgICBjaGFyIHl5Zm9ybWF0W3Np
emVvZiB5eXVuZXhwZWN0ZWQKLQkJICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQotCQkgICAg
KyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gLSAyKQotCQkgICAgICAgKiAoc2l6ZW9m
IHl5b3IgLSAxKSldOwotICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVjdGluZzsK
LQotICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRp
dmUgaW5kZXhlcyBpbgotCSBZWUNIRUNLLiAgKi8KLSAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8
IDAgPyAteXluIDogMDsKLQotICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXlj
aGVjayBhbmQgeXl0bmFtZS4gICovCi0gICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5
biArIDE7Ci0gICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hl
Y2tsaW0gOiBZWU5UT0tFTlM7Ci0gICAgICBpbnQgeXljb3VudCA9IDE7Ci0KLSAgICAgIHl5YXJn
WzBdID0geXl0bmFtZVt5eXR5cGVdOwotICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQs
IHl5dW5leHBlY3RlZCk7Ci0KLSAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVu
ZDsgKyt5eXgpCi0JaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVS
Uk9SKQotCSAgewotCSAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJ
TVVNKQotCSAgICAgIHsKLQkJeXljb3VudCA9IDE7Ci0JCXl5c2l6ZSA9IHl5c2l6ZTA7Ci0JCXl5
Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Ci0JCWJyZWFrOwotCSAgICAg
IH0KLQkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKLQkgICAgeXlzaXplMSA9
IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXhdKTsKLQkgICAgeXlzaXplX292ZXJm
bG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKLQkgICAgeXlzaXplID0geXlzaXplMTsKLQkgICAg
eXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4KTsKLQkgICAgeXlwcmVmaXggPSB5eW9y
OwotCSAgfQotCi0gICAgICB5eWYgPSBZWV8oeXlmb3JtYXQpOwotICAgICAgeXlzaXplMSA9IHl5
c2l6ZSArIHl5c3RybGVuICh5eWYpOwotICAgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUx
IDwgeXlzaXplKTsKLSAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0KLSAgICAgIGlmICh5eXNpemVf
b3ZlcmZsb3cpCi0JcmV0dXJuIFlZU0laRV9NQVhJTVVNOwotCi0gICAgICBpZiAoeXlyZXN1bHQp
Ci0JewotCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIn
cyBuYW1lIHNwYWNlLgotCSAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBp
ZiB0aGUgdHJhbnNsYXRpb24KLQkgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25n
IG51bWJlciBvZiAiJXMicy4gICovCi0JICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKLQkgIGludCB5
eWkgPSAwOwotCSAgd2hpbGUgKCgqeXlwID0gKnl5ZikgIT0gJ1wwJykKLQkgICAgewotCSAgICAg
IGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpCi0JCXsK
LQkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Ci0JCSAgeXlmICs9IDI7
Ci0JCX0KLQkgICAgICBlbHNlCi0JCXsKLQkJICB5eXArKzsKLQkJICB5eWYrKzsKLQkJfQotCSAg
ICB9Ci0JfQotICAgICAgcmV0dXJuIHl5c2l6ZTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogWVlFUlJP
Ul9WRVJCT1NFICovCi0MCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3lt
Ym9sLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KLQotLypBUkdTVVNFRCovCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5
OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0
eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKLSNlbHNlCi1zdGF0aWMg
dm9pZAoteXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCi0gICAg
Y29uc3QgY2hhciAqeXltc2c7Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFICp5eXZhbHVl
cDsKLSAgICBDb250ZXh0ICpjb250ZXh0OwotI2VuZGlmCi17Ci0gIFlZVVNFICh5eXZhbHVlcCk7
Ci0gIFlZVVNFIChjb250ZXh0KTsKLQotICBpZiAoIXl5bXNnKQotICAgIHl5bXNnID0gIkRlbGV0
aW5nIjsKLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2Nh
dGlvbnApOwotCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLQli
cmVhazsKLSAgICB9Ci19Ci0MCi0KLS8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAtV21pc3Npbmct
cHJvdG90eXBlcy4gICovCi0KLSNpZmRlZiBZWVBBUlNFX1BBUkFNCi0jaWYgZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCi1pbnQgeXlwYXJzZSAodm9pZCAqWVlQQVJTRV9Q
QVJBTSk7Ci0jZWxzZQotaW50IHl5cGFyc2UgKCk7Ci0jZW5kaWYKLSNlbHNlIC8qICEgWVlQQVJT
RV9QQVJBTSAqLwotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwot
aW50IHl5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpOwotI2Vsc2UKLWludCB5eXBhcnNlICgpOwot
I2VuZGlmCi0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCi0KLQotCi0KLQotCi0vKi0tLS0t
LS0tLS0uCi18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCi0KLSNpZmRlZiBZWVBBUlNFX1BB
UkFNCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBh
cnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQotI2Vsc2UKLWludAoteXlwYXJzZSAoWVlQQVJTRV9Q
QVJBTSkKLSAgICB2b2lkICpZWVBBUlNFX1BBUkFNOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFS
U0VfUEFSQU0gKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1p
bnQKLXl5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpCi0jZWxzZQotaW50Ci15eXBhcnNlIChjb250
ZXh0KQotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0jZW5kaWYKLSNlbmRpZgotewotICAvKiBUaGUg
bG9vay1haGVhZCBzeW1ib2wuICAqLwotaW50IHl5Y2hhcjsKLQotLyogVGhlIHNlbWFudGljIHZh
bHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLQotLyog
TnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KLWludCB5eW5lcnJzOwotCi0gIGlu
dCB5eXN0YXRlOwotICBpbnQgeXluOwotICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0
b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQg
eXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5z
bGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKLSNpZiBZWUVSUk9S
X1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0
ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5eW1z
Z2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5kaWYK
LQotICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgotICAgICBgeXlzcyc6IHJlbGF0
ZWQgdG8gc3RhdGVzLAotICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAot
ICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgotCi0gICAgIFJlZmVyIHRvIHRoZSBz
dGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdwotICAgICB0
byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KLQotICAvKiBUaGUgc3RhdGUgc3RhY2su
ICAqLwotICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOwotICB5eXR5cGVfaW50MTYg
Knl5c3MgPSB5eXNzYTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzcDsKLQotICAvKiBUaGUgc2VtYW50
aWMgdmFsdWUgc3RhY2suICAqLwotICBZWVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKLSAgWVlT
VFlQRSAqeXl2cyA9IHl5dnNhOwotICBZWVNUWVBFICp5eXZzcDsKLQotCi0KLSNkZWZpbmUgWVlQ
T1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkKLQotICBZWVNJWkVfVCB5
eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOwotCi0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byBy
ZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlCi0gICAgIGFjdGlvbiBy
b3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0KLQotICAvKiBUaGUgbnVtYmVyIG9mIHN5
bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLgotICAgICBLZWVwIHRvIHplcm8g
d2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovCi0gIGludCB5eWxlbiA9IDA7Ci0K
LSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRl
ID0gMDsKLSAgeXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlF
TVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCi0KLSAgLyogSW5pdGlhbGl6
ZSBzdGFjayBwb2ludGVycy4KLSAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxv
Y2F0aW9uIHN0YWNrCi0gICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFz
IHRoZSBzdGF0ZSBzdGFjay4KLSAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5p
dGlhbGl6ZWQuICAqLwotCi0gIHl5c3NwID0geXlzczsKLSAgeXl2c3AgPSB5eXZzOwotCi0gIGdv
dG8geXlzZXRzdGF0ZTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0
ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIHl5bmV3c3RhdGU6Ci0g
IC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRp
b24gc3RhY2tzCi0gICAgIGhhdmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0
ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLwotICB5eXNzcCsrOwotCi0geXlzZXRzdGF0ZToK
LSAgKnl5c3NwID0geXlzdGF0ZTsKLQotICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5
eXNzcCkKLSAgICB7Ci0gICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0
aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5
c3NwIC0geXlzcyArIDE7Ci0KLSNpZmRlZiB5eW92ZXJmbG93Ci0gICAgICB7Ci0JLyogR2l2ZSB1
c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotCSAg
IHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLQkg
ICBtZW1vcnkuICAqLwotCVlZU1RZUEUgKnl5dnMxID0geXl2czsKLQl5eXR5cGVfaW50MTYgKnl5
c3MxID0geXlzczsKLQotCi0JLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93
ZWQgYnkgdGhlIHNpemUgb2YgdGhlCi0JICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4g
Ynl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRo
ZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKLQkgICBiZSB1bmRlZmluZWQgaWYgeXlv
dmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KLQl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0
ZWQiKSwKLQkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotCQkgICAgJnl5
dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0KLQkJICAgICZ5eXN0YWNrc2l6ZSk7Ci0K
LQl5eXNzID0geXlzczE7Ci0JeXl2cyA9IHl5dnMxOwotICAgICAgfQotI2Vsc2UgLyogbm8geXlv
dmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5eWV4aGF1
c3RlZGxhYjsKLSMgZWxzZQotICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4g
ICovCi0gICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLQlnb3RvIHl5ZXhoYXVz
dGVkbGFiOwotICAgICAgeXlzdGFja3NpemUgKj0gMjsKLSAgICAgIGlmIChZWU1BWERFUFRIIDwg
eXlzdGFja3NpemUpCi0JeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0JeXl0
eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0JdW5pb24geXlhbGxvYyAqeXlwdHIgPQotCSAgKHVu
aW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUp
KTsKLQlpZiAoISB5eXB0cikKLQkgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0JWVlTVEFDS19SRUxP
Q0FURSAoeXlzcyk7Ci0JWVlTVEFDS19SRUxPQ0FURSAoeXl2cyk7Ci0KLSMgIHVuZGVmIFlZU1RB
Q0tfUkVMT0NBVEUKLQlpZiAoeXlzczEgIT0geXlzc2EpCi0JICBZWVNUQUNLX0ZSRUUgKHl5c3Mx
KTsKLSAgICAgIH0KLSMgZW5kaWYKLSNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCi0KLSAgICAg
IHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7Ci0gICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUg
LSAxOwotCi0KLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2Vk
IHRvICVsdVxuIiwKLQkJICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7Ci0KLSAg
ICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotCVlZQUJPUlQ7Ci0gICAg
fQotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRl
KSk7Ci0KLSAgZ290byB5eWJhY2t1cDsKLQotLyotLS0tLS0tLS0tLS4KLXwgeXliYWNrdXAuICB8
Ci1gLS0tLS0tLS0tLS0qLwoteXliYWNrdXA6Ci0KLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vz
c2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQotICAgICBsb29rLWFoZWFkIHRv
a2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAv
KiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9v
ay1haGVhZCB0b2tlbi4gICovCi0gIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9
PSBZWVBBQ1RfTklORikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLQotICAvKiBOb3Qga25vd24gPT4g
Z2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQot
ICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFo
ZWFkIHN5bWJvbC4gICovCi0gIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKLSAgICB7Ci0gICAgICBZ
WURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKLSAgICAgIHl5Y2hhciA9
IFlZTEVYOwotICAgIH0KLQotICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIHl5
Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBh
dCBlbmQgb2YgaW5wdXQuXG4iKSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgeXl0b2tl
biA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0
b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotICAgIH0KLQotICAvKiBJZiB0
aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3Ig
dG8KLSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KLSAgeXluICs9
IHl5dG9rZW47Ci0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0g
IT0geXl0b2tlbikKLSAgICBnb3RvIHl5ZGVmYXVsdDsKLSAgeXluID0geXl0YWJsZVt5eW5dOwot
ICBpZiAoeXluIDw9IDApCi0gICAgewotICAgICAgaWYgKHl5biA9PSAwIHx8IHl5biA9PSBZWVRB
QkxFX05JTkYpCi0JZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3Rv
IHl5cmVkdWNlOwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7
Ci0KLSAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0
dXJuIG9mZiBlcnJvcgotICAgICBzdGF0dXMuICAqLwotICBpZiAoeXllcnJzdGF0dXMpCi0gICAg
eXllcnJzdGF0dXMtLTsKLQotICAvKiBTaGlmdCB0aGUgbG9vay1haGVhZCB0b2tlbi4gICovCi0g
IFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7
Ci0KLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8K
LSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOwotCi0gIHl5c3Rh
dGUgPSB5eW47Ci0gICorK3l5dnNwID0geXlsdmFsOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQot
Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3Vy
cmVudCBzdGF0ZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWRlZmF1bHQ6Ci0gIHl5biA9IHl5ZGVmYWN0W3l5c3Rh
dGVdOwotICBpZiAoeXluID09IDApCi0gICAgZ290byB5eWVycmxhYjsKLSAgZ290byB5eXJlZHVj
ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eXJlZHVjZSAtLSBE
byBhIHJlZHVjdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eXJl
ZHVjZToKLSAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAg
Ki8KLSAgeXlsZW4gPSB5eXIyW3l5bl07Ci0KLSAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1w
bGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246Ci0gICAgIGAkJCA9ICQxJy4K
LQotICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJh
Z2UuCi0gICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgotICAgICB1
c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAotICAgICB1
bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZv
aWRzIGEKLSAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxp
emVkLiAgKi8KLSAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKLQotCi0gIFlZX1JFRFVDRV9QUklO
VCAoeXluKTsKLSAgc3dpdGNoICh5eW4pCi0gICAgewotICAgICAgICBjYXNlIDI6Ci0KLSAgICB7
Ci0gICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRpY19jYXN0PGludD4oKHl5dnNwWygx
KSAtICgxKV0pKTsKLSAgICAgICAgWVlBQ0NFUFQ7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBj
YXNlIDQ6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwg
KHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICYmICh5eXZzcFsoMykg
LSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjoKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJy
ZWFrOwotCi0gIGNhc2UgODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkg
LSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgOToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAo
eXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEwOgotCi0g
ICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID09ICh5eXZzcFsoMykg
LSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE6Ci0KLSAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj0gKHl5dnNwWygzKSAtICgzKV0pOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDEzOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxNDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSA8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTU6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNw
WygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxNjoKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAoeXl2c3BbKDMpIC0gKDMp
XSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE3OgotCi0gICAgewotICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxODoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5
eXZzcFsoMSkgLSAoMyldKSArICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTk6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkg
PT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAg
ICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0g
KDMpXSk7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwotICAg
ICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJ
VklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZQUJPUlQ7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5
dnNwWygzKSAtICgzKV0pOwotICAgICAgICB9Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNl
IDIwOgotCi0gICAgewotICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKLSAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgICAgIHN0cmVhbSA8
PCAoeXl2c3BbKDEpIC0gKDMpXSkgPDwgIiAvICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOwotICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9a
RVJPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50
b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQuY19zdHIoKSk7Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAvICh5eXZzcFsoMykgLSAo
MyldKTsKLSAgICAgICAgfQotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMToKLQotICAg
IHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAqICh5eXZzcFsoMykgLSAo
MyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjI6Ci0KLSAgICB7Ci0gICAgICAg
ICh5eXZhbCkgPSAhICh5eXZzcFsoMikgLSAoMildKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMjM6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSB+ICh5eXZzcFsoMikgLSAoMild
KTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjQ6Ci0KLSAgICB7Ci0gICAgICAgICh5
eXZhbCkgPSAtICh5eXZzcFsoMikgLSAoMildKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMjU6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSArICh5eXZzcFsoMikgLSAoMildKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZh
bCkgPSAoeXl2c3BbKDIpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotCi0vKiBMaW5l
IDEyNjcgb2YgeWFjYy5jLiAgKi8KLQotICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICBZ
WV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7Ci0K
LSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5
eXNzLCB5eXNzcCk7Ci0KLSAgKisreXl2c3AgPSB5eXZhbDsKLQotCi0gIC8qIE5vdyBgc2hpZnQn
IHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCi0gICAg
IHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0
aGUgcnVsZQotICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCi0KLSAgeXluID0geXlyMVt5eW5d
OwotCi0gIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAtIFlZTlRPS0VOU10gKyAqeXlzc3A7Ci0gIGlm
ICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9
PSAqeXlzc3ApCi0gICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07Ci0gIGVsc2UKLSAgICB5
eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107Ci0KLSAgZ290byB5eW5ld3N0YXRl
OwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxh
YiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiOgotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5n
IGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1
cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAg
IHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSAgICAgIHsK
LQlZWVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsK
LQlpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9D
X01BWElNVU0pCi0JICB7Ci0JICAgIFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlzaXplOwotCSAg
ICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01B
WElNVU0pKQotCSAgICAgIHl5YWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0JICAgIGlm
ICh5eW1zZyAhPSB5eW1zZ2J1ZikKLQkgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKLQkgICAg
eXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKLQkgICAgaWYgKHl5bXNn
KQotCSAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKLQkgICAgZWxzZQotCSAgICAgIHsKLQkJ
eXltc2cgPSB5eW1zZ2J1ZjsKLQkJeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0JICAg
ICAgfQotCSAgfQotCi0JaWYgKDAgPCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQot
CSAgewotCSAgICAodm9pZCkgeXlzeW50YXhfZXJyb3IgKHl5bXNnLCB5eXN0YXRlLCB5eWNoYXIp
OwotCSAgICB5eWVycm9yIChjb250ZXh0LCB5eW1zZyk7Ci0JICB9Ci0JZWxzZQotCSAgewotCSAg
ICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKLQkgICAgaWYgKHl5c2l6
ZSAhPSAwKQotCSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0JICB9Ci0gICAgICB9Ci0jZW5k
aWYKLSAgICB9Ci0KLQotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAzKQotICAgIHsKLSAgICAgIC8q
IElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVy
IGFuCi0JIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KLQotICAgICAgaWYgKHl5Y2hhciA8PSBZWUVP
RikKLQl7Ci0JICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotCSAg
aWYgKHl5Y2hhciA9PSBZWUVPRikKLQkgICAgWVlBQk9SVDsKLQl9Ci0gICAgICBlbHNlCi0Jewot
CSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLQkJICAgICAgeXl0b2tlbiwgJnl5
bHZhbCwgY29udGV4dCk7Ci0JICB5eWNoYXIgPSBZWUVNUFRZOwotCX0KLSAgICB9Ci0KLSAgLyog
RWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRo
ZSBlcnJvcgotICAgICB0b2tlbi4gICovCi0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycm9y
bGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8Ci1gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJyb3JsYWI6
Ci0KLSAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2
ZXIgaW52b2tlcwotICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZv
cmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyCi0gICAgIGNvZGUuICAqLwotICBpZiAoLypDT05TVENP
TkQqLyAwKQotICAgICBnb3RvIHl5ZXJyb3JsYWI7Ci0KLSAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZ
RVJST1IuICAqLwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RB
Q0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgZ290byB5eWVy
cmxhYjE7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGgg
c3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWIxOgotICB5eWVy
cnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4g
ICovCi0KLSAgZm9yICg7OykKLSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0g
ICAgICBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQotCXsKLQkgIHl5biArPSBZWVRFUlJPUjsKLQkg
IGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJP
UikKLQkgICAgewotCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLQkgICAgICBpZiAoMCA8IHl5
bikKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0KLSAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0
ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgICAgIGlm
ICh5eXNzcCA9PSB5eXNzKQotCVlZQUJPUlQ7Ci0KLQotICAgICAgeXlkZXN0cnVjdCAoIkVycm9y
OiBwb3BwaW5nIiwKLQkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCBjb250ZXh0KTsKLSAgICAg
IFlZUE9QU1RBQ0sgKDEpOwotICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKLSAgICAgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAg
ICBZWUFDQ0VQVDsKLQotICAqKyt5eXZzcCA9IHl5bHZhbDsKLQotCi0gIC8qIFNoaWZ0IHRoZSBl
cnJvciB0b2tlbi4gICovCi0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5
bl0sIHl5dnNwLCB5eWxzcCk7Ci0KLSAgeXlzdGF0ZSA9IHl5bjsKLSAgZ290byB5eW5ld3N0YXRl
OwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlhY2Nl
cHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLXl5YWNjZXB0bGFiOgotICB5eXJlc3VsdCA9IDA7Ci0gIGdvdG8g
eXlyZXR1cm47Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLXl5YWJvcnRsYWI6Ci0gIHl5cmVzdWx0ID0gMTsKLSAgZ290byB5
eXJldHVybjsKLQotI2lmbmRlZiB5eW92ZXJmbG93Ci0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBl
eGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWV4aGF1c3RlZGxhYjoKLSAgeXllcnJvciAoY29udGV4
dCwgWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOwotICB5eXJlc3VsdCA9IDI7Ci0gIC8qIEZhbGwg
dGhyb3VnaC4gICovCi0jZW5kaWYKLQoteXlyZXR1cm46Ci0gIGlmICh5eWNoYXIgIT0gWVlFT0Yg
JiYgeXljaGFyICE9IFlZRU1QVFkpCi0gICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJk
aW5nIGxvb2thaGVhZCIsCi0JCSB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKLSAgLyogRG8g
bm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJl
ZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLwotICBZWVBPUFNUQUNLICh5eWxl
bik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0gIHdoaWxlICh5eXNzcCAhPSB5
eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLQkJICB5
eXN0b3NbKnl5c3NwXSwgeXl2c3AsIGNvbnRleHQpOwotICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0g
ICAgfQotI2lmbmRlZiB5eW92ZXJmbG93Ci0gIGlmICh5eXNzICE9IHl5c3NhKQotICAgIFlZU1RB
Q0tfRlJFRSAoeXlzcyk7Ci0jZW5kaWYKLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLSAgaWYgKHl5bXNn
ICE9IHl5bXNnYnVmKQotICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotI2VuZGlmCi0gIC8qIE1h
a2Ugc3VyZSBZWUlEIGlzIHVzZWQuICAqLwotICByZXR1cm4gWVlJRCAoeXlyZXN1bHQpOwotfQot
Ci0KLQotCi0KLWludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKLXsK
LSAgICBpbnQgdHlwZSA9IDA7Ci0KLSAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9r
ZW47Ci0gICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIHBwOjpUb2tl
bjo6Q09OU1RfSU5UOgotICAgICAgICAqbHZhbHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0
cigpLCBOVUxMLCAwKTsKLSAgICAgICAgdHlwZSA9IFRPS19DT05TVF9JTlQ7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBUT0tfT1BfT1I7IGJy
ZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0FORDogdHlwZSA9IFRPS19PUF9BTkQ7IGJy
ZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX05FOiB0eXBlID0gVE9LX09QX05FOyBicmVh
azsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9FUTogdHlwZSA9IFRPS19PUF9FUTsgYnJlYWs7
Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfR0U6IHR5cGUgPSBUT0tfT1BfR0U7IGJyZWFrOwot
ICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFOiB0eXBlID0gVE9LX09QX0xFOyBicmVhazsKLSAg
ICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdIVDogdHlwZSA9IFRPS19PUF9SSUdIVDsgYnJlYWs7
Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEVGVDogdHlwZSA9IFRPS19PUF9MRUZUOyBicmVh
azsKLSAgICAgIGNhc2UgJ3wnOiB0eXBlID0gJ3wnOyBicmVhazsKLSAgICAgIGNhc2UgJ14nOiB0
eXBlID0gJ14nOyBicmVhazsKLSAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKLSAg
ICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBicmVhazsKLSAgICAgIGNhc2UgJzwnOiB0eXBlID0g
JzwnOyBicmVhazsKLSAgICAgIGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKLSAgICAgIGNh
c2UgJysnOiB0eXBlID0gJysnOyBicmVhazsKLSAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBi
cmVhazsKLSAgICAgIGNhc2UgJy8nOiB0eXBlID0gJy8nOyBicmVhazsKLSAgICAgIGNhc2UgJyon
OiB0eXBlID0gJyonOyBicmVhazsKLSAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsK
LSAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34nOyBicmVhazsKLSAgICAgIGNhc2UgJygnOiB0eXBl
ID0gJygnOyBicmVhazsKLSAgICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKLQotICAg
ICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0
b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMgdmFsaWQuCi0gICAgaWYgKHR5cGUgIT0gMCkgY29u
dGV4dC0+bGV4ZXItPmxleCh0b2tlbik7Ci0KLSAgICByZXR1cm4gdHlwZTsKLX0KLQotdm9pZCB5
eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBjb250
ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNT
SU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxv
Y2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKLX0KLQot
bmFtZXNwYWNlIHBwIHsKLQotRXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhl
ciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgotICAgIG1MZXhlcihsZXhlciks
Ci0gICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQotewotfQotCi1ib29sIEV4cHJlc3Npb25Q
YXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpCi17Ci0gICAgQ29udGV4dCBj
b250ZXh0OwotICAgIGNvbnRleHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7Ci0gICAgY29u
dGV4dC5sZXhlciA9IG1MZXhlcjsKLSAgICBjb250ZXh0LnRva2VuID0gdG9rZW47Ci0gICAgY29u
dGV4dC5yZXN1bHQgPSByZXN1bHQ7Ci0gICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOwot
ICAgIHN3aXRjaCAocmV0KQotICAgIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgIGNhc2UgMToKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMjoKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAg
ICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0
b2tlbi0+bG9jYXRpb24sICIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJldCA9PSAwOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lv
blBhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwOTJkMDU5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDM0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
RVhQUkVTU0lPTl9QQVJTRVJfSF8KLQotI2luY2x1ZGUgInBwX3V0aWxzLmgiCi0KLW5hbWVzcGFj
ZSBwcAotewotCi1jbGFzcyBEaWFnbm9zdGljczsKLWNsYXNzIExleGVyOwotc3RydWN0IFRva2Vu
OwotCi1jbGFzcyBFeHByZXNzaW9uUGFyc2VyCi17Ci0gIHB1YmxpYzoKLSAgICBFeHByZXNzaW9u
UGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKLQotICAgIGJv
b2wgcGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBQ
UF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRXhwcmVzc2lvblBhcnNlcik7Ci0KLSAgICBMZXhl
ciogbUxleGVyOwotICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05f
UEFSU0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLnkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YzlmMDUuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci55CisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLS8qCi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMg
cHJlcHJvY2Vzc29yIGV4cHJlc3Npb24uCi0KLUlGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaCwKLVdISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiBwYXJzZXIuCi0qLwotCi0lewotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJz
ZXIuc2guIERPIE5PVCBFRElUIQotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLS8vIFRvZ2dsZSB0
aGUgd2FybmluZyBmb3IgLVdwcmFnbWFzIHRvIGVuc3VyZSB3ZSBkbyBub3QgYnJlYWsgdGhlIGJ1
aWxkCi0vLyB3aXRoIGVhcmxpZXIgY29tcGlsZXIgdmVyc2lvbnMgYmVjYXVzZSBvZiB1bmtub3du
IHByYWdtYSBvcHRpb25zLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3ByYWdt
YXMiCi0vLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4K
LSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVkIgotI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQiCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIHdhcm5pbmcgIi1XcHJhZ21hcyIKLSNlbGlmIGRlZmluZWQoX01TQ19W
RVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQotI2VuZGlmCi0KLSNpbmNs
dWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCi0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUg
PGNzdGRsaWI+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgi
Ci0jaW5jbHVkZSAiTGV4ZXIuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi0jaWYgZGVmaW5lZChf
TVNDX1ZFUikKLXR5cGVkZWYgX19pbnQ2NCBZWVNUWVBFOwotI2RlZmluZSBzdHJ0b2xsIF9zdHJ0
b2k2NAotI2Vsc2UKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLXR5cGVkZWYgaW50bWF4X3QgWVlTVFlQ
RTsKLSNlbmRpZiAgLy8gX01TQ19WRVIKLSNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKLSNkZWZpbmUg
WVlMVFlQRV9JU19UUklWSUFMIDEKLSNkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNkZWZp
bmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0KLW5hbWVzcGFjZSB7Ci1zdHJ1Y3QgQ29udGV4dAot
ewotICAgIHBwOjpEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7Ci0gICAgcHA6OkxleGVyKiBsZXhl
cjsKLSAgICBwcDo6VG9rZW4qIHRva2VuOwotICAgIGludCogcmVzdWx0OwotfTsKLX0gIC8vIG5h
bWVzcGFjZQotJX0KLQotJXB1cmUtcGFyc2VyCi0lbmFtZS1wcmVmaXg9InBwIgotJXBhcnNlLXBh
cmFtIHtDb250ZXh0ICpjb250ZXh0fQotJWxleC1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KLQot
JXsKLXN0YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpOwot
c3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24p
OwotJX0KLQotJXRva2VuIFRPS19DT05TVF9JTlQKLSVsZWZ0IFRPS19PUF9PUgotJWxlZnQgVE9L
X09QX0FORAotJWxlZnQgJ3wnCi0lbGVmdCAnXicKLSVsZWZ0ICcmJwotJWxlZnQgVE9LX09QX0VR
IFRPS19PUF9ORQotJWxlZnQgJzwnICc+JyBUT0tfT1BfTEUgVE9LX09QX0dFCi0lbGVmdCBUT0tf
T1BfTEVGVCBUT0tfT1BfUklHSFQKLSVsZWZ0ICcrJyAnLScKLSVsZWZ0ICcqJyAnLycgJyUnCi0l
cmlnaHQgVE9LX1VOQVJZCi0KLSUlCi0KLWlucHV0Ci0gICAgOiBleHByZXNzaW9uIHsKLSAgICAg
ICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50PigkMSk7Ci0gICAgICAgIFlZ
QUNDRVBUOwotICAgIH0KLTsKLQotZXhwcmVzc2lvbgotICAgIDogVE9LX0NPTlNUX0lOVAotICAg
IHwgZXhwcmVzc2lvbiBUT0tfT1BfT1IgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgfHwg
JDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfQU5EIGV4cHJlc3Npb24gewotICAg
ICAgICAkJCA9ICQxICYmICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJ3wnIGV4cHJlc3Np
b24gewotICAgICAgICAkJCA9ICQxIHwgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnXicg
ZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgXiAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNz
aW9uICcmJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSAmICQzOwotICAgIH0KLSAgICB8
IGV4cHJlc3Npb24gVE9LX09QX05FIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxICE9ICQz
OwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gVE9LX09QX0VRIGV4cHJlc3Npb24gewotICAgICAg
ICAkJCA9ICQxID09ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gVE9LX09QX0dFIGV4cHJl
c3Npb24gewotICAgICAgICAkJCA9ICQxID49ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24g
VE9LX09QX0xFIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxIDw9ICQzOwotICAgIH0KLSAg
ICB8IGV4cHJlc3Npb24gJz4nIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxID4gJDM7Ci0g
ICAgfQotICAgIHwgZXhwcmVzc2lvbiAnPCcgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEg
PCAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uIFRPS19PUF9SSUdIVCBleHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSAkMSA+PiAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uIFRPS19PUF9M
RUZUIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxIDw8ICQzOwotICAgIH0KLSAgICB8IGV4
cHJlc3Npb24gJy0nIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxIC0gJDM7Ci0gICAgfQot
ICAgIHwgZXhwcmVzc2lvbiAnKycgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgKyAkMzsK
LSAgICB9Ci0gICAgfCBleHByZXNzaW9uICclJyBleHByZXNzaW9uIHsKLSAgICAgICAgaWYgKCQz
ID09IDApIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAg
ICAgIHN0cmVhbSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+
cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwotICAg
ICAgICAgICAgWVlBQk9SVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICQkID0gJDEg
JSAkMzsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJy8nIGV4cHJlc3Npb24g
ewotICAgICAgICBpZiAoJDMgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOwotICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgLyAiIDw8ICQzOwotICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJP
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tl
bi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQuY19zdHIoKSk7Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgJCQgPSAkMSAvICQzOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgZXhwcmVzc2lv
biAnKicgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgKiAkMzsKLSAgICB9Ci0gICAgfCAn
IScgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgewotICAgICAgICAkJCA9ICEgJDI7Ci0gICAg
fQotICAgIHwgJ34nIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKLSAgICAgICAgJCQgPSB+
ICQyOwotICAgIH0KLSAgICB8ICctJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7Ci0gICAg
ICAgICQkID0gLSAkMjsKLSAgICB9Ci0gICAgfCAnKycgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5B
UlkgewotICAgICAgICAkJCA9ICsgJDI7Ci0gICAgfQotICAgIHwgJygnIGV4cHJlc3Npb24gJykn
IHsKLSAgICAgICAgJCQgPSAkMjsKLSAgICB9Ci07Ci0KLSUlCi0KLWludCB5eWxleChZWVNUWVBF
KiBsdmFscCwgQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBpbnQgdHlwZSA9IDA7Ci0KLSAgICBw
cDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+dG9rZW47Ci0gICAgc3dpdGNoICh0b2tlbi0+dHlw
ZSkKLSAgICB7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6Q09OU1RfSU5UOgotICAgICAgICAqbHZh
bHAgPSBzdHJ0b2xsKHRva2VuLT52YWx1ZS5jX3N0cigpLCBOVUxMLCAwKTsKLSAgICAgICAgdHlw
ZSA9IFRPS19DT05TVF9JTlQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIHBwOjpUb2tl
bjo6T1BfT1I6IHR5cGUgPSBUT0tfT1BfT1I7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX0FORDogdHlwZSA9IFRPS19PUF9BTkQ7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46
Ok9QX05FOiB0eXBlID0gVE9LX09QX05FOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpP
UF9FUTogdHlwZSA9IFRPS19PUF9FUTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1Bf
R0U6IHR5cGUgPSBUT0tfT1BfR0U7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xF
OiB0eXBlID0gVE9LX09QX0xFOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9SSUdI
VDogdHlwZSA9IFRPS19PUF9SSUdIVDsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1Bf
TEVGVDogdHlwZSA9IFRPS19PUF9MRUZUOyBicmVhazsKLSAgICAgIGNhc2UgJ3wnOiB0eXBlID0g
J3wnOyBicmVhazsKLSAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsKLSAgICAgIGNh
c2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKLSAgICAgIGNhc2UgJz4nOiB0eXBlID0gJz4nOyBi
cmVhazsKLSAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKLSAgICAgIGNhc2UgJy0n
OiB0eXBlID0gJy0nOyBicmVhazsKLSAgICAgIGNhc2UgJysnOiB0eXBlID0gJysnOyBicmVhazsK
LSAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKLSAgICAgIGNhc2UgJy8nOiB0eXBl
ID0gJy8nOyBicmVhazsKLSAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVhazsKLSAgICAg
IGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKLSAgICAgIGNhc2UgJ34nOiB0eXBlID0gJ34n
OyBicmVhazsKLSAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKLSAgICAgIGNhc2Ug
JyknOiB0eXBlID0gJyknOyBicmVhazsKLQotICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQot
Ci0gICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVudCBvbmUgaXMg
dmFsaWQuCi0gICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0b2tlbik7Ci0K
LSAgICByZXR1cm4gdHlwZTsKLX0KLQotdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVhc29uKTsKLX0KLQotbmFtZXNwYWNlIHBwIHsKLQotRXhwcmVzc2lv
blBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcykgOgotICAgIG1MZXhlcihsZXhlciksCi0gICAgbURpYWdub3N0aWNzKGRpYWdub3N0
aWNzKQotewotfQotCi1ib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2VuKiB0b2tlbiwg
aW50KiByZXN1bHQpCi17Ci0gICAgQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQuZGlhZ25v
c3RpY3MgPSBtRGlhZ25vc3RpY3M7Ci0gICAgY29udGV4dC5sZXhlciA9IG1MZXhlcjsKLSAgICBj
b250ZXh0LnRva2VuID0gdG9rZW47Ci0gICAgY29udGV4dC5yZXN1bHQgPSByZXN1bHQ7Ci0gICAg
aW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOwotICAgIHN3aXRjaCAocmV0KQotICAgIHsKLSAg
ICAgIGNhc2UgMDoKLSAgICAgIGNhc2UgMToKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug
MjoKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1P
UlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldCA9PSAwOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzNkZTk1Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw1NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIklucHV0LmgiCi0KLSNp
bmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RyaW5n
PgotCi1uYW1lc3BhY2UgcHAKLXsKLQotSW5wdXQ6OklucHV0KCkgOiBtQ291bnQoMCksIG1TdHJp
bmcoMCkKLXsKLX0KLQotSW5wdXQ6OklucHV0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkgOgotICAgIG1Db3VudChjb3VudCksCi0gICAg
bVN0cmluZyhzdHJpbmcpCi17Ci0gICAgYXNzZXJ0KG1Db3VudCA+PSAwKTsKLSAgICBtTGVuZ3Ro
LnJlc2VydmUobUNvdW50KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQot
ICAgIHsKLSAgICAgICAgaW50IGxlbiA9IGxlbmd0aCA/IGxlbmd0aFtpXSA6IC0xOwotICAgICAg
ICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAwID8gc3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsK
LSAgICB9Ci19Ci0KLWludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKQotewot
ICAgIGludCBuUmVhZCA9IDA7Ci0gICAgd2hpbGUgKChuUmVhZCA8IG1heFNpemUpICYmIChtUmVh
ZExvYy5zSW5kZXggPCBtQ291bnQpKQotICAgIHsKLSAgICAgICAgaW50IHNpemUgPSBtTGVuZ3Ro
W21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7Ci0gICAgICAgIHNpemUgPSBzdGQ6
Om1pbihzaXplLCBtYXhTaXplKTsKLSAgICAgICAgbWVtY3B5KGJ1ZiArIG5SZWFkLCBtU3RyaW5n
W21SZWFkTG9jLnNJbmRleF0gKyBtUmVhZExvYy5jSW5kZXgsIHNpemUpOwotICAgICAgICBuUmVh
ZCArPSBzaXplOwotICAgICAgICBtUmVhZExvYy5jSW5kZXggKz0gc2l6ZTsKLQotICAgICAgICAv
LyBBZHZhbmNlIHN0cmluZyBpZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgY3VycmVudCBzdHJpbmcu
Ci0gICAgICAgIGlmIChtUmVhZExvYy5jSW5kZXggPT0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhd
KQotICAgICAgICB7Ci0gICAgICAgICAgICArK21SZWFkTG9jLnNJbmRleDsKLSAgICAgICAgICAg
IG1SZWFkTG9jLmNJbmRleCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5SZWFk
OwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYzczNGIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfSU5QVVRfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNlIHBwCi17Ci0KLS8v
IEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIuCi1jbGFzcyBJbnB1dAotewotICBwdWJs
aWM6Ci0gICAgSW5wdXQoKTsKLSAgICBJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwotCi0gICAgaW50IGNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbUNvdW50OyB9Ci0gICAgY29uc3QgY2hhciogc3RyaW5nKGludCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbVN0cmluZ1tpbmRleF07IH0KLSAgICBpbnQgbGVuZ3RoKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbUxlbmd0aFtpbmRleF07IH0KLQotICAgIGludCByZWFkKGNoYXIqIGJ1
ZiwgaW50IG1heFNpemUpOwotCi0gICAgc3RydWN0IExvY2F0aW9uCi0gICAgewotICAgICAgICBp
bnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4OwotICAgICAgICBpbnQgY0luZGV4OyAgLy8gQ2hh
ciBpbmRleC4KLQotICAgICAgICBMb2NhdGlvbigpIDogc0luZGV4KDApLCBjSW5kZXgoMCkgeyB9
Ci0gICAgfTsKLSAgICBjb25zdCBMb2NhdGlvbiYgcmVhZExvYygpIGNvbnN0IHsgcmV0dXJuIG1S
ZWFkTG9jOyB9Ci0KLSAgcHJpdmF0ZToKLSAgICAvLyBJbnB1dC4KLSAgICBpbnQgbUNvdW50Owot
ICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBtU3RyaW5nOwotICAgIHN0ZDo6dmVjdG9yPGludD4gbUxl
bmd0aDsKLQotICAgIExvY2F0aW9uIG1SZWFkTG9jOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXwotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9M
ZXhlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9MZXhlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNjYzZWUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJMZXhlci5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotTGV4
ZXI6On5MZXhlcigpCi17Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0xleGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViODVjZWEuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTGV4ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwotI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBUb2tl
bjsKLQotY2xhc3MgTGV4ZXIKLXsKLSAgcHVibGljOgotICAgIHZpcnR1YWwgfkxleGVyKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikgPSAwOwotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyby5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGIyZTMwODguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJNYWNyby5oIgotCi0jaW5jbHVkZSAiVG9r
ZW4uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWJvb2wgTWFjcm86OmVxdWFscyhjb25zdCBNYWNy
byYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCi0g
ICAgICAgICAgIChuYW1lID09IG90aGVyLm5hbWUpICYmCi0gICAgICAgICAgIChwYXJhbWV0ZXJz
ID09IG90aGVyLnBhcmFtZXRlcnMpICYmCi0gICAgICAgICAgIChyZXBsYWNlbWVudHMgPT0gb3Ro
ZXIucmVwbGFjZW1lbnRzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWMwMTQ5Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L01hY3JvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KLSNkZWZpbmUgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBU
b2tlbjsKLQotc3RydWN0IE1hY3JvCi17Ci0gICAgZW51bSBUeXBlCi0gICAgewotICAgICAgICBr
VHlwZU9iaiwKLSAgICAgICAga1R5cGVGdW5jCi0gICAgfTsKLSAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiBQYXJhbWV0ZXJzOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9r
ZW4+IFJlcGxhY2VtZW50czsKLQotICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNlKSwgZGlz
YWJsZWQoZmFsc2UpLCB0eXBlKGtUeXBlT2JqKSB7IH0KLSAgICBib29sIGVxdWFscyhjb25zdCBN
YWNybyYgb3RoZXIpIGNvbnN0OwotCi0gICAgYm9vbCBwcmVkZWZpbmVkOwotICAgIG11dGFibGUg
Ym9vbCBkaXNhYmxlZDsKLQotICAgIFR5cGUgdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwot
ICAgIFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRz
OwotfTsKLQotdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3JvU2V0Owot
Ci19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01B
Q1JPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTVhN2FlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5k
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aW5jbHVkZSAiTWFjcm9FeHBhbmRlci5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1
ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgIkRpYWdub3N0aWNz
LmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIFRva2Vu
TGV4ZXIgOiBwdWJsaWMgTGV4ZXIKLXsKLSBwdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbj4gVG9rZW5WZWN0b3I7Ci0KLSAgICBUb2tlbkxleGVyKFRva2VuVmVjdG9yKiB0b2tl
bnMpCi0gICAgewotICAgICAgICB0b2tlbnMtPnN3YXAobVRva2Vucyk7Ci0gICAgICAgIG1JdGVy
ID0gbVRva2Vucy5iZWdpbigpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4q
IHRva2VuKQotICAgIHsKLSAgICAgICAgaWYgKG1JdGVyID09IG1Ub2tlbnMuZW5kKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRva2VuLT5yZXNldCgpOwotICAgICAgICAgICAgdG9rZW4tPnR5
cGUgPSBUb2tlbjo6TEFTVDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICp0b2tlbiA9ICptSXRlcisrOwotICAgICAgICB9Ci0gICAgfQotCi0gcHJpdmF0
ZToKLSAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW5MZXhlcik7Ci0KLSAgICBU
b2tlblZlY3RvciBtVG9rZW5zOwotICAgIFRva2VuVmVjdG9yOjpjb25zdF9pdGVyYXRvciBtSXRl
cjsKLX07Ci0KLU1hY3JvRXhwYW5kZXI6Ok1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgotICAgIG1MZXhl
cihsZXhlciksCi0gICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKLSAgICBtRGlhZ25vc3RpY3MoZGlh
Z25vc3RpY3MpCi17Ci19Ci0KLU1hY3JvRXhwYW5kZXI6On5NYWNyb0V4cGFuZGVyKCkKLXsKLSAg
ICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkgcG9wTWFjcm8oKTsKLX0KLQotdm9pZCBN
YWNyb0V4cGFuZGVyOjpsZXgoVG9rZW4qIHRva2VuKQotewotICAgIHdoaWxlICh0cnVlKQotICAg
IHsKLSAgICAgICAgZ2V0VG9rZW4odG9rZW4pOwotCi0gICAgICAgIGlmICh0b2tlbi0+dHlwZSAh
PSBUb2tlbjo6SURFTlRJRklFUikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICh0
b2tlbi0+ZXhwYW5zaW9uRGlzYWJsZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1NYWNyb1NldC0+ZW5kKCkpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjb25zdCBNYWNybyYgbWFjcm8gPSBpdGVyLT5zZWNvbmQ7Ci0g
ICAgICAgIGlmIChtYWNyby5kaXNhYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYg
YSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5vdCBleHBhbmRlZCwgaXQgaXMgbmV2ZXIgZXhwYW5kZWQu
Ci0gICAgICAgICAgICB0b2tlbi0+c2V0RXhwYW5zaW9uRGlzYWJsZWQodHJ1ZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoKG1hY3JvLnR5cGUgPT0gTWFjcm86
OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRva2VuTGVmdFBhcmVuKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIElmIHRoZSB0b2tlbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFjcm8gbmFtZSBp
cyBub3QgYSAnKCcsCi0gICAgICAgICAgICAvLyB0aGlzIG1hY3JvIHNob3VsZCBub3QgYmUgZXhw
YW5kZWQuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHB1c2hNYWNy
byhtYWNybywgKnRva2VuKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6Z2V0VG9r
ZW4oVG9rZW4qIHRva2VuKQotewotICAgIGlmIChtUmVzZXJ2ZVRva2VuLmdldCgpKQotICAgIHsK
LSAgICAgICAgKnRva2VuID0gKm1SZXNlcnZlVG9rZW47Ci0gICAgICAgIG1SZXNlcnZlVG9rZW4u
cmVzZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZpcnN0IHBvcCBhbGwg
ZW1wdHkgbWFjcm8gY29udGV4dHMuCi0gICAgd2hpbGUgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkg
JiYgbUNvbnRleHRTdGFjay5iYWNrKCktPmVtcHR5KCkpCi0gICAgewotICAgICAgICBwb3BNYWNy
bygpOwotICAgIH0KLQotICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgKnRva2VuID0gbUNvbnRleHRTdGFjay5iYWNrKCktPmdldCgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7Ci0gICAgfQotfQotCi12b2lk
IE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKQotewotICAgIGlm
ICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgTWFjcm9Db250ZXh0KiBj
b250ZXh0ID0gbUNvbnRleHRTdGFjay5iYWNrKCk7Ci0gICAgICAgIGNvbnRleHQtPnVuZ2V0KCk7
Ci0gICAgICAgIGFzc2VydChjb250ZXh0LT5yZXBsYWNlbWVudHNbY29udGV4dC0+aW5kZXhdID09
IHRva2VuKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgYXNzZXJ0KCFtUmVzZXJ2
ZVRva2VuLmdldCgpKTsKLSAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldChuZXcgVG9rZW4odG9r
ZW4pKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9rZW5MZWZ0UGFy
ZW4oKQotewotICAgIFRva2VuIHRva2VuOwotICAgIGdldFRva2VuKCZ0b2tlbik7Ci0KLSAgICBi
b29sIGxwYXJlbiA9IHRva2VuLnR5cGUgPT0gJygnOwotICAgIHVuZ2V0VG9rZW4odG9rZW4pOwot
Ci0gICAgcmV0dXJuIGxwYXJlbjsKLX0KLQotYm9vbCBNYWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8o
Y29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYgaWRlbnRpZmllcikKLXsKLSAgICBhc3Nl
cnQoIW1hY3JvLmRpc2FibGVkKTsKLSAgICBhc3NlcnQoIWlkZW50aWZpZXIuZXhwYW5zaW9uRGlz
YWJsZWQoKSk7Ci0gICAgYXNzZXJ0KGlkZW50aWZpZXIudHlwZSA9PSBUb2tlbjo6SURFTlRJRklF
Uik7Ci0gICAgYXNzZXJ0KGlkZW50aWZpZXIudmFsdWUgPT0gbWFjcm8ubmFtZSk7Ci0KLSAgICBz
dGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOwotICAgIGlmICghZXhwYW5kTWFjcm8obWFj
cm8sIGlkZW50aWZpZXIsICZyZXBsYWNlbWVudHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBNYWNybyBpcyBkaXNhYmxlZCBmb3IgZXhwYW5zaW9uIHVudGlsIGl0IGlzIHBvcHBl
ZCBvZmYgdGhlIHN0YWNrLgotICAgIG1hY3JvLmRpc2FibGVkID0gdHJ1ZTsKLQotICAgIE1hY3Jv
Q29udGV4dCogY29udGV4dCA9IG5ldyBNYWNyb0NvbnRleHQ7Ci0gICAgY29udGV4dC0+bWFjcm8g
PSAmbWFjcm87Ci0gICAgY29udGV4dC0+cmVwbGFjZW1lbnRzLnN3YXAocmVwbGFjZW1lbnRzKTsK
LSAgICBtQ29udGV4dFN0YWNrLnB1c2hfYmFjayhjb250ZXh0KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBNYWNyb0V4cGFuZGVyOjpwb3BNYWNybygpCi17Ci0gICAgYXNzZXJ0KCFtQ29u
dGV4dFN0YWNrLmVtcHR5KCkpOwotCi0gICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbUNvbnRl
eHRTdGFjay5iYWNrKCk7Ci0gICAgbUNvbnRleHRTdGFjay5wb3BfYmFjaygpOwotCi0gICAgYXNz
ZXJ0KGNvbnRleHQtPmVtcHR5KCkpOwotICAgIGFzc2VydChjb250ZXh0LT5tYWNyby0+ZGlzYWJs
ZWQpOwotICAgIGNvbnRleHQtPm1hY3JvLT5kaXNhYmxlZCA9IGZhbHNlOwotICAgIGRlbGV0ZSBj
b250ZXh0OwotfQotCi1ib29sIE1hY3JvRXhwYW5kZXI6OmV4cGFuZE1hY3JvKGNvbnN0IE1hY3Jv
JiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlk
ZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRv
a2VuPiogcmVwbGFjZW1lbnRzKQotewotICAgIHJlcGxhY2VtZW50cy0+Y2xlYXIoKTsKLSAgICBp
ZiAobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVPYmopCi0gICAgewotICAgICAgICByZXBsYWNl
bWVudHMtPmFzc2lnbihtYWNyby5yZXBsYWNlbWVudHMuYmVnaW4oKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFjcm8ucmVwbGFjZW1lbnRzLmVuZCgpKTsKLQotICAgICAgICBpZiAo
bWFjcm8ucHJlZGVmaW5lZCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtMaW5lID0gIl9fTElORV9fIjsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBz
dGQ6OnN0cmluZyBrRmlsZSA9ICJfX0ZJTEVfXyI7Ci0KLSAgICAgICAgICAgIGFzc2VydChyZXBs
YWNlbWVudHMtPnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgIFRva2VuJiByZXBsID0gcmVwbGFj
ZW1lbnRzLT5mcm9udCgpOwotICAgICAgICAgICAgaWYgKG1hY3JvLm5hbWUgPT0ga0xpbmUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwot
ICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmxpbmU7Ci0gICAg
ICAgICAgICAgICAgcmVwbC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1hY3JvLm5hbWUgPT0ga0ZpbGUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgICAg
IHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmZpbGU7Ci0gICAgICAgICAgICAgICAgcmVw
bC52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBhc3NlcnQobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5
cGVGdW5jKTsKLSAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+IGFyZ3M7Ci0gICAgICAgIGFy
Z3MucmVzZXJ2ZShtYWNyby5wYXJhbWV0ZXJzLnNpemUoKSk7Ci0gICAgICAgIGlmICghY29sbGVj
dE1hY3JvQXJncyhtYWNybywgaWRlbnRpZmllciwgJmFyZ3MpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIHJlcGxhY2VNYWNyb1BhcmFtcyhtYWNybywgYXJncywgcmVwbGFj
ZW1lbnRzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcGxhY2VtZW50
cy0+c2l6ZSgpOyArK2kpCi0gICAgewotICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxhY2VtZW50
cy0+YXQoaSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IFRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpbmhlcml0cyB0aGUgcGFk
ZGluZwotICAgICAgICAgICAgLy8gcHJvcGVydGllcyBvZiB0aGUgaWRlbnRpZmllciB0b2tlbi4K
LSAgICAgICAgICAgIHJlcGwuc2V0QXRTdGFydE9mTGluZShpZGVudGlmaWVyLmF0U3RhcnRPZkxp
bmUoKSk7Ci0gICAgICAgICAgICByZXBsLnNldEhhc0xlYWRpbmdTcGFjZShpZGVudGlmaWVyLmhh
c0xlYWRpbmdTcGFjZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXBsLmxvY2F0aW9uID0gaWRl
bnRpZmllci5sb2NhdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTWFj
cm9FeHBhbmRlcjo6Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+
KiBhcmdzKQotewotICAgIFRva2VuIHRva2VuOwotICAgIGdldFRva2VuKCZ0b2tlbik7Ci0gICAg
YXNzZXJ0KHRva2VuLnR5cGUgPT0gJygnKTsKLQotICAgIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0Fy
ZygpKTsKLSAgICBmb3IgKGludCBvcGVuUGFyZW5zID0gMTsgb3BlblBhcmVucyAhPSAwOyApCi0g
ICAgewotICAgICAgICBnZXRUb2tlbigmdG9rZW4pOwotCi0gICAgICAgIGlmICh0b2tlbi50eXBl
ID09IFRva2VuOjpMQVNUKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVy
LnZhbHVlKTsKLSAgICAgICAgICAgIC8vIERvIG5vdCBsb3NlIEVPRiB0b2tlbi4KLSAgICAgICAg
ICAgIHVuZ2V0VG9rZW4odG9rZW4pOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYm9vbCBpc0FyZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHRva2VuIGlzIHBh
cnQgb2YgdGhlIGN1cnJlbnQgYXJndW1lbnQuCi0gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgJygnOgotICAgICAgICAgICAgKytvcGVuUGFyZW5z
OwotICAgICAgICAgICAgaXNBcmcgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSAnKSc6Ci0gICAgICAgICAgICAtLW9wZW5QYXJlbnM7Ci0gICAgICAgICAgICBpc0Fy
ZyA9IG9wZW5QYXJlbnMgIT0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
JywnOgotICAgICAgICAgICAgLy8gVGhlIGluZGl2aWR1YWwgYXJndW1lbnRzIGFyZSBzZXBhcmF0
ZWQgYnkgY29tbWEgdG9rZW5zLCBidXQKLSAgICAgICAgICAgIC8vIHRoZSBjb21tYSB0b2tlbnMg
YmV0d2VlbiBtYXRjaGluZyBpbm5lciBwYXJlbnRoZXNlcyBkbyBub3QKLSAgICAgICAgICAgIC8v
IHNlcGVyYXRlIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zID09IDEpIGFy
Z3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsKLSAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVu
cyAhPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGlzQXJnID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChpc0FyZykKLSAgICAgICAgewotICAgICAgICAgICAgTWFjcm9BcmcmIGFyZyA9IGFyZ3Mt
PmJhY2soKTsKLSAgICAgICAgICAgIC8vIEluaXRpYWwgd2hpdGVzcGFjZSBpcyBub3QgcGFydCBv
ZiB0aGUgYXJndW1lbnQuCi0gICAgICAgICAgICBpZiAoYXJnLmVtcHR5KCkpIHRva2VuLnNldEhh
c0xlYWRpbmdTcGFjZShmYWxzZSk7Ci0gICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IE1hY3JvOjpQYXJhbWV0ZXJzJiBwYXJhbXMg
PSBtYWNyby5wYXJhbWV0ZXJzOwotICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGVtcHR5IGFy
Z3VtZW50LCBpdCBpcyBlcXVpdmFsZW50IHRvIG5vIGFyZ3VtZW50LgotICAgIGlmIChwYXJhbXMu
ZW1wdHkoKSAmJiAoYXJncy0+c2l6ZSgpID09IDEpICYmIGFyZ3MtPmZyb250KCkuZW1wdHkoKSkK
LSAgICB7Ci0gICAgICAgIGFyZ3MtPmNsZWFyKCk7Ci0gICAgfQotICAgIC8vIFZhbGlkYXRlIHRo
ZSBudW1iZXIgb2YgYXJndW1lbnRzLgotICAgIGlmIChhcmdzLT5zaXplKCkgIT0gcGFyYW1zLnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIERpYWdub3N0aWNzOjpJRCBpZCA9IGFyZ3MtPnNpemUoKSA8
IG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpID8KLSAgICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNS
T19UT09fRkVXX0FSR1MgOgotICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19NQU5Z
X0FSR1M7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KGlkLCBpZGVudGlmaWVyLmxvY2F0
aW9uLCBpZGVudGlmaWVyLnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFByZS1leHBhbmQgZWFjaCBhcmd1bWVudCBiZWZvcmUgc3Vic3RpdHV0aW9uLgotICAg
IC8vIFRoaXMgc3RlcCBleHBhbmRzIGVhY2ggYXJndW1lbnQgaW5kaXZpZHVhbGx5IGJlZm9yZSB0
aGV5IGFyZQotICAgIC8vIGluc2VydGVkIGludG8gdGhlIG1hY3JvIGJvZHkuCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcmdzLT5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAgICAgIE1hY3Jv
QXJnJiBhcmcgPSBhcmdzLT5hdChpKTsKLSAgICAgICAgVG9rZW5MZXhlciBsZXhlcigmYXJnKTsK
LSAgICAgICAgTWFjcm9FeHBhbmRlciBleHBhbmRlcigmbGV4ZXIsIG1NYWNyb1NldCwgbURpYWdu
b3N0aWNzKTsKLQotICAgICAgICBhcmcuY2xlYXIoKTsKLSAgICAgICAgZXhwYW5kZXIubGV4KCZ0
b2tlbik7Ci0gICAgICAgIHdoaWxlICh0b2tlbi50eXBlICE9IFRva2VuOjpMQVNUKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKLSAgICAgICAgICAgIGV4cGFu
ZGVyLmxleCgmdG9rZW4pOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIE1hY3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNybyYgbWFj
cm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxNYWNyb0FyZz4mIGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykKLXsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1hY3JvLnJlcGxhY2VtZW50cy5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IFRva2VuJiByZXBsID0gbWFjcm8ucmVwbGFjZW1lbnRzW2ldOwotICAgICAgICBp
ZiAocmVwbC50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVE9ETyhhbG9rcCk6IE9wdGltaXplIHRoaXMuCi0gICAg
ICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBtYWNybyBwYXJhbXMgZXZlcnkg
dGltZS4KLSAgICAgICAgLy8gVGhlIHBhcmFtIGluZGV4IGNhbiBiZSBjYWNoZWQgd2l0aCB0aGUg
cmVwbGFjZW1lbnQgdG9rZW4uCi0gICAgICAgIE1hY3JvOjpQYXJhbWV0ZXJzOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gc3RkOjpmaW5kKAotICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVycy5iZWdp
bigpLCBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpLCByZXBsLnZhbHVlKTsKLSAgICAgICAgaWYgKGl0
ZXIgPT0gbWFjcm8ucGFyYW1ldGVycy5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVw
bGFjZW1lbnRzLT5wdXNoX2JhY2socmVwbCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHNpemVfdCBpQXJnID0gc3RkOjpkaXN0YW5jZShtYWNyby5wYXJhbWV0
ZXJzLmJlZ2luKCksIGl0ZXIpOwotICAgICAgICBjb25zdCBNYWNyb0FyZyYgYXJnID0gYXJnc1tp
QXJnXTsKLSAgICAgICAgaWYgKGFyZy5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBzaXplX3QgaVJlcGwgPSByZXBsYWNlbWVudHMt
PnNpemUoKTsKLSAgICAgICAgcmVwbGFjZW1lbnRzLT5pbnNlcnQocmVwbGFjZW1lbnRzLT5lbmQo
KSwgYXJnLmJlZ2luKCksIGFyZy5lbmQoKSk7Ci0gICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCB0
b2tlbiBpbmhlcml0cyBwYWRkaW5nIHByb3BlcnRpZXMgZnJvbQotICAgICAgICAvLyBtYWNybyBy
ZXBsYWNlbWVudCB0b2tlbi4KLSAgICAgICAgcmVwbGFjZW1lbnRzLT5hdChpUmVwbCkuc2V0SGFz
TGVhZGluZ1NwYWNlKHJlcGwuaGFzTGVhZGluZ1NwYWNlKCkpOwotICAgIH0KLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwNGViYS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4
cGFuZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KLSNkZWZpbmUg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCi0KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiTGV4ZXIuaCIKLSNpbmNsdWRlICJN
YWNyby5oIgotI2luY2x1ZGUgInBwX3V0aWxzLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFz
cyBEaWFnbm9zdGljczsKLQotY2xhc3MgTWFjcm9FeHBhbmRlciA6IHB1YmxpYyBMZXhlcgotewot
ICBwdWJsaWM6Ci0gICAgTWFjcm9FeHBhbmRlcihMZXhlciogbGV4ZXIsIE1hY3JvU2V0KiBtYWNy
b1NldCwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKLSAgICB2aXJ0dWFsIH5NYWNyb0V4cGFu
ZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7Ci0KLSAgcHJpdmF0
ZToKLSAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oTWFjcm9FeHBhbmRlcik7Ci0KLSAg
ICB2b2lkIGdldFRva2VuKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCB1bmdldFRva2VuKGNvbnN0
IFRva2VuJiB0b2tlbik7Ci0gICAgYm9vbCBpc05leHRUb2tlbkxlZnRQYXJlbigpOwotCi0gICAg
Ym9vbCBwdXNoTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYgaWRlbnRpZmll
cik7Ci0gICAgdm9pZCBwb3BNYWNybygpOwotCi0gICAgYm9vbCBleHBhbmRNYWNybyhjb25zdCBN
YWNybyYgbWFjcm8sCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmll
ciwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRz
KTsKLQotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IE1hY3JvQXJnOwotICAgIGJvb2wg
Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4qIGFyZ3MpOwotICAgIHZvaWQgcmVwbGFjZU1hY3JvUGFy
YW1zKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4mIGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOwotCi0gICAgc3RydWN0IE1hY3Jv
Q29udGV4dAotICAgIHsKLSAgICAgICAgY29uc3QgTWFjcm8qIG1hY3JvOwotICAgICAgICBzaXpl
X3QgaW5kZXg7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7Ci0KLSAg
ICAgICAgTWFjcm9Db250ZXh0KCkgOiBtYWNybygwKSwgaW5kZXgoMCkgeyB9Ci0gICAgICAgIGJv
b2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBpbmRleCA9PSByZXBsYWNlbWVudHMuc2l6ZSgpOyB9
Ci0gICAgICAgIGNvbnN0IFRva2VuJiBnZXQoKSB7IHJldHVybiByZXBsYWNlbWVudHNbaW5kZXgr
K107IH0KLSAgICAgICAgdm9pZCB1bmdldCgpIHsgLS1pbmRleDsgfQotICAgIH07Ci0KLSAgICBM
ZXhlciogbUxleGVyOwotICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7Ci0gICAgRGlhZ25vc3RpY3Mq
IG1EaWFnbm9zdGljczsKLQotICAgIHN0ZDo6YXV0b19wdHI8VG9rZW4+IG1SZXNlcnZlVG9rZW47
Ci0gICAgc3RkOjp2ZWN0b3I8TWFjcm9Db250ZXh0Kj4gbUNvbnRleHRTdGFjazsKLX07Ci0KLX0g
IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9f
RVhQQU5ERVJfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTAxZmEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2luY2x1ZGUgIlByZXByb2Nlc3Nvci5oIgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNs
dWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJEaXJl
Y3RpdmVQYXJzZXIuaCIKLSNpbmNsdWRlICJNYWNyby5oIgotI2luY2x1ZGUgIk1hY3JvRXhwYW5k
ZXIuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotI2luY2x1ZGUgIlRva2VuaXplci5oIgotCi1uYW1l
c3BhY2UgcHAKLXsKLQotc3RydWN0IFByZXByb2Nlc3NvckltcGwKLXsKLSAgICBEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3M7Ci0gICAgTWFjcm9TZXQgbWFjcm9TZXQ7Ci0gICAgVG9rZW5pemVyIHRv
a2VuaXplcjsKLSAgICBEaXJlY3RpdmVQYXJzZXIgZGlyZWN0aXZlUGFyc2VyOwotICAgIE1hY3Jv
RXhwYW5kZXIgbWFjcm9FeHBhbmRlcjsKLQotICAgIFByZXByb2Nlc3NvckltcGwoRGlhZ25vc3Rp
Y3MqIGRpYWcsCi0gICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3Rp
dmVIYW5kbGVyKSA6Ci0gICAgICAgIGRpYWdub3N0aWNzKGRpYWcpLAotICAgICAgICB0b2tlbml6
ZXIoZGlhZyksCi0gICAgICAgIGRpcmVjdGl2ZVBhcnNlcigmdG9rZW5pemVyLCAmbWFjcm9TZXQs
IGRpYWcsIGRpcmVjdGl2ZUhhbmRsZXIpLAotICAgICAgICBtYWNyb0V4cGFuZGVyKCZkaXJlY3Rp
dmVQYXJzZXIsICZtYWNyb1NldCwgZGlhZykKLSAgICB7Ci0gICAgfQotfTsKLQotUHJlcHJvY2Vz
c29yOjpQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikKLXsKLSAg
ICBtSW1wbCA9IG5ldyBQcmVwcm9jZXNzb3JJbXBsKGRpYWdub3N0aWNzLCBkaXJlY3RpdmVIYW5k
bGVyKTsKLX0KLQotUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vzc29yKCkKLXsKLSAgICBkZWxldGUg
bUltcGw7Ci19Ci0KLWJvb2wgUHJlcHJvY2Vzc29yOjppbml0KGludCBjb3VudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQg
a0dMU0xWZXJzaW9uID0gMTAwOwotCi0gICAgLy8gQWRkIHN0YW5kYXJkIHByZS1kZWZpbmVkIG1h
Y3Jvcy4KLSAgICBwcmVkZWZpbmVNYWNybygiX19MSU5FX18iLCAwKTsKLSAgICBwcmVkZWZpbmVN
YWNybygiX19GSUxFX18iLCAwKTsKLSAgICBwcmVkZWZpbmVNYWNybygiX19WRVJTSU9OX18iLCBr
R0xTTFZlcnNpb24pOwotICAgIHByZWRlZmluZU1hY3JvKCJHTF9FUyIsIDEpOwotCi0gICAgcmV0
dXJuIG1JbXBsLT50b2tlbml6ZXIuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotfQotCi12
b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZh
bHVlKQotewotICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICBzdHJlYW0gPDwgdmFs
dWU7Ci0KLSAgICBUb2tlbiB0b2tlbjsKLSAgICB0b2tlbi50eXBlID0gVG9rZW46OkNPTlNUX0lO
VDsKLSAgICB0b2tlbi52YWx1ZSA9IHN0cmVhbS5zdHIoKTsKLQotICAgIE1hY3JvIG1hY3JvOwot
ICAgIG1hY3JvLnByZWRlZmluZWQgPSB0cnVlOwotICAgIG1hY3JvLnR5cGUgPSBNYWNybzo6a1R5
cGVPYmo7Ci0gICAgbWFjcm8ubmFtZSA9IG5hbWU7Ci0gICAgbWFjcm8ucmVwbGFjZW1lbnRzLnB1
c2hfYmFjayh0b2tlbik7Ci0KLSAgICBtSW1wbC0+bWFjcm9TZXRbbmFtZV0gPSBtYWNybzsKLX0K
LQotdm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCi17Ci0gICAgYm9vbCB2YWxp
ZFRva2VuID0gZmFsc2U7Ci0gICAgd2hpbGUgKCF2YWxpZFRva2VuKQotICAgIHsKLSAgICAgICAg
bUltcGwtPm1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKLSAgICAgICAgc3dpdGNoICh0b2tlbi0+
dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUgcmV0dXJuaW5n
IGludGVybmFsIHByZXByb2Nlc3NpbmcgdG9rZW5zLgotICAgICAgICAgIC8vIENvbnZlcnQgcHJl
cHJvY2Vzc2luZyB0b2tlbnMgdG8gY29tcGlsZXIgdG9rZW5zIG9yIHJlcG9ydAotICAgICAgICAg
IC8vIGRpYWdub3N0aWNzLgotICAgICAgICAgIGNhc2UgVG9rZW46OlBQX0hBU0g6Ci0gICAgICAg
ICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBU
b2tlbjo6UFBfTlVNQkVSOgotICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBUb2tlbjo6UFBfT1RIRVI6Ci0gICAgICAgICAgICBtSW1w
bC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9DSEFSQUNURVIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgdmFsaWRUb2tlbiA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nv
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvUHJlcHJvY2Vzc29yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZTM1YjIu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VT
U09SX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KLQot
I2luY2x1ZGUgInBwX3V0aWxzLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBEaWFnbm9z
dGljczsKLWNsYXNzIERpcmVjdGl2ZUhhbmRsZXI7Ci1zdHJ1Y3QgUHJlcHJvY2Vzc29ySW1wbDsK
LXN0cnVjdCBUb2tlbjsKLQotY2xhc3MgUHJlcHJvY2Vzc29yCi17Ci0gIHB1YmxpYzoKLSAgICBQ
cmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJlY3RpdmVIYW5kbGVyKiBk
aXJlY3RpdmVIYW5kbGVyKTsKLSAgICB+UHJlcHJvY2Vzc29yKCk7Ci0KLSAgICAvLyBjb3VudDog
c3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0cmluZyBhbmQgbGVuZ3Ro
IGFycmF5cy4KLSAgICAvLyBzdHJpbmc6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBwb2ludGVycyB0
byBzdHJpbmdzLgotICAgIC8vIGxlbmd0aDogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHN0cmluZyBs
ZW5ndGhzLgotICAgIC8vIElmIGxlbmd0aCBpcyBOVUxMLCBlYWNoIHN0cmluZyBpcyBhc3N1bWVk
IHRvIGJlIG51bGwgdGVybWluYXRlZC4KLSAgICAvLyBJZiBsZW5ndGggaXMgYSB2YWx1ZSBvdGhl
ciB0aGFuIE5VTEwsIGl0IHBvaW50cyB0byBhbiBhcnJheSBjb250YWluaW5nCi0gICAgLy8gYSBz
dHJpbmcgbGVuZ3RoIGZvciBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHN0
cmluZy4KLSAgICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGxlbmd0aCBhcnJheSBtYXkgY29udGFp
biB0aGUgbGVuZ3RoIG9mIHRoZQotICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nIG9yIGEgdmFs
dWUgbGVzcyB0aGFuIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nCi0gICAgLy8gaXMgbnVs
bCB0ZXJtaW5hdGVkLgotICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwotICAgIC8vIEFkZHMgYSBwcmUtZGVmaW5l
ZCBtYWNyby4KLSAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUsIGludCB2
YWx1ZSk7Ci0KLSAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOwotCi0gIHByaXZhdGU6Ci0gICAg
UFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7Ci0KLSAgICBQcmVwcm9j
ZXNzb3JJbXBsKiBtSW1wbDsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxv
Y2F0aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
OTgyNjEzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
U09VUkNFX0xPQ0FUSU9OX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0Vf
TE9DQVRJT05fSF8KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBTb3VyY2VMb2NhdGlvbgot
ewotICAgIFNvdXJjZUxvY2F0aW9uKCkgOiBmaWxlKDApLCBsaW5lKDApIHsgfQotICAgIFNvdXJj
ZUxvY2F0aW9uKGludCBmLCBpbnQgbCkgOiBmaWxlKGYpLCBsaW5lKGwpIHsgfQotCi0gICAgYm9v
bCBlcXVhbHMoY29uc3QgU291cmNlTG9jYXRpb24mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIChmaWxlID09IG90aGVyLmZpbGUpICYmIChsaW5lID09IG90aGVyLmxpbmUpOwot
ICAgIH0KLQotICAgIGludCBmaWxlOwotICAgIGludCBsaW5lOwotfTsKLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlv
biYgcmhzKQotewotICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRp
b24mIHJocykKLXsKLSAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJ
T05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTYwMzgwYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw2MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVz
cGFjZSBwcAotewotCi12b2lkIFRva2VuOjpyZXNldCgpCi17Ci0gICAgdHlwZSA9IDA7Ci0gICAg
ZmxhZ3MgPSAwOwotICAgIGxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKLSAgICB2YWx1ZS5j
bGVhcigpOwotfQotCi1ib29sIFRva2VuOjplcXVhbHMoY29uc3QgVG9rZW4mIG90aGVyKSBjb25z
dAotewotICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgotICAgICAgICAgICAoZmxh
Z3MgPT0gb3RoZXIuZmxhZ3MpICYmCi0gICAgICAgICAgIChsb2NhdGlvbiA9PSBvdGhlci5sb2Nh
dGlvbikgJiYKLSAgICAgICAgICAgKHZhbHVlID09IG90aGVyLnZhbHVlKTsKLX0KLQotdm9pZCBU
b2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQotewotICAgIGlmIChzdGFydCkKLSAg
ICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKLSAgICBlbHNlCi0gICAgICAgIGZsYWdz
ICY9IH5BVF9TVEFSVF9PRl9MSU5FOwotfQotCi12b2lkIFRva2VuOjpzZXRIYXNMZWFkaW5nU3Bh
Y2UoYm9vbCBzcGFjZSkKLXsKLSAgICBpZiAoc3BhY2UpCi0gICAgICAgIGZsYWdzIHw9IEhBU19M
RUFESU5HX1NQQUNFOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFESU5HX1NQ
QUNFOwotfQotCi12b2lkIFRva2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUp
Ci17Ci0gICAgaWYgKGRpc2FibGUpCi0gICAgICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9ESVNBQkxF
RDsKLSAgICBlbHNlCi0gICAgICAgIGZsYWdzICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7Ci19Ci0K
LXN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4m
IHRva2VuKQotewotICAgIGlmICh0b2tlbi5oYXNMZWFkaW5nU3BhY2UoKSkKLSAgICAgICAgb3V0
IDw8ICIgIjsKLQotICAgIG91dCA8PCB0b2tlbi52YWx1ZTsKLSAgICByZXR1cm4gb3V0OwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1MjMxMDIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1RPS0VOX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tF
Tl9IXwotCi0jaW5jbHVkZSA8b3N0cmVhbT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRl
ICJTb3VyY2VMb2NhdGlvbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFRva2VuCi17
Ci0gICAgZW51bSBUeXBlCi0gICAgewotICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KLQotICAg
ICAgICBJREVOVElGSUVSID0gMjU4LAotCi0gICAgICAgIENPTlNUX0lOVCwKLSAgICAgICAgQ09O
U1RfRkxPQVQsCi0KLSAgICAgICAgT1BfSU5DLAotICAgICAgICBPUF9ERUMsCi0gICAgICAgIE9Q
X0xFRlQsCi0gICAgICAgIE9QX1JJR0hULAotICAgICAgICBPUF9MRSwKLSAgICAgICAgT1BfR0Us
Ci0gICAgICAgIE9QX0VRLAotICAgICAgICBPUF9ORSwKLSAgICAgICAgT1BfQU5ELAotICAgICAg
ICBPUF9YT1IsCi0gICAgICAgIE9QX09SLAotICAgICAgICBPUF9BRERfQVNTSUdOLAotICAgICAg
ICBPUF9TVUJfQVNTSUdOLAotICAgICAgICBPUF9NVUxfQVNTSUdOLAotICAgICAgICBPUF9ESVZf
QVNTSUdOLAotICAgICAgICBPUF9NT0RfQVNTSUdOLAotICAgICAgICBPUF9MRUZUX0FTU0lHTiwK
LSAgICAgICAgT1BfUklHSFRfQVNTSUdOLAotICAgICAgICBPUF9BTkRfQVNTSUdOLAotICAgICAg
ICBPUF9YT1JfQVNTSUdOLAotICAgICAgICBPUF9PUl9BU1NJR04sCi0KLSAgICAgICAgLy8gUHJl
cHJvY2Vzc2luZyB0b2tlbiB0eXBlcy4KLSAgICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIHVzZWQg
YnkgdGhlIHByZXByb2Nlc3NvciBpbnRlcm5hbGx5LgotICAgICAgICAvLyBQcmVwcm9jZXNzb3Ig
Y2xpZW50cyBtdXN0IG5vdCBkZXBlbmQgb3IgY2hlY2sgZm9yIHRoZW0uCi0gICAgICAgIFBQX0hB
U0gsCi0gICAgICAgIFBQX05VTUJFUiwKLSAgICAgICAgUFBfT1RIRVIKLSAgICB9OwotICAgIGVu
dW0gRmxhZ3MKLSAgICB7Ci0gICAgICAgIEFUX1NUQVJUX09GX0xJTkUgICA9IDEgPDwgMCwKLSAg
ICAgICAgSEFTX0xFQURJTkdfU1BBQ0UgID0gMSA8PCAxLAotICAgICAgICBFWFBBTlNJT05fRElT
QUJMRUQgPSAxIDw8IDIKLSAgICB9OwotCi0gICAgVG9rZW4oKSA6IHR5cGUoMCksIGZsYWdzKDAp
IHsgfQotCi0gICAgdm9pZCByZXNldCgpOwotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFRva2VuJiBv
dGhlcikgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qg
dG9rZW4gb24gbGluZS4KLSAgICAvLyBJdCBkaXNyZWdhcmRzIGFueSBsZWFkaW5nIHdoaXRlc3Bh
Y2UuCi0gICAgYm9vbCBhdFN0YXJ0T2ZMaW5lKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgQVRf
U1RBUlRfT0ZfTElORSkgIT0gMDsgfQotICAgIHZvaWQgc2V0QXRTdGFydE9mTGluZShib29sIHN0
YXJ0KTsKLQotICAgIGJvb2wgaGFzTGVhZGluZ1NwYWNlKCkgY29uc3QgeyByZXR1cm4gKGZsYWdz
ICYgSEFTX0xFQURJTkdfU1BBQ0UpICE9IDA7IH0KLSAgICB2b2lkIHNldEhhc0xlYWRpbmdTcGFj
ZShib29sIHNwYWNlKTsKLQotICAgIGJvb2wgZXhwYW5zaW9uRGlzYWJsZWQoKSBjb25zdCB7IHJl
dHVybiAoZmxhZ3MgJiBFWFBBTlNJT05fRElTQUJMRUQpICE9IDA7IH0KLSAgICB2b2lkIHNldEV4
cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSk7Ci0KLSAgICBpbnQgdHlwZTsKLSAgICB1bnNp
Z25lZCBpbnQgZmxhZ3M7Ci0gICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247Ci0gICAgc3RkOjpz
dHJpbmcgdmFsdWU7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRva2VuJiBs
aHMsIGNvbnN0IFRva2VuJiByaHMpCi17Ci0gICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKLX0K
LQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYg
cmhzKQotewotICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOwotfQotCi1leHRlcm4gc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4p
OwotCi19ICAvLyBuYW1lcHNhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1RPS0VOX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggM2JjM2QxYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjM0NCArMCwwIEBACi0jbGluZSAxNiAiLi9wcmVwcm9jZXNzb3Iv
bmV3L1Rva2VuaXplci5sIgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdl
bmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0KLQotI2xpbmUg
MTMgIi4vcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwIgotCi0jZGVmaW5lICBZWV9JTlRf
QUxJR05FRCBzaG9ydCBpbnQKLQotLyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZs
ZXggKi8KLQotI2RlZmluZSBGTEVYX1NDQU5ORVIKLSNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJT
SU9OIDIKLSNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxFWF9T
VUJNSU5PUl9WRVJTSU9OIDM1Ci0jaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAotI2Rl
ZmluZSBGTEVYX0JFVEEKLSNlbmRpZgotCi0vKiBGaXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9y
bS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1ZXMuICovCi0KLS8qIGJlZ2luIHN0
YW5kYXJkIEMgaGVhZGVycy4gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIGVuZCBz
dGFuZGFyZCBDIGhlYWRlcnMuICovCi0KLS8qIGZsZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25z
ICovCi0KLSNpZm5kZWYgRkxFWElOVF9ICi0jZGVmaW5lIEZMRVhJTlRfSAotCi0vKiBDOTkgc3lz
dGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAq
LwotCi0jaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+
PSAxOTk5MDFMCi0KLS8qIEM5OSBzYXlzIHRvIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJl
Zm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCi0gKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9t
aW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKLSAqLwotI2lmbmRlZiBfX1NURENfTElNSVRfTUFD
Uk9TCi0jZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQotI2VuZGlmCi0KLSNpbmNsdWRlIDxp
bnR0eXBlcy5oPgotdHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHVpbnQ4X3Qg
ZmxleF91aW50OF90OwotdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgdWlu
dDE2X3QgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7Ci10eXBl
ZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7Ci0jZWxzZQotdHlwZWRlZiBzaWduZWQgY2hhciBm
bGV4X2ludDhfdDsKLXR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKLXR5cGVkZWYgaW50
IGZsZXhfaW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAotdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQg
aW50IGZsZXhfdWludDMyX3Q7Ci0jZW5kaWYgLyogISBDOTkgKi8KLQotLyogTGltaXRzIG9mIGlu
dGVncmFsIHR5cGVzLiAqLwotI2lmbmRlZiBJTlQ4X01JTgotI2RlZmluZSBJTlQ4X01JTiAgICAg
ICAgICAgICAgICgtMTI4KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2X01JTgotI2RlZmluZSBJTlQx
Nl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSNlbmRpZgotI2lmbmRlZiBJTlQzMl9NSU4K
LSNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKLSNlbmRpZgot
I2lmbmRlZiBJTlQ4X01BWAotI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0j
ZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUFYCi0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAg
KDMyNzY3KQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVggICAg
ICAgICAgICAgICgyMTQ3NDgzNjQ3KQotI2VuZGlmCi0jaWZuZGVmIFVJTlQ4X01BWAotI2RlZmlu
ZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVVKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQxNl9N
QVgKLSNkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQotI2VuZGlmCi0jaWZu
ZGVmIFVJTlQzMl9NQVgKLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5
NVUpCi0jZW5kaWYKLQotI2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLSNpZmRlZiBfX2NwbHVz
cGx1cwotCi0vKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAq
LwotI2RlZmluZSBZWV9VU0VfQ09OU1QKLQotI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLwotCi0v
KiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLwotI2lmIGRlZmlu
ZWQgKF9fU1REQ19fKQotCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZW5kaWYJLyogZGVmaW5l
ZCAoX19TVERDX18pICovCi0jZW5kaWYJLyogISBfX2NwbHVzcGx1cyAqLwotCi0jaWZkZWYgWVlf
VVNFX0NPTlNUCi0jZGVmaW5lIHl5Y29uc3QgY29uc3QKLSNlbHNlCi0jZGVmaW5lIHl5Y29uc3QK
LSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwotI2RlZmluZSBZWV9O
VUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVk
IGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRl
eC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8gaW5zdGVh
ZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAqIGRvdWJs
ZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5z
aWduZWQgY2hhcikgYykKLQotLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCi0jaWZuZGVmIFlZX1RZ
UEVERUZfWVlfU0NBTk5FUl9UCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCi10eXBl
ZGVmIHZvaWQqIHl5c2Nhbl90OwotI2VuZGlmCi0KLS8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2Ug
dmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCi0gICBhcmUgbWFjcm9zIGluIHRo
ZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLSNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgotI2RlZmlu
ZSB5eW91dCB5eWctPnl5b3V0X3IKLSNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgotI2Rl
ZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgotI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgot
I2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8p
Ci0jZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVt
bikKLSNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgotCi0vKiBFbnRl
ciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBw
YXJhbWV0ZXIsCi0gKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3Jj
ZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKLSAqIGRlZmluaXRpb24gb2YgQkVHSU4uCi0gKi8KLSNk
ZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQotLyogVHJhbnNsYXRlIHRoZSBj
dXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQK
LSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBp
cyBmb3IgbGV4Ci0gKiBjb21wYXRpYmlsaXR5LgotICovCi0jZGVmaW5lIFlZX1NUQVJUICgoeXln
LT55eV9zdGFydCAtIDEpIC8gMikKLSNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCi0vKiBBY3Rp
b24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwotI2RlZmlu
ZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotCi0v
KiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAq
LwotI2RlZmluZSBZWV9ORVdfRklMRSBwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKLQotI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQg
YnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4
NAotI2VuZGlmCi0KLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9s
ZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuCi0gKi8KLSNkZWZp
bmUgWVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3Rh
dGVfdHlwZSkpCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZpbmUg
WVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUKLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSAqWVlfQlVGRkVSX1NUQVRFOwotI2VuZGlmCi0KLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpF
X1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVf
dDsKLSNlbmRpZgotCi0jZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCi0jZGVmaW5lIEVP
Ql9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgotCi0gICAg
I2RlZmluZSBZWV9MRVNTX0xJTkVOTyhuKQotICAgIAotLyogUmV0dXJuIGFsbCBidXQgdGhlIGZp
cnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLwot
I2RlZmluZSB5eWxlc3MobikgXAotCWRvIFwKLQkJeyBcCi0JCS8qIFVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChu
KTsgXAotICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0JCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCi0JCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAot
CQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZ
X01PUkVfQURKOyBcCi0JCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdh
aW4gKi8gXAotCQl9IFwKLQl3aGlsZSAoIDAgKQotCi0jZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQo
IGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCi0KLSNpZm5kZWYgWVlfU1RSVUNUX1lZ
X0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi1zdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlCi0JewotCUZJTEUgKnl5X2lucHV0X2ZpbGU7Ci0KLQljaGFyICp5eV9j
aF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KLQljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVu
dCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KLQotCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVy
IGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgotCSAqIGNoYXJhY3RlcnMuCi0J
ICovCi0JeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwotCi0JLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMg
cmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKLQkgKiBjaGFyYWN0ZXJzLgot
CSAqLwotCXl5X3NpemVfdCB5eV9uX2NoYXJzOwotCi0JLyogV2hldGhlciB3ZSAib3duIiB0aGUg
YnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotCSAqIGFuZCBjYW4gcmVhbGxv
YygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0JICogZGVsZXRlIGl0
LgotCSAqLwotCWludCB5eV9pc19vdXJfYnVmZmVyOwotCi0JLyogV2hldGhlciB0aGlzIGlzIGFu
ICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCi0JICogaWYgd2UncmUgdXNp
bmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQotCSAqIGluc3Rl
YWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIK
LQkgKiBlYWNoIG5ld2xpbmUuCi0JICovCi0JaW50IHl5X2lzX2ludGVyYWN0aXZlOwotCi0JLyog
V2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5l
LgotCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gs
IG90aGVyd2lzZQotCSAqIG5vdC4KLQkgKi8KLQlpbnQgeXlfYXRfYm9sOwotCi0gICAgaW50IHl5
X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KLSAgICBpbnQgeXlfYnNfY29sdW1u
OyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCi0gICAgCi0JLyogV2hldGhlciB0byB0cnkgdG8g
ZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0JICogZW5kIG9mIGl0Lgot
CSAqLwotCWludCB5eV9maWxsX2J1ZmZlcjsKLQotCWludCB5eV9idWZmZXJfc3RhdHVzOwotCi0j
ZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAotI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKLQkvKiBX
aGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJv
Y2VzcwotCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBp
bmRpY2F0ZSB0aGF0IHdlCi0JICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0
IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0JICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRv
a2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCi0JICogcG9zc2libGUgYmFja2luZy11
cC4KLQkgKgotCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUg
c3RhdHVzIHRvICJuZXciCi0JICogKHZpYSBwcHJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIg
Y2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5Ci0JICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3
IGlucHV0IGZpbGUuCi0JICovCi0jZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCi0KLQl9
OwotI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCi0KLS8qIFdlIHByb3Zp
ZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQotICog
ZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFs
Ci0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFj
aywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9z
dGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdoZW4g
d2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4gd2Ug
bmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wXQotCi12b2lkIHBwcmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci12b2lkIHBwX3N3aXRjaF90b19idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBu
ZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9jcmVh
dGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZv
aWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5l
d19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHBvcF9idWZmZXJfc3RhdGUg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1zdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfbG9hZF9idWZmZXJfc3Rh
dGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVm
aW5lIFlZX0ZMVVNIX0JVRkZFUiBwcF9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5
c2Nhbm5lcikKLQotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5
X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6
ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgKnBwYWxsb2MgKHl5X3NpemVf
dCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkICpwcHJlYWxsb2MgKHZvaWQgKix5eV9zaXpl
X3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwcGZyZWUgKHZvaWQgKiAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci0KLSNkZWZpbmUgeXlfbmV3X2J1ZmZlciBwcF9jcmVhdGVfYnVmZmVyCi0K
LSNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0JeyBcCi0JaWYg
KCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOyBcCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAgICAg
ICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAot
CX0gXAotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19p
bnRlcmFjdGl2ZTsgXAotCX0KLQotI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAotCXsgXAot
CWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0
YWNrICh5eXNjYW5uZXIpOyBcCi0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKLSAg
ICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsg
XAotCX0gXAotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBc
Ci0JfQotCi0jZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2F0X2JvbCkKLQotLyogQmVnaW4gdXNlciBzZWN0MyAqLwotCi0jZGVmaW5lIHBwd3JhcChuKSAx
Ci0jZGVmaW5lIFlZX1NLSVBfWVlXUkFQCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFS
OwotCi10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwotCi0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0
ZXh0X3IKLQotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMg
KHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMg
dm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQotLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNo
ZWQgYW5kIGJlZm9yZSB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRl
eHQuCi0gKi8KLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCi0JeXlnLT55eXRleHRfcHRy
ID0geXlfYnA7IFwKLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKLQl5eWct
Pnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAotCSp5eV9jcCA9ICdcMCc7IFwKLQl5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcDsKLQotI2RlZmluZSBZWV9OVU1fUlVMRVMgMzcKLSNkZWZpbmUgWVlfRU5E
X09GX0JVRkZFUiAzOAotLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVy
LAotICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCi1zdHJ1Y3QgeXlfdHJhbnNf
aW5mbwotCXsKLQlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotCWZsZXhfaW50MzJfdCB5eV9ueHQ7
Ci0JfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbODRdID0KLSAgICB7
ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAzOCwgICAzNiwgICAzNCwgICAz
NSwgICAzNSwgICAzMywKLSAgICAgICAgNywgICAzMywgICAzMywgICAzMywgICAzMywgICAzMywg
ICAzMywgICAzMywgICAzMywgICAgOSwKLSAgICAgICAgOSwgICAzMywgICAzMywgICAzMywgICAg
OCwgICAzMywgICAzMywgICAgMywgICAgNSwgICAgNSwKLSAgICAgICAgNCwgICAzNCwgICAzNSwg
ICAxOSwgICAyNywgICAyMCwgICAzMCwgICAyNSwgICAxMiwgICAyMywKLSAgICAgICAxMywgICAy
NCwgICAxMCwgICAgMiwgICAgMSwgICAyNiwgICAxMCwgICAgOSwgICAxMSwgICAxMSwKLSAgICAg
ICAxMSwgICAxMSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAxNywgICAxNSwgICAgOCwgICAz
MSwKLSAgICAgICAyMSwgICAzMiwgICAyMiwgICAgMywgICAgNSwgICAgNiwgICAxMSwgICAxMCwg
ICAxMSwgICAgMSwKLSAgICAgICAxMCwgICAxMSwgICAgMCwgICAxMCwgICAgOSwgICAyOCwgICAy
OSwgICAgMCwgICAxMCwgICAxMCwKLSAgICAgICAxMCwgICAxMCwgICAgMAotICAgIH0gOwotCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAg
IDMsCi0gICAgICAgIDIsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYs
ICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCi0gICAgICAgIDksICAgMTAsICAgMTEsICAg
IDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCi0gICAgICAgMTYsICAgMTYs
ICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAgMTgsCi0gICAgICAg
MTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjEs
Ci0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgIDEsICAgIDksICAgMjUsICAgMjMsICAg
IDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0KLSAgICAgICAyMiwgICAyMSwgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKLSAgICAgICAy
MywgICAyMywgICAgOSwgICAyNiwgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLQotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI3XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEs
ICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCi0gICAgICAg
IDEsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbODldID0KLSAgICB7ICAgMCwKLSAgICAg
ICAgMCwgICAgMCwgICAyNCwgICAyNiwgIDE1OCwgIDE1OSwgIDE1MCwgIDE1OSwgIDE0NSwgIDEy
OCwKLSAgICAgIDE1OSwgIDExMiwgICAyMywgIDE1OSwgIDExMSwgICAyMSwgICAyNSwgICAzMCwg
ICAyOSwgICAzNiwKLSAgICAgICA0NiwgICAzNiwgIDEwMCwgICA0NSwgICAgMCwgICAxNiwgICA0
NywgICAgMCwgIDE1OSwgICA4NCwKLSAgICAgICA2NSwgICA3MywgIDE1OSwgIDE1OSwgIDE1OSwg
IDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwgIDE1OSwKLSAgICAgIDE1OSwgIDE1OSwgICA2MSwgIDE1
OSwgICAgMCwgIDE1OSwgICA3MywgICAzMiwgICA1NiwgICA4MywKLSAgICAgICA5NSwgICA2OCwg
ICAgMCwgICAzMSwgIDE1OSwgIDE1OSwgIDE1OSwgICAxOSwgICAgMCwgIDE1OSwKLSAgICAgIDE1
OSwgIDE1OSwgIDE1OSwgICAgMCwgIDE1OSwgIDE1OSwgICA5OCwgICAgMCwgIDExMCwgICAgMCwK
LSAgICAgICAgMCwgIDExNywgICA1MiwgICA5MCwgICA4MCwgIDE1OSwgIDE1OSwgIDEwMSwgICA5
NywgIDExMiwKLSAgICAgIDEyMCwgIDEyMywgIDE1OSwgIDE0MCwgICAyOCwgIDE0NSwgIDE1MCwg
IDE1MgotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzg5XSA9
Ci0gICAgeyAgIDAsCi0gICAgICAgODMsICAgIDEsICAgODQsICAgODQsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgMjAsICAgODMsICAgODMsICAg
ODMsICAgODUsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODcsICAgODMsICAgODMsICAgMjAsICAgMjAsICAgNDcs
Ci0gICAgICAgNTAsICAgODgsICAgMjEsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODUsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODYsICAgODMsICAgODMsICAgNDMs
ICAgNDMsICAgNjcsICAgODcsCi0gICAgICAgNDcsICAgNTAsICAgODMsICAgNTEsICAgODgsICAg
ODMsICAgODMsICAgODMsICAgNjksICAgNzIsCi0gICAgICAgODMsICAgODMsICAgIDAsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X254dFsxODZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgNiwgICAgNywgICAgOCwg
ICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKLSAgICAgICAxNiwgICAx
NywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKLSAgICAg
ICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOSwgICAzMCwgICAyOSwgICAz
MCwKLSAgICAgICAzNiwgICAzOSwgICA1OSwgICAzMSwgICA2MCwgICAzMSwgICA0MSwgICA3Nywg
ICA0NCwgICA0MCwKLSAgICAgICA2MSwgICAzNywgICA0NSwgICA0MiwgICA0MywgICA0MywgICA0
MywgICA0NiwgICA0NywgICA3NiwKLSAgICAgICA0OCwgICA0OCwgICA0OSwgICA1NCwgICA1NSwg
ICA1MCwgICA1MCwgICA1MSwgICA1MCwgICA1MiwKLSAgICAgICA1MywgICA1MywgICA1MywgICA1
NywgICA1OCwgICA2MiwgICA4MSwgICA4MSwgICA4MSwgICA1MCwKLSAgICAgICA0OSwgICA0OSwg
ICA2MywgICA2NywgICAzMiwgICA2OCwgICA2OCwgICA2OCwgICA2NiwgICA1MCwKLSAgICAgICA1
MCwgICA2NywgICA2OSwgICA2NywgICA2NywgICA1MCwgICA2NSwgICA3MSwgICA3MSwgICA3MSwK
LSAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA3MiwgICA1MCwgICA1MCwgICA1MCwgICA1
MCwgICA1MCwKLQotICAgICAgIDgzLCAgIDgzLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDczLCAgIDcz
LCAgIDgzLCAgIDgzLCAgIDc0LAotICAgICAgIDc0LCAgIDc0LCAgIDY3LCAgIDY3LCAgIDY3LCAg
IDgyLCAgIDgyLCAgIDgyLCAgIDU2LCAgIDY3LAotICAgICAgIDc4LCAgIDc4LCAgIDgzLCAgIDgz
LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDc4LCAgIDc4LCAgIDM4LAotICAgICAgIDM1LCAgIDgwLCAg
IDgwLCAgIDgwLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAotICAgICAgIDI4
LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDY0LCAgIDM0LCAgIDMzLCAgIDY0LCAgIDY0LAot
ICAgICAgIDcwLCAgIDMyLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDc1LCAgIDc1LCAgIDgzLCAgICA1
LCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbMTg2XSA9
Ci0gICAgeyAgIDAsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDQsICAgIDQsCi0gICAgICAgMTMsICAgMTYs
ICAgODUsICAgIDMsICAgMjYsICAgIDQsICAgMTcsICAgNTgsICAgMTksICAgMTYsCi0gICAgICAg
MjYsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTksICAgMjAsICAgNTQs
Ci0gICAgICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNDgsICAgMjAsICAgMjAsICAg
MjAsICAgMjAsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQsICAgMjcsICAgNzMs
ICAgNzMsICAgNzMsICAgMjEsCi0gICAgICAgNDksICAgNDksICAgMjcsICAgNDMsICAgMzIsICAg
NDMsICAgNDMsICAgNDMsICAgMzEsICAgNDksCi0gICAgICAgNTIsICAgNDMsICAgNDMsICAgNDMs
ICAgNDMsICAgNDcsICAgMzAsICAgNDcsICAgNDcsICAgNDcsCi0gICAgICAgNTIsICAgNTIsICAg
NzUsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAgNTAsICAgNTAsCi0KLSAgICAgICA3
NCwgICA3NCwgICA3NSwgICA3NSwgICA1MCwgICA1MSwgICA1MSwgICA3OSwgICA3OSwgICA1MSwK
LSAgICAgICA1MSwgICA1MSwgICA2NywgICA2NywgICA2NywgICA3OCwgICA3OCwgICA3OCwgICAy
MywgICA2NywKLSAgICAgICA2OSwgICA2OSwgICA4MCwgICA4MCwgICA2OSwgICA2OSwgICA2OSwg
ICA3MiwgICA3MiwgICAxNSwKLSAgICAgICAxMiwgICA3MiwgICA3MiwgICA3MiwgICA4MSwgICA4
MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKLSAgICAgICA4NCwgICA4NCwgICA4NCwgICA4NCwg
ICA4NCwgICA4NiwgICAxMCwgICAgOSwgICA4NiwgICA4NiwKLSAgICAgICA4NywgICAgNywgICA4
NywgICA4NywgICA4NywgICA4OCwgICA4OCwgICAgNSwgICA4MywgICA4MywKLSAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MwotICAgIH0gOwotCi0vKiBU
aGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAotICog
YW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgotICovCi0jZGVmaW5lIFJFSkVD
VCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCi0jZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91
c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgWVlfTU9SRV9BREogMAotI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotVGhpcyBmaWxl
IGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3Iu
Ci1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFt
bWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFz
cHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJh
dGVfcGFyc2VyLnNoLgotKi8KLQotI2luY2x1ZGUgIlRva2VuaXplci5oIgotCi0jaW5jbHVkZSAi
RGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi0jaWYgZGVmaW5lZChfX0dOVUNf
XykKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVu
Y3Rpb24uCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVy
biIKLSNlbmRpZgotCi10eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Ci10eXBlZGVmIHBwOjpT
b3VyY2VMb2NhdGlvbiBZWUxUWVBFOwotCi0vLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJp
YWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KLSNkZWZpbmUgeXlmaWxlbm8geXlj
b2x1bW4KLQotI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAotICAgIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWZpbGVubyA9IDA7
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAotICAgICAgICB5
eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZp
bmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcHA6OklucHV0KiBp
bnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAg
ICAgICBcCi0gICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkp
ICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0g
aW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAotICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7
ICAgIFwKLSAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+ZmlsZSA9
IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
eXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBVVChi
dWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQo
YnVmLCBtYXhTaXplKTsKLQotI2RlZmluZSBJTklUSUFMIDAKLSNkZWZpbmUgQ09NTUVOVCAxCi0K
LSNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpDb250ZXh0KgotCi0vKiBIb2xk
cyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KLXN0cnVjdCB5
eWd1dHNfdAotICAgIHsKLQotICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxl
eC4gKi8KLSAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKLQotICAgIC8qIFRoZSByZXN0IGFy
ZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBz
Y2FubmVyLiAqLwotICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7Ci0gICAgc2l6ZV90IHl5X2J1
ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLwotICAgIHNpemVf
dCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwotICAgIFlZ
X0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4g
Ki8KLSAgICBjaGFyIHl5X2hvbGRfY2hhcjsKLSAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKLSAg
ICB5eV9zaXplX3QgeXlsZW5nX3I7Ci0gICAgY2hhciAqeXlfY19idWZfcDsKLSAgICBpbnQgeXlf
aW5pdDsKLSAgICBpbnQgeXlfc3RhcnQ7Ci0gICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOwotICAgIGludCB5eV9zdGFydF9zdGFj
a19kZXB0aDsKLSAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOwotICAgIHl5X3N0YXRlX3R5cGUgeXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsK
LQotICAgIGludCB5eWxpbmVub19yOwotICAgIGludCB5eV9mbGV4X2RlYnVnX3I7Ci0KLSAgICBj
aGFyICp5eXRleHRfcjsKLSAgICBpbnQgeXlfbW9yZV9mbGFnOwotICAgIGludCB5eV9tb3JlX2xl
bjsKLQotICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKLQotICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsK
LQotICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KLQotc3RhdGljIGludCB5eV9pbml0
X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgLyogVGhpcyBtdXN0IGdvIGhl
cmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAotICAgICAqIGZyb20g
Ymlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLwotICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWct
Pnl5bHZhbF9yCi0gICAgCi0gICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKLSAg
ICAKLWludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7Ci0KLWludCBwcGxleF9pbml0
X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7Ci0K
LS8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KLSAgIFRoZXNlIGFyZSBtYWRlIHZpc2li
bGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCi0KLWludCBw
cGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2RlYnVnICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2Vy
X2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9pbiAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotdm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0KLXl5X3NpemVfdCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotY2hhciAq
cHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9saW5lbm8gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVy
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0gICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0gICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQ
RSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0gICAgCi0vKiBNYWNyb3Mg
YWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9u
cyBpbgotICogc2VjdGlvbiAxLgotICovCi0KLSNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKLSNpZmRl
ZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLSNlbHNlCi1leHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaWZuZGVmIHl5dGV4dF9wdHIKLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3Ry
bmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKLSNl
bmRpZgotCi0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4g
KHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotI2VuZGlmCi0KLSNpZm5kZWYg
WVlfTk9fSU5QVVQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1zdGF0aWMgaW50IHl5aW5wdXQgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotI2VuZGlmCi0KLSNlbmRpZgotCi0vKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1
cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCi0jaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKLSNkZWZp
bmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCi0jZW5kaWYKLQotLyogQ29weSB3aGF0ZXZlciB0aGUg
bGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KLSNpZm5kZWYgRUNI
TwotLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1p
Z2h0IGNvbnRhaW4gTlVMJ3MsCi0gKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgotICovCi0jZGVmaW5l
IEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQotI2VuZGlmCi0KLS8qIEdl
dHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
cmVhZCwgb3IgWVlfTlVMTCwKLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0jaWZu
ZGVmIFlZX0lOUFVUCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLQlp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0JCXsg
XAotCQlpbnQgYyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAotCQlmb3IgKCBuID0gMDsgbiA8
IG1heF9zaXplICYmIFwKLQkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9
ICdcbic7ICsrbiApIFwKLQkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCi0JCWlmICggYyA9PSAnXG4n
ICkgXAotCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAotCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJv
ciggeXlpbiApICkgXAotCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIg
ZmFpbGVkIiApOyBcCi0JCXJlc3VsdCA9IG47IFwKLQkJfSBcCi0JZWxzZSBcCi0JCXsgXAotCQll
cnJubz0wOyBcCi0JCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5
aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLQkJCXsgXAotCQkJaWYoIGVycm5vICE9IEVJTlRS
KSBcCi0JCQkJeyBcCi0JCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIg
ZmFpbGVkIiApOyBcCi0JCQkJYnJlYWs7IFwKLQkJCQl9IFwKLQkJCWVycm5vPTA7IFwKLQkJCWNs
ZWFyZXJyKHl5aW4pOyBcCi0JCQl9IFwKLQkJfVwKLVwKLQotI2VuZGlmCi0KLS8qIE5vIHNlbWkt
Y29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0
ZSgpOyIgLQotICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4i
IGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCi0gKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBh
Ym91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgotICovCi0jaWZuZGVmIHl5dGVybWluYXRlCi0j
ZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKLSNlbmRpZgotCi0vKiBOdW1iZXIg
b2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCi0jaWZu
ZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKLSNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQot
I2VuZGlmCi0KLS8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLwotI2lmbmRlZiBZWV9GQVRBTF9F
UlJPUgotI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5
eXNjYW5uZXIpCi0jZW5kaWYKLQotLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVy
ZXMgYW5kIHByb3RvdHlwZXMgKi8KLQotLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0
ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgotICogZWFzaWx5IGFkZCBwYXJh
bWV0ZXJzLgotICovCi0jaWZuZGVmIFlZX0RFQ0wKLSNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEK
LQotZXh0ZXJuIGludCBwcGxleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9w
YXJhbSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotCi0jZGVm
aW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFs
X3BhcmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotI2Vu
ZGlmIC8qICFZWV9ERUNMICovCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBv
ZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCi0gKiBoYXZlIGJlZW4gc2V0IHVw
LgotICovCi0jaWZuZGVmIFlZX1VTRVJfQUNUSU9OCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OCi0j
ZW5kaWYKLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KLSNp
Zm5kZWYgWVlfQlJFQUsKLSNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7Ci0jZW5kaWYKLQotI2RlZmlu
ZSBZWV9SVUxFX1NFVFVQIFwKLQlZWV9VU0VSX0FDVElPTgotCi0vKiogVGhlIG1haW4gc2Nhbm5l
ciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KLSAqLwotWVlfREVDTAotewotCXJl
Z2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLQlyZWdpc3RlciBjaGFyICp5
eV9jcCwgKnl5X2JwOwotCXJlZ2lzdGVyIGludCB5eV9hY3Q7Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogTGluZSBjb21t
ZW50ICovCi0KLSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci0KLSAgICB5eWxsb2MgPSB5eWxs
b2NfcGFyYW07Ci0KLQlpZiAoICF5eWctPnl5X2luaXQgKQotCQl7Ci0JCXl5Zy0+eXlfaW5pdCA9
IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLQkJWVlfVVNFUl9JTklUOwotI2VuZGlmCi0KLQkJ
aWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0
YXJ0IHN0YXRlICovCi0KLQkJaWYgKCAhIHl5aW4gKQotCQkJeXlpbiA9IHN0ZGluOwotCi0JCWlm
ICggISB5eW91dCApCi0JCQl5eW91dCA9IHN0ZG91dDsKLQotCQlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKSB7Ci0JCQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0JCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsKLQkJfQotCi0JCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotCQl9Ci0KLQl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMg
cmVhY2hlZCAqLwotCQl7Ci0JCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCi0JCS8qIFN1cHBv
cnQgb2YgeXl0ZXh0LiAqLwotCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotCQkvKiB5
eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YK
LQkJICogdGhlIGN1cnJlbnQgcnVuLgotCQkgKi8KLQkJeXlfYnAgPSB5eV9jcDsKLQotCQl5eV9j
dXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKLXl5X21hdGNoOgotCQlkbwotCQkJewotCQkJ
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07Ci0JCQlp
ZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCQkJewotCQkJCXl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotCQkJCXl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotCQkJCX0KLQkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLQkJCQl7Ci0J
CQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQotCQkJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKLQkJCQl9Ci0JCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJCSsreXlf
Y3A7Ci0JCQl9Ci0JCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOwotCQl5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0KLXl5X2ZpbmRfYWN0aW9uOgotCQl5eV9hY3QgPSB5
eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07Ci0KLQkJWVlfRE9fQkVGT1JFX0FDVElPTjsKLQot
ZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlv
bnMuICovCi0KLQkJc3dpdGNoICggeXlfYWN0ICkKLQl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24g
c3dpdGNoICovCi0JCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLwotCQkJLyogdW5kbyB0aGUg
ZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCi0JCQkqeXlfY3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKLQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0JCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOwotCi1jYXNlIDE6Ci1ZWV9SVUxFX1NFVFVQCi0KLQlZWV9CUkVBSwotLyog
QmxvY2sgY29tbWVudCAqLwotLyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCBy
ZXR1cm5lZC4gKi8KLS8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNl
LiAqLyAKLWNhc2UgMjoKLVlZX1JVTEVfU0VUVVAKLXsgQkVHSU4oQ09NTUVOVCk7IH0KLQlZWV9C
UkVBSwotY2FzZSAzOgotWVlfUlVMRV9TRVRVUAotCi0JWVlfQlJFQUsKLWNhc2UgNDoKLVlZX1JV
TEVfU0VUVVAKLQotCVlZX0JSRUFLCi1jYXNlIDU6Ci0vKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAq
LwotWVlfUlVMRV9TRVRVUAoteyArK3l5bGluZW5vOyB9Ci0JWVlfQlJFQUsKLWNhc2UgNjoKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOwotICAgIEJF
R0lOKElOSVRJQUwpOwotfQotCVlZX0JSRUFLCi1jYXNlIDc6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBk
aXJlY3RpdmVzLgotICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Ci0gICAgcmV0dXJu
IHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBf
T1RIRVI7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgODoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJ
RklFUjsKLX0KLQlZWV9CUkVBSwotY2FzZSA5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9J
TlQ7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZM
T0FUOwotfQotCVlZX0JSRUFLCi0vKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lU
fSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLwotLyogUnVsZSB0byBjYXRjaCBhbGwg
aW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLwotY2FzZSAxMToKLVlZX1JVTEVfU0VUVVAK
LXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpU
b2tlbjo6UFBfTlVNQkVSOwotfQotCVlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAot
ewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9JTkM7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTM6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0RFQzsKLX0KLQlZWV9CUkVBSwotY2FzZSAxNDoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
TEVGVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxNToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklH
SFQ7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOwot
fQotCVlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKLX0KLQlZ
WV9CUkVBSwotY2FzZSAxODoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Ci19Ci0JWVlfQlJF
QUsKLWNhc2UgMTk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOwotfQotCVlZX0JSRUFLCi1j
YXNlIDIwOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Ci19Ci0JWVlfQlJFQUsKLWNhc2Ug
MjE6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyMjoK
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjM6Ci1ZWV9S
VUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjQ6Ci1Z
WV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjU6
Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwot
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNhc2Ug
MjY6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNh
c2UgMjc6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Ci19Ci0JWVlfQlJFQUsK
LWNhc2UgMjg6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOwotfQotCVlZX0JS
RUFLCi1jYXNlIDI5OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Ci19Ci0J
WVlfQlJFQUsKLWNhc2UgMzA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Ci19
Ci0JWVlfQlJFQUsKLWNhc2UgMzE6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047
Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMzI6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lH
TjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PmFzc2lnbigxLCB5eXRleHRbMF0pOwotICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0JWVlfQlJF
QUsKLWNhc2UgMzQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRy
dWU7IH0KLQlZWV9CUkVBSwotY2FzZSAzNToKLS8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLwot
WVlfUlVMRV9TRVRVUAotewotICAgICsreXlsaW5lbm87Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwg
J1xuJyk7Ci0gICAgcmV0dXJuICdcbic7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMzY6Ci1ZWV9SVUxF
X1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4g
cHA6OlRva2VuOjpQUF9PVEhFUjsKLX0KLQlZWV9CUkVBSwotY2FzZSBZWV9TVEFURV9FT0YoSU5J
VElBTCk6Ci1jYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKLXsKLSAgICAvLyBZWV9VU0VSX0FD
VElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgotICAgIC8vIFNldCB0aGUgbG9j
YXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KLSAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5
ZXh0cmEtPmlucHV0OwotICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRy
YS0+c2NhbkxvYzsKLSAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50
KCkgLSAxKTsKLSAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKLSAgICB7Ci0g
ICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmlu
Z3MgYXQgdGhlCi0gICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCi0gICAgICAgIHNjYW5Mb2Mt
PnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKLSAgICAgICAgeXlmaWxl
bm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKLSAgICB9Ci0gICAgeXlsbG9jLT5maWxlID0g
eXlmaWxlbm87Ci0gICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87Ci0gICAgeXlsdmFsLT5jbGVh
cigpOwotCi0gICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCi0gICAgewotICAgICAgICB5eWV4
dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9u
KHl5ZmlsZW5vLCB5eWxpbmVubyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiIpOwotICAgIH0KLSAgICB5eXRlcm1pbmF0ZSgpOwotfQotCVlZX0JSRUFLCi1jYXNlIDM3
OgotWVlfUlVMRV9TRVRVUAotRUNITzsKLQlZWV9CUkVBSwotCi0JY2FzZSBZWV9FTkRfT0ZfQlVG
RkVSOgotCQl7Ci0JCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUg
RU9CIGNoYXIuICovCi0JCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5
X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLQkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZ
WV9ET19CRUZPUkVfQUNUSU9OLiAqLwotCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJ
WVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0JCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotCQkJewotCQkJLyogV2Un
cmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0JCQkgKiBwb3Nz
aWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotCQkJICoganVzdCBwb2lu
dGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLQkJCSAqIHBwbGV4KCkuICBJZiBz
bywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9D
VVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0JCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQg
cGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLQkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAo
b3RoZXIgdGhhbiBwb3NzaWJseSBhCi0JCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9y
IHRoZSBuZXcgaW5wdXQgc291cmNlLgotCQkJICovCi0JCQl5eWctPnl5X25fY2hhcnMgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLQkJCX0KLQotCQkvKiBOb3Rl
IHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0J
CSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxs
Ci0JCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0
ZXIKLQkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhl
Ci0JCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0
Ci0JCSAqIGluIGlucHV0KCkuCi0JCSAqLwotCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0JCQl7
IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLQkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9z
dGF0ZTsKLQotCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50
X29mX21hdGNoZWRfdGV4dDsKLQotCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91
c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLQkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVk
IHRvIG1ha2UgdGhlIE5VTAotCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLQkJ
CSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotCQkJICogZm9y
IHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0JCQkgKiB3aXRoIHRoZSBw
b3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLQkJCSAqIHdhbnQgdG8gYnVpbGQg
amFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotCQkJICogd2lsbCBydW4gbW9yZSBzbG93
bHkpLgotCQkJICovCi0KLQkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9j
dXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsKLQotCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKLQkJCQl7Ci0JCQkJLyog
Q29uc3VtZSB0aGUgTlVMLiAqLwotCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0JCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0JCQkJZ290byB5eV9tYXRjaDsKLQkJ
CQl9Ci0KLQkJCWVsc2UKLQkJCQl7Ci0JCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7Ci0JCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7Ci0JCQkJZ290byB5eV9maW5kX2FjdGlvbjsKLQkJCQl9Ci0JCQl9Ci0KLQkJZWxzZSBzd2l0
Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLQkJCXsKLQkJCWNhc2UgRU9C
X0FDVF9FTkRfT0ZfRklMRToKLQkJCQl7Ci0JCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9v
bl9lb2YgPSAwOwotCi0JCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQotCQkJCQl7Ci0JCQkJ
CS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotCQkJCQkgKiB5eV9nZXRfbmV4
dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0
IHVwCi0JCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0JCQkJCSAqIGhv
c2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVy
IGFmdGVyIHdlIHJldHVybiB0aGUKLQkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAt
IGFub3RoZXIKLQkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLQkJCQkJICovCi0J
CQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0J
CQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0JCQkJCWdvdG8gZG9fYWN0aW9u
OwotCQkJCQl9Ci0KLQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mICkKLQkJCQkJCVlZX05FV19GSUxFOwotCQkJCQl9Ci0JCQkJYnJl
YWs7Ci0JCQkJfQotCi0JCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLQkJCQl5eWctPnl5
X2NfYnVmX3AgPQotCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90
ZXh0OwotCi0JCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7Ci0KLQkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQkJCQl5eV9icCA9IHl5
Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCQkJCWdvdG8geXlfbWF0Y2g7Ci0KLQkJCWNh
c2UgRU9CX0FDVF9MQVNUX01BVENIOgotCQkJCXl5Zy0+eXlfY19idWZfcCA9Ci0JCQkJJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLQkJCQl5
eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQot
CQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRy
ICsgWVlfTU9SRV9BREo7Ci0JCQkJZ290byB5eV9maW5kX2FjdGlvbjsKLQkJCX0KLQkJYnJlYWs7
Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCVlZX0ZBVEFMX0VSUk9SKAotCQkJImZhdGFsIGZsZXggc2Nh
bm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotCX0gLyogZW5kIG9mIGFj
dGlvbiBzd2l0Y2ggKi8KLQkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCi19IC8q
IGVuZCBvZiBwcGxleCAqLwotCi0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBp
biBhIG5ldyBidWZmZXIKLSAqCi0gKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0
aW9uOgotICoJRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAt
IGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgotICoJRU9CX0FDVF9FTkRf
T0ZfRklMRSAtIGVuZCBvZiBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVy
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLQlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5
eWctPnl5dGV4dF9wdHI7Ci0JcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOwotCWludCBy
ZXRfdmFsOwotCi0JaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQotCQlZWV9GQVRBTF9FUlJPUigK
LQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNz
ZWQiICk7Ci0KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIg
PT0gMCApCi0JCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBh
biBFT0YuICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlf
TU9SRV9BREogPT0gMSApCi0JCQl7Ci0JCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3Rl
ciwgdGhlIEVPQiwgc28KLQkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCi0JCQkgKi8K
LQkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotCQkJfQotCi0JCWVsc2UKLQkJCXsKLQkJ
CS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0Ci0JCQkgKiBw
cm9jZXNzIGl0LgotCQkJICovCi0JCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOwotCQkJfQot
CQl9Ci0KLQkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0KLQkvKiBGaXJzdCBtb3ZlIGxh
c3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotCW51bWJlcl90b19tb3ZlID0gKGludCkg
KHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwotCi0JZm9yICggaSA9IDA7
IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLQkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7Ci0K
LQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9C
VUZGRVJfRU9GX1BFTkRJTkcgKQotCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3Vh
cmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgotCQkgKi8K
LQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJz
ID0gMDsKLQotCWVsc2UKLQkJewotCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KLQkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7Ci0K
LQkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLQkJCXsgLyogTm90IGVub3VnaCByb29tIGlu
IHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0JCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZv
ciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVO
VF9CVUZGRVI7Ci0KLQkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0JCQkJKGludCkgKHl5Zy0+
eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7Ci0KLQkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApCi0JCQkJewotCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsK
LQotCQkJCWlmICggbmV3X3NpemUgPD0gMCApCi0JCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5
X2J1Zl9zaXplIC8gODsKLQkJCQllbHNlCi0JCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7Ci0KLQkJ
CQliLT55eV9jaF9idWYgPSAoY2hhciAqKQotCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIg
RU9CIGNoYXJzLiAqLwotCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5
X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0JCQkJfQotCQkJZWxzZQotCQkJCS8qIENhbid0
IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KLQkJCQliLT55eV9jaF9idWYgPSAwOwotCi0J
CQlpZiAoICEgYi0+eXlfY2hfYnVmICkKLQkJCQlZWV9GQVRBTF9FUlJPUigKLQkJCQkiZmF0YWwg
ZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKLQotCQkJeXlnLT55eV9j
X2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLQkJCW51bV90b19y
ZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0JCQkJCQludW1i
ZXJfdG9fbW92ZSAtIDE7Ci0KLQkJCX0KLQotCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9C
VUZfU0laRSApCi0JCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLQkJLyogUmVh
ZCBpbiBtb3JlIGRhdGEuICovCi0JCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0JCQl5eWctPnl5X25fY2hhcnMsIG51bV90
b19yZWFkICk7Ci0KLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXln
LT55eV9uX2NoYXJzOwotCQl9Ci0KLQlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLQkJewot
CQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLQkJCXsKLQkJCXJldF92YWwg
PSBFT0JfQUNUX0VORF9PRl9GSUxFOwotCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwot
CQkJfQotCi0JCWVsc2UKLQkJCXsKLQkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0J
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotCQkJCVlZX0JV
RkZFUl9FT0ZfUEVORElORzsKLQkJCX0KLQkJfQotCi0JZWxzZQotCQlyZXRfdmFsID0gRU9CX0FD
VF9DT05USU5VRV9TQ0FOOwotCi0JaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBu
dW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7
Ci0JCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5
IG5lZWQuICovCi0JCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJl
cl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotCQlpZiAo
ICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotCQkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7Ci0J
fQotCi0JeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVS
X0NIQVI7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLQl5eWctPnl5dGV4dF9wdHIgPSAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07Ci0KLQlyZXR1cm4gcmV0X3Zh
bDsKLX0KLQotLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJl
Zm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KLQotICAgIHN0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lz
dGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLQlyZWdpc3RlciBjaGFyICp5eV9j
cDsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0KLQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKLQotCWZvciAoIHl5X2Nw
ID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9w
OyArK3l5X2NwICkKLQkJewotCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlf
ZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKLQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQotCQkJewotCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1
cnJlbnRfc3RhdGU7Ci0JCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLQkJ
CX0KLQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9
IHl5X2N1cnJlbnRfc3RhdGUgKQotCQkJewotCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5
X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCAp
Ci0JCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCQl9Ci0JCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOwotCQl9Ci0KLQlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyog
eXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNo
YXJhY3RlcgotICoKLSAqIHN5bm9wc2lzCi0gKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFu
cyggY3VycmVudF9zdGF0ZSApOwotICovCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5
X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLQlyZWdpc3RlciBpbnQgeXlfaXNfamFtOwotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJl
IHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwotCXJlZ2lzdGVyIGNoYXIgKnl5X2Nw
ID0geXlnLT55eV9jX2J1Zl9wOwotCi0JcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLQlpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0JCXsKLQkJeXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0JCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvcyA9IHl5X2NwOwotCQl9Ci0Jd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotCQl7Ci0JCXl5X2N1cnJlbnRfc3Rh
dGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCWlmICggeXlfY3VycmVudF9z
dGF0ZSA+PSA4NCApCi0JCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJ
fQotCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09
IDgzKTsKLQotCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKLX0KLQot
I2lmbmRlZiBZWV9OT19JTlBVVAotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICAgc3RhdGljIGludCB5
eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgaW5wdXQg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCi0jZW5kaWYKLQotewotCWludCBjOwotICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCSp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQotCWlmICggKnl5Zy0+eXlfY19idWZfcCA9
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotCQl7Ci0JCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50
cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotCQkgKiBJZiB0aGlzIG9jY3Vy
cyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCi0JCSAqIHZhbGlkIE5V
TDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0JCSAqLwot
CQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLQkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8K
LQkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwotCi0JCWVsc2UKLQkJCXsgLyogbmVlZCBtb3Jl
IGlucHV0ICovCi0JCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55
eXRleHRfcHRyOwotCQkJKyt5eWctPnl5X2NfYnVmX3A7Ci0KLQkJCXN3aXRjaCAoIHl5X2dldF9u
ZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotCQkJCXsKLQkJCQljYXNlIEVPQl9BQ1RfTEFTVF9N
QVRDSDoKLQkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQotCQkJCQkgKiBz
ZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQotCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhh
dCB3ZSBuZWVkIHRvCi0JCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0JCQkJ
CSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0JCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0
Y2hpbmcgdG8gY29uc2lkZXIuCi0JCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9N
QVRDSAotCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotCQkJCQkgKi8KLQotCQkJCQkv
KiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwotCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVy
KTsKLQotCQkJCQkvKkZBTExUSFJPVUdIKi8KLQotCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklM
RToKLQkJCQkJewotCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0JCQkJCQlyZXR1cm4g
MDsKLQotCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJ
CQkJWVlfTkVXX0ZJTEU7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLQkJCQkJcmV0dXJuIHl5aW5wdXQo
eXlzY2FubmVyKTsKLSNlbHNlCi0JCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwotI2VuZGlm
Ci0JCQkJCX0KLQotCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotCQkJCQl5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0K
LQkJCX0KLQkJfQotCi0JYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8q
IGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwotCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBw
cmVzZXJ2ZSB5eXRleHQgKi8KLQl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZf
cDsKLQotCXJldHVybiBjOwotfQotI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLwotCi0v
KiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KLSAqIEBw
YXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0
IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCi0gKi8KLSAgICB2b2lkIHBwcmVz
dGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCWlm
ICggISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sg
KHl5c2Nhbm5lcik7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0gICAgICAgICAgICBw
cF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0JfQotCi0JcHBf
aW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKLQlw
cF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFN3aXRjaCB0byBhIGRp
ZmZlcmVudCBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0
IGJ1ZmZlci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi0g
ICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVy
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxl
IHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQotCSAqIHdpdGgKLQkgKgkJcHBw
b3BfYnVmZmVyX3N0YXRlKCk7Ci0JICoJCXBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7
Ci0gICAgICovCi0JcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotCWlmICggWVlf
Q1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0JCXJldHVybjsKLQotCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVIgKQotCQl7Ci0JCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1
ZmZlci4gKi8KLQkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0JCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLQkJ
fQotCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQlwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hl
dGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0JICogRU9GIChwcHdyYXAoKSkgcHJvY2Vz
c2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0JICogaXMgbG9va2VkIGF0IGlzIGFm
dGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0JICogdG8gZ28gYWhlYWQgYW5k
IGFsd2F5cyBzZXQgaXQuCi0JICovCi0JeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
PSAxOwotfQotCi1zdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7Ci0JeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzOwotCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLQl5eWluID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlf
Y19idWZfcDsKLX0KLQotLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZl
ciBzdGF0ZS4KLSAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNp
emUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNl
IEBjIFlZX0JVRl9TSVpFLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgotICovCi0gICAgWVlfQlVG
RkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwotICAgIAotCWIgPSAoWVlf
QlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5
eXNjYW5uZXIgKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKLQotCWItPnl5X2J1Zl9zaXplID0g
c2l6ZTsKLQotCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFu
IHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKLQkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1i
dWZmZXIgY2hhcmFjdGVycy4KLQkgKi8KLQliLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFsbG9j
KGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0JaWYgKCAhIGItPnl5X2NoX2J1ZiAp
Ci0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9i
dWZmZXIoKSIgKTsKLQotCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0JcHBfaW5pdF9idWZm
ZXIoYixmaWxlICx5eXNjYW5uZXIpOwotCi0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBEZXN0cm95IHRo
ZSBidWZmZXIuCi0gKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1
ZmZlcigpCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAg
IHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLQotCWlmICggISBiICkKLQkJcmV0dXJuOwotCi0JaWYgKCBiID09IFlZX0NV
UlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLwotCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwotCi0JaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKLQkJcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlz
Y2FubmVyICk7Ci0KLQlwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Ci19Ci0KLS8qIElu
aXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCi0gKiBUaGlzIGZ1bmN0aW9uIGlz
IHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAotICog
c3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCi0gKi8KLSAgICBzdGF0aWMg
dm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCi0KLXsKLQlpbnQgb2Vycm5vID0gZXJybm87Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JcHBfZmx1
c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7Ci0KLQliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKLQli
LT55eV9maWxsX2J1ZmZlciA9IDE7Ci0KLSAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZl
ciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwotICAgICAqIGNhbGxlZCBmcm9t
IHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgotICAgICAqIEluIHRo
YXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KLSAg
ICAgKi8KLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIGItPnl5X2Jz
X2xpbmVubyA9IDE7Ci0gICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7Ci0gICAgfQotCi0gICAg
ICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICAKLQllcnJubyA9IG9lcnJubzsKLX0K
LQotLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4s
IFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgotICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0
byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQlpZiAoICEg
YiApCi0JCXJldHVybjsKLQotCWItPnl5X25fY2hhcnMgPSAwOwotCi0JLyogV2UgYWx3YXlzIG5l
ZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLQkgKiBh
IHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNl
cwotCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCi0JICovCi0JYi0+eXlfY2hfYnVmWzBdID0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSOwotCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKLQotCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0JYi0+eXlfYXRf
Ym9sID0gMTsKLQliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotCWlmICgg
YiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOwotfQotCi0vKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBu
ZXcgc3RhdGUgYmVjb21lcwotICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdp
bGwgYWxsb2NhdGUgdGhlIHN0YWNrCi0gKiAgaWYgbmVjZXNzYXJ5LgotICogIEBwYXJhbSBuZXdf
YnVmZmVyIFRoZSBuZXcgc3RhdGUuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCi0gKi8KLXZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5l
d19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCWlmIChuZXdfYnVmZmVyID09IE5V
TEwpCi0JCXJldHVybjsKLQotCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwotCi0J
LyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotCQl7Ci0JCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBm
b3Igb2xkIGJ1ZmZlci4gKi8KLQkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVm
X3A7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKLQkJfQotCi0JLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVw
bGFjZSB0b3AuICovCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQotCQl5eWctPnl5X2J1ZmZlcl9z
dGFja190b3ArKzsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCi0J
LyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLQlwcF9sb2FkX2J1ZmZlcl9z
dGF0ZSh5eXNjYW5uZXIgKTsKLQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7
Ci19Ci0KLS8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBw
cmVzZW50LgotICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KLSAqICBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHBvcF9idWZm
ZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKCFZWV9DVVJSRU5UX0JVRkZF
UikKLQkJcmV0dXJuOwotCi0JcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlz
Y2FubmVyKTsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotCWlmICh5eWctPnl5
X2J1ZmZlcl9zdGFja190b3AgPiAwKQotCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKLQot
CWlmIChZWV9DVVJSRU5UX0JVRkZFUikgewotCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKLQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotCX0KLX0KLQot
LyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLSAqICBHdWFyYW50
ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KLSAqLwotc3RhdGljIHZvaWQgcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JeXlfc2l6ZV90IG51bV90
b19hbGxvYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0KLQlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7Ci0KLQkJLyogRmlyc3Qg
YWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlm
IHRoaXMKLQkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0
ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLQkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQg
Y2FsbC4KLSAgICAgICAgICovCi0JCW51bV90b19hbGxvYyA9IDE7Ci0JCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCi0JCQkJCQkJCShudW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlz
Y2FubmVyKTsKLQkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwotCQkJCQkJCQkgIAotCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19h
bGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotCQkJCQotCQl5eWctPnl5
X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X3RvcCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
ID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7Ci0KLQkJLyogSW5jcmVhc2UgdGhl
IGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCi0JCWludCBncm93X3Np
emUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87Ci0KLQkJbnVtX3RvX2FsbG9jID0geXln
LT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwotCQl5eWctPnl5X2J1ZmZlcl9zdGFj
ayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFsbG9jCi0JCQkJCQkJCSh5eWctPnl5
X2J1ZmZlcl9zdGFjaywKLQkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKQotCQkJCQkJCQksIHl5c2Nhbm5lcik7Ci0JCWlmICggISB5eWctPnl5X2J1
ZmZlcl9zdGFjayApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQotCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBz
bG90cy4qLwotCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikp
OwotCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0JfQotfQotCi0v
KiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1
c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgotICogQHBhcmFtIGJhc2UgdGhlIGNoYXJh
Y3RlciBidWZmZXIKLSAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFy
YWN0ZXIgYnVmZmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
IEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKLSAqLwot
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAg
c2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAK
LQlpZiAoIHNpemUgPCAyIHx8Ci0JICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSIHx8Ci0JICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkK
LQkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLwotCQlyZXR1
cm4gMDsKLQotCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7Ci0KLQli
LT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3Mg
Ki8KLQliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKLQliLT55eV9pc19vdXJf
YnVmZmVyID0gMDsKLQliLT55eV9pbnB1dF9maWxlID0gMDsKLQliLT55eV9uX2NoYXJzID0gYi0+
eXlfYnVmX3NpemU7Ci0JYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotCWItPnl5X2F0X2JvbCA9
IDE7Ci0JYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTkVXOwotCi0JcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKLQotCXJl
dHVybiBiOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEg
c3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUg
Y29weSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcg
dG8gc2NhbgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KLSAqIEBub3RlIElm
IHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVu
IHVzZQotICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQuCi0gKi8KLVlZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0gICAgCi0JcmV0dXJuIHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3Ry
KSAseXlzY2FubmVyKTsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8g
c2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBz
Y2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRl
IGJ1ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhl
IGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KLSAqLwotWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0
IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLQlZWV9CVUZGRVJfU1RBVEUgYjsKLQljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4s
IGk7Ci0gICAgCi0JLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFj
ZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCi0JbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0JYnVmID0g
KGNoYXIgKikgcHBhbGxvYyhuICx5eXNjYW5uZXIgKTsKLQlpZiAoICEgYnVmICkKLQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwot
Ci0JZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0JCWJ1ZltpXSA9IHl5Ynl0
ZXNbaV07Ci0KLQlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLQliID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5l
cik7Ci0JaWYgKCAhIGIgKQotCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4gcHBfc2Nh
bl9ieXRlcygpIiApOwotCi0JLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwg
YW5kIHdlIHNob3VsZCB0aHJvdyBpdAotCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgotCSAqLwot
CWItPnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0JcmV0dXJuIGI7Ci19Ci0KLSNpZm5kZWYgWVlf
RVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotCWV4
aXQoIFlZX0VYSVRfRkFJTFVSRSApOwotfQotCi0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3
b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KLQotI3VuZGVmIHl5bGVzcwotI2RlZmluZSB5eWxl
c3MobikgXAotCWRvIFwKLQkJeyBcCi0JCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dC4gKi8gXAotICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAotICAgICAg
ICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0JCXl5dGV4dFt5eWxlbmddID0g
eXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNz
X21hY3JvX2FyZzsgXAotCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwK
LQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLQkJeXlsZW5nID0geXlsZXNzX21hY3JvX2Fy
ZzsgXAotCQl9IFwKLQl3aGlsZSAoIDAgKQotCi0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3Nl
dCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwotCi0vKiogR2V0IHRoZSB1c2VyLWRl
ZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCi0gKi8KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWV4dHJhOwotfQotCi0vKiogR2V0IHRoZSBjdXJy
ZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
Ci0gKi8KLWludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAot
ICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIHJldHVybiB5eWxpbmVubzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBjb2x1
bW4gbnVtYmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8K
LWludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIAotICAgICAg
ICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIAot
ICAgIHJldHVybiB5eWNvbHVtbjsKLX0KLQotLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgotICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X2lu
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlpbjsKLX0KLQotLyoqIEdl
dCB0aGUgb3V0cHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICovCi1GSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHJldHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRv
a2VuLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXl5X3Np
emVfdCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXls
ZW5nOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgotICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLQotY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5dGV4dDsKLX0KLQotLyoqIFNldCB0aGUgdXNl
ci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVy
LgotICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBzY2FubmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Ci19Ci0KLS8q
KiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2xp
bmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAg
ICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8K
LSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9l
cnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsg
Ci0gICAgCi0gICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKLX0KLQotLyoqIFNldCB0aGUgY3Vy
cmVudCBjb2x1bW4uCi0gKiBAcGFyYW0gbGluZV9udW1iZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5f
bm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5
IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NV
UlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4g
Y2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5Y29sdW1u
ID0gY29sdW1uX25vOwotfQotCi0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBu
b3QgZGlzY2FyZCB0aGUgY3VycmVudAotICogaW5wdXQgYnVmZmVyLgotICogQHBhcmFtIGluX3N0
ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgotICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgcHBzZXRfaW4gKEZJ
TEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWluID0gaW5fc3Ry
IDsKLX0KLQotdm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgeXlvdXQgPSBvdXRfc3RyIDsKLX0KLQotaW50IHBwZ2V0X2RlYnVnICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKLX0KLQot
dm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOwotfQotCi0vKiBBY2Nlc3NvciBtZXRob2RzIGZv
ciB5eWx2YWwgYW5kIHl5bGxvYyAqLwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bHZhbDsKLX0KLQotdm9pZCBwcHNldF9sdmFs
IChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAg
eXlsdmFsID0geXlsdmFsX3BhcmFtOwotfQotCi1ZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsbG9jOwotfQotICAgIAotdm9pZCBwcHNl
dF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotfQotICAgIAotLyogVXNlci12aXNpYmxlIEFQ
SSAqLwotCi0vKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBz
Y2FubmVyIGl0c2VsZiwgc28gaXQgaXMKLSAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0
aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KLSAqIFRo
YXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9m
IHVzaW5nIG91ciBtYWNyb3MuCi0gKi8KLQotaW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95
eV9nbG9iYWxzKQotCi17Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAg
ICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgKnB0cl95
eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3Qg
KSwgTlVMTCApOwotCi0gICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAg
ZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qIEJ5IHNl
dHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBh
dCAweDAwIGZvciByZWxlYXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAs
c2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOwotCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAo
ICpwdHJfeXlfZ2xvYmFscyApOwotfQotCi0vKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2Ft
ZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQotICogY29udmVu
dGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93
ZXZlciwgdGhhdAotICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdp
bGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCi0gKiBpcyB0aGUgcmVhc29uLCB0b28s
IHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbiku
Ci0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJl
IGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCi0gKiB0aGUgeXlleHRyYSBmaWVsZC4KLSAqLwotCi1p
bnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5f
dCogcHRyX3l5X2dsb2JhbHMgKQotCi17Ci0gICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0
czsKLQotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwot
Ci0gICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJubyA9IEVJTlZB
TDsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCQotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5
eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1
dHMgKTsKLQkKLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAgICAgICBlcnJu
byA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIAotICAgIC8qIEJ5IHNl
dHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KLSAgICB5eV9pbml0X2dsb2JhbHMuIExl
YXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMs
MHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0gICAgCi0gICAgcHBzZXRfZXh0cmEgKHl5
X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKLSAgICAKLSAgICByZXR1cm4geXlfaW5p
dF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLXN0YXRpYyBpbnQgeXlfaW5pdF9n
bG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIC8qIEluaXRpYWxpemF0aW9uIGlz
IHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAqIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0
ZSBoZXJlLgotICAgICAqLwotCi0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOwotICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4
ID0gMDsKLSAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOwotICAgIHl5Zy0+eXlfaW5p
dCA9IDA7Ci0gICAgeXlnLT55eV9zdGFydCA9IDA7Ci0KLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNr
X3B0ciA9IDA7Ci0gICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7Ci0gICAgeXlnLT55
eV9zdGFydF9zdGFjayA9ICBOVUxMOwotCi0vKiBEZWZpbmVkIGluIG1haW4uYyAqLwotI2lmZGVm
IFlZX1NURElOSVQKLSAgICB5eWluID0gc3RkaW47Ci0gICAgeXlvdXQgPSBzdGRvdXQ7Ci0jZWxz
ZQotICAgIHl5aW4gPSAoRklMRSAqKSAwOwotICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKLSNlbmRp
ZgotCi0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2lu
Y2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBwbGV4X2luaXQoKQotICAgICAqLwotICAgIHJl
dHVybiAwOwotfQotCi0vKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQg
bm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5n
IGVhY2ggZWxlbWVudC4gKi8KLQl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0JCXBwX2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOwotCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBOVUxMOwotCQlwcHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLQl9
Ci0KLQkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0JcHBmcmVlKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrICx5eXNjYW5uZXIpOwotCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKLQot
ICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KLSAgICAgICAgcHBm
cmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X3N0
YXJ0X3N0YWNrID0gTlVMTDsKLQotICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGlt
cG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAg
ICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAg
eXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOwotCi0gICAgLyogRGVzdHJveSB0aGUgbWFpbiBz
dHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KLSAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNj
YW5uZXIgKTsKLSAgICB5eXNjYW5uZXIgPSBOVUxMOwotICAgIHJldHVybiAwOwotfQotCi0vKgot
ICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KLSAqLwotCi0jaWZuZGVmIHl5dGV4dF9wdHIK
LXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMy
LCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZWdpc3RlciBpbnQgaTsKLQlmb3Ig
KCBpID0gMDsgaSA8IG47ICsraSApCi0JCXMxW2ldID0gczJbaV07Ci19Ci0jZW5kaWYKLQotI2lm
ZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNo
YXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCBuOwotCWZvciAo
IG4gPSAwOyBzW25dOyArK24gKQotCQk7Ci0KLQlyZXR1cm4gbjsKLX0KLSNlbmRpZgotCi12b2lk
ICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmV0
dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwotfQotCi12b2lkICpwcHJlYWxsb2MgICh2b2lk
ICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JLyogVGhl
IGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotCSAq
IGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhv
c2UKLQkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0
aGUgbGF0dGVyCi0JICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNz
IGFzc2lnbm1lbnQgZnJvbQotCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFs
IHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLQkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdu
bWVudC4KLQkgKi8KLQlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXpl
ICk7Ci19Ci0KLXZvaWQgcHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
ewotCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICop
IGNhc3QgKi8KLX0KLQotI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKLQotbmFtZXNw
YWNlIHBwIHsKLQotVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6IG1IYW5kbGUoMCkKLXsKLSAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNz
OwotfQotCi1Ub2tlbml6ZXI6On5Ub2tlbml6ZXIoKQotewotICAgIGRlc3Ryb3lTY2FubmVyKCk7
Ci19Ci0KLWJvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qg
c3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKLXsKLSAgICBpZiAoY291bnQgPCAwKSByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKChjb3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBm
YWxzZTsKLQotICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3Ro
KTsKLSAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OnNldEZp
bGVOdW1iZXIoaW50IGZpbGUpCi17Ci0gICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmls
ZSBudW1iZXIuCi0gICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5vLgotICAgIHBwc2V0X2NvbHVtbihm
aWxlLG1IYW5kbGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGlu
ZSkKLXsKLSAgICBwcHNldF9saW5lbm8obGluZSxtSGFuZGxlKTsKLX0KLQotdm9pZCBUb2tlbml6
ZXI6OmxleChUb2tlbiogdG9rZW4pCi17Ci0gICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4t
PnZhbHVlLCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7Ci0gICAgdG9rZW4tPmZsYWdzID0gMDsK
LQotICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7Ci0gICAg
bUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKLQotICAgIHRva2VuLT5z
ZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKLSAgICBtQ29udGV4dC5s
ZWFkaW5nU3BhY2UgPSBmYWxzZTsKLX0KLQotYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkK
LXsKLSAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9leHRyYSgmbUNvbnRl
eHQsJm1IYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcHJlc3RhcnQoMCxt
SGFuZGxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lT
Y2FubmVyKCkKLXsKLSAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOwotICAgIG1IYW5kbGUgPSBOVUxMOwotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY0YTI4OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVm
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOSVpFUl9IXwotCi0jaW5jbHVkZSAiSW5wdXQuaCIKLSNpbmNsdWRlICJM
ZXhlci5oIgotI2luY2x1ZGUgInBwX3V0aWxzLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFz
cyBEaWFnbm9zdGljczsKLQotY2xhc3MgVG9rZW5pemVyIDogcHVibGljIExleGVyCi17Ci0gIHB1
YmxpYzoKLSAgICBzdHJ1Y3QgQ29udGV4dAotICAgIHsKLSAgICAgICAgRGlhZ25vc3RpY3MqIGRp
YWdub3N0aWNzOwotCi0gICAgICAgIElucHV0IGlucHV0OwotICAgICAgICAvLyBUaGUgbG9jYXRp
b24gd2hlcmUgeXl0ZXh0IHBvaW50cyB0by4gVG9rZW4gbG9jYXRpb24gc2hvdWxkIHRyYWNrCi0g
ICAgICAgIC8vIHNjYW5Mb2MgaW5zdGVhZCBvZiBJbnB1dDo6bVJlYWRMb2MgYmVjYXVzZSB0aGV5
IG1heSBub3QgYmUgdGhlIHNhbWUKLSAgICAgICAgLy8gaWYgdGV4dCBpcyBidWZmZXJlZCB1cCBp
biB0aGUgc2Nhbm5lciBpbnB1dCBidWZmZXIuCi0gICAgICAgIElucHV0OjpMb2NhdGlvbiBzY2Fu
TG9jOwotCi0gICAgICAgIGJvb2wgbGVhZGluZ1NwYWNlOwotICAgICAgICBib29sIGxpbmVTdGFy
dDsKLSAgICB9OwotCi0gICAgVG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7Ci0g
ICAgflRva2VuaXplcigpOwotCi0gICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci0KLSAgICB2b2lkIHNldEZpbGVO
dW1iZXIoaW50IGZpbGUpOwotICAgIHZvaWQgc2V0TGluZU51bWJlcihpbnQgbGluZSk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7Ci0KLSAgcHJpdmF0ZToKLSAgICBQUF9E
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW5pemVyKTsKLSAgICBib29sIGluaXRTY2FubmVy
KCk7Ci0gICAgdm9pZCBkZXN0cm95U2Nhbm5lcigpOwotCi0gICAgdm9pZCogbUhhbmRsZTsgIC8v
IFNjYW5uZXIgaGFuZGxlLgotICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJh
LgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9UT0tFTklaRVJfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxYzczMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIu
bAorKysgL2Rldi9udWxsCkBAIC0xLDMyOSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBw
cmVwcm9jZXNzb3IuCi1CYXNlZCBvbiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXBy
b2Nlc3NvciBHcmFtbWFyOgotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
LzJzY3h5czg5LmFzcHgKLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBU
TyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgotKi8KLQotJXRvcHsKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBO
T1QgRURJVCEKLX0KLQotJXsKLSNpbmNsdWRlICJUb2tlbml6ZXIuaCIKLQotI2luY2x1ZGUgIkRp
YWdub3N0aWNzLmgiCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQotI2lmIGRlZmluZWQoX19HTlVDX18p
Ci0vLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0
aW9uLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4i
Ci0jZW5kaWYKLQotdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwotdHlwZWRlZiBwcDo6U291
cmNlTG9jYXRpb24gWVlMVFlQRTsKLQotLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFi
bGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCi0jZGVmaW5lIHl5ZmlsZW5vIHl5Y29s
dW1uCi0KLSNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlmaWxlbm8gPSAwOyAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKLSAgICAgICAgeXll
eHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5l
IFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBwOjpJbnB1dCogaW5w
dXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
cHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAg
ICAgXAotICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAm
JiAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlu
cHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKLSAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAg
ICBcCi0gICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpbGUgPSB5
eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5
bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVm
LCByZXN1bHQsIG1heFNpemUpIFwKLSAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1
ZiwgbWF4U2l6ZSk7Ci0KLSV9Ci0KLSVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRl
cmFjdGl2ZQotJW9wdGlvbiByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0aW9ucwot
JW9wdGlvbiBwcmVmaXg9InBwIgotJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6VG9rZW5pemVyOjpD
b250ZXh0KiIKLSV4IENPTU1FTlQKLQotTkVXTElORSAgICAgXG58XHJ8XHJcbgotSURFTlRJRklF
UiAgW19hLXpBLVpdW19hLXpBLVowLTldKgotUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwm
fj0hOjssP10KLQotREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05T
VEFOVCAgICAgICAgMFswLTddKgotSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEt
Rl0rCi0KLURJR0lUICAgICAgICAgICAgICAgIFswLTldCi1FWFBPTkVOVF9QQVJUICAgICAgICBb
ZUVdWystXT97RElHSVR9KwotRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lU
fSspfCh7RElHSVR9KyIuIikKLQotJSUKLQotICAgIC8qIExpbmUgY29tbWVudCAqLwotIi8vIlte
XHJcbl0qCi0KLSAgICAvKiBCbG9jayBjb21tZW50ICovCi0gICAgLyogTGluZSBicmVha3MgYXJl
IGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KLSAgICAvKiBUaGUgY29tbWVudCBpcyBy
ZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCi0iLyoiIHsgQkVHSU4oQ09NTUVOVCk7IH0K
LTxDT01NRU5UPlteKlxyXG5dKwotPENPTU1FTlQ+IioiCi08Q09NTUVOVD57TkVXTElORX0geyAr
K3l5bGluZW5vOyB9Ci08Q09NTUVOVD4iKi8iIHsKLSAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2Ug
PSB0cnVlOwotICAgIEJFR0lOKElOSVRJQUwpOwotfQotCi0jIHsKLSAgICAvLyAjIGlzIG9ubHkg
dmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCi0gICAg
eXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4geXlleHRyYS0+bGluZVN0
YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKLX0KLQote0lE
RU5USUZJRVJ9IHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKLX0KLQote0RFQ0lNQUxfQ09OU1RBTlR9fHtPQ1RB
TF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7Ci0gICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKLX0KLQot
KHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5U
X1BBUlR9PykgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1
cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKLX0KLQotICAgIC8qIEFueXRoaW5nIHRoYXQgc3Rh
cnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICovCi0gICAg
LyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLwotKHtE
SUdJVH0rW19hLXpBLVowLTkuXSopfCgiLiJ7RElHSVR9K1tfYS16QS1aMC05Ll0qKSB7Ci0gICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OlBQ
X05VTUJFUjsKLX0KLQotIisrIiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKLX0KLSItLSIgewotICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Ci19
Ci0iPDwiIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfTEVGVDsKLX0KLSI+PiIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKLX0KLSI8PSIgewot
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9MRTsKLX0KLSI+PSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKLX0KLSI9PSIgewotICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9FUTsKLX0KLSIh
PSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9ORTsKLX0KLSImJiIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Ci19Ci0iXl4iIHsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9S
OwotfQotInx8IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX09SOwotfQotIis9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Ci19Ci0i
LT0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKLX0KLSIqPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdOOwotfQot
Ii89IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Ci19Ci0iJT0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FTU0lHTjsKLX0K
LSI8PD0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Ci19Ci0iPj49IiB7Ci0gICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lH
TjsKLX0KLSImPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOwotfQotIl49IiB7Ci0gICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJ
R047Ci19Ci0ifD0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOwotfQotCi17UFVOQ1RVQVRPUn0gewotICAg
IHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Ci0gICAgcmV0dXJuIHl5dGV4dFswXTsKLX0K
LQotWyBcdFx2XGZdKyAgIHsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQotCi17TkVX
TElORX0gewotICAgICsreXlsaW5lbm87Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xuJyk7Ci0g
ICAgcmV0dXJuICdcbic7Ci19Ci0KLS4gewotICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFsw
XSk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7Ci19Ci0KLTwqPjw8RU9GPj4gewot
ICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCi0g
ICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgotICAgIHBwOjpJ
bnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7Ci0gICAgcHA6OklucHV0OjpMb2NhdGlvbiog
c2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOwotICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1h
eCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOwotICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0lu
ZGV4TWF4KQotICAgIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVy
ZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKLSAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4K
LSAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAw
OwotICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOwotICAgIH0KLSAg
ICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKLSAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsK
LSAgICB5eWx2YWwtPmNsZWFyKCk7Ci0KLSAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKLSAg
ICB7Ci0gICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNz
OjpFT0ZfSU5fQ09NTUVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiIik7Ci0gICAgfQotICAgIHl5dGVybWluYXRlKCk7Ci19Ci0K
LSUlCi0KLW5hbWVzcGFjZSBwcCB7Ci0KLVRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCi17Ci0gICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mg
PSBkaWFnbm9zdGljczsKLX0KLQotVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKLXsKLSAgICBkZXN0
cm95U2Nhbm5lcigpOwotfQotCi1ib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi17Ci0gICAgaWYgKGNv
dW50IDwgMCkgcmV0dXJuIGZhbHNlOwotICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5nID09
IDApKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50LCBz
dHJpbmcsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Ci19Ci0KLXZvaWQgVG9r
ZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQotewotICAgIC8vIFdlIHVzZSBjb2x1bW4g
bnVtYmVyIGFzIGZpbGUgbnVtYmVyLgotICAgIC8vIFNlZSBtYWNybyB5eWZpbGVuby4KLSAgICB5
eXNldF9jb2x1bW4oZmlsZSwgbUhhbmRsZSk7Ci19Ci0KLXZvaWQgVG9rZW5pemVyOjpzZXRMaW5l
TnVtYmVyKGludCBsaW5lKQotewotICAgIHl5c2V0X2xpbmVubyhsaW5lLCBtSGFuZGxlKTsKLX0K
LQotdm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCi17Ci0gICAgdG9rZW4tPnR5cGUg
PSB5eWxleCgmdG9rZW4tPnZhbHVlLCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKLSAgICB0
b2tlbi0+ZmxhZ3MgPSAwOwotCi0gICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQu
bGluZVN0YXJ0KTsKLSAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4n
OwotCi0gICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2Up
OwotICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwotfQotCi1ib29sIFRva2VuaXpl
cjo6aW5pdFNjYW5uZXIoKQotewotICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAmJiB5eWxleF9p
bml0X2V4dHJhKCZtQ29udGV4dCwgJm1IYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICB5eXJlc3RhcnQoMCwgbUhhbmRsZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
VG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCi17Ci0gICAgaWYgKG1IYW5kbGUgPT0gTlVMTCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgeXlsZXhfZGVzdHJveShtSGFuZGxlKTsKLSAgICBtSGFu
ZGxlID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRl
X3BhcnNlci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggZTljNzBiMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2gKKysrIC9kZXYvbnVsbApA
QCAtMSwyNiArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIEdlbmVyYXRlcyB2YXJpb3VzIGNv
bXBvbmVudHMgb2YgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCi0KLXJ1bl9mbGV4KCkKLXsKLWlucHV0
X2ZpbGU9JHNjcmlwdF9kaXIvJDEKLW91dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKLWZsZXgg
LS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUK
LX0KLQotcnVuX2Jpc29uKCkKLXsKLWlucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKLW91dHB1dF9z
b3VyY2U9JHNjcmlwdF9kaXIvJDIKLWJpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMg
LS1vdXRwdXQ9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKLX0KLQotc2NyaXB0X2Rpcj0kKGRp
cm5hbWUgJDApCi0KLSMgR2VuZXJhdGUgcHJlcHJvY2Vzc29yCi1ydW5fZmxleCBUb2tlbml6ZXIu
bCBUb2tlbml6ZXIuY3BwCi1ydW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJlc3Npb25Q
YXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9uZXdfZmlsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9uZXdfZmlsZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDBhYTVmZDguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvbmV3X2ZpbGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotICAgIFNvbWUgbmV3IGNvZGUgdGhhdCB1c2VzIHRhYnMK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9uZXdfZmlsZTIuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvbmV3X2Zp
bGUyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlMTZkZi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9uZXdfZmlsZTIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotc29tZSBvdGhlciBm
aWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9wcF91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTcxNjRlYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHBwX3V0aWxzLmg6IENvbW1vbiBwcmVw
cm9jZXNzb3IgdXRpbGl0aWVzCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJ
TFNfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KLQotLy8gQSBt
YWNybyB0byBkaXNhbGxvdyB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0
aW9ucwotLy8gVGhpcyBtdXN0IGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBm
b3IgYSBjbGFzcy4KLSNkZWZpbmUgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1l
KSBcCi0gIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAotICB2b2lk
IG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCi0KLSNlbmRpZiAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfUFBVVElMU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJvY2Vzc29yLnZjcHJvaiBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nv
ci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YTk3NTkuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvcHJlcHJvY2Vzc29yLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi08
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KLTxWaXN1YWxTdHVk
aW9Qcm9qZWN0Ci0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCi0JVmVyc2lvbj0iOS4wMCIKLQlO
YW1lPSJwcmVwcm9jZXNzb3IiCi0JUHJvamVjdEdVSUQ9IntGQkUzMkRGMy0wRkIwLTRGMkYtQTQy
NC0yQzIxQkQ3QkMzMjV9IgotCVJvb3ROYW1lc3BhY2U9InByZXByb2Nlc3NvciIKLQlLZXl3b3Jk
PSJXaW4zMlByb2oiCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIgotCT4KLQk8UGxh
dGZvcm1zPgotCQk8UGxhdGZvcm0KLQkJCU5hbWU9IldpbjMyIgotCQkvPgotCQk8UGxhdGZvcm0K
LQkJCU5hbWU9Ing2NCIKLQkJLz4KLQk8L1BsYXRmb3Jtcz4KLQk8VG9vbEZpbGVzPgotCTwvVG9v
bEZpbGVzPgotCTxDb25maWd1cmF0aW9ucz4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRl
YnVnfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJh
dGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1l
KSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNX
ZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4z
MjtfREVCVUc7X0xJQiIKLQkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRp
bWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRI
ZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgot
CQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQxMDA7NDEyNzs0MjQ0OzQ3MDIiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01h
bmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxp
bmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0J
CTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8V2lu
MzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFt
ZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJ
Q29uZmlndXJhdGlvblR5cGU9IjQiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQlXaG9sZVByb2dy
YW1PcHRpbWl6YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRF
dmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJRW5h
YmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25z
PSJXSU4zMjtOREVCVUc7X0xJQiIKLQkJCQlSdW50aW1lTGlicmFyeT0iMCIKLQkJCQlFbmFibGVG
dW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIK
LQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkJRGVidWdJ
bmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0
MTI3OzQyNDQiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNv
bXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxl
clRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
WERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlv
bj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2NCIKLQkJCU91dHB1dERpcmVj
dG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSki
Ci0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRp
b25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgotCQkJQ2hhcmFjdGVyU2V0PSIxIgot
CQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIwIgot
CQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0xJQiIKLQkJCQlNaW5p
bWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGlt
ZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xl
dmVsPSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ9IjMiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjc7
NDcwMiIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGls
ZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENN
YWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgot
CQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXx4NjQiCi0JCQlPdXRwdXREaXJlY3Rv
cnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgot
CQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9u
TmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJ
CVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9t
QnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9y
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJh
dG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkJVGFy
Z2V0RW52aXJvbm1lbnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlv
bnM9InRydWUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfTElC
IgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5n
PSJ0cnVlIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0i
NCIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIz
IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0MjY3IgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
b3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JPC9Db25maWd1
cmF0aW9ucz4KLQk8UmVmZXJlbmNlcz4KLQk8L1JlZmVyZW5jZXM+Ci0JPEZpbGVzPgotCQk8Rmls
dGVyCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7
b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0Yx
LUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLlxEaWFnbm9zdGljcy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlSGFuZGxlci5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlUGFyc2VyLmNwcCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxFeHByZXNz
aW9uUGFyc2VyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxJbnB1dC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cTGV4ZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXE1hY3JvLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVwcm9jZXNzb3IuY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFRva2VuLmNwcCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbml6ZXIu
Y3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9
IkhlYWRlciBGaWxlcyIKLQkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgotCQkJ
VW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0i
Ci0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaWFnbm9zdGljcy5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZUhh
bmRsZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
LlxEaXJlY3RpdmVQYXJzZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLlxFeHByZXNzaW9uUGFyc2VyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5wdXQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxMZXhlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvLmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm9FeHBhbmRlci5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHBwX3V0aWxzLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJlcHJvY2Vz
c29yLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
U291cmNlTG9jYXRpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLlxUb2tlbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXFRva2VuaXplci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+
Ci0JPC9GaWxlcz4KLQk8R2xvYmFscz4KLQk8L0dsb2JhbHM+Ci08L1Zpc3VhbFN0dWRpb1Byb2pl
Y3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL251bWVyaWNfbGV4LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL251bWVyaWNfbGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjA0MTI1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaApAQCAtMCwwICsx
LDYxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbnVtZXJpY19sZXguaDogRnVuY3Rpb25zIHRvIGV4
dHJhY3QgbnVtZXJpYyB2YWx1ZXMgZnJvbSBzdHJpbmcuCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX05VTUVSSUNfTEVYX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9O
VU1FUklDX0xFWF9IXworCisjaW5jbHVkZSA8c3N0cmVhbT4KKworbmFtZXNwYWNlIHBwIHsKKwor
aW5saW5lIHN0ZDo6aW9zOjpmbXRmbGFncyBudW1lcmljX2Jhc2VfaW50KGNvbnN0IHN0ZDo6c3Ry
aW5nJiBzdHIpCit7CisgICAgaWYgKChzdHIuc2l6ZSgpID49IDIpICYmCisgICAgICAgIChzdHJb
MF0gPT0gJzAnKSAmJgorICAgICAgICAoc3RyWzFdID09ICd4JyB8fCBzdHJbMV0gPT0gJ1gnKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Omlvczo6aGV4OworICAgIH0KKyAgICBlbHNlIGlm
ICgoc3RyLnNpemUoKSA+PSAxKSAmJiAoc3RyWzBdID09ICcwJykpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RkOjppb3M6Om9jdDsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6aW9zOjpkZWM7Cit9
CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgdG8g
ZXh0cmFjdCBhIG51bWVyaWNhbAorLy8gdmFsdWUgb2YgdGhlIGdpdmVuIHR5cGUuIFRoZXNlIGZ1
bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgc3RyaW5nIGlzCisvLyBvZiB0aGUgY29ycmVjdCBmb3Jt
LiBUaGV5IGNhbiBvbmx5IGZhaWwgaWYgdGhlIHBhcnNlZCB2YWx1ZSBpcyB0b28gYmlnLAorLy8g
aW4gd2hpY2ggY2FzZSBmYWxzZSBpcyByZXR1cm5lZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgSW50
VHlwZT4KK2Jvb2wgbnVtZXJpY19sZXhfaW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIEludFR5
cGUqIHZhbHVlKQoreworICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBzdHJlYW0oc3RyKTsKKyAgICAv
LyBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBidXQgTVNWUyBoYXMgYSBidWdneSBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAvLyBJdCByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGlmIHRoZSBi
YXNlIGlzIG5vdCBzcGVjaWZpZWQuCisgICAgc3RyZWFtLnNldGYobnVtZXJpY19iYXNlX2ludChz
dHIpLCBzdGQ6Omlvczo6YmFzZWZpZWxkKTsKKworICAgIHN0cmVhbSA+PiAoKnZhbHVlKTsKKyAg
ICByZXR1cm4gIXN0cmVhbS5mYWlsKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlw
ZT4KK2Jvb2wgbnVtZXJpY19sZXhfZmxvYXQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgRmxvYXRU
eXBlKiB2YWx1ZSkKK3sKKyAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gc3RyZWFtKHN0cik7CisgICAg
Ly8gRm9yY2UgIkMiIGxvY2FsZSBzbyB0aGF0IGRlY2ltYWwgY2hhcmFjdGVyIGlzIGFsd2F5cyAn
LicsIGFuZAorICAgIC8vIG5vdCBkZXBlbmRlbnQgb24gdGhlIGN1cnJlbnQgbG9jYWxlLgorICAg
IHN0cmVhbS5pbWJ1ZShzdGQ6OmxvY2FsZTo6Y2xhc3NpYygpKTsKKworICAgIHN0cmVhbSA+PiAo
KnZhbHVlKTsKKyAgICByZXR1cm4gIXN0cmVhbS5mYWlsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IHBwLgorI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9OVU1FUklDX0xFWF9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NzM0MmIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5W
SURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3Ug
aW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmli
dXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2Yg
dGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVh
c2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJ
QQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJp
ZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBO
VklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRl
ciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0
aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVk
aXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlv
dSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUg
Y29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5n
Ci10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhl
IE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2Ug
bWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4K
LUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdo
dHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElB
IGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMg
dGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3Ro
ZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRl
ZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZU
V0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJ
RUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhF
UiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8g
RVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAot
SU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhF
IFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBU
SEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhF
T1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElB
QklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0K
LSNpZm5kZWYgQklTT05fUEFSU0VSX0gKLSMgZGVmaW5lIEJJU09OX1BBUlNFUl9ICi0KLSNpZm5k
ZWYgeXlzdHlwZXBwCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50ICAgIHNjX2ludDsKLSAgICBm
bG9hdCAgc2NfZnZhbDsKLSAgICBpbnQgICAgc2NfaWRlbnQ7Ci0JY2hhciAgIHN5bWJvbF9uYW1l
W01BWF9TWU1CT0xfTkFNRV9MRU4rMV07Ci19IHl5c3R5cGVwcDsKLQotIyBkZWZpbmUgWVlTVFlQ
RV9JU19UUklWSUFMIDEKLSNlbmRpZgotIyBkZWZpbmUJQ1BQX0FORF9PUAkgICAgICAgIDI1Nwot
IyBkZWZpbmUJQ1BQX1NVQl9BU1NJR04JICAgIDI1OQotIyBkZWZpbmUJQ1BQX01PRF9BU1NJR04J
ICAgIDI2MAotIyBkZWZpbmUJQ1BQX0FERF9BU1NJR04JMjYxCi0jIGRlZmluZQlDUFBfRElWX0FT
U0lHTgkyNjIKLSMgZGVmaW5lCUNQUF9NVUxfQVNTSUdOCTI2MwotIyBkZWZpbmUJQ1BQX0VRX09Q
CSAgICAgICAgMjY0Ci0jIGRlZmluZSAgICBDUFBfWE9SX09QICAgICAgICAgMjY1IAotIyBkZWZp
bmUJRVJST1JfU1kJICAgIDI2NgotIyBkZWZpbmUJQ1BQX0ZMT0FUQ09OU1RBTlQJMjY3Ci0jIGRl
ZmluZQlDUFBfR0VfT1AJICAgICAgICAyNjgKLSMgZGVmaW5lCUNQUF9SSUdIVF9PUCAgICAgICAg
MjY5Ci0jIGRlZmluZQlDUFBfSURFTlRJRklFUgkgICAgMjcwCi0jIGRlZmluZQlDUFBfSU5UQ09O
U1RBTlQJICAgIDI3MQotIyBkZWZpbmUJQ1BQX0xFX09QCSAgICAgICAgMjcyCi0jIGRlZmluZQlD
UFBfTEVGVF9PUAkgICAgICAgIDI3MwotIyBkZWZpbmUJQ1BQX0RFQ19PUAkyNzQKLSMgZGVmaW5l
CUNQUF9ORV9PUAkgICAgICAgIDI3NQotIyBkZWZpbmUJQ1BQX09SX09QCSAgICAgICAgMjc2Ci0j
IGRlZmluZQlDUFBfSU5DX09QCSAgICAyNzcKLSMgZGVmaW5lCUNQUF9TVFJDT05TVEFOVAkgICAg
Mjc4Ci0jIGRlZmluZQlDUFBfVFlQRUlERU5USUZJRVIJMjc5Ci0KLSMgZGVmaW5lCUZJUlNUX1VT
RVJfVE9LRU5fU1kJMjg5Ci0KLSMgZGVmaW5lCUNQUF9SSUdIVF9BU1NJR04JICAgIDI4MAotIyBk
ZWZpbmUJQ1BQX0xFRlRfQVNTSUdOCSAgICAyODEKLSMgZGVmaW5lCUNQUF9BTkRfQVNTSUdOCTI4
MgotIyBkZWZpbmUJQ1BQX09SX0FTU0lHTiAgCTI4MwotIyBkZWZpbmUJQ1BQX1hPUl9BU1NJR04J
Mjg0Ci0jIGRlZmluZQlDUFBfTEVGVF9CUkFDS0VUCTI4NQotIyBkZWZpbmUJQ1BQX1JJR0hUX0JS
QUNLRVQJMjg2Ci0jIGRlZmluZQlDUFBfTEVGVF9CUkFDRQkyODcKLSMgZGVmaW5lCUNQUF9SSUdI
VF9CUkFDRQkyODgKLQotI2VuZGlmIC8qIG5vdCBCSVNPTl9QQVJTRVJfSCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcF91
dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wcF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MTY0ZWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3BwX3V0aWxzLmgKQEAgLTAsMCArMSwxOCBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIHBwX3V0aWxzLmg6IENvbW1vbiBwcmVwcm9jZXNzb3IgdXRpbGl0aWVzCisKKyNpZm5kZWYg
Q09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1BQVVRJTFNfSF8KKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyB0aGUgY29weSBjb25z
dHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhpcyBtdXN0IGJlIHVzZWQgaW4g
dGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcy4KKyNkZWZpbmUgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1l
Jik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisK
KyNlbmRpZiAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwNTZkYS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3ByZXByb2Nlc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0K
LU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5
b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0
ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0
cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ug
b2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBw
bGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5W
SURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
YWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1z
LCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1
bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJl
ICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQg
cmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZp
Y2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlm
IHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0
aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93
aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2Yg
dGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZp
Y2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJ
QS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciBy
aWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJ
RElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdo
dHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkg
b3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9y
YXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBT
T0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1X
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElN
UExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJ
VEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4g
Tk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNU
LAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0Yg
VEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBP
RiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIg
VEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1Qg
TElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi1leHRlcm4g
Q1BQU3RydWN0ICpjcHA7Ci1pbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKLWludCBJbml0U2Nhbm5l
cihDUFBTdHJ1Y3QgKmNwcCk7Ci1pbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwg
aW50IGh0c2l6ZSk7Ci1jaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGlu
dCBhdG9tKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZkZTg1M2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OTggKzAs
MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlz
IHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNh
dGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0
ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0
aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3Qg
dG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNp
dmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBO
VklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVj
ZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHBy
b3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3Ug
bXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2Ug
YW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlz
dHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJh
ZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
ZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3Rp
Y2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUg
Z3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBh
bnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZl
Ci13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1h
eSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAot
Ci1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFT
SVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFO
RCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBS
T0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BF
Q0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFO
WSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1Ig
RElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQg
V0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8vCi0vLyBzY2FubmVyLmMKLS8vCi0KLSNpbmNsdWRlIDxhc3NlcnQu
aD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgMAotICAgICNpbmNsdWRlIDxpZWVl
ZnAuaD4KLSNlbHNlCi0gICAgI2RlZmluZSBpc2luZmYoeCkgKCgoKihpbnQgKikmKHgpICYgMHg3
ZjgwMDAwMEwpPT0weDdmODAwMDAwTCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAoKCoo
aW50ICopJih4KSAmIDB4MDA3ZmZmZmZMKT09MDAwMDAwMDAwMEwpKQotI2VuZGlmCi0KLSNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvdXRpbC5oIgotCi10eXBlZGVmIHN0cnVjdCBTdHJpbmdJbnB1dFNyYyB7Ci0gICAgSW5wdXRT
cmMgYmFzZTsKLSAgICBjaGFyICpwOwotfSBTdHJpbmdJbnB1dFNyYzsKLQotc3RhdGljIGludCBT
Y2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICpzKTsKLQotc3RhdGljIGludCBlb2Zfc2NhbihJbnB1
dFNyYyAqaXMsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIHJldHVybiBFT0Y7Ci19IC8v
IGVvZl9zY2FuCi0KLXN0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKSB7fQotCi1zdGF0aWMgSW5wdXRTcmMgZW9mX2lucHV0c3JjID0geyAw
LCAmZW9mX3NjYW4sICZlb2Zfc2NhbiwgJm5vb3AsIDAsIDAgfTsKLQotc3RhdGljIGludCBieXRl
X3NjYW4oSW5wdXRTcmMgKiwgeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0jZGVmaW5lIEVPTF9T
WSAnXG4nCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICNkZWZpbmUgREJHX0JSRUFLUE9J
TlQoKSBfX2FzbSBpbnQgMwotI2VsaWYgZGVmaW5lZChfTV9BTUQ2NCkKLSAgICAjZGVmaW5lIERC
R19CUkVBS1BPSU5UKCkgYXNzZXJ0KCEiRGJnX0JyZWFrcG9pbnQiKTsKLSNlbHNlCi0gICAgI2Rl
ZmluZSBEQkdfQlJFQUtQT0lOVCgpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYm
ICFkZWZpbmVkKF9NX0FNRDY0KQotICAgIF9faW50NjQgUkRUU0MgKCB2b2lkICkgewotCi0gICAg
ICAgIF9faW50NjQgdjsKLSAgICAKLSAgICAgICAgX19hc20gX19lbWl0IDB4MGYKLSAgICAgICAg
X19hc20gX19lbWl0IDB4MzEKLSAgICAgICAgX19hc20gbW92IGR3b3JkIHB0ciB2LCBlYXgKLSAg
ICAgICAgX19hc20gbW92IGR3b3JkIHB0ciB2KzQsIGVkeAotICAgIAotICAgICAgICByZXR1cm4g
djsKLSAgICB9Ci0jZW5kaWYKLQotCi1pbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApCi17
Ci0gICAgLy8gQWRkIHZhcmlvdXMgYXRvbXMgbmVlZGVkIGJ5IHRoZSBDUFAgbGluZSBzY2FubmVy
OgotICAgIGlmICghSW5pdENQUCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNwcC0+bW9z
dFJlY2VudFRva2VuID0gMDsKLSAgICBjcHAtPnRva2VuTG9jID0gJmNwcC0+bHRva2VuTG9jOwot
Ci0gICAgY3BwLT5sdG9rZW5Mb2MuZmlsZSA9IDA7Ci0gICAgY3BwLT5sdG9rZW5Mb2MubGluZSA9
IDA7Ci0KLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZlb2ZfaW5wdXRzcmM7Ci0gICAgY3BwLT5w
cmV2aW91c190b2tlbiA9ICdcbic7Ci0gICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwot
Ci0gICAgcmV0dXJuIDE7Ci19IC8vIEluaXRTY2FubmVyCi0KLWludCBGcmVlU2Nhbm5lcih2b2lk
KQotewotICAgIHJldHVybiAoRnJlZUNQUCgpKTsKLX0KLQotaW50IEluaXRTY2FubmVySW5wdXQo
Q1BQU3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNv
bnN0IGludCBsZW5ndGhbXSkKLXsKLSAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOwotICAgIGNwcC0+
UGFBcmd2ICAgICA9IHN0cmluZzsKLSAgICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKLSAgICBj
cHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7Ci0gICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIHN0cl9nZXRjaCgpCi0gKiB0YWtlcyBjYXJlIG9m
IHJlYWRpbmcgZnJvbSBtdWx0aXBsZSBzdHJpbmdzLgotICogcmV0dXJucyB0aGUgbmV4dC1jaGFy
IGZyb20gdGhlIGlucHV0IHN0cmVhbS4KLSAqIHJldHVybnMgRU9GIHdoZW4gdGhlIGNvbXBsZXRl
IHNoYWRlciBpcyBwYXJzZWQuCi0gKi8KLXN0YXRpYyBpbnQgc3RyX2dldGNoKFN0cmluZ0lucHV0
U3JjICppbikKLXsKLSAgICBmb3IoOzspewotICAgICAgIGlmICgqaW4tPnApewotICAgICAgICAg
IGlmICgqaW4tPnAgPT0gJ1xuJykgewotICAgICAgICAgICAgIGluLT5iYXNlLmxpbmUrKzsKLSAg
ICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVy
biAqaW4tPnArKzsKLSAgICAgICB9Ci0gICAgICAgaWYoKysoY3BwLT5QYVdoaWNoU3RyKSA8IGNw
cC0+UGFBcmdjKXsKLSAgICAgICAgICBmcmVlKGluKTsKLSAgICAgICAgICBTZXRTdHJpbmdOdW1i
ZXIoY3BwLT5QYVdoaWNoU3RyKTsKLSAgICAgICAgICBTZXRMaW5lTnVtYmVyKDEpOwotICAgICAg
ICAgIFNjYW5Gcm9tU3RyaW5nKGNwcC0+UGFBcmd2W2NwcC0+UGFXaGljaFN0cl0pOwotICAgICAg
ICAgIGluPShTdHJpbmdJbnB1dFNyYyopY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgICAgICAgY29u
dGludWU7ICAgICAgICAgICAgIAotICAgICAgIH0KLSAgICAgICBlbHNlewotICAgICAgICAgIGNw
cC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsKLSAgICAgICAgICBjcHAtPlBhV2hpY2hT
dHI9MDsKLSAgICAgICAgICBmcmVlKGluKTsKLSAgICAgICAgICByZXR1cm4gRU9GOwotICAgICAg
IH0gIAotICAgIH0KLX0gLy8gc3RyX2dldGNoCi0KLXN0YXRpYyB2b2lkIHN0cl91bmdldGNoKFN0
cmluZ0lucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKnR5cGUpIHsKLSAgICBpZiAoaW4t
PnBbLTFdID09IGNoKWluLT5wLS07Ci0gICAgZWxzZSB7Ci0gICAgICAgICooaW4tPnApPSdcMCc7
IC8vdGhpcyB3b3VsZCB0YWtlIGNhcmUgb2Ygc2hpZnRpbmcgdG8gdGhlIHByZXZpb3VzIHN0cmlu
Zy4KLSAgICAgICAgY3BwLT5QYVdoaWNoU3RyLS07Ci0gICAgfSAgCi0gICAgaWYgKGNoID09ICdc
bicpIHsKLSAgICAgICAgaW4tPmJhc2UubGluZS0tOwotICAgICAgICBEZWNMaW5lTnVtYmVyKCk7
Ci0gICAgfQotfSAvLyBzdHJfdW5nZXRjaAotCi1pbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hh
ciAqcykKLXsKLSAgICAKLSAgICBTdHJpbmdJbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKFN0
cmluZ0lucHV0U3JjKSk7Ci0gICAgbWVtc2V0KGluLCAwLCBzaXplb2YoU3RyaW5nSW5wdXRTcmMp
KTsKLSAgICBpbi0+cCA9IChjaGFyKikgczsKLSAgICBpbi0+YmFzZS5saW5lID0gMTsKLSAgICBp
bi0+YmFzZS5zY2FuID0gYnl0ZV9zY2FuOwotICAgIGluLT5iYXNlLmdldGNoID0gKGludCAoKiko
SW5wdXRTcmMgKiwgeXlzdHlwZXBwICopKXN0cl9nZXRjaDsKLSAgICBpbi0+YmFzZS51bmdldGNo
ID0gKHZvaWQgKCopKElucHV0U3JjICosIGludCwgeXlzdHlwZXBwICopKXN0cl91bmdldGNoOwot
ICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAgICBjcHAtPmN1cnJlbnRJ
bnB1dCA9ICZpbi0+YmFzZTsKLQotICAgIHJldHVybiAxOwotfSAvLyBTY2FuRnJvbVN0cmluZzsK
LQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzOiAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLSNkZWZpbmUgQVBQRU5EX0NIQVJfUyhjaCwgc3RyLCBsZW4sIG1heF9sZW4p
IFwKLSAgICAgIGlmIChsZW4gPCBtYXhfbGVuKSB7IFwKLSAgICAgICAgICBzdHJbbGVuKytdID0g
Y2g7IFwKLSAgICAgIH0gZWxzZSBpZiAoIWFscmVhZHlDb21wbGFpbmVkKSB7IFwKLSAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiQlVGRkVSIE9WRVJGTE9XIik7IFwKLSAgICAgICAgICBhbHJl
YWR5Q29tcGxhaW5lZCA9IDE7IFwKLSAgICAgIH0KLQotLyoKLSAqIGxGbG9hdENvbnN0KCkgLSBT
Y2FuIGEgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuICBBc3N1bWVzIHRoYXQgdGhlIHNjYW5uZXIK
LSAqICAgICAgICAgaGFzIHNlZW4gYXQgbGVhc3Qgb25lIGRpZ2l0LCBmb2xsb3dlZCBieSBlaXRo
ZXIgYSBkZWNpbWFsICcuJyBvciB0aGUKLSAqICAgICAgICAgbGV0dGVyICdlJy4KLSAqIGNoIC0g
Jy4nIG9yICdlJwotICogbGVuIC0gbGVuZ3RoIG9mIHN0cmluZyBhbHJlYWR5IGNvcGllZCBpbnRv
IHl5bHZhbHBwLT5zeW1ib2xfbmFtZS4KLSAqLwotCi1zdGF0aWMgaW50IGxGbG9hdENvbnN0KGlu
dCBjaCwgaW50IGxlbiwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50IGFscmVhZHlD
b21wbGFpbmVkID0gMDsKLSAgICBhc3NlcnQoKGNoID09ICcuJykgfHwgKGNoID09ICdlJykgfHwg
KGNoID09ICdFJykpOwotCi0gICAgaWYgKGNoID09ICcuJykgewotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFY
X1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9IHdoaWxlIChjaCA+
PSAnMCcgJiYgY2ggPD0gJzknKTsKLSAgICB9Ci0KLSAgICAvLyBFeHBvbmVudDoKLSAgICBpZiAo
Y2ggPT0gJ2UnIHx8IGNoID09ICdFJykgewotICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2
YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgIGNo
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgIGlmIChjaCA9PSAnKycpIHsKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gs
IHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAg
ICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJy0nKSB7Ci0gICAgICAgICAgICBB
UFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9O
QU1FX0xFTik7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaCA+PSAn
MCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9
ICc5JykgewotICAgICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1i
b2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coIkVYUE9ORU5UIElOVkFMSUQiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLQot
ICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgeXlsdmFscHAtPnN5
bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgIHl5bHZhbHBwLT5zY19mdmFsID0gKGZsb2F0KSBh
dG9mX2RvdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotICAgIGlmIChpc2luZmYoeXlsdmFscHAt
PnNjX2Z2YWwpKSB7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJGTE9BVCBDT05TVEFOVCBP
VkVSRkxPVyIpOwotICAgIH0KLSAgICByZXR1cm4gQ1BQX0ZMT0FUQ09OU1RBTlQ7Ci19IC8vIGxG
bG9hdENvbnN0Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBOb3JtYWwgU2Nhbm5lciAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLSAgICAKLXN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICpp
biwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJ
TkdfTEVOICsgMV07Ci0gICAgaW50IGFscmVhZHlDb21wbGFpbmVkID0gMDsKLSAgICBpbnQgbGVu
LCBjaCwgaWksIGl2YWwgPSAwOwotCi0gICAgZm9yICg7OykgewotICAgICAgICB5eWx2YWxwcC0+
c2NfaW50ID0gMDsKLSAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAKLSAgICAgICAgd2hpbGUgKGNoID09ICcgJyB8fCBj
aCA9PSAnXHQnIHx8IGNoID09ICdccicpIHsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQg
PSAxOwotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY3BwLT5s
dG9rZW5Mb2MuZmlsZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOwotICAgICAgICBjcHAtPmx0
b2tlbkxvYy5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Ci0gICAgICAgIGFscmVhZHlD
b21wbGFpbmVkID0gMDsKLSAgICAgICAgbGVuID0gMDsKLSAgICAgICAgc3dpdGNoIChjaCkgewot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGNoOyAvLyBTaW5nbGUgY2hhcmFj
dGVyIHRva2VuCi0gICAgICAgIGNhc2UgRU9GOgotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAg
ICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6Ci0g
ICAgICAgIGNhc2UgJ0YnOiBjYXNlICdHJzogY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzoK
LSAgICAgICAgY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08n
OgotICAgICAgICBjYXNlICdQJzogY2FzZSAnUSc6IGNhc2UgJ1InOiBjYXNlICdTJzogY2FzZSAn
VCc6Ci0gICAgICAgIGNhc2UgJ1UnOiBjYXNlICdWJzogY2FzZSAnVyc6IGNhc2UgJ1gnOiBjYXNl
ICdZJzoKLSAgICAgICAgY2FzZSAnWic6IGNhc2UgJ18nOgotICAgICAgICBjYXNlICdhJzogY2Fz
ZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6Ci0gICAgICAgIGNhc2UgJ2YnOiBj
YXNlICdnJzogY2FzZSAnaCc6IGNhc2UgJ2knOiBjYXNlICdqJzoKLSAgICAgICAgY2FzZSAnayc6
IGNhc2UgJ2wnOiBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28nOgotICAgICAgICBjYXNlICdw
JzogY2FzZSAncSc6IGNhc2UgJ3InOiBjYXNlICdzJzogY2FzZSAndCc6Ci0gICAgICAgIGNhc2Ug
J3UnOiBjYXNlICd2JzogY2FzZSAndyc6IGNhc2UgJ3gnOiBjYXNlICd5JzoKLSAgICAgICAgY2Fz
ZSAneic6ICAgICAgICAgICAgCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgQVBQ
RU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFN
RV9MRU4pOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IHdoaWxlICgoY2ggPj0g
J2EnICYmIGNoIDw9ICd6JykgfHwKLSAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYg
Y2ggPD0gJ1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgKGNoID49ICcwJyAmJiBjaCA8PSAn
OScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXycpOwotICAgICAgICAgICAgYXNz
ZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5z
eW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51
bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgeXls
dmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnN5bWJv
bF9uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlICcwJzoKLSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gs
IHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAg
ICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgeyAgLy8g
aGV4YWRlY2ltYWwgaW50ZWdlciBjb25zdGFudHMKLSAgICAgICAgICAgICAgICBBUFBFTkRfQ0hB
Ul9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7
Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAoKGNoID49ICcwJyAmJiBj
aCA8PSAnOScpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0Yn
KSB8fAotICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpdmFsID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpdmFsIDw9IDB4MGZm
ZmZmZmYpICYmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJzAnOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJ0EnICsgMTA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWkgPSBjaCAtICdhJyArIDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpdmFsID0gKGl2YWwgPDwgNCkgfCBpaTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFscmVhZHlDb21wbGFpbmVkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkhFWCBDT05TVEFOVCBP
VkVSRkxPVyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVk
ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzkn
KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdG
JykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdhJyAmJiBjaCA8PSAn
ZicpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiSEVYIENPTlNUQU5UIElOVkFMSUQiKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAg
ICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc3JykgeyAvLyBvY3RhbCBpbnRlZ2VyIGNvbnN0YW50
cwotICAgICAgICAgICAgICAgIGl2YWwgPSAwOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKChpdmFsIDw9IDB4MWZmZmZmZmYpICYmIChsZW4gPCBNQVhfU1lN
Qk9MX05BTUVfTEVOKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAtICcw
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCAzKSB8IGlpOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhbHJlYWR5Q29tcGxhaW5lZCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIk9DVCBDT05TVEFOVCBPVkVSRkxP
VyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAxOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc3Jyk7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoID09ICcuJyB8fCBjaCA9PSAnZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBjaCA9
PSAneCd8fCBjaCA9PSAnRScpIAotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxGbG9hdENv
bnN0KGNoLCBsZW4sIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1B
WF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFt
ZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICB5eWx2
YWxwcC0+c2NfaW50ID0gaXZhbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNU
QU5UOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJ
bnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgICAgICBjaCA9ICcwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEZhbGwgdGhy
b3VnaC4uLgotICAgICAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoK
LSAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzkn
OgotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7
Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBjaCA9PSAnRScpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoY2gsIGxlbiwgeXlsdmFscHApOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1BWF9T
WU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVts
ZW5dID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpdmFsID0g
MDsKLSAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2ggPSB5eWx2YWxwcC0+c3ltYm9sX25hbWVbaWldIC0gJzAnOwotICAg
ICAgICAgICAgICAgICAgICBpdmFsID0gaXZhbCoxMCArIGNoOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoKGl2YWwgPiAyMTQ3NDgzNjQpIHx8IChpdmFsID09IDIxNDc0ODM2NCAmJiBjaCA+PSA4
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIklOVEVHRVIg
Q09OU1RBTlQgT1ZFUkZMT1ciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHl5
bHZhbHBwLT5zY19pbnQgPSBpdmFsOwotICAgICAgICAgICAgICAgIGlmKGl2YWw9PTApCi0gICAg
ICAgICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiMCIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBDUFBfSU5UQ09OU1RBTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgaWYgKGNoID09ICctJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfREVDX09QOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gQ1BQX1NVQl9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnLSc7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IGNhc2UgJysnOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOQ19PUDsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9BRERfQVNTSUdOOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+
dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJysnOwotICAgICAgICAgICAgfQotICAgICAgICBjYXNlICcqJzoKLSAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9NVUxfQVNTSUdOOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gJyonOwotICAgICAgICAgICAgfQotICAgICAg
ICBjYXNlICclJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9NT0RfQVNTSUdOOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA9PSAnPicpewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJB
Q0U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgICAgIHJldHVybiAnJSc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJzonOgotICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPicpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX1JJR0hUX0JSQUNLRVQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnOic7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGNhc2UgJ14nOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9
PSAnXicpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9PUDsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9YT1JfQVNTSUdOOwotICAgICAgICAgICAgICAgIGVsc2V7Ci0gICAg
ICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiAnXic7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSAnPSc6Ci0g
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAg
ICAgIHJldHVybiBDUFBfRVFfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXls
dmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnPSc7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgJyEnOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPScp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX05FX09QOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gJyEnOwotICAg
ICAgICAgICAgfQotICAgICAgICBjYXNlICd8JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAg
ICBpZiAoY2ggPT0gJ3wnKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9PUl9PUDsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9PUl9BU1NJR047Ci0gICAgICAgICAgICAgICAgZWxz
ZXsKLSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuICd8JzsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJyYnOgotICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnJicpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX0FORF9PUDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNoID09ICc9JykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9BTkRfQVNT
SUdOOwotICAgICAgICAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICAgICAgICBjcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICAgIHJldHVybiAnJic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICBjYXNlICc8JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2gg
PT0gJzwnKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaCA9PSAn
PScpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9BU1NJR047Ci0gICAgICAg
ICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVu
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDUFBfTEVGVF9PUDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9MRV9PUDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2ggPT0gJyUnKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9MRUZUX0JSQUNFOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAn
OicpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0tFVDsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JzsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnPic6Ci0gICAg
ICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICc+JykgewotICAgICAgICAgICAgICAg
IGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgaWYoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX1JJR0hUX0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAg
ICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwg
Y2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9PUDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9HRV9PUDsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICc+JzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgJy4nOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGxGbG9hdENvbnN0KCcuJywgMCwgeXlsdmFscHApOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsgLy8gU3BlY2lhbCBFT0YgaGFjawotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNw
cC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gJy4nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAn
Lyc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICcvJykgewotICAgICAg
ICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1
dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICB9
IHdoaWxlIChjaCAhPSAnXG4nICYmIGNoICE9IEVPRik7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
ID09IEVPRikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAg
IHJldHVybiAnXG4nOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnKicpIHsKLSAgICAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGNoICE9ICcqJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09IEVP
RikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFT0Yg
SU4gQ09NTUVOVCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoID09IEVPRikgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIkVPRiBJTiBDT01NRU5UIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IHdoaWxlIChj
aCAhPSAnLycpOwotICAgICAgICAgICAgICAgIC8vIEdvIHRyeSBpdCBhZ2Fpbi4uLgotICAgICAg
ICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X0RJVl9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgICAgIHJldHVybiAnLyc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgd2hp
bGUgKGNoICE9ICciJyAmJiBjaCAhPSAnXG4nICYmIGNoICE9IEVPRikgewotICAgICAgICAgICAg
ICAgIGlmIChjaCA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJUaGUgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIChcXCkgaXMgbm90IHBhcnQgb2Yg
dGhlIE9wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVBQRU5EX0NIQVJf
UyhjaCwgc3RyaW5nX3ZhbCwgbGVuLCBNQVhfU1RSSU5HX0xFTik7Ci0gICAgICAgICAgICAgICAg
Y2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1BWF9TVFJJTkdf
TEVOKTsKLSAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICBp
ZiAoY2ggPT0gJyInKSB7Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9v
a1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IENQUF9TVFJDT05TVEFOVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIkVPTCBJTiBTVFJJTkciKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gRVJST1JfU1k7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLX0gLy8gYnl0ZV9zY2FuCi0KLWludCB5eWxleF9DUFAoY2hhciogYnVmLCBpbnQg
bWF4U2l6ZSkKLXsgICAgCi0gICAgeXlzdHlwZXBwIHl5bHZhbHBwOwotICAgIGludCB0b2tlbiA9
ICdcbic7ICAgCi0KLSAgICBmb3IoOzspIHsKLQotICAgICAgICBjaGFyKiB0b2tlblN0cmluZyA9
IDA7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsICZ5eWx2YWxwcCk7Ci0gICAgICAgIGlmKGNoZWNrX0VPRih0b2tlbikpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHRva2VuIDwgMCkgewotICAgICAgICAgICAgLy8g
VGhpcyBjaGVjayBtYXkgbmVlZCB0byBiZSBpbXByb3ZlZCB0byBzdXBwb3J0IFVURi04Ci0gICAg
ICAgICAgICAvLyBjaGFyYWN0ZXJzIGluIGNvbW1lbnRzLgotICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coInByZXByb2Nlc3NvciBlbmNvdW50ZXJlZCBub24tQVNDSUkgY2hhcmFjdGVyIGlu
IHNoYWRlciBzb3VyY2UiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICh0b2tlbiA9PSAnIycpIHsKLSAgICAgICAgICAgIGlmIChjcHAtPnByZXZpb3VzX3Rv
a2VuID09ICdcbid8fCBjcHAtPnByZXZpb3VzX3Rva2VuID09IDApIHsKLSAgICAgICAgICAgICAg
ICB0b2tlbiA9IHJlYWRDUFBsaW5lKCZ5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYoY2hl
Y2tfRU9GKHRva2VuKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCJwcmVwcm9jZXNzb3IgY29tbWFuZCBtdXN0IG5vdCBiZSBwcmVjZWRl
ZCBieSBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoYXQgbGluZSIpOwotICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNwcC0+cHJldmlv
dXNfdG9rZW4gPSB0b2tlbjsKLSAgICAgICAgLy8gZXhwYW5kIG1hY3JvcwotICAgICAgICBpZiAo
dG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFscHAuc2NfaWRlbnQs
ICZ5eWx2YWxwcCkpIHsKLSAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuID09
ICdcbicpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0
ZW1lbnQgPSAxOwotCi0gICAgICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewotICAg
ICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLnNj
X2lkZW50KTsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8
fCB0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpewotICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSB5
eWx2YWxwcC5zeW1ib2xfbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRva2Vu
U3RyaW5nID0gR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx0b2tlbik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodG9rZW5TdHJpbmcpIHsKLSAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4odG9r
ZW5TdHJpbmcpOwotICAgICAgICAgICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOwotICAgICAg
ICAgICAgaWYgKGxlbiA+PSBtYXhTaXplKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1heFNp
emU7Ci0gICAgICAgICAgICB9IGVsc2UgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAg
c3RyY3B5KGJ1ZiwgdG9rZW5TdHJpbmcpOwotICAgICAgICAgICAgICAgIHJldHVybiBsZW47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQot
fSAvLyB5eWxleAotCi0vL0NoZWNrcyBpZiB0aGUgdG9rZW4ganVzdCByZWFkIGlzIEVPRiBvciBu
b3QuCi1pbnQgY2hlY2tfRU9GKGludCB0b2tlbikKLXsKLSAgIGlmKHRva2VuPT0tMSl7Ci0gICAg
ICAgaWYoY3BwLT5pZmRlcHRoID4wKXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbmRp
ZiBtaXNzaW5nISEgQ29tcGlsYXRpb24gc3RvcHBlZCIpOwotICAgICAgICBjcHAtPkNvbXBpbGVF
cnJvcj0xOwotICAgICAgIH0KLSAgICAgIHJldHVybiAxOwotICAgfQotICAgcmV0dXJuIDA7Ci19
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIHNjYW5uZXIuYyAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjY3YzFkNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICsw
LDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
LQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1Q
Uk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0vLwotLy8gc2Nhbm5lci5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19T
Q0FOTkVSX0gpCi0jZGVmaW5lIF9fU0NBTk5FUl9IIDEKLQotI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3BhcnNlci5oIgotCi0vLyBOb3QgcmVhbGx5IGF0b20gdGFibGUgc3R1ZmYgYnV0IG5lZWRl
ZCBmaXJzdC4uLgotCi10eXBlZGVmIHN0cnVjdCBTb3VyY2VMb2NfUmVjIHsKLSAgICB1bnNpZ25l
ZCBzaG9ydCBmaWxlLCBsaW5lOwotfSBTb3VyY2VMb2M7Ci0KLWludCB5eWxleF9DUFAoY2hhciog
YnVmLCBpbnQgbWF4U2l6ZSk7Ci0KLXR5cGVkZWYgc3RydWN0IElucHV0U3JjIHsKLSAgICBzdHJ1
Y3QgSW5wdXRTcmMJKnByZXY7Ci0gICAgaW50CQkJKCpzY2FuKShzdHJ1Y3QgSW5wdXRTcmMgKiwg
eXlzdHlwZXBwICopOwotICAgIGludAkJCSgqZ2V0Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0
eXBlcHAgKik7Ci0gICAgdm9pZAkJKCp1bmdldGNoKShzdHJ1Y3QgSW5wdXRTcmMgKiwgaW50LCB5
eXN0eXBlcHAgKik7Ci0gICAgaW50CQkJbmFtZTsgIC8qIGF0b20gKi8KLSAgICBpbnQJCQlsaW5l
OwotfSBJbnB1dFNyYzsKLQotaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJ
bnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVj
dCAqY3BwLCBpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10pOwotaW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYg
d2UgaGl0IGEgRU9GIGFicnVwdGx5IAotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFy
ICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxv
Zwotdm9pZCBTZXRMaW5lTnVtYmVyKGludCk7Ci12b2lkIFNldFN0cmluZ051bWJlcihpbnQpOwot
dm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpOwotdm9pZCBEZWNMaW5lTnVtYmVyKHZvaWQpOwotaW50
IEZyZWVTY2FubmVyKHZvaWQpOyAgICAgICAgICAgICAgICAgLy8gRnJlZSB0aGUgY3BwIHNjYW5u
ZXIKLSNlbmRpZiAvLyAhKGRlZmluZWQoX19TQ0FOTkVSX0gpCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xv
YmFscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjM0NjI2Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xn
bG9iYWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEg
Q29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1j
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFu
ZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9u
IG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNl
IHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRv
IG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNv
ZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElB
IGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJ
RElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0i
TlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJp
YnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMs
IGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVk
aXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHly
aWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4
dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklE
SUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtz
IG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNl
cHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9y
IGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJl
aW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQg
bWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdv
cmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5v
IGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUg
SVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAot
SU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxP
TkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5U
IFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lE
RU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0Us
IFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1O
VklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBP
RiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElU
WSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8v
IHNsZ2xvYmFscy5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19TTEdMT0JBTFNfSCkKLSNkZWZpbmUg
X19TTEdMT0JBTFNfSCAxCi0KLXR5cGVkZWYgc3RydWN0IENQUFN0cnVjdF9SZWMgQ1BQU3RydWN0
OwotCi1leHRlcm4gQ1BQU3RydWN0ICpjcHA7Ci0KLSN1bmRlZiAgQ1BQQ19ERUJVR19USEVfQ09N
UElMRVIKLSNpZiBkZWZpbmVkKF9ERUJVRykKLSNkZWZpbmUgQ1BQQ19ERUJVR19USEVfQ09NUElM
RVIgMQotI2VuZGlmCi0KLSN1bmRlZiAgQ1BQQ19FTkFCTEVfVE9PTFMKLSNkZWZpbmUgQ1BQQ19F
TkFCTEVfVE9PTFMgMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCIKLSNpZiAhZGVmaW5lZChOT19QQVJTRVIpCi0j
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgotI2VuZGlmCi0KLSNpZiAh
ZGVmaW5lZChOVUxMKQotI2RlZmluZSBOVUxMIDAKLSNlbmRpZgotCi0jZW5kaWYgLy8gIShkZWZp
bmVkKF9fU0xHTE9CQUxTX0gpCi0KLQotICAgIAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMThiMjU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJp
Z2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigi
TlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAot
aW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklE
SUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5
b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5z
dGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUlu
IGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBh
IHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmln
aHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdh
cmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJ
RElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFu
ZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhl
IE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBv
ZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFp
bWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4K
LU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9m
IE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNz
bHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4
cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5n
IGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmlu
Z2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2gg
dGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMg
bGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9W
SURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lU
SE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04t
SU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01C
SU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElB
IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBM
QVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1U
TywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9O
LCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FS
RSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAot
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lT
RSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gc3ltYm9scy5jCi0v
LwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIK
LQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwNikK
LSNlbmRpZgotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU3ltYm9sIFRhYmxlIFZhcmlhYmxlczogLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLVNjb3BlICpTY29wZUxpc3QgPSBOVUxMOwotU2NvcGUgKkN1cnJl
bnRTY29wZSA9IE5VTEw7Ci1TY29wZSAqR2xvYmFsU2NvcGUgPSBOVUxMOwotCi1zdGF0aWMgdm9p
ZCB1bmxpbmtTY29wZSh2b2lkICpfc2NvcGUpIHsKLSAgICBTY29wZSAqc2NvcGUgPSBfc2NvcGU7
Ci0KLSAgICBpZiAoc2NvcGUtPm5leHQpCi0gICAgICAgIHNjb3BlLT5uZXh0LT5wcmV2ID0gc2Nv
cGUtPnByZXY7Ci0gICAgaWYgKHNjb3BlLT5wcmV2KQotICAgICAgICBzY29wZS0+cHJldi0+bmV4
dCA9IHNjb3BlLT5uZXh0OwotICAgIGVsc2UKLSAgICAgICAgU2NvcGVMaXN0ID0gc2NvcGUtPm5l
eHQ7Ci19Ci0KLS8qCi0gKiBOZXdTY29wZSgpCi0gKgotICovCi1TY29wZSAqTmV3U2NvcGVJblBv
b2woTWVtb3J5UG9vbCAqcG9vbCkKLXsKLSAgICBTY29wZSAqbFNjb3BlOwotCi0gICAgbFNjb3Bl
ID0gbWVtX0FsbG9jKHBvb2wsIHNpemVvZihTY29wZSkpOwotICAgIGxTY29wZS0+cG9vbCA9IHBv
b2w7Ci0gICAgbFNjb3BlLT5wYXJlbnQgPSBOVUxMOwotICAgIGxTY29wZS0+ZnVuU2NvcGUgPSBO
VUxMOwotICAgIGxTY29wZS0+c3ltYm9scyA9IE5VTEw7Ci0gICAgCi0gICAgbFNjb3BlLT5sZXZl
bCA9IDA7Ci0KLSAgICBsU2NvcGUtPnByb2dyYW1zID0gTlVMTDsKLSAgICBpZiAoKGxTY29wZS0+
bmV4dCA9IFNjb3BlTGlzdCkpCi0gICAgICAgIFNjb3BlTGlzdC0+cHJldiA9IGxTY29wZTsKLSAg
ICBsU2NvcGUtPnByZXYgPSAwOwotICAgIFNjb3BlTGlzdCA9IGxTY29wZTsKLSAgICBtZW1fQWRk
Q2xlYW51cChwb29sLCB1bmxpbmtTY29wZSwgbFNjb3BlKTsKLSAgICByZXR1cm4gbFNjb3BlOwot
fSAvLyBOZXdTY29wZQotCi0vKgotICogUHVzaFNjb3BlKCkKLSAqCi0gKi8KLQotdm9pZCBQdXNo
U2NvcGUoU2NvcGUgKmZTY29wZSkKLXsKLSAgICBTY29wZSAqbFNjb3BlOwotCi0gICAgaWYgKEN1
cnJlbnRTY29wZSkgewotICAgICAgICBmU2NvcGUtPmxldmVsID0gQ3VycmVudFNjb3BlLT5sZXZl
bCArIDE7Ci0gICAgICAgIGlmIChmU2NvcGUtPmxldmVsID09IDEpIHsKLSAgICAgICAgICAgIGlm
ICghR2xvYmFsU2NvcGUpIHsKLSAgICAgICAgICAgICAgICAvKiBIQUNLIC0gQ1REIC0tIGlmIEds
b2JhbFNjb3BlPT1OVUxMIGFuZCBsZXZlbD09MSwgd2UncmUKLSAgICAgICAgICAgICAgICAgKiBk
ZWZpbmluZyBhIGZ1bmN0aW9uIGluIHRoZSBzdXBlcmdsb2JhbCBzY29wZS4gIFRoaW5ncwotICAg
ICAgICAgICAgICAgICAqIHdpbGwgYnJlYWsgaWYgd2UgbGVhdmUgdGhlIGxldmVsIGFzIDEsIHNv
IHdlIGFyYml0cmFyaWx5Ci0gICAgICAgICAgICAgICAgICogc2V0IGl0IHRvIDIgKi8KLSAgICAg
ICAgICAgICAgICBmU2NvcGUtPmxldmVsID0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoZlNjb3BlLT5sZXZlbCA+PSAyKSB7Ci0gICAgICAgICAgICBsU2NvcGUgPSBm
U2NvcGU7Ci0gICAgICAgICAgICB3aGlsZSAobFNjb3BlLT5sZXZlbCA+IDIpCi0gICAgICAgICAg
ICAgICAgbFNjb3BlID0gbFNjb3BlLT5uZXh0OwotICAgICAgICAgICAgZlNjb3BlLT5mdW5TY29w
ZSA9IGxTY29wZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZTY29wZS0+bGV2
ZWwgPSAwOwotICAgIH0KLSAgICBmU2NvcGUtPnBhcmVudCA9IEN1cnJlbnRTY29wZTsKLSAgICBD
dXJyZW50U2NvcGUgPSBmU2NvcGU7Ci19IC8vIFB1c2hTY29wZQotCi0vKgotICogUG9wU2NvcGUo
KQotICoKLSAqLwotCi1TY29wZSAqUG9wU2NvcGUodm9pZCkKLXsKLSAgICBTY29wZSAqbFNjb3Bl
OwotCi0gICAgbFNjb3BlID0gQ3VycmVudFNjb3BlOwotICAgIGlmIChDdXJyZW50U2NvcGUpCi0g
ICAgICAgIEN1cnJlbnRTY29wZSA9IEN1cnJlbnRTY29wZS0+cGFyZW50OwotICAgIHJldHVybiBs
U2NvcGU7Ci19IC8vIFBvcFNjb3BlCi0KLS8qCi0gKiBOZXdTeW1ib2woKSAtIEFsbG9jYXRlIGEg
bmV3IHN5bWJvbCBub2RlOwotICoKLSAqLwotCi1TeW1ib2wgKk5ld1N5bWJvbChTb3VyY2VMb2Mg
KmxvYywgU2NvcGUgKmZTY29wZSwgaW50IG5hbWUsIHN5bWJvbGtpbmQga2luZCkKLXsKLSAgICBT
eW1ib2wgKmxTeW1iOwotICAgIGNoYXIgKnBjaDsKLSAgICB1bnNpZ25lZCBpbnQgaWk7Ci0KLSAg
ICBsU3ltYiA9IChTeW1ib2wgKikgbWVtX0FsbG9jKGZTY29wZS0+cG9vbCwgc2l6ZW9mKFN5bWJv
bCkpOwotICAgIGxTeW1iLT5sZWZ0ID0gTlVMTDsKLSAgICBsU3ltYi0+cmlnaHQgPSBOVUxMOwot
ICAgIGxTeW1iLT5uZXh0ID0gTlVMTDsKLSAgICBsU3ltYi0+bmFtZSA9IG5hbWU7Ci0gICAgbFN5
bWItPmxvYyA9ICpsb2M7Ci0gICAgbFN5bWItPmtpbmQgPSBraW5kOwotICAgIAotICAgIC8vIENs
ZWFyIHVuaW9uIGFyZWE6Ci0KLSAgICBwY2ggPSAoY2hhciAqKSAmbFN5bWItPmRldGFpbHM7Ci0g
ICAgZm9yIChpaSA9IDA7IGlpIDwgc2l6ZW9mKGxTeW1iLT5kZXRhaWxzKTsgaWkrKykKLSAgICAg
ICAgKnBjaCsrID0gMDsKLSAgICByZXR1cm4gbFN5bWI7Ci19IC8vIE5ld1N5bWJvbAotCi0vKgot
ICogbEFkZFRvVHJlZSgpIC0gVXNpbmcgYSBiaW5hcnkgdHJlZSBpcyBub3QgYSBnb29kIGlkZWEg
Zm9yIGJhc2ljIGF0b20gdmFsdWVzIGJlY2F1c2UgdGhleQotICogICAgICAgICBhcmUgZ2VuZXJh
dGVkIGluIG9yZGVyLiAgV2UnbGwgZml4IHRoaXMgbGF0ZXIgKGJ5IHJldmVyc2luZyB0aGUgYml0
IHBhdHRlcm4pLgotICovCi0KLXN0YXRpYyB2b2lkIGxBZGRUb1RyZWUoU3ltYm9sICoqZlN5bWJv
bHMsIFN5bWJvbCAqZlN5bWIpCi17Ci0gICAgU3ltYm9sICpsU3ltYjsKLSAgICBpbnQgbHJldiwg
ZnJldjsKLQotICAgIGxTeW1iID0gKmZTeW1ib2xzOwotICAgIGlmIChsU3ltYikgewotICAgICAg
ICBmcmV2ID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgZlN5bWItPm5hbWUpOwotICAgICAgICB3
aGlsZSAobFN5bWIpIHsKLSAgICAgICAgICAgIGxyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxl
LCBsU3ltYi0+bmFtZSk7Ci0gICAgICAgICAgICBpZiAobHJldiA9PSBmcmV2KSB7Ci0gICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkdldEF0b21TdHJpbmcoYXRhYmxlLCBmU3ltYi0+
bmFtZSkiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxyZXYgPiBmcmV2KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChsU3ltYi0+bGVmdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+
bGVmdDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxTeW1iLT5sZWZ0ID0gZlN5bWI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChsU3ltYi0+cmlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxTeW1iID0gbFN5bWItPnJpZ2h0OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbFN5bWItPnJpZ2h0ID0gZlN5bWI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgICpmU3lt
Ym9scyA9IGZTeW1iOwotICAgIH0KLX0gLy8gbEFkZFRvVHJlZQotCi0KLS8qCi0gKiBBZGRTeW1i
b2woKSAtIEFkZCBhIHZhcmlhYmxlLCB0eXBlLCBvciBmdW5jdGlvbiBuYW1lIHRvIGEgc2NvcGUu
Ci0gKgotICovCi0KLVN5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNj
b3BlLCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0K
LSAgICBpZiAoIWZTY29wZSkKLSAgICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOwotICAgIGxT
eW1iID0gTmV3U3ltYm9sKGxvYywgZlNjb3BlLCBhdG9tLCBraW5kKTsKLSAgICBsQWRkVG9UcmVl
KCZmU2NvcGUtPnN5bWJvbHMsIGxTeW1iKTsKLSAgICByZXR1cm4gbFN5bWI7Ci19IC8vIEFkZFN5
bWJvbAotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFN5bWJvbCBTZW1hbnRpYyBGdW5jdGlvbnMg
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLQotLyoKLSAqIExvb2tVcExvY2FsU3ltYm9sKCkKLSAqCi0gKi8KLQot
U3ltYm9sICpMb29rVXBMb2NhbFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSkKLXsKLSAg
ICBTeW1ib2wgKmxTeW1iOwotICAgIGludCBybmFtZSwgcmF0b207Ci0KLSAgICByYXRvbSA9IEdl
dFJldmVyc2VkQXRvbShhdGFibGUsIGF0b20pOwotICAgIGlmICghZlNjb3BlKQotICAgICAgICBm
U2NvcGUgPSBDdXJyZW50U2NvcGU7Ci0gICAgbFN5bWIgPSBmU2NvcGUtPnN5bWJvbHM7Ci0gICAg
d2hpbGUgKGxTeW1iKSB7Ci0gICAgICAgIHJuYW1lID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwg
bFN5bWItPm5hbWUpOwotICAgICAgICBpZiAocm5hbWUgPT0gcmF0b20pIHsKLSAgICAgICAgICAg
IHJldHVybiBsU3ltYjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChybmFtZSA+
IHJhdG9tKSB7Ci0gICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+bGVmdDsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19IC8vIExvb2tV
cExvY2FsU3ltYm9sCi0KLS8qCi0gKiBMb29rVXBTeW1ib2woKQotICoKLSAqLwotCi1TeW1ib2wg
Kkxvb2tVcFN5bWJvbChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSkKLXsKLSAgICBTeW1ib2wgKmxT
eW1iOwotCi0gICAgaWYgKCFmU2NvcGUpCi0gICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsK
LSAgICB3aGlsZSAoZlNjb3BlKSB7Ci0gICAgICAgIGxTeW1iID0gTG9va1VwTG9jYWxTeW1ib2wo
ZlNjb3BlLCBhdG9tKTsKLSAgICAgICAgaWYgKGxTeW1iKQotICAgICAgICAgICAgcmV0dXJuIGxT
eW1iOwotICAgICAgICBmU2NvcGUgPSBmU2NvcGUtPnBhcmVudDsKLSAgICB9Ci0gICAgcmV0dXJu
IE5VTEw7Ci19IC8vIExvb2tVcFN5bWJvbAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2QwYjA3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0
IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJ
RElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5z
dGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEg
c29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3Ug
ZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFs
bCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNv
bnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0
ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBl
cnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRz
IGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUi
KSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElB
IFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9v
ciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5W
SURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBO
VklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVy
cyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5l
aXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5W
SURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkg
c3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJl
c3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1
dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2Vk
IGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhl
IE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGlj
ZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURF
RCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9V
VCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5G
UklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5B
VElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJF
IExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZ
LCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywg
TE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBN
T0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwg
SE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwg
RVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gc3ltYm9scy5oCi0vLwot
Ci0jaWYgIWRlZmluZWQoX19TWU1CT0xTX0gpCi0jZGVmaW5lIF9fU1lNQk9MU19IIDEKLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKLQotdHlwZWRlZiBlbnVtIHN5
bWJvbGtpbmQgewotICAgTUFDUk9fUwotfSBzeW1ib2xraW5kOwotCi0vLyBUeXBlZGVmcyBmb3Ig
dGhpbmdzIGRlZmluZWQgaGVyZSBpbiAic3ltYm9scy5oIjoKLQotdHlwZWRlZiBzdHJ1Y3QgU2Nv
cGVfUmVjIFNjb3BlOwotdHlwZWRlZiBzdHJ1Y3QgU3ltYm9sX1JlYyBTeW1ib2w7Ci0KLXR5cGVk
ZWYgc3RydWN0IFN5bWJvbExpc3RfUmVjIHsKLSAgICBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgKm5l
eHQ7Ci0gICAgU3ltYm9sICpzeW1iOwotfSBTeW1ib2xMaXN0OwotCi1zdHJ1Y3QgU2NvcGVfUmVj
IHsKLSAgICBTY29wZSAqbmV4dCwgKnByZXY7ICAgICAvLyBkb3VibHktbGlua2VkIGxpc3Qgb2Yg
YWxsIHNjb3BlcwotICAgIFNjb3BlICpwYXJlbnQ7Ci0gICAgU2NvcGUgKmZ1blNjb3BlOyAgICAg
ICAgLy8gUG9pbnRzIHRvIGJhc2Ugc2NvcGUgb2YgZW5jbG9zaW5nIGZ1bmN0aW9uCi0gICAgTWVt
b3J5UG9vbCAqcG9vbDsgICAgICAgLy8gcG9vbCB1c2VkIGZvciBhbGxvY2F0aW9uIGluIHRoaXMg
c2NvcGUKLSAgICBTeW1ib2wgKnN5bWJvbHM7Ci0gICAgCi0JaW50IGxldmVsOyAgICAgICAgICAg
ICAgLy8gMCA9IHN1cGVyIGdsb2JhbHMsIDEgPSBnbG9iYWxzLCBldGMuCi0KLSAgICAvLyBPbmx5
IHVzZWQgYXQgZ2xvYmFsIHNjb3BlIChsZXZlbCAxKToKLSAgICBTeW1ib2xMaXN0ICpwcm9ncmFt
czsgICAvLyBMaXN0IG9mIHByb2dyYW1zIGZvciB0aGlzIGNvbXBpbGF0aW9uLgotfTsKLQotCi0v
LyBTeW1ib2wgdGFibGUgaXMgYSBzaW1wbGUgYmluYXJ5IHRyZWUuCi0KLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvY3BwLmgiICAgICAgICAvLyB0byBnZXQgTWFjcm9TeW1ib2wgZGVm
Ci0KLXN0cnVjdCBTeW1ib2xfUmVjIHsKLSAgICBTeW1ib2wgKmxlZnQsICpyaWdodDsKLSAgICBT
eW1ib2wgKm5leHQ7Ci0gICAgaW50IG5hbWU7ICAgICAgIC8vIE5hbWUgYXRvbQotICAgIFNvdXJj
ZUxvYyBsb2M7Ci0gICAgc3ltYm9sa2luZCBraW5kOwotICAgIHVuaW9uIHsKLSAgICAgICAgTWFj
cm9TeW1ib2wgbWFjOwotICAgIH0gZGV0YWlsczsKLX07Ci0KLWV4dGVybiBTY29wZSAqQ3VycmVu
dFNjb3BlOwotZXh0ZXJuIFNjb3BlICpHbG9iYWxTY29wZTsKLWV4dGVybiBTY29wZSAqU2NvcGVM
aXN0OwotCi1TY29wZSAqTmV3U2NvcGVJblBvb2woTWVtb3J5UG9vbCAqKTsKLSNkZWZpbmUgTmV3
U2NvcGUoKSAgICAgIE5ld1Njb3BlSW5Qb29sKEN1cnJlbnRTY29wZS0+cG9vbCkKLXZvaWQgUHVz
aFNjb3BlKFNjb3BlICpmU2NvcGUpOwotU2NvcGUgKlBvcFNjb3BlKHZvaWQpOwotU3ltYm9sICpO
ZXdTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBuYW1lLCBzeW1ib2xr
aW5kIGtpbmQpOwotU3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2Nv
cGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpOwotU3ltYm9sICpMb29rVXBMb2NhbFN5bWJv
bChTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSk7Ci1TeW1ib2wgKkxvb2tVcFN5bWJvbChTY29wZSAq
ZlNjb3BlLCBpbnQgYXRvbSk7Ci0KLQotI2VuZGlmIC8vICFkZWZpbmVkKF9fU1lNQk9MU19IKQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3Rva2Vucy5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0YzA1
ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3Rva2Vucy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY3ICswLDAgQEAKLS8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24u
Ci0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0
byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVk
aXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFu
Y2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1z
LCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlz
IE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRl
cm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNl
LCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3
YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBh
bmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9k
aWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0
IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFp
biB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9s
bG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMg
b2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNl
cnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBT
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5W
SURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhl
ciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkg
TlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCBy
aWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3Ig
Ynkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29y
cG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJ
QSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VU
Ci1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S
IElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9O
IEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQot
SU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElS
RUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQg
T0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElP
TiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5E
RVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJ
Q1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0vLwotLy8gdG9rZW5zLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL3V0aWwuaCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDA1NCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTUyKQotI2VuZGlm
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8gUHJlcHJvY2Vzc29yIGFuZCBUb2tlbiBSZWNvcmRlciBhbmQgUGxheWJhY2s6
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotLyoKLSAqIGlkc3RyKCkKLSAqIENvcHkgYSBzdHJpbmcgdG8gYSBtYWxsb2Mn
ZWQgYmxvY2sgYW5kIGNvbnZlcnQgaXQgaW50byBzb21ldGhpbmcgc3VpdGFibGUKLSAqIGZvciBh
biBJRAotICoKLSAqLwotCi1zdGF0aWMgY2hhciAqaWRzdHIoY29uc3QgY2hhciAqZnN0ciwgTWVt
b3J5UG9vbCAqcG9vbCkKLXsKLSAgICBzaXplX3QgbGVuOwotICAgIGNoYXIgKnN0ciwgKnQ7Ci0g
ICAgY29uc3QgY2hhciAqZjsKLQotICAgIGxlbiA9IHN0cmxlbihmc3RyKTsKLSAgICBpZiAoIXBv
b2wpCi0gICAgICAgIHN0ciA9IChjaGFyICopIG1hbGxvYyhsZW4gKyAxKTsKLSAgICBlbHNlCi0g
ICAgICAgIHN0ciA9IChjaGFyICopIG1lbV9BbGxvYyhwb29sLCBsZW4gKyAxKTsKLSAgICAKLSAg
ICBmb3IgKGY9ZnN0ciwgdD1zdHI7ICpmOyBmKyspIHsKLSAgICAgICAgaWYgKGlzYWxudW0oKmYp
KSAqdCsrID0gKmY7Ci0gICAgICAgIGVsc2UgaWYgKCpmID09ICcuJyB8fCAqZiA9PSAnLycpICp0
KysgPSAnXyc7Ci0gICAgfQotICAgICp0ID0gMDsKLSAgICByZXR1cm4gc3RyOwotfSAvLyBpZHN0
cgotCi0KLS8qCi0gKiBsTmV3QmxvY2soKQotICoKLSAqLwotCi1zdGF0aWMgVG9rZW5CbG9jayAq
bE5ld0Jsb2NrKFRva2VuU3RyZWFtICpmVG9rLCBNZW1vcnlQb29sICpwb29sKQotewotICAgIFRv
a2VuQmxvY2sgKmxCbG9jazsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgbEJsb2NrID0gKFRv
a2VuQmxvY2sgKikgbWFsbG9jKHNpemVvZihUb2tlbkJsb2NrKSArIDI1Nik7Ci0gICAgZWxzZQot
ICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFRv
a2VuQmxvY2spICsgMjU2KTsKLSAgICBsQmxvY2stPmNvdW50ID0gMDsKLSAgICBsQmxvY2stPmN1
cnJlbnQgPSAwOwotICAgIGxCbG9jay0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIGxCbG9jayAr
IHNpemVvZihUb2tlbkJsb2NrKTsKLSAgICBsQmxvY2stPm1heCA9IDI1NjsKLSAgICBsQmxvY2st
Pm5leHQgPSBOVUxMOwotICAgIGlmIChmVG9rLT5oZWFkKSB7Ci0gICAgICAgIGZUb2stPmN1cnJl
bnQtPm5leHQgPSBsQmxvY2s7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZlRvay0+aGVhZCA9IGxC
bG9jazsKLSAgICB9Ci0gICAgZlRvay0+Y3VycmVudCA9IGxCbG9jazsKLSAgICByZXR1cm4gbEJs
b2NrOwotfSAvLyBsTmV3QmxvY2sKLQotLyoKLSAqIGxBZGRCeXRlKCkKLSAqCi0gKi8KLQotc3Rh
dGljIHZvaWQgbEFkZEJ5dGUoVG9rZW5TdHJlYW0gKmZUb2ssIHVuc2lnbmVkIGNoYXIgZlZhbCkK
LXsKLSAgICBUb2tlbkJsb2NrICpsQmxvY2s7Ci0gICAgbEJsb2NrID0gZlRvay0+Y3VycmVudDsK
LSAgICBpZiAobEJsb2NrLT5jb3VudCA+PSBsQmxvY2stPm1heCkKLSAgICAgICAgbEJsb2NrID0g
bE5ld0Jsb2NrKGZUb2ssIDApOwotICAgIGxCbG9jay0+ZGF0YVtsQmxvY2stPmNvdW50KytdID0g
ZlZhbDsKLX0gLy8gbEFkZEJ5dGUKLQotCi0KLS8qCi0gKiBsUmVhZEJ5dGUoKSAtIEdldCB0aGUg
bmV4dCBieXRlIGZyb20gYSBzdHJlYW0uCi0gKgotICovCi0KLXN0YXRpYyBpbnQgbFJlYWRCeXRl
KFRva2VuU3RyZWFtICpwVG9rKQotewotICAgIFRva2VuQmxvY2sgKmxCbG9jazsKLSAgICBpbnQg
bHZhbCA9IC0xOwotCi0gICAgbEJsb2NrID0gcFRvay0+Y3VycmVudDsKLSAgICBpZiAobEJsb2Nr
KSB7Ci0gICAgICAgIGlmIChsQmxvY2stPmN1cnJlbnQgPj0gbEJsb2NrLT5jb3VudCkgewotICAg
ICAgICAgICAgbEJsb2NrID0gbEJsb2NrLT5uZXh0OwotICAgICAgICAgICAgaWYgKGxCbG9jaykK
LSAgICAgICAgICAgICAgICBsQmxvY2stPmN1cnJlbnQgPSAwOwotICAgICAgICAgICAgcFRvay0+
Y3VycmVudCA9IGxCbG9jazsKLSAgICAgICAgfQotICAgICAgICBpZiAobEJsb2NrKQotICAgICAg
ICAgICAgbHZhbCA9IGxCbG9jay0+ZGF0YVtsQmxvY2stPmN1cnJlbnQrK107Ci0gICAgfQotICAg
IHJldHVybiBsdmFsOwotfSAvLyBsUmVhZEJ5dGUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vIEdsb2JhbCBGdW5jdGlvbnM6Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLQotLyoKLSAqIE5ld1Rva2VuU3RyZWFtKCkKLSAqCi0gKi8KLQotVG9r
ZW5TdHJlYW0gKk5ld1Rva2VuU3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIE1lbW9yeVBvb2wgKnBv
b2wpCi17Ci0gICAgVG9rZW5TdHJlYW0gKnBUb2s7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAgICAg
IHBUb2sgPSAoVG9rZW5TdHJlYW0gKikgbWFsbG9jKHNpemVvZihUb2tlblN0cmVhbSkpOwotICAg
IGVsc2UKLSAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSopbWVtX0FsbG9jKHBvb2wsIHNpemVv
ZihUb2tlblN0cmVhbSkpOwotICAgIHBUb2stPm5leHQgPSBOVUxMOwotICAgIHBUb2stPm5hbWUg
PSBpZHN0cihuYW1lLCBwb29sKTsKLSAgICBwVG9rLT5oZWFkID0gTlVMTDsKLSAgICBwVG9rLT5j
dXJyZW50ID0gTlVMTDsKLSAgICBsTmV3QmxvY2socFRvaywgcG9vbCk7Ci0gICAgcmV0dXJuIHBU
b2s7Ci19IC8vIE5ld1Rva2VuU3RyZWFtCi0KLS8qCi0gKiBEZWxldGVUb2tlblN0cmVhbSgpCi0g
KgotICovCi0KLXZvaWQgRGVsZXRlVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spCi17Ci0g
ICAgVG9rZW5CbG9jayAqcEJsb2NrLCAqbkJsb2NrOwotCi0gICAgaWYgKHBUb2spIHsKLSAgICAg
ICAgcEJsb2NrID0gcFRvay0+aGVhZDsKLSAgICAgICAgd2hpbGUgKHBCbG9jaykgewotICAgICAg
ICAgICAgbkJsb2NrID0gcEJsb2NrLT5uZXh0OwotICAgICAgICAgICAgZnJlZShwQmxvY2spOwot
ICAgICAgICAgICAgcEJsb2NrID0gbkJsb2NrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwVG9r
LT5uYW1lKQotICAgICAgICAgICAgZnJlZShwVG9rLT5uYW1lKTsKLSAgICAgICAgZnJlZShwVG9r
KTsKLSAgICB9Ci19IC8vIERlbGV0ZVRva2VuU3RyZWFtCi0KLS8qCi0gKiBSZWNvcmRUb2tlbigp
IC0gQWRkIGEgdG9rZW4gdG8gdGhlIGVuZCBvZiBhIGxpc3QgZm9yIGxhdGVyIHBsYXliYWNrIG9y
IHByaW50b3V0LgotICoKLSAqLwotCi12b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFtICpwVG9r
LCBpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGNvbnN0IGNoYXIgKnM7
Ci0gICAgY2hhciAqc3RyPU5VTEw7Ci0KLSAgICBpZiAodG9rZW4gPiAyNTYpCi0gICAgICAgIGxB
ZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSgodG9rZW4gJiAweDdmKSArIDB4ODApKTsKLSAg
ICBlbHNlCi0gICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSh0b2tlbiAmIDB4
N2YpKTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAg
ICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKLSAgICBjYXNlIENQUF9TVFJDT05TVEFOVDoKLSAg
ICAgICAgcyA9IEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpOwotICAg
ICAgICB3aGlsZSAoKnMpCi0gICAgICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hh
cikgKnMrKyk7Ci0gICAgICAgIGxBZGRCeXRlKHBUb2ssIDApOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgotICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgotICAg
ICAgICAgc3RyPXl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKLSAgICAgICAgIHdoaWxlICgqc3RyKXsK
LSAgICAgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSAqc3RyKyspOwotICAg
ICAgICAgfQotICAgICAgICAgbEFkZEJ5dGUocFRvaywgMCk7Ci0gICAgICAgICBicmVhazsKLSAg
ICBjYXNlICcoJzoKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKHl5bHZh
bHBwLT5zY19pbnQgPyAxIDogMCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLX0gLy8gUmVjb3JkVG9rZW4KLQotLyoKLSAqIFJld2luZFRva2VuU3RyZWFtKCkgLSBSZXNl
dCBhIHRva2VuIHN0cmVhbSBpbiBwcmVwZXJhdGlvbiBmb3IgcmVhZGluZy4KLSAqCi0gKi8KLQot
dm9pZCBSZXdpbmRUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvaykKLXsKLSAgICBpZiAocFRv
ay0+aGVhZCkgewotICAgICAgICBwVG9rLT5jdXJyZW50ID0gcFRvay0+aGVhZDsKLSAgICAgICAg
cFRvay0+Y3VycmVudC0+Y3VycmVudCA9IDA7Ci0gICAgfQotfSAvLyBSZXdpbmRUb2tlblN0cmVh
bQotCi0vKgotICogUmVhZFRva2VuKCkgLSBSZWFkIHRoZSBuZXh0IHRva2VuIGZyb20gYSBzdHJl
YW0uCi0gKgotICovCi0KLWludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKQotewotICAgIGNoYXIgc3ltYm9sX25hbWVbTUFYX1NZTUJPTF9OQU1FX0xF
TiArIDFdOwotICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOwotICAgIGlu
dCBsdG9rZW4sIGxlbjsKLSAgICBjaGFyIGNoOwotICAgIGludCBiYXNlLCBhY2N1bTsKLSAgICBj
aGFyIGNoX3ZhbDsKLQotICAgIGx0b2tlbiA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICBpZiAobHRv
a2VuID49IDApIHsKLSAgICAgICAgaWYgKGx0b2tlbiA+IDEyNykKLSAgICAgICAgICAgIGx0b2tl
biArPSAxMjg7Ci0gICAgICAgIHN3aXRjaCAobHRva2VuKSB7Ci0gICAgICAgIGNhc2UgQ1BQX0lE
RU5USUZJRVI6Ci0gICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAg
bGVuID0gMDsKLSAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAg
d2hpbGUgKChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fAotICAgICAgICAgICAgICAgICAgICAg
KGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoY2ggPj0g
JzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xF
TikgewotICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKLSAgICAg
ICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAg
ICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRl
bnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ1BQX0lERU5USUZJRVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
UFBfU1RSQ09OU1RBTlQ6Ci0gICAgICAgICAgICBsZW4gPSAwOwotICAgICAgICAgICAgd2hpbGUg
KChjaCA9IGxSZWFkQnl0ZShwVG9rKSkgIT0gMCkKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwg
TUFYX1NUUklOR19MRU4pCi0gICAgICAgICAgICAgICAgICAgIHN0cmluZ192YWxbbGVuKytdID0g
Y2g7Ci0gICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgeXls
dmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKLSAgICAg
ICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAg
ICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyl8fChjaD09J2UnfHxjaD09J0Un
fHxjaD09Jy4nKXx8KGNoPT0nKyd8fGNoPT0nLScpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBjaCA9IGxS
ZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGFzc2VydChjaCA9PSAn
XDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25h
bWUpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2Z2YWw9KGZsb2F0KWF0b2ZfZG90KHl5bHZh
bHBwLT5zeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFBf
SU5UQ09OU1RBTlQ6Ci0gICAgICAgICAgICBsZW4gPSAwOwotCSAgICBhY2N1bSA9IDA7Ci0gICAg
ICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnMCcp
IHsKLSAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKLSAgICAgICAgICAg
ICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ3gn
IHx8IGNoID09ICdYJykgewotICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10g
PSBjaDsKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2OwotICAgICAgICAgICAgICAgICAg
ICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBiYXNlID0gODsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgd2hpbGUgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY2hfdmFsID0gLTE7Ci0gICAgICAgICAgICAgICAgaWYgKGlzZGln
aXQoY2gpKQotICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSBjaCAtICcwJzsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChpc3hkaWdpdChjaCkpCi0gICAgICAgICAgICAgICAgICAgIGNoX3Zh
bCA9IHRvbG93ZXIoY2gpIC0gJ2EnICsgMTA7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2hfdmFs
IDwgMCB8fCBjaF92YWwgPj0gYmFzZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKLSAgICAgICAgICAgICAgICBh
Y2N1bSA9IGFjY3VtICogYmFzZSArIGNoX3ZhbDsKLSAgICAgICAgICAgICAgICBjaCA9IGxSZWFk
Qnl0ZShwVG9rKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0g
PSAnXDAnOwotICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdcMCcpOwotICAgICAgICAgICAgc3Ry
Y3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgeXls
dmFscHAtPnNjX2ludCA9IGFjY3VtOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
JygnOgotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsdG9rZW47Ci0gICAg
fQotICAgIHJldHVybiBFT0ZfU1k7Ci19IC8vIFJlYWRUb2tlbgotCi10eXBlZGVmIHN0cnVjdCBU
b2tlbklucHV0U3JjIHsKLSAgICBJbnB1dFNyYyAgICAgICAgICAgIGJhc2U7Ci0gICAgVG9rZW5T
dHJlYW0gICAgICAgICAqdG9rZW5zOwotICAgIGludCAgICAgICAgICAgICAgICAgKCpmaW5hbCko
Q1BQU3RydWN0ICopOwotfSBUb2tlbklucHV0U3JjOwotCi1zdGF0aWMgaW50IHNjYW5fdG9rZW4o
VG9rZW5JbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tl
biA9IFJlYWRUb2tlbihpbi0+dG9rZW5zLCB5eWx2YWxwcCk7Ci0gICAgaW50ICgqZmluYWwpKENQ
UFN0cnVjdCAqKTsKLSAgICBjcHAtPnRva2VuTG9jLT5maWxlID0gY3BwLT5jdXJyZW50SW5wdXQt
Pm5hbWU7Ci0gICAgY3BwLT50b2tlbkxvYy0+bGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5l
OwotICAgIGlmICh0b2tlbiA9PSAnXG4nKSB7Ci0gICAgICAgIGluLT5iYXNlLmxpbmUrKzsKLSAg
ICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLSAgICBpZiAodG9rZW4gPiAwKSByZXR1cm4gdG9r
ZW47Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2OwotICAgIGZpbmFsID0g
aW4tPmZpbmFsOwotICAgIGZyZWUoaW4pOwotICAgIGlmIChmaW5hbCAmJiAhZmluYWwoY3BwKSkg
cmV0dXJuIC0xOwotICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotfQotCi1pbnQgUmVhZEZyb21Ub2tlblN0cmVhbShUb2tlblN0
cmVhbSAqdHMsIGludCBuYW1lLCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKQotewotICAgIFRv
a2VuSW5wdXRTcmMgKmluID0gbWFsbG9jKHNpemVvZihUb2tlbklucHV0U3JjKSk7Ci0gICAgbWVt
c2V0KGluLCAwLCBzaXplb2YoVG9rZW5JbnB1dFNyYykpOwotICAgIGluLT5iYXNlLm5hbWUgPSBu
YW1lOwotICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAgICBpbi0+YmFz
ZS5zY2FuID0gKGludCAoKikoSW5wdXRTcmMgKiwgeXlzdHlwZXBwICopKXNjYW5fdG9rZW47Ci0g
ICAgaW4tPmJhc2UubGluZSA9IDE7Ci0gICAgaW4tPnRva2VucyA9IHRzOwotICAgIGluLT5maW5h
bCA9IGZpbmFsOwotICAgIFJld2luZFRva2VuU3RyZWFtKHRzKTsKLSAgICBjcHAtPmN1cnJlbnRJ
bnB1dCA9ICZpbi0+YmFzZTsKLSAgICByZXR1cm4gMTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgVW5n
b3RUb2tlbiB7Ci0gICAgSW5wdXRTcmMgICAgYmFzZTsKLSAgICBpbnQgICAgICAgICB0b2tlbjsK
LSAgICB5eXN0eXBlcHAgICAgIGx2YWw7Ci19IFVuZ290VG9rZW47Ci0KLXN0YXRpYyBpbnQgcmVn
ZXRfdG9rZW4oVW5nb3RUb2tlbiAqdCwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50
IHRva2VuID0gdC0+dG9rZW47Ci0gICAgKnl5bHZhbHBwID0gdC0+bHZhbDsKLSAgICBjcHAtPmN1
cnJlbnRJbnB1dCA9IHQtPmJhc2UucHJldjsKLSAgICBmcmVlKHQpOwotICAgIHJldHVybiB0b2tl
bjsKLX0KLQotdm9pZCBVbmdldFRva2VuKGludCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHAp
IHsKLSAgICBVbmdvdFRva2VuICp0ID0gbWFsbG9jKHNpemVvZihVbmdvdFRva2VuKSk7Ci0gICAg
bWVtc2V0KHQsIDAsIHNpemVvZihVbmdvdFRva2VuKSk7Ci0gICAgdC0+dG9rZW4gPSB0b2tlbjsK
LSAgICB0LT5sdmFsID0gKnl5bHZhbHBwOwotICAgIHQtPmJhc2Uuc2NhbiA9ICh2b2lkICopcmVn
ZXRfdG9rZW47Ci0gICAgdC0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgdC0+
YmFzZS5uYW1lID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7Ci0gICAgdC0+YmFzZS5saW5lID0g
Y3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmdC0+YmFz
ZTsKLX0KLQotCi12b2lkIER1bXBUb2tlblN0cmVhbShGSUxFICpmcCwgVG9rZW5TdHJlYW0gKnMs
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IHRva2VuOwotICAgIGNoYXIgc3RyWzEw
MF07Ci0KLSAgICBpZiAoZnAgPT0gMCkgZnAgPSBzdGRvdXQ7Ci0gICAgUmV3aW5kVG9rZW5TdHJl
YW0ocyk7Ci0gICAgd2hpbGUgKCh0b2tlbiA9IFJlYWRUb2tlbihzLCB5eWx2YWxwcCkpID4gMCkg
ewotICAgICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6
Ci0gICAgICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgotICAgICAgICAgICAgc25wcmludGYo
c3RyLCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+
c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9TVFJDT05T
VEFOVDoKLSAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJcIiVzXCIiLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKLSAgICAgICAgICAgIC8vcHJp
bnRmKCIlZzkuNiAiLCB5eWx2YWxwcC0+c2NfZnZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6Ci0gICAgICAgICAgICAvL3ByaW50ZigiJWQgIiwg
eXlsdmFscHAtPnNjX2ludCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGlmICh0b2tlbiA+PSAxMjcpCi0gICAgICAgICAgICAgICAgc25wcmludGYo
c3RyLCBzaXplb2Yoc3RyKSwgIiVzICIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB0b2tlbikpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0
ciksICIlYyIsIHRva2VuKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IENQUERlYnVnTG9nTXNnKHN0cik7Ci0gICAgfQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
IEVuZCBvZiB0b2tlbnMuYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJmNGEyYy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5o
CisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1D
b3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0
aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1
c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlz
IE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4g
IElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNl
LCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4K
LQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMg
eW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNv
cHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBT
b2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhl
Ci1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3Vy
Y2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0
ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90
aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRp
c2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3
YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9n
b3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4
cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNl
cwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNs
dWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBp
bmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3
aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2Fy
ZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5H
IFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElO
RyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwK
LU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElO
IENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBO
VklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBF
WEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RV
Q1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNP
RlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJB
Q1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RI
RVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyB0b2tlbnMu
aAotLy8KLQotI2lmICFkZWZpbmVkKF9fVE9LRU5TX0gpCi0jZGVmaW5lIF9fVE9LRU5TX0ggMQot
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFy
c2VyLmgiCi0KLSNkZWZpbmUgRU9GX1NZICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgVG9rZW5CbG9j
a19SZWMgVG9rZW5CbG9jazsKLQotdHlwZWRlZiBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVjIHsKLSAg
ICBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVjICpuZXh0OwotICAgIGNoYXIgKm5hbWU7Ci0gICAgVG9r
ZW5CbG9jayAqaGVhZDsKLSAgICBUb2tlbkJsb2NrICpjdXJyZW50OwotfSBUb2tlblN0cmVhbTsK
LQotc3RydWN0IFRva2VuQmxvY2tfUmVjIHsKLSAgICBUb2tlbkJsb2NrICpuZXh0OwotICAgIGlu
dCBjdXJyZW50OwotICAgIGludCBjb3VudDsKLSAgICBpbnQgbWF4OwotICAgIHVuc2lnbmVkIGNo
YXIgKmRhdGE7Ci19OwotCi1leHRlcm4gVG9rZW5TdHJlYW0gc3RkbGliX2NwcF9zdHJlYW07Ci0K
LQotVG9rZW5TdHJlYW0gKk5ld1Rva2VuU3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIE1lbW9yeVBv
b2wgKnBvb2wpOwotdm9pZCBEZWxldGVUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvayk7IAot
dm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50IHRva2VuLCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCk7Ci12b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsK
LWludCBSZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsK
LWludCBSZWFkRnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgbmFtZSwgaW50
ICgqZmluYWwpKENQUFN0cnVjdCAqKSk7Ci12b2lkIFVuZ2V0VG9rZW4oaW50LCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCk7Ci0KLSNpZiBkZWZpbmVkKENQUENfRU5BQkxFX1RPT0xTKQotCi12b2lkIER1
bXBUb2tlblN0cmVhbShGSUxFICosIFRva2VuU3RyZWFtICosIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KTsKLQotI2VuZGlmIC8vIGRlZmluZWQoQ1BQQ19FTkFCTEVfVE9PTFMpCi0KLSNlbmRpZiAvLyAh
ZGVmaW5lZChfX1RPS0VOU19IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9Db25maWcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9Db25maWcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJjOGQ4Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDM5OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBD
b25maWcuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0
aGUgZm9ybWF0LCB0eXBlCi0vLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1l
bnRzIEVHTENvbmZpZyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgotLy8gW0VHTCAxLjRdIHNl
Y3Rpb24gMy40IHBhZ2UgMTUuCi0KLSNpbmNsdWRlICJsaWJFR0wvQ29uZmlnLmgiCi0KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLUNvbmZp
Zzo6Q29uZmlnKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluSW50ZXJ2YWws
IEVHTGludCBtYXhJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9S
TUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lk
dGgsIEVHTGludCB0ZXhIZWlnaHQpCi0gICAgOiBtRGlzcGxheU1vZGUoZGlzcGxheU1vZGUpLCBt
UmVuZGVyVGFyZ2V0Rm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCksIG1EZXB0aFN0ZW5jaWxGb3Jt
YXQoZGVwdGhTdGVuY2lsRm9ybWF0KSwgbU11bHRpU2FtcGxlKG11bHRpU2FtcGxlKQotewotICAg
IHNldChkaXNwbGF5TW9kZSwgbWluSW50ZXJ2YWwsIG1heEludGVydmFsLCByZW5kZXJUYXJnZXRG
b3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUsIHRleFdpZHRoLCB0ZXhIZWln
aHQpOwotfQotCi12b2lkIENvbmZpZzo6c2V0RGVmYXVsdHMoKQotewotICAgIG1CdWZmZXJTaXpl
ID0gMDsKLSAgICBtUmVkU2l6ZSA9IDA7Ci0gICAgbUdyZWVuU2l6ZSA9IDA7Ci0gICAgbUJsdWVT
aXplID0gMDsKLSAgICBtTHVtaW5hbmNlU2l6ZSA9IDA7Ci0gICAgbUFscGhhU2l6ZSA9IDA7Ci0g
ICAgbUFscGhhTWFza1NpemUgPSAwOwotICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gRUdMX0RPTlRf
Q0FSRTsKLSAgICBtQmluZFRvVGV4dHVyZVJHQkEgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1Db2xv
ckJ1ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsKLSAgICBtQ29uZmlnQ2F2ZWF0ID0gRUdMX0RP
TlRfQ0FSRTsKLSAgICBtQ29uZmlnSUQgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1Db25mb3JtYW50
ID0gMDsKLSAgICBtRGVwdGhTaXplID0gMDsKLSAgICBtTGV2ZWwgPSAwOwotICAgIG1NYXRjaE5h
dGl2ZVBpeG1hcCA9IEVHTF9OT05FOwotICAgIG1NYXhQQnVmZmVyV2lkdGggPSAwOwotICAgIG1N
YXhQQnVmZmVySGVpZ2h0ID0gMDsKLSAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IDA7Ci0gICAgbU1h
eFN3YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbU1pblN3YXBJbnRlcnZhbCA9IEVH
TF9ET05UX0NBUkU7Ci0gICAgbU5hdGl2ZVJlbmRlcmFibGUgPSBFR0xfRE9OVF9DQVJFOwotICAg
IG1OYXRpdmVWaXN1YWxJRCA9IDA7Ci0gICAgbU5hdGl2ZVZpc3VhbFR5cGUgPSBFR0xfRE9OVF9D
QVJFOwotICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVNfQklUOwotICAgIG1TYW1w
bGVCdWZmZXJzID0gMDsKLSAgICBtU2FtcGxlcyA9IDA7Ci0gICAgbVN0ZW5jaWxTaXplID0gMDsK
LSAgICBtU3VyZmFjZVR5cGUgPSBFR0xfV0lORE9XX0JJVDsKLSAgICBtVHJhbnNwYXJlbnRUeXBl
ID0gRUdMX05PTkU7Ci0gICAgbVRyYW5zcGFyZW50UmVkVmFsdWUgPSBFR0xfRE9OVF9DQVJFOwot
ICAgIG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1UcmFuc3Bh
cmVudEJsdWVWYWx1ZSA9IEVHTF9ET05UX0NBUkU7Ci19Ci0KLXZvaWQgQ29uZmlnOjpzZXQoRDNE
RElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heElu
dGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRl
eEhlaWdodCkKLXsKLSAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVHTF9GQUxTRTsKLSAgICBtQmlu
ZFRvVGV4dHVyZVJHQkEgPSBFR0xfRkFMU0U7Ci0gICAgc3dpdGNoIChyZW5kZXJUYXJnZXRGb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIG1CdWZmZXJT
aXplID0gMTY7Ci0gICAgICAgIG1SZWRTaXplID0gNTsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDU7
Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDU7Ci0gICAgICAgIG1BbHBoYVNpemUgPSAxOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICBtQnVmZmVy
U2l6ZSA9IDMyOwotICAgICAgICBtUmVkU2l6ZSA9IDEwOwotICAgICAgICBtR3JlZW5TaXplID0g
MTA7Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDEwOwotICAgICAgICBtQWxwaGFTaXplID0gMjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgbUJ1ZmZl
clNpemUgPSAzMjsKLSAgICAgICAgbVJlZFNpemUgPSA4OwotICAgICAgICBtR3JlZW5TaXplID0g
ODsKLSAgICAgICAgbUJsdWVTaXplID0gODsKLSAgICAgICAgbUFscGhhU2l6ZSA9IDg7Ci0gICAg
ICAgIG1CaW5kVG9UZXh0dXJlUkdCQSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDE2OwotICAgICAgICBtUmVk
U2l6ZSA9IDU7Ci0gICAgICAgIG1HcmVlblNpemUgPSA2OwotICAgICAgICBtQmx1ZVNpemUgPSA1
OwotICAgICAgICBtQWxwaGFTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAzMjsKLSAgICAgICAgbVJlZFNp
emUgPSA4OwotICAgICAgICBtR3JlZW5TaXplID0gODsKLSAgICAgICAgbUJsdWVTaXplID0gODsK
LSAgICAgICAgbUFscGhhU2l6ZSA9IDA7Ci0gICAgICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OyAgIC8vIE90aGVyIGZvcm1hdHMgc2hvdWxkIG5vdCBiZSB2YWxpZAotICAgIH0KLQotICAgIG1M
dW1pbmFuY2VTaXplID0gMDsKLSAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7Ci0gICAgbUNvbG9yQnVm
ZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVSOwotICAgIG1Db25maWdDYXZlYXQgPSAoZGlzcGxheU1v
ZGUuRm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCkgPyBFR0xfTk9ORSA6IEVHTF9TTE9XX0NP
TkZJRzsKLSAgICBtQ29uZmlnSUQgPSAwOwotICAgIG1Db25mb3JtYW50ID0gRUdMX09QRU5HTF9F
UzJfQklUOwotCi0gICAgc3dpdGNoIChkZXB0aFN0ZW5jaWxGb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEM0RGTVRfVU5LTk9XTjoKLSAgICAgICAgbURlcHRoU2l6ZSA9IDA7Ci0gICAgICAgIG1T
dGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotLy8gICAgY2FzZSBEM0RGTVRfRDE2X0xP
Q0tBQkxFOgotLy8gICAgICBtRGVwdGhTaXplID0gMTY7Ci0vLyAgICAgIG1TdGVuY2lsU2l6ZSA9
IDA7Ci0vLyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfRDMyOgotICAgICAgICBtRGVw
dGhTaXplID0gMzI7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAxNTsKLSAgICAg
ICAgbVN0ZW5jaWxTaXplID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9E
MjRTODoKLSAgICAgICAgbURlcHRoU2l6ZSA9IDI0OwotICAgICAgICBtU3RlbmNpbFNpemUgPSA4
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICBtRGVw
dGhTaXplID0gMjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKLSAgICAgICAgbURlcHRoU2l6ZSA9IDI0OwotICAg
ICAgICBtU3RlbmNpbFNpemUgPSA0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1U
X0QxNjoKLSAgICAgICAgbURlcHRoU2l6ZSA9IDE2OwotICAgICAgICBtU3RlbmNpbFNpemUgPSAw
OwotICAgICAgICBicmVhazsKLS8vICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6Ci0vLyAg
ICAgIG1EZXB0aFNpemUgPSAzMjsKLS8vICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLS8vICAgICAg
YnJlYWs7Ci0vLyAgICBjYXNlIEQzREZNVF9EMjRGUzg6Ci0vLyAgICAgIG1EZXB0aFNpemUgPSAy
NDsKLS8vICAgICAgbVN0ZW5jaWxTaXplID0gODsKLS8vICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIG1MZXZlbCA9IDA7Ci0g
ICAgbU1hdGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7Ci0gICAgbU1heFBCdWZmZXJXaWR0aCA9
IHRleFdpZHRoOwotICAgIG1NYXhQQnVmZmVySGVpZ2h0ID0gdGV4SGVpZ2h0OwotICAgIG1NYXhQ
QnVmZmVyUGl4ZWxzID0gdGV4V2lkdGgqdGV4SGVpZ2h0OwotICAgIG1NYXhTd2FwSW50ZXJ2YWwg
PSBtYXhJbnRlcnZhbDsKLSAgICBtTWluU3dhcEludGVydmFsID0gbWluSW50ZXJ2YWw7Ci0gICAg
bU5hdGl2ZVJlbmRlcmFibGUgPSBFR0xfRkFMU0U7Ci0gICAgbU5hdGl2ZVZpc3VhbElEID0gMDsK
LSAgICBtTmF0aXZlVmlzdWFsVHlwZSA9IDA7Ci0gICAgbVJlbmRlcmFibGVUeXBlID0gRUdMX09Q
RU5HTF9FUzJfQklUOwotICAgIG1TYW1wbGVCdWZmZXJzID0gbXVsdGlTYW1wbGUgPyAxIDogMDsK
LSAgICBtU2FtcGxlcyA9IG11bHRpU2FtcGxlOwotICAgIG1TdXJmYWNlVHlwZSA9IEVHTF9QQlVG
RkVSX0JJVCB8IEVHTF9XSU5ET1dfQklUIHwgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJ
VDsKLSAgICBtVHJhbnNwYXJlbnRUeXBlID0gRUdMX05PTkU7Ci0gICAgbVRyYW5zcGFyZW50UmVk
VmFsdWUgPSAwOwotICAgIG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSAwOwotICAgIG1UcmFuc3Bh
cmVudEJsdWVWYWx1ZSA9IDA7Ci19Ci0KLUVHTENvbmZpZyBDb25maWc6OmdldEhhbmRsZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIChFR0xDb25maWcpKHNpemVfdCltQ29uZmlnSUQ7Ci19Ci0KLVNv
cnRDb25maWc6OlNvcnRDb25maWcoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQotICAgIDogbVdh
bnRSZWQoZmFsc2UpLCBtV2FudEdyZWVuKGZhbHNlKSwgbVdhbnRCbHVlKGZhbHNlKSwgbVdhbnRB
bHBoYShmYWxzZSksIG1XYW50THVtaW5hbmNlKGZhbHNlKQotewotICAgIHNjYW5Gb3JXYW50ZWRD
b21wb25lbnRzKGF0dHJpYkxpc3QpOwotfQotCi12b2lkIFNvcnRDb25maWc6OnNjYW5Gb3JXYW50
ZWRDb21wb25lbnRzKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKLXsKLSAgICAvLyBbRUdMXSBz
ZWN0aW9uIDMuNC4xIHBhZ2UgMjQKLSAgICAvLyBTb3J0aW5nIHJ1bGUgIzM6IGJ5IGxhcmdlciB0
b3RhbCBudW1iZXIgb2YgY29sb3IgYml0cywgbm90IGNvbnNpZGVyaW5nCi0gICAgLy8gY29tcG9u
ZW50cyB0aGF0IGFyZSAwIG9yIGRvbid0LWNhcmUuCi0gICAgZm9yIChjb25zdCBFR0xpbnQgKmF0
dHIgPSBhdHRyaWJMaXN0OyBhdHRyWzBdICE9IEVHTF9OT05FOyBhdHRyICs9IDIpCi0gICAgewot
ICAgICAgICBpZiAoYXR0clsxXSAhPSAwICYmIGF0dHJbMV0gIT0gRUdMX0RPTlRfQ0FSRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChhdHRyWzBdKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgbVdhbnRSZWQgPSB0cnVlOyBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgIG1XYW50R3JlZW4gPSB0
cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAgIG1XYW50
Qmx1ZSA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAg
ICAgbVdhbnRBbHBoYSA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1J
TkFOQ0VfU0laRTogbVdhbnRMdW1pbmFuY2UgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLX0KLQotRUdMaW50IFNvcnRDb25maWc6OndhbnRlZENvbXBvbmVu
dHNTaXplKGNvbnN0IENvbmZpZyAmY29uZmlnKSBjb25zdAotewotICAgIEVHTGludCB0b3RhbCA9
IDA7Ci0KLSAgICBpZiAobVdhbnRSZWQpICAgICAgIHRvdGFsICs9IGNvbmZpZy5tUmVkU2l6ZTsK
LSAgICBpZiAobVdhbnRHcmVlbikgICAgIHRvdGFsICs9IGNvbmZpZy5tR3JlZW5TaXplOwotICAg
IGlmIChtV2FudEJsdWUpICAgICAgdG90YWwgKz0gY29uZmlnLm1CbHVlU2l6ZTsKLSAgICBpZiAo
bVdhbnRBbHBoYSkgICAgIHRvdGFsICs9IGNvbmZpZy5tQWxwaGFTaXplOwotICAgIGlmIChtV2Fu
dEx1bWluYW5jZSkgdG90YWwgKz0gY29uZmlnLm1MdW1pbmFuY2VTaXplOwotCi0gICAgcmV0dXJu
IHRvdGFsOwotfQotCi1ib29sIFNvcnRDb25maWc6Om9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICp4
LCBjb25zdCBDb25maWcgKnkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICgqdGhpcykoKngsICp5KTsK
LX0KLQotYm9vbCBTb3J0Q29uZmlnOjpvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAmeCwgY29uc3Qg
Q29uZmlnICZ5KSBjb25zdAotewotICAgICNkZWZpbmUgU09SVChhdHRyaWJ1dGUpICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoeC5hdHRyaWJ1dGUgIT0geS5hdHRyaWJ1dGUp
ICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJuIHguYXR0cmlidXRlIDwgeS5hdHRyaWJ1dGU7
ICAgICAgXAotICAgICAgICB9Ci0KLSAgICBNRVRBX0FTU0VSVChFR0xfTk9ORSA8IEVHTF9TTE9X
X0NPTkZJRyAmJiBFR0xfU0xPV19DT05GSUcgPCBFR0xfTk9OX0NPTkZPUk1BTlRfQ09ORklHKTsK
LSAgICBTT1JUKG1Db25maWdDYXZlYXQpOwotCi0gICAgTUVUQV9BU1NFUlQoRUdMX1JHQl9CVUZG
RVIgPCBFR0xfTFVNSU5BTkNFX0JVRkZFUik7Ci0gICAgU09SVChtQ29sb3JCdWZmZXJUeXBlKTsK
LQotICAgIC8vIEJ5IGxhcmdlciB0b3RhbCBudW1iZXIgb2YgY29sb3IgYml0cywgb25seSBjb25z
aWRlcmluZyB0aG9zZSB0aGF0IGFyZSByZXF1ZXN0ZWQgdG8gYmUgPiAwLgotICAgIEVHTGludCB4
Q29tcG9uZW50c1NpemUgPSB3YW50ZWRDb21wb25lbnRzU2l6ZSh4KTsKLSAgICBFR0xpbnQgeUNv
bXBvbmVudHNTaXplID0gd2FudGVkQ29tcG9uZW50c1NpemUoeSk7Ci0gICAgaWYgKHhDb21wb25l
bnRzU2l6ZSAhPSB5Q29tcG9uZW50c1NpemUpCi0gICAgewotICAgICAgICByZXR1cm4geENvbXBv
bmVudHNTaXplID4geUNvbXBvbmVudHNTaXplOwotICAgIH0KLQotICAgIFNPUlQobUJ1ZmZlclNp
emUpOwotICAgIFNPUlQobVNhbXBsZUJ1ZmZlcnMpOwotICAgIFNPUlQobVNhbXBsZXMpOwotICAg
IFNPUlQobURlcHRoU2l6ZSk7Ci0gICAgU09SVChtU3RlbmNpbFNpemUpOwotICAgIFNPUlQobUFs
cGhhTWFza1NpemUpOwotICAgIFNPUlQobU5hdGl2ZVZpc3VhbFR5cGUpOwotICAgIFNPUlQobUNv
bmZpZ0lEKTsKLQotICAgICN1bmRlZiBTT1JUCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8v
IFdlJ2QgbGlrZSB0byB1c2UgU29ydENvbmZpZyB0byBhbHNvIGVsaW1pbmF0ZSBkdXBsaWNhdGUg
Y29uZmlncy4KLS8vIFRoaXMgd29ya3MgYXMgbG9uZyBhcyB3ZSBuZXZlciBoYXZlIHR3byBjb25m
aWdzIHdpdGggZGlmZmVyZW50IHBlci1SR0ItY29tcG9uZW50IGxheW91dHMsCi0vLyBidXQgdGhl
IHNhbWUgdG90YWwuCi0vLyA1NTUxIGFuZCA1NjUgYXJlIGRpZmZlcmVudCBiZWNhdXNlIFIrRytC
IGlzIGRpZmZlcmVudC4KLS8vIDU1NTEgYW5kIDU1NSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgYnVm
ZmVyU2l6ZSBpcyBkaWZmZXJlbnQuCi1jb25zdCBFR0xpbnQgQ29uZmlnU2V0OjptU29ydEF0dHJp
YnNbXSA9Ci17Ci0gICAgRUdMX1JFRF9TSVpFLCAxLAotICAgIEVHTF9HUkVFTl9TSVpFLCAxLAot
ICAgIEVHTF9CTFVFX1NJWkUsIDEsCi0gICAgRUdMX0xVTUlOQU5DRV9TSVpFLCAxLAotICAgIC8v
IEJVVCBOT1QgQUxQSEEKLSAgICBFR0xfTk9ORQotfTsKLQotQ29uZmlnU2V0OjpDb25maWdTZXQo
KQotICAgIDogbVNldChTb3J0Q29uZmlnKG1Tb3J0QXR0cmlicykpCi17Ci19Ci0KLXZvaWQgQ29u
ZmlnU2V0OjphZGQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50
ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3Jt
YXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdM
aW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KQotewotICAgIENvbmZpZyBjb25maWcoZGlz
cGxheU1vZGUsIG1pblN3YXBJbnRlcnZhbCwgbWF4U3dhcEludGVydmFsLCByZW5kZXJUYXJnZXRG
b3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUsIHRleFdpZHRoLCB0ZXhIZWln
aHQpOwotCi0gICAgbVNldC5pbnNlcnQoY29uZmlnKTsKLX0KLQotc2l6ZV90IENvbmZpZ1NldDo6
c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXQuc2l6ZSgpOwotfQotCi1ib29sIENvbmZp
Z1NldDo6Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmli
TGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQotewotICAgIHZlY3Rv
cjxjb25zdCBDb25maWcqPiBwYXNzZWQ7Ci0gICAgcGFzc2VkLnJlc2VydmUobVNldC5zaXplKCkp
OwotCi0gICAgZm9yIChJdGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBt
U2V0LmVuZCgpOyBjb25maWcrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVlOwot
ICAgICAgICBjb25zdCBFR0xpbnQgKmF0dHJpYnV0ZSA9IGF0dHJpYkxpc3Q7Ci0KLSAgICAgICAg
d2hpbGUgKGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAg
c3dpdGNoIChhdHRyaWJ1dGVbMF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
RUdMX0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQnVmZmVyU2l6
ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+
bUFscGhhU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAgICAgICAgICAgICAgbWF0Y2gg
PSBjb25maWctPm1CbHVlU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAgICAgICAg
ICAgIG1hdGNoID0gY29uZmlnLT5tR3JlZW5TaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9SRURfU0laRTogICAg
ICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bVJlZFNpemUgPj0gYXR0cmlidXRlWzFdOyAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfREVQ
VEhfU0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1EZXB0aFNpemUgPj0gYXR0
cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRUdMX1NURU5DSUxfU0laRTogICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU3RlbmNp
bFNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEVHTF9DT05GSUdfQ0FWRUFUOiAgICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUNvbmZpZ0NhdmVhdCA9PSAoRUdMZW51bSkgYXR0cmlidXRlWzFdOyAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1Db25maWdJRCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0xFVkVMOiAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tTGV2ZWwgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfUkVO
REVSQUJMRTogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVJlbmRlcmFibGUgPT0gKEVH
TEJvb2xlYW4pIGF0dHJpYnV0ZVsxXTsgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xf
TkFUSVZFX1ZJU1VBTF9UWVBFOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1OYXRpdmVWaXN1YWxU
eXBlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2Ft
cGxlcyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bVNhbXBsZUJ1ZmZlcnMgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU1VSRkFDRV9UWVBFOiAgICAgICAgICAgICAg
bWF0Y2ggPSAoY29uZmlnLT5tU3VyZmFjZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0
ZVsxXTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6
ICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRUeXBlID09IChFR0xlbnVtKSBh
dHRyaWJ1dGVbMV07ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BB
UkVOVF9CTFVFX1ZBTFVFOiAgICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50Qmx1ZVZhbHVl
ID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
R0xfVFJBTlNQQVJFTlRfR1JFRU5fVkFMVUU6ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVu
dEdyZWVuVmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRTogICAgIG1hdGNoID0gY29uZmlnLT5t
VHJhbnNwYXJlbnRSZWRWYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCOiAgICAgICBtYXRjaCA9
IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVSR0IgPT0gKEVHTEJvb2xlYW4pIGF0dHJpYnV0ZVsxXTsg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQkE6ICAg
ICAgbWF0Y2ggPSBjb25maWctPm1CaW5kVG9UZXh0dXJlUkdCQSA9PSAoRUdMQm9vbGVhbikgYXR0
cmlidXRlWzFdOyAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01JTl9TV0FQX0lOVEVS
VkFMOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWluU3dhcEludGVydmFsID09IGF0dHJpYnV0
ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhf
U1dBUF9JTlRFUlZBTDogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU1heFN3YXBJbnRlcnZhbCA9
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFR0xfTFVNSU5BTkNFX1NJWkU6ICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MdW1pbmFu
Y2VTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX0FMUEhBX01BU0tfU0laRTogICAgICAgICAgIG1hdGNoID0gY29uZmln
LT5tQWxwaGFNYXNrU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICBtYXRj
aCA9IGNvbmZpZy0+bUNvbG9yQnVmZmVyVHlwZSA9PSAoRUdMZW51bSkgYXR0cmlidXRlWzFdOyAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBFOiAgICAg
ICAgICAgbWF0Y2ggPSAoY29uZmlnLT5tUmVuZGVyYWJsZVR5cGUgJiBhdHRyaWJ1dGVbMV0pID09
IGF0dHJpYnV0ZVsxXTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01BVENIX05BVElW
RV9QSVhNQVA6ICAgICAgIG1hdGNoID0gZmFsc2U7IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9D
T05GT1JNQU5UOiAgICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1Db25mb3JtYW50ICYg
YXR0cmlidXRlWzFdKSA9PSBhdHRyaWJ1dGVbMV07ICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfTUFYX1BCVUZGRVJfV0lEVEg6ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NYXhQ
QnVmZmVyV2lkdGggPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX01BWF9QQlVGRkVSX0hFSUdIVDogICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tTWF4UEJ1ZmZlckhlaWdodCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9QSVhFTFM6ICAgICAgICBt
YXRjaCA9IGNvbmZpZy0+bU1heFBCdWZmZXJQaXhlbHMgPj0gYXR0cmlidXRlWzFdOyAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbWF0Y2gpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGF0dHJpYnV0ZSArPSAyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXNzZWQucHVzaF9iYWNrKCYqY29uZmlnKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb25maWdzKQotICAgIHsKLSAgICAgICAgc29ydChw
YXNzZWQuYmVnaW4oKSwgcGFzc2VkLmVuZCgpLCBTb3J0Q29uZmlnKGF0dHJpYkxpc3QpKTsKLQot
ICAgICAgICBFR0xpbnQgaW5kZXg7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNv
bmZpZ1NpemUgJiYgaW5kZXggPCBzdGF0aWNfY2FzdDxFR0xpbnQ+KHBhc3NlZC5zaXplKCkpOyBp
bmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWdzW2luZGV4XSA9IHBhc3NlZFtp
bmRleF0tPmdldEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgKm51bUNvbmZpZyA9IGlu
ZGV4OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAqbnVtQ29uZmlnID0gcGFzc2Vk
LnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgZWdsOjpDb25m
aWcgKkNvbmZpZ1NldDo6Z2V0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpCi17Ci0gICAgZm9yIChJ
dGVyYXRvciBjb25maWcgPSBtU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBtU2V0LmVuZCgpOyBjb25m
aWcrKykKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWctPmdldEhhbmRsZSgpID09IGNvbmZpZ0hh
bmRsZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICYoKmNvbmZpZyk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML0NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
NTYyNmVkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
Q29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gQ29uZmlnLmg6IERlZmluZXMgdGhlIGVnbDo6Q29uZmlnIGNsYXNzLCBkZXNjcmli
aW5nIHRoZSBmb3JtYXQsIHR5cGUKLS8vIGFuZCBzaXplIGZvciBhbiBlZ2w6OlN1cmZhY2UuIElt
cGxlbWVudHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCi0vLyBbRUdMIDEu
NF0gc2VjdGlvbiAzLjQgcGFnZSAxNS4KLQotI2lmbmRlZiBJTkNMVURFX0NPTkZJR19IXwotI2Rl
ZmluZSBJTkNMVURFX0NPTkZJR19IXwotCi0jZGVmaW5lIEVHTEFQSQotI2luY2x1ZGUgPEVHTC9l
Z2wuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBEaXNwbGF5Owot
Ci1jbGFzcyBDb25maWcKLXsKLSAgcHVibGljOgotICAgIENvbmZpZyhEM0RESVNQTEFZTU9ERSBk
aXNwbGF5TW9kZSwgRUdMaW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZh
bCwgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZv
cm1hdCwgRUdMaW50IG11bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWln
aHQpOwotCi0gICAgdm9pZCBzZXREZWZhdWx0cygpOwotICAgIHZvaWQgc2V0KEQzRERJU1BMQVlN
T0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcElu
dGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRl
eEhlaWdodCk7Ci0gICAgRUdMQ29uZmlnIGdldEhhbmRsZSgpIGNvbnN0OwotCi0gICAgY29uc3Qg
RDNERElTUExBWU1PREUgbURpc3BsYXlNb2RlOwotICAgIGNvbnN0IEQzREZPUk1BVCBtUmVuZGVy
VGFyZ2V0Rm9ybWF0OwotICAgIGNvbnN0IEQzREZPUk1BVCBtRGVwdGhTdGVuY2lsRm9ybWF0Owot
ICAgIGNvbnN0IEVHTGludCBtTXVsdGlTYW1wbGU7Ci0KLSAgICBFR0xpbnQgbUJ1ZmZlclNpemU7
ICAgICAgICAgICAgICAvLyBEZXB0aCBvZiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1S
ZWRTaXplOyAgICAgICAgICAgICAgICAgLy8gQml0cyBvZiBSZWQgaW4gdGhlIGNvbG9yIGJ1ZmZl
cgotICAgIEVHTGludCBtR3JlZW5TaXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgR3JlZW4g
aW4gdGhlIGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtQmx1ZVNpemU7ICAgICAgICAgICAgICAg
IC8vIEJpdHMgb2YgQmx1ZSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1MdW1pbmFu
Y2VTaXplOyAgICAgICAgICAgLy8gQml0cyBvZiBMdW1pbmFuY2UgaW4gdGhlIGNvbG9yIGJ1ZmZl
cgotICAgIEVHTGludCBtQWxwaGFTaXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEg
aW4gdGhlIGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtQWxwaGFNYXNrU2l6ZTsgICAgICAgICAg
IC8vIEJpdHMgb2YgQWxwaGEgTWFzayBpbiB0aGUgbWFzayBidWZmZXIKLSAgICBFR0xCb29sZWFu
IG1CaW5kVG9UZXh0dXJlUkdCOyAgICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRvIFJHQiB0ZXh0dXJl
cy4KLSAgICBFR0xCb29sZWFuIG1CaW5kVG9UZXh0dXJlUkdCQTsgICAvLyBUcnVlIGlmIGJpbmRh
YmxlIHRvIFJHQkEgdGV4dHVyZXMuCi0gICAgRUdMZW51bSBtQ29sb3JCdWZmZXJUeXBlOyAgICAg
ICAgLy8gQ29sb3IgYnVmZmVyIHR5cGUKLSAgICBFR0xlbnVtIG1Db25maWdDYXZlYXQ7ICAgICAg
ICAgICAvLyBBbnkgY2F2ZWF0cyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24KLSAgICBFR0xpbnQgbUNv
bmZpZ0lEOyAgICAgICAgICAgICAgICAvLyBVbmlxdWUgRUdMQ29uZmlnIGlkZW50aWZpZXIKLSAg
ICBFR0xpbnQgbUNvbmZvcm1hbnQ7ICAgICAgICAgICAgICAvLyBXaGV0aGVyIGNvbnRleHRzIGNy
ZWF0ZWQgd2l0aCB0aGlzIGNvbmZpZyBhcmUgY29uZm9ybWFudAotICAgIEVHTGludCBtRGVwdGhT
aXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgWiBpbiB0aGUgZGVwdGggYnVmZmVyCi0gICAg
RUdMaW50IG1MZXZlbDsgICAgICAgICAgICAgICAgICAgLy8gRnJhbWUgYnVmZmVyIGxldmVsCi0g
ICAgRUdMQm9vbGVhbiBtTWF0Y2hOYXRpdmVQaXhtYXA7ICAgLy8gTWF0Y2ggdGhlIG5hdGl2ZSBw
aXhtYXAgZm9ybWF0Ci0gICAgRUdMaW50IG1NYXhQQnVmZmVyV2lkdGg7ICAgICAgICAgLy8gTWF4
aW11bSB3aWR0aCBvZiBwYnVmZmVyCi0gICAgRUdMaW50IG1NYXhQQnVmZmVySGVpZ2h0OyAgICAg
ICAgLy8gTWF4aW11bSBoZWlnaHQgb2YgcGJ1ZmZlcgotICAgIEVHTGludCBtTWF4UEJ1ZmZlclBp
eGVsczsgICAgICAgIC8vIE1heGltdW0gc2l6ZSBvZiBwYnVmZmVyCi0gICAgRUdMaW50IG1NYXhT
d2FwSW50ZXJ2YWw7ICAgICAgICAgLy8gTWF4aW11bSBzd2FwIGludGVydmFsCi0gICAgRUdMaW50
IG1NaW5Td2FwSW50ZXJ2YWw7ICAgICAgICAgLy8gTWluaW11bSBzd2FwIGludGVydmFsCi0gICAg
RUdMQm9vbGVhbiBtTmF0aXZlUmVuZGVyYWJsZTsgICAgLy8gRUdMX1RSVUUgaWYgbmF0aXZlIHJl
bmRlcmluZyBBUElzIGNhbiByZW5kZXIgdG8gc3VyZmFjZQotICAgIEVHTGludCBtTmF0aXZlVmlz
dWFsSUQ7ICAgICAgICAgIC8vIEhhbmRsZSBvZiBjb3JyZXNwb25kaW5nIG5hdGl2ZSB2aXN1YWwK
LSAgICBFR0xpbnQgbU5hdGl2ZVZpc3VhbFR5cGU7ICAgICAgICAvLyBOYXRpdmUgdmlzdWFsIHR5
cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmlzdWFsCi0gICAgRUdMaW50IG1SZW5kZXJhYmxlVHlwZTsg
ICAgICAgICAgLy8gV2hpY2ggY2xpZW50IHJlbmRlcmluZyBBUElzIGFyZSBzdXBwb3J0ZWQuCi0g
ICAgRUdMaW50IG1TYW1wbGVCdWZmZXJzOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIG11bHRpc2Ft
cGxlIGJ1ZmZlcnMKLSAgICBFR0xpbnQgbVNhbXBsZXM7ICAgICAgICAgICAgICAgICAvLyBOdW1i
ZXIgb2Ygc2FtcGxlcyBwZXIgcGl4ZWwKLSAgICBFR0xpbnQgbVN0ZW5jaWxTaXplOyAgICAgICAg
ICAgICAvLyBCaXRzIG9mIFN0ZW5jaWwgaW4gdGhlIHN0ZW5jaWwgYnVmZmVyCi0gICAgRUdMaW50
IG1TdXJmYWNlVHlwZTsgICAgICAgICAgICAgLy8gV2hpY2ggdHlwZXMgb2YgRUdMIHN1cmZhY2Vz
IGFyZSBzdXBwb3J0ZWQuCi0gICAgRUdMZW51bSBtVHJhbnNwYXJlbnRUeXBlOyAgICAgICAgLy8g
VHlwZSBvZiB0cmFuc3BhcmVuY3kgc3VwcG9ydGVkCi0gICAgRUdMaW50IG1UcmFuc3BhcmVudFJl
ZFZhbHVlOyAgICAgLy8gVHJhbnNwYXJlbnQgcmVkIHZhbHVlCi0gICAgRUdMaW50IG1UcmFuc3Bh
cmVudEdyZWVuVmFsdWU7ICAgLy8gVHJhbnNwYXJlbnQgZ3JlZW4gdmFsdWUKLSAgICBFR0xpbnQg
bVRyYW5zcGFyZW50Qmx1ZVZhbHVlOyAgICAvLyBUcmFuc3BhcmVudCBibHVlIHZhbHVlCi19Owot
Ci0vLyBGdW5jdGlvbiBvYmplY3QgdXNlZCBieSBTVEwgc29ydGluZyByb3V0aW5lcyBmb3Igb3Jk
ZXJpbmcgQ29uZmlncyBhY2NvcmRpbmcgdG8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdlIDI0Lgot
Y2xhc3MgU29ydENvbmZpZwotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU29ydENvbmZpZyhj
b25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwotCi0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENv
bmZpZyAqeCwgY29uc3QgQ29uZmlnICp5KSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yKCkoY29u
c3QgQ29uZmlnICZ4LCBjb25zdCBDb25maWcgJnkpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAg
dm9pZCBzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwot
ICAgIEVHTGludCB3YW50ZWRDb21wb25lbnRzU2l6ZShjb25zdCBDb25maWcgJmNvbmZpZykgY29u
c3Q7Ci0KLSAgICBib29sIG1XYW50UmVkOwotICAgIGJvb2wgbVdhbnRHcmVlbjsKLSAgICBib29s
IG1XYW50Qmx1ZTsKLSAgICBib29sIG1XYW50QWxwaGE7Ci0gICAgYm9vbCBtV2FudEx1bWluYW5j
ZTsKLX07Ci0KLWNsYXNzIENvbmZpZ1NldAotewotICAgIGZyaWVuZCBEaXNwbGF5OwotCi0gIHB1
YmxpYzoKLSAgICBDb25maWdTZXQoKTsKLQotICAgIHZvaWQgYWRkKEQzRERJU1BMQVlNT0RFIGRp
c3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFs
LCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9y
bWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdo
dCk7Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdDsKLSAgICBib29sIGdldENvbmZpZ3MoRUdMQ29u
ZmlnICpjb25maWdzLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QsIEVHTGludCBjb25maWdTaXpl
LCBFR0xpbnQgKm51bUNvbmZpZyk7Ci0gICAgY29uc3QgZWdsOjpDb25maWcgKmdldChFR0xDb25m
aWcgY29uZmlnSGFuZGxlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihDb25maWdTZXQpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxDb25maWcsIFNvcnRDb25m
aWc+IFNldDsKLSAgICB0eXBlZGVmIFNldDo6aXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgU2V0IG1T
ZXQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgRUdMaW50IG1Tb3J0QXR0cmlic1tdOwotfTsKLX0KLQot
I2VuZGlmICAgLy8gSU5DTFVERV9DT05GSUdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
Y2MwYjkzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
RGlzcGxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUwICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIERpc3BsYXkuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OkRpc3BsYXkgY2xh
c3MsIHJlcHJlc2VudGluZyB0aGUgYWJzdHJhY3QKLS8vIGRpc3BsYXkgb24gd2hpY2ggZ3JhcGhp
Y3MgYXJlIGRyYXduLiBJbXBsZW1lbnRzIEVHTERpc3BsYXkuCi0vLyBbRUdMIDEuNF0gc2VjdGlv
biAyLjEuMiBwYWdlIDMuCi0KLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVk
ZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvbWFpbi5o
IgotCi0vLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmluaW5nIEZPUkNFX1JFRl9SQVNUIGlu
IHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKLSNkZWZpbmUgUkVGX1JBU1QgMAotCi0v
LyBUaGUgIkRlYnVnIFRoaXMgUGl4ZWwuLi4iIGZlYXR1cmUgaW4gUElYIG9mdGVuIGZhaWxzIHdo
ZW4gdXNpbmcgdGhlCi0vLyBEM0Q5RXggaW50ZXJmYWNlcy4gIEluIG9yZGVyIHRvIGdldCBkZWJ1
ZyBwaXhlbCB0byB3b3JrIG9uIGEgVmlzdGEvV2luIDcKLS8vIG1hY2hpbmUsIGRlZmluZSAiQU5H
TEVfRU5BQkxFX0QzRDlFWD0wIiBpbiB5b3VyIHByb2plY3QgZmlsZS4KLSNpZiAhZGVmaW5lZChB
TkdMRV9FTkFCTEVfRDNEOUVYKQotLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIElEaXJlY3QzRDlFeCBp
bnRlcmZhY2UsIHdoZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0Q5RVggMQot
I2VuZGlmIC8vICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgpCi0KLW5hbWVzcGFjZSBlZ2wK
LXsKLW5hbWVzcGFjZQotewotICAgIHR5cGVkZWYgc3RkOjptYXA8RUdMTmF0aXZlRGlzcGxheVR5
cGUsIERpc3BsYXkqPiBEaXNwbGF5TWFwOyAKLSAgICBEaXNwbGF5TWFwIGRpc3BsYXlzOwotfQot
Ci1lZ2w6OkRpc3BsYXkgKkRpc3BsYXk6OmdldERpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUg
ZGlzcGxheUlkKQotewotICAgIGlmIChkaXNwbGF5cy5maW5kKGRpc3BsYXlJZCkgIT0gZGlzcGxh
eXMuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZGlzcGxheXNbZGlzcGxheUlkXTsKLSAg
ICB9Ci0KLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOwotCi0gICAgaWYgKGRpc3Bs
YXlJZCA9PSBFR0xfREVGQVVMVF9ESVNQTEFZKQotICAgIHsKLSAgICAgICAgZGlzcGxheSA9IG5l
dyBlZ2w6OkRpc3BsYXkoZGlzcGxheUlkLCAoSERDKU5VTEwsIGZhbHNlKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAoZGlzcGxheUlkID09IEVHTF9TT0ZUV0FSRV9ESVNQTEFZX0FOR0xFKQotICAgIHsK
LSAgICAgICAgZGlzcGxheSA9IG5ldyBlZ2w6OkRpc3BsYXkoZGlzcGxheUlkLCAoSERDKU5VTEws
IHRydWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ2hlY2sg
aWYgZGlzcGxheUlkIGlzIGEgdmFsaWQgZGlzcGxheSBkZXZpY2UgY29udGV4dAotCi0gICAgICAg
IGRpc3BsYXkgPSBuZXcgZWdsOjpEaXNwbGF5KGRpc3BsYXlJZCwgKEhEQylkaXNwbGF5SWQsIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBkaXNwbGF5c1tkaXNwbGF5SWRdID0gZGlzcGxheTsKLSAgICBy
ZXR1cm4gZGlzcGxheTsKLX0KLQotRGlzcGxheTo6RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlw
ZSBkaXNwbGF5SWQsIEhEQyBkZXZpY2VDb250ZXh0LCBib29sIHNvZnR3YXJlKSA6IG1EYyhkZXZp
Y2VDb250ZXh0KQotewotICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLSAgICAKLSAgICBtRDNkOSA9
IE5VTEw7Ci0gICAgbUQzZDlFeCA9IE5VTEw7Ci0gICAgbURldmljZSA9IE5VTEw7Ci0gICAgbURl
dmljZUV4ID0gTlVMTDsKLSAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKLQotICAgIG1BZGFwdGVy
ID0gRDNEQURBUFRFUl9ERUZBVUxUOwotCi0gICAgI2lmIFJFRl9SQVNUID09IDEgfHwgZGVmaW5l
ZChGT1JDRV9SRUZfUkFTVCkKLSAgICAgICAgbURldmljZVR5cGUgPSBEM0RERVZUWVBFX1JFRjsK
LSAgICAjZWxzZQotICAgICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVfSEFMOwotICAgICNl
bmRpZgotCi0gICAgbU1pblN3YXBJbnRlcnZhbCA9IDE7Ci0gICAgbU1heFN3YXBJbnRlcnZhbCA9
IDE7Ci0gICAgbVNvZnR3YXJlRGV2aWNlID0gc29mdHdhcmU7Ci0gICAgbURpc3BsYXlJZCA9IGRp
c3BsYXlJZDsKLSAgICBtRGV2aWNlTG9zdCA9IGZhbHNlOwotfQotCi1EaXNwbGF5Ojp+RGlzcGxh
eSgpCi17Ci0gICAgdGVybWluYXRlKCk7Ci0KLSAgICBEaXNwbGF5TWFwOjppdGVyYXRvciB0aGlz
RGlzcGxheSA9IGRpc3BsYXlzLmZpbmQobURpc3BsYXlJZCk7Ci0KLSAgICBpZiAodGhpc0Rpc3Bs
YXkgIT0gZGlzcGxheXMuZW5kKCkpCi0gICAgewotICAgICAgZGlzcGxheXMuZXJhc2UodGhpc0Rp
c3BsYXkpOwotICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5Ojppbml0aWFsaXplKCkKLXsKLSAgICBp
ZiAoaXNJbml0aWFsaXplZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKG1Tb2Z0d2FyZURldmljZSkKLSAgICB7Ci0gICAgICBtRDNkOU1vZHVsZSA9IEdl
dE1vZHVsZUhhbmRsZShURVhUKCJzd2lmdHNoYWRlcl9kM2Q5LmRsbCIpKTsKLSAgICB9IAotICAg
IGVsc2UKLSAgICB7Ci0gICAgICBtRDNkOU1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZShURVhUKCJk
M2Q5LmRsbCIpKTsKLSAgICB9Ci0gICAgaWYgKG1EM2Q5TW9kdWxlID09IE5VTEwpCi0gICAgewot
ICAgICAgICB0ZXJtaW5hdGUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlFeEZ1bmMpKFVJTlQsIElE
aXJlY3QzRDlFeCoqKTsKLSAgICBEaXJlY3QzRENyZWF0ZTlFeEZ1bmMgRGlyZWN0M0RDcmVhdGU5
RXhQdHIgPSByZWludGVycHJldF9jYXN0PERpcmVjdDNEQ3JlYXRlOUV4RnVuYz4oR2V0UHJvY0Fk
ZHJlc3MobUQzZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTlFeCIpKTsKLQotICAgIC8vIFVzZSBE
aXJlY3QzRDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB2ZXJzaW9u
IGlzIGxlc3MKLSAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQgYSBsb3N0IGNvbnRleHQsIGZvciBl
eGFtcGxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKLSAgICAvLyBkZXNrdG9wLiBEaXJlY3QzRDlF
eCBpcyBhdmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIgaWYgc3VpdGFibGUgZHJp
dmVycyBhcmUgYXZhaWxhYmxlLgotICAgIGlmIChBTkdMRV9FTkFCTEVfRDNEOUVYICYmIERpcmVj
dDNEQ3JlYXRlOUV4UHRyICYmIFNVQ0NFRURFRChEaXJlY3QzRENyZWF0ZTlFeFB0cihEM0RfU0RL
X1ZFUlNJT04sICZtRDNkOUV4KSkpCi0gICAgewotICAgICAgICBBU1NFUlQobUQzZDlFeCk7Ci0g
ICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7Ci0gICAgICAgIEFTU0VSVChtRDNkOSk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EM2Q5ID0gRGlyZWN0M0RDcmVhdGU5KEQzRF9TREtf
VkVSU0lPTik7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5KQotICAgIHsKLSAgICAgICAgaWYgKG1E
YyAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgIC8vICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUU6IERldGVybWluZSB3aGljaCBhZGFwdGVyIGluZGV4IHRoZSBkZXZpY2UgY29udGV4dCBj
b3JyZXNwb25kcyB0bwotICAgICAgICB9Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0gICAg
ICAgIAotICAgICAgICAvLyBHaXZlIHVwIG9uIGdldHRpbmcgZGV2aWNlIGNhcHMgYWZ0ZXIgYWJv
dXQgb25lIHNlY29uZC4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+R2V0RGV2aWNlQ2FwcyhtQWRhcHRl
ciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBEM0RF
UlJfTk9UQVZBSUxBQkxFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNsZWVwKDEw
MCk7ICAgLy8gR2l2ZSB0aGUgZHJpdmVyIHNvbWUgdGltZSB0byBpbml0aWFsaXplL3JlY292ZXIK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKSAgIC8v
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZLCBFX09VVE9GTUVNT1JZLCBEM0RFUlJfSU5WQUxJRERF
VklDRSwgb3IgYW5vdGhlciBlcnJvciB3ZSBjYW4ndCByZWNvdmVyIGZyb20KLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA8IEQzRFBTX1ZFUlNJ
T04oMiwgMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElBTElaRUQsIGZhbHNlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERpcmVj
dFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEgcmVu
ZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAgIC8vIFRoaXMgaXMg
cmVxdWlyZWQgYnkgVGV4dHVyZTJEOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQuCi0gICAgICAgIGlm
ICgobURldmljZUNhcHMuRGV2Q2FwczIgJiBEM0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJP
TV9URVhUVVJFUykgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdGVybWluYXRlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IDQ7Ci0gICAgICAgIG1NYXhTd2Fw
SW50ZXJ2YWwgPSAwOwotCi0gICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRl
cnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkge21NaW5Td2FwSW50ZXJ2YWwg
PSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAwKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6
bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDApO30KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNl
bnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKSAgICAgICB7bU1pblN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOyBtTWF4U3dhcEludGVy
dmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMSk7fQotICAgICAgICBpZiAobURldmlj
ZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pICAg
ICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMik7IG1N
YXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTt9Ci0gICAgICAg
IGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVS
VkFMX1RIUkVFKSAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVy
dmFsLCAzKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDMp
O30KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBS
RVNFTlRfSU5URVJWQUxfRk9VUikgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1N
aW5Td2FwSW50ZXJ2YWwsIDQpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJ
bnRlcnZhbCwgNCk7fQotCi0gICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVySWRlbnRpZmllcihtQWRh
cHRlciwgMCwgJm1BZGFwdGVySWRlbnRpZmllcik7Ci0KLSAgICAgICAgY29uc3QgRDNERk9STUFU
IHJlbmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEQzREZNVF9B
MVI1RzVCNSwKLSAgICAgICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUgY29sb3Jf
cmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZVEUg
Y2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3VyIHZhbHVl
LgotICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAotICAgICAgICAgICAgRDNERk1UX1I1RzZC
NSwKLSAgICAgICAgLy8gIEQzREZNVF9YMVI1RzVCNSwgICAgICAvLyBIYXMgbm8gY29tcGF0aWJs
ZSBPcGVuR0wgRVMgcmVuZGVyYnVmZmVyIGZvcm1hdAotICAgICAgICAgICAgRDNERk1UX1g4UjhH
OEI4Ci0gICAgICAgIH07Ci0KLSAgICAgICAgY29uc3QgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZv
cm1hdHNbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEQzREZNVF9VTktOT1dOLAotICAgICAg
ICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKLSAgICAgICAgICAgIEQzREZNVF9EMzIsCi0gICAg
ICAgIC8vICBEM0RGTVRfRDE1UzEsCi0gICAgICAgICAgICBEM0RGTVRfRDI0UzgsCi0gICAgICAg
ICAgICBEM0RGTVRfRDI0WDgsCi0gICAgICAgIC8vICBEM0RGTVRfRDI0WDRTNCwKLSAgICAgICAg
ICAgIEQzREZNVF9EMTYsCi0gICAgICAgIC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKLSAgICAg
ICAgLy8gIEQzREZNVF9EMjRGUzgKLSAgICAgICAgfTsKLQotICAgICAgICBEM0RESVNQTEFZTU9E
RSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1v
ZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgICAgIENvbmZpZ1NldCBj
b25maWdTZXQ7Ci0KLSAgICAgICAgZm9yIChpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRl
eCA8IHNpemVvZihyZW5kZXJUYXJnZXRGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBmb3Jt
YXRJbmRleCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0c1tmb3JtYXRJbmRleF07Ci0KLSAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LCBEM0RSVFlQRV9TVVJGQUNFLCByZW5kZXJUYXJnZXRGb3JtYXQpOwotCi0gICAgICAgICAgICBp
ZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgZGVwdGhTdGVuY2lsSW5kZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihk
ZXB0aFN0ZW5jaWxGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRl
eCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRDNERk9STUFUIGRl
cHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhd
OwotICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmKGRlcHRoU3RlbmNpbEZvcm1hdCAh
PSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfREVQVEhTVEVOQ0lM
LCBEM0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0ZW5jaWxGb3JtYXQpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihkZXB0aFN0ZW5j
aWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGVwdGhTdGVu
Y2lsTWF0Y2gobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25maWdTZXQuYWRkKGN1cnJlbnREaXNwbGF5TW9kZSwgbU1pblN3YXBJ
bnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5j
aWxGb3JtYXQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
RGV2aWNlQ2Fwcy5NYXhUZXh0dXJlV2lkdGgsIG1EZXZpY2VDYXBzLk1heFRleHR1cmVIZWlnaHQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2l2
ZSB0aGUgc29ydGVkIGNvbmZpZ3MgYSB1bmlxdWUgSUQgYW5kIHN0b3JlIHRoZW0gaW50ZXJuYWxs
eQotICAgICAgICBFR0xpbnQgaW5kZXggPSAxOwotICAgICAgICBmb3IgKENvbmZpZ1NldDo6SXRl
cmF0b3IgY29uZmlnID0gY29uZmlnU2V0Lm1TZXQuYmVnaW4oKTsgY29uZmlnICE9IGNvbmZpZ1Nl
dC5tU2V0LmVuZCgpOyBjb25maWcrKykKLSAgICAgICAgewotICAgICAgICAgICAgQ29uZmlnIGNv
bmZpZ3VyYXRpb24gPSAqY29uZmlnOwotICAgICAgICAgICAgY29uZmlndXJhdGlvbi5tQ29uZmln
SUQgPSBpbmRleDsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0KLSAgICAgICAgICAgIG1Db25maWdT
ZXQubVNldC5pbnNlcnQoY29uZmlndXJhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgVENIQVIgd2luZG93TmFtZVtdID0gVEVYVCgiQW5nbGVIaWRkZW5X
aW5kb3ciKTsKLSAgICBzdGF0aWMgY29uc3QgVENIQVIgY2xhc3NOYW1lW10gPSBURVhUKCJTVEFU
SUMiKTsKLQotICAgIG1EZXZpY2VXaW5kb3cgPSBDcmVhdGVXaW5kb3dFeChXU19FWF9OT0FDVElW
QVRFLCBjbGFzc05hbWUsIHdpbmRvd05hbWUsIFdTX0RJU0FCTEVEIHwgV1NfUE9QVVAsIDAsIDAs
IDEsIDEsIEhXTkRfTUVTU0FHRSwgTlVMTCwgR2V0TW9kdWxlSGFuZGxlKE5VTEwpLCBOVUxMKTsK
LQotICAgIGlmICghY3JlYXRlRGV2aWNlKCkpCi0gICAgewotICAgICAgICB0ZXJtaW5hdGUoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIERpc3BsYXk6OnRlcm1pbmF0ZSgpCi17Ci0gICAgd2hpbGUgKCFtU3VyZmFjZVNldC5lbXB0
eSgpKQotICAgIHsKLSAgICAgICAgZGVzdHJveVN1cmZhY2UoKm1TdXJmYWNlU2V0LmJlZ2luKCkp
OwotICAgIH0KLQotICAgIHdoaWxlICghbUNvbnRleHRTZXQuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIGRlc3Ryb3lDb250ZXh0KCptQ29udGV4dFNldC5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICB3
aGlsZSAoIW1FdmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgbUV2ZW50UXVl
cnlQb29sLmJhY2soKS0+UmVsZWFzZSgpOwotICAgICAgICBtRXZlbnRRdWVyeVBvb2wucG9wX2Jh
Y2soKTsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZSkKLSAgICB7Ci0gICAgICAgIC8vIElmIHRo
ZSBkZXZpY2UgaXMgbG9zdCwgcmVzZXQgaXQgZmlyc3QgdG8gcHJldmVudCBsZWF2aW5nIHRoZSBk
cml2ZXIgaW4gYW4gdW5zdGFibGUgc3RhdGUKLSAgICAgICAgaWYgKHRlc3REZXZpY2VMb3N0KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0RGV2aWNlKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAgewotICAgICAgICBtRGV2aWNlRXgtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbURldmljZUV4ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDkpCi0g
ICAgewotICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOwotICAgICAgICBtRDNkOSA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1EZXZpY2VXaW5kb3cpCi0gICAgewotICAgICAgICBEZXN0cm95V2lu
ZG93KG1EZXZpY2VXaW5kb3cpOwotICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKG1EM2Q5RXgpCi0gICAgewotICAgICAgICBtRDNkOUV4LT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1EM2Q5RXggPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRDNkOU1vZHVs
ZSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLSAgICB9Ci19Ci0KLXZvaWQg
RGlzcGxheTo6c3RhcnRTY2VuZSgpCi17Ci0gICAgaWYgKCFtU2NlbmVTdGFydGVkKQotICAgIHsK
LSAgICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNlLT5CZWdpblNjZW5lKCk7Ci0gICAgICAgIGlm
IChTVUNDRUVERUQocmVzdWx0KSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBkZWZlbnNpdmUg
Y2hlY2tpbmcgYWdhaW5zdCB0aGUgZGV2aWNlIGJlaW5nCi0gICAgICAgICAgICAvLyBsb3N0IGF0
IHVuZXhwZWN0ZWQgdGltZXMuCi0gICAgICAgICAgICBtU2NlbmVTdGFydGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBEaXNwbGF5OjplbmRTY2VuZSgpCi17Ci0gICAgaWYg
KG1TY2VuZVN0YXJ0ZWQpCi0gICAgewotICAgICAgICAvLyBFbmRTY2VuZSBjYW4gZmFpbCBpZiB0
aGUgZGV2aWNlIHdhcyBsb3N0LCBmb3IgZXhhbXBsZSBkdWUKLSAgICAgICAgLy8gdG8gYSBURFIg
ZHVyaW5nIGEgZHJhdyBjYWxsLgotICAgICAgICBtRGV2aWNlLT5FbmRTY2VuZSgpOwotICAgICAg
ICBtU2NlbmVTdGFydGVkID0gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldENv
bmZpZ3MoRUdMQ29uZmlnICpjb25maWdzLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QsIEVHTGlu
dCBjb25maWdTaXplLCBFR0xpbnQgKm51bUNvbmZpZykKLXsKLSAgICByZXR1cm4gbUNvbmZpZ1Nl
dC5nZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJpYkxpc3QsIGNvbmZpZ1NpemUsIG51bUNvbmZpZyk7
Ci19Ci0KLWJvb2wgRGlzcGxheTo6Z2V0Q29uZmlnQXR0cmliKEVHTENvbmZpZyBjb25maWcsIEVH
TGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpCi17Ci0gICAgY29uc3QgZWdsOjpDb25maWcg
KmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0LmdldChjb25maWcpOwotCi0gICAgc3dpdGNoIChh
dHRyaWJ1dGUpCi0gICAgewotICAgICAgY2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAg
ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUJ1ZmZlclNpemU7ICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFR0xfQUxQSEFfU0laRTogICAgICAgICAgICAgICAgKnZhbHVlID0gY29u
ZmlndXJhdGlvbi0+bUFscGhhU2l6ZTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
R0xfQkxVRV9TSVpFOiAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUJs
dWVTaXplOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTog
ICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUdyZWVuU2l6ZTsgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfUkVEX1NJWkU6ICAgICAgICAgICAgICAgICAg
KnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVJlZFNpemU7ICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFR0xfREVQVEhfU0laRTogICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmln
dXJhdGlvbi0+bURlcHRoU2l6ZTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xf
U1RFTkNJTF9TSVpFOiAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVN0ZW5j
aWxTaXplOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQ09ORklHX0NBVkVBVDog
ICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUNvbmZpZ0NhdmVhdDsgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAgKnZh
bHVlID0gY29uZmlndXJhdGlvbi0+bUNvbmZpZ0lEOyAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFR0xfTEVWRUw6ICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJh
dGlvbi0+bUxldmVsOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTkFU
SVZFX1JFTkRFUkFCTEU6ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU5hdGl2ZVJl
bmRlcmFibGU7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTkFUSVZFX1ZJU1VBTF9UWVBF
OiAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU5hdGl2ZVZpc3VhbFR5cGU7ICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFR0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAgKnZhbHVl
ID0gY29uZmlndXJhdGlvbi0+bVNhbXBsZXM7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFR0xfU0FNUExFX0JVRkZFUlM6ICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlv
bi0+bVNhbXBsZUJ1ZmZlcnM7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfU1VSRkFD
RV9UWVBFOiAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVN1cmZhY2VUeXBl
OyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAg
ICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50VHlwZTsgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfQkxVRV9WQUxVRTogICAgKnZhbHVlID0g
Y29uZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50Qmx1ZVZhbHVlOyAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFR0xfVFJBTlNQQVJFTlRfR1JFRU5fVkFMVUU6ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+
bVRyYW5zcGFyZW50R3JlZW5WYWx1ZTsgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfVFJBTlNQQVJF
TlRfUkVEX1ZBTFVFOiAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50UmVk
VmFsdWU7ICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQjogICAg
ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUJpbmRUb1RleHR1cmVSR0I7ICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQkE6ICAgICAgKnZhbHVlID0gY29u
ZmlndXJhdGlvbi0+bUJpbmRUb1RleHR1cmVSR0JBOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
R0xfTUlOX1NXQVBfSU5URVJWQUw6ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU1p
blN3YXBJbnRlcnZhbDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTUFYX1NXQVBfSU5U
RVJWQUw6ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU1heFN3YXBJbnRlcnZhbDsg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6ICAgICAgICAgICAg
KnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUx1bWluYW5jZVNpemU7ICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFR0xfQUxQSEFfTUFTS19TSVpFOiAgICAgICAgICAgKnZhbHVlID0gY29uZmln
dXJhdGlvbi0+bUFscGhhTWFza1NpemU7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xf
Q09MT1JfQlVGRkVSX1RZUEU6ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUNvbG9y
QnVmZmVyVHlwZTsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBF
OiAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVJlbmRlcmFibGVUeXBlOyAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAgKnZh
bHVlID0gZmFsc2U7IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFR0xfQ09ORk9STUFOVDogICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJh
dGlvbi0+bUNvbmZvcm1hbnQ7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTUFY
X1BCVUZGRVJfV0lEVEg6ICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU1heFBCdWZm
ZXJXaWR0aDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTUFYX1BCVUZGRVJfSEVJR0hU
OiAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU1heFBCdWZmZXJIZWlnaHQ7ICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFR0xfTUFYX1BCVUZGRVJfUElYRUxTOiAgICAgICAgKnZhbHVl
ID0gY29uZmlndXJhdGlvbi0+bU1heFBCdWZmZXJQaXhlbHM7ICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIERpc3BsYXk6OmNyZWF0ZURldmljZSgpCi17Ci0gICAgRDNEUFJFU0VOVF9Q
QVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJz
KCk7Ci0gICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQzRENSRUFURV9GUFVfUFJFU0VSVkUgfCBE
M0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VTOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+
Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZp
b3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRF
X1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwotCi0gICAgaWYgKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRF
X1NPRlRXQVJFX1ZFUlRFWFBST0NFU1NJTkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2Up
OwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX05PVEFWQUlMQUJMRSB8fCByZXN1bHQgPT0g
RDNERVJSX0RFVklDRUxPU1QpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRDNkOUV4KQotICAgIHsK
LSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRERl
dmljZTlFeCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZURldmljZSgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8vIGRvIGFueSBvbmUtdGltZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24KLS8v
IE5PVEU6IHRoaXMgaXMgYWxzbyBuZWVkZWQgYWZ0ZXIgYSBkZXZpY2UgbG9zdC9yZXNldAotLy8g
dG8gcmVzZXQgdGhlIHNjZW5lIHN0YXR1cyBhbmQgZW5zdXJlIHRoZSBkZWZhdWx0IHN0YXRlcyBh
cmUgcmVzZXQuCi12b2lkIERpc3BsYXk6OmluaXRpYWxpemVEZXZpY2UoKQotewotICAgIC8vIFBl
cm1hbmVudCBub24tZGVmYXVsdCBzdGF0ZXMKLSAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19QT0lOVFNQUklURUVOQUJMRSwgVFJVRSk7Ci0gICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfTEFTVFBJWEVMLCBGQUxTRSk7Ci0KLSAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7
Ci19Ci0KLWJvb2wgRGlzcGxheTo6cmVzZXREZXZpY2UoKQotewotICAgIEQzRFBSRVNFTlRfUEFS
QU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygp
OwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7Ci0gICAgYm9vbCBsb3N0ID0gdGVzdERl
dmljZUxvc3QoKTsKLSAgICBpbnQgYXR0ZW1wdHMgPSAzOyAgICAKLQotICAgIHdoaWxlIChsb3N0
ICYmIGF0dGVtcHRzID4gMCkKLSAgICB7Ci0gICAgICAgIGlmIChtRGV2aWNlRXgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFNsZWVwKDUwMCk7ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVy
IHNvbWUgQ1BVIHRpbWUKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2VFeC0+UmVzZXRFeCgm
cHJlc2VudFBhcmFtZXRlcnMsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBEM0RFUlJfREVW
SUNFTE9TVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTbGVlcCgxMDApOyAgIC8v
IEdpdmUgdGhlIGdyYXBoaWNzIGRyaXZlciBzb21lIENQVSB0aW1lCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTk9UUkVTRVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UmVzZXQoJnByZXNl
bnRQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGxvc3Qg
PSB0ZXN0RGV2aWNlTG9zdCgpOwotICAgICAgICBhdHRlbXB0cyAtLTsKLSAgICB9Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIlJlc2V0L1Jlc2V0RXggZmFp
bGVkIG11bHRpcGxlIHRpbWVzOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgIH0KLQotICAgIC8vIHJlc2V0IGRldmljZSBk
ZWZhdWx0cwotICAgIGluaXRpYWxpemVEZXZpY2UoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1FR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVH
TENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKLXsKLSAgICBjb25zdCBD
b25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0LmdldChjb25maWcpOwotICAgIEVHTGlu
dCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gRUdMX0ZBTFNFOwotCi0gICAgaWYgKGF0dHJpYkxp
c3QpCi0gICAgewotICAgICAgICB3aGlsZSAoKmF0dHJpYkxpc3QgIT0gRUdMX05PTkUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFswXSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVSX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKGF0dHJpYkxpc3RbMV0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgY2FzZSBFR0xfQkFDS19CVUZGRVI6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSBFR0xfU0lOR0xFX0JVRkZFUjoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19TVVJGQUNFKTsgICAvLyBSZW5k
ZXJpbmcgZGlyZWN0bHkgdG8gZnJvbnQgYnVmZmVyIG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfUE9TVF9TVUJfQlVGRkVSX1NV
UFBPUlRFRF9OVjoKLSAgICAgICAgICAgICAgICBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gYXR0
cmliTGlzdFsxXTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
R0xfVkdfQ09MT1JTUEFDRToKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9N
QVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9G
T1JNQVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9O
T19TVVJGQUNFKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgYXR0cmliTGlzdCArPSAyOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZSh3aW5kb3cpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAg
ICBpZiAodGVzdERldmljZUxvc3QoKSkgCi0gICAgewotICAgICAgICBpZiAoIXJlc3RvcmVMb3N0
RGV2aWNlKCkpCi0gICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgfQotCi0g
ICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHdp
bmRvdywgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7Ci0KLSAgICBpZiAoIXN1cmZhY2UtPmluaXRp
YWxpemUoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBzdXJmYWNlOwotICAgICAgICByZXR1cm4g
RUdMX05PX1NVUkZBQ0U7Ci0gICAgfQotCi0gICAgbVN1cmZhY2VTZXQuaW5zZXJ0KHN1cmZhY2Up
OwotCi0gICAgcmV0dXJuIHN1Y2Nlc3Moc3VyZmFjZSk7Ci19Ci0KLUVHTFN1cmZhY2UgRGlzcGxh
eTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5ETEUgc2hhcmVI
YW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKLXsKLSAgICBFR0xpbnQgd2lkdGggPSAw
LCBoZWlnaHQgPSAwOwotICAgIEVHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEVHTF9OT19URVhUVVJF
OwotICAgIEVHTGVudW0gdGV4dHVyZVRhcmdldCA9IEVHTF9OT19URVhUVVJFOwotICAgIGNvbnN0
IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7Ci0KLSAgICBp
ZiAoYXR0cmliTGlzdCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICgqYXR0cmliTGlzdCAhPSBFR0xf
Tk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzBdKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEVHTF9XSURUSDoKLSAgICAgICAgICAgICAg
ICB3aWR0aCA9IGF0dHJpYkxpc3RbMV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX0hFSUdIVDoKLSAgICAgICAgICAgICAgICBoZWlnaHQgPSBhdHRyaWJM
aXN0WzFdOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9M
QVJHRVNUX1BCVUZGRVI6Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYkxpc3RbMV0gIT0gRUdM
X0ZBTFNFKQotICAgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAvLyBGSVhNRQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX0ZPUk1B
VDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYkxpc3RbMV0pCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfTk9fVEVYVFVSRToKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfUkdCOgotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xf
VEVYVFVSRV9SR0JBOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gYXR0cmli
TGlzdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJV
VEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfVEFSR0VUOgotICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEVHTF9OT19URVhUVVJFOgotICAgICAgICAgICAgICAgICAgY2FzZSBF
R0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVRhcmdldCA9IGF0dHJp
Ykxpc3RbMV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklC
VVRFLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBfVEVYVFVSRToKLSAgICAgICAg
ICAgICAgICBpZiAoYXR0cmliTGlzdFsxXSAhPSBFR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVkdfQ09MT1JTUEFDRToK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZB
Q0UpOwotICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
VFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
YXR0cmliTGlzdCArPSAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1F
VEVSLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUs
IEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAgICBpZiAodGV4dHVyZUZvcm1hdCAhPSBFR0xf
Tk9fVEVYVFVSRSAmJiAhZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSAmJiAoIWdsOjppc1Bv
dzIod2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAgICBpZiAo
KHRleHR1cmVGb3JtYXQgIT0gRUdMX05PX1RFWFRVUkUgJiYgdGV4dHVyZVRhcmdldCA9PSBFR0xf
Tk9fVEVYVFVSRSkgfHwKLSAgICAgICAgKHRleHR1cmVGb3JtYXQgPT0gRUdMX05PX1RFWFRVUkUg
JiYgdGV4dHVyZVRhcmdldCAhPSBFR0xfTk9fVEVYVFVSRSkpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlm
ICghKGNvbmZpZ3VyYXRpb24tPm1TdXJmYWNlVHlwZSAmIEVHTF9QQlVGRkVSX0JJVCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwot
ICAgIH0KLQotICAgIGlmICgodGV4dHVyZUZvcm1hdCA9PSBFR0xfVEVYVFVSRV9SR0IgJiYgY29u
ZmlndXJhdGlvbi0+bUJpbmRUb1RleHR1cmVSR0IgIT0gRUdMX1RSVUUpIHx8Ci0gICAgICAgICh0
ZXh0dXJlRm9ybWF0ID09IEVHTF9URVhUVVJFX1JHQkEgJiYgY29uZmlndXJhdGlvbi0+bUJpbmRU
b1RleHR1cmVSR0JBICE9IEVHTF9UUlVFKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlmICh0ZXN0
RGV2aWNlTG9zdCgpKSAKLSAgICB7Ci0gICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkK
LSAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAgICBTdXJmYWNl
ICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlvbiwgc2hhcmVIYW5kbGUs
IHdpZHRoLCBoZWlnaHQsIHRleHR1cmVGb3JtYXQsIHRleHR1cmVUYXJnZXQpOwotCi0gICAgaWYg
KCFzdXJmYWNlLT5pbml0aWFsaXplKCkpCi0gICAgewotICAgICAgICBkZWxldGUgc3VyZmFjZTsK
LSAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAgIH0KLQotICAgIG1TdXJmYWNlU2V0
Lmluc2VydChzdXJmYWNlKTsKLQotICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOwotfQotCi1F
R0xDb250ZXh0IERpc3BsYXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwg
Y29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wg
cm9idXN0QWNjZXNzKQotewotICAgIGlmICghbURldmljZSkKLSAgICB7Ci0gICAgICAgIGlmICgh
Y3JlYXRlRGV2aWNlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRlc3REZXZpY2VMb3N0KCkpICAgLy8gTG9zdCBk
ZXZpY2UKLSAgICB7Ci0gICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAgICAgICAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcg
PSBtQ29uZmlnU2V0LmdldChjb25maWdIYW5kbGUpOwotCi0gICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbENyZWF0ZUNvbnRleHQoY29uZmlnLCBzaGFyZUNvbnRleHQsIG5vdGlmeVJlc2V0cywg
cm9idXN0QWNjZXNzKTsKLSAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7Ci0gICAgbURl
dmljZUxvc3QgPSBmYWxzZTsKLQotICAgIHJldHVybiBjb250ZXh0OwotfQotCi1ib29sIERpc3Bs
YXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkKLXsKLSAgICBmb3IgKENvbnRleHRTZXQ6Oml0ZXJhdG9y
IGN0eCA9IG1Db250ZXh0U2V0LmJlZ2luKCk7IGN0eCAhPSBtQ29udGV4dFNldC5lbmQoKTsgY3R4
KyspCi0gICAgewotICAgICAgICBpZiAoKCpjdHgpLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIElmIHJlc2V0IG5vdGlmaWNhdGlv
bnMgaGF2ZSBiZWVuIHJlcXVlc3RlZCwgYXBwbGljYXRpb24gbXVzdCBkZWxldGUgYWxsIGNvbnRl
eHRzIGZpcnN0Ci0gICAgfQotIAotICAgIC8vIFJlbGVhc2Ugc3VyZmFjZSByZXNvdXJjZXMgdG8g
bWFrZSB0aGUgUmVzZXQoKSBzdWNjZWVkCi0gICAgZm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBz
dXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQo
KTsgc3VyZmFjZSsrKQotICAgIHsKLSAgICAgICAgKCpzdXJmYWNlKS0+cmVsZWFzZSgpOwotICAg
IH0KLQotICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCi0gICAgewotICAgICAg
ICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5
UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIGlmICghcmVzZXREZXZpY2UoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIGFueSBzdXJm
YWNlcyB0aGF0IG1heSBoYXZlIGJlZW4gbG9zdAotICAgIGZvciAoU3VyZmFjZVNldDo6aXRlcmF0
b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2UgIT0gbVN1cmZhY2VTZXQu
ZW5kKCk7IHN1cmZhY2UrKykKLSAgICB7Ci0gICAgICAgICgqc3VyZmFjZSktPnJlc2V0U3dhcENo
YWluKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBEaXNwbGF5Ojpk
ZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0gICAgZGVsZXRlIHN1cmZh
Y2U7Ci0gICAgbVN1cmZhY2VTZXQuZXJhc2Uoc3VyZmFjZSk7Ci19Ci0KLXZvaWQgRGlzcGxheTo6
ZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgZ2xEZXN0cm95Q29u
dGV4dChjb250ZXh0KTsKLSAgICBtQ29udGV4dFNldC5lcmFzZShjb250ZXh0KTsKLX0KLQotdm9p
ZCBEaXNwbGF5Ojpub3RpZnlEZXZpY2VMb3N0KCkKLXsKLSAgICBmb3IgKENvbnRleHRTZXQ6Oml0
ZXJhdG9yIGNvbnRleHQgPSBtQ29udGV4dFNldC5iZWdpbigpOyBjb250ZXh0ICE9IG1Db250ZXh0
U2V0LmVuZCgpOyBjb250ZXh0KyspCi0gICAgewotICAgICAgICAoKmNvbnRleHQpLT5tYXJrQ29u
dGV4dExvc3QoKTsKLSAgICB9Ci0gICAgbURldmljZUxvc3QgPSB0cnVlOwotICAgIGVycm9yKEVH
TF9DT05URVhUX0xPU1QpOwotfQotCi1ib29sIERpc3BsYXk6OmlzRGV2aWNlTG9zdCgpCi17Ci0g
ICAgcmV0dXJuIG1EZXZpY2VMb3N0OwotfQotCi1ib29sIERpc3BsYXk6OmlzSW5pdGlhbGl6ZWQo
KSBjb25zdAotewotICAgIHJldHVybiBtRDNkOSAhPSBOVUxMICYmIG1Db25maWdTZXQuc2l6ZSgp
ID4gMDsKLX0KLQotYm9vbCBEaXNwbGF5Ojppc1ZhbGlkQ29uZmlnKEVHTENvbmZpZyBjb25maWcp
Ci17Ci0gICAgcmV0dXJuIG1Db25maWdTZXQuZ2V0KGNvbmZpZykgIT0gTlVMTDsKLX0KLQotYm9v
bCBEaXNwbGF5Ojppc1ZhbGlkQ29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gbUNvbnRleHRTZXQuZmluZChjb250ZXh0KSAhPSBtQ29udGV4dFNldC5lbmQoKTsKLX0K
LQotYm9vbCBEaXNwbGF5Ojppc1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17
Ci0gICAgcmV0dXJuIG1TdXJmYWNlU2V0LmZpbmQoc3VyZmFjZSkgIT0gbVN1cmZhY2VTZXQuZW5k
KCk7Ci19Ci0KLWJvb2wgRGlzcGxheTo6aGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKEhXTkQgd2lu
ZG93KQotewotICAgIGZvciAoU3VyZmFjZVNldDo6aXRlcmF0b3Igc3VyZmFjZSA9IG1TdXJmYWNl
U2V0LmJlZ2luKCk7IHN1cmZhY2UgIT0gbVN1cmZhY2VTZXQuZW5kKCk7IHN1cmZhY2UrKykKLSAg
ICB7Ci0gICAgICAgIGlmICgoKnN1cmZhY2UpLT5nZXRXaW5kb3dIYW5kbGUoKSA9PSB3aW5kb3cp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1FR0xpbnQgRGlzcGxheTo6Z2V0TWluU3dhcEludGVy
dmFsKCkKLXsKLSAgICByZXR1cm4gbU1pblN3YXBJbnRlcnZhbDsKLX0KLQotRUdMaW50IERpc3Bs
YXk6OmdldE1heFN3YXBJbnRlcnZhbCgpCi17Ci0gICAgcmV0dXJuIG1NYXhTd2FwSW50ZXJ2YWw7
Ci19Ci0KLUlEaXJlY3QzRERldmljZTkgKkRpc3BsYXk6OmdldERldmljZSgpCi17Ci0gICAgaWYg
KCFtRGV2aWNlKQotICAgIHsKLSAgICAgICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gbURldmljZTsKLX0KLQotRDNEQ0FQUzkgRGlzcGxheTo6Z2V0RGV2aWNlQ2FwcygpCi17Ci0g
ICAgcmV0dXJuIG1EZXZpY2VDYXBzOwotfQotCi1EM0RBREFQVEVSX0lERU5USUZJRVI5ICpEaXNw
bGF5OjpnZXRBZGFwdGVySWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuICZtQWRhcHRlcklkZW50
aWZpZXI7Ci19Ci0KLWJvb2wgRGlzcGxheTo6dGVzdERldmljZUxvc3QoKQotewotICAgIGlmICht
RGV2aWNlRXgpCi0gICAgewotICAgICAgICByZXR1cm4gRkFJTEVEKG1EZXZpY2VFeC0+Q2hlY2tE
ZXZpY2VTdGF0ZShOVUxMKSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EZXZpY2UpCi0gICAgewot
ICAgICAgICByZXR1cm4gRkFJTEVEKG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCkpOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsgICAvLyBObyBkZXZpY2UgeWV0LCBzbyBubyByZXNl
dCByZXF1aXJlZAotfQotCi1ib29sIERpc3BsYXk6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKLXsK
LSAgICBIUkVTVUxUIHN0YXR1cyA9IEQzRF9PSzsKLQotICAgIGlmIChtRGV2aWNlRXgpCi0gICAg
ewotICAgICAgICBzdGF0dXMgPSBtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUoTlVMTCk7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBzdGF0dXMgPSBtRGV2
aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgIH0KLQotICAgIHN3aXRjaCAoc3RhdHVz
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRU5PVFJFU0VUOgotICAgICAgY2FzZSBE
M0RFUlJfREVWSUNFSFVORzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIERpc3BsYXk6OnN5bmMoYm9v
bCBibG9jaykKLXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIElEaXJlY3QzRFF1ZXJ5OSog
cXVlcnkgPSBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKLSAgICBpZiAoIXF1ZXJ5KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdCA9IHF1ZXJ5LT5Jc3N1ZShEM0RJU1NV
RV9FTkQpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBkbwotICAgIHsK
LSAgICAgICAgcmVzdWx0ID0gcXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNER0VUREFUQV9GTFVT
SCk7Ci0KLSAgICAgICAgaWYoYmxvY2sgJiYgcmVzdWx0ID09IFNfRkFMU0UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFsbG93IG90aGVyIHRocmVhZHMgdG8g
ZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAotICAgICAgICAgICAgU2xlZXAoMCk7Ci0gICAgICAg
ICAgICAvLyBleHBsaWNpdGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcwotICAgICAgICAgICAgLy8g
c29tZSBkcml2ZXJzIHNlZW0gdG8gcmV0dXJuIFNfRkFMU0UgZXZlbiBpZiB0aGUgZGV2aWNlIGlz
IGxvc3QKLSAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgRDNERVJSX0RFVklDRUxPU1QgbGlrZSB0
aGV5IHNob3VsZAotICAgICAgICAgICAgaWYgKHRlc3REZXZpY2VMb3N0KCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gRDNERVJSX0RFVklDRUxPU1Q7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUoYmxvY2sgJiYgcmVzdWx0ID09IFNf
RkFMU0UpOwotCi0gICAgZnJlZUV2ZW50UXVlcnkocXVlcnkpOwotCi0gICAgaWYgKGlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpCi0gICAgewotICAgICAgICBub3RpZnlEZXZpY2VMb3N0KCk7Ci0g
ICAgfQotfQotCi1JRGlyZWN0M0RRdWVyeTkqIERpc3BsYXk6OmFsbG9jYXRlRXZlbnRRdWVyeSgp
Ci17Ci0gICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeSA9IE5VTEw7Ci0KLSAgICBpZiAobUV2ZW50
UXVlcnlQb29sLmVtcHR5KCkpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZp
Y2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJnF1ZXJ5KTsKLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
cXVlcnkgPSBtRXZlbnRRdWVyeVBvb2wuYmFjaygpOwotICAgICAgICBtRXZlbnRRdWVyeVBvb2wu
cG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcXVlcnk7Ci19Ci0KLXZvaWQgRGlzcGxh
eTo6ZnJlZUV2ZW50UXVlcnkoSURpcmVjdDNEUXVlcnk5KiBxdWVyeSkKLXsKLSAgICBpZiAobUV2
ZW50UXVlcnlQb29sLnNpemUoKSA+IDEwMDApCi0gICAgewotICAgICAgICBxdWVyeS0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wucHVz
aF9iYWNrKHF1ZXJ5KTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlzcGxheTo6Z2V0TXVsdGlTYW1wbGVT
dXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpCi17Ci0gICAg
Zm9yIChpbnQgbXVsdGlTYW1wbGVJbmRleCA9IDA7IG11bHRpU2FtcGxlSW5kZXggPD0gRDNETVVM
VElTQU1QTEVfMTZfU0FNUExFUzsgbXVsdGlTYW1wbGVJbmRleCsrKQotICAgIHsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11
bHRpU2FtcGxlSW5kZXgsIE5VTEwpOwotCi0gICAgICAgIG11bHRpU2FtcGxlQXJyYXlbbXVsdGlT
YW1wbGVJbmRleF0gPSBTVUNDRUVERUQocmVzdWx0KTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlzcGxh
eTo6Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50
RGlzcGxheU1vZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwg
JmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVj
a0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQxKSk7Ci19Ci0KLWJvb2wgRGlz
cGxheTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJy
ZW50RGlzcGxheU1vZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRl
ciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQzKSk7Ci19Ci0KLWJvb2wg
RGlzcGxheTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBj
dXJyZW50RGlzcGxheU1vZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRh
cHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQ1KSk7Ci19Ci0KLS8v
IHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKLS8vIHdlIGFsc28g
d2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRo
LW9ubHkgRkJPcwotLy8gc2VlIGh0dHA6Ly9hcmFzLXAuaW5mby90ZXh0cy9EM0Q5R1BVSGFja3Mu
aHRtbAotYm9vbCBEaXNwbGF5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAg
ICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0
ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAgICBib29s
IGludHogPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNE
UlRZUEVfVEVYVFVSRSwgRDNERk1UX0lOVFopKTsKLSAgICBib29sIG51bGwgPSBTVUNDRUVERUQo
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwgRDNE
Rk1UX05VTEwpKTsKLQotICAgIHJldHVybiBpbnR6ICYmIG51bGw7Ci19Ci0KLWJvb2wgRGlzcGxh
eTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVy
YWJsZSkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAgbUQz
ZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7
Ci0KLSAgICAqZmlsdGVyaW5nID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdF
X1FVRVJZX0ZJTFRFUiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgot
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVF
UllfRklMVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotICAg
IAotICAgICpyZW5kZXJhYmxlID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdF
X1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSYmCi0g
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVO
REVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKLQot
ICAgIGlmICghKmZpbHRlcmluZyAmJiAhKnJlbmRlcmFibGUpCi0gICAgewotICAgICAgICByZXR1
cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMy
QjMyRzMyUjMyRikpICYmCi0gICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBEaXNw
bGF5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5k
ZXJhYmxlKQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBt
RDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2Rl
KTsKLQotICAgICpmaWx0ZXJpbmcgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUVVFUllfRklMVEVSLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYm
Ci0gICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9R
VUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7Ci0g
ICAgCi0gICAgKnJlbmRlcmFibGUgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUkVOREVSVEFSR0VULCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYm
Ci0gICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7Ci0K
LSAgICBpZiAoISpmaWx0ZXJpbmcgJiYgISpyZW5kZXJhYmxlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0Ex
NkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rl
dmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3Jt
YXQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlz
cGxheTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQotewotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHJldHVybiBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0w4KSk7Ci19Ci0KLWJv
b2wgRGlzcGxheTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgRDNE
RElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlz
cGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgcmV0dXJuIFNV
Q0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBj
dXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQThM
OCkpOwotfQotCi1EM0RQT09MIERpc3BsYXk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2UpIGNv
bnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBE
M0RQT09MX0RFRkFVTFQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghKHVz
YWdlICYgRDNEVVNBR0VfRFlOQU1JQykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBE
M0RQT09MX01BTkFHRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gRDNEUE9PTF9E
RUZBVUxUOwotfQotCi1EM0RQT09MIERpc3BsYXk6OmdldFRleHR1cmVQb29sKERXT1JEIHVzYWdl
KSBjb25zdAotewotICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gRDNEUE9PTF9ERUZBVUxUOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
ISh1c2FnZSAmIChEM0RVU0FHRV9ERVBUSFNURU5DSUwgfCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQp
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzRFBPT0xfTUFOQUdFRDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci19Ci0KLWJvb2wgRGlz
cGxheTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQotewotICAgIElEaXJlY3QzRFF1ZXJ5OSAqcXVl
cnkgPSBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKLSAgICBpZiAocXVlcnkpCi0gICAgewotICAgICAg
ICBmcmVlRXZlbnRRdWVyeShxdWVyeSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1EM0RQUkVT
RU5UX1BBUkFNRVRFUlMgRGlzcGxheTo6Z2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCkKLXsK
LSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0KLSAg
ICAvLyBUaGUgZGVmYXVsdCBzd2FwIGNoYWluIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQuIFN1cmZh
Y2Ugd2lsbCBjcmVhdGUgYSBuZXcgc3dhcCBjaGFpbiB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVy
cy4KLSAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gRDNERk1U
X1VOS05PV047Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKLSAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMTsKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFi
bGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3Mg
PSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtRGV2aWNlV2luZG93
OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7Ci0gICAgcHJl
c2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9ORTsKLSAg
ICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IEQzRFBSRVNFTlRfSU5U
RVJWQUxfREVGQVVMVDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dB
UEVGRkVDVF9ESVNDQVJEOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsK
LQotICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVyczsKLX0KLQotdm9pZCBEaXNwbGF5Ojppbml0
RXh0ZW5zaW9uU3RyaW5nKCkKLXsKLSAgICBITU9EVUxFIHN3aWZ0U2hhZGVyID0gR2V0TW9kdWxl
SGFuZGxlKFRFWFQoInN3aWZ0c2hhZGVyX2QzZDkuZGxsIikpOwotCi0gICAgbUV4dGVuc2lvblN0
cmluZyA9ICIiOwotCi0gICAgLy8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKLSAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MgIjsK
LQotICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc2hhcmVIYW5kbGVT
dXBwb3J0ZWQoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdM
RV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJFR0xfQU5HTEVfcXVlcnlfc3VyZmFjZV9wb2ludGVyICI7Ci0KLSAgICBp
ZiAoc3dpZnRTaGFkZXIpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xf
QU5HTEVfc29mdHdhcmVfZGlzcGxheSAiOwotICAgIH0KLQotICAgIGlmIChzaGFyZUhhbmRsZVN1
cHBvcnRlZCgpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xF
X3N1cmZhY2VfZDNkX3RleHR1cmVfMmRfc2hhcmVfaGFuZGxlICI7Ci0gICAgfQotCi0gICAgbUV4
dGVuc2lvblN0cmluZyArPSAiRUdMX05WX3Bvc3Rfc3ViX2J1ZmZlciI7Ci0KLSAgICBzdGQ6OnN0
cmluZzo6c2l6ZV90eXBlIGVuZCA9IG1FeHRlbnNpb25TdHJpbmcuZmluZF9sYXN0X25vdF9vZign
ICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgewotICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyICpE
aXNwbGF5OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtRXh0ZW5z
aW9uU3RyaW5nLmNfc3RyKCk7Ci19Ci0KLWJvb2wgRGlzcGxheTo6c2hhcmVIYW5kbGVTdXBwb3J0
ZWQoKSBjb25zdCAKLXsKLSAgICAvLyBQSVggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdXNpbmcg
c2hhcmUgaGFuZGxlcywgc28gZGlzYWJsZSB0aGVtLgotICAgIHJldHVybiBpc0QzZDlFeERldmlj
ZSgpICYmICFnbDo6cGVyZkFjdGl2ZSgpOwotfQotCi0vLyBPbmx5IERpcmVjdDNEIDEwIHJlYWR5
IGRldmljZXMgc3VwcG9ydCBhbGwgdGhlIG5lY2Vzc2FyeSB2ZXJ0ZXggdGV4dHVyZSBmb3JtYXRz
LgotLy8gV2UgdGVzdCB0aGlzIHVzaW5nIEQzRDkgYnkgY2hlY2tpbmcgc3VwcG9ydCBmb3IgdGhl
IFIxNkYgZm9ybWF0LgotYm9vbCBEaXNwbGF5OjpnZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgbURldmljZUNhcHMuUGl4ZWxTaGFk
ZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigzLCAwKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0g
ICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5
TW9kZSk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdF
X1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SMTZGKTsKLQot
ICAgIHJldHVybiBTVUNDRUVERUQocmVzdWx0KTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXROb25Q
b3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEobURldmljZUNhcHMu
VGV4dHVyZUNhcHMgJiBEM0RQVEVYVFVSRUNBUFNfUE9XMikgJiYKLSAgICAgICAgICAgIShtRGV2
aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19DVUJFTUFQX1BPVzIpICYmCi0g
ICAgICAgICAgICEobURldmljZUNhcHMuVGV4dHVyZUNhcHMgJiBEM0RQVEVYVFVSRUNBUFNfTk9O
UE9XMkNPTkRJVElPTkFMKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRPY2NsdXNpb25RdWVyeVN1
cHBvcnQoKSBjb25zdAotewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRFF1ZXJ5OSAqcXVlcnkgPSBO
VUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllU
WVBFX09DQ0xVU0lPTiwgJnF1ZXJ5KTsKLSAgICAKLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkg
JiYgcXVlcnkpCi0gICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJT
SU9OKDMsIDApOyAKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9EaXNwbGF5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY3ZGJkMC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBEaXNw
bGF5Lmg6IERlZmluZXMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBh
YnN0cmFjdAotLy8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVu
dHMgRUdMRGlzcGxheS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KLQotI2lm
bmRlZiBJTkNMVURFX0RJU1BMQVlfSF8KLSNkZWZpbmUgSU5DTFVERV9ESVNQTEFZX0hfCi0KLSNp
Zm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0j
ZW5kaWYKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVk
ZSA8c2V0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvQ29uZmlnLmgiCi0jaW5jbHVkZSAibGliRUdML1N1cmZh
Y2UuaCIKLQotbmFtZXNwYWNlIGVnbAotewotY2xhc3MgRGlzcGxheQotewotICBwdWJsaWM6Ci0g
ICAgfkRpc3BsYXkoKTsKLQotICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwotICAgIHZvaWQgdGVybWlu
YXRlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY2VuZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBlbmRTY2VuZSgpOwotCi0gICAgc3RhdGljIGVnbDo6RGlzcGxheSAqZ2V0RGlzcGxheShFR0xO
YXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5SWQpOwotCi0gICAgYm9vbCBnZXRDb25maWdzKEVHTENv
bmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6
ZSwgRUdMaW50ICpudW1Db25maWcpOwotICAgIGJvb2wgZ2V0Q29uZmlnQXR0cmliKEVHTENvbmZp
ZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwotCi0gICAgRUdMU3Vy
ZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnLCBj
b25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwotICAgIEVHTFN1cmZhY2UgY3JlYXRlT2Zmc2NyZWVu
U3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIGNvbnN0IEVHTGlu
dCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBj
b25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5
UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7Ci0KLSAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgdm9pZCBkZXN0cm95Q29udGV4dChnbDo6Q29udGV4
dCAqY29udGV4dCk7Ci0KLSAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLSAgICBib29s
IGlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZyk7Ci0gICAgYm9vbCBpc1ZhbGlkQ29udGV4
dChnbDo6Q29udGV4dCAqY29udGV4dCk7Ci0gICAgYm9vbCBpc1ZhbGlkU3VyZmFjZShlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpOwotICAgIGJvb2wgaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKEhXTkQg
d2luZG93KTsKLQotICAgIEVHTGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKTsKLSAgICBFR0xpbnQg
Z2V0TWF4U3dhcEludGVydmFsKCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRERldmljZTkgKmdl
dERldmljZSgpOwotICAgIHZpcnR1YWwgRDNEQ0FQUzkgZ2V0RGV2aWNlQ2FwcygpOwotICAgIHZp
cnR1YWwgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqZ2V0QWRhcHRlcklkZW50aWZpZXIoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgdGVzdERldmljZUxvc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGVzdERl
dmljZVJlc2V0dGFibGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luYyhib29sIGJsb2NrKTsKLSAg
ICB2aXJ0dWFsIElEaXJlY3QzRFF1ZXJ5OSogYWxsb2NhdGVFdmVudFF1ZXJ5KCk7Ci0gICAgdmly
dHVhbCB2b2lkIGZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRFF1ZXJ5OSogcXVlcnkpOwotICAgIHZp
cnR1YWwgdm9pZCBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAq
bXVsdGlTYW1wbGVBcnJheSk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9y
dCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2
ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3Vw
cG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJh
YmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE9j
Y2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5j
aW5nU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRCdWZmZXJQb29sKERX
T1JEIHVzYWdlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdP
UkQgdXNhZ2UpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeURldmljZUxvc3QoKTsK
LSAgICBib29sIGlzRGV2aWNlTG9zdCgpOwotCi0gICAgYm9vbCBpc0QzZDlFeERldmljZSgpIGNv
bnN0IHsgcmV0dXJuIG1EM2Q5RXggIT0gTlVMTDsgfQotICAgIGNvbnN0IGNoYXIgKmdldEV4dGVu
c2lvblN0cmluZygpIGNvbnN0OwotICAgIGJvb2wgc2hhcmVIYW5kbGVTdXBwb3J0ZWQoKSBjb25z
dDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXNwbGF5KTsK
LQotICAgIERpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheUlkLCBIREMgZGV2aWNl
Q29udGV4dCwgYm9vbCBzb2Z0d2FyZSk7Ci0KLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgZ2V0
RGVmYXVsdFByZXNlbnRQYXJhbWV0ZXJzKCk7Ci0KLSAgICBib29sIHJlc3RvcmVMb3N0RGV2aWNl
KCk7Ci0KLSAgICBFR0xOYXRpdmVEaXNwbGF5VHlwZSBtRGlzcGxheUlkOwotICAgIGNvbnN0IEhE
QyBtRGM7Ci0KLSAgICBITU9EVUxFIG1EM2Q5TW9kdWxlOwotICAgIAotICAgIFVJTlQgbUFkYXB0
ZXI7Ci0gICAgRDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKLSAgICBJRGlyZWN0M0Q5ICptRDNkOTsg
IC8vIEFsd2F5cyB2YWxpZCBhZnRlciBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uLgotICAgIElE
aXJlY3QzRDlFeCAqbUQzZDlFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4IGlzIG5vdCBz
dXBwb3J0ZWQuCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4IGlzIG5vdCBz
dXBwb3J0ZWQuCi0KLSAgICAvLyBBIHBvb2wgb2YgZXZlbnQgcXVlcmllcyB0aGF0IGFyZSBjdXJy
ZW50bHkgdW51c2VkLgotICAgIHN0ZDo6dmVjdG9yPElEaXJlY3QzRFF1ZXJ5OSo+IG1FdmVudFF1
ZXJ5UG9vbDsKLQotICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOwotICAgIEQzREFEQVBURVJfSURF
TlRJRklFUjkgbUFkYXB0ZXJJZGVudGlmaWVyOwotICAgIEhXTkQgbURldmljZVdpbmRvdzsKLQot
ICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsKLSAgICBFR0xpbnQgbU1heFN3YXBJbnRlcnZhbDsKLSAg
ICBFR0xpbnQgbU1pblN3YXBJbnRlcnZhbDsKLSAgICBib29sIG1Tb2Z0d2FyZURldmljZTsKLSAg
ICAKLSAgICB0eXBlZGVmIHN0ZDo6c2V0PFN1cmZhY2UqPiBTdXJmYWNlU2V0OwotICAgIFN1cmZh
Y2VTZXQgbVN1cmZhY2VTZXQ7Ci0KLSAgICBDb25maWdTZXQgbUNvbmZpZ1NldDsKLQotICAgIHR5
cGVkZWYgc3RkOjpzZXQ8Z2w6OkNvbnRleHQqPiBDb250ZXh0U2V0OwotICAgIENvbnRleHRTZXQg
bUNvbnRleHRTZXQ7Ci0gICAgYm9vbCBtRGV2aWNlTG9zdDsKLQotICAgIGJvb2wgY3JlYXRlRGV2
aWNlKCk7Ci0gICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7Ci0gICAgYm9vbCByZXNldERldmlj
ZSgpOwotCi0gICAgdm9pZCBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7Ci0gICAgc3RkOjpzdHJpbmcg
bUV4dGVuc2lvblN0cmluZzsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIElOQ0xVREVfRElTUExBWV9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9SRUFETUUg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1JFQURNRQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGYwN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9SRUFETUUKQEAgLTAsMCArMSBAQAorVGhpcyBk
aXJlY3RvcnkncyBjb250ZW50cyBhcmUgbm90IHN5bmNlZCBmcm9tIHRoZSBBTkdMRSBwcm9qZWN0
IGJlY2F1c2Ugbm8gcGxhdGZvcm0gaW4gV2ViS2l0IG5lZWRzIHRoZW0geWV0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg5OWI3NzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY4MiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTdXJmYWNlLmNwcDogSW1wbGVtZW50cyB0aGUg
ZWdsOjpTdXJmYWNlIGNsYXNzLCByZXByZXNlbnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKLS8vIHN1
Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEgd2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVm
ZmVycy4KLS8vIEltcGxlbWVudHMgRUdMU3VyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5
LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFnZSAzLgotCi0jaW5jbHVkZSA8dGNoYXIuaD4KLQot
I2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSAibGliRUdML21haW4u
aCIKLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSA8ZHdtYXBpLmg+Ci0K
LW5hbWVzcGFjZSBlZ2wKLXsKLQotbmFtZXNwYWNlCi17Ci1jb25zdCBpbnQgdmVyc2lvbldpbmRv
d3NWaXN0YSA9IE1BS0VXT1JEKDB4MDAsIDB4MDYpOwotY29uc3QgaW50IHZlcnNpb25XaW5kb3dz
NyA9IE1BS0VXT1JEKDB4MDEsIDB4MDYpOwotCi0vLyBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhl
IG9wZXJhdGluZyBzeXN0ZW0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIG9yZGVyaW5nCi0vLyBj
b21wYXJpc29uLgotaW50IGdldENvbXBhcmFibGVPU1ZlcnNpb24oKQotewotICAgIERXT1JEIHZl
cnNpb24gPSBHZXRWZXJzaW9uKCk7Ci0gICAgaW50IG1ham9yVmVyc2lvbiA9IExPQllURShMT1dP
UkQodmVyc2lvbikpOwotICAgIGludCBtaW5vclZlcnNpb24gPSBISUJZVEUoTE9XT1JEKHZlcnNp
b24pKTsKLSAgICByZXR1cm4gTUFLRVdPUkQobWlub3JWZXJzaW9uLCBtYWpvclZlcnNpb24pOwot
fQotfQotCi1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAq
Y29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIAotICAg
IDogbURpc3BsYXkoZGlzcGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5kb3cpLCBt
UG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotewotICAgIG1T
d2FwQ2hhaW4gPSBOVUxMOwotICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICBtRGVwdGhTdGVu
Y2lsID0gTlVMTDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4
dHVyZSA9IE5VTEw7Ci0gICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKLSAgICBtVGV4dHVyZSA9IE5V
TEw7Ci0gICAgbVRleHR1cmVGb3JtYXQgPSBFR0xfTk9fVEVYVFVSRTsKLSAgICBtVGV4dHVyZVRh
cmdldCA9IEVHTF9OT19URVhUVVJFOwotCi0gICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50
KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVh
bCBwaXhlbCBhc3BlY3QgcmF0aW8KLSAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVS
OwotICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKLSAgICBtU3dhcElu
dGVydmFsID0gLTE7Ci0gICAgc2V0U3dhcEludGVydmFsKDEpOwotCi0gICAgc3ViY2xhc3NXaW5k
b3coKTsKLX0KLQotU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25m
aWcgKmNvbmZpZywgSEFORExFIHNoYXJlSGFuZGxlLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWln
aHQsIEVHTGVudW0gdGV4dHVyZUZvcm1hdCwgRUdMZW51bSB0ZXh0dXJlVHlwZSkKLSAgICA6IG1E
aXNwbGF5KGRpc3BsYXkpLCBtV2luZG93KE5VTEwpLCBtQ29uZmlnKGNvbmZpZyksIG1TaGFyZUhh
bmRsZShzaGFyZUhhbmRsZSksIG1XaWR0aCh3aWR0aCksIG1IZWlnaHQoaGVpZ2h0KSwgbVBvc3RT
dWJCdWZmZXJTdXBwb3J0ZWQoRUdMX0ZBTFNFKQotewotICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwot
ICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAg
bVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgbVRl
eHR1cmVGb3JtYXQgPSB0ZXh0dXJlRm9ybWF0OwotICAgIG1UZXh0dXJlVGFyZ2V0ID0gdGV4dHVy
ZVR5cGU7Ci0KLSAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChFR0xpbnQpKDEuMCAqIEVHTF9ESVNQ
TEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgYWN0dWFsIHBpeGVsIGFzcGVjdCBy
YXRpbwotICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7Ci0gICAgbVN3YXBCZWhh
dmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwotICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAg
ICBzZXRTd2FwSW50ZXJ2YWwoMSk7Ci19Ci0KLVN1cmZhY2U6On5TdXJmYWNlKCkKLXsKLSAgICB1
bnN1YmNsYXNzV2luZG93KCk7Ci0gICAgcmVsZWFzZSgpOwotfQotCi1ib29sIFN1cmZhY2U6Omlu
aXRpYWxpemUoKQotewotICAgIEFTU0VSVCghbVN3YXBDaGFpbiAmJiAhbU9mZnNjcmVlblRleHR1
cmUgJiYgIW1EZXB0aFN0ZW5jaWwpOwotCi0gICAgaWYgKCFyZXNldFN3YXBDaGFpbigpKQotICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTW9kaWZ5IHByZXNlbnQgcGFyYW1ldGVycyBmb3Ig
dGhpcyB3aW5kb3csIGlmIHdlIGFyZSBjb21wb3NpdGVkLAotICAgIC8vIHRvIG1pbmltaXplIHRo
ZSBhbW91bnQgb2YgcXVldWluZyBkb25lIGJ5IERXTSBiZXR3ZWVuIG91ciBjYWxscyB0bwotICAg
IC8vIHByZXNlbnQgYW5kIHRoZSBhY3R1YWwgc2NyZWVuLgotICAgIGlmIChtV2luZG93ICYmIChn
ZXRDb21wYXJhYmxlT1NWZXJzaW9uKCkgPj0gdmVyc2lvbldpbmRvd3NWaXN0YSkpIHsKLSAgICAg
IEJPT0wgaXNDb21wb3NpdGVkOwotICAgICAgSFJFU1VMVCByZXN1bHQgPSBEd21Jc0NvbXBvc2l0
aW9uRW5hYmxlZCgmaXNDb21wb3NpdGVkKTsKLSAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAm
JiBpc0NvbXBvc2l0ZWQpIHsKLSAgICAgICAgRFdNX1BSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1zOwotICAgICAgICBtZW1zZXQoJnByZXNlbnRQYXJhbXMsIDAsIHNpemVvZihwcmVzZW50
UGFyYW1zKSk7Ci0gICAgICAgIHByZXNlbnRQYXJhbXMuY2JTaXplID0gc2l6ZW9mKERXTV9QUkVT
RU5UX1BBUkFNRVRFUlMpOwotICAgICAgICBwcmVzZW50UGFyYW1zLmNCdWZmZXIgPSAyOwotCi0g
ICAgICAgIHJlc3VsdCA9IER3bVNldFByZXNlbnRQYXJhbWV0ZXJzKG1XaW5kb3csICZwcmVzZW50
UGFyYW1zKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgIEVSUigiVW5h
YmxlIHRvIHNldCBwcmVzZW50IHBhcmFtZXRlcnM6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6cmVsZWFzZSgp
Ci17Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFj
a0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3Rl
bmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAg
ICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJl
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4
dHVyZS0+cmVsZWFzZVRleEltYWdlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotfQotCi1ib29sIFN1cmZhY2U6OnJlc2V0U3dh
cENoYWluKCkKLXsKLSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewotICAgICAgICByZXR1cm4gcmVz
ZXRTd2FwQ2hhaW4obVdpZHRoLCBtSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBSRUNUIHdpbmRvd1Jl
Y3Q7Ci0gICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93UmVj
dCkpCi0gICAgewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotCi0gICAgICAgIEVSUigiQ291bGQg
bm90IHJldHJpZXZlIHRoZSB3aW5kb3cgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc2V0U3dhcENoYWluKHdpbmRvd1JlY3QucmlnaHQg
LSB3aW5kb3dSZWN0LmxlZnQsIHdpbmRvd1JlY3QuYm90dG9tIC0gd2luZG93UmVjdC50b3ApOwot
fQotCi1ib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVyV2lkdGgsIGlu
dCBiYWNrYnVmZmVySGVpZ2h0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1E
aXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBFdmljdCBhbGwgbm9uLXJlbmRl
ciB0YXJnZXQgdGV4dHVyZXMgdG8gc3lzdGVtIG1lbW9yeSBhbmQgcmVsZWFzZSBhbGwgcmVzb3Vy
Y2VzCi0gICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVtIHRvIGZyZWUgdXAgYXMgbXVjaCB2
aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuCi0gICAgZGV2aWNlLT5FdmljdE1hbmFnZWRSZXNvdXJj
ZXMoKTsKLQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHsw
fTsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0
aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0OwotICAgIC8vIFdl
IHNldCBCYWNrQnVmZmVyQ291bnQgPSAxIGV2ZW4gd2hlbiB3ZSB1c2UgRDNEU1dBUEVGRkVDVF9G
TElQRVguCi0gICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIERpcmVjdFggZG9jcyBhcmUgYSBiaXQg
dmFndWUgd2hldGhlciB0byBzZXQgdGhpcyB0byAxCi0gICAgLy8gb3IgMi4gVGhlIHJ1bnRpbWUg
c2VlbXMgdG8gYWNjZXB0IDEsIHNvIHdlIHNwZWN1bGF0ZSB0aGF0IGVpdGhlciBpdCBpcwotICAg
IC8vIGZvcmNpbmcgaXQgdG8gMiB3aXRob3V0IHRlbGxpbmcgdXMsIG9yIGJldHRlciwgZG9pbmcg
c29tZXRoaW5nIHNtYXJ0Ci0gICAgLy8gYmVoaW5kIHRoZSBzY2VuZXMga25vd2luZyB0aGF0IHdl
IGRvbid0IG5lZWQgbW9yZS4KLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQg
PSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBtQ29uZmlnLT5t
UmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0
aFN0ZW5jaWwgPSBGQUxTRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7Ci0gICAg
cHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdpbmRvd0hhbmRsZSgpOwotICAg
IHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNh
bXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVk
Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2VudElu
dGVydmFsOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNU
X0RJU0NBUkQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOwotICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLQot
ICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0
aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQotICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0
IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBpdHMgY29udGVudHMu
Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtQmFja0J1
ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1C
YWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0g
ICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtT2Zm
c2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0g
ICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0
ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7Ci0gICAgSEFO
RExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgIGlmICghbVdpbmRvdyAmJiBtRGlzcGxheS0+
c2hhcmVIYW5kbGVTdXBwb3J0ZWQoKSkKLSAgICB7Ci0gICAgICAgIHBTaGFyZUhhbmRsZSA9ICZt
U2hhcmVIYW5kbGU7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0LCBE
M0RQT09MX0RFRkFVTFQsICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUg
b2Zmc2NyZWVuIHRleHR1cmU6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmVsZWFzZSgpOwot
Ci0gICAgICAgIGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm9sZFJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7Ci0K
LSAgICByZXN1bHQgPSBtT2Zmc2NyZWVuVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZtUmVu
ZGVyVGFyZ2V0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgaWYgKG9s
ZFJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIFJFQ1QgcmVjdCA9Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIDAsIDAsCi0gICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQKLSAgICAgICAgfTsK
LQotICAgICAgICBpZiAocmVjdC5yaWdodCA+IHN0YXRpY19jYXN0PExPTkc+KHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3Qucmln
aHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGg7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAocmVjdC5ib3R0b20gPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVySGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVjdC5ib3R0b20g
PSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0OwotICAgICAgICB9Ci0KLSAgICAg
ICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJl
dGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNE
VEVYRl9OT05FKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAg
ICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykK
LSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFp
bigmcHJlc2VudFBhcmFtZXRlcnMsICZtU3dhcENoYWluKTsKLQotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09
IEQzREVSUl9JTlZBTElEQ0FMTCB8fCByZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpOwotCi0g
ICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWlucyBv
ciBvZmZzY3JlZW4gc3VyZmFjZXM6ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbGVh
c2UoKTsKLQotICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmVz
dWx0ID0gbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9O
TywgJm1CYWNrQnVmZmVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICBpZiAobUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5L
Tk9XTikKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2ls
U3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0
LCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNh
bXBsZVF1YWxpdHksIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7Ci0KLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJl
c3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwpOwotCi0gICAgICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZihpc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
aXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtV2lkdGggPSBwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyV2lkdGg7Ci0gICAgbUhlaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQ7Ci0KLSAgICBtUHJlc2VudEludGVydmFsRGlydHkgPSBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdXJmYWNlOjpzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHks
IEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkKLXsKLSAgICBpZiAoIW1Td2FwQ2hhaW4pCi0g
ICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoeCArIHdpZHRoID4g
bVdpZHRoKQotICAgIHsKLSAgICAgICAgd2lkdGggPSBtV2lkdGggLSB4OwotICAgIH0KLQotICAg
IGlmICh5ICsgaGVpZ2h0ID4gbUhlaWdodCkKLSAgICB7Ci0gICAgICAgIGhlaWdodCA9IG1IZWln
aHQgLSB5OwotICAgIH0KLQotICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgLy8gRGlzYWJsZSBhbGwgcGlw
ZWxpbmUgb3BlcmF0aW9ucwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJM
RSwgRDNEWkJfRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1P
REUsIEQzREZJTExfU09MSUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQ
SEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19B
TFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JX
UklURUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJ
VEVFTkFCTEVfUkVEKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklU
RUVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NP
UlRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwot
ICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRSZW5k
ZXJUYXJnZXQoMCwgbUJhY2tCdWZmZXIpOwotICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3Vy
ZmFjZShOVUxMKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBtT2Zmc2NyZWVuVGV4dHVy
ZSk7Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwg
RDNEVE9QX1NFTEVDVEFSRzEpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwg
RDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEVYVFVSRSk7Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJl
U3RhZ2VTdGF0ZSgxLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwotICAgIGRldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsK
LSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVY
Rl9QT0lOVCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNT
VSwgRDNEVEFERFJFU1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNldEZWRihE
M0RGVkZfWFlaUkhXIHwgRDNERlZGX1RFWDEpOwotCi0gICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0
ID0gezAsIDAsIG1XaWR0aCwgbUhlaWdodCwgMC4wZiwgMS4wZn07Ci0gICAgZGV2aWNlLT5TZXRW
aWV3cG9ydCgmdmlld3BvcnQpOwotCi0gICAgZmxvYXQgeDEgPSB4IC0gMC41ZjsKLSAgICBmbG9h
dCB5MSA9IChtSGVpZ2h0IC0geSAtIGhlaWdodCkgLSAwLjVmOwotICAgIGZsb2F0IHgyID0gKHgg
KyB3aWR0aCkgLSAwLjVmOwotICAgIGZsb2F0IHkyID0gKG1IZWlnaHQgLSB5KSAtIDAuNWY7Ci0K
LSAgICBmbG9hdCB1MSA9IHggLyBmbG9hdChtV2lkdGgpOwotICAgIGZsb2F0IHYxID0geSAvIGZs
b2F0KG1IZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHggKyB3aWR0aCkgLyBmbG9hdChtV2lkdGgp
OwotICAgIGZsb2F0IHYyID0gKHkgKyBoZWlnaHQpIC8gZmxvYXQobUhlaWdodCk7Ci0KLSAgICBm
bG9hdCBxdWFkWzRdWzZdID0ge3t4MSwgeTEsIDAuMGYsIDEuMGYsIHUxLCB2Mn0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7eDIsIHkxLCAwLjBmLCAxLjBmLCB1MiwgdjJ9LAotICAgICAgICAg
ICAgICAgICAgICAgICAge3gyLCB5MiwgMC4wZiwgMS4wZiwgdTIsIHYxfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHt4MSwgeTIsIDAuMGYsIDEuMGYsIHUxLCB2MX19OyAgIC8vIHgsIHksIHos
IHJodywgdSwgdgotCi0gICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLSAgICBkZXZpY2UtPkRy
YXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9h
dCkpOwotICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotCi0gICAgZGV2aWNlLT5TZXRUZXh0dXJl
KDAsIE5VTEwpOwotCi0gICAgUkVDVCByZWN0ID0KLSAgICB7Ci0gICAgICAgIHgsIG1IZWlnaHQg
LSB5IC0gaGVpZ2h0LAotICAgICAgICB4ICsgd2lkdGgsIG1IZWlnaHQgLSB5Ci0gICAgfTsKLQot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudCgmcmVjdCwgJnJlY3QsIE5V
TEwsIE5VTEwsIDApOwotCi0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBzdGF0aWNfY2FzdDxn
bDo6Q29udGV4dCo+KGdsR2V0Q3VycmVudENvbnRleHQoKSk7Ci0gICAgaWYgKGNvbnRleHQpCi0g
ICAgewotICAgICAgICBjb250ZXh0LT5tYXJrQWxsU3RhdGVEaXJ0eSgpOwotICAgIH0KLQotICAg
IGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQotICAgIHsKLSAgICAgICAgbURpc3BsYXkt
Pm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgY2hlY2tGb3JPdXRPZkRhdGVTd2Fw
Q2hhaW4oKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1IV05EIFN1cmZhY2U6OmdldFdpbmRv
d0hhbmRsZSgpCi17Ci0gICAgcmV0dXJuIG1XaW5kb3c7Ci19Ci0KLQotI2RlZmluZSBrU3VyZmFj
ZVByb3BlcnR5IF9URVhUKCJFZ2w6OlN1cmZhY2VPd25lciIpCi0jZGVmaW5lIGtQYXJlbnRXbmRQ
cm9jIF9URVhUKCJFZ2w6OlN1cmZhY2VQYXJlbnRXbmRQcm9jIikKLQotc3RhdGljIExSRVNVTFQg
Q0FMTEJBQ0sgU3VyZmFjZVdpbmRvd1Byb2MoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3cGFyYW0sIExQQVJBTSBscGFyYW0pCi17Ci0gIGlmIChtZXNzYWdlID09IFdNX1NJWkUpCi0g
IHsKLSAgICAgIFN1cmZhY2UqIHN1cmYgPSByZWludGVycHJldF9jYXN0PFN1cmZhY2UqPihHZXRQ
cm9wKGh3bmQsIGtTdXJmYWNlUHJvcGVydHkpKTsKLSAgICAgIGlmKHN1cmYpCi0gICAgICB7Ci0g
ICAgICAgICAgc3VyZi0+Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsKLSAgICAgIH0KLSAg
fQotICBXTkRQUk9DIHByZXZXbmRGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DID4oR2V0
UHJvcChod25kLCBrUGFyZW50V25kUHJvYykpOwotICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocHJl
dlduZEZ1bmMsIGh3bmQsIG1lc3NhZ2UsIHdwYXJhbSwgbHBhcmFtKTsKLX0KLQotdm9pZCBTdXJm
YWNlOjpzdWJjbGFzc1dpbmRvdygpCi17Ci0gICAgaWYgKCFtV2luZG93KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIERXT1JEIHByb2Nlc3NJZDsKLSAgICBEV09SRCB0aHJl
YWRJZCA9IEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChtV2luZG93LCAmcHJvY2Vzc0lkKTsKLSAg
ICBpZiAocHJvY2Vzc0lkICE9IEdldEN1cnJlbnRQcm9jZXNzSWQoKSB8fCB0aHJlYWRJZCAhPSBH
ZXRDdXJyZW50VGhyZWFkSWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBTZXRMYXN0RXJyb3IoMCk7Ci0gICAgTE9OR19QVFIgb2xkV25kUHJvYyA9IFNldFdpbmRvd0xv
bmdQdHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihT
dXJmYWNlV2luZG93UHJvYykpOwotICAgIGlmKG9sZFduZFByb2MgPT0gMCAmJiBHZXRMYXN0RXJy
b3IoKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgbVdpbmRvd1N1YmNsYXNzZWQg
PSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFNldFByb3AobVdpbmRvdywg
a1N1cmZhY2VQcm9wZXJ0eSwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKLSAgICBT
ZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4o
b2xkV25kUHJvYykpOwotICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBT
dXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkKLXsKLSAgICBpZighbVdpbmRvd1N1YmNsYXNzZWQp
Ci0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gdW4tc3ViY2xhc3MKLSAg
ICBMT05HX1BUUiBwYXJlbnRXbmRGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oR2V0
UHJvcChtV2luZG93LCBrUGFyZW50V25kUHJvYykpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHdpbmRv
d3Byb2MgaXMgc3RpbGwgU3VyZmFjZVdpbmRvd1Byb2MuCi0gICAgLy8gSWYgdGhpcyBhc3NlcnQg
ZmFpbHMsIHRoZW4gaXQgaXMgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBoYXMgc3ViY2xhc3NlZCB0
aGUKLSAgICAvLyBod25kIGFzIHdlbGwgYW5kIGRpZCBub3QgdW5zdWJjbGFzcyBiZWZvcmUgZGVz
dHJveWluZyBpdHMgRUdMIGNvbnRleHQuIFRoZQotICAgIC8vIGFwcGxpY2F0aW9uIHNob3VsZCBi
ZSBtb2RpZmllZCB0byBlaXRoZXIgc3ViY2xhc3MgYmVmb3JlIGluaXRpYWxpemluZyB0aGUKLSAg
ICAvLyBFR0wgY29udGV4dCwgb3IgdG8gdW5zdWJjbGFzcyBiZWZvcmUgZGVzdHJveWluZyB0aGUg
RUdMIGNvbnRleHQuCi0gICAgaWYocGFyZW50V25kRnVuYykKLSAgICB7Ci0gICAgICAgIExPTkdf
UFRSIHByZXZXbmRGdW5jID0gU2V0V2luZG93TG9uZ1B0cihtV2luZG93LCBHV0xQX1dORFBST0Ms
IHBhcmVudFduZEZ1bmMpOwotICAgICAgICBBU1NFUlQocHJldlduZEZ1bmMgPT0gcmVpbnRlcnBy
ZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsKLSAgICB9Ci0KLSAgICBSZW1v
dmVQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHkpOwotICAgIFJlbW92ZVByb3AobVdpbmRv
dywga1BhcmVudFduZFByb2MpOwotICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7Ci19Ci0K
LWJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQotewotICAgIFJFQ1Qg
Y2xpZW50OwotICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVu
dCkpCi0gICAgewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gR3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMg
Z3Jvd24uIFdlIG5lZWQgdG8gZ3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLgot
ICAgIGludCBjbGllbnRXaWR0aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0OwotICAgIGlu
dCBjbGllbnRIZWlnaHQgPSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcDsKLSAgICBib29sIHNp
emVEaXJ0eSA9IGNsaWVudFdpZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdl
dEhlaWdodCgpOwotCi0gICAgaWYgKHNpemVEaXJ0eSB8fCBtUHJlc2VudEludGVydmFsRGlydHkp
Ci0gICAgewotICAgICAgICByZXNldFN3YXBDaGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0
KTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGdldEN1cnJlbnREcmF3
U3VyZmFjZSgpKSA9PSB0aGlzKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbE1ha2VDdXJyZW50
KGdsR2V0Q3VycmVudENvbnRleHQoKSwgc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3Vy
cmVudERpc3BsYXkoKSksIHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotRFdPUkQgU3VyZmFjZTo6Y29udmVydElu
dGVydmFsKEVHTGludCBpbnRlcnZhbCkKLXsKLSAgICBzd2l0Y2goaW50ZXJ2YWwpCi0gICAgewot
ICAgICAgY2FzZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEU7Ci0gICAg
ICBjYXNlIDE6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORTsKLSAgICAgIGNhc2UgMjog
cmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPOwotICAgICAgY2FzZSAzOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9USFJFRTsKLSAgICAgIGNhc2UgNDogcmV0dXJuIEQzRFBSRVNFTlRf
SU5URVJWQUxfRk9VUjsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsKLX0KLQotYm9vbCBTdXJmYWNl
Ojpzd2FwKCkKLXsKLSAgICByZXR1cm4gc3dhcFJlY3QoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0KTsK
LX0KLQotYm9vbCBTdXJmYWNlOjpwb3N0U3ViQnVmZmVyKEVHTGludCB4LCBFR0xpbnQgeSwgRUdM
aW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQotewotICAgIGlmICghbVBvc3RTdWJCdWZmZXJTdXBw
b3J0ZWQpCi0gICAgewotICAgICAgICAvLyBTcGVjIGlzIG5vdCBjbGVhciBhYm91dCBob3cgdGhp
cyBzaG91bGQgYmUgaGFuZGxlZC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBzd2FwUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotRUdMaW50IFN1
cmZhY2U6OmdldFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdpZHRoOwotfQotCi1FR0xp
bnQgU3VyZmFjZTo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0K
LQotRUdMaW50IFN1cmZhY2U6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOwotfQotCi0vLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQot
ewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+
QWRkUmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLS8vIElu
Y3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0
aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldERlcHRo
U3RlbmNpbCgpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVw
dGhTdGVuY2lsLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsK
LX0KLQotSURpcmVjdDNEVGV4dHVyZTkgKlN1cmZhY2U6OmdldE9mZnNjcmVlblRleHR1cmUoKQot
ewotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5U
ZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7
Ci19Ci0KLXZvaWQgU3VyZmFjZTo6c2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKLXsK
LSAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSBpbnRlcnZhbCkKLSAgICB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgbVN3YXBJbnRlcnZhbCA9IGludGVydmFsOwotICAgIG1Td2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1heChtU3dhcEludGVydmFsLCBtRGlzcGxheS0+Z2V0TWluU3dhcElu
dGVydmFsKCkpOwotICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtU3dhcEludGVydmFsLCBt
RGlzcGxheS0+Z2V0TWF4U3dhcEludGVydmFsKCkpOwotCi0gICAgbVByZXNlbnRJbnRlcnZhbCA9
IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsKLSAgICBtUHJlc2VudEludGVydmFsRGly
dHkgPSB0cnVlOwotfQotCi1FR0xlbnVtIFN1cmZhY2U6OmdldFRleHR1cmVGb3JtYXQoKSBjb25z
dAotewotICAgIHJldHVybiBtVGV4dHVyZUZvcm1hdDsKLX0KLQotRUdMZW51bSBTdXJmYWNlOjpn
ZXRUZXh0dXJlVGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVUYXJnZXQ7Ci19
Ci0KLXZvaWQgU3VyZmFjZTo6c2V0Qm91bmRUZXh0dXJlKGdsOjpUZXh0dXJlMkQgKnRleHR1cmUp
Ci17Ci0gICAgbVRleHR1cmUgPSB0ZXh0dXJlOwotfQotCi1nbDo6VGV4dHVyZTJEICpTdXJmYWNl
OjpnZXRCb3VuZFRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQot
RDNERk9STUFUIFN1cmZhY2U6OmdldEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Db25m
aWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvU3VyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGJk
NzAyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFN1cmZhY2UuaDogRGVmaW5lcyB0aGUgZWdsOjpTdXJmYWNlIGNsYXNzLCByZXByZXNl
bnRpbmcgYSBkcmF3aW5nIHN1cmZhY2UKLS8vIHN1Y2ggYXMgdGhlIGNsaWVudCBhcmVhIG9mIGEg
d2luZG93LCBpbmNsdWRpbmcgYW55IGJhY2sgYnVmZmVycy4KLS8vIEltcGxlbWVudHMgRUdMU3Vy
ZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbRUdMIDEuNF0gc2VjdGlvbiAyLjIgcGFn
ZSAzLgotCi0jaWZuZGVmIElOQ0xVREVfU1VSRkFDRV9IXwotI2RlZmluZSBJTkNMVURFX1NVUkZB
Q0VfSF8KLQotI2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8
ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNwYWNlIGds
Ci17Ci1jbGFzcyBUZXh0dXJlMkQ7Ci19Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNzIERpc3Bs
YXk7Ci1jbGFzcyBDb25maWc7Ci0KLWNsYXNzIFN1cmZhY2UKLXsKLSAgcHVibGljOgotICAgIFN1
cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgSFdORCB3
aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKLSAgICBTdXJmYWNlKERpc3Bs
YXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVH
TGVudW0gdGV4dHVyZVRhcmdldCk7Ci0KLSAgICB+U3VyZmFjZSgpOwotCi0gICAgYm9vbCBpbml0
aWFsaXplKCk7Ci0gICAgdm9pZCByZWxlYXNlKCk7Ci0gICAgYm9vbCByZXNldFN3YXBDaGFpbigp
OwotCi0gICAgSFdORCBnZXRXaW5kb3dIYW5kbGUoKTsKLSAgICBib29sIHN3YXAoKTsKLSAgICBi
b29sIHBvc3RTdWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGlu
dCBoZWlnaHQpOwotCi0gICAgdmlydHVhbCBFR0xpbnQgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgRUdMaW50IGlz
UG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RUZXh0dXJlOSAqZ2V0
T2Zmc2NyZWVuVGV4dHVyZSgpOwotCi0gICAgSEFORExFIGdldFNoYXJlSGFuZGxlKCkgeyByZXR1
cm4gbVNoYXJlSGFuZGxlOyB9Ci0KLSAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50
ZXJ2YWwpOwotICAgIGJvb2wgY2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsgICAvLyBSZXR1
cm5zIHRydWUgaWYgc3dhcGNoYWluIGNoYW5nZWQgZHVlIHRvIHJlc2l6ZSBvciBpbnRlcnZhbCB1
cGRhdGUKLQotICAgIHZpcnR1YWwgRUdMZW51bSBnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBFR0xlbnVtIGdldFRleHR1cmVUYXJnZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEQzREZPUk1BVCBnZXRGb3JtYXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRCb3Vu
ZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSk7Ci0gICAgdmlydHVhbCBnbDo6VGV4dHVy
ZTJEICpnZXRCb3VuZFRleHR1cmUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oU3VyZmFjZSk7Ci0KLSAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsK
LSAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOwotICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICptQmFja0J1ZmZlcjsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsK
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSogbVJlbmRlclRhcmdldDsKLSAgICBJRGlyZWN0M0RUZXh0
dXJlOSogbU9mZnNjcmVlblRleHR1cmU7Ci0KLSAgICBIQU5ETEUgbVNoYXJlSGFuZGxlOwotCi0g
ICAgdm9pZCBzdWJjbGFzc1dpbmRvdygpOwotICAgIHZvaWQgdW5zdWJjbGFzc1dpbmRvdygpOwot
ICAgIGJvb2wgcmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZm
ZXJIZWlnaHQpOwotICAgIGJvb2wgc3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQg
d2lkdGgsIEVHTGludCBoZWlnaHQpOwotICAgIHN0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwo
RUdMaW50IGludGVydmFsKTsKLQotICAgIGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAv
LyBXaW5kb3cgdGhhdCB0aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4KLSAgICBib29sIG1XaW5k
b3dTdWJjbGFzc2VkOyAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgd2Ugc3VjY2Vzc2Z1bGx5
IHN1YmNsYXNzZWQgbVdpbmRvdyBmb3IgV01fUkVTSVpFIGhvb2tpbmcKLSAgICBjb25zdCBlZ2w6
OkNvbmZpZyAqbUNvbmZpZzsgICAgLy8gRUdMIGNvbmZpZyBzdXJmYWNlIHdhcyBjcmVhdGVkIHdp
dGgKLSAgICBFR0xpbnQgbUhlaWdodDsgICAgICAgICAgICAgICAgLy8gSGVpZ2h0IG9mIHN1cmZh
Y2UKLSAgICBFR0xpbnQgbVdpZHRoOyAgICAgICAgICAgICAgICAgLy8gV2lkdGggb2Ygc3VyZmFj
ZQotLy8gIEVHTGludCBob3Jpem9udGFsUmVzb2x1dGlvbjsgICAvLyBIb3Jpem9udGFsIGRvdCBw
aXRjaAotLy8gIEVHTGludCB2ZXJ0aWNhbFJlc29sdXRpb247ICAgICAvLyBWZXJ0aWNhbCBkb3Qg
cGl0Y2gKLS8vICBFR0xCb29sZWFuIGxhcmdlc3RQQnVmZmVyOyAgICAgLy8gSWYgdHJ1ZSwgY3Jl
YXRlIGxhcmdlc3QgcGJ1ZmZlciBwb3NzaWJsZQotLy8gIEVHTEJvb2xlYW4gbWlwbWFwVGV4dHVy
ZTsgICAgICAvLyBUcnVlIGlmIHRleHR1cmUgaGFzIG1pcG1hcHMKLS8vICBFR0xpbnQgbWlwbWFw
TGV2ZWw7ICAgICAgICAgICAgLy8gTWlwbWFwIGxldmVsIHRvIHJlbmRlciB0bwotLy8gIEVHTGVu
dW0gbXVsdGlzYW1wbGVSZXNvbHZlOyAgICAvLyBNdWx0aXNhbXBsZSByZXNvbHZlIGJlaGF2aW9y
Ci0gICAgRUdMaW50IG1QaXhlbEFzcGVjdFJhdGlvOyAgICAgIC8vIERpc3BsYXkgYXNwZWN0IHJh
dGlvCi0gICAgRUdMZW51bSBtUmVuZGVyQnVmZmVyOyAgICAgICAgIC8vIFJlbmRlciBidWZmZXIK
LSAgICBFR0xlbnVtIG1Td2FwQmVoYXZpb3I7ICAgICAgICAgLy8gQnVmZmVyIHN3YXAgYmVoYXZp
b3IKLSAgICBFR0xlbnVtIG1UZXh0dXJlRm9ybWF0OyAgICAgICAgLy8gRm9ybWF0IG9mIHRleHR1
cmU6IFJHQiwgUkdCQSwgb3Igbm8gdGV4dHVyZQotICAgIEVHTGVudW0gbVRleHR1cmVUYXJnZXQ7
ICAgICAgICAvLyBUeXBlIG9mIHRleHR1cmU6IDJEIG9yIG5vIHRleHR1cmUKLS8vICBFR0xlbnVt
IHZnQWxwaGFGb3JtYXQ7ICAgICAgICAgLy8gQWxwaGEgZm9ybWF0IGZvciBPcGVuVkcKLS8vICBF
R0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRwot
ICAgIEVHTGludCBtU3dhcEludGVydmFsOwotICAgIEVHTGludCBtUG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZDsKLSAgICAKLSAgICBEV09SRCBtUHJlc2VudEludGVydmFsOwotICAgIGJvb2wgbVByZXNl
bnRJbnRlcnZhbERpcnR5OwotICAgIGdsOjpUZXh0dXJlMkQgKm1UZXh0dXJlOwotfTsKLX0KLQot
I2VuZGlmICAgLy8gSU5DTFVERV9TVVJGQUNFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML2xpYkVHTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUw
ODlkMmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9s
aWJFR0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE4MSArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBsaWJFR0wuY3BwOiBJbXBsZW1lbnRzIHRoZSBleHBvcnRlZCBFR0wgZnVuY3Rp
b25zLgotCi0jaW5jbHVkZSA8ZXhjZXB0aW9uPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
Ci0jaW5jbHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wv
bWFpbi5oIgotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLQotYm9vbCB2YWxpZGF0ZURp
c3BsYXkoZWdsOjpEaXNwbGF5ICpkaXNwbGF5KQotewotICAgIGlmIChkaXNwbGF5ID09IEVHTF9O
T19ESVNQTEFZKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwg
ZmFsc2UpOwotICAgIH0KLQotICAgIGlmICghZGlzcGxheS0+aXNJbml0aWFsaXplZCgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElBTElaRUQsIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB2YWxpZGF0ZUNvbmZpZyhlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIEVHTENvbmZpZyBjb25maWcpCi17Ci0gICAgaWYgKCF2YWxpZGF0ZURp
c3BsYXkoZGlzcGxheSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKCFkaXNwbGF5LT5pc1ZhbGlkQ29uZmlnKGNvbmZpZykpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCB2YWxpZGF0ZUNvbnRleHQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBn
bDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc3Bs
YXktPmlzVmFsaWRDb250ZXh0KGNvbnRleHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQ09OVEVYVCwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIHZhbGlkYXRlU3VyZmFjZShlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFj
ZSAqc3VyZmFjZSkKLXsKLSAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc3BsYXktPmlzVmFs
aWRTdXJmYWNlKHN1cmZhY2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
U1VSRkFDRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1leHRlcm4g
IkMiCi17Ci1FR0xpbnQgX19zdGRjYWxsIGVnbEdldEVycm9yKHZvaWQpCi17Ci0gICAgRVZFTlQo
IigpIik7Ci0KLSAgICBFR0xpbnQgZXJyb3IgPSBlZ2w6OmdldEN1cnJlbnRFcnJvcigpOwotCi0g
ICAgaWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgZWdsOjpzZXRDdXJy
ZW50RXJyb3IoRUdMX1NVQ0NFU1MpOwotICAgIH0KLQotICAgIHJldHVybiBlcnJvcjsKLX0KLQot
RUdMRGlzcGxheSBfX3N0ZGNhbGwgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBk
aXNwbGF5X2lkKQotewotICAgIEVWRU5UKCIoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9p
ZCA9IDB4JTAuOHApIiwgZGlzcGxheV9pZCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlZ2w6OkRpc3BsYXk6OmdldERpc3BsYXkoZGlzcGxheV9pZCk7Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBFR0xfTk9fRElTUExBWSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2Fs
bCBlZ2xJbml0aWFsaXplKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgKm1ham9yLCBFR0xpbnQgKm1p
bm9yKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQgKm1h
am9yID0gMHglMC44cCwgRUdMaW50ICptaW5vciA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHks
IG1ham9yLCBtaW5vcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChkcHkgPT0gRUdM
X05PX0RJU1BMQVkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0RJU1BMQVksIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlm
ICghZGlzcGxheS0+aW5pdGlhbGl6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtYWpvcikgKm1ham9yID0gMTsKLSAgICAgICAgaWYgKG1pbm9yKSAqbWlub3IgPSA0
OwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xUZXJt
aW5hdGUoRUdMRGlzcGxheSBkcHkpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4
JTAuOHApIiwgZHB5KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGRweSA9PSBFR0xf
Tk9fRElTUExBWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
RElTUExBWSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgZGlz
cGxheS0+dGVybWluYXRlKCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIg
Kl9fc3RkY2FsbCBlZ2xRdWVyeVN0cmluZyhFR0xEaXNwbGF5IGRweSwgRUdMaW50IG5hbWUpCi17
Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTGludCBuYW1lID0gJWQp
IiwgZHB5LCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAo
IXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG5hbWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEVHTF9DTElFTlRfQVBJUzoKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNz
KCJPcGVuR0xfRVMiKTsKLSAgICAgICAgICBjYXNlIEVHTF9FWFRFTlNJT05TOgotICAgICAgICAg
ICAgcmV0dXJuIGRpc3BsYXktPmdldEV4dGVuc2lvblN0cmluZygpOwotICAgICAgICAgIGNhc2Ug
RUdMX1ZFTkRPUjoKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCJHb29nbGUgSW5jLiIpOwot
ICAgICAgICAgIGNhc2UgRUdMX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2Vzcygi
MS40IChBTkdMRSAiVkVSU0lPTl9TVFJJTkciKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCAoY29uc3QgY2hhciopTlVMTCk7Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCAoY29uc3QgY2hhciopTlVMTCk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFu
IF9fc3RkY2FsbCBlZ2xHZXRDb25maWdzKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgKmNvbmZp
Z3MsIEVHTGludCBjb25maWdfc2l6ZSwgRUdMaW50ICpudW1fY29uZmlnKQotewotICAgIEVWRU5U
KCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgKmNvbmZpZ3MgPSAweCUwLjhw
LCAiCi0gICAgICAgICAgIkVHTGludCBjb25maWdfc2l6ZSA9ICVkLCBFR0xpbnQgKm51bV9jb25m
aWcgPSAweCUwLjhwKSIsCi0gICAgICAgICAgZHB5LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVt
X2NvbmZpZyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xf
RkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW51bV9jb25maWcpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IEVHTGludCBhdHRyaWJMaXN0W10gPSAgICB7RUdM
X05PTkV9OwotCi0gICAgICAgIGlmICghZGlzcGxheS0+Z2V0Q29uZmlncyhjb25maWdzLCBhdHRy
aWJMaXN0LCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xDaG9vc2VD
b25maWcoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QsIEVHTENvbmZp
ZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25maWcpCi17Ci0g
ICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIGNvbnN0IEVHTGludCAqYXR0cmli
X2xpc3QgPSAweCUwLjhwLCAiCi0gICAgICAgICAgIkVHTENvbmZpZyAqY29uZmlncyA9IDB4JTAu
OHAsIEVHTGludCBjb25maWdfc2l6ZSA9ICVkLCBFR0xpbnQgKm51bV9jb25maWcgPSAweCUwLjhw
KSIsCi0gICAgICAgICAgZHB5LCBhdHRyaWJfbGlzdCwgY29uZmlncywgY29uZmlnX3NpemUsIG51
bV9jb25maWcpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFs
aWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFudW1fY29uZmlnKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBFR0xpbnQgYXR0cmliTGlzdFtdID0gICAge0VH
TF9OT05FfTsKLQotICAgICAgICBpZiAoIWF0dHJpYl9saXN0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBhdHRyaWJfbGlzdCA9IGF0dHJpYkxpc3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBkaXNw
bGF5LT5nZXRDb25maWdzKGNvbmZpZ3MsIGF0dHJpYl9saXN0LCBjb25maWdfc2l6ZSwgbnVtX2Nv
bmZpZyk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bEdldENvbmZpZ0F0dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50
IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5
ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUg
PSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGNvbmZpZywg
YXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAg
aWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFkaXNwbGF5
LT5nZXRDb25maWdBdHRyaWIoY29uZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTFN1cmZhY2UgX19zdGRjYWxs
IGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcs
IEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQotewot
ICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0g
MHglMC44cCwgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4gPSAweCUwLjhwLCAiCi0gICAgICAgICAg
ImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsIGRweSwgY29uZmlnLCB3aW4s
IGF0dHJpYl9saXN0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAo
IXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgfQotCi0gICAgICAgIEhXTkQgd2luZG93
ID0gKEhXTkQpd2luOwotCi0gICAgICAgIGlmICghSXNXaW5kb3cod2luZG93KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTkFUSVZFX1dJTkRPVywgRUdMX05P
X1NVUkZBQ0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZVdp
bmRvd1N1cmZhY2Uod2luZG93LCBjb25maWcsIGF0dHJpYl9saXN0KTsKLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTFN1cmZhY2UgX19zdGRjYWxs
IGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmln
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBk
cHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgY29uc3QgRUdMaW50ICph
dHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGNvbmZpZywgYXR0cmliX2xp
c3QpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVD
b25maWcoZGlzcGxheSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVH
TF9OT19TVVJGQUNFOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0
ZU9mZnNjcmVlblN1cmZhY2UoY29uZmlnLCBOVUxMLCBhdHRyaWJfbGlzdCk7Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotfQotCi1FR0xTdXJmYWNlIF9fc3Rk
Y2FsbCBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29u
ZmlnLCBFR0xOYXRpdmVQaXhtYXBUeXBlIHBpeG1hcCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlz
dCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNv
bmZpZyA9IDB4JTAuOHAsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwID0gMHglMC44cCwgIgot
ICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNv
bmZpZywgcGl4bWFwLCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0K
LSAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhF
R0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7Ci0g
ICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95U3VyZmFjZShFR0xEaXNw
bGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBk
cHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFj
ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0
YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWds
U3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAg
IGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1
cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBk
aXNwbGF5LT5kZXN0cm95U3VyZmFjZSgoZWdsOjpTdXJmYWNlKilzdXJmYWNlKTsKLQotICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlTdXJmYWNlKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGlu
dCAqdmFsdWUpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1
cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2
YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIHN1cmZhY2UsIGF0dHJpYnV0ZSwgdmFs
dWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVn
bFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOwotCi0gICAgICAgIGlmICghdmFsaWRh
dGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdM
X05PX1NVUkZBQ0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGF0dHJp
YnV0ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKLSAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBFR0xfVkdfQ09MT1JTUEFDRToKLSAgICAgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBF
R0xfQ09ORklHX0lEOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6Ci0gICAgICAgICAg
ICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgRUdMX0hPUklaT05UQUxfUkVTT0xVVElPTjoKLSAgICAgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBFR0xfTEFSR0VTVF9QQlVGRkVSOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBf
VEVYVFVSRToKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfTUlQTUFQX0xFVkVMOgotICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFOgotICAgICAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVH
TF9QSVhFTF9BU1BFQ1RfUkFUSU86Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1JFTkRFUl9CVUZG
RVI6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1NXQVBfQkVIQVZJT1I6Ci0gICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgRUdMX1RFWFRVUkVfRk9STUFUOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9URVhUVVJF
X1RBUkdFVDoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVSVElDQUxfUkVTT0xVVElPTjoKLSAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBFR0xfV0lEVEg6Ci0gICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJm
YWNlLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xf
UE9TVF9TVUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKLSAgICAgICAgICAgICp2YWx1ZSA9IGVnbFN1
cmZhY2UtPmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJ
QlVURSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVH
TF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1F
R0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUoRUdMRGlzcGxh
eSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVl
KQotewotICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1
cmZhY2UgPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIHZvaWQgKip2YWx1ZSA9IDB4
JTAuOHApIiwKLSAgICAgICAgICBkcHksIHN1cmZhY2UsIGF0dHJpYnV0ZSwgdmFsdWUpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2Ug
PSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNl
KGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZB
Q0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0Us
IEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgRUdMX0QzRF9URVhUVVJFXzJEX1NIQVJFX0hBTkRMRV9B
TkdMRToKLSAgICAgICAgICAgICp2YWx1ZSA9ICh2b2lkKikgZWdsU3VyZmFjZS0+Z2V0U2hhcmVI
YW5kbGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQmlu
ZEFQSShFR0xlbnVtIGFwaSkKLXsKLSAgICBFVkVOVCgiKEVHTGVudW0gYXBpID0gMHglWCkiLCBh
cGkpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGFwaSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9BUEk6Ci0gICAgICAgICAgY2FzZSBFR0xfT1BFTlZH
X0FQSToKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZB
TFNFKTsgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24KLSAgICAgICAg
ICBjYXNlIEVHTF9PUEVOR0xfRVNfQVBJOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdM
X0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6c2V0Q3VycmVudEFQSShhcGkpOwot
Ci0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xlbnVtIF9fc3RkY2FsbCBlZ2xRdWVyeUFQSSh2
b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBFR0xl
bnVtIEFQSSA9IGVnbDo6Z2V0Q3VycmVudEFQSSgpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNz
KEFQSSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdM
Qm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdENsaWVudCh2b2lkKQotewotICAgIEVWRU5UKCIoKSIp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUK
LQotICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGhyZWFk
KHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVn
bE1ha2VDdXJyZW50KEVHTF9OT19ESVNQTEFZLCBFR0xfTk9fQ09OVEVYVCwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19TVVJGQUNFKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMU3VyZmFj
ZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoRUdMRGlzcGxheSBk
cHksIEVHTGVudW0gYnVmdHlwZSwgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwgRUdMQ29uZmlnIGNv
bmZpZywgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgRUdMZW51bSBidWZ0eXBlID0gMHglWCwgRUdMQ2xpZW50QnVmZmVy
IGJ1ZmZlciA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAu
OHAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsCi0gICAgICAgICAgZHB5
LCBidWZ0eXBlLCBidWZmZXIsIGNvbmZpZywgYXR0cmliX2xpc3QpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3Bs
YXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29uZmln
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGJ1ZnR5cGUgIT0gRUdMX0QzRF9URVhUVVJFXzJEX1NIQVJFX0hB
TkRMRV9BTkdMRSB8fCAhYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBkaXNwbGF5LT5jcmVhdGVPZmZzY3JlZW5TdXJmYWNlKGNvbmZpZywgKEhBTkRM
RSlidWZmZXIsIGF0dHJpYl9saXN0KTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJG
QUNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFN1cmZhY2VBdHRyaWIo
RUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdM
aW50IHZhbHVlKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xT
dXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCB2
YWx1ZSA9ICVkKSIsCi0gICAgICAgICAgZHB5LCBzdXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJm
YWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYg
KCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBf
X3N0ZGNhbGwgZWdsQmluZFRleEltYWdlKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZh
Y2UsIEVHTGludCBidWZmZXIpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBidWZmZXIgPSAlZCkiLCBk
cHksIHN1cmZhY2UsIGJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAg
IGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1
cmZhY2UpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZh
Y2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGJ1ZmZlciAhPSBFR0xfQkFDS19CVUZGRVIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFIHx8IGVnbFN1
cmZhY2UtPmdldFdpbmRvd0hhbmRsZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGVnbFN1cmZhY2UtPmdldEJvdW5kVGV4dHVyZSgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BQ0NFU1MsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZWdsU3VyZmFjZS0+Z2V0VGV4dHVyZUZvcm1hdCgpID09IEVHTF9OT19URVhU
VVJFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwg
RUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZ2xCaW5kVGV4SW1hZ2UoZWds
U3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01B
VENILCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbFJlbGVhc2VUZXhJbWFnZShFR0xEaXNwbGF5IGRweSwgRUdM
U3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgYnVmZmVyKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xpbnQgYnVm
ZmVyID0gJWQpIiwgZHB5LCBzdXJmYWNlLCBidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihk
cHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6
OlN1cmZhY2UqPihzdXJmYWNlKTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNw
bGF5LCBlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxT
RTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChidWZmZXIgIT0gRUdMX0JBQ0tfQlVGRkVSKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVH
TF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VS
RkFDRSB8fCBlZ2xTdXJmYWNlLT5nZXRXaW5kb3dIYW5kbGUoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5nZXRUZXh0dXJlRm9ybWF0KCkgPT0gRUdMX05P
X1RFWFRVUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01B
VENILCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4
dHVyZSA9IGVnbFN1cmZhY2UtPmdldEJvdW5kVGV4dHVyZSgpOwotCi0gICAgICAgIGlmICh0ZXh0
dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2Fs
bCBlZ2xTd2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRlcnZhbCkKLXsKLSAg
ICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IGludGVydmFsID0gJWQp
IiwgZHB5LCBpbnRlcnZhbCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxh
eSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAg
aWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OlN1cmZhY2UgKmRyYXdf
c3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGVnbDo6Z2V0Q3VycmVudERyYXdT
dXJmYWNlKCkpOwotCi0gICAgICAgIGlmIChkcmF3X3N1cmZhY2UgPT0gTlVMTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZHJhd19zdXJmYWNlLT5zZXRTd2FwSW50ZXJ2
YWwoaW50ZXJ2YWwpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xDb250ZXh0IF9fc3Rk
Y2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBF
R0xDb250ZXh0IHNoYXJlX2NvbnRleHQsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0g
ICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAw
eCUwLjhwLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQgPSAweCUwLjhwLCAiCi0gICAgICAgICAg
ImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsIGRweSwgY29uZmlnLCBzaGFy
ZV9jb250ZXh0LCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIC8vIEdl
dCB0aGUgcmVxdWVzdGVkIGNsaWVudCB2ZXJzaW9uIChkZWZhdWx0IGlzIDEpIGFuZCBjaGVjayBp
dCBpcyB0d28uCi0gICAgICAgIEVHTGludCBjbGllbnRfdmVyc2lvbiA9IDE7Ci0gICAgICAgIGJv
b2wgcmVzZXRfbm90aWZpY2F0aW9uID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgcm9idXN0X2FjY2Vz
cyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChhdHRyaWJfbGlzdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChjb25zdCBFR0xpbnQqIGF0dHJpYnV0ZSA9IGF0dHJpYl9saXN0OyBhdHRyaWJ1
dGVbMF0gIT0gRUdMX05PTkU7IGF0dHJpYnV0ZSArPSAyKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlWzBdKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT046Ci0gICAgICAgICAg
ICAgICAgICAgIGNsaWVudF92ZXJzaW9uID0gYXR0cmlidXRlWzFdOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0NPTlRFWFRfT1BFTkdMX1JP
QlVTVF9BQ0NFU1NfRVhUOgotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlWzFdID09
IEVHTF9UUlVFKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsgICAvLyBVbmlt
cGxlbWVudGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByb2J1c3RfYWNjZXNzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
dHRyaWJ1dGVbMV0gIT0gRUdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfQ09OVEVYVF9PUEVOR0xf
UkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVDoKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGF0dHJpYnV0ZVsxXSA9PSBFR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc2V0X25vdGlmaWNhdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZVsxXSAhPSBFR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9O
X0VYVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJ
QlVURSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjbGllbnRfdmVyc2lvbiAhPSAy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzaGFyZV9jb250ZXh0ICYm
IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCktPmlzUmVzZXROb3RpZmlj
YXRpb25FbmFibGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpE
aXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNv
bmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKLSAg
ICAgICAgfQotCi0gICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGRpc3BsYXktPmNyZWF0ZUNv
bnRleHQoY29uZmlnLCBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpLCBy
ZXNldF9ub3RpZmljYXRpb24sIHJvYnVzdF9hY2Nlc3MpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgfQotfQotCi1FR0xC
b29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29u
dGV4dCBjdHgpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENv
bnRleHQgY3R4ID0gMHglMC44cCkiLCBkcHksIGN0eCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRl
eHQqPihjdHgpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb250ZXh0KGRpc3BsYXksIGNvbnRl
eHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGN0eCA9PSBFR0xfTk9fQ09OVEVYVCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09OVEVYVCwgRUdMX0ZBTFNFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGRpc3BsYXktPmRlc3Ryb3lDb250ZXh0KGNvbnRleHQpOwotCi0gICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xNYWtlQ3VycmVudChFR0xE
aXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3LCBFR0xTdXJmYWNlIHJlYWQsIEVHTENvbnRleHQg
Y3R4KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNl
IGRyYXcgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHJlYWQgPSAweCUwLjhwLCBFR0xDb250ZXh0IGN0
eCA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGRyYXcsIHJlYWQsIGN0eCk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOwotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgICAgICBpZiAoIWRldmljZSB8fCBkaXNw
bGF5LT50ZXN0RGV2aWNlTG9zdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwbGF5LT5u
b3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChjdHggIT0gRUdMX05PX0NPTlRFWFQgJiYgIXZhbGlkYXRl
Q29udGV4dChkaXNwbGF5LCBjb250ZXh0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHJhdyAhPSBFR0xfTk9fU1VS
RkFDRSAmJiAhdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFj
ZSo+KGRyYXcpKSkgfHwKLSAgICAgICAgICAgIChyZWFkICE9IEVHTF9OT19TVVJGQUNFICYmICF2
YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4ocmVhZCkp
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChkcmF3ICE9IHJlYWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICB9Ci0KLSAgICAgICAgZWdsOjpzZXRDdXJy
ZW50RGlzcGxheShkcHkpOwotICAgICAgICBlZ2w6OnNldEN1cnJlbnREcmF3U3VyZmFjZShkcmF3
KTsKLSAgICAgICAgZWdsOjpzZXRDdXJyZW50UmVhZFN1cmZhY2UocmVhZCk7Ci0KLSAgICAgICAg
Z2xNYWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2Uq
PihkcmF3KSk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTENvbnRleHQgX19zdGRjYWxs
IGVnbEdldEN1cnJlbnRDb250ZXh0KHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGdsR2V0Q3VycmVudENvbnRl
eHQoKTsKLQotICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9OT19DT05URVhUKTsKLSAgICB9Ci19Ci0KLUVHTFN1cmZhY2UgX19zdGRjYWxs
IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTGludCByZWFkZHJhdykKLXsKLSAgICBFVkVOVCgiKEVH
TGludCByZWFkZHJhdyA9ICVkKSIsIHJlYWRkcmF3KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKHJlYWRkcmF3ID09IEVHTF9SRUFEKQotICAgICAgICB7Ci0gICAgICAgICAgICBFR0xT
dXJmYWNlIHJlYWQgPSBlZ2w6OmdldEN1cnJlbnRSZWFkU3VyZmFjZSgpOwotICAgICAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MocmVhZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocmVhZGRy
YXcgPT0gRUdMX0RSQVcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVHTFN1cmZhY2UgZHJhdyA9
IGVnbDo6Z2V0Q3VycmVudERyYXdTdXJmYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2Vz
cyhkcmF3KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotfQotCi1F
R0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50RGlzcGxheSh2b2lkKQotewotICAgIEVW
RU5UKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBFR0xEaXNwbGF5IGRweSA9IGVn
bDo6Z2V0Q3VycmVudERpc3BsYXkoKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhkcHkpOwot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0RJU1BMQVkpOwotICAgIH0KLX0KLQotRUdMQm9v
bGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0
IGN0eCwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwLCBFR0xpbnQg
YXR0cmlidXRlID0gJWQsIEVHTGludCAqdmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgZHB5
LCBjdHgsIGF0dHJpYnV0ZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oY3R4
KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29udGV4dChkaXNwbGF5LCBjb250ZXh0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNz
KDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbFdhaXRHTCh2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLQotICAg
ICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7
Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0TmF0aXZlKEVHTGludCBl
bmdpbmUpCi17Ci0gICAgRVZFTlQoIihFR0xpbnQgZW5naW5lID0gJWQpIiwgZW5naW5lKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0Up
OwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsU3dhcEJ1ZmZlcnMoRUdMRGlz
cGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkg
ZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCkiLCBkcHksIHN1cmZh
Y2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVn
bFN1cmZhY2UgPSAoZWdsOjpTdXJmYWNlKilzdXJmYWNlOwotCi0gICAgICAgIGlmICghdmFsaWRh
dGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXktPmlzRGV2
aWNlTG9zdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRF
WFRfTE9TVCwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09
IEVHTF9OT19TVVJGQUNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1
cmZhY2UtPnN3YXAoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAg
IH0KLQotICAgIHJldHVybiBFR0xfRkFMU0U7Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bENvcHlCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTE5hdGl2
ZVBpeG1hcFR5cGUgdGFyZ2V0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUw
LjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xOYXRpdmVQaXhtYXBUeXBlIHRh
cmdldCA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlLCB0YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3Bs
YXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2Fz
dDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFj
ZShkaXNwbGF5LCBlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVH
TF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaXNwbGF5LT5pc0RldmljZUxvc3Qo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xPU1Qs
IEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xQb3N0U3Vi
QnVmZmVyTlYoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IHgsIEVH
TGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgRVZFTlQoIihFR0xE
aXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGlu
dCB4ID0gJWQsIEVHTGludCB5ID0gJWQsIEVHTGludCB3aWR0aCA9ICVkLCBFR0xpbnQgaGVpZ2h0
ID0gJWQpIiwgZHB5LCBzdXJmYWNlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKHggPCAwIHx8IHkgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVU
RVIsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZh
Y2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKLQot
ICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBlZ2xTdXJmYWNlKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkaXNwbGF5LT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5wb3N0U3ViQnVmZmVyKHgsIHksIHdpZHRoLCBoZWln
aHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEVHTF9GQUxTRTsKLX0KLQotX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSBfX3N0ZGNhbGwgZWdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUp
Ci17Ci0gICAgRVZFTlQoIihjb25zdCBjaGFyICpwcm9jbmFtZSA9IFwiJXNcIikiLCBwcm9jbmFt
ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBFeHRlbnNpb24KLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKLSAgICAgICAgICAgIF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgYWRkcmVzczsKLSAgICAgICAgfTsKLQotICAg
ICAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGVnbEV4dGVuc2lvbnNbXSA9Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHsiZWdsUXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZWdsUXVlcnlTdXJmYWNlUG9pbnRlckFOR0xF
fSwKLSAgICAgICAgICAgIHsiZWdsUG9zdFN1YkJ1ZmZlck5WIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZWdsUG9zdFN1YkJ1ZmZlck5WfSwKLSAgICAgICAgICAg
IHsiIiwgTlVMTH0sCi0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0
IDwgc2l6ZW9mKGVnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RyY21wKHByb2NuYW1lLCBlZ2xFeHRlbnNpb25zW2V4
dF0ubmFtZSkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZWdsRXh0ZW5zaW9uc1tleHRd
LmFkZHJlc3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZ2xH
ZXRQcm9jQWRkcmVzcyhwcm9jbmFtZSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlOVUxMKTsKLSAgICB9Ci19Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5kZWYgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5kZWYKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDcxYTVlNjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAs
MCBAQAotTElCUkFSWQlsaWJFR0wKLUVYUE9SVFMKLQllZ2xCaW5kQVBJICAgICAgICAgICAgICAg
ICAgICAgIEAxNAotCWVnbEJpbmRUZXhJbWFnZSAgICAgICAgICAgICAgICAgQDIwCi0JZWdsQ2hv
b3NlQ29uZmlnICAgICAgICAgICAgICAgICBANwotCWVnbENvcHlCdWZmZXJzICAgICAgICAgICAg
ICAgICAgQDMzCi0JZWdsQ3JlYXRlQ29udGV4dCAgICAgICAgICAgICAgICBAMjMKLQllZ2xDcmVh
dGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlciAgICAgICAgQDE4Ci0JZWdsQ3JlYXRlUGJ1ZmZlclN1
cmZhY2UgICAgICAgICBAMTAKLQllZ2xDcmVhdGVQaXhtYXBTdXJmYWNlICAgICAgICAgIEAxMQot
CWVnbENyZWF0ZVdpbmRvd1N1cmZhY2UgICAgICAgICAgQDkKLQllZ2xEZXN0cm95Q29udGV4dCAg
ICAgICAgICAgICAgIEAyNAotCWVnbERlc3Ryb3lTdXJmYWNlICAgICAgICAgICAgICAgQDEyCi0J
ZWdsR2V0Q29uZmlnQXR0cmliICAgICAgICAgICAgICBAOAotCWVnbEdldENvbmZpZ3MgICAgICAg
ICAgICAgICAgICAgQDYKLQllZ2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAgICAgIEAyNgotCWVn
bEdldEN1cnJlbnREaXNwbGF5ICAgICAgICAgICAgQDI4Ci0JZWdsR2V0Q3VycmVudFN1cmZhY2Ug
ICAgICAgICAgICBAMjcKLQllZ2xHZXREaXNwbGF5ICAgICAgICAgICAgICAgICAgIEAyCi0JZWds
R2V0RXJyb3IgICAgICAgICAgICAgICAgICAgICBAMQotCWVnbEdldFByb2NBZGRyZXNzICAgICAg
ICAgICAgICAgQDM0Ci0JZWdsSW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAgICBAMwotCWVnbE1h
a2VDdXJyZW50ICAgICAgICAgICAgICAgICAgQDI1Ci0JZWdsUXVlcnlBUEkgICAgICAgICAgICAg
ICAgICAgICBAMTUKLQllZ2xRdWVyeUNvbnRleHQgICAgICAgICAgICAgICAgIEAyOQotCWVnbFF1
ZXJ5U3RyaW5nICAgICAgICAgICAgICAgICAgQDUKLQllZ2xRdWVyeVN1cmZhY2UgICAgICAgICAg
ICAgICAgIEAxMwotCWVnbFJlbGVhc2VUZXhJbWFnZSAgICAgICAgICAgICAgQDIxCi0JZWdsUmVs
ZWFzZVRocmVhZCAgICAgICAgICAgICAgICBAMTcKLQllZ2xTdXJmYWNlQXR0cmliICAgICAgICAg
ICAgICAgIEAxOQotCWVnbFN3YXBCdWZmZXJzICAgICAgICAgICAgICAgICAgQDMyCi0JZWdsU3dh
cEludGVydmFsICAgICAgICAgICAgICAgICBAMjIKLQllZ2xUZXJtaW5hdGUgICAgICAgICAgICAg
ICAgICAgIEA0Ci0JZWdsV2FpdENsaWVudCAgICAgICAgICAgICAgICAgICBAMTYKLQllZ2xXYWl0
R0wgICAgICAgICAgICAgICAgICAgICAgIEAzMAotCWVnbFdhaXROYXRpdmUgICAgICAgICAgICAg
ICAgICAgQDMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5yYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWQxZjMyZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML2xpYkVHTC5yYworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vLyBNaWNyb3Nv
ZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgcmVzb3VyY2Ugc2NyaXB0LgotLy8KLSNpbmNsdWRlICJy
ZXNvdXJjZS5oIgotCi0jZGVmaW5lIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVz
b3VyY2UuCi0vLwotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlICIuLi9jb21tb24vdmVy
c2lvbi5oIgotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZ
X1NZTUJPTFMKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEVuZ2xpc2ggKFUuUy4pIHJlc291
cmNlcwotCi0jaWYgIWRlZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFS
R19FTlUpCi0jaWZkZWYgX1dJTjMyCi1MQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfRU5H
TElTSF9VUwotI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MikKLSNlbmRpZiAvL19XSU4zMgotCi0jaWZk
ZWYgQVBTVFVESU9fSU5WT0tFRAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBURVhUSU5D
TFVERQotLy8KLQotMSBURVhUSU5DTFVERSAKLUJFR0lOCi0gICAgInJlc291cmNlLmhcMCIKLUVO
RAotCi0yIFRFWFRJTkNMVURFIAotQkVHSU4KLSAgICAiI2luY2x1ZGUgIiJhZnhyZXMuaCIiXHJc
biIKLSAgICAiI2luY2x1ZGUgIiIuLi9jb21tb24vdmVyc2lvbi5oIiJcMCIKLUVORAotCi0zIFRF
WFRJTkNMVURFIAotQkVHSU4KLSAgICAiXHJcbiIKLSAgICAiXDAiCi1FTkQKLQotI2VuZGlmICAg
IC8vIEFQU1RVRElPX0lOVk9LRUQKLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIFZl
cnNpb24KLS8vCi0KLVZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTwotIEZJTEVWRVJTSU9OIE1B
Sk9SX1ZFUlNJT04sTUlOT1JfVkVSU0lPTixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9OCi0g
UFJPRFVDVFZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04s
QlVJTERfUkVWSVNJT04KLSBGSUxFRkxBR1NNQVNLIDB4MTdMCi0jaWZkZWYgX0RFQlVHCi0gRklM
RUZMQUdTIDB4MUwKLSNlbHNlCi0gRklMRUZMQUdTIDB4MEwKLSNlbmRpZgotIEZJTEVPUyAweDRM
Ci0gRklMRVRZUEUgMHgyTAotIEZJTEVTVUJUWVBFIDB4MEwKLUJFR0lOCi0gICAgQkxPQ0sgIlN0
cmluZ0ZpbGVJbmZvIgotICAgIEJFR0lOCi0gICAgICAgIEJMT0NLICIwNDA5MDRiMCIKLSAgICAg
ICAgQkVHSU4KLSAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUgbGli
RUdMIER5bmFtaWMgTGluayBMaWJyYXJ5IgotICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9u
IiwgVkVSU0lPTl9TVFJJTkcKLSAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGli
RUdMIgotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiIKLSAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwg
ImxpYkVHTC5kbGwiCi0gICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgVkVSU0lPTl9T
VFJJTkcKLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJFR0wgRHlu
YW1pYyBMaW5rIExpYnJhcnkiCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBW
RVJTSU9OX1NUUklORwotICAgICAgICBFTkQKLSAgICBFTkQKLSAgICBCTE9DSyAiVmFyRmlsZUlu
Zm8iCi0gICAgQkVHSU4KLSAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAK
LSAgICBFTkQKLUVORAotCi0jZW5kaWYgICAgLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0KLQotI2lmbmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAz
IHJlc291cmNlLgotLy8KLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2VuZGlmICAgIC8vIG5v
dCBBUFNUVURJT19JTlZPS0VECmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML2xpYkVHTC52Y3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML2xpYkVHTC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMmQyOTIu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wu
dmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEu
MCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgotPFZpc3VhbFN0dWRpb1Byb2plY3QKLQlQcm9q
ZWN0VHlwZT0iVmlzdWFsIEMrKyIKLQlWZXJzaW9uPSI5LjAwIgotCU5hbWU9ImxpYkVHTCIKLQlQ
cm9qZWN0R1VJRD0ie0U3NDZGQ0E5LTY0QzMtNDMzRS04NUU4LTlBNUE2N0FCN0VENn0iCi0JUm9v
dE5hbWVzcGFjZT0ibGliRUdMIgotCUtleXdvcmQ9IldpbjMyUHJvaiIKLQlUYXJnZXRGcmFtZXdv
cmtWZXJzaW9uPSIxMzEwNzIiCi0JPgotCTxQbGF0Zm9ybXM+Ci0JCTxQbGF0Zm9ybQotCQkJTmFt
ZT0iV2luMzIiCi0JCS8+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0ieDY0IgotCQkvPgotCTwvUGxh
dGZvcm1zPgotCTxUb29sRmlsZXM+Ci0JPC9Ub29sRmlsZXM+Ci0JPENvbmZpZ3VyYXRpb25zPgot
CQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rv
cnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIi
Ci0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVp
bGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJ
QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0
RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtf
REVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBS
RUNBVEU7Tk9NSU5NQVgiCi0JCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCi0JCQkJQmFzaWNSdW50
aW1lQ2hlY2tzPSIzIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgotCQkJCVVzZVByZWNvbXBpbGVk
SGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJu
aW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyIgotCQkJCURldGVj
dDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZv
cm1hdD0iNCIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2Vy
VG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERl
cGVuZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21hcGkubGliIgotCQkJCUxpbmtJbmNy
ZW1lbnRhbD0iMiIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJCQlE
ZWxheUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0i
dHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgot
CQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjEiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNY
RENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4
MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1l
KVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wuZGxsJnF1b3Q7
ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7
JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmxpYiZxdW90OyAmcXVvdDsk
KFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYj
eDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJ
PENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rv
cnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVE
aXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIi
Ci0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCi0J
CQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249
IjIiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsg
JChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25z
PSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VS
RV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCIKLQkJCQlSdW50aW1lTGlicmFy
eT0iMCIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQi
Ci0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0
MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNl
IgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9T
QUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIGR4Z3VpZC5saWIg
ZHdtYXBpLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJTW9kdWxlRGVmaW5pdGlv
bkZpbGU9ImxpYkVHTC5kZWYiCi0JCQkJRGVsYXlMb2FkRExMcz0iZHdtYXBpLmRsbCIKLQkJCQlH
ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCU9w
dGltaXplUmVmZXJlbmNlcz0iMiIKLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIgotCQkJCVJh
bmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIK
LQkJCQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlu
a1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENv
cFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1h
bmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwu
LlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDsk
KE91dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQo
Q29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIp
XGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3Vy
YXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkv
PgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJEZWJ1Z3x4
NjQiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQo
Q29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3Jt
TmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJ
CUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2
ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkJVGFyZ2V0RW52aXJvbm1l
bnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJ
CU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFBy
b2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vz
c29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBP
UlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5pbWFsUmVidWls
ZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9
IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0Igot
CQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0
NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIK
LQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvU0FG
RVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBkeGd1aWQubGliIGR3
bWFwaS5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIgotCQkJCU1vZHVsZURlZmluaXRpb25G
aWxlPSJsaWJFR0wuZGVmIgotCQkJCURlbGF5TG9hZERMTHM9ImR3bWFwaS5kbGwiCi0JCQkJR2Vu
ZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlSYW5k
b21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0J
CQkJVGFyZ2V0TWFjaGluZT0iMTciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5r
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29w
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFu
ZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4u
XGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQo
T3V0RGlyKVxsaWJFR0wuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilc
bGliRUdMLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJh
dGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+
Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8
eDY0IgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwk
KENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9y
bU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0J
CQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCi0JCQk+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ01JRExUb29sIgotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJ
SW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv
cmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJ
CVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtM
SUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9T
Q0w9MCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMCIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0i
MCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQx
MDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2NEJpdFBv
cnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMi
Ci0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01h
bmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxp
bmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0J
CQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNp
ZXM9ImQzZDkubGliIGR4Z3VpZC5saWIgZHdtYXBpLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9
IjEiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiCi0JCQkJRGVsYXlMb2Fk
RExMcz0iZHdtYXBpLmRsbCIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0J
CQkJU3ViU3lzdGVtPSIyIgotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiIKLQkJCQlFbmFibGVD
T01EQVRGb2xkaW5nPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRh
RXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RC
dWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2Rp
ciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90
OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7
JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsm
I3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVj
dERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVj
aG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCTwvQ29uZmln
dXJhdGlvbnM+Ci0JPFJlZmVyZW5jZXM+Ci0JPC9SZWZlcmVuY2VzPgotCTxGaWxlcz4KLQkJPEZp
bHRlcgotCQkJTmFtZT0iU291cmNlIEZpbGVzIgotCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVm
O29kbDtpZGw7aHBqO2JhdDthc207YXNteCIKLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdG
MS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9IgotCQkJPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cQ29uZmlnLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cQ29tbW9uXGRlYnVnLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXNwbGF5LmNwcCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZhY2UuY3BwIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IkhlYWRl
ciBGaWxlcyIKLQkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubDtpbmM7eHNkIgotCQkJVW5pcXVl
SWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCi0JCQk+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxDb25maWcuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXNwbGF5LmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdMXGVn
bC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxpbmNsdWRlXEVHTFxlZ2xleHQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdscGxhdGZvcm0uaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccmVzb3VyY2UuaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTdXJmYWNlLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1v
blx2ZXJzaW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQkJPEZpbGUKLQkJ
CVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuZGVmIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0J
CQlSZWxhdGl2ZVBhdGg9Ii5cbGliRUdMLnJjIgotCQkJPgotCQk8L0ZpbGU+Ci0JPC9GaWxlcz4K
LQk8R2xvYmFscz4KLQk8L0dsb2JhbHM+Ci08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWMxMDdiZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML21haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9pbnQgYW5kIG1hbmFn
ZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCi0KLSNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgot
Ci0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLXN0YXRpYyBEV09SRCBjdXJyZW50VExTID0g
VExTX09VVF9PRl9JTkRFWEVTOwotCi1CT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0
YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCi17Ci0gICAgc3dpdGNoIChyZWFz
b24pCi0gICAgewotICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Ci0gICAgICAgIHsKLSNp
ZiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQotICAgICAgICAgICAgRklMRSAqZGVidWcg
PSBmb3BlbihUUkFDRV9PVVRQVVRfRklMRSwgInJ0Iik7Ci0KLSAgICAgICAgICAgIGlmIChkZWJ1
ZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOwotICAgICAg
ICAgICAgICAgIGRlYnVnID0gZm9wZW4oVFJBQ0VfT1VUUFVUX0ZJTEUsICJ3dCIpOyAgIC8vIEVy
YXNlCi0gICAgICAgICAgICAgICAgZmNsb3NlKGRlYnVnKTsKLSAgICAgICAgICAgIH0KLSNlbmRp
ZgotCi0gICAgICAgICAgICBjdXJyZW50VExTID0gVGxzQWxsb2MoKTsKLQotICAgICAgICAgICAg
aWYgKGN1cnJlbnRUTFMgPT0gVExTX09VVF9PRl9JTkRFWEVTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICAvLyBGYWxsIHRocm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgKLSAgICAgIGNhc2UgRExM
X1RIUkVBRF9BVFRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVnbDo6Q3VycmVudCAqY3Vy
cmVudCA9IChlZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGVnbDo6Q3VycmVu
dCkpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBUbHNTZXRWYWx1ZShjdXJyZW50VExTLCBjdXJyZW50KTsKLQotICAgICAgICAgICAg
ICAgIGN1cnJlbnQtPmVycm9yID0gRUdMX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dC0+QVBJID0gRUdMX09QRU5HTF9FU19BUEk7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+ZGlz
cGxheSA9IEVHTF9OT19ESVNQTEFZOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRyYXdTdXJm
YWNlID0gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+cmVhZFN1cmZh
Y2UgPSBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAgICAg
ICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxGcmVl
KChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKLSAgICAgICAgewotICAgICAgICAg
ICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAg
ICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUo
KEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVGxzRnJlZShj
dXJyZW50VExTKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBUUlVFOwotfQotCi1uYW1lc3BhY2Ug
ZWdsCi17Ci12b2lkIHNldEN1cnJlbnRFcnJvcihFR0xpbnQgZXJyb3IpCi17Ci0gICAgQ3VycmVu
dCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIGN1
cnJlbnQtPmVycm9yID0gZXJyb3I7Ci19Ci0KLUVHTGludCBnZXRDdXJyZW50RXJyb3IoKQotewot
ICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7
Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZXJyb3I7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudEFQSShF
R0xlbnVtIEFQSSkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZh
bHVlKGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+QVBJID0gQVBJOwotfQotCi1FR0xlbnVt
IGdldEN1cnJlbnRBUEkoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxz
R2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+QVBJOwotfQotCi12
b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkgZHB5KQotewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50
LT5kaXNwbGF5ID0gZHB5OwotfQotCi1FR0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCkKLXsK
LSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmRpc3BsYXk7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudERy
YXdTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0g
KEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+ZHJhd1N1
cmZhY2UgPSBzdXJmYWNlOwotfQotCi1FR0xTdXJmYWNlIGdldEN1cnJlbnREcmF3U3VyZmFjZSgp
Ci17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50
VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5kcmF3U3VyZmFjZTsKLX0KLQotdm9pZCBzZXRD
dXJyZW50UmVhZFN1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKQotewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50
LT5yZWFkU3VyZmFjZSA9IHN1cmZhY2U7Ci19Ci0KLUVHTFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRT
dXJmYWNlKCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVl
KGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPnJlYWRTdXJmYWNlOwotfQotfQot
Ci12b2lkIGVycm9yKEVHTGludCBlcnJvckNvZGUpCi17Ci0gICAgZWdsOjpzZXRDdXJyZW50RXJy
b3IoZXJyb3JDb2RlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbWFpbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWlu
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOWQ5ZTYuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBtYWluLmg6IE1hbmFnZW1l
bnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCi0KLSNpZm5kZWYgTElCRUdMX01BSU5fSF8KLSNkZWZp
bmUgTElCRUdMX01BSU5fSF8KLQotI2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWdsLmg+
Ci0jaW5jbHVkZSA8RUdML2VnbGV4dC5oPgotCi1uYW1lc3BhY2UgZWdsCi17Ci1zdHJ1Y3QgQ3Vy
cmVudAotewotICAgIEVHTGludCBlcnJvcjsKLSAgICBFR0xlbnVtIEFQSTsKLSAgICBFR0xEaXNw
bGF5IGRpc3BsYXk7Ci0gICAgRUdMU3VyZmFjZSBkcmF3U3VyZmFjZTsKLSAgICBFR0xTdXJmYWNl
IHJlYWRTdXJmYWNlOwotfTsKLQotdm9pZCBzZXRDdXJyZW50RXJyb3IoRUdMaW50IGVycm9yKTsK
LUVHTGludCBnZXRDdXJyZW50RXJyb3IoKTsKLQotdm9pZCBzZXRDdXJyZW50QVBJKEVHTGVudW0g
QVBJKTsKLUVHTGVudW0gZ2V0Q3VycmVudEFQSSgpOwotCi12b2lkIHNldEN1cnJlbnREaXNwbGF5
KEVHTERpc3BsYXkgZHB5KTsKLUVHTERpc3BsYXkgZ2V0Q3VycmVudERpc3BsYXkoKTsKLQotdm9p
ZCBzZXRDdXJyZW50RHJhd1N1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKLUVHTFN1cmZhY2Ug
Z2V0Q3VycmVudERyYXdTdXJmYWNlKCk7Ci0KLXZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNlKEVH
TFN1cmZhY2Ugc3VyZmFjZSk7Ci1FR0xTdXJmYWNlIGdldEN1cnJlbnRSZWFkU3VyZmFjZSgpOwot
fQotCi12b2lkIGVycm9yKEVHTGludCBlcnJvckNvZGUpOwotCi10ZW1wbGF0ZTxjbGFzcyBUPgot
Y29uc3QgVCAmZXJyb3IoRUdMaW50IGVycm9yQ29kZSwgY29uc3QgVCAmcmV0dXJuVmFsdWUpCi17
Ci0gICAgZXJyb3IoZXJyb3JDb2RlKTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgVD4KLWNvbnN0IFQgJnN1Y2Nlc3MoY29uc3QgVCAmcmV0dXJuVmFsdWUp
Ci17Ci0gICAgZWdsOjpzZXRDdXJyZW50RXJyb3IoRUdMX1NVQ0NFU1MpOwotCi0gICAgcmV0dXJu
IHJldHVyblZhbHVlOwotfQotCi0jZW5kaWYgIC8vIExJQkVHTF9NQUlOX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML3Jlc291cmNlLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML3Jlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM5MjFmNGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9yZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAot
Ly97e05PX0RFUEVOREVOQ0lFU319Ci0vLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQg
aW5jbHVkZSBmaWxlLgotLy8gVXNlZCBieSBsaWJFR0wucmMKLQotLy8gTmV4dCBkZWZhdWx0IHZh
bHVlcyBmb3IgbmV3IG9iamVjdHMKLS8vIAotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKLSNpZm5k
ZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotI2RlZmluZSBfQVBTX05FWFRfUkVTT1VSQ0Vf
VkFMVUUgICAgICAgIDEwMQotI2RlZmluZSBfQVBTX05FWFRfQ09NTUFORF9WQUxVRSAgICAgICAg
IDQwMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTAwMQotI2Rl
ZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEwMQotI2VuZGlmCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQ4ZDY5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw2MDQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQmxpdC5jcHA6IFN1cmZhY2Ug
Y29weSB1dGlsaXR5IGNsYXNzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIKLQotI2lu
Y2x1ZGUgPGQzZHg5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVzcGFjZQotewotLy8gU3RhbmRhcmQgVmVydGV4IFNo
YWRlcgotLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1dHMg
dGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdp
dGggKDAsMCkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDEp
IGluIHRoZSBib3R0b20gcmlnaHQuCi0vLyBDMC5YIG11c3QgYmUgbmVnYXRpdmUgaGFsZi1waXhl
bCB3aWR0aCwgQzAuWSBtdXN0IGJlIGhhbGYtcGl4ZWwgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAu
Ci1jb25zdCBjaGFyIHN0YW5kYXJkdnNbXSA9Ci0ic3RydWN0IFZTX09VVFBVVFxuIgotIntcbiIK
LSIgICAgZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT047XG4iCi0iICAgIGZsb2F0NCB0ZXhjb29y
ZCA6IFRFWENPT1JEMDtcbiIKLSJ9O1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0IGhhbGZQaXhl
bFNpemUgOiBjMDtcbiIKLSJcbiIKLSJWU19PVVRQVVQgbWFpbihpbiBmbG9hdDQgcG9zaXRpb24g
OiBQT1NJVElPTilcbiIKLSJ7XG4iCi0iICAgIFZTX09VVFBVVCBPdXQ7XG4iCi0iXG4iCi0iICAg
IE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTtcbiIKLSIgICAgT3V0LnRl
eGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAtMC41LCAxLjAsIDEuMCkgKyBmbG9hdDQo
MC41LCAwLjUsIDAsIDApO1xuIgotIlxuIgotIiAgICByZXR1cm4gT3V0O1xuIgotIn1cbiI7Ci0K
LS8vIEZsaXAgWSBWZXJ0ZXggU2hhZGVyCi0vLyBJbnB1dCAwIGlzIHRoZSBob21vZ2Vub3VzIHBv
c2l0aW9uLgotLy8gT3V0cHV0cyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBhcy1pcy4KLS8vIE91
dHB1dHMgYSB0ZXggY29vcmQgd2l0aCAoMCwxKSBpbiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2Yg
dGhlIHNjcmVlbiBhbmQgKDEsMCkgaW4gdGhlIGJvdHRvbSByaWdodC4KLS8vIEMwLlhZIG11c3Qg
YmUgdGhlIGhhbGYtcGl4ZWwgd2lkdGggYW5kIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgotY29u
c3QgY2hhciBmbGlweXZzW10gPQotInN0cnVjdCBWU19PVVRQVVRcbiIKLSJ7XG4iCi0iICAgIGZs
b2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OO1xuIgotIiAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDA7XG4iCi0ifTtcbiIKLSJcbiIKLSJ1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDog
YzA7XG4iCi0iXG4iCi0iVlNfT1VUUFVUIG1haW4oaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJ
T04pXG4iCi0ie1xuIgotIiAgICBWU19PVVRQVVQgT3V0O1xuIgotIlxuIgotIiAgICBPdXQucG9z
aXRpb24gPSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7XG4iCi0iICAgIE91dC50ZXhjb29yZCA9
IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgMC41LCAxLjAsIDEuMCkgKyBmbG9hdDQoMC41LCAwLjUs
IDAsIDApO1xuIgotIlxuIgotIiAgICByZXR1cm4gT3V0O1xuIgotIn1cbiI7Ci0KLS8vIFBhc3N0
aHJvdWdoIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyB0ZXh0dXJlIDAgc2FtcGxlZCBhdCB0ZXhj
b29yZCAwLgotY29uc3QgY2hhciBwYXNzdGhyb3VnaHBzW10gPQotInNhbXBsZXIyRCB0ZXggOiBz
MDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDog
Q09MT1JcbiIKLSJ7XG4iCi0iCXJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIKLSJ9
XG4iOwotCi0vLyBMdW1pbmFuY2UgQ29udmVyc2lvbiBQaXhlbCBTaGFkZXIKLS8vIE91dHB1dHMg
c2FtcGxlKHRleDAsIHRjMCkucnJyYS4KLS8vIEZvciBMQSBvdXRwdXQgKHBhc3MgQSkgc2V0IEMw
LlggPSAxLCBDMC5ZID0gMC4KLS8vIEZvciBMIG91dHB1dCAoQSA9IDEpIHNldCBDMC5YID0gMCwg
QzAuWSA9IDEuCi1jb25zdCBjaGFyIGx1bWluYW5jZXBzW10gPQotInNhbXBsZXIyRCB0ZXggOiBz
MDtcbiIKLSJcbiIKLSJ1bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7XG4iCi0iXG4iCi0iZmxvYXQ0
IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCi0ie1xuIgotIglm
bG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCi0iCXRtcC53ID0gdG1wLncg
KiBtb2RlLnggKyBtb2RlLnk7XG4iCi0iCXJldHVybiB0bXAueHh4dztcbiIKLSJ9XG4iOwotCi0v
LyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKLS8vIE91dHB1dHMgc2FtcGxlKHRl
eDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5kL29yIEEgPSAxLgotLy8g
VG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2UgQzAuWCA9IDEuCi0vLyBU
byBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3aXNlIEMwLlogPSAx
LCBDMC5XID0gMC4KLWNvbnN0IGNoYXIgY29tcG9uZW50bWFza3BzW10gPQotInNhbXBsZXIyRCB0
ZXggOiBzMDtcbiIKLSJcbiIKLSJ1bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7XG4iCi0iXG4iCi0i
ZmxvYXQ0IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCi0ie1xu
IgotIglmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCi0iCXRtcC54eXog
PSB0bXAueHl6ICogbW9kZS54O1xuIgotIgl0bXAudyA9IHRtcC53ICogbW9kZS56ICsgbW9kZS53
O1xuIgotIglyZXR1cm4gdG1wO1xuIgotIn1cbiI7Ci0KLX0KLQotbmFtZXNwYWNlIGdsCi17Ci0K
LWNvbnN0IGNoYXIgKiBjb25zdCBCbGl0OjptU2hhZGVyU291cmNlW10gPQotewotICAgIHN0YW5k
YXJkdnMsCi0gICAgZmxpcHl2cywKLSAgICBwYXNzdGhyb3VnaHBzLAotICAgIGx1bWluYW5jZXBz
LAotICAgIGNvbXBvbmVudG1hc2twcwotfTsKLQotQmxpdDo6QmxpdChDb250ZXh0ICpjb250ZXh0
KQotICA6IG1Db250ZXh0KGNvbnRleHQpLCBtUXVhZFZlcnRleEJ1ZmZlcihOVUxMKSwgbVF1YWRW
ZXJ0ZXhEZWNsYXJhdGlvbihOVUxMKSwgbVNhdmVkUmVuZGVyVGFyZ2V0KE5VTEwpLCBtU2F2ZWRE
ZXB0aFN0ZW5jaWwoTlVMTCksIG1TYXZlZFN0YXRlQmxvY2soTlVMTCkKLXsKLSAgICBpbml0R2Vv
bWV0cnkoKTsKLSAgICBtZW1zZXQobUNvbXBpbGVkU2hhZGVycywgMCwgc2l6ZW9mKG1Db21waWxl
ZFNoYWRlcnMpKTsKLX0KLQotQmxpdDo6fkJsaXQoKQotewotICAgIGlmIChtU2F2ZWRTdGF0ZUJs
b2NrKSBtU2F2ZWRTdGF0ZUJsb2NrLT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1RdWFkVmVydGV4QnVm
ZmVyKSBtUXVhZFZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIGlmIChtUXVhZFZlcnRleERl
Y2xhcmF0aW9uKSBtUXVhZFZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IFNIQURFUl9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1D
b21waWxlZFNoYWRlcnNbaV0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Db21waWxlZFNoYWRl
cnNbaV0tPlJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBCbGl0Ojppbml0
R2VvbWV0cnkoKQotewotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBxdWFkW10gPQotICAgIHsKLSAg
ICAgICAgLTEsIC0xLAotICAgICAgICAtMSwgIDEsCi0gICAgICAgICAxLCAtMSwKLSAgICAgICAg
IDEsICAxCi0gICAgfTsKLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihz
aXplb2YocXVhZCksIEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVF1
YWRWZXJ0ZXhCdWZmZXIsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci0KLSAgICB2b2lkICpsb2NrUHRyID0gTlVMTDsKLSAgICByZXN1bHQgPSBt
UXVhZFZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbG9ja1B0ciwgMCk7Ci0KLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkgfHwgbG9ja1B0ciA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAg
ICBtZW1jcHkobG9ja1B0ciwgcXVhZCwgc2l6ZW9mKHF1YWQpKTsKLSAgICBtUXVhZFZlcnRleEJ1
ZmZlci0+VW5sb2NrKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZWxl
bWVudHNbXSA9Ci0gICAgewotICAgICAgICB7IDAsIDAsIEQzRERFQ0xUWVBFX0ZMT0FUMiwgRDNE
REVDTE1FVEhPRF9ERUZBVUxULCBEM0RERUNMVVNBR0VfUE9TSVRJT04sIDAgfSwKLSAgICAgICAg
RDNEREVDTF9FTkQoKQotICAgIH07Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRl
eERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmbVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNs
YXNzIEQzRFNoYWRlclR5cGU+Ci1ib29sIEJsaXQ6OnNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2Us
IGNvbnN0IGNoYXIgKnByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5B
UEkgSURpcmVjdDNERGV2aWNlOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgRDNEU2hh
ZGVyVHlwZSoqKSwKLSAgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0
M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpCi17Ci0gICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBEM0RTaGFkZXJUeXBlICpzaGFk
ZXI7Ci0KLSAgICBpZiAobUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdICE9IE5VTEwpCi0gICAgewot
ICAgICAgICBzaGFkZXIgPSBzdGF0aWNfY2FzdDxEM0RTaGFkZXJUeXBlKj4obUNvbXBpbGVkU2hh
ZGVyc1tzb3VyY2VdKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgSUQzRFhCdWZm
ZXIgKnNoYWRlckNvZGU7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBEM0RYQ29tcGlsZVNoYWRlciht
U2hhZGVyU291cmNlW3NvdXJjZV0sIHN0cmxlbihtU2hhZGVyU291cmNlW3NvdXJjZV0pLCBOVUxM
LCBOVUxMLCAibWFpbiIsIHByb2ZpbGUsIDAsICZzaGFkZXJDb2RlLCBOVUxMLCBOVUxMKTsKLQot
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWls
ZWQgdG8gY29tcGlsZSAlcyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUw
OFguIiwgcHJvZmlsZSwgKGludClzb3VyY2UsIGhyKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGhyID0gKGRldmljZS0+KmNyZWF0ZVNoYWRlcikoc3Rh
dGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihzaGFkZXJDb2RlLT5HZXRCdWZmZXJQb2ludGVyKCkpLCAm
c2hhZGVyKTsKLSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHNoYWRlckNvZGUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0
ZSAlcyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVkLCBlcnJvciAweCUwOFguIiwgcHJvZmls
ZSwgKGludClzb3VyY2UsIGhyKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHNoYWRlckNvZGUtPlJlbGVhc2UoKTsKLQotICAgICAgICBtQ29tcGlsZWRT
aGFkZXJzW3NvdXJjZV0gPSBzaGFkZXI7Ci0gICAgfQotCi0gICAgSFJFU1VMVCBociA9IChkZXZp
Y2UtPipzZXRTaGFkZXIpKHNoYWRlcik7Ci0KLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICB7Ci0g
ICAgICAgIEVSUigiRmFpbGVkIHRvIHNldCAlcyBzaGFkZXIgZm9yIGJsaXQgb3BlcmF0aW9uICVk
LCBlcnJvciAweCUwOFguIiwgcHJvZmlsZSwgKGludClzb3VyY2UsIGhyKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJsaXQ6OnNl
dFZlcnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJ
RGlyZWN0M0RWZXJ0ZXhTaGFkZXI5PihzaGFkZXIsIG1Db250ZXh0LT5zdXBwb3J0c1NoYWRlck1v
ZGVsMygpID8gInZzXzNfMCIgOiAidnNfMl8wIiwgJklEaXJlY3QzRERldmljZTk6OkNyZWF0ZVZl
cnRleFNoYWRlciwgJklEaXJlY3QzRERldmljZTk6OlNldFZlcnRleFNoYWRlcik7Ci19Ci0KLWJv
b2wgQmxpdDo6c2V0UGl4ZWxTaGFkZXIoU2hhZGVySWQgc2hhZGVyKQotewotICAgIHJldHVybiBz
ZXRTaGFkZXI8SURpcmVjdDNEUGl4ZWxTaGFkZXI5PihzaGFkZXIsIG1Db250ZXh0LT5zdXBwb3J0
c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIiwgJklEaXJlY3QzRERldmljZTk6
OkNyZWF0ZVBpeGVsU2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0UGl4ZWxTaGFkZXIpOwot
fQotCi1SRUNUIEJsaXQ6OmdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
KSBjb25zdAotewotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHN1cmZhY2UtPkdldERl
c2MoJmRlc2MpOwotCi0gICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IDA7Ci0gICAgcmVj
dC50b3AgPSAwOwotICAgIHJlY3QucmlnaHQgPSBkZXNjLldpZHRoOwotICAgIHJlY3QuYm90dG9t
ID0gZGVzYy5IZWlnaHQ7Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0KLQotYm9vbCBCbGl0Ojpib3hG
aWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3Qp
Ci17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFjZVRvVGV4dHVy
ZShzb3VyY2UsIGdldFN1cmZhY2VSZWN0KHNvdXJjZSkpOwotICAgIGlmICghdGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIHNhdmVTdGF0ZSgpOwotCi0gICAgZGV2aWNl
LT5TZXRUZXh0dXJlKDAsIHRleHR1cmUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAs
IGRlc3QpOwotCi0gICAgc2V0VmVydGV4U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7Ci0gICAg
c2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX1BBU1NUSFJPVUdIKTsKLQotICAgIHNldENvbW1vbkJs
aXRTdGF0ZSgpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklM
VEVSLCBEM0RURVhGX0xJTkVBUik7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNE
U0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLQotICAgIHNldFZpZXdwb3J0KGdldFN1
cmZhY2VSZWN0KGRlc3QpLCAwLCAwKTsKLQotICAgIHJlbmRlcigpOwotCi0gICAgdGV4dHVyZS0+
UmVsZWFzZSgpOwotCi0gICAgcmVzdG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBCbGl0Ojpjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOwot
ICAgIEQzRFNVUkZBQ0VfREVTQyBkZXN0RGVzYzsKLSAgICBzb3VyY2UtPkdldERlc2MoJnNvdXJj
ZURlc2MpOwotICAgIGRlc3QtPkdldERlc2MoJmRlc3REZXNjKTsKLQotICAgIGlmIChzb3VyY2VE
ZXNjLkZvcm1hdCA9PSBkZXN0RGVzYy5Gb3JtYXQgJiYgZGVzdERlc2MuVXNhZ2UgJiBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQpICAgLy8gQ2FuIHVzZSBTdHJldGNoUmVjdAotICAgIHsKLSAgICAgICAg
UkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgKHNvdXJjZVJlY3Qu
cmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQpLCB5b2Zmc2V0ICsgKHNvdXJjZVJlY3QuYm90dG9tIC0g
c291cmNlUmVjdC50b3ApfTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPlN0cmV0
Y2hSZWN0KHNvdXJjZSwgJnNvdXJjZVJlY3QsIGRlc3QsICZkZXN0UmVjdCwgRDNEVEVYRl9QT0lO
VCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZvcm1hdENvbnZlcnQoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBC
bGl0Ojpmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1Qg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAq
dGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCk7Ci0gICAg
aWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgc2F2ZVN0YXRl
KCk7Ci0KLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0gICAgZGV2aWNlLT5T
ZXRSZW5kZXJUYXJnZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWaWV3cG9ydChzb3VyY2VSZWN0LCB4
b2Zmc2V0LCB5b2Zmc2V0KTsKLQotICAgIHNldENvbW1vbkJsaXRTdGF0ZSgpOwotICAgIGlmIChz
ZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhkZXN0Rm9ybWF0KSkKLSAgICB7Ci0gICAgICAgIHJlbmRl
cigpOwotICAgIH0KLQotICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLQotICAgIHJlc3RvcmVTdGF0
ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6c2V0Rm9ybWF0Q29udmVy
dFNoYWRlcnMoR0xlbnVtIGRlc3RGb3JtYXQpCi17Ci0gICAgYm9vbCBva2F5ID0gc2V0VmVydGV4
U2hhZGVyKFNIQURFUl9WU19TVEFOREFSRCk7Ci0KLSAgICBzd2l0Y2ggKGRlc3RGb3JtYXQpCi0g
ICAgewotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgIGNhc2Ug
R0xfQUxQSEE6Ci0gICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9Q
U19DT01QT05FTlRNQVNLKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIG9rYXkgPSBva2F5
ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19MVU1JTkFOQ0UpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBpZiAoIW9rYXkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgZW51bSB7IFggPSAwLCBZID0gMSwgWiA9IDIsIFcgPSAzIH07Ci0KLSAgICAv
LyBUaGUgbWVhbmluZyBvZiB0aGlzIGNvbnN0YW50IGRlcGVuZHMgb24gdGhlIHNoYWRlciB0aGF0
IHdhcyBzZWxlY3RlZC4KLSAgICAvLyBTZWUgdGhlIHNoYWRlciBhc3NlbWJseSBjb2RlIGFib3Zl
IGZvciBkZXRhaWxzLgotICAgIGZsb2F0IHBzQ29uc3QwWzRdID0geyAwLCAwLCAwLCAwIH07Ci0K
LSAgICBzd2l0Y2ggKGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAg
ICAgIHBzQ29uc3QwW1hdID0gMTsKLSAgICAgICAgcHNDb25zdDBbWl0gPSAxOwotICAgICAgICBi
cmVhazsKLQotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHBzQ29uc3QwW1hdID0gMTsKLSAg
ICAgICAgcHNDb25zdDBbV10gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgcHNDb25zdDBbWl0gPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgIHBzQ29uc3QwW1ldID0gMTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICBwc0NvbnN0MFtY
XSA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGdldERldmljZSgpLT5TZXRQaXhl
bFNoYWRlckNvbnN0YW50RigwLCBwc0NvbnN0MCwgMSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotSURpcmVjdDNEVGV4dHVyZTkgKkJsaXQ6OmNvcHlTdXJmYWNlVG9UZXh0dXJlKElEaXJlY3Qz
RFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0KQotewotICAgIGlmICgh
c3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEQzRFNVUkZBQ0VfREVTQyBzb3VyY2VEZXNjOwot
ICAgIHN1cmZhY2UtPkdldERlc2MoJnNvdXJjZURlc2MpOwotCi0gICAgLy8gQ29weSB0aGUgcmVu
ZGVyIHRhcmdldCBpbnRvIGEgdGV4dHVyZQotICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJl
OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHNvdXJjZVJlY3Qu
cmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQsIHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50
b3AsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgc291cmNlRGVzYy5Gb3JtYXQsIEQzRFBPT0xf
REVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOwotICAgIH0KLQotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKLSAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRTdXJm
YWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVy
ZTkqKU5VTEwpOwotICAgIH0KLQotICAgIGRpc3BsYXktPmVuZFNjZW5lKCk7Ci0gICAgcmVzdWx0
ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJmYWNlLCAmc291cmNlUmVjdCwgdGV4dHVyZVN1cmZh
Y2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7Ci0KLSAgICB0ZXh0dXJlU3VyZmFjZS0+UmVsZWFzZSgp
OwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
Ci0gICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRleHR1cmU7Ci19Ci0KLXZvaWQgQmxpdDo6c2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291
cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCkKLXsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEQzRFZJRVdQT1JUOSB2cDsKLSAg
ICB2cC5YICAgICAgPSB4b2Zmc2V0OwotICAgIHZwLlkgICAgICA9IHlvZmZzZXQ7Ci0gICAgdnAu
V2lkdGggID0gc291cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdDsKLSAgICB2cC5IZWln
aHQgPSBzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wOwotICAgIHZwLk1pblogICA9
IDAuMGY7Ci0gICAgdnAuTWF4WiAgID0gMS4wZjsKLSAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2
cCk7Ci0KLSAgICBmbG9hdCBoYWxmUGl4ZWxBZGp1c3RbNF0gPSB7IC0xLjBmL3ZwLldpZHRoLCAx
LjBmL3ZwLkhlaWdodCwgMCwgMCB9OwotICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3Rh
bnRGKDAsIGhhbGZQaXhlbEFkanVzdCwgMSk7Ci19Ci0KLXZvaWQgQmxpdDo6c2V0Q29tbW9uQmxp
dFN0YXRlKCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsK
LQotICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShOVUxMKTsKLQotICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOwotICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsK
LSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xP
UldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVOQUJMRV9CTFVFIHwgRDNEQ09MT1JX
UklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEKTsKLSAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwgRkFMU0UpOwotICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKLQotICAg
IGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BP
SU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwg
RDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9T
UkdCVEVYVFVSRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNB
TVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0KLSAgICBSRUNU
IHNjaXNzb3JSZWN0ID0gezB9OyAgIC8vIFNjaXNzb3JpbmcgaXMgZGlzYWJsZWQgZm9yIGZsaXBw
aW5nLCBidXQgd2UgbmVlZCB0aGlzIHRvIGNhcHR1cmUgYW5kIHJlc3RvcmUgdGhlIG9sZCByZWN0
YW5nbGUKLSAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZzY2lzc29yUmVjdCk7Ci0KLSAgICBm
b3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAg
ICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgfQotfQotCi12b2lkIEJs
aXQ6OnJlbmRlcigpCi17Ci0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgp
OwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgSFJF
U1VMVCBociA9IGRldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIG1RdWFkVmVydGV4QnVmZmVyLCAw
LCAyICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgaHIgPSBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0
aW9uKG1RdWFkVmVydGV4RGVjbGFyYXRpb24pOwotCi0gICAgZGlzcGxheS0+c3RhcnRTY2VuZSgp
OwotICAgIGhyID0gZGV2aWNlLT5EcmF3UHJpbWl0aXZlKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDAs
IDIpOwotfQotCi12b2lkIEJsaXQ6OnNhdmVTdGF0ZSgpCi17Ci0gICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIGhyOwotCi0gICAgZGV2aWNl
LT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZtU2F2ZWREZXB0aFN0ZW5jaWwpOwotICAgIGRldmlj
ZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZtU2F2ZWRSZW5kZXJUYXJnZXQpOwotCi0gICAgaWYgKG1T
YXZlZFN0YXRlQmxvY2sgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGhyID0gZGV2aWNlLT5CZWdp
blN0YXRlQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAg
c2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGR1bW15
Q29uc3RbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLQotICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNo
YWRlcihOVUxMKTsKLSAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYoMCwg
ZHVtbXlDb25zdCwgMSk7Ci0gICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0g
ICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwgZHVtbXlDb25zdCwgMSk7
Ci0KLSAgICAgICAgRDNEVklFV1BPUlQ5IGR1bW15VnA7Ci0gICAgICAgIGR1bW15VnAuWCA9IDA7
Ci0gICAgICAgIGR1bW15VnAuWSA9IDA7Ci0gICAgICAgIGR1bW15VnAuV2lkdGggPSAxOwotICAg
ICAgICBkdW1teVZwLkhlaWdodCA9IDE7Ci0gICAgICAgIGR1bW15VnAuTWluWiA9IDA7Ci0gICAg
ICAgIGR1bW15VnAuTWF4WiA9IDE7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmZHVt
bXlWcCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIE5VTEwpOwotCi0gICAgICAg
IGRldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIG1RdWFkVmVydGV4QnVmZmVyLCAwLCAwKTsKLQot
ICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKG1RdWFkVmVydGV4RGVjbGFyYXRp
b24pOwotCi0gICAgICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtU2F2ZWRTdGF0ZUJs
b2NrKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCk7Ci0KLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jayAh
PSBOVUxMKQotICAgIHsKLSAgICAgICAgaHIgPSBtU2F2ZWRTdGF0ZUJsb2NrLT5DYXB0dXJlKCk7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQmxpdDo6
cmVzdG9yZVN0YXRlKCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKLQotICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShtU2F2ZWREZXB0aFN0
ZW5jaWwpOwotICAgIGlmIChtU2F2ZWREZXB0aFN0ZW5jaWwgIT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIG1TYXZlZERlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtU2F2ZWREZXB0aFN0
ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1T
YXZlZFJlbmRlclRhcmdldCk7Ci0gICAgaWYgKG1TYXZlZFJlbmRlclRhcmdldCAhPSBOVUxMKQot
ICAgIHsKLSAgICAgICAgbVNhdmVkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1T
YXZlZFJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1TYXZlZFN0YXRl
QmxvY2sgIT0gTlVMTCk7Ci0KLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKQotICAg
IHsKLSAgICAgICAgbVNhdmVkU3RhdGVCbG9jay0+QXBwbHkoKTsKLSAgICB9Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDg5MjhlY2QuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCbGl0LmNwcDogU3VyZmFjZSBjb3B5IHV0aWxp
dHkgY2xhc3MuCi0KLSNpZm5kZWYgTElCR0xFU1YyX0JMSVRfSF8KLSNkZWZpbmUgTElCR0xFU1Yy
X0JMSVRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIENvbnRleHQ7Ci0KLWNsYXNz
IEJsaXQKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IEJsaXQoQ29udGV4dCAqY29udGV4dCk7
Ci0gICAgfkJsaXQoKTsKLQotICAgIC8vIENvcHkgZnJvbSBzb3VyY2Ugc3VyZmFjZSB0byBkZXN0
IHN1cmZhY2UuCi0gICAgLy8gc291cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCBhcmUgaW4gRDNE
IGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKLSAgICBib29sIGNvcHkoSURpcmVjdDNE
U3VyZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3Jt
YXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
KTsKLQotICAgIC8vIENvcHkgZnJvbSBzb3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCi0g
ICAgLy8gc291cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVz
ICgwLDAgaW4gdXBwZXItbGVmdCkKLSAgICAvLyBzb3VyY2UgaXMgaW50ZXJwcmV0ZWQgYXMgUkdC
QSBhbmQgZGVzdEZvcm1hdCBzcGVjaWZpZXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvcm1hdC4gRm9y
IGV4YW1wbGUsIGlmIGRlc3RGb3JtYXQgPSBHTF9SR0IsIHRoZSBhbHBoYSBjaGFubmVsIHdpbGwg
YmUgZm9yY2VkIHRvIDAuCi0gICAgYm9vbCBmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5
ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAg
ICAvLyAyeDIgYm94IGZpbHRlciBzYW1wbGUgZnJvbSBzb3VyY2UgdG8gZGVzdC4KLSAgICAvLyBS
ZXF1aXJlcyB0aGF0IHNvdXJjZSBpcyBSR0IoQSkgYW5kIGRlc3QgaGFzIHRoZSBzYW1lIGZvcm1h
dCBhcyBzb3VyY2UuCi0gICAgYm9vbCBib3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJj
ZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwotCi0gIHByaXZhdGU6Ci0gICAgQ29udGV4dCAq
bUNvbnRleHQ7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZl
cjsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRp
b247Ci0KLSAgICB2b2lkIGluaXRHZW9tZXRyeSgpOwotCi0gICAgYm9vbCBzZXRGb3JtYXRDb252
ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCk7Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAq
Y29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJF
Q1QgJnNvdXJjZVJlY3QpOwotICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNl
UmVjdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCk7Ci0gICAgdm9pZCBzZXRDb21tb25C
bGl0U3RhdGUoKTsKLSAgICBSRUNUIGdldFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKSBjb25zdDsKLQotICAgIC8vIFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21w
aWxlZFNoYWRlcnMgYW5kIG1TaGFkZXJTb3VyY2UuCi0gICAgZW51bSBTaGFkZXJJZAotICAgIHsK
LSAgICAgICAgU0hBREVSX1ZTX1NUQU5EQVJELAotICAgICAgICBTSEFERVJfVlNfRkxJUFksCi0g
ICAgICAgIFNIQURFUl9QU19QQVNTVEhST1VHSCwKLSAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5D
RSwKLSAgICAgICAgU0hBREVSX1BTX0NPTVBPTkVOVE1BU0ssCi0gICAgICAgIFNIQURFUl9DT1VO
VAotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1TaGFkZXJTb3VyY2Vb
XTsKLQotICAgIC8vIFRoaXMgYWN0dWFsbHkgY29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVy
OSBvciBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgY2FzdGVkIHRvIElVbmtub3duLgotICAgIElVbmtu
b3duICptQ29tcGlsZWRTaGFkZXJzW1NIQURFUl9DT1VOVF07Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgRDNEU2hhZGVyVHlwZT4KLSAgICBib29sIHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNv
bnN0IGNoYXIgKnByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElE
aXJlY3QzRERldmljZTk6OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5
cGUgKiopLAotICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZp
Y2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFkZXJUeXBlKikpOwotCi0gICAgYm9vbCBzZXRWZXJ0ZXhT
aGFkZXIoU2hhZGVySWQgc2hhZGVyKTsKLSAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklk
IHNoYWRlcik7Ci0gICAgdm9pZCByZW5kZXIoKTsKLQotICAgIHZvaWQgc2F2ZVN0YXRlKCk7Ci0g
ICAgdm9pZCByZXN0b3JlU3RhdGUoKTsKLSAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVk
U3RhdGVCbG9jazsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0Owot
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU2F2ZWREZXB0aFN0ZW5jaWw7Ci0KLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oQmxpdCk7Ci19OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJf
QkxJVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9CdWZmZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZm
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDEyZTNjLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZm
ZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6QnVmZmVyIGNsYXNzLCByZXByZXNlbnRpbmcgc3Rv
cmFnZSBvZiB2ZXJ0ZXggYW5kL29yCi0vLyBpbmRleCBkYXRhLiBJbXBsZW1lbnRzIEdMIGJ1ZmZl
ciBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCi0vLyBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAyLjkgcGFnZSAyMS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIK
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRl
eERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCIK
LQotbmFtZXNwYWNlIGdsCi17Ci0KLUJ1ZmZlcjo6QnVmZmVyKEdMdWludCBpZCkgOiBSZWZDb3Vu
dE9iamVjdChpZCkKLXsKLSAgICBtQ29udGVudHMgPSBOVUxMOwotICAgIG1TaXplID0gMDsKLSAg
ICBtVXNhZ2UgPSBHTF9EWU5BTUlDX0RSQVc7Ci0KLSAgICBtU3RhdGljVmVydGV4QnVmZmVyID0g
TlVMTDsKLSAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIG1Vbm1vZGlmaWVkRGF0
YVVzZSA9IDA7Ci19Ci0KLUJ1ZmZlcjo6fkJ1ZmZlcigpCi17Ci0gICAgZGVsZXRlW10gbUNvbnRl
bnRzOwotICAgIGRlbGV0ZSBtU3RhdGljVmVydGV4QnVmZmVyOwotICAgIGRlbGV0ZSBtU3RhdGlj
SW5kZXhCdWZmZXI7Ci19Ci0KLXZvaWQgQnVmZmVyOjpidWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRh
dGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKQotewotICAgIGlmIChzaXplID09IDAp
Ci0gICAgewotICAgICAgICBkZWxldGVbXSBtQ29udGVudHM7Ci0gICAgICAgIG1Db250ZW50cyA9
IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgIT0gbVNpemUpCi0gICAgewotICAgICAg
ICBkZWxldGVbXSBtQ29udGVudHM7Ci0gICAgICAgIG1Db250ZW50cyA9IG5ldyBHTHVieXRlW3Np
emVdOwotICAgICAgICBtZW1zZXQobUNvbnRlbnRzLCAwLCBzaXplKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZGF0YSAhPSBOVUxMICYmIHNpemUgPiAwKQotICAgIHsKLSAgICAgICAgbWVtY3B5KG1Db250
ZW50cywgZGF0YSwgc2l6ZSk7Ci0gICAgfQotCi0gICAgbVNpemUgPSBzaXplOwotICAgIG1Vc2Fn
ZSA9IHVzYWdlOwotCi0gICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLQotICAgIGlmICh1c2Fn
ZSA9PSBHTF9TVEFUSUNfRFJBVykKLSAgICB7Ci0gICAgICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIg
PSBuZXcgU3RhdGljVmVydGV4QnVmZmVyKGdldERldmljZSgpKTsKLSAgICAgICAgbVN0YXRpY0lu
ZGV4QnVmZmVyID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKGdldERldmljZSgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQnVmZmVyOjpidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlw
dHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KQotewotICAgIG1lbWNweShtQ29udGVudHMgKyBvZmZz
ZXQsIGRhdGEsIHNpemUpOwotICAgIAotICAgIGlmICgobVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiBt
U3RhdGljVmVydGV4QnVmZmVyLT5zaXplKCkgIT0gMCkgfHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAm
JiBtU3RhdGljSW5kZXhCdWZmZXItPnNpemUoKSAhPSAwKSkKLSAgICB7Ci0gICAgICAgIGludmFs
aWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAgfQotCi0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsK
LX0KLQotU3RhdGljVmVydGV4QnVmZmVyICpCdWZmZXI6OmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigp
Ci17Ci0gICAgcmV0dXJuIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci19Ci0KLVN0YXRpY0luZGV4QnVm
ZmVyICpCdWZmZXI6OmdldFN0YXRpY0luZGV4QnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRp
Y0luZGV4QnVmZmVyOwotfQotCi12b2lkIEJ1ZmZlcjo6aW52YWxpZGF0ZVN0YXRpY0RhdGEoKQot
ewotICAgIGRlbGV0ZSBtU3RhdGljVmVydGV4QnVmZmVyOwotICAgIG1TdGF0aWNWZXJ0ZXhCdWZm
ZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKLSAgICBtU3RhdGlj
SW5kZXhCdWZmZXIgPSBOVUxMOwotCi0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKLX0KLQot
Ly8gQ3JlYXRlcyBzdGF0aWMgYnVmZmVycyBpZiBzdWZmaWNpZW50IHVzZWQgZGF0YSBoYXMgYmVl
biBsZWZ0IHVubW9kaWZpZWQKLXZvaWQgQnVmZmVyOjpwcm9tb3RlU3RhdGljVXNhZ2UoaW50IGRh
dGFTaXplKQotewotICAgIGlmICghbVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiAhbVN0YXRpY0luZGV4
QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVVubW9kaWZpZWREYXRhVXNlICs9IGRhdGFTaXplOwot
Ci0gICAgICAgIGlmIChtVW5tb2RpZmllZERhdGFVc2UgPiAzICogbVNpemUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBuZXcgU3RhdGljVmVydGV4QnVmZmVy
KGdldERldmljZSgpKTsKLSAgICAgICAgICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IG5ldyBTdGF0
aWNJbmRleEJ1ZmZlcihnZXREZXZpY2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDE5YzRlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCdWZmZXIuaDogRGVmaW5lcyB0aGUg
Z2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgot
Ly8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LgotLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEu
Ci0KLSNpZm5kZWYgTElCR0xFU1YyX0JVRkZFUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfQlVGRkVS
X0hfCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2RlZmluZSBH
TF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgotI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgotCi1uYW1lc3Bh
Y2UgZ2wKLXsKLWNsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZlcjsKLWNsYXNzIFN0YXRpY0luZGV4QnVm
ZmVyOwotCi1jbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IEJ1ZmZlcihHTHVpbnQgaWQpOwotCi0gICAgdmlydHVhbCB+QnVmZmVy
KCk7Ci0KLSAgICB2b2lkIGJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBz
aXplLCBHTGVudW0gdXNhZ2UpOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0YShjb25zdCB2b2lkICpk
YXRhLCBHTHNpemVpcHRyIHNpemUsIEdMaW50cHRyIG9mZnNldCk7Ci0KLSAgICB2b2lkICpkYXRh
KCkgeyByZXR1cm4gbUNvbnRlbnRzOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtU2l6ZTsgfQotICAgIEdMZW51bSB1c2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2FnZTsgfQot
Ci0gICAgU3RhdGljVmVydGV4QnVmZmVyICpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKTsKLSAgICBT
dGF0aWNJbmRleEJ1ZmZlciAqZ2V0U3RhdGljSW5kZXhCdWZmZXIoKTsKLSAgICB2b2lkIGludmFs
aWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAgdm9pZCBwcm9tb3RlU3RhdGljVXNhZ2UoaW50IGRhdGFT
aXplKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIp
OwotCi0gICAgR0x1Ynl0ZSAqbUNvbnRlbnRzOwotICAgIEdMc2l6ZWlwdHIgbVNpemU7Ci0gICAg
R0xlbnVtIG1Vc2FnZTsKLQotICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAqbVN0YXRpY1ZlcnRleEJ1
ZmZlcjsKLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAqbVN0YXRpY0luZGV4QnVmZmVyOwotICAgIEdM
c2l6ZWlwdHIgbVVubW9kaWZpZWREYXRhVXNlOwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJH
TEVTVjJfQlVGRkVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9Db250ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjNjA3Ny4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRl
eHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMzOSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBDb250ZXh0LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1h
bmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlv
bnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0
LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRo
bT4KLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0Zy
YW1lQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
U2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvSW5kZXhEYXRh
TWFuYWdlci5oIgotCi0jdW5kZWYgbmVhcgotI3VuZGVmIGZhcgotCi1uYW1lc3BhY2UgZ2wKLXsK
LUNvbnRleHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNv
bnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNz
KSA6IG1Db25maWcoY29uZmlnKQotewotICAgIEFTU0VSVChyb2J1c3RBY2Nlc3MgPT0gZmFsc2Up
OyAgIC8vIFVuaW1wbGVtZW50ZWQKLQotICAgIG1EaXNwbGF5ID0gTlVMTDsKLSAgICBtRGV2aWNl
ID0gTlVMTDsKLQotICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDApOwot
Ci0gICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKLQotICAgIG1TdGF0
ZS5kZXB0aENsZWFyVmFsdWUgPSAxLjBmOwotICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9
IDA7Ci0KLSAgICBtU3RhdGUuY3VsbEZhY2UgPSBmYWxzZTsKLSAgICBtU3RhdGUuY3VsbE1vZGUg
PSBHTF9CQUNLOwotICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBHTF9DQ1c7Ci0gICAgbVN0YXRlLmRl
cHRoVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5kZXB0aEZ1bmMgPSBHTF9MRVNTOwotICAgIG1T
dGF0ZS5ibGVuZCA9IGZhbHNlOwotICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IEdMX09ORTsK
LSAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IEdMX09ORTsKLSAgICBtU3RhdGUuZGVzdEJs
ZW5kUkdCID0gR0xfWkVSTzsKLSAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBHTF9aRVJPOwot
ICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7Ci0gICAgbVN0YXRlLmJs
ZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOwotICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJl
ZCA9IDA7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSAwOwotICAgIG1TdGF0ZS5ibGVu
ZENvbG9yLmJsdWUgPSAwOwotICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gMDsKLSAgICBt
U3RhdGUuc3RlbmNpbFRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBHTF9B
TFdBWVM7Ci0gICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAwOwotICAgIG1TdGF0ZS5zdGVuY2lsTWFz
ayA9IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0
ZW5jaWxCYWNrRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPSAw
OwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAtIDE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxC
YWNrV3JpdGVtYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gR0xfS0VFUDsKLSAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVu
Y2lsUGFzc0RlcHRoUGFzcyA9IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9
IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX0tFRVA7
Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX0tFRVA7Ci0gICAgbVN0
YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZmFsc2U7Ci0gICAgbVN0YXRlLnBvbHlnb25PZmZzZXRG
YWN0b3IgPSAwLjBmOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgPSAwLjBmOwotICAg
IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTsKLSAgICBtU3RhdGUuc2FtcGxl
Q292ZXJhZ2UgPSBmYWxzZTsKLSAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA9IDEuMGY7
Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNj
aXNzb3JUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLmRpdGhlciA9IHRydWU7Ci0gICAgbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludCA9IEdMX0RPTlRfQ0FSRTsKLSAgICBtU3RhdGUuZnJhZ21lbnRT
aGFkZXJEZXJpdmF0aXZlSGludCA9IEdMX0RPTlRfQ0FSRTsKLQotICAgIG1TdGF0ZS5saW5lV2lk
dGggPSAxLjBmOwotCi0gICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7Ci0gICAgbVN0YXRlLnZpZXdw
b3J0WSA9IDA7Ci0gICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9k
ZS5XaWR0aDsKLSAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5TW9k
ZS5IZWlnaHQ7Ci0gICAgbVN0YXRlLnpOZWFyID0gMC4wZjsKLSAgICBtU3RhdGUuekZhciA9IDEu
MGY7Ci0KLSAgICBtU3RhdGUuc2Npc3NvclggPSAwOwotICAgIG1TdGF0ZS5zY2lzc29yWSA9IDA7
Ci0gICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLldpZHRoOwot
ICAgIG1TdGF0ZS5zY2lzc29ySGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0Owot
Ci0gICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHRydWU7Ci0gICAgbVN0YXRlLmNvbG9yTWFza0dy
ZWVuID0gdHJ1ZTsKLSAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IHRydWU7Ci0gICAgbVN0YXRl
LmNvbG9yTWFza0FscGhhID0gdHJ1ZTsKLSAgICBtU3RhdGUuZGVwdGhNYXNrID0gdHJ1ZTsKLQot
ICAgIGlmIChzaGFyZUNvbnRleHQgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1h
bmFnZXIgPSBzaGFyZUNvbnRleHQtPm1SZXNvdXJjZU1hbmFnZXI7Ci0gICAgICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyID0gbmV3IFJlc291cmNlTWFuYWdlcigpOwotICAgIH0KLQotICAgIC8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDgzOgotICAgIC8vIEluIHRoZSBpbml0
aWFsIHN0YXRlLCBURVhUVVJFXzJEIGFuZCBURVhUVVJFX0NVQkVfTUFQIGhhdmUgdHdvZGltZW5z
aW9uYWwKLSAgICAvLyBhbmQgY3ViZSBtYXAgdGV4dHVyZSBzdGF0ZSB2ZWN0b3JzIHJlc3BlY3Rp
dmVseSBhc3NvY2lhdGVkIHdpdGggdGhlbS4KLSAgICAvLyBJbiBvcmRlciB0aGF0IGFjY2VzcyB0
byB0aGVzZSBpbml0aWFsIHRleHR1cmVzIG5vdCBiZSBsb3N0LCB0aGV5IGFyZSB0cmVhdGVkIGFz
IHRleHR1cmUKLSAgICAvLyBvYmplY3RzIGFsbCBvZiB3aG9zZSBuYW1lcyBhcmUgMC4KLQotICAg
IG1UZXh0dXJlMkRaZXJvLnNldChuZXcgVGV4dHVyZTJEKDApKTsKLSAgICBtVGV4dHVyZUN1YmVN
YXBaZXJvLnNldChuZXcgVGV4dHVyZUN1YmVNYXAoMCkpOwotCi0gICAgbVN0YXRlLmFjdGl2ZVNh
bXBsZXIgPSAwOwotICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsKLSAgICBiaW5kRWxlbWVudEFycmF5
QnVmZmVyKDApOwotICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsKLSAgICBiaW5kVGV4dHVyZTJE
KDApOwotICAgIGJpbmRSZWFkRnJhbWVidWZmZXIoMCk7Ci0gICAgYmluZERyYXdGcmFtZWJ1ZmZl
cigwKTsKLSAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwotCi0gICAgbVN0YXRlLmN1cnJlbnRQcm9n
cmFtID0gMDsKLQotICAgIG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gNDsKLSAgICBtU3RhdGUudW5w
YWNrQWxpZ25tZW50ID0gNDsKLSAgICBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlciA9IGZhbHNl
OwotCi0gICAgbVZlcnRleERhdGFNYW5hZ2VyID0gTlVMTDsKLSAgICBtSW5kZXhEYXRhTWFuYWdl
ciA9IE5VTEw7Ci0gICAgbUJsaXQgPSBOVUxMOwotICAgIG1MaW5lTG9vcElCID0gTlVMTDsKLQot
ICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOwotICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsKLSAg
ICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOwot
ICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgIG1IYXNCZWVu
Q3VycmVudCA9IGZhbHNlOwotICAgIG1Db250ZXh0TG9zdCA9IGZhbHNlOwotICAgIG1SZXNldFN0
YXR1cyA9IEdMX05PX0VSUk9SOwotICAgIG1SZXNldFN0cmF0ZWd5ID0gKG5vdGlmeVJlc2V0cyA/
IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQgOiBHTF9OT19SRVNFVF9OT1RJRklDQVRJT05f
RVhUKTsKLSAgICBtUm9idXN0QWNjZXNzID0gcm9idXN0QWNjZXNzOwotCi0gICAgbVN1cHBvcnRz
RFhUMVRleHR1cmVzID0gZmFsc2U7Ci0gICAgbVN1cHBvcnRzRFhUM1RleHR1cmVzID0gZmFsc2U7
Ci0gICAgbVN1cHBvcnRzRFhUNVRleHR1cmVzID0gZmFsc2U7Ci0gICAgbVN1cHBvcnRzRXZlbnRR
dWVyaWVzID0gZmFsc2U7Ci0gICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IGZhbHNlOwot
ICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSAwOwotICAgIG1NYXhTdXBwb3J0ZWRT
YW1wbGVzID0gMDsKLSAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID0gTlVMTDsKLSAgICBtYXJr
QWxsU3RhdGVEaXJ0eSgpOwotfQotCi1Db250ZXh0Ojp+Q29udGV4dCgpCi17Ci0gICAgaWYgKG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSAhPSAwKQotICAgIHsKLSAgICAgICAgUHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9n
cmFtKTsKLSAgICAgICAgaWYgKHByb2dyYW1PYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHByb2dyYW1PYmplY3QtPnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgICAgICBtU3RhdGUuY3Vy
cmVudFByb2dyYW0gPSAwOwotICAgIH0KLQotICAgIHdoaWxlICghbUZyYW1lYnVmZmVyTWFwLmVt
cHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihtRnJhbWVidWZmZXJNYXAu
YmVnaW4oKS0+Zmlyc3QpOwotICAgIH0KLQotICAgIHdoaWxlICghbUZlbmNlTWFwLmVtcHR5KCkp
Ci0gICAgewotICAgICAgICBkZWxldGVGZW5jZShtRmVuY2VNYXAuYmVnaW4oKS0+Zmlyc3QpOwot
ICAgIH0KLQotICAgIHdoaWxlICghbVF1ZXJ5TWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBk
ZWxldGVRdWVyeShtUXVlcnlNYXAuYmVnaW4oKS0+Zmlyc3QpOwotICAgIH0KLQotICAgIHdoaWxl
ICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtd
IG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOwotICAgICAgICBtTXVsdGlTYW1w
bGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKSk7Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykK
LSAgICB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBzYW1wbGVyKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVf
VFlQRV9DT1VOVDsgdHlwZSsrKQotICAgIHsKLSAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0
eXBlXS5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
aV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5hY3RpdmVR
dWVyeVtpXS5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChO
VUxMKTsKLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICBtU3Rh
dGUucmVuZGVyYnVmZmVyLnNldChOVUxMKTsKLQotICAgIG1UZXh0dXJlMkRaZXJvLnNldChOVUxM
KTsKLSAgICBtVGV4dHVyZUN1YmVNYXBaZXJvLnNldChOVUxMKTsKLQotICAgIGRlbGV0ZSBtVmVy
dGV4RGF0YU1hbmFnZXI7Ci0gICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0
ZSBtQmxpdDsKLSAgICBkZWxldGUgbUxpbmVMb29wSUI7Ci0KLSAgICBpZiAobU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZSkKLSAgICB7Ci0gICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPlJlbGVh
c2UoKTsKLSAgICB9Ci0KLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5yZWxlYXNlKCk7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpCi17Ci0gICAgbURpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1EZXZpY2UgPSBt
RGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0KLSAgICBpZiAoIW1IYXNCZWVuQ3VycmVudCkKLSAgICB7
Ci0gICAgICAgIG1EZXZpY2VDYXBzID0gbURpc3BsYXktPmdldERldmljZUNhcHMoKTsKLQotICAg
ICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgVmVydGV4RGF0YU1hbmFnZXIodGhpcywgbURl
dmljZSk7Ci0gICAgICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIo
dGhpcywgbURldmljZSk7Ci0gICAgICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7Ci0KLSAgICAg
ICAgbVN1cHBvcnRzU2hhZGVyTW9kZWwzID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9u
ID49IEQzRFBTX1ZFUlNJT04oMywgMCk7Ci0gICAgICAgIG1TdXBwb3J0c1ZlcnRleFRleHR1cmUg
PSBtRGlzcGxheS0+Z2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSA9IG1EaXNwbGF5LT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgp
OwotICAgICAgICBtU3VwcG9ydHNJbnN0YW5jaW5nID0gbURpc3BsYXktPmdldEluc3RhbmNpbmdT
dXBwb3J0KCk7Ci0KLSAgICAgICAgbU1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6
Om1pbigoaW50KW1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aCwgKGludCltRGV2aWNlQ2Fwcy5N
YXhUZXh0dXJlSGVpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAgbU1h
eEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heFRleHR1cmVEaW1lbnNpb24sIChp
bnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpOwotICAgICAg
ICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heFRleHR1cmVEaW1lbnNpb247Ci0gICAg
ICAgIG1NYXhUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJlRGltZW5zaW9uKSArIDE7Ci0g
ICAgICAgIFRSQUNFKCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVu
c2lvbj0lZCwgTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9JWQi
LAotICAgICAgICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiwgbU1heEN1YmVUZXh0dXJlRGlt
ZW5zaW9uLCBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4VGV4dHVyZUxldmVsKTsKLQot
ICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0KLSAgICAgICAg
ewotICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAotICAgICAgICAgICAgRDNERk1UX1g4UjhH
OEI4LAotICAgICAgICAgICAgRDNERk1UX1I1RzZCNSwKLSAgICAgICAgICAgIEQzREZNVF9EMjRT
OAotICAgICAgICB9OwotCi0gICAgICAgIGludCBtYXggPSAwOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQp
OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBu
ZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBtRGlz
cGxheS0+Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KHJlbmRlckJ1ZmZlckZvcm1hdHNbaV0sIG11bHRp
c2FtcGxlQXJyYXkpOwotICAgICAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydFtyZW5kZXJCdWZm
ZXJGb3JtYXRzW2ldXSA9IG11bHRpc2FtcGxlQXJyYXk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50
IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQzRE1V
TFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBtYXggPSBqOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4OwotCi0g
ICAgICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IG1EaXNwbGF5LT5nZXRFdmVudFF1ZXJ5U3Vw
cG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gbURpc3BsYXktPmdl
dE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNEWFQxVGV4dHVyZXMg
PSBtRGlzcGxheS0+Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0RY
VDNUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAg
bVN1cHBvcnRzRFhUNVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDVUZXh0dXJlU3VwcG9ydCgp
OwotICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RmxvYXQz
MlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmbVN1cHBvcnRz
RmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0
dXJlcyA9IG1EaXNwbGF5LT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0
MTZMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKTsKLSAg
ICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVtaW5hbmNl
VGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAg
IG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9y
dCgpOwotCi0gICAgICAgIG1TdXBwb3J0czMyYml0SW5kaWNlcyA9IG1EZXZpY2VDYXBzLk1heFZl
cnRleEluZGV4ID49ICgxIDw8IDE2KTsKLQotICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXRzID0gMDsKLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMjsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAxOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7Ci0gICAgICAgIGluaXRSZW5kZXJlclN0cmluZygpOwot
Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAgICAgICBtU3RhdGUudmlld3BvcnRZ
ID0gMDsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgp
OwotICAgICAgICBtU3RhdGUudmlld3BvcnRIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsK
LQotICAgICAgICBtU3RhdGUuc2Npc3NvclggPSAwOwotICAgICAgICBtU3RhdGUuc2Npc3Nvclkg
PSAwOwotICAgICAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsK
LSAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKLQot
ICAgICAgICBtSGFzQmVlbkN1cnJlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFdyYXAgdGhl
IGV4aXN0aW5nIERpcmVjdDNEIDkgcmVzb3VyY2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWdu
IHRoZW0gdG8gdGhlICcwJyBuYW1lcwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVu
ZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAg
Q29sb3JidWZmZXIgKmNvbG9yYnVmZmVyWmVybyA9IG5ldyBDb2xvcmJ1ZmZlcihkZWZhdWx0UmVu
ZGVyVGFyZ2V0KTsKLSAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclpl
cm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7Ci0gICAgRnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJa
ZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsKLQotICAgIHNldEZyYW1lYnVmZmVyWmVybyhm
cmFtZWJ1ZmZlclplcm8pOwotCi0gICAgaWYgKGRlZmF1bHRSZW5kZXJUYXJnZXQpCi0gICAgewot
ICAgICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYg
KGRlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwot
ICAgIH0KLSAgICAKLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotfQotCi0vLyBUaGlzIGZ1bmN0
aW9uIHdpbGwgc2V0IGFsbCBvZiB0aGUgc3RhdGUtcmVsYXRlZCBkaXJ0eSBmbGFncywgc28gdGhh
dCBhbGwgc3RhdGUgaXMgc2V0IGR1cmluZyBuZXh0IHByZS1kcmF3Lgotdm9pZCBDb250ZXh0Ojpt
YXJrQWxsU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUzsgdCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRUZXh0dXJlU2VyaWFs
UFNbdF0gPSAwOwotICAgIH0KLQotICAgIGZvciAoaW50IHQgPSAwOyB0IDwgTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgdCsrKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRUZXh0
dXJlU2VyaWFsVlNbdF0gPSAwOwotICAgIH0KLQotICAgIG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9
IDA7Ci0gICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkRGVw
dGhidWZmZXJTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7
Ci0gICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVk
ID0gZmFsc2U7Ci0gICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtUmVuZGVy
VGFyZ2V0RGVzY0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBtVmVydGV4RGVjbGFyYXRpb25D
YWNoZS5tYXJrU3RhdGVEaXJ0eSgpOwotCi0gICAgbUNsZWFyU3RhdGVEaXJ0eSA9IHRydWU7Ci0g
ICAgbUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsK
LSAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbVBvbHlnb25PZmZzZXRTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1TYW1w
bGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
bUZyb250RmFjZURpcnR5ID0gdHJ1ZTsKLSAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLSAg
ICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwotfQotCi12b2lkIENvbnRleHQ6Om1hcmtE
eFVuaWZvcm1zRGlydHkoKQotewotICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwotfQotCi12
b2lkIENvbnRleHQ6Om1hcmtDb250ZXh0TG9zdCgpCi17Ci0gICAgaWYgKG1SZXNldFN0cmF0ZWd5
ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCi0gICAgICAgIG1SZXNldFN0YXR1cyA9
IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVF9FWFQ7Ci0gICAgbUNvbnRleHRMb3N0ID0gdHJ1ZTsK
LX0KLQotYm9vbCBDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkKLXsKLSAgICByZXR1cm4gbUNvbnRl
eHRMb3N0OwotfQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9h
dCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgbVN0YXRlLmNvbG9yQ2xl
YXJWYWx1ZS5yZWQgPSByZWQ7Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdy
ZWVuOwotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7Ci0gICAgbVN0YXRl
LmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA9IGFscGhhOwotfQotCi12b2lkIENvbnRleHQ6OnNldENs
ZWFyRGVwdGgoZmxvYXQgZGVwdGgpCi17Ci0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRl
cHRoOwotfQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKLXsK
LSAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOwotfQotCi12b2lkIENvbnRl
eHQ6OnNldEN1bGxGYWNlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxGYWNl
ICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOwot
ICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0
Ojppc0N1bGxGYWNlRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFj
ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKLXsKLSAgICBp
ZiAobVN0YXRlLmN1bGxNb2RlICE9IG1vZGUpCi0gICAgewotICAgICAgICBtU3RhdGUuY3VsbE1v
ZGUgPSBtb2RlOwotICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQotewotICAgIGlmIChtU3Rh
dGUuZnJvbnRGYWNlICE9IGZyb250KQotICAgIHsKLSAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9
IGZyb250OwotICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXREZXB0aFRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUu
ZGVwdGhUZXN0ICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0g
ZW5hYmxlZDsKLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1i
b29sIENvbnRleHQ6OmlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dGF0ZS5kZXB0aFRlc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBk
ZXB0aEZ1bmMpCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQotICAg
IHsKLSAgICAgICAgbVN0YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKLSAgICAgICAgbURlcHRo
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoUmFu
Z2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIpCi17Ci0gICAgbVN0YXRlLnpOZWFyID0gek5lYXI7
Ci0gICAgbVN0YXRlLnpGYXIgPSB6RmFyOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kKGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCi0gICAgewot
ICAgICAgICBtU3RhdGUuYmxlbmQgPSBlbmFibGVkOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25z
dAotewotICAgIHJldHVybiBtU3RhdGUuYmxlbmQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Qmxl
bmRGYWN0b3JzKEdMZW51bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNl
QWxwaGEsIEdMZW51bSBkZXN0QWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJH
QiAhPSBzb3VyY2VSR0IgfHwKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291
cmNlQWxwaGEgfHwKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8Ci0g
ICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCi0gICAgewotICAgICAg
ICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBzb3VyY2VSR0I7Ci0gICAgICAgIG1TdGF0ZS5kZXN0
QmxlbmRSR0IgPSBkZXN0UkdCOwotICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNv
dXJjZUFscGhhOwotICAgICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7Ci0g
ICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0
OjpzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0
IGFscGhhKQotewotICAgIGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8Ci0gICAg
ICAgIG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0ZS5i
bGVuZENvbG9yLmJsdWUgIT0gYmx1ZSB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBo
YSAhPSBhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsK
LSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRl
LmJsZW5kQ29sb3IuYmx1ZSA9IGJsdWU7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhh
ID0gYWxwaGE7Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVt
IGFscGhhRXF1YXRpb24pCi17Ci0gICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJn
YkVxdWF0aW9uIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFF
cXVhdGlvbikKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1
YXRpb247Ci0gICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9u
OwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc3Rl
bmNpbFRlc3QgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9
IGVuYWJsZWQ7Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQot
Ci1ib29sIENvbnRleHQ6OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN0YXRlLnN0ZW5jaWxUZXN0OwotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJh
bXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1h
c2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAotICAg
ICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5z
dGVuY2lsTWFzayAhPSBzdGVuY2lsTWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2ls
RnVuYyA9IHN0ZW5jaWxGdW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2ls
UmVmID4gMCkgPyBzdGVuY2lsUmVmIDogMDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0g
c3RlbmNpbE1hc2s7Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFj
a0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQotewot
ICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAotICAg
ICAgICBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrTWFzayAhPSBzdGVuY2lsQmFja01hc2spCi0gICAgewotICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOwotICAgICAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tSZWYgPSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVm
IDogMDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsK
LSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKLXsKLSAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKLSAg
ICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQot
ewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0
ZW1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVu
Y2lsQmFja1dyaXRlbWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5j
aWxGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0Rl
cHRoUGFzcykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRo
RmFpbCB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBh
c3NEZXB0aFBhc3MpCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2ls
RmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NE
ZXB0aEZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQ
YXNzRGVwdGhQYXNzOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0K
LX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5j
aWxCYWNrRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5j
aWxCYWNrUGFzc0RlcHRoUGFzcykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAh
PSBzdGVuY2lsQmFja0ZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbCAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrUGFzc0RlcHRoUGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCi0gICAgewot
ICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOwotICAgICAg
ICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJh
Y2tQYXNzRGVwdGhQYXNzOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQp
Ci17Ci0gICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKLSAgICAgICAgbVBv
bHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6
aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUu
cG9seWdvbk9mZnNldEZpbGw7Ci0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0
UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQotewotICAgIGlmIChtU3RhdGUu
cG9seWdvbk9mZnNldEZhY3RvciAhPSBmYWN0b3IgfHwKLSAgICAgICAgbVN0YXRlLnBvbHlnb25P
ZmZzZXRVbml0cyAhPSB1bml0cykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
RmFjdG9yID0gZmFjdG9yOwotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5p
dHM7Ci0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQot
Ci12b2lkIENvbnRleHQ6OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCi17
Ci0gICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAg
ICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6Omlz
U2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0
ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292
ZXJhZ2UoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0g
ZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7
Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29u
dGV4dDo6aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQ
YXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KQotewotICAgIGlmIChtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2VWYWx1ZSAhPSB2YWx1ZSB8fAotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VJbnZlcnQgIT0gaW52ZXJ0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdl
VmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52
ZXJ0OwotICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lk
IENvbnRleHQ6OnNldFNjaXNzb3JUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRl
LnNjaXNzb3JUZXN0ICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc2Npc3NvclRl
c3QgPSBlbmFibGVkOwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0K
LX0KLQotYm9vbCBDb250ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TdGF0ZS5zY2lzc29yVGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXREaXRoZXIo
Ym9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCi0gICAg
ewotICAgICAgICBtU3RhdGUuZGl0aGVyID0gZW5hYmxlZDsKLSAgICAgICAgbURpdGhlclN0YXRl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQo
KSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuZGl0aGVyOwotfQotCi12b2lkIENvbnRleHQ6
OnNldExpbmVXaWR0aChHTGZsb2F0IHdpZHRoKQotewotICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3
aWR0aDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhp
bnQpCi17Ci0gICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludChHTGVudW0gaGludCkKLXsK
LSAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7Ci0gICAgLy8g
VE9ETzogUHJvcGFnYXRlIHRoZSBoaW50IHRvIHNoYWRlciB0cmFuc2xhdG9yIHNvIHdlIGNhbiB3
cml0ZQotICAgIC8vIGRkeCwgZGR4X2NvYXJzZSwgb3IgZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRo
ZSBoaW50LgotICAgIC8vIElnbm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50
YXRpb25zIHRvIGlnbm9yZSBoaW50LgotfQotCi12b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFy
YW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4OwotICAgIG1TdGF0ZS52aWV3cG9ydFkgPSB5OwotICAg
IG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gd2lkdGg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0
ID0gaGVpZ2h0OwotfQotCi12b2lkIENvbnRleHQ6OnNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKG1TdGF0
ZS5zY2lzc29yWCAhPSB4IHx8IG1TdGF0ZS5zY2lzc29yWSAhPSB5IHx8IAotICAgICAgICBtU3Rh
dGUuc2Npc3NvcldpZHRoICE9IHdpZHRoIHx8IG1TdGF0ZS5zY2lzc29ySGVpZ2h0ICE9IGhlaWdo
dCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IHg7Ci0gICAgICAgIG1TdGF0ZS5z
Y2lzc29yWSA9IHk7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSB3aWR0aDsKLSAgICAg
ICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TY2lzc29yU3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhib29s
IHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIGlmIChtU3Rh
dGUuY29sb3JNYXNrUmVkICE9IHJlZCB8fCBtU3RhdGUuY29sb3JNYXNrR3JlZW4gIT0gZ3JlZW4g
fHwKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgIT0gYmx1ZSB8fCBtU3RhdGUuY29sb3JN
YXNrQWxwaGEgIT0gYWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0g
cmVkOwotICAgICAgICBtU3RhdGUuY29sb3JNYXNrR3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0
YXRlLmNvbG9yTWFza0JsdWUgPSBibHVlOwotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEg
PSBhbHBoYTsKLSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0RGVwdGhNYXNrKGJvb2wgbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLmRl
cHRoTWFzayAhPSBtYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoTWFzayA9IG1hc2s7
Ci0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OnNldEFjdGl2ZVNhbXBsZXIodW5zaWduZWQgaW50IGFjdGl2ZSkKLXsKLSAgICBtU3RhdGUu
YWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldFJlYWRGcmFt
ZWJ1ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJhbWVidWZm
ZXI7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25z
dAotewotICAgIHJldHVybiBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQgQ29u
dGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRl
LnJlbmRlcmJ1ZmZlci5pZCgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJI
YW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKLX0K
LQotR0x1aW50IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17
Ci0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gTlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdl
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAg
IHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RF0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9
Ci0KLSAgICBpZiAocXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcXVlcnlPYmpl
Y3QtPmlkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25l
ZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOwotfQotCi1jb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBh
dHRyaWJOdW0pCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVt
XTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQg
YXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwg
Ym9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp
emVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKLXsKLSAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUu
dmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKLX0KLQot
Y29uc3Qgdm9pZCAqQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQg
YXR0cmliTnVtKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0
dHJpYk51bV0ubVBvaW50ZXI7Ci19Ci0KLWNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZDb250
ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0
dHJpYnV0ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdu
bWVudCkKLXsKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKLX0KLQotR0xp
bnQgQ29udGV4dDo6Z2V0UGFja0FsaWdubWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0
ZS5wYWNrQWxpZ25tZW50OwotfQotCi12b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChH
TGludCBhbGlnbm1lbnQpCi17Ci0gICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVu
dDsKLX0KLQotR0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdubWVudDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQ
YWNrUmV2ZXJzZVJvd09yZGVyKGJvb2wgcmV2ZXJzZVJvd09yZGVyKQotewotICAgIG1TdGF0ZS5w
YWNrUmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOwotfQotCi1ib29sIENvbnRleHQ6
OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFj
a1JldmVyc2VSb3dPcmRlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17
Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOwotfQotCi1HTHVp
bnQgQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmNyZWF0ZVByb2dyYW0oKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihH
TGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2hhZGVy
KHR5cGUpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgcmV0
dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVRleHR1cmUoKTsKLX0KLQotR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXIt
PmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1
ZmZlciBuYW1lCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIEdM
dWludCBoYW5kbGUgPSBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQot
ICAgIG1GcmFtZWJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7
Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVGZW5jZSgpCi17Ci0gICAgR0x1aW50IGhhbmRs
ZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbUZlbmNlTWFwW2hh
bmRsZV0gPSBuZXcgRmVuY2UobURpc3BsYXkpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQot
Ly8gUmV0dXJucyBhbiB1bnVzZWQgcXVlcnkgbmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVF1
ZXJ5KCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yLmFsbG9j
YXRlKCk7Ci0KLSAgICBtUXVlcnlNYXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFu
ZGxlOwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewot
ICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAg
ICAgIGRldGFjaEJ1ZmZlcihidWZmZXIpOwotICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVTaGFk
ZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIo
c2hhZGVyKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFt
KQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAg
bUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVU
ZXh0dXJlKEdMdWludCB0ZXh0dXJlKQotewotICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRU
ZXh0dXJlKHRleHR1cmUpKQotICAgIHsKLSAgICAgICAgZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsK
LSAgICB9Ci0KLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwot
fQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVy
KQotewotICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwot
ICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVSZW5kZXJidWZmZXIocmVu
ZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQg
ZnJhbWVidWZmZXIpCi17Ci0gICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVy
T2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwotCi0gICAgaWYgKGZy
YW1lYnVmZmVyT2JqZWN0ICE9IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAg
IGRldGFjaEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLQotICAgICAgICBtRnJhbWVidWZmZXJI
YW5kbGVBbGxvY2F0b3IucmVsZWFzZShmcmFtZWJ1ZmZlck9iamVjdC0+Zmlyc3QpOwotICAgICAg
ICBkZWxldGUgZnJhbWVidWZmZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUZyYW1lYnVmZmVy
TWFwLmVyYXNlKGZyYW1lYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6
ZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKQotewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5j
ZU9iamVjdCA9IG1GZW5jZU1hcC5maW5kKGZlbmNlKTsKLQotICAgIGlmIChmZW5jZU9iamVjdCAh
PSBtRmVuY2VNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iu
cmVsZWFzZShmZW5jZU9iamVjdC0+Zmlyc3QpOwotICAgICAgICBkZWxldGUgZmVuY2VPYmplY3Qt
PnNlY29uZDsKLSAgICAgICAgbUZlbmNlTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KQotewotICAgIFF1ZXJ5
TWFwOjppdGVyYXRvciBxdWVyeU9iamVjdCA9IG1RdWVyeU1hcC5maW5kKHF1ZXJ5KTsKLSAgICBp
ZiAocXVlcnlPYmplY3QgIT0gbVF1ZXJ5TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgbVF1ZXJ5
SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UocXVlcnlPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYg
KHF1ZXJ5T2JqZWN0LT5zZWNvbmQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5T2JqZWN0
LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgICAgICBtUXVlcnlNYXAuZXJhc2Uo
cXVlcnlPYmplY3QpOwotICAgIH0KLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1
aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGhh
bmRsZSk7Ci19Ci0KLVNoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCi17
Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlcihoYW5kbGUpOwotfQotCi1Q
cm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJu
IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKLX0KLQotVGV4dHVyZSAqQ29u
dGV4dDo6Z2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRUZXh0dXJlKGhhbmRsZSk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqQ29udGV4dDo6
Z2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1h
bmFnZXItPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4
dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKCkKLXsKLSAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0
YXRlLnJlYWRGcmFtZWJ1ZmZlcik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3
RnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBtQm91bmREcmF3RnJhbWVidWZmZXI7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0g
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAg
ICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKLX0KLQotdm9pZCBD
b250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0g
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7Ci0KLSAg
ICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0K
LXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkQp
OwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRdW21TdGF0ZS5hY3RpdmVT
YW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Ymlu
ZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV9DVUJFKTsKLQotICAgIG1T
dGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5z
ZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFt
ZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJd
ID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAgfQotCi0gICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZl
ciA9IGZyYW1lYnVmZmVyOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIo
R0x1aW50IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpKQotICAgIHsKLSAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBG
cmFtZWJ1ZmZlcigpOwotICAgIH0KLQotICAgIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPSBmcmFt
ZWJ1ZmZlcjsKLQotICAgIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKGZy
YW1lYnVmZmVyKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCBy
ZW5kZXJidWZmZXIpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJB
bGxvY2F0aW9uKHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChn
ZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6dXNlUHJv
Z3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRl
LmN1cnJlbnRQcm9ncmFtOwotICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAg
ICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVy
d2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4KLQotICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJv
Z3JhbSkKLSAgICB7Ci0gICAgICAgIFByb2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5h
Z2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0g
bVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOwotICAgICAgICBtQ2Fj
aGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1
ZTsKLQotICAgICAgICBpZiAobmV3UHJvZ3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgbmV3
UHJvZ3JhbS0+YWRkUmVmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRQ
cm9ncmFtKQotICAgICAgICB7Ci0gICAgICAgICAgICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgcXVlcnkpCi17Ci0gICAgLy8gRnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jv
b2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2FsbGVkIHdpdGggYW4gPGlkPiAgCi0gICAgLy8g
b2YgemVybywgaWYgdGhlIGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgPHRhcmdldD4gaXMg
bm9uLXplcm8gKGZvciB0aGUgIAotICAgIC8vIHRhcmdldHMgQU5ZX1NBTVBMRVNfUEFTU0VEX0VY
VCBhbmQgQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsIGlmICAKLSAgICAvLyB0
aGUgYWN0aXZlIHF1ZXJ5IGZvciBlaXRoZXIgdGFyZ2V0IGlzIG5vbi16ZXJvKSwgaWYgPGlkPiBp
cyB0aGUgbmFtZSBvZiBhbiAKLSAgICAvLyBleGlzdGluZyBxdWVyeSBvYmplY3Qgd2hvc2UgdHlw
ZSBkb2VzIG5vdCBtYXRjaCA8dGFyZ2V0Piwgb3IgaWYgPGlkPiBpcyB0aGUKLSAgICAvLyBhY3Rp
dmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIGFueSBxdWVyeSB0eXBlLCB0aGUgZXJyb3IgSU5WQUxJ
RF9PUEVSQVRJT04gaXMKLSAgICAvLyBnZW5lcmF0ZWQuCi0KLSAgICAvLyBFbnN1cmUgbm8gb3Ro
ZXIgcXVlcmllcyBhcmUgYWN0aXZlCi0gICAgLy8gTk9URTogSWYgb3RoZXIgcXVlcmllcyB0aGFu
IG9jY2x1c2lvbiBhcmUgc3VwcG9ydGVkLCB3ZSB3aWxsIG5lZWQgdG8gY2hlY2sKLSAgICAvLyBz
ZXBhcmF0ZWx5IHRoYXQ6Ci0gICAgLy8gICAgYSkgVGhlIHF1ZXJ5IElEIHBhc3NlZCBpcyBub3Qg
dGhlIGN1cnJlbnQgYWN0aXZlIHF1ZXJ5IGZvciBhbnkgdGFyZ2V0L3R5cGUKLSAgICAvLyAgICBi
KSBUaGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChh
bmQgaW4gdGhlIGNhc2UKLSAgICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhU
IGFuZCBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKLSAgICAvLyAgICAg
ICBubyBxdWVyeSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdl
dHMgZWl0aGVyLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsr
KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxM
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRj
aCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDog
Ci0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAK
LSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1
ZXJ5KHF1ZXJ5LCB0cnVlLCB0YXJnZXQpOwotCi0gICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBv
YnRhaW5lZCB3aXRoIGdsR2VuUXVlcmllcwotICAgIGlmICghcXVlcnlPYmplY3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAg
IC8vIGNoZWNrIGZvciB0eXBlIG1pc21hdGNoCi0gICAgaWYgKHF1ZXJ5T2JqZWN0LT5nZXRUeXBl
KCkgIT0gdGFyZ2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICB9Ci0KLSAgICAvLyBzZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBzcGVjaWZp
ZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQocXVlcnlPYmplY3Qp
OwotCi0gICAgLy8gYmVnaW4gcXVlcnkKLSAgICBxdWVyeU9iamVjdC0+YmVnaW4oKTsKLX0KLQot
dm9pZCBDb250ZXh0OjplbmRRdWVyeShHTGVudW0gdGFyZ2V0KQotewotICAgIFF1ZXJ5VHlwZSBx
VHlwZTsKLQotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NB
TVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFT
U0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAg
ICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpx
dWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uZ2V0KCk7Ci0KLSAgICBpZiAo
cXVlcnlPYmplY3QgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgcXVlcnlPYmplY3QtPmVuZCgpOwotCi0gICAg
bVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6
c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1G
cmFtZWJ1ZmZlck1hcFswXTsKLSAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Ci0gICAg
aWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPT0gMCkKLSAgICB7Ci0gICAgICAgIG1Cb3VuZERy
YXdGcmFtZWJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UmVu
ZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpCi17Ci0g
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVy
LmdldCgpOwotICAgIHJlbmRlcmJ1ZmZlck9iamVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIp
OwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50
IGhhbmRsZSkKLXsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBt
RnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1G
cmFtZWJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKLSAg
ICB9Ci19Ci0KLUZlbmNlICpDb250ZXh0OjpnZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQot
ewotICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7
Ci0KLSAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmZW5jZS0+
c2Vjb25kOwotICAgIH0KLX0KLQotUXVlcnkgKkNvbnRleHQ6OmdldFF1ZXJ5KHVuc2lnbmVkIGlu
dCBoYW5kbGUsIGJvb2wgY3JlYXRlLCBHTGVudW0gdHlwZSkKLXsKLSAgICBRdWVyeU1hcDo6aXRl
cmF0b3IgcXVlcnkgPSBtUXVlcnlNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHF1ZXJ5ID09
IG1RdWVyeU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIXF1ZXJ5LT5zZWNvbmQgJiYgY3JlYXRlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBxdWVyeS0+c2Vjb25kID0gbmV3IFF1ZXJ5KGhhbmRsZSwgdHlw
ZSk7Ci0gICAgICAgICAgICBxdWVyeS0+c2Vjb25kLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gcXVlcnktPnNlY29uZDsKLSAgICB9Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6
Z2V0QXJyYXlCdWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7
Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKLXsKLSAgICBy
ZXR1cm4gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsKLX0KLQotUHJvZ3JhbSAqQ29u
dGV4dDo6Z2V0Q3VycmVudFByb2dyYW0oKQotewotICAgIGlmICghbUNhY2hlZEN1cnJlbnRQcm9n
cmFtKQotICAgIHsKLSAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0gbVJlc291cmNlTWFu
YWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOwotICAgIH0KLSAgICByZXR1
cm4gbUNhY2hlZEN1cnJlbnRQcm9ncmFtOwotfQotCi1UZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRl
eHR1cmUyRCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBs
ZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7Ci19Ci0KLVRleHR1
cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2
ZVNhbXBsZXIsIFRFWFRVUkVfQ1VCRSkpOwotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRTYW1w
bGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAg
ICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQo
KTsKLQotICAgIGlmICh0ZXhpZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8g
ZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAotICAgIHsKLSAg
ICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVy
by5nZXQoKTsKLSAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcFplcm8uZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmdldCgpOwotfQotCi1ib29sIENvbnRleHQ6Omdl
dEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMpCi17Ci0gICAgc3dpdGNo
IChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAg
ICpwYXJhbXMgPSBHTF9UUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZUludmVydDsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9X
UklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoTWFzazsgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAg
cGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0
YXRlLmNvbG9yTWFza0dyZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNr
Qmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25P
ZmZzZXRGaWxsOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRTogICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlOyAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JU
ZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDog
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7ICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGl0aGVyOyAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFt
cyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7IGJyZWFrOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIENvbnRleHQ6OmdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFt
cykKLXsKLSAgICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgaW5jbHVkZWQg
aW4gb3VyIGludGVybmFsIGdldEZsb2F0diBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGJlY2F1c2Ug
aXQgaXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMg
Mi4wIHNwZWMgbmFtZXMKLSAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1
bmN0aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55Ci0gICAgLy8gY2Fz
ZSwgdGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0
aW9uLgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRI
OiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUubGluZVdpZHRoOyAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6ICAgICpwYXJhbXMgPSBt
U3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZTsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9D
TEVBUl9WQUxVRTogICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOyAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6ICAgICpwYXJhbXMg
PSBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcjsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9VTklUUzogICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRz
OyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAg
ICAgIHBhcmFtc1swXSA9IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOOwotICAgICAg
ICBwYXJhbXNbMV0gPSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAg
cGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU47Ci0gICAgICAgIHBh
cmFtc1sxXSA9IHN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpF
X1JBTkdFX01BWF9TTTMgOiBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTI7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKLSAgICAgICAgcGFyYW1z
WzBdID0gbVN0YXRlLnpOZWFyOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuekZhcjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBw
YXJhbXNbMF0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZDsKLSAgICAgICAgcGFyYW1zWzFd
ID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbjsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0
YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLmFscGhhOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRf
Q09MT1I6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5ibGVuZENvbG9yLnJlZDsKLSAgICAg
ICAgcGFyYW1zWzFdID0gbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1sy
XSA9IG1TdGF0ZS5ibGVuZENvbG9yLmJsdWU7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5i
bGVuZENvbG9yLmFscGhhOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250
ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgLy8g
UGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIG5vdCBpbmNsdWRlZCBpbiBvdXIgaW50
ZXJuYWwgZ2V0SW50ZWdlcnYgaW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0
b3JlZCBhcyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVj
IG5hbWVzCi0gICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4g
QXMgaXQgd291bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMg
c2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gWW91
IG1heSBmaW5kIGl0IGluIAotICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4KLSAgICBzd2l0Y2gg
KHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBh
cmFtcyA9IGdsOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0
TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMoKTsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9V
TklUUzogICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6
ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NI
QURFUl9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJl
IHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAg
ICAgYnJlYWs7Ci0gICAgICAvL2Nhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAg
ICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUK
LSAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMg
PSBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5y
ZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFTkRF
UkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZl
ci5pZCgpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFN
OiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VycmVudFByb2dyYW07ICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAq
cGFyYW1zID0gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUudW5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9HRU5FUkFURV9NSVBNQVBfSElOVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5l
cmF0ZU1pcG1hcEhpbnQ7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAqcGFyYW1zID0gbVN0YXRlLmZyYWdtZW50U2hh
ZGVyRGVyaXZhdGl2ZUhpbnQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRTog
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RF
WFRVUkUwKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsTWFzazsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxCYWNrRnVuYzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX1JFRjogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVf
TUFTSzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2s7ICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zdGVuY2lsUGFzc0RlcHRoUGFzczsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NU
RU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxC
YWNrRmFpbDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVw
dGhGYWlsOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7ICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
b3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5E
X0RTVF9SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZFJH
QjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhB
OiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGE7ICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc3RlbmNpbFdyaXRlbWFzazsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVu
Y2lsQmFja1dyaXRlbWFzazsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
Q0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFy
YW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIAotICAgICAgICBwYXJh
bXNbMF0gPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdM
c2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsKLSAgICAgICAgICAg
IGlmIChtYXhTYW1wbGVzICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1heFNhbXBsZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVG
RkVSUzogICAgICAgICAgICAgICAgICAgCi0gICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJh
bWVidWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkg
PT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1NBTVBMRV9CVUZGRVJTOgotICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZm
ZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFy
YW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6
SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9J
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WSUVXUE9S
VF9ESU1TOgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjpt
YXgoZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbigpKTsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsKLSAgICAg
ICAgICAgIHBhcmFtc1sxXSA9IG1heERpbWVuc2lvbjsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQ7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVklF
V1BPUlQ6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS52aWV3cG9ydFg7Ci0gICAgICAgIHBh
cmFtc1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS52
aWV3cG9ydFdpZHRoOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUudmlld3BvcnRIZWlnaHQ7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAgICAgcGFy
YW1zWzBdID0gbVN0YXRlLnNjaXNzb3JYOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuc2Np
c3Nvclk7Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAg
IHBhcmFtc1szXSA9IG1TdGF0ZS5zY2lzc29ySGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuY3VsbE1vZGU7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJPTlRf
RkFDRTogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJvbnRGYWNlOyAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBjYXNl
IEdMX0dSRUVOX0JJVFM6Ci0gICAgICBjYXNlIEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2UgR0xf
QUxQSEFfQklUUzoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLQotICAg
ICAgICAgICAgaWYgKGNvbG9yYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9SRURfQklUUzogICAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNv
bG9yYnVmZmVyLT5nZXRHcmVlblNpemUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX0JMVUVfQklUUzogICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29s
b3JidWZmZXItPmdldEFscGhhU2l6ZSgpOyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAg
ICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
U3RlbmNpbFNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1T
dGF0ZS5hY3RpdmVTYW1wbGVyID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJE
XVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVTYW1w
bGVyID4gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3Rp
dmVTYW1wbGVyXS5pZCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgICAqcGFyYW1zID0gbVJl
c2V0U3RyYXRlZ3k7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9C
SU5BUllfRk9STUFUU19PRVM6Ci0gICAgICAgICpwYXJhbXMgPSAxOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6Ci0gICAgICAgICpwYXJh
bXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xl
bnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKLXsKLSAgICAvLyBQbGVhc2Ugbm90
ZTogdGhlIHF1ZXJ5IHR5cGUgcmV0dXJuZWQgZm9yIERFUFRIX0NMRUFSX1ZBTFVFIGluIHRoaXMg
aW1wbGVtZW50YXRpb24KLSAgICAvLyBpcyBGTE9BVCByYXRoZXIgdGhhbiBJTlQsIGFzIHdvdWxk
IGJlIHN1Z2dlc3RlZCBieSB0aGUgR0wgRVMgMi4wIHNwZWMuIFRoaXMgaXMgZHVlCi0gICAgLy8g
dG8gdGhlIGZhY3QgdGhhdCBpdCBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGZsb2F0LCBhbmQg
c28gd291bGQgcmVxdWlyZSBjb252ZXJzaW9uCi0gICAgLy8gaWYgcmV0dXJuZWQgZnJvbSBDb250
ZXh0OjpnZXRJbnRlZ2Vydi4gU2luY2UgdGhpcyBjb252ZXJzaW9uIGlzIGFscmVhZHkgaW1wbGVt
ZW50ZWQgCi0gICAgLy8gaW4gdGhlIGNhc2UgdGhhdCBvbmUgY2FsbHMgZ2xHZXRJbnRlZ2VydiB0
byByZXRyaWV2ZSBhIGZsb2F0LXR5cGVkIHN0YXRlIHZhcmlhYmxlLCB3ZQotICAgIC8vIHBsYWNl
IERFUFRIX0NMRUFSX1ZBTFVFIHdpdGggdGhlIGZsb2F0cy4gVGhpcyBzaG91bGQgbWFrZSBubyBk
aWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nCi0gICAgLy8gYXBwbGljYXRpb24uCi0gICAgc3dpdGNo
IChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRT
OgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpu
dW1QYXJhbXMgPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9
IDA7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhf
QVRUUklCUzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAg
ICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICBjYXNlIEdMX01BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFM6Ci0gICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAg
ICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgotICAgICAgY2FzZSBHTF9N
QVhfUkVOREVSQlVGRkVSX1NJWkU6Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZP
Uk1BVFM6Ci0gICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0JJTkRJTkc6Ci0gICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOgotICAgICAg
Y2FzZSBHTF9DVVJSRU5UX1BST0dSQU06Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgot
ICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOgotICAgICAgY2FzZSBH
TF9VTlBBQ0tfQUxJR05NRU5UOgotICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoK
LSAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6Ci0gICAg
ICBjYXNlIEdMX1JFRF9CSVRTOgotICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOgotICAgICAgY2Fz
ZSBHTF9CTFVFX0JJVFM6Ci0gICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6Ci0gICAgICBjYXNlIEdM
X0RFUFRIX0JJVFM6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoKLSAgICAgIGNhc2UgR0xf
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01P
REU6Ci0gICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6Ci0gICAgICBjYXNlIEdMX0FDVElWRV9URVhU
VVJFOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
VkFMVUVfTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6Ci0gICAgICBjYXNlIEdMX1NU
RU5DSUxfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOgotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfRlVOQzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19G
QUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOgotICAgICAgY2FzZSBHTF9ERVBU
SF9GVU5DOgotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOgotICAgICAgY2FzZSBHTF9CTEVO
RF9TUkNfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6Ci0gICAgICBjYXNlIEdM
X0JMRU5EX0RTVF9BTFBIQToKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOgotICAg
ICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQToKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9X
UklURU1BU0s6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6
Ci0gICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6Ci0gICAgICBjYXNlIEdMX01BWF9DVUJF
X01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgotICAgICAg
Y2FzZSBHTF9TQU1QTEVTOgotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEU6Ci0gICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgot
ICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDoKLSAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFU
RUdZX0VYVDoKLSAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgot
ICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKLSAgICAgICAgewotICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAg
ICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WSUVX
UE9SVF9ESU1TOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAg
ICAgICAgICpudW1QYXJhbXMgPSAyOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9WSUVXUE9SVDoKLSAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxF
UjoKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDoKLSAgICAgIGNhc2UgR0xf
REVQVEhfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAg
IC8vIENVTExfRkFDRSB0aHJvdWdoIERJVEhFUiBhcmUgbmF0dXJhbCB0byBJc0VuYWJsZWQsCi0g
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgLy8gYnV0IGNhbiBiZSByZXRy
aWV2ZWQgdGhyb3VnaCB0aGUgR2V0e1R5cGV9diBxdWVyaWVzLgotICAgICAgY2FzZSBHTF9TQU1Q
TEVfQUxQSEFfVE9fQ09WRVJBR0U6IC8vIEZvciB0aGlzIHB1cnBvc2UsIHRoZXkgYXJlIHRyZWF0
ZWQgaGVyZSBhcyBib29sLW5hdHVyYWwKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOgot
ICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDoK
LSAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDoKLSAgICAgIGNhc2UgR0xfQkxFTkQ6Ci0gICAgICBj
YXNlIEdMX0RJVEhFUjoKLSAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDoK
LSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwotICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NP
TE9SX1dSSVRFTUFTSzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwot
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKLSAgICAgIGNhc2UgR0xfUE9MWUdP
Tl9PRkZTRVRfVU5JVFM6Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRToKLSAg
ICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6Ci0gICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7Ci0gICAgICAgICAgICAq
bnVtUGFyYW1zID0gMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6Ci0gICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOgotICAgICAgICB7Ci0gICAgICAg
ICAgICAqdHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgot
ICAgICAgY2FzZSBHTF9CTEVORF9DT0xPUjoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUg
PSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1
cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZAotLy8g
c2Npc3NvciByZWN0YW5nbGUgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi1ib29sIENvbnRleHQ6
OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpCi17Ci0gICAgRnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAo
IWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAh
PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIC8v
IGlmIHRoZXJlIGlzIG5vIGNvbG9yIGF0dGFjaG1lbnQgd2UgbXVzdCBzeW50aGVzaXplIGEgTlVM
TCBjb2xvcmF0dGFjaG1lbnQKLSAgICAvLyB0byBrZWVwIHRoZSBEM0QgcnVudGltZSBoYXBweS4g
IFRoaXMgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGVwdGggdGV4dHVyaW5nLgotICAgIFJl
bmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gTlVMTDsKLSAgICBpZiAoZnJhbWVidWZm
ZXJPYmplY3QtPmdldENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAg
ICByZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXIo
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0ID0g
ZnJhbWVidWZmZXJPYmplY3QtPmdldE51bGxDb2xvcmJ1ZmZlcigpOwotICAgIH0KLSAgICBpZiAo
IXJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICB7Ci0gICAgICAgIEVSUigidW5hYmxlIHRvIGxvY2F0
ZSByZW5kZXJidWZmZXIgZm9yIEZCTy4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGJvb2wgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGlu
dCByZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFNlcmlhbCgpOwot
ICAgIGlmIChyZW5kZXJUYXJnZXRTZXJpYWwgIT0gbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwp
Ci0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVy
YnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJUYXJn
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVu
ZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRl
eHQgbXVzdCBiZSBsb3N0Ci0gICAgICAgIH0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFy
Z2V0KDAsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFs
ID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVl
OyAvLyBTY2lzc29yIGFyZWEgbXVzdCBiZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXpl
LS0gdGhpcyBpcyBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KLSAgICAg
ICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVs
ZWFzZSgpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgdW5zaWdu
ZWQgaW50IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOwotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIFJlbmRl
cmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIo
KTsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZGVwdGhidWZmZXItPmdldERlcHRoU3RlbmNpbCgp
OwotICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRlcHRoYnVmZmVy
U2VyaWFsID0gZGVwdGhidWZmZXItPmdldFNlcmlhbCgpOwotICAgIH0KLSAgICBlbHNlIGlmIChm
cmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAg
IHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gc3RlbmNpbGJ1
ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVk
bHkgbnVsbC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlh
bCgpOwotICAgIH0KLQotICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZERlcHRo
YnVmZmVyU2VyaWFsIHx8Ci0gICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWRT
dGVuY2lsYnVmZmVyU2VyaWFsIHx8Ci0gICAgICAgICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQp
Ci0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3Rl
bmNpbCk7Ci0gICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlclNl
cmlhbDsKLSAgICAgICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZl
clNlcmlhbDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFtUmVuZGVyVGFyZ2V0RGVzY0luaXRpYWxpemVk
IHx8IHJlbmRlclRhcmdldENoYW5nZWQpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqcmVuZGVyVGFyZ2V0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsK
LSAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAotICAgICAgICB9Ci0gICAgICAgIHJl
bmRlclRhcmdldC0+R2V0RGVzYygmbVJlbmRlclRhcmdldERlc2MpOwotICAgICAgICBtUmVuZGVy
VGFyZ2V0RGVzY0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0OwotCi0gICAgZmxvYXQg
ek5lYXIgPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7Ci0gICAgZmxvYXQgekZhciA9IGNsYW1wMDEo
bVN0YXRlLnpGYXIpOwotCi0gICAgaWYgKGlnbm9yZVZpZXdwb3J0KQotICAgIHsKLSAgICAgICAg
dmlld3BvcnQuWCA9IDA7Ci0gICAgICAgIHZpZXdwb3J0LlkgPSAwOwotICAgICAgICB2aWV3cG9y
dC5XaWR0aCA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoOwotICAgICAgICB2aWV3cG9ydC5IZWln
aHQgPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQ7Ci0gICAgICAgIHZpZXdwb3J0Lk1pblogPSAw
LjBmOwotICAgICAgICB2aWV3cG9ydC5NYXhaID0gMS4wZjsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgdmlld3BvcnQuWCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydFgsIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICB2aWV3cG9y
dC5ZID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5k
ZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICB2aWV3cG9ydC5XaWR0aCA9IGNsYW1wKG1T
dGF0ZS52aWV3cG9ydFdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERl
c2MuV2lkdGgpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmlld3BvcnQuWCkpOwotICAgICAgICB2aWV3
cG9ydC5IZWlnaHQgPSBjbGFtcChtU3RhdGUudmlld3BvcnRIZWlnaHQsIDBMLCBzdGF0aWNfY2Fz
dDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpIC0gc3RhdGljX2Nhc3Q8TE9ORz4odmll
d3BvcnQuWSkpOwotICAgICAgICB2aWV3cG9ydC5NaW5aID0gek5lYXI7Ci0gICAgICAgIHZpZXdw
b3J0Lk1heFogPSB6RmFyOwotICAgIH0KLQotICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8
IHZpZXdwb3J0LkhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8v
IE5vdGhpbmcgdG8gcmVuZGVyCi0gICAgfQotCi0gICAgaWYgKHJlbmRlclRhcmdldENoYW5nZWQg
fHwgIW1WaWV3cG9ydEluaXRpYWxpemVkIHx8IG1lbWNtcCgmdmlld3BvcnQsICZtU2V0Vmlld3Bv
cnQsIHNpemVvZiBtU2V0Vmlld3BvcnQpICE9IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5T
ZXRWaWV3cG9ydCgmdmlld3BvcnQpOwotICAgICAgICBtU2V0Vmlld3BvcnQgPSB2aWV3cG9ydDsK
LSAgICAgICAgbVZpZXdwb3J0SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBtRHhVbmlmb3Jt
c0RpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobVNjaXNzb3JTdGF0ZURpcnR5KQotICAg
IHsKLSAgICAgICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgUkVDVCByZWN0OwotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2xhbXAobVN0YXRlLnNjaXNz
b3JYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpKTsKLSAg
ICAgICAgICAgIHJlY3QudG9wID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZLCAwTCwgc3RhdGljX2Nh
c3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgICAgICByZWN0LnJp
Z2h0ID0gY2xhbXAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCwgMEwsIHN0
YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgICAgICBy
ZWN0LmJvdHRvbSA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0
LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmcmVjdCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgVFJVRSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSAmJiBtRHhVbmlmb3Jtc0RpcnR5KQotICAgIHsKLSAgICAgICAg
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7Ci0KLSAgICAgICAgR0xpbnQgaGFsZlBpeGVsU2l6ZSA9IHByb2dyYW1CaW5hcnktPmdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4w
ZiAvIHZpZXdwb3J0LldpZHRoLCAtMS4wZiAvIHZpZXdwb3J0LkhlaWdodH07Ci0gICAgICAgIHBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwotCi0gICAg
ICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgY29tcHV0aW5nIGdsX0ZyYWdDb29yZCBp
biBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKS4KLSAgICAgICAgR0xpbnQgY29vcmQgPSBwcm9ncmFt
QmluYXJ5LT5nZXREeENvb3JkTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCB3aHh5WzRdID0g
e21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4w
ZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRYICsg
bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmfTsK
LSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihjb29yZCwgMSwgd2h4eSk7Ci0K
LSAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9ncmFtQmluYXJ5LT5nZXREeERlcHRoTG9jYXRpb24o
KTsKLSAgICAgICAgR0xmbG9hdCBkelsyXSA9IHsoekZhciAtIHpOZWFyKSAvIDIuMGYsICh6TmVh
ciArIHpGYXIpIC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYo
ZGVwdGgsIDEsIGR6KTsKLQotICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCBuZWFyRmFyRGlm
ZlszXSA9IHt6TmVhciwgekZhciwgekZhciAtIHpOZWFyfTsKLSAgICAgICAgcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7Ci0gICAgICAgIG1E
eFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gQXBwbGllcyB0aGUgZml4ZWQtZnVuY3Rpb24gc3RhdGUgKGN1bGxpbmcsIGRlcHRoIHRlc3Qs
IGFscGhhIGJsZW5kaW5nLCBzdGVuY2lsaW5nLCBldGMpIHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQotdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICBQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKLSAgICBQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwot
Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0KLSAgICBHTGludCBmcm9udENDVyA9IHByb2dyYW1CaW5hcnktPmdldER4RnJvbnRDQ1dM
b2NhdGlvbigpOwotICAgIEdMaW50IGNjdyA9IChtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyk7
Ci0gICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihmcm9udENDVywgMSwgJmNjdyk7Ci0K
LSAgICBHTGludCBwb2ludHNPckxpbmVzID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhQb2ludHNPckxp
bmVzTG9jYXRpb24oKTsKLSAgICBHTGludCBhbHdheXNGcm9udCA9ICFpc1RyaWFuZ2xlTW9kZShk
cmF3TW9kZSk7Ci0gICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihwb2ludHNPckxpbmVz
LCAxLCAmYWx3YXlzRnJvbnQpOwotCi0gICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRp
ZmllciA9IG1EaXNwbGF5LT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGJvb2wgemVyb0Nv
bG9yTWFza0FsbG93ZWQgPSBpZGVudGlmaWVyLT5WZW5kb3JJZCAhPSAweDEwMDI7Ci0gICAgLy8g
QXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdoZXJlIGEgZHJhdyB3aXRoIGEg
emVybyBjb2xvcgotICAgIC8vIHdyaXRlIG1hc2sgY2FuIGNhdXNlIGxhdGVyIGRyYXdzIHRvIGhh
dmUgaW5jb3JyZWN0IHJlc3VsdHMuIEluc3RlYWQsCi0gICAgLy8gc2V0IGEgbm9uemVybyBjb2xv
ciB3cml0ZSBtYXNrIGJ1dCBtb2RpZnkgdGhlIGJsZW5kIHN0YXRlIHNvIHRoYXQgbm8KLSAgICAv
LyBkcmF3aW5nIGlzIGRvbmUuCi0gICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xl
cHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTE2OQotCi0gICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8
fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxM
TU9ERSwgZXMyZHg6OkNvbnZlcnRDdWxsTW9kZShtU3RhdGUuY3VsbE1vZGUsIG1TdGF0ZS5mcm9u
dEZhY2UpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbUN1bGxTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKG1EZXB0aFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLmRlcHRo
VGVzdCkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRlVOQywgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5kZXB0aEZ1
bmMpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIXplcm9Db2xvck1hc2tBbGxvd2VkICYmIChtTWFza1N0YXRlRGlydHkgfHwgbUJsZW5kU3Rh
dGVEaXJ0eSkpCi0gICAgewotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICAg
ICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobUJsZW5kU3RhdGVE
aXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuYmxlbmQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRS
VUUpOwotCi0gICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNU
QU5UX0FMUEhBICYmIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEEgJiYKLSAgICAgICAgICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NP
TlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNU
QU5UX0FMUEhBKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBlczJkeDo6Q29udmVydENvbG9yKG1TdGF0ZS5i
bGVuZENvbG9yKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRG
QUNUT1IsIEQzRENPTE9SX1JHQkEodW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5vcm08OD4obVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEpKSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJk
eDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRSR0IpKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgZXMyZHg6OkNvbnZlcnRC
bGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVuZFJHQikpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5i
bGVuZEVxdWF0aW9uUkdCKSk7Ci0KLSAgICAgICAgICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRS
R0IgIT0gbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgfHwgCi0gICAgICAgICAgICAgICAgbVN0YXRl
LmRlc3RCbGVuZFJHQiAhPSBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgfHwgCi0gICAgICAgICAgICAg
ICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgIT0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotCi0gICAgICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkRBTFBIQSwgZXMyZHg6OkNvbnZl
cnRCbGVuZEZ1bmMobVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEpKTsKLSAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVNUQkxFTkRBTFBIQSwgZXMyZHg6OkNvbnZl
cnRCbGVuZEZ1bmMobVN0YXRlLmRlc3RCbGVuZEFscGhhKSk7Ci0gICAgICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhBLCBlczJkeDo6Q29udmVydEJs
ZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQotICAgIHsKLSAg
ICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+aGFzU3Rl
bmNpbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOwotCi0gICAgICAgICAgICAv
LyBGSVhNRTogVW5zdXBwb3J0ZWQgYnkgRDNEOQotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVS
U1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMUkVGID0gRDNEUlNfU1RFTkNJTFJFRjsKLSAgICAg
ICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTE1BU0sgPSBE
M0RSU19TVEVOQ0lMTUFTSzsKLSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBE
M0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSyA9IEQzRFJTX1NURU5DSUxXUklURU1BU0s7Ci0gICAg
ICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgIT0gbVN0YXRlLnN0ZW5jaWxCYWNr
V3JpdGVtYXNrIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IG1TdGF0
ZS5zdGVuY2lsQmFja1JlZiB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sg
IT0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzaykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBFUlIoIlNlcGFyYXRlIGZyb250L2JhY2sgc3RlbmNpbCB3cml0ZW1hc2tzLCByZWZlcmVuY2Ug
dmFsdWVzLCBvciBzdGVuY2lsIG1hc2sgdmFsdWVzIGFyZSBpbnZhbGlkIHVuZGVyIFdlYkdMLiIp
OwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgbWF4aW11bSBzaXplIG9mIHRo
ZSBzdGVuY2lsIHJlZgotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZl
ciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgICAgICBH
THVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCkp
IC0gMTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250
RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5D
SUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RF
TkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxGdW5j
KSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZh
Y2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVGLCAo
bVN0YXRlLnN0ZW5jaWxSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3RhdGUuc3RlbmNpbFJl
ZiA6IG1heFN0ZW5jaWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0
YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMTUFTSyA6IEQzRFJTX0NDV19T
VEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxNYXNrKTsKLQotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lM
RkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsRmFpbCkpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBH
TF9DQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTFpGQUlMLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxQQVNT
IDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNz
KSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZh
Y2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxX
UklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RF
TkNJTEZVTkMgOiBEM0RSU19DQ1dfU1RFTkNJTEZVTkMsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLnN0ZW5jaWxCYWNr
RnVuYykpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJv
bnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0NDV19TVEVOQ0lMUkVG
LCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0
ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBE
M0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5zdGVuY2lsQmFja01hc2spOwotCi0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8g
RDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RFTkNJTEZBSUwsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3Rh
dGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NU
RU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpD
b252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwpKTsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cg
PyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lMUEFTUywgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5z
dGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9
IGZhbHNlOwotICAgICAgICBtRnJvbnRGYWNlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobU1hc2tTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaW50IGNvbG9yTWFzayA9IGVzMmR4
OjpDb252ZXJ0Q29sb3JNYXNrKG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tH
cmVlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
U3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFza0FscGhhKTsKLSAgICAgICAgaWYg
KGNvbG9yTWFzayA9PSAwICYmICF6ZXJvQ29sb3JNYXNrQWxsb3dlZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90
aGluZyB3aWxsIGJlIGRyYXduLgotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTik7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBU
UlVFKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxF
TkQsIEQzREJMRU5EX1pFUk8pOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfREVTVEJMRU5ELCBEM0RCTEVORF9PTkUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUCwgRDNEQkxFTkRPUF9BREQpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgY29sb3JNYXNrKTsKLSAgICAgICAgfQotICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0
aE1hc2sgPyBUUlVFIDogRkFMU0UpOwotCi0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChtUG9seWdvbk9mZnNldFN0YXRlRGlydHkpCi0gICAgewotICAg
ICAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRE
ZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NB
TEVERVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsKLSAg
ICAgICAgICAgICAgICBmbG9hdCBkZXB0aEJpYXMgPSBsZGV4cChtU3RhdGUucG9seWdvbk9mZnNl
dFVuaXRzLCAtKGludCkoZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpKSk7Ci0gICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAqKChEV09SRCop
JmRlcHRoQmlhcykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVT
Q0FMRURFUFRIQklBUywgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19ERVBUSEJJQVMsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgbVBvbHlnb25PZmZzZXRT
dGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1TYW1wbGVTdGF0ZURpcnR5KQot
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBs
ZW1lbnRlZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgaWYgKG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2sg
PSAwOwotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNob2xkID0gMC41ZjsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVidWZmZXJPYmplY3QtPmdl
dFNhbXBsZXMoKTsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
bWFzayA8PD0gMTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZVZhbHVlID49IHRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkICs9IDEuMGY7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtYXNrIHw9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bWFzayA9IH5tYXNrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1TYW1wbGVTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1EaXRoZXJTdGF0
ZURpcnR5KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRElU
SEVSRU5BQkxFLCBtU3RhdGUuZGl0aGVyID8gVFJVRSA6IEZBTFNFKTsKLQotICAgICAgICBtRGl0
aGVyU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnRleHQ6OmFwcGx5
VmVydGV4QnVmZmVyKEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cywgR0xzaXplaSAqcmVwZWF0RHJhdykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJp
YnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0
YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5z
dGFuY2VzKTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBw
bHlEZWNsYXJhdGlvbihtRGV2aWNlLCBhdHRyaWJ1dGVzLCBnZXRDdXJyZW50UHJvZ3JhbSgpLCBp
bnN0YW5jZXMsIHJlcGVhdERyYXcpOwotfQotCi0vLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBl
bGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotR0xlbnVtIENv
bnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4
SW5mbykKLXsKLSAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJbmRl
eERhdGEodHlwZSwgY291bnQsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGlj
ZXMsIGluZGV4SW5mbyk7Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJTZXJpYWwpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMoaW5kZXhJbmZvLT5pbmRleEJ1ZmZl
cik7Ci0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyBBcHBsaWVzIHRoZSBz
aGFkZXJzIGFuZCBzaGFkZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9p
ZCBDb250ZXh0OjphcHBseVNoYWRlcnMoKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBpZiAocHJvZ3JhbU9i
amVjdC0+Z2V0U2VyaWFsKCkgIT0gbUFwcGxpZWRQcm9ncmFtU2VyaWFsKQotICAgIHsKLSAgICAg
ICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0VmVydGV4U2hhZGVyKCk7Ci0gICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxT
aGFkZXIgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbFNoYWRlcigpOwotCi0gICAgICAgIG1EZXZp
Y2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVy
dGV4U2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxs
VW5pZm9ybXMoKTsKLSAgICAgICAgbUFwcGxpZWRQcm9ncmFtU2VyaWFsID0gcHJvZ3JhbU9iamVj
dC0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3Jt
cygpOwotfQotCi0vLyBBcHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8g
dGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQotewot
ICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7Ci0KLSAgICBpZiAobVN1cHBvcnRzVmVy
dGV4VGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9WRVJURVgp
OwotICAgIH0KLX0KLQotLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9mIGVpdGhlciB0
aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLAotLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcg
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0eXBlLAotLy8gYW5kIHNldHMg
dGhlIHRleHR1cmUgYW5kIGl0cyBhZGRyZXNzaW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3
aGVuIGluYWN0aXZlKS4KLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0
eXBlKQotewotICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgp
OwotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBpbnQgc2FtcGxlckNvdW50ID0gKHR5cGUgPT0gU0FNUExF
Ul9QSVhFTCkgPyBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA6IE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEY7ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0QgOSBzYW1wbGVycyBvZiBnaXZl
biBzYW1wbGVyIHR5cGUKLSAgICB1bnNpZ25lZCBpbnQgKmFwcGxpZWRUZXh0dXJlU2VyaWFsID0g
KHR5cGUgPT0gU0FNUExFUl9QSVhFTCkgPyBtQXBwbGllZFRleHR1cmVTZXJpYWxQUyA6IG1BcHBs
aWVkVGV4dHVyZVNlcmlhbFZTOwotICAgIGludCBkM2RTYW1wbGVyT2Zmc2V0ID0gKHR5cGUgPT0g
U0FNUExFUl9QSVhFTCkgPyAwIDogRDNEVkVSVEVYVEVYVFVSRVNBTVBMRVIwOwotICAgIGludCBz
YW1wbGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOwot
Ci0gICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxlclJh
bmdlOyBzYW1wbGVySW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9IHBy
b2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAgLy8g
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotICAgICAgICBpbnQgZDNkU2FtcGxlciA9
IHNhbXBsZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQ7Ci0KLSAgICAgICAgaWYgKHRleHR1cmVV
bml0ICE9IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlw
ZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5k
ZXgpOwotCi0gICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUo
dGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB0ZXhT
ZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7Ci0KLSAgICAgICAgICAgIGlmIChh
cHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJl
LT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZDNkVGV4
dHVyZSA9IHRleHR1cmUtPmdldFRleHR1cmUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChkM2RU
ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxp
ZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRleHR1cmUtPmhh
c0RpcnR5UGFyYW1ldGVycygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gd3JhcFMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBtaW5GaWx0ZXIgPSB0ZXh0dXJlLT5nZXRNaW5GaWx0
ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBtYWdGaWx0ZXIgPSB0ZXh0dXJl
LT5nZXRNYWdGaWx0ZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0
U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1UsIGVzMmR4OjpDb252ZXJ0
VGV4dHVyZVdyYXAod3JhcFMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVy
dFRleHR1cmVXcmFwKHdyYXBUKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BR0ZJTFRFUiwgZXMyZHg6OkNv
bnZlcnRNYWdGaWx0ZXIobWFnRmlsdGVyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEM0RU
RVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZpbHRlcjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0TWluRmlsdGVyKG1pbkZpbHRlciwgJmQzZE1pbkZp
bHRlciwgJmQzZE1pcEZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1pbkZpbHRl
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNk
U2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxb
c2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+
U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBkM2RUZXh0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIs
IGdldEluY29tcGxldGVUZXh0dXJlKHRleHR1cmVUeXBlKS0+Z2V0VGV4dHVyZSgpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdID0gdGV4U2VyaWFsOwotICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGly
dHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RT
YW1wbGVyLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZv
ciAoaW50IHNhbXBsZXJJbmRleCA9IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4IDwgc2FtcGxl
ckNvdW50OyBzYW1wbGVySW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmIChhcHBsaWVkVGV4dHVy
ZVNlcmlhbFtzYW1wbGVySW5kZXhdICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFRleHR1cmUoc2FtcGxlckluZGV4ICsgZDNkU2FtcGxlck9mZnNldCwgTlVMTCk7Ci0g
ICAgICAgICAgICBhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1wbGVySW5kZXhdID0gMDsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBw
aXhlbHMpCi17Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVm
ZmVyKCk7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVm
ZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQot
ICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwgdHlw
ZSwgbVN0YXRlLnBhY2tBbGlnbm1lbnQpOwotICAgIC8vIHNpemVkIHF1ZXJ5IHNhbml0eSBjaGVj
awotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91
dHB1dFBpdGNoICogaGVpZ2h0OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFy
Z2V0ID0gZnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotICAgIGlmICghcmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0LCBy
ZXR1cm4gc2lsZW50bHkKLSAgICB9Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKLSAgICBy
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOwotCi0gICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVU
eXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCi0gICAgewotICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBu
b24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0K
LSAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFj
ZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFnZXRQYWNrUmV2ZXJzZVJvd09y
ZGVyKCkgJiYgZ2V0UGFja0FsaWdubWVudCgpIDw9IDQgJiYgbURpc3BsYXktPmlzRDNkOUV4RGV2
aWNlKCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PSAwICYmIHkgPT0gMCAmJiBV
SU5UKHdpZHRoKSA9PSBkZXNjLldpZHRoICYmIFVJTlQoaGVpZ2h0KSA9PSBkZXNjLkhlaWdodCAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4
QjggJiYgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmIHR5cGUgPT0gR0xfVU5TSUdORURfQllURTsK
LSAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCi0gICAgewotICAgICAgICAvLyBVc2UgdGhlIHBpeGVs
cyBwdHIgYXMgYSBzaGFyZWQgaGFuZGxlIHRvIHdyaXRlIGRpcmVjdGx5IGludG8gY2xpZW50J3Mg
bWVtb3J5Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3Vy
ZmFjZShkZXNjLldpZHRoLCBkZXNjLkhlaWdodCwgZGVzYy5Gb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1F
TSwgJnN5c3RlbVN1cmZhY2UsICZwaXhlbHMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRob3V0IHRoZSBzaGFyZWQg
aGFuZGxlCi0gICAgICAgICAgICBkaXJlY3RUb1BpeGVscyA9IGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKCFkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9
IG1EZXZpY2UtPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZShkZXNjLldpZHRoLCBkZXNjLkhl
aWdodCwgZGVzYy5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJnN5c3RlbVN1cmZhY2UsIE5VTEwp
OwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXN1bHQgPSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwg
c3lzdGVtU3VyZmFjZSk7Ci0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgcmVuZGVy
VGFyZ2V0ID0gTlVMTDsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICAvLyBJdCB0dXJucyBvdXQgdGhh
dCBEM0Qgd2lsbCBzb21ldGltZXMgcHJvZHVjZSBtb3JlIGVycm9yCi0gICAgICAgIC8vIGNvZGVz
IHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4KLSAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1
bHQpKQotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIGlmIChkaXJlY3RUb1BpeGVscykK
LSAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFJFQ1QgcmVjdDsKLSAgICByZWN0LmxlZnQgPSBjbGFtcCh4LCAwTCwg
c3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwotICAgIHJlY3QudG9wID0gY2xhbXAoeSwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuSGVpZ2h0KSk7Ci0gICAgcmVjdC5yaWdodCA9IGNs
YW1wKHggKyB3aWR0aCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRlc2MuV2lkdGgpKTsKLSAgICBy
ZWN0LmJvdHRvbSA9IGNsYW1wKHkgKyBoZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNj
LkhlaWdodCkpOwotCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKLSAgICByZXN1bHQgPSBzeXN0
ZW1TdXJmYWNlLT5Mb2NrUmVjdCgmbG9jaywgJnJlY3QsIEQzRExPQ0tfUkVBRE9OTFkpOwotCi0g
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybjsgICAvLyBO
byBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0
MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKLQotICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZTsKLSAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAoZ2V0UGFja1JldmVyc2VSb3dPcmRlcigp
KQotICAgIHsKLSAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSAr
IGxvY2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwotICAgICAgICBpbnB1
dFBpdGNoID0gLWxvY2suUGl0Y2g7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9ICh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzOwotICAgICAgICBpbnB1dFBpdGNoID0g
bG9jay5QaXRjaDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90dG9t
IC0gcmVjdC50b3A7IGorKykKLSAgICB7Ci0gICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RG
TVRfQThSOEc4QjggJiYKLSAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgotICAg
ICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBGYXN0IHBhdGggZm9yIEVYVF9yZWFkX2Zvcm1hdF9iZ3JhLCBnaXZlbgotICAgICAgICAg
ICAgLy8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubwot
ICAgICAgICAgICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93LgotICAg
ICAgICAgICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAg
ICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgKHJlY3Qucmln
aHQgLSByZWN0LmxlZnQpICogNCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQgZzsK
LSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAgICAg
ICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBq
ICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAg
ICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOwotICAg
ICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAq
IGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYg
MHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAw
eDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2Ig
JiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFy
Z2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9
ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYw
MDAwMDApOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgx
LjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAw
MEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChh
cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhS
OEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRj
aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAg
IGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAg
ICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDAp
OwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8g
MHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQq
KShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAg
ICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZG
KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAv
IDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAw
KSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBE
M0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAg
ICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1
dFBpdGNoKSArIDApOwotICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3VyY2Ug
KyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9
ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAg
ICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1
dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9y
ZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBhYmdyWzRdOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhGbG9hdDE2VG8z
MkFycmF5KGFiZ3IsIChEM0RYRkxPQVQxNiopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0
Y2gpLCA0KTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gYWJnclszXTsKLSAgICAgICAgICAg
ICAgICAgICAgYiA9IGFiZ3JbMl07Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBhYmdyWzFdOwot
ICAgICAgICAgICAgICAgICAgICByID0gYWJnclswXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIp
KDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBv
dXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2ln
bmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICog
aSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVm
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZf
RVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wg
c3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAg
ICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDgg
ICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8
ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAg
ICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBC
R1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBm
b3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBz
aXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8PCAw
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgICAgICAgICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhl
bCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBp
cyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAg
MTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAy
ICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAg
IHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAotICAg
ICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBv
bmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAgICAgIGRl
c3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwg
MTUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciAr
IDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9S
R0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEUKLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBz
aXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNp
Z25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAg
ICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAg
ICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwotCi0gICAgc3lz
dGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotfQotCi12b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0Zmll
bGQgbWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3
RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZm
ZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
KTsKLSAgICB9Ci0KLSAgICBEV09SRCBmbGFncyA9IDA7Ci0KLSAgICBpZiAobWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZGRVJf
QklUOwotCi0gICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJf
VEFSR0VUOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZG
RVJfQklUKQotICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfREVQVEhfQlVGRkVSX0JJVDsKLSAg
ICAgICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRo
YnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsYWdzIHw9
IEQzRENMRUFSX1pCVUZGRVI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTHVpbnQgc3RlbmNp
bFVubWFza2VkID0gMHgwOwotCi0gICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
Ci0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgICAg
IGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05F
KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2ls
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2ls
KCk7Ci0gICAgICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgICAgICAgICAgZGVwdGhTdGVu
Y2lsLT5HZXREZXNjKCZkZXNjKTsKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgp
OwotCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBkeDJlczo6R2V0U3Rl
bmNpbFNpemUoZGVzYy5Gb3JtYXQpOwotICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4
MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwotCi0gICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2Vk
ICE9IDB4MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVB
Ul9TVEVOQ0lMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1h
c2sgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KHRydWUpKSAgIC8vIENsaXBzIHRo
ZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKLSAg
ICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEM0RDT0xPUiBjb2xvciA9IEQzRENP
TE9SX0FSR0IodW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSksIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZh
bHVlLnJlZCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4Piht
U3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSkpOwotICAgIGZs
b2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBpbnQgc3Rl
bmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7Ci0KLSAgICBib29s
IGFscGhhVW5tYXNrZWQgPSAoZHgyZXM6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5G
b3JtYXQpID09IDApIHx8IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKLQotICAgIGNvbnN0IGJvb2wg
bmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1NURU5DSUwpICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0gICAgY29uc3Qg
Ym9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShtU3RhdGUuY29sb3JNYXNr
UmVkICYmIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQpOwot
Ci0gICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIp
Ci0gICAgewotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIGFsbCBwYXRocyBm
cm9tIHRoaXMgcG9pbnQgdG8gdGhlIGNsZWFyIGNhbGwgaXMgc2F2ZWQuCi0gICAgICAgIC8vIFN0
YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gb25seSBzb21lIHBhdGhzIHdpbGwgYmUgZmxhZ2dlZCBk
aXJ0eSBpbiB0aGUgY2FzZSB0aGF0Ci0gICAgICAgIC8vICB0aGF0IHBhdGggaXMgdGFrZW4uCi0g
ICAgICAgIEhSRVNVTFQgaHI7Ci0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID09
IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0gbURldmljZS0+QmVnaW5TdGF0ZUJs
b2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZ
Uyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBG
QUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9E
RSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAw
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVF
TkFCTEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIo
TlVMTCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0gICAg
ICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBOVUxMLCAwLCAwKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVO
REVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0
ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNEVEFfVEZB
Q1RPUik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RU
U1NfQUxQSEFPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19URVhUVVJFRkFDVE9SLCBj
b2xvcik7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNB
TVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IoaW50
IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhy
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCk7
Ci0KLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaHIgPSBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5DYXB0dXJlKCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNE
RklMTF9TT0xJRCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhB
VEVTVEVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgRDNE
Q0xFQVJfVEFSR0VUKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBlczJkeDo6Q29udmVydENvbG9yTWFzayhtU3Rh
dGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIG1TdGF0ZS5jb2xvck1hc2tC
bHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9S
V1JJVEVFTkFCTEUsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tl
ZCAhPSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVO
Q0lMTU9ERSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfU1RFTkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFJFRiwgc3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3RlbmNp
bFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFpGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUEFTUywg
RDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICBt
RGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldEZWRihE
M0RGVkZfWFlaUkhXKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQ
QVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVy
ZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAgICAg
ICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNE
VEFfVEZBQ1RPUik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQz
RFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19URVhUVVJFRkFDVE9SLCBjb2xvcik7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywg
MHhGRkZGRkZGRik7Ci0KLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRU
UklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3Vy
Y2VGcmVxKGksIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcXVhZFs0XVs0XTsgICAv
LyBBIHF1YWRyaWxhdGVyYWwgY292ZXJpbmcgdGhlIHRhcmdldCwgYWxpZ25lZCB0byBtYXRjaCB0
aGUgZWRnZXMKLSAgICAgICAgcXVhZFswXVswXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzBdWzFd
ID0gbVJlbmRlclRhcmdldERlc2MuSGVpZ2h0IC0gMC41ZjsKLSAgICAgICAgcXVhZFswXVsyXSA9
IDAuMGY7Ci0gICAgICAgIHF1YWRbMF1bM10gPSAxLjBmOwotCi0gICAgICAgIHF1YWRbMV1bMF0g
PSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbMV1bMV0gPSBt
UmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOwotICAgICAgICBxdWFkWzFdWzJdID0gMC4w
ZjsKLSAgICAgICAgcXVhZFsxXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVhZFsyXVswXSA9IC0w
LjVmOwotICAgICAgICBxdWFkWzJdWzFdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMl1bMl0gPSAw
LjBmOwotICAgICAgICBxdWFkWzJdWzNdID0gMS4wZjsKLQotICAgICAgICBxdWFkWzNdWzBdID0g
bVJlbmRlclRhcmdldERlc2MuV2lkdGggLSAwLjVmOwotICAgICAgICBxdWFkWzNdWzFdID0gLTAu
NWY7Ci0gICAgICAgIHF1YWRbM11bMl0gPSAwLjBmOwotICAgICAgICBxdWFkWzNdWzNdID0gMS4w
ZjsKLQotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAgICBtRGV2aWNlLT5E
cmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMiwgcXVhZCwgc2l6ZW9mKGZsb2F0
WzRdKSk7Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xFQVJfWkJVRkZFUikKLSAgICAgICAg
ewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJV
RSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFC
TEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJf
WkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZSBpZiAoZmxhZ3MpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBm
bGFncywgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6
ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAg
ICBEM0RQUklNSVRJVkVUWVBFIHByaW1pdGl2ZVR5cGU7Ci0gICAgaW50IHByaW1pdGl2ZUNvdW50
OwotCi0gICAgaWYoIWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCwgJnBy
aW1pdGl2ZVR5cGUsICZwcmltaXRpdmVDb3VudCkpCi0gICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotCi0gICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDApCi0gICAgewotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkp
Ci0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwbHlTdGF0ZShtb2RlKTsK
LQotICAgIEdMc2l6ZWkgcmVwZWF0RHJhdyA9IDE7Ci0gICAgR0xlbnVtIGVyciA9IGFwcGx5VmVy
dGV4QnVmZmVyKGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7Ci0gICAgaWYg
KGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwot
ICAgIH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVyZXMoKTsKLQotICAg
IGlmICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNh
bXBsZXJzKE5VTEwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCi0gICAgewot
ICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1v
ZGUgPT0gR0xfTElORV9MT09QKQotICAgICAgICB7Ci0gICAgICAgICAgICBkcmF3TGluZUxvb3Ao
Y291bnQsIEdMX05PTkUsIE5VTEwsIDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlu
c3RhbmNlcyA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0YXRpY0luZGV4QnVmZmVyICpj
b3VudGluZ0lCID0gbUluZGV4RGF0YU1hbmFnZXItPmdldENvdW50aW5nSW5kaWNlcyhjb3VudCk7
Ci0gICAgICAgICAgICBpZiAoY291bnRpbmdJQikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMo
Y291bnRpbmdJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBtQXBwbGllZElC
U2VyaWFsID0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFBy
aW1pdGl2ZShwcmltaXRpdmVUeXBlLCAwLCAwLCBjb3VudCwgMCwgcHJpbWl0aXZlQ291bnQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBjb3VudGlu
ZyBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5c0luc3RhbmNlZC4iKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSAgIC8vIFJlZ3VsYXIgY2FzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2ZUNv
dW50KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9n
cmFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
IH0KLQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKLSAgICBpbnQgcHJpbWl0
aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNv
dW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0
KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhcHBseVN0YXRl
KG1vZGUpOwotCi0gICAgVHJhbnNsYXRlZEluZGV4RGF0YSBpbmRleEluZm87Ci0gICAgR0xlbnVt
IGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291bnQsIG1vZGUsIHR5cGUsICZpbmRl
eEluZm8pOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJ
bmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsKLSAgICBHTHNpemVpIHJlcGVh
dERyYXcgPSAxOwotICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mby5taW5JbmRl
eCwgdmVydGV4Q291bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOwotICAgIGlmIChlcnIgIT0g
R0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0K
LSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7Ci0KLSAgICBpZiAoIWdl
dEN1cnJlbnRQcm9ncmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1wbGVycyhm
YWxzZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgIH0KLQotICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKLSAgICB7Ci0gICAgICAg
IG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0KLSAgICAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9M
T09QKQotICAgICAgICB7Ci0gICAgICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIHR5cGUsIGlu
ZGljZXMsIGluZGV4SW5mby5taW5JbmRleCk7ICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFBy
aW1pdGl2ZShwcmltaXRpdmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5m
by5taW5JbmRleCwgdmVydGV4Q291bnQsIGluZGV4SW5mby5zdGFydEluZGV4LCBwcmltaXRpdmVD
b3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIEltcGxlbWVu
dHMgZ2xGbHVzaCB3aGVuIGJsb2NrIGlzIGZhbHNlLCBnbEZpbmlzaCB3aGVuIGJsb2NrIGlzIHRy
dWUKLXZvaWQgQ29udGV4dDo6c3luYyhib29sIGJsb2NrKQotewotICAgIG1EaXNwbGF5LT5zeW5j
KGJsb2NrKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4KQotewotICAg
IC8vIEdldCB0aGUgcmF3IGluZGljZXMgZm9yIGFuIGluZGV4ZWQgZHJhdwotICAgIGlmICh0eXBl
ICE9IEdMX05PTkUgJiYgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSkKLSAgICB7Ci0g
ICAgICAgIEJ1ZmZlciAqaW5kZXhCdWZmZXIgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdl
dCgpOwotICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
PihpbmRpY2VzKTsKLSAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUq
PihpbmRleEJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBVSU5UIHN0YXJ0
SW5kZXggPSAwOwotICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoc3VwcG9y
dHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9
IChjb3VudCArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0KLSAgICAgICAgaWYgKCFtTGlu
ZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUIgPSBuZXcgU3RyZWFt
aW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1U
X0lOREVYMzIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1MaW5lTG9vcElCKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQi0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBH
TF9VTlNJR05FRF9JTlQpOwotCi0gICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtTGlu
ZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFydElu
ZGV4ID0gb2Zmc2V0IC8gNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBk
cmF3Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3Vu
dF0gPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ld
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRd
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVp
bnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBd
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbUxp
bmVMb29wSUItPnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBj
b25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBzaG9y
dCk7Ci0KLSAgICAgICAgaWYgKCFtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAg
bUxpbmVMb29wSUIgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9J
TkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMTYpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQi0+cmVz
ZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9TSE9SVCk7Ci0KLSAgICAgICAgICAg
IFVJTlQgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihtTGluZUxvb3BJQi0+bWFwKHNwYWNlTmVlZGVkLCAm
b2Zmc2V0KSk7Ci0gICAgICAgICAgICBzdGFydEluZGV4ID0gb2Zmc2V0IC8gMjsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfTk9ORTogICAvLyBOb24taW5kZXhlZCBkcmF3Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSAwOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4o
aW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgbUxpbmVMb29wSUItPnVubWFwKCk7Ci0gICAgICAg
ICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBpZiAoc3VjY2VlZGVkKQotICAgIHsKLSAgICAgICAgaWYgKG1BcHBsaWVk
SUJTZXJpYWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKG1MaW5lTG9vcElCLT5nZXRCdWZmZXIoKSk7Ci0gICAg
ICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElO
RVNUUklQLCAtbWluSW5kZXgsIG1pbkluZGV4LCBjb3VudCwgc3RhcnRJbmRleCwgY291bnQpOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSBs
b29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLiIpOwotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlY29y
ZEludmFsaWRFbnVtKCkKLXsKLSAgICBtSW52YWxpZEVudW0gPSB0cnVlOwotfQotCi12b2lkIENv
bnRleHQ6OnJlY29yZEludmFsaWRWYWx1ZSgpCi17Ci0gICAgbUludmFsaWRWYWx1ZSA9IHRydWU7
Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpCi17Ci0gICAgbUlu
dmFsaWRPcGVyYXRpb24gPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZE91dE9mTWVt
b3J5KCkKLXsKLSAgICBtT3V0T2ZNZW1vcnkgPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJl
Y29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpCi17Ci0gICAgbUludmFsaWRGcmFtZWJ1
ZmZlck9wZXJhdGlvbiA9IHRydWU7Ci19Ci0KLS8vIEdldCBvbmUgb2YgdGhlIHJlY29yZGVkIGVy
cm9ycyBhbmQgY2xlYXIgaXRzIGZsYWcsIGlmIGFueS4KLS8vIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDIuNSBwYWdlIDEzLgotR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkKLXsKLSAgICBp
ZiAobUludmFsaWRFbnVtKQotICAgIHsKLSAgICAgICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0K
LSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRU5VTTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFs
aWRWYWx1ZSkKLSAgICB7Ci0gICAgICAgIG1JbnZhbGlkVmFsdWUgPSBmYWxzZTsKLQotICAgICAg
ICByZXR1cm4gR0xfSU5WQUxJRF9WQUxVRTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRPcGVy
YXRpb24pCi0gICAgewotICAgICAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAobU91dE9m
TWVtb3J5KQotICAgIHsKLSAgICAgICAgbU91dE9mTWVtb3J5ID0gZmFsc2U7Ci0KLSAgICAgICAg
cmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkRnJhbWVi
dWZmZXJPcGVyYXRpb24pCi0gICAgewotICAgICAgICBtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0
aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OOwotICAgIH0KLQotICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotR0xlbnVtIENv
bnRleHQ6OmdldFJlc2V0U3RhdHVzKCkKLXsKLSAgICBpZiAobVJlc2V0U3RhdHVzID09IEdMX05P
X0VSUk9SKQotICAgIHsKLSAgICAgICAgYm9vbCBsb3N0ID0gbURpc3BsYXktPnRlc3REZXZpY2VM
b3N0KCk7Ci0KLSAgICAgICAgaWYgKGxvc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaXNw
bGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7ICAgLy8gU2V0cyBtUmVzZXRTdGF0dXMKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdMZW51bSBzdGF0dXMgPSBtUmVzZXRTdGF0dXM7Ci0KLSAgICBpZiAo
bVJlc2V0U3RhdHVzICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgaWYgKG1EaXNwbGF5
LT50ZXN0RGV2aWNlUmVzZXR0YWJsZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtUmVzZXRT
dGF0dXMgPSBHTF9OT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
c3RhdHVzOwotfQotCi1ib29sIENvbnRleHQ6OmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkK
LXsKLSAgICByZXR1cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNF
VF9FWFQpOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzOwotfQotCi1pbnQgQ29udGV4dDo6
Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRz
U2hhZGVyTW9kZWwzID8gTUFYX1ZBUllJTkdfVkVDVE9SU19TTTMgOiBNQVhfVkFSWUlOR19WRUNU
T1JTX1NNMjsKLX0KLQotdW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1WZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1ZlcnRleFRleHR1
cmUgPyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGIDogMDsKLX0KLQotdW5zaWdu
ZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBnZXRNYXhpbXVtVmVy
dGV4VGV4dHVyZUltYWdlVW5pdHMoKTsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1GcmFn
bWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzU2hhZGVy
TW9kZWwzID8gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTMgOiBNQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTX1NNMjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNh
bXBsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKLX0KLQot
aW50IENvbnRleHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQs
IGludCByZXF1ZXN0ZWQpIGNvbnN0Ci17Ci0gICAgaWYgKHJlcXVlc3RlZCA9PSAwKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKLSAgICB9Ci0KLSAgICBzdGQ6Om1hcDxEM0RGT1JN
QVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmlu
ZChmb3JtYXQpOwotICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gcmVxdWVz
dGVkOyBpIDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7ICsraSkKLSAgICB7Ci0gICAgICAg
IGlmIChpdHItPnNlY29uZFtpXSAmJiBpICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiAtMTsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0V2ZW50UXVlcmllczsKLX0KLQotYm9vbCBDb250
ZXh0OjpzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3Vw
cG9ydHNPY2NsdXNpb25RdWVyaWVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUMVRl
eHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUMVRleHR1cmVzOwotfQot
Ci1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhUM1RleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN1cHBvcnRzRFhUM1RleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRFhU
NVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRFhUNVRleHR1cmVzOwot
fQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXI7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMy
UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQz
MlJlbmRlcmFibGVUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZU
ZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsK
LX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOwotfQotCi1ib29sIENv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7Ci19Ci0KLWludCBDb250
ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFRleHR1cmVEaW1l
bnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdAotewotICAgIHJldHVybiBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci19Ci0KLWlu
dCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bU1heFRleHR1cmVMZXZlbDsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRl
eHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKLX0KLQot
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzMzJi
aXRJbmRpY2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwot
fQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
c3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzSW5zdGFu
Y2luZzsKLX0KLQotdm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikKLXsK
LSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFnZSAyMjoKLSAgICAvLyBJ
ZiBhIGJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRp
bmdzIHRvIHRoYXQgb2JqZWN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQKLSAgICAvLyAoaS5lLiBp
biB0aGUgdGhyZWFkIHRoYXQgY2FsbGVkIERlbGV0ZS1CdWZmZXJzKSBhcmUgcmVzZXQgdG8gemVy
by4KLQotICAgIGlmIChtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgewot
ICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlmICht
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQotICAgIHsKLSAgICAgICAg
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgZm9yIChp
bnQgYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1
dGUrKykKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0
ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZXRhY2hUZXh0dXJlKEdMdWlu
dCB0ZXh0dXJlKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOCBwYWdl
IDg0OgotICAgIC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCwgaXQgaXMgYXMgaWYg
YWxsIHRleHR1cmUgdW5pdHMgd2hpY2ggYXJlIGJvdW5kIHRvIHRoYXQgdGV4dHVyZSBvYmplY3Qg
YXJlCi0gICAgLy8gcmVib3VuZCB0byB0ZXh0dXJlIG9iamVjdCB6ZXJvCi0KLSAgICBmb3IgKGlu
dCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVfVFlQRV9DT1VOVDsgdHlwZSsrKQotICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpID09IHRleHR1cmUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdLnNldChOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMjoKLSAgICAvLyBJ
ZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVk
IHRvIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsIHRoZW4gaXQgaXMKLSAgICAvLyBh
cyBpZiBGcmFtZWJ1ZmZlclRleHR1cmUyRCBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0dXJl
IG9mIDAsIGZvciBlYWNoIGF0dGFjaG1lbnQgcG9pbnQgdG8gd2hpY2ggdGhpcwotICAgIC8vIGlt
YWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgotCi0g
ICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwot
ICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsK
LQotICAgIGlmIChyZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICByZWFkRnJhbWVidWZm
ZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdGcmFtZWJ1
ZmZlciAmJiBkcmF3RnJhbWVidWZmZXIgIT0gcmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAg
ICAgZHJhd0ZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0g
ICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3OgotICAgIC8vIElm
IGEgZnJhbWVidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gdGhlIHRhcmdldCBGUkFN
RUJVRkZFUiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2gKLSAgICAvLyBCaW5kRnJhbWVidWZm
ZXIgaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBm
cmFtZWJ1ZmZlciBvZiB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPT0g
ZnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwotICAg
IH0KLQotICAgIGlmIChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQotICAg
IHsKLSAgICAgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgLy8g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA5OgotICAgIC8vIElmIGEgcmVu
ZGVyYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBpcyBkZWxl
dGVkLCBpdCBpcyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcgotICAgIC8vIGhhZCBiZWVuIGV4
ZWN1dGVkIHdpdGggdGhlIHRhcmdldCBSRU5ERVJCVUZGRVIgYW5kIG5hbWUgb2YgemVyby4KLQot
ICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyKQotICAgIHsK
LSAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKLSAgICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTE6Ci0gICAgLy8gSWYgYSByZW5kZXJidWZmZXIg
b2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRoZSBjdXJy
ZW50bHkgYm91bmQgZnJhbWVidWZmZXIsCi0gICAgLy8gdGhlbiBpdCBpcyBhcyBpZiBGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSByZW5kZXJidWZmZXIgb2Yg
MCwgZm9yIGVhY2ggYXR0YWNobWVudAotICAgIC8vIHBvaW50IHRvIHdoaWNoIHRoaXMgaW1hZ2Ug
d2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIuCi0KLSAgICBG
cmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAg
RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0g
ICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+
ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdG
cmFtZWJ1ZmZlciAmJiBkcmF3RnJhbWVidWZmZXIgIT0gcmVhZEZyYW1lYnVmZmVyKQotICAgIHsK
LSAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KTsKLSAgICB9Ci19Ci0KLVRleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRl
eHR1cmVUeXBlIHR5cGUpCi17Ci0gICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNb
dHlwZV0uZ2V0KCk7Ci0KLSAgICBpZiAodCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07Ci0KLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gVEVY
VFVSRV8yRAotCi0gICAgICAgICAgY2FzZSBURVhUVVJFXzJEOgotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFRleHR1cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUyRChUZXh0
dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwotICAgICAgICAgICAgICAgIGluY29tcGxldGUy
ZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3Ip
OwotICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOgotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcg
VGV4dHVyZUN1YmVNYXAoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLQotICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUt
PnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xv
cik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1koMCwgMSwgMSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNv
bXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9z
WigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAg
ICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgMSwgY29sb3IpOwotCi0gICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
Q3ViZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5zZXQodCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHQ7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Y3VsbFNraXBzRHJhdyhHTGVudW0gZHJhd01vZGUp
Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZSAmJiBtU3RhdGUuY3VsbE1vZGUgPT0gR0xf
RlJPTlRfQU5EX0JBQ0sgJiYgaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwotfQotCi1ib29sIENv
bnRleHQ6OmlzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGRy
YXdNb2RlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOgotICAgICAgY2FzZSBHTF9U
UklBTkdMRV9GQU46Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfUE9JTlRTOgotICAgICAgY2FzZSBHTF9MSU5FUzoKLSAg
ICAgIGNhc2UgR0xfTElORV9MT09QOgotICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1
aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2lu
ZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMV0gPSB2YWx1ZXNbMV07Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsKLSAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFsdWVzWzNd
OwotCi0gICAgbVZlcnRleERhdGFNYW5hZ2VyLT5kaXJ0eUN1cnJlbnRWYWx1ZShpbmRleCk7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKQotewotICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOwotCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBkaXZp
c29yOwotfQotCi0vLyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2luZyBvcmRlcgotLy8gT0VT
IGV4dGVuc2lvbnMKLS8vIEVYVCBleHRlbnNpb25zCi0vLyBWZW5kb3IgZXh0ZW5zaW9ucwotdm9p
ZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKLXsKLSAgICBtRXh0ZW5zaW9uU3RyaW5n
ID0gIiI7Ci0KLSAgICAvLyBPRVMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0czMyYml0SW5k
aWNlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1l
bnRfaW5kZXhfdWludCAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOwotICAgIC8vbUV4dGVuc2lvblN0cmluZyArPSAiR0xf
T0VTX2dldF9wcm9ncmFtX2JpbmFyeSAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U19yZ2I4X3JnYmE4ICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzICI7Ci0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAg
ICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKQotICAg
IHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCAi
OwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpCi0gICAgewot
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIg
IjsKLSAgICB9Ci0KLSAgICBpZiAoc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewot
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9ucG90ICI7Ci0gICAg
fQotCi0gICAgLy8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9y
dHNPY2NsdXNpb25RdWVyaWVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAiOwotICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF9yb2J1c3RuZXNzICI7Ci0KLSAgICBpZiAoc3VwcG9ydHNEWFQxVGV4
dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDEgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlICI7Ci0KLSAgICAvLyBBTkdMRS1zcGVjaWZpYyBl
eHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgIHsKLSAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAiOwotICAgIH0K
LQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsK
LSAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAiOwot
ICAgIH0KLQotICAgIGlmIChzdXBwb3J0c0luc3RhbmNpbmcoKSkKLSAgICB7Ci0gICAgICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgIjsKLSAgICB9Ci0K
LSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVy
ICI7Ci0KLSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAiOwot
ICAgIH0KLSAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAiOwot
ICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfdXNhZ2Ug
IjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9z
b3VyY2UgIjsKLQotICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zCi0gICAg
aWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9OVl9mZW5jZSAiOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5
cGUgZW5kID0gbUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0gICAgaWYg
KGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJp
bmcucmVzaXplKGVuZCsxKTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4
dGVuc2lvblN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmcuY19z
dHIoKTsKLX0KLQotdm9pZCBDb250ZXh0Ojppbml0UmVuZGVyZXJTdHJpbmcoKQotewotICAgIEQz
REFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0QWRhcHRlcklk
ZW50aWZpZXIoKTsKLQotICAgIG1SZW5kZXJlclN0cmluZyA9ICJBTkdMRSAoIjsKLSAgICBtUmVu
ZGVyZXJTdHJpbmcgKz0gaWRlbnRpZmllci0+RGVzY3JpcHRpb247Ci0gICAgbVJlbmRlcmVyU3Ry
aW5nICs9ICIpIjsKLX0KLQotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0UmVuZGVyZXJTdHJpbmco
KSBjb25zdAotewotICAgIHJldHVybiBtUmVuZGVyZXJTdHJpbmcuY19zdHIoKTsKLX0KLQotdm9p
ZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGlu
dCBzcmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spCi17Ci0gICAgRnJhbWVidWZm
ZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgIEZyYW1lYnVm
ZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICgh
cmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEUgfHwKLSAgICAgICAgIWRyYXdGcmFtZWJ1ZmZlciB8fCBkcmF3
RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0g
MCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgfQotCi0gICAgaW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50IGRyYXdC
dWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgo
KTsKLSAgICBpbnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgUkVDVCBk
ZXN0UmVjdDsKLQotICAgIGlmIChzcmNYMCA8IHNyY1gxKQotICAgIHsKLSAgICAgICAgc291cmNl
UmVjdC5sZWZ0ID0gc3JjWDA7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMTsKLSAg
ICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgwOwotICAgICAgICBkZXN0UmVjdC5yaWdodCA9IGRz
dFgxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBz
cmNYMTsKLSAgICAgICAgZGVzdFJlY3QubGVmdCA9IGRzdFgxOwotICAgICAgICBzb3VyY2VSZWN0
LnJpZ2h0ID0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDA7Ci0gICAgfQot
Ci0gICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmJvdHRv
bSA9IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsKLSAgICAgICAgc291
cmNlUmVjdC50b3AgPSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTA7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTA7Ci0g
ICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRzdFkwOwotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9
IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMTsKLSAgICB9Ci0KLSAgICBSRUNU
IHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0OwotICAgIFJFQ1QgZGVzdFNjaXNzb3Jl
ZFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgewot
ICAgICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1
ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QKLSAgICAgICAgLy8gUGxlYXNlIG5vdGU6
IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVzLCBzbyB0aGUgKnRv
cCogb2YgdGhlCi0gICAgICAgIC8vIHJlY3Qgd2lsbCBiZSBjaGVja2VkIGFnYWluc3Qgc2Npc3Nv
clksIHJhdGhlciB0aGFuIHRoZSBib3R0b20uCi0gICAgICAgIGlmIChkZXN0UmVjdC5sZWZ0IDwg
bVN0YXRlLnNjaXNzb3JYKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeERpZmYgPSBtU3Rh
dGUuc2Npc3NvclggLSBkZXN0UmVjdC5sZWZ0OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJl
Y3QubGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJl
Y3QubGVmdCArPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC5yaWdo
dCA+IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCB4RGlmZiA9IGRlc3RSZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCAr
IG1TdGF0ZS5zY2lzc29yV2lkdGgpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3Qucmln
aHQgPSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICAgICAg
c291cmNlU2Npc3NvcmVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkZXN0UmVjdC50b3AgPCBtU3RhdGUuc2Npc3NvclkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRvcDsKLSAgICAgICAg
ICAgIGRlc3RTY2lzc29yZWRSZWN0LnRvcCA9IG1TdGF0ZS5zY2lzc29yWTsKLSAgICAgICAgICAg
IHNvdXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVp
Z2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSBkZXN0UmVjdC5ib3R0b20g
LSAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpOwotICAgICAgICAgICAg
ZGVzdFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNz
b3JIZWlnaHQ7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlm
ZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCA9IGZhbHNl
OwotICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOwotCi0gICAgUkVDVCBzb3VyY2VU
cmltbWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJlY3Q7Ci0gICAgUkVDVCBkZXN0VHJpbW1lZFJl
Y3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlv
biByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0
IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZh
Y2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkKLSAgICB7Ci0gICAgICAg
IGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0OwotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgKz0geERp
ZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0ID4gcmVhZEJ1ZmZl
cldpZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gc291cmNlVHJpbW1lZFJlY3Qucmln
aHQgLSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0ID0g
cmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7
Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IDApCi0gICAgewotICAg
ICAgICBpbnQgeURpZmYgPSAwIC0gc291cmNlVHJpbW1lZFJlY3QudG9wOwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC50b3AgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wICs9IHlE
aWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPiByZWFkQnVm
ZmVySGVpZ2h0KQotICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gc291cmNlVHJpbW1lZFJlY3Qu
Ym90dG9tIC0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90
dG9tID0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAt
PSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCAwKQotICAg
IHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC5sZWZ0OwotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QubGVmdCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0Lmxl
ZnQgKz0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC5yaWdodCA+IGRy
YXdCdWZmZXJXaWR0aCkKLSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IGRlc3RUcmltbWVkUmVj
dC5yaWdodCAtIGRyYXdCdWZmZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0
ID0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtPSB4
RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnRvcCA8IDApCi0gICAgewot
ICAgICAgICBpbnQgeURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LnRvcDsKLSAgICAgICAgZGVz
dFRyaW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCArPSB5
RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSA+IGRyYXdCdWZm
ZXJIZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSBkZXN0VHJpbW1lZFJlY3QuYm90
dG9tIC0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSA9
IGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtPSB5
RGlmZjsKLSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAg
aWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IHJl
YWRCdWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLSBzb3Vy
Y2VUcmltbWVkUmVjdC5sZWZ0IDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJp
bW1lZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8IGRyYXdCdWZmZXJIZWlnaHQg
fHwKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQg
PCBkcmF3QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICE9IDAg
fHwgZGVzdFRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgIT0g
MCB8fCBkZXN0VHJpbW1lZFJlY3QubGVmdCAhPSAwKQotICAgIHsKLSAgICAgICAgcGFydGlhbEJ1
ZmZlckNvcHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVS
X0JJVCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlwZSA9IHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAotICAgICAg
ICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJC
VUZGRVI7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWREcmF3VHlwZSA9IGRyYXdGcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAotICAgICAgICAgICAg
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVI7
Ci0gICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3VHlwZSB8fAotICAgICAg
ICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAh
PSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBp
biBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFk
RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAg
YmxpdFJlbmRlclRhcmdldCA9IHRydWU7Ci0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIChHTF9E
RVBUSF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAg
IFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVMTDsKLSAgICAgICAgUmVuZGVyYnVmZmVy
ICpkcmF3RFNCdWZmZXIgPSBOVUxMOwotCi0gICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVk
IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQotICAgICAgICAvLyBib3Ro
IGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4K
LQotICAgICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0Zy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVh
ZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJh
bWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVu
Y2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJh
d0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBk
cmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9
IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAg
ICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0
KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIg
PSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBk
cmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3Rl
bmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyBvbmx5IHdob2xl
LWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChk
cmF3RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkgfHwgCi0gICAg
ICAgICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDAp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxp
dERlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotCi0g
ICAgICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSogcmVhZFJlbmRlclRhcmdldCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd1JlbmRlclRh
cmdldCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFJlbmRlclRhcmdldCwg
JnNvdXJjZVRyaW1tZWRSZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd1JlbmRlclRhcmdldCwgJmRlc3RUcmltbWVkUmVjdCwgRDNEVEVY
Rl9OT05FKTsKLQotICAgICAgICAgICAgcmVhZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgZHJhd1JlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0
RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5KiByZWFkRGVwdGhTdGVuY2lsID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRE
ZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3RGVwdGhT
dGVuY2lsID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRGVwdGhTdGVuY2ls
LCBOVUxMLCBkcmF3RGVwdGhTdGVuY2lsLCBOVUxMLCBEM0RURVhGX05PTkUpOwotCi0gICAgICAg
ICAgICByZWFkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3RGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZh
aWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVZlcnRleERl
Y2xhcmF0aW9uQ2FjaGU6OlZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKSA6IG1NYXhMcnUoMCkKLXsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBp
KyspCi0gICAgewotICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9u
ID0gTlVMTDsKLSAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA9IDA7Ci0gICAg
fQotfQotCi1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpb25DYWNoZSgp
Ci17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklF
UzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVj
bGFyYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVy
dGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVt
IFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbGFyYXRpb24oSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbXSwgUHJvZ3JhbSAqcHJv
Z3JhbSwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpCi17Ci0gICAgKnJl
cGVhdERyYXcgPSAxOwotCi0gICAgaW50IGluZGV4ZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FU
VFJJQlM7Ci0gICAgaW50IGluc3RhbmNlZEF0dHJpYnV0ZSA9IE1BWF9WRVJURVhfQVRUUklCUzsK
LQotICAgIGlmIChpbnN0YW5jZXMgPiAwKQotICAgIHsKLSAgICAgICAgLy8gRmluZCBhbiBpbmRl
eGVkIGF0dHJpYnV0ZSB0byBiZSBtYXBwZWQgdG8gRDNEIHN0cmVhbSAwCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmFjdGl2ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZp
c29yID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4ZWRBdHRyaWJ1dGUgPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBN
QVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yICE9IDApCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlZEF0dHJpYnV0ZSA9IGk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBi
cmVhazsgICAvLyBGb3VuZCBib3RoIGFuIGluZGV4ZWQgYW5kIGluc3RhbmNlZCBhdHRyaWJ1dGUK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRl
ID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdM
X0lOVkFMSURfT1BFUkFUSU9OOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRDNEVkVSVEVYRUxF
TUVOVDkgZWxlbWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07Ci0gICAgRDNEVkVSVEVYRUxF
TUVOVDkgKmVsZW1lbnQgPSAmZWxlbWVudHNbMF07Ci0KLSAgICBQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChh
dHRyaWJ1dGVzW2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHN0cmVhbSA9
IGk7Ci0KLSAgICAgICAgICAgIGlmIChpbnN0YW5jZXMgPiAwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIC8vIER1ZSB0byBhIGJ1ZyBvbiBBVEkgY2FyZHMgd2UgY2FuJ3QgZW5hYmxl
IGluc3RhbmNpbmcgd2hlbiBub25lIG9mIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnN0YW5jZWQuCi0g
ICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJ
QlMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcmVwZWF0RHJhdyA9
IGluc3RhbmNlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXhlZEF0dHJp
YnV0ZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ZWFtID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmVhbSA9IGluZGV4ZWRBdHRyaWJ1dGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBVSU5UIGZyZXF1ZW5jeSA9IDE7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5kaXZpc29yID09IDAp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5j
eSA9IEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IGluc3RhbmNlczsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IEQzRFNUUkVBTVNPVVJDRV9J
TlNUQU5DRURBVEEgfCBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0
U3RyZWFtU291cmNlRnJlcShzdHJlYW0sIGZyZXF1ZW5jeSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1JbnN0YW5jaW5nRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwgIT0gYXR0
cmlidXRlc1tpXS5zZXJpYWwgfHwKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1d
LnN0cmlkZSAhPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZSB8fAotICAgICAgICAgICAgICAgIG1BcHBs
aWVkVkJzW3N0cmVhbV0ub2Zmc2V0ICE9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlKHN0cmVhbSwgYXR0
cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIsIGF0dHJpYnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVz
W2ldLnN0cmlkZSk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zZXJpYWwg
PSBhdHRyaWJ1dGVzW2ldLnNlcmlhbDsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJl
YW1dLnN0cmlkZSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwotICAgICAgICAgICAgICAgIG1BcHBs
aWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGVsZW1lbnQtPlN0cmVhbSA9IHN0cmVhbTsKLSAgICAgICAgICAg
IGVsZW1lbnQtPk9mZnNldCA9IDA7Ci0gICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmli
dXRlc1tpXS50eXBlOwotICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhP
RF9ERUZBVUxUOwotICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVY
Q09PUkQ7Ci0gICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0U2VtYW50aWNJbmRleChpKTsKLSAgICAgICAgICAgIGVsZW1lbnQrKzsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBpbnN0YW5jZWRBdHRyaWJ1dGUgPT0g
TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAgaWYgKG1JbnN0YW5jaW5nRW5hYmxl
ZCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1J
bnN0YW5jaW5nRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5EKCk7Ci0gICAgKihlbGVt
ZW50KyspID0gZW5kOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xf
Q0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAgVmVydGV4RGVjbENhY2hlRW50cnkg
KmVudHJ5ID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAgICAgIGlmIChtZW1jbXAoZW50cnkt
PmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXplb2Yo
RDNEVkVSVEVYRUxFTUVOVDkpKSA9PSAwICYmIGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbikKLSAg
ICAgICAgewotICAgICAgICAgICAgZW50cnktPmxydUNvdW50ID0gKyttTWF4THJ1OwotICAgICAg
ICAgICAgaWYoZW50cnktPnZlcnRleERlY2xhcmF0aW9uICE9IG1MYXN0U2V0VkRlY2wpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihl
bnRyeS0+dmVydGV4RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgICAgIG1MYXN0U2V0VkRlY2wg
PSBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybiBHTF9OT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZlcnRleERlY2xD
YWNoZUVudHJ5ICpsYXN0Q2FjaGUgPSBtVmVydGV4RGVjbENhY2hlOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPCBsYXN0Q2FjaGUtPmxydUNv
dW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0Q2FjaGUgPSAmbVZlcnRleERlY2xDYWNo
ZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xh
cmF0aW9uICE9IE5VTEwpCi0gICAgewotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0
aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBO
VUxMOwotICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQs
IHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKLSAgICAgICAgLy8gYWJvdXQgaXQuCi0gICAgfQot
Ci0gICAgbWVtY3B5KGxhc3RDYWNoZS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVu
dCAtIGVsZW1lbnRzKSAqIHNpemVvZihEM0RWRVJURVhFTEVNRU5UOSkpOwotICAgIGRldmljZS0+
Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZsYXN0Q2FjaGUtPnZlcnRleERlY2xh
cmF0aW9uKTsKLSAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKGxhc3RDYWNoZS0+dmVy
dGV4RGVjbGFyYXRpb24pOwotICAgIG1MYXN0U2V0VkRlY2wgPSBsYXN0Q2FjaGUtPnZlcnRleERl
Y2xhcmF0aW9uOwotICAgIGxhc3RDYWNoZS0+bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0KLSAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXZvaWQgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6bWFy
a1N0YXRlRGlydHkoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCi0gICAgewotICAgICAgICBtQXBwbGllZFZCc1tpXS5zZXJpYWwgPSAwOwotICAg
IH0KLQotICAgIG1MYXN0U2V0VkRlY2wgPSBOVUxMOwotICAgIG1JbnN0YW5jaW5nRW5hYmxlZCA9
IHRydWU7ICAgLy8gRm9yY2VzIGl0IHRvIGJlIGRpc2FibGVkIHdoZW4gbm90IHVzZWQKLX0KLQot
fQotCi1leHRlcm4gIkMiCi17Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVn
bDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wg
bm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKLXsKLSAgICByZXR1cm4gbmV3IGdsOjpD
b250ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7
Ci19Ci0KLXZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAg
ICBkZWxldGUgY29udGV4dDsKLQotICAgIGlmIChjb250ZXh0ID09IGdsOjpnZXRDb250ZXh0KCkp
Ci0gICAgewotICAgICAgICBnbDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAg
fQotfQotCi12b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlz
cGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIGdsOjptYWtlQ3Vy
cmVudChjb250ZXh0LCBkaXNwbGF5LCBzdXJmYWNlKTsKLX0KLQotZ2w6OkNvbnRleHQgKmdsR2V0
Q3VycmVudENvbnRleHQoKQotewotICAgIHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOwotfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ0N2NlNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDY2MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBDb250ZXh0Lmg6IERlZmlu
ZXMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2luZyBhbGwgR0wgc3RhdGUgYW5kIHBlcmZv
cm1pbmcKLS8vIHJlbmRlcmluZyBvcGVyYXRpb25zLiBJdCBpcyB0aGUgR0xFUzIgc3BlY2lmaWMg
aW1wbGVtZW50YXRpb24gb2YgRUdMQ29udGV4dC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQ09OVEVY
VF9IXwotI2RlZmluZSBMSUJHTEVTVjJfQ09OVEVYVF9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwK
LSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLSNkZWZp
bmUgRUdMQVBJCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2lu
Y2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxoYXNoX21hcD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9IYW5kbGVB
bGxvY2F0b3IuaCIKLQotbmFtZXNwYWNlIGVnbAotewotY2xhc3MgRGlzcGxheTsKLWNsYXNzIFN1
cmZhY2U7Ci1jbGFzcyBDb25maWc7Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotc3RydWN0IFRyYW5z
bGF0ZWRBdHRyaWJ1dGU7Ci1zdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKLQotY2xhc3MgQnVm
ZmVyOwotY2xhc3MgU2hhZGVyOwotY2xhc3MgUHJvZ3JhbTsKLWNsYXNzIFRleHR1cmU7Ci1jbGFz
cyBUZXh0dXJlMkQ7Ci1jbGFzcyBUZXh0dXJlQ3ViZU1hcDsKLWNsYXNzIEZyYW1lYnVmZmVyOwot
Y2xhc3MgUmVuZGVyYnVmZmVyOwotY2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZTsKLWNsYXNzIENv
bG9yYnVmZmVyOwotY2xhc3MgRGVwdGhidWZmZXI7Ci1jbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZl
cjsKLWNsYXNzIFN0ZW5jaWxidWZmZXI7Ci1jbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7Ci1jbGFz
cyBWZXJ0ZXhEYXRhTWFuYWdlcjsKLWNsYXNzIEluZGV4RGF0YU1hbmFnZXI7Ci1jbGFzcyBCbGl0
OwotY2xhc3MgRmVuY2U7Ci1jbGFzcyBRdWVyeTsKLQotZW51bQotewotICAgIEQzRDlfTUFYX0ZM
T0FUX0NPTlNUQU5UUyA9IDI1NiwKLSAgICBEM0Q5X01BWF9CT09MX0NPTlNUQU5UUyA9IDE2LAot
ICAgIEQzRDlfTUFYX0lOVF9DT05TVEFOVFMgPSAxNiwKLQotICAgIE1BWF9WRVJURVhfQVRUUklC
UyA9IDE2LAotICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTID0gRDNEOV9NQVhfRkxPQVRf
Q09OU1RBTlRTIC0gMiwgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBkeF9IYWxmUGl4ZWxTaXplIGFu
ZCBkeF9EZXB0aFJhbmdlLgotICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yID0gOCwKLSAgICBN
QVhfVkFSWUlOR19WRUNUT1JTX1NNMyA9IDEwLAotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
ID0gMTYsCi0gICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA9IDQsICAgLy8g
Rm9yIGRldmljZXMgc3VwcG9ydGluZyB2ZXJ0ZXggdGV4dHVyZSBmZXRjaAotICAgIE1BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURiA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsg
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURiwgICAgCi0gICAgTUFYX0ZSQUdNRU5U
X1VOSUZPUk1fVkVDVE9SU19TTTIgPSAzMiAtIDMsICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGR4
X0Nvb3JkLCBkeF9EZXB0aCwgYW5kIGR4X0RlcHRoUmFuZ2UuIGR4X1BvaW50T3JMaW5lcyBhbmQg
ZHhfRnJvbnRDQ1cgdXNlIHNlcGFyYXRlIGJvb2wgcmVnaXN0ZXJzLgotICAgIE1BWF9GUkFHTUVO
VF9VTklGT1JNX1ZFQ1RPUlNfU00zID0gMjI0IC0gMywKLSAgICBNQVhfRFJBV19CVUZGRVJTID0g
MSwKLQotICAgIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUID0gR0xfUkdCLAotICAg
IElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRSA9IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
Ci19OwotCi1lbnVtIFF1ZXJ5VHlwZQotewotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRCwK
LSAgICBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFLAotCi0gICAgUVVFUllf
VFlQRV9DT1VOVAotfTsKLQotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01J
TiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYID0gMS4w
ZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOwotY29u
c3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTIgPSAxLjBmOwotY29uc3Qg
ZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgPSA2NC4wZjsKLQotc3RydWN0
IENvbG9yCi17Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJs
dWU7Ci0gICAgZmxvYXQgYWxwaGE7Ci19OwotCi0vLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJp
bmcgYSBzaW5nbGUgdmVydGV4IGF0dHJpYnV0ZQotY2xhc3MgVmVydGV4QXR0cmlidXRlCi17Ci0g
IHB1YmxpYzoKLSAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUo
MCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJh
eUVuYWJsZWQoZmFsc2UpLCBtRGl2aXNvcigwKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1
ZVswXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBmOwotICAgICAgICBt
Q3VycmVudFZhbHVlWzJdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7
Ci0gICAgfQotCi0gICAgaW50IHR5cGVTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAobVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICBy
ZXR1cm4gbVNpemUgKiBzaXplb2YoR0xieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6ICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgICAgICAgY2FzZSBH
TF9TSE9SVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOwotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVzaG9y
dCk7Ci0gICAgICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6
ZW9mKEdMZml4ZWQpOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgIHJldHVybiBt
U2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OyByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBHTHNpemVpIHN0cmlkZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVN0cmlkZSA/
IG1TdHJpZGUgOiB0eXBlU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyCi0gICAgR0xlbnVtIG1UeXBlOwotICAgIEdMaW50IG1TaXplOwotICAgIGJvb2wg
bU5vcm1hbGl6ZWQ7Ci0gICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBz
dHJpZGUKLQotICAgIHVuaW9uCi0gICAgewotICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsK
LSAgICAgICAgaW50cHRyX3QgbU9mZnNldDsKLSAgICB9OwotCi0gICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBv
aW50ZXIgaXMgY2FsbGVkLgotCi0gICAgYm9vbCBtQXJyYXlFbmFibGVkOyAgIC8vIEZyb20gZ2xF
bmFibGUvRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5Ci0gICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0
XTsgICAvLyBGcm9tIGdsVmVydGV4QXR0cmliCi0gICAgdW5zaWduZWQgaW50IG1EaXZpc29yOwot
fTsKLQotdHlwZWRlZiBWZXJ0ZXhBdHRyaWJ1dGUgVmVydGV4QXR0cmlidXRlQXJyYXlbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKLQotLy8gSGVscGVyIHN0cnVjdHVyZSB0byBzdG9yZSBhbGwgcmF3IHN0
YXRlCi1zdHJ1Y3QgU3RhdGUKLXsKLSAgICBDb2xvciBjb2xvckNsZWFyVmFsdWU7Ci0gICAgR0xj
bGFtcGYgZGVwdGhDbGVhclZhbHVlOwotICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1ZTsKLQotICAg
IGJvb2wgY3VsbEZhY2U7Ci0gICAgR0xlbnVtIGN1bGxNb2RlOwotICAgIEdMZW51bSBmcm9udEZh
Y2U7Ci0gICAgYm9vbCBkZXB0aFRlc3Q7Ci0gICAgR0xlbnVtIGRlcHRoRnVuYzsKLSAgICBib29s
IGJsZW5kOwotICAgIEdMZW51bSBzb3VyY2VCbGVuZFJHQjsKLSAgICBHTGVudW0gZGVzdEJsZW5k
UkdCOwotICAgIEdMZW51bSBzb3VyY2VCbGVuZEFscGhhOwotICAgIEdMZW51bSBkZXN0QmxlbmRB
bHBoYTsKLSAgICBHTGVudW0gYmxlbmRFcXVhdGlvblJHQjsKLSAgICBHTGVudW0gYmxlbmRFcXVh
dGlvbkFscGhhOwotICAgIENvbG9yIGJsZW5kQ29sb3I7Ci0gICAgYm9vbCBzdGVuY2lsVGVzdDsK
LSAgICBHTGVudW0gc3RlbmNpbEZ1bmM7Ci0gICAgR0xpbnQgc3RlbmNpbFJlZjsKLSAgICBHTHVp
bnQgc3RlbmNpbE1hc2s7Ci0gICAgR0xlbnVtIHN0ZW5jaWxGYWlsOwotICAgIEdMZW51bSBzdGVu
Y2lsUGFzc0RlcHRoRmFpbDsKLSAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3M7Ci0gICAg
R0x1aW50IHN0ZW5jaWxXcml0ZW1hc2s7Ci0gICAgR0xlbnVtIHN0ZW5jaWxCYWNrRnVuYzsKLSAg
ICBHTGludCBzdGVuY2lsQmFja1JlZjsKLSAgICBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrOwotICAg
IEdMZW51bSBzdGVuY2lsQmFja0ZhaWw7Ci0gICAgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRo
RmFpbDsKLSAgICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOwotICAgIEdMdWludCBz
dGVuY2lsQmFja1dyaXRlbWFzazsKLSAgICBib29sIHBvbHlnb25PZmZzZXRGaWxsOwotICAgIEdM
ZmxvYXQgcG9seWdvbk9mZnNldEZhY3RvcjsKLSAgICBHTGZsb2F0IHBvbHlnb25PZmZzZXRVbml0
czsKLSAgICBib29sIHNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLSAgICBib29sIHNhbXBsZUNvdmVy
YWdlOwotICAgIEdMY2xhbXBmIHNhbXBsZUNvdmVyYWdlVmFsdWU7Ci0gICAgYm9vbCBzYW1wbGVD
b3ZlcmFnZUludmVydDsKLSAgICBib29sIHNjaXNzb3JUZXN0OwotICAgIGJvb2wgZGl0aGVyOwot
Ci0gICAgR0xmbG9hdCBsaW5lV2lkdGg7Ci0KLSAgICBHTGVudW0gZ2VuZXJhdGVNaXBtYXBIaW50
OwotICAgIEdMZW51bSBmcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OwotCi0gICAgR0xpbnQg
dmlld3BvcnRYOwotICAgIEdMaW50IHZpZXdwb3J0WTsKLSAgICBHTHNpemVpIHZpZXdwb3J0V2lk
dGg7Ci0gICAgR0xzaXplaSB2aWV3cG9ydEhlaWdodDsKLSAgICBmbG9hdCB6TmVhcjsKLSAgICBm
bG9hdCB6RmFyOwotCi0gICAgR0xpbnQgc2Npc3Nvclg7Ci0gICAgR0xpbnQgc2Npc3Nvclk7Ci0g
ICAgR0xzaXplaSBzY2lzc29yV2lkdGg7Ci0gICAgR0xzaXplaSBzY2lzc29ySGVpZ2h0OwotCi0g
ICAgYm9vbCBjb2xvck1hc2tSZWQ7Ci0gICAgYm9vbCBjb2xvck1hc2tHcmVlbjsKLSAgICBib29s
IGNvbG9yTWFza0JsdWU7Ci0gICAgYm9vbCBjb2xvck1hc2tBbHBoYTsKLSAgICBib29sIGRlcHRo
TWFzazsKLQotICAgIHVuc2lnbmVkIGludCBhY3RpdmVTYW1wbGVyOyAgIC8vIEFjdGl2ZSB0ZXh0
dXJlIHVuaXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAotICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZl
cj4gYXJyYXlCdWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBlbGVtZW50QXJyYXlC
dWZmZXI7Ci0gICAgR0x1aW50IHJlYWRGcmFtZWJ1ZmZlcjsKLSAgICBHTHVpbnQgZHJhd0ZyYW1l
YnVmZmVyOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gcmVuZGVyYnVmZmVyOwot
ICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbTsKLQotICAgIFZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhB
dHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJl
PiBzYW1wbGVyVGV4dHVyZVtURVhUVVJFX1RZUEVfQ09VTlRdW01BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTX1ZURl07Ci0gICAgQmluZGluZ1BvaW50ZXI8UXVlcnk+IGFjdGl2ZVF1ZXJ5
W1FVRVJZX1RZUEVfQ09VTlRdOwotCi0gICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50OwotICAgIEdM
aW50IHBhY2tBbGlnbm1lbnQ7Ci0gICAgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyOwotfTsKLQot
Ly8gSGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xhcmF0aW9u
cwotY2xhc3MgVmVydGV4RGVjbGFyYXRpb25DYWNoZQotewotICBwdWJsaWM6Ci0gICAgVmVydGV4
RGVjbGFyYXRpb25DYWNoZSgpOwotICAgIH5WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0KLSAg
ICBHTGVudW0gYXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFRyYW5z
bGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFtICpwcm9ncmFtLCBHTHNpemVpIGlu
c3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdyk7Ci0KLSAgICB2b2lkIG1hcmtTdGF0ZURpcnR5
KCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBVSU5UIG1NYXhMcnU7Ci0KLSAgICBlbnVtIHsgTlVNX1ZF
UlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVMgPSAzMiB9OwotCi0gICAgc3RydWN0IFZCRGF0YQotICAg
IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0
cmlkZTsKLSAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKLSAgICB9OwotCi0gICAgVkJEYXRh
IG1BcHBsaWVkVkJzW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgSURpcmVjdDNEVmVydGV4RGVj
bGFyYXRpb245ICptTGFzdFNldFZEZWNsOwotICAgIGJvb2wgbUluc3RhbmNpbmdFbmFibGVkOwot
Ci0gICAgc3RydWN0IFZlcnRleERlY2xDYWNoZUVudHJ5Ci0gICAgewotICAgICAgICBEM0RWRVJU
RVhFTEVNRU5UOSBjYWNoZWRFbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKLSAgICAg
ICAgVUlOVCBscnVDb3VudDsKLSAgICAgICAgSURpcmVjdDNEVmVydGV4RGVjbGFyYXRpb245ICp2
ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICB9IG1WZXJ0ZXhEZWNsQ2FjaGVbTlVNX1ZFUlRFWF9ERUNM
X0NBQ0hFX0VOVFJJRVNdOwotfTsKLQotY2xhc3MgQ29udGV4dAotewotICBwdWJsaWM6Ci0gICAg
Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hh
cmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwotCi0gICAg
fkNvbnRleHQoKTsKLQotICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpEaXNwbGF5ICpkaXNwbGF5
LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtBbGxTdGF0
ZURpcnR5KCk7Ci0gICAgdm9pZCBtYXJrRHhVbmlmb3Jtc0RpcnR5KCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgbWFya0NvbnRleHRMb3N0KCk7Ci0gICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7Ci0KLSAg
ICAvLyBTdGF0ZSBtYW5pcHVsYXRpb24KLSAgICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQgcmVk
LCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpOwotCi0gICAgdm9pZCBzZXRD
bGVhckRlcHRoKGZsb2F0IGRlcHRoKTsKLQotICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGludCBz
dGVuY2lsKTsKLQotICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKTsKLSAgICBib29s
IGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEN1bGxNb2RlKEdMZW51
bSBtb2RlKTsKLQotICAgIHZvaWQgc2V0RnJvbnRGYWNlKEdMZW51bSBmcm9udCk7Ci0KLSAgICB2
b2lkIHNldERlcHRoVGVzdChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNEZXB0aFRlc3RFbmFi
bGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldERlcHRoRnVuYyhHTGVudW0gZGVwdGhGdW5jKTsK
LQotICAgIHZvaWQgc2V0RGVwdGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcik7Ci0gICAg
Ci0gICAgdm9pZCBzZXRCbGVuZChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNCbGVuZEVuYWJs
ZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QmxlbmRGYWN0b3JzKEdMZW51bSBzb3VyY2VSR0Is
IEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBkZXN0QWxwaGEpOwot
ICAgIHZvaWQgc2V0QmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVl
LCBmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBzZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVh
dGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24pOwotCi0gICAgdm9pZCBzZXRTdGVuY2lsVGVzdChi
b29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNTdGVuY2lsVGVzdEVuYWJsZWQoKSBjb25zdDsKLQot
ICAgIHZvaWQgc2V0U3RlbmNpbFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5j
aWxSZWYsIEdMdWludCBzdGVuY2lsTWFzayk7Ci0gICAgdm9pZCBzZXRTdGVuY2lsQmFja1BhcmFt
cyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2lsQmFja1JlZiwgR0x1aW50IHN0
ZW5jaWxCYWNrTWFzayk7Ci0gICAgdm9pZCBzZXRTdGVuY2lsV3JpdGVtYXNrKEdMdWludCBzdGVu
Y2lsV3JpdGVtYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKEdMdWludCBz
dGVuY2lsQmFja1dyaXRlbWFzayk7Ci0gICAgdm9pZCBzZXRTdGVuY2lsT3BlcmF0aW9ucyhHTGVu
dW0gc3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhQYXNzKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhHTGVu
dW0gc3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBHTGVu
dW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKTsKLQotICAgIHZvaWQgc2V0UG9seWdvbk9mZnNl
dEZpbGwoYm9vbCBlbmFibGVkKTsKLSAgICBib29sIGlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVk
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBvbHlnb25PZmZzZXRQYXJhbXMoR0xmbG9hdCBmYWN0
b3IsIEdMZmxvYXQgdW5pdHMpOwotCi0gICAgdm9pZCBzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2Uo
Ym9vbCBlbmFibGVkKTsKLSAgICBib29sIGlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgp
IGNvbnN0OwotCi0gICAgdm9pZCBzZXRTYW1wbGVDb3ZlcmFnZShib29sIGVuYWJsZWQpOwotICAg
IGJvb2wgaXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0U2Ft
cGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYgdmFsdWUsIGJvb2wgaW52ZXJ0KTsKLQotICAgIHZv
aWQgc2V0U2Npc3NvclRlc3QoYm9vbCBlbmFibGVkKTsKLSAgICBib29sIGlzU2Npc3NvclRlc3RF
bmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldERpdGhlcihib29sIGVuYWJsZWQpOwotICAg
IGJvb2wgaXNEaXRoZXJFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldExpbmVXaWR0aChH
TGZsb2F0IHdpZHRoKTsKLQotICAgIHZvaWQgc2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBo
aW50KTsKLSAgICB2b2lkIHNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhp
bnQpOwotCi0gICAgdm9pZCBzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIHNldFNjaXNzb3JQYXJhbXMo
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAg
dm9pZCBzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBh
bHBoYSk7Ci0gICAgdm9pZCBzZXREZXB0aE1hc2soYm9vbCBtYXNrKTsKLQotICAgIHZvaWQgc2V0
QWN0aXZlU2FtcGxlcih1bnNpZ25lZCBpbnQgYWN0aXZlKTsKLQotICAgIEdMdWludCBnZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RHJhd0ZyYW1lYnVmZmVy
SGFuZGxlKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0
OwotCi0gICAgR0x1aW50IGdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7Ci0KLSAgICBHTHVp
bnQgZ2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxl
ZCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNp
Z25lZCBpbnQgYXR0cmliTnVtKTsKLSAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2ln
bmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51
bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBH
THNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7Ci0gICAgY29uc3Qgdm9pZCAqZ2V0
VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdDsKLQotICAg
IGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZnZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7Ci0KLSAg
ICB2b2lkIHNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpOwotICAgIEdMaW50IGdl
dFVucGFja0FsaWdubWVudCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRQYWNrQWxpZ25tZW50KEdM
aW50IGFsaWdubWVudCk7Ci0gICAgR0xpbnQgZ2V0UGFja0FsaWdubWVudCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJvb2wgcmV2ZXJzZVJvd09yZGVyKTsKLSAg
ICBib29sIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdDsKLQotICAgIC8vIFRoZXNlIGNy
ZWF0ZSAgYW5kIGRlc3Ryb3kgbWV0aG9kcyBhcmUgbWVyZWx5IHBhc3MtdGhyb3VnaHMgdG8gCi0g
ICAgLy8gUmVzb3VyY2VNYW5hZ2VyLCB3aGljaCBvd25zIHRoZXNlIG9iamVjdCB0eXBlcwotICAg
IEdMdWludCBjcmVhdGVCdWZmZXIoKTsKLSAgICBHTHVpbnQgY3JlYXRlU2hhZGVyKEdMZW51bSB0
eXBlKTsKLSAgICBHTHVpbnQgY3JlYXRlUHJvZ3JhbSgpOwotICAgIEdMdWludCBjcmVhdGVUZXh0
dXJlKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotCi0gICAgdm9pZCBkZWxl
dGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNo
YWRlcik7Ci0gICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKLSAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOwotICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVm
ZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0gICAgLy8gRnJhbWVidWZmZXJzIGFyZSBvd25l
ZCBieSB0aGUgQ29udGV4dCwgc28gdGhlc2UgbWV0aG9kcyBkbyBub3QgcGFzcyB0aHJvdWdoCi0g
ICAgR0x1aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpOwotCi0gICAgLy8gRmVuY2VzIGFyZSBvd25lZCBieSB0aGUg
Q29udGV4dC4KLSAgICBHTHVpbnQgY3JlYXRlRmVuY2UoKTsKLSAgICB2b2lkIGRlbGV0ZUZlbmNl
KEdMdWludCBmZW5jZSk7Ci0gICAgCi0gICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkgdGhlIENv
bnRleHQ7Ci0gICAgR0x1aW50IGNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCBkZWxldGVRdWVyeShH
THVpbnQgcXVlcnkpOwotCi0gICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7
Ci0gICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOwotICAgIHZv
aWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZUN1
YmVNYXAoR0x1aW50IHRleHR1cmUpOwotICAgIHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVp
bnQgZnJhbWVidWZmZXIpOwotICAgIHZvaWQgYmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJh
bWVidWZmZXIpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVy
KTsKLSAgICB2b2lkIHVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwotCi0gICAgdm9pZCBiZWdp
blF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSk7Ci0gICAgdm9pZCBlbmRRdWVyeShH
TGVudW0gdGFyZ2V0KTsKLQotICAgIHZvaWQgc2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlcik7Ci0KLSAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVuZGVy
YnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKTsKLQotICAgIHZvaWQgc2V0VmVydGV4QXR0cmli
KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKTsKLSAgICB2b2lkIHNldFZlcnRl
eEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci0KLSAgICBCdWZm
ZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVuY2UoR0x1aW50
IGhhbmRsZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUHJv
Z3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKLSAgICBUZXh0dXJlICpnZXRUZXh0dXJl
KEdMdWludCBoYW5kbGUpOwotICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcihHTHVpbnQg
aGFuZGxlKTsKLSAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxl
KTsKLSAgICBRdWVyeSAqZ2V0UXVlcnkoR0x1aW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51
bSB0eXBlKTsKLQotICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAgICBCdWZmZXIgKmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgIFByb2dyYW0gKmdldEN1cnJlbnRQcm9ncmFtKCk7
Ci0gICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQoKTsKLSAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0
VGV4dHVyZUN1YmVNYXAoKTsKLSAgICBUZXh0dXJlICpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25l
ZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSk7Ci0gICAgRnJhbWVidWZmZXIgKmdldFJl
YWRGcmFtZWJ1ZmZlcigpOwotICAgIEZyYW1lYnVmZmVyICpnZXREcmF3RnJhbWVidWZmZXIoKTsK
LQotICAgIGJvb2wgZ2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKLSAg
ICBib29sIGdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0gICAgYm9v
bCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKTsKLQotICAgIGJv
b2wgZ2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNp
Z25lZCBpbnQgKm51bVBhcmFtcyk7Ci0KLSAgICB2b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQgY2xlYXIo
R0xiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50
IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdm9pZCBkcmF3
RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2b2lkIHN5bmMoYm9vbCBi
bG9jayk7ICAgLy8gZmx1c2gvZmluaXNoCi0KLSAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVp
IGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgp
OwotCi0gICAgdm9pZCByZWNvcmRJbnZhbGlkRW51bSgpOwotICAgIHZvaWQgcmVjb3JkSW52YWxp
ZFZhbHVlKCk7Ci0gICAgdm9pZCByZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCk7Ci0gICAgdm9pZCBy
ZWNvcmRPdXRPZk1lbW9yeSgpOwotICAgIHZvaWQgcmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3Bl
cmF0aW9uKCk7Ci0KLSAgICBHTGVudW0gZ2V0RXJyb3IoKTsKLSAgICBHTGVudW0gZ2V0UmVzZXRT
dGF0dXMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKTsK
LQotICAgIGJvb2wgc3VwcG9ydHNTaGFkZXJNb2RlbDMoKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4
aW11bVZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldE1heGltdW1W
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAgIHVuc2lnbmVkIGludCBnZXRNYXhp
bXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVt
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVtUmVuZGVy
YnVmZmVyRGltZW5zaW9uKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNv
bnN0OwotICAgIGludCBnZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkgY29uc3Q7Ci0gICAgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgaW50IGdldE5lYXJlc3RTdXBw
b3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwotICAg
IGNvbnN0IGNoYXIgKmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0OwotICAgIGNvbnN0IGNoYXIg
KmdldFJlbmRlcmVyU3RyaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0V2ZW50UXVlcmll
cygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzdXBwb3J0c0RYVDFUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRFhUNVRleHR1cmVzKCkgY29u
c3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wg
c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0Zs
b2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIo
KSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpIGNv
bnN0OwotICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OwotICAgIGJv
b2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBw
b3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2Vz
KCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKLSAg
ICBib29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwotCi0gICAgdm9pZCBibGl0RnJhbWVi
dWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEs
IAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xp
bnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0Zmll
bGQgbWFzayk7Ci0KLSAgICBCbGl0ICpnZXRCbGl0dGVyKCkgeyByZXR1cm4gbUJsaXQ7IH0KLQot
ICAgIGNvbnN0IEQzRENBUFM5ICZnZXREZXZpY2VDYXBzKCkgeyByZXR1cm4gbURldmljZUNhcHM7
IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb250ZXh0KTsK
LQotICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCk7Ci0gICAg
dm9pZCBhcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSk7Ci0gICAgR0xlbnVtIGFwcGx5VmVydGV4
QnVmZmVyKEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgR0xz
aXplaSAqcmVwZWF0RHJhdyk7Ci0gICAgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2
b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRy
YW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Ci0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsK
LSAgICB2b2lkIGFwcGx5VGV4dHVyZXMoKTsKLSAgICB2b2lkIGFwcGx5VGV4dHVyZXMoU2FtcGxl
clR5cGUgdHlwZSk7Ci0KLSAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAg
ICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwotICAgIHZvaWQgZGV0YWNoRnJh
bWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZl
cihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICAgIFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0
dXJlKFRleHR1cmVUeXBlIHR5cGUpOwotCi0gICAgYm9vbCBjdWxsU2tpcHNEcmF3KEdMZW51bSBk
cmF3TW9kZSk7Ci0gICAgYm9vbCBpc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpOwotCi0g
ICAgdm9pZCBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7Ci0gICAgdm9pZCBpbml0UmVuZGVyZXJTdHJp
bmcoKTsKLQotICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25zdCBtQ29uZmlnOwotICAgIGVnbDo6
RGlzcGxheSAqbURpc3BsYXk7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKLQotICAg
IFN0YXRlIG1TdGF0ZTsKLQotICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyRD4gbVRleHR1cmUy
RFplcm87Ci0gICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1h
cFplcm87Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1aW50LCBGcmFtZWJ1ZmZl
cio+IEZyYW1lYnVmZmVyTWFwOwotICAgIEZyYW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsK
LSAgICBIYW5kbGVBbGxvY2F0b3IgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yOwotCi0gICAg
dHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgRmVuY2UqPiBGZW5jZU1hcDsKLSAgICBG
ZW5jZU1hcCBtRmVuY2VNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1GZW5jZUhhbmRsZUFsbG9j
YXRvcjsKLQotICAgIHR5cGVkZWYgc3RkZXh0OjpoYXNoX21hcDxHTHVpbnQsIFF1ZXJ5Kj4gUXVl
cnlNYXA7Ci0gICAgUXVlcnlNYXAgbVF1ZXJ5TWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtUXVl
cnlIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3RyaW5nOwot
ICAgIHN0ZDo6c3RyaW5nIG1SZW5kZXJlclN0cmluZzsKLQotICAgIFZlcnRleERhdGFNYW5hZ2Vy
ICptVmVydGV4RGF0YU1hbmFnZXI7Ci0gICAgSW5kZXhEYXRhTWFuYWdlciAqbUluZGV4RGF0YU1h
bmFnZXI7Ci0KLSAgICBCbGl0ICptQmxpdDsKLQotICAgIFN0cmVhbWluZ0luZGV4QnVmZmVyICpt
TGluZUxvb3BJQjsKLSAgICAKLSAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlPiBtSW5jb21wbGV0
ZVRleHR1cmVzW1RFWFRVUkVfVFlQRV9DT1VOVF07Ci0KLSAgICAvLyBSZWNvcmRlZCBlcnJvcnMK
LSAgICBib29sIG1JbnZhbGlkRW51bTsKLSAgICBib29sIG1JbnZhbGlkVmFsdWU7Ci0gICAgYm9v
bCBtSW52YWxpZE9wZXJhdGlvbjsKLSAgICBib29sIG1PdXRPZk1lbW9yeTsKLSAgICBib29sIG1J
bnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb247Ci0KLSAgICAvLyBDdXJyZW50L2xvc3QgY29udGV4
dCBmbGFncwotICAgIGJvb2wgbUhhc0JlZW5DdXJyZW50OwotICAgIGJvb2wgbUNvbnRleHRMb3N0
OwotICAgIEdMZW51bSBtUmVzZXRTdGF0dXM7Ci0gICAgR0xlbnVtIG1SZXNldFN0cmF0ZWd5Owot
ICAgIGJvb2wgbVJvYnVzdEFjY2VzczsKLQotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFRleHR1
cmVTZXJpYWxQU1tNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107Ci0gICAgdW5zaWduZWQgaW50IG1B
cHBsaWVkVGV4dHVyZVNlcmlhbFZTW01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZd
OwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1TZXJpYWw7Ci0gICAgdW5zaWduZWQg
aW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGll
ZERlcHRoYnVmZmVyU2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFN0ZW5jaWxidWZm
ZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgYm9vbCBt
RGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQ7Ci0gICAgYm9vbCBtVmlld3BvcnRJbml0aWFsaXplZDsK
LSAgICBEM0RWSUVXUE9SVDkgbVNldFZpZXdwb3J0OwotICAgIGJvb2wgbVJlbmRlclRhcmdldERl
c2NJbml0aWFsaXplZDsKLSAgICBEM0RTVVJGQUNFX0RFU0MgbVJlbmRlclRhcmdldERlc2M7Ci0g
ICAgYm9vbCBtRHhVbmlmb3Jtc0RpcnR5OwotICAgIFByb2dyYW0gKm1DYWNoZWRDdXJyZW50UHJv
Z3JhbTsKLSAgICBGcmFtZWJ1ZmZlciAqbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwotCi0gICAgYm9v
bCBtU3VwcG9ydHNTaGFkZXJNb2RlbDM7Ci0gICAgYm9vbCBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJl
OwotICAgIGJvb2wgbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZTsKLSAgICBib29sIG1TdXBwb3J0
c0luc3RhbmNpbmc7Ci0gICAgaW50ICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uOwotICAgIGlu
dCAgbU1heFRleHR1cmVEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNp
b247Ci0gICAgaW50ICBtTWF4VGV4dHVyZUxldmVsOwotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwg
Ym9vbCAqPiBtTXVsdGlTYW1wbGVTdXBwb3J0OwotICAgIEdMc2l6ZWkgbU1heFN1cHBvcnRlZFNh
bXBsZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7Ci0gICAgYm9vbCBtU3VwcG9y
dHNPY2NsdXNpb25RdWVyaWVzOwotICAgIGJvb2wgbVN1cHBvcnRzRFhUMVRleHR1cmVzOwotICAg
IGJvb2wgbVN1cHBvcnRzRFhUM1RleHR1cmVzOwotICAgIGJvb2wgbVN1cHBvcnRzRFhUNVRleHR1
cmVzOwotICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQzMlRleHR1cmVzOwotICAgIGJvb2wgbVN1cHBv
cnRzRmxvYXQzMkxpbmVhckZpbHRlcjsKLSAgICBib29sIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJh
YmxlVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7Ci0gICAgYm9v
bCBtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyOwotICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQx
NlJlbmRlcmFibGVUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
OwotICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKLSAgICBib29sIG1T
dXBwb3J0c0RlcHRoVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7Ci0g
ICAgaW50IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7Ci0KLSAgICAvLyBzdGF0ZSBjYWNo
aW5nIGZsYWdzCi0gICAgYm9vbCBtQ2xlYXJTdGF0ZURpcnR5OwotICAgIGJvb2wgbUN1bGxTdGF0
ZURpcnR5OwotICAgIGJvb2wgbURlcHRoU3RhdGVEaXJ0eTsKLSAgICBib29sIG1NYXNrU3RhdGVE
aXJ0eTsKLSAgICBib29sIG1QaXhlbFBhY2tpbmdTdGF0ZURpcnR5OwotICAgIGJvb2wgbUJsZW5k
U3RhdGVEaXJ0eTsKLSAgICBib29sIG1TdGVuY2lsU3RhdGVEaXJ0eTsKLSAgICBib29sIG1Qb2x5
Z29uT2Zmc2V0U3RhdGVEaXJ0eTsKLSAgICBib29sIG1TY2lzc29yU3RhdGVEaXJ0eTsKLSAgICBi
b29sIG1TYW1wbGVTdGF0ZURpcnR5OwotICAgIGJvb2wgbUZyb250RmFjZURpcnR5OwotICAgIGJv
b2wgbURpdGhlclN0YXRlRGlydHk7Ci0KLSAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZTsKLQotICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOwotCi0gICAgUmVz
b3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwotCi0gICAgVmVydGV4RGVjbGFyYXRpb25D
YWNoZSBtVmVydGV4RGVjbGFyYXRpb25DYWNoZTsKLX07Ci19Ci0KLWV4dGVybiAiQyIKLXsKLS8v
IEV4cG9ydGVkIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IEVHTAotZ2w6OkNvbnRleHQgKmdsQ3JlYXRl
Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hh
cmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwotdm9pZCBn
bERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLXZvaWQgZ2xNYWtlQ3VycmVu
dChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpOwotZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKLV9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0Fk
ZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpOwotYm9vbCBfX3N0ZGNhbGwgZ2xCaW5kVGV4SW1h
Z2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKLX0KLQotI2VuZGlmICAgLy8gSU5DTFVERV9DT05U
RVhUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0ZlbmNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQxMjM5Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZlbmNlLmNw
cDogSW1wbGVtZW50cyB0aGUgZ2w6OkZlbmNlIGNsYXNzLCB3aGljaCBzdXBwb3J0cyB0aGUgR0xf
TlZfZmVuY2UgZXh0ZW5zaW9uLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotRmVuY2U6OkZl
bmNlKGVnbDo6RGlzcGxheSogZGlzcGxheSkKLXsKLSAgICBtRGlzcGxheSA9IGRpc3BsYXk7Ci0g
ICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICBtQ29uZGl0aW9uID0gR0xfTk9ORTsKLSAgICBtU3RhdHVz
ID0gR0xfRkFMU0U7Ci19Ci0KLUZlbmNlOjp+RmVuY2UoKQotewotICAgIGlmIChtUXVlcnkgIT0g
TlVMTCkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5mcmVlRXZlbnRRdWVyeShtUXVlcnkpOwot
ICAgIH0KLX0KLQotR0xib29sZWFuIEZlbmNlOjppc0ZlbmNlKCkKLXsKLSAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgotICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5v
dCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcg
ZmVuY2UuCi0gICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOwotfQotCi12b2lkIEZlbmNlOjpzZXRG
ZW5jZShHTGVudW0gY29uZGl0aW9uKQotewotICAgIGlmICghbVF1ZXJ5KQotICAgIHsKLSAgICAg
ICAgbVF1ZXJ5ID0gbURpc3BsYXktPmFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgICAgICBpZiAo
IW1RdWVyeSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnkt
Pklzc3VlKEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQot
ICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247Ci0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotfQot
Ci1HTGJvb2xlYW4gRmVuY2U6OnRlc3RGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxM
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9U
UlVFKTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxM
LCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKLQotICAgIGlmIChjaGVja0RldmljZUxvc3QocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUp
OwotICAgIH0KLQotICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxT
RSk7Ci0gICAgbVN0YXR1cyA9IHJlc3VsdCA9PSBTX09LOwotICAgIHJldHVybiBtU3RhdHVzOwot
fQotCi12b2lkIEZlbmNlOjpmaW5pc2hGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxM
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIXRlc3RGZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7
Ci0gICAgfQotfQotCi12b2lkIEZlbmNlOjpnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQg
KnBhcmFtcykKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgewotICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhl
IHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikg
b3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVz
dEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVO
Q0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0
RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAobVN0YXR1cykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgMCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChjaGVja0RldmljZUxvc3QocmVzdWx0KSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICAgICAg
ICAgIG1TdGF0dXMgPSByZXN1bHQgPT0gU19PSzsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IG1T
dGF0dXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0g
bUNvbmRpdGlvbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRmVuY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
RmVuY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyNmNiMC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZS5o
OiBEZWZpbmVzIHRoZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9m
ZW5jZSBleHRlbnNpb24uCi0KLSNpZm5kZWYgTElCR0xFU1YyX0ZFTkNFX0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9GRU5DRV9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBEaXNwbGF5OwotfQotCi1uYW1lc3BhY2UgZ2wK
LXsKLQotY2xhc3MgRmVuY2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IEZlbmNlKGVnbDo6
RGlzcGxheSogZGlzcGxheSk7Ci0gICAgdmlydHVhbCB+RmVuY2UoKTsKLQotICAgIEdMYm9vbGVh
biBpc0ZlbmNlKCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKLSAgICBH
TGJvb2xlYW4gdGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZvaWQg
Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlKTsKLQotICAgIGVnbDo6RGlzcGxheSog
bURpc3BsYXk7Ci0gICAgSURpcmVjdDNEUXVlcnk5KiBtUXVlcnk7Ci0gICAgR0xlbnVtIG1Db25k
aXRpb247Ci0gICAgR0xib29sZWFuIG1TdGF0dXM7Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9GRU5DRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzZkNDI4My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0ZyYW1lYnVmZmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUwOSArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBGcmFtZWJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpG
cmFtZWJ1ZmZlciBjbGFzcy4gSW1wbGVtZW50cyBHTCBmcmFtZWJ1ZmZlcgotLy8gb2JqZWN0cyBh
bmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQg
cGFnZSAxMDUuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0
aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVy
KCkKLXsKLSAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICBtRGVwdGhidWZmZXJU
eXBlID0gR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotfQotCi1G
cmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKCkKLXsKLSAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICBtU3RlbmNp
bGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1OdWxsQ29sb3JidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKLX0KLQotUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6bG9va3VwUmVuZGVyYnVm
ZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgaGFuZGxlKSBjb25zdAotewotICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5kZXJidWZmZXIgKmJ1ZmZlciA9
IE5VTEw7Ci0KLSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgYnVmZmVy
ID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0g
ICAgewotICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodHlwZSkpCi0gICAg
ewotICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldFJlbmRl
cmJ1ZmZlcih0eXBlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi12b2lkIEZyYW1lYnVmZmVy
OjpzZXRDb2xvcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyKQotewotICAg
IG1Db2xvcmJ1ZmZlclR5cGUgPSAoY29sb3JidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsK
LSAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29s
b3JidWZmZXIpKTsKLX0KLQotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVt
IHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKLXsKLSAgICBtRGVwdGhidWZmZXJUeXBlID0gKGRl
cHRoYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbURlcHRoYnVmZmVyUG9pbnRl
ci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGRlcHRoYnVmZmVyKSk7Ci19Ci0KLXZvaWQg
RnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2ls
YnVmZmVyKQotewotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IChzdGVuY2lsYnVmZmVyICE9IDAp
ID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChsb29rdXBS
ZW5kZXJidWZmZXIodHlwZSwgc3RlbmNpbGJ1ZmZlcikpOwotfQotCi12b2lkIEZyYW1lYnVmZmVy
OjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQotewotICAgIGlmIChtQ29sb3JidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3Ji
dWZmZXJUeXBlKSkKLSAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOwot
ICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAo
bURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCi0gICAgewotICAgICAgICBtRGVwdGhidWZmZXJUeXBl
ID0gR0xfTk9ORTsKLSAgICAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAg
fQotCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKLSAgICB7Ci0gICAgICAg
IG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyUG9p
bnRlci5zZXQoTlVMTCk7Ci0gICAgfQotfQotCi12b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hSZW5k
ZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAobUNvbG9yYnVmZmVyUG9p
bnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKLSAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAg
ICAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobURl
cHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhidWZmZXJUeXBl
ID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBH
TF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci0K
LSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1T
dGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgewotICAgICAgICBtU3Rl
bmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29s
b3JidWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGNvbG9yYnVmZmVyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbG9yYnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVy
IG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAq
RnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpjb2xv
cmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAoY29sb3JidWZm
ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgp
OwotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsK
LSAgICBSZW5kZXJidWZmZXIgKmRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50
ZXIuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKCFkZXB0aHN0ZW5jaWxidWZmZXIpCi0gICAgewotICAg
ICAgICBkZXB0aHN0ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0g
ICAgfQotCi0gICAgaWYgKGRlcHRoc3RlbmNpbGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBkZXB0aHN0ZW5jaWxidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotICAgIH0KLQotICAgIHJl
dHVybiBOVUxMOwotfQotCi11bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
U2VyaWFsKCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gbURlcHRoYnVmZmVy
UG9pbnRlci5nZXQoKTsKLQotICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclNlcmlhbCgpCi17
Ci0gICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVy
LmdldCgpOwotCi0gICAgaWYgKHN0ZW5jaWxidWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
c3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyKCkKLXsKLSAgICByZXR1
cm4gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKLX0KLQotUmVuZGVyYnVmZmVyICpGcmFtZWJ1
ZmZlcjo6Z2V0RGVwdGhidWZmZXIoKQotewotICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVy
LmdldCgpOwotfQotCi1SZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVy
KCkKLXsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOwotfQotCi1SZW5k
ZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXROdWxsQ29sb3JidWZmZXIoKQotewotICAgIFJlbmRl
cmJ1ZmZlciAqbnVsbGJ1ZmZlciAgPSBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAg
ICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKLQotICAgIGlm
ICghZGVwdGhidWZmZXIpCi0gICAgewotICAgICAgICBFUlIoIlVuZXhwZWN0ZWQgbnVsbCBkZXB0
aGJ1ZmZlciBmb3IgZGVwdGgtb25seSBGQk8uIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAg
IH0KLQotICAgIEdMc2l6ZWkgd2lkdGggID0gZGVwdGhidWZmZXItPmdldFdpZHRoKCk7Ci0gICAg
R0xzaXplaSBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoIW51
bGxidWZmZXIgfHwKLSAgICAgICAgd2lkdGggIT0gbnVsbGJ1ZmZlci0+Z2V0V2lkdGgoKSB8fCBo
ZWlnaHQgIT0gbnVsbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICBudWxsYnVm
ZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigwLCBuZXcgQ29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwg
R0xfTk9ORSwgMCkpOwotICAgICAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQobnVsbGJ1
ZmZlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxidWZmZXI7Ci19Ci0KLUdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBlKCkKLXsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVy
VHlwZTsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUoKQotewot
ICAgIHJldHVybiBtRGVwdGhidWZmZXJUeXBlOwotfQotCi1HTGVudW0gRnJhbWVidWZmZXI6Omdl
dFN0ZW5jaWxidWZmZXJUeXBlKCkKLXsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJUeXBlOwot
fQotCi1HTHVpbnQgRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKCkKLXsKLSAgICBy
ZXR1cm4gbUNvbG9yYnVmZmVyUG9pbnRlci5pZCgpOwotfQotCi1HTHVpbnQgRnJhbWVidWZmZXI6
OmdldERlcHRoYnVmZmVySGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRl
ci5pZCgpOwotfQotCi1HTHVpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUo
KQotewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKTsKLX0KLQotYm9vbCBG
cmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCi17Ci0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAh
PSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2Jq
ZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwotCi0gICAgICAgIGlmIChzdGVuY2lsYnVmZmVyT2Jq
ZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlck9iamVjdC0+
Z2V0U3RlbmNpbFNpemUoKSA+IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLUdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKLXsKLSAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0gICAgaW50IHdpZHRoID0gMDsK
LSAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBpbnQgc2FtcGxlcyA9IC0xOwotICAgIGJvb2wgbWlz
c2luZ0F0dGFjaG1lbnQgPSB0cnVlOwotCi0gICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgIT0gR0xf
Tk9ORSkKLSAgICB7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xv
cmJ1ZmZlcigpOwotCi0gICAgICAgIGlmICghY29sb3JidWZmZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBjb2xv
cmJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmFibGUoY29sb3JidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVm
ZmVyVHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9
IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAgRDNERk9STUFU
IGQzZGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICAgICAg
aWYgKElzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCkgfHwKLSAgICAgICAgICAgICAgICBpbnRl
cm5hbGZvcm1hdCA9PSBHTF9BTFBIQSB8fAotICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0
ID09IEdMX0xVTUlOQU5DRSB8fAotICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdM
X0xVTUlOQU5DRV9BTFBIQSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICgoZHgyZXM6OklzRmxvYXQzMkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBw
b3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSkgfHwKLSAgICAgICAgICAgICAgICAoZHgy
ZXM6OklzRmxvYXQxNkZvcm1hdChkM2Rmb3JtYXQpICYmICFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0
MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoZHgyZXM6OklzRGVwdGhUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkgfHwgZHgy
ZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICB3aWR0aCA9IGNv
bG9yYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0
SGVpZ2h0KCk7Ci0gICAgICAgIHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwot
ICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwotICAgIH0KLQotICAgIFJlbmRlcmJ1
ZmZlciAqZGVwdGhidWZmZXIgPSBOVUxMOwotICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZl
ciA9IE5VTEw7Ci0KLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQotICAgIHsK
LSAgICAgICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwotCi0gICAgICAgIGlmICgh
ZGVwdGhidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVwdGhi
dWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09
IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0
aFJlbmRlcmFibGUoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7
Ci0KLSAgICAgICAgICAgIC8vIGRlcHRoIHRleHR1cmUgYXR0YWNobWVudHMgcmVxdWlyZSBPRVMv
QU5HTEVfZGVwdGhfdGV4dHVyZQotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Rl
cHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIWR4MmVzOjpJc0RlcHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgd2lkdGgg
PSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IGRlcHRoYnVm
ZmVyLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgICAgIHNhbXBsZXMgPSBkZXB0aGJ1ZmZlci0+Z2V0
U2FtcGxlcygpOwotICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmICh3aWR0aCAhPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSB8
fCBoZWlnaHQgIT0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gZGVwdGhidWZmZXItPmdldFNhbXBsZXMo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTVVMVElTQU1QTEVfQU5HTEU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5j
aWxidWZmZXJUeXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBzdGVuY2lsYnVmZmVyID0g
Z2V0U3RlbmNpbGJ1ZmZlcigpOwotCi0gICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgp
ID09IDAgfHwgc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVG
RkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxl
KHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRl
eHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAg
RDNERk9STUFUIGQzZGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEQzREZvcm1hdCgpOwotCi0g
ICAgICAgICAgICAvLyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBw
YXJ0Ci0gICAgICAgICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5H
TEVfZGVwdGhfdGV4dHVyZQotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRo
VGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoIWR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWR0aCA9
IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBzdGVuY2ls
YnVmZmVyLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgICAgIHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVy
LT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdp
ZHRoKCkgfHwgaGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05T
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+
Z2V0U2FtcGxlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIGlmIHdlIGhhdmUgYm90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgdGhleSBtdXN0
IHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdAotICAgIC8vIHNpbmNlIHdlIG9ubHkgc3VwcG9ydCBw
YWNrZWRfZGVwdGhfc3RlbmNpbCBhbmQgbm90IHNlcGFyYXRlIGRlcHRoIGFuZCBzdGVuY2lsCi0g
ICAgaWYgKGRlcHRoYnVmZmVyICYmIHN0ZW5jaWxidWZmZXIgJiYgKGRlcHRoYnVmZmVyICE9IHN0
ZW5jaWxidWZmZXIpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOwotICAgIH0KLQotICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYXR0
YWNobWVudCB0byBiZSBjb21wbGV0ZQotICAgIGlmIChtaXNzaW5nQXR0YWNobWVudCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNI
TUVOVDsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7Ci19Ci0K
LURlZmF1bHRGcmFtZWJ1ZmZlcjo6RGVmYXVsdEZyYW1lYnVmZmVyKENvbG9yYnVmZmVyICpjb2xv
cmJ1ZmZlciwgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWwpCi17Ci0gICAgbUNvbG9y
YnVmZmVyUG9pbnRlci5zZXQobmV3IFJlbmRlcmJ1ZmZlcigwLCBjb2xvcmJ1ZmZlcikpOwotCi0g
ICAgUmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIgPSBuZXcgUmVuZGVyYnVm
ZmVyKDAsIGRlcHRoU3RlbmNpbCk7Ci0gICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoZGVwdGhT
dGVuY2lsUmVuZGVyYnVmZmVyKTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGRlcHRo
U3RlbmNpbFJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfUkVOREVS
QlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVy
LT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0gICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNp
bFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci19Ci0KLWludCBGcmFt
ZWJ1ZmZlcjo6Z2V0U2FtcGxlcygpCi17Ci0gICAgaWYgKGNvbXBsZXRlbmVzcygpID09IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldENvbG9yYnVmZmVy
KCktPmdldFNhbXBsZXMoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotfQotCi1HTGVudW0gRGVmYXVsdEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3Mo
KQotewotICAgIC8vIFRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBhbHdheXMgYmUgY29t
cGxldGUKLSAgICBBU1NFUlQoRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKTsKLQotICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQ5YzJhLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZm
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIEZyYW1lYnVmZmVyLmg6IERlZmluZXMgdGhlIGdsOjpGcmFtZWJ1ZmZlciBjbGFzcy4gSW1w
bGVtZW50cyBHTCBmcmFtZWJ1ZmZlcgotLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFs
aXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDUuCi0KLSNpZm5kZWYg
TElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9GUkFNRUJVRkZFUl9I
XwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRl
IDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNv
bW1vbi9SZWZDb3VudE9iamVjdC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFJlbmRlcmJ1
ZmZlcjsKLWNsYXNzIENvbG9yYnVmZmVyOwotY2xhc3MgRGVwdGhidWZmZXI7Ci1jbGFzcyBTdGVu
Y2lsYnVmZmVyOwotY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotCi1jbGFzcyBGcmFtZWJ1ZmZl
cgotewotICBwdWJsaWM6Ci0gICAgRnJhbWVidWZmZXIoKTsKLQotICAgIHZpcnR1YWwgfkZyYW1l
YnVmZmVyKCk7Ci0KLSAgICB2b2lkIHNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQg
Y29sb3JidWZmZXIpOwotICAgIHZvaWQgc2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWlu
dCBkZXB0aGJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRTdGVuY2lsYnVmZmVyKEdMZW51bSB0eXBlLCBH
THVpbnQgc3RlbmNpbGJ1ZmZlcik7Ci0KLSAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRl
eHR1cmUpOwotICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIp
OwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOwotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgIHVuc2lnbmVkIGludCBnZXRS
ZW5kZXJUYXJnZXRTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0RGVwdGhidWZmZXJTZXJp
YWwoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0U3RlbmNpbGJ1ZmZlclNlcmlhbCgpOwotCi0gICAg
UmVuZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVw
dGhidWZmZXIoKTsKLSAgICBSZW5kZXJidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICBS
ZW5kZXJidWZmZXIgKmdldE51bGxDb2xvcmJ1ZmZlcigpOwotCi0gICAgR0xlbnVtIGdldENvbG9y
YnVmZmVyVHlwZSgpOwotICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKTsKLSAgICBHTGVu
dW0gZ2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKLQotICAgIEdMdWludCBnZXRDb2xvcmJ1ZmZlckhh
bmRsZSgpOwotICAgIEdMdWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwotICAgIEdMdWludCBn
ZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7Ci0KLSAgICBib29sIGhhc1N0ZW5jaWwoKTsKLSAgICBp
bnQgZ2V0U2FtcGxlcygpOwotCi0gICAgdmlydHVhbCBHTGVudW0gY29tcGxldGVuZXNzKCk7Ci0K
LSAgcHJvdGVjdGVkOgotICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVmZmVyUG9pbnRlcjsKLQotICAgIEdMZW51bSBt
RGVwdGhidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbURlcHRo
YnVmZmVyUG9pbnRlcjsKLQotICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7Ci0gICAgQmlu
ZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXI7Ci0KLSAgICBC
aW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1OdWxsQ29sb3JidWZmZXJQb2ludGVyOwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKLQot
ICAgIFJlbmRlcmJ1ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQg
aGFuZGxlKSBjb25zdDsKLX07Ci0KLWNsYXNzIERlZmF1bHRGcmFtZWJ1ZmZlciA6IHB1YmxpYyBG
cmFtZWJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgRGVmYXVsdEZyYW1lYnVmZmVyKENvbG9yYnVm
ZmVyICpjb2xvcmJ1ZmZlciwgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWwpOwotCi0g
ICAgdmlydHVhbCBHTGVudW0gY29tcGxldGVuZXNzKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oRGVmYXVsdEZyYW1lYnVmZmVyKTsKLX07Ci0KLX0KLQotI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX0ZSQU1FQlVGRkVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OThmOGEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSGFuZGxlQWxs
b2NhdG9yLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkhhbmRsZUFsbG9jYXRvciBjbGFzcywgd2hp
Y2ggaXMgdXNlZAotLy8gdG8gYWxsb2NhdGUgR0wgaGFuZGxlcy4KLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9IYW5kbGVBbGxvY2F0b3IuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0K
LW5hbWVzcGFjZSBnbAotewotCi1IYW5kbGVBbGxvY2F0b3I6OkhhbmRsZUFsbG9jYXRvcigpIDog
bUJhc2VWYWx1ZSgxKSwgbU5leHRWYWx1ZSgxKQotewotfQotCi1IYW5kbGVBbGxvY2F0b3I6On5I
YW5kbGVBbGxvY2F0b3IoKQotewotfQotCi12b2lkIEhhbmRsZUFsbG9jYXRvcjo6c2V0QmFzZUhh
bmRsZShHTHVpbnQgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1CYXNlVmFsdWUgPT0gbU5leHRWYWx1
ZSk7Ci0gICAgbUJhc2VWYWx1ZSA9IHZhbHVlOwotICAgIG1OZXh0VmFsdWUgPSB2YWx1ZTsKLX0K
LQotR0x1aW50IEhhbmRsZUFsbG9jYXRvcjo6YWxsb2NhdGUoKQotewotICAgIGlmIChtRnJlZVZh
bHVlcy5zaXplKCkpCi0gICAgewotICAgICAgICBHTHVpbnQgaGFuZGxlID0gbUZyZWVWYWx1ZXMu
YmFjaygpOwotICAgICAgICBtRnJlZVZhbHVlcy5wb3BfYmFjaygpOwotICAgICAgICByZXR1cm4g
aGFuZGxlOwotICAgIH0KLSAgICByZXR1cm4gbU5leHRWYWx1ZSsrOwotfQotCi12b2lkIEhhbmRs
ZUFsbG9jYXRvcjo6cmVsZWFzZShHTHVpbnQgaGFuZGxlKQotewotICAgIGlmIChoYW5kbGUgPT0g
bU5leHRWYWx1ZSAtIDEpCi0gICAgewotICAgICAgICAvLyBEb24ndCBkcm9wIGJlbG93IGJhc2Ug
dmFsdWUKLSAgICAgICAgaWYobU5leHRWYWx1ZSA+IG1CYXNlVmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1OZXh0VmFsdWUtLTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICAvLyBPbmx5IGZyZWUgaGFuZGxlcyB0aGF0IHdlIG93biAtIGRvbid0IGRyb3Ag
YmVsb3cgdGhlIGJhc2UgdmFsdWUKLSAgICAgICAgaWYgKGhhbmRsZSA+PSBtQmFzZVZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtRnJlZVZhbHVlcy5wdXNoX2JhY2soaGFuZGxlKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE5MmUxNjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEhhbmRsZUFsbG9jYXRvci5oOiBEZWZpbmVz
IHRoZSBnbDo6SGFuZGxlQWxsb2NhdG9yIGNsYXNzLCB3aGljaCBpcyB1c2VkIHRvCi0vLyBhbGxv
Y2F0ZSBHTCBoYW5kbGVzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9IQU5ETEVBTExPQ0FUT1JfSF8K
LSNkZWZpbmUgTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwotCi0jZGVmaW5lIEdMX0FQSUNB
TEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBIYW5k
bGVBbGxvY2F0b3IKLXsKLSAgcHVibGljOgotICAgIEhhbmRsZUFsbG9jYXRvcigpOwotICAgIHZp
cnR1YWwgfkhhbmRsZUFsbG9jYXRvcigpOwotCi0gICAgdm9pZCBzZXRCYXNlSGFuZGxlKEdMdWlu
dCB2YWx1ZSk7Ci0KLSAgICBHTHVpbnQgYWxsb2NhdGUoKTsKLSAgICB2b2lkIHJlbGVhc2UoR0x1
aW50IGhhbmRsZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
SGFuZGxlQWxsb2NhdG9yKTsKLQotICAgIEdMdWludCBtQmFzZVZhbHVlOwotICAgIEdMdWludCBt
TmV4dFZhbHVlOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8R0x1aW50PiBIYW5kbGVMaXN0Owot
ICAgIEhhbmRsZUxpc3QgbUZyZWVWYWx1ZXM7Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdM
RVNWMl9IQU5ETEVBTExPQ0FUT1JfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzZGMwYWVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0NzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW5kZXhEYXRhTWFuYWdl
ci5jcHA6IERlZmluZXMgdGhlIEluZGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAotLy8gcnVu
cyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MgZm9yIGluZGV4IGJ1ZmZlcnMuCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oIgotCi0jaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNw
YWNlIGdsCi17Ci11bnNpZ25lZCBpbnQgSW5kZXhCdWZmZXI6Om1DdXJyZW50U2VyaWFsID0gMTsK
LQotSW5kZXhEYXRhTWFuYWdlcjo6SW5kZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogbURldmljZShkZXZpY2UpCi17Ci0gICAgbVN0cmVh
bWluZ0J1ZmZlclNob3J0ID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJ
QUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDE2KTsKLQotICAgIGlmIChjb250ZXh0
LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQotICAgIHsKLSAgICAgICAgbVN0cmVhbWluZ0J1ZmZl
ckludCA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JV
RkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgzMik7Ci0KLSAgICAgICAgaWYgKCFtU3RyZWFtaW5nQnVm
ZmVySW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBEb24ndCBsZWF2ZSBpdCBpbiBhIGhh
bGYtaW5pdGlhbGl6ZWQgc3RhdGUKLSAgICAgICAgICAgIGRlbGV0ZSBtU3RyZWFtaW5nQnVmZmVy
U2hvcnQ7Ci0gICAgICAgICAgICBtU3RyZWFtaW5nQnVmZmVyU2hvcnQgPSBOVUxMOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1TdHJlYW1pbmdCdWZmZXJJbnQg
PSBOVUxMOwotICAgIH0KLQotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlclNob3J0KQotICAgIHsK
LSAgICAgICAgRVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUgdGhlIHN0cmVhbWluZyBpbmRleCBidWZm
ZXIocykuIik7Ci0gICAgfQotCi0gICAgbUNvdW50aW5nQnVmZmVyID0gTlVMTDsKLX0KLQotSW5k
ZXhEYXRhTWFuYWdlcjo6fkluZGV4RGF0YU1hbmFnZXIoKQotewotICAgIGRlbGV0ZSBtU3RyZWFt
aW5nQnVmZmVyU2hvcnQ7Ci0gICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJJbnQ7Ci0gICAgZGVs
ZXRlIG1Db3VudGluZ0J1ZmZlcjsKLX0KLQotdm9pZCBjb252ZXJ0SW5kaWNlcyhHTGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCAqaW5wdXQsIEdMc2l6ZWkgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAg
ICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgY29uc3QgR0x1
Ynl0ZSAqaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5wdXQpOwotICAgICAgICBH
THVzaG9ydCAqb3V0ID0gc3RhdGljX2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOwotCi0gICAgICAg
IGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG91dFtpXSA9IGluW2ldOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUg
PT0gR0xfVU5TSUdORURfSU5UKQotICAgIHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQs
IGNvdW50ICogc2l6ZW9mKEdMdWludCkpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdM
X1VOU0lHTkVEX1NIT1JUKQotICAgIHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNv
dW50ICogc2l6ZW9mKEdMdXNob3J0KSk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIEluZGV4VHlwZT4KLXZvaWQgY29tcHV0ZVJhbmdlKGNvbnN0
IEluZGV4VHlwZSAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0x1aW50ICptaW5JbmRleCwgR0x1
aW50ICptYXhJbmRleCkKLXsKLSAgICAqbWluSW5kZXggPSBpbmRpY2VzWzBdOwotICAgICptYXhJ
bmRleCA9IGluZGljZXNbMF07Ci0KLSAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgIHsKLSAgICAgICAgaWYgKCptaW5JbmRleCA+IGluZGljZXNbaV0pICptaW5JbmRl
eCA9IGluZGljZXNbaV07Ci0gICAgICAgIGlmICgqbWF4SW5kZXggPCBpbmRpY2VzW2ldKSAqbWF4
SW5kZXggPSBpbmRpY2VzW2ldOwotICAgIH0KLX0KLQotdm9pZCBjb21wdXRlUmFuZ2UoR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0x1aW50ICptaW5J
bmRleCwgR0x1aW50ICptYXhJbmRleCkKLXsKLSAgICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFKQotICAgIHsKLSAgICAgICAgY29tcHV0ZVJhbmdlKHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihpbmRpY2VzKSwgY291bnQsIG1pbkluZGV4LCBtYXhJbmRleCk7Ci0gICAgfQotICAgIGVs
c2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQotICAgIHsKLSAgICAgICAgY29tcHV0ZVJh
bmdlKHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpLCBjb3VudCwgbWluSW5kZXgs
IG1heEluZGV4KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9S
VCkKLSAgICB7Ci0gICAgICAgIGNvbXB1dGVSYW5nZShzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9y
dCo+KGluZGljZXMpLCBjb3VudCwgbWluSW5kZXgsIG1heEluZGV4KTsKLSAgICB9Ci0gICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotfQotCi1HTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUlu
ZGV4RGF0YShHTGVudW0gdHlwZSwgR0xzaXplaSBjb3VudCwgQnVmZmVyICpidWZmZXIsIGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgVHJhbnNsYXRlZEluZGV4RGF0YSAqdHJhbnNsYXRlZCkKLXsKLSAg
ICBpZiAoIW1TdHJlYW1pbmdCdWZmZXJTaG9ydCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9P
VVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAgIEQzREZPUk1BVCBmb3JtYXQgPSAodHlwZSA9PSBH
TF9VTlNJR05FRF9JTlQpID8gRDNERk1UX0lOREVYMzIgOiBEM0RGTVRfSU5ERVgxNjsKLSAgICBp
bnRwdHJfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKLSAg
ICBib29sIGFsaWduZWRPZmZzZXQgPSBmYWxzZTsKLQotICAgIGlmIChidWZmZXIgIT0gTlVMTCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURTogIGFsaWduZWRPZmZzZXQgPSAob2Zmc2V0ICUgc2l6ZW9mKEdMdWJ5
dGUpID09IDApOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogYWxp
Z25lZE9mZnNldCA9IChvZmZzZXQgJSBzaXplb2YoR0x1c2hvcnQpID09IDApOyBicmVhazsKLSAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICBhbGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAl
IHNpemVvZihHTHVpbnQpID09IDApOyAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IGFsaWduZWRPZmZzZXQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0eXBlU2l6ZSh0eXBlKSAqIGNvdW50ICsgb2Zmc2V0ID4gc3RhdGljX2Nhc3Q8c3RkOjpzaXpl
X3Q+KGJ1ZmZlci0+c2l6ZSgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0lO
VkFMSURfT1BFUkFUSU9OOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19j
YXN0PGNvbnN0IEdMdWJ5dGUqPihidWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0g
ICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKnN0cmVhbWluZ0J1ZmZlciA9ICh0eXBlID09IEdMX1VO
U0lHTkVEX0lOVCkgPyBtU3RyZWFtaW5nQnVmZmVySW50IDogbVN0cmVhbWluZ0J1ZmZlclNob3J0
OwotCi0gICAgU3RhdGljSW5kZXhCdWZmZXIgKnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZl
ci0+Z2V0U3RhdGljSW5kZXhCdWZmZXIoKSA6IE5VTEw7Ci0gICAgSW5kZXhCdWZmZXIgKmluZGV4
QnVmZmVyID0gc3RyZWFtaW5nQnVmZmVyOwotICAgIFVJTlQgc3RyZWFtT2Zmc2V0ID0gMDsKLQot
ICAgIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5sb29rdXBUeXBlKHR5cGUpICYm
IGFsaWduZWRPZmZzZXQpCi0gICAgewotICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZl
cjsKLSAgICAgICAgc3RyZWFtT2Zmc2V0ID0gc3RhdGljQnVmZmVyLT5sb29rdXBSYW5nZShvZmZz
ZXQsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7
Ci0KLSAgICAgICAgaWYgKHN0cmVhbU9mZnNldCA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAg
ICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIHR5cGVTaXplKHR5cGUpKSAqIGluZGV4U2l6ZShm
b3JtYXQpOwotICAgICAgICAgICAgY29tcHV0ZVJhbmdlKHR5cGUsIGluZGljZXMsIGNvdW50LCAm
dHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7Ci0gICAgICAgICAg
ICBzdGF0aWNCdWZmZXItPmFkZFJhbmdlKG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbklu
ZGV4LCB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpbnQgY29udmVydENvdW50ID0gY291bnQ7Ci0K
LSAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0
YXRpY0J1ZmZlci0+c2l6ZSgpID09IDAgJiYgYWxpZ25lZE9mZnNldCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKLSAgICAgICAgICAg
ICAgICBjb252ZXJ0Q291bnQgPSBidWZmZXItPnNpemUoKSAvIHR5cGVTaXplKHR5cGUpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJ1ZmZlci0+aW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICAgICAgICAgICAgICBzdGF0
aWNCdWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCAqb3V0cHV0ID0gTlVMTDsKLSAgICAgICAgCi0gICAgICAgIGlmIChpbmRleEJ1ZmZlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgaW5kZXhCdWZmZXItPnJlc2VydmVTcGFjZShjb252ZXJ0Q291
bnQgKiBpbmRleFNpemUoZm9ybWF0KSwgdHlwZSk7Ci0gICAgICAgICAgICBvdXRwdXQgPSBpbmRl
eEJ1ZmZlci0+bWFwKGluZGV4U2l6ZShmb3JtYXQpICogY29udmVydENvdW50LCAmc3RyZWFtT2Zm
c2V0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG91dHB1dCA9PSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgaW5kZXggYnVmZmVyLiIp
OwotICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjb252ZXJ0SW5kaWNlcyh0eXBlLCBzdGF0aWNCdWZmZXIgPyBidWZmZXItPmRhdGEoKSA6
IGluZGljZXMsIGNvbnZlcnRDb3VudCwgb3V0cHV0KTsKLSAgICAgICAgaW5kZXhCdWZmZXItPnVu
bWFwKCk7Ci0KLSAgICAgICAgY29tcHV0ZVJhbmdlKHR5cGUsIGluZGljZXMsIGNvdW50LCAmdHJh
bnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7Ci0KLSAgICAgICAgaWYg
KHN0YXRpY0J1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9m
ZnNldCAvIHR5cGVTaXplKHR5cGUpKSAqIGluZGV4U2l6ZShmb3JtYXQpOwotICAgICAgICAgICAg
c3RhdGljQnVmZmVyLT5hZGRSYW5nZShvZmZzZXQsIGNvdW50LCB0cmFuc2xhdGVkLT5taW5JbmRl
eCwgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB0cmFuc2xhdGVkLT5pbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyLT5nZXRCdWZmZXIo
KTsKLSAgICB0cmFuc2xhdGVkLT5zZXJpYWwgPSBpbmRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0g
ICAgdHJhbnNsYXRlZC0+c3RhcnRJbmRleCA9IHN0cmVhbU9mZnNldCAvIGluZGV4U2l6ZShmb3Jt
YXQpOwotCi0gICAgaWYgKGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJ1ZmZlci0+cHJvbW90ZVN0
YXRpY1VzYWdlKGNvdW50ICogdHlwZVNpemUodHlwZSkpOwotICAgIH0KLQotICAgIHJldHVybiBH
TF9OT19FUlJPUjsKLX0KLQotc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXpl
KEQzREZPUk1BVCBmb3JtYXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChmb3JtYXQgPT0gRDNERk1U
X0lOREVYMzIpID8gc2l6ZW9mKHVuc2lnbmVkIGludCkgOiBzaXplb2YodW5zaWduZWQgc2hvcnQp
OwotfQotCi1zdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVudW0gdHlw
ZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6ICAgcmV0dXJuIHNpemVvZihHTHVpbnQpOwotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDogcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6ICByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgcmV0dXJuIHNpemVvZihHTHVzaG9ydCk7Ci0gICAgfQotfQotCi1TdGF0aWNJbmRleEJ1
ZmZlciAqSW5kZXhEYXRhTWFuYWdlcjo6Z2V0Q291bnRpbmdJbmRpY2VzKEdMc2l6ZWkgY291bnQp
Ci17Ci0gICAgaWYgKGNvdW50IDw9IDY1NTM2KSAgIC8vIDE2LWJpdCBpbmRpY2VzCi0gICAgewot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSBjb3VudCAqIHNpemVvZih1
bnNpZ25lZCBzaG9ydCk7Ci0KLSAgICAgICAgaWYgKCFtQ291bnRpbmdCdWZmZXIgfHwgbUNvdW50
aW5nQnVmZmVyLT5zaXplKCkgPCBzcGFjZU5lZWRlZCkKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVsZXRlIG1Db3VudGluZ0J1ZmZlcjsKLSAgICAgICAgICAgIG1Db3VudGluZ0J1ZmZlciA9IG5l
dyBTdGF0aWNJbmRleEJ1ZmZlcihtRGV2aWNlKTsKLSAgICAgICAgICAgIG1Db3VudGluZ0J1ZmZl
ci0+cmVzZXJ2ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9TSE9SVCk7Ci0KLSAgICAg
ICAgICAgIFVJTlQgb2Zmc2V0OwotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKmRhdGEgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1Db3VudGluZ0J1ZmZlci0+bWFwKHNwYWNlTmVl
ZGVkLCAmb2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtQ291bnRpbmdCdWZmZXItPnVubWFwKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAobVN0cmVhbWlu
Z0J1ZmZlckludCkgICAvLyAzMi1iaXQgaW5kaWNlcyBzdXBwb3J0ZWQKLSAgICB7Ci0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IGNvdW50ICogc2l6ZW9mKHVuc2lnbmVk
IGludCk7Ci0KLSAgICAgICAgaWYgKCFtQ291bnRpbmdCdWZmZXIgfHwgbUNvdW50aW5nQnVmZmVy
LT5zaXplKCkgPCBzcGFjZU5lZWRlZCkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1D
b3VudGluZ0J1ZmZlcjsKLSAgICAgICAgICAgIG1Db3VudGluZ0J1ZmZlciA9IG5ldyBTdGF0aWNJ
bmRleEJ1ZmZlcihtRGV2aWNlKTsKLSAgICAgICAgICAgIG1Db3VudGluZ0J1ZmZlci0+cmVzZXJ2
ZVNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQpOwotCi0gICAgICAgICAgICBVSU5U
IG9mZnNldDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludCo+KG1Db3VudGluZ0J1ZmZlci0+bWFwKHNwYWNlTmVlZGVkLCAmb2Zmc2V0KSk7
Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbUNvdW50aW5nQnVmZmVyLT51bm1hcCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgcmV0dXJuIE5VTEw7
Ci0gICAgCi0gICAgcmV0dXJuIG1Db3VudGluZ0J1ZmZlcjsKLX0KLQotSW5kZXhCdWZmZXI6Oklu
ZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlOVCBzaXplLCBEM0RGT1JNQVQg
Zm9ybWF0KSA6IG1EZXZpY2UoZGV2aWNlKSwgbUJ1ZmZlclNpemUoc2l6ZSksIG1JbmRleEJ1ZmZl
cihOVUxMKQotewotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIEQzRFBPT0wgcG9v
bCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNB
R0VfV1JJVEVPTkxZKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlu
ZGV4QnVmZmVyKHNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIGZv
cm1hdCwgcG9vbCwgJm1JbmRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1
ZVNlcmlhbCgpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYW4gaW5kZXggYnVmZmVyIG9m
IHNpemUgJWx1LiIsIHNpemUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbmRleEJ1ZmZlcjo6
fkluZGV4QnVmZmVyKCkKLXsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAg
bUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1JRGlyZWN0M0RJbmRleEJ1ZmZl
cjkgKkluZGV4QnVmZmVyOjpnZXRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBtSW5kZXhC
dWZmZXI7Ci19Ci0KLXVuc2lnbmVkIGludCBJbmRleEJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IEluZGV4QnVmZmVyOjpp
c3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXZvaWQg
SW5kZXhCdWZmZXI6OnVubWFwKCkKLXsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAg
ICAgICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKLSAgICB9Ci19Ci0KLVN0cmVhbWluZ0luZGV4
QnVmZmVyOjpTdHJlYW1pbmdJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFVJ
TlQgaW5pdGlhbFNpemUsIEQzREZPUk1BVCBmb3JtYXQpIDogSW5kZXhCdWZmZXIoZGV2aWNlLCBp
bml0aWFsU2l6ZSwgZm9ybWF0KQotewotICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKLX0KLQotU3Ry
ZWFtaW5nSW5kZXhCdWZmZXI6On5TdHJlYW1pbmdJbmRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQg
KlN0cmVhbWluZ0luZGV4QnVmZmVyOjptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZz
ZXQpCi17Ci0gICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKLQotICAgIGlmIChtSW5kZXhCdWZmZXIp
Ci0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jayhtV3Jp
dGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7
Ci0gICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiIExvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgKm9mZnNldCA9IG1Xcml0
ZVBvc2l0aW9uOwotICAgICAgICBtV3JpdGVQb3NpdGlvbiArPSByZXF1aXJlZFNwYWNlOwotICAg
IH0KLQotICAgIHJldHVybiBtYXBQdHI7Ci19Ci0KLXZvaWQgU3RyZWFtaW5nSW5kZXhCdWZmZXI6
OnJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UsIEdMZW51bSB0eXBlKQotewotICAgIGlm
IChyZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCi0gICAgewotICAgICAgICBpZiAobUluZGV4
QnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBt
QnVmZmVyU2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDIgKiBtQnVmZmVyU2l6ZSk7Ci0K
LSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVT
QUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZUluZGV4QnVmZmVyKG1CdWZmZXJTaXplLCBEM0RVU0FHRV9EWU5B
TUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCA/IEQzREZN
VF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2wsICZtSW5kZXhCdWZmZXIsIE5VTEwpOwot
ICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKLSAgICAKLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxs
b2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgbUJ1ZmZlclNpemUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbVdyaXRlUG9zaXRpb24gPSAwOwotICAgIH0KLSAgICBlbHNlIGlm
IChtV3JpdGVQb3NpdGlvbiArIHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkgICAvLyBSZWN5
Y2xlCi0gICAgewotICAgICAgICB2b2lkICpkdW1teTsKLSAgICAgICAgbUluZGV4QnVmZmVyLT5M
b2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKLSAgICAgICAgbUluZGV4QnVmZmVy
LT5VbmxvY2soKTsKLQotICAgICAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Ci0gICAgfQotfQotCi1T
dGF0aWNJbmRleEJ1ZmZlcjo6U3RhdGljSW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlKSA6IEluZGV4QnVmZmVyKGRldmljZSwgMCwgRDNERk1UX1VOS05PV04pCi17Ci0gICAgbUNh
Y2hlVHlwZSA9IEdMX05PTkU7Ci19Ci0KLVN0YXRpY0luZGV4QnVmZmVyOjp+U3RhdGljSW5kZXhC
dWZmZXIoKQotewotfQotCi12b2lkICpTdGF0aWNJbmRleEJ1ZmZlcjo6bWFwKFVJTlQgcmVxdWly
ZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KQotewotICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0KLSAg
ICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtSW5k
ZXhCdWZmZXItPkxvY2soMCwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgMCk7Ci0gICAgIAotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiIExv
Y2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVy
biBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgKm9mZnNldCA9IDA7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBTdGF0aWNJbmRleEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNl
KFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKCFtSW5kZXhCdWZm
ZXIgJiYgbUJ1ZmZlclNpemUgPT0gMCkKLSAgICB7Ci0gICAgICAgIEQzRFBPT0wgcG9vbCA9IGdl
dERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9XUklURU9OTFkpOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUluZGV4QnVmZmVyKHJlcXVpcmVkU3BhY2Us
IEQzRFVTQUdFX1dSSVRFT05MWSwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlQgPyBEM0RGTVRfSU5E
RVgzMiA6IEQzREZNVF9JTkRFWDE2LCBwb29sLCAmbUluZGV4QnVmZmVyLCBOVUxMKTsKLSAgICAg
ICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Ci0gICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRp
bmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIG1CdWZmZXJTaXplKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gcmVxdWlyZWRTcGFjZTsKLSAgICAgICAgbUNhY2hl
VHlwZSA9IHR5cGU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1JbmRleEJ1ZmZlciAmJiBtQnVmZmVy
U2l6ZSA+PSByZXF1aXJlZFNwYWNlICYmIG1DYWNoZVR5cGUgPT0gdHlwZSkKLSAgICB7Ci0gICAg
ICAgIC8vIEFscmVhZHkgYWxsb2NhdGVkCi0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsg
ICAvLyBTdGF0aWMgaW5kZXggYnVmZmVycyBjYW4ndCBiZSByZXNpemVkCi19Ci0KLWJvb2wgU3Rh
dGljSW5kZXhCdWZmZXI6Omxvb2t1cFR5cGUoR0xlbnVtIHR5cGUpCi17Ci0gICAgcmV0dXJuIG1D
YWNoZVR5cGUgPT0gdHlwZTsKLX0KLQotVUlOVCBTdGF0aWNJbmRleEJ1ZmZlcjo6bG9va3VwUmFu
Z2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UICptaW5JbmRleCwgVUlOVCAq
bWF4SW5kZXgpCi17Ci0gICAgSW5kZXhSYW5nZSByYW5nZSA9IHtvZmZzZXQsIGNvdW50fTsKLQot
ICAgIHN0ZDo6bWFwPEluZGV4UmFuZ2UsIEluZGV4UmVzdWx0Pjo6aXRlcmF0b3IgcmVzID0gbUNh
Y2hlLmZpbmQocmFuZ2UpOwotICAgIAotICAgIGlmIChyZXMgPT0gbUNhY2hlLmVuZCgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgICptaW5JbmRleCA9IHJlcy0+c2Vj
b25kLm1pbkluZGV4OwotICAgICptYXhJbmRleCA9IHJlcy0+c2Vjb25kLm1heEluZGV4OwotICAg
IHJldHVybiByZXMtPnNlY29uZC5zdHJlYW1PZmZzZXQ7Ci19Ci0KLXZvaWQgU3RhdGljSW5kZXhC
dWZmZXI6OmFkZFJhbmdlKGludHB0cl90IG9mZnNldCwgR0xzaXplaSBjb3VudCwgVUlOVCBtaW5J
bmRleCwgVUlOVCBtYXhJbmRleCwgVUlOVCBzdHJlYW1PZmZzZXQpCi17Ci0gICAgSW5kZXhSYW5n
ZSBpbmRleFJhbmdlID0ge29mZnNldCwgY291bnR9OwotICAgIEluZGV4UmVzdWx0IGluZGV4UmVz
dWx0ID0ge21pbkluZGV4LCBtYXhJbmRleCwgc3RyZWFtT2Zmc2V0fTsKLSAgICBtQ2FjaGVbaW5k
ZXhSYW5nZV0gPSBpbmRleFJlc3VsdDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkNDE2OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE0OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleERhdGFNYW5h
Z2VyLmg6IERlZmluZXMgdGhlIEluZGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAotLy8gcnVu
cyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MgZm9yIGluZGV4IGJ1ZmZlcnMuCi0KLSNp
Zm5kZWYgTElCR0xFU1YyX0lOREVYREFUQU1BTkFHRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0lO
REVYREFUQU1BTkFHRVJfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxjc3RkZGVm
PgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZQotewotICAgIGVudW0geyBJTklU
SUFMX0lOREVYX0JVRkZFUl9TSVpFID0gNDA5NiAqIHNpemVvZihHTHVpbnQpIH07Ci19Ci0KLW5h
bWVzcGFjZSBnbAotewotCi1zdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YQotewotICAgIFVJTlQg
bWluSW5kZXg7Ci0gICAgVUlOVCBtYXhJbmRleDsKLSAgICBVSU5UIHN0YXJ0SW5kZXg7Ci0KLSAg
ICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKmluZGV4QnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBz
ZXJpYWw7Ci19OwotCi1jbGFzcyBJbmRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgSW5kZXhC
dWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIHNpemUsIEQzREZPUk1BVCBmb3Jt
YXQpOwotICAgIHZpcnR1YWwgfkluZGV4QnVmZmVyKCk7Ci0KLSAgICBVSU5UIHNpemUoKSBjb25z
dCB7IHJldHVybiBtQnVmZmVyU2l6ZTsgfQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKFVJTlQgcmVx
dWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KSA9IDA7Ci0gICAgdm9pZCB1bm1hcCgpOwotICAgIHZp
cnR1YWwgdm9pZCByZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSkg
PSAwOwotCi0gICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKLSAg
ICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJvdGVjdGVkOgotICAgIElE
aXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZpY2U7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1ZmZl
cjkgKm1JbmRleEJ1ZmZlcjsKLSAgICBVSU5UIG1CdWZmZXJTaXplOwotCi0gICAgdW5zaWduZWQg
aW50IG1TZXJpYWw7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwotICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7Ci0KLSAgcHJpdmF0ZToKLSAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5kZXhCdWZmZXIpOwotfTsKLQotY2xhc3MgU3RyZWFt
aW5nSW5kZXhCdWZmZXIgOiBwdWJsaWMgSW5kZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAgIFN0
cmVhbWluZ0luZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlOVCBpbml0aWFs
U2l6ZSwgRDNERk9STUFUIGZvcm1hdCk7Ci0gICAgflN0cmVhbWluZ0luZGV4QnVmZmVyKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgKm1hcChVSU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQgKm9mZnNldCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UsIEdMZW51
bSB0eXBlKTsKLQotICBwcml2YXRlOgotICAgIFVJTlQgbVdyaXRlUG9zaXRpb247Ci19OwotCi1j
bGFzcyBTdGF0aWNJbmRleEJ1ZmZlciA6IHB1YmxpYyBJbmRleEJ1ZmZlcgotewotICBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgU3RhdGljSW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
KTsKLSAgICB+U3RhdGljSW5kZXhCdWZmZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKFVJ
TlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2
ZVNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpOwotCi0gICAgYm9vbCBsb29r
dXBUeXBlKEdMZW51bSB0eXBlKTsKLSAgICBVSU5UIGxvb2t1cFJhbmdlKGludHB0cl90IG9mZnNl
dCwgR0xzaXplaSBjb3VudCwgVUlOVCAqbWluSW5kZXgsIFVJTlQgKm1heEluZGV4KTsgICAvLyBS
ZXR1cm5zIHRoZSBvZmZzZXQgaW50byB0aGUgaW5kZXggYnVmZmVyLCBvciAtMSBpZiBub3QgZm91
bmQKLSAgICB2b2lkIGFkZFJhbmdlKGludHB0cl90IG9mZnNldCwgR0xzaXplaSBjb3VudCwgVUlO
VCBtaW5JbmRleCwgVUlOVCBtYXhJbmRleCwgVUlOVCBzdHJlYW1PZmZzZXQpOwotCi0gIHByaXZh
dGU6Ci0gICAgR0xlbnVtIG1DYWNoZVR5cGU7Ci0gICAgCi0gICAgc3RydWN0IEluZGV4UmFuZ2UK
LSAgICB7Ci0gICAgICAgIGludHB0cl90IG9mZnNldDsKLSAgICAgICAgR0xzaXplaSBjb3VudDsK
LQotICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbmRleFJhbmdlJiByaHMpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gcmhzLm9mZnNldCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0IDwgcmhzLm9mZnNldDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb3VudCAhPSByaHMuY291bnQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50IDwgcmhzLmNvdW50OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHN0cnVjdCBJbmRleFJlc3VsdAotICAgIHsKLSAgICAgICAgVUlOVCBtaW5JbmRleDsKLSAgICAg
ICAgVUlOVCBtYXhJbmRleDsKLSAgICAgICAgVUlOVCBzdHJlYW1PZmZzZXQ7Ci0gICAgfTsKLQot
ICAgIHN0ZDo6bWFwPEluZGV4UmFuZ2UsIEluZGV4UmVzdWx0PiBtQ2FjaGU7Ci19OwotCi1jbGFz
cyBJbmRleERhdGFNYW5hZ2VyCi17Ci0gIHB1YmxpYzoKLSAgICBJbmRleERhdGFNYW5hZ2VyKENv
bnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmV2aWNlKTsKLSAgICB2aXJ0dWFsIH5J
bmRleERhdGFNYW5hZ2VyKCk7Ci0KLSAgICBHTGVudW0gcHJlcGFyZUluZGV4RGF0YShHTGVudW0g
dHlwZSwgR0xzaXplaSBjb3VudCwgQnVmZmVyICphcnJheUVsZW1lbnRCdWZmZXIsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgVHJhbnNsYXRlZEluZGV4RGF0YSAqdHJhbnNsYXRlZCk7Ci0gICAgU3Rh
dGljSW5kZXhCdWZmZXIgKmdldENvdW50aW5nSW5kaWNlcyhHTHNpemVpIGNvdW50KTsKLQotICBw
cml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleERhdGFNYW5hZ2VyKTsK
LQotICAgIHN0ZDo6c2l6ZV90IHR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdDsKLSAgICBzdGQ6
OnNpemVfdCBpbmRleFNpemUoRDNERk9STUFUIGZvcm1hdCkgY29uc3Q7Ci0KLSAgICBJRGlyZWN0
M0REZXZpY2U5ICpjb25zdCBtRGV2aWNlOwotCi0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKm1T
dHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqbVN0cmVhbWlu
Z0J1ZmZlckludDsKLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAqbUNvdW50aW5nQnVmZmVyOwotfTsK
LQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfSU5ERVhEQVRBTUFOQUdFUl9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOGE5ZDguLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDUwNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9ncmFtLmNwcDogSW1w
bGVtZW50cyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmpl
Y3RzCi0vLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAyLjEwLjMgcGFnZSAyOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi0jaW5jbHVk
ZSA8c3RyaW5nPgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNvbnN0IGNoYXIgKiBjb25zdCBnX2Zha2Vw
YXRoID0gIkM6XFxmYWtlcGF0aCI7Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjptQ3VycmVudFNl
cmlhbCA9IDE7Ci0KLUF0dHJpYnV0ZUJpbmRpbmdzOjpBdHRyaWJ1dGVCaW5kaW5ncygpCi17Ci19
Ci0KLUF0dHJpYnV0ZUJpbmRpbmdzOjp+QXR0cmlidXRlQmluZGluZ3MoKQotewotfQotCi1JbmZv
TG9nOjpJbmZvTG9nKCkgOiBtSW5mb0xvZyhOVUxMKQotewotfQotCi1JbmZvTG9nOjp+SW5mb0xv
ZygpCi17Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci19Ci0KLQotaW50IEluZm9Mb2c6OmdldExl
bmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9M
b2cpICsgMTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5mb0xvZzo6Z2V0TG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQotewotICAgIGludCBpbmRleCA9IDA7
Ci0KLSAgICBpZiAoYnVmU2l6ZSA+IDApCi0gICAgewotICAgICAgICBpZiAobUluZm9Mb2cpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQp
c3RybGVuKG1JbmZvTG9nKSk7Ci0gICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2cs
IGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKLSAg
ICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4Owot
ICAgIH0KLX0KLQotLy8gYXBwZW5kIGEgc2FudGl6ZWQgbWVzc2FnZSB0byB0aGUgcHJvZ3JhbSBp
bmZvIGxvZy4KLS8vIFRoZSBEM0QgY29tcGlsZXIgaW5jbHVkZXMgYSBmYWtlIGZpbGUgcGF0aCBp
biBzb21lIG9mIHRoZSB3YXJuaW5nIG9yIGVycm9yIAotLy8gbWVzc2FnZXMsIHNvIGxldHMgcmVt
b3ZlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIGZha2UgZmlsZSBwYXRoIGZyb20gdGhlIGxvZy4K
LXZvaWQgSW5mb0xvZzo6YXBwZW5kU2FuaXRpemVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17Ci0g
ICAgc3RkOjpzdHJpbmcgbXNnKG1lc3NhZ2UpOwotCi0gICAgc2l6ZV90IGZvdW5kOwotICAgIGRv
Ci0gICAgewotICAgICAgICBmb3VuZCA9IG1zZy5maW5kKGdfZmFrZXBhdGgpOwotICAgICAgICBp
ZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1z
Zy5lcmFzZShmb3VuZCwgc3RybGVuKGdfZmFrZXBhdGgpKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICB3aGlsZSAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOwotCi0gICAgYXBwZW5kKCIlc1xu
IiwgbXNnLmNfc3RyKCkpOwotfQotCi12b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBjaGFyICpm
b3JtYXQsIC4uLikKLXsKLSAgICBpZiAoIWZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBjaGFyIGluZm9bMTAyNF07Ci0KLSAgICB2YV9saXN0IHZhcmFyZzsKLSAg
ICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7Ci0gICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihp
bmZvKSwgZm9ybWF0LCB2YXJhcmcpOwotICAgIHZhX2VuZCh2YXJhcmcpOwotCi0gICAgc2l6ZV90
IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7Ci0KLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsK
LSAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hhcltpbmZvTGVuZ3RoICsgMV07Ci0gICAgICAgIHN0
cmNweShtSW5mb0xvZywgaW5mbyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNp
emVfdCBsb2dMZW5ndGggPSBzdHJsZW4obUluZm9Mb2cpOwotICAgICAgICBjaGFyICpuZXdMb2cg
PSBuZXcgY2hhcltsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMV07Ci0gICAgICAgIHN0cmNweShu
ZXdMb2csIG1JbmZvTG9nKTsKLSAgICAgICAgc3RyY3B5KG5ld0xvZyArIGxvZ0xlbmd0aCwgaW5m
byk7Ci0KLSAgICAgICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgICAgIG1JbmZvTG9nID0gbmV3
TG9nOwotICAgIH0KLX0KLQotdm9pZCBJbmZvTG9nOjpyZXNldCgpCi17Ci0gICAgaWYgKG1JbmZv
TG9nKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOwotICAgICAgICBtSW5mb0xv
ZyA9IE5VTEw7Ci0gICAgfQotfQotCi1Qcm9ncmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAq
bWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFu
ZGxlKGhhbmRsZSksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKLXsKLSAgICBtRnJhZ21lbnRTaGFk
ZXIgPSBOVUxMOwotICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgIG1Qcm9ncmFtQmluYXJ5
ID0gTlVMTDsKLSAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0gICAgbVJlZkNvdW50ID0gMDsK
LX0KLQotUHJvZ3JhbTo6flByb2dyYW0oKQotewotICAgIHVubGluayh0cnVlKTsKLQotICAgIGlm
IChtVmVydGV4U2hhZGVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBtVmVydGV4U2hhZGVyLT5y
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQotICAg
IHsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKLXsKLSAgICBpZiAoc2hhZGVy
LT5nZXRUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtVmVy
dGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hhZGVyOwotICAg
ICAgICBtVmVydGV4U2hhZGVyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2hhZGVy
LT5nZXRUeXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1G
cmFnbWVudFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFk
ZXI7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OmRl
dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcikKLXsKLSAgICBpZiAoc2hhZGVyLT5nZXRUeXBlKCkg
PT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4U2hhZGVyICE9
IHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4U2hh
ZGVyID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRUeXBlKCkgPT0gR0xf
RlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1GcmFnbWVudFNoYWRlciAhPSBz
aGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICBtRnJhZ21lbnRT
aGFkZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50U2hh
ZGVyID8gMSA6IDApOwotfQotCi12b2lkIEF0dHJpYnV0ZUJpbmRpbmdzOjpiaW5kQXR0cmlidXRl
TG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKQotewotICAgIGlmIChpbmRl
eCA8IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1BdHRy
aWJ1dGVCaW5kaW5nW2ldLmVyYXNlKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUF0dHJp
YnV0ZUJpbmRpbmdbaW5kZXhdLmluc2VydChuYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3Jh
bTo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkK
LXsKLSAgICBtQXR0cmlidXRlQmluZGluZ3MuYmluZEF0dHJpYnV0ZUxvY2F0aW9uKGluZGV4LCBu
YW1lKTsKLX0KLQotLy8gTGlua3MgdGhlIEhMU0wgY29kZSBvZiB0aGUgdmVydGV4IGFuZCBwaXhl
bCBzaGFkZXIgYnkgbWF0Y2hpbmcgdXAgdGhlaXIgdmFyeWluZ3MsCi0vLyBjb21waWxpbmcgdGhl
bSBpbnRvIGJpbmFyaWVzLCBkZXRlcm1pbmluZyB0aGUgYXR0cmlidXRlIG1hcHBpbmdzLCBhbmQg
Y29sbGVjdGluZwotLy8gYSBsaXN0IG9mIHVuaWZvcm1zCi12b2lkIFByb2dyYW06OmxpbmsoKQot
ewotICAgIHVubGluayhmYWxzZSk7Ci0KLSAgICBtSW5mb0xvZy5yZXNldCgpOwotCi0gICAgbVBy
b2dyYW1CaW5hcnkgPSBuZXcgUHJvZ3JhbUJpbmFyeTsKLSAgICBpZiAoIW1Qcm9ncmFtQmluYXJ5
LT5saW5rKG1JbmZvTG9nLCBtQXR0cmlidXRlQmluZGluZ3MsIG1GcmFnbWVudFNoYWRlciwgbVZl
cnRleFNoYWRlcikpCi0gICAgewotICAgICAgICB1bmxpbmsoZmFsc2UpOwotICAgIH0KLX0KLQot
aW50IEF0dHJpYnV0ZUJpbmRpbmdzOjpnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKSBjb25zdAotewotICAgIGZvciAoaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24g
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBpZiAobUF0
dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJpYnV0ZUJpbmRpbmdb
bG9jYXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8vIFJldHVybnMgdGhl
IHByb2dyYW0gb2JqZWN0IHRvIGFuIHVubGlua2VkIHN0YXRlLCBiZWZvcmUgcmUtbGlua2luZywg
b3IgYXQgZGVzdHJ1Y3Rpb24KLXZvaWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkKLXsK
LSAgICBpZiAoZGVzdHJveSkgICAvLyBPYmplY3QgYmVpbmcgZGVzdHJ1Y3RlZAotICAgIHsKLSAg
ICAgICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgbUZyYWdt
ZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxM
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1WZXJ0ZXhT
aGFkZXIgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1Qcm9ncmFtQmluYXJ5
KQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1Qcm9ncmFtQmluYXJ5OwotICAgICAgICBtUHJvZ3Jh
bUJpbmFyeSA9IE5VTEw7Ci0gICAgfQotfQotCi1Qcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQ
cm9ncmFtQmluYXJ5KCkKLXsKLSAgICByZXR1cm4gbVByb2dyYW1CaW5hcnk7Ci19Ci0KLXZvaWQg
UHJvZ3JhbTo6c2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQot
ewotICAgIHVubGluayhmYWxzZSk7Ci0gICAgbVByb2dyYW1CaW5hcnkgPSBwcm9ncmFtQmluYXJ5
OwotfQotCi12b2lkIFByb2dyYW06OnJlbGVhc2UoKQotewotICAgIG1SZWZDb3VudC0tOwotCi0g
ICAgaWYgKG1SZWZDb3VudCA9PSAwICYmIG1EZWxldGVTdGF0dXMpCi0gICAgewotICAgICAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKG1IYW5kbGUpOwotICAgIH0KLX0KLQotdm9p
ZCBQcm9ncmFtOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi11bnNpZ25lZCBp
bnQgUHJvZ3JhbTo6Z2V0UmVmQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtUmVmQ291bnQ7
Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJl
dHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6aXNzdWVTZXJpYWwoKQot
ewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0SW5m
b0xvZ0xlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbmZvTG9nLmdldExlbmd0aCgpOwot
fQotCi12b2lkIFByb2dyYW06OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIGNoYXIgKmluZm9Mb2cpCi17Ci0gICAgcmV0dXJuIG1JbmZvTG9nLmdldExvZyhidWZT
aXplLCBsZW5ndGgsIGluZm9Mb2cpOwotfQotCi12b2lkIFByb2dyYW06OmdldEF0dGFjaGVkU2hh
ZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKQot
ewotICAgIGludCB0b3RhbCA9IDA7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh0b3RhbCA8IG1heENvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGFk
ZXJzW3RvdGFsXSA9IG1WZXJ0ZXhTaGFkZXItPmdldEhhbmRsZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdG90YWwrKzsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyKQotICAgIHsK
LSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNo
YWRlcnNbdG90YWxdID0gbUZyYWdtZW50U2hhZGVyLT5nZXRIYW5kbGUoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRvdGFsKys7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50KQotICAgIHsKLSAgICAg
ICAgKmNvdW50ID0gdG90YWw7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKG1Qcm9n
cmFtQmluYXJ5KQotICAgIHsKLSAgICAgICAgbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJp
YnV0ZShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBuYW1lWzBdID0gJ1wwJzsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0gICAgICAgIH0K
LQotICAgICAgICAqdHlwZSA9IEdMX05PTkU7Ci0gICAgICAgICpzaXplID0gMTsKLSAgICB9Ci19
Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKLXsKLSAgICBpZiAo
bVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdl
dEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRl
TWF4TGVuZ3RoKCkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQg
UHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUp
Ci17Ci0gICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9n
cmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUs
IHR5cGUsIG5hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoYnVmc2l6
ZSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgKmxlbmd0aCA9
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAqc2l6ZSA9IDA7Ci0gICAgICAgICp0eXBlID0gR0xf
Tk9ORTsKLSAgICB9Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgp
Ci17Ci0gICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9n
cmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1HTGludCBQcm9ncmFtOjpnZXRBY3Rp
dmVVbmlmb3JtTWF4TGVuZ3RoKCkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewot
ICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgo
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
Ci12b2lkIFByb2dyYW06OmZsYWdGb3JEZWxldGlvbigpCi17Ci0gICAgbURlbGV0ZVN0YXR1cyA9
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtRGVsZXRlU3RhdHVzOwotfQotCi12b2lkIFByb2dyYW06OnZhbGlkYXRl
KCkKLXsKLSAgICBtSW5mb0xvZy5yZXNldCgpOwotCi0gICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQot
ICAgIHsKLSAgICAgICAgbVByb2dyYW1CaW5hcnktPnZhbGlkYXRlKG1JbmZvTG9nKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUluZm9Mb2cuYXBwZW5kKCJQcm9ncmFtIGhhcyBu
b3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlua2VkLiIpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFt
Ojppc1ZhbGlkYXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5pc1ZhbGlkYXRlZCgpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDQ3MzFkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTI2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFByb2dyYW0uaDogRGVmaW5lcyB0
aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCi0vLyBh
bmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEw
LjMgcGFnZSAyOC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUFJPR1JBTV9IXwotI2RlZmluZSBMSUJH
TEVTVjJfUFJPR1JBTV9IXwotCi0jaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxzdHJpbmc+
Ci0jaW5jbHVkZSA8c2V0PgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgUmVzb3Vy
Y2VNYW5hZ2VyOwotY2xhc3MgRnJhZ21lbnRTaGFkZXI7Ci1jbGFzcyBWZXJ0ZXhTaGFkZXI7Ci0K
LWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgZ19mYWtlcGF0aDsKLQotY2xhc3MgQXR0cmlidXRl
QmluZGluZ3MKLXsKLSAgcHVibGljOgotICAgIEF0dHJpYnV0ZUJpbmRpbmdzKCk7Ci0gICAgfkF0
dHJpYnV0ZUJpbmRpbmdzKCk7Ci0KLSAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVp
bnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5n
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtQXR0cmlidXRlQmluZGluZ1tNQVhfVkVSVEVYX0FUVFJJQlNdOwot
fTsKLQotY2xhc3MgSW5mb0xvZwotewotICBwdWJsaWM6Ci0gICAgSW5mb0xvZygpOwotICAgIH5J
bmZvTG9nKCk7Ci0KLSAgICBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRMb2co
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwotCi0gICAg
dm9pZCBhcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSk7Ci0gICAgdm9pZCBhcHBl
bmQoY29uc3QgY2hhciAqaW5mbywgLi4uKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEluZm9Mb2cpOwotICAgIGNoYXIgKm1JbmZv
TG9nOwotfTsKLQotY2xhc3MgUHJvZ3JhbQotewotICBwdWJsaWM6Ci0gICAgUHJvZ3JhbShSZXNv
dXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwotCi0gICAgflByb2dyYW0oKTsK
LQotICAgIGJvb2wgYXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKLSAgICBib29sIGRldGFj
aFNoYWRlcihTaGFkZXIgKnNoYWRlcik7Ci0gICAgaW50IGdldEF0dGFjaGVkU2hhZGVyc0NvdW50
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGJpbmRBdHRyaWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgs
IGNvbnN0IGNoYXIgKm5hbWUpOwotCi0gICAgdm9pZCBsaW5rKCk7Ci0gICAgdm9pZCBzZXRQcm9n
cmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwotICAgIFByb2dyYW1CaW5h
cnkgKmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29u
c3Q7Ci0gICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICppbmZvTG9nKTsKLSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1h
eENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKLQotICAgIHZvaWQgZ2V0
QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xp
bnQgZ2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1
dGVNYXhMZW5ndGgoKTsKLQotICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgs
IEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpOwotICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwot
ICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKLQotICAgIHZvaWQgYWRkUmVm
KCk7Ci0gICAgdm9pZCByZWxlYXNlKCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkg
Y29uc3Q7Ci0gICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKLSAgICBib29sIGlzRmxhZ2dlZEZv
ckRlbGV0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHZhbGlkYXRlKCk7Ci0gICAgYm9vbCBpc1Zh
bGlkYXRlZCgpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0Owot
Ci0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwotCi0g
ICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOwotCi0gICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOwotCi0gICAgRnJhZ21lbnRTaGFkZXIgKm1GcmFnbWVudFNo
YWRlcjsKLSAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7Ci0KLSAgICBBdHRyaWJ1dGVC
aW5kaW5ncyBtQXR0cmlidXRlQmluZGluZ3M7Ci0KLSAgICBQcm9ncmFtQmluYXJ5KiBtUHJvZ3Jh
bUJpbmFyeTsKLSAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0
aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQotCi0g
ICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtU2Vy
aWFsOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKLQotICAgIFJl
c291cmNlTWFuYWdlciAqbVJlc291cmNlTWFuYWdlcjsKLSAgICBjb25zdCBHTHVpbnQgbUhhbmRs
ZTsKLQotICAgIEluZm9Mb2cgbUluZm9Mb2c7Ci19OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVT
VjJfUFJPR1JBTV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFjMjhlNTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ODAgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQ
cm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cwotLy8gYW5kIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2Ug
MjguCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2lm
ICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZF
TDMKLSNlbmRpZgotCi1uYW1lc3BhY2UgZ2wKLXsKLXN0ZDo6c3RyaW5nIHN0cihpbnQgaSkKLXsK
LSAgICBjaGFyIGJ1ZmZlclsyMF07Ci0gICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSwgIiVkIiwgaSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotVW5pZm9ybTo6VW5pZm9ybShH
TGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplKQotICAgIDogdHlwZSh0eXBlKSwgX25hbWUoX25hbWUpLCBuYW1lKFByb2dyYW1CaW5hcnk6
OnVuZGVjb3JhdGVVbmlmb3JtKF9uYW1lKSksIGFycmF5U2l6ZShhcnJheVNpemUpCi17Ci0gICAg
aW50IGJ5dGVzID0gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGFycmF5U2l6ZTsKLSAgICBk
YXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOwotICAgIG1lbXNldChkYXRhLCAwLCBieXRl
cyk7Ci0gICAgZGlydHkgPSB0cnVlOwotfQotCi1Vbmlmb3JtOjp+VW5pZm9ybSgpCi17Ci0gICAg
ZGVsZXRlW10gZGF0YTsKLX0KLQotYm9vbCBVbmlmb3JtOjppc0FycmF5KCkKLXsKLSAgICByZXR1
cm4gX25hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMDsKLX0KLQotVW5pZm9ybUxvY2F0aW9u
OjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQg
ZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKLSAgICA6IG5hbWUoUHJvZ3JhbUJpbmFyeTo6
dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgp
Ci17Ci19Ci0KLVByb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkoKQotewotICAgIG1EZXZpY2Ug
PSBnZXREZXZpY2UoKTsKLQotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0
ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtQ29uc3RhbnRUYWJsZVBTID0gTlVMTDsKLSAgICBt
Q29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLQotICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLQotICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4Kysp
Ci0gICAgewotICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGlu
ZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNQU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7
Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUU19WVEY7IGluZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNW
U1tpbmRleF0uYWN0aXZlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOwotCi0gICAgbUR4RGVw
dGhSYW5nZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOwotICAgIG1E
eENvb3JkTG9jYXRpb24gPSAtMTsKLSAgICBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb24gPSAtMTsK
LSAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7Ci0gICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0
aW9uID0gLTE7Ci19Ci0KLVByb2dyYW1CaW5hcnk6On5Qcm9ncmFtQmluYXJ5KCkKLXsKLSAgICBp
ZiAobVBpeGVsRXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJl
bGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAg
ICAgICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChtQ29u
c3RhbnRUYWJsZVBTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+UmVsZWFzZSgp
OwotICAgIH0KLQotICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQotICAgIHsKLSAgICAgICAgbUNv
bnN0YW50VGFibGVWUy0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIHdoaWxlICghbVVuaWZvcm1z
LmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKLSAgICAg
ICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7Ci0gICAgfQotfQotCi1JRGlyZWN0M0RQaXhlbFNoYWRl
cjkgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsU2hhZGVyKCkKLXsKLSAgICByZXR1cm4gbVBpeGVs
RXhlY3V0YWJsZTsKLX0KLQotSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6
Z2V0VmVydGV4U2hhZGVyKCkKLXsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Ci19Ci0K
LUdMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBjaGFyICpu
YW1lKQotewotICAgIGlmIChuYW1lKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1MaW5rZWRBdHRyaWJ1dGVbaW5kZXhdLm5hbWUgPT0gc3RkOjpzdHJpbmcobmFt
ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgpCi17Ci0gICAg
QVNTRVJUKGF0dHJpYnV0ZUluZGV4ID49IDAgJiYgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVY
X0FUVFJJQlMpOwotICAgIAotICAgIHJldHVybiBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRl
eF07Ci19Ci0KLS8vIFJldHVybnMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBzYW1wbGVyIGlu
ZGV4IHVzZWQuCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBs
ZXJUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FN
UExFUl9QSVhFTDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0gICAg
ICBjYXNlIFNBTVBMRVJfVkVSVEVYOgotICAgICAgICByZXR1cm4gbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJl
IGltYWdlIHVuaXQgKDAtMTkpIGNvcnJlc3BvbmRpbmcgdG8gYSBEaXJlY3QzRCA5IHNhbXBsZXIK
LS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAwLTMgZm9yIHRoZSB2ZXJ0
ZXggc2hhZGVyKS4KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJNYXBwaW5nKFNhbXBs
ZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAgR0xpbnQgbG9n
aWNhbFRleHR1cmVVbml0ID0gLTE7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAg
Y2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9m
KG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLQotICAgICAgICBpZiAobVNh
bXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxv
Z2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1
cmVVbml0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTQU1QTEVSX1ZF
UlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNWUykv
c2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW3NhbXBs
ZXJJbmRleF0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVu
aXQgPSBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAwICYmIGxvZ2ljYWxUZXh0dXJlVW5p
dCA8IChHTGludClnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKCkpCi0gICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OwotICAgIH0K
LQotICAgIHJldHVybiAtMTsKLX0KLQotLy8gUmV0dXJucyB0aGUgdGV4dHVyZSB0eXBlIGZvciBh
IGdpdmVuIERpcmVjdDNEIDkgc2FtcGxlciB0eXBlIGFuZAotLy8gaW5kZXggKDAtMTUgZm9yIHRo
ZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhlIHZlcnRleCBzaGFkZXIpLgotVGV4dHVyZVR5
cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleHR1cmVUeXBlKFNhbXBsZXJUeXBlIHR5cGUs
IHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsK
LSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8
IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9mKG1TYW1wbGVyc1BTWzBdKSk7Ci0gICAgICAgIEFT
U0VSVChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBt
U2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgY2FzZSBTQU1QTEVS
X1ZFUlRFWDoKLSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNW
Uykvc2l6ZW9mKG1TYW1wbGVyc1ZTWzBdKSk7Ci0gICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgIHJldHVybiBtU2FtcGxlcnNWU1tzYW1wbGVy
SW5kZXhdLnRleHR1cmVUeXBlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gVEVYVFVSRV8yRDsKLX0KLQotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgdW5zaWduZWQgaW50IHN1
YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3Ig
YW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9s
YXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsK
LSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0
aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3Bl
biArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgaW50IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9j
YXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1l
ID09IG5hbWUgJiYKLSAgICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
PT0gc3Vic2NyaXB0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCogdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICBpbnQg
YXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJh
eVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAg
R0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07
Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsK
LSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0JPT0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0ZMT0FUX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJn
ZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRh
cmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0g
MjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4g
MSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAg
ICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMg
PSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDI7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmIChs
b2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9GTE9BVF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
LQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFy
Z2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAg
ICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2
ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0
VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFt
cyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMzsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICog
MzsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0ZMT0FUX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
ZmxvYXQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3Vu
dCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9W
RUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVp
Z2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Ci12b2lkIHRyYW5zcG9zZU1hdHJpeChU
ICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGludCBjb3B5V2lkdGggPSBz
dGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwotICAgIGludCBjb3B5SGVpZ2h0ID0gc3Rk
OjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwotCi0gICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBjb3B5V2lkdGg7IHgrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29w
eUhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdp
ZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7
IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAq
IHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGNsZWFy
IHVuZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0
SGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGgg
KyB4XSA9IChUKTA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0
ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9
IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChh
cnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0
ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElO
VkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMTI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0
LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlm
b3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQg
PSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xm
bG9hdCkgKiAxNik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7
Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0lOVCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBM
RVJfMkQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUp
Ci0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAg
IHYsIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29s
UGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0lOVF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0t
PmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5
IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAg
ICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAot
ICAgICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
ICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDI7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAg
ICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMywKLSAgICAgICAgICAgICAgIHYsIDMgKiBzaXpl
b2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFy
YW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQg
KiAzOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGl2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAq
IDQsCi0gICAgICAgICAgICAgICB2LCA0ICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCi0gICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXpl
LCBHTGZsb2F0ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1
cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkK
LSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0
YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRl
cykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50Q291bnQo
dGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW50ZXJuYWxD
b3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUp
OwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZv
cm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJh
bXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9
PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVDoKLSAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQgKiBz
aXplb2YoR0xmbG9hdCksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICogc2l6ZW9mKEdM
ZmxvYXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9J
TlQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFy
YW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ld
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZT
aXplLCBHTGludCAqcGFyYW1zKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5z
dXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUp
Ci0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUo
dGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0
ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGludCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB7Ci0gICAgICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJhbXMsIChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDE2KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IFVuaWZvcm1FeHRlcm5h
bENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50
VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xi
b29sZWFuICpib29sUGFyYW1zID0gdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWJvb2xQ
YXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIG1lbWNw
eShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogaW50ZXJuYWxDb3VudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50ICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQcm9ncmFtQmluYXJ5
OjpkaXJ0eUFsbFVuaWZvcm1zKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBt
VW5pZm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBudW1Vbmlmb3JtczsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1Vbmlmb3Jtc1tpbmRleF0t
PmRpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLS8vIEFwcGxpZXMgYWxsIHRoZSB1bmlmb3JtcyBz
ZXQgZm9yIHRoaXMgcHJvZ3JhbSBvYmplY3QgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lk
IFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQotewotICAgIGZvciAoc3RkOjp2ZWN0b3I8
VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jt
cy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpIHsKLSAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9ICp1YjsKLQotICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0g
ICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0g
ICAgICAgICAgICBHTGludCAqaSA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAg
ICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOiAgICAgICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0
VW5pZm9ybSwgYXJyYXlTaXplLCAxLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMyOiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwg
MiwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzogIGFwcGx5
VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDMsIGIpOyAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5p
Zm9ybSwgYXJyYXlTaXplLCA0LCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQzOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9y
bW5mdih0YXJnZXRVbmlmb3JtLCBmKTsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJf
Q1VCRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICBhcHBseVVuaWZvcm0xaXYo
dGFyZ2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KHRhcmdldFVuaWZvcm0sIGFycmF5
U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOiAg
IGFwcGx5VW5pZm9ybTNpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDNDogICBhcHBseVVuaWZvcm00aXYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotLy8gQ29tcGlsZXMgdGhlIEhMU0wgY29kZSBvZiB0aGUgYXR0YWNoZWQgc2hhZGVy
cyBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLUlEM0QxMEJsb2IgKlByb2dyYW1CaW5hcnk6OmNv
bXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBj
aGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQotewotICAg
IGlmICghaGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIERX
T1JEIHJlc3VsdDsKLSAgICBVSU5UIGZsYWdzID0gMDsKLSAgICBzdGQ6OnN0cmluZyBzb3VyY2VU
ZXh0OwotICAgIGlmIChwZXJmQWN0aXZlKCkpCi0gICAgewotICAgICAgICBmbGFncyB8PSBEM0RD
T01QSUxFX0RFQlVHOwotI2lmZGVmIE5ERUJVRwotICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDsKLSNlbHNlCi0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJ
TEVfU0tJUF9PUFRJTUlaQVRJT047Ci0jZW5kaWYKLQotICAgICAgICBzdGQ6OnN0cmluZyBzb3Vy
Y2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5n
KCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3Rk
OjpzdHJpbmcoaGxzbCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNv
dXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICBmbGFncyB8PSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDsK
LSAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7Ci0gICAgfQotCi0gICAgSUQzRDEwQmxvYiAqYmlu
YXJ5ID0gTlVMTDsKLSAgICBJRDNEMTBCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgIHJl
c3VsdCA9IEQzRENvbXBpbGUoaGxzbCwgc3RybGVuKGhsc2wpLCBnX2Zha2VwYXRoLCBOVUxMLCBO
VUxMLCAibWFpbiIsIHByb2ZpbGUsIGZsYWdzLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsK
LQotICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICptZXNz
YWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0g
ICAgICAgIGluZm9Mb2cuYXBwZW5kU2FuaXRpemVkKG1lc3NhZ2UpOwotICAgICAgICBUUkFDRSgi
XG4lcyIsIGhsc2wpOwotICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAg
IGVycm9yTWVzc2FnZS0+UmVsZWFzZSgpOwotICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gRDNEWEdl
dFNoYWRlckNvbnN0YW50VGFibGUoc3RhdGljX2Nhc3Q8Y29uc3QgRFdPUkQqPihiaW5hcnktPkdl
dEJ1ZmZlclBvaW50ZXIoKSksIGNvbnN0YW50VGFibGUpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBiaW5hcnktPlJlbGVh
c2UoKTsKLQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYmluYXJ5
OwotfQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyByZWdpc3RlcnMs
IHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4w
MCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1p
bnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZh
cnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKQotewot
ICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgaW50IG1heFZh
cnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7Ci0KLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5k
KCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKSAqIHZhcnlpbmctPnNpemU7Ci0gICAgICAgIGludCBtID0gVmFyaWFibGVD
b2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
Ci0KLSAgICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9PSA0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYg
IXN1Y2Nlc3M7IHIrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWls
YWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYg
YXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFp
bGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFi
bGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcg
PSByOwotICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KCFzdWNjZXNzICYmIG0gPT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0g
dHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZh
aWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1ty
ICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMjsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KG0gPT0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwotCi0g
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4Kysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNr
aW5nW3ldW3hdID8gMCA6IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpbnQgY29sdW1uID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlW3hd
ID49IG4gJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IG4pCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9y
czsgcisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNr
aW5nW3JdW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHkgPSByOyB5IDwgciArIG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdmFyeWluZy0+Y29sID0gY29sdW1uOwotCi0gICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotCi0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgewotICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1l
LmNfc3RyKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdp
c3RlcnMgPSAwOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsg
cisrKQotICAgIHsKLSAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8
fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJlZ2lzdGVycysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlZ2lzdGVyczsK
LX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywg
c3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCi17Ci0g
ICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBSZXNldCB0aGUgdmFyeWluZyBy
ZWdpc3RlciBhc3NpZ25tZW50cwotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGZyYWdW
YXIgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGZyYWdWYXIgIT0gZnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgZnJhZ1ZhcisrKQotICAgIHsKLSAgICAgICAgZnJh
Z1Zhci0+cmVnID0gLTE7Ci0gICAgICAgIGZyYWdWYXItPmNvbCA9IC0xOwotICAgIH0KLQotICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZ0eFZhciA9IHZlcnRleFNoYWRlci0+bVZhcnlp
bmdzLmJlZ2luKCk7IHZ0eFZhciAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdnR4
VmFyKyspCi0gICAgewotICAgICAgICB2dHhWYXItPnJlZyA9IC0xOwotICAgICAgICB2dHhWYXIt
PmNvbCA9IC0xOwotICAgIH0KLQotICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lz
dGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RPUlNf
U00zXVs0XSA9IHtOVUxMfTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKGluZm9M
b2csIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyKTsKLQotICAgIGlmIChyZWdpc3RlcnMgPCAwKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHRoZSBI
TFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOwotICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKTsKLSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRN
YXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWlu
Z1ZlY3RvcnMgJiYgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIk5vIHZhcnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBn
bF9GcmFnQ29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdz
LmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0
KyspCi0gICAgewotICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5i
ZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1dCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1l
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5w
dXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUgb2YgdmVydGV4IHZh
cnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91
dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1
dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQotICAg
ICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5v
dCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RkOjpzdHJp
bmcgdmFyeWluZ1NlbWFudGljID0gKHNtMyA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiKTsKLQotICAg
IHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgICJ7
XG4iOwotCi0gICAgaW50IHNlbWFudGljSW5kZXggPSAwOwotICAgIGZvciAoQXR0cmlidXRlQXJy
YXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4o
KTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0
ZSsrKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAi
OyAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1
dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkg
KyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0
cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxu
IgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dDQgZ2xfUG9zaXRpb24gOiBQT1NJVElPTjtcbiI7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8
IHJlZ2lzdGVyczsgcisrKQotICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tp
bmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDog
MSkpOwotCi0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJT
aXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSAr
ICI7XG4iOwotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQp
Ci0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6
ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwotICAgIH0KLQot
ICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0g
ICAgfQotCi0gICAgdmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgot
ICAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRl
cmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRy
aWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0g
ICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgIiArIGRlY29yYXRlQXR0cmlidXRlKGF0
dHJpYnV0ZS0+bmFtZSkgKyAiID0gIjsKLQotICAgICAgICBpZiAoVmFyaWFibGVSb3dDb3VudChh
dHRyaWJ1dGUtPnR5cGUpID4gMSkgICAvLyBNYXRyaXgKLSAgICAgICAgewotICAgICAgICAgICAg
dmVydGV4SExTTCArPSAidHJhbnNwb3NlIjsKLSAgICAgICAgfQotCi0gICAgICAgIHZlcnRleEhM
U0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIp
O1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICIg
ICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54IC0gZHhfSGFsZlBpeGVsU2l6
ZS54ICogZ2xfUG9zaXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55ICsgZHhfSGFsZlBpeGVsU2l6ZS55ICogZ2xf
UG9zaXRpb24udyk7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4i
OwotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsK
LSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFtcChn
bF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9N
QVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9G
cmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlz
dDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7
Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyAr
IGkgKiByb3dzICsgajsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91
dHB1dC52IiArIHN0cihyKTsKLQotICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lz
dGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFy
ZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hd
ID09ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0
ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+
bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGop
ICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIlxu
IgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAg
ICAgICAgICAifVxuIjsKLQotICAgIHBpeGVsSExTTCArPSAic3RydWN0IFBTX0lOUFVUXG4iCi0g
ICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0g
ICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwot
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0Zy
YWdDb29yZCA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOwot
ICAgICAgICBpZiAoc20zKSB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIg
ZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7XG4iOwotICAgIH0KLQot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNlIDogVkZBQ0U7XG4iOwotICAgIH0KLQotICAg
IHBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfQ29sb3JbMV0gOiBDT0xPUjtcbiIKLSAgICAg
ICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAg
IHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNtMykKLSAgICAgICAgewot
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9W
UG9zLnggKyAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAwLjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfQ29vcmQgY29udGFpbnMgdGhlIHZpZXdw
b3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBDb250ZXh0
OjphcHBseVJlbmRlclRhcmdldCgpCi0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9Db29yZC54ICsg
ZHhfQ29vcmQuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29v
cmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9Db29yZC55ICsgZHhfQ29v
cmQudztcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRo
LnggKyBkeF9EZXB0aC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLncgPSByaHc7XG4iOwotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQ
b2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1Bv
aW50Q29vcmQueCA9IGlucHV0LmdsX1BvaW50Q29vcmQueDtcbiI7Ci0gICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGdsX1BvaW50Q29vcmQueSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQueTtc
biI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQot
ICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Qb2lu
dHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlucHV0
LnZGYWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVy
YXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5n
ICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0g
ICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwot
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWlu
Zy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAi
XSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
Ci0gICAgcGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigp
O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBQU19P
VVRQVVQgb3V0cHV0O1xuIiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAiICAg
IG91dHB1dC5nbF9Db2xvclswXSA9IGdsX0NvbG9yWzBdO1xuIgotICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAg
ICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmlu
YXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRy
aWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlcikKLXsKLSAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVu
dFNoYWRlci0+aXNDb21waWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzQ29tcGlsZWQo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmlu
ZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOwotICAgIHN0ZDo6c3RyaW5n
IHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKLQotICAgIGlmICghbGlua1Zh
cnlpbmdzKGluZm9Mb2csIHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZl
cnRleFNoYWRlcikpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Q29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQ
cm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZz
XzJfMCI7Ci0gICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNT
aGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7Ci0KLSAgICBJRDNEMTBCbG9iICp2
ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgdmVydGV4SExTTC5jX3N0cigp
LCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7Ci0gICAgSUQzRDEwQmxvYiAqcGl4
ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHBp
eGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwotCi0gICAgaWYgKHZlcnRleEJpbmFyeSAm
JiBwaXhlbEJpbmFyeSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKChEV09SRCopdmVydGV4QmluYXJ5LT5HZXRCdWZmZXJQ
b2ludGVyKCksICZtVmVydGV4RXhlY3V0YWJsZSk7Ci0gICAgICAgIEhSRVNVTFQgcGl4ZWxSZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcigoRFdPUkQqKXBpeGVsQmluYXJ5LT5HZXRC
dWZmZXJQb2ludGVyKCksICZtUGl4ZWxFeGVjdXRhYmxlKTsKLQotICAgICAgICBpZiAodmVydGV4
UmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHZlcnRleFJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZIHx8IHBpeGVsUmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHBp
eGVsUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7
Ci0KLSAgICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIHBpeGVsQmluYXJ5
LT5SZWxlYXNlKCk7Ci0gICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7Ci0gICAgICAgIHBpeGVs
QmluYXJ5ID0gTlVMTDsKLQotICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVs
RXhlY3V0YWJsZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcyhp
bmZvTG9nLCBhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9GUkFHTUVO
VF9TSEFERVIsIG1Db25zdGFudFRhYmxlUFMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsaW5r
VW5pZm9ybXMoaW5mb0xvZywgR0xfVkVSVEVYX1NIQURFUiwgbUNvbnN0YW50VGFibGVWUykpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyB0aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFk
eS1kZWNvcmF0ZWQgYmVjYXVzZSBnbF8gYW5kIGR4XwotICAgICAgICAgICAgLy8gYXJlIHJlc2Vy
dmVkIHByZWZpeGVzLCBhbmQgZG8gbm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCi0g
ICAgICAgICAgICBtRHhEZXB0aFJhbmdlTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4
X0RlcHRoUmFuZ2UiKTsKLSAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRVbmlmb3Jt
TG9jYXRpb24oImR4X0RlcHRoIik7Ci0gICAgICAgICAgICBtRHhDb29yZExvY2F0aW9uID0gZ2V0
VW5pZm9ybUxvY2F0aW9uKCJkeF9Db29yZCIpOwotICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6
ZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIik7Ci0gICAg
ICAgICAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9u
dENDVyIpOwotICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9y
bUxvY2F0aW9uKCJkeF9Qb2ludHNPckxpbmVzIik7Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPm1h
cmtEeFVuaWZvcm1zRGlydHkoKTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1h
cHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0g
dXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIp
Ci17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMgPSAwOwotCi0gICAgLy8gTGluayBh
dHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0
ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJl
Z2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRy
aWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdz
LmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKLQotICAgICAgICBpZiAobG9j
YXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRy
aWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmli
dXRlOwotCi0gICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRl
LT50eXBlKTsKLQotICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1BWF9WRVJURVhf
QVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
QWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0Iiwg
YXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0
aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcg
bG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2
ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGludCBs
b2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRl
LT5uYW1lKTsKLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBn
bEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcm93cyA9IFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICAgICAgICAgIGludCBhdmFpbGFi
bGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFY
X1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0x
IHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0aXZlIGF0
dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRy
aWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGlu
ZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1hbnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0
cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAgICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxl
Um93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOwotCi0g
ICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5Ojps
aW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhDb25zdGFu
dFRhYmxlICpjb25zdGFudFRhYmxlKQotewotICAgIEQzRFhDT05TVEFOVFRBQkxFX0RFU0MgY29u
c3RhbnRUYWJsZURlc2NyaXB0aW9uOwotCi0gICAgY29uc3RhbnRUYWJsZS0+R2V0RGVzYygmY29u
c3RhbnRUYWJsZURlc2NyaXB0aW9uKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGNvbnN0YW50
SW5kZXggPSAwOyBjb25zdGFudEluZGV4IDwgY29uc3RhbnRUYWJsZURlc2NyaXB0aW9uLkNvbnN0
YW50czsgY29uc3RhbnRJbmRleCsrKQotICAgIHsKLSAgICAgICAgRDNEWEhBTkRMRSBjb25zdGFu
dEhhbmRsZSA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50KDAsIGNvbnN0YW50SW5kZXgpOwot
Ci0gICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGNvbnN0YW50RGVzY3JpcHRpb247Ci0gICAgICAg
IFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29u
c3RhbnRUYWJsZS0+R2V0Q29uc3RhbnREZXNjKGNvbnN0YW50SGFuZGxlLCAmY29uc3RhbnREZXNj
cmlwdGlvbiwgJmRlc2NyaXB0aW9uQ291bnQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotCi0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShpbmZvTG9nLCBzaGFkZXIsIGNv
bnN0YW50SGFuZGxlLCBjb25zdGFudERlc2NyaXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIEFkZHMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY29uc3RhbnQgZm91bmQgaW4gdGhlIGJp
bmFyeSBzaGFkZXIgdG8gdGhlIGxpc3Qgb2YgdW5pZm9ybXMKLS8vIFJldHVybnMgdHJ1ZSBpZiBz
dWNjZXNmdWwgKHVuaWZvcm0gbm90IGFscmVhZHkgZGVmaW5lZCkKLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6ZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBE
M0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0
YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50RGVz
Y3JpcHRpb24uUmVnaXN0ZXJTZXQgPT0gRDNEWFJTX1NBTVBMRVIpCi0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJD
b3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHBzQ29uc3RhbnQg
PSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2Ny
aXB0aW9uLk5hbWUpOwotICAgICAgICAgICAgRDNEWEhBTkRMRSB2c0NvbnN0YW50ID0gbUNvbnN0
YW50VGFibGVWUy0+R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5O
YW1lKTsKLQotICAgICAgICAgICAgaWYgKHBzQ29uc3RhbnQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1Db25zdGFudFRhYmxlUFMt
PkdldFNhbXBsZXJJbmRleChwc0NvbnN0YW50KSArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
c2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4
dHVyZVR5cGUgPSAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VC
RSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBtU2Ft
cGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXgg
KyAxLCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIlBpeGVsIHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgKCVkKS4iLCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2c0NvbnN0YW50KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBtQ29uc3Rh
bnRUYWJsZVZTLT5HZXRTYW1wbGVySW5kZXgodnNDb25zdGFudCkgKyBpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IGdldENvbnRleHQoKS0+Z2V0TWF4aW11bVZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSAoY29uc3RhbnRE
ZXNjcmlwdGlvbi5UeXBlID09IEQzRFhQVF9TQU1QTEVSQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBU
RVhUVVJFXzJEOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4
U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1w
bGVyUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVmVydGV4
IHNoYWRlciBzYW1wbGVyIGNvdW50IGV4Y2VlZHMgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTICglZCkuIiwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5p
dHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2goY29uc3Rh
bnREZXNjcmlwdGlvbi5DbGFzcykKLSAgICB7Ci0gICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBh
cnJheUluZGV4IDwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50czsgYXJyYXlJbmRleCsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0g
MDsgZmllbGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFu
ZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxk
KTsKLQotICAgICAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBmaWVsZERlc2NyaXB0
aW9uOwotICAgICAgICAgICAgICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291bnQgPSAxOwotCi0g
ICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0
Q29uc3RhbnREZXNjKGZpZWxkSGFuZGxlLCAmZmllbGREZXNjcmlwdGlvbiwgJmRlc2NyaXB0aW9u
Q291bnQpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwot
Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIp
IDogIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGluZm9Mb2cs
IHNoYWRlciwgZmllbGRIYW5kbGUsIGZpZWxkRGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERl
c2NyaXB0aW9uLk5hbWUgKyBzdHJ1Y3RJbmRleCArICIuIikpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgRDNEWFBDX1NDQUxBUjoKLSAgICAg
IGNhc2UgRDNEWFBDX1ZFQ1RPUjoKLSAgICAgIGNhc2UgRDNEWFBDX01BVFJJWF9DT0xVTU5TOgot
ICAgICAgY2FzZSBEM0RYUENfT0JKRUNUOgotICAgICAgICByZXR1cm4gZGVmaW5lVW5pZm9ybShz
aGFkZXIsIGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0aW9uLk5h
bWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3Jt
KEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0
aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCi17Ci0gICAgVW5pZm9ybSAqdW5pZm9ybSA9
IGNyZWF0ZVVuaWZvcm0oY29uc3RhbnREZXNjcmlwdGlvbiwgX25hbWUpOwotCi0gICAgaWYoIXVu
aWZvcm0pCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2hl
Y2sgaWYgYWxyZWFkeSBkZWZpbmVkCi0gICAgR0xpbnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24odW5pZm9ybS0+bmFtZSk7Ci0gICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50eXBlOwot
Ci0gICAgaWYgKGxvY2F0aW9uID49IDApCi0gICAgewotICAgICAgICBkZWxldGUgdW5pZm9ybTsK
LSAgICAgICAgdW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVOVF9TSEFERVIpIHVuaWZv
cm0tPnBzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc2hhZGVyID09IEdMX1ZF
UlRFWF9TSEFERVIpICAgdW5pZm9ybS0+dnMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24pOwotCi0g
ICAgaWYgKGxvY2F0aW9uID49IDApCi0gICAgewotICAgICAgICByZXR1cm4gdW5pZm9ybS0+dHlw
ZSA9PSB0eXBlOwotICAgIH0KLQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7Ci0g
ICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkK
LSAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihf
bmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LVVuaWZvcm0gKlByb2dyYW1CaW5hcnk6OmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENPTlNUQU5U
X0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsK
LSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IDEpICAgLy8gVmVjdG9ycyBhbmQg
c2NhbGFycwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8yRCwgX25h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEM0RYUFRfU0FNUExFUkNVQkU6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50RGVzY3JpcHRpb24uQ29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl9DVUJFLCBfbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQz
RFhQVF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVt
bnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX0JPT0wsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMyLCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9C
T09MX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0lOVDoKLSAgICAgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIF9uYW1lLCBjb25zdGFudERlc2Ny
aXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZv
cm0oR0xfSU5UX1ZFQzIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAg
ICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9u
LkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX0ZMT0FU
OgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIF9uYW1lLCBjb25zdGFu
dERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfRkxPQVRfVkVDMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9W
RUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29u
c3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2Ny
aXB0aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVs
ZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxP
QVRfTUFUMywgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9NQVQ0LCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBt
YXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6ZGVj
b3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKG5hbWUu
Y29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9
IDApCi0gICAgewotICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIG5hbWU7Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVV
bmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBzdGQ6OnN0cmluZyBuYW1l
ID0gX25hbWU7Ci0gICAgCi0gICAgLy8gUmVtb3ZlIGFueSBzdHJ1Y3R1cmUgZmllbGQgZGVjb3Jh
dGlvbgotICAgIHNpemVfdCBwb3MgPSAwOwotICAgIHdoaWxlICgocG9zID0gbmFtZS5maW5kKCIu
XyIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSAgICAgICAgbmFtZS5yZXBs
YWNlKHBvcywgMiwgIi4iKTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgZGVj
b3JhdGlvbgotICAgIGlmIChuYW1lWzBdID09ICdfJykKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
YW1lLnN1YnN0cigxKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJh
cl8iKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDMpOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotdm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVu
aWZvcm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRo
LCBjb25zdCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgZmxvYXQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UUyAqIDRdOwotICAgIEJPT0wgYm9vbFZlY3RvcltEM0Q5X01BWF9CT09MX0NPTlNU
QU5UU107Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCB8fCB0
YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCA0OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPCB3
aWR0aCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICog
NCArIGpdID0gKHZbaSAqIHdpZHRoICsgal0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHZlY3RvcltpICogNCArIGpdID0gMC4wZjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbElu
ZGV4ID49IDApCi0gICAgewotICAgICAgICBpbnQgcHNDb3VudCA9IHRhcmdldFVuaWZvcm0tPnBz
LmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCA6IDA7Ci0g
ICAgICAgIGludCB2c0NvdW50ID0gdGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDAgPyB0
YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50IDogMDsKLSAgICAgICAgaW50IGNvcHlDb3Vu
dCA9IHN0ZDo6bWluKGNvdW50ICogd2lkdGgsIHN0ZDo6bWF4KHBzQ291bnQsIHZzQ291bnQpKTsK
LSAgICAgICAgQVNTRVJUKGNvcHlDb3VudCA8PSBEM0Q5X01BWF9CT09MX0NPTlNUQU5UUyk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29weUNvdW50OyBpKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGJvb2xWZWN0b3JbaV0gPSB2W2ldICE9IEdMX0ZBTFNFOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApCi0gICAg
ewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3Jt
LT5wcy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50
KTsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXgg
Pj0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKHRh
cmdldFVuaWZvcm0tPnBzLmJvb2xJbmRleCwgYm9vbFZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMu
cmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotICAgIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5m
bG9hdDRJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVu
aWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0
VmVydGV4U2hhZGVyQ29uc3RhbnRCKHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCwgYm9vbFZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotfQotCi1ib29s
IFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBj
b25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNv
dW50KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFy
Z2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50
KQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdl
dFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5
OjphcHBseVVuaWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NP
TlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5U
U107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAg
ICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdltpXSwgMCwgMCwgMCk7Ci0gICAgfQot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuc2FtcGxlckluZGV4ID49IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHMuc2Ft
cGxlckluZGV4OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCA9IGZpcnN0SW5kZXggKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3Jt
LT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQq
KXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5zYW1wbGVySW5kZXggPj0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT52
cy5zYW1wbGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlcklu
ZGV4IDwgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURikKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhd
LmFjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
bG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5k
ZXgsIChjb25zdCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3Vu
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9n
cmFtQmluYXJ5OjphcHBseVVuaWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFY
X0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FU
X0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZb
MV0sIDAsIDApOwotCi0gICAgICAgIHYgKz0gMjsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1u
aXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm0zaXYoVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50
IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0Qz
RDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlsw
XSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAwKTsKLQotICAgICAgICB2ICs9IDM7Ci0gICAg
fQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50LCB2ZWN0b3IpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3Jt
NGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAg
IEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0g
RDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgKGZsb2F0
KXZbM10pOwotCi0gICAgICAgIHYgKz0gNDsKLSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYo
dGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgR0xzaXplaSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3RvcikKLXsKLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0
YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKTsKLSAgICAgICAgbURldmljZS0+U2V0
UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIChjb25z
dCBmbG9hdCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAg
fQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAg
ICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCk7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9h
dDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQoKSBj
b25zdCAKLXsKLSAgICByZXR1cm4gbVZhbGlkYXRlZDsKLX0KLQotdm9pZCBQcm9ncmFtQmluYXJ5
OjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewot
ICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCi0gICAgdW5zaWduZWQgaW50IGFj
dGl2ZUF0dHJpYnV0ZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsKLSAgICBmb3Ig
KGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRl
KyspCi0gICAgewotICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUu
ZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoYWN0aXZlQXR0cmlidXRlID09IGluZGV4KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGFjdGl2ZUF0dHJpYnV0ZSsrOwotICAg
IH0KLQotICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnN0
cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7Ci0KLSAgICAg
ICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAgICBuYW1lW2J1ZnNpemUg
LSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAg
ICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICpzaXpl
ID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCi0KLSAgICAqdHlwZSA9
IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOwotfQotCi1HTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLQot
ICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1MaW5r
ZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsK
LX0KLQotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkK
LXsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4
ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4
KyspCi0gICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhd
Lm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjpt
YXgoKGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSAr
IDEpLCBtYXhMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0
aDsKLX0KLQotdm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRl
eCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0g
KnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAvLyBTa2lwIG92ZXIgaW50ZXJuYWwgdW5pZm9y
bXMKLSAgICB1bnNpZ25lZCBpbnQgYWN0aXZlVW5pZm9ybSA9IDA7Ci0gICAgdW5zaWduZWQgaW50
IHVuaWZvcm07Ci0gICAgZm9yICh1bmlmb3JtID0gMDsgdW5pZm9ybSA8IG1Vbmlmb3Jtcy5zaXpl
KCk7IHVuaWZvcm0rKykKLSAgICB7Ci0gICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybV0tPm5h
bWUuY29tcGFyZSgwLCAzLCAiZHhfIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aXZlVW5pZm9ybSA9PSBpbmRleCkK
LSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhY3Rp
dmVVbmlmb3JtKys7Ci0gICAgfQotCi0gICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6
ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291
bnQoKQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQotICAgIHsKLSAgICAgICAgc3RkOjpzdHJpbmcg
c3RyaW5nID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lOwotCi0gICAgICAgIGlmIChtVW5pZm9y
bXNbdW5pZm9ybV0tPmlzQXJyYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nICs9
ICJbMF0iOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcuY19zdHIo
KSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAg
ICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5h
bWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKnNpemUgPSBtVW5pZm9ybXNbdW5pZm9ybV0t
PmFycmF5U2l6ZTsKLQotICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBlOwotfQot
Ci1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotewotICAgIGlu
dCBjb3VudCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMu
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1J
bmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICht
VW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGNvdW50OwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3Jt
TWF4TGVuZ3RoKCkKLXsKLSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIHVuc2lnbmVkIGlu
dCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
dW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRl
eCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtVW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5l
bXB0eSgpICYmIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4
XyIpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSAoaW50KShtVW5p
Zm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5sZW5ndGgoKSArIDEpOwotICAgICAgICAgICAgaWYg
KG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5pc0FycmF5KCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbGVuZ3RoICs9IDM7ICAvLyBDb3VudGluZyBpbiAiWzBdIi4KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgbWF4TGVuZ3Ro
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQg
UHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKLXsKLSAgICBhcHBseVVu
aWZvcm1zKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVNhbXBsZXJzKCZpbmZvTG9nKSkKLSAgICB7Ci0g
ICAgICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgbVZhbGlkYXRlZCA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnZh
bGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZykKLXsKLSAgICAvLyBpZiBhbnkgdHdvIGFj
dGl2ZSBzYW1wbGVycyBpbiBhIHByb2dyYW0gYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IHJl
ZmVyIHRvIHRoZSBzYW1lCi0gICAgLy8gdGV4dHVyZSBpbWFnZSB1bml0LCBhbmQgdGhpcyBpcyB0
aGUgY3VycmVudCBwcm9ncmFtLCB0aGVuIFZhbGlkYXRlUHJvZ3JhbSB3aWxsIGZhaWwsIGFuZAot
ICAgIC8vIERyYXdBcnJheXMgYW5kIERyYXdFbGVtZW50cyB3aWxsIGlzc3VlIHRoZSBJTlZBTElE
X09QRVJBVElPTiBlcnJvci4KLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzID0gZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cygpOwotICAgIFRleHR1cmVUeXBlIHRleHR1cmVVbml0VHlwZVtNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7ICsraSkKLSAgICB7
Ci0gICAgICAgIHRleHR1cmVVbml0VHlwZVtpXSA9IFRFWFRVUkVfVU5LTk9XTjsKLSAgICB9Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7
ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlcnNQU1tpXS5hY3RpdmUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bml0ID0gbVNhbXBsZXJzUFNbaV0ubG9naWNh
bFRleHR1cmVVbml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChpbmZvTG9nKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5m
b0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVuaWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTICglZCkiLCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0g
IT0gVEVYVFVSRV9VTktOT1dOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICht
U2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJT
YW1wbGVycyBvZiBjb25mbGljdGluZyB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGlt
YWdlIHVuaXQgKCVkKS4iLCB1bml0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNhbXBsZXJzUFNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAgICBpZiAobVNh
bXBsZXJzVlNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
dW5pdCA9IG1TYW1wbGVyc1ZTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlciB1bmlmb3Jt
ICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpIiwgdW5p
dCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzVlNbaV0udGV4dHVyZVR5cGUgIT0g
dGV4dHVyZVVuaXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGluZm9Mb2cpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3RpbmcgdHlwZXMg
cmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5pdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9IG1TYW1wbGVy
c1ZTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhSYW5n
ZUxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxvY2F0aW9uOwot
fQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5Ojpn
ZXREeENvb3JkTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhDb29yZExvY2F0aW9u
OwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLX0KLQotR0xp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhQb2ludHNP
ckxpbmVzTG9jYXRpb247Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFlOWM1ZTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUHJvZ3JhbS5oOiBEZWZpbmVzIHRoZSBnbDo6UHJv
Z3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVk
IGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4
LgotCi0jaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwotI2RlZmluZSBMSUJHTEVT
VjJfUFJPR1JBTV9CSU5BUllfSF8KLQotI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8ZDNk
Y29tcGlsZXIuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0Lmgi
Ci0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgRnJhZ21lbnRTaGFkZXI7Ci1jbGFzcyBWZXJ0ZXhT
aGFkZXI7Ci0KLS8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1
bmlmb3JtCi1zdHJ1Y3QgVW5pZm9ybQotewotICAgIFVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0
IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7Ci0KLSAgICB+VW5p
Zm9ybSgpOwotCi0gICAgYm9vbCBpc0FycmF5KCk7Ci0KLSAgICBjb25zdCBHTGVudW0gdHlwZTsK
LSAgICBjb25zdCBzdGQ6OnN0cmluZyBfbmFtZTsgICAvLyBEZWNvcmF0ZWQgbmFtZQotICAgIGNv
bnN0IHN0ZDo6c3RyaW5nIG5hbWU7ICAgIC8vIFVuZGVjb3JhdGVkIG5hbWUKLSAgICBjb25zdCB1
bnNpZ25lZCBpbnQgYXJyYXlTaXplOwotCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBi
b29sIGRpcnR5OwotCi0gICAgc3RydWN0IFJlZ2lzdGVySW5mbwotICAgIHsKLSAgICAgICAgUmVn
aXN0ZXJJbmZvKCkKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQ0SW5kZXggPSAtMTsKLSAg
ICAgICAgICAgIHNhbXBsZXJJbmRleCA9IC0xOwotICAgICAgICAgICAgYm9vbEluZGV4ID0gLTE7
Ci0gICAgICAgICAgICByZWdpc3RlckNvdW50ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgc2V0KGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2goY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNl
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RYUlNfQk9PTDogICAgYm9v
bEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBEM0RYUlNfRkxPQVQ0OiAgZmxvYXQ0SW5kZXggPSBjb25zdGFudERl
c2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RY
UlNfU0FNUExFUjogc2FtcGxlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rlcklu
ZGV4OyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyQ291bnQg
PT0gMCB8fCByZWdpc3RlckNvdW50ID09IChpbnQpY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZmxvYXQ0SW5kZXg7Ci0g
ICAgICAgIGludCBzYW1wbGVySW5kZXg7Ci0gICAgICAgIGludCBib29sSW5kZXg7Ci0KLSAgICAg
ICAgaW50IHJlZ2lzdGVyQ291bnQ7Ci0gICAgfTsKLQotICAgIFJlZ2lzdGVySW5mbyBwczsKLSAg
ICBSZWdpc3RlckluZm8gdnM7Ci19OwotCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcg
dW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVu
aWZvcm1Mb2NhdGlvbgotewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAm
X25hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOwotCi0gICAg
c3RkOjpzdHJpbmcgbmFtZTsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKLSAgICB1bnNpZ25l
ZCBpbnQgaW5kZXg7Ci19OwotCi0vLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgbGlua2luZyBhIHBy
b2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBQcm9ncmFtQmlu
YXJ5LgotY2xhc3MgUHJvZ3JhbUJpbmFyeQotewotICBwdWJsaWM6Ci0gICAgUHJvZ3JhbUJpbmFy
eSgpOwotICAgIH5Qcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkg
KmdldFBpeGVsU2hhZGVyKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqZ2V0VmVydGV4
U2hhZGVyKCk7Ci0KLSAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAq
bmFtZSk7Ci0gICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsKLQot
ICAgIEdMaW50IGdldFNhbXBsZXJNYXBwaW5nKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXgpOwotICAgIFRleHR1cmVUeXBlIGdldFNhbXBsZXJUZXh0dXJlVHlwZShT
YW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKLSAgICBHTGludCBn
ZXRVc2VkU2FtcGxlclJhbmdlKFNhbXBsZXJUeXBlIHR5cGUpOwotCi0gICAgR0xpbnQgZ2V0VW5p
Zm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybTFmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9v
bCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRV
bmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0g
ICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdik7Ci0KLSAgICBib29sIGdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKLSAgICBib29sIGdldFVuaWZvcm1pdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7Ci0KLSAgICBH
TGludCBnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4RGVw
dGhMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0
OwotICAgIEdMaW50IGdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xp
bnQgZ2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhQb2ludHNP
ckxpbmVzTG9jYXRpb24oKSBjb25zdDsKLQotICAgIHZvaWQgZGlydHlBbGxVbmlmb3JtcygpOwot
ICAgIHZvaWQgYXBwbHlVbmlmb3JtcygpOwotCi0gICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7Ci0gICAg
dm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291bnQs
IEdMdWludCAqc2hhZGVycyk7Ci0KLSAgICB2b2lkIGdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xl
bnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwotICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0ZUNv
dW50KCk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7Ci0KLSAgICB2
b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKLSAg
ICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKLSAgICBHTGludCBnZXRBY3RpdmVVbmlm
b3JtTWF4TGVuZ3RoKCk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cpOwot
ICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKTsKLSAgICBib29sIGlz
VmFsaWRhdGVkKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRy
aWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2Nv
cmUKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdW5kZWNvcmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpz
dHJpbmcgJl9uYW1lKTsgICAvLyBSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlCi0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFyeSk7Ci0KLSAgICBJ
RDNEMTBCbG9iICpjb21waWxlVG9CaW5hcnkoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAq
aGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhDb25zdGFudFRhYmxlICoqY29uc3RhbnRU
YWJsZSk7Ci0KLSAgICBpbnQgcGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZh
cnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKLSAg
ICBib29sIGxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxI
TFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hh
ZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7Ci0KLSAgICBib29sIGxpbmtBdHRyaWJ1
dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVC
aW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZl
cnRleFNoYWRlcik7Ci0KLSAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBH
TGVudW0gc2hhZGVyLCBJRDNEWENvbnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpOwotICAgIGJv
b2wgZGVmaW5lVW5pZm9ybShJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBE
M0RYSEFORExFICZjb25zdGFudEhhbmRsZSwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0
YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nIG5hbWUgPSAiIik7Ci0gICAgYm9vbCBkZWZpbmVV
bmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERl
c2NyaXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgVW5pZm9ybSAqY3JlYXRl
VW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3Jt
MWl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0zaXYoVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAg
IGJvb2wgYXBwbHlVbmlmb3JtNGl2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0
YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKTsK
LSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVp
IGNvdW50LCBpbnQgd2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdik7Ci0KLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICptRGV2aWNlOwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptUGl4ZWxFeGVj
dXRhYmxlOwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1WZXJ0ZXhFeGVjdXRhYmxlOwot
Ci0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBkdXJpbmcgbGlua2luZy4KLSAgICBJRDNEWENv
bnN0YW50VGFibGUgKm1Db25zdGFudFRhYmxlUFM7Ci0gICAgSUQzRFhDb25zdGFudFRhYmxlICpt
Q29uc3RhbnRUYWJsZVZTOwotCi0gICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKLSAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJT
XTsKLQotICAgIHN0cnVjdCBTYW1wbGVyCi0gICAgewotICAgICAgICBib29sIGFjdGl2ZTsKLSAg
ICAgICAgR0xpbnQgbG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0
dXJlVHlwZTsKLSAgICB9OwotCi0gICAgU2FtcGxlciBtU2FtcGxlcnNQU1tNQVhfVEVYVFVSRV9J
TUFHRV9VTklUU107Ci0gICAgU2FtcGxlciBtU2FtcGxlcnNWU1tNQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFNfVlRGXTsKLSAgICBHTHVpbnQgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7Ci0g
ICAgR0x1aW50IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2U7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFVuaWZvcm0qPiBVbmlmb3JtQXJyYXk7Ci0gICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsK
LSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4Owot
ICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OwotCi0gICAgR0xpbnQgbUR4RGVwdGhSYW5n
ZUxvY2F0aW9uOwotICAgIEdMaW50IG1EeERlcHRoTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4Q29v
cmRMb2NhdGlvbjsKLSAgICBHTGludCBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLSAgICBHTGludCBtRHhQb2ludHNPckxpbmVzTG9jYXRp
b247Ci0KLSAgICBib29sIG1WYWxpZGF0ZWQ7Ci19OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVT
VjJfUFJPR1JBTV9CSU5BUllfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUXVlcnkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9RdWVyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZWRkYTUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVy
eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IFF1ZXJ5LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlF1ZXJ5IGNsYXNzCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvUXVlcnkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVz
cGFjZSBnbAotewotCi1RdWVyeTo6UXVlcnkoR0x1aW50IGlkLCBHTGVudW0gdHlwZSkgOiBSZWZD
b3VudE9iamVjdChpZCkKLXsgCi0gICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICBtU3RhdHVzID0gR0xf
RkFMU0U7Ci0gICAgbVJlc3VsdCA9IEdMX0ZBTFNFOwotICAgIG1UeXBlID0gdHlwZTsKLX0KLQot
UXVlcnk6On5RdWVyeSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAg
ICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQotfQot
Ci12b2lkIFF1ZXJ5OjpiZWdpbigpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsK
LSAgICAgICAgaWYgKEZBSUxFRChnZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBF
X09DQ0xVU0lPTiwgJm1RdWVyeSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJl
c3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfQkVHSU4pOwotICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci19Ci0KLXZvaWQgUXVlcnk6OmVuZCgpCi17Ci0gICAgaWYgKG1RdWVyeSA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVf
RU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIAotICAgIG1TdGF0dXMg
PSBHTF9GQUxTRTsKLSAgICBtUmVzdWx0ID0gR0xfRkFMU0U7Ci19Ci0KLUdMdWludCBRdWVyeTo6
Z2V0UmVzdWx0KCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAgICB3
aGlsZSAoIXRlc3RRdWVyeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBTbGVlcCgwKTsKLSAg
ICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCi0gICAgICAgICAg
ICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZp
Y2UgaXMgbG9zdAotICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBs
aWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAgICBpZiAoZ2w6OmdldERpc3BsYXkoKS0+dGVzdERl
dmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6Z2V0RGlzcGxh
eSgpLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIChHTHVpbnQpbVJlc3VsdDsKLX0KLQotR0xib29sZWFuIFF1ZXJ5Ojppc1Jlc3Vs
dEF2YWlsYWJsZSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAg
dGVzdFF1ZXJ5KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtU3RhdHVzOwotfQotCi1HTGVu
dW0gUXVlcnk6OmdldFR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtVHlwZTsKLX0KLQotR0xi
b29sZWFuIFF1ZXJ5Ojp0ZXN0UXVlcnkoKQotewotICAgIGlmIChtUXVlcnkgIT0gTlVMTCAmJiBt
U3RhdHVzICE9IEdMX1RSVUUpCi0gICAgewotICAgICAgICBEV09SRCBudW1QaXhlbHMgPSAwOwot
Ci0gICAgICAgIEhSRVNVTFQgaHJlcyA9IG1RdWVyeS0+R2V0RGF0YSgmbnVtUGl4ZWxzLCBzaXpl
b2YoRFdPUkQpLCBEM0RHRVREQVRBX0ZMVVNIKTsKLSAgICAgICAgaWYgKGhyZXMgPT0gU19PSykK
LSAgICAgICAgewotICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAobVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5Z
X1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19Q
QVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAgICBtUmVzdWx0ID0gKG51bVBp
eGVscyA+IDApID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2hlY2tEZXZpY2VMb3N0
KGhyZXMpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtU3Rh
dHVzOwotICAgIH0KLQotICAgIHJldHVybiBHTF9UUlVFOyAvLyBwcmV2ZW50IGJsb2NraW5nIHdo
ZW4gcXVlcnkgaXMgbnVsbAotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9RdWVyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTM1N2EwLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnku
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBRdWVy
eS5oOiBEZWZpbmVzIHRoZSBnbDo6UXVlcnkgY2xhc3MKLQotI2lmbmRlZiBMSUJHTEVTVjJfUVVF
UllfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1FVRVJZX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAot
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0K
LW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBRdWVyeSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAot
ewotICBwdWJsaWM6Ci0gICAgUXVlcnkoR0x1aW50IGlkLCBHTGVudW0gdHlwZSk7Ci0gICAgdmly
dHVhbCB+UXVlcnkoKTsKLQotICAgIHZvaWQgYmVnaW4oKTsKLSAgICB2b2lkIGVuZCgpOwotICAg
IEdMdWludCBnZXRSZXN1bHQoKTsKLSAgICBHTGJvb2xlYW4gaXNSZXN1bHRBdmFpbGFibGUoKTsK
LQotICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUXVlcnkpOwotCi0gICAgR0xib29sZWFuIHRlc3RRdWVyeSgpOwot
Ci0gICAgSURpcmVjdDNEUXVlcnk5KiBtUXVlcnk7Ci0gICAgR0xlbnVtIG1UeXBlOwotICAgIEdM
Ym9vbGVhbiBtU3RhdHVzOwotICAgIEdMaW50IG1SZXN1bHQ7Ci19OwotCi19Ci0KLSNlbmRpZiAg
IC8vIExJQkdMRVNWMl9RVUVSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SRUFETUUgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjdkM2Y1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SRUFETUUKQEAgLTAsMCArMSBAQAorVGhpcyBkaXJlY3RvcnkncyBjb250ZW50cyBhcmUgbm90
IHN5bmNlZCBmcm9tIHRoZSBBTkdMRSBwcm9qZWN0IGJlY2F1c2Ugbm8gcGxhdGZvcm0gaW4gV2Vi
S2l0IG5lZWRzIHRoZW0geWV0LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5MTFlOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1NzcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVu
ZGVyYnVmZmVyLmNwcDogdGhlIGdsOjpSZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVk
IGNsYXNzZXMKLS8vIENvbG9yYnVmZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4g
SW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIKLS8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rp
b25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBSZW5kZXJi
dWZmZXJTdG9yYWdlOjptQ3VycmVudFNlcmlhbCA9IDE7Ci0KLVJlbmRlcmJ1ZmZlckludGVyZmFj
ZTo6UmVuZGVyYnVmZmVySW50ZXJmYWNlKCkKLXsKLX0KLQotLy8gVGhlIGRlZmF1bHQgY2FzZSBm
b3IgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBSZW5kZXJidWZmZXJJbnRlcmZhY2UgaXMgbm90IHRv
Ci0vLyBuZWVkIHRvIGRvIGFueXRoaW5nIHVwb24gdGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGUg
cGFyZW50IFJlbmRlcmJ1ZmZlciBpbmNyZW1lbnRpbmcKLS8vIG9yIGRlY3JlbWVudGluZy4gCi12
b2lkIFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKLXsKLX0KLQotdm9pZCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OnJlbGVhc2VQcm94
eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlOjpnZXRSZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZHgyZXM6OkdldFJl
ZFNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNl
OjpnZXRHcmVlblNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0R3JlZW5TaXpl
KGdldEQzREZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0
Qmx1ZVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0Qmx1ZVNpemUoZ2V0RDNE
Rm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRBbHBoYVNp
emUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0QWxwaGFTaXplKGdldEQzREZvcm1h
dCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0RGVwdGhTaXplKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZHgyZXM6OkdldERlcHRoU2l6ZShnZXREM0RGb3JtYXQoKSk7
Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZHgyZXM6OkdldFN0ZW5jaWxTaXplKGdldEQzREZvcm1hdCgpKTsK
LX0KLQotLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTJEIEltcGxlbWVudGF0aW9uIC8vLy8vLy8v
Ci0KLVJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUy
RCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKLXsKLSAgICBtVGV4
dHVyZTJELnNldCh0ZXh0dXJlKTsKLX0KLQotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjp+UmVuZGVy
YnVmZmVyVGV4dHVyZTJEKCkKLXsKLSAgICBtVGV4dHVyZTJELnNldChOVUxMKTsKLX0KLQotLy8g
VGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50IGZvciBy
ZWZlcmVuY2VzIHZpYQotLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4gSGVyZSwg
d2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgotdm9pZCBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAg
bVRleHR1cmUyRC0+YWRkUHJveHlSZWYocHJveHkpOwotfQotCi12b2lkIFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAg
bVRleHR1cmUyRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBz
dXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRSZW5k
ZXJUYXJnZXQoKQotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXQobVRh
cmdldCk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkg
KlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICByZXR1cm4g
bVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2lsKG1UYXJnZXQpOwotfQotCi1HTHNpemVpIFJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVy
ZTJELT5nZXRXaWR0aCgwKTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsK
LX0KLQotR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBj
b25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKLX0K
LQotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RDNERm9ybWF0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RDNERm9ybWF0KDApOwotfQotCi1HTHNpemVp
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbCht
VGFyZ2V0KTsKLX0KLQotLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KLQotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6
IG1UYXJnZXQodGFyZ2V0KQotewotICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7Ci19
Ci0KLVJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjp+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAoKQotewotICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQoTlVMTCk7Ci19Ci0KLS8vIFRleHR1cmVz
IG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNl
cyB2aWEKLS8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlm
eSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgbVRl
eHR1cmVDdWJlTWFwLT5hZGRQcm94eVJlZihwcm94eSk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQot
ewotICAgIG1UZXh0dXJlQ3ViZU1hcC0+cmVsZWFzZVByb3h5KHByb3h5KTsKLX0KLQotLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1h
cC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50
IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZh
Y2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVw
dGhTdGVuY2lsKCkKLXsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVy
ZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7Ci19
Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCwgMCk7Ci19Ci0KLUdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZUN1
YmVNYXAtPmdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwg
MCk7Ci19Ci0KLUQzREZPUk1BVCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9y
bWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXREM0RGb3JtYXQo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotR0xzaXplaSBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRT
ZXJpYWwobVRhcmdldCk7Ci19Ci0KLS8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24g
Ly8vLy8vCi0KLVJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKLXsKLSAgICBBU1NF
UlQoaW5zdGFuY2UgIT0gTlVMTCk7Ci0gICAgbUluc3RhbmNlID0gaW5zdGFuY2U7Ci19Ci0KLVJl
bmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgZGVsZXRlIG1JbnN0YW5jZTsKLX0K
LQotLy8gVGhlIFJlbmRlcmJ1ZmZlckludGVyZmFjZSBjb250YWluZWQgaW4gdGhpcyBSZW5kZXJi
dWZmZXIgbWF5IG5lZWQgdG8gbWFpbnRhaW4KLS8vIGl0cyBvd24gcmVmZXJlbmNlIGNvdW50LCBz
byB3ZSBwYXNzIGl0IG9uIGhlcmUuCi12b2lkIFJlbmRlcmJ1ZmZlcjo6YWRkUmVmKCkgY29uc3QK
LXsKLSAgICBtSW5zdGFuY2UtPmFkZFByb3h5UmVmKHRoaXMpOwotCi0gICAgUmVmQ291bnRPYmpl
Y3Q6OmFkZFJlZigpOwotfQotCi12b2lkIFJlbmRlcmJ1ZmZlcjo6cmVsZWFzZSgpIGNvbnN0Ci17
Ci0gICAgbUluc3RhbmNlLT5yZWxlYXNlUHJveHkodGhpcyk7Ci0KLSAgICBSZWZDb3VudE9iamVj
dDo6cmVsZWFzZSgpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0v
LyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1
cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1J
bnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsK
LSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKLX0KLQotR0xzaXplaSBS
ZW5kZXJidWZmZXI6OmdldFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5n
ZXRXaWR0aCgpOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0SGVpZ2h0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRIZWlnaHQoKTsKLX0KLQotR0xlbnVtIFJlbmRl
cmJ1ZmZlcjo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFu
Y2UtPmdldEludGVybmFsRm9ybWF0KCk7Ci19Ci0KLUQzREZPUk1BVCBSZW5kZXJidWZmZXI6Omdl
dEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RDNERm9ybWF0
KCk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXI6OmdldFJlZFNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBtSW5zdGFuY2UtPmdldFJlZFNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
cjo6Z2V0R3JlZW5TaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRHcmVl
blNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0Qmx1ZVNpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEJsdWVTaXplKCk7Ci19Ci0KLUdMdWludCBSZW5k
ZXJidWZmZXI6OmdldEFscGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+
Z2V0QWxwaGFTaXplKCk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXI6OmdldERlcHRoU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTaXplKCk7Ci19Ci0KLUdM
dWludCBSZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUluc3RhbmNlLT5nZXRTdGVuY2lsU2l6ZSgpOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlcjo6
Z2V0U2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2FtcGxlcygp
OwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwoKSBjb25zdAotewot
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFNlcmlhbCgpOwotfQotCi12b2lkIFJlbmRlcmJ1ZmZl
cjo6c2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpuZXdTdG9yYWdlKQotewotICAgIEFT
U0VSVChuZXdTdG9yYWdlICE9IE5VTEwpOwotCi0gICAgZGVsZXRlIG1JbnN0YW5jZTsKLSAgICBt
SW5zdGFuY2UgPSBuZXdTdG9yYWdlOwotfQotCi1SZW5kZXJidWZmZXJTdG9yYWdlOjpSZW5kZXJi
dWZmZXJTdG9yYWdlKCkgOiBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCi17Ci0gICAgbVdpZHRoID0g
MDsKLSAgICBtSGVpZ2h0ID0gMDsKLSAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBNDsKLSAg
ICBtRDNERm9ybWF0ID0gRDNERk1UX0E4UjhHOEI4OwotICAgIG1TYW1wbGVzID0gMDsKLX0KLQot
UmVuZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0b3JhZ2UoKQotewotfQotCi0vLyBJ
bmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkg
dGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJTdG9y
YWdlOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAgIHJldHVybiBOVUxMOwotfQotCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJTdG9yYWdl
OjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBOVUxMOwotfQotCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdpZHRo
OwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEhlaWdodCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1IZWlnaHQ7Ci19Ci0KLUdMZW51bSBSZW5kZXJidWZmZXJTdG9yYWdlOjpn
ZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnRlcm5hbEZvcm1hdDsK
LX0KLQotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEQzREZvcm1hdCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1EM0RGb3JtYXQ7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyU3Rv
cmFnZTo6Z2V0U2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TYW1wbGVzOwotfQotCi11
bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6
Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKLX0KLQotdW5z
aWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKQotewotICAg
IHVuc2lnbmVkIGludCBmaXJzdFNlcmlhbCA9IG1DdXJyZW50U2VyaWFsOwotICAgIG1DdXJyZW50
U2VyaWFsICs9IDY7Ci0gICAgcmV0dXJuIGZpcnN0U2VyaWFsOwotfQotCi1Db2xvcmJ1ZmZlcjo6
Q29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkgOiBtUmVuZGVyVGFy
Z2V0KHJlbmRlclRhcmdldCkKLXsKLSAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKLQotICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
Y3JpcHRpb247Ci0gICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwot
Ci0gICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOwotICAgICAgICBtSGVpZ2h0ID0g
ZGVzY3JpcHRpb24uSGVpZ2h0OwotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkeDJlczo6Q29u
dmVydEJhY2tCdWZmZXJGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbUQzREZv
cm1hdCA9IGRlc2NyaXB0aW9uLkZvcm1hdDsKLSAgICAgICAgbVNhbXBsZXMgPSBkeDJlczo6R2V0
U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoZGVzY3JpcHRpb24uTXVsdGlTYW1wbGVUeXBlKTsK
LSAgICB9Ci19Ci0KLUNvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwp
Ci17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBE
M0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0ID0gZXMyZHg6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQoZm9ybWF0KTsKLSAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IGdldENvbnRleHQoKS0+Z2V0
TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsKLQotICAg
IGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVxdWVzdGVkRm9ybWF0LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6
R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksIDAsIEZBTFNF
LCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewot
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
fQotCi0gICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICBtSW50
ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7Ci0gICAgbUQzREZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsK
LSAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLUNvbG9yYnVmZmVyOjp+Q29s
b3JidWZmZXIoKQotewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJl
bmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqQ29sb3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCi17
Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5B
ZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKLX0KLQotRGVwdGhT
dGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRo
U3RlbmNpbCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKLXsKLSAgICBpZiAoZGVwdGhT
dGVuY2lsKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsLT5BZGRSZWYoKTsKLQotICAgICAg
ICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0
RGVzYygmZGVzY3JpcHRpb24pOwotCi0gICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRo
OwotICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0OwotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgPSBkeDJlczo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXNjcmlwdGlvbi5G
b3JtYXQpOwotICAgICAgICBtU2FtcGxlcyA9IGR4MmVzOjpHZXRTYW1wbGVzRnJvbU11bHRpc2Ft
cGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOyAKLSAgICAgICAgbUQzREZvcm1h
dCA9IGRlc2NyaXB0aW9uLkZvcm1hdDsKLSAgICB9Ci19Ci0KLURlcHRoU3RlbmNpbGJ1ZmZlcjo6
RGVwdGhTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVz
KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAg
bURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgCi0gICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBn
ZXRDb250ZXh0KCktPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZNVF9EMjRTOCwgc2Ft
cGxlcyk7Ci0KLSAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKLSAgICB7Ci0gICAgICAg
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0gICAgewotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBE
M0RGTVRfRDI0UzgsIGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0
ZWRTYW1wbGVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCAwKTsKLQotICAgICAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBtV2lkdGggPSB3aWR0aDsKLSAgICBtSGVpZ2h0
ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfRDI0Uzg7Ci0gICAgbVNhbXBsZXMgPSBzdXBwb3J0
ZWRTYW1wbGVzOwotfQotCi1EZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZmZXIo
KQotewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNp
bC0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGly
ZWN0M0RTdXJmYWNlOSAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQotewot
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRk
UmVmKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLURlcHRoYnVm
ZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKSA6IERlcHRo
U3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCi17Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAg
ICB7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OyAgIC8v
IElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcg
ZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBm
b3IgdXNlIGluIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKLSAgICB9Ci19Ci0KLURlcHRoYnVmZmVyOjpE
ZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0
aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykKLXsKLSAgICBpZiAobURlcHRo
U3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBP
TkVOVDE2OyAgIC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwg
dGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZm
ZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKLSAgICB9Ci19Ci0KLURl
cHRoYnVmZmVyOjp+RGVwdGhidWZmZXIoKQotewotfQotCi1TdGVuY2lsYnVmZmVyOjpTdGVuY2ls
YnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogRGVwdGhTdGVuY2lsYnVm
ZmVyKGRlcHRoU3RlbmNpbCkKLXsKLSAgICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAg
ICAgbUludGVybmFsRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRFWDg7ICAgLy8gSWYgdGhlIHJlbmRl
cmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVj
dCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVm
ZmVyU3RvcmFnZQotICAgIH0KLX0KLQotU3RlbmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihpbnQg
d2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIo
d2lkdGgsIGhlaWdodCwgc2FtcGxlcykKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7
Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4OyAgIC8vIElmIHRo
ZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rp
b24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2ls
bCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGlu
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2UKLSAgICB9Ci19Ci0KLVN0ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVm
ZmVyKCkKLXsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2
ZDVkZGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBSZW5kZXJidWZmZXIuaDogRGVmaW5lcyB0aGUgd3JhcHBlciBjbGFz
cyBnbDo6UmVuZGVyYnVmZmVyLCBhcyB3ZWxsIGFzIHRoZQotLy8gY2xhc3MgaGllcmFyY2h5IHVz
ZWQgdG8gc3RvcmUgaXRzIGNvbnRlbnRzOiBSZW5kZXJidWZmZXJTdG9yYWdlLCBDb2xvcmJ1ZmZl
ciwKLS8vIERlcHRoU3RlbmNpbGJ1ZmZlciwgRGVwdGhidWZmZXIgYW5kIFN0ZW5jaWxidWZmZXIu
IEltcGxlbWVudHMgR0wgcmVuZGVyYnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0
aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNC4zIHBhZ2UgMTA4LgotCi0j
aWZuZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkJVRkZFUl9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
LSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2lu
Y2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNz
IFRleHR1cmUyRDsKLWNsYXNzIFRleHR1cmVDdWJlTWFwOwotY2xhc3MgUmVuZGVyYnVmZmVyOwot
Y2xhc3MgQ29sb3JidWZmZXI7Ci1jbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7Ci0KLWNsYXNzIFJl
bmRlcmJ1ZmZlckludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVySW50ZXJm
YWNlKCk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJJbnRlcmZhY2UoKSB7fTsKLQotICAg
IHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwot
Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCkgPSAwOwot
ICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpID0gMDsKLQot
ICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVy
bmFsRm9ybWF0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1h
dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0g
MDsKLQotICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVu
U2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWlu
dCBnZXRBbHBoYVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7
Ci0gICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdCA9IDA7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVySW50ZXJmYWNlKTsKLX07Ci0KLWNsYXNzIFJl
bmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKLXsKLSAg
cHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdM
ZW51bSB0YXJnZXQpOwotCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7Ci0K
LSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZv
aWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdl
dEQzREZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKLQotICBw
cml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJl
MkQpOwotCi0gICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4gbVRleHR1cmUyRDsKLSAgICBH
TGVudW0gbVRhcmdldDsKLX07Ci0KLWNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDog
cHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQp
OwotCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKLQotICAgIHZv
aWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRo
U3RlbmNpbCgpOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdl
dEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9y
bWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KTsKLQotICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFw
OwotICAgIEdMZW51bSBtVGFyZ2V0OwotfTsKLQotLy8gQSBjbGFzcyBkZXJpdmVkIGZyb20gUmVu
ZGVyYnVmZmVyU3RvcmFnZSBpcyBjcmVhdGVkIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZQotLy8gaXMgY2FsbGVkLiBUaGUgc3BlY2lmaWMgY29uY3JldGUgdHlwZSBkZXBlbmRzIG9uIHdo
ZXRoZXIgdGhlIGludGVybmFsIGZvcm1hdCBpcwotLy8gY29sb3VyIGRlcHRoLCBzdGVuY2lsIG9y
IHBhY2tlZCBkZXB0aC9zdGVuY2lsLgotY2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZSA6IHB1Ymxp
YyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKLXsKLSAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclN0
b3JhZ2UoKTsKLQotICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0
dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRTZXJpYWwoKSBjb25zdDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwo
KTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlQ3ViZVNlcmlhbHMoKTsKLQotICBwcm90
ZWN0ZWQ6Ci0gICAgR0xzaXplaSBtV2lkdGg7Ci0gICAgR0xzaXplaSBtSGVpZ2h0OwotICAgIEdM
ZW51bSBtSW50ZXJuYWxGb3JtYXQ7Ci0gICAgRDNERk9STUFUIG1EM0RGb3JtYXQ7Ci0gICAgR0xz
aXplaSBtU2FtcGxlczsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJidWZmZXJTdG9yYWdlKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtU2VyaWFs
OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKLX07Ci0KLS8vIFJl
bmRlcmJ1ZmZlciBpbXBsZW1lbnRzIHRoZSBHTCByZW5kZXJidWZmZXIgb2JqZWN0LgotLy8gSXQn
cyBvbmx5IGEgcHJveHkgZm9yIGEgUmVuZGVyYnVmZmVySW50ZXJmYWNlIGluc3RhbmNlOyB0aGUg
aW50ZXJuYWwgb2JqZWN0Ci0vLyBjYW4gY2hhbmdlIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZSBpcyBjYWxsZWQuCi1jbGFzcyBSZW5kZXJidWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmpl
Y3QKLXsKLSAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZl
ckludGVyZmFjZSAqc3RvcmFnZSk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXIoKTsKLQot
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBmcm9tIFJlZkNvdW50T2JqZWN0IGFyZSBvdmVybG9hZGVk
IGhlcmUgYmVjYXVzZQotICAgIC8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3du
IGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gdGhlbSB2aWEKLSAgICAvLyBSZW5kZXJidWZmZXJzL1Jl
bmRlcmJ1ZmZlclRleHR1cmVzLiBUaGVzZSBmdW5jdGlvbnMgaW52b2tlIHRob3NlCi0gICAgLy8g
cmVmZXJlbmNlIGNvdW50aW5nIGZ1bmN0aW9ucyBvbiB0aGUgUmVuZGVyYnVmZmVySW50ZXJmYWNl
LgotICAgIHZvaWQgYWRkUmVmKCkgY29uc3Q7Ci0gICAgdm9pZCByZWxlYXNlKCkgY29uc3Q7Ci0K
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgR0xzaXplaSBnZXRXaWR0aCgpIGNv
bnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldEludGVy
bmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0Owot
ICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6ZSgp
IGNvbnN0OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRB
bHBoYVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0gICAg
R0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0gICAgR0xzaXplaSBnZXRTYW1wbGVzKCkg
Y29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgICB2b2lk
IHNldFN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqbmV3U3RvcmFnZSk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyKTsKLQotICAgIFJl
bmRlcmJ1ZmZlckludGVyZmFjZSAqbUluc3RhbmNlOwotfTsKLQotY2xhc3MgQ29sb3JidWZmZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVyU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
Q29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7Ci0gICAgQ29sb3Ji
dWZmZXIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgc2FtcGxlcyk7Ci0KLSAgICB2aXJ0dWFsIH5Db2xvcmJ1ZmZlcigpOwotCi0gICAgdmlydHVh
bCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29sb3JidWZmZXIpOwotCi0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7Ci19OwotCi1jbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVyU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
RGVwdGhTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwotICAg
IERlcHRoU3RlbmNpbGJ1ZmZlcihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBzYW1wbGVzKTsKLQotICAgIH5EZXB0aFN0ZW5jaWxidWZmZXIoKTsKLQotICAgIHZpcnR1YWwg
SURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gIHByb3RlY3RlZDoKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXB0aFN0ZW5jaWxidWZmZXIpOwotfTsKLQotY2xhc3Mg
RGVwdGhidWZmZXIgOiBwdWJsaWMgRGVwdGhTdGVuY2lsYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsK
LSAgICBEZXB0aGJ1ZmZlcihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBz
YW1wbGVzKTsKLQotICAgIHZpcnR1YWwgfkRlcHRoYnVmZmVyKCk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVwdGhidWZmZXIpOwotfTsKLQotY2xhc3MgU3Rl
bmNpbGJ1ZmZlciA6IHB1YmxpYyBEZXB0aFN0ZW5jaWxidWZmZXIKLXsKLSAgcHVibGljOgotICAg
IGV4cGxpY2l0IFN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7
Ci0gICAgU3RlbmNpbGJ1ZmZlcihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBzYW1wbGVzKTsKLQotICAgIHZpcnR1YWwgflN0ZW5jaWxidWZmZXIoKTsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdGVuY2lsYnVmZmVyKTsKLX07Ci19Ci0K
LSNlbmRpZiAgIC8vIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyNjM1Mi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzMjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVz
b3VyY2VNYW5hZ2VyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlc291cmNlTWFuYWdlciBjbGFz
cywgd2hpY2ggdHJhY2tzIGFuZCAKLS8vIHJldHJpZXZlcyBvYmplY3RzIHdoaWNoIG1heSBiZSBz
aGFyZWQgYnkgbXVsdGlwbGUgQ29udGV4dHMuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3Vy
Y2VNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0
dXJlLmgiCi0KLW5hbWVzcGFjZSBnbAotewotUmVzb3VyY2VNYW5hZ2VyOjpSZXNvdXJjZU1hbmFn
ZXIoKQotewotICAgIG1SZWZDb3VudCA9IDE7Ci19Ci0KLVJlc291cmNlTWFuYWdlcjo6flJlc291
cmNlTWFuYWdlcigpCi17Ci0gICAgd2hpbGUgKCFtQnVmZmVyTWFwLmVtcHR5KCkpCi0gICAgewot
ICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQot
Ci0gICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRl
UHJvZ3JhbShtUHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUg
KCFtU2hhZGVyTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVTaGFkZXIobVNoYWRl
ck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUmVuZGVyYnVmZmVy
TWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIobVJlbmRlcmJ1
ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtVGV4dHVyZU1h
cC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdp
bigpLT5maXJzdCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6YWRkUmVmKCkK
LXsKLSAgICBtUmVmQ291bnQrKzsKLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OnJlbGVhc2Uo
KQotewotICAgIGlmICgtLW1SZWZDb3VudCA9PSAwKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRo
aXM7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBidWZmZXIgbmFtZQotR0x1aW50
IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0g
bUJ1ZmZlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbUJ1ZmZlck1hcFtoYW5k
bGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51
c2VkIHNoYWRlci9wcm9ncmFtIG5hbWUKLUdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNo
YWRlcihHTGVudW0gdHlwZSkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbVByb2dyYW1TaGFkZXJI
YW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIGlmICh0eXBlID09IEdMX1ZFUlRFWF9T
SEFERVIpCi0gICAgewotICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4U2hh
ZGVyKHRoaXMsIGhhbmRsZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRlJBR01F
TlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgbVNoYWRlck1hcFtoYW5kbGVdID0gbmV3IEZyYWdt
ZW50U2hhZGVyKHRoaXMsIGhhbmRsZSk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHByb2dyYW0v
c2hhZGVyIG5hbWUKLUdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVByb2dyYW0oKQotewot
ICAgIEdMdWludCBoYW5kbGUgPSBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0
ZSgpOwotCi0gICAgbVByb2dyYW1NYXBbaGFuZGxlXSA9IG5ldyBQcm9ncmFtKHRoaXMsIGhhbmRs
ZSk7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCB0ZXh0
dXJlIG5hbWUKLUdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVRleHR1cmUoKQotewotICAg
IEdMdWludCBoYW5kbGUgPSBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0g
ICAgbVRleHR1cmVNYXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQot
Ci0vLyBSZXR1cm5zIGFuIHVudXNlZCByZW5kZXJidWZmZXIgbmFtZQotR0x1aW50IFJlc291cmNl
TWFuYWdlcjo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbVJl
bmRlcmJ1ZmZlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbVJlbmRlcmJ1ZmZl
ck1hcFtoYW5kbGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VNYW5hZ2VyOjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBCdWZmZXJN
YXA6Oml0ZXJhdG9yIGJ1ZmZlck9iamVjdCA9IG1CdWZmZXJNYXAuZmluZChidWZmZXIpOwotCi0g
ICAgaWYgKGJ1ZmZlck9iamVjdCAhPSBtQnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAg
bUJ1ZmZlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGJ1ZmZlck9iamVjdC0+Zmlyc3QpOwotICAg
ICAgICBpZiAoYnVmZmVyT2JqZWN0LT5zZWNvbmQpIGJ1ZmZlck9iamVjdC0+c2Vjb25kLT5yZWxl
YXNlKCk7Ci0gICAgICAgIG1CdWZmZXJNYXAuZXJhc2UoYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsK
LSAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJNYXAuZmluZChz
aGFkZXIpOwotCi0gICAgaWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVuZCgpKQotICAg
IHsKLSAgICAgICAgaWYgKHNoYWRlck9iamVjdC0+c2Vjb25kLT5nZXRSZWZDb3VudCgpID09IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2Uoc2hhZGVyT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgICAgICBkZWxldGUgc2hhZGVyT2Jq
ZWN0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBtU2hhZGVyTWFwLmVyYXNlKHNoYWRlck9iamVjdCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGFkZXJP
YmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewot
ICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW1PYmplY3QgPSBtUHJvZ3JhbU1hcC5maW5k
KHByb2dyYW0pOwotCi0gICAgaWYgKHByb2dyYW1PYmplY3QgIT0gbVByb2dyYW1NYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5nZXRSZWZDb3VudCgp
ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2Nh
dG9yLnJlbGVhc2UocHJvZ3JhbU9iamVjdC0+Zmlyc3QpOwotICAgICAgICAgICAgZGVsZXRlIHBy
b2dyYW1PYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dy
YW1PYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgeyAKLSAgICAgICAg
ICAgIHByb2dyYW1PYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVUZXh0dXJlKEdMdWludCB0
ZXh0dXJlKQotewotICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmVPYmplY3QgPSBtVGV4
dHVyZU1hcC5maW5kKHRleHR1cmUpOwotCi0gICAgaWYgKHRleHR1cmVPYmplY3QgIT0gbVRleHR1
cmVNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvci5yZWxl
YXNlKHRleHR1cmVPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPnNl
Y29uZCkgdGV4dHVyZU9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJl
TWFwLmVyYXNlKHRleHR1cmVPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFn
ZXI6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIFJlbmRl
cmJ1ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVJlbmRlcmJ1ZmZlck1h
cC5maW5kKHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0ICE9IG1S
ZW5kZXJidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBtUmVuZGVyYnVmZmVySGFuZGxl
QWxsb2NhdG9yLnJlbGVhc2UocmVuZGVyYnVmZmVyT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlm
IChyZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZCkgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQt
PnJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcC5lcmFzZShyZW5kZXJidWZmZXJP
YmplY3QpOwotICAgIH0KLX0KLQotQnVmZmVyICpSZXNvdXJjZU1hbmFnZXI6OmdldEJ1ZmZlcih1
bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0g
bUJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoYnVmZmVyID09IG1CdWZmZXJNYXAu
ZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KLQotU2hhZGVyICpS
ZXNvdXJjZU1hbmFnZXI6OmdldFNoYWRlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIFNo
YWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyID0gbVNoYWRlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAg
ICBpZiAoc2hhZGVyID09IG1TaGFkZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNoYWRlci0+c2Vj
b25kOwotICAgIH0KLX0KLQotVGV4dHVyZSAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRUZXh0dXJlKHVu
c2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSAwKSByZXR1cm4gTlVMTDsK
LQotICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmUgPSBtVGV4dHVyZU1hcC5maW5kKGhh
bmRsZSk7Ci0KLSAgICBpZiAodGV4dHVyZSA9PSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1
cm4gdGV4dHVyZS0+c2Vjb25kOwotICAgIH0KLX0KLQotUHJvZ3JhbSAqUmVzb3VyY2VNYW5hZ2Vy
OjpnZXRQcm9ncmFtKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgUHJvZ3JhbU1hcDo6aXRl
cmF0b3IgcHJvZ3JhbSA9IG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChwcm9n
cmFtID09IG1Qcm9ncmFtTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9ncmFtLT5zZWNvbmQ7Ci0g
ICAgfQotfQotCi1SZW5kZXJidWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0UmVuZGVyYnVmZmVy
KHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciBy
ZW5kZXJidWZmZXIgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChy
ZW5kZXJidWZmZXIgPT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gcmVuZGVy
YnVmZmVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVu
ZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQotewotICAgIG1S
ZW5kZXJidWZmZXJNYXBbaGFuZGxlXSA9IGJ1ZmZlcjsKLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFn
ZXI6OmNoZWNrQnVmZmVyQWxsb2NhdGlvbih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIGlm
IChidWZmZXIgIT0gMCAmJiAhZ2V0QnVmZmVyKGJ1ZmZlcikpCi0gICAgewotICAgICAgICBCdWZm
ZXIgKmJ1ZmZlck9iamVjdCA9IG5ldyBCdWZmZXIoYnVmZmVyKTsKLSAgICAgICAgbUJ1ZmZlck1h
cFtidWZmZXJdID0gYnVmZmVyT2JqZWN0OwotICAgICAgICBidWZmZXJPYmplY3QtPmFkZFJlZigp
OwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrVGV4dHVyZUFsbG9jYXRp
b24oR0x1aW50IHRleHR1cmUsIFRleHR1cmVUeXBlIHR5cGUpCi17Ci0gICAgaWYgKCFnZXRUZXh0
dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKLSAgICB7Ci0gICAgICAgIFRleHR1cmUgKnRl
eHR1cmVPYmplY3Q7Ci0KLSAgICAgICAgaWYgKHR5cGUgPT0gVEVYVFVSRV8yRCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlMkQodGV4dHVyZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBURVhUVVJFX0NVQkUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVyZUN1YmVNYXAodGV4dHVy
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbVRl
eHR1cmVNYXBbdGV4dHVyZV0gPSB0ZXh0dXJlT2JqZWN0OwotICAgICAgICB0ZXh0dXJlT2JqZWN0
LT5hZGRSZWYoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1JlbmRl
cmJ1ZmZlckFsbG9jYXRpb24oR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAocmVuZGVy
YnVmZmVyICE9IDAgJiYgIWdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQotICAgIHsKLSAg
ICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBuZXcgUmVuZGVyYnVmZmVy
KHJlbmRlcmJ1ZmZlciwgbmV3IENvbG9yYnVmZmVyKDAsIDAsIEdMX1JHQkE0LCAwKSk7Ci0gICAg
ICAgIG1SZW5kZXJidWZmZXJNYXBbcmVuZGVyYnVmZmVyXSA9IHJlbmRlcmJ1ZmZlck9iamVjdDsK
LSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5hZGRSZWYoKTsKLSAgICB9Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VN
YW5hZ2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNl
TWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTg1ZmM5Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5h
Z2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gUmVzb3VyY2VNYW5hZ2VyLmggOiBEZWZpbmVzIHRoZSBSZXNvdXJjZU1hbmFnZXIgY2xh
c3MsIHdoaWNoIHRyYWNrcyBvYmplY3RzCi0vLyBzaGFyZWQgYnkgbXVsdGlwbGUgR0wgY29udGV4
dHMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9IXwotI2RlZmluZSBMSUJH
TEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0KLSNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBCdWZmZXI7Ci1jbGFzcyBTaGFkZXI7Ci1jbGFzcyBQcm9n
cmFtOwotY2xhc3MgVGV4dHVyZTsKLWNsYXNzIFJlbmRlcmJ1ZmZlcjsKLQotZW51bSBUZXh0dXJl
VHlwZQotewotICAgIFRFWFRVUkVfMkQsCi0gICAgVEVYVFVSRV9DVUJFLAotCi0gICAgVEVYVFVS
RV9UWVBFX0NPVU5ULAotICAgIFRFWFRVUkVfVU5LTk9XTgotfTsKLQotZW51bSBTYW1wbGVyVHlw
ZQotewotICAgIFNBTVBMRVJfUElYRUwsCi0gICAgU0FNUExFUl9WRVJURVgKLX07Ci0KLWNsYXNz
IFJlc291cmNlTWFuYWdlcgotewotICBwdWJsaWM6Ci0gICAgUmVzb3VyY2VNYW5hZ2VyKCk7Ci0g
ICAgflJlc291cmNlTWFuYWdlcigpOwotCi0gICAgdm9pZCBhZGRSZWYoKTsKLSAgICB2b2lkIHJl
bGVhc2UoKTsKLQotICAgIEdMdWludCBjcmVhdGVCdWZmZXIoKTsKLSAgICBHTHVpbnQgY3JlYXRl
U2hhZGVyKEdMZW51bSB0eXBlKTsKLSAgICBHTHVpbnQgY3JlYXRlUHJvZ3JhbSgpOwotICAgIEdM
dWludCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwot
Ci0gICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBkZWxldGVT
aGFkZXIoR0x1aW50IHNoYWRlcik7Ci0gICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBwcm9n
cmFtKTsKLSAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOwotICAgIHZvaWQg
ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0gICAgQnVmZmVyICpn
ZXRCdWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhh
bmRsZSk7Ci0gICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKLSAgICBUZXh0
dXJlICpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVu
ZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIAotICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVy
KEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyKTsKLQotICAgIHZvaWQg
Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVuc2lnbmVkIGludCBidWZmZXIpOwotICAgIHZvaWQgY2hl
Y2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQgdGV4dHVyZSwgVGV4dHVyZVR5cGUgdHlwZSk7Ci0g
ICAgdm9pZCBjaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24oR0x1aW50IHJlbmRlcmJ1ZmZlcik7
Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVzb3VyY2VNYW5h
Z2VyKTsKLQotICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKLQotICAgIHR5cGVkZWYgc3RkZXh0
OjpoYXNoX21hcDxHTHVpbnQsIEJ1ZmZlcio+IEJ1ZmZlck1hcDsKLSAgICBCdWZmZXJNYXAgbUJ1
ZmZlck1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbUJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKLQot
ICAgIHR5cGVkZWYgc3RkZXh0OjpoYXNoX21hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsK
LSAgICBTaGFkZXJNYXAgbVNoYWRlck1hcDsKLQotICAgIHR5cGVkZWYgc3RkZXh0OjpoYXNoX21h
cDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOwotICAgIFByb2dyYW1NYXAgbVByb2dyYW1N
YXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yOwot
Ci0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVN
YXA7Ci0gICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbVRl
eHR1cmVIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1
aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7Ci0gICAgUmVuZGVyYnVmZmVyTWFw
IG1SZW5kZXJidWZmZXJNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1SZW5kZXJidWZmZXJIYW5k
bGVBbGxvY2F0b3I7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfUkVTT1VSQ0VNQU5B
R0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZmQzZDUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFNoYWRl
ci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpTaGFkZXIgY2xhc3MgYW5kIGl0cyAgZGVyaXZlZCBj
bGFzc2VzCi0vLyBWZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1lbnRzIEdM
IHNoYWRlciBvYmplY3RzIGFuZCByZWxhdGVkCi0vLyBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24gMy44IHBhZ2UgODQuCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlcmxhbmcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci12
b2lkICpTaGFkZXI6Om1GcmFnbWVudENvbXBpbGVyID0gTlVMTDsKLXZvaWQgKlNoYWRlcjo6bVZl
cnRleENvbXBpbGVyID0gTlVMTDsKLQotU2hhZGVyOjpTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1IYW5kbGUoaGFuZGxlKSwgbVJlc291cmNlTWFuYWdl
cihtYW5hZ2VyKQotewotICAgIG1Tb3VyY2UgPSBOVUxMOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBtSW5mb0xvZyA9IE5VTEw7Ci0KLSAgICB1bmNvbXBpbGUoKTsKLSAgICBpbml0aWFsaXplQ29t
cGlsZXIoKTsKLQotICAgIG1SZWZDb3VudCA9IDA7Ci0gICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNl
OwotfQotCi1TaGFkZXI6On5TaGFkZXIoKQotewotICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAg
ZGVsZXRlW10gbUhsc2w7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci19Ci0KLUdMdWludCBTaGFk
ZXI6OmdldEhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1IYW5kbGU7Ci19Ci0KLXZvaWQg
U2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29u
c3QgR0xpbnQgKmxlbmd0aCkKLXsKLSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGludCB0b3Rh
bExlbmd0aCA9IDA7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0b3RhbExlbmd0aCArPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICB0b3RhbExlbmd0aCArPSAoaW50KXN0cmxlbihzdHJp
bmdbaV0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVNvdXJjZSA9IG5ldyBjaGFyW3RvdGFs
TGVuZ3RoICsgMV07Ci0gICAgY2hhciAqY29kZSA9IG1Tb3VyY2U7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBpbnQgc3RyaW5nTGVuZ3RoOwot
Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHN0cmluZ0xlbmd0aCA9IGxlbmd0aFtpXTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IChpbnQpc3RybGVuKHN0cmlu
Z1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJuY3B5KGNvZGUsIHN0cmluZ1tpXSwgc3Ry
aW5nTGVuZ3RoKTsKLSAgICAgICAgY29kZSArPSBzdHJpbmdMZW5ndGg7Ci0gICAgfQotCi0gICAg
bVNvdXJjZVt0b3RhbExlbmd0aF0gPSAnXDAnOwotfQotCi1pbnQgU2hhZGVyOjpnZXRJbmZvTG9n
TGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5m
b0xvZykgKyAxOwotICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCi17Ci0gICAgaW50IGluZGV4
ID0gMDsKLQotICAgIGlmIChidWZTaXplID4gMCkKLSAgICB7Ci0gICAgICAgIGlmIChtSW5mb0xv
ZykKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5m
b0xvZywgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAn
OwotICAgIH0KLQotICAgIGlmIChsZW5ndGgpCi0gICAgewotICAgICAgICAqbGVuZ3RoID0gaW5k
ZXg7Ci0gICAgfQotfQotCi1pbnQgU2hhZGVyOjpnZXRTb3VyY2VMZW5ndGgoKSBjb25zdAotewot
ICAgIGlmICghbVNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obVNvdXJjZSkgKyAxOwotICAgIH0KLX0K
LQotaW50IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtSGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUhsc2wpICsgMTsKLSAgICB9Ci19Ci0KLXZvaWQg
U2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAg
aWYgKGJ1ZlNpemUgPiAwKQotICAgIHsKLSAgICAgICAgaWYgKHNvdXJjZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291
cmNlKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJ1ZmZlcltpbmRleF0gPSAnXDAnOwotICAgIH0KLQotICAgIGlmIChs
ZW5ndGgpCi0gICAgewotICAgICAgICAqbGVuZ3RoID0gaW5kZXg7Ci0gICAgfQotfQotCi12b2lk
IFNoYWRlcjo6Z2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICpidWZmZXIpCi17Ci0gICAgZ2V0U291cmNlSW1wbChtU291cmNlLCBidWZTaXplLCBsZW5ndGgs
IGJ1ZmZlcik7Ci19Ci0KLXZvaWQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpCi17Ci0gICAgZ2V0U291cmNl
SW1wbChtSGxzbCwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwotfQotCi1ib29sIFNoYWRlcjo6
aXNDb21waWxlZCgpCi17Ci0gICAgcmV0dXJuIG1IbHNsICE9IE5VTEw7Ci19Ci0KLWNvbnN0IGNo
YXIgKlNoYWRlcjo6Z2V0SExTTCgpCi17Ci0gICAgcmV0dXJuIG1IbHNsOwotfQotCi12b2lkIFNo
YWRlcjo6YWRkUmVmKCkKLXsKLSAgICBtUmVmQ291bnQrKzsKLX0KLQotdm9pZCBTaGFkZXI6OnJl
bGVhc2UoKQotewotICAgIG1SZWZDb3VudC0tOwotCi0gICAgaWYgKG1SZWZDb3VudCA9PSAwICYm
IG1EZWxldGVTdGF0dXMpCi0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVT
aGFkZXIobUhhbmRsZSk7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgU2hhZGVyOjpnZXRSZWZD
b3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZWZDb3VudDsKLX0KLQotYm9vbCBTaGFkZXI6
OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURlbGV0ZVN0YXR1
czsKLX0KLQotdm9pZCBTaGFkZXI6OmZsYWdGb3JEZWxldGlvbigpCi17Ci0gICAgbURlbGV0ZVN0
YXR1cyA9IHRydWU7Ci19Ci0KLS8vIFBlcmZvcm0gYSBvbmUtdGltZSBpbml0aWFsaXphdGlvbiBv
ZiB0aGUgc2hhZGVyIGNvbXBpbGVyIChvciBhZnRlciBiZWluZyBkZXN0cnVjdGVkIGJ5IHJlbGVh
c2VDb21waWxlcikKLXZvaWQgU2hhZGVyOjppbml0aWFsaXplQ29tcGlsZXIoKQotewotICAgIGlm
ICghbUZyYWdtZW50Q29tcGlsZXIpCi0gICAgewotICAgICAgICBpbnQgcmVzdWx0ID0gU2hJbml0
aWFsaXplKCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAg
U2hCdWlsdEluUmVzb3VyY2VzIHJlc291cmNlczsKLSAgICAgICAgICAgIFNoSW5pdEJ1aWx0SW5S
ZXNvdXJjZXMoJnJlc291cmNlcyk7Ci0gICAgICAgICAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOwotCi0gICAgICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9IE1B
WF9WRVJURVhfQVRUUklCUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyA9IE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOwotICAgICAgICAgICAgcmVzb3Vy
Y2VzLk1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3Jz
KCk7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSBj
b250ZXh0LT5nZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICAgICAgICAg
IHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gY29udGV4dC0+Z2V0TWF4
aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICAgICAgICAgIHJlc291cmNlcy5N
YXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOwotICAgICAgICAg
ICAgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhp
bXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSAxOwotICAgICAgICAgICAgLy8gcmVzb3VyY2VzLk9FU19F
R0xfaW1hZ2VfZXh0ZXJuYWwgPSBnZXREaXNwbGF5KCktPmlzRDNkOUV4RGV2aWNlKCkgPyAxIDog
MDsgLy8gVE9ETzogY29tbWVudGVkIG91dCB1bnRpbCB0aGUgZXh0ZW5zaW9uIGlzIGFjdHVhbGx5
IHN1cHBvcnRlZC4KLQotICAgICAgICAgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVj
dENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwgU0hfR0xFUzJfU1BFQywgU0hfSExTTF9PVVRQ
VVQsICZyZXNvdXJjZXMpOwotICAgICAgICAgICAgbVZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1
Y3RDb21waWxlcihTSF9WRVJURVhfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBTSF9ITFNMX09VVFBV
VCwgJnJlc291cmNlcyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU2hhZGVyOjpyZWxl
YXNlQ29tcGlsZXIoKQotewotICAgIFNoRGVzdHJ1Y3QobUZyYWdtZW50Q29tcGlsZXIpOwotICAg
IFNoRGVzdHJ1Y3QobVZlcnRleENvbXBpbGVyKTsKLQotICAgIG1GcmFnbWVudENvbXBpbGVyID0g
TlVMTDsKLSAgICBtVmVydGV4Q29tcGlsZXIgPSBOVUxMOwotCi0gICAgU2hGaW5hbGl6ZSgpOwot
fQotCi12b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygpCi17Ci0gICAgaWYgKG1IbHNsKQotICAg
IHsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5n
cyIpICsgMTI7Ci0KLSAgICAgICAgd2hpbGUodHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Y2hhciB2YXJ5aW5nVHlwZVsyNTZdOwotICAgICAgICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZd
OwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1
cyAlMjU1cyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmICht
YXRjaGVzICE9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNoYXIgKmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1l
LCAiWyIpOwotICAgICAgICAgICAgaW50IHNpemUgPSAxOwotCi0gICAgICAgICAgICBpZiAoYXJy
YXkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAx
KTsKLSAgICAgICAgICAgICAgICAqYXJyYXkgPSAnXDAnOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKFZhcnlpbmcocGFyc2VUeXBlKHZhcnlpbmdUeXBl
KSwgdmFyeWluZ05hbWUsIHNpemUsIGFycmF5ICE9IE5VTEwpKTsKLQotICAgICAgICAgICAgaW5w
dXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgbVVzZXNG
cmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfQ09PUkQiKSAhPSBOVUxMOwot
ICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUk9OVF9G
QUNJTkciKSAhPSBOVUxMOwotICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHN0cnN0cihtSGxzbCwg
IkdMX1VTRVNfUE9JTlRfU0laRSIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9
IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfQ09PUkQiKSAhPSBOVUxMOwotICAgIH0KLX0K
LQotLy8gaW5pdGlhbGl6ZS9jbGVhbiB1cCBwcmV2aW91cyBzdGF0ZQotdm9pZCBTaGFkZXI6OnVu
Y29tcGlsZSgpCi17Ci0gICAgLy8gc2V0IGJ5IGNvbXBpbGVUb0hMU0wKLSAgICBkZWxldGVbXSBt
SGxzbDsKLSAgICBtSGxzbCA9IE5VTEw7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUlu
Zm9Mb2cgPSBOVUxMOwotCi0gICAgLy8gc2V0IGJ5IHBhcnNlVmFyeWluZ3MKLSAgICBtVmFyeWlu
Z3MuY2xlYXIoKTsKLQotICAgIG1Vc2VzRnJhZ0Nvb3JkID0gZmFsc2U7Ci0gICAgbVVzZXNGcm9u
dEZhY2luZyA9IGZhbHNlOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7Ci0gICAgbVVzZXNQ
b2ludENvb3JkID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQg
KmNvbXBpbGVyKQotewotICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBwYXNzIGEgTlVMTCBzb3VyY2Ug
dG8gdGhlIGNvbXBpbGVyCi0gICAgY2hhciAqc291cmNlID0gIlwwIjsKLSAgICBpZiAobVNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IG1Tb3VyY2U7Ci0gICAgfQotCi0gICAgLy8gZW5z
dXJlIHRoZSBjb21waWxlciBpcyBsb2FkZWQKLSAgICBpbml0aWFsaXplQ29tcGlsZXIoKTsKLQot
ICAgIGludCBjb21waWxlT3B0aW9ucyA9IFNIX09CSkVDVF9DT0RFOwotICAgIHN0ZDo6c3RyaW5n
IHNvdXJjZVBhdGg7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0
cigpLCBzb3VyY2UsIHN0cmxlbihzb3VyY2UpKTsKLSAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0g
U0hfTElORV9ESVJFQ1RJVkVTOwotICAgIH0KLQotICAgIGludCByZXN1bHQ7Ci0gICAgaWYgKHNv
dXJjZVBhdGguZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IFNoQ29tcGlsZShjb21w
aWxlciwgJnNvdXJjZSwgMSwgY29tcGlsZU9wdGlvbnMpOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VTdHJpbmdzWzJdID0KLSAgICAgICAgewotICAg
ICAgICAgICAgc291cmNlUGF0aC5jX3N0cigpLAotICAgICAgICAgICAgc291cmNlCi0gICAgICAg
IH07Ci0KLSAgICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCBzb3VyY2VTdHJpbmdz
LCAyLCBjb21waWxlT3B0aW9ucyB8IFNIX1NPVVJDRV9QQVRIKTsKLSAgICB9Ci0KLSAgICBpZiAo
cmVzdWx0KQotICAgIHsKLSAgICAgICAgaW50IG9iakNvZGVMZW4gPSAwOwotICAgICAgICBTaEdl
dEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJm9iakNvZGVMZW4pOwotICAg
ICAgICBtSGxzbCA9IG5ldyBjaGFyW29iakNvZGVMZW5dOwotICAgICAgICBTaEdldE9iamVjdENv
ZGUoY29tcGlsZXIsIG1IbHNsKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaW50
IGluZm9Mb2dMZW4gPSAwOwotICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9H
X0xFTkdUSCwgJmluZm9Mb2dMZW4pOwotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9M
b2dMZW5dOwotICAgICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIG1JbmZvTG9nKTsKLQotICAg
ICAgICBUUkFDRSgiXG4lcyIsIG1JbmZvTG9nKTsKLSAgICB9Ci19Ci0KLUdMZW51bSBTaGFkZXI6
OnBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSAi
ZmxvYXQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09ICJmbG9hdDIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZF
QzI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MyIpCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRkxPQVRfVkVDMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQ0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUM0OwotICAgIH0KLSAgICBl
bHNlIGlmICh0eXBlID09ICJmbG9hdDJ4MiIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxP
QVRfTUFUMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzeDMiKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUg
PT0gImZsb2F0NHg0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQ0OwotICAg
IH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQot
Ly8gdHJ1ZSBpZiB2YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tpbmcgdGhh
biB5Ci1ib29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3Qg
VmFyeWluZyAmeSkKLXsKLSAgICBpZih4LnR5cGUgPT0geS50eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHguc2l6ZSA+IHkuc2l6ZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHgudHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVlOwotICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJl
dHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAg
c3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDog
cmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNl
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgICAgc3dpdGNo
KHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJu
IGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVZlcnRleFNoYWRlcjo6VmVy
dGV4U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBTaGFk
ZXIobWFuYWdlciwgaGFuZGxlKQotewotfQotCi1WZXJ0ZXhTaGFkZXI6On5WZXJ0ZXhTaGFkZXIo
KQotewotfQotCi1HTGVudW0gVmVydGV4U2hhZGVyOjpnZXRUeXBlKCkKLXsKLSAgICByZXR1cm4g
R0xfVkVSVEVYX1NIQURFUjsKLX0KLQotdm9pZCBWZXJ0ZXhTaGFkZXI6OnVuY29tcGlsZSgpCi17
Ci0gICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsKLQotICAgIC8vIHNldCBieSBQYXJzZUF0dHJpYnV0
ZXMKLSAgICBtQXR0cmlidXRlcy5jbGVhcigpOwotfTsKLQotdm9pZCBWZXJ0ZXhTaGFkZXI6OmNv
bXBpbGUoKQotewotICAgIHVuY29tcGlsZSgpOwotCi0gICAgY29tcGlsZVRvSExTTChtVmVydGV4
Q29tcGlsZXIpOwotICAgIHBhcnNlQXR0cmlidXRlcygpOwotICAgIHBhcnNlVmFyeWluZ3MoKTsK
LX0KLQotaW50IFZlcnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmlu
ZyAmYXR0cmlidXRlTmFtZSkKLXsKLSAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHkoKSkKLSAg
ICB7Ci0gICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAgICAgICAgZm9yIChBdHRyaWJ1
dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmli
dXRlICE9IG1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSA9PSBhdHRyaWJ1dGVOYW1lKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpY0luZGV4OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRl
LT50eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotdm9pZCBW
ZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCi17Ci0gICAgY29uc3QgY2hhciAqaGxzbCA9
IGdldEhMU0woKTsKLSAgICBpZiAoaGxzbCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlu
cHV0ID0gc3Ryc3RyKGhsc2wsICIvLyBBdHRyaWJ1dGVzIikgKyAxNDsKLQotICAgICAgICB3aGls
ZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVbMjU2XTsK
LSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQg
bWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyBfJTI1NXMiLCBhdHRyaWJ1dGVU
eXBlLCBhdHRyaWJ1dGVOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbUF0dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUoYXR0cmli
dXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIo
aW5wdXQsICI7IikgKyAyOwotICAgICAgICB9Ci0gICAgfQotfQotCi1GcmFnbWVudFNoYWRlcjo6
RnJhZ21lbnRTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6
IFNoYWRlcihtYW5hZ2VyLCBoYW5kbGUpCi17Ci19Ci0KLUZyYWdtZW50U2hhZGVyOjp+RnJhZ21l
bnRTaGFkZXIoKQotewotfQotCi1HTGVudW0gRnJhZ21lbnRTaGFkZXI6OmdldFR5cGUoKQotewot
ICAgIHJldHVybiBHTF9GUkFHTUVOVF9TSEFERVI7Ci19Ci0KLXZvaWQgRnJhZ21lbnRTaGFkZXI6
OmNvbXBpbGUoKQotewotICAgIHVuY29tcGlsZSgpOwotCi0gICAgY29tcGlsZVRvSExTTChtRnJh
Z21lbnRDb21waWxlcik7Ci0gICAgcGFyc2VWYXJ5aW5ncygpOwotICAgIG1WYXJ5aW5ncy5zb3J0
KGNvbXBhcmVWYXJ5aW5nKTsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1NoYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzA4M2Vj
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hh
ZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gU2hhZGVyLmg6IERlZmluZXMgdGhlIGFic3RyYWN0IGdsOjpTaGFkZXIgY2xhc3MgYW5k
IGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2VzIFZlcnRleFNoYWRlciBhbmQgRnJhZ21l
bnRTaGFkZXIuIEltcGxlbWVudHMgR0wgc2hhZGVyIG9iamVjdHMgYW5kCi0vLyByZWxhdGVkIGZ1
bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAyNCBhbmQg
c2VjdGlvbgotLy8gMy44IHBhZ2UgODQuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1NIQURFUl9IXwot
I2RlZmluZSBMSUJHTEVTVjJfU0hBREVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8bGlzdD4KLSNp
bmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgi
Ci0KLW5hbWVzcGFjZSBnbAotewotc3RydWN0IFZhcnlpbmcKLXsKLSAgICBWYXJ5aW5nKEdMZW51
bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUsIGJvb2wgYXJyYXkpCi0g
ICAgICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXplKSwgYXJyYXkoYXJyYXkp
LCByZWcoLTEpLCBjb2woLTEpCi0gICAgewotICAgIH0KLQotICAgIEdMZW51bSB0eXBlOwotICAg
IHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgaW50IHNpemU7ICAgLy8gTnVtYmVyIG9mICd0eXBlJyBl
bGVtZW50cwotICAgIGJvb2wgYXJyYXk7Ci0KLSAgICBpbnQgcmVnOyAgICAvLyBGaXJzdCB2YXJ5
aW5nIHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluawotICAgIGludCBjb2w7ICAgIC8vIEZp
cnN0IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi19OwotCi10eXBlZGVm
IHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKLQotY2xhc3MgU2hhZGVyCi17Ci0gICAg
ZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7Ci0KLSAgcHVibGljOgotICAgIFNoYWRlcihSZXNv
dXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwotCi0gICAgdmlydHVhbCB+U2hh
ZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCkgPSAwOwotICAgIEdMdWludCBn
ZXRIYW5kbGUoKSBjb25zdDsKLQotICAgIHZvaWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBz
ZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQg
Kmxlbmd0aCk7Ci0gICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdl
dEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cp
OwotICAgIGludCBnZXRTb3VyY2VMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdldFNvdXJjZShH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKTsKLSAgICBpbnQg
Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0VHJhbnNsYXRl
ZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmNv
bXBpbGUoKTsKLSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25zdCBjaGFyICpnZXRITFNM
KCk7Ci0KLSAgICB2b2lkIGFkZFJlZigpOwotICAgIHZvaWQgcmVsZWFzZSgpOwotICAgIHVuc2ln
bmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OwotICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRp
b24oKSBjb25zdDsKLSAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwotCi0gICAgc3RhdGljIHZv
aWQgcmVsZWFzZUNvbXBpbGVyKCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5
aW5ncygpOwotCi0gICAgdm9pZCBjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGVyKTsKLQotICAg
IHZvaWQgZ2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotCi0gICAgc3RhdGljIEdMZW51bSBwYXJzZVR5cGUo
Y29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5n
KGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOwotCi0gICAgVmFyeWluZ0xpc3Qg
bVZhcnlpbmdzOwotCi0gICAgYm9vbCBtVXNlc0ZyYWdDb29yZDsKLSAgICBib29sIG1Vc2VzRnJv
bnRGYWNpbmc7Ci0gICAgYm9vbCBtVXNlc1BvaW50U2l6ZTsKLSAgICBib29sIG1Vc2VzUG9pbnRD
b29yZDsKLQotICAgIHN0YXRpYyB2b2lkICptRnJhZ21lbnRDb21waWxlcjsKLSAgICBzdGF0aWMg
dm9pZCAqbVZlcnRleENvbXBpbGVyOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFNoYWRlcik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVDb21waWxlcigpOwotCi0g
ICAgY29uc3QgR0x1aW50IG1IYW5kbGU7Ci0gICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsgICAg
IC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8K
LSAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgICAgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0
IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCi0KLSAgICBj
aGFyICptU291cmNlOwotICAgIGNoYXIgKm1IbHNsOwotICAgIGNoYXIgKm1JbmZvTG9nOwotCi0g
ICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwotfTsKLQotc3RydWN0IEF0dHJp
YnV0ZQotewotICAgIEF0dHJpYnV0ZSgpIDogdHlwZShHTF9OT05FKSwgbmFtZSgiIikKLSAgICB7
Ci0gICAgfQotCi0gICAgQXR0cmlidXRlKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIEdMZW51
bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci19OwotCi10eXBlZGVmIHN0ZDo6dmVjdG9y
PEF0dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7Ci0KLWNsYXNzIFZlcnRleFNoYWRlciA6IHB1Ymxp
YyBTaGFkZXIKLXsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKLQotICBwdWJsaWM6
Ci0gICAgVmVydGV4U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRs
ZSk7Ci0KLSAgICB+VmVydGV4U2hhZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5jb21w
aWxlKCk7Ci0gICAgaW50IGdldFNlbWFudGljSW5kZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0dHJp
YnV0ZU5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZl
cnRleFNoYWRlcik7Ci0KLSAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwotCi0gICAgQXR0cmli
dXRlQXJyYXkgbUF0dHJpYnV0ZXM7Ci19OwotCi1jbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1Ymxp
YyBTaGFkZXIKLXsKLSAgcHVibGljOgotICAgIEZyYWdtZW50U2hhZGVyKFJlc291cmNlTWFuYWdl
ciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7Ci0KLSAgICB+RnJhZ21lbnRTaGFkZXIoKTsKLQot
ICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZSgp
OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYWdtZW50U2hh
ZGVyKTsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9TSEFERVJfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmYyNDUzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyOTA5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuY3BwOiBJbXBs
ZW1lbnRzIHRoZSBnbDo6VGV4dHVyZSBjbGFzcyBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwotLy8g
VGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3ViZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVj
dHMgYW5kIHJlbGF0ZWQKLS8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0
aW9uIDMuNyBwYWdlIDYzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2lu
Y2x1ZGUgPGQzZHg5dGV4Lmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8aW50
cmluLmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9E
aXNwbGF5LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvQmxpdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
IgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6bUN1cnJl
bnRUZXh0dXJlU2VyaWFsID0gMTsKLQotc3RhdGljIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUZv
cm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgaWYgKElzRGVwdGhU
ZXh0dXJlKGZvcm1hdCkpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0lOVFo7Ci0gICAg
fQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
IHx8Ci0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQxOwotICAgIH0KLSAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBEM0RGTVRfRFhUMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0
ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gRDNERk1UX0RYVDU7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRkxPQVQp
Ci0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0EzMkIzMkczMlIzMkY7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgewotICAgICAgICByZXR1
cm4gRDNERk1UX0ExNkIxNkcxNlIxNkY7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xf
VU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNF
ICYmIGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0
c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9BOEw4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9S
R0IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgIH0KLQotICAgIHJl
dHVybiBEM0RGTVRfQThSOEc4Qjg7Ci19Ci0KLXN0YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJl
bmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9J
TlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHN3aXRjaChmb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4
OgotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAg
ICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBE
M0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRFdPUkQg
R2V0VGV4dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSkKLXsKLSAgICBEV09SRCBkM2R1c2FnZSA9IDA7Ci0KLSAgICBpZiAoZDNk
Zm10ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgZDNkdXNhZ2UgfD0gRDNEVVNBR0Vf
REVQVEhTVEVOQ0lMOwotICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoSXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKLSAgICB7Ci0gICAgICAgIGQzZHVzYWdlIHw9IEQzRFVT
QUdFX1JFTkRFUlRBUkdFVDsKLSAgICB9Ci0gICAgcmV0dXJuIGQzZHVzYWdlOwotfQotCi1JbWFn
ZTo6SW1hZ2UoKQotewotICAgIG1XaWR0aCA9IDA7IAotICAgIG1IZWlnaHQgPSAwOwotICAgIG1G
b3JtYXQgPSBHTF9OT05FOwotICAgIG1UeXBlID0gR0xfVU5TSUdORURfQllURTsKLQotICAgIG1T
dXJmYWNlID0gTlVMTDsKLQotICAgIG1EaXJ0eSA9IGZhbHNlOwotCi0gICAgbUQzRFBvb2wgPSBE
M0RQT09MX1NZU1RFTU1FTTsKLSAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci19Ci0K
LUltYWdlOjp+SW1hZ2UoKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1T
dXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1ib29sIEltYWdlOjpyZWRlZmluZShHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJv
b2wgZm9yY2VSZWxlYXNlKQotewotICAgIGlmIChtV2lkdGggIT0gd2lkdGggfHwKLSAgICAgICAg
bUhlaWdodCAhPSBoZWlnaHQgfHwKLSAgICAgICAgbUZvcm1hdCAhPSBmb3JtYXQgfHwKLSAgICAg
ICAgbVR5cGUgIT0gdHlwZSB8fAotICAgICAgICBmb3JjZVJlbGVhc2UpCi0gICAgewotICAgICAg
ICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbUZv
cm1hdCA9IGZvcm1hdDsKLSAgICAgICAgbVR5cGUgPSB0eXBlOwotICAgICAgICAvLyBjb21wdXRl
IHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EM0RGb3JtYXQgPSBD
b252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUobUZvcm1hdCwgbVR5cGUpOwotCi0gICAgICAgIGlmICht
U3VyZmFjZSkKLSAgICAgICAgewotICAgICAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBJbWFnZTo6Y3JlYXRl
U3VyZmFjZSgpCi17Ci0gICAgaWYobVN1cmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOwotICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKLSAgICBjb25zdCBEM0RQT09MIHBv
b2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOwotICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3Jt
YXQgPSBnZXREM0RGb3JtYXQoKTsKLSAgICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9JTlRa
KTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcwotCi0gICAg
aWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKLSAgICB7Ci0gICAgICAgIGludCBsZXZl
bFRvRmV0Y2ggPSAwOwotICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsKLSAg
ICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gbUhlaWdodDsKLSAgICAgICAgaWYgKElzQ29t
cHJlc3NlZChtRm9ybWF0KSAmJiAobVdpZHRoICUgNCAhPSAwIHx8IG1IZWlnaHQgJSA0ICE9IDAp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sIGlzTXVsdDQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGludCB1cHNhbXBsZUNvdW50ID0gMDsKLSAgICAgICAgICAgIHdoaWxlICghaXNNdWx0NCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0V2lkdGggPDw9IDE7Ci0gICAg
ICAgICAgICAgICAgcmVxdWVzdEhlaWdodCA8PD0gMTsKLSAgICAgICAgICAgICAgICB1cHNhbXBs
ZUNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RXaWR0aCAlIDQgPT0gMCAmJiBy
ZXF1ZXN0SGVpZ2h0ICUgNCA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaXNNdWx0NCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbGV2ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKLSAgICAgICAgfQotCi0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVz
dFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBkM2RGb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9v
bFRvVXNlLCAmbmV3VGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIEVSUigi
Q3JlYXRpbmcgaW1hZ2Ugc3VyZmFjZSBmYWlsZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBuZXdUZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7Ci0gICAgICAgIG5ld1Rl
eHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7Ci0g
ICAgbURpcnR5ID0gZmFsc2U7Ci0gICAgbUQzRFBvb2wgPSBwb29sVG9Vc2U7Ci19Ci0KLUhSRVNV
TFQgSW1hZ2U6OmxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJlY3QsIGNvbnN0IFJFQ1QgKnJl
Y3QpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RF
UlJfSU5WQUxJRENBTEw7Ci0KLSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICByZXN1
bHQgPSBtU3VyZmFjZS0+TG9ja1JlY3QobG9ja2VkUmVjdCwgcmVjdCwgMCk7Ci0gICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgbURpcnR5ID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlOjp1bmxvY2soKQotewotICAg
IGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN1cmZhY2Ut
PlVubG9ja1JlY3QoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICB9
Ci19Ci0KLWJvb2wgSW1hZ2U6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17ICAgIAotICAg
IHJldHVybiBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQot
RDNERk9STUFUIEltYWdlOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIC8vIHRoaXMgc2hv
dWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QK
LSAgICAvLyB3aGljaCB3b3VsZCBiZSBhIGJ1ZyBieSB0aGUgY2FsbGVyCi0gICAgQVNTRVJUKG1E
M0RGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pOwotCi0gICAgcmV0dXJuIG1EM0RGb3JtYXQ7Ci19
Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpJbWFnZTo6Z2V0U3VyZmFjZSgpCi17Ci0gICAgY3JlYXRl
U3VyZmFjZSgpOwotCi0gICAgcmV0dXJuIG1TdXJmYWNlOwotfQotCi12b2lkIEltYWdlOjpzZXRN
YW5hZ2VkU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKLXsKLSAgICBpZiAobVN1
cmZhY2UpCi0gICAgewotICAgICAgICBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShzdXJmYWNl
LCBOVUxMLCBOVUxMLCBtU3VyZmFjZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKTsK
LSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKLSAgICBBU1NFUlQoZGVzYy5Q
b29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci0KLSAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAg
bUQzRFBvb2wgPSBkZXNjLlBvb2w7Ci19Ci0KLXZvaWQgSW1hZ2U6OnVwZGF0ZVN1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc291cmNlU3VyZmFjZSA9IGdldFN1cmZhY2UoKTsKLQotICAgIGlmIChzb3VyY2VTdXJmYWNl
ICYmIHNvdXJjZVN1cmZhY2UgIT0gZGVzdFN1cmZhY2UpCi0gICAgewotICAgICAgICBSRUNUIHJl
Y3Q7Ci0gICAgICAgIHJlY3QubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgIHJlY3QudG9wID0geW9m
ZnNldDsKLSAgICAgICAgcmVjdC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgcmVj
dC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotCi0gICAgICAgIGlmIChtRDNEUG9vbCA9PSBE
M0RQT09MX01BTkFHRUQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
RDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UoZGVzdFN1cmZhY2UsIE5VTEwsICZyZWN0LCBzb3Vy
Y2VTdXJmYWNlLCBOVUxMLCAmcmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBVcGRhdGVTdXJmYWNlOiBzb3VyY2UgbXVzdCBiZSBTWVNU
RU1NRU0sIGRlc3QgbXVzdCBiZSBERUZBVUxUIHBvb2xzIAotICAgICAgICAgICAgUE9JTlQgcG9p
bnQgPSB7cmVjdC5sZWZ0LCByZWN0LnRvcH07Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKHNvdXJjZVN1cmZhY2UsICZyZWN0LCBkZXN0U3Vy
ZmFjZSwgJnBvaW50KTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWdu
YXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBh
cyBmb3JtYXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3Rhbmds
ZS4KLXZvaWQgSW1hZ2U6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCi17Ci0gICAg
UkVDVCBsb2NrUmVjdCA9Ci0gICAgewotICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAg
ICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAgICB9OwotCi0gICAgRDNETE9D
S0VEX1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gbG9jaygmbG9ja2VkLCAmbG9j
a1JlY3QpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIG1G
b3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAg
ewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgaWYgKHN1
cHBvcnRzU1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRBbHBoYURh
dGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbG9hZEFscGhhRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAg
ICAgICBsb2FkTHVtaW5hbmNlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9
PSBEM0RGTVRfQThMOCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICAgIGxvYWRSR0JVQnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVNTRTIo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAg
IGxvYWRCR1JBRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQjU2NURhdGEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQ6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBNDQ0NERhdGEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzE6Ci0gICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBNTU1MURhdGEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICBzd2l0Y2ggKG1Gb3Jt
YXQpCi0gICAgICAgIHsKLSAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVk
IHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAg
ICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1
bWluYW5jZUFscGhhRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JGbG9hdERhdGEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRS
R0JBRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdS
QSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECi0gICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJH
QkFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICB1bmxvY2soKTsKLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxM
OwotICAgIAotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFTU0UyKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgX19tMTI4aSB6ZXJvV2lk
ZSA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0KLSAgICAgICAgaW50IHg7Ci0gICAgICAgIC8vIE1h
a2Ugb3V0cHV0IHdyaXRlcyBhbGlnbmVkCi0gICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oJmRlc3RbeF0pICYgMHhGKSAhPSAwICYmIHggPCB3aWR0aCk7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oc291cmNlW3hdKSA8PCAyNDsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoOyB4ICsg
NyA8IHdpZHRoOyB4ICs9IDgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9fbTEyOGkgc291cmNl
RGF0YSA9IF9tbV9sb2FkbF9lcGk2NChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigm
c291cmNlW3hdKSk7Ci0gICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGVhY2ggYnl0ZSB0byAxNmJp
dCwgbWFrZSB0aGUgbG93ZXIgYnl0ZSB0byB6ZXJvCi0gICAgICAgICAgICBzb3VyY2VEYXRhID0g
X21tX3VucGFja2xvX2VwaTgoemVyb1dpZGUsIHNvdXJjZURhdGEpOwotICAgICAgICAgICAgLy8g
SW50ZXJsZWF2ZSBlYWNoIDE2Yml0IHRvIDMyYml0LCBtYWtlIHRoZSBsb3dlciAxNmJpdCB0byB6
ZXJvCi0gICAgICAgICAgICBfX20xMjhpIGxvID0gX21tX3VucGFja2xvX2VwaTE2KHplcm9XaWRl
LCBzb3VyY2VEYXRhKTsKLSAgICAgICAgICAgIF9fbTEyOGkgaGkgPSBfbW1fdW5wYWNraGlfZXBp
MTYoemVyb1dpZGUsIHNvdXJjZURhdGEpOwotCi0gICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgo
cmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeF0pLCBsbyk7Ci0gICAgICAgICAgICBf
bW1fc3RvcmVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeCArIDRdKSwg
aGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIHRoZSByZW1haW5kZXIKLSAgICAg
ICAgZm9yICg7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0W3hd
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9h
dCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhSGFs
ZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKLXsKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotCi0gICAgICAgIGlmICghbmF0aXZl
KSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gTDggZGVzdGluYXRpb24g
Zm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRo
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291
cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUg
PSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwotICAgICAgICAKLSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdS
QTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
c291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2Vb
Mip4KzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAyKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9h
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3Vy
Y2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2ln
bmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQlVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsg
MV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpk
ZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2Vb
eF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMp
IHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAm
IDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBm
bG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNl
W3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMg
KyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1N
TU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRpb24g
b2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0
YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBp
bnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBf
X20xMjhpIGJyTWFzayA9IF9tbV9zZXQxX2VwaTMyKDB4MDBmZjAwZmYpOwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBpbnQgeCA9IDA7Ci0KLSAgICAgICAg
Ly8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAgICAgICAgZm9yICh4ID0gMDsgKChyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAxNSkgIT0gMCkgJiYgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNl
W3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZm
KSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKDsgeCAr
IDMgPCB3aWR0aDsgeCArPSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBfX20xMjhpIHNvdXJj
ZURhdGEgPSBfbW1fbG9hZHVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4o
JnNvdXJjZVt4XSkpOwotICAgICAgICAgICAgLy8gTWFzayBvdXQgZyBhbmQgYSwgd2hpY2ggZG9u
J3QgY2hhbmdlCi0gICAgICAgICAgICBfX20xMjhpIGdhQ29tcG9uZW50cyA9IF9tbV9hbmRub3Rf
c2kxMjgoYnJNYXNrLCBzb3VyY2VEYXRhKTsKLSAgICAgICAgICAgIC8vIE1hc2sgb3V0IGIgYW5k
IHIKLSAgICAgICAgICAgIF9fbTEyOGkgYnJDb21wb25lbnRzID0gX21tX2FuZF9zaTEyOChzb3Vy
Y2VEYXRhLCBick1hc2spOwotICAgICAgICAgICAgLy8gU3dhcCBiIGFuZCByCi0gICAgICAgICAg
ICBfX20xMjhpIGJyU3dhcHBlZCA9IF9tbV9zaHVmZmxlaGlfZXBpMTYoX21tX3NodWZmbGVsb19l
cGkxNihickNvbXBvbmVudHMsIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEpKSwgX01NX1NIVUZGTEUo
MiwgMywgMCwgMSkpOwotICAgICAgICAgICAgX19tMTI4aSByZXN1bHQgPSBfbW1fb3Jfc2kxMjgo
Z2FDb21wb25lbnRzLCBiclN3YXBwZWQpOwotICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJl
aW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3hdKSwgcmVzdWx0KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFBlcmZvcm0gbGVmdG92ZXIgd3JpdGVzCi0gICAgICAgIGZvciAoOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBz
b3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBm
ZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAg
IGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRl
c3QgPSBOVUxMOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChf
cm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYg
MHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4
RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAweDAwMEYpID4+
IDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRh
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAweDAwM0UpID4+IDMp
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0MwKSA+PiAzKSB8
ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAo
KHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZs
b2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIG1lbWNw
eShkZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQkFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29u
c3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNv
dXJjZSwgd2lkdGggKiA4KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQpOwotICAgIH0KLX0KLQot
dm9pZCBJbWFnZTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KSB7Ci0gICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09
IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKLQotICAgIFJFQ1QgbG9ja1JlY3Qg
PSB7Ci0gICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCi0gICAgICAgIHhvZmZzZXQgKyB3aWR0aCwg
eW9mZnNldCArIGhlaWdodAotICAgIH07Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0g
ICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQsICZsb2NrUmVjdCk7Ci0gICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdMc2l6
ZWkgaW5wdXRTaXplID0gQ29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1Gb3Jt
YXQpOwotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lk
dGgsIG1Gb3JtYXQpOwotICAgIGludCByb3dzID0gaW5wdXRTaXplIC8gaW5wdXRQaXRjaDsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKLSAgICB7Ci0gICAgICAgIG1lbWNweSgo
dm9pZCopKChCWVRFKilsb2NrZWQucEJpdHMgKyBpICogbG9ja2VkLlBpdGNoKSwgKHZvaWQqKSgo
QllURSopaW5wdXQgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOwotICAgIH0KLQotICAg
IHVubG9jaygpOwotfQotCi0vLyBUaGlzIGltcGxlbWVudHMgZ2xDb3B5VGV4W1N1Yl1JbWFnZTJE
IGZvciBub24tcmVuZGVyYWJsZSBpbnRlcm5hbCB0ZXh0dXJlIGZvcm1hdHMgYW5kIGluY29tcGxl
dGUgdGV4dHVyZXMKLXZvaWQgSW1hZ2U6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJl
Y3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldERh
dGEgPSBOVUxMOwotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICByZW5kZXJU
YXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLSAgICAKLSAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2NyaXB0aW9uLldpZHRoLCBk
ZXNjcmlwdGlvbi5IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0s
ICZyZW5kZXJUYXJnZXREYXRhLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBz
dXJmYWNlLiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdl
dCwgcmVuZGVyVGFyZ2V0RGF0YSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewot
ICAgICAgICBFUlIoIkdldFJlbmRlclRhcmdldERhdGEgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsK
LSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgUkVDVCBzb3VyY2VSZWN0ID0ge3gs
IHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07Ci0gICAgUkVDVCBkZXN0UmVjdCA9IHt4b2Zmc2V0
LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHR9OwotCi0gICAgaWYg
KGlzUmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gRDNEWExvYWRT
dXJmYWNlRnJvbVN1cmZhY2UoZ2V0U3VyZmFjZSgpLCBOVUxMLCAmZGVzdFJlY3QsIHJlbmRlclRh
cmdldERhdGEsIE5VTEwsICZzb3VyY2VSZWN0LCBEM0RYX0ZJTFRFUl9CT1gsIDApOwotICAgICAg
ICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkNvcHlpbmcgc3VyZmFjZXMgdW5leHBlY3RlZGx5IGZhaWxlZC4iKTsKLSAgICAgICAgICAg
IHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OwotICAgICAgICByZXN1bHQgPSBy
ZW5kZXJUYXJnZXREYXRhLT5Mb2NrUmVjdCgmc291cmNlTG9jaywgJnNvdXJjZVJlY3QsIDApOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBp
bnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrID0gezB9OwotICAgICAgICByZXN1bHQgPSBs
b2NrKCZkZXN0TG9jaywgJmRlc3RSZWN0KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUg
ZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAg
ICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwotICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RMb2NrLnBCaXRzICYm
IHNvdXJjZUxvY2sucEJpdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
KnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyKilzb3VyY2VMb2NrLnBCaXRzOwotICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilkZXN0TG9jay5wQml0czsKLQot
ICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5Gb3JtYXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAg
ICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFt4XSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9j
ay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAq
IDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RbeCAqIDIgKyAxXSA9IHNvdXJjZVt4ICogNCArIDNdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoK
LSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYg
MHhGODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gcmVkIHwgKHJlZCA+
PiA1KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICAg
ICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0W3hdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2Nr
LlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4N0M7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4ICogMiArIDBdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gKHNpZ25lZCBjaGFyKXNv
dXJjZVt4ICogMiArIDFdID4+IDc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICB1bmxvY2soKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwot
ICAgIH0KLQotICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLQotICAgIG1EaXJ0eSA9
IHRydWU7Ci19Ci0KLVRleHR1cmVTdG9yYWdlOjpUZXh0dXJlU3RvcmFnZShEV09SRCB1c2FnZSkK
LSAgICA6IG1EM0RVc2FnZSh1c2FnZSksCi0gICAgICBtRDNEUG9vbChnZXREaXNwbGF5KCktPmdl
dFRleHR1cmVQb29sKHVzYWdlKSksCi0gICAgICBtVGV4dHVyZVNlcmlhbChpc3N1ZVRleHR1cmVT
ZXJpYWwoKSkKLXsKLX0KLQotVGV4dHVyZVN0b3JhZ2U6On5UZXh0dXJlU3RvcmFnZSgpCi17Ci19
Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKG1EM0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBU
SFNURU5DSUwpKSAhPSAwOwotfQotCi1ib29sIFRleHR1cmVTdG9yYWdlOjppc01hbmFnZWQoKSBj
b25zdAotewotICAgIHJldHVybiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLX0KLQot
RDNEUE9PTCBUZXh0dXJlU3RvcmFnZTo6Z2V0UG9vbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1E
M0RQb29sOwotfQotCi1EV09SRCBUZXh0dXJlU3RvcmFnZTo6Z2V0VXNhZ2UoKSBjb25zdAotewot
ICAgIHJldHVybiBtRDNEVXNhZ2U7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6
Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlU2VyaWFsOwot
fQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Omlzc3VlVGV4dHVyZVNlcmlhbCgpCi17
Ci0gICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsrOwotfQotCi1UZXh0dXJlOjpUZXh0
dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKLXsKLSAgICBtTWluRmlsdGVyID0g
R0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOwotICAgIG1NYWdGaWx0ZXIgPSBHTF9MSU5FQVI7Ci0g
ICAgbVdyYXBTID0gR0xfUkVQRUFUOwotICAgIG1XcmFwVCA9IEdMX1JFUEVBVDsKLSAgICBtRGly
dHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICBtVXNhZ2UgPSBHTF9OT05FOwotICAgIAotICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7Ci0KLSAgICBtSW1tdXRhYmxlID0gZmFsc2U7Ci19Ci0KLVRleHR1
cmU6On5UZXh0dXJlKCkKLXsKLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmls
dGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNl
dE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQotewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQ
X05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNh
c2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
TWluRmlsdGVyICE9IGZpbHRlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtTWlu
RmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVy
bnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFy
YW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKLXsKLSAg
ICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBj
YXNlIEdMX0xJTkVBUjoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0g
ZmlsdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1NYWdGaWx0ZXIgPSBmaWx0
ZXI7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9uIHN1
Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBU
ZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkKLXsKLSAgICBzd2l0Y2ggKHdyYXApCi0gICAg
ewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0g
ICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1XcmFwUyAhPSB3cmFwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1XcmFwUyA9
IHdyYXA7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIG9u
IHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9v
bCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0gd3JhcCkKLXsKLSAgICBzd2l0Y2ggKHdyYXApCi0g
ICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6
Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1XcmFwVCAhPSB3cmFwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1XcmFw
VCA9IHdyYXA7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVl
IG9uIHN1Y2Nlc3NmdWwgdXNhZ2Ugc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikK
LWJvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQotewotICAgIHN3aXRjaCAodXNh
Z2UpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX0FOR0xFOgotICAgICAgICBtVXNhZ2UgPSB1c2FnZTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bU1pbkZpbHRlcjsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldE1hZ0ZpbHRlcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1NYWdGaWx0ZXI7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwUygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1XcmFwUzsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFdy
YXBUKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdyYXBUOwotfQotCi1HTGVudW0gVGV4dHVyZTo6
Z2V0VXNhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtVXNhZ2U7Ci19Ci0KLXZvaWQgVGV4dHVy
ZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIElt
YWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBp
bWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSwgaW1hZ2UtPmdldFR5cGUoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotICAgICAgICBt
RGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlOjpzZXRDb21wcmVz
c2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
YWdlKQotewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGltYWdlLT5s
b2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWln
aHQoKSwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQot
ewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAq
aW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgaW1hZ2Ut
PmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhl
bHMpOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQot
ewotICAgIGlmICghaXNTYW1wbGVyQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLQotICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNy
ZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZShmYWxzZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgIHJldHVy
biBnZXRCYXNlVGV4dHVyZSgpOwotfQotCi1ib29sIFRleHR1cmU6Omhhc0RpcnR5UGFyYW1ldGVy
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EaXJ0eVBhcmFtZXRlcnM7Ci19Ci0KLWJvb2wgVGV4
dHVyZTo6aGFzRGlydHlJbWFnZXMoKSBjb25zdAotewotICAgIHJldHVybiBtRGlydHlJbWFnZXM7
Ci19Ci0KLXZvaWQgVGV4dHVyZTo6cmVzZXREaXJ0eSgpCi17Ci0gICAgbURpcnR5UGFyYW1ldGVy
cyA9IGZhbHNlOwotICAgIG1EaXJ0eUltYWdlcyA9IGZhbHNlOwotfQotCi11bnNpZ25lZCBpbnQg
VGV4dHVyZTo6Z2V0VGV4dHVyZVNlcmlhbCgpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1
cmUgPSBnZXRTdG9yYWdlKGZhbHNlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdl
dFRleHR1cmVTZXJpYWwoKSA6IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZSAqdGV4
dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5n
ZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aXNJ
bW11dGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBtSW1tdXRhYmxlOwotfQotCi1HTGludCBU
ZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29u
c3QKLXsKLSAgICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8IGdldENv
bnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCB3aXRob3V0IEdMX09FU190ZXh0dXJlX25wb3Qg
ZG9lcyBub3QgcGVybWl0IE5QT1QgbWlwbWFwcy4KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQot
fQotCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGNyZWF0aW9uTGV2ZWxzKHNpemUsIHNpemUpOwotfQotCi1pbnQgVGV4dHVy
ZTo6bGV2ZWxDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBn
ZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZlbENvdW50KCkgOiAwOwotfQotCi1CbGl0ICpUZXh0dXJl
OjpnZXRCbGl0dGVyKCkKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwot
ICAgIHJldHVybiBjb250ZXh0LT5nZXRCbGl0dGVyKCk7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6Y29w
eVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNl
OSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKQotewotICAgIGlmIChzb3VyY2UgJiYgZGVzdCkK
LSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgIGlmIChmcm9tTWFuYWdl
ZCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gRDNEWExvYWRTdXJmYWNlRnJvbVN1
cmZhY2UoZGVzdCwgTlVMTCwgTlVMTCwgc291cmNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9C
T1gsIDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwotICAgICAgICAgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAgICAgICAg
IGRpc3BsYXktPmVuZFNjZW5lKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0
Y2hSZWN0KHNvdXJjZSwgTlVMTCwgZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3Jh
Z2UyRChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpIDogVGV4dHVyZVN0b3JhZ2Uo
RDNEVVNBR0VfUkVOREVSVEFSR0VUKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbCgpKQotewotICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7
Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgRDNE
Rk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLSAgICA6
IFRleHR1cmVTdG9yYWdlKHVzYWdlKSwgbVJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbCgpKQotewotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICAvLyBp
ZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVh
dGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUg
Ynkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHdpZHRoID4gMCAm
JiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0
dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCks
ICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1UZXh0dXJlU3RvcmFnZTJEOjp+VGV4
dHVyZVN0b3JhZ2UyRCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRl
eHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24g
c3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQot
SURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlMkQ6OmdldFN1cmZhY2VMZXZlbChpbnQg
bGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAg
aWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmc3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUlEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAot
ewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdl
MkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIHJl
dHVybiBtUmVuZGVyVGFyZ2V0U2VyaWFsOwotfQotCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVp
bnQgaWQpIDogVGV4dHVyZShpZCkKLXsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgbVN1
cmZhY2UgPSBOVUxMOwotICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLSAgICBtUHJveHlS
ZWZzID0gMDsKLX0KLQotVGV4dHVyZTJEOjp+VGV4dHVyZTJEKCkKLXsKLSAgICBtQ29sb3JidWZm
ZXJQcm94eSA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3Jh
Z2UgPSBOVUxMOwotICAgIAotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJm
YWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7Ci0gICAgICAgIG1TdXJmYWNlID0gTlVMTDsKLSAg
ICB9Ci19Ci0KLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRv
IHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBz
byB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVzZSBhIHBvaW50ZXIgCi0vLyB0byBhIHJlbmRl
cmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVlbiBkZWxldGVkLgotdm9pZCBUZXh0dXJlMkQ6OmFk
ZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgbVByb3h5UmVmcysr
OwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCi17Ci0gICAgaWYgKG1Qcm94eVJlZnMgPiAwKQotICAgICAgICBtUHJveHlSZWZzLS07
Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9PSAwKQotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9
IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChH
TGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lk
dGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1HTHNpemVpIFRleHR1cmUy
RDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2xldmVsXS5nZXRIZWlnaHQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1H
TGVudW0gVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKLXsK
LSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAg
ICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0KCk7Ci0gICAgZWxzZQotICAg
ICAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQotRDNERk9STUFUIFRleHR1cmUyRDo6Z2V0RDNERm9y
bWF0KEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5n
ZXREM0RGb3JtYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsK
LX0KLQotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKLXsKLSAg
ICByZWxlYXNlVGV4SW1hZ2UoKTsKLQotICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlb
bGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOwotCi0g
ICAgaWYgKG1UZXhTdG9yYWdlICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtEaXJ0eSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgICAgICBtVGV4U3RvcmFnZSA9IE5V
TEw7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFRleHR1
cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCB0eXBlKTsKLQotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmJp
bmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0gICAgcmVsZWFzZVRleEltYWdl
KCk7Ci0KLSAgICBHTGVudW0gZm9ybWF0OwotCi0gICAgc3dpdGNoKHN1cmZhY2UtPmdldEZvcm1h
dCgpKQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICBmb3JtYXQg
PSBHTF9SR0JBOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Ogot
ICAgICAgICBmb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bUltYWdlQXJyYXlbMF0ucmVkZWZpbmUoZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJm
YWNlLT5nZXRIZWlnaHQoKSwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0KLSAgICBkZWxldGUg
bVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChzdXJm
YWNlLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCkpOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
LSAgICBtU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZSh0
aGlzKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnJlbGVhc2VUZXhJbWFnZSgpCi17Ci0gICAgaWYg
KG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxM
KTsKLSAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSkK
LSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgICAgICAgICAg
bVRleFN0b3JhZ2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ucmVkZWZpbmUoR0xfUkdCQSwgMCwgMCwgR0xfVU5T
SUdORURfQllURSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJE
OjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R0xfVU5TSUdORURfQllURSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1h
Z2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOwotfQotCi12b2lkIFRleHR1cmUy
RDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgQVNTRVJUKG1JbWFnZUFycmF5
W2xldmVsXS5nZXRTdXJmYWNlKCkgIT0gTlVMTCk7Ci0KLSAgICBpZiAobGV2ZWwgPCBsZXZlbENv
dW50KCkpCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdExldmVsID0gbVRl
eFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgaWYgKGRlc3RMZXZl
bCkKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xl
dmVsXTsKLSAgICAgICAgICAgIGltYWdlLT51cGRhdGVTdXJmYWNlKGRlc3RMZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1h
Z2VBcnJheVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6
c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3Vi
SW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
aW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAg
Y29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAg
fQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJh
bWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQu
Iik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAg
ICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVE
X0JZVEUpOwotICAgCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9y
bWF0KCkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSgwLCAwLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8
ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAgICBpZiAod2lkdGggIT0gMCAm
JiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsK
LSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBz
b3VyY2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBo
ZWlnaHQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
ID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlm
IChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29w
eShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7Ci0gICAgICAg
ICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpj
b3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBt
SW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdl
QXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJU
YXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRh
cmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LQotICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICgh
bVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQotICAgIHsKLSAgICAgICAgbUlt
YWdlQXJyYXlbbGV2ZWxdLmNvcHkoeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2Ut
PmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7
Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4Owot
ICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAgICAgIHNv
dXJjZVJlY3QudG9wID0geTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhl
aWdodDsKLQotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9y
YWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFy
Z2V0LCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgeW9m
ZnNldCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19
Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEdMZW51bSBm
b3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5
cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2Rm
bXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBEV09SRCBk
M2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwotCi0gICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdl
MkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtSW1tdXRh
YmxlID0gdHJ1ZTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxl
dmVsKyspCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCB0cnVlKTsKLSAgICAgICAgd2lkdGggPSBzdGQ6Om1heCgx
LCB3aWR0aCA+PiAxKTsKLSAgICAgICAgaGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IDEp
OwotICAgIH0KLQotICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS5yZWRlZmluZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJR05FRF9CWVRFLCB0
cnVlKTsKLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsK
LSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2
ZWwobGV2ZWwpOwotICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJm
YWNlKHN1cmZhY2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBUZXN0cyBmb3IgMkQgdGV4
dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
OC4yIHBhZ2UgODUuCi1ib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAot
ewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdM
c2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAod2lk
dGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBib29sIG1pcG1hcHBpbmcgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAobU1pbkZp
bHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVB
UjoKLSAgICAgICAgbWlwbWFwcGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1B
UF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBj
YXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAgICAgICBtaXBtYXBwaW5nID0gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQo
KS0+c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5h
bEZvcm1hdCgwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCi0gICAgewotICAgICAgICBpZiAobU1hZ0ZpbHRlciAh
PSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRlciAh
PSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBucG90U3VwcG9ydCA9IGdl
dENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCk7Ci0KLSAgICBpZiAoIW5wb3RT
dXBwb3J0KQotICAgIHsKLSAgICAgICAgaWYgKChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VE
R0UgJiYgIWlzUG93Mih3aWR0aCkpIHx8Ci0gICAgICAgICAgICAoZ2V0V3JhcFQoKSAhPSBHTF9D
TEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtaXBtYXBwaW5nKQot
ICAgIHsKLSAgICAgICAgaWYgKCFucG90U3VwcG9ydCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKCFpc1BvdzIod2lkdGgpIHx8ICFpc1BvdzIoaGVpZ2h0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWlzTWlwbWFwQ29tcGxldGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29sIFRleHR1cmUyRDo6aXNNaXBt
YXBDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJy
YXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdl
dEhlaWdodCgpOwotCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IHEgPSBsb2cyKHN0ZDo6bWF4
KHdpZHRoLCBoZWlnaHQpKTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsg
bGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0Rm9ybWF0
KCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBdLmdldFR5cGUoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2xldmVsXS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQg
Pj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlMkQ6OmlzQ29t
cHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdl
dEludGVybmFsRm9ybWF0KGxldmVsKSk7Ci19Ci0KLWJvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdM
aW50IGxldmVsKSBjb25zdAotewotICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5h
bEZvcm1hdChsZXZlbCkpOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6
Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhT
dG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsKLX0KLQotLy8gQ29uc3RydWN0cyBhIERp
cmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBU
ZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VB
cnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0u
Z2V0SGVpZ2h0KCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhl
aWdodCk7Ci0gICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1h
dCgpOwotICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdl
LCBmYWxzZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBu
ZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWln
aHQpOwotICAgIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAg
ICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChs
ZXZlbCk7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uo
c3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwot
fQotCi12b2lkIFRleHR1cmUyRDo6dXBkYXRlVGV4dHVyZSgpCi17Ci0gICAgaW50IGxldmVscyA9
IGxldmVsQ291bnQoKTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7
IGxldmVsKyspCi0gICAgewotICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbbGV2
ZWxdOwotCi0gICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgo
KSwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCi17Ci0gICAgVGV4dHVy
ZVN0b3JhZ2UyRCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAgICBpZiAobUltYWdlQXJyYXlb
MF0uZ2V0V2lkdGgoKSAhPSAwICYmIG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpICE9IDApCi0g
ICAgewotICAgICAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsK
LSAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKLSAg
ICAgICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAg
ICAgIEQzREZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsKLSAg
ICAgICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlKTsKLQotICAgICAgICBuZXdUZXhTdG9yYWdlID0g
bmV3IFRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVp
Z2h0KTsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwo
aSk7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9y
YWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1Jl
bmRlclRhcmdldChkZXN0LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCi0gICAg
ICAgICAgICAgICAgeyAgIAotICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdl
OwotICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2Ug
PSBuZXdUZXhTdG9yYWdlOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBU
ZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCi17Ci0gICAgaWYgKCFnZXRDb250ZXh0KCktPnN1
cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUlt
YWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS5nZXRIZWln
aHQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMg
MSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlw
bWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIoc3RkOjptYXgobUltYWdlQXJy
YXlbMF0uZ2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgewotICAgICAgICByZWRlZmlu
ZUltYWdlKGksIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpID4+IGksIDEpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgp
ID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBdLmdldFR5
cGUoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkg
PD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBw
ZXIgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkgLSAxKTsKLSAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSk7
Ci0KLSAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIs
IGxvd2VyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwp
IHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXIt
PlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0NsZWFuKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUltYWdl
QXJyYXlbaV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFy
cmF5W2ldLmdldFN1cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbaSAtIDFdLmdldFN1
cmZhY2UoKSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIs
IGkgLSAxLCBpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0u
bWFya0RpcnR5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqVGV4dHVy
ZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9
IEdMX1RFWFRVUkVfMkQpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobUNvbG9y
YnVmZmVyUHJveHkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0g
bmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKHRoaXMsIHRh
cmdldCkpOwotICAgIH0KLQotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKLX0KLQotLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RF
WFRVUkVfMkQpOwotCi0gICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3Jl
YXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCi0gICAgewotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCi0gICAgLy8g
ZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQotICAgIGlmIChpc0RlcHRoKDApKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBtVGV4U3RvcmFn
ZS0+Z2V0U3VyZmFjZUxldmVsKDApOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1
cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlE
aXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0
KQotewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBlbnN1
cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2Uo
dHJ1ZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAg
IHVwZGF0ZVRleHR1cmUoKTsKLQotICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVw
dGggdGV4dHVyZQotICAgIGlmICghaXNEZXB0aCgwKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgwKTsK
LX0KLQotVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRh
cmdldCkKLXsKLSAgICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJn
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVy
ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOwotfQotCi1U
ZXh0dXJlU3RvcmFnZUN1YmVNYXA6OlRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpCi0gICAgOiBUZXh0dXJlU3Rv
cmFnZSh1c2FnZSksIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZUN1YmVTZXJpYWxzKCkpCi17Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIC8vIGlm
IHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGlu
Y29tcGxldGUgdGV4dHVyZQotICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcg
dGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCi0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMsIGdldFVz
YWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0g
ICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjp+VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCkKLXsKLSAg
ICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAg
IH0KLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4
dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwg
aW50IGxldmVsKQotewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQot
ICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1
cmUtPkdldEN1YmVNYXBTdXJmYWNlKGVzMmR4OjpDb252ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCks
IGxldmVsLCAmc3VyZmFjZSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHN1cmZhY2U7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAq
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1UZXh0dXJlOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwOjpn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleCh0YXJn
ZXQpOwotfQotCi1UZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKSA6IFRl
eHR1cmUoaWQpCi17Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAg
ICAgICAgbUZhY2VQcm94eVJlZnNbaV0gPSAwOwotICAgIH0KLX0KLQotVGV4dHVyZUN1YmVNYXA6
On5UZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0g
ICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgIH0KLQotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci19Ci0KLS8vIFdlIG5lZWQg
dG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5n
IGFzIAotLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHRoZSB0ZXh0dXJlIGlz
IG5vdCBkZWxldGVkIHdoaWxlIAotLy8gcHJveHkgcmVmZXJlbmNlcyBzdGlsbCBleGlzdC4gSWYg
dGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJvLAotLy8gd2Ugc2V0IG91ciBwcm94eSBw
b2ludGVyIE5VTEwsIHNvIHRoYXQgYSBuZXcgYXR0ZW1wdCBhdCByZWZlcmVuY2luZwotLy8gd2ls
bCBjYXVzZSByZWNyZWF0aW9uLgotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkr
KykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAg
ICAgICBtRmFjZVByb3h5UmVmc1tpXSsrOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ld
ID09IHByb3h5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0g
PiAwKQotICAgICAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldLS07Ci0KLSAgICAgICAgICAg
IGlmIChtRmFjZVByb3h5UmVmc1tpXSA9PSAwKQotICAgICAgICAgICAgICAgIG1GYWNlUHJveGll
c1tpXSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1h
cDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsK
LX0KLQotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXS5nZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0K
LUdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdLmdldEhlaWdodCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdM
ZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXS5nZXRGb3JtYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBHTF9OT05F
OwotfQotCi1EM0RGT1JNQVQgVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgodGFyZ2V0KV1bbGV2ZWxdLmdldEQzREZvcm1hdCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIEQzREZNVF9VTktOT1dOOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBv
c1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpCi17Ci0gICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotfQotCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2UoMywgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwot
fQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgc2V0SW1hZ2Uo
NCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAg
c2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2Vk
SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cykKLXsKLSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFj
ZSldW2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZh
Y2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NFUlQobUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsKLQotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQo
KSkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwgPSBtVGV4U3Rv
cmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZSwgbGV2ZWwpOwotICAgICAgICBBU1NFUlQoZGVzdExldmVsICE9IE5VTEwpOwotCi0gICAg
ICAgIGlmIChkZXN0TGV2ZWwgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2Ug
KmltYWdlID0gJm1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAgICAgICAgIGltYWdlLT51
cGRhdGVTdXJmYWNlKGRlc3RMZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7
Ci0KLSAgICAgICAgICAgIGRlc3RMZXZlbC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaW1hZ2Ut
Pm1hcmtDbGVhbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
LXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChm
YWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VD
b21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VT
aXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKLSAg
ICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLS8vIFRlc3RzIGZvciBjdWJl
IG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
OC4yIHBhZ2UgODYuCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNv
bnN0Ci17Ci0gICAgaW50IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpOwotCi0g
ICAgYm9vbCBtaXBtYXBwaW5nOwotCi0gICAgc3dpdGNoIChtTWluRmlsdGVyKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICBtaXBt
YXBwaW5nID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAg
ICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01J
UE1BUF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfRkxPQVQgJiYgIWdldENvbnRleHQoKS0+c3VwcG9y
dHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpIHx8Ci0gICAgICAgIChnZXRJbnRlcm5hbEZvcm1hdChH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApID09IEdMX0hBTEZfRkxPQVRfT0VTICYm
ICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xf
TkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoIWlzUG93MihzaXplKSAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRl
eHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGlmIChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VE
R0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghbWlwbWFwcGluZykKLSAgICB7Ci0gICAgICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghaXNNaXBtYXBDdWJlQ29tcGxldGUoKSkgICAv
LyBBbHNvIHRlc3RzIGZvciBpc0N1YmVDb21wbGV0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci0vLyBUZXN0cyBmb3IgY3ViZSB0ZXh0dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0N1YmVD
b21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkg
PD0gMCB8fCBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXRXaWR0aCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAg
ICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlb
MF1bMF0uZ2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0
V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRIZWlnaHQoKSB8fAotICAgICAgICAgICAg
bUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0
Rm9ybWF0KCkgfHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFR5cGUoKSAh
PSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgo
KTsKLQotICAgIGludCBxID0gbG9nMihzaXplKTsKLQotICAgIGZvciAoaW50IGZhY2UgPSAwOyBm
YWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZl
bCA8PSBxOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlb
ZmFjZV1bbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRUeXBl
KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHNpemUg
Pj4gbGV2ZWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1h
dCh0YXJnZXQsIGxldmVsKSk7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1
YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2Ug
PyBtVGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1cmUoKSA6IE5VTEw7Ci19Ci0KLS8vIENvbnN0cnVj
dHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMs
IG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVU
ZXh0dXJlKCkKLXsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0
aCgpOwotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUsIDApOwotICAgIEQz
REZPUk1BVCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKLSAgICBE
V09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwot
Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwotCi0gICAgaWYg
KG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBs
ZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNl
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBs
ZXZlbHM7IGxldmVsKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwpOwotICAgICAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQotewotICAgIGZvciAo
aW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxldmVs
cyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxl
dmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2UgKmltYWdlID0gJm1J
bWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAgICAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29tbWl0UmVjdChmYWNlLCBsZXZl
bCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbnZl
cnRUb1JlbmRlclRhcmdldCgpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwICpuZXdUZXhT
dG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpICE9
IDApCi0gICAgewotICAgICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRX
aWR0aCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAwKTsK
LSAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1h
dCgpOwotICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOwotCi0gICAgICAgIG5ld1RleFN0
b3JhZ2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2Fn
ZSwgc2l6ZSk7Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAgICAgICAgICBmb3Ig
KGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSA9IG1UZXhTdG9yYWdlLT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmLCBpKTsK
LSAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBuZXdUZXhTdG9y
YWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
LCBpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcHlUb1JlbmRlclRhcmdldChkZXN0
LCBzb3VyY2UsIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhTdG9yYWdlOwotCi0gICAg
bURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2Uo
aW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwotCi0gICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7Ci19
Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KEdMZW51bSBmYWNlKQot
ewotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAtIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAxKTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
PT0gMik7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIC0g
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDMpOwotICAgIE1FVEFfQVNTRVJUKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCA9PSA0KTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1ogLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNSk7Ci0KLSAgICByZXR1cm4g
ZmFjZSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsKLX0KLQotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6cmVkZWZpbmVJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBi
b29sIHJlZGVmaW5lZCA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmluZShmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIHR5cGUsIGZhbHNlKTsKLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiBy
ZWRlZmluZWQpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtmXVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxM
OwotCi0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFRleHR1
cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBm
b3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBG
cmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQot
ICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgodGFyZ2V0KTsKLSAgICByZWRl
ZmluZUltYWdlKGZhY2VpbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5T
SUdORURfQllURSk7Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmlz
UmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4
XVtsZXZlbF0uY29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwot
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLm1hcmtD
bGVhbigpOwotCi0gICAgICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOwotCi0gICAgICAgIGlm
ICh3aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOwotICAgICAgICAgICAgc291
cmNlUmVjdC50b3AgPSB5OwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVp
Z2h0OwotCi0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdl
LT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxldmVsKTsKLQotICAgICAgICAgICAgaWYgKGRl
c3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJl
bmRlclRhcmdldCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCAwLCBkZXN0KTsKLSAgICAgICAgICAg
ICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKLXsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VB
cnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0KLSAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsK
LQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8g
cmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7Ci0KLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxd
LmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBs
ZXRlKCkpKQotICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0uY29w
eSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1U
ZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENv
dW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0g
eCArIHdpZHRoOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OwotICAgICAgICAgICAg
c291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OwotCi0gICAgICAgICAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIGxl
dmVsKTsKLQotICAgICAgICAgICAgaWYgKGRlc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUltYWdl
QXJyYXlbMF1bMF0uZ2V0Rm9ybWF0KCksIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgICAg
ICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmVDdWJl
TWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgc2l6ZSkKLXsKLSAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9y
bWF0KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKGZv
cm1hdCwgdHlwZSk7Ci0gICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10
LCBtVXNhZ2UsIGZhbHNlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3Rv
cmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdl
LCBzaXplKTsKLSAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKLQotICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBmYWNl
ID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgc2l6ZSwgc2l6ZSwgdHlwZSwgdHJ1ZSk7
Ci0gICAgICAgICAgICBzaXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiAxKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50
IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURf
QllURSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UtPmlz
TWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQot
ICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFj
ZSA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZV1bbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMo
KQotewotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFnZXRDb250ZXh0
KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1Bv
dzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8g
cmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQg
cSA9IGxvZzIobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZGVmaW5lSW1h
Z2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0uZ2V0Rm9ybWF0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4g
aSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFy
cmF5W2ZdWzBdLmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ZdWzBdLmdldFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9
IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1ggKyBmLCBpLTEpOwotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dl
ciA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmLCBpKTsKLQotICAgICAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYm
IGxvd2VyICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBn
ZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOwotCi0g
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0NsZWFuKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1baV0uZ2V0U3VyZmFjZSgpID09IE5VTEwpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKEZBSUxF
RChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNl
KCksIE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2ZdW2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEws
IE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgRVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAx
LCBpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtm
XVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQot
UmVuZGVyYnVmZmVyICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpCi17Ci0gICAgaWYgKCFJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIg
KilOVUxMKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJn
ZXQpOwotCi0gICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1GYWNlUHJveGllc1tmYWNlXTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJm
YWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGly
ZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFy
Z2V0KQotewotICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwotCi0g
ICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChn
ZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdl
LT5nZXRDdWJlTWFwU3VyZmFjZSh0YXJnZXQsIDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4
dHVyZUN1YmVNYXA6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi17Ci0gICAgaWYgKCFt
VGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJn
ZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzEzYTE2Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyNyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlLmg6IERlZmluZXMgdGhlIGFic3RyYWN0IGds
OjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAotLy8gY2xhc3NlcyBUZXh0
dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRleHR1cmUgb2JqZWN0cyBh
bmQKLS8vIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24g
My43IHBhZ2UgNjMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1RFWFRVUkVfSF8KLSNkZWZpbmUgTElC
R0xFU1YyX1RFWFRVUkVfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2RlZmluZSBHTF9BUElD
QUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91
dGlsaXRpZXMuaCIKLQotbmFtZXNwYWNlIGVnbAotewotY2xhc3MgU3VyZmFjZTsKLX0KLQotbmFt
ZXNwYWNlIGdsCi17Ci1jbGFzcyBCbGl0OwotY2xhc3MgRnJhbWVidWZmZXI7Ci0KLWVudW0KLXsK
LSAgICAvLyBUaGVzZSBhcmUgdGhlIG1heGltdW1zIHRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gc3Vw
cG9ydAotICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBhcmUgbGltaXRlZCBieSB0aGUgZGV2aWNl
IGNhcHMKLSAgICAvLyBhbmQgc2hvdWxkIGJlIHF1ZXJpZWQgZnJvbSB0aGUgQ29udGV4dAotICAg
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKLSAgICBJTVBMRU1FTlRB
VElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMTYzODQsCi0KLSAgICBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgPSAxNSAgIC8vIDErbG9nMiBvZiBNQVhfVEVYVFVSRV9T
SVpFCi19OwotCi1jbGFzcyBJbWFnZQotewotICBwdWJsaWM6Ci0gICAgSW1hZ2UoKTsKLSAgICB+
SW1hZ2UoKTsKLQotICAgIGJvb2wgcmVkZWZpbmUoR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBib29sIGZvcmNlUmVsZWFzZSk7Ci0gICAg
dm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9Ci0gICAgdm9pZCBtYXJrQ2xlYW4oKSB7
bURpcnR5ID0gZmFsc2U7fQotCi0gICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsK
LSAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0KLSAgICBHTHNpemVpIGdldFdp
ZHRoKCkgY29uc3Qge3JldHVybiBtV2lkdGg7fQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29u
c3Qge3JldHVybiBtSGVpZ2h0O30KLSAgICBHTGVudW0gZ2V0Rm9ybWF0KCkgY29uc3Qge3JldHVy
biBtRm9ybWF0O30KLSAgICBHTGVudW0gZ2V0VHlwZSgpIGNvbnN0IHtyZXR1cm4gbVR5cGU7fQot
ICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYgbURpcnR5O30KLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwotCi0gICAgdm9pZCBzZXRNYW5hZ2Vk
U3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgdm9pZCB1cGRhdGVTdXJm
YWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIGxvYWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqaW5wdXQpOwotCi0gICAgdm9pZCBsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRBbHBoYURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0g
ICAgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZEx1bWluYW5jZUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRmxv
YXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWlu
YW5jZUFscGhhSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7
Ci0gICAgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRSR0I1NjVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCRmxvYXRE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVNTRTIoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTU1NTFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
UkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
QkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwotCi0gICAg
dm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFn
ZSk7Ci0KLSAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIEhSRVNVTFQgbG9jayhEM0RM
T0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7Ci0gICAgdm9pZCB1bmxv
Y2soKTsKLQotICAgIEdMc2l6ZWkgbVdpZHRoOwotICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBH
TGVudW0gbUZvcm1hdDsKLSAgICBHTGVudW0gbVR5cGU7Ci0KLSAgICBib29sIG1EaXJ0eTsKLQot
ICAgIEQzRFBPT0wgbUQzRFBvb2w7ICAgLy8gY2FuIG9ubHkgYmUgRDNEUE9PTF9TWVNURU1NRU0g
b3IgRDNEUE9PTF9NQU5BR0VEIHNpbmNlIGl0IG5lZWRzIHRvIGJlIGxvY2thYmxlLgotICAgIEQz
REZPUk1BVCBtRDNERm9ybWF0OwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TdXJmYWNlOwot
fTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRl
eHR1cmVTdG9yYWdlKERXT1JEIHVzYWdlKTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdl
KCk7Ci0KLSAgICBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc01hbmFn
ZWQoKSBjb25zdDsKLSAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKLSAgICBEV09SRCBnZXRV
c2FnZSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0
YXJnZXQpIGNvbnN0ID0gMDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZSk7Ci0KLSAgICBjb25zdCBEV09SRCBtRDNEVXNhZ2U7Ci0gICAg
Y29uc3QgRDNEUE9PTCBtRDNEUG9vbDsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtVGV4dHVy
ZVNlcmlhbDsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlVGV4dHVyZVNlcmlhbCgpOwot
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFRleHR1cmVTZXJpYWw7Ci19OwotCi1j
bGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0Ci17Ci0gIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBUZXh0dXJlKEdMdWludCBpZCk7Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkgPSAwOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3QgPSAwOwot
Ci0gICAgYm9vbCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcik7Ci0gICAgYm9vbCBzZXRNYWdG
aWx0ZXIoR0xlbnVtIGZpbHRlcik7Ci0gICAgYm9vbCBzZXRXcmFwUyhHTGVudW0gd3JhcCk7Ci0g
ICAgYm9vbCBzZXRXcmFwVChHTGVudW0gd3JhcCk7Ci0gICAgYm9vbCBzZXRVc2FnZShHTGVudW0g
dXNhZ2UpOwotCi0gICAgR0xlbnVtIGdldE1pbkZpbHRlcigpIGNvbnN0OwotICAgIEdMZW51bSBn
ZXRNYWdGaWx0ZXIoKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0V3JhcFMoKSBjb25zdDsKLSAgICBH
TGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0ID0gMDsKLQotICAgIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwotICAgIHZpcnR1YWwgUmVuZGVyYnVm
ZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVi
dWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25z
dDsKLSAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7Ci0gICAgdm9pZCByZXNldERpcnR5
KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBp
bnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpOwotCi0gICAgYm9vbCBpc0lt
bXV0YWJsZSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNPTVBMRVRFX1RF
WFRVUkVfSUQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0ZXh0dXJlIHRh
a2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVz
ZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuCi0KLSAg
cHJvdGVjdGVkOgotICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAg
Ym9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0KLSAgICBHTGludCBjcmVh
dGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3Q7Ci0gICAgR0xp
bnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4
dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCkgPSAw
OwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KSA9IDA7Ci0KLSAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OwotCi0gICAgc3RhdGlj
IEJsaXQgKmdldEJsaXR0ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQo
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGJvb2wg
ZnJvbU1hbmFnZWQpOwotCi0gICAgR0xlbnVtIG1NaW5GaWx0ZXI7Ci0gICAgR0xlbnVtIG1NYWdG
aWx0ZXI7Ci0gICAgR0xlbnVtIG1XcmFwUzsKLSAgICBHTGVudW0gbVdyYXBUOwotICAgIGJvb2wg
bURpcnR5UGFyYW1ldGVyczsKLSAgICBHTGVudW0gbVVzYWdlOwotCi0gICAgYm9vbCBtRGlydHlJ
bWFnZXM7Ci0KLSAgICBib29sIG1JbW11dGFibGU7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7Ci0KLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdl
ICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSA9IDA7Ci19OwotCi1jbGFzcyBUZXh0dXJl
U3RvcmFnZTJEIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBUZXh0dXJlU3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSk7
Ci0gICAgVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBEM0RGT1JNQVQgZm9ybWF0LCBEV09S
RCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlMkQoKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlTGV2ZWwoaW50
IGxldmVsKTsKLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xl
bnVtIHRhcmdldCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZVN0b3JhZ2UyRCk7Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1
cmU7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG1SZW5kZXJUYXJnZXRTZXJpYWw7Ci19OwotCi1j
bGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgVGV4dHVyZTJEKEdMdWludCBpZCk7Ci0KLSAgICB+VGV4dHVyZTJEKCk7Ci0KLSAgICB2b2lk
IGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0g
Z2V0VGFyZ2V0KCkgY29uc3Q7Ci0KLSAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBj
b25zdDsKLSAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgR0xl
bnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBEM0RGT1JNQVQg
Z2V0RDNERm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBib29sIGlzQ29tcHJlc3NlZChH
TGludCBsZXZlbCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50
IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzdWJJbWFnZShH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzdWJJbWFnZUNvbXByZXNz
ZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZl
ciAqc291cmNlKTsKLSAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVh
bCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRU
ZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
VGV4SW1hZ2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKLQotICAg
IHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7Ci0K
LSAgcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQ7Ci0g
ICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0KTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
ZXh0dXJlMkQpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VU
ZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Owot
Ci0gICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpOwotICAgIHZvaWQgY29tbWl0
UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgSW1hZ2UgbUltYWdlQXJyYXlbSU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKLQotICAgIFRleHR1cmVTdG9yYWdlMkQgKm1UZXhT
dG9yYWdlOwotICAgIGVnbDo6U3VyZmFjZSAqbVN1cmZhY2U7Ci0KLSAgICAvLyBBIHNwZWNpZmlj
IGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSBy
ZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFz
IHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRo
aXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNl
ZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdp
bGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291
bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5k
ZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptQ29sb3JidWZmZXJQcm94eTsKLSAgICB1bnNp
Z25lZCBpbnQgbVByb3h5UmVmczsKLX07Ci0KLWNsYXNzIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCA6
IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2VD
dWJlTWFwKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6
ZSk7Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUN1YmVNYXAoKTsKLQotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxl
dmVsKTsKLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVt
IHRhcmdldCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZVN0b3JhZ2VDdWJlTWFwKTsKLQotICAgIElEaXJlY3QzREN1YmVUZXh0dXJlOSAq
bVRleHR1cmU7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlh
bDsKLX07Ci0KLWNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKLXsKLSAgcHVi
bGljOgotICAgIGV4cGxpY2l0IFRleHR1cmVDdWJlTWFwKEdMdWludCBpZCk7Ci0KLSAgICB+VGV4
dHVyZUN1YmVNYXAoKTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLSAgICAKLSAgICBH
THNpemVpIGdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBH
THNpemVpIGdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAg
R0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dDsKLSAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KSBjb25zdDsKLSAgICBib29sIGlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5l
Z1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0g
ICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLQotICAgIHZv
aWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzdWJJbWFnZUNvbXByZXNz
ZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIGNvcHlJbWFnZShHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAg
IHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2b2lkIHN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwotCi0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIg
KmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNs
YXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKLQotICBwcml2YXRlOgotICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7Ci0KLSAgICB2aXJ0dWFs
IElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1
YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAg
Ym9vbCBpc0N1YmVDb21wbGV0ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxl
dGUoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZv
aWQgY29tbWl0UmVjdChpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZvaWQg
cmVkZWZpbmVJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsKLQotICAgIEltYWdl
IG1JbWFnZUFycmF5WzZdW0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Ci0KLSAg
ICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm1UZXhTdG9yYWdlOwotCi0gICAgLy8gQSBzcGVjaWZp
YyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkg
cmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBh
cyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0
aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVz
ZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3
aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNv
dW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVu
ZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUZhY2VQcm94aWVzWzZdOwotICAgIHVuc2ln
bmVkIGludCAqbUZhY2VQcm94eVJlZnNbNl07Ci19OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVT
VjJfVEVYVFVSRV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZjQ3NWYuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gVmVydGV4RGF0YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgVmVydGV4RGF0YU1hbmFnZXIs
IGEgY2xhc3MgdGhhdAotLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MuCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3Zl
cnRleGNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5o
IgotCi1uYW1lc3BhY2UKLXsKLSAgICBlbnVtIHsgSU5JVElBTF9TVFJFQU1fQlVGRkVSX1NJWkUg
PSAxMDI0KjEwMjQgfTsKLSAgICAvLyBUaGlzIGhhcyB0byBiZSBhdCBsZWFzdCA0ayBvciBlbHNl
IGl0IGZhaWxzIG9uIEFUSSBjYXJkcy4KLSAgICBlbnVtIHsgQ09OU1RBTlRfVkVSVEVYX0JVRkZF
Ul9TSVpFID0gNDA5NiB9OwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBWZXJ0
ZXhCdWZmZXI6Om1DdXJyZW50U2VyaWFsID0gMTsKLQotaW50IGVsZW1lbnRzSW5CdWZmZXIoY29u
c3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIGludCBzaXplKQotewotICAgIGludCBzdHJp
ZGUgPSBhdHRyaWJ1dGUuc3RyaWRlKCk7Ci0gICAgcmV0dXJuIChzaXplIC0gYXR0cmlidXRlLm1P
ZmZzZXQgJSBzdHJpZGUgKyAoc3RyaWRlIC0gYXR0cmlidXRlLnR5cGVTaXplKCkpKSAvIHN0cmlk
ZTsKLX0KLQotVmVydGV4RGF0YU1hbmFnZXI6OlZlcnRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNv
bnRleHQsIElEaXJlY3QzRERldmljZTkgKmRldmljZSkgOiBtQ29udGV4dChjb250ZXh0KSwgbURl
dmljZShkZXZpY2UpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1EaXJ0eUN1cnJlbnRWYWx1ZVtpXSA9IHRydWU7Ci0g
ICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXJbaV0gPSBOVUxMOwotICAgICAgICBtQ3VycmVudFZh
bHVlT2Zmc2V0c1tpXSA9IDA7Ci0gICAgfQotCi0gICAgY29uc3QgRDNEQ0FQUzkgJmNhcHMgPSBj
b250ZXh0LT5nZXREZXZpY2VDYXBzKCk7Ci0gICAgY2hlY2tWZXJ0ZXhDYXBzKGNhcHMuRGVjbFR5
cGVzKTsKLQotICAgIG1TdHJlYW1pbmdCdWZmZXIgPSBuZXcgU3RyZWFtaW5nVmVydGV4QnVmZmVy
KG1EZXZpY2UsIElOSVRJQUxfU1RSRUFNX0JVRkZFUl9TSVpFKTsKLQotICAgIGlmICghbVN0cmVh
bWluZ0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIGFsbG9jYXRlIHRoZSBz
dHJlYW1pbmcgdmVydGV4IGJ1ZmZlci4iKTsKLSAgICB9Ci19Ci0KLVZlcnRleERhdGFNYW5hZ2Vy
Ojp+VmVydGV4RGF0YU1hbmFnZXIoKQotewotICAgIGRlbGV0ZSBtU3RyZWFtaW5nQnVmZmVyOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7
Ci0gICAgICAgIGRlbGV0ZSBtQ3VycmVudFZhbHVlQnVmZmVyW2ldOwotICAgIH0KLX0KLQotc3Rk
OjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OndyaXRlQXR0cmlidXRlRGF0YShBcnJheVZlcnRl
eEJ1ZmZlciAqdmVydGV4QnVmZmVyLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgY29uc3Qg
VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewotICAgIEJ1
ZmZlciAqYnVmZmVyID0gYXR0cmlidXRlLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQotICAgIGludCBp
bnB1dFN0cmlkZSA9IGF0dHJpYnV0ZS5zdHJpZGUoKTsKLSAgICBpbnQgZWxlbWVudFNpemUgPSBh
dHRyaWJ1dGUudHlwZVNpemUoKTsKLSAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZlcnRl
ciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWJ1dGUpOwotICAgIHN0ZDo6c2l6ZV90IHN0cmVhbU9m
ZnNldCA9IDA7Ci0KLSAgICB2b2lkICpvdXRwdXQgPSBOVUxMOwotICAgIAotICAgIGlmICh2ZXJ0
ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBvdXRwdXQgPSB2ZXJ0ZXhCdWZmZXItPm1hcChhdHRy
aWJ1dGUsIHNwYWNlUmVxdWlyZWQoYXR0cmlidXRlLCBjb3VudCwgaW5zdGFuY2VzKSwgJnN0cmVh
bU9mZnNldCk7Ci0gICAgfQotCi0gICAgaWYgKG91dHB1dCA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbWFwIHZlcnRleCBidWZmZXIuIik7Ci0gICAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0KLSAgICBpZiAoYnVm
ZmVyKQotICAgIHsKLSAgICAgICAgaW50IG9mZnNldCA9IGF0dHJpYnV0ZS5tT2Zmc2V0OwotCi0g
ICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSAr
IG9mZnNldDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaW5wdXQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oYXR0cmlidXRlLm1Qb2ludGVyKTsKLSAgICB9Ci0KLSAgICBpZiAo
aW5zdGFuY2VzID09IDAgfHwgYXR0cmlidXRlLm1EaXZpc29yID09IDApCi0gICAgewotICAgICAg
ICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwotICAgIH0KLQotICAgIGlmIChjb252ZXJ0
ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCi0gICAgewotICAgICAg
ICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0
U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhCdWZmZXItPnVubWFw
KCk7Ci0KLSAgICByZXR1cm4gc3RyZWFtT2Zmc2V0OwotfQotCi1HTGVudW0gVmVydGV4RGF0YU1h
bmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFu
c2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAgICBp
ZiAoIW1TdHJlYW1pbmdCdWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfT1VUX09GX01F
TU9SWTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmYXR0cmlicyA9
IG1Db250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbSA9
IG1Db250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBmb3IgKGludCBh
dHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBh
dHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJbmRl
eF0uYWN0aXZlID0gKHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5k
ZXgpICE9IC0xKTsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHN0b3Jh
Z2Ugc2l6ZSBwZXIgdXNlZCBidWZmZXIsIGFuZCBpbnZhbGlkYXRlIHN0YXRpYyBidWZmZXJzIHRo
YXQgZG9uJ3QgY29udGFpbiBtYXRjaGluZyBhdHRyaWJ1dGVzCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh0cmFuc2xh
dGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7
Ci0gICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/
IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxMOwotCi0gICAgICAgICAgICBp
ZiAoc3RhdGljQnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzdGF0
aWNCdWZmZXItPnNpemUoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaW50IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0sIGJ1ZmZl
ci0+c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5hZGRSZXF1aXJl
ZFNwYWNlKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgdG90YWxDb3VudCwgMCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNCdWZmZXItPmxvb2t1
cEF0dHJpYnV0ZShhdHRyaWJzW2ldKSA9PSAtMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgc3RhdGljIGJ1ZmZlciBkb2Vzbid0IGhhdmUgbWF0Y2hpbmcg
YXR0cmlidXRlcywgc28gZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzdHJlYW1pbmcgYnVmZmVyCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgc3BhY2Ugb2YgYWxsIHByZXZpb3VzIGF0dHJp
YnV0ZXMgYmVsb25naW5nIHRvIHRoZSBpbnZhbGlkYXRlZCBzdGF0aWMgYnVmZmVyIHRvIHRoZSBz
dHJlYW1pbmcgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHByZXZpb3VzID0g
MDsgcHJldmlvdXMgPCBpOyBwcmV2aW91cysrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZFtwcmV2aW91c10uYWN0aXZlICYmIGF0
dHJpYnNbcHJldmlvdXNdLm1BcnJheUVuYWJsZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyICpwcmV2aW91c0J1ZmZlciA9IGF0
dHJpYnNbcHJldmlvdXNdLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKnByZXZpb3VzU3RhdGljQnVmZmVyID0gcHJldmlv
dXNCdWZmZXIgPyBwcmV2aW91c0J1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxM
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlciA9PSBwcmV2
aW91c1N0YXRpY0J1ZmZlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1pbmdCdWZmZXItPmFkZFJlcXVpcmVkU3Bh
Y2Uoc3BhY2VSZXF1aXJlZChhdHRyaWJzW3ByZXZpb3VzXSwgY291bnQsIGluc3RhbmNlcykpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1TdHJlYW1pbmdC
dWZmZXItPmFkZFJlcXVpcmVkU3BhY2Uoc3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCBjb3VudCwg
aW5zdGFuY2VzKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5pbnZhbGlkYXRlU3Rh
dGljRGF0YSgpOwotICAgICAgICAgICAgICAgIH0gICAgCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVN0cmVhbWluZ0J1ZmZl
ci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0
YW5jZXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlc2Vy
dmUgdGhlIHJlcXVpcmVkIHNwYWNlIHBlciB1c2VkIGJ1ZmZlcgotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAodHJhbnNs
YXRlZFtpXS5hY3RpdmUgJiYgYXR0cmlic1tpXS5tQXJyYXlFbmFibGVkKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBCdWZmZXIgKmJ1ZmZlciA9IGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyLmdldCgp
OwotICAgICAgICAgICAgQXJyYXlWZXJ0ZXhCdWZmZXIgKnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/
IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxMOwotICAgICAgICAgICAgQXJy
YXlWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZl
ciA6IG1TdHJlYW1pbmdCdWZmZXI7Ci0KLSAgICAgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXIpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyLT5yZXNlcnZlUmVxdWly
ZWRTcGFjZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUGVy
Zm9ybSB0aGUgdmVydGV4IGRhdGEgdHJhbnNsYXRpb25zCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh0cmFuc2xhdGVk
W2ldLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnNbaV0ubUFycmF5
RW5hYmxlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBCdWZmZXIgKmJ1ZmZlciA9
IGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyLmdldCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFi
dWZmZXIgJiYgYXR0cmlic1tpXS5tUG9pbnRlciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcHBsaWNhdGlvbiBlcnJvciB0aGF0
IHdvdWxkIG5vcm1hbGx5IHJlc3VsdCBpbiBhIGNyYXNoLCBidXQgd2UgY2F0Y2ggaXQgYW5kIHJl
dHVybiBhbiBlcnJvcgotICAgICAgICAgICAgICAgICAgICBFUlIoIkFuIGVuYWJsZWQgdmVydGV4
IGFycmF5IGhhcyBubyBidWZmZXIgYW5kIG5vIHBvaW50ZXIuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENv
bnZlcnRlcihhdHRyaWJzW2ldKTsKLQotICAgICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZl
ciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIo
KSA6IE5VTEw7Ci0gICAgICAgICAgICAgICAgQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1ZmZl
ciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PEFycmF5VmVydGV4
QnVmZmVyKj4obVN0cmVhbWluZ0J1ZmZlcik7Ci0KLSAgICAgICAgICAgICAgICBzdGQ6OnNpemVf
dCBzdHJlYW1PZmZzZXQgPSAtMTsKLQotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSBz
dGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldKTsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0ID09IC0xKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBlbnRpcmUgYnVmZmVyCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1lbnRzSW5CdWZmZXIoYXR0
cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0
YXJ0SW5kZXggPSBhdHRyaWJzW2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ldLnN0cmlkZSgpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSB3cml0ZUF0dHJpYnV0ZURhdGEo
c3RhdGljQnVmZmVyLCAtc3RhcnRJbmRleCwgdG90YWxDb3VudCwgYXR0cmlic1tpXSwgMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtT2Zm
c2V0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHJlYW1PZmZzZXQgKz0gKGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0dHJpYnNbaV0uc3RyaWRl
KCkpICogY29udmVydGVyLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmlic1tpXS5tRGl2aXNvciA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVh
bU9mZnNldCArPSBzdGFydCAqIGNvbnZlcnRlci5vdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBzdHJlYW1PZmZzZXQgPSB3cml0ZUF0dHJpYnV0ZURhdGEobVN0cmVhbWluZ0J1ZmZl
ciwgc3RhcnQsIGNvdW50LCBhdHRyaWJzW2ldLCBpbnN0YW5jZXMpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgPT0gLTEpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnZlcnRleEJ1
ZmZlciA9IHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNs
YXRlZFtpXS5zZXJpYWwgPSB2ZXJ0ZXhCdWZmZXItPmdldFNlcmlhbCgpOwotICAgICAgICAgICAg
ICAgIHRyYW5zbGF0ZWRbaV0uZGl2aXNvciA9IGF0dHJpYnNbaV0ubURpdmlzb3I7Ci0KLSAgICAg
ICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnR5cGUgPSBjb252ZXJ0ZXIuZDNkRGVjbFR5cGU7Ci0g
ICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJpZGUgPSBjb252ZXJ0ZXIub3V0cHV0RWxl
bWVudFNpemU7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBzdHJlYW1P
ZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtQ3VycmVudFZhbHVlQnVmZmVyW2ldKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXSA9IG5ldyBT
dHJlYW1pbmdWZXJ0ZXhCdWZmZXIobURldmljZSwgQ09OU1RBTlRfVkVSVEVYX0JVRkZFUl9TSVpF
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBTdHJlYW1pbmdWZXJ0ZXhC
dWZmZXIgKmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVCdWZmZXJbaV07Ci0KLSAgICAgICAgICAgICAg
ICBpZiAobURpcnR5Q3VycmVudFZhbHVlW2ldKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IHJlcXVpcmVkU3BhY2UgPSA0ICogc2l6ZW9mKGZsb2F0KTsK
LSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHJlcXVpcmVkU3Bh
Y2UpOwotICAgICAgICAgICAgICAgICAgICBidWZmZXItPnJlc2VydmVSZXF1aXJlZFNwYWNlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0ICpkYXRhID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihi
dWZmZXItPm1hcChWZXJ0ZXhBdHRyaWJ1dGUoKSwgcmVxdWlyZWRTcGFjZSwgJm1DdXJyZW50VmFs
dWVPZmZzZXRzW2ldKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdID0gYXR0cmlic1tp
XS5tQ3VycmVudFZhbHVlWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSA9IGF0
dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFb
Ml0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhWzNdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyLT51bm1hcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURpcnR5
Q3VycmVudFZhbHVlW2ldID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnZlcnRleEJ1ZmZlciA9
IG1DdXJyZW50VmFsdWVCdWZmZXJbaV0tPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uc2VyaWFsID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXS0+Z2V0U2VyaWFsKCk7
Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gMDsKLQotICAgICAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9IEQzRERFQ0xUWVBFX0ZMT0FUNDsKLSAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7Ci0gICAgICAgICAgICAgICAgdHJhbnNs
YXRlZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5hY3RpdmUgJiYg
YXR0cmlic1tpXS5tQXJyYXlFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXIg
KmJ1ZmZlciA9IGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyLmdldCgpOwotCi0gICAgICAgICAgICBp
ZiAoYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlci0+cHJvbW90
ZVN0YXRpY1VzYWdlKGNvdW50ICogYXR0cmlic1tpXS50eXBlU2l6ZSgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotc3Rk
OjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OnNwYWNlUmVxdWlyZWQoY29uc3QgVmVydGV4QXR0
cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgY29u
c3QKLXsKLSAgICBzaXplX3QgZWxlbWVudFNpemUgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5v
dXRwdXRFbGVtZW50U2l6ZTsKLQotICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURp
dmlzb3IgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGNvdW50Owot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZWxlbWVudFNpemUgKiAoKGlu
c3RhbmNlcyArIGF0dHJpYi5tRGl2aXNvciAtIDEpIC8gYXR0cmliLm1EaXZpc29yKTsKLSAgICB9
Ci19Ci0KLS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJpYiB0eXBlIHRvIEQz
RCBkZWNsIHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAgICAgICAgU0hPUlQgKENhc3QpCi0v
LyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2FuJ3QgYmUgZXhhY3Rs
eSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5TSUdORURfQllURSAgICAgICAgVUJZ
VEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBVTlNJR05FRF9CWVRFLW5vcm0gICBV
QllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIFNIT1JUICAgICAgICAg
ICAgICAgIFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5vcm0gICAgICAgICAgIFNIT1JULW5v
cm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gVU5TSUdORURfU0hPUlQgICAg
ICAgRkxPQVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hPUlQtbm9ybSAoSWRl
bnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhFRCAobm90IGluIFdlYkdMKSBGTE9B
VCAoRml4ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxPQVQgKElkZW50aXR5
KQotCi0vLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51bSkgdG8gdGhlIEMg
dHlwZWRlZi4gCi10ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07
Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4geyB0eXBlZGVmIEdMYnl0
ZSB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRF
PiB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlw
ZTxHTF9TSE9SVD4geyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9ydCB0eXBlOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4geyB0eXBlZGVmIEdMdWlu
dCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GTE9BVD4geyB0eXBl
ZGVmIEdMZmxvYXQgdHlwZTsgfTsKLQotLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUg
aW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikK
LWVudW0gRDNEVmVydGV4VHlwZQotewotICAgIEQzRFZUX0ZMT0FULAotICAgIEQzRFZUX1NIT1JU
LAotICAgIEQzRFZUX1NIT1JUX05PUk0sCi0gICAgRDNEVlRfVUJZVEUsCi0gICAgRDNEVlRfVUJZ
VEVfTk9STSwKLSAgICBEM0RWVF9VU0hPUlRfTk9STQotfTsKLQotLy8gRDNEVG9DVHlwZSBtYXBz
IGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3Jy
ZXNwb25kaW5nIEMgdHlwZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0
IEQzRFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9G
TE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYg
dW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNE
VlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgdHlwZTsgfTsKLQotLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25z
IHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lk
ZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KLXRlbXBs
YXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+Ci1zdHJ1Y3QgV2lkZW5SdWxlCi17Ci19
OwotCi10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNp
emU+ICAgICAgICAgIDogZ2w6Ok5vV2lkZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXpl
PiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRl
blRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8
RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsK
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURSwgc2l6ZT4g
ICAgICAgICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXpl
PiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAgICA6IGdsOjpXaWRl
blRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8
RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsK
LQotLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpEZWNsVHlwZSBmbGFn
IGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVydGV4IHR5cGUgJiBz
aXplIGNvbWJpbmF0aW9uLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0eXBlLCBpbnQgc2l6
ZT4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MKLXsKLX07Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgY2FwZmxhZywgdW5zaWduZWQgaW50IGRlY2xmbGFnPgotc3RydWN0IFZlcnRleFR5cGVGbGFn
c0hlbHBlcgotewotICAgIGVudW0geyBjYXBmbGFnID0gY2FwZmxhZyB9OwotICAgIGVudW0geyBk
ZWNsZmxhZyA9IGRlY2xmbGFnIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FU
Mj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
Mz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRF
NE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JU
X05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNE
REVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxh
Z3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBl
TWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBm
YWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBs
YXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmcKLXsKLX07Ci0KLXRlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVy
dGV4VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jh
c2UKLXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZh
bGxiYWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5
cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+
ICAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZM
T0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAg
ICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+
IHsgfTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAg
ICAgLy8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZGVudGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0
cnVlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZU
X1NIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFs
c2U+ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9
OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVy
dGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAg
ICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBW
ZXJ0ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBw
aW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRU
b0Zsb2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBp
bmc8R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
RkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2
ZW4gYSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBw
cm92aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRp
dHksIEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFy
ZSBkZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBh
cmUgY292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRl
bnRpdHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10
ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0
b1R5cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5
cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5cGU+Ci17
Ci19OwotCi0vLyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0
IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4g
c3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6
Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKLQotLy8g
VXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlh
bGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVz
LgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RW
VF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6
OkZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKLQotLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlv
biBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2Ug
U2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCi0vLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6
ZWQgb3Igbm90LgotdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4KLXN0cnVjdCBE
ZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyCi17Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3Ry
dWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgdHJ1ZT4gIDogZ2w6Ok5vcm1hbGl6ZWRE
ZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZl
cnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBnbDo6U2ltcGxlRGVmYXVsdFZhbHVlczxUPiB7
IH07Ci0KLS8vIFdvcmsgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNEIHR5cGUg
KGV4cHJlc3NlZCBhcyB0aGUgQyB0eXBlKSBhbmQgCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBu
b3JtYWxpemVkPgotc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXMgOiBEZWZhdWx0VmVydGV4VmFs
dWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+Ci17Ci19OwotCi10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxp
emVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlczxmbG9hdCwgbm9ybWFsaXplZD4gOiBnbDo6
U2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OwotCi0vLyBQb2xpY3kgcnVsZXMgZm9yIHVz
ZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIgdG8gdXNlIHRoZSBwcmVmZXJyZWQg
b3IgZmFsbGJhY2sgY29udmVyc2lvbi4KLS8vIFRoZSBmYWxsYmFjayBjb252ZXJzaW9uIHByb2R1
Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMgbXVzdCBzdXBwb3J0LgotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBlbnVtIHsgdHlwZSA9IFQ6OnByZWZl
cnJlZCB9OyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VGYWxsYmFjayB7IGVudW0g
eyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKLQotLy8gQ29udmVydGVyIHRpZXMgaXQgYWxsIHRv
Z2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3NpemUgYW5kIGNob2ljZSBvZiBwcmVm
ZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKLS8vIGl0IHByb3ZpZGVzIGFsbCB0aGUgbWVtYmVy
cyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZlcnRlciwgdGhlIEQzRENBUFM5OjpE
ZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZwotLy8gYW5kIHRoZSBEM0RERUNMVFlQRSBtZW1iZXIg
bmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGluIGRlY2xmbGFnLgotdGVtcGxhdGUg
PEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQgc2l6ZSwgdGVtcGxhdGUgPGNs
YXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgotc3RydWN0IENvbnZlcnRlcgotICAgIDogZ2w6
OlZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVuUnVsZTxQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUsIHNpemU+LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyZW5jZVJ1
bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRWZXJ0ZXhWYWx1ZXM8dHlwZW5hbWUg
RDNEVG9DVHlwZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5v
cm1hbGl6ZWQ+ID46OnR5cGU+Ojp0eXBlLCBub3JtYWxpemVkID4gPgotewotcHJpdmF0ZToKLSAg
ICBlbnVtIHsgZDNkdHlwZSA9IFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9t
VHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSB9OwotICAgIGVudW0geyBkM2RzaXplID0gV2lkZW5S
dWxlPGQzZHR5cGUsIHNpemU+OjpmaW5hbFdpZHRoIH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIHsg
Y2FwZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6Y2FwZmxhZyB9Owot
ICAgIGVudW0geyBkZWNsZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6
ZGVjbGZsYWcgfTsKLX07Ci0KLS8vIEluaXRpYWxpc2UgYSBUcmFuc2xhdGlvbkluZm8KLSNkZWZp
bmUgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmlkZW50aXR5LCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZD46OmZpbmFsU2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmNvbnZlcnRB
cnJheSwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVD
TFRZUEU+KENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykg
IFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IG5vcm0sIHNpemUpICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNp
emUsIFVzZVByZWZlcnJlZD46OmNhcGZsYWcsIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwg
bm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkKSwgICAgICAgIFwKLSAgICAgICAgVFJBTlNMQVRJT04o
dHlwZSwgbm9ybSwgc2l6ZSwgVXNlRmFsbGJhY2spICAgICAgICAgIFwKLSAgICB9Ci0KLSNkZWZp
bmUgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
ZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIp
LCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBU
UkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVf
Tk9STV9TSVpFKHR5cGUsIHRydWUsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgdHJ1ZSwgNCkgfSwgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05TX0ZP
Ul9UWVBFX05PX05PUk0odHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
eyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JN
X1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJ
WkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
ZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQp
IH0sIFwKLSAgICB9Ci0KLWNvbnN0IFZlcnRleERhdGFNYW5hZ2VyOjpUcmFuc2xhdGlvbkRlc2Ny
aXB0aW9uIFZlcnRleERhdGFNYW5hZ2VyOjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZF
UlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkg
dHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLXsKLSAgICBUUkFOU0xBVElPTlNfRk9S
X1RZUEUoR0xfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX0JZ
VEUpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCi0gICAgVFJBTlNMQVRJ
T05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZ
UEVfTk9fTk9STShHTF9GSVhFRCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0o
R0xfRkxPQVQpCi19OwotCi12b2lkIFZlcnRleERhdGFNYW5hZ2VyOjpjaGVja1ZlcnRleENhcHMo
RFdPUkQgZGVjbFR5cGVzKQotewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTlVN
X0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnID09IDAgfHwg
KGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZykgIT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1BdHRyaWJ1dGVUeXBl
c1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5wcmVmZXJyZWRDb252
ZXJzaW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtQXR0cmlidXRlVHlwZXNbaV1bal1ba10g
PSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252ZXJzaW9uOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8g
VGhpcyBpcyB1c2VkIHRvIGluZGV4IG1BdHRyaWJ1dGVUeXBlcyBhbmQgbVBvc3NpYmxlVHJhbnNs
YXRpb25zLgotdW5zaWduZWQgaW50IFZlcnRleERhdGFNYW5hZ2VyOjp0eXBlSW5kZXgoR0xlbnVt
IHR5cGUpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
QllURTogcmV0dXJuIDA7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAxOwot
ICAgICAgY2FzZSBHTF9TSE9SVDogcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOiByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OwotICAgICAgY2Fz
ZSBHTF9GTE9BVDogcmV0dXJuIDU7Ci0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJl
dHVybiA1OwotICAgIH0KLX0KLQotVmVydGV4QnVmZmVyOjpWZXJ0ZXhCdWZmZXIoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKSA6IG1E
ZXZpY2UoZGV2aWNlKSwgbVZlcnRleEJ1ZmZlcihOVUxMKQotewotICAgIGlmIChzaXplID4gMCkK
LSAgICB7Ci0gICAgICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9v
bCh1c2FnZUZsYWdzKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZl
cnRleEJ1ZmZlcihzaXplLCB1c2FnZUZsYWdzLCAwLCBwb29sLCAmbVZlcnRleEJ1ZmZlciwgTlVM
TCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOwotICAgICAgICAKLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBt
ZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLVZlcnRleEJ1ZmZlcjo6flZlcnRleEJ1ZmZlcigpCi17Ci0g
ICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxl
YXNlKCk7Ci0gICAgfQotfQotCi12b2lkIFZlcnRleEJ1ZmZlcjo6dW5tYXAoKQotewotICAgIGlm
IChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7
Ci0gICAgfQotfQotCi1JRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpWZXJ0ZXhCdWZmZXI6OmdldEJ1
ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhCdWZmZXI7Ci19Ci0KLXVuc2lnbmVk
IGludCBWZXJ0ZXhCdWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXJp
YWw7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI6Omlzc3VlU2VyaWFsKCkKLXsKLSAg
ICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKLX0KLQotQXJyYXlWZXJ0ZXhCdWZmZXI6OkFycmF5
VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwg
RFdPUkQgdXNhZ2VGbGFncykgOiBWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBzaXplLCB1c2FnZUZsYWdz
KQotewotICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKLSAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Ci0g
ICAgbVJlcXVpcmVkU3BhY2UgPSAwOwotfQotCi1BcnJheVZlcnRleEJ1ZmZlcjo6fkFycmF5VmVy
dGV4QnVmZmVyKCkKLXsKLX0KLQotdm9pZCBBcnJheVZlcnRleEJ1ZmZlcjo6YWRkUmVxdWlyZWRT
cGFjZShVSU5UIHJlcXVpcmVkU3BhY2UpCi17Ci0gICAgbVJlcXVpcmVkU3BhY2UgKz0gcmVxdWly
ZWRTcGFjZTsKLX0KLQotU3RyZWFtaW5nVmVydGV4QnVmZmVyOjpTdHJlYW1pbmdWZXJ0ZXhCdWZm
ZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBpbml0aWFsU2l6ZSkgOiBB
cnJheVZlcnRleEJ1ZmZlcihkZXZpY2UsIGluaXRpYWxTaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwg
RDNEVVNBR0VfV1JJVEVPTkxZKQotewotfQotCi1TdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6On5TdHJl
YW1pbmdWZXJ0ZXhCdWZmZXIoKQotewotfQotCi12b2lkICpTdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6
Om1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgc3RkOjpzaXplX3QgcmVxdWly
ZWRTcGFjZSwgc3RkOjpzaXplX3QgKm9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxM
OwotCi0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sobVdyaXRlUG9zaXRpb24sIHJlcXVpcmVkU3BhY2UsICZt
YXBQdHIsIEQzRExPQ0tfTk9PVkVSV1JJVEUpOwotICAgICAgICAKLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGgg
ZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAg
ICB9Ci0KLSAgICAgICAgKm9mZnNldCA9IG1Xcml0ZVBvc2l0aW9uOwotICAgICAgICBtV3JpdGVQ
b3NpdGlvbiArPSByZXF1aXJlZFNwYWNlOwotICAgIH0KLQotICAgIHJldHVybiBtYXBQdHI7Ci19
Ci0KLXZvaWQgU3RyZWFtaW5nVmVydGV4QnVmZmVyOjpyZXNlcnZlUmVxdWlyZWRTcGFjZSgpCi17
Ci0gICAgaWYgKG1SZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCi0gICAgewotICAgICAgICBp
ZiAobVZlcnRleEJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci0+
UmVsZWFzZSgpOwotICAgICAgICAgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgIH0K
LQotICAgICAgICBtQnVmZmVyU2l6ZSA9IHN0ZDo6bWF4KG1SZXF1aXJlZFNwYWNlLCAzICogbUJ1
ZmZlclNpemUgLyAyKTsgICAvLyAxLjUgeCBtQnVmZmVyU2l6ZSBpcyBhcmJpdHJhcnkgYW5kIHNo
b3VsZCBiZSBjaGVja2VkIHRvIHNlZSB3ZSBkb24ndCBoYXZlIHRvbyBtYW55IHJlYWxsb2NhdGlv
bnMuCi0KLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29s
KEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihtQnVmZmVyU2l6ZSwgRDNEVVNB
R0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgcG9vbCwgJm1WZXJ0ZXhCdWZmZXIs
IE5VTEwpOwotICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKLSAgICAKLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBt
ZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgbUJ1ZmZlclNp
emUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVdyaXRlUG9zaXRpb24gPSAwOwotICAgIH0KLSAg
ICBlbHNlIGlmIChtV3JpdGVQb3NpdGlvbiArIG1SZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUp
ICAgLy8gUmVjeWNsZQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZvaWQgKmR1bW15OwotICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci0+
TG9jaygwLCAxLCAmZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7Ci0gICAgICAgICAgICBtVmVydGV4
QnVmZmVyLT5VbmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Xcml0ZVBvc2l0aW9uID0g
MDsKLSAgICB9Ci0KLSAgICBtUmVxdWlyZWRTcGFjZSA9IDA7Ci19Ci0KLVN0YXRpY1ZlcnRleEJ1
ZmZlcjo6U3RhdGljVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSkgOiBBcnJh
eVZlcnRleEJ1ZmZlcihkZXZpY2UsIDAsIEQzRFVTQUdFX1dSSVRFT05MWSkKLXsKLX0KLQotU3Rh
dGljVmVydGV4QnVmZmVyOjp+U3RhdGljVmVydGV4QnVmZmVyKCkKLXsKLX0KLQotdm9pZCAqU3Rh
dGljVmVydGV4QnVmZmVyOjptYXAoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHN0
ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpzdHJlYW1PZmZzZXQpCi17Ci0g
ICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKLQotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsK
LSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKG1Xcml0ZVBvc2l0
aW9uLCByZXF1aXJlZFNwYWNlLCAmbWFwUHRyLCAwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3
aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGludCBhdHRyaWJ1dGVPZmZzZXQgPSBhdHRyaWJ1dGUubU9mZnNl
dCAlIGF0dHJpYnV0ZS5zdHJpZGUoKTsKLSAgICAgICAgVmVydGV4RWxlbWVudCBlbGVtZW50ID0g
e2F0dHJpYnV0ZS5tVHlwZSwgYXR0cmlidXRlLm1TaXplLCBhdHRyaWJ1dGUuc3RyaWRlKCksIGF0
dHJpYnV0ZS5tTm9ybWFsaXplZCwgYXR0cmlidXRlT2Zmc2V0LCBtV3JpdGVQb3NpdGlvbn07Ci0g
ICAgICAgIG1DYWNoZS5wdXNoX2JhY2soZWxlbWVudCk7Ci0KLSAgICAgICAgKnN0cmVhbU9mZnNl
dCA9IG1Xcml0ZVBvc2l0aW9uOwotICAgICAgICBtV3JpdGVQb3NpdGlvbiArPSByZXF1aXJlZFNw
YWNlOwotICAgIH0KLQotICAgIHJldHVybiBtYXBQdHI7Ci19Ci0KLXZvaWQgU3RhdGljVmVydGV4
QnVmZmVyOjpyZXNlcnZlUmVxdWlyZWRTcGFjZSgpCi17Ci0gICAgaWYgKCFtVmVydGV4QnVmZmVy
ICYmIG1CdWZmZXJTaXplID09IDApCi0gICAgewotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXRE
aXNwbGF5KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfV1JJVEVPTkxZKTsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIobVJlcXVpcmVkU3BhY2Us
IEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgcG9vbCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOwotICAg
ICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5n
IGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBtUmVxdWlyZWRTcGFjZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtQnVmZmVyU2l6ZSA9IG1SZXF1aXJlZFNwYWNlOwotICAgIH0KLSAgICBl
bHNlIGlmIChtVmVydGV4QnVmZmVyICYmIG1CdWZmZXJTaXplID49IG1SZXF1aXJlZFNwYWNlKQot
ICAgIHsKLSAgICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQKLSAgICB9Ci0gICAgZWxzZSBVTlJF
QUNIQUJMRSgpOyAgIC8vIFN0YXRpYyB2ZXJ0ZXggYnVmZmVycyBjYW4ndCBiZSByZXNpemVkCi0K
LSAgICBtUmVxdWlyZWRTcGFjZSA9IDA7Ci19Ci0KLXN0ZDo6c2l6ZV90IFN0YXRpY1ZlcnRleEJ1
ZmZlcjo6bG9va3VwQXR0cmlidXRlKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQot
ewotICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgbUNhY2hlLnNp
emUoKTsgZWxlbWVudCsrKQotICAgIHsKLSAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50XS50eXBl
ID09IGF0dHJpYnV0ZS5tVHlwZSAmJgotICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnNpemUg
PT0gYXR0cmlidXRlLm1TaXplICYmCi0gICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc3RyaWRl
ID09IGF0dHJpYnV0ZS5zdHJpZGUoKSAmJgotICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLm5v
cm1hbGl6ZWQgPT0gYXR0cmlidXRlLm1Ob3JtYWxpemVkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobUNhY2hlW2VsZW1lbnRdLmF0dHJpYnV0ZU9mZnNldCA9PSBhdHRyaWJ1dGUubU9mZnNl
dCAlIGF0dHJpYnV0ZS5zdHJpZGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbUNhY2hlW2VsZW1lbnRdLnN0cmVhbU9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotY29uc3QgVmVydGV4RGF0YU1hbmFn
ZXI6OkZvcm1hdENvbnZlcnRlciAmVmVydGV4RGF0YU1hbmFnZXI6OmZvcm1hdENvbnZlcnRlcihj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbUF0
dHJpYnV0ZVR5cGVzW3R5cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1h
bGl6ZWRdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTc1OTFhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBWZXJ0ZXhE
YXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0
Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vzcy4KLQotI2lmbmRlZiBMSUJH
TEVTVjJfVkVSVEVYREFUQU1BTkFHRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWERBVEFN
QU5BR0VSX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2Rl
ZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlICJsaWJH
TEVTdjIvQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotc3RydWN0IFRyYW5zbGF0ZWRB
dHRyaWJ1dGUKLXsKLSAgICBib29sIGFjdGl2ZTsKLQotICAgIEQzRERFQ0xUWVBFIHR5cGU7Ci0g
ICAgVUlOVCBvZmZzZXQ7Ci0gICAgVUlOVCBzdHJpZGU7ICAgLy8gMCBtZWFucyBub3QgdG8gYWR2
YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAotCi0gICAgSURpcmVjdDNEVmVydGV4QnVmZmVy
OSAqdmVydGV4QnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBzZXJpYWw7Ci0gICAgdW5zaWduZWQg
aW50IGRpdmlzb3I7Ci19OwotCi1jbGFzcyBWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAg
IFZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUs
IERXT1JEIHVzYWdlRmxhZ3MpOwotICAgIHZpcnR1YWwgflZlcnRleEJ1ZmZlcigpOwotCi0gICAg
dm9pZCB1bm1hcCgpOwotCi0gICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkg
Y29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gIHByb3RlY3Rl
ZDoKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpjb25zdCBtRGV2aWNlOwotICAgIElEaXJlY3QzRFZl
cnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsK
LSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGludCBtQ3VycmVudFNlcmlhbDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihWZXJ0ZXhCdWZmZXIpOwotfTsKLQotY2xhc3MgQXJyYXlWZXJ0ZXhCdWZmZXIg
OiBwdWJsaWMgVmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBBcnJheVZlcnRleEJ1ZmZl
cihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERXT1JEIHVzYWdl
RmxhZ3MpOwotICAgIH5BcnJheVZlcnRleEJ1ZmZlcigpOwotCi0gICAgc3RkOjpzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9Ci0gICAgdmlydHVhbCB2b2lkICptYXAo
Y29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3Bh
Y2UsIHN0ZDo6c2l6ZV90ICpzdHJlYW1PZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXJ2ZVJlcXVpcmVkU3BhY2UoKSA9IDA7Ci0gICAgdm9pZCBhZGRSZXF1aXJlZFNwYWNlKFVJTlQg
cmVxdWlyZWRTcGFjZSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHN0ZDo6c2l6ZV90IG1CdWZmZXJT
aXplOwotICAgIHN0ZDo6c2l6ZV90IG1Xcml0ZVBvc2l0aW9uOwotICAgIHN0ZDo6c2l6ZV90IG1S
ZXF1aXJlZFNwYWNlOwotfTsKLQotY2xhc3MgU3RyZWFtaW5nVmVydGV4QnVmZmVyIDogcHVibGlj
IEFycmF5VmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZm
ZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBpbml0aWFsU2l6ZSk7Ci0g
ICAgflN0cmVhbWluZ1ZlcnRleEJ1ZmZlcigpOwotCi0gICAgdm9pZCAqbWFwKGNvbnN0IFZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNp
emVfdCAqc3RyZWFtT2Zmc2V0KTsKLSAgICB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNlKCk7Ci19
OwotCi1jbGFzcyBTdGF0aWNWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgQXJyYXlWZXJ0ZXhCdWZmZXIK
LXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFN0YXRpY1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UpOwotICAgIH5TdGF0aWNWZXJ0ZXhCdWZmZXIoKTsKLQotICAgIHZvaWQg
Km1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgc3RkOjpzaXplX3QgcmVxdWly
ZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNldCk7Ci0gICAgdm9pZCByZXNlcnZlUmVx
dWlyZWRTcGFjZSgpOwotCi0gICAgc3RkOjpzaXplX3QgbG9va3VwQXR0cmlidXRlKGNvbnN0IFZl
cnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsgICAvLyBSZXR1cm5zIHRoZSBvZmZzZXQgaW50byB0
aGUgdmVydGV4IGJ1ZmZlciwgb3IgLTEgaWYgbm90IGZvdW5kCi0KLSAgcHJpdmF0ZToKLSAgICBz
dHJ1Y3QgVmVydGV4RWxlbWVudAotICAgIHsKLSAgICAgICAgR0xlbnVtIHR5cGU7Ci0gICAgICAg
IEdMaW50IHNpemU7Ci0gICAgICAgIEdMc2l6ZWkgc3RyaWRlOwotICAgICAgICBib29sIG5vcm1h
bGl6ZWQ7Ci0gICAgICAgIGludCBhdHRyaWJ1dGVPZmZzZXQ7Ci0KLSAgICAgICAgc3RkOjpzaXpl
X3Qgc3RyZWFtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBzdGQ6OnZlY3RvcjxWZXJ0ZXhFbGVtZW50
PiBtQ2FjaGU7Ci19OwotCi1jbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcgotewotICBwdWJsaWM6Ci0g
ICAgVmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAq
YmFja2VuZCk7Ci0gICAgdmlydHVhbCB+VmVydGV4RGF0YU1hbmFnZXIoKTsKLQotICAgIHZvaWQg
ZGlydHlDdXJyZW50VmFsdWUoaW50IGluZGV4KSB7IG1EaXJ0eUN1cnJlbnRWYWx1ZVtpbmRleF0g
PSB0cnVlOyB9Ci0KLSAgICBHTGVudW0gcHJlcGFyZVZlcnRleERhdGEoR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJpYnMsIEdMc2l6ZWkgaW5z
dGFuY2VzKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0
ZXhEYXRhTWFuYWdlcik7Ci0KLSAgICBzdGQ6OnNpemVfdCBzcGFjZVJlcXVpcmVkKGNvbnN0IFZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMpIGNvbnN0OwotICAgIHN0ZDo6c2l6ZV90IHdyaXRlQXR0cmlidXRlRGF0YShBcnJheVZlcnRl
eEJ1ZmZlciAqdmVydGV4QnVmZmVyLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgY29uc3Qg
VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLQotICAgIENv
bnRleHQgKmNvbnN0IG1Db250ZXh0OwotICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZp
Y2U7Ci0KLSAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIgKm1TdHJlYW1pbmdCdWZmZXI7Ci0KLSAg
ICBib29sIG1EaXJ0eUN1cnJlbnRWYWx1ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIFN0cmVh
bWluZ1ZlcnRleEJ1ZmZlciAqbUN1cnJlbnRWYWx1ZUJ1ZmZlcltNQVhfVkVSVEVYX0FUVFJJQlNd
OwotICAgIHN0ZDo6c2l6ZV90IG1DdXJyZW50VmFsdWVPZmZzZXRzW01BWF9WRVJURVhfQVRUUklC
U107Ci0KLSAgICAvLyBBdHRyaWJ1dGUgZm9ybWF0IGNvbnZlcnNpb24KLSAgICBzdHJ1Y3QgRm9y
bWF0Q29udmVydGVyCi0gICAgewotICAgICAgICBib29sIGlkZW50aXR5OwotICAgICAgICBzdGQ6
OnNpemVfdCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAgdm9pZCAoKmNvbnZlcnRBcnJheSko
Y29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAq
b3V0KTsKLSAgICAgICAgRDNEREVDTFRZUEUgZDNkRGVjbFR5cGU7Ci0gICAgfTsKLQotICAgIGVu
dW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIEZvcm1hdENvbnZl
cnRlciBtQXR0cmlidXRlVHlwZXNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOyAg
IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtz
aXplIC0gMV0KLQotICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAg
ICAgICBEV09SRCBjYXBzRmxhZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENv
bnZlcnNpb247Ci0gICAgICAgIEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0g
ICAgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtQXR0cmlidXRl
VHlwZXMuCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxl
VHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5
cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQot
Ci0gICAgdm9pZCBjaGVja1ZlcnRleENhcHMoRFdPUkQgZGVjbFR5cGVzKTsKLQotICAgIHVuc2ln
bmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5cGUpIGNvbnN0OwotICAgIGNvbnN0IEZvcm1hdENv
bnZlcnRlciAmZm9ybWF0Q29udmVydGVyKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1ZFUlRFWERBVEFNQU5B
R0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTI1M2QuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjk3NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBsaWJHTEVTdjIuY3BwOiBJbXBsZW1lbnRzIHRoZSBleHBvcnRlZCBPcGVuR0wgRVMgMi4w
IGZ1bmN0aW9ucy4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0KLSNpbmNsdWRlIDxleGNlcHRpb24+Ci0jaW5j
bHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29t
bW9uL3ZlcnNpb24uaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiCi0KLWJvb2wgdmFsaWRJ
bWFnZVNpemUoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewot
ICAgIGlmIChsZXZlbCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGdsOjpnZXRDb250ZXh0KCkgJiYg
Z2w6OmdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobGV2ZWwgPT0gMCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChnbDo6aXNQb3cyKHdpZHRoKSAm
JiBnbDo6aXNQb3cyKGhlaWdodCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFy
ZSBvbmUgb2YgdGhlIGNvbWJpbmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KLWJvb2wgY2hlY2tUZXh0
dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICAvLyB2YWxp
ZGF0ZSA8Zm9ybWF0PiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICBjYXNl
IEdMX0JHUkFfRVhUOgotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICBjYXNlIEdMX0FMUEhBOgot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgY2FzZSBHTF9ERVBUSF9TVEVO
Q0lMX09FUzoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gaW52YWxpZCA8
dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAvLyBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBl
PiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCi0gICAgc3dpdGNoICh0eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0hB
TEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNl
IEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0g
ICAgfQotfQotYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVy
ZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAh
PSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1h
dCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZl
bCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCkKLSAgICB7Ci0gICAgICAgIGlmICgo
d2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8Ci0gICAg
ICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQo
MCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh4b2Zmc2V0ICsgd2lk
dGggPiB0ZXh0dXJlLT5nZXRXaWR0aChsZXZlbCkgfHwKLSAgICAgICAgeW9mZnNldCArIGhlaWdo
dCA+IHRleHR1cmUtPmdldEhlaWdodChsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2
ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FICYmIGZvcm1hdCAhPSB0
ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAg
IGlmIChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3
aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAotICAgICAgICAgICAgKGhl
aWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgMCkp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGgg
PiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAotICAgICAgICB5b2Zmc2V0ICsg
aGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5k
IHR5cGUgdGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKLWJvb2wgdmFsaWRSZWFkRm9ybWF0
VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1leHRlcm4gIkMiCi17Ci0KLXZv
aWQgX19zdGRjYWxsIGdsQWN0aXZlVGV4dHVyZShHTGVudW0gdGV4dHVyZSkKLXsKLSAgICBFVkVO
VCgiKEdMZW51bSB0ZXh0dXJlID0gMHglWCkiLCB0ZXh0dXJlKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRleHR1
cmUgPCBHTF9URVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTAgKyBjb250ZXh0LT5nZXRN
YXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgY29udGV4dC0+c2V0QWN0aXZlU2FtcGxlcih0ZXh0dXJlIC0gR0xf
VEVYVFVSRTApOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsQXR0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVpbnQg
c2hhZGVyKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNoYWRl
ciA9ICVkKSIsIHByb2dyYW0sIHNoYWRlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLSAgICAgICAgICAgIGdsOjpT
aGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVy
T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQ
cm9ncmFtKHNoYWRlcikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmF0dGFjaFNoYWRl
cihzaGFkZXJPYmplY3QpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCZWdp
blF1ZXJ5RVhUKEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCkKLXsKLSAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgJWQpIiwgdGFyZ2V0LCBpZCk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiAKLSAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJlZ2lu
UXVlcnkodGFyZ2V0LCBpZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQXR0cmliTG9jYXRpb24oR0x1aW50IHBy
b2dyYW0sIEdMdWludCBpbmRleCwgY29uc3QgR0xjaGFyKiBuYW1lKQotewotICAgIEVWRU5UKCIo
R0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMY2hhciogbmFt
ZSA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgaW5kZXgsIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzdHJuY21w
KG5hbWUsICJnbF8iLCAzKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xCaW5kQnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBidWZmZXIpCi17Ci0g
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGJ1ZmZlciA9ICVkKSIsIHRh
cmdldCwgYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRBcnJheUJ1ZmZlcihidWZmZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5kRWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZEZy
YW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgZnJhbWVidWZmZXIgPSAlZCkiLCB0YXJn
ZXQsIGZyYW1lYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAh
PSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAm
JiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1JFQURfRlJBTUVCVUZGRVJfQU5HTEUgfHwgdGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRSZWFkRnJhbWVidWZmZXIo
ZnJhbWVidWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgfHwgdGFyZ2V0ID09IEdMX0ZS
QU1FQlVGRkVSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRE
cmF3RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmlu
ZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCByZW5kZXJidWZmZXIgPSAlZCki
LCB0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIocmVu
ZGVyYnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIEdMdWludCB0
ZXh0dXJlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCB0ZXh0
dXJlID0gJWQpIiwgdGFyZ2V0LCB0ZXh0dXJlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1
cmVPYmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOwotCi0gICAgICAgICAgICBp
ZiAodGV4dHVyZU9iamVjdCAmJiB0ZXh0dXJlT2JqZWN0LT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQg
JiYgdGV4dHVyZSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUyRCh0ZXh0dXJl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAo
dGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsQmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVu
LCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMY2xhbXBm
IHJlZCA9ICVmLCBHTGNsYW1wZiBncmVlbiA9ICVmLCBHTGNsYW1wZiBibHVlID0gJWYsIEdMY2xh
bXBmIGFscGhhID0gJWYpIiwKLSAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNldEJsZW5kQ29sb3IoZ2w6OmNsYW1wMDEocmVkKSwgZ2w6OmNsYW1w
MDEoZ3JlZW4pLCBnbDo6Y2xhbXAwMShibHVlKSwgZ2w6OmNsYW1wMDEoYWxwaGEpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpCi17Ci0gICAgZ2xCbGVuZEVxdWF0aW9uU2Vw
YXJhdGUobW9kZSwgbW9kZSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlvblNl
cGFyYXRlKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIG1vZGVSR0IgPSAweCVYLCBHTGVudW0gbW9kZUFscGhhID0gMHglWCkiLCBtb2RlUkdC
LCBtb2RlQWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1vZGVSR0Ip
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgotICAgICAgICAgIGNhc2Ug
R0xfRlVOQ19TVUJUUkFDVDoKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFD
VDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRj
aCAobW9kZUFscGhhKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoKLSAg
ICAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6Ci0gICAgICAgICAgY2FzZSBHTF9GVU5DX1JF
VkVSU0VfU1VCVFJBQ1Q6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRCbGVuZEVxdWF0aW9uKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmMo
R0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKQotewotICAgIGdsQmxlbmRGdW5jU2VwYXJh
dGUoc2ZhY3RvciwgZGZhY3Rvciwgc2ZhY3RvciwgZGZhY3Rvcik7Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xl
bnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gc3Jj
UkdCID0gMHglWCwgR0xlbnVtIGRzdFJHQiA9IDB4JVgsIEdMZW51bSBzcmNBbHBoYSA9IDB4JVgs
IEdMZW51bSBkc3RBbHBoYSA9IDB4JVgpIiwKLSAgICAgICAgICBzcmNSR0IsIGRzdFJHQiwgc3Jj
QWxwaGEsIGRzdEFscGhhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzcmNS
R0IpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBH
TF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAg
Y2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhB
OgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBI
QToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAg
ICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZHN0UkdCKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9aRVJPOgotICAgICAgICAgIGNhc2UgR0xfT05FOgotICAgICAgICAgIGNhc2Ug
R0xfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKLSAg
ICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19E
U1RfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgotICAg
ICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0NP
TlNUQU5UX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9S
OgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHNyY0FscGhhKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9aRVJPOgotICAgICAgICAgIGNhc2UgR0xfT05FOgotICAgICAgICAgIGNhc2UgR0xf
U1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKLSAgICAg
ICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1Rf
Q09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9P
TkVfTUlOVVNfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgotICAgICAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0NPTlNU
QU5UX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgot
ICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJB
VEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0
Y2ggKGRzdEFscGhhKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9aRVJPOgotICAgICAg
ICAgIGNhc2UgR0xfT05FOgotICAgICAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOgotICAgICAgICAg
IGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xP
UjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6Ci0gICAgICAgICAgY2Fz
ZSBHTF9TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgot
ICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVT
X0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0NPTE9SOgotICAgICAgICAg
IGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNv
bnN0YW50Q29sb3JVc2VkID0gKHNyY1JHQiA9PSBHTF9DT05TVEFOVF9DT0xPUiB8fCBzcmNSR0Ig
PT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHN0UkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IGRzdFJHQiA9PSBHTF9P
TkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpOwotCi0gICAgICAgIGJvb2wgY29uc3RhbnRBbHBoYVVz
ZWQgPSAoc3JjUkdCID09IEdMX0NPTlNUQU5UX0FMUEhBIHx8IHNyY1JHQiA9PSBHTF9PTkVfTUlO
VVNfQ09OU1RBTlRfQUxQSEEgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
c3RSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEgfHwgZHN0UkdCID09IEdMX09ORV9NSU5VU19DT05T
VEFOVF9BTFBIQSk7Ci0KLSAgICAgICAgaWYgKGNvbnN0YW50Q29sb3JVc2VkICYmIGNvbnN0YW50
QWxwaGFVc2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIlNpbXVsdGFuZW91cyB1c2Ug
b2YgR0xfQ09OU1RBTlRfQUxQSEEvR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIGFuZCBHTF9D
T05TVEFOVF9DT0xPUi9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgaW52YWxpZCB1bmRlciBX
ZWJHTCIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldEJsZW5kRmFjdG9ycyhzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBz
aXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdMZW51bSB1c2FnZSkKLXsKLSAgICBFVkVOVCgiKEdM
ZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpcHRyIHNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBk
YXRhID0gMHglMC44cCwgR0xlbnVtIHVzYWdlID0gJWQpIiwKLSAgICAgICAgICB0YXJnZXQsIHNp
emUsIGRhdGEsIHVzYWdlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHVzYWdlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9TVFJFQU1fRFJBVzoKLSAgICAgICAgICBjYXNlIEdMX1NUQVRJQ19EUkFXOgot
ICAgICAgICAgIGNhc2UgR0xfRFlOQU1JQ19EUkFXOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
UjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZm
ZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgYnVmZmVyLT5idWZmZXJEYXRhKGRhdGEsIHNpemUsIHVzYWdlKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNp
emVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQs
IGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKLSAgICAgICAgICB0YXJnZXQsIG9mZnNl
dCwgc2l6ZSwgZGF0YSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgMCB8
fCBvZmZzZXQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5n
ZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNv
bnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKHNpemVfdClzaXpl
ICsgb2Zmc2V0ID4gYnVmZmVyLT5zaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBidWZmZXItPmJ1ZmZlclN1YkRhdGEoZGF0YSwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1HTGVudW0gX19zdGRj
YWxsIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KQotewotICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19G
UkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgMCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbENsZWFyKEdMYml0ZmllbGQgbWFz
aykKLXsKLSAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9ICVYKSIsIG1hc2spOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5jbGVhcihtYXNrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENsZWFyQ29sb3IoR0xjbGFtcGYgcmVk
LCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCi17Ci0gICAg
RVZFTlQoIihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYg
Ymx1ZSA9ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCi0gICAgICAgICAgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVhckNvbG9yKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENsZWFyRGVwdGhmKEdMY2xhbXBmIGRlcHRoKQotewot
ICAgIEVWRU5UKCIoR0xjbGFtcGYgZGVwdGggPSAlZikiLCBkZXB0aCk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldENsZWFyRGVwdGgoZGVwdGgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xlYXJTdGVuY2lsKEdMaW50IHMp
Ci17Ci0gICAgRVZFTlQoIihHTGludCBzID0gJWQpIiwgcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dENsZWFyU3RlbmNpbChzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvbG9yTWFzayhHTGJvb2xlYW4gcmVkLCBHTGJv
b2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgRVZF
TlQoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9ICVkLCBHTGJvb2xlYW4g
Ymx1ZSA9ICVkLCBHTGJvb2xlYW4gYWxwaGEgPSAlZCkiLAotICAgICAgICAgIHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Q29sb3JNYXNrKHJlZCA9PSBHTF9U
UlVFLCBncmVlbiA9PSBHTF9UUlVFLCBibHVlID09IEdMX1RSVUUsIGFscGhhID09IEdMX1RSVUUp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQg
X19zdGRjYWxsIGdsQ29tcGlsZVNoYWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIEVWRU5UKCIo
R0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRl
ck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAgICAgICAgICBpZiAo
IXNoYWRlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5jb21waWxlKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkKLXsKLSAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQg
PSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIgCi0gICAgICAgICAgIkdMc2l6ZWkgaGVpZ2h0
ID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCBHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBH
THZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCi0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhl
aWdodCkgfHwgYm9yZGVyICE9IDAgfHwgaW1hZ2VTaXplIDwgMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1U
ZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+
IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdo
dCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4g
bGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhp
bXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsg
Ly8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRj
aCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0
IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToK
LSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwg
Zm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2Vk
U2l6ZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVy
ZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IEdMdm9pZCogZGF0YSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGlu
dCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgot
ICAgICAgICAgICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51
bSBmb3JtYXQgPSAweCVYLCAiCi0gICAgICAgICAgIkdMc2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNv
bnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKLSAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZz
ZXQgPCAwIHx8ICF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkgfHwgaW1hZ2VT
aXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwg
ZGF0YSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2
ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRo
aXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVk
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8v
IGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2gg
ZmFpbGVkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoaW1hZ2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhl
aWdodCwgZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4
b2Zmc2V0ICUgNCAhPSAwIHx8IHlvZmZzZXQgJSA0ICE9IDApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gd2Ugd2Fp
dCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0aGlzIHBvaW50LCBiZWNhdXNlIHRoZSBtdWx0
aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QgdW5sZXNzIERYVCB0ZXh0dXJl
cyBhcmUgc3VwcG9ydGVkLgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9m
ZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRh
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJh
bXNDdWJlKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2
ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMaW50IGJvcmRlcikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCAiCi0gICAgICAg
ICAgIkdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMaW50IGJvcmRlciA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRoLCBo
ZWlnaHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZl
bCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4g
KGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVu
c2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAg
ICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1
YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhl
aWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZl
bCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0K
LSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAg
JiYgZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFNhbXBsZXMoKSAhPSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNv
dXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVt
IGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAg
ICAgICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45Ci0gICAgICAgICAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBI
QSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAg
ICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgICBjYXNlIEdM
X1JHQjoKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgot
ICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgot
ICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBICYmCi0gICAg
ICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAg
ICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAg
ICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkEg
JiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgot
ICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0g
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoK
LSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUlt
YWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
cmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0
ID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkg
d2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNl
dCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHhvZmZzZXQgPCB3aWR0aCB8
fCBzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHlvZmZzZXQgPCBoZWlnaHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRN
YXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVm
ZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRs
ZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFNhbXBsZXMoKSAh
PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOwotICAgICAgICAg
ICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OwotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAg
R0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9SR0JBOwotCi0gICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgR0xfTk9ORSwgdGV4MmQpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVy
ZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4MmQtPmdldEludGVybmFsRm9ybWF0KGxldmVsKTsK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNv
bnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zm
c2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0ZXhjdWJlKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVk
IGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdGV4dHVyZUZvcm1hdCA9IHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwg
bGV2ZWwpOwotICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXhjdWJlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAvLyBbT3Bl
bkdMIEVTIDIuMC4yNF0gdGFibGUgMy45Ci0gICAgICAgICAgICBzd2l0Y2ggKHRleHR1cmVGb3Jt
YXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX0FMUEhBICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAg
ICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
ICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0IgJiYKLSAgICAgICAgICAgICAg
ICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAg
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
ICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAgICAg
ICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAg
ICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Y29w
eVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLUdMdWludCBfX3N0ZGNhbGwgZ2xDcmVhdGVQcm9ncmFtKHZvaWQpCi17
Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVQcm9ncmFt
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi1HTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlU2hhZGVyKEdMZW51bSB0
eXBlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHR5cGUgPSAweCVYKSIsIHR5cGUpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJB
R01FTlRfU0hBREVSOgotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmNyZWF0ZVNoYWRlcih0eXBlKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ3Vs
bEZhY2UoR0xlbnVtIG1vZGUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgpIiwg
bW9kZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobW9kZSkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6Ci0gICAgICAgICAgY2FzZSBHTF9CQUNLOgotICAg
ICAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbE1vZGUobW9kZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVs
ZXRlQnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycykKLXsKLSAgICBFVkVO
VCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4s
IGJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPmRlbGV0ZUJ1ZmZlcihidWZmZXJzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bERlbGV0ZUZlbmNlc05WKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmZW5jZXMpCi17Ci0gICAg
RVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBmZW5jZXMgPSAweCUwLjhwKSIs
IG4sIGZlbmNlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZGVsZXRlRmVuY2UoZmVuY2VzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bERlbGV0ZUZyYW1lYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJz
KQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogZnJhbWVidWZm
ZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlcnNbaV0gIT0gMCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVy
KGZyYW1lYnVmZmVyc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsRGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWlu
dCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChwcm9ncmFtID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZihjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5k
ZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlUXVlcmllc0VYVChHTHNpemVp
IG4sIGNvbnN0IEdMdWludCAqaWRzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNv
bnN0IEdMdWludCAqaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVF1ZXJ5KGlkc1tpXSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVSZW5kZXJidWZmZXJzKEdMc2l6ZWkgbiwgY29u
c3QgR0x1aW50KiByZW5kZXJidWZmZXJzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQs
IGNvbnN0IEdMdWludCogcmVuZGVyYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgcmVuZGVyYnVmZmVy
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcnNbaV0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsRGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
c2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHNo
YWRlciA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmdldFNoYWRlcihzaGFkZXIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
KGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVNo
YWRlcihzaGFkZXIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlVGV4dHVyZXMoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIHRleHR1cmVzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZXNbaV0gIT0gMCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUo
dGV4dHVyZXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bERlcHRoRnVuYyhHTGVudW0gZnVuYykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBmdW5jID0gMHgl
WCkiLCBmdW5jKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmdW5jKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ORVZFUjoKLSAgICAgICAgICBjYXNlIEdMX0FMV0FZ
UzoKLSAgICAgICAgICBjYXNlIEdMX0xFU1M6Ci0gICAgICAgICAgY2FzZSBHTF9MRVFVQUw6Ci0g
ICAgICAgICAgY2FzZSBHTF9FUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX0dSRUFURVI6Ci0gICAg
ICAgICAgY2FzZSBHTF9HRVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoRnVuYyhmdW5jKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbERlcHRoTWFzayhHTGJvb2xlYW4gZmxhZykKLXsKLSAgICBFVkVOVCgiKEdMYm9vbGVh
biBmbGFnID0gJWQpIiwgZmxhZyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoTWFzayhmbGFn
ICE9IEdMX0ZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlcHRoUmFuZ2VmKEdMY2xhbXBmIHpOZWFyLCBHTGNs
YW1wZiB6RmFyKQotewotICAgIEVWRU5UKCIoR0xjbGFtcGYgek5lYXIgPSAlZiwgR0xjbGFtcGYg
ekZhciA9ICVmKSIsIHpOZWFyLCB6RmFyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhSYW5n
ZSh6TmVhciwgekZhcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZXRhY2hTaGFkZXIoR0x1aW50IHByb2dyYW0sIEdM
dWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQg
c2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAgICAg
ICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlckJ5UHJvZ3JhbUhhbmRsZTsK
LSAgICAgICAgICAgICAgICBzaGFkZXJCeVByb2dyYW1IYW5kbGUgPSBjb250ZXh0LT5nZXRTaGFk
ZXIocHJvZ3JhbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzaGFkZXJCeVByb2dyYW1IYW5kbGUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbUJ5U2hhZGVySGFuZGxlID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShzaGFkZXIpOwotICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbUJ5U2hhZGVySGFuZGxl
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5kZXRhY2hTaGFkZXIoc2hhZGVyT2JqZWN0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGlzYWJsZShHTGVudW0gY2Fw
KQotewotICAgIEVWRU5UKCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dp
dGNoIChjYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNF
OiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFjZShmYWxzZSk7ICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAg
IGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKGZhbHNlKTsgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2Ft
cGxlQWxwaGFUb0NvdmVyYWdlKGZhbHNlKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
U0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZShmYWxz
ZSk7ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KGZhbHNlKTsgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4
dC0+c2V0U3RlbmNpbFRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFRlc3Qo
ZmFsc2UpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDog
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kKGZhbHNlKTsgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0RGl0aGVyKGZhbHNlKTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0x1aW50IGluZGV4KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQpIiwgaW5k
ZXgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udGV4dC0+c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgs
IGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbERyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBH
THNpemVpIGNvdW50KQotewotICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBHTGludCBm
aXJzdCA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQpIiwgbW9kZSwgZmlyc3QsIGNvdW50KTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCBmaXJzdCA8IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50LCAwKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERyYXdB
cnJheXNJbnN0YW5jZWRBTkdMRShHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgcHJpbWNvdW50KQotewotICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVY
LCBHTGludCBmaXJzdCA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMc2l6ZWkgcHJpbWNvdW50
ID0gJWQpIiwgbW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IGZpcnN0IDwgMCB8fCBwcmltY291bnQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAocHJpbWNvdW50ID4gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMpCi17Ci0gICAgRVZFTlQoIihH
TGVudW0gbW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVY
LCBjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgbW9kZSwgY291
bnQsIHR5cGUsIGluZGljZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7ICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAg
ICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIDApOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNv
dW50KQotewotICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBHTHNpemVpIGNvdW50ID0g
JWQsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBpbmRpY2VzID0gMHglMC44cCwg
R0xzaXplaSBwcmltY291bnQgPSAlZCkiLAotICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBlLCBp
bmRpY2VzLCBwcmltY291bnQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQg
PCAwIHx8IHByaW1jb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcmltY291bnQg
PiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsgICAgCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5
cGUsIGluZGljZXMsIHByaW1jb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGUo
R0xlbnVtIGNhcCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoY2FwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZhY2UodHJ1ZSk7ICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9G
SUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKHRydWUpOyAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0
LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UodHJ1ZSk7IGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJh
Z2UodHJ1ZSk7ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RF
U1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KHRydWUpOyAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdGVuY2lsVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhU
ZXN0KHRydWUpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVO
RDogICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kKHRydWUpOyAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXREaXRoZXIodHJ1ZSk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0x1aW50IGluZGV4KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQpIiwgaW5k
ZXgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udGV4dC0+c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgs
IHRydWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsRW5kUXVlcnlFWFQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBFVkVO
VCgiR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9T
QU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6IAotICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVuZFF1ZXJ5KHRhcmdldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xGaW5pc2hGZW5jZU5WKEdMdWludCBm
ZW5jZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkKSIsIGZlbmNlKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OkZlbmNlKiBmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKLQot
ICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmZpbmlzaEZlbmNlKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xGaW5pc2godm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c3lu
Yyh0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbEZsdXNoKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnN5bmMoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0
YXJnZXQsIEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcmVuZGVyYnVmZmVydGFy
Z2V0ID0gMHglWCwgIgotICAgICAgICAgICJHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFy
Z2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICgodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRh
cmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZS
QU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgfHwgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBH
TF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxl
ID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdM
RSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQt
PmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxl
ID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFt
ZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyIHx8IChmcmFtZWJ1ZmZl
ckhhbmRsZSA9PSAwICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6Ci0gICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVy
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9B
VFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcihH
TF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVm
ZmVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBh
dHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwp
Ci17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQg
PSAweCVYLCBHTGVudW0gdGV4dGFyZ2V0ID0gMHglWCwgIgotICAgICAgICAgICJHTHVpbnQgdGV4
dHVyZSA9ICVkLCBHTGludCBsZXZlbCA9ICVkKSIsIHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJn
ZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5H
TEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgc3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMDoKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6Ci0g
ICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAodGV4dHVyZSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRleHRhcmdldCA9IEdMX05PTkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleCA9IGNvbnRl
eHQtPmdldFRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4ID09IE5V
TEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHN3aXRjaCAodGV4dGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNf
Y2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQ
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1
YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmIChsZXZlbCAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwot
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVh
ZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVy
SGFuZGxlID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwIHx8ICFmcmFtZWJ1
ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGF0
dGFjaG1lbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRU
QUNITUVOVDA6ICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJl
KTsgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOiAgIGZy
YW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXItPnNl
dFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xGcm9udEZhY2UoR0xlbnVtIG1vZGUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0g
bW9kZSA9IDB4JVgpIiwgbW9kZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
bW9kZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ1c6Ci0gICAgICAgICAgY2FzZSBH
TF9DQ1c6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
RnJvbnRGYWNlKG1vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbkJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVp
bnQqIGJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBidWZm
ZXJzID0gMHglMC44cCkiLCBuLCBidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBidWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KQotewot
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5p
c0RlcHRoKDApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21w
cmVzc2VkKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xHZW5GZW5jZXNOVihHTHNpemVpIG4sIEdMdWludCogZmVuY2VzKQotewotICAgIEVWRU5U
KCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogZmVuY2VzID0gMHglMC44cCkiLCBuLCBmZW5jZXMp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZlbmNlc1tpXSA9
IGNvbnRleHQtPmNyZWF0ZUZlbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5GcmFt
ZWJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIGZyYW1lYnVmZmVycykKLXsKLSAgICBFVkVOVCgi
KEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwgbiwgZnJh
bWVidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsR2VuUXVlcmllc0VYVChHTHNpemVpIG4sIEdMdWludCogaWRzKQotewot
ICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBp
ZHMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlkc1tpXSA9
IGNvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5SZW5k
ZXJidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJidWZmZXJzKQotewotICAgIEVWRU5U
KCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogcmVuZGVyYnVmZmVycyA9IDB4JTAuOHApIiwgbiwg
cmVuZGVyYnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmVuZGVyYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXplaSBuLCBHTHVpbnQqIHRleHR1
cmVzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAg
MHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChu
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVBdHRyaWIoR0x1aW50IHByb2dyYW0sIEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFt
ID0gJWQsIEdMdWludCBpbmRleCA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSAq
bGVuZ3RoID0gMHglMC44cCwgIgotICAgICAgICAgICJHTGludCAqc2l6ZSA9IDB4JTAuOHAsIEdM
ZW51bSAqdHlwZSA9ICUwLjhwLCBHTGNoYXIgKm5hbWUgPSAlMC44cCkiLAotICAgICAgICAgIHBy
b2dyYW0sIGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWlu
dClwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRl
KGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0
QWN0aXZlVW5pZm9ybShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBu
YW1lKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0g
JWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6ZWkqIGxlbmd0aCA9
IDB4JTAuOHAsIEdMaW50KiBzaXplID0gMHglMC44cCwgR0xlbnVtKiB0eXBlID0gMHglMC44cCwg
R0xjaGFyKiBuYW1lID0gMHglMC44cCkiLAotICAgICAgICAgIHByb2dyYW0sIGluZGV4LCBidWZz
aXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIo
cHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWludClwcm9ncmFtT2JqZWN0LT5n
ZXRBY3RpdmVVbmlmb3JtQ291bnQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm0oaW5kZXgsIGJ1ZnNpemUsIGxlbmd0
aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRBdHRhY2hlZFNoYWRlcnMoR0x1aW50
IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRl
cnMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHNpemVpIG1heGNvdW50
ID0gJWQsIEdMc2l6ZWkqIGNvdW50ID0gMHglMC44cCwgR0x1aW50KiBzaGFkZXJzID0gMHglMC44
cCkiLAotICAgICAgICAgIHByb2dyYW0sIG1heGNvdW50LCBjb3VudCwgc2hhZGVycyk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChtYXhjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbU9i
amVjdC0+Z2V0QXR0YWNoZWRTaGFkZXJzKG1heGNvdW50LCBjb3VudCwgc2hhZGVycyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotaW50IF9fc3RkY2Fs
bCBnbEdldEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUp
Ci17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBjb25zdCBHTGNoYXIqIG5hbWUg
PSAlcykiLCBwcm9ncmFtLCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCAtMSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldEF0dHJpYnV0ZUxvY2F0
aW9uKG5hbWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAtMSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEJvb2xlYW52KEdM
ZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGJvb2xlYW4qIHBhcmFtcyA9IDB4JTAuOHApIiwgIHBuYW1lLCBwYXJhbXMp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgcGFyYW1zKSkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVt
UGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1
dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlm
IChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg
ICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0
UGFyYW1zW2ldID09IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1z
ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBh
cmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUs
IGludFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGludFBhcmFtc1tpXSA9PSAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gaW50
UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEJ1
ZmZlclBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFt
cykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAw
eCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAg
ICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVG
RkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQSBudWxs
IGJ1ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0
YXJnZXQKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9VU0FHRToKLSAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gYnVmZmVyLT51c2FnZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBidWZmZXItPnNpemUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0xlbnVtIF9f
c3RkY2FsbCBnbEdldEVycm9yKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICBpZiAoY29udGV4dCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRFcnJvcigpOwotICAgIH0KLQotICAg
IHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGZW5jZWl2TlYo
R0x1aW50IGZlbmNlLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgZmVuY2UgPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgKnBhcmFtcyA9
IDB4JTAuOHApIiwgZmVuY2UsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
IAotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVu
Y2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAg
ICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpdihwbmFtZSwgcGFyYW1zKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBFVkVO
VCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcG5h
bWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgcGFy
YW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVU
eXBlLCAmbnVtUGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMg
dmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KLQotICAg
ICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwotICAg
ICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOwot
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFy
YW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAwLjBmOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDEuMGY7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFt
czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlw
ZSA9PSBHTF9JTlQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGlu
dCAqaW50UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3
IEdMaW50W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50
ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMZmxvYXQpaW50UGFyYW1z
W2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xlbnVt
IHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKLSAgICAgICAgICB0YXJn
ZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRh
cmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAg
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5k
bGUoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZnJh
bWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAgICAgR0x1aW50
IGF0dGFjaG1lbnRIYW5kbGU7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6ICAgIAot
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyVHlwZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoKTsgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgIAotICAgICAgICAgICAgICAg
IGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpOwotICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXJIYW5kbGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlQ6ICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUg
PSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKLSAgICAgICAgICAgICAgICBh
dHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEdMZW51
bSBhdHRhY2htZW50T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5Ci0gICAgICAgICAgICBp
ZiAoYXR0YWNobWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9SRU5E
RVJCVUZGRVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVj
dFR5cGUgPSBhdHRhY2htZW50VHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYgKGdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBHTF9URVhUVVJF
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBl
ID09IEdMX1JFTkRFUkJVRkZFUiB8fCBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJF
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFj
aG1lbnRIYW5kbGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6
Ci0gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgLy8g
RnJhbWVidWZmZXJUZXh0dXJlMkQgd2lsbCBub3QgYWxsb3cgbGV2ZWwgdG8gYmUgc2V0IHRvIGFu
eXRoaW5nIGVsc2UgaW4gR0wgRVMgMi4wCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVj
dFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRh
Y2htZW50VHlwZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1HTGVudW0gX19zdGRjYWxsIGds
R2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCh2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBjb250ZXh0LT5nZXRSZXNldFN0YXR1cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIEdMX05PX0VSUk9SOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsR2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAg
IEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
cG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1l
LCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5h
dGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHBuYW1lIGlz
IHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCi0KLSAgICAgICAg
ICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAgICAg
ICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Q
YXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAxOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxP
QVQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9h
dFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdM
ZmxvYXRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9h
dHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwg
cG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJf
VkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxFTkRfQ09MT1IpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KSgoKEdM
ZmxvYXQpKDB4RkZGRkZGRkYpICogZmxvYXRQYXJhbXNbaV0gLSAxLjBmKSAvIDIuMGYpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoZmxvYXRQYXJhbXNb
aV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQYXJhbXNbaV0gKyAwLjUpIDogY2VpbChmbG9hdFBhcmFt
c1tpXSAtIDAuNSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBH
TGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xlbnVt
IHBuYW1lID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHByb2dyYW0sIHBuYW1lLCBw
YXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVMRVRFX1NUQVRVUzoKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTElOS19TVEFUVVM6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKSAhPSBOVUxMOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9WQUxJREFURV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1P
YmplY3QtPmlzVmFsaWRhdGVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0lORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+Z2V0SW5mb0xvZ0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BVFRBQ0hFRF9TSEFERVJTOgotICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRU
UklCVVRFUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0
aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VO
SUZPUk1TOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3Rp
dmVVbmlmb3JtQ291bnQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9M
RU5HVEhfT0VTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFByb2dy
YW1JbmZvTG9nKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0
aCwgR0xjaGFyKiBpbmZvbG9nKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwg
R0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hhciog
aW5mb2xvZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBwcm9ncmFtLCBidWZzaXplLCBsZW5ndGgs
IGluZm9sb2cpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFt
KTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0SW5mb0xvZyhidWZzaXplLCBsZW5n
dGgsIGluZm9sb2cpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdkVYVChHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgRVZFTlQoIkdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCAqcGFyYW1zID0gMHglMC44cCkiLCB0YXJn
ZXQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHBu
YW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1FVRVJZX0VYVDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2
ZVF1ZXJ5KHRhcmdldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeU9iamVjdHVpdkVYVChHTHVpbnQgaWQs
IEdMZW51bSBwbmFtZSwgR0x1aW50ICpwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaWQg
PSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x1aW50ICpwYXJhbXMgPSAweCUwLjhwKSIsIGlk
LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChwbmFt
ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0VYVDoKLSAgICAg
ICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpRdWVyeSAqcXVlcnlPYmplY3QgPSBjb250ZXh0LT5nZXRRdWVyeShp
ZCwgZmFsc2UsIEdMX05PTkUpOwotCi0gICAgICAgICAgICBpZiAoIXF1ZXJ5T2JqZWN0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRBY3Rp
dmVRdWVyeShxdWVyeU9iamVjdC0+Z2V0VHlwZSgpKSA9PSBpZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2gocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0VYVDoKLSAgICAgICAgICAgICAgICBwYXJh
bXNbMF0gPSBxdWVyeU9iamVjdC0+Z2V0UmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQ6Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3QtPmlzUmVzdWx0QXZhaWxhYmxlKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBh
cmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgp
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGNvbnRleHQt
PmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpKTsKLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfV0lEVEg6
ICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRXaWR0aCgpOyAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfSEVJR0hUOiAgICAgICAg
ICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRIZWlnaHQoKTsgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOiAqcGFyYW1z
ID0gcmVuZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOyBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfUkVEX1NJWkU6ICAgICAgICAqcGFyYW1zID0gcmVuZGVy
YnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRTogICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5n
ZXRHcmVlblNpemUoKTsgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJC
VUZGRVJfQkxVRV9TSVpFOiAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRCbHVlU2l6
ZSgpOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRTogICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRBbHBoYVNpemUoKTsgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRTog
ICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXREZXB0aFNpemUoKTsgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOiAgICAqcGFy
YW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOyAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19BTkdMRToKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRT
YW1wbGVzKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlcml2KEdMdWludCBzaGFk
ZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBz
aGFkZXIgPSAlZCwgR0xlbnVtIHBuYW1lID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIs
IHNoYWRlciwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVj
dCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAgICAgICAgICBpZiAoIXNoYWRl
ck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0hBREVSX1RZUEU6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0VHlwZSgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0
aW9uKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBJTEVfU1RBVFVTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmlz
Q29tcGlsZWQoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmdldEluZm9Mb2dMZW5ndGgoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEg6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0U291cmNlTGVuZ3Ro
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5T
TEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHNoYWRlck9iamVjdC0+Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdl
dFNoYWRlckluZm9Mb2coR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBs
ZW5ndGgsIEdMY2hhciogaW5mb2xvZykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAl
ZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hh
ciogaW5mb2xvZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0
aCwgaW5mb2xvZyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7
Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwg
aW5mb2xvZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0xlbnVtIHNoYWRl
cnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNp
b24pCi17Ci0gICAgRVZFTlQoIihHTGVudW0gc2hhZGVydHlwZSA9IDB4JVgsIEdMZW51bSBwcmVj
aXNpb250eXBlID0gMHglWCwgR0xpbnQqIHJhbmdlID0gMHglMC44cCwgR0xpbnQqIHByZWNpc2lv
biA9IDB4JTAuOHApIiwKLSAgICAgICAgICBzaGFkZXJ0eXBlLCBwcmVjaXNpb250eXBlLCByYW5n
ZSwgcHJlY2lzaW9uKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzaGFkZXJ0
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9WRVJURVhfU0hBREVSOgotICAgICAg
ICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChwcmVjaXNpb250eXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9MT1dfRkxPQVQ6Ci0gICAgICAgICAgY2FzZSBHTF9NRURJVU1fRkxP
QVQ6Ci0gICAgICAgICAgY2FzZSBHTF9ISUdIX0ZMT0FUOgotICAgICAgICAgICAgLy8gQXNzdW1l
IElFRUUgNzU0IHByZWNpc2lvbgotICAgICAgICAgICAgcmFuZ2VbMF0gPSAxMjc7Ci0gICAgICAg
ICAgICByYW5nZVsxXSA9IDEyNzsKLSAgICAgICAgICAgICpwcmVjaXNpb24gPSAyMzsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTE9XX0lOVDoKLSAgICAgICAgICBjYXNl
IEdMX01FRElVTV9JTlQ6Ci0gICAgICAgICAgY2FzZSBHTF9ISUdIX0lOVDoKLSAgICAgICAgICAg
IC8vIFNvbWUgKG1vc3QpIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMgc2luZ2xlLXByZWNpc2lvbiBm
bG9hdGluZy1wb2ludCBudW1iZXJzLAotICAgICAgICAgICAgLy8gd2hpY2ggY2FuIGFjY3VyYXRl
bHkgcmVwcmVzZW50IGludGVnZXJzIHVwIHRvICsvLTE2Nzc3MjE2Ci0gICAgICAgICAgICByYW5n
ZVswXSA9IDI0OwotICAgICAgICAgICAgcmFuZ2VbMV0gPSAyNDsKLSAgICAgICAgICAgICpwcmVj
aXNpb24gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVy
U291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBH
TGNoYXIqIHNvdXJjZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXpl
aSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hhciogc291cmNl
ID0gMHglMC44cCkiLAotICAgICAgICAgIHNoYWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2Up
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpTaGFk
ZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAgICAg
ICAgICBpZiAoIXNoYWRlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBzaGFkZXJPYmplY3QtPmdldFNvdXJjZShidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoR0x1aW50IHNoYWRlciwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKQotewotICAg
IEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXpl
aSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBzb3VyY2UgPSAweCUwLjhwKSIsCi0gICAgICAg
ICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29u
dGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+
Z2V0VHJhbnNsYXRlZFNvdXJjZShidWZzaXplLCBsZW5ndGgsIHNvdXJjZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotY29uc3QgR0x1Ynl0ZSogX19z
dGRjYWxsIGdsR2V0U3RyaW5nKEdMZW51bSBuYW1lKQotewotICAgIEVWRU5UKCIoR0xlbnVtIG5h
bWUgPSAweCVYKSIsIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIHN3aXRjaCAo
bmFtZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVkVORE9SOgotICAgICAgICAgICAg
cmV0dXJuIChHTHVieXRlKikiR29vZ2xlIEluYy4iOwotICAgICAgICAgIGNhc2UgR0xfUkVOREVS
RVI6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNv
bnRleHQtPmdldFJlbmRlcmVyU3RyaW5nKCkgOiAiQU5HTEUiKTsKLSAgICAgICAgICBjYXNlIEdM
X1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMi4wIChB
TkdMRSAiVkVSU0lPTl9TVFJJTkciKSI7Ci0gICAgICAgICAgY2FzZSBHTF9TSEFESU5HX0xBTkdV
QUdFX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xT
TCBFUyAxLjAwIChBTkdMRSAiVkVSU0lPTl9TVFJJTkciKSI7Ci0gICAgICAgICAgY2FzZSBHTF9F
WFRFTlNJT05TOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVM
TCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgKEdMdWJ5dGUq
KU5VTEwpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoR0x1Ynl0ZSopTlVM
TCk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51
bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFt
cyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1
cmUgKnRleHR1cmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9N
QUdfRklMVEVSOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRNYWdGaWx0ZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZs
b2F0KXRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9F
WFQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KSh0ZXh0dXJlLT5pc0ltbXV0
YWJsZSgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFy
YW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewot
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdM
aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAg
ICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+
Z2V0TWFnRmlsdGVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0
dXJlLT5nZXRNaW5GaWx0ZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4
dHVyZS0+Z2V0V3JhcFMoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVy
ZS0+Z2V0V3JhcFQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVRfRVhUOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSB0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5H
TEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFVzYWdlKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRuVW5pZm9ybWZ2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBidWZTaXplLCBHTGZsb2F0KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3Jh
bSA9ICVkLCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xmbG9h
dCogcGFyYW1zID0gMHglMC44cCkiLAotICAgICAgICAgIHByb2dyYW0sIGxvY2F0aW9uLCBidWZT
aXplLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmU2l6ZSA8IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChwcm9ncmFtID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1mdihHTHVpbnQg
cHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMZmxvYXQqIHBhcmFt
cyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChw
cm9ncmFtID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1mdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1pdkVYVChHTHVpbnQgcHJvZ3JhbSwg
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
YnVmU2l6ZSA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCAKLSAgICAgICAgICBwcm9n
cmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKGJ1ZlNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0
LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtaXYobG9jYXRpb24s
ICZidWZTaXplLCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRVbmlmb3JtaXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1z
KQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1z
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLWludCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtTG9jYXRpb24o
R0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMdWlu
dCBwcm9ncmFtID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9IDB4JTAuOHApIiwgcHJvZ3JhbSwg
bmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKHN0cnN0cihuYW1lLCAiZ2xf
IikgPT0gbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0x
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUs
IC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0
VW5pZm9ybUxvY2F0aW9uKG5hbWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCAtMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdl
dFZlcnRleEF0dHJpYmZ2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJh
bXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBpbmRleCwgcG5hbWUsIHBhcmFtcyk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
U3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCkoYXR0cmliU3RhdGUubUFycmF5RW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9TSVpFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRy
aWJTdGF0ZS5tU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVN0cmlkZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1UeXBlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
Tk9STUFMSVpFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0
YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5t
Qm91bmRCdWZmZXIuaWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSBhdHRyaWJTdGF0ZS5tQ3VycmVudFZhbHVlW2ldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1EaXZpc29yOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYml2KEdMdWludCBpbmRleCwgR0xl
bnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0g
JWQsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4
LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4KTsKLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6
IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0
dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVF
IDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGF0dHJpYlN0YXRl
Lm1DdXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGlu
dCkoY3VycmVudFZhbHVlID4gMC4wZiA/IGZsb29yKGN1cnJlbnRWYWx1ZSArIDAuNWYpIDogY2Vp
bChjdXJyZW50VmFsdWUgLSAwLjVmKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElW
SVNPUl9BTkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KWF0dHJpYlN0YXRl
Lm1EaXZpc29yOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZv
aWQqKiBwb2ludGVyKQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBvaW50ZXIgPSAweCUwLjhwKSIsIGluZGV4LCBwbmFtZSwg
cG9pbnRlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHBuYW1lICE9IEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfUE9JTlRFUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgKnBvaW50ZXIgPSBjb25zdF9jYXN0PEdMdm9pZCo+KGNvbnRleHQtPmdldFZlcnRleEF0dHJp
YlBvaW50ZXIoaW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEhpbnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1v
ZGUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIG1vZGUgPSAw
eCVYKSIsIHRhcmdldCwgbW9kZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
bW9kZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkFTVEVTVDoKLSAgICAgICAgICBj
YXNlIEdMX05JQ0VTVDoKLSAgICAgICAgICBjYXNlIEdMX0RPTlRfQ0FSRToKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsgCi0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAg
ICAgICBpZiAoY29udGV4dCkgY29udGV4dC0+c2V0R2VuZXJhdGVNaXBtYXBIaW50KG1vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVS
SVZBVElWRV9ISU5UX09FUzoKLSAgICAgICAgICAgIGlmIChjb250ZXh0KSBjb250ZXh0LT5zZXRG
cmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50KG1vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLUdM
Ym9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0J1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIEVWRU5U
KCIoR0x1aW50IGJ1ZmZlciA9ICVkKSIsIGJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQgJiYgYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
QnVmZmVyICpidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRCdWZmZXIoYnVmZmVyKTsKLQotICAg
ICAgICAgICAgaWYgKGJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0K
LQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzRW5hYmxlZChHTGVudW0gY2FwKQotewotICAgIEVW
RU5UKCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2FwKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAg
ICAgICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVuYWJsZWQoKTsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIHJldHVybiBjb250ZXh0LT5pc1BvbHln
b25PZmZzZXRGaWxsRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBI
QV9UT19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5h
YmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTY2lz
c29yVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5jaWxUZXN0RW5hYmxlZCgpOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmlzRGVwdGhUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQmxlbmRFbmFibGVkKCk7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+
aXNEaXRoZXJFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNGZW5jZU5WKEdMdWlu
dCBmZW5jZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkKSIsIGZlbmNlKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsK
LQotICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gZmVuY2VPYmplY3QtPmlzRmVuY2UoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsK
LX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVm
ZmVyKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZyYW1lYnVmZmVyID0gJWQpIiwgZnJhbWVidWZm
ZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIGZyYW1lYnVm
ZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
T2JqZWN0ID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotCi0gICAgICAg
ICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19
Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1Byb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0g
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHByb2dyYW0pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1F1ZXJ5RVhUKEdMdWlu
dCBpZCkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpZCA9ICVkKSIsIGlkKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKGlkID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpRdWVyeSAqcXVlcnlPYmplY3QgPSBjb250ZXh0LT5nZXRRdWVy
eShpZCwgZmFsc2UsIEdMX05PTkUpOwotCi0gICAgICAgICAgICBpZiAocXVlcnlPYmplY3QpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1Jl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIEVWRU5UKCIoR0x1aW50IHJl
bmRlcmJ1ZmZlciA9ICVkKSIsIHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQgJiYgcmVuZGVyYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRSZW5k
ZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLQotICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9i
amVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0Up
OwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2Fs
bCBnbElzU2hhZGVyKEdMdWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVy
ID0gJWQpIiwgc2hhZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCAmJiBzaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9i
amVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAgICAgICAgICBpZiAoc2hh
ZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVF
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9G
QUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQotewotICAgIEVWRU5UKCIoR0x1aW50
IHRleHR1cmUgPSAlZCkiLCB0ZXh0dXJlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCAmJiB0ZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVy
ZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICAg
ICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbExpbmVXaWR0aChHTGZsb2F0IHdpZHRoKQotewotICAgIEVWRU5U
KCIoR0xmbG9hdCB3aWR0aCA9ICVmKSIsIHdpZHRoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKHdpZHRoIDw9IDAuMGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldExpbmVXaWR0aCh3aWR0aCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xMaW5rUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgiKEdMdWlu
dCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5saW5rKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xQaXhlbFN0b3JlaShHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQotewotICAg
IEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCBwbmFtZSwg
cGFyYW0pOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFt
ICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJhbSAhPSA0ICYmIHBhcmFtICE9IDgpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
VW5wYWNrQWxpZ25tZW50KHBhcmFtKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOgotICAgICAgICAgICAgICAgIGlmIChwYXJh
bSAhPSAxICYmIHBhcmFtICE9IDIgJiYgcGFyYW0gIT0gNCAmJiBwYXJhbSAhPSA4KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFBhY2tBbGlnbm1lbnQocGFyYW0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRToKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRQYWNrUmV2ZXJzZVJvd09yZGVyKHBhcmFtICE9IDApOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xQb2x5Z29uT2Zmc2V0KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQotewotICAgIEVW
RU5UKCIoR0xmbG9hdCBmYWN0b3IgPSAlZiwgR0xmbG9hdCB1bml0cyA9ICVmKSIsIGZhY3Rvciwg
dW5pdHMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKGZhY3Rvciwg
dW5pdHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsUmVhZG5QaXhlbHNFWFQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIGJ1ZlNpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMdm9pZCAqZGF0YSkKLXsKLSAgICBFVkVOVCgiKEdMaW50
IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0
ID0gJWQsICIKLSAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0g
MHglWCwgR0xzaXplaSBidWZTaXplID0gMHglZCwgR0x2b2lkICpkYXRhID0gMHglMC44cCkiLAot
ICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgZGF0
YSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCB8fCBidWZTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWxpZFJlYWRGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgJmJ1ZlNpemUsIGRhdGEpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUmVh
ZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0x2b2lkKiBwaXhlbHMpCi17Ci0gICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAl
ZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCAiCi0gICAgICAgICAg
IkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIEdMdm9pZCogcGl4ZWxz
ID0gMHglMC44cCkiLAotICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgIHBpeGVscyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWxpZFJlYWRGb3JtYXRUeXBl
KGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFJlbGVhc2VTaGFk
ZXJDb21waWxlcih2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGVBTkdMRShHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgRVZF
TlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQg
PSAlZCkiLAotICAgICAgICAgIHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmFi
bGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6SXNEZXB0aFJlbmRlcmFibGUoaW50ZXJuYWxmb3Jt
YXQpICYmICFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IHNhbXBsZXMgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkg
fHwgCi0gICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlcmJ1
ZmZlckRpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgc2FtcGxlcyA+IGNvbnRleHQtPmdl
dE1heFN1cHBvcnRlZFNhbXBsZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEdMdWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsKLSAg
ICAgICAgICAgIGlmIChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpEZXB0aGJ1ZmZlcih3aWR0aCwgaGVp
Z2h0LCBzYW1wbGVzKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCQTQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCwgc2FtcGxlcykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWln
aHQsIHNhbXBsZXMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRS
ZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6RGVwdGhTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWln
aHQsIHNhbXBsZXMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgMCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFNhbXBs
ZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KQotewotICAgIEVWRU5U
KCIoR0xjbGFtcGYgdmFsdWUgPSAlZiwgR0xib29sZWFuIGludmVydCA9ICVkKSIsIHZhbHVlLCBp
bnZlcnQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCogY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhnbDo6Y2xh
bXAwMSh2YWx1ZSksIGludmVydCA9PSBHTF9UUlVFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFNldEZlbmNlTlYoR0x1
aW50IGZlbmNlLCBHTGVudW0gY29uZGl0aW9uKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZlbmNl
ID0gJWQsIEdMZW51bSBjb25kaXRpb24gPSAweCVYKSIsIGZlbmNlLCBjb25kaXRpb24pOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY29uZGl0aW9uICE9IEdMX0FMTF9DT01QTEVURURf
TlYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsK
LQotICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZmVuY2VPYmplY3QtPnNldEZlbmNlKGNvbmRpdGlvbik7
ICAgIAotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsU2Npc3NvcihHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVk
LCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVp
Z2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclBhcmFtcyh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbFNoYWRlckJpbmFyeShHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVy
cywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVu
Z3RoKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogc2hhZGVy
cyA9IDB4JTAuOHAsIEdMZW51bSBiaW5hcnlmb3JtYXQgPSAweCVYLCAiCi0gICAgICAgICAgImNv
bnN0IEdMdm9pZCogYmluYXJ5ID0gMHglMC44cCwgR0xzaXplaSBsZW5ndGggPSAlZCkiLAotICAg
ICAgICAgIG4sIHNoYWRlcnMsIGJpbmFyeWZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICAvLyBObyBiaW5hcnkgc2hhZGVyIGZvcm1hdHMgYXJlIHN1cHBv
cnRlZC4KLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyU291cmNl
KEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhcioqIHN0cmluZywgY29u
c3QgR0xpbnQqIGxlbmd0aCkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNoYXIqKiBzdHJpbmcgPSAweCUwLjhwLCBjb25zdCBH
TGludCogbGVuZ3RoID0gMHglMC44cCkiLAotICAgICAgICAgIHNoYWRlciwgY291bnQsIHN0cmlu
ZywgbGVuZ3RoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0K
LSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzaGFkZXJP
YmplY3QtPnNldFNvdXJjZShjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNp
bEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCi17Ci0gICAgZ2xTdGVu
Y2lsRnVuY1NlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBmdW5jLCByZWYsIG1hc2spOwotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51
bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xlbnVtIGZh
Y2UgPSAweCVYLCBHTGVudW0gZnVuYyA9IDB4JVgsIEdMaW50IHJlZiA9ICVkLCBHTHVpbnQgbWFz
ayA9ICVkKSIsIGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoZmFjZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6Ci0g
ICAgICAgICAgY2FzZSBHTF9CQUNLOgotICAgICAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KGZ1bmMpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FVkVSOgotICAgICAgICAgIGNh
c2UgR0xfQUxXQVlTOgotICAgICAgICAgIGNhc2UgR0xfTEVTUzoKLSAgICAgICAgICBjYXNlIEdM
X0xFUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX0VRVUFMOgotICAgICAgICAgIGNhc2UgR0xfR0VR
VUFMOgotICAgICAgICAgIGNhc2UgR0xfR1JFQVRFUjoKLSAgICAgICAgICBjYXNlIEdMX05PVEVR
VUFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQg
fHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTdGVuY2lsUGFyYW1zKGZ1bmMsIHJlZiwgbWFzayk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBHTF9G
Uk9OVF9BTkRfQkFDSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdGVuY2lsQmFja1BhcmFtcyhmdW5jLCByZWYsIG1hc2spOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsU3RlbmNpbE1hc2soR0x1aW50IG1hc2spCi17Ci0gICAgZ2xTdGVuY2lsTWFza1NlcGFy
YXRlKEdMX0ZST05UX0FORF9CQUNLLCBtYXNrKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVu
Y2lsTWFza1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTHVpbnQgbWFzaykKLXsKLSAgICBFVkVOVCgi
KEdMZW51bSBmYWNlID0gMHglWCwgR0x1aW50IG1hc2sgPSAlZCkiLCBmYWNlLCBtYXNrKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2Fz
ZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChm
YWNlID09IEdMX0ZST05UIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFdyaXRlbWFzayhtYXNrKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNl
ID09IEdMX0ZST05UX0FORF9CQUNLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNldFN0ZW5jaWxCYWNrV3JpdGVtYXNrKG1hc2spOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsU3RlbmNpbE9wKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcykK
LXsKLSAgICBnbFN0ZW5jaWxPcFNlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBmYWlsLCB6ZmFp
bCwgenBhc3MpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxPcFNlcGFyYXRlKEdMZW51
bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCi17Ci0gICAg
RVZFTlQoIihHTGVudW0gZmFjZSA9IDB4JVgsIEdMZW51bSBmYWlsID0gMHglWCwgR0xlbnVtIHpm
YWlsID0gMHglWCwgR0xlbnVtIHpwYXMgPSAweCVYcykiLAotICAgICAgICAgIGZhY2UsIGZhaWws
IHpmYWlsLCB6cGFzcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmFjZSkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6Ci0gICAgICAgICAgY2FzZSBHTF9C
QUNLOgotICAgICAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGZhaWwpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9LRUVQOgotICAgICAg
ICAgIGNhc2UgR0xfUkVQTEFDRToKLSAgICAgICAgICBjYXNlIEdMX0lOQ1I6Ci0gICAgICAgICAg
Y2FzZSBHTF9ERUNSOgotICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgotICAgICAgICAgIGNhc2Ug
R0xfSU5DUl9XUkFQOgotICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh6ZmFpbCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNlIEdMX0tFRVA6Ci0g
ICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgotICAgICAgICAgIGNhc2UgR0xfSU5DUjoKLSAgICAg
ICAgICBjYXNlIEdMX0RFQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9JTkNSX1dSQVA6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHpwYXNzKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9aRVJPOgotICAgICAgICAgIGNhc2UgR0xfS0VF
UDoKLSAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSOgot
ICAgICAgICAgIGNhc2UgR0xfREVDUjoKLSAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKLSAgICAg
ICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKLSAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8IGZhY2Ug
PT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3RlbmNpbE9wZXJhdGlvbnMoZmFpbCwgemZhaWwsIHpwYXNzKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZS
T05UX0FORF9CQUNLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhmYWlsLCB6ZmFpbCwgenBhc3MpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLUdMYm9v
bGVhbiBfX3N0ZGNhbGwgZ2xUZXN0RmVuY2VOVihHTHVpbnQgZmVuY2UpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgZmVuY2UgPSAlZCkiLCBmZW5jZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VP
YmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7Ci0KLSAgICAgICAgICAgIGlmIChmZW5j
ZU9iamVjdCA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiBmZW5jZU9iamVjdC0+dGVzdEZlbmNlKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBHTF9UUlVFOwotfQotCi12
b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9ICVkLCBH
THNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xp
bnQgYm9yZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgs
IGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gIDB4JTAuOHApIiwKLSAgICAgICAgICB0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJbWFnZVNpemUo
bGV2ZWwsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW50ZXJuYWxm
b3JtYXQgIT0gR0xpbnQoZm9ybWF0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZhbGlk
YXRlIDx0eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKLSAgICAg
ICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UXzI0XzhfT0VTOgotICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5cGU+IGNvbWJpbmF0aW9ucwotICAg
ICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAgICAg
Ly8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURf
T1BFUkFUSU9OCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VT
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAg
ICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
OgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0hB
TEZfRkxPQVRfT0VTOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF80XzRfNF80OgotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOiAgLy8gZXJy
b3IgY2FzZXMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIGhhbmRsZWQgYmVsb3cKLSAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsgCi0g
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF8yNF84X09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhp
bXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBz
d2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVt
VGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWln
aHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCAhPSBo
ZWlnaHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigp
ID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0
TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9PRVM6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVy
ZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMg
bG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAg
Ly8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAo
cGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09
IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldElt
YWdlKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFj
a0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NY
KGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0Fs
aWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldElt
YWdlUG9zWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRV
bnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdZKGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zZXRJbWFnZVBvc1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4
dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWihsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwg
cGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZs
b2F0IHBhcmFtKQotewotICAgIGdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCAoR0xpbnQp
cGFyYW0pOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmZ2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1zKQotewotICAgIGdsVGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCAoR0xpbnQpKnBhcmFtcyk7Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsVGV4UGFyYW1ldGVyaShHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBh
cmFtKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBT
KChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgot
ICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlwYXJhbSkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0VXNh
Z2UoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50
KiBwYXJhbXMpCi17Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsICpwYXJhbXMp
OwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gdGFyZ2V0LCBH
THNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVp
IGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRo
ID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKLSAgICAgICAgICAgdGFyZ2V0LCBsZXZlbHMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEICYmIHRhcmdldCAhPSBHTF9URVhUVVJFX0NV
QkVfTUFQKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSB8
fCBsZXZlbHMgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRV
UkVfQ1VCRV9NQVAgJiYgd2lkdGggIT0gaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjpsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQp
KSArIDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJh
Y3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRy
YWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7Ci0KLSAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9OT05F
IHx8IHR5cGUgPT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0
aCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8
fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiAhY29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFnbDo6aXNQb3cyKHdp
ZHRoKSB8fCAhZ2w6OmlzUG93MihoZWlnaHQpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxm
b3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhU
MVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1Rl
eHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1
cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9S
R0JBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3Rl
eHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCi0gICAgICAgICAgICAgICAgaWYg
KGxldmVscyAhPSAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJE
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFi
bGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9U
RVhUVVJFX0NVQkVfTUFQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9y
bWF0LCB3aWR0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zm
c2V0ID0gJWQsICIKLSAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdo
dCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCi0gICAg
ICAgICAgImNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAotICAgICAgICAgICB0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgMCB8
fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1h
eCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1h
eCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjaGVja1Rl
eHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4g
Y29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9GTE9BVCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRl
cHRoIGRhdGEsIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5V
TEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQs
IHRleHR1cmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1h
cCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxz
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1
cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMWYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCkKLXsKLSAgICBn
bFVuaWZvcm0xZnYobG9jYXRpb24sIDEsICZ4KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQot
ewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBj
b25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJv
Z3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5p
Zm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtMWkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgpCi17Ci0gICAgZ2xVbmlm
b3JtMWl2KGxvY2F0aW9uLCAxLCAmeCk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCi17Ci0gICAg
RVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdM
aW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFpdihs
b2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtMmYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQotewotICAgIEdM
ZmxvYXQgeHlbMl0gPSB7eCwgeX07Ci0KLSAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIDEsIChH
TGZsb2F0KikmeHkpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgRVZFTlQoIihH
TGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYg
PSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGxvY2F0
aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5h
cnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYo
bG9jYXRpb24sIGNvdW50LCB2KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTJpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQotewotICAgIEdMaW50
IHh5WzRdID0ge3gsIHl9OwotCi0gICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCAoR0xpbnQq
KSZ4eSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCki
LCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291
bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4
dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xpbnQgbG9j
YXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCi17Ci0gICAgR0xmbG9hdCB4
eXpbM10gPSB7eCwgeSwgen07Ci0KLSAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIDEsIChHTGZs
b2F0KikmeHl6KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIEVWRU5UKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0g
MHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwg
Y291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2ko
R0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopCi17Ci0gICAgR0xpbnQg
eHl6WzNdID0ge3gsIHksIHp9OwotCi0gICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCAxLCAoR0xp
bnQqKSZ4eXopOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQotewotICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAu
OHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYg
KGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50
LCB2KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50
IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCi17
Ci0gICAgR0xmbG9hdCB4eXp3WzRdID0ge3gsIHksIHosIHd9OwotCi0gICAgZ2xVbmlmb3JtNGZ2
KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5encpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYp
Ci17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQ
cm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm00aShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xp
bnQgeiwgR0xpbnQgdykKLXsKLSAgICBHTGludCB4eXp3WzRdID0ge3gsIHksIHosIHd9OwotCi0g
ICAgZ2xVbmlmb3JtNGl2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eXp3KTsKLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwg
dik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQotewot
ICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJv
b2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAot
ICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291bnQsIHZhbHVl
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCog
dmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFu
c3Bvc2UgIT0gR0xfRkFMU0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dy
YW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLCBjb3VudCwgdmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9
ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBp
ZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0K
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdl
dFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0gICAg
RVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJv
Z3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCAmJiBwcm9ncmFtICE9IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT51
c2VQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9n
cmFtKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZihH
THVpbnQgaW5kZXgsIEdMZmxvYXQgeCkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVk
LCBHTGZsb2F0IHggPSAlZikiLCBpbmRleCwgeCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0g
PSB7IHgsIDAsIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihp
bmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZGV4LCBjb25z
dCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29u
c3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07Ci0gICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0
cmliMmYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYpIiwgaW5k
ZXgsIHgsIHkpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCAwLCAxIH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQot
ewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9
IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7
IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRW
ZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2YoR0x1aW50
IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQotewotICAgIEVWRU5UKCIo
R0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xmbG9h
dCB6ID0gJWYpIiwgaW5kZXgsIHgsIHksIHopOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0g
eyB4LCB5LCB6LCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5k
ZXgsIHZhbHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmRleCwgY29uc3Qg
R0xmbG9hdCogdmFsdWVzKQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBH
TGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIDEgfTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBH
TGZsb2F0IHosIEdMZmxvYXQgdykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBH
TGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBHTGZsb2F0IHcg
PSAlZikiLCBpbmRleCwgeCwgeSwgeiwgdyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7
IHgsIHksIHosIHcgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZGV4LCBjb25zdCBH
TGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3Qg
R0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFsdWVzKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRShHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQotewotICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMdWludCBkaXZpc29yID0gJWQpIiwgaW5kZXgsIGRp
dmlzb3IpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwg
ZGl2aXNvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmRleCwgR0xp
bnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlk
ZSwgY29uc3QgR0x2b2lkKiBwdHIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
R0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiR0xib29s
ZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBw
dHIgPSAweCUwLjhwKSIsCi0gICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQs
IHN0cmlkZSwgcHRyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzaXplIDwgMSB8
fCBzaXplID4gNCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgICBjYXNlIEdMX1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9GSVhFRDoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0
cmlkZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0
LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCAobm9ybWFsaXplZCA9PSBHTF9UUlVFKSwg
c3RyaWRlLCBwdHIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdM
aW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgs
IHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdwb3J0UGFyYW1zKHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAs
IEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGlu
dCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCi17Ci0gICAg
RVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBHTGludCBzcmNZMCA9ICVkLCBHTGludCBzcmNYMSA9
ICVkLCBHTGludCBzcmNZMSA9ICVkLCAiCi0gICAgICAgICAgIkdMaW50IGRzdFgwID0gJWQsIEdM
aW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgxID0gJWQsIEdMaW50IGRzdFkxID0gJWQsICIKLSAg
ICAgICAgICAiR0xiaXRmaWVsZCBtYXNrID0gMHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwK
LSAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNYMSwgZHN0WDAsIGRzdFkwLCBkc3RY
MSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAoZmlsdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChtYXNrICYgfihH
TF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVG
RkVSX0JJVCkpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzcmNYMSAtIHNyY1gwICE9
IGRzdFgxIC0gZHN0WDAgfHwgc3JjWTEgLSBzcmNZMCAhPSBkc3RZMSAtIGRzdFkwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBFUlIoIlNjYWxpbmcgYW5kIGZsaXBwaW5nIGluIEJsaXRGcmFtZWJ1
ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSA9PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZm
ZXJIYW5kbGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRzIHdp
dGggdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1
cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIpOwotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwg
ZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2spOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9F
UyhHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQqIHBpeGVscykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCAiCi0g
ICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXpl
aSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgIgotICAgICAgICAgICJHTGVudW0gZm9y
bWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCV4LCBjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4
JTAuOHApIiwKLSAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtQmlu
YXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtICpiaW5hcnlGb3Jt
YXQsIHZvaWQgKmJpbmFyeSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwg
YnVmU2l6ZSA9ICVzLCBsZW5ndGggPSAweCUwLjhwLCBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBi
aW5hcnkgPSAweCUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwgbGVuZ3RoLCBi
aW5hcnlGb3JtYXQsIGJpbmFyeSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgKmJpbmFyeUZvcm1hdCA9IEdMX1BST0dSQU1fQklO
QVJZX0FOR0xFOwotCi0gICAgICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICpsZW5ndGggPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUHJvZ3Jh
bUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0
aCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBwcm9ncmFtID0gMHglWCwgYmluYXJ5Rm9ybWF0ID0g
MHgleCwgYmluYXJ5ID0gMHglMC44cCwgbGVuZ3RoID0gJWQpIiwKLSAgICAgICAgICBwcm9ncmFt
LCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJpbmFyeUZvcm1h
dCAhPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0UHJvZ3JhbUJp
bmFyeShOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi1fX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBn
bEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQotewotICAgIHN0cnVjdCBFeHRl
bnNpb24KLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICAgICAgIF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgYWRkcmVzczsKLSAgICB9OwotCi0gICAg
c3RhdGljIGNvbnN0IEV4dGVuc2lvbiBnbEV4dGVuc2lvbnNbXSA9Ci0gICAgewotICAgICAgICB7
ImdsVGV4SW1hZ2UzRE9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWdsVGV4SW1hZ2UzRE9FU30sCi0gICAgICAgIHsiZ2xCbGl0RnJhbWVidWZmZXJBTkdMRSIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsQmxpdEZyYW1lYnVm
ZmVyQU5HTEV9LAotICAgICAgICB7ImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5H
TEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFfSwKLSAgICAgICAgeyJnbERlbGV0ZUZlbmNlc05W
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEZWxldGVGZW5j
ZXNOVn0sCi0gICAgICAgIHsiZ2xHZW5GZW5jZXNOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsR2VuRmVuY2VzTlZ9LAotICAgICAgICB7ImdsSXNGZW5jZU5W
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xJc0ZlbmNlTlZ9
LAotICAgICAgICB7ImdsVGVzdEZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbFRlc3RGZW5jZU5WfSwKLSAgICAgICAgeyJnbEdldEZlbmNlaXZOViIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0RmVuY2Vpdk5W
fSwKLSAgICAgICAgeyJnbEZpbmlzaEZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbEZpbmlzaEZlbmNlTlZ9LAotICAgICAgICB7ImdsU2V0RmVuY2VO
ViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsU2V0RmVuY2VO
Vn0sCi0gICAgICAgIHsiZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUiLCAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRX0sCi0gICAgICAgIHsiZ2xUZXhTdG9yYWdlMkRFWFQiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFRleFN0b3JhZ2UyREVYVH0sCi0gICAgICAg
IHsiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUfSwKLSAgICAgICAg
eyJnbFJlYWRuUGl4ZWxzRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUpZ2xSZWFkblBpeGVsc0VYVH0sCi0gICAgICAgIHsiZ2xHZXRuVW5pZm9ybWZ2RVhUIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRuVW5pZm9ybWZ2
RVhUfSwKLSAgICAgICAgeyJnbEdldG5Vbmlmb3JtaXZFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldG5Vbmlmb3JtaXZFWFR9LAotICAgICAgICB7Imds
R2VuUXVlcmllc0VYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsR2VuUXVlcmllc0VYVH0sCi0gICAgICAgIHsiZ2xEZWxldGVRdWVyaWVzRVhUIiwgKF9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEZWxldGVRdWVyaWVzRVhUfSwK
LSAgICAgICAgeyJnbElzUXVlcnlFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbElzUXVlcnlFWFR9LAotICAgICAgICB7ImdsQmVnaW5RdWVyeUVYVCIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsQmVnaW5RdWVyeUVYVH0s
Ci0gICAgICAgIHsiZ2xFbmRRdWVyeUVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlKWdsRW5kUXVlcnlFWFR9LAotICAgICAgICB7ImdsR2V0UXVlcnlpdkVYVCIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UXVlcnlpdkVY
VH0sCi0gICAgICAgIHsiZ2xHZXRRdWVyeU9iamVjdHVpdkVYVCIsIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0UXVlcnlPYmplY3R1aXZFWFR9LAotICAgICAg
ICB7ImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEV9LAotICAgICAgICB7
ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAotICAgICAgICB7Imds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKLSAgICAgICAgeyJn
bEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAotICAgICAgICB7ImdsUHJvZ3JhbUJpbmFy
eU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJvZ3Jh
bUJpbmFyeU9FU30sICAgIH07Ci0KLSAgICBmb3IgKGludCBleHQgPSAwOyBleHQgPCBzaXplb2Yo
Z2xFeHRlbnNpb25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKLSAgICB7Ci0gICAgICAg
IGlmIChzdHJjbXAocHJvY25hbWUsIGdsRXh0ZW5zaW9uc1tleHRdLm5hbWUpID09IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEV4dGVuc2lvbnNbZXh0XS5hZGRyZXNzOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIE5vbi1wdWJsaWMgZnVuY3Rpb25zIHVzZWQgYnkg
RUdMCi0KLWJvb2wgX19zdGRjYWxsIGdsQmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFj
ZSkKLXsKLSAgICBFVkVOVCgiKGVnbDo6U3VyZmFjZSogc3VyZmFjZSA9IDB4JTAuOHApIiwKLSAg
ICAgICAgICBzdXJmYWNlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZU9iamVjdCA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVj
dC0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVPYmplY3QtPmJpbmRUZXhJbWFn
ZShzdXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNzc2OWIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCisrKyAvZGV2L251
bGwKQEAgLTEsMTgwICswLDAgQEAKLUxJQlJBUlkgbGliR0xFU3YyCi1FWFBPUlRTCi0gICAgZ2xB
Y3RpdmVUZXh0dXJlICAgICAgICAgICAgICAgICBAMQotICAgIGdsQXR0YWNoU2hhZGVyICAgICAg
ICAgICAgICAgICAgQDIKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbiAgICAgICAgICAgIEAzCi0g
ICAgZ2xCaW5kQnVmZmVyICAgICAgICAgICAgICAgICAgICBANAotICAgIGdsQmluZEZyYW1lYnVm
ZmVyICAgICAgICAgICAgICAgQDUKLSAgICBnbEJpbmRSZW5kZXJidWZmZXIgICAgICAgICAgICAg
IEA2Ci0gICAgZ2xCaW5kVGV4dHVyZSAgICAgICAgICAgICAgICAgICBANwotICAgIGdsQmxlbmRD
b2xvciAgICAgICAgICAgICAgICAgICAgQDgKLSAgICBnbEJsZW5kRXF1YXRpb24gICAgICAgICAg
ICAgICAgIEA5Ci0gICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUgICAgICAgICBAMTAKLSAgICBn
bEJsZW5kRnVuYyAgICAgICAgICAgICAgICAgICAgIEAxMQotICAgIGdsQmxlbmRGdW5jU2VwYXJh
dGUgICAgICAgICAgICAgQDEyCi0gICAgZ2xCdWZmZXJEYXRhICAgICAgICAgICAgICAgICAgICBA
MTMKLSAgICBnbEJ1ZmZlclN1YkRhdGEgICAgICAgICAgICAgICAgIEAxNAotICAgIGdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyAgICAgICAgQDE1Ci0gICAgZ2xDbGVhciAgICAgICAgICAgICAgICAg
ICAgICAgICBAMTYKLSAgICBnbENsZWFyQ29sb3IgICAgICAgICAgICAgICAgICAgIEAxNwotICAg
IGdsQ2xlYXJEZXB0aGYgICAgICAgICAgICAgICAgICAgQDE4Ci0gICAgZ2xDbGVhclN0ZW5jaWwg
ICAgICAgICAgICAgICAgICBAMTkKLSAgICBnbENvbG9yTWFzayAgICAgICAgICAgICAgICAgICAg
IEAyMAotICAgIGdsQ29tcGlsZVNoYWRlciAgICAgICAgICAgICAgICAgQDIxCi0gICAgZ2xDb21w
cmVzc2VkVGV4SW1hZ2UyRCAgICAgICAgICBAMjIKLSAgICBnbENvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEICAgICAgIEAyMwotICAgIGdsQ29weVRleEltYWdlMkQgICAgICAgICAgICAgICAgQDI0Ci0g
ICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCAgICAgICAgICAgICBAMjUKLSAgICBnbENyZWF0ZVByb2dy
YW0gICAgICAgICAgICAgICAgIEAyNgotICAgIGdsQ3JlYXRlU2hhZGVyICAgICAgICAgICAgICAg
ICAgQDI3Ci0gICAgZ2xDdWxsRmFjZSAgICAgICAgICAgICAgICAgICAgICBAMjgKLSAgICBnbERl
bGV0ZUJ1ZmZlcnMgICAgICAgICAgICAgICAgIEAyOQotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJz
ICAgICAgICAgICAgQDMwCi0gICAgZ2xEZWxldGVQcm9ncmFtICAgICAgICAgICAgICAgICBAMzIK
LSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgICAgICAgICAgIEAzMwotICAgIGdsRGVsZXRlU2hh
ZGVyICAgICAgICAgICAgICAgICAgQDM0Ci0gICAgZ2xEZWxldGVUZXh0dXJlcyAgICAgICAgICAg
ICAgICBAMzEKLSAgICBnbERlcHRoRnVuYyAgICAgICAgICAgICAgICAgICAgIEAzNgotICAgIGds
RGVwdGhNYXNrICAgICAgICAgICAgICAgICAgICAgQDM3Ci0gICAgZ2xEZXB0aFJhbmdlZiAgICAg
ICAgICAgICAgICAgICBAMzgKLSAgICBnbERldGFjaFNoYWRlciAgICAgICAgICAgICAgICAgIEAz
NQotICAgIGdsRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICAgQDM5Ci0gICAgZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkgICAgICBANDAKLSAgICBnbERyYXdBcnJheXMgICAgICAgICAgICAg
ICAgICAgIEA0MQotICAgIGdsRHJhd0VsZW1lbnRzICAgICAgICAgICAgICAgICAgQDQyCi0gICAg
Z2xFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICBANDMKLSAgICBnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5ICAgICAgIEA0NAotICAgIGdsRmluaXNoICAgICAgICAgICAgICAgICAgICAgICAg
QDQ1Ci0gICAgZ2xGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICBANDYKLSAgICBnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyICAgICAgIEA0NwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQg
ICAgICAgICAgQDQ4Ci0gICAgZ2xGcm9udEZhY2UgICAgICAgICAgICAgICAgICAgICBANDkKLSAg
ICBnbEdlbkJ1ZmZlcnMgICAgICAgICAgICAgICAgICAgIEA1MAotICAgIGdsR2VuRnJhbWVidWZm
ZXJzICAgICAgICAgICAgICAgQDUyCi0gICAgZ2xHZW5SZW5kZXJidWZmZXJzICAgICAgICAgICAg
ICBANTMKLSAgICBnbEdlblRleHR1cmVzICAgICAgICAgICAgICAgICAgIEA1NAotICAgIGdsR2Vu
ZXJhdGVNaXBtYXAgICAgICAgICAgICAgICAgQDUxCi0gICAgZ2xHZXRBY3RpdmVBdHRyaWIgICAg
ICAgICAgICAgICBANTUKLSAgICBnbEdldEFjdGl2ZVVuaWZvcm0gICAgICAgICAgICAgIEA1Ngot
ICAgIGdsR2V0QXR0YWNoZWRTaGFkZXJzICAgICAgICAgICAgQDU3Ci0gICAgZ2xHZXRBdHRyaWJM
b2NhdGlvbiAgICAgICAgICAgICBANTgKLSAgICBnbEdldEJvb2xlYW52ICAgICAgICAgICAgICAg
ICAgIEA1OQotICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYgICAgICAgICAgQDYwCi0gICAgZ2xH
ZXRFcnJvciAgICAgICAgICAgICAgICAgICAgICBANjEKLSAgICBnbEdldEZsb2F0diAgICAgICAg
ICAgICAgICAgICAgIEA2MgotICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYgICBANjMKLSAgICBnbEdldEludGVnZXJ2ICAgICAgICAgICAgICAgICAgIEA2NAotICAgIGds
R2V0UHJvZ3JhbUluZm9Mb2cgICAgICAgICAgICAgQDY2Ci0gICAgZ2xHZXRQcm9ncmFtaXYgICAg
ICAgICAgICAgICAgICBANjUKLSAgICBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2ICAgIEA2
NwotICAgIGdsR2V0U2hhZGVySW5mb0xvZyAgICAgICAgICAgICAgQDY5Ci0gICAgZ2xHZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQgICAgICBANzAKLSAgICBnbEdldFNoYWRlclNvdXJjZSAgICAgICAg
ICAgICAgIEA3MQotICAgIGdsR2V0U2hhZGVyaXYgICAgICAgICAgICAgICAgICAgQDY4Ci0gICAg
Z2xHZXRTdHJpbmcgICAgICAgICAgICAgICAgICAgICBANzIKLSAgICBnbEdldFRleFBhcmFtZXRl
cmZ2ICAgICAgICAgICAgIEA3MwotICAgIGdsR2V0VGV4UGFyYW1ldGVyaXYgICAgICAgICAgICAg
QDc0Ci0gICAgZ2xHZXRVbmlmb3JtTG9jYXRpb24gICAgICAgICAgICBANzcKLSAgICBnbEdldFVu
aWZvcm1mdiAgICAgICAgICAgICAgICAgIEA3NQotICAgIGdsR2V0VW5pZm9ybWl2ICAgICAgICAg
ICAgICAgICAgQDc2Ci0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiAgICAgICBAODAKLSAg
ICBnbEdldFZlcnRleEF0dHJpYmZ2ICAgICAgICAgICAgIEA3OAotICAgIGdsR2V0VmVydGV4QXR0
cmliaXYgICAgICAgICAgICAgQDc5Ci0gICAgZ2xIaW50ICAgICAgICAgICAgICAgICAgICAgICAg
ICBAODEKLSAgICBnbElzQnVmZmVyICAgICAgICAgICAgICAgICAgICAgIEA4MgotICAgIGdsSXNF
bmFibGVkICAgICAgICAgICAgICAgICAgICAgQDgzCi0gICAgZ2xJc0ZyYW1lYnVmZmVyICAgICAg
ICAgICAgICAgICBAODQKLSAgICBnbElzUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgIEA4NQot
ICAgIGdsSXNSZW5kZXJidWZmZXIgICAgICAgICAgICAgICAgQDg2Ci0gICAgZ2xJc1NoYWRlciAg
ICAgICAgICAgICAgICAgICAgICBAODcKLSAgICBnbElzVGV4dHVyZSAgICAgICAgICAgICAgICAg
ICAgIEA4OAotICAgIGdsTGluZVdpZHRoICAgICAgICAgICAgICAgICAgICAgQDg5Ci0gICAgZ2xM
aW5rUHJvZ3JhbSAgICAgICAgICAgICAgICAgICBAOTAKLSAgICBnbFBpeGVsU3RvcmVpICAgICAg
ICAgICAgICAgICAgIEA5MQotICAgIGdsUG9seWdvbk9mZnNldCAgICAgICAgICAgICAgICAgQDky
Ci0gICAgZ2xSZWFkUGl4ZWxzICAgICAgICAgICAgICAgICAgICBAOTMKLSAgICBnbFJlbGVhc2VT
aGFkZXJDb21waWxlciAgICAgICAgIEA5NAotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAgICAg
ICAgICAgQDk1Ci0gICAgZ2xTYW1wbGVDb3ZlcmFnZSAgICAgICAgICAgICAgICBAOTYKLSAgICBn
bFNjaXNzb3IgICAgICAgICAgICAgICAgICAgICAgIEA5NwotICAgIGdsU2hhZGVyQmluYXJ5ICAg
ICAgICAgICAgICAgICAgQDk4Ci0gICAgZ2xTaGFkZXJTb3VyY2UgICAgICAgICAgICAgICAgICBA
OTkKLSAgICBnbFN0ZW5jaWxGdW5jICAgICAgICAgICAgICAgICAgIEAxMDAKLSAgICBnbFN0ZW5j
aWxGdW5jU2VwYXJhdGUgICAgICAgICAgIEAxMDEKLSAgICBnbFN0ZW5jaWxNYXNrICAgICAgICAg
ICAgICAgICAgIEAxMDIKLSAgICBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUgICAgICAgICAgIEAxMDMK
LSAgICBnbFN0ZW5jaWxPcCAgICAgICAgICAgICAgICAgICAgIEAxMDQKLSAgICBnbFN0ZW5jaWxP
cFNlcGFyYXRlICAgICAgICAgICAgIEAxMDUKLSAgICBnbFRleEltYWdlMkQgICAgICAgICAgICAg
ICAgICAgIEAxMDYKLSAgICBnbFRleFBhcmFtZXRlcmYgICAgICAgICAgICAgICAgIEAxMDcKLSAg
ICBnbFRleFBhcmFtZXRlcmZ2ICAgICAgICAgICAgICAgIEAxMDgKLSAgICBnbFRleFBhcmFtZXRl
cmkgICAgICAgICAgICAgICAgIEAxMDkKLSAgICBnbFRleFBhcmFtZXRlcml2ICAgICAgICAgICAg
ICAgIEAxMTAKLSAgICBnbFRleFN1YkltYWdlMkQgICAgICAgICAgICAgICAgIEAxMTEKLSAgICBn
bFVuaWZvcm0xZiAgICAgICAgICAgICAgICAgICAgIEAxMTIKLSAgICBnbFVuaWZvcm0xZnYgICAg
ICAgICAgICAgICAgICAgIEAxMTMKLSAgICBnbFVuaWZvcm0xaSAgICAgICAgICAgICAgICAgICAg
IEAxMTQKLSAgICBnbFVuaWZvcm0xaXYgICAgICAgICAgICAgICAgICAgIEAxMTUKLSAgICBnbFVu
aWZvcm0yZiAgICAgICAgICAgICAgICAgICAgIEAxMTYKLSAgICBnbFVuaWZvcm0yZnYgICAgICAg
ICAgICAgICAgICAgIEAxMTcKLSAgICBnbFVuaWZvcm0yaSAgICAgICAgICAgICAgICAgICAgIEAx
MTgKLSAgICBnbFVuaWZvcm0yaXYgICAgICAgICAgICAgICAgICAgIEAxMTkKLSAgICBnbFVuaWZv
cm0zZiAgICAgICAgICAgICAgICAgICAgIEAxMjAKLSAgICBnbFVuaWZvcm0zZnYgICAgICAgICAg
ICAgICAgICAgIEAxMjEKLSAgICBnbFVuaWZvcm0zaSAgICAgICAgICAgICAgICAgICAgIEAxMjIK
LSAgICBnbFVuaWZvcm0zaXYgICAgICAgICAgICAgICAgICAgIEAxMjMKLSAgICBnbFVuaWZvcm00
ZiAgICAgICAgICAgICAgICAgICAgIEAxMjQKLSAgICBnbFVuaWZvcm00ZnYgICAgICAgICAgICAg
ICAgICAgIEAxMjUKLSAgICBnbFVuaWZvcm00aSAgICAgICAgICAgICAgICAgICAgIEAxMjYKLSAg
ICBnbFVuaWZvcm00aXYgICAgICAgICAgICAgICAgICAgIEAxMjcKLSAgICBnbFVuaWZvcm1NYXRy
aXgyZnYgICAgICAgICAgICAgIEAxMjgKLSAgICBnbFVuaWZvcm1NYXRyaXgzZnYgICAgICAgICAg
ICAgIEAxMjkKLSAgICBnbFVuaWZvcm1NYXRyaXg0ZnYgICAgICAgICAgICAgIEAxMzAKLSAgICBn
bFVzZVByb2dyYW0gICAgICAgICAgICAgICAgICAgIEAxMzEKLSAgICBnbFZhbGlkYXRlUHJvZ3Jh
bSAgICAgICAgICAgICAgIEAxMzIKLSAgICBnbFZlcnRleEF0dHJpYjFmICAgICAgICAgICAgICAg
IEAxMzMKLSAgICBnbFZlcnRleEF0dHJpYjFmdiAgICAgICAgICAgICAgIEAxMzQKLSAgICBnbFZl
cnRleEF0dHJpYjJmICAgICAgICAgICAgICAgIEAxMzUKLSAgICBnbFZlcnRleEF0dHJpYjJmdiAg
ICAgICAgICAgICAgIEAxMzYKLSAgICBnbFZlcnRleEF0dHJpYjNmICAgICAgICAgICAgICAgIEAx
MzcKLSAgICBnbFZlcnRleEF0dHJpYjNmdiAgICAgICAgICAgICAgIEAxMzgKLSAgICBnbFZlcnRl
eEF0dHJpYjRmICAgICAgICAgICAgICAgIEAxMzkKLSAgICBnbFZlcnRleEF0dHJpYjRmdiAgICAg
ICAgICAgICAgIEAxNDAKLSAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIgICAgICAgICAgIEAxNDEK
LSAgICBnbFZpZXdwb3J0ICAgICAgICAgICAgICAgICAgICAgIEAxNDIKLQotICAgIDsgRXh0ZW5z
aW9ucwotICAgIGdsVGV4SW1hZ2UzRE9FUyAgICAgICAgICAgICAgICAgQDE0MwotICAgIGdsQmxp
dEZyYW1lYnVmZmVyQU5HTEUgICAgICAgICAgQDE0OQotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlQU5HTEUgQDE1MAotICAgIGdsRGVsZXRlRmVuY2VzTlYgICAgICAgICAgICAg
ICAgQDE1MQotICAgIGdsRmluaXNoRmVuY2VOViAgICAgICAgICAgICAgICAgQDE1MgotICAgIGds
R2VuRmVuY2VzTlYgICAgICAgICAgICAgICAgICAgQDE1MwotICAgIGdsR2V0RmVuY2Vpdk5WICAg
ICAgICAgICAgICAgICAgQDE1NAotICAgIGdsSXNGZW5jZU5WICAgICAgICAgICAgICAgICAgICAg
QDE1NQotICAgIGdsU2V0RmVuY2VOViAgICAgICAgICAgICAgICAgICAgQDE1NgotICAgIGdsVGVz
dEZlbmNlTlYgICAgICAgICAgICAgICAgICAgQDE1NwotICAgIGdsR2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFIEAxNTkKLSAgICBnbFRleFN0b3JhZ2UyREVYVCAgICAgICAgICAgICAgIEAx
NjAKLSAgICBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQgICAgIEAxNjEKLSAgICBnbFJlYWRu
UGl4ZWxzRVhUICAgICAgICAgICAgICAgIEAxNjIKLSAgICBnbEdldG5Vbmlmb3JtZnZFWFQgICAg
ICAgICAgICAgIEAxNjMKLSAgICBnbEdldG5Vbmlmb3JtaXZFWFQgICAgICAgICAgICAgIEAxNjQK
LSAgICBnbEdlblF1ZXJpZXNFWFQgICAgICAgICAgICAgICAgIEAxNjUKLSAgICBnbERlbGV0ZVF1
ZXJpZXNFWFQgICAgICAgICAgICAgIEAxNjYKLSAgICBnbElzUXVlcnlFWFQgICAgICAgICAgICAg
ICAgICAgIEAxNjcKLSAgICBnbEJlZ2luUXVlcnlFWFQgICAgICAgICAgICAgICAgIEAxNjgKLSAg
ICBnbEVuZFF1ZXJ5RVhUICAgICAgICAgICAgICAgICAgIEAxNjkKLSAgICBnbEdldFF1ZXJ5aXZF
WFQgICAgICAgICAgICAgICAgIEAxNzAKLSAgICBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUICAgICAg
ICAgIEAxNzEKLSAgICBnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSAgICAgIEAxNzIKLSAgICBn
bERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSAgICAgIEAxNzMKLSAgICBnbERyYXdFbGVtZW50c0lu
c3RhbmNlZEFOR0xFICAgIEAxNzQKLQotICAgIDsgRUdMIGRlcGVuZGVuY2llcwotICAgIGdsQ3Jl
YXRlQ29udGV4dCAgICAgICAgICAgICAgICAgQDE0NCBOT05BTUUKLSAgICBnbERlc3Ryb3lDb250
ZXh0ICAgICAgICAgICAgICAgIEAxNDUgTk9OQU1FCi0gICAgZ2xNYWtlQ3VycmVudCAgICAgICAg
ICAgICAgICAgICBAMTQ2IE5PTkFNRQotICAgIGdsR2V0Q3VycmVudENvbnRleHQgICAgICAgICAg
ICAgQDE0NyBOT05BTUUKLSAgICBnbEdldFByb2NBZGRyZXNzICAgICAgICAgICAgICAgIEAxNDgg
Tk9OQU1FCi0gICAgZ2xCaW5kVGV4SW1hZ2UgICAgICAgICAgICAgICAgICBAMTU4IE5PTkFNRQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIucmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5y
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkMjFlNC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYworKysgL2Rl
di9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0
ZWQgcmVzb3VyY2Ugc2NyaXB0LgotLy8KLSNpbmNsdWRlICJyZXNvdXJjZS5oIgotCi0jZGVmaW5l
IEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
R2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVzb3VyY2UuCi0vLwotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNpbmNsdWRlICIuLi9jb21tb24vdmVyc2lvbi5oIgotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKLQotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcwotCi0jaWYgIWRlZmluZWQo
QUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19FTlUpCi0jaWZkZWYgX1dJTjMy
Ci1MQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfRU5HTElTSF9VUwotI3ByYWdtYSBjb2Rl
X3BhZ2UoMTI1MikKLSNlbmRpZiAvL19XSU4zMgotCi0jaWZkZWYgQVBTVFVESU9fSU5WT0tFRAot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBURVhUSU5DTFVERQotLy8KLQotMSBURVhUSU5D
TFVERSAKLUJFR0lOCi0gICAgInJlc291cmNlLmhcMCIKLUVORAotCi0yIFRFWFRJTkNMVURFIAot
QkVHSU4KLSAgICAiI2luY2x1ZGUgIiJhZnhyZXMuaCIiXHJcbiIKLSAgICAiI2luY2x1ZGUgIiIu
Li9jb21tb24vdmVyc2lvbi5oIiJcMCIKLUVORAotCi0zIFRFWFRJTkNMVURFIAotQkVHSU4KLSAg
ICAiXHJcbiIKLSAgICAiXDAiCi1FTkQKLQotI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQK
LQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIFZlcnNpb24KLS8vCi0KLVZTX1ZFUlNJ
T05fSU5GTyBWRVJTSU9OSU5GTwotIEZJTEVWRVJTSU9OIE1BSk9SX1ZFUlNJT04sTUlOT1JfVkVS
U0lPTixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9OCi0gUFJPRFVDVFZFUlNJT04gTUFKT1Jf
VkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04KLSBGSUxF
RkxBR1NNQVNLIDB4MTdMCi0jaWZkZWYgX0RFQlVHCi0gRklMRUZMQUdTIDB4MUwKLSNlbHNlCi0g
RklMRUZMQUdTIDB4MEwKLSNlbmRpZgotIEZJTEVPUyAweDRMCi0gRklMRVRZUEUgMHgyTAotIEZJ
TEVTVUJUWVBFIDB4MEwKLUJFR0lOCi0gICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgotICAgIEJF
R0lOCi0gICAgICAgIEJMT0NLICIwNDA5MDRiMCIKLSAgICAgICAgQkVHSU4KLSAgICAgICAgICAg
IFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUgbGliR0xFU3YyIER5bmFtaWMgTGluayBM
aWJyYXJ5IgotICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcK
LSAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliR0xFU3YyIgotICAgICAgICAg
ICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiIKLSAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYkdMRVN2Mi5kbGwi
Ci0gICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgVkVSU0lPTl9TVFJJTkcKLSAgICAg
ICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5r
IExpYnJhcnkiCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBWRVJTSU9OX1NU
UklORwotICAgICAgICBFTkQKLSAgICBFTkQKLSAgICBCTE9DSyAiVmFyRmlsZUluZm8iCi0gICAg
QkVHSU4KLSAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAKLSAgICBFTkQK
LUVORAotCi0jZW5kaWYgICAgLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi0KLQotI2lmbmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8KLS8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAzIHJlc291cmNl
LgotLy8KLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJ
T19JTlZPS0VECmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5N2Q0
ZTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9s
aWJHTEVTdjIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTYxICswLDAgQEAKLTw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgotPFZpc3VhbFN0dWRpb1Byb2pl
Y3QKLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKLQlWZXJzaW9uPSI5LjAwIgotCU5hbWU9Imxp
YkdMRVN2MiIKLQlQcm9qZWN0R1VJRD0ie0I1ODcxQTdBLTk2OEMtNDJFMy1BMzNCLTk4MUU2RjQ0
OEU3OH0iCi0JUm9vdE5hbWVzcGFjZT0ibGliR0xFU3YyIgotCUtleXdvcmQ9IldpbjMyUHJvaiIK
LQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiCi0JPgotCTxQbGF0Zm9ybXM+Ci0JCTxQ
bGF0Zm9ybQotCQkJTmFtZT0iV2luMzIiCi0JCS8+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0ieDY0
IgotCQkvPgotCTwvUGxhdGZvcm1zPgotCTxUb29sRmlsZXM+Ci0JPC9Ub29sRmlsZXM+Ci0JPENv
bmZpZ3VyYXRpb25zPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iRGVidWd8V2luMzIiCi0J
CQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCi0J
CQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmln
dXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdl
bmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94
eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6
YXRpb249IjAiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGly
KS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3NvckRlZmlu
aXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztf
Q1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVgiCi0JCQkJTWluaW1hbFJlYnVpbGQ9InRy
dWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgot
CQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUx
Mjs0NzAyIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJ
RGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgi
Ci0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgRDNkeDkubGliIGQzZGNvbXBp
bGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZp
bGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgot
CQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0
YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RC
dWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2Rp
ciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90
OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5kbGwmcXVvdDsgJnF1
b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gw
RDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIubGliJnF1b3Q7ICZxdW90OyQo
UHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4
MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8
Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9y
eT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURp
cmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIK
LQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJ
CT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0i
MiIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAk
KFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9
IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VD
VVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVMaWJy
YXJ5PSIwIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0i
NCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0
OzQyNDU7NDUxMjs0NzAyOzQ3MTgiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1z
PSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCVdhcm5Bc0Vycm9y
PSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21w
aWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRp
b25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBEM2R4
OS5saWIgZDNkY29tcGlsZXIubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlJZ25v
cmVBbGxEZWZhdWx0TGlicmFyaWVzPSJmYWxzZSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0i
bGliR0xFU3YyLmRlZiIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJ
U3ViU3lzdGVtPSIyIgotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiIKLQkJCQlFbmFibGVDT01E
QVRGb2xkaW5nPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhl
Y3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxk
RXZlbnRUb29sIgotCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDsk
KFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYj
eDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtA
ZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25m
aWd1cmF0aW9uCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29s
dXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJt
ZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0J
CQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNY
TUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2Vy
dmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlE
TFRvb2wiCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlv
bmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4u
Ly4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztf
V0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FU
RTtOT01JTk1BWCIKLQkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVD
aGVja3M9IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFk
ZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdz
PSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxOCIKLQkJCQlEZXRl
Y3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25G
b3JtYXQ9IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtl
clRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxE
ZXBlbmRlbmNpZXM9ImQzZDkubGliIEQzZHg5LmxpYiBkM2Rjb21waWxlci5saWIiCi0JCQkJTGlu
a0luY3JlbWVudGFsPSIyIgotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVm
IgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIi
Ci0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50
aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjE3IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVy
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgot
CQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVj
dERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29w
eSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4u
XGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gw
RDsmI3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0J
CQlOYW1lPSJSZWxlYXNlfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikk
KFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJl
Y3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3Vy
YXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9ncmFtT3B0aW1p
emF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1p
emF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIgotCQkJCUFkZGl0aW9u
YWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4v
Li4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19X
SU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRF
O05PTUlOTUFYO19TRUNVUkVfU0NMPTAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJVXNl
UHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVT
cGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7
NDcxOCIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURl
YnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgot
CQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIEQzZHg5LmxpYiBkM2Rjb21waWxl
ci5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIgotCQkJCUlnbm9yZUFsbERlZmF1bHRMaWJy
YXJpZXM9ImZhbHNlIgotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIgot
CQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0J
CQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0J
CQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9u
PSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjE3IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJ
CUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERp
cikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAm
cXVvdDskKE91dERpcilcbGliR0xFU3YyLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5c
Li5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7
JChPdXREaXIpXGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsm
I3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JPC9Db25maWd1cmF0aW9ucz4KLQk8
UmVmZXJlbmNlcz4KLQk8L1JlZmVyZW5jZXM+Ci0JPEZpbGVzPgotCQk8RmlsdGVyCi0JCQlOYW1l
PSJTb3VyY2UgRmlsZXMiCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7
YmF0O2FzbTthc214IgotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1B
MDY2LTJBMzJENzUyQTJGRn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxC
bGl0LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
LlxCdWZmZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXENvbnRleHQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxjb21tb25cZGVidWcuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEZlbmNlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5jcHAiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cSGFuZGxlQWxsb2NhdG9yLmNw
cCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxJbmRl
eERhdGFNYW5hZ2VyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLlxsaWJHTEVTdjIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW1CaW5hcnkuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFF1ZXJ5LmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXFJlZkNv
dW50T2JqZWN0LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxSZW5kZXJidWZmZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXFJlc291cmNlTWFuYWdlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmNwcCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxUZXh0dXJlLmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlx1dGlsaXRpZXMuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFZlcnRl
eERhdGFNYW5hZ2VyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCTwvRmlsdGVyPgotCQk8Rmls
dGVyCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiCi0JCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7
aW5jO3hzZCIKLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02
MjVGQkU1MkVCRkJ9IgotCQkJPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQmxpdC5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJ1ZmZl
ci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXENv
bnRleHQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
LlxGZW5jZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXEZyYW1lYnVmZmVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcR0xFUzJcZ2wyZXh0Lmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGlu
Y2x1ZGVcR0xFUzJcZ2wycGxhdGZvcm0uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLlxIYW5kbGVBbGxvY2F0b3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxJbmRleERhdGFNYW5hZ2VyLmgiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1hdGh1dGlsLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3Jh
bS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFBy
b2dyYW1CaW5hcnkuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxRdWVyeS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxjb21tb25cUmVmQ291bnRPYmplY3QuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxyZXNvdXJjZS5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlc291cmNlTWFuYWdl
ci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFNo
YWRlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XFRleHR1cmUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlx1dGlsaXRpZXMuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cY29tbW9uXHZlcnNpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlx2ZXJ0ZXhjb252ZXJzaW9uLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVmVydGV4RGF0YU1hbmFnZXIuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCTwvRmlsdGVyPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRo
PSIuXGxpYkdMRVN2Mi5kZWYiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKLQkJCVJlbGF0aXZl
UGF0aD0iLlxsaWJHTEVTdjIucmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQk8L0ZpbGVzPgotCTxHbG9i
YWxzPgotCTwvR2xvYmFscz4KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxNTRkMjc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBhbmQgbWFu
YWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCi0jaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi1zdGF0aWMgRFdPUkQgY3VycmVudFRMUyA9IFRMU19PVVRf
T0ZfSU5ERVhFUzsKLQotQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERX
T1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQotewotICAgIHN3aXRjaCAocmVhc29uKQotICAg
IHsKLSAgICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBjdXJyZW50VExTID0gVGxzQWxsb2MoKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnRUTFMg
PT0gVExTX09VVF9PRl9JTkRFWEVTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBGQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsIHRo
cm91Z2h0IHRvIGluaXRpYWxpemUgaW5kZXgKLSAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpDdXJyZW50ICpjdXJyZW50ID0gKGdsOjpDdXJy
ZW50KilMb2NhbEFsbG9jKExQVFIsIHNpemVvZihnbDo6Q3VycmVudCkpOwotCi0gICAgICAgICAg
ICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUbHNTZXRWYWx1
ZShjdXJyZW50VExTLCBjdXJyZW50KTsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmNvbnRl
eHQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBOVUxMOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBETExfVEhS
RUFEX0RFVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dl
dFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRExMX1BST0NF
U1NfREVUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBUbHNGcmVlKGN1cnJlbnRUTFMpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotdm9pZCBtYWtlQ3VycmVudChD
b250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgY3VycmVu
dC0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0KLSAgICBpZiAoY29udGV4dCAmJiBkaXNwbGF5ICYmIHN1
cmZhY2UpCi0gICAgewotICAgICAgICBjb250ZXh0LT5tYWtlQ3VycmVudChkaXNwbGF5LCBzdXJm
YWNlKTsKLSAgICB9Ci19Ci0KLUNvbnRleHQgKmdldENvbnRleHQoKQotewotICAgIEN1cnJlbnQg
KmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1
cm4gY3VycmVudC0+Y29udGV4dDsKLX0KLQotQ29udGV4dCAqZ2V0Tm9uTG9zdENvbnRleHQoKQot
ewotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgCi0gICAgaWYgKGNv
bnRleHQpCi0gICAgewotICAgICAgICBpZiAoY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAg
IHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7
Ci19Ci0KLWVnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpCi17Ci0gICAgQ3VycmVudCAqY3VycmVu
dCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJy
ZW50LT5kaXNwbGF5OwotfQotCi1JRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKQotewotICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKLQotICAgIHJldHVybiBkaXNw
bGF5LT5nZXREZXZpY2UoKTsKLX0KLQotYm9vbCBjaGVja0RldmljZUxvc3QoSFJFU1VMVCBlcnJv
ckNvZGUpCi17Ci0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gTlVMTDsKLQotICAgIGlmIChp
c0RldmljZUxvc3RFcnJvcihlcnJvckNvZGUpKQotICAgIHsKLSAgICAgICAgZGlzcGxheSA9IGds
OjpnZXREaXNwbGF5KCk7Ci0gICAgICAgIGRpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLX0KLQotLy8g
UmVjb3JkcyBhbiBlcnJvciBjb2RlCi12b2lkIGVycm9yKEdMZW51bSBlcnJvckNvZGUpCi17Ci0g
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0KLSAgICBp
ZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3JDb2RlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9JTlZBTElEX0VOVU06Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvcmRJbnZhbGlkRW51bSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0
ZWQ6IGludmFsaWQgZW51bVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0lOVkFMSURfVkFMVUU6Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkVmFs
dWUoKTsKLSAgICAgICAgICAgIFRSQUNFKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIHZh
bHVlXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9P
UEVSQVRJT046Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCk7
Ci0gICAgICAgICAgICBUUkFDRSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBvcGVyYXRp
b25cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9PVVRfT0ZfTUVN
T1JZOgotICAgICAgICAgICAgY29udGV4dC0+cmVjb3JkT3V0T2ZNZW1vcnkoKTsKLSAgICAgICAg
ICAgIFRSQUNFKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBvdXQgb2YgbWVtb3J5XG4iKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT046Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVy
YXRpb24oKTsKLSAgICAgICAgICAgIFRSQUNFKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlk
IGZyYW1lYnVmZmVyIG9wZXJhdGlvblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTA0ODQ4YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL21haW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIG1haW4uaDogTWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwg
ZGF0YS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfTUFJTl9IXwotI2RlZmluZSBMSUJHTEVTVjJfTUFJ
Tl9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNs
dWRlIDxHTEVTMi9nbDJleHQuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1
ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgot
Ci1uYW1lc3BhY2UgZ2wKLXsKLXN0cnVjdCBDdXJyZW50Ci17Ci0gICAgQ29udGV4dCAqY29udGV4
dDsKLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXk7Ci19OwotCi12b2lkIG1ha2VDdXJyZW50KENv
bnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJm
YWNlKTsKLQotQ29udGV4dCAqZ2V0Q29udGV4dCgpOwotQ29udGV4dCAqZ2V0Tm9uTG9zdENvbnRl
eHQoKTsKLWVnbDo6RGlzcGxheSAqZ2V0RGlzcGxheSgpOwotCi1JRGlyZWN0M0REZXZpY2U5ICpn
ZXREZXZpY2UoKTsKLQotYm9vbCBjaGVja0RldmljZUxvc3QoSFJFU1VMVCBlcnJvckNvZGUpOwot
fQotCi12b2lkIGVycm9yKEdMZW51bSBlcnJvckNvZGUpOwotCi10ZW1wbGF0ZTxjbGFzcyBUPgot
Y29uc3QgVCAmZXJyb3IoR0xlbnVtIGVycm9yQ29kZSwgY29uc3QgVCAmcmV0dXJuVmFsdWUpCi17
Ci0gICAgZXJyb3IoZXJyb3JDb2RlKTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQot
I2VuZGlmICAgLy8gTElCR0xFU1YyX01BSU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggN2JiMjI1MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL21hdGh1dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBtYXRodXRpbC5oOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9uIGZ1
bmN0aW9ucy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KLSNkZWZpbmUgTElCR0xF
U1YyX01BVEhVVElMX0hfCi0KLSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNpbmNsdWRlIDxtYXRoLmg+
Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgZ2wKLXsKLWlubGluZSBib29sIGlz
UG93MihpbnQgeCkKLXsKLSAgICByZXR1cm4gKHggJiAoeCAtIDEpKSA9PSAwICYmICh4ICE9IDAp
OwotfQotCi1pbmxpbmUgaW50IGxvZzIoaW50IHgpCi17Ci0gICAgaW50IHIgPSAwOwotICAgIHdo
aWxlICgoeCA+PiByKSA+IDEpIHIrKzsKLSAgICByZXR1cm4gcjsKLX0KLQotaW5saW5lIHVuc2ln
bmVkIGludCBjZWlsUG93Mih1bnNpZ25lZCBpbnQgeCkKLXsKLSAgICBpZiAoeCAhPSAwKSB4LS07
Ci0gICAgeCB8PSB4ID4+IDE7Ci0gICAgeCB8PSB4ID4+IDI7Ci0gICAgeCB8PSB4ID4+IDQ7Ci0g
ICAgeCB8PSB4ID4+IDg7Ci0gICAgeCB8PSB4ID4+IDE2OwotICAgIHgrKzsKLQotICAgIHJldHVy
biB4OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNSU4sIHR5cGVuYW1lIE1B
WD4KLWlubGluZSBUIGNsYW1wKFQgeCwgTUlOIG1pbiwgTUFYIG1heCkKLXsKLSAgICByZXR1cm4g
eCA8IG1pbiA/IG1pbiA6ICh4ID4gbWF4ID8gbWF4IDogeCk7Ci19Ci0KLWlubGluZSBmbG9hdCBj
bGFtcDAxKGZsb2F0IHgpCi17Ci0gICAgcmV0dXJuIGNsYW1wKHgsIDAuMGYsIDEuMGYpOwotfQot
Ci10ZW1wbGF0ZTxjb25zdCBpbnQgbj4KLWlubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQg
eCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4ID0gMHhGRkZGRkZGRiA+PiAoMzIgLSBu
KTsKLQotICAgIGlmICh4ID4gMSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtYXg7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHggPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KShtYXggKiB4ICsgMC41
Zik7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQotewotICAgIHN0YXRp
YyBib29sIGNoZWNrZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0cyA9IGZhbHNl
OwotCi0gICAgaWYgKGNoZWNrZWQpCi0gICAgewotICAgICAgICByZXR1cm4gc3VwcG9ydHM7Ci0g
ICAgfQotCi0gICAgaW50IGluZm9bNF07Ci0gICAgX19jcHVpZChpbmZvLCAwKTsKLSAgICAKLSAg
ICBpZiAoaW5mb1swXSA+PSAxKQotICAgIHsKLSAgICAgICAgX19jcHVpZChpbmZvLCAxKTsKLQot
ICAgICAgICBzdXBwb3J0cyA9IChpbmZvWzNdID4+IDI2KSAmIDE7Ci0gICAgfQotCi0gICAgY2hl
Y2tlZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gc3VwcG9ydHM7Ci19Ci19Ci0KLSNlbmRpZiAgIC8v
IExJQkdMRVNWMl9NQVRIVVRJTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZXNvdXJjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZXNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWFk
YWFkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVzb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8ve3tOT19ERVBFTkRF
TkNJRVN9fQotLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJhdGVkIGluY2x1ZGUgZmlsZS4K
LS8vIFVzZWQgYnkgbGliR0xFU3YyLnJjCi0KLS8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5l
dyBvYmplY3RzCi0vLyAKLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0jaWZuZGVmIEFQU1RVRElP
X1JFQURPTkxZX1NZTUJPTFMKLSNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNFX1ZBTFVFICAgICAg
ICAxMDEKLSNkZWZpbmUgX0FQU19ORVhUX0NPTU1BTkRfVkFMVUUgICAgICAgICA0MDAwMQotI2Rl
ZmluZSBfQVBTX05FWFRfQ09OVFJPTF9WQUxVRSAgICAgICAgIDEwMDEKLSNkZWZpbmUgX0FQU19O
RVhUX1NZTUVEX1ZBTFVFICAgICAgICAgICAxMDEKLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YzYyZDkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTAzNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyB1dGlsaXRpZXMuY3Bw
OiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLS8vIFRoaXMgaXMgaG93IG11
Y2ggZGF0YSB0aGUgYXBwbGljYXRpb24gZXhwZWN0cyBmb3IgYSB1bmlmb3JtCi1pbnQgVW5pZm9y
bUV4dGVybmFsQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICBjYXNlIEdMX0lOVDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAgIGNhc2UgR0xf
U0FNUExFUl9DVUJFOgotICAgICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBHTF9CT09MX1ZF
QzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMyOgot
ICAgICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgotICAgICAgICAgIHJldHVy
biAzOwotICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6
Ci0gICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAg
ICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICAgIHJl
dHVybiA5OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICAgIHJldHVybiAxNjsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotLy8gVGhpcyBpcyBob3cgbXVjaCBkYXRhIHdlIGFjdHVhbGx5IHN0b3Jl
IGZvciBhIHVuaWZvcm0KLWludCBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudChHTGVudW0g
dHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CT09MOgot
ICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICBjYXNl
IEdMX1NBTVBMRVJfQ1VCRToKLSAgICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfQk9P
TF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgICAgICByZXR1cm4gMjsKLSAg
ICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgICAg
ICByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDNDoK
LSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0gICAg
ICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgcmV0
dXJuIDg7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgcmV0dXJuIDEyOwot
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICAgIHJldHVybiAxNjsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotR0xlbnVtIFVuaWZvcm1Db21wb25lbnRUeXBlKEdMZW51bSB0eXBlKQotewotICAgIHN3
aXRjaCh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfQk9P
TF9WRUMyOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVD
NDoKLSAgICAgICAgICByZXR1cm4gR0xfQk9PTDsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgICAgcmV0
dXJuIEdMX0ZMT0FUOwotICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVJf
MkQ6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6
Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMzOgotICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKLSAgICAg
ICAgICByZXR1cm4gR0xfSU5UOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9OT05FOwotfQotCi1zaXplX3QgVW5pZm9ybUNv
bXBvbmVudFNpemUoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoKHR5cGUpCi0gICAgewotICAg
ICAgY2FzZSBHTF9CT09MOiAgcmV0dXJuIHNpemVvZihHTGludCk7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUOiByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgY2FzZSBHTF9JTlQ6ICAgcmV0dXJu
IHNpemVvZihHTGludCk7Ci0gICAgICBkZWZhdWx0OiAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zaXplX3QgVW5pZm9ybUludGVybmFsU2l6ZShHTGVu
dW0gdHlwZSkKLXsKLSAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNpemUoVW5pZm9ybUNvbXBv
bmVudFR5cGUodHlwZSkpICogVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodHlwZSk7Ci19
Ci0KLXNpemVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKQotewotICAgIHJldHVy
biBVbmlmb3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlm
b3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0eXBlKTsKLX0KLQotaW50IFZhcmlhYmxlUm93Q291
bnQoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfTk9ORToKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVD
MjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0g
ICAgICBjYXNlIEdMX0lOVF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0gICAgICAgIHJldHVybiAx
OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICByZXR1cm4gMjsKLSAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFZhcmlhYmxlQ29sdW1u
Q291bnQoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfTk9ORToKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBjYXNlIEdMX0JPT0w6Ci0gICAg
ICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgIHJldHVybiAxOwot
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAg
ICBjYXNlIEdMX0lOVF9WRUMyOgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICBy
ZXR1cm4gMjsKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoK
LSAgICAgICAgcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IEFsbG9jYXRlRmly
c3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9uU2l6
ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKQotewotICAgIEFTU0VSVChhbGxvY2F0aW9uU2l6ZSA8
PSBiaXRzU2l6ZSk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbWFzayA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgPj4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
aW50Pjo6ZGlnaXRzIC0gYWxsb2NhdGlvblNpemUpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBiaXRzU2l6ZSAtIGFsbG9jYXRpb25TaXplICsgMTsgaSsrKQotICAgIHsKLSAg
ICAgICAgaWYgKCgqYml0cyAmIG1hc2spID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgICpi
aXRzIHw9IG1hc2s7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1hc2sgPDw9IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1HTHNpemVpIENvbXB1
dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
YWxpZ25tZW50KQotewotICAgIEFTU0VSVChhbGlnbm1lbnQgPiAwICYmIGlzUG93MihhbGlnbm1l
bnQpKTsKLQotICAgIEdMc2l6ZWkgcmF3UGl0Y2ggPSBDb21wdXRlUGl4ZWxTaXplKGZvcm1hdCwg
dHlwZSkgKiB3aWR0aDsKLSAgICByZXR1cm4gKHJhd1BpdGNoICsgYWxpZ25tZW50IC0gMSkgJiB+
KGFsaWdubWVudCAtIDEpOwotfQotCi1HTHNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0Y2goR0xz
aXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCkKLXsKLSAgICByZXR1cm4gQ29tcHV0ZUNvbXByZXNz
ZWRTaXplKHdpZHRoLCAxLCBmb3JtYXQpOwotfQotCi1HTHNpemVpIENvbXB1dGVDb21wcmVzc2Vk
U2l6ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgotICAgICAgICByZXR1cm4gOCAqIChHTHNpemVpKWNlaWwoKGZsb2F0KXdpZHRoIC8gNC4wZikg
KiAoR0xzaXplaSljZWlsKChmbG9hdCloZWlnaHQgLyA0LjBmKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgIHJldHVybiAxNiAq
IChHTHNpemVpKWNlaWwoKGZsb2F0KXdpZHRoIC8gNC4wZikgKiAoR0xzaXplaSljZWlsKChmbG9h
dCloZWlnaHQgLyA0LjBmKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotfQotCi1ib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KQotewotICAgIGlmKGZv
cm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8Ci0gICAgICAgZm9ybWF0
ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIHx8Ci0gICAgICAgZm9ybWF0ID09
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUgfHwKLSAgICAgICBmb3JtYXQgPT0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCi1ib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpCi17Ci0gICAgaWYg
KGZvcm1hdCA9PSBHTF9ERVBUSF9DT01QT05FTlQgfHwKLSAgICAgICAgZm9ybWF0ID09IEdMX0RF
UFRIX1NURU5DSUxfT0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2Yg
YSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKLWludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWdu
ZWQgY2hhcik7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAgIHJldHVybiBzaXpl
b2YodW5zaWduZWQgY2hhcik7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6IHJl
dHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAyOwotICAgICAgICAgIGNhc2UgR0xfUkdCOiAg
ICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogMzsKLSAgICAgICAgICBj
YXNlIEdMX1JHQkE6ICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDQ7
Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAgIHJldHVybiBzaXplb2YodW5zaWdu
ZWQgY2hhcikgKiA0OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6ICAgICAg
ICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTog
ICAgICAgcmV0dXJuIHNpemVvZihmbG9hdCk7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6IHJldHVybiBzaXplb2YoZmxvYXQpICogMjsKLSAgICAgICAgICBjYXNlIEdMX1JHQjog
ICAgICAgICAgICAgcmV0dXJuIHNpemVvZihmbG9hdCkgKiAzOwotICAgICAgICAgIGNhc2UgR0xf
UkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KSAqIDQ7Ci0gICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTog
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiAyOwotICAgICAgICAgIGNhc2UgR0xfUkdC
OiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDM7Ci0gICAgICAg
ICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQp
ICogNDsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQp
Ci17Ci0gICAgcmV0dXJuICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICYmIHRhcmdldCA8PSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOwotfQotCi1ib29s
IElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgcmV0dXJuIHRh
cmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsK
LX0KLQotR0xlbnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0I1NjU6ICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOwotICAgICAgY2FzZSBHTF9SR0JB
NDogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2Ug
R0xfUkdCNV9BMTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE7Ci0gICAg
ICBjYXNlIEdMX1JHQjhfT0VTOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I7
Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9SR0JBOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6ICAgICAgICAgICBy
ZXR1cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDog
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOwotICAgICAgY2FzZSBHTF9BTFBI
QThfRVhUOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQUxQSEE7Ci0gICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAgIHJldHVybiBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDogICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6IHJldHVybiBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOiByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRTsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6ICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX1JHQkE7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6ICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9SR0I7Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9BTFBIQTsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VY
VDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRTsKLSAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBMzJGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsK
LSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X1JHQkE7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9SR0I7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDogICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9BTFBIQTsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDogICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRTsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRV9BTFBIQTsKLSAgICAg
IGNhc2UgR0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JHUkFf
RVhUOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjogICAgICAgICAgICAgICByZXR1
cm4gR0xfREVQVEhfQ09NUE9ORU5UOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVM6ICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UOwotICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfU1RFTkNJTF9P
RVM7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9OT05FOyAgIC8vIFVuc3VwcG9ydGVkCi0gICAgfQotfQotCi1HTGVudW0gRXh0cmFjdFR5
cGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
Ci0gICAgewotICAgICAgY2FzZSBHTF9SR0I1NjU6ICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfVU5TSUdORURfU0hPUlRfNV82XzU7Ci0gICAgICBjYXNlIEdMX1JHQkE0OiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80Owot
ICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
VU5TSUdORURfU0hPUlRfNV81XzVfMTsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX1JH
QkE4X09FUzogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6ICAgICAgICAgICByZXR1cm4gR0xf
VU5TSUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6ICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOiAgICByZXR1cm4gR0xfVU5TSUdORURf
QllURTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6ICAgcmV0
dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEU6IHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOiByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAg
ICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZM
T0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDogICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDogICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEEzMkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHQkEx
NkZfRVhUOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKLSAg
ICAgIGNhc2UgR0xfUkdCMTZGX0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0hB
TEZfRkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2
Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDogICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxP
QVRfT0VTOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUOwotICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVM6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOwot
ICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogICAgICAgICAgICByZXR1cm4gR0xf
VU5TSUdORURfSU5UXzI0XzhfT0VTOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1cHBvcnRlZAotICAgIH0KLX0K
LQotYm9vbCBJc0NvbG9yUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAg
c3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAg
ICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdM
X1JHQjhfT0VTOgotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9JTkRFWDg6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElzRGVwdGhSZW5kZXJhYmxlKEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9JTkRFWDg6Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0Ex
OgotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAg
Y2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgSXNTdGVuY2lsUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0g
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
SU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTklNUExFTUVOVEVEKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0KLW5hbWVzcGFjZSBlczJkeAot
ewotCi1EM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKQotewot
ICAgIEQzRENNUEZVTkMgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7Ci0gICAgc3dpdGNoIChjb21w
YXJpc29uKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQzZENvbXAgPSBEM0RDTVBf
TkVWRVI7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxXQVlTOiAgIGQzZENvbXAgPSBE
M0RDTVBfQUxXQVlTOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVTUzogICAgIGQzZENv
bXAgPSBEM0RDTVBfTEVTUzsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVRVUFMOiAg
IGQzZENvbXAgPSBEM0RDTVBfTEVTU0VRVUFMOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRVFV
QUw6ICAgIGQzZENvbXAgPSBEM0RDTVBfRVFVQUw7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfR1JFQVRFUjogIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUjsgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfR0VRVUFMOiAgIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUkVRVUFMOyBicmVhazsK
LSAgICAgIGNhc2UgR0xfTk9URVFVQUw6IGQzZENvbXAgPSBEM0RDTVBfTk9URVFVQUw7ICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGQzZENvbXA7Ci19Ci0KLUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpCi17
Ci0gICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGNvbG9yLnJlZCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmdyZWVuKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYmx1ZSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmFscGhhKSk7Ci19Ci0KLUQzREJMRU5EIENv
bnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKQotewotICAgIEQzREJMRU5EIGQzZEJsZW5kID0g
RDNEQkxFTkRfWkVSTzsKLQotICAgIHN3aXRjaCAoYmxlbmQpCi0gICAgewotICAgICAgY2FzZSBH
TF9aRVJPOiAgICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfWkVSTzsgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAgICAgIGQz
ZEJsZW5kID0gRDNEQkxFTkRfT05FOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9T
UkNfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQ09MT1I7ICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOiAgICAgIGQzZEJs
ZW5kID0gRDNEQkxFTkRfSU5WU1JDQ09MT1I7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9EU1Rf
Q09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVENPTE9SOyAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAgICAgIGQzZEJsZW5k
ID0gRDNEQkxFTkRfSU5WREVTVENPTE9SOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TUkNfQUxQ
SEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEE7ICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJsZW5kID0g
RDNEQkxFTkRfSU5WU1JDQUxQSEE7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6
ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVEFMUEhBOyAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOiAgICAgIGQzZEJsZW5kID0gRDNE
QkxFTkRfSU5WREVTVEFMUEhBOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xP
UjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0gRDNEQkxF
TkRfSU5WQkxFTkRGQUNUT1I7IGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQTog
ICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQzZEJsZW5kID0gRDNEQkxFTkRf
SU5WQkxFTkRGQUNUT1I7IGJyZWFrOwotICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6
ICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEFTQVQ7ICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQmxlbmQ7Ci19
Ci0KLUQzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApCi17Ci0gICAgRDNE
QkxFTkRPUCBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7Ci0KLSAgICBzd2l0Y2ggKGJsZW5k
T3ApCi0gICAgewotICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5k
T3AgPSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19T
VUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQz
REJMRU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQmxlbmRPcDsKLX0KLQotRDNEU1RFTkNJTE9QIENv
bnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKLXsKLSAgICBEM0RTVEVOQ0lMT1AgZDNk
U3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7Ci0KLSAgICBzd2l0Y2ggKHN0ZW5jaWxPcCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJ
TE9QX1pFUk87ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9LRUVQOiAgICAgIGQzZFN0ZW5jaWxP
cCA9IEQzRFNURU5DSUxPUF9LRUVQOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVQTEFDRTog
ICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfUkVQTEFDRTsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0lOQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1JTQVQ7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9ERUNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9E
RUNSU0FUOyBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5WRVJUOiAgICBkM2RTdGVuY2lsT3AgPSBE
M0RTVEVOQ0lMT1BfSU5WRVJUOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lOQ1JfV1JBUDogZDNk
U3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1I7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9E
RUNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9ERUNSOyAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZFN0ZW5j
aWxPcDsKLX0KLQotRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3
cmFwKQotewotICAgIEQzRFRFWFRVUkVBRERSRVNTIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQ
OwotCi0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFUOiAgICAg
ICAgICAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQOyAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9DTEFNUF9UT19FREdFOiAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX0NMQU1QOyAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogICBkM2RXcmFwID0gRDNEVEFERFJFU1Nf
TUlSUk9SOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGQzZFdyYXA7Ci19Ci0KLUQzRENVTEwgQ29udmVydEN1bGxNb2RlKEdMZW51bSBj
dWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSkKLXsKLSAgICBEM0RDVUxMIGN1bGwgPSBEM0RDVUxM
X0NDVzsKLSAgICBzd2l0Y2ggKGN1bGxGYWNlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRlJPTlQ6
Ci0gICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ1cgOiBEM0RD
VUxMX0NDVyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CQUNLOgotICAgICAgICBj
dWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RDVUxMX0NDVyA6IEQzRENVTExfQ1cpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIGN1
bGwgPSBEM0RDVUxMX05PTkU7IC8vIGN1bGxpbmcgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBkcmF3
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gY3VsbDsKLX0KLQotRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2Uo
R0xlbnVtIGN1YmVGYWNlKQotewotICAgIEQzRENVQkVNQVBfRkFDRVMgZmFjZSA9IEQzRENVQkVN
QVBfRkFDRV9QT1NJVElWRV9YOwotCi0gICAgc3dpdGNoIChjdWJlRmFjZSkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgZmFjZSA9IEQz
RENVQkVNQVBfRkFDRV9QT1NJVElWRV9YOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9G
QUNFX05FR0FUSVZFX1g7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJ
VkVfWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9ZOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgot
ICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1o7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGZh
Y2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWNlOwotfQotCi1E
V09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJv
b2wgYWxwaGEpCi17Ci0gICAgcmV0dXJuIChyZWQgICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVE
ICAgOiAwKSB8Ci0gICAgICAgICAgIChncmVlbiA/IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4g
OiAwKSB8Ci0gICAgICAgICAgIChibHVlICA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSAgOiAw
KSB8Ci0gICAgICAgICAgIChhbHBoYSA/IEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgOiAwKTsK
LX0KLQotRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmls
dGVyKQotewotICAgIEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZf
UE9JTlQ7Ci0gICAgc3dpdGNoIChtYWdGaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFS
RVNUOiBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xJTkVBUjogIGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfTElORUFSOyBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZE1hZ0ZpbHRlcjsK
LX0KLQotdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVG
SUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0
ZXIpCi17Ci0gICAgc3dpdGNoIChtaW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFS
RVNUOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgKmQz
ZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xJTkVBUjoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAg
ICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQz
RFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAg
ICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIg
PSBEM0RURVhGX1BPSU5UOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9N
SVBNQVBfTElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAg
ICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIg
PSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTElORUFS
OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIg
PSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwot
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLX0KLQotYm9vbCBDb252ZXJ0UHJpbWl0aXZl
VHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUgKmQzZFByaW1pdGl2ZVR5cGUsIGlu
dCAqZDNkUHJpbWl0aXZlQ291bnQpCi17Ci0gICAgc3dpdGNoIChwcmltaXRpdmVUeXBlKQotICAg
IHsKLSAgICAgIGNhc2UgR0xfUE9JTlRTOgotICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQz
RFBUX1BPSU5UTElTVDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICAgICpkM2RQcmlt
aXRpdmVUeXBlID0gRDNEUFRfTElORUxJU1Q7Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9
IGVsZW1lbnRDb3VudCAvIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FX0xP
T1A6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOwotICAgICAg
ICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLSAxOyAgIC8vIEQzRCBkb2Vzbid0
IHN1cHBvcnQgbGluZSBsb29wcywgc28gd2UgZHJhdyB0aGUgbGFzdCBsaW5lIHNlcGFyYXRlbHkK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6Ci0gICAgICAgICpkM2RQ
cmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291
bnQgPSBlbGVtZW50Q291bnQgLSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVTOgotICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFTElTVDsK
LSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC8gMzsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgotICAgICAgICAqZDNkUHJpbWl0
aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFU1RSSVA7Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3Vu
dCA9IGVsZW1lbnRDb3VudCAtIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9UUklB
TkdMRV9GQU46Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVGQU47
Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDI7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1EM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1h
dChHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKLSAgICAgIGNh
c2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4
X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgICAgY2FzZSBHTF9S
R0I1NjU6ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7Ci0gICAgICBjYXNlIEdM
X1JHQjhfT0VTOiAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OwotICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAg
ICAgIAotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQzREZNVF9E
MjRTODsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBEM0RGTVRf
QThSOEc4Qjg7Ci0gICAgfQotfQotCi1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxl
VHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBpZiAoc2FtcGxlcyA8PSAx
KQotICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKLSAgICBlbHNlCi0gICAgICAg
IHJldHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOwotfQotCi19Ci0KLW5hbWVzcGFj
ZSBkeDJlcwotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5j
aWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAg
ewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dpdGNoKHN0ZW5jaWxGb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6
Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMzI6Ci0g
ICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6
Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJldHVybiAwOwotICAgIC8vY2FzZSBE
M0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAg
IC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGlyZWN0WCA5RXgg
b25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNp
Z25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6
Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0g
ICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAg
ICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICByZXR1cm4g
ODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICByZXR1cm4gMTsKLSAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotdW5zaWduZWQgaW50IEdldFJlZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAg
IHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2
UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMy
RjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0g
ICAgICAgIHJldHVybiAxMDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRf
QTFSNUc1QjU6Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiA1Owot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBp
bnQgR2V0R3JlZW5TaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNv
bG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAg
ICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAg
IHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1
cm4gMTA7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1Ogot
ICAgICAgICByZXR1cm4gNTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0
dXJuIDY7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVu
c2lnbmVkIGludCBHZXRCbHVlU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dp
dGNoIChjb2xvckZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZG
OgotICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgot
ICAgICAgICByZXR1cm4gMzI7Ci0gICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAg
ICAgcmV0dXJuIDEwOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1
RzVCNToKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBH
ZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQotewotICAgIGlmIChkZXB0aEZvcm1h
dCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiAyNDsKLSAgICB9Ci0gICAg
c3dpdGNoIChkZXB0aEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FC
TEU6ICByZXR1cm4gMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMzI6ICAgICAgICAgICByZXR1cm4g
MzI7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMTogICAgICAgICByZXR1cm4gMTU7Ci0gICAgICBj
YXNlIEQzREZNVF9EMjRTODogICAgICAgICByZXR1cm4gMjQ7Ci0gICAgICBjYXNlIEQzREZNVF9E
MjRYODogICAgICAgICByZXR1cm4gMjQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OiAgICAg
ICByZXR1cm4gMjQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICByZXR1cm4gMTY7
Ci0gICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOiByZXR1cm4gMzI7Ci0gICAgICBjYXNl
IEQzREZNVF9EMjRGUzg6ICAgICAgICByZXR1cm4gMjQ7Ci0gICAgLy9jYXNlIEQzREZNVF9EMzJf
TE9DS0FCTEU6ICByZXR1cm4gMzI7ICAgLy8gRDNEOUV4IG9ubHkKLSAgICAvL2Nhc2UgRDNERk1U
X1M4X0xPQ0tBQkxFOiAgIHJldHVybiAwOyAgICAvLyBEM0Q5RXggb25seQotICAgICAgZGVmYXVs
dDogICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIElzRmxvYXQz
MkZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICBzd2l0Y2goc3VyZmFjZUZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9SMTZGOgotICAgICAgY2FzZSBEM0RGTVRf
RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX1IzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9HMzJS
MzJGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhH
OEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2
QjU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc0Zsb2F0MTZGb3JtYXQoRDNE
Rk9STUFUIHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEM0RGTVRfUjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0cxNlIxNkY6Ci0g
ICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGNhc2UgRDNERk1UX1IzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9HMzJSMzJGOgotICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
Y2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAg
IGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSXNEZXB0aFRleHR1cmVGb3JtYXQoRDNERk9STUFU
IHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9J
TlRaKTsKLX0KLQotYm9vbCBJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNl
Rm9ybWF0KQotewotICAgIHJldHVybiAoc3VyZmFjZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Ci19
Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVf
VFlQRSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxF
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB0eXBlOwotfQot
Ci1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogcmV0
dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6IHJldHVybiBHTF9SR0JB
OF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJuIEdMX1JHQjVfQTE7Ci0g
ICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQot
R0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgICAg
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0g
ICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTOwotfQotCi19Ci0KLXN0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCkKLXsKLSAgICBj
aGFyIHBhdGhbTUFYX1BBVEhdOwotICAgIERXT1JEIHBhdGhMZW4gPSBHZXRUZW1wUGF0aEEoc2l6
ZW9mKHBhdGgpIC8gc2l6ZW9mKHBhdGhbMF0pLCBwYXRoKTsKLSAgICBpZiAocGF0aExlbiA9PSAw
KQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6c3Ry
aW5nKCk7Ci0gICAgfQotCi0gICAgVUlOVCB1bmlxdWUgPSBHZXRUZW1wRmlsZU5hbWVBKHBhdGgs
ICJzaCIsIDAsIHBhdGgpOwotICAgIGlmICh1bmlxdWUgPT0gMCkKLSAgICB7Ci0gICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gcGF0aDsKLX0KLQotdm9pZCB3cml0ZUZpbGUoY29uc3QgY2hhciogcGF0aCwg
Y29uc3Qgdm9pZCogY29udGVudCwgc2l6ZV90IHNpemUpCi17Ci0gICAgRklMRSogZmlsZSA9IGZv
cGVuKHBhdGgsICJ3Iik7Ci0gICAgaWYgKCFmaWxlKQotICAgIHsKLSAgICAgICAgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZ3cml0ZShjb250ZW50LCBzaXpl
b2YoY2hhciksIHNpemUsIGZpbGUpOwotICAgIGZjbG9zZShmaWxlKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjZjIyNDE4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gdXRpbGl0aWVzLmg6IENvbnZlcnNp
b24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgotCi0jaWZuZGVmIExJQkdM
RVNWMl9VVElMSVRJRVNfSAotI2RlZmluZSBMSUJHTEVTVjJfVVRJTElUSUVTX0gKLQotI2RlZmlu
ZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wy
ZXh0Lmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi1jb25zdCBE
M0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdU
JywnWicpKSk7Ci1jb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFL
RUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7Ci0KLW5hbWVzcGFjZSBnbAotewotCi1zdHJ1Y3Qg
Q29sb3I7Ci0KLWludCBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudChHTGVudW0gdHlwZSk7
Ci1pbnQgVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpOwotR0xlbnVt
IFVuaWZvcm1Db21wb25lbnRUeXBlKEdMZW51bSB0eXBlKTsKLXNpemVfdCBVbmlmb3JtSW50ZXJu
YWxTaXplKEdMZW51bSB0eXBlKTsKLXNpemVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0
eXBlKTsKLWludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0eXBlKTsKLWludCBWYXJpYWJsZUNv
bHVtbkNvdW50KEdMZW51bSB0eXBlKTsKLQotaW50IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1bnNp
Z25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9uU2l6ZSwgdW5zaWduZWQgaW50
IGJpdHNTaXplKTsKLQotaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUpOwotR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCk7Ci1HTHNpemVpIENvbXB1dGVDb21wcmVz
c2VkUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCk7Ci1HTHNpemVpIENvbXB1dGVD
b21wcmVzc2VkU2l6ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCk7Ci1ib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXNEZXB0aFRleHR1
cmUoR0xlbnVtIGZvcm1hdCk7Ci1ib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Ci1ib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotR0xl
bnVtIEV4dHJhY3RGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLUdMZW51bSBFeHRyYWN0
VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwotCi1ib29sIElzQ29sb3JSZW5kZXJhYmxlKEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCk7Ci1ib29sIElzRGVwdGhSZW5kZXJhYmxlKEdMZW51bSBpbnRl
cm5hbGZvcm1hdCk7Ci1ib29sIElzU3RlbmNpbFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9y
bWF0KTsKLQotfQotCi1uYW1lc3BhY2UgZXMyZHgKLXsKLQotRDNEQ01QRlVOQyBDb252ZXJ0Q29t
cGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7Ci1EM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNv
bG9yIGNvbG9yKTsKLUQzREJMRU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKTsKLUQz
REJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApOwotRDNEU1RFTkNJTE9QIENv
bnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7Ci1EM0RURVhUVVJFQUREUkVTUyBDb252
ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApOwotRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xl
bnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKTsKLUQzRENVQkVNQVBfRkFDRVMgQ29udmVy
dEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSk7Ci1EV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wg
cmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwotRDNEVEVYVFVSRUZJTFRF
UlRZUEUgQ29udmVydE1hZ0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyKTsKLXZvaWQgQ29udmVydE1p
bkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmls
dGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKTsKLWJvb2wgQ29udmVydFBy
aW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6ZWkgZWxlbWVudENvdW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQUklNSVRJVkVUWVBFICpkM2RQcmltaXRpdmVU
eXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50KTsKLUQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVm
ZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOwotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNh
bXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpOwotCi19Ci0KLW5hbWVzcGFjZSBk
eDJlcwotewotR0x1aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotR0x1
aW50IEdldFJlZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWludCBHZXRHcmVlblNp
emUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWludCBHZXRCbHVlU2l6ZShEM0RGT1JNQVQg
Y29sb3JGb3JtYXQpOwotR0x1aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQp
OwotR0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKLWJvb2wg
SXNGbG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKLWJvb2wgSXNGbG9hdDE2
Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKLWJvb2wgSXNEZXB0aFRleHR1cmVGb3Jt
YXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwotYm9vbCBJc1N0ZW5jaWxUZXh0dXJlRm9ybWF0
KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KTsKLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRp
c2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpOwotCi1HTGVudW0gQ29udmVydEJh
Y2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3Rl
bmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLQotfQotCi1zdGQ6OnN0cmluZyBnZXRUZW1w
UGF0aCgpOwotdm9pZCB3cml0ZUZpbGUoY29uc3QgY2hhciogcGF0aCwgY29uc3Qgdm9pZCogZGF0
YSwgc2l6ZV90IHNpemUpOwotCi1pbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxU
IGVycm9yQ29kZSkKLXsKLSAgICBzd2l0Y2ggKGVycm9yQ29kZSkKLSAgICB7Ci0gICAgICBjYXNl
IEQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SOgotICAgICAgY2FzZSBEM0RFUlJfREVWSUNFTE9T
VDoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJ
Q0VSRU1PVkVEOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19OwotCi0jZW5kaWYgIC8vIExJQkdMRVNWMl9VVElMSVRJ
RVNfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi92
ZXJ0ZXhjb252ZXJzaW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3ZlcnRleGNvbnZlcnNpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJiOGI4
OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Zl
cnRleGNvbnZlcnNpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyB2ZXJ0ZXhjb252ZXJzaW9uLmg6IEEgbGlicmFyeSBvZiB2ZXJ0ZXgg
Y29udmVyc2lvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQKLS8vIHRoZSBGb3Jt
YXRDb252ZXJ0ZXIgb2JqZWN0cyB1c2VkIGJ5IHRoZSBidWZmZXIgY29udmVyc2lvbiBzeXN0ZW0u
Ci0KLSNpZm5kZWYgTElCR0xFU1YyX1ZFUlRFWENPTlZFUlNJT05fSF8KLSNkZWZpbmUgTElCR0xF
U1YyX1ZFUlRFWENPTlZFUlNJT05fSF8KLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8
bGltaXRzPgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIgLy8gRGVmaW5lcyBJbmRl
eAotCi1uYW1lc3BhY2UgZ2wKLXsKLQotLy8gQ29udmVyc2lvbiB0eXBlczoKLS8vIHN0YXRpYyBj
b25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMgYW4gaWRlbnRpdHkgdHJhbnNmb3Jt
LCBmYWxzZSBvdGhlcndpc2UKLS8vIHN0YXRpYyBVIGNvbnZlcnQoVCk6IGNvbnZlcnQgYSBzaW5n
bGUgZWxlbWVudCBmcm9tIHRoZSBpbnB1dCB0eXBlIHRvIHRoZSBvdXRwdXQgdHlwZQotLy8gdHlw
ZWRlZiAuLi4gT3V0cHV0VHlwZTogdGhlIHR5cGUgcHJvZHVjZWQgYnkgdGhpcyBjb252ZXJzaW9u
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IElkZW50aXR5Ci17Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7Ci0K
LSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4OwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBGcm9tVCwgY2xhc3MgVG9UPgotc3RydWN0IENhc3QK
LXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRl
ZiBUb1QgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUb1QgY29udmVydChGcm9tVCB4KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRvVD4oeCk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgQ2FzdDxULCBUPgotewotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlkZW50aXR5ID0gdHJ1ZTsKLQotICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOwotCi0gICAg
c3RhdGljIFQgY29udmVydChUIHgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oeCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgTm9ybWFsaXpl
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsKLQotICAgIHR5cGVk
ZWYgZmxvYXQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KFQgeCkKLSAg
ICB7Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxUPiBOTDsKLSAgICAgICAg
ZmxvYXQgZiA9IHN0YXRpY19jYXN0PGZsb2F0Pih4KTsKLQotICAgICAgICBpZiAoTkw6OmlzX3Np
Z25lZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gY29uc3QgZmxvYXQgPT4gVkMyMDA4IGNv
bXB1dGVzIGl0IGF0IGNvbXBpbGUgdGltZQotICAgICAgICAgICAgLy8gc3RhdGljIGNvbnN0IGZs
b2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgaGVyZSwgc3Rv
cmVzIGl0IHRvIG1lbW9yeSB3aXRoIHN0YXRpYyBndWFyZCBhbmQgYWxsIHRoYXQuCi0gICAgICAg
ICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZi8oMipzdGF0aWNfY2FzdDxmbG9hdD4oTkw6
Om1heCgpKSsxKTsKLSAgICAgICAgICAgIHJldHVybiAoMipmKzEpKmRpdmlzb3I7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZi9OTDo6bWF4
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgRnJvbVR5cGUsIHN0
ZDo6c2l6ZV90IFNjYWxlQml0cz4KLXN0cnVjdCBGaXhlZFRvRmxvYXQKLXsKLSAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBmbG9hdCBPdXRwdXRU
eXBlOwotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoRnJvbVR5cGUgeCkKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRp
Y19jYXN0PEZyb21UeXBlPigxKSA8PCBTY2FsZUJpdHMpOwotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHgpICogZGl2aXNvcjsKLSAgICB9Ci19OwotCi0vLyBXaWRlbiB0eXBlczoK
LS8vIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW5pdGlhbFdpZHRoOiBudW1iZXIgb2YgY29t
cG9uZW50cyBiZWZvcmUgY29udmVyc2lvbgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBm
aW5hbFdpZHRoOiBudW1iZXIgb2YgY29tcG9uZW50cyBhZnRlciBjb252ZXJzaW9uCi0KLS8vIEZs
b2F0IGlzIHN1cHBvcnRlZCBhdCBhbnkgc2l6ZS4KLXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgot
c3RydWN0IE5vV2lkZW4KLXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdp
ZHRoID0gTjsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IE47Ci19
OwotCi0vLyBTSE9SVCwgbm9ybS1TSE9SVCwgbm9ybS1VTlNJR05FRF9TSE9SVCBhcmUgc3VwcG9y
dGVkIGJ1dCBvbmx5IHdpdGggMiBvciA0IGNvbXBvbmVudHMKLXRlbXBsYXRlIDxzdGQ6OnNpemVf
dCBOPgotc3RydWN0IFdpZGVuVG9FdmVuCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90
IGluaXRpYWxXaWR0aCA9IE47Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lk
dGggPSBOKyhOJjEpOwotfTsKLQotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lk
ZW5Ub0ZvdXIKLXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5pdGlhbFdpZHRoID0g
TjsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9IDQ7Ci19OwotCi0v
LyBNb3N0IHR5cGVzIGhhdmUgMCBhbmQgMSB0aGF0IGFyZSBqdXN0IHRoYXQuCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4KLXN0cnVjdCBTaW1wbGVEZWZhdWx0VmFsdWVzCi17Ci0gICAgc3RhdGljIFQgemVy
bygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9Ci0gICAgc3RhdGljIFQgb25lKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMSk7IH0KLX07Ci0KLS8vIEJ1dCBub3JtYWxpc2VkIHR5cGVz
IG9ubHkgc3RvcmUgWzAsMV0gb3IgWy0xLDFdIHNvIDEuMCBpcyByZXByZXNlbnRlZCBieSB0aGUg
bWF4IHZhbHVlLgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgTm9ybWFsaXplZERlZmF1bHRW
YWx1ZXMKLXsKLSAgICBzdGF0aWMgVCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7
IH0KLSAgICBzdGF0aWMgVCBvbmUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpt
YXgoKTsgfQotfTsKLQotLy8gQ29udmVydGVyOgotLy8gc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRp
dHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0gKHdpdGggbm8gd2lkZW5p
bmcpCi0vLyBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXplOiBudW1iZXIgb2YgYnl0
ZXMgcGVyIG91dHB1dCB2ZXJ0ZXgKLS8vIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2
b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOiBj
b252ZXJ0IGFuIGFycmF5IG9mIHZlcnRpY2VzLiBJbnB1dCBtYXkgYmUgc3RyaWRlZCwgYnV0IG91
dHB1dCB3aWxsIGJlIHVuc3RyaWRlZC4KLQotdGVtcGxhdGUgPGNsYXNzIEluVCwgY2xhc3MgV2lk
ZW5SdWxlLCBjbGFzcyBDb252ZXJ0ZXIsIGNsYXNzIERlZmF1bHRWYWx1ZVJ1bGUgPSBTaW1wbGVE
ZWZhdWx0VmFsdWVzPEluVD4gPgotc3RydWN0IFZlcnRleERhdGFDb252ZXJ0ZXIKLXsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIENvbnZlcnRlcjo6T3V0cHV0VHlwZSBPdXRwdXRUeXBlOwotICAgIHR5
cGVkZWYgSW5UIElucHV0VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0g
KFdpZGVuUnVsZTo6aW5pdGlhbFdpZHRoID09IFdpZGVuUnVsZTo6ZmluYWxXaWR0aCkgJiYgQ29u
dmVydGVyOjppZGVudGl0eTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxTaXpl
ID0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoICogc2l6ZW9mKE91dHB1dFR5cGUpOwotCi0gICAgc3Rh
dGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IHN0
cmlkZSwgc3RkOjpzaXplX3QgbiwgT3V0cHV0VHlwZSAqb3V0KQotICAgIHsKLSAgICAgICAgZm9y
IChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
Y29uc3QgSW5wdXRUeXBlICplaW4gPSBwb2ludGVyQWRkQnl0ZXMoaW4sIGkgKiBzdHJpZGUpOwot
Ci0gICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAwLCBzdGF0aWNfY2FzdDxPdXRw
dXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAgICAgICAgICAgIGNvcHlDb21w
b25lbnQob3V0LCBlaW4sIDEsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1
bGU6Onplcm8oKSkpOwotICAgICAgICAgICAgY29weUNvbXBvbmVudChvdXQsIGVpbiwgMiwgc3Rh
dGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAg
ICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAzLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihE
ZWZhdWx0VmFsdWVSdWxlOjpvbmUoKSkpOwotCi0gICAgICAgICAgICBvdXQgKz0gV2lkZW5SdWxl
OjpmaW5hbFdpZHRoOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29udmVy
dEFycmF5KGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4s
IHZvaWQgKm91dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0QXJyYXkoc3RhdGljX2Nh
c3Q8Y29uc3QgSW5wdXRUeXBlKj4oaW4pLCBzdHJpZGUsIG4sIHN0YXRpY19jYXN0PE91dHB1dFR5
cGUqPihvdXQpKTsKLSAgICB9Ci0KLSAgcHJpdmF0ZToKLSAgICAvLyBBZHZhbmNlIHRoZSBnaXZl
biBwb2ludGVyIGJ5IGEgbnVtYmVyIG9mIGJ5dGVzIChub3QgcG9pbnRlZC10byBlbGVtZW50cyku
Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgc3RhdGljIFQgKnBvaW50ZXJBZGRCeXRlcyhU
ICpiYXNlUHRyLCBzdGQ6OnNpemVfdCBudW1CeXRlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFQgKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VQdHIp
ICsgbnVtQnl0ZXMpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvcHlDb21wb25lbnQoT3V0
cHV0VHlwZSAqb3V0LCBjb25zdCBJbnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBlbGVtZW50aW5k
ZXgsIE91dHB1dFR5cGUgZGVmYXVsdHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFdpZGVuUnVs
ZTo6ZmluYWxXaWR0aCA+IGVsZW1lbnRpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KFdpZGVuUnVsZTo6aW5pdGlhbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dFtlbGVtZW50aW5kZXhdID0gQ29udmVydGVyOjpjb252ZXJ0KGlu
W2VsZW1lbnRpbmRleF0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dFtlbGVtZW50aW5kZXhdID0gZGVmYXVsdHZhbHVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfTsKLQotfQotCi0jZW5kaWYgICAv
LyBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBh
ZjMzZmEwLi5mOGVhYTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjY1NSw2ICsyNjU1LDcg
QEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgICIke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMiCiAgICAgICAgICIke1RISVJEUEFSVFlfRElSfS9BTkdMRS9pbmNsdWRlIgogICAg
ICAgICAiJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvaW5jbHVkZS9HTFNMQU5HIgorICAgICAgICAi
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvaW5jbHVkZS9LSFIiCiAgICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUiCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfTElCUkFSSUVTCkBAIC0yNzA2LDI0ICsyNzA3LDE3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBI
SUNTKQogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VD
b25zdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1Bh
cnNlSGVscGVyLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCi0gICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKLSAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
YwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNw
cAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCi0g
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0lucHV0LmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwCi0gICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
RXhwYW5kZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCi0gICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuaXplci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYworICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdu
b3N0aWNzQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJz
ZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKKyAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9N
YWNyby5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKKyAgICAgICAg
JHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbml6ZXIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwCkBAIC0yNzM4LDYgKzI3MzIsNyBA
QCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAorICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAK
ICAgICApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQ3NmRlODAuLmFiZGYx
OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjI5Niw0OCArNjI5NiwzMiBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9Qb29sQWxsb2MuY3BwIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Q
cmFnbWEuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9hdG9tLmMgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvYXRvbS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJl
Y3RpdmVQYXJzZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
SW5wdXQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9JbnB1dC5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8u
aCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm9FeHBhbmRlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
UHJlcHJvY2Vzc29yLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9r
ZW5pemVyLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKLQlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
YyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2xnbG9iYWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdu
b3N0aWNzQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvRGlhZ25vc3RpY3MuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFu
ZGxlckJhc2UuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIu
Y3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0V4cHJlc3Npb25QYXJzZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuaCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VM
b2NhdGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbi5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaCBcCiAJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBcCiAJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCg==
</data>
<flag name="commit-queue"
          id="199818"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182174</attachid>
            <date>2013-01-10 11:11:35 -0800</date>
            <delta_ts>2013-01-10 14:25:58 -0800</delta_ts>
            <desc>Patch (for bots, not for review)</desc>
            <filename>106274-5.patch</filename>
            <type>text/plain</type>
            <size>1779462</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNWJjOWZmOC4uODA5ODkxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTEsMjIgKzEsMjIgQEAKIDw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICIt
Ly9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1By
b3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotICAgIDxhcnJheT4K
LSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+
Ci0gICAgICAgICAgICA8c3RyaW5nPkFOR0xFPC9zdHJpbmc+Ci0gICAgICAgICAgICA8a2V5Pk9w
ZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0gICAgICAgICAgICA8c3RyaW5nPnIxMTcwPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0gICAgICAgICAg
ICA8c3RyaW5nPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VTQ008L2tleT4KLSAgICAgICAgICAgIDxzdHJp
bmc+c3ZuIGNvIC1yMTE3MCBodHRwOi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL3N2bi90
cnVuay88L3N0cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUltcG9ydERhdGU8L2tl
eT4KLSAgICAgICAgICAgIDxzdHJpbmc+MjAxMi0wNi0xNzwvc3RyaW5nPgotICAgICAgICAgICAg
PGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotICAgICAgICAgICAgPHN0cmluZz5CU0Q8L3N0
cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+Ci0gICAg
ICAgICAgICA8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5nPgotICAgICAgICA8L2RpY3Q+Ci0gICAg
PC9hcnJheT4KLTwvcGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGFycmF5Pgor
CTxkaWN0PgorCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CisJCTxzdHJpbmc+QU5HTEU8
L3N0cmluZz4KKwkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgorCQk8c3RyaW5nPnIxNjQx
PC9zdHJpbmc+CisJCTxrZXk+T3BlblNvdXJjZVdlYnNpdGVVUkw8L2tleT4KKwkJPHN0cmluZz5o
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCQk8a2V5Pk9w
ZW5Tb3VyY2VTQ008L2tleT4KKwkJPHN0cmluZz5zdm4gY28gLXIxNjQxIGh0dHA6Ly9hbmdsZXBy
b2plY3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rLzwvc3RyaW5nPgorCQk8a2V5Pk9wZW5Tb3Vy
Y2VJbXBvcnREYXRlPC9rZXk+CisJCTxzdHJpbmc+MjAxMy0wMS0wNDwvc3RyaW5nPgorCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlPC9rZXk+CisJCTxzdHJpbmc+QlNEPC9zdHJpbmc+CisJCTxrZXk+
T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+CisJCTxzdHJpbmc+QU5HTEUudHh0PC9zdHJpbmc+
CisJPC9kaWN0PgorPC9hcnJheT4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS5wcmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wcmkK
aW5kZXggMmY3YjcwMC4uMmJjN2ZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUucHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnByaQpAQCAt
OCw1ICs4LDYgQEAKIFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFCiAKIElOQ0xVREVQQVRIICs9IFwKLSAgICAkJFNPVVJDRV9ESVIvaW5jbHVk
ZS9HTFNMQU5HCisgICAgJCRTT1VSQ0VfRElSL2luY2x1ZGUvR0xTTEFORyBcCisgICAgJCRTT1VS
Q0VfRElSL2luY2x1ZGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzIwN2VjYS4uNTExM2I3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00Miw2ICs0MiwzNSBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsK
IAkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi87IH07CisJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4OTMxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEy
NjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk0MTY5NzRERUQwMDZGQUE1
QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCAqLzsgfTsKKwkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjRGOEFGMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NEY4OTYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggKi87IH07CisJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OTcxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNjRG
OEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAv
KiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4QjIxNjk3NERFRDAwNkZBQTVBIC8q
IEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NEY4OTkxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwICovOyB9OworCQlBMjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4
QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5j
cHAgKi87IH07CisJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUMxNjk3NERFRDAw
NkZBQTVBIC8qIElucHV0LmggKi87IH07CisJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY0Rjg5RDE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjY0RjhCNzE2
OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oICovOyB9
OworCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUYxNjk3NERFRDAwNkZBQTVB
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhB
MDE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCAqLzsgfTsKKwkJQTI2NEY4QkExNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5k
ZXIuY3BwICovOyB9OworCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCAqLzsgfTsKKwkJQTI2NEY4QkMx
Njk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJp
Y19sZXguaCAqLzsgfTsKKwkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNDE2
OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NEY4QkUxNjk3NERFRDAw
NkZBQTVBIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLzsgfTsKKwkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTYx
Njk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5oICovOyB9OworCQlBMjY0RjhDMDE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEE3MTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovOyB9OworCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgx
Njk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzIxNjk3NERFRDAw
NkZBQTVBIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2
NEY4QzMxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OworCQlBMjY0RjhDODE2
OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVz
LmggKi87IH07CisJCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhD
NjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9OworCQlBMjY0RjhD
QTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBW
YXJpYWJsZVBhY2tlci5oICovOyB9OworCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hy
cGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owog
CQlBMjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUz
OSAvKiBEaWFnbm9zdGljcy5oICovOyB9OwogCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi87IH07CkBAIC00OSwzMCArNzgsNiBAQAogCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CiAJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKIAkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKLQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKLQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07Ci0JCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owot
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OwotCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owot
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OwotCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKLQkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07Ci0JCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07Ci0JCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKLQkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07Ci0JCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07Ci0JCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKLQkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKLQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07Ci0JCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07Ci0JCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07Ci0JCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKLQkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKIAkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKIAkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OwogCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CkBAIC04NCw2ICs4OSw3IEBACiAJCUEyNjU2ODQxMTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OwogCQlBMjY1Njg0MjE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKIAkJQTI2NTY4NDMx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI5QjE1RTgx
Njk3ODQ1NzAwMTExRDk3IC8qIGtocnBsYXRmb3JtLmggaW4gQ29weUZpbGVzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJw
bGF0Zm9ybS5oICovOyB9OwogCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBG
MzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwpAQCAtOTcsMTMgKzEwMyw2IEBACiAJ
CUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKIAkJRkIzOUQyOEYxMjAwRjM1QTAwMDg4RTY5IC8q
IFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07
CiAJCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi87IH07Ci0JCUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAv
KiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovOyB9OwotCQlGQjM5RDI5NjEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi87IH07Ci0JCUZC
MzlEMjk4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRBMTIwMEYzNUEwMDA4OEU2OSAvKiBj
cHBzdHJ1Y3QuYyAqLzsgfTsKLQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNEIx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjM5RDI5RDEyMDBGMzVBMDAw
ODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyNEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJ
RkIzOUQyQTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgKi87IH07Ci0JCUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU0MTIw
MEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLzsgfTsKIAkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4
RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5jcHAgKi87IH07CiAJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQTgxMjAw
RjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovOyB9OwpAQCAtMTMzLDYgKzEzMiwxNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwogCQl9OworCQlBMjlCMTVFNjE2OTc4NDQ1MDAx
MTFEOTcgLyogQ29weUZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOworCQkJZHN0UGF0aCA9IHVzci9sb2NhbC9pbmNs
dWRlL0tIUjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJCUEy
OUIxNUU4MTY5Nzg0NTcwMDExMUQ5NyAvKiBraHJwbGF0Zm9ybS5oIGluIENvcHlGaWxlcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
IC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCkBAIC0xNzUsOCArMTg0LDM1IEBACiAJCUEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBB
QUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4
OTQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTYxNjk3NERF
RDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTgxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTkx
Njk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVB
IC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAv
KiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1
QSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0Rjg5RjE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEg
LyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFj
cm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEEyMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NEY4QTMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG51bWVyaWNfbGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjRGOEE0MTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE2MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVw
cm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE3MTY5NzRERUQwMDZGQUE1
QSAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
b3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBODE2
OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhB
OTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QUExNjk3
NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFy
aWFibGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQ
YWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4Q0MxNjk3NjJBQTAw
NkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0IwMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NCwzMiArMjIwLDYgQEAKIAkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyMiw2OSArMjMyLDYgQEAKIAkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
R2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTg4MTIwMEYy
NjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxODkxMjAwRjI2MjAwMDg4RTY5IC8qIENvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5p
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyog
ZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4RjEy
MDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6
ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk0MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
OTUxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQYXJz
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOTcxMjAwRjI2
MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk4MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1l
ZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAv
KiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDE5QTEyMDBGMjYyMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRl
cm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTlCMTIw
MEYyNjIwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMTlFMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291
cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOUYxMjAw
RjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRw
dXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUExMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQTIxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRI
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTMxMjAwRjI2MjAw
MDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNDEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTgxMjAwRjI2MjAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29s
QWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUExMjAwRjI2MjAw
MDg4RTY5IC8qIGF0b20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gYXRvbS5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkg
LyogYXRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBhdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21w
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUQxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUUxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjExMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzbGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjcxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCODEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI5MTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFs
aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkMxMjAwRjI2MjAw
MDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJFMTIwMEYyNjIwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lt
Ym9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDMjEyMDBG
MjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0Yx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDExMjAw
RjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxNSwyMyArMjYyLDYgQEAKIAkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xB
bGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjQzMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0NTEyMDBG
MzVBMDAwODhFNjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBh
dG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQ2MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8q
IGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyog
Y3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJB
bGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI1ODEyMDBGMzVBMDAw
ODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3Niwz
NSArMzA2LDEzIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OwotCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovID0g
eworCQlBMjY0RjhDQjE2OTc2MkFBMDA2RkFBNUEgLyogS0hSICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyog
cHBfdXRpbHMuaCAqLywKLQkJCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3NCYXNlLmNwcCAqLywKLQkJCQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3MuaCAqLywKLQkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovLAotCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5jcHAgKi8sCi0JCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovLAotCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLywKLQkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBh
cnNlci5oICovLAotCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8s
Ci0JCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi8sCi0JCQkJQTI2NTY3
RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjY1NjdENTE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uY3BwICovLAotCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oICov
LAotCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLywK
LQkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovLAotCQkJ
CUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJCUEy
NjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjY1NjdFNDE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAotCQkJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oICovLAotCQkJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwICovLAotCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIu
aCAqLywKKwkJCQlBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCAqLywK
IAkJCSk7Ci0JCQlwYXRoID0gbmV3OworCQkJbmFtZSA9IEtIUjsKKwkJCXBhdGggPSBpbmNsdWRl
L0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUEyNjU2ODJDMTU5QzIz
RTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKQEAgLTQzMiwyNCArMzQwLDMyIEBACiAJCQlw
YXRoID0gdGltaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI5QjE1
RTkxNjk3OEI3RDAwMTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5H
ICovLAorCQkJCUEyNjRGOENCMTY5NzYyQUEwMDZGQUE1QSAvKiBLSFIgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGQjM5
RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovLAogCQkJCTMx
MkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovLAotCQkJCUZCMzlEMjIwMTIwMEYzNUEw
MDA4OEU2OSAvKiBjb21waWxlciAqLywKLQkJCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyog
U291cmNlICovLAorCQkJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAvKiBzcmMgKi8sCiAJCQkJ
NUQ3QzU5QzQxMjA4QzY4QjAwMUM4NzNFIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCUZCMzlE
MENDMTIwMEVGOUIwMDA4OEU2OSAvKiBQcm9kdWN0cyAqLywKIAkJCSk7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNl
ICovID0geworCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogc3JjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCisJCQkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJ
KTsKLQkJCW5hbWUgPSBTb3VyY2U7CisJCQluYW1lID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKIAkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICov
ID0gewpAQCAtNDYwLDk0ICszNzYsMTIgQEAKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKLQkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCi0JCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAotCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAot
CQkJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAq
LywKLQkJCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5o
ICovLAotCQkJCUZCMzlEMThGMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCi0J
CQkJRkIzOUQxOTAxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCi0JCQkJRkIzOUQx
OTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLAotCQkJCUZCMzlEMTkyMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8sCi0JCQkJRkIzOUQxOTMxMjAwRjI2MjAw
MDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAotCQkJCUZCMzlEMTk0MTIwMEYyNjIwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCi0JCQkJRkIzOUQxOTUxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQxOTYxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDE5NzEyMDBGMjYyMDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhF
NjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQxOTkxMjAwRjI2MjAwMDg4RTY5IC8q
IGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQxOUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxp
bnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5o
ICovLAotCQkJCUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJ
CQlGQjM5RDE5RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJ
CUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAotCQkJCUZC
MzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDFB
MTEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAotCQkJCUZCMzlEMUEyMTIwMEYy
NjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQlGQjM5RDFBMzEyMDBGMjYyMDAw
ODhFNjkgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlEMUE0MTIwMEYyNjIwMDA4OEU2OSAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuY3BwICovLAotCQkJCUZCMzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5oICovLAotCQkJCUZCMzlEMUE3MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3Bw
ICovLAotCQkJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKLQkJ
CQlGQjM5RDFBOTEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAotCQkJCUZCMzlE
MUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQx
QkMxMjAwRjI2MjAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCi0JCQkJRkIzOUQxQkQx
MjAwRjI2MjAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAotCQkJCUZCMzlEMUJFMTIwMEYy
NjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCi0JCQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAv
KiBTaEhhbmRsZS5oICovLAotCQkJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi8sCi0JCQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmggKi8sCi0JCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCAqLywKLQkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAq
LywKLQkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICov
LAotCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAot
CQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUEyNjU2N0I3
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyNjU2
N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCSk7Ci0J
CQlpbmNsdWRlSW5JbmRleCA9IDA7Ci0JCQluYW1lID0gY29tcGlsZXI7Ci0JCQlwYXRoID0gc3Jj
L2NvbXBpbGVyOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQxQTkx
MjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQxQUExMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20u
YyAqLywKLQkJCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkgLyogYXRvbS5oICovLAotCQkJCUZC
MzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCi0JCQkJRkIzOUQxQUQxMjAw
RjI2MjAwMDg4RTY5IC8qIGNwcC5jICovLAotCQkJCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAv
KiBjcHAuaCAqLywKLQkJCQlGQjM5RDFBRjEyMDBGMjYyMDAwODhFNjkgLyogY3Bwc3RydWN0LmMg
Ki8sCi0JCQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAotCQkJCUZC
MzlEMUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLywKLQkJCQlGQjM5RDFCMjEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCi0JCQkJRkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nh
bm5lci5jICovLAotCQkJCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8s
Ci0JCQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAotCQkJCUZC
MzlEMUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywKLQkJCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhF
NjkgLyogdG9rZW5zLmMgKi8sCi0JCQkJRkIzOUQxQkExMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vu
cy5oICovLAotCQkJKTsKLQkJCWluY2x1ZGVJbkluZGV4ID0gMDsKLQkJCXBhdGggPSBwcmVwcm9j
ZXNzb3I7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAq
LywKKwkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICov
LAorCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAog
CQkJCTMxNThFQTBDMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICov
LAogCQkJCTMxNThFQTBEMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAq
LywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCkBAIC02
NDAsMjUgKzQ3NCwzMiBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vz
c29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1
NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAotCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmMgKi8sCi0JCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20u
aCAqLywKLQkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLAotCQkJ
CUZCMzlEMjQ4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuYyAqLywKLQkJCQlGQjM5RDI0OTEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmggKi8sCi0JCQkJRkIzOUQyNEExMjAwRjM1QTAwMDg4RTY5IC8q
IGNwcHN0cnVjdC5jICovLAorCQkJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuaCAqLywKKwkJCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjRGODk2MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oICovLAorCQkJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5OTE2OTc0REVEMDA2RkFBNUEgLyogRXhw
cmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTI2NEY4OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5QjE2OTc0REVEMDA2RkFBNUEgLyogSW5w
dXQuY3BwICovLAorCQkJCUEyNjRGODlDMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oICovLAor
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCisJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uaCAqLywKKwkJCQlBMjY0RjhBMTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5jcHAgKi8sCisJCQkJQTI2NEY4QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLywKKwkJCQlBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXguaCAqLywK
KwkJCQlBMjY0RjhBNDE2OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY0
RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjY0RjhB
NjE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTI2NEY4QTcxNjk3
NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTI2NEY4QTgxNjk3NERF
RDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEg
LyogVG9rZW4uaCAqLywKKwkJCQlBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8s
CiAJCQkJNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKLQkJ
CQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8sCi0JCQkJRkIzOUQyNEMx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5oICovLAotCQkJCUZCMzlEMjREMTIwMEYzNUEwMDA4
OEU2OSAvKiBwYXJzZXIuaCAqLywKLQkJCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJl
cHJvY2Vzcy5oICovLAotCQkJCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMg
Ki8sCi0JCQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLywKLQkJCQlG
QjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQyNTIx
MjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLywKLQkJCQlGQjM5RDI1MzEyMDBGMzVBMDAw
ODhFNjkgLyogc3ltYm9scy5oICovLAotCQkJCUZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAvKiB0
b2tlbnMuYyAqLywKLQkJCQlGQjM5RDI1NTEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03MDAsMjUgKzU0MSwyOSBAQAogCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMDE1OUMyMUIx
MDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMTE1OUMyMUIx
MDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2
NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUEyNjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgwODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODBCMTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODJCMTU5
QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1
Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxNThFQTBGMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY0RjhCQzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXgu
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGls
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8q
IFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM4MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOENBMTY5NzRF
MkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcz
NCw2ICs1NzksNyBAQAogCQkJCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtz
ICovLAogCQkJCTMxMkJEQjBCMTVGRUNBQjAwMDk3RUJDNyAvKiBDb3B5RmlsZXMgKi8sCiAJCQkJ
MzEyQkRCMEQxNUZFQ0FDRTAwOTdFQkM3IC8qIENvcHlGaWxlcyAqLywKKwkJCQlBMjlCMTVFNjE2
OTc4NDQ1MDAxMTFEOTcgLyogQ29weUZpbGVzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAo
CiAJCQkpOwpAQCAtNzg5LDEzICs2MzUsNiBAQAogCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMjhGMTIwMEYzNUEw
MDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDI5MTEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
NjEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5ODEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
OTEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQy
QTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlE
MkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOSwxNyArNjU4LDYgQEAKIAkJCQlBMjY1NjdCQjE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY3QkQxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RjAxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAv
KiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1Mzkg
LyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4M0Ix
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgzNyw2ICs2NjUsMTggQEAKIAkJCQlBMjY1Njg0MDE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1OEVBMEUxNjMwOTY4RDAwNkJF
NUVFIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhB
QzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEIyMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEI0MTY5NzRE
RUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCNjE2OTc0
REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NEY4QjgxNjk3
NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEJBMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjRGOEJFMTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjRGOEMzMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NEY4QzkxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVy
aXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVyaXZlZFNvdXJjZXMu
cHJpCmluZGV4IGIzYTg5ZmMuLjhmOTUwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9E
ZXJpdmVkU291cmNlcy5wcmkKQEAgLTEzLDcgKzEzLDcgQEAgZXF1YWxzKHNhbml0aXplZEZpbGUs
ICQkdG9TYW5pdGl6ZWRQYXRoKCQkX1BST19GSUxFXykpOlRFTVBMQVRFID0gZGVyaXZlZAogCiBB
TkdMRV9GTEVYX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBc
Ci0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKKyAg
ICAkJFBXRC9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCiAKIGFuZ2xlZmxl
eC5vdXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX1fbGV4LmNwcAogYW5nbGVmbGV4LmlucHV0ID0g
QU5HTEVfRkxFWF9TT1VSQ0VTCkBAIC0yMiw3ICsyMiw3IEBAIEdFTkVSQVRPUlMgKz0gYW5nbGVm
bGV4CiAKIEFOR0xFX0JJU09OX1NPVVJDRVMgPSBcCiAgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL2ds
c2xhbmcueSBcCi0gICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVz
c2lvblBhcnNlci55CisgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLnkKIAogYW5nbGViaXNvbl9kZWNsLm91dHB1dCA9ICR7UU1BS0VfRklMRV9CQVNF
fV90YWIuaAogYW5nbGViaXNvbl9kZWNsLmlucHV0ID0gQU5HTEVfQklTT05fU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKaW5kZXggZWFhOTM2ZC4uYjc3OTUzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9UYXJnZXQucHJpCkBAIC0xMyw3ICsxMyw3IEBAIENPTkZJRyArPSBzdGF0aWNs
aWIKIAogSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9zcmMgXAotICAgICQkU09V
UkNFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldyBcCisgICAgJCRTT1VSQ0VfRElS
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IgXAogICAgICQkU09VUkNFX0RJUi9pbmNsdWRlCiAK
IEhFQURFUlMgKz0gXApAQCAtMzMsNiArMzMsNyBAQCBIRUFERVJTICs9IFwKICAgICBzcmMvY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0Zvckxvb3BVbnJv
bGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL2dsc2xhbmcuaCBcCisgICAgc3JjL2NvbXBpbGVyL0hh
c2hOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvSW5mb1NpbmsuaCBcCiAgICAgc3JjL2NvbXBp
bGVyL0luaXRpYWxpemVEbGwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0luaXRpYWxpemVHbG9iYWxz
LmggXApAQCAtNDQsMjggKzQ1LDE5IEBAIEhFQURFUlMgKz0gXAogICAgIHNyYy9jb21waWxlci9N
YXBMb25nVmFyaWFibGVOYW1lcy5oIFwKICAgICBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggXAog
ICAgIHNyYy9jb21waWxlci9QcmFnbWEuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIFwKLSAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvRGlyZWN0aXZlUGFyc2VyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5w
dXQuaCBcCiAgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAot
ICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0lucHV0LmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xl
eGVyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmggXAotICAg
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaCBcCi0gICAgc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAotICAgIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmggXAotICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuaXplci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNl
ci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCi0gICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXAotICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c3ltYm9scy5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oIFwKKyAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmggXAorICAgIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvTWFjcm8uaCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXgu
aCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisgICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIFwKKyAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRFU1NMLmggXAogICAgIHNy
Yy9jb21waWxlci9PdXRwdXRHTFNMLmggXAogICAgIHNyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5oIFwKQEAgLTg4LDYgKzgwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL3V0
aWwuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIFwKKyAgICBzcmMvY29tcGlsZXIvVmFyaWFibGVQYWNr
ZXIuaCBcCiAgICAgc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKIAogU09VUkNFUyArPSBcCkBA
IC0xMzQsMjMgKzEyNywxNyBAQCBTT1VSQ0VTICs9IFwKICAgICBzcmMvY29tcGlsZXIvdXRpbC5j
cHAgXAogICAgIHNyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBcCiAgICAgc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAgXAorICAgIHNyYy9jb21waWxlci9WYXJpYWJsZVBh
Y2tlci5jcHAgXAogICAgIHNyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5jIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jIFwK
LSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgXAotICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcCBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyby5jcHAgXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
RXhwYW5kZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9j
ZXNzb3IuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAg
XAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jIFwKLSAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci90b2tlbnMuYworICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NC
YXNlLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgXAorICAgIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL01hY3JvLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNz
b3IuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcCBcCiAKIHdp
bjMyOiBTT1VSQ0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV93aW4uY3BwCiBlbHNlOiBTT1VS
Q0VTICs9IHNyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4IGQ4Mjkz
MWUuLjQ2MjM3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtMjMsNiArMjMsOCBAQAogI2RlZmluZSBDT01QSUxF
Ul9FWFBPUlQKICNlbmRpZgogCisjaW5jbHVkZSAiS0hSL2tocnBsYXRmb3JtLmgiCisKIC8vCiAv
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCkBAIC0xMTAs
NyArMTEyLDEwIEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggICA9ICAweDhCODcsCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhC
ODksCiAgIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX01B
UFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDhCOEIKKyAgU0hfTUFQUEVEX05BTUVfTUFY
X0xFTkdUSCAgICAgID0gIDB4NjAwMCwKKyAgU0hfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgICAg
ID0gIDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgID0gIDB4NjAwMiwK
KyAgU0hfSEFTSEVEX05BTUVTX0NPVU5UICAgICAgICAgID0gIDB4NjAwMwogfSBTaFNoYWRlcklu
Zm87CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4KQEAgLTE0NCwxMSArMTQ5LDE0IEBAIHR5cGVkZWYg
ZW51bSB7CiAgIC8vIC0gVGhlIHNoYWRlciB0eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KICAg
U0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMCwKIAorICAvLyBFbmZvcmNlIHRoZSBHTFNMIDEu
MDE3IEFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhY2tpbmcgcmVzdHJpY3Rpb25zLgorICBTSF9FTkZP
UkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TID0gMHgwODAwLAorCiAgIC8vIFRoaXMgZmxhZyBlbnN1
cmVzIGFsbCBpbmRpcmVjdCAoZXhwcmVzc2lvbi1iYXNlZCkgYXJyYXkgaW5kZXhpbmcKICAgLy8g
aXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gVGhpcyBlbnN1cmVzLCBmb3Ig
ZXhhbXBsZSwKICAgLy8gdGhhdCB5b3UgY2Fubm90IHJlYWQgb2ZmIHRoZSBlbmQgb2YgYSB1bmlm
b3JtLCB3aGV0aGVyIGFuIGFycmF5CiAgIC8vIHZlYzIzNCwgb3IgbWF0MjM0IHR5cGUuCi0gIFNI
X0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyA9IDB4MDgwMAorICBTSF9DTEFNUF9JTkRJUkVD
VF9BUlJBWV9CT1VORFMgPSAweDEwMDAKIH0gU2hDb21waWxlT3B0aW9uczsKIAogLy8KQEAgLTE2
Myw2ICsxNzEsMTAgQEAgQ09NUElMRVJfRVhQT1JUIGludCBTaEluaXRpYWxpemUoKTsKIC8vCiBD
T01QSUxFUl9FWFBPUlQgaW50IFNoRmluYWxpemUoKTsKIAorLy8gVGhlIDY0IGJpdHMgaGFzaCBm
dW5jdGlvbi4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgaW5wdXQgc3RyaW5nOyB0aGUKKy8v
IHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIHN0cmluZyBsZW5ndGguCit0eXBlZGVmIGtocm9ub3Nf
dWludDY0X3QgKCpTaEhhc2hGdW5jdGlvbjY0KShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KTsK
KwogLy8KIC8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiByZXNvdXJjZXMgKGNv
bnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCiAvLyBUaGUgbmFtZXMgZm9yIHRoZXNlIHJlc291cmNl
cyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcgZ2xfL0dMXy4KQEAgLTE4NCw2ICsxOTYs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBpbnQgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwog
ICAgIGludCBPRVNfRUdMX2ltYWdlX2V4dGVybmFsOwogICAgIGludCBBUkJfdGV4dHVyZV9yZWN0
YW5nbGU7CisKKyAgICAvLyBOYW1lIEhhc2hpbmcuCisgICAgLy8gU2V0IGEgNjQgYml0IGhhc2gg
ZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCisgICAgLy8gRGVm
YXVsdCBpcyBOVUxMLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgSGFzaEZ1bmN0aW9uOwogfSBTaEJ1
aWx0SW5SZXNvdXJjZXM7CiAKIC8vCkBAIC0yNzAsNiArMjg3LDExIEBAIENPTVBJTEVSX0VYUE9S
VCBpbnQgU2hDb21waWxlKAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWlu
YXRpb24gY2hhcmFjdGVyLgogLy8gU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIGxlbmd0
aCBvZiB0aGUgbWFwcGVkIHZhcmlhYmxlIG5hbWUgaW5jbHVkaW5nCiAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9OQU1F
X01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgdXNlci1kZWZpbmVkIG5hbWUgaW5jbHVk
aW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rl
ci4KKy8vIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgaGFz
aGVkIG5hbWUgaW5jbHVkaW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6IHRoZSBu
dW1iZXIgb2YgaGFzaGVkIG5hbWVzIGZyb20gdGhlIGxhdGVzdCBjb21waWxlLgogLy8gCiAvLyBw
YXJhbXM6IFJlcXVlc3RlZCBwYXJhbWV0ZXIKIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoR2V0SW5m
byhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zNTAsNiArMzcyLDI0IEBAIENPTVBJTEVSX0VY
UE9SVCB2b2lkIFNoR2V0QWN0aXZlVW5pZm9ybShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBtYXBwZWROYW1lKTsKIAorLy8g
UmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIG5hbWUgaGFzaGluZyBlbnRyeSBmcm9tIHRoZSBs
YXRlc3QgY29tcGlsZS4KKy8vIFBhcmFtZXRlcnM6CisvLyBoYW5kbGU6IFNwZWNpZmllcyB0aGUg
Y29tcGlsZXIKKy8vIGluZGV4OiBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBuYW1lIGhhc2hp
bmcgZW50cnkgdG8gYmUgcXVlcmllZC4KKy8vIG5hbWU6IFJldHVybnMgYSBudWxsIHRlcm1pbmF0
ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHVzZXIgZGVmaW5lZCBuYW1lLgorLy8gICAgICAgSXQg
aXMgYXNzdW1lZCB0aGF0IG5hbWUgaGFzIGVub3VnaCBtZW1vcnkgdG8gYWNjb21vZGF0ZSB0aGUg
bmFtZS4KKy8vICAgICAgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8gc3RvcmUg
dGhlIHVzZXIgZGVmaW5lZCBuYW1lIGNhbgorLy8gICAgICAgYmUgb2J0YWluZWQgYnkgY2FsbGlu
ZyBTaEdldEluZm8gd2l0aCBTSF9OQU1FX01BWF9MRU5HVEguCisvLyBoYXNoZWROYW1lOiBSZXR1
cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBoYXNoZWQgbmFtZSBv
ZgorLy8gICAgICAgICAgICAgdGhlIHVuaWZvcm0gdmFyaWFibGUsIEl0IGlzIGFzc3VtZWQgdGhh
dCBoYXNoZWROYW1lIGhhcyBlbm91Z2gKKy8vICAgICAgICAgICAgIG1lbW9yeSB0byBhY2NvbW9k
YXRlIHRoZSBuYW1lLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJlcXVpcmVkCisvLyAgICAgICAg
ICAgICB0byBzdG9yZSB0aGUgbmFtZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBTaEdldElu
Zm8gd2l0aAorLy8gICAgICAgICAgICAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSC4KK0NPTVBJ
TEVSX0VYUE9SVCB2b2lkIFNoR2V0TmFtZUhhc2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5k
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVk
TmFtZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjVkYjdkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsOTM1ICswLDAgQEAKLS8v
ICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9Owot
CW9iamVjdFZlcnNpb24gPSA0NTsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhBZ2dyZWdh
dGVUYXJnZXQgc2VjdGlvbiAqLwotCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICov
ID0gewotCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAot
CQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlBMTVFNzhCRUNERkYyMEJDM0ZGRjA0MEEg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gQWxsOwotCQkJcHJv
ZHVjdE5hbWUgPSBBbGw7Ci0JCX07Ci0vKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMDU1NjNBREZFQTE1MTE2
RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi87IH07Ci0JCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQTEx
OEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3BwICovOyB9OwotCQkwQTIxNjk0OTEw
M0UxRTIyOEY5QzEyRjAgLyogSW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5p
dGlhbGl6ZURsbC5jcHAgKi87IH07Ci0JCTBBQzE4OTdFNDYxQTBENDc1OEUzRENFMyAvKiBWZXJz
aW9uR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3BwICovOyB9OwotCQkw
RTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQ4RDk2N0I4RDI4OEE4
MjY3QkZGM0EgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi87IH07Ci0JCTBFQzA5QjNCMjU0
ODI5RjhGMUQ5NTJEMyAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEQzlCNjQ3RTEwRjY1RjY2MTQyRUNDMSAvKiBGb3JM
b29wVW5yb2xsLmNwcCAqLzsgfTsKLQkJMUVEMUQyQzdDNzRDNkI2MjVBRkIxQ0NGIC8qIFZhcmlh
YmxlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyN0MxMUVFMTBGRUQyOTc5OTMxRkZDMTEgLyogVmFyaWFibGVJbmZvLmNwcCAqLzsgfTsKLQkJ
Mjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhBNkRFRERGMDhEQjM3MDM5NEE3
QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLzsgfTsKLQkJMkU3QzBEMzgwNEI4MzA4QTQ5M0Q5QjRC
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGNjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi87
IH07Ci0JCTMwMjFFMEJGMUJDODQ0MkZGMUYyRjJCNCAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3M0E1N0M2RDQxMzc3M0FF
QkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovOyB9OwotCQkzMDY1RDI5RTk3RkFDNkUxMjcz
ODhEMTUgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAg
Ki87IH07Ci0JCTMyQjFEQkNENkI4M0YyMTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2
REMgLyogYXRvbS5jICovOyB9OwotCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhFQTggLyogY3Bwc3Ry
dWN0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDU4
QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi87IH07Ci0JCTNBOTZFOUNBQzhB
MjVBRjE1NjRCNjUyQyAvKiBtZW1vcnkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1vcnkuYyAqLzsg
fTsKLQkJM0YxODM4OUJDQjg5MzcwQTkzMDY2N0Y0IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGQjcwREM3NEEyMUZC
Q0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi87IH07Ci0JCTQwRkMxODlCOEEyNDZF
REYxNEMyRkRFMyAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5j
cHAgKi87IH07Ci0JCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJENCAvKiBDb2RlR2VuSExTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDk1NDlEQ0NB
RjQ1MEVCNzYxNTIwRTEgLyogQ29kZUdlbkhMU0wuY3BwICovOyB9OwotCQk1MERGMDAwMDVDQzQy
MTJGNkZCMTI5MUQgLyogSW50ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovOyB9OwotCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRUU3MjE1QTdB
QjRFRjcxQzk3RDI1NDUgLyogdXRpbC5jcHAgKi87IH07Ci0JCTVGN0I1MkE1NERDRTgxNTVFRDk0
RUNGOCAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAq
LzsgfTsKLQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlGRjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUw
MDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07Ci0JCTg4OEYxMzgyNDk4RTJENzRB
RjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovOyB9Owot
CQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdDRjFGODNFODQy
OTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJOTNBNDFB
RjAzNkU1RUY4N0IzNjZCNTYzIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07Ci0JCTlCMTExQjgzRkI2MzZGRDVDREVDMzJBMCAv
KiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3Bw
ICovOyB9OwotCQk5RThERkUxQ0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMkM5QzhFQjRBN0VG
RjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi87IH07Ci0JCUEyMDEwODNCMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3Mu
Y3BwICovOyB9OwotCQlBMjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAx
MDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEy
MDEwODNEMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjMxNTlDMzFBMDAwRTU3
QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07Ci0JCUEyMDEwODNFMTU5QzMxQTAwMEU1
N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODI5
MTU5QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgKi87IH07Ci0JCUEyMDEwODQxMTU5QzMxQTAw
MEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwICovOyB9Owot
CQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8q
IE1hY3JvLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhw
YW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovOyB9OwotCQlB
MjAxMDg0NDE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODMyMTU5QzMxQTAwMEU1N0JC
RSAvKiBQcmVwcm9jZXNzb3IuY3BwICovOyB9OwotCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUg
LyogVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NDYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9r
ZW5pemVyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAgKi87IH07Ci0JCUEyMDEwODYzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi87IH07Ci0J
CUEyMDEwODY0MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRFMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLzsgfTsKLQkJQTIw
MTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1MDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NjYx
NTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODUyMTU5QzMyNEYwMEU1
N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUEyMDEwODY3MTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERl
dGVjdFJlY3Vyc2lvbi5jcHAgKi87IH07Ci0JCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owot
CQlBMjAxMDg2OTE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg1NzE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07Ci0JCUEyMDEwODZBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAv
KiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLzsgfTsKLQkJQTIwMTA4NkIxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NUUxNTlDMzI0RjAwRTU3QkJF
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovOyB9OwotCQlBMjAxMDg2QzE1
OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NjAxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKLQkJQTIwMTA4
NzExNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NkQxNTlDMzI2MjAwRTU3
QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuY3BwICovOyB9OwotCQlBMjAxMDg3MjE1OUMzMjYy
MDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwICovOyB9OwotCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyog
UmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi87IH07Ci0J
CUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAgLyog
c3ltYm9scy5jICovOyB9OwotCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2Vf
cG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLzsgfTsKLQkJ
QjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUw
IC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwotCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLzsgfTsKLQkJQzRB
QUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8q
IE91dHB1dEVTU0wuY3BwICovOyB9OwotCQlDNzVFQjkyOTJBMEREQTQ1NTkyQThBQ0YgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07Ci0JCUNC
N0YwRUYwRDZBODlGQThDNERGNTUxMyAvKiBjcHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3NTcwN0IzOTNCN0VBQjdERDk5OTlDQiAvKiBjcHAuYyAq
LzsgfTsKLQkJRDU2RjdEMDBFOUIxNjJFNDE2RDM3REYwIC8qIENvZGVHZW5HTFNMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3QjExMjdDNzVCNTc2
RkMwMEQ3NEFFRCAvKiBDb2RlR2VuR0xTTC5jcHAgKi87IH07Ci0JCUUxQzdDNURGRjBCMkRGRUMw
OTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07Ci0JCUU4QzcyN0FBOEU5REM1RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzRE
MDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKLQkJRTk5RDZEODBEQkYwNUVDRTcxMDhCMjZEIC8qIFRy
YW5zbGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5jcHAgKi87
IH07Ci0JCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovOyB9OwotCQlGNUFFMkEyOTJERkFGOEMxNTg0MTJBQTIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsg
fTsKLQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3RTVCMEYwNDYzNUU2MDkw
RjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KLQkJ
MUY3MjQyNDk2MTAzRURGMjlDQzI1RDg3IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
LQkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IERB
MTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlw
ZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IEE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MTsKLQkJCXJlbW90ZUluZm8gPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCX07Ci0JCTU1RDVGOUJGNzI3
RTRBM0I2NjM3ODAyQiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgw
NzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJ
cmVtb3RlR2xvYmFsSURTdHJpbmcgPSA2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzI7Ci0JCQlyZW1v
dGVJbmZvID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCX07Ci0JCTYwRDM1NDZBQzI3QjA5NEQ2Q0Ew
NENENiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1Mzkx
MzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xv
YmFsSURTdHJpbmcgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQ7Ci0JCQlyZW1vdGVJbmZvID0g
dHJhbnNsYXRvcl9nbHNsOwotCQl9OwotLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkwNTZGRUFE
QzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBMTE4RTUwMDNFNUMwRTI1M0M1MzgzOSAv
KiBDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBBM0EyNjBGNTM3OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xh
dG9yRVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yRVNTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9t
LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTIwQUQwQTNCNzY0MkZCNUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlcnNpb25HTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTEyRUFGMDI4MzEx
RUVBNDc1M0U4MjgxOCAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE1M0JGMDZCRjEyQzZGNTA0OTZDNjE1NiAv
KiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxODJCQUQ1MEQ0RTU4Qjg4NEY1RUI5RjMg
LyogRm9yTG9vcFVucm9sbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JMb29wVW5yb2xsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyOEE2REVEREYwOERCMzcwMzk0QTdBRCAvKiBTZWFy
Y2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlh
YmxlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyN0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0
aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRva2Vucy5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlh
bGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZUdsb2JhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRy
YW5zbGF0b3JfY29tbW9uLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5z
bGF0b3JfY29tbW9uLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTNF
RTcyMTVBN0FCNEVGNzFDOTdEMjU0NSAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0
aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjY4QTZBQTgxMTQ5NTcxOEE2
OTM4QzAgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ190YWIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2
MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBD
NyAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ4Qjc0MDJDQzA3QTA1OUZFRjVF
QzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTdDNUMyNEVFRjQ2NkZCNEI1MEEyNTkg
LyogZ2xzbGFuZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBnbHNsYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRG
Q0YzMkNCMkQ4QTQyQzkzMEE2NkIwMCAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBn
bHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MjhGRjIwMTgzOUM2
RjIzM0UyNkZGREEgLyogY3BwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hhZGVyTGFuZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTdDRjFGODNFODQyOTAxQzQyRDQ0ODI1IC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1QTIxNTk5QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdXRwdXRITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEOTkz
NTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVEQzlCNjQ3RTEwRjY1
RjY2MTQyRUNDMSAvKiBGb3JMb29wVW5yb2xsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvckxv
b3BVbnJvbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2MEMzOTk4QzlDRTY2
REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0
aWFsaXplRGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJCNjZBQjU4NzM4
NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVTU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0RVNTTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QkJDODIyNEI5RDhFMjM0RDExN0ZBMEMg
LyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTczQTU3QzZENDEzNzczQUVCQTNDNDdBNiAvKiBnbHNsYW5nX2xleC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX2xleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTc5OURDOTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDNkJCMTJBQjA5OTU1NkNGMzc5RDc4RiAvKiBTeW1ib2xUYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTeW1ib2xUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3RDlDRjM3NkRD
NTc5OUI0QzZCMzMzMUUgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBj
cHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVO
YW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1ODQ1RkZGNUE4RTYz
MzY0MzA4MjM2RCAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
aXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODlB
NkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzbGds
b2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTAyNTQ4NDJENzI5NzU2NzJD
MkU5QTkzIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsaWRhdGVM
aW1pdGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0Q2MUNCMEJDRTU0
RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdXRwdXRHTFNMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAv
KiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFyc2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPdXRwdXRITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OUNFRDNBRkYxRTYxQjQ1RUUxMDA1NjU2IC8qIGF0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMg
LyogUXVhbGlmaWVyQWxpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIElu
aXRpYWxpemVEbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBMTY0NEIwMEU5MzA0QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNs
YXRvcl9nbHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3Jf
Z2xzbC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBMjAxMDdGRjE1
OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSAibGlidHJhbnNsYXRvcl9jb21tb24gY29weS5hIjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJQTIwMTA4MUYxNTlDMzFBMDAwRTU3QkJF
IC8qIERpYWdub3N0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERpYWdub3N0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjAx
NTlDMzFBMDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODIzMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjUxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Np
b25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVz
c2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI2MTU5
QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTIwMTA4MjkxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODJDMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMjAxMDgyRDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MkYxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMwMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzExNTlDMzFBMDAwRTU3QkJFIC8q
IHBwX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBwX3V0aWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAv
KiBQcmVwcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJlcHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzMx
NTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVwcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEyMDEwODM3MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMjAxMDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRva2VuaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW5pemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODQ4MTU5QzMyMDkwMEU1N0JCRSAvKiBsZW5n
dGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1p
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NDkxNTlDMzI0RjAwRTU3
QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODRD
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NEUxNTlDMzI0RjAwRTU3QkJFIC8q
IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODRGMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1
aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NTAxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjAxMDg1MTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MjE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0
ZWN0UmVjdXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
dGVjdFJlY3Vyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU0
MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGV0ZWN0UmVjdXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU2MTU5QzMyNEYwMEU1N0JCRSAvKiBEaWFnbm9z
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1NzE1OUMzMjRGMDBFNTdCQkUgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEaXJlY3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIw
MTA4NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjAxMDg1OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZp
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uQmVoYXZpb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUExNTlDMzI0RjAwRTU3QkJF
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyMDEwODVCMTU5QzMyNEYwMEU1N0JCRSAvKiBQcmFnbWEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUEyMDEwODVDMTU5QzMyNEYwMEU1N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1RTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUYxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjAxMDg2MDE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg2MTE1OUMz
MjRGMDBFNTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGV0ZWN0RGlzY29udGludWl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NkYxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZv
bGRTaG9ydENpcmN1aXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg3
MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRvcl9o
bHNsLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYnRyYW5zbGF0b3JfaGxzbC5h
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBNTFDNzI4QjYxNUI0MUUx
RDU5RTk5MDIgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUU2NUUxMzlBRTEw
REU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1
bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIxNDhEOTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkY1Q0ExMUVFQTkyREYyMzg0RUZEOTMgLyogQ29uc3RhbnRV
bmlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUI0MzZFRkYwNjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0cHV0R0xTTEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb29sQWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNzU3
MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29k
ZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9s
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xT
TEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0R0xTTEJhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCRTI1ODQ4NjAwNUY2Njk2Q0MwMzE2MjIgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZDN0UgLyogVHJh
bnNsYXRvckhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyog
Q29kZUdlbkhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNEZFOTg4RUY5QTI5Mzg2N0U1Qzc3MUIgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1MEEgLyog
b3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxkX2FuZ2xlLmd5cCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBidWls
ZF9hbmdsZS5neXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNGRDEyQzZFNDZFQkUw
ODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENDBG
NzhDQjlCQTBDODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQ1M0RERDBDREYxNUVFMURE
MDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yRVNT
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRB
NzUgLyogT3V0cHV0RVNTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRFU1NMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8q
IFRyYW5zbGF0b3JHTFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRl
cm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJREVFQUZDNjE4QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFM0EyOUI2
RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjAxM0E3MjQwQkRB
RThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGM0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2Vh
cmNoU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFN5bWJvbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGN0IyOTcx
RDRFQjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1Npbmsu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjk5RTczN0QzRkZEMzBDQTVFMzU0MTUw
IC8qIGNvbW1vbi5neXBpICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IGNvbW1vbi5neXBpOyBwYXRoID0gLi4vYnVpbGQvY29tbW9u
Lmd5cGk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZGM0FBNjk0REY5QTQ0NTVBODEz
MjM0RCAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQlBMjAxMDdGQjE1OUMz
MTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9
OwotCQlBNUM5OTRFNzREQjFFNjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwotCQl9OwotCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyogRnJhbWV3
b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlGRTM2NzlBMDk1NUIyNUVC
N0JGMTE2RTYgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
R3JvdXAgc2VjdGlvbiAqLwotCQkwRThENjVGNTg0RkRCODREQUFCRDM5NjkgLyogcHJlcHJvY2Vz
c29yICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkwQzlC
NDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovLAotCQkJCTlDRUQzQUZGMUU2MUI0NUVF
MTAwNTY1NiAvKiBhdG9tLmggKi8sCi0JCQkJNTgwQjJBMzFGN0M1MUE1OUI0MEYxMUEzIC8qIGNv
bXBpbGUuaCAqLywKLQkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi8sCi0J
CQkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovLAotCQkJCTgwNThBMEEyQTBB
MDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKLQkJCQlBMjAxMDg0ODE1OUMzMjA5MDBF
NTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAotCQkJCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4
RSAvKiBtZW1vcnkuYyAqLywKLQkJCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5
LmggKi8sCi0JCQkJQTIwMTA4MUUxNTlDMzFBMDAwRTU3QkJFIC8qIG5ldyAqLywKLQkJCQlDRkQx
MkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8sCi0JCQkJNkJCQzgyMjRCOUQ4RTIz
NEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIz
NEQgLyogc2Nhbm5lci5jICovLAotCQkJCTA1NkZFQURDN0Q5NUM2RDRDOUNGMTExMyAvKiBzY2Fu
bmVyLmggKi8sCi0JCQkJODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICov
LAotCQkJCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJN0Q5
Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLywKLQkJCQkyRDAwNzQ1REE5OTE0
RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi8sCi0JCQkJRDEzQzM2OTNCOUU0MEQzN0YyRkFCMzRB
IC8qIHRva2Vucy5oICovLAotCQkJKTsKLQkJCXBhdGggPSBwcmVwcm9jZXNzb3I7Ci0JCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkxOTZEQjZBQjAwNkJCODM1MDNDN0Q3ODYgLyog
U291cmNlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
N0U0QzdFRDBCODJFMThEQ0JFREYxQzkgLyogQmFzZVR5cGVzLmggKi8sCi0JCQkJQTIwMTA4NDkx
NTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywKLQkJCQlB
MjAxMDg0QTE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLywK
LQkJCQlCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICovLAotCQkJ
CUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCi0JCQkJRjc0
NjE4RjE4RkU1NDQ4MTE1MDE3QzQ0IC8qIENvbW1vbi5oICovLAotCQkJCTBBMTE4RTUwMDNFNUMw
RTI1M0M1MzgzOSAvKiBDb21waWxlci5jcHAgKi8sCi0JCQkJQjJGNUNBMTFFRUE5MkRGMjM4NEVG
RDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIg
LyogZGVidWcuY3BwICovLAotCQkJCTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5o
ICovLAotCQkJCUEyMDEwODRCMTU5QzMyNEYwMEU1N0JCRSAvKiBkZXBncmFwaCAqLywKLQkJCQlB
MjAxMDg2RDE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5jcHAgKi8sCi0J
CQkJQTIwMTA4NkUxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCAqLywK
LQkJCQlBMjAxMDg1MzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmNwcCAqLywK
LQkJCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9uLmggKi8sCi0J
CQkJQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLywKLQkJCQlB
MjAxMDg1NjE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLywKLQkJCQlBMjAxMDg1
NzE1OUMzMjRGMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi8sCi0JCQkJQTIwMTA4
NTgxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLywKLQkJCQlBMjAxMDg1
OTE1OUMzMjRGMDBFNTdCQkUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCAqLywKLQkJCQk1REM5QjY0
N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi8sCi0JCQkJMTgyQkFENTBE
NEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLywKLQkJCQk0OTdDNUMyNEVFRjQ2
NkZCNEI1MEEyNTkgLyogZ2xzbGFuZy5oICovLAotCQkJCTczQTU3QzZENDEzNzczQUVCQTNDNDdB
NiAvKiBnbHNsYW5nX2xleC5jcHAgKi8sCi0JCQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8q
IGdsc2xhbmdfdGFiLmNwcCAqLywKLQkJCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xz
bGFuZ190YWIuaCAqLywKLQkJCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1Npbmsu
Y3BwICovLAotCQkJCUY3QjI5NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAot
CQkJCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywKLQkJCQk4
NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovLAotCQkJCTYwQzM5OThD
OUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJCQlBMENFNDM2MzE4
NDkyNzZBMzExODdDN0IgLyogSW5pdGlhbGl6ZURsbC5oICovLAotCQkJCTJFN0M5QjZFNkRCNzUx
RTEyQTJGNkNCNiAvKiBJbml0aWFsaXplR2xvYmFscy5oICovLAotCQkJCUEyMDEwODVBMTU5QzMy
NEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAqLywKLQkJCQk4NTg0NUZG
RjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCTNG
N0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCTc5OURD
OTYxMUVFMkVBM0JBN0NGNTQ3NyAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlERUFGNkYzMTI2
QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlDNEZFOTg4RUY5QTI5Mzg2
N0U1Qzc3MUIgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCTE1M0JGMDZCRjEyQzZGNTA0
OTZDNjE1NiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCTU3Q0YxRjgzRTg0MjkwMUM0
MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8sCi0JCQkJODFDQzQyNDVBOEU1
QUI1NTg0RDMzNkYzIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggKi8sCi0JCQkJREVFQUZDNjE4
QTNCMzNGMUZCRkUzNTM2IC8qIE1NYXAuaCAqLywKLQkJCQlDOEJENTlCRDcwNTZGRkMyMTM3M0M1
MEEgLyogb3NpbmNsdWRlLmggKi8sCi0JCQkJQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9z
c291cmNlX3Bvc2l4LmNwcCAqLywKLQkJCQlEQjI5MTdDNUI2MjQ3MTIzNjRERTRBNzUgLyogT3V0
cHV0RVNTTC5jcHAgKi8sCi0JCQkJNkJCNjZBQjU4NzM4NjhFMjM2NzVCNkRCIC8qIE91dHB1dEVT
U0wuaCAqLywKLQkJCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAg
Ki8sCi0JCQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLywKLQkJ
CQlCQ0RGMDFGMDAyQURFOURCOEEzRUY0RkUgLyogT3V0cHV0R0xTTEJhc2UuY3BwICovLAotCQkJ
CUI1NUIzNTlDRjdFNDg2REJDNDlCQkYwQSAvKiBPdXRwdXRHTFNMQmFzZS5oICovLAotCQkJCTlB
NUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQk1QTIxNTk5
QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUQyQzlDOEVCNEE3RUZG
NUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQk5NzZDODMxQTc1RUJFMDA5QTk4
NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICovLAotCQkJCUNFRTBDOTBERjZENTA0RDFGMzYyOTcx
MSAvKiBQYXJzZUhlbHBlci5oICovLAotCQkJCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQ
b29sQWxsb2MuY3BwICovLAotCQkJCTEyRUFGMDI4MzExRUVBNDc1M0U4MjgxOCAvKiBQb29sQWxs
b2MuaCAqLywKLQkJCQlBMjAxMDg1QjE1OUMzMjRGMDBFNTdCQkUgLyogUHJhZ21hLmggKi8sCi0J
CQkJMEU4RDY1RjU4NEZEQjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLywKLQkJCQk0ODU3
RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovLAotCQkJCTlENDdC
MUFDODJFNEVFODU5QUM1NDI0MyAvKiBRdWFsaWZpZXJBbGl2ZS5oICovLAotCQkJCUI0MzZFRkYw
NjkxM0ZDQjE5QzM1MjJBNyAvKiBSZW1vdmVUcmVlLmNwcCAqLywKLQkJCQlENDBGNzhDQjlCQTBD
ODk5MjFGQTMxOUQgLyogUmVtb3ZlVHJlZS5oICovLAotCQkJCUEyMDEwODVDMTU5QzMyNEYwMEU1
N0JCRSAvKiBSZW5hbWVGdW5jdGlvbi5oICovLAotCQkJCTIyOEE2REVEREYwOERCMzcwMzk0QTdB
RCAvKiBTZWFyY2hTeW1ib2wuY3BwICovLAotCQkJCUYzRTA5REM4RTFCRjVEMjk1OEFBQ0VERSAv
KiBTZWFyY2hTeW1ib2wuaCAqLywKLQkJCQk1NkM3RTk5QkE1MDBBODRDMzUyMTZGRTAgLyogU2hh
ZGVyTGFuZy5jcHAgKi8sCi0JCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxl
LmggKi8sCi0JCQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAq
LywKLQkJCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJ
CQlBMjAxMDg1RDE1OUMzMjRGMDBFNTdCQkUgLyogdGltaW5nICovLAotCQkJCTBBM0EyNjBGNTM3
OUE3RTI2NTVENDBGMyAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi8sCi0JCQkJRDUzREREMENERjE1
RUUxREQwMUYxQTIwIC8qIFRyYW5zbGF0b3JFU1NMLmggKi8sCi0JCQkJNkZCNzBEQzc0QTIxRkJD
RDY2NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKLQkJCQlEREQzQjdFM0I3QjM1QTBC
ODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKLQkJCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0
RDZDN0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAotCQkJCUUzQTI5QjZFOUMyMUI2N0MyNUZG
MEQyQiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAotCQkJCUFBNTNCNjYzMkM3NkY5MDVERjA4RTU2
NCAvKiBUeXBlcy5oICovLAotCQkJCUEyMDEwODZGMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRT
aG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyMDEwODcwMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCQlBRTc2NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5p
c3RkLmggKi8sCi0JCQkJM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovLAot
CQkJCUE1MUM3MjhCNjE1QjQxRTFENTlFOTkwMiAvKiB1dGlsLmggKi8sCi0JCQkJQjE0OEQ5NjdC
OEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwICovLAotCQkJCTkwMjU0
ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8sCi0JCQkJMjdD
MTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZhcmlhYmxlSW5mby5jcHAgKi8sCi0JCQkJNUQ5OTM1
NEM0RDgxODdEMzg0QzgxMjA3IC8qIFZhcmlhYmxlSW5mby5oICovLAotCQkJCUY3MjdBRUM5MDY3
MTJFQzIzODA0MTQ2NCAvKiBWZXJzaW9uR0xTTC5jcHAgKi8sCi0JCQkJMTIwQUQwQTNCNzY0MkZC
NUE5QUUzQTU2IC8qIFZlcnNpb25HTFNMLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IFNvdXJjZTsK
LQkJCXBhdGggPSBjb21waWxlcjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTVCQkVGRjlCOTE3MzgyOTdCOTVDNTY4RCA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMTk2REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLywKLQkJ
CQlFMEVEQzQxMzBFN0QzNzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8sCi0JCQkJQjJDMTg0QzM1
NDMxOThCQTUxNTkyRUE0IC8qIEJ1aWxkICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Ci0JCX07Ci0JCUEyMDEwODFFMTU5QzMxQTAwMEU1N0JCRSAvKiBuZXcgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUEyMDEwODFGMTU5QzMxQTAw
MEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8sCi0JCQkJQTIwMTA4MjAxNTlDMzFBMDAwRTU3
QkJFIC8qIERpYWdub3N0aWNzLmggKi8sCi0JCQkJQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZUhhbmRsZXIuY3BwICovLAotCQkJCUEyMDEwODIyMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggKi8sCi0JCQkJQTIwMTA4MjMxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5jcHAgKi8sCi0JCQkJQTIwMTA4MjQxNTlDMzFBMDAwRTU3QkJFIC8q
IERpcmVjdGl2ZVBhcnNlci5oICovLAotCQkJCUEyMDEwODI1MTU5QzMxQTAwMEU1N0JCRSAvKiBF
eHByZXNzaW9uUGFyc2VyLmNwcCAqLywKLQkJCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyog
RXhwcmVzc2lvblBhcnNlci5oICovLAotCQkJCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAvKiBJ
bnB1dC5jcHAgKi8sCi0JCQkJQTIwMTA4MkExNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmggKi8s
Ci0JCQkJQTIwMTA4MkIxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjAx
MDgyQzE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjAxMDgyRDE1OUMzMUEw
MDBFNTdCQkUgLyogTWFjcm8uY3BwICovLAotCQkJCUEyMDEwODJFMTU5QzMxQTAwMEU1N0JCRSAv
KiBNYWNyby5oICovLAotCQkJCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFu
ZGVyLmNwcCAqLywKLQkJCQlBMjAxMDgzMDE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRl
ci5oICovLAotCQkJCUEyMDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovLAot
CQkJCUEyMDEwODMyMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJ
CUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjAx
MDgzNTE1OUMzMUEwMDBFNTdCQkUgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjAxMDgz
NjE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uY3BwICovLAotCQkJCUEyMDEwODM3MTU5QzMxQTAw
MEU1N0JCRSAvKiBUb2tlbi5oICovLAotCQkJCUEyMDEwODM4MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbml6ZXIuY3BwICovLAotCQkJCUEyMDEwODM5MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6
ZXIuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbmV3OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJQTIwMTA4NEIxNTlDMzI0RjAwRTU3QkJFIC8qIGRlcGdyYXBoICovID0gewot
CQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBMjAxMDg0QzE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLywKLQkJCQlBMjAxMDg0RDE1OUMzMjRG
MDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmggKi8sCi0JCQkJQTIwMTA4NEUxNTlDMzI0RjAw
RTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwICovLAotCQkJCUEyMDEwODRGMTU5
QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmggKi8sCi0JCQkJQTIwMTA4
NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgKi8sCi0JCQkJ
QTIwMTA4NTExNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovLAot
CQkJCUEyMDEwODUyMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGRlcGdyYXBoOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRpbWluZyAqLyA9IHsK
LQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTIwMTA4NUUxNTlDMzI0
RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovLAotCQkJCUEy
MDEwODVGMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgg
Ki8sCi0JCQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLywKLQkJCQlBMjAxMDg2MTE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gdGltaW5nOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8q
IEJ1aWxkICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlD
RjJCNjJFMDgyMEM4MzFBRjgxMkQwMDAgLyogYnVpbGRfYW5nbGUuZ3lwICovLAotCQkJCUY5OUU3
MzdEM0ZGRDMwQ0E1RTM1NDE1MCAvKiBjb21tb24uZ3lwaSAqLywKLQkJCSk7Ci0JCQluYW1lID0g
QnVpbGQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlFMEVEQzQxMzBFN0Qz
NzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9y
X2NvbW1vbi5hICovLAotCQkJCUExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xh
dG9yX2dsc2wuYSAqLywKLQkJCQlBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNs
YXRvcl9obHNsLmEgKi8sCi0JCQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5z
bGF0b3JfY29tbW9uIGNvcHkuYSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJNTg5MkM3QTM2OTUzMzA0
MzdBRkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRh
cmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA4Qjg4MTVDQTJFRkU2MEZEMEMwMzYx
QkYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5z
bGF0b3JfZ2xzbCIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlCQUJDRTcyMTEwNkI1QzE1
MjdFRkVGMEQgLyogU291cmNlcyAqLywKLQkJCQlDQTcxQ0JBNjMzRUZDNjMxNjZCRUM5RjMgLyog
RnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVu
ZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gdHJhbnNsYXRvcl9nbHNsOwotCQkJcHJvZHVj
dE5hbWUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gQTE2NDRCMDBF
OTMwNEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovOwotCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCTZG
NEZEMzVDQjNERkM4OUQ3MEVDRDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAzNEJCMzhF
M0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRp
dmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CUVBQTIyQ0E2M0ZENTcyRkNDQjkxM0QyMiAvKiBTb3VyY2VzICovLAotCQkJCUE1Qzk5NEU3NERC
MUU2MDMzOEU3QkMxMSAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAo
Ci0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSB0cmFuc2xhdG9y
X2NvbW1vbjsKLQkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQlwcm9kdWN0
UmVmZXJlbmNlID0gM0REREM3NzIxNjIwMkE0REUxODA4QkRCIC8qIGxpYnRyYW5zbGF0b3JfY29t
bW9uLmEgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJh
cnkuc3RhdGljIjsKLQkJfTsKLQkJQTIwMTA3REMxNTlDMzEzQzAwRTU3QkJFIC8qIHByZXByb2Nl
c3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSBBMjAxMDdGQzE1OUMzMTNDMDBFNTdCQkUgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInByZXByb2Nlc3NvciIgKi87Ci0JCQlidWlsZFBo
YXNlcyA9ICgKLQkJCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdCQkUgLyogU291cmNlcyAqLywKLQkJ
CQlBMjAxMDdGQjE1OUMzMTNDMDBFNTdCQkUgLyogRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQli
dWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1l
ID0gcHJlcHJvY2Vzc29yOwotCQkJcHJvZHVjdE5hbWUgPSB0cmFuc2xhdG9yX2NvbW1vbjsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSBBMjAxMDdGRjE1OUMzMTNDMDBFNTdCQkUgLyogbGlidHJhbnNs
YXRvcl9jb21tb24gY29weS5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1
Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCUE4MzhFOTU3NEIzRkYxNDc5MURCREFC
MSAvKiB0cmFuc2xhdG9yX2hsc2wgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2hs
c2wiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMDVGM0JDQTk1MTg3NzBCRTNGMUUwQTM4
IC8qIFNvdXJjZXMgKi8sCi0JCQkJRkUzNjc5QTA5NTVCMjVFQjdCRjExNkU2IC8qIEZyYW1ld29y
a3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMg
PSAoCi0JCQkpOwotCQkJbmFtZSA9IHRyYW5zbGF0b3JfaGxzbDsKLQkJCXByb2R1Y3ROYW1lID0g
dHJhbnNsYXRvcl9obHNsOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEE0NDdGNzVGMzNEQTRDNEMx
MjNBQzk1MiAvKiBsaWJ0cmFuc2xhdG9yX2hsc2wuYSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNv
bS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQlEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlCdWlsZEluZGVwZW5kZW50
VGFyZ2V0c0luUGFyYWxsZWwgPSBZRVM7Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDBFNTlGOEZFNEE4MDk5RThERENBNENFNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgImJ1aWxkX2FuZ2xlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9u
ID0gIlhjb2RlIDMuMSI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJ
CSk7Ci0JCQltYWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7Ci0JCQlwcm9qZWN0
RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJ
MTU2M0Q5OTE2QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKLQkJCQk2RjRGRDM1Q0IzREZDODlE
NzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8sCi0JCQkJNTg5MkM3QTM2OTUzMzA0MzdB
RkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLywKLQkJCQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRB
QjEgLyogdHJhbnNsYXRvcl9obHNsICovLAotCQkJCUEyMDEwN0RDMTU5QzMxM0MwMEU1N0JCRSAv
KiBwcmVwcm9jZXNzb3IgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTA1RjNC
Q0E5NTE4NzcwQkUzRjFFMEEzOCAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJNEI0QkRFN0FENjI2NkIzOUVENDNDMkQ0IC8qIENvZGVHZW5ITFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTVGN0I1MkE1NERDRTgxNTVFRDk0RUNGOCAvKiBPdXRwdXRITFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUU5OUQ2RDgwREJGMDVFQ0U3MTA4QjI2RCAvKiBUcmFuc2xh
dG9ySExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyOTY0NjY1NjZEOEMwRjAyM0E1NTM3NjAg
LyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODcxMTU5QzMyNjIw
MEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEy
MDEwODcyMTU5QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
Ci0JCX07Ci0JCUEyMDEwN0REMTU5QzMxM0MwMEU1N0JCRSAvKiBTb3VyY2VzICovID0gewotCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJQTIwMTA4M0IxNTlDMzFBMDAwRTU3QkJFIC8qIERpYWdu
b3N0aWNzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNDMTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNEMTU5QzMx
QTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIw
MTA4M0UxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTIwMTA4NDAxNTlDMzFBMDAwRTU3QkJFIC8qIElucHV0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUEyMDEwODQxMTU5QzMxQTAwMEU1N0JCRSAvKiBMZXhlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjAxMDg0MjE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTIwMTA4NDMxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg0NTE1OUMzMUEwMDBFNTdCQkUgLyog
VG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDYxNTlDMzFBMDAwRTU3QkJFIC8q
IFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJQkFCQ0U3MjExMDZCNUMxNTI3RUZFRjBE
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQlENTZGN0QwMEU5
QjE2MkU0MTZEMzdERjAgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEVD
MDlCM0IyNTQ4MjlGOEYxRDk1MkQzIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQzRBQUIyQkI0NTk0QzBEQTMxOERDQjFDIC8qIE91dHB1dEVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOUIxMTFCODNGQjYzNkZENUNERUMzMkEwIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUM3NUVCOTI5MkEwRERBNDU1OTJBOEFDRiAvKiBPdXRwdXRH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2MyAvKiBU
cmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzRjE4Mzg5QkNCODkzNzBBOTMw
NjY3RjQgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEFDMTg5N0U0
NjFBMEQ0NzU4RTNEQ0UzIC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsK
LQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlFQUEy
MkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTA4QTc5MzNCRDJGNzhBODZCOTAyMDBGNiAvKiBDb21waWxlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMzAyMUUwQkYxQkM4NDQyRkYxRjJGMkI0IC8qIGdsc2xhbmdfbGV4LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTJFN0MwRDM4MDRCODMwOEE0OTNEOUI0QiAvKiBnbHNsYW5n
X3RhYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyog
SW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1
IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEEyMTY5NDkxMDNFMUUyMjhG
OUMxMkYwIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTBERjAwMDA1
Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0
MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUY1QUUyQTI5MkRGQUY4QzE1ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk4OTZCNzIwQkQyMUY2NzQ5QTdEODNGMzAgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUU4REZFMUNDRUYwMzhCRjJCNjU0MjhDIC8q
IHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkY5Rjg3NTAxN0E2OEFCRTVEMzlG
RjE5IC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQzdDNURGRjBCMkRG
RUMwOTM4N0Y0RSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDU1NjNBREZF
QTE1MTE2RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUFDMjNGNThGREQzQzU1RjVDQTE4RUVENyAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUI4QkQyNjg1QTE2QjE4OENDREZCMDUyQiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUY2QUJENThGOENBQjc2NDFEOEJGRTkzNSAvKiBTeW1ib2xUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1NUNCRDg3NTczQjgwM0ExNzNBQzkxMjkgLyogdXRpbC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRTk0NTZGNDY0RTE2MzkyRDFDQ0QwMzAgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxRUQxRDJDN0M3NEM2QjYyNUFGQjFD
Q0YgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMyQjFEQkNENkI4M0Yy
MTQ2RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlDQjdGMEVGMEQ2QTg5RkE4
QzRERjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2
MDhFQTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQkzQTk2RTlDQUM4QTI1QUYx
NTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGMDk4RjQ2M0VEQUJDRjA3
NjkwMDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ4NTUxN0YwODZGRENF
RjM5NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUU4QzcyN0FBOEU5REM1
RTdCNTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAotCQkJCUI0ODU4NDE3RTU0MzY1
QkU4Q0RFMzkxOSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2MjE1OUMzMjRGMDBFNTdCQkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQTIwMTA4NjMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFw
aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NTE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0
UmVjdXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODY4MTU5QzMyNEYwMEU1N0JC
RSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2OTE1OUMzMjRG
MDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAx
MDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjAxMDg2QjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2QzE1OUMzMjRGMDBF
NTdCQkUgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0v
KiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhUYXJn
ZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KLQkJQTE1RTc4QkVDREZGMjBCQzNGRkYwNDBBIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5Owot
CQkJdGFyZ2V0ID0gNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9u
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA1NUQ1RjlCRjcyN0U0QTNCNjYzNzgwMkIgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlCQTI0NkNBMTk0MzVBOUZBOEFDNjkxNDYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSA1ODkyQzdBMzY5NTMzMDQzN0FGRTU3MTQgLyogdHJhbnNsYXRvcl9nbHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSA2MEQzNTQ2QUMyN0IwOTRENkNBMDRDRDYgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotCQlFNEEzRDMzQ0E0OUQwMTM1NTBCOEJBNUYgLyog
UEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7
Ci0JCQl0YXJnZXQgPSBBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9obHNs
ICovOwotCQkJdGFyZ2V0UHJveHkgPSAxRjcyNDI0OTYxMDNFREYyOUNDMjVEODcgLyogUEJYQ29u
dGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTMy
MkE4QzYyNDIzQjU5NUUxMUJBRDQyRCAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSBB
bGw7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQk0REE0MkE3OEQzQjg1NUM5Q0Q4
RjY1OEQgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlH
Q0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RS
QUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJCQlIRUFERVJfU0VBUkNIX1BB
VEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9O
QU1FID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07
Ci0JCTRGODUxRjVCQTVGQTQzRTlFMEI5Q0I4NiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9IEFsbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJODhBREM5Mjg1
NTE5QTY2ODgwOEI1MUVFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGli
OwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJ
U0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
PUQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQ
Uk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2dsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwot
CQl9OwotCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJN
RURJQVRFX0RJUiA9ICIkKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9O
KSI7Ci0JCQkJU0hBUkVEX0lOVEVSTUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291
cmNlcy8kKENPTkZJR1VSQVRJT04pIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0J
CUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVp
bGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BS
RUZJWCA9IGxpYjsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAotCQkJCQki
XCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJKTsKLQkJ
CQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJ
CSk7Ci0JCQkJUFJPRFVDVF9OQU1FID0gInRyYW5zbGF0b3JfY29tbW9uIGNvcHkiOwotCQkJfTsK
LQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJQTIwMTA3RkUxNTlDMzEzQzAwRTU3QkJFIC8qIFJl
bGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0
dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NF
U1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJ
CQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJ
CQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFu
c2xhdG9yX2NvbW1vbiBjb3B5IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJ
QUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9Q
UkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJ
IlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0J
CQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJ
CQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfZ2xzbDsKLQkJCX07Ci0JCQluYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLQkJQjA5NkZBRjAzMkRCMTlBQjYzN0QzOEYwIC8qIFJlbGVhc2Ug
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3Mg
PSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9E
RUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwi
QU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwK
LQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3Jf
aGxzbDsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJQzQ1NDZCMTRCMEVCNUVC
OEM1RDM5REMyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJSU5URVJNRURJQVRFX0RJUiA9ICIkKFBST0pF
Q1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9OKSI7Ci0JCQkJU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJpdmVkU291cmNlcy8kKENPTkZJR1VSQVRJT04p
IjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJRjAyOUUwRDM2OUZBRkVBNDZC
REFGQ0VFIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJCUdD
Q19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJB
Q0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFU
SFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQUk9EVUNUX05B
TUUgPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQlG
RjAxQ0RGNDU5NEUwRkY5RTU4MUIzMTkgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVG
SVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwi
QU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJ
SEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkp
OwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQkJfTsKLQkJCW5hbWUg
PSBEZWJ1ZzsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkwRTU5RjhGRTRBODA5
OUU4RERDQTRDRTcgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJi
dWlsZF9hbmdsZSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQk5REM2NkUxRkY5MzQ5Q0RDQzhENTJDNDYgLyogRGVi
dWcgKi8sCi0JCQkJQzQ1NDZCMTRCMEVCNUVCOEM1RDM5REMyIC8qIFJlbGVhc2UgKi8sCi0JCQkp
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0JCTM0QkIzOEUzQTc0NDE4QjJBMDYzQjQ5RSAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRv
cl9jb21tb24iICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxk
Q29uZmlndXJhdGlvbnMgPSAoCi0JCQkJRkYwMUNERjQ1OTRFMEZGOUU1ODFCMzE5IC8qIERlYnVn
ICovLAotCQkJCTREQTQyQTc4RDNCODU1QzlDRDhGNjU4RCAvKiBSZWxlYXNlICovLAotCQkJKTsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9OwotCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
cyA9ICgKLQkJCQkzMjJBOEM2MjQyM0I1OTVFMTFCQUQ0MkQgLyogRGVidWcgKi8sCi0JCQkJNEY4
NTFGNUJBNUZBNDNFOUUwQjlDQjg2IC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
RGVidWc7Ci0JCX07Ci0JCThCODgxNUNBMkVGRTYwRkQwQzAzNjFCRiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidHJhbnNsYXRvcl9nbHNsIiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTg4QURDOTI4NTUxOUE2Njg4MDhCNTFFRSAvKiBEZWJ1ZyAqLywKLQkJCQlBRjdDMkNE
MTBDNkZFQTA3NkIxNDFFNkUgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1
ZzsKLQkJfTsKLQkJQTIwMTA3RkMxNTlDMzEzQzAwRTU3QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVwcm9jZXNzb3IiICovID0gewotCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJ
QTIwMTA3RkQxNTlDMzEzQzAwRTU3QkJFIC8qIERlYnVnICovLAotCQkJCUEyMDEwN0ZFMTU5QzMx
M0MwMEU1N0JCRSAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
SXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9
OwotCQlDNzFFNzlDNzgyOUZENzk2Q0Y2MjFCNDQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfaGxzbCIgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQlGMDI5
RTBEMzY5RkFGRUE0NkJEQUZDRUUgLyogRGVidWcgKi8sCi0JCQkJQjA5NkZBRjAzMkRCMTlBQjYz
N0QzOEYwIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAxOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0v
KiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0g
REExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAppbmRleCA3ZDkz
NDlhLi5mZjk3MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2FuZ2xldXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2FuZ2xldXRpbHMuaApAQCAtMTksNCArMTksOCBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmlu
dGYKICNlbmRpZgogCisjZGVmaW5lIFZFTkRPUl9JRF9BTUQgMHgxMDAyCisjZGVmaW5lIFZFTkRP
Ul9JRF9JTlRFTCAweDgwODYKKyNkZWZpbmUgVkVORE9SX0lEX05WSURJQSAweDEwREUKKwogI2Vu
ZGlmIC8vIENPTU1PTl9BTkdMRVVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZGVidWcuY3BwCmluZGV4IGIyMjM4ZjkuLmM0NWIyYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCkBAIC04NCw2ICs4NCwxMiBAQCBi
b29sIHBlcmZBY3RpdmUoKQogU2NvcGVkUGVyZkV2ZW50SGVscGVyOjpTY29wZWRQZXJmRXZlbnRI
ZWxwZXIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7CiAjaWYgIWRlZmluZWQoQU5HTEVfRElT
QUJMRV9QRVJGKQorI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkKKyAgICBpZiAoIXBl
cmZBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICB2
YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CiAgICAgb3V0cHV0
KHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyZk91dHB1dEZ1bmN0aW9uPihEM0RQRVJGX0JlZ2lu
RXZlbnQpLCBmb3JtYXQsIHZhcmFyZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKaW5kZXggOTgyOGVjZi4uNWY4ZjYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaApAQCAtNDIsMjggKzQyLDMwIEBAIG5hbWVzcGFjZSBn
bAogI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNB
QkxFX1BFUkYpCiAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQot
I2RlZmluZSBUUkFDRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSh0cnVlLCAidHJhY2U6ICVzKCVk
KTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UodHJ1ZSwgInRyYWNlOiAlcyglZCk6
ICIgbWVzc2FnZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQog
I2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFy
Z3VtZW50cyB0byB0aGUgZGVidWdnaW5nIGxvZywgdG8gZGVub3RlIGFuIGl0ZW0gaW4gbmVlZCBv
ZiBmaXhpbmcuCiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFO
R0xFX0RJU0FCTEVfUEVSRikKICNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkK
ICNlbHNlCi0jZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZml4
bWU6ICVzKCVkKTogIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgRklYTUUobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJmaXht
ZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZB
X0FSR1NfXykKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3Iu
CiAjaWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FC
TEVfUEVSRikKICNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQotI2Rl
ZmluZSBFUlIobWVzc2FnZSwgLi4uKSBnbDo6dHJhY2UoZmFsc2UsICJlcnI6ICVzKCVkKTogIm1l
c3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUg
RVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKGZhbHNlLCAiZXJyOiAlcyglZCk6ICIgbWVzc2Fn
ZSAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKQogI2VuZGlmCiAK
IC8vIEEgbWFjcm8gdG8gbG9nIGEgcGVyZm9ybWFuY2UgZXZlbnQgYXJvdW5kIGEgc2NvcGUuCiAj
aWYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAmJiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVf
UEVSRikKICNkZWZpbmUgRVZFTlQobWVzc2FnZSwgLi4uKSAodm9pZCgwKSkKLSNlbHNlCisjZWxp
ZiBkZWZpbmVkKF9NU0NfVkVSKQogI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4pIGdsOjpTY29w
ZWRQZXJmRXZlbnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyICMjIF9fTElORV9fKF9fRlVO
Q1RJT05fXyBtZXNzYWdlICJcbiIsIF9fVkFfQVJHU19fKTsKKyNlbHNlCisjZGVmaW5lIEVWRU5U
KG1lc3NhZ2UsIC4uLikgZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBlciBzY29wZWRQZXJmRXZlbnRI
ZWxwZXIobWVzc2FnZSAiXG4iLCAjI19fVkFfQVJHU19fKTsKICNlbmRpZgogCiAvLyBBIG1hY3Jv
IGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWlsdXJlcyB0byB0aGUgZGVi
dWcgbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3Zl
cnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdmVyc2lvbi5oCmlu
ZGV4IGJkZDE2MjQuLmRiZThjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdmVyc2lvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vdmVyc2lvbi5oCkBAIC0xLDEwICsxLDEyIEBACiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04g
MQogI2RlZmluZSBNSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgQlVJTERfVkVSU0lPTiAwCi0jZGVm
aW5lIEJVSUxEX1JFVklTSU9OIDExNjYKKyNkZWZpbmUgQlVJTERfUkVWSVNJT04gMTY0MQogCiAj
ZGVmaW5lIFNUUklOR0lGWSh4KSAjeAogI2RlZmluZSBNQUNST19TVFJJTkdJRlkoeCkgU1RSSU5H
SUZZKHgpCiAKICNkZWZpbmUgUkVWSVNJT05fU1RSSU5HIE1BQ1JPX1NUUklOR0lGWShCVUlMRF9S
RVZJU0lPTikKICNkZWZpbmUgVkVSU0lPTl9TVFJJTkcgTUFDUk9fU1RSSU5HSUZZKE1BSk9SX1ZF
UlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoTUlOT1JfVkVSU0lPTikgIi4iIE1BQ1JPX1NUUklO
R0lGWShCVUlMRF9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKEJVSUxEX1JFVklTSU9OKQor
CisjZGVmaW5lIFZFUlNJT05fRFdPUkQgKChNQUpPUl9WRVJTSU9OIDw8IDI0KSB8IChNSU5PUl9W
RVJTSU9OIDw8IDE2KSB8IEJVSUxEX1JFVklTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKaW5kZXggZGI1ZjcyOS4uZGNlOGM2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIu
Y3BwCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1Zh
bGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJsZVBhY2tlci5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgiCkBAIC0xMTQs
NiArMTE1LDkgQEAgVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIAogYm9vbCBUQ29tcGlsZXI6Oklu
aXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCiB7CisgICAgbWF4VW5pZm9y
bVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CisgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CisgICAgICAgIHJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzOwogICAgIFRTY29wZWRQb29sQWxsb2NhdG9yIHNjb3BlZEFs
bG9jKCZhbGxvY2F0b3IsIGZhbHNlKTsKIAogICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5bWJv
bCB0YWJsZS4KQEAgLTEyMSw2ICsxMjUsOCBAQCBib29sIFRDb21waWxlcjo6SW5pdChjb25zdCBT
aEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEluaXRFeHRlbnNpb25CZWhhdmlvcihyZXNvdXJjZXMsIGV4dGVuc2lvbkJlaGF2aW9yKTsKIAor
ICAgIGhhc2hGdW5jdGlvbiA9IHJlc291cmNlcy5IYXNoRnVuY3Rpb247CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTk0LDExICsyMDAsMTkgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUo
Y29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICAvLyBDYWxsIG1hcExv
bmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgog
ICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBt
YXBwZWQgc3ltYm9sIG5hbWVzIGFuZAogICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFw
cGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpKQorICAgICAgICAv
LyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlz
IGZvciBsb25nIG5hbWVzLgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCiAg
ICAgICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKIAotICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKSkKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQVRUUklCVVRFU19VTklGT1JN
UykpIHsKICAgICAgICAgICAgIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMocm9vdCk7CisgICAgICAg
ICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
KSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25z
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4RXJyb3IsICJ0b28gbWFueSB1bmlmb3JtcyIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAg
IGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkK
ICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHJvb3QpOwpAQCAtMjI4LDYgKzI0
Miw3IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGNvbnN0IFNoQnVp
bHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogCiB2b2lkIFRDb21waWxlcjo6Y2xlYXJSZXN1bHRz
KCkKIHsKKyAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51cCgpOwogICAgIGluZm9TaW5rLmlu
Zm8uZXJhc2UoKTsKICAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKICAgICBpbmZvU2luay5kZWJ1
Zy5lcmFzZSgpOwpAQCAtMjM2LDcgKzI1MSw4IEBAIHZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3Vs
dHMoKQogICAgIHVuaWZvcm1zLmNsZWFyKCk7CiAKICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5DbGVhbnVwKCk7Ci0gICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFudXAoKTsKKworICAgIG5h
bWVNYXAuY2xlYXIoKTsKIH0KIAogYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihUSW50
ZXJtTm9kZSogcm9vdCkKQEAgLTMxMiwxMCArMzI4LDE2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZv
cmNlVmVydGV4U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290KQogCiB2
b2lkIFRDb21waWxlcjo6Y29sbGVjdEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkK
IHsKLSAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMp
OworICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMgY29sbGVjdChhdHRyaWJzLCB1bmlmb3Jtcywg
aGFzaEZ1bmN0aW9uKTsKICAgICByb290LT50cmF2ZXJzZSgmY29sbGVjdCk7CiB9CiAKK2Jvb2wg
VENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpCit7CisgICAgVmFyaWFibGVQ
YWNrZXIgcGFja2VyOworICAgIHJldHVybiBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNr
aW5nTGltaXRzKG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Cit9CisKIHZvaWQgVENvbXBp
bGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAKaW5kZXggNWY5M2EwMy4uMDZmMzcwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3Bw
CkBAIC02LDEwICs2LDE0IEBACiAKICNpbmNsdWRlICJjb21waWxlci9EaWFnbm9zdGljcy5oIgog
CisjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAot
VERpYWdub3N0aWNzOjpURGlhZ25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOiBtSW5mb1Np
bmsoaW5mb1NpbmspCitURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyhUSW5mb1NpbmsmIGluZm9T
aW5rKSA6CisgICAgbUluZm9TaW5rKGluZm9TaW5rKSwKKyAgICBtTnVtRXJyb3JzKDApLAorICAg
IG1OdW1XYXJuaW5ncygwKQogewogfQogCkBAIC0yMyw5ICsyNywyMyBAQCB2b2lkIFREaWFnbm9z
dGljczo6d3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYSkKIHsKLSAgICBUSW5mb1NpbmtCYXNlJiBz
aW5rID0gbUluZm9TaW5rLmluZm87Ci0gICAgVFByZWZpeFR5cGUgcHJlZml4ID0gc2V2ZXJpdHkg
PT0gRVJST1IgPyBFUHJlZml4RXJyb3IgOiBFUHJlZml4V2FybmluZzsKKyAgICBUUHJlZml4VHlw
ZSBwcmVmaXggPSBFUHJlZml4Tm9uZTsKKyAgICBzd2l0Y2ggKHNldmVyaXR5KQorICAgIHsKKyAg
ICAgIGNhc2UgRVJST1I6CisgICAgICAgICsrbU51bUVycm9yczsKKyAgICAgICAgcHJlZml4ID0g
RVByZWZpeEVycm9yOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgV0FSTklORzoKKyAgICAg
ICAgKyttTnVtV2FybmluZ3M7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhXYXJuaW5nOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIAorICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBtSW5mb1Npbmsu
aW5mbzsKICAgICAvKiBWQysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tl
bicgOiBleHRyYWluZm8gKi8KICAgICBzaW5rLnByZWZpeChwcmVmaXgpOwogICAgIHNpbmsubG9j
YXRpb24oRW5jb2RlU291cmNlTG9jKGxvYy5maWxlLCBsb2MubGluZSkpOwpAQCAtNDEsNCArNTks
NSBAQCB2b2lkIFREaWFnbm9zdGljczo6cHJpbnQoSUQgaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCiB7CisgICAgd3JpdGVJbmZvKHNldmVyaXR5
KGlkKSwgbG9jLCBtZXNzYWdlKGlkKSwgdGV4dCwgIiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaAppbmRleCA0M2ExMzA2Li5j
YjcxYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
RGlhZ25vc3RpY3MuaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgQ09NUElMRVJfRElBR05PU1RJ
Q1NfSF8KICNkZWZpbmUgQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KIAotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCIKKyNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgiCiAKIGNsYXNzIFRJbmZvU2luazsKIApAQCAt
MTksNiArMTksOSBAQCBjbGFzcyBURGlhZ25vc3RpY3MgOiBwdWJsaWMgcHA6OkRpYWdub3N0aWNz
CiAKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gbUluZm9TaW5rOyB9CiAKKyAg
ICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorICAgIGludCBu
dW1XYXJuaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1OdW1XYXJuaW5nczsgfQorCiAgICAgdm9pZCB3
cml0ZUluZm8oU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6
OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHJlYXNvbiwKQEAgLTM0LDYgKzM3LDggQEAgY2xhc3MgVERpYWdub3N0aWNzIDogcHVibGlj
IHBwOjpEaWFnbm9zdGljcwogCiAgIHByaXZhdGU6CiAgICAgVEluZm9TaW5rJiBtSW5mb1Npbms7
CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgaW50IG1OdW1XYXJuaW5nczsKIH07CiAKICNlbmRp
ZiAgLy8gQ09NUElMRVJfRElBR05PU1RJQ1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCmluZGV4IDIxZDNkZmMu
Ljk1Y2E1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0RpcmVjdGl2ZUhhbmRsZXIuaApAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgImNv
bXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUHJhZ21hLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgi
CiAKIGNsYXNzIFREaWFnbm9zdGljczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQyMTQxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSGFzaE5hbWVzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2lmbmRlZiBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisjZGVmaW5lIENPTVBJTEVSX0hB
U0hfTkFNRVNfSF8KKworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjZGVmaW5lIEhB
U0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgorCit0eXBlZGVmIHN0ZDo6bWFwPFRQZXJzaXN0U3Ry
aW5nLCBUUGVyc2lzdFN0cmluZz4gTmFtZU1hcDsKKworI2VuZGlmICAvLyBDT01QSUxFUl9IQVNI
X05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1lZGlhdGUuY3BwCmluZGV4IDkyYzQ1MDUuLjkwMzJiM2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwCkBA
IC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCisjaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5hbWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
bG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1JlbW92ZVRyZWUuaCIKQEAgLTE0NDUsMyArMTQ0NiwxNCBA
QCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zdGFudFVuaW9uKFRCYXNp
Y1R5cGUgcHJvbW90ZVRvLCBUSW50ZXJtQwogICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSks
IG5vZGUtPmdldExpbmUoKSk7CiB9CiAKKy8vIHN0YXRpYworVFN0cmluZyBUSW50ZXJtVHJhdmVy
c2VyOjpoYXNoKGNvbnN0IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uKQoreworICAgIGlmIChoYXNoRnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIGtocm9ub3NfdWludDY0X3QgbnVtYmVyID0gKCpoYXNo
RnVuY3Rpb24pKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgVFN0cmluZ1N0cmVh
bSBzdHJlYW07CisgICAgc3RyZWFtIDw8IEhBU0hFRF9OQU1FX1BSRUZJWCA8PCBzdGQ6OmhleCA8
PCBudW1iZXI7CisgICAgVFN0cmluZyBoYXNoZWROYW1lID0gc3RyZWFtLnN0cigpOworICAgIHJl
dHVybiBoYXNoZWROYW1lOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmluZGV4IDY0ZWU5MmQuLjAzMzE3NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAK
QEAgLTYsOCArNiwxMSBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0RVNTTC5oIgogCi1U
T3V0cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rKQorVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
ICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3lt
Ym9sVGFibGUpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRFU1NMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0RVNTTC5oCmluZGV4IDRmYTczYzguLmRkOGM1YWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaApAQCAtMTIsNyAr
MTIsMTAgQEAKIGNsYXNzIFRPdXRwdXRFU1NMIDogcHVibGljIFRPdXRwdXRHTFNMQmFzZQogewog
cHVibGljOgotICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOworICAgIFRP
dXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1h
cCwKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcAppbmRleCBkZDMxYjRiLi41ODczMDQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCkBAIC02LDgg
KzYsMTEgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKIAotVE91dHB1dEdM
U0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspCi0gICAgOiBUT3V0cHV0R0xT
TEJhc2Uob2JqU2luaykKK1RPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1
bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0R0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuaAppbmRleCAwZmUyMzU2Li45MDMwMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKQEAgLTEyLDcgKzEyLDEwIEBA
CiBjbGFzcyBUT3V0cHV0R0xTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKIHsKIHB1YmxpYzoK
LSAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xT
TChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFz
ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuY3BwCmluZGV4IDIxMDBlYWEuLjNjM2M5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApAQCAtOSwzNSAr
OSw2IEBACiAKIG5hbWVzcGFjZQogewotVFN0cmluZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYg
dHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlIG91dDsKLSAgICBpZiAodHlwZS5pc01hdHJpeCgp
KQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJtYXQiOwotICAgICAgICBvdXQgPDwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJv
b2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNp
emUoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmco
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOwotfQotCiBUU3RyaW5n
IGFycmF5QnJhY2tldHMoY29uc3QgVFR5cGUmIHR5cGUpCiB7CiAgICAgQVNTRVJUKHR5cGUuaXNB
cnJheSgpKTsKQEAgLTY2LDEwICszNywxNiBAQCBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRl
cm1Ob2RlKiBub2RlKSB7CiB9CiB9ICAvLyBuYW1lc3BhY2UKIAotVE91dHB1dEdMU0xCYXNlOjpU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaykKK1RPdXRwdXRHTFNMQmFzZTo6
VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKICAgICAgIG1PYmpTaW5rKG9ialNpbmsp
LAotICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSkKKyAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMoZmFsc2UpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAorICAgICAg
bU5hbWVNYXAobmFtZU1hcCksCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiB7CiB9
CiAKQEAgLTEwMSw3ICs3OCw3IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxl
VHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSAmJgogICAgICAgICAobURlY2xhcmVkU3RydWN0cy5maW5kKHR5cGUuZ2V0VHlw
ZU5hbWUoKSkgPT0gbURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCiAgICAgewotICAgICAgICBvdXQg
PDwgInN0cnVjdCAiIDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAie1xuIjsKKyAgICAgICAgb3V0
IDw8ICJzdHJ1Y3QgIiA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICJ7XG4iOwog
ICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAgLTExMCw3ICs4Nyw3IEBAIHZvaWQg
VE91dHB1dEdMU0xCYXNlOjp3cml0ZVZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSYgdHlwZSkKICAg
ICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0gTlVMTCk7CiAgICAgICAgICAgICBpZiAod3Jp
dGVWYXJpYWJsZVByZWNpc2lvbihmaWVsZFR5cGUtPmdldFByZWNpc2lvbigpKSkKICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1lKCpmaWVs
ZFR5cGUpIDw8ICIgIiA8PCBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpOworICAgICAgICAgICAg
b3V0IDw8IGdldFR5cGVOYW1lKCpmaWVsZFR5cGUpIDw8ICIgIiA8PCBoYXNoTmFtZShmaWVsZFR5
cGUtPmdldEZpZWxkTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUtPmlzQXJyYXko
KSkKICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cygqZmllbGRUeXBlKTsKICAg
ICAgICAgICAgIG91dCA8PCAiO1xuIjsKQEAgLTE0MCw3ICsxMTcsNyBAQCB2b2lkIFRPdXRwdXRH
TFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBh
cmdzKQogCiAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUgPSBhcmctPmdldFN5bWJvbCgpOwog
ICAgICAgICBpZiAoIW5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIG91dCA8PCAiICIgPDwgbmFt
ZTsKKyAgICAgICAgICAgIG91dCA8PCAiICIgPDwgaGFzaE5hbWUobmFtZSk7CiAgICAgICAgIGlm
ICh0eXBlLmlzQXJyYXkoKSkKICAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKHR5cGUp
OwogCkBAIC0xNTcsNyArMTM0LDcgQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0xC
YXNlOjp3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsCiAKICAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAgICAgewotICAgICAgICBvdXQgPDwgdHlw
ZS5nZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUuZ2V0
VHlwZU5hbWUoKSkgPDwgIigiOwogICAgICAgICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gTlVMTCk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkKQEAg
LTE5Niw3ICsxNzMsNyBAQCB2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCogbm9kZSkKICAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VTeW1ib2xX
aXRoVmFsdWUobm9kZSkpCiAgICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29wSW5kZXhW
YWx1ZShub2RlKTsKICAgICBlbHNlCi0gICAgICAgIG91dCA8PCBub2RlLT5nZXRTeW1ib2woKTsK
KyAgICAgICAgb3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCiAg
ICAgaWYgKG1EZWNsYXJpbmdWYXJpYWJsZXMgJiYgbm9kZS0+Z2V0VHlwZSgpLmlzQXJyYXkoKSkK
ICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMobm9kZS0+Z2V0VHlwZSgpKTsKQEAgLTI3Miw3
ICsyNDksNyBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIuIjsKICAgICAgICAgICAgICAgICAvLyBUT0RPKGFsb2twKTogQVNTRVJUCi0gICAgICAg
ICAgICAgICAgb3V0IDw8IG5vZGUtPmdldFR5cGUoKS5nZXRGaWVsZE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgaGFzaE5hbWUobm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ5Niw3ICs0NzMsNyBAQCBib29sIFRPdXRwdXRHTFNMQmFz
ZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAg
ICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgIEFTU0VSVCh2
aXNpdCA9PSBQcmVWaXNpdCk7CiAgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBub2RlLT5nZXROYW1lKCk7Cisg
ICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhhc2hOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAKICAg
ICAgICAgICAgIG91dCA8PCAiKCI7CiAgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1ldGVy
cyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKQEAgLTUwOSw3ICs0ODYsNyBAQCBib29sIFRPdXRwdXRH
TFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCiAgICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uLgogICAgICAgICAgICAgQVNT
RVJUKHZpc2l0ID09IFByZVZpc2l0KTsKICAgICAgICAgICAgIHdyaXRlVmFyaWFibGVUeXBlKG5v
ZGUtPmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IFRGdW5jdGlvbjo6dW5t
YW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhh
c2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKIAogICAgICAgICAgICAgaW5jcmVtZW50
RGVwdGgoKTsKICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb24gbm9kZSBjb250YWlu
cyBvbmUgb3IgdHdvIGNoaWxkcmVuIG5vZGVzCkBAIC01MzksOCArNTE2LDcgQEAgYm9vbCBUT3V0
cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRl
KiBub2RlKQogICAgICAgICAgICAgLy8gRnVuY3Rpb24gY2FsbC4KICAgICAgICAgICAgIGlmICh2
aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5n
IGZ1bmN0aW9uTmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8IGZ1bmN0aW9uTmFtZSA8PCAiKCI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IGhhc2hGdW5jdGlvbk5hbWUobm9kZS0+Z2V0TmFtZSgpKSA8PCAiKCI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAg
ICAgICAgICAgewpAQCAtNjAxLDcgKzU3Nyw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpOwotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOwor
ICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICIo
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
CiAgICAgICAgICAgICB7CkBAIC03NDcsMyArNzIzLDU5IEBAIHZvaWQgVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdENvZGVCbG9jayhUSW50ZXJtTm9kZSogbm9kZSkgewogICAgICAgICBvdXQgPDwgIntc
bn1cbiI7ICAvLyBFbXB0eSBjb2RlIGJsb2NrLgogICAgIH0KIH0KKworVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6OmdldFR5cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQoreworICAgIFRJbmZvU2lu
a0Jhc2Ugb3V0OworICAgIGlmICh0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBvdXQg
PDwgIm1hdCI7CisgICAgICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDog
b3V0IDw8ICJ2ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2
ZWMiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBvdXQgPDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUodHlwZS5nZXRUeXBlTmFtZSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFRTdHJpbmcob3V0LmNfc3RyKCkpOworfQorCitUU3RyaW5nIFRPdXRwdXRHTFNM
QmFzZTo6aGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobUhhc2hGdW5j
dGlvbiA9PSBOVUxMIHx8IG5hbWUuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAg
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtTmFtZU1hcC5maW5kKG5hbWUuY19zdHIoKSk7
CisgICAgaWYgKGl0ICE9IG1OYW1lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZC5jX3N0cigpOworICAgIFRTdHJpbmcgaGFzaGVkTmFtZSA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhh
c2gobmFtZSwgbUhhc2hGdW5jdGlvbik7CisgICAgbU5hbWVNYXBbbmFtZS5jX3N0cigpXSA9IGhh
c2hlZE5hbWUuY19zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgICAg
IHJldHVybiBuYW1lOworICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKK30KKworVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQoreworICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHJl
dHVybiBoYXNoTmFtZShuYW1lKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmgKaW5kZXggZWZkMGI1Zi4uMDFlOWQ0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdM
U0xCYXNlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEdMU0xCYXNlLmgKQEAgLTE2LDcgKzE2LDEwIEBACiBjbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgogewogcHVibGljOgotICAgIFRPdXRwdXRHTFNMQmFzZShU
SW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFz
ZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
VEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CkBAIC0yNSw2ICsy
OCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lv
bihUUHJlY2lzaW9uIHByZWNpc2lvbikgPSAwOwogICAgIHZvaWQgd3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKTsKICAgICBjb25zdCBDb25zdGFudFVu
aW9uKiB3cml0ZUNvbnN0YW50VW5pb24oY29uc3QgVFR5cGUmIHR5cGUsIGNvbnN0IENvbnN0YW50
VW5pb24qIHBDb25zdFVuaW9uKTsKKyAgICBUU3RyaW5nIGdldFR5cGVOYW1lKGNvbnN0IFRUeXBl
JiB0eXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBu
b2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBub2RlKTsKQEAgLTM3LDYgKzQxLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQg
dmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5vZGUpOwogCisKKyAgICAvLyBSZXR1cm4gdGhl
IG9yaWdpbmFsIG5hbWUgaWYgaGFzaCBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEw7CisgICAgLy8g
b3RoZXJ3aXNlIHJldHVybiB0aGUgaGFzaGVkIG5hbWUuCisgICAgVFN0cmluZyBoYXNoTmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRo
b3V0IGhhc2hpbmcgYnVpbHQtaW4gdmFyaWFibGVzLgorICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxl
TmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKKyAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1
dCB3aXRob3V0IGhhc2hpbmcgYnVpbHQtaW4gZnVuY3Rpb25zLgorICAgIFRTdHJpbmcgaGFzaEZ1
bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworCiBwcml2YXRlOgogICAg
IFRJbmZvU2lua0Jhc2UmIG1PYmpTaW5rOwogICAgIGJvb2wgbURlY2xhcmluZ1ZhcmlhYmxlczsK
QEAgLTQ4LDYgKzYxLDEyIEBAIHByaXZhdGU6CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJl
ZFN0cnVjdHM7CiAKICAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworCisgICAgLy8gbmFt
ZSBoYXNoaW5nLgorICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhhc2hGdW5jdGlvbjsKKyAgICBOYW1l
TWFwJiBtTmFtZU1hcDsKKworICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwogfTsKIAog
I2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCmluZGV4
IGQ3ZTY5ZDMuLmE0MzA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRITFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKQEAgLTg3LDYgKzg3LDggQEAgT3V0cHV0SExTTDo6
T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1
ZSwgdHJ1ZSwgdHIKICAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IGZhbHNlOwogICAg
IG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKICAgICBtSW5zaWRlRGlzY29udGludW91c0xv
b3AgPSBmYWxzZTsKKworICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwogfQogCiBPdXRw
dXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC00MjAsMjYgKzQyMiwxMiBAQCB2b2lkIE91dHB1dEhM
U0w6OmhlYWRlcigpCiAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICBvdXQgPDwgIHVuaWZv
cm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKLQotICAgICAgICAvLyBUaGUgdGV4dHVyZSBmZXRj
aCBmdW5jdGlvbnMgImZsaXAiIHRoZSBZIGNvb3JkaW5hdGUgaW4gb25lIHdheSBvciBhbm90aGVy
LiBUaGlzIGlzIGJlY2F1c2UgdGV4dHVyZXMgYXJlIHN0b3JlZAotICAgICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIE9wZW5HTCBjb252ZW50aW9uLCBpLmUuICgwLCAwKSBpcyAiYm90dG9tIGxlZnQi
LCByYXRoZXIgdGhhbiB0aGUgRDNEIGNvbnZlbnRpb24gd2hlcmUgKDAsIDApCi0gICAgICAgIC8v
IGlzICJ0b3AgbGVmdCIuIFNpbmNlIHRoZSBITFNMIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zIGV4
cGVjdCB0ZXh0dXJlcyB0byBiZSBzdG9yZWQgYWNjb3JkaW5nIHRvIHRoZSBEM0QKLSAgICAgICAg
Ly8gY29udmVudGlvbiwgdGhlIFkgY29vcmRpbmF0ZSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25z
IGlzIGFkanVzdGVkIHRvIGNvbXBlbnNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBz
aW1wbGVzdCBjYXNlIGlzIHRleHR1cmUyRCB3aGVyZSB0aGUgbWFwcGluZyBpcyBZIC0+IDEtWSwg
d2hpY2ggbWFwcyBbMCwgMV0gLT4gWzEsIDBdLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUg
dGV4dHVyZTJEUHJvaiBmdW5jdGlvbnMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB0aGUg
cHJvamVjdGlvbiBkaXZpZGVzIGJ5IGVpdGhlciBaIG9yIFcuIEZvciB0aGUgdmVjMwotICAgICAg
ICAvLyBjYXNlLCB0aGUgbWFwcGluZyBpcyBZIC0+IFotWSBvciBZL1ogLT4gMS1ZL1osIHdoaWNo
IGFnYWluIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9y
IGN1YmUgdGV4dHVyZXMgdGhlIG1hcHBpbmcgaXMgWSAtPiAtWSwgd2hpY2ggbWFwcyBbLTEsIDFd
IC0+IFsxLCAtMV0uIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgb24gaXRzIG93biBmb3IgdGhlCi0g
ICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcywgd2hpY2ggYXJlIG5vdyBvbiB0aGUgIndyb25nIHNp
ZGVzIiBvZiB0aGUgY3ViZS4gVGhpcyBpcyBjb21wZW5zYXRlZCBmb3IgYnkgZXhjaGFuZ2luZyB0
aGUKLSAgICAgICAgLy8gK1kgYW5kIC1ZIGZhY2VzIGV2ZXJ5d2hlcmUgZWxzZSB0aHJvdWdob3V0
IHRoZSBjb2RlLgogICAgICAgICAKICAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMs
IGZsb2F0MiB0KVxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgMCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngs
IHQueSwgMCwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtNDQ4LDcgKzQzNiw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJETG9kKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCwgMSAtIHQueSwgMCwgbG9kKSk7XG4iCisgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIKICAg
ICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAg
IH0KQEAgLTQ1NywxMiArNDQ1LDEyIEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVy
MkQgcywgZmxvYXQzIHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCAxIC0gdC55
IC8gdC56LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRs
b2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAg
ICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEgLSB0LnkgLyB0LncsIDAsIDApKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAg
ICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ3MSwxMiArNDU5LDEyIEBAIHZvaWQg
T3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIDEgLSB0LnkgLyB0LnosIDAsIGxvZCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1c
biIKICAgICAgICAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgbG9kKVxuIgog
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgMSAtIHQueSAvIHQudywgMCwgbG9kKSk7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgog
ICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ4NSw3ICs0NzMsNyBAQCB2
b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgogICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VC
RWxvZChzLCBmbG9hdDQodC54LCAtdC55LCB0LnosIDApKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4i
CiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAg
ICAgICB9CkBAIC00OTQsNyArNDgyLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgbG9kKVxuIgogICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQo
dC54LCAtdC55LCB0LnosIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgogICAgICAgICAg
ICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAt
MTM1Miw3ICsxMzQwLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKICAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgog
ICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUt
PmdldE5hbWUoKSkgPDwgIigiOworICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcobm9kZS0+
Z2V0VHlwZSgpKSA8PCAiICIgPDwgZGVjb3JhdGUobm9kZS0+Z2V0TmFtZSgpKSA8PCAobU91dHB1
dExvZDBGdW5jdGlvbiA/ICJMb2QwKCIgOiAiKCIpOwogCiAgICAgICAgICAgICBUSW50ZXJtU2Vx
dWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAKQEAgLTEzNzQsNiArMTM2
MiwxNCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKQogCiAgICAgICAgICAgICBvdXQgPDwgIik7XG4iOwogCisgICAg
ICAgICAgICAvLyBBbHNvIHByb3RvdHlwZSB0aGUgTG9kMCB2YXJpYW50IGlmIG5lZWRlZAorICAg
ICAgICAgICAgaWYgKG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtT3V0cHV0TG9kMEZ1
bmN0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rp
b24gPSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
MTg2Miw3ICsxODU4LDIxIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpCiAgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkK
ICAgICB7CiAgICAgICBjYXNlIEVPcEtpbGw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGlz
Y2FyZDtcbiIsICIiLCAiIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9wQnJlYWs6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJicmVhaztcbiIsICIiLCAiIik7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BCcmVhazoKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CisgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxv
b3BJbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSB0cnVl
OyBicmVhazt9XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiYnJlYWs7XG4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb250aW51ZTogb3V0cHV0
VHJpcGxldCh2aXNpdCwgImNvbnRpbnVlO1xuIiwgIiIsICIiKTsgYnJlYWs7CiAgICAgICBjYXNl
IEVPcFJldHVybjoKICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQpAQCAtMjA1MiwxMyAr
MjA2MiwzNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNl
c3NpdmUgbG9vcAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpy
ZXN0b3JlSW5kZXggPSBtRXhjZXNzaXZlTG9vcEluZGV4OworICAgICAgICAgICAgbUV4Y2Vzc2l2
ZUxvb3BJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBvdXQgPDwgIntpbnQgIjsKKyAgICAg
ICAgICAgIGluZGV4LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiO1xuIgor
ICAgICAgICAgICAgICAgICAgICJib29sIEJyZWFrIjsKKyAgICAgICAgICAgIGluZGV4LT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG91dCA8PCAiID0gZmFsc2U7XG4iOworCisgICAgICAg
ICAgICBib29sIGZpcnN0TG9vcEZyYWdtZW50ID0gdHJ1ZTsKKwogICAgICAgICAgICAgd2hpbGUg
KGl0ZXJhdGlvbnMgPiAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBjbGFt
cGVkTGltaXQgPSBpbml0aWFsICsgaW5jcmVtZW50ICogc3RkOjptaW4oTUFYX0xPT1BfSVRFUkFU
SU9OUywgaXRlcmF0aW9ucyk7CiAKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TG9vcEZyYWdt
ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJpZigh
QnJlYWsiOworICAgICAgICAgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSB7XG4iOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChpdGVyYXRpb25zIDw9IE1BWF9MT09QX0lURVJBVElPTlMpICAgLy8g
TGFzdCBsb29wIGZyYWdtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsgICAvLyBTdG9wcyBzZXR0aW5nIHRoZSBCcmVh
ayBmbGFnCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIGZvcihpbnQgaW5kZXggPSBpbml0aWFsOyBpbmRleCA8IGNsYW1wZWRMaW1pdDsgaW5k
ZXggKz0gaW5jcmVtZW50KQogCi0gICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoaW50ICI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJmb3IoIjsKICAgICAgICAgICAgICAgICBpbmRleC0+dHJh
dmVyc2UodGhpcyk7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwogICAgICAgICAgICAg
ICAgIG91dCA8PCBpbml0aWFsOwpAQCAtMjA4NSw5ICsyMTE5LDIwIEBAIGJvb2wgT3V0cHV0SExT
TDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAgICAgICAgICAg
ICBvdXRwdXRMaW5lRGlyZWN0aXZlKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAg
b3V0IDw8ICI7fVxuIjsKIAorICAgICAgICAgICAgICAgIGlmICghZmlyc3RMb29wRnJhZ21lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIn1cbiI7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmlyc3RMb29wRnJhZ21lbnQgPSBm
YWxzZTsKKwogICAgICAgICAgICAgICAgIGluaXRpYWwgKz0gTUFYX0xPT1BfSVRFUkFUSU9OUyAq
IGluY3JlbWVudDsKICAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IE1BWF9MT09QX0lURVJB
VElPTlM7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dCA8PCAi
fSI7CisKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSByZXN0b3JlSW5kZXg7CiAK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAppbmRleCBlYTI4YTNjLi5kYzg0
M2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmgKQEAgLTE0NCw2ICsxNDQsOCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKICAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5OwogICAg
IGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKICAgICBib29sIG1JbnNpZGVEaXNjb250aW51b3Vz
TG9vcDsKKworICAgIFRJbnRlcm1TeW1ib2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7CiB9OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAppbmRleCBiMzExNTI2Li43ZTVmY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKQEAgLTEwLDcgKzEwLDcg
QEAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCIKIAogLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KIC8vCkBAIC0xODQsNyArMTg0LDYgQEAgdm9pZCBUUGFyc2VDb250ZXh0OjplcnJv
cihUU291cmNlTG9jIGxvYywKICAgICBkaWFnbm9zdGljcy53cml0ZUluZm8ocHA6OkRpYWdub3N0
aWNzOjpFUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTG9jLCByZWFzb24sIHRv
a2VuLCBleHRyYUluZm8pOwogCi0gICAgKytudW1FcnJvcnM7CiB9CiAKIHZvaWQgVFBhcnNlQ29u
dGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKQEAgLTg0NywxNCArODQ2LDI2IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wgKm5vZGUsIFRUeXBl
KiB0eXBlLCBpbnQgc2l6ZSwKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQg
bGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCitib29sIFRQYXJz
ZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewotICAgIC8vCi0gICAgLy8g
TWFrZSB0aGUgcXVhbGlmaWVyIG1ha2Ugc2Vuc2UuCi0gICAgLy8KLSAgICBpZiAodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQ29uc3QpIHsKKyAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3Qp
CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KICAgICAg
ICAgdHlwZS5xdWFsaWZpZXIgPSBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhcnJheSkKKyAgICAgICAg
eworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNv
bnN0YW50IHNpbmNlIHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0
cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzU3RydWN0dXJlQ29udGFp
bmluZ0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAic3RydWN0
dXJlcyBjb250YWluaW5nIGFycmF5cyBtYXkgbm90IGJlIGRlY2xhcmVkIGNvbnN0YW50IHNpbmNl
IHRoZXkgY2Fubm90IGJlIGluaXRpYWxpemVkIiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJ2
YXJpYWJsZXMgd2l0aCBxdWFsaWZpZXIgJ2NvbnN0JyBtdXN0IGJlIGluaXRpYWxpemVkIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTUxMCw3ICsxNTIxLDcgQEAgaW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKIAogICAgIGds
c2xhbmdfZmluYWxpemUoY29udGV4dCk7CiAKLSAgICByZXR1cm4gKGVycm9yID09IDApICYmIChj
b250ZXh0LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKKyAgICByZXR1cm4gKGVycm9yID09IDAp
ICYmIChjb250ZXh0LT5udW1FcnJvcnMoKSA9PSAwKSA/IDAgOiAxOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKaW5kZXgg
OGRlZThmZC4uNjY4ZTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmgKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIv
RGlhZ25vc3RpY3MuaCIKICNpbmNsdWRlICJjb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKQEAgLTMzLDcgKzMzLDYgQEAg
c3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAgICAgY29tcGlsZU9wdGlvbnMob3B0aW9u
cyksCiAgICAgICAgICAgICBzb3VyY2VQYXRoKHNvdXJjZVBhdGgpLAogICAgICAgICAgICAgdHJl
ZVJvb3QoMCksCi0gICAgICAgICAgICBudW1FcnJvcnMoMCksCiAgICAgICAgICAgICBsZXhBZnRl
clR5cGUoZmFsc2UpLAogICAgICAgICAgICAgbG9vcE5lc3RpbmdMZXZlbCgwKSwKICAgICAgICAg
ICAgIHN0cnVjdE5lc3RpbmdMZXZlbCgwKSwKQEAgLTUyLDcgKzUxLDYgQEAgc3RydWN0IFRQYXJz
ZUNvbnRleHQgewogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25zdCBjaGFyKiBzb3Vy
Y2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KICAgICBUSW50ZXJt
Tm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVk
Ci0gICAgaW50IG51bUVycm9yczsKICAgICBib29sIGxleEFmdGVyVHlwZTsgICAgICAgICAgIC8v
IHRydWUgaWYgd2UndmUgcmVjb2duaXplZCBhIHR5cGUsIHNvIGNhbiBvbmx5IGJlIGxvb2tpbmcg
Zm9yIGFuIGlkZW50aWZpZXIKICAgICBpbnQgbG9vcE5lc3RpbmdMZXZlbDsgICAgICAgIC8vIDAg
aWYgb3V0c2lkZSBhbGwgbG9vcHMKICAgICBpbnQgc3RydWN0TmVzdGluZ0xldmVsOyAgICAgIC8v
IGluY3JlbWVudGVkIHdoaWxlIHBhcnNpbmcgYSBzdHJ1Y3QgZGVjbGFyYXRpb24KQEAgLTY3LDYg
KzY1LDcgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJl
cHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7CiAKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gZGlhZ25vc3RpY3MubnVtRXJyb3JzKCk7IH0KICAgICBUSW5mb1NpbmsmIGlu
Zm9TaW5rKCkgeyByZXR1cm4gZGlhZ25vc3RpY3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm89IiIpOwpAQCAtOTgsNyArOTcs
NyBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwog
ICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1Ymxp
Y1R5cGUmIHBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGludCBs
aW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wg
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHR5cGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOwog
ICAgIGJvb2wgbm9uSW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJh
bUVycm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBh
cmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNr
KGludCBsaW5lLCBjb25zdCBUU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9SZW5hbWVGdW5jdGlvbi5oCmluZGV4IDljZDZlNWUuLjM5MDhi
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9SZW5h
bWVGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9S
ZW5hbWVGdW5jdGlvbi5oCkBAIC0yMCw3ICsyMCw3IEBAIHB1YmxpYzoKICAgICAsIG1PbGRGdW5j
dGlvbk5hbWUob2xkRnVuY3Rpb25OYW1lKQogICAgICwgbU5ld0Z1bmN0aW9uTmFtZShuZXdGdW5j
dGlvbk5hbWUpIHt9CiAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQogICAgIHsKICAgICAgICAgVE9wZXJh
dG9yIG9wID0gbm9kZS0+Z2V0T3AoKTsKICAgICAgICAgaWYgKChvcCA9PSBFT3BGdW5jdGlvbiB8
fCBvcCA9PSBFT3BGdW5jdGlvbkNhbGwpICYmIG5vZGUtPmdldE5hbWUoKSA9PSBtT2xkRnVuY3Rp
b25OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5k
bGUuaAppbmRleCAzZWFmMTlmLi5hMmM1ZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUg
ImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZp
b3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9IYXNoTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxl
ci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCkBAIC02OSw2ICs3MCwxMCBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1cm4g
dW5pZm9ybXM7IH0KICAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0OwogCisg
ICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBoYXNo
RnVuY3Rpb247IH0KKyAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1cm4gbmFtZU1hcDsg
fQorICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVybiBzeW1ib2xUYWJs
ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgU2hTaGFkZXJUeXBlIGdldFNoYWRlclR5cGUoKSBjb25z
dCB7IHJldHVybiBzaGFkZXJUeXBlOyB9CiAgICAgU2hTaGFkZXJTcGVjIGdldFNoYWRlclNwZWMo
KSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9CkBAIC04OSw2ICs5NCw5IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIg
YXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYworICAgIC8v
IEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkg
dW5pZm9ybXMuCisgICAgYm9vbCBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCiAgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVz
dHJpY3Rpb25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCkBAIC0xMDYs
NiArMTE0LDggQEAgcHJpdmF0ZToKICAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZTsKICAgICBT
aFNoYWRlclNwZWMgc2hhZGVyU3BlYzsKIAorICAgIGludCBtYXhVbmlmb3JtVmVjdG9yczsKKwog
ICAgIC8vIEJ1aWx0LWluIHN5bWJvbCB0YWJsZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVj
LCBhbmQgcmVzb3VyY2VzLgogICAgIC8vIEl0IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8t
Y29tcGlsZS4KICAgICBUU3ltYm9sVGFibGUgc3ltYm9sVGFibGU7CkBAIC0xMjIsNiArMTMyLDEw
IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2lu
Z2xldG9uLgogICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsKKworICAgIC8vIG5hbWUgaGFz
aGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbjsKKyAgICBOYW1lTWFwIG5h
bWVNYXA7CiB9OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwCmluZGV4IDU2ZjVjN2YuLmFiNTY1MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAKQEAg
LTEyNSw2ICsxMjUsOSBAQCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVz
b3VyY2VzKiByZXNvdXJjZXMpCiAgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMgPSAwOwogICAgIHJlc291cmNlcy0+T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IDA7CiAgICAg
cmVzb3VyY2VzLT5BUkJfdGV4dHVyZV9yZWN0YW5nbGUgPSAwOworCisgICAgLy8gRGlzYWJsZSBu
YW1lIGhhc2hpbmcgYnkgZGVmYXVsdC4KKyAgICByZXNvdXJjZXMtPkhhc2hGdW5jdGlvbiA9IE5V
TEw7CiB9CiAKIC8vCkBAIC0yMjQsNiArMjI3LDIyIEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNo
SGFuZGxlIGhhbmRsZSwgU2hTaGFkZXJJbmZvIHBuYW1lLCBpbnQqIHBhcmFtcykKICAgICAgICAg
Ly8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgogICAgICAgICAqcGFyYW1z
ID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hf
TkFNRV9NQVhfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoK
KyAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDY0
IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKKyAgICAgICAg
ICAgIC8vIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgY29uc3QgY2hhciBIYXNoZWROYW1l
UHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAqcGFyYW1zID0gMTYg
KyBzaXplb2YoSGFzaGVkTmFtZVByZWZpeCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxl
ci0+Z2V0TmFtZU1hcCgpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICB9CiB9CkBAIC0yODMsMyArMzAyLDQ2IEBAIHZvaWQgU2hHZXRBY3Rp
dmVVbmlmb3JtKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKICAgICBnZXRWYXJpYWJsZUluZm8oU0hf
QUNUSVZFX1VOSUZPUk1TLAogICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGluZGV4LCBsZW5n
dGgsIHNpemUsIHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUpOwogfQorCit2b2lkIFNoR2V0TmFtZUhh
c2hpbmdFbnRyeShjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogaGFzaGVkTmFtZSkKK3sKKyAgICBpZiAo
IWhhbmRsZSB8fCAhbmFtZSB8fCAhaGFzaGVkTmFtZSB8fCBpbmRleCA8IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21w
aWxlcigpOworICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKKworICAgIGNvbnN0IE5hbWVNYXAm
IG5hbWVNYXAgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpOworICAgIGlmIChpbmRleCA+PSBzdGF0
aWNfY2FzdDxpbnQ+KG5hbWVNYXAuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuYW1lTWFwLmJlZ2luKCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBpbmRleDsgKytpKQorICAgICAgICArK2l0OworCisgICAgc2l6ZV90IGxlbiA9
IGl0LT5maXJzdC5sZW5ndGgoKSArIDE7CisgICAgaW50IG1heF9sZW4gPSAwOworICAgIFNoR2V0
SW5mbyhoYW5kbGUsIFNIX05BTUVfTUFYX0xFTkdUSCwgJm1heF9sZW4pOworICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KGxlbikgPiBtYXhfbGVuKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgIGxlbiA9IG1heF9sZW47CisgICAgfQorICAgIHN0cm5jcHkobmFtZSwgaXQtPmZpcnN0
LmNfc3RyKCksIGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRo
ZSBzb3VyY2UgaXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgbmFtZVtsZW5dID0gJ1wwJzsK
KworICAgIGxlbiA9IGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAxOworICAgIG1heF9sZW4gPSAwOwor
ICAgIFNoR2V0SW5mbyhoYW5kbGUsIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEgsICZtYXhfbGVu
KTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsZW4pID4gbWF4X2xlbikgeworICAgICAgICBB
U1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAgICBzdHJuY3B5
KGhhc2hlZE5hbWUsIGl0LT5zZWNvbmQuY19zdHIoKSwgbGVuKTsKKyAgICAvLyBUbyBiZSBvbiB0
aGUgc2FmZSBzaWRlIGluIGNhc2UgdGhlIHNvdXJjZSBpcyBsb25nZXIgdGhhbiBleHBlY3RlZC4K
KyAgICBoYXNoZWROYW1lW2xlbl0gPSAnXDAnOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKaW5kZXggNjhmMDI5ZC4uODQ3
YzFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5
bWJvbFRhYmxlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0yMCw5ICsyMCwxNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKIAotLy8KLS8vIFRUeXBlIGhlbHBlciBmdW5jdGlvbiBuZWVkcyBhIHBsYWNlIHRv
IGxpdmUuCi0vLworVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6CisgICAgICAg
ICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihwLnF1
YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJheSks
IGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAgICAgICBtYXhBcnJheVNpemUoMCksIGFy
cmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIGRl
ZXBlc3RTdHJ1Y3ROZXN0aW5nKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1l
KDApCit7CisgICAgaWYgKHAudXNlckRlZikgeworICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJE
ZWYtPmdldFN0cnVjdCgpOworICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNl
ckRlZi0+Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgY29tcHV0ZURlZXBlc3RTdHJ1
Y3ROZXN0aW5nKCk7CisgICAgfQorfQogCiAvLwogLy8gUmVjdXJzaXZlbHkgZ2VuZXJhdGUgbWFu
Z2xlZCBuYW1lcy4KQEAgLTkyLDYgKzk5LDI1IEBAIHZvaWQgVFR5cGU6OmNvbXB1dGVEZWVwZXN0
U3RydWN0TmVzdGluZygpCiAgICAgZGVlcGVzdFN0cnVjdE5lc3RpbmcgPSAxICsgbWF4TmVzdGlu
ZzsKIH0KIAorYm9vbCBUVHlwZTo6aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyID0gc3RydWN0
dXJlLT5iZWdpbigpOyBtZW1iZXIgIT0gc3RydWN0dXJlLT5lbmQoKTsgbWVtYmVyKyspCisgICAg
eworICAgICAgICBpZiAobWVtYmVyLT50eXBlLT5pc0FycmF5KCkgfHwKKyAgICAgICAgICAgIG1l
bWJlci0+dHlwZS0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gRHVtcCBmdW5jdGlvbnMuCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAppbmRleCAzMzYxNmRjLi5h
ODk0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
U3ltYm9sVGFibGUuaApAQCAtMjk4LDYgKzI5OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzeW1ib2w7CiAgICAgfQogCisgICAgVFN5bWJvbCAqZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsKKyAg
ICB9CisKICAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xvYmFsTGV2ZWwoKSB7CiAgICAgICAg
IGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CiAgICAgICAgIHJldHVybiB0YWJsZVsxXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9y
RVNTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwCmluZGV4IGQ5MGM3MGMuLmE0ZjA0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcApAQCAtMjYs
NyArMjYsNyBAQCB2b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJv
b3QpIHsKICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9u
RGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAg
IFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luayk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNT
TChzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgp
KTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0RVNTTCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCmlu
ZGV4IGJhMzgxMTIuLjVmM2RiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcApAQCAtMzksNiArMzksNiBAQCB2
b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBn
ZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihz
aW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNM
IG91dHB1dEdMU0woc2luayk7CisgICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKICAgICByb290
LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UeXBlcy5oCmluZGV4IGUxYTE4ZmQuLmQ0NTc2NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSwxMCArMTEsMTIgQEAKICNp
bmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgog
CitjbGFzcyBUVHlwZTsKK3N0cnVjdCBUUHVibGljVHlwZTsKKwogLy8KIC8vIE5lZWQgdG8gaGF2
ZSBhc3NvY2lhdGlvbiBvZiBsaW5lIG51bWJlcnMgdG8gdHlwZXMgaW4gYSBsaXN0IGZvciBidWls
ZGluZyBzdHJ1Y3RzLgogLy8KLWNsYXNzIFRUeXBlOwogc3RydWN0IFRUeXBlTGluZSB7CiAgICAg
VFR5cGUqIHR5cGU7CiAgICAgaW50IGxpbmU7CkBAIC0yNyw1OSArMjksMTQgQEAgaW5saW5lIFRU
eXBlTGlzdCogTmV3UG9vbFRUeXBlTGlzdCgpCiAgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRUeXBl
TGlzdDsKIH0KIAotLy8KLS8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gd2l0
aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKLS8vIHR5cGVzIHRoYXQgaXQgdGhpbmtz
IGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQgc2hvdWxkCi0vLyBqdXN0IGJlIHVz
ZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5vdCBhbnl0aGluZyBlbHNlLiAgUG9p
bnRlcnMKLS8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRyeWluZyB0byBhdm9pZCBsb3RzIG9m
IG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgotLy8KLS8vIE5vdCBhcyBiYWQgYXMgaXQgbG9v
a3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpZWxkcwotLy8gbWF0
Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgotLy8KLWNs
YXNzIFRQdWJsaWNUeXBlIHsKLXB1YmxpYzoKLSAgICBUQmFzaWNUeXBlIHR5cGU7Ci0gICAgVFF1
YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgaW50IHNp
emU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJy
YXkKLSAgICBib29sIG1hdHJpeDsKLSAgICBib29sIGFycmF5OwotICAgIGludCBhcnJheVNpemU7
Ci0gICAgVFR5cGUqIHVzZXJEZWY7Ci0gICAgaW50IGxpbmU7Ci0KLSAgICB2b2lkIHNldEJhc2lj
KFRCYXNpY1R5cGUgYnQsIFRRdWFsaWZpZXIgcSwgaW50IGxuID0gMCkKLSAgICB7Ci0gICAgICAg
IHR5cGUgPSBidDsKLSAgICAgICAgcXVhbGlmaWVyID0gcTsKLSAgICAgICAgcHJlY2lzaW9uID0g
RWJwVW5kZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7
Ci0gICAgICAgIGFycmF5ID0gZmFsc2U7Ci0gICAgICAgIGFycmF5U2l6ZSA9IDA7Ci0gICAgICAg
IHVzZXJEZWYgPSAwOwotICAgICAgICBsaW5lID0gbG47Ci0gICAgfQotCi0gICAgdm9pZCBzZXRB
Z2dyZWdhdGUoaW50IHMsIGJvb2wgbSA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7
Ci0gICAgICAgIG1hdHJpeCA9IG07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShib29sIGEs
IGludCBzID0gMCkKLSAgICB7Ci0gICAgICAgIGFycmF5ID0gYTsKLSAgICAgICAgYXJyYXlTaXpl
ID0gczsKLSAgICB9Ci19OwotCiB0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj4g
VFN0cnVjdHVyZU1hcDsKIHR5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlwZUxpc3QqPjo6aXRl
cmF0b3IgVFN0cnVjdHVyZU1hcEl0ZXJhdG9yOworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhp
bmdzIHRoYXQgaGF2ZSBhIHR5cGUuCiAvLwotY2xhc3MgVFR5cGUgeworY2xhc3MgVFR5cGUKK3sK
IHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0
b3IpCiAgICAgVFR5cGUoKSB7fQpAQCAtODgsMTYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgc3RydWN0dXJlKDAp
LCBzdHJ1Y3R1cmVTaXplKDApLCBkZWVwZXN0U3RydWN0TmVzdGluZygwKSwgZmllbGROYW1lKDAp
LCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgVFR5
cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJl
Y2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUp
LCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXpl
KSwKLSAgICAgICAgICAgIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCks
IHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCks
IGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKLSAgICB7Ci0gICAgICAgIGlm
IChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3Ry
dWN0KCk7Ci0gICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHAudXNlckRlZi0+
Z2V0VHlwZU5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbXB1dGVEZWVwZXN0U3RydWN0
TmVzdGluZygpOwotICAgICAgICB9Ci0gICAgfQorICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQ
dWJsaWNUeXBlICZwKTsKICAgICBUVHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJp
bmcmIG4sIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgogICAgICAgICAgICAgdHlwZShF
YnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEp
LCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKICAgICAgICAgICAg
IG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIHN0cnVjdHVyZSh1c2Vy
RGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVjdE5lc3RpbmcoMCksIGZpZWxkTmFt
ZSgwKSwgbWFuZ2xlZCgwKQpAQCAtMjg0LDYgKzIzMiw4IEBAIHB1YmxpYzoKICAgICAvLyBkZWVw
ZXN0IGZpZWxkIChuZXN0aW5nMi5maWVsZDEucG9zaXRpb24pLgogICAgIGludCBnZXREZWVwZXN0
U3RydWN0TmVzdGluZygpIGNvbnN0IHsgcmV0dXJuIGRlZXBlc3RTdHJ1Y3ROZXN0aW5nOyB9CiAK
KyAgICBib29sIGlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpIGNvbnN0OworCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBidWlsZE1hbmdsZWROYW1lKFRTdHJpbmcmKTsKICAgICBpbnQgZ2V0U3Ry
dWN0U2l6ZSgpIGNvbnN0OwpAQCAtMzA4LDQgKzI1OCw2MSBAQCBwcm90ZWN0ZWQ6CiAgICAgVFN0
cmluZyAqdHlwZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgdHlwZSBuYW1l
CiB9OwogCisvLworLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSB3aXRoIHRo
ZSB5YWNjIHN0YWNrLCAgSXQgY2FuJ3QgaGF2ZQorLy8gdHlwZXMgdGhhdCBpdCB0aGlua3MgaGF2
ZSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvcnMuICBJdCBzaG91bGQKKy8vIGp1c3QgYmUgdXNlZCB3
aGlsZSByZWNvZ25pemluZyB0aGUgZ3JhbW1hciwgbm90IGFueXRoaW5nIGVsc2UuICBQb2ludGVy
cworLy8gY291bGQgYmUgdXNlZCwgYnV0IGFsc28gdHJ5aW5nIHRvIGF2b2lkIGxvdHMgb2YgbWVt
b3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCisvLworLy8gTm90IGFzIGJhZCBhcyBpdCBsb29rcywg
dGhlcmUgaXMgbm8gYWN0dWFsIGFzc3VtcHRpb24gdGhhdCB0aGUgZmllbGRzCisvLyBtYXRjaCB1
cCBvciBhcmUgbmFtZSB0aGUgc2FtZSBvciBhbnl0aGluZyBsaWtlIHRoYXQuCisvLworc3RydWN0
IFRQdWJsaWNUeXBlCit7CisgICAgVEJhc2ljVHlwZSB0eXBlOworICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOworICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgIGludCBzaXplOyAgICAgICAg
ICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5CisgICAgYm9v
bCBtYXRyaXg7CisgICAgYm9vbCBhcnJheTsKKyAgICBpbnQgYXJyYXlTaXplOworICAgIFRUeXBl
KiB1c2VyRGVmOworICAgIGludCBsaW5lOworCisgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBl
IGJ0LCBUUXVhbGlmaWVyIHEsIGludCBsbiA9IDApCisgICAgeworICAgICAgICB0eXBlID0gYnQ7
CisgICAgICAgIHF1YWxpZmllciA9IHE7CisgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5l
ZDsKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBh
cnJheSA9IGZhbHNlOworICAgICAgICBhcnJheVNpemUgPSAwOworICAgICAgICB1c2VyRGVmID0g
MDsKKyAgICAgICAgbGluZSA9IGxuOworICAgIH0KKworICAgIHZvaWQgc2V0QWdncmVnYXRlKGlu
dCBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNpemUgPSBzOworICAgICAgICBt
YXRyaXggPSBtOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDAp
CisgICAgeworICAgICAgICBhcnJheSA9IGE7CisgICAgICAgIGFycmF5U2l6ZSA9IHM7CisgICAg
fQorCisgICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCF1c2VyRGVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVDb250
YWluaW5nQXJyYXlzKCk7CisgICAgfQorfTsKKwogI2VuZGlmIC8vIF9UWVBFU19JTkNMVURFRF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRT
aG9ydENpcmN1aXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Vu
Zm9sZFNob3J0Q2lyY3VpdC5jcHAKaW5kZXggMTc4MmViYy4uZTIyYTc1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0Q2lyY3VpdC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNob3J0
Q2lyY3VpdC5jcHAKQEAgLTk1LDkgKzk1LDkgQEAgYm9vbCBVbmZvbGRTaG9ydENpcmN1aXQ6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogICAgICAgICAgICAg
bVRlbXBvcmFyeUluZGV4ID0gaSArIDE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCi0gICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKaW5kZXggMWU5NDg2
Zi4uZWI2YmVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1ZhcmlhYmxlSW5mby5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlSW5mby5jcHAKQEAgLTc3LDIzICs3NywyNSBAQCBzdGF0aWMgdm9pZCBn
ZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogc3RhdGljIHZvaWQgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0
JiBpbmZvTGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFy
aWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CiAKIC8vIFJldHVybnMgaW5m
byBmb3IgYW4gYXR0cmlidXRlIG9yIHVuaWZvcm0uCiBzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUlu
Zm8oY29uc3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
JiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rp
b242NCBoYXNoRnVuY3Rpb24pCiB7CiAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CiAgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7CiAgICAgICAgICAg
ICAgICAgVFN0cmluZyBsbWFwcGVkTmFtZSA9IG1hcHBlZE5hbWUgKyBhcnJheUJyYWNrZXRzKGkp
OwotICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIGxuYW1l
LCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgIGdldFVzZXJEZWZpbmVk
VmFyaWFibGVJbmZvKHR5cGUsIGxuYW1lLCBsbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5j
dGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnZXRV
c2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBwZWROYW1lLCBpbmZvTGlzdCk7
CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBuYW1lLCBtYXBw
ZWROYW1lLCBpbmZvTGlzdCwgaGFzaEZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwg
aW5mb0xpc3QpOwpAQCAtMTI0LDcgKzEyNiw4IEBAIHZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5m
byhjb25zdCBUVHlwZSYgdHlwZSwKIHZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29u
c3QgVFR5cGUmIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
dHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKICAgICBBU1NFUlQodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwogCkBAIC0xMzMsMTUgKzEzNiwyOCBAQCB2b2lkIGdl
dFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogICAgICAgICBjb25z
dCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CiAgICAgICAgIGdldFZh
cmlhYmxlSW5mbygqZmllbGRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArICIu
IiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBt
YXBwZWROYW1lICsgIi4iICsgZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9MaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZE5h
bWUgKyAiLiIgKyBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKGZpZWxkVHlwZS0+Z2V0RmllbGROYW1l
KCksIGhhc2hGdW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc2hGdW5jdGlvbik7CiAgICAgfQogfQogCitUVmFyaWFi
bGVJbmZvOjpUVmFyaWFibGVJbmZvKCkKK3sKK30KKworVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxl
SW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKQorICAgIDogdHlwZSh0eXBlKSwKKyAgICAg
IHNpemUoc2l6ZSkKK3sKK30KKwogQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6Q29sbGVjdEF0dHJp
YnNVbmlmb3JtcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1z
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFi
bGVJbmZvTGlzdCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogICAgIDogbUF0dHJp
YnMoYXR0cmlicyksCi0gICAgICBtVW5pZm9ybXModW5pZm9ybXMpCisgICAgICBtVW5pZm9ybXMo
dW5pZm9ybXMpLAorICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pCiB7CiB9CiAKQEAg
LTE5NiwxMCArMjEyLDE2IEBAIGJvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRBZ2dy
ZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8g
Y2Fubm90IGJlIGluaXRpYWxpemVkIGluIGEgc2hhZGVyLCB3ZSBtdXN0IGhhdmUgb25seQogICAg
ICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZXMgaW4gdGhlIHNlcXVlbmNlLgogICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBU
U3RyaW5nIHByb2Nlc3NlZFN5bWJvbDsKKyAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlv
biA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJs
ZS0+Z2V0U3ltYm9sKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRP
cmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJp
YWJsZUluZm8odmFyaWFibGUtPmdldFR5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRTeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaAppbmRleCA2NjdhY2FmLi40
MTMwYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVJbmZvLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1ZhcmlhYmxlSW5mby5oCkBAIC0xMyw2ICsxMyw5IEBACiAvLyBQcm92aWRlcyBpbmZvcm1hdGlv
biBhYm91dCBhIHZhcmlhYmxlLgogLy8gSXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3Rv
cmUgaW5mbyBhYm91dCBhY3RpdmUgYXR0cmlicyBhbmQgdW5pZm9ybXMuCiBzdHJ1Y3QgVFZhcmlh
YmxlSW5mbyB7CisgICAgVFZhcmlhYmxlSW5mbyhTaERhdGFUeXBlIHR5cGUsIGludCBzaXplKTsK
KyAgICBUVmFyaWFibGVJbmZvKCk7CisKICAgICBUUGVyc2lzdFN0cmluZyBuYW1lOwogICAgIFRQ
ZXJzaXN0U3RyaW5nIG1hcHBlZE5hbWU7CiAgICAgU2hEYXRhVHlwZSB0eXBlOwpAQCAtMjQsNyAr
MjcsOCBAQCB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRWYXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9M
aXN0OwogY2xhc3MgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
c2VyIHsKIHB1YmxpYzoKICAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zKFRWYXJpYWJsZUluZm9M
aXN0JiBhdHRyaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xp
c3QmIHVuaWZvcm1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiB1bmlmb3JtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29u
c3RhbnRVbmlvbiopOwpAQCAtMzgsNiArNDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRW
YXJpYWJsZUluZm9MaXN0JiBtQXR0cmliczsKICAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVVuaWZv
cm1zOworCisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOwogfTsKIAogI2VuZGlm
ICAvLyBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBjNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmNwcApAQCAtMCww
ICsxLDI5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKyNpbmNsdWRlICJjb21waWxlci9WYXJpYWJs
ZVBhY2tlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgImNvbXBpbGVyL1No
SGFuZGxlLmgiCisKK25hbWVzcGFjZSB7CitpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0Ogor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNh
c2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgICAgIHJldHVy
biAzOworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAg
ICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9JTlQ6CisgICAgICAgIGNhc2UgU0hfQk9P
TDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJf
Q1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKKyAgICAgICAgY2Fz
ZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
IDc7CisgICAgfQorfQorfSAgICAvLyBuYW1lc3BhY2UKKworaW50IFZhcmlhYmxlUGFja2VyOjpH
ZXROdW1Db21wb25lbnRzUGVyUm93KFNoRGF0YVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9JTlRf
VkVDNDoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gNDsK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6
CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgor
ICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoKKyAgICAg
ICAgY2FzZSBTSF9JTlRfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzI6CisgICAgICAg
ICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBTSF9GTE9BVDoKKyAgICAgICAgY2FzZSBTSF9J
TlQ6CisgICAgICAgIGNhc2UgU0hfQk9PTDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEOgor
ICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0VY
VEVSTkFMX09FUzoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOgorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgfQorfQorCitpbnQgVmFyaWFibGVQYWNr
ZXI6OkdldE51bVJvd3MoU2hEYXRhVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAg
ICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUM0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CisgICAgICAgIGNhc2UgU0hf
SU5UX1ZFQzM6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIFNIX0ZM
T0FUX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfQk9P
TF9WRUMyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUOgorICAgICAgICBjYXNlIFNIX0lOVDoKKyAg
ICAgICAgY2FzZSBTSF9CT09MOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkQ6CisgICAgICAg
IGNhc2UgU0hfU0FNUExFUl9DVUJFOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfRVhURVJOQUxf
T0VTOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkI6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm4gMTAwMDAwOworICAgIH0KK30KKworc3RydWN0IFRWYXJpYWJsZUlu
Zm9Db21wYXJlciB7CisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFRWYXJpYWJsZUluZm8mIGxo
cywgY29uc3QgVFZhcmlhYmxlSW5mbyYgcmhzKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGxo
c1NvcnRPcmRlciA9IEdldFNvcnRPcmRlcihsaHMudHlwZSk7CisgICAgICAgIGludCByaHNTb3J0
T3JkZXIgPSBHZXRTb3J0T3JkZXIocmhzLnR5cGUpOworICAgICAgICBpZiAobGhzU29ydE9yZGVy
ICE9IHJoc1NvcnRPcmRlcikgeworICAgICAgICAgICAgcmV0dXJuIGxoc1NvcnRPcmRlciA8IHJo
c1NvcnRPcmRlcjsKKyAgICAgICAgfQorICAgICAgICAvLyBTb3J0IGJ5IGxhcmdlc3QgZmlyc3Qu
CisgICAgICAgIHJldHVybiBsaHMuc2l6ZSA+IHJocy5zaXplOworICAgIH0KK307CisKK3Vuc2ln
bmVkIFZhcmlhYmxlUGFja2VyOjptYWtlQ29sdW1uRmxhZ3MoaW50IGNvbHVtbiwgaW50IG51bUNv
bXBvbmVudHNQZXJSb3cpCit7CisgICAgcmV0dXJuICgoa0NvbHVtbk1hc2sgPDwgKGtOdW1Db2x1
bW5zIC0gbnVtQ29tcG9uZW50c1BlclJvdykpICYKKyAgICAgICAgICAgICAgICAgICAga0NvbHVt
bk1hc2spID4+IGNvbHVtbjsKK30KKwordm9pZCBWYXJpYWJsZVBhY2tlcjo6ZmlsbENvbHVtbnMo
aW50IHRvcFJvdywgaW50IG51bVJvd3MsIGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVy
Um93KQoreworICAgIHVuc2lnbmVkIGNvbHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVt
biwgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBudW1Sb3dz
OyArK3IpIHsKKyAgICAgICAgaW50IHJvdyA9IHRvcFJvdyArIHI7CisgICAgICAgIEFTU0VSVCgo
cm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9PSAwKTsKKyAgICAgICAgcm93c19bcm93XSB8PSBj
b2x1bW5GbGFnczsKKyAgICB9Cit9CisKK2Jvb2wgVmFyaWFibGVQYWNrZXI6OnNlYXJjaENvbHVt
bihpbnQgY29sdW1uLCBpbnQgbnVtUm93cywgaW50KiBkZXN0Um93LCBpbnQqIGRlc3RTaXplKQor
eworICAgIEFTU0VSVChkZXN0Um93KTsKKworICAgIGZvciAoOyB0b3BOb25GdWxsUm93XyA8IG1h
eFJvd3NfICYmIHJvd3NfW3RvcE5vbkZ1bGxSb3dfXSA9PSBrQ29sdW1uTWFzazsKKyAgICAgICAg
ICsrdG9wTm9uRnVsbFJvd18pIHsKKyAgICB9CisKKyAgICBmb3IgKDsgYm90dG9tTm9uRnVsbFJv
d18gPj0gMCAmJiByb3dzX1tib3R0b21Ob25GdWxsUm93X10gPT0ga0NvbHVtbk1hc2s7CisgICAg
ICAgICAtLWJvdHRvbU5vbkZ1bGxSb3dfKSB7CisgICAgfQorCisgICAgaWYgKGJvdHRvbU5vbkZ1
bGxSb3dfIC0gdG9wTm9uRnVsbFJvd18gKyAxIDwgbnVtUm93cykgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgY29sdW1uRmxhZ3MgPSBtYWtlQ29sdW1uRmxh
Z3MoY29sdW1uLCAxKTsKKyAgICBpbnQgdG9wR29vZFJvdyA9IDA7CisgICAgaW50IHNtYWxsZXN0
R29vZFRvcCA9IC0xOworICAgIGludCBzbWFsbGVzdEdvb2RTaXplID0gbWF4Um93c18gKyAxOwor
ICAgIGludCBib3R0b21Sb3cgPSBib3R0b21Ob25GdWxsUm93XyArIDE7CisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgIGZvciAoaW50IHJvdyA9IHRvcE5vbkZ1bGxSb3dfOyByb3cgPD0gYm90
dG9tUm93OyArK3JvdykgeworICAgICAgICBib29sIHJvd0VtcHR5ID0gcm93IDwgYm90dG9tUm93
ID8gKChyb3dzX1tyb3ddICYgY29sdW1uRmxhZ3MpID09IDApIDogZmFsc2U7CisgICAgICAgIGlm
IChyb3dFbXB0eSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAg
IHRvcEdvb2RSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgaW50IHNpemUgPSByb3cgLSB0b3BHb29kUm93OworICAgICAgICAgICAgICAg
IGlmIChzaXplID49IG51bVJvd3MgJiYgc2l6ZSA8IHNtYWxsZXN0R29vZFNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc21hbGxlc3RHb29kU2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAg
ICAgIHNtYWxsZXN0R29vZFRvcCA9IHRvcEdvb2RSb3c7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoc21hbGxlc3RHb29kVG9wIDwgMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKmRlc3RSb3cgPSBzbWFsbGVzdEdvb2RUb3A7CisgICAgaWYgKGRlc3RTaXpl
KSB7CisgICAgICAgICpkZXN0U2l6ZSA9IHNtYWxsZXN0R29vZFNpemU7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFZhcmlhYmxlUGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhp
blBhY2tpbmdMaW1pdHMoaW50IG1heFZlY3RvcnMsIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpCit7CisgICAgQVNTRVJUKG1heFZlY3RvcnMgPiAwKTsKKyAgICBtYXhSb3dz
XyA9IG1heFZlY3RvcnM7CisgICAgdG9wTm9uRnVsbFJvd18gPSAwOworICAgIGJvdHRvbU5vbkZ1
bGxSb3dfID0gbWF4Um93c18gLSAxOworICAgIFRWYXJpYWJsZUluZm9MaXN0IHZhcmlhYmxlcyhp
bl92YXJpYWJsZXMpOworCisgICAgLy8gQXMgcGVyIEdMU0wgMS4wMTcgQXBwZW5kaXggQSwgU2Vj
dGlvbiA3IHZhcmlhYmxlcyBhcmUgcGFja2VkIGluIHNwZWNpZmljCisgICAgLy8gb3JkZXIgYnkg
dHlwZSwgdGhlbiBieSBzaXplIG9mIGFycmF5LCBsYXJnZXN0IGZpcnN0LgorICAgIHN0ZDo6c29y
dCh2YXJpYWJsZXMuYmVnaW4oKSwgdmFyaWFibGVzLmVuZCgpLCBUVmFyaWFibGVJbmZvQ29tcGFy
ZXIoKSk7CisgICAgcm93c18uY2xlYXIoKTsKKyAgICByb3dzXy5yZXNpemUobWF4VmVjdG9ycywg
MCk7CisKKyAgICAvLyBQYWNrcyB0aGUgNCBjb2x1bW4gdmFyaWFibGVzLgorICAgIHNpemVfdCBp
aSA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07CisgICAgICAg
IGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDQpIHsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRvcE5vbkZ1bGxSb3dfICs9IEdldE51
bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAgIGlmICh0
b3BOb25GdWxsUm93XyA+IG1heFJvd3NfKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBQYWNrcyB0aGUgMyBjb2x1bW4gdmFyaWFibGVzLgorICAgIGludCBudW0zQ29s
dW1uUm93cyA9IDA7CisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07Cisg
ICAgICAgIGlmIChHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDMpIHsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG51bTNDb2x1bW5Sb3dzICs9
IEdldE51bVJvd3ModmFyaWFibGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgIH0KKworICAg
IGlmICh0b3BOb25GdWxsUm93XyArIG51bTNDb2x1bW5Sb3dzID4gbWF4Um93c18pIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZpbGxDb2x1bW5zKHRvcE5vbkZ1bGxSb3df
LCBudW0zQ29sdW1uUm93cywgMCwgMyk7CisKKyAgICAvLyBQYWNrcyB0aGUgMiBjb2x1bW4gdmFy
aWFibGVzLgorICAgIGludCB0b3AyQ29sdW1uUm93ID0gdG9wTm9uRnVsbFJvd18gKyBudW0zQ29s
dW1uUm93czsKKyAgICBpbnQgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSA9IG1heFJvd3NfIC0gdG9w
MkNvbHVtblJvdzsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczAxID0gdHdvQ29sdW1u
Um93c0F2YWlsYWJsZTsKKyAgICBpbnQgcm93c0F2YWlsYWJsZUluQ29sdW1uczIzID0gdHdvQ29s
dW1uUm93c0F2YWlsYWJsZTsKKyAgICBmb3IgKDsgaWkgPCB2YXJpYWJsZXMuc2l6ZSgpOyArK2lp
KSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2lp
XTsKKyAgICAgICAgaWYgKEdldE51bUNvbXBvbmVudHNQZXJSb3codmFyaWFibGUudHlwZSkgIT0g
MikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IG51bVJvd3Mg
PSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICAgICAgaWYg
KG51bVJvd3MgPD0gcm93c0F2YWlsYWJsZUluQ29sdW1uczAxKSB7CisgICAgICAgICAgICByb3dz
QXZhaWxhYmxlSW5Db2x1bW5zMDEgLT0gbnVtUm93czsKKyAgICAgICAgfSBlbHNlIGlmIChudW1S
b3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMykgeworICAgICAgICAgICAgcm93c0F2YWls
YWJsZUluQ29sdW1uczIzIC09IG51bVJvd3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgbnVtUm93c1VzZWRJ
bkNvbHVtbnMwMSA9CisgICAgICAgIHR3b0NvbHVtblJvd3NBdmFpbGFibGUgLSByb3dzQXZhaWxh
YmxlSW5Db2x1bW5zMDE7CisgICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMjMgPQorICAgICAg
ICB0d29Db2x1bW5Sb3dzQXZhaWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczIzOworICAg
IGZpbGxDb2x1bW5zKHRvcDJDb2x1bW5Sb3csIG51bVJvd3NVc2VkSW5Db2x1bW5zMDEsIDAsIDIp
OworICAgIGZpbGxDb2x1bW5zKG1heFJvd3NfIC0gbnVtUm93c1VzZWRJbkNvbHVtbnMyMywgbnVt
Um93c1VzZWRJbkNvbHVtbnMyMywKKyAgICAgICAgICAgICAgICAyLCAyKTsKKworICAgIC8vIFBh
Y2tzIHRoZSAxIGNvbHVtbiB2YXJpYWJsZXMuCisgICAgZm9yICg7IGlpIDwgdmFyaWFibGVzLnNp
emUoKTsgKytpaSkgeworICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2YXJpYWJsZSA9IHZh
cmlhYmxlc1tpaV07CisgICAgICAgIEFTU0VSVCgxID09IEdldE51bUNvbXBvbmVudHNQZXJSb3co
dmFyaWFibGUudHlwZSkpOworICAgICAgICBpbnQgbnVtUm93cyA9IEdldE51bVJvd3ModmFyaWFi
bGUudHlwZSkgKiB2YXJpYWJsZS5zaXplOworICAgICAgICBpbnQgc21hbGxlc3RDb2x1bW4gPSAt
MTsKKyAgICAgICAgaW50IHNtYWxsZXN0U2l6ZSA9IG1heFJvd3NfICsgMTsKKyAgICAgICAgaW50
IHRvcFJvdyA9IC0xOworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBrTnVt
Q29sdW1uczsgKytjb2x1bW4pIHsKKyAgICAgICAgICAgIGludCByb3cgPSAwOworICAgICAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICAgICAgaWYgKHNlYXJjaENvbHVtbihjb2x1bW4sIG51
bVJvd3MsICZyb3csICZzaXplKSkgeworICAgICAgICAgICAgICAgIGlmIChzaXplIDwgc21hbGxl
c3RTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0U2l6ZSA9IHNpemU7CisgICAg
ICAgICAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1uID0gY29sdW1uOworICAgICAgICAgICAgICAg
ICAgICB0b3BSb3cgPSByb3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNtYWxsZXN0Q29sdW1uIDwgMCkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZmlsbENvbHVtbnModG9wUm93LCBu
dW1Sb3dzLCBzbWFsbGVzdENvbHVtbiwgMSk7CisgICAgfQorCisgICAgQVNTRVJUKHZhcmlhYmxl
cy5zaXplKCkgPT0gaWkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODcwNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIu
aApAQCAtMCwwICsxLDQxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIF9WQVJJQUJM
RVBBQ0tFUl9JTkNMVURFRF8KKyNkZWZpbmUgX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXworCisj
aW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCisKK2NsYXNz
IFZhcmlhYmxlUGFja2VyIHsKKyBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXNzZWQgaW4gdmFyaWFibGVzIHBhY2sgaW4gbWF4VmVjdG9ycyBmb2xsb3dpbmcKKyAgICAvLyB0
aGUgcGFja2luZyBydWxlcyBmcm9tIHRoZSBHTFNMIDEuMDE3IHNwZWMsIEFwcGVuZGl4IEEsIHNl
Y3Rpb24gNy4KKyAgICBib29sIENoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cygKKyAg
ICAgICAgaW50IG1heFZlY3RvcnMsCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBp
bl92YXJpYWJsZXMpOworCisgICAgLy8gR2V0cyBob3cgbWFueSBjb21wb25lbnRzIGluIGEgcm93
IGEgZGF0YSB0eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtQ29tcG9uZW50c1BlclJv
dyhTaERhdGFUeXBlIHR5cGUpOworCisgICAgLy8gR2V0cyBob3cgbWFueSByb3dzIGEgZGF0YSB0
eXBlIHRha2VzLgorICAgIHN0YXRpYyBpbnQgR2V0TnVtUm93cyhTaERhdGFUeXBlIHR5cGUpOwor
CisgcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1Db2x1bW5zID0gNDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga0NvbHVtbk1hc2sgPSAoMSA8PCBrTnVtQ29sdW1ucykgLSAx
OworCisgICAgdW5zaWduZWQgbWFrZUNvbHVtbkZsYWdzKGludCBjb2x1bW4sIGludCBudW1Db21w
b25lbnRzUGVyUm93KTsKKyAgICB2b2lkIGZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1S
b3dzLCBpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgYm9vbCBzZWFy
Y2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCogZGVzdFJvdywgaW50KiBkZXN0
U2l6ZSk7CisKKyAgICBpbnQgdG9wTm9uRnVsbFJvd187CisgICAgaW50IGJvdHRvbU5vbkZ1bGxS
b3dfOworICAgIGludCBtYXhSb3dzXzsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZD4gcm93c187
Cit9OworCisjZW5kaWYgLy8gX1ZBUklBQkxFUEFDS0VSX0lOQ0xVREVEXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKaW5kZXgg
MjZjZWUwNS4uN2E4MmJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDE3ICs5LDIyIEBACiBzdGF0aWMgY29uc3Qg
aW50IEdMU0xfVkVSU0lPTl8xMTAgPSAxMTA7CiBzdGF0aWMgY29uc3QgaW50IEdMU0xfVkVSU0lP
Tl8xMjAgPSAxMjA7CiAKLS8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhyZWUgdGhpbmdzOgorLy8g
V2UgbmVlZCB0byBzY2FuIGZvciB0aGUgZm9sbG93aW5nOgogLy8gMS4gImludmFyaWFudCIga2V5
d29yZDogVGhpcyBjYW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cwogLy8gICAgYnV0IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KIC8vIDIuICJnbF9Qb2ludENv
b3JkIiBidWlsdC1pbiB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBz
aGFkZXIKIC8vICAgIGJ1dCBpbnNpZGUgYW55IHNjb3BlLgogLy8gMy4gQ2FsbCB0byBhIG1hdHJp
eCBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAgKFRo
ZXNlIGNvbnN0cnVjdG9ycyB3ZXJlIHJlc2VydmVkIGluIEdMU0wgdmVyc2lvbiAxLjEwLikKLS8v
Ci0vLyBJZiBpdCB3ZXJlbid0IGZvciAoMykgdGhlbiB3ZSB3b3VsZCBvbmx5IG5lZWQgdG8gc2Nh
biB0aGUgZ2xvYmFsCi0vLyBzY29wZSBvZiB0aGUgdmVydGV4IHNoYWRlci4gSG93ZXZlciwgd2Ug
bmVlZCB0byBzY2FuIHRoZSBlbnRpcmUKLS8vIHNoYWRlciBpbiBib3RoIGNhc2VzLgorLy8gNC4g
QXJyYXlzIGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisvLyAgICBHTFNMIHNwZWMgc2Vj
dGlvbiA2LjEuMTogIldoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLCBleHByZXNzaW9ucyB0aGF0IGRv
CisvLyAgICBub3QgZXZhbHVhdGUgdG8gbC12YWx1ZXMgY2Fubm90IGJlIHBhc3NlZCB0byBwYXJh
bWV0ZXJzIGRlY2xhcmVkIGFzCisvLyAgICBvdXQgb3IgaW5vdXQuIgorLy8gICAgR0xTTCAxLjEg
c2VjdGlvbiA1Ljg6ICJPdGhlciBiaW5hcnkgb3IgdW5hcnkgZXhwcmVzc2lvbnMsCisvLyAgICBu
b24tZGVyZWZlcmVuY2VkIGFycmF5cywgZnVuY3Rpb24gbmFtZXMsIHN3aXp6bGVzIHdpdGggcmVw
ZWF0ZWQgZmllbGRzLAorLy8gICAgYW5kIGNvbnN0YW50cyBjYW5ub3QgYmUgbC12YWx1ZXMuIgor
Ly8gICAgR0xTTCAxLjIgcmVsYXhlZCB0aGUgcmVzdHJpY3Rpb24gb24gYXJyYXlzLCBzZWN0aW9u
IDUuODogIlZhcmlhYmxlcyB0aGF0CisvLyAgICBhcmUgYnVpbHQtaW4gdHlwZXMsIGVudGlyZSBz
dHJ1Y3R1cmVzIG9yIGFycmF5cy4uLiBhcmUgYWxsIGwtdmFsdWVzLiIKIC8vCiAvLyBUT0RPKGFs
b2twKTogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgb2YgaW52YXJpYW50IGRlY2FsYXJhdGlvbiBn
ZXQgbG9zdAogLy8gZHVyaW5nIHBhcnNpbmcgLSB0aGV5IGRvIG5vdCBnZXQgY2FycmllZCBvdmVy
IHRvIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KQEAgLTc5LDYgKzg0LDI2IEBAIGJvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIH0KKyAgICAgIGNhc2UgRU9wUGFyYW1ldGVy
czogeworICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHBhcmFtcyA9IG5vZGUtPmdldFNl
cXVlbmNlKCk7CisgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gcGFyYW1zLmJlZ2luKCk7CisgICAgICAgICAgICAgaXRlciAhPSBwYXJhbXMuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEludGVybVR5cGVkKiBwYXJh
bSA9ICgqaXRlciktPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS0+aXNBcnJh
eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
ID0gcGFyYW0tPmdldFF1YWxpZmllcigpOworICAgICAgICAgICAgICAgIGlmICgocXVhbGlmaWVy
ID09IEV2cU91dCkgfHwgKHF1YWxpZmllciA9PSAgRXZxSW5PdXQpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEZ1bGx5IHByb2Nlc3NlZC4gTm8gbmVlZCB0byB2
aXNpdCBjaGlsZHJlbi4KKyAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MzoKICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAppbmRl
eCAzNzZmY2I4Li4xYzFjYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaApAQCAtMjIsMTQgKzIyLDE4IEBACiAvLyAgIC0gYysr
IHN0eWxlIG5hbWUgaGlkaW5nIHJ1bGVzLgogLy8gICAtIGJ1aWx0LWluIHZhcmlhYmxlIGdsX1Bv
aW50Q29vcmQgZm9yIGZyYWdtZW50IHNoYWRlcnMuCiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9y
cyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgorLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0
aW9uIHBhcmFtZXRlcnMKIC8vCiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CiBwdWJsaWM6CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsK
IAotICAgIC8vIFJldHVybnMgMTIwIGlmICJpbnZhcmlhbnQiIGtleXdvcmQsICJnbF9Qb2ludENv
b3JkIiwgb3IKLSAgICAvLyBtYXRyaXgvbWF0cml4IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCBpbiB0
aGUgc2hhZGVyLiBFbHNlIDExMCBpcwotICAgIC8vIHJldHVybmVkLgorICAgIC8vIFJldHVybnMg
MTIwIGlmIHRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0aGUgc2hhZGVyOgorICAgIC8vIC0gImludmFy
aWFudCIsCisgICAgLy8gLSAiZ2xfUG9pbnRDb29yZCIsCisgICAgLy8gLSBtYXRyaXgvbWF0cml4
IGNvbnN0cnVjdG9ycworICAgIC8vIC0gYXJyYXkgIm91dCIgcGFyYW1ldGVycworICAgIC8vIEVs
c2UgMTEwIGlzIHJldHVybmVkLgogICAgIGludCBnZXRWZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNp
b247IH0KIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5s
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAppbmRleCBi
OWEzMDJkLi44MzAwZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwKQEAgLTM4LDcgKzM4LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNM
IEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgogJXsKICNpbmNsdWRlICJjb21waWxlci9nbHNs
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImds
c2xhbmdfdGFiLmgiCiAKQEAgLTI3MiwxNDggKzI3MiwxMyBAQCBPICAgICAgICAgICBbMC03XQog
CiAlJQogCi0jaWYgIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi1leHRlcm4gIkMiIHsKLS8v
IFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaCIKLQotZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4g
aW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNy
byhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpOwotCi0jZGVmaW5lIFNFVFVQX0NPTlRFWFQo
cHApIFwKLSAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+
cEM7IFwKLSAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250
ZXh0LT5zY2FubmVyOwotCi0vLyBQcmVwcm9jZXNzb3IgY2FsbGJhY2tzLgotdm9pZCBDUFBEZWJ1
Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAg
IGNvbnRleHQtPnRyYWNlKG1zZyk7Ci19Ci0KLXZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndh
cm5pbmcoeXlsaW5lbm8sIG1zZywgIiIpOwotfQotCi12b2lkIENQUFNoSW5mb0xvZ01zZyhjb25z
dCBjaGFyICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVy
cm9yKHl5bGluZW5vLCBtc2csICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZv
aWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7Ci0gICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotfQotCi12b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAwOwotICAgIERlY29kZVNv
dXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVT
b3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotdm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0
cmluZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAg
IERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwgJmxpbmUpOwotICAgIHl5bGluZW5vID0g
RW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7Ci19Ci0KLWludCBHZXRTdHJpbmdOdW1iZXIo
KQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMDsKLSAgICBE
ZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwpOwotICAgIHJldHVybiBzdHJp
bmc7Ci19Ci0KLWludCBHZXRMaW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwg
JmxpbmUpOwotICAgIHJldHVybiBsaW5lOwotfQotCi12b2lkIEluY0xpbmVOdW1iZXIoKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7Ci0g
ICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7Ci0gICAgeXlsaW5l
bm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCArK2xpbmUpOwotfQotCi12b2lkIERlY0xpbmVO
dW1iZXIoKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7
Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCAtLWxpbmUpOwotfQotCi12
b2lkIEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQotewot
ICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLQotICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJu
OwotICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKLSAgICBpZiAo
c3RyY21wKHRva2Vuc1szXSwgIikiKSAhPSAwKSByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5oYW5k
bGVQcmFnbWFEaXJlY3RpdmUoeXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKLX0KLQot
dm9pZCBTdG9yZVN0cihjb25zdCBjaGFyICpzdHJpbmcpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIFRTdHJpbmcgc3RyU3JjOwotICAgIHN0clNyYyA9IFRTdHJpbmcoc3RyaW5nKTsK
LQotICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnICsgIiAiICsg
c3RyU3JjOwotfQotCi1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQotewotICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjcHAtPkVyck1zZyA9IGNvbnRleHQtPkhhc2hFcnJNc2cu
Y19zdHIoKTsKLSAgICByZXR1cm4gY3BwLT5FcnJNc2c7Ci19Ci0KLXZvaWQgUmVzZXRUU3RyaW5n
KHZvaWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPkhhc2hFcnJN
c2cgPSAiIjsKLX0KLQotdm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBl
eHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7
Ci0gICAgY29udGV4dC0+aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1l
LCBiZWhhdmlvcik7Ci19Ci19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vICFBTkdMRV9VU0Vf
TkVXX1BSRVBST0NFU1NPUgotCiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9z
aXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKLSAgICBpbnQgbGVuID0gMDsKLQotI2lmIEFOR0xF
X1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgcHA6OlRva2VuIHRva2VuOwogICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICBsZW4gPSB0b2tl
bi50eXBlID09IHBwOjpUb2tlbjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAg
aW50IGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQu
c2l6ZSgpOwogICAgIGlmICgobGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKLSAgICAgICAg
bWVtY3B5KGJ1ZiwgdG9rZW4udmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZiwgdG9rZW4udGV4dC5jX3N0cigpLCBsZW4pOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3Vy
Y2VMb2ModG9rZW4ubG9jYXRpb24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSksIHl5c2Nhbm5l
cik7Ci0jZWxzZQotICAgIGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKTsKLSNlbmRpZiAg
Ly8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIGlmIChsZW4gPj0gbWF4X3NpemUp
CiAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJJbnB1dCBidWZmZXIgb3ZlcmZsb3ciKTsKQEAgLTQ3
Myw5ICszMzgsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXlsZXhfZGVzdHJveShzY2Fu
bmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgotICAgIEZpbmFsaXplUHJl
cHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDg2LDI3ICszNDgs
MTQgQEAgaW50IGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsK
IAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgotI2lmIEFOR0xFX1VTRV9ORVdfUFJF
UFJPQ0VTU09SCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSNlbHNlCi0gICAgaWYgKEluaXRQcmVw
cm9jZXNzb3IoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0g
ICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIGlmIChJbml0U2Nhbm5lcklucHV0
KGNwcCwgY291bnQsIHN0cmluZywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYg
IC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICAvLyBEZWZpbmUgZXh0ZW5zaW9u
IG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29u
dGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7CiAgICAgICAgICBpdGVy
ICE9IGV4dEJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBS
T0NFU1NPUgogICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRl
ci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0jZWxzZQotICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhp
dGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gMDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5n
LnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CmluZGV4
IDNjYWQzMzUuLjdjZDQ5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nLnkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQpAQCAtMzQwLDE4ICszNDAsMTAgQEAgcG9zdGZpeF9leHByZXNzaW9u
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShU
VHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChp
bnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBDb25z
dGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3RyaW5nOwotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGlu
ZGV4LCAkMi5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEt
PmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkg
dmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7CisgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxk
cywgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCAkMi5saW5lKTsKKyAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkpIHsKICAgICAgICAg
ICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwpAQCAtMTIxMSw3ICsxMjAzLDcgQEAgaW5pdF9kZWNs
YXJhdG9yX2xpc3QKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDMubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQz
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
QEAgLTEyMjQsNyArMTIxNiw3IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25J
bml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5n
LCAkMS50eXBlLCB0cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAg
ICAgICAkJCA9ICQxOwpAQCAtMTI0Miw3ICsxMjM0LDcgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QK
ICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwg
JDEudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEu
dHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxp
bmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICQkID0gJDE7CkBAIC0xMjk2LDcgKzEyODgsNyBAQCBzaW5nbGVf
ZGVjbGFyYXRpb24KICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDIubGluZSwgJCQudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQy
LnN0cmluZywgJCQudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgJCQudHlwZSA9
ICQxOwpAQCAtMTMyNyw3ICsxMzE5LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCB0
cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJC50eXBl
ID0gJDE7CkBAIC0yMDM3LDYgKzIwMjksMTUgQEAgZXh0ZXJuYWxfZGVjbGFyYXRpb24KIGZ1bmN0
aW9uX2RlZmluaXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5j
dGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFRT
eW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlv
bi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVpbHRJbikKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImJ1aWx0LWluIGZ1
bmN0aW9ucyBjYW5ub3QgYmUgcmVkZWZpbmVkIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAg
ICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicg
aWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAppbmRl
eCBhM2JmYTEzLi5mNjUxZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAKQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBp
bnQxNl90IGZsZXhfaW50MTZfdDsKIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKIHR5
cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMy
X3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CiAjZWxzZQogdHlwZWRlZiBzaWdu
ZWQgY2hhciBmbGV4X2ludDhfdDsKIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKQEAg
LTM3OCw3ICszNzksNyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFy
IG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVf
QUNUSU9OIFwKIAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXplX3Qp
ICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAogCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCiAJKnl5X2NwID0gJ1wwJzsgXAog
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwpAQCAtODA3LDcgKzgwOCw3IEBAIFdISUNIIEdFTkVS
QVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCiAj
aW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIApAQCAtMjk0NywxNDggKzI5NDgsMTMgQEAgdm9pZCB5
eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAKICNkZWZpbmUgWVlUQUJM
RVNfTkFNRSAieXl0YWJsZXMiCiAKLSNpZiAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKLWV4
dGVybiAiQyIgewotLy8gUHJlcHJvY2Vzc29yIGludGVyZmFjZS4KLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgotCi1leHRlcm4gaW50IEluaXRQcmVwcm9jZXNz
b3IoKTsKLWV4dGVybiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLWV4dGVybiB2b2lkIFBy
ZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Ci0KLSNkZWZpbmUg
U0VUVVBfQ09OVEVYVChwcCkgXAotICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSAoVFBhcnNl
Q29udGV4dCopIHBwLT5wQzsgXAotICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7Ci0KLS8vIFByZXByb2Nlc3NvciBjYWxsYmFja3Mu
Ci12b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05U
RVhUKGNwcCk7Ci0gICAgY29udGV4dC0+dHJhY2UobXNnKTsKLX0KLQotdm9pZCBDUFBXYXJuaW5n
VG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIik7Ci19Ci0KLXZvaWQgQ1BQU2hJ
bmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIpOwotICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLX0KLQotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2cs
ICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZvaWQgU2V0TGluZU51bWJlcihp
bnQgbGluZSkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IHN0cmluZyA9IDA7
Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKLSAgICB5eWxp
bmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOwotfQotCi12b2lkIFNldFN0cmlu
Z051bWJlcihpbnQgc3RyaW5nKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQg
bGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0g
ICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKLX0KLQotaW50IEdl
dFN0cmluZ051bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJp
bmcgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7Ci0g
ICAgcmV0dXJuIHN0cmluZzsKLX0KLQotaW50IEdldExpbmVOdW1iZXIoKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5
bGluZW5vLCBOVUxMLCAmbGluZSk7Ci0gICAgcmV0dXJuIGxpbmU7Ci19Ci0KLXZvaWQgSW5jTGlu
ZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBzdHJpbmcgPSAw
LCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsICZsaW5l
KTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsICsrbGluZSk7Ci19Ci0K
LXZvaWQgRGVjTGluZU51bWJlcigpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGlu
dCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZz
dHJpbmcsICZsaW5lKTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIC0t
bGluZSk7Ci19Ci0KLXZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGludCBu
dW1Ub2tlbnMpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotCi0gICAgaWYgKG51bVRva2Vu
cyAhPSA0KSByZXR1cm47Ci0gICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikgIT0gMCkgcmV0
dXJuOwotICAgIGlmIChzdHJjbXAodG9rZW5zWzNdLCAiKSIpICE9IDApIHJldHVybjsKLQotICAg
IGNvbnRleHQtPmhhbmRsZVByYWdtYURpcmVjdGl2ZSh5eWxpbmVubywgdG9rZW5zWzBdLCB0b2tl
bnNbMl0pOwotfQotCi12b2lkIFN0b3JlU3RyKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgICBT
RVRVUF9DT05URVhUKGNwcCk7Ci0gICAgVFN0cmluZyBzdHJTcmM7Ci0gICAgc3RyU3JjID0gVFN0
cmluZyhzdHJpbmcpOwotCi0gICAgY29udGV4dC0+SGFzaEVyck1zZyA9IGNvbnRleHQtPkhhc2hF
cnJNc2cgKyAiICIgKyBzdHJTcmM7Ci19Ci0KLWNvbnN0IGNoYXIqIEdldFN0cmZyb21UU3RyKHZv
aWQpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNwcC0+RXJyTXNnID0gY29udGV4
dC0+SGFzaEVyck1zZy5jX3N0cigpOwotICAgIHJldHVybiBjcHAtPkVyck1zZzsKLX0KLQotdm9p
ZCBSZXNldFRTdHJpbmcodm9pZCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29u
dGV4dC0+SGFzaEVyck1zZyA9ICIiOwotfQotCi12b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9y
KGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQotewotICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT5oYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoeXls
aW5lbm8sIGV4dE5hbWUsIGJlaGF2aW9yKTsKLX0KLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZiAg
Ly8gIUFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCi0KIGludCBzdHJpbmdfaW5wdXQoY2hhciog
YnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewotICAgIGludCBsZW4gPSAw
OwotCi0jaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBwcDo6VG9rZW4gdG9rZW47
CiAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOwot
ICAgIGxlbiA9IHRva2VuLnR5cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnZhbHVl
LnNpemUoKTsKKyAgICBpbnQgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAw
IDogdG9rZW4udGV4dC5zaXplKCk7CiAgICAgaWYgKChsZW4gPiAwKSAmJiAobGVuIDwgbWF4X3Np
emUpKQotICAgICAgICBtZW1jcHkoYnVmLCB0b2tlbi52YWx1ZS5jX3N0cigpLCBsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmLCB0b2tlbi50ZXh0LmNfc3RyKCksIGxlbik7CiAgICAgeXlzZXRfbGlu
ZW5vKEVuY29kZVNvdXJjZUxvYyh0b2tlbi5sb2NhdGlvbi5maWxlLCB0b2tlbi5sb2NhdGlvbi5s
aW5lKSx5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICBsZW4gPSB5eWxleF9DUFAoYnVmLCBtYXhfc2l6
ZSk7Ci0jZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAKICAgICBpZiAobGVu
ID49IG1heF9zaXplKQogICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQgYnVmZmVyIG92ZXJm
bG93Iik7CkBAIC0zMTQ4LDkgKzMwMTQsNiBAQCBpbnQgZ2xzbGFuZ19maW5hbGl6ZShUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7CiAgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CiAgICAgeXls
ZXhfZGVzdHJveShzY2FubmVyKTsKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgot
ICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtMzE2MSwyNyArMzAyNCwxNCBAQCBpbnQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwgY29uc3Qg
Y2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKICAgICBjb250ZXh0LT5B
ZnRlckVPRiA9IGZhbHNlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCi0jaWYg
QU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nv
ci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotI2Vsc2UK
LSAgICBpZiAoSW5pdFByZXByb2Nlc3NvcigpKQotICAgICAgICByZXR1cm4gMTsKLSAgICBjcHAt
PnBDID0gY29udGV4dDsKLSAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDA7Ci0gICAgaWYg
KEluaXRTY2FubmVySW5wdXQoY3BwLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gMTsKLSNlbmRpZiAgLy8gQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKIAogICAgIC8v
IERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwogICAgIGZvciAoVEV4
dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3IuYmVnaW4o
KTsKICAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewotI2lmIEFO
R0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5w
cmVkZWZpbmVNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKLSNlbHNlCi0gICAgICAgIFBy
ZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotI2VuZGlmCiAgICAgfQog
ICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAKaW5kZXggNDZiNTE0YS4uNzJjYzg0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3Bw
CkBAIC03NTIsMjYgKzc1MiwyNiBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKICAgICAgICAwLCAg
IDE2OCwgICAxNjgsICAgMjAzLCAgIDIwNiwgICAyMTksICAgMjI0LCAgIDIyOSwgICAyMzUsICAg
MjM4LAotICAgICAzMTcsICAgMzIwLCAgIDQyOSwgICA0MzksICAgNDUyLCAgIDQ2MCwgICA1NjAs
ICAgNTYzLCAgIDU3MSwgICA1NzUsCi0gICAgIDU4MiwgICA1ODYsICAgNTkzLCAgIDU5OSwgICA2
MDgsICAgNjE2LCAgIDY3MSwgICA2NzgsICAgNjg4LCAgIDY5MSwKLSAgICAgNzAxLCAgIDcxMSwg
ICA3MzIsICAgNzMzLCAgIDczNCwgICA3MzksICAgNzQwLCAgIDc0OSwgICA3NjEsICAgNzYyLAot
ICAgICA3NzAsICAgNzgxLCAgIDc4NSwgICA3ODYsICAgNzk2LCAgIDgwNiwgICA4MTYsICAgODI5
LCAgIDgzMCwgICA4NDAsCi0gICAgIDg1MywgICA4NTcsICAgODYxLCAgIDg2NSwgICA4NjYsICAg
ODc5LCAgIDg4MCwgICA4OTMsICAgODk0LCAgIDkwNywKLSAgICAgOTA4LCAgIDkyNSwgICA5MjYs
ICAgOTM5LCAgIDk0MCwgICA5NDEsICAgOTQyLCAgIDk0MywgICA5NDcsICAgOTUwLAotICAgICA5
NjEsICAgOTY5LCAgIDk5NiwgIDEwMDEsICAxMDA4LCAgMTA0NiwgIDEwNDksICAxMDU2LCAgMTA2
NCwgIDEwODUsCi0gICAgMTEwNiwgIDExMTcsICAxMTQ2LCAgMTE1MSwgIDExNjEsICAxMTY2LCAg
MTE3NiwgIDExNzksICAxMTgyLCAgMTE4NSwKLSAgICAxMTkxLCAgMTE5OCwgIDEyMDEsICAxMjIz
LCAgMTI0MSwgIDEyNjUsICAxMjg4LCAgMTI5MiwgIDEzMTAsICAxMzE4LAotICAgIDEzNTAsICAx
MzcwLCAgMTQ1OSwgIDE0NjgsICAxNDkxLCAgMTQ5NCwgIDE1MDAsICAxNTA4LCAgMTUxNiwgIDE1
MjQsCi0gICAgMTUzNCwgIDE1NDEsICAxNTQ0LCAgMTU0NywgIDE1NTMsICAxNTU2LCAgMTU3MSwg
IDE1NzUsICAxNTc5LCAgMTU4MywKLSAgICAxNTkyLCAgMTU5NywgIDE2MDIsICAxNjA3LCAgMTYx
MiwgIDE2MTcsICAxNjIyLCAgMTYyNywgIDE2MzIsICAxNjM3LAotICAgIDE2NDMsICAxNjQ5LCAg
MTY1NSwgIDE2NjAsICAxNjY1LCAgMTY3NCwgIDE2ODMsICAxNjg4LCAgMTcwMSwgIDE3MDEsCi0g
ICAgMTcxNSwgIDE3MTUsICAxNzI0LCAgMTcyNywgIDE3NDIsICAxNzc4LCAgMTc4MiwgIDE3ODgs
ICAxNzk2LCAgMTgxMiwKLSAgICAxODE2LCAgMTgyMCwgIDE4MjEsICAxODI3LCAgMTgyOCwgIDE4
MjksICAxODMwLCAgMTgzMSwgIDE4MzUsICAxODM2LAotICAgIDE4MzYsICAxODM2LCAgMTg0Niwg
IDE4NDcsICAxODUxLCAgMTg1MSwgIDE4NTIsICAxODUyLCAgMTg1NywgIDE4NjAsCi0gICAgMTg3
MCwgIDE4NzMsICAxODc5LCAgMTg4MCwgIDE4ODQsICAxODkyLCAgMTg5NiwgIDE5MDYsICAxOTEx
LCAgMTkyOCwKLSAgICAxOTI4LCAgMTkzMywgIDE5MzMsICAxOTQwLCAgMTk0MCwgIDE5NDgsICAx
OTUxLCAgMTk1NywgIDE5NjAsICAxOTY2LAotICAgIDE5NzAsICAxOTc3LCAgMTk4NCwgIDE5OTEs
ICAxOTk4LCAgMjAwOSwgIDIwMTgsICAyMDIyLCAgMjAyOSwgIDIwMzIsCi0gICAgMjAzOCwgIDIw
MzgKKyAgICAgMzE3LCAgIDMyMCwgICA0MjEsICAgNDMxLCAgIDQ0NCwgICA0NTIsICAgNTUyLCAg
IDU1NSwgICA1NjMsICAgNTY3LAorICAgICA1NzQsICAgNTc4LCAgIDU4NSwgICA1OTEsICAgNjAw
LCAgIDYwOCwgICA2NjMsICAgNjcwLCAgIDY4MCwgICA2ODMsCisgICAgIDY5MywgICA3MDMsICAg
NzI0LCAgIDcyNSwgICA3MjYsICAgNzMxLCAgIDczMiwgICA3NDEsICAgNzUzLCAgIDc1NCwKKyAg
ICAgNzYyLCAgIDc3MywgICA3NzcsICAgNzc4LCAgIDc4OCwgICA3OTgsICAgODA4LCAgIDgyMSwg
ICA4MjIsICAgODMyLAorICAgICA4NDUsICAgODQ5LCAgIDg1MywgICA4NTcsICAgODU4LCAgIDg3
MSwgICA4NzIsICAgODg1LCAgIDg4NiwgICA4OTksCisgICAgIDkwMCwgICA5MTcsICAgOTE4LCAg
IDkzMSwgICA5MzIsICAgOTMzLCAgIDkzNCwgICA5MzUsICAgOTM5LCAgIDk0MiwKKyAgICAgOTUz
LCAgIDk2MSwgICA5ODgsICAgOTkzLCAgMTAwMCwgIDEwMzgsICAxMDQxLCAgMTA0OCwgIDEwNTYs
ICAxMDc3LAorICAgIDEwOTgsICAxMTA5LCAgMTEzOCwgIDExNDMsICAxMTUzLCAgMTE1OCwgIDEx
NjgsICAxMTcxLCAgMTE3NCwgIDExNzcsCisgICAgMTE4MywgIDExOTAsICAxMTkzLCAgMTIxNSwg
IDEyMzMsICAxMjU3LCAgMTI4MCwgIDEyODQsICAxMzAyLCAgMTMxMCwKKyAgICAxMzQyLCAgMTM2
MiwgIDE0NTEsICAxNDYwLCAgMTQ4MywgIDE0ODYsICAxNDkyLCAgMTUwMCwgIDE1MDgsICAxNTE2
LAorICAgIDE1MjYsICAxNTMzLCAgMTUzNiwgIDE1MzksICAxNTQ1LCAgMTU0OCwgIDE1NjMsICAx
NTY3LCAgMTU3MSwgIDE1NzUsCisgICAgMTU4NCwgIDE1ODksICAxNTk0LCAgMTU5OSwgIDE2MDQs
ICAxNjA5LCAgMTYxNCwgIDE2MTksICAxNjI0LCAgMTYyOSwKKyAgICAxNjM1LCAgMTY0MSwgIDE2
NDcsICAxNjUyLCAgMTY1NywgIDE2NjYsICAxNjc1LCAgMTY4MCwgIDE2OTMsICAxNjkzLAorICAg
IDE3MDcsICAxNzA3LCAgMTcxNiwgIDE3MTksICAxNzM0LCAgMTc3MCwgIDE3NzQsICAxNzgwLCAg
MTc4OCwgIDE4MDQsCisgICAgMTgwOCwgIDE4MTIsICAxODEzLCAgMTgxOSwgIDE4MjAsICAxODIx
LCAgMTgyMiwgIDE4MjMsICAxODI3LCAgMTgyOCwKKyAgICAxODI4LCAgMTgyOCwgIDE4MzgsICAx
ODM5LCAgMTg0MywgIDE4NDMsICAxODQ0LCAgMTg0NCwgIDE4NDksICAxODUyLAorICAgIDE4NjIs
ICAxODY1LCAgMTg3MSwgIDE4NzIsICAxODc2LCAgMTg4NCwgIDE4ODgsICAxODk4LCAgMTkwMywg
IDE5MjAsCisgICAgMTkyMCwgIDE5MjUsICAxOTI1LCAgMTkzMiwgIDE5MzIsICAxOTQwLCAgMTk0
MywgIDE5NDksICAxOTUyLCAgMTk1OCwKKyAgICAxOTYyLCAgMTk2OSwgIDE5NzYsICAxOTgzLCAg
MTk5MCwgIDIwMDEsICAyMDEwLCAgMjAxNCwgIDIwMjEsICAyMDI0LAorICAgIDIwMzAsICAyMDMw
CiB9OwogI2VuZGlmCiAKQEAgLTIzNjAsMTggKzIzNjAsMTAgQEAgeXlyZWR1Y2U6CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsK
LSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmc7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRTdHJp
bmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOworICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZp
ZWxkczsKQEAgLTM0MzAsNyArMzQyMiw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIAogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKQEAgLTM0NDcs
NyArMzQzOSw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKQEAgLTM0NjksNyArMzQ2MSw3IEBAIHl5cmVkdWNl
OgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDMpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNw
WygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkp
CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50
ZXJtKTsKQEAgLTM1MzIsNyArMzUyNCw3IEBAIHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
ICh5eXZhbC5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikg
LSAoMildLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hl
Y2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlw
ZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKQEAgLTM1NzEsNyArMzU2Myw3IEBA
IHl5cmVkdWNlOgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50
eXBlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5l
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSkpCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHRydWUpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7CkBAIC00NTE3LDYgKzQ1MDksMTUgQEAgeXlyZWR1Y2U6
CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVp
bHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChidWlsdEluKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1bmN0aW9uLT5nZXRO
YW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBi
ZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVk
aWF0ZS5oCmluZGV4IGU2M2Q0MjUuLjc1ODEyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKQEAgLTE2LDYgKzE2LDggQEAK
ICNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAogI2RlZmluZSBfX0lOVEVSTUVESUFURV9ICiAKKyNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKwogI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1v
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1R5cGVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQ29u
c3RhbnRVbmlvbi5oIgpAQCAtNTUxLDYgKzU1MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNy
ZW1lbnREZXB0aCgpIHtkZXB0aCsrO30KICAgICB2b2lkIGRlY3JlbWVudERlcHRoKCkge2RlcHRo
LS07fQogCisgICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24g
cG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1l
LgorICAgIHN0YXRpYyBUU3RyaW5nIGhhc2goY29uc3QgVFN0cmluZyYgbmFtZSwgU2hIYXNoRnVu
Y3Rpb242NCBoYXNoRnVuY3Rpb24pOworCiAgICAgY29uc3QgYm9vbCBwcmVWaXNpdDsKICAgICBj
b25zdCBib29sIGluVmlzaXQ7CiAgICAgY29uc3QgYm9vbCBwb3N0VmlzaXQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKaW5kZXggMWQ5NTkw
Ny4uYWRmMWEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL29zaW5jbHVkZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9vc2luY2x1ZGUuaApAQCAtMjQsOSArMjQsNyBAQAogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRm
b3JtLgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEFOR0xFX1VTRV9OU1BSKQotI2luY2x1ZGUgInBy
dGhyZWFkLmgiCi0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xF
X09TX1dJTikKICNkZWZpbmUgU1RSSUNUCiAjZGVmaW5lIFZDX0VYVFJBTEVBTiAxCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgpAQCAtMzQsNyArMzIsNyBAQAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdM
RV9VU0VfTlNQUgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KIAogCiAjaW5jbHVkZSAiY29tcGls
ZXIvZGVidWcuaCIKQEAgLTQyLDE2ICs0MCwxMyBAQAogLy8KIC8vIFRocmVhZCBMb2NhbCBTdG9y
YWdlIE9wZXJhdGlvbnMKIC8vCi0jaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKLXR5cGVkZWYg
UFJVaW50biBPU19UTFNJbmRleDsKLSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZG
RkZGRgotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjaWYgZGVmaW5lZChBTkdMRV9PU19X
SU4pCiB0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RMU19J
TkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQogI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkK
IHR5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RM
U19JTkRFWCAweEZGRkZGRkZGCi0jZW5kaWYgIC8vIEFOR0xFX1VTRV9OU1BSCisjZW5kaWYgIC8v
IEFOR0xFX09TX1dJTgogCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7CiBib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOwpAQCAtNjAs
OSArNTUsNyBAQCBib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpOwogaW5s
aW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCkKIHsKICAgICBBU1NF
UlQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1VT
RV9OU1BSKQotICAgIHJldHVybiBQUl9HZXRUaHJlYWRQcml2YXRlKG5JbmRleCk7Ci0jZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1dJTikKKyNpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKICAgICByZXR1
cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKICNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCiAg
ICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcAppbmRleCBm
NjNkODFlLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwCkBAIC0xLDQzICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5zcHIgc3BlY2lmaWMg
ZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0vLwotLy8g
VGhyZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9j
VExTSW5kZXgoKQotewotICAgIFBSVWludG4gaW5kZXg7Ci0gICAgUFJTdGF0dXMgc3RhdHVzID0g
UFJfTmV3VGhyZWFkUHJpdmF0ZUluZGV4KCZpbmRleCwgTlVMTCk7Ci0KLSAgICBpZiAoc3RhdHVz
KSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBh
bGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gT1NfSU5WQUxJ
RF9UTFNfSU5ERVg7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIE9TX1Nl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0gICAgaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBQUl9TZXRUaHJlYWRQcml2YXRlKG5JbmRleCwgbHB2
VmFsdWUpID09IDA7Ci19Ci0KLWJvb2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRl
eCkKLXsKLSAgICAvLyBDYW4ndCBkZWxldGUgVExTIGtleXMgd2l0aCBuc3ByCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTIyZTFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFn
bm9zdGljc0Jhc2UuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNl
IHBwCit7CisKK0RpYWdub3N0aWNzOjp+RGlhZ25vc3RpY3MoKQoreworfQorCit2b2lkIERpYWdu
b3N0aWNzOjpyZXBvcnQoSUQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkKK3sKKyAgICAvLyBUT0RPKGFsb2twKTogS2VlcCBhIGNvdW50IG9mIGVycm9y
cyBhbmQgd2FybmluZ3MuCisgICAgcHJpbnQoaWQsIGxvYywgdGV4dCk7Cit9CisKK0RpYWdub3N0
aWNzOjpTZXZlcml0eSBEaWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCit7CisgICAgaWYgKChp
ZCA+IEVSUk9SX0JFR0lOKSAmJiAoaWQgPCBFUlJPUl9FTkQpKQorICAgICAgICByZXR1cm4gRVJS
T1I7CisKKyAgICBpZiAoKGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlkIDwgV0FSTklOR19FTkQp
KQorICAgICAgICByZXR1cm4gV0FSTklORzsKKworICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0
dXJuIEVSUk9SOworfQorCitzdGQ6OnN0cmluZyBEaWFnbm9zdGljczo6bWVzc2FnZShJRCBpZCkK
K3sKKyAgICBzd2l0Y2ggKGlkKQorICAgIHsKKyAgICAgIC8vIEVycm9ycyBiZWdpbi4KKyAgICAg
IGNhc2UgSU5URVJOQUxfRVJST1I6CisgICAgICAgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7
CisgICAgICBjYXNlIE9VVF9PRl9NRU1PUlk6CisgICAgICAgICAgcmV0dXJuICJvdXQgb2YgbWVt
b3J5IjsKKyAgICAgIGNhc2UgSU5WQUxJRF9DSEFSQUNURVI6CisgICAgICAgICAgcmV0dXJuICJp
bnZhbGlkIGNoYXJhY3RlciI7CisgICAgICBjYXNlIElOVkFMSURfTlVNQkVSOgorICAgICAgICAg
IHJldHVybiAiaW52YWxpZCBudW1iZXIiOworICAgICAgY2FzZSBJTlRFR0VSX09WRVJGTE9XOgor
ICAgICAgICAgIHJldHVybiAiaW50ZWdlciBvdmVyZmxvdyI7CisgICAgICBjYXNlIEZMT0FUX09W
RVJGTE9XOgorICAgICAgICAgIHJldHVybiAiZmxvYXQgb3ZlcmZsb3ciOworICAgICAgY2FzZSBU
T0tFTl9UT09fTE9ORzoKKyAgICAgICAgICByZXR1cm4gInRva2VuIHRvbyBsb25nIjsKKyAgICAg
IGNhc2UgSU5WQUxJRF9FWFBSRVNTSU9OOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHBy
ZXNzaW9uIjsKKyAgICAgIGNhc2UgRElWSVNJT05fQllfWkVSTzoKKyAgICAgICAgICByZXR1cm4g
ImRpdmlzaW9uIGJ5IHplcm8iOworICAgICAgY2FzZSBFT0ZfSU5fQ09NTUVOVDoKKyAgICAgICAg
ICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gY29tbWVudCI7CisgICAg
ICBjYXNlIFVORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIjsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lOVkFMSURfTkFNRToKKyAgICAgICAgICByZXR1
cm4gImludmFsaWQgZGlyZWN0aXZlIG5hbWUiOworICAgICAgY2FzZSBNQUNST19OQU1FX1JFU0VS
VkVEOgorICAgICAgICAgIHJldHVybiAibWFjcm8gbmFtZSBpcyByZXNlcnZlZCI7CisgICAgICBj
YXNlIE1BQ1JPX1JFREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gIm1hY3JvIHJlZGVmaW5lZCI7
CisgICAgICBjYXNlIE1BQ1JPX1BSRURFRklORURfUkVERUZJTkVEOgorICAgICAgICAgIHJldHVy
biAicHJlZGVmaW5lZCBtYWNybyByZWRlZmluZWQiOworICAgICAgY2FzZSBNQUNST19QUkVERUZJ
TkVEX1VOREVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gdW5kZWZp
bmVkIjsKKyAgICAgIGNhc2UgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT046CisgICAgICAg
ICAgcmV0dXJuICJ1bnRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbiI7CisgICAgICBjYXNlIE1B
Q1JPX1RPT19GRVdfQVJHUzoKKyAgICAgICAgICByZXR1cm4gIk5vdCBlbm91Z2ggYXJndW1lbnRz
IGZvciBtYWNybyI7CisgICAgICBjYXNlIE1BQ1JPX1RPT19NQU5ZX0FSR1M6CisgICAgICAgICAg
cmV0dXJuICJUb28gbWFueSBhcmd1bWVudHMgZm9yIG1hY3JvIjsKKyAgICAgIGNhc2UgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRjoKKyAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgI2Vu
ZGlmIGZvdW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05B
TF9FTFNFX1dJVEhPVVRfSUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZv
dW5kIHdpdGhvdXQgYSBtYXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTFNF
X0FGVEVSX0VMU0U6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbHNlIGZvdW5kIGFm
dGVyIGFub3RoZXIgI2Vsc2UiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUY6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIHdpdGhvdXQgYSBt
YXRjaGluZyAjaWYiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0U6Cisg
ICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbGlmIGZvdW5kIGFmdGVyICNlbHNlIjsKKyAg
ICAgIGNhc2UgQ09ORElUSU9OQUxfVU5URVJNSU5BVEVEOgorICAgICAgICAgIHJldHVybiAidW5l
eHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBjb25kaXRpb25hbCBibG9jayI7CisgICAgICBj
YXNlIElOVkFMSURfRVhURU5TSU9OX05BTUU6CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4
dGVuc2lvbiBuYW1lIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9FWFRFTlNJT05fQkVIQVZJT1I6Cisg
ICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBiZWhhdmlvciI7CisgICAgICBjYXNl
IElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQg
ZXh0ZW5zaW9uIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9OVU1CRVI6
CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIHZlcnNpb24gbnVtYmVyIjsKKyAgICAgIGNhc2Ug
SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRToKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgdmVy
c2lvbiBkaXJlY3RpdmUiOworICAgICAgY2FzZSBWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQ6
CisgICAgICAgIHJldHVybiAiI3ZlcnNpb24gZGlyZWN0aXZlIG11c3Qgb2NjdXIgYmVmb3JlIGFu
eXRoaW5nIGVsc2UsICIKKyAgICAgICAgICAgICAgICJleGNlcHQgZm9yIGNvbW1lbnRzIGFuZCB3
aGl0ZSBzcGFjZSI7CisgICAgICBjYXNlIElOVkFMSURfTElORV9OVU1CRVI6CisgICAgICAgICAg
cmV0dXJuICJpbnZhbGlkIGxpbmUgbnVtYmVyIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9GSUxFX05V
TUJFUjoKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgZmlsZSBudW1iZXIiOworICAgICAgY2Fz
ZSBJTlZBTElEX0xJTkVfRElSRUNUSVZFOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5l
IGRpcmVjdGl2ZSI7CisgICAgICAvLyBFcnJvcnMgZW5kLgorICAgICAgLy8gV2FybmluZ3MgYmVn
aW4uCisgICAgICBjYXNlIEVPRl9JTl9ESVJFQ1RJVkU6CisgICAgICAgICAgcmV0dXJuICJ1bmV4
cGVjdGVkIGVuZCBvZiBmaWxlIGZvdW5kIGluIGRpcmVjdGl2ZSI7CisgICAgICBjYXNlIENPTkRJ
VElPTkFMX1VORVhQRUNURURfVE9LRU46CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIHRv
a2VuIGFmdGVyIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iOworICAgICAgY2FzZSBVTlJFQ09HTkla
RURfUFJBR01BOgorICAgICAgICAgIHJldHVybiAidW5yZWNvZ25pemVkIHByYWdtYSI7CisgICAg
ICAvLyBXYXJuaW5ncyBlbmQuCisgICAgICBkZWZhdWx0OgorICAgICAgICAgIGFzc2VydChmYWxz
ZSk7CisgICAgICAgICAgcmV0dXJuICIiOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHBw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wN2JjNDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaApA
QCAtMCwwICsxLDg3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfRElBR05PU1RJQ1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1
Y3QgU291cmNlTG9jYXRpb247CisKKy8vIEJhc2UgY2xhc3MgZm9yIHJlcG9ydGluZyBkaWFnbm9z
dGljIG1lc3NhZ2VzLgorLy8gRGVyaXZlZCBjbGFzc2VzIGFyZSByZXNwb25zaWJsZSBmb3IgZm9y
bWF0dGluZyBhbmQgcHJpbnRpbmcgdGhlIG1lc3NhZ2VzLgorY2xhc3MgRGlhZ25vc3RpY3MKK3sK
KyAgcHVibGljOgorICAgIGVudW0gU2V2ZXJpdHkKKyAgICB7CisgICAgICAgIEVSUk9SLAorICAg
ICAgICBXQVJOSU5HCisgICAgfTsKKyAgICBlbnVtIElECisgICAgeworICAgICAgICBFUlJPUl9C
RUdJTiwKKyAgICAgICAgSU5URVJOQUxfRVJST1IsCisgICAgICAgIE9VVF9PRl9NRU1PUlksCisg
ICAgICAgIElOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICBJTlZBTElEX05VTUJFUiwKKyAgICAg
ICAgSU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgRkxPQVRfT1ZFUkZMT1csCisgICAgICAgIFRP
S0VOX1RPT19MT05HLAorICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgIERJVklT
SU9OX0JZX1pFUk8sCisgICAgICAgIEVPRl9JTl9DT01NRU5ULAorICAgICAgICBVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAgICAgICBNQUNST19O
QU1FX1JFU0VSVkVELAorICAgICAgICBNQUNST19SRURFRklORUQsCisgICAgICAgIE1BQ1JPX1BS
RURFRklORURfUkVERUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwK
KyAgICAgICAgTUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgIE1BQ1JPX1RP
T19GRVdfQVJHUywKKyAgICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKKyAgICAgICAgQ09ORElU
SU9OQUxfRU5ESUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VU
X0lGLAorICAgICAgICBDT05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCisgICAgICAgIENPTkRJ
VElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9F
TFNFLAorICAgICAgICBDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCisgICAgICAgIElOVkFMSURf
RVhURU5TSU9OX05BTUUsCisgICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAg
ICAgICBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIElOVkFMSURfVkVSU0lP
Tl9OVU1CRVIsCisgICAgICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCisgICAgICAgIFZF
UlNJT05fTk9UX0ZJUlNUX1NUQVRFTUVOVCwKKyAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwK
KyAgICAgICAgSU5WQUxJRF9GSUxFX05VTUJFUiwKKyAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVD
VElWRSwKKyAgICAgICAgRVJST1JfRU5ELAorCisgICAgICAgIFdBUk5JTkdfQkVHSU4sCisgICAg
ICAgIEVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAgIENPTkRJVElPTkFMX1VORVhQRUNURURfVE9L
RU4sCisgICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCisgICAgICAgIFdBUk5JTkdfRU5ECisg
ICAgfTsKKworICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7CisKKyAgICB2b2lkIHJlcG9ydChJ
RCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQp
OworCisgIHByb3RlY3RlZDoKKyAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7CisgICAgc3Rk
OjpzdHJpbmcgbWVzc2FnZShJRCBpZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdO
T1NUSUNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzVjNmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApAQCAtMCwwICsxLDE2IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisKK25hbWVzcGFjZSBwcAor
eworCitEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCit7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFz
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWVlYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmgKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXworCisjaW5j
bHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9u
OworCisvLyBCYXNlIGNsYXNzIGZvciBoYW5kbGluZyBkaXJlY3RpdmVzLgorLy8gUHJlcHJvY2Vz
c29yIHVzZXMgdGhpcyBjbGFzcyB0byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgor
Ly8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2li
bGUgZm9yCisvLyBoYW5kbGluZyB0aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KK2NsYXNz
IERpcmVjdGl2ZUhhbmRsZXIKK3sKKyAgcHVibGljOgorICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhh
bmRsZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgbXNnKSA9IDA7CisKKyAgICAvLyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFt
ZVsodmFsdWUpXQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9j
YXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBiZWhhdmlvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVZlcnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdmVyc2lvbikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBw
CisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGZkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5j
cHAKQEAgLTAsMCArMSw5MzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiRGlyZWN0aXZl
UGFyc2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5j
bHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUg
IkRpcmVjdGl2ZUhhbmRsZXJCYXNlLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgor
I2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUg
IlRva2VuaXplci5oIgorCituYW1lc3BhY2UgeworZW51bSBEaXJlY3RpdmVUeXBlCit7CisgICAg
RElSRUNUSVZFX05PTkUsCisgICAgRElSRUNUSVZFX0RFRklORSwKKyAgICBESVJFQ1RJVkVfVU5E
RUYsCisgICAgRElSRUNUSVZFX0lGLAorICAgIERJUkVDVElWRV9JRkRFRiwKKyAgICBESVJFQ1RJ
VkVfSUZOREVGLAorICAgIERJUkVDVElWRV9FTFNFLAorICAgIERJUkVDVElWRV9FTElGLAorICAg
IERJUkVDVElWRV9FTkRJRiwKKyAgICBESVJFQ1RJVkVfRVJST1IsCisgICAgRElSRUNUSVZFX1BS
QUdNQSwKKyAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAorICAgIERJUkVDVElWRV9WRVJTSU9OLAor
ICAgIERJUkVDVElWRV9MSU5FCit9OworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBEaXJlY3Rp
dmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4qIHRva2VuKQoreworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5lKCJkZWZpbmUiKTsKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOworICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7CisgICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0
cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
dHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9uIik7CisgICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7CisgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5lIik7CisKKyAgICBpZiAodG9rZW4t
PnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQorICAgICAgICByZXR1cm4gRElSRUNUSVZF
X05PTkU7CisKKyAgICBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZURlZmluZSkKKyAgICAg
ICAgcmV0dXJuIERJUkVDVElWRV9ERUZJTkU7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0g
a0RpcmVjdGl2ZVVuZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX1VOREVGOworICAgIGVs
c2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVJZikKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9JRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlSWZkZWYpCisg
ICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZERUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQg
PT0ga0RpcmVjdGl2ZUlmbmRlZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9JRk5ERUY7Cisg
ICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUVsc2UpCisgICAgICAgIHJldHVy
biBESVJFQ1RJVkVfRUxTRTsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZl
RWxpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTElGOworICAgIGVsc2UgaWYgKHRva2Vu
LT50ZXh0ID09IGtEaXJlY3RpdmVFbmRpZikKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTkRJ
RjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlRXJyb3IpCisgICAgICAg
IHJldHVybiBESVJFQ1RJVkVfRVJST1I7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0Rp
cmVjdGl2ZVByYWdtYSkKKyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7CisgICAgZWxz
ZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9FWFRFTlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVj
dGl2ZVZlcnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfVkVSU0lPTjsKKyAgICBlbHNl
IGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlTGluZSkKKyAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9MSU5FOworCisgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworfQorCitzdGF0aWMgYm9v
bCBpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQoreworICAg
IHN3aXRjaCAoZGlyZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAg
ICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Cisg
ICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKKyAg
ICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdG9rZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgorc3RhdGljIGJvb2wg
aXNFT0QoY29uc3QgcHA6OlRva2VuKiB0b2tlbikKK3sKKyAgICByZXR1cm4gKHRva2VuLT50eXBl
ID09ICdcbicpIHx8ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOworfQorCitzdGF0
aWMgdm9pZCBza2lwVW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikK
K3sKKyAgICB3aGlsZSghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbGV4ZXItPmxleCh0
b2tlbik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0
IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIg
YXJlIHJlc2VydmVkLgorICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2
ZSB1bmRlcnNjb3JlcyBhcmUgcmVzZXJ2ZWQuCisgICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3N0YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0
JiBtYWNyb1NldCkKK3sKKyAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YWNyb1NldC5maW5kKG5hbWUpOworICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8g
aXRlci0+c2Vjb25kLnByZWRlZmluZWQgOiBmYWxzZTsKK30KKworbmFtZXNwYWNlIHBwCit7CisK
K2NsYXNzIERlZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIERl
ZmluZWRQYXJzZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9T
ZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6CisgICAgICAgIG1MZXhlcihsZXhlciksCisgICAgICAgIG1NYWNyb1NldChtYWNyb1NldCks
CisgICAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICB7CisgICAgfQorCisgIHBy
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOworCisgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpJREVOVElGSUVSKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodG9rZW4tPnRl
eHQgIT0ga0RlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBwYXJl
biA9IGZhbHNlOworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAgIGlmICh0b2tl
bi0+dHlwZSA9PSAnKCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVuID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgeworICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRva2VuKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4
cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7CisKKyAgICAg
ICAgaWYgKHBhcmVuKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7
CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIs
IHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSBoYXZlIGEgdmFsaWQgZGVmaW5lZCBvcGVyYXRvci4KKyAgICAg
ICAgLy8gQ29udmVydCB0aGUgY3VycmVudCB0b2tlbiBpbnRvIGEgQ09OU1RfSU5UIHRva2VuLgor
ICAgICAgICB0b2tlbi0+dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgICAgIHRva2VuLT50
ZXh0ID0gZXhwcmVzc2lvbjsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBMZXhlciogbUxleGVy
OworICAgIGNvbnN0IE1hY3JvU2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFn
bm9zdGljczsKK307CisKK0RpcmVjdGl2ZVBhcnNlcjo6RGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQq
IG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZl
SGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgorICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQoZmFs
c2UpLAorICAgIG1Ub2tlbml6ZXIodG9rZW5pemVyKSwKKyAgICBtTWFjcm9TZXQobWFjcm9TZXQp
LAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgbURpcmVjdGl2ZUhhbmRsZXIo
ZGlyZWN0aXZlSGFuZGxlcikKK3sKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tl
biogdG9rZW4pCit7CisgICAgZG8KKyAgICB7CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7CisgICAgICAgICAgICBtUGFz
dEZpcnN0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi0+
dHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtQ29uZGl0
aW9uYWxTdGFjay5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05B
TF9VTlRFUk1JTkFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2subG9jYXRpb24sIGJsb2NrLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBl
ID09ICdcbicpKTsKKworICAgIG1QYXN0Rmlyc3RTdGF0ZW1lbnQgPSB0cnVlOworfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VEaXJlY3RpdmUoVG9rZW4qIHRva2VuKQoreworICAgIGFz
c2VydCh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6UFBfSEFTSCk7CisKKyAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIGlmIChpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICAvLyBFbXB0
eSBEaXJlY3RpdmUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEaXJlY3RpdmVUeXBl
IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAvLyBXaGlsZSBpbiBhbiBl
eGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9ncm91cCwKKyAgICAvLyB3ZSBvbmx5IHBhcnNlIGNv
bmRpdGlvbmFsIGRpcmVjdGl2ZXMuCisgICAgaWYgKHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9u
YWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKKyAgICB7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2goZGly
ZWN0aXZlKQorICAgIHsKKyAgICAgIGNhc2UgRElSRUNUSVZFX05PTkU6CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
KyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIERJUkVDVElWRV9ERUZJTkU6CisgICAgICAgIHBhcnNlRGVmaW5lKHRva2Vu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9VTkRFRjoKKyAgICAgICAg
cGFyc2VVbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVf
SUY6CisgICAgICAgIHBhcnNlSWYodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGREVGOgorICAgICAgICBwYXJzZUlmZGVmKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6CisgICAgICAgIHBhcnNlSWZuZGVmKHRv
a2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTFNFOgorICAgICAg
ICBwYXJzZUVsc2UodG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZF
X0VMSUY6CisgICAgICAgIHBhcnNlRWxpZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfRU5ESUY6CisgICAgICAgIHBhcnNlRW5kaWYodG9rZW4pOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VSUk9SOgorICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9QUkFHTUE6Cisg
ICAgICAgIHBhcnNlUHJhZ21hKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJ
UkVDVElWRV9FWFRFTlNJT046CisgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHRva2VuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9WRVJTSU9OOgorICAgICAgICBwYXJzZVZl
cnNpb24odG9rZW4pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0xJTkU6
CisgICAgICAgIHBhcnNlTGluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0g
VG9rZW46OkxBU1QpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6RU9GX0lOX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgfQorfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOworCisgICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgewor
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVk
KHRva2VuLT50ZXh0LCAqbU1hY3JvU2V0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4tPnRl
eHQpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX05BTUVfUkVTRVJWRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFj
cm8gbWFjcm87CisgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZU9iajsKKyAgICBtYWNyby5u
YW1lID0gdG9rZW4tPnRleHQ7CisKKyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICB7
CisgICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8uIENvbGxlY3QgYXJndW1lbnRzLgorICAg
ICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVuYzsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRva2VuLT50ZXh0KTsKKworICAgICAgICAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsgIC8vIEdldCAnLCcuCisgICAgICAgIH0gd2hpbGUg
KHRva2VuLT50eXBlID09ICcsJyk7CisKKyAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykK
KyAgICAgICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dGV4
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsgIC8vIEdldCAnKScuCisgICAgfQorCisgICAgd2hpbGUgKCh0b2tlbi0+dHlw
ZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAg
ICAgLy8gUmVzZXQgdGhlIHRva2VuIGxvY2F0aW9uIGJlY2F1c2UgaXQgaXMgdW5uZWNlc3Nhcnkg
aW4gcmVwbGFjZW1lbnQKKyAgICAgICAgLy8gbGlzdC4gUmVzZXR0aW5nIGl0IGFsc28gYWxsb3dz
IHVzIHRvIHJldXNlIFRva2VuOjplcXVhbHMoKSB0bworICAgICAgICAvLyBjb21wYXJlIG1hY3Jv
cy4KKyAgICAgICAgdG9rZW4tPmxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAgICAgICAg
bWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjaygqdG9rZW4pOworICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAoIW1hY3JvLnJlcGxhY2VtZW50cy5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgLy8gV2hpdGVzcGFjZSBwcmVjZWRpbmcgdGhlIHJlcGxhY2VtZW50
IGxpc3QgaXMgbm90IGNvbnNpZGVyZWQgcGFydCBvZgorICAgICAgICAvLyB0aGUgcmVwbGFjZW1l
bnQgbGlzdCBmb3IgZWl0aGVyIGZvcm0gb2YgbWFjcm8uCisgICAgICAgIG1hY3JvLnJlcGxhY2Vt
ZW50cy5mcm9udCgpLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgfQorCisgICAgLy8g
Q2hlY2sgZm9yIG1hY3JvIHJlZGVmaW5pdGlvbi4KKyAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZChtYWNyby5uYW1lKTsKKyAgICBpZiAoaXRlciAhPSBt
TWFjcm9TZXQtPmVuZCgpICYmICFtYWNyby5lcXVhbHMoaXRlci0+c2Vjb25kKSkKKyAgICB7Cisg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19SRURFRklORUQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFjcm8ubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbU1hY3JvU2V0LT5pbnNlcnQoc3RkOjptYWtlX3BhaXIobWFjcm8ubmFtZSwgbWFjcm8p
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYoVG9rZW4qIHRva2VuKQor
eworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9VTkRFRik7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT50ZXh0
KTsKKyAgICBpZiAoaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1N
YWNyb1NldC0+ZXJhc2UoaXRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZihUb2tlbiog
dG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lG
KTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VJZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2
ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9r
ZW4pOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VJZm5kZWYoVG9rZW4qIHRva2Vu
KQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRk5ERUYp
OworICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFy
c2VyOjpwYXJzZUVsc2UoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUo
dG9rZW4pID09IERJUkVDVElWRV9FTFNFKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRCht
VG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRp
b25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxv
Y2suc2tpcEJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tp
cCB0aGUgd2hvbGUgbGluZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXAp
CisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfRUxTRV9BRlRFUl9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsb2NrLmZvdW5kRWxz
ZUdyb3VwID0gdHJ1ZTsKKyAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3Jv
dXA7CisgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKKworICAgIC8vIFdhcm4gaWYg
dGhlcmUgYXJlIGV4dHJhIHRva2VucyBhZnRlciAjZWxzZS4KKyAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpOworCisgICAgaWYgKG1D
b25kaXRpb25hbFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFj
aygpOworICAgIGlmIChibG9jay5za2lwQmxvY2spCisgICAgeworICAgICAgICAvLyBObyBkaWFn
bm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5lLgorICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChibG9j
ay5mb3VuZEVsc2VHcm91cCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChibG9jay5mb3VuZFZhbGlkR3JvdXApCisgICAgeworICAgICAgICAvLyBEbyBub3QgcGFy
c2UgdGhlIGV4cHJlc3Npb24uCisgICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1p
dCBhIGRpYWdub3N0aWMuCisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7CisgICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpbnQgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKKyAgICBi
bG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgYmxvY2suZm91bmRWYWxpZEdy
b3VwID0gZXhwcmVzc2lvbiAhPSAwOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
bmRpZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX0VORElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElP
TkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
LT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXpl
ciwgdG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUNvbmRpdGlvbmFsU3Rh
Y2sucG9wX2JhY2soKTsKKworICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAj
ZW5kaWYuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2Vu
KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05E
SVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVy
cm9yKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfRVJST1IpOworCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICBt
VG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykg
JiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN0cmVhbSA8
PCAqdG9rZW47CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIG1E
aXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVFcnJvcih0b2tlbi0+bG9jYXRpb24sIHN0cmVhbS5zdHIo
KSk7Cit9CisKKy8vIFBhcnNlcyBwcmFnbWEgb2YgZm9ybTogI3ByYWdtYSBuYW1lWyh2YWx1ZSld
Lgordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfUFJBR01BKTsKKworICAg
IGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFBSQUdNQV9OQU1FLAorICAgICAgICBMRUZUX1BB
UkVOLAorICAgICAgICBQUkFHTUFfVkFMVUUsCisgICAgICAgIFJJR0hUX1BBUkVOCisgICAgfTsK
KworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIHN0ZDo6c3RyaW5nIG5hbWUsIHZhbHVlOwor
ICAgIGludCBzdGF0ZSA9IFBSQUdNQV9OQU1FOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBU
b2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBzd2l0Y2goc3RhdGUrKykKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgUFJBR01BX05BTUU6CisgICAgICAgICAgICBuYW1lID0gdG9rZW4tPnRl
eHQ7CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6
SURFTlRJRklFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExFRlRfUEFS
RU46CisgICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKCcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUkFHTUFfVkFMVUU6CisgICAgICAg
ICAgICB2YWx1ZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBSSUdIVF9QQVJFTjoKKyAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYg
KHRva2VuLT50eXBlID09ICcpJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorCisgICAgdmFs
aWQgPSB2YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJh
Z21hLgorICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAg
IC8vIFdpdGhvdXQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hU
X1BBUkVOICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KKyAgICBpZiAoIXZhbGlkKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFH
TUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7
CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90
aWZ5IGZvciBlbXB0eSBwcmFnbWEuCisgICAgeworICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+
aGFuZGxlUHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwor
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKK3sKKyAg
ICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKKwor
ICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIEVYVF9OQU1FLAorICAgICAgICBDT0xPTiwK
KyAgICAgICAgRVhUX0JFSEFWSU9SCisgICAgfTsKKworICAgIGJvb2wgdmFsaWQgPSB0cnVlOwor
ICAgIHN0ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOworICAgIGludCBzdGF0ZSA9IEVYVF9OQU1F
OworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBl
ICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVYVF9OQU1FOgor
ICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklF
UikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2
YWxpZCkgbmFtZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBDT0xPTjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJzon
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAg
ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBFWFRfQkVIQVZJT1I6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2Vu
LT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05f
QkVIQVZJT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCkgYmVoYXZpb3IgPSB0b2tlbi0+dGV4
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElS
RUNUSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlk
KQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXh0ZW5zaW9uKHRva2VuLT5sb2Nh
dGlvbiwgbmFtZSwgYmVoYXZpb3IpOworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VW
ZXJzaW9uKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9
PSBESVJFQ1RJVkVfVkVSU0lPTik7CisKKyAgICBpZiAobVBhc3RGaXJzdFN0YXRlbWVudCkKKyAg
ICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpWRVJTSU9OX05P
VF9GSVJTVF9TVEFURU1FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW51bSBTdGF0ZQorICAgIHsK
KyAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICB9OworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7
CisgICAgaW50IHZlcnNpb24gPSAwOworICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwor
CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9
ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVS
OgorICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1Rf
SU5UKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZ2ZXJzaW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVS
RkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAg
ICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9
CisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lP
Tl9ESVJFQ1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
dmFsaWQpCisgICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5s
b2NhdGlvbiwgdmVyc2lvbik7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9MSU5FKTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIExJTkVfTlVNQkVS
LAorICAgICAgICBGSUxFX05VTUJFUgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsK
KyAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOworICAgIGludCBzdGF0ZSA9IExJTkVfTlVNQkVS
OworCisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1Nl
dCwgbURpYWdub3N0aWNzKTsKKyAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBMSU5FX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1CRVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmbGluZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklO
VEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRklM
RV9OVU1CRVI6CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpDT05TVF9JTlQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodmFsaWQgJiYgIXRva2VuLT5pVmFsdWUoJmZpbGUpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09W
RVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Cisg
ICAgfQorCisgICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRl
ICE9IEZJTEVfTlVNQkVSICsgMSkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHZhbGlk
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAgIG1Ub2tlbml6
ZXItPnNldExpbmVOdW1iZXIobGluZSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBGSUxFX05VTUJF
UiArIDEpIG1Ub2tlbml6ZXItPnNldEZpbGVOdW1iZXIoZmlsZSk7CisgICAgfQorfQorCitib29s
IERpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcoKSBjb25zdAoreworICAgIGlmIChtQ29uZGl0aW9u
YWxTdGFjay5lbXB0eSgpKSByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDb25kaXRpb25hbEJs
b2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICByZXR1cm4gYmxvY2su
c2tpcEJsb2NrIHx8IGJsb2NrLnNraXBHcm91cDsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pCit7CisgICAgQ29uZGl0aW9uYWxCbG9j
ayBibG9jazsKKyAgICBibG9jay50eXBlID0gdG9rZW4tPnRleHQ7CisgICAgYmxvY2subG9jYXRp
b24gPSB0b2tlbi0+bG9jYXRpb247CisKKyAgICBpZiAoc2tpcHBpbmcoKSkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgaXMgaW5zaWRlIGFub3RoZXIgY29uZGl0aW9u
YWwgZ3JvdXAKKyAgICAgICAgLy8gd2hpY2ggaXMgc2tpcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0
aGlzIHdob2xlIGJsb2NrIGlzIHNraXBwZWQuCisgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRv
IHBhcnNlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgbWlnaHQKKyAgICAgICAgLy8g
ZW1pdCBhIGRpYWdub3N0aWMuCisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgICAgIGJsb2NrLnNraXBCbG9jayA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHRva2Vu
KTsKKworICAgICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7CisgICAgICAgIHN3aXRjaCAoZGlyZWN0
aXZlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUY6CisgICAgICAgICAg
ICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYodG9rZW4pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZERUY6CisgICAgICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKSA9PSAwID8gMSA6IDA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJsb2NrLnNraXBHcm91cCA9IGV4
cHJlc3Npb24gPT0gMDsKKyAgICAgICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lv
biAhPSAwOworICAgIH0KKyAgICBtQ29uZGl0aW9uYWxTdGFjay5wdXNoX2JhY2soYmxvY2spOwor
fQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4p
Cit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRikgfHwK
KyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMSUYpKTsKKwor
ICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1E
aWFnbm9zdGljcyk7CisgICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFy
c2VyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgRXhwcmVzc2lvblBhcnNlciBleHBy
ZXNzaW9uUGFyc2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlhZ25vc3RpY3MpOworCisgICAgaW50IGV4
cHJlc3Npb24gPSAwOworICAgIG1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAgICBleHByZXNz
aW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lvbik7CisKKyAgICAvLyBXYXJuIGlmIHRo
ZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Npb24uCisgICAgaWYgKCFpc0VPRCh0b2tl
bikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09O
RElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7CisgICAgfQorCisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK2lu
dCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAor
ICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7CisK
KyAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgTWFjcm9TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnRleHQpOworICAg
IGludCBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8gMSA6IDA7CisKKyAg
ICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCisg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkKKyAgICB7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKKyAgICB9CisgICAgcmV0dXJuIGV4cHJlc3Npb247Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3ZjAwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2Vy
LmgKQEAgLTAsMCArMSw4MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0RJUkVDVElWRV9QQVJTRVJfSF8KKworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAi
TWFjcm8uaCIKKyNpbmNsdWRlICJwcF91dGlscy5oIgorI2luY2x1ZGUgIlNvdXJjZUxvY2F0aW9u
LmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2NsYXNzIERpcmVj
dGl2ZUhhbmRsZXI7CitjbGFzcyBUb2tlbml6ZXI7CisKK2NsYXNzIERpcmVjdGl2ZVBhcnNlciA6
IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgRGlyZWN0aXZlUGFyc2VyKFRva2VuaXpl
ciogdG9rZW5pemVyLAorICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisg
ICAgICAgICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAg
ICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRGlyZWN0aXZlUGFyc2VyKTsKKworICAgIHZvaWQgcGFyc2VEaXJl
Y3RpdmUoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZVVuZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmKFRv
a2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUlmZGVmKFRva2VuKiB0b2tlbik7CisgICAgdm9p
ZCBwYXJzZUlmbmRlZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbHNlKFRva2VuKiB0
b2tlbik7CisgICAgdm9pZCBwYXJzZUVsaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNl
RW5kaWYoVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBhcnNlRXJyb3IoVG9rZW4qIHRva2VuKTsK
KyAgICB2b2lkIHBhcnNlUHJhZ21hKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUV4dGVu
c2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VWZXJzaW9uKFRva2VuKiB0b2tlbik7
CisgICAgdm9pZCBwYXJzZUxpbmUoVG9rZW4qIHRva2VuKTsKKworICAgIGJvb2wgc2tpcHBpbmco
KSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ29uZGl0aW9uYWxJZihUb2tlbiogdG9rZW4pOworICAg
IGludCBwYXJzZUV4cHJlc3Npb25JZihUb2tlbiogdG9rZW4pOworICAgIGludCBwYXJzZUV4cHJl
c3Npb25JZmRlZihUb2tlbiogdG9rZW4pOworCisgICAgc3RydWN0IENvbmRpdGlvbmFsQmxvY2sK
KyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGU7CisgICAgICAgIFNvdXJjZUxvY2F0aW9u
IGxvY2F0aW9uOworICAgICAgICBib29sIHNraXBCbG9jazsKKyAgICAgICAgYm9vbCBza2lwR3Jv
dXA7CisgICAgICAgIGJvb2wgZm91bmRWYWxpZEdyb3VwOworICAgICAgICBib29sIGZvdW5kRWxz
ZUdyb3VwOworCisgICAgICAgIENvbmRpdGlvbmFsQmxvY2soKSA6CisgICAgICAgICAgICBza2lw
QmxvY2soZmFsc2UpLAorICAgICAgICAgICAgc2tpcEdyb3VwKGZhbHNlKSwKKyAgICAgICAgICAg
IGZvdW5kVmFsaWRHcm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZEVsc2VHcm91cChmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKyAgICBib29sIG1QYXN0Rmlyc3RTdGF0
ZW1lbnQ7CisgICAgc3RkOjp2ZWN0b3I8Q29uZGl0aW9uYWxCbG9jaz4gbUNvbmRpdGlvbmFsU3Rh
Y2s7CisgICAgVG9rZW5pemVyKiBtVG9rZW5pemVyOworICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7
CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKyAgICBEaXJlY3RpdmVIYW5kbGVyKiBt
RGlyZWN0aXZlSGFuZGxlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXworCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lODVmMTEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDE5NTQgQEAKKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjMuICAq
LworCisvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisKKyAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAw
MSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u
KQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogQXMg
YSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNv
bnRhaW5zCisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBk
aXN0cmlidXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxv
bmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5n
IHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJz
ZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0
ZQorICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9u
KSByZW1vdmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUg
bGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCisKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2Fz
IGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4y
IG9mIEJpc29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5
IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2Fs
bGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxv
dyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24g
dXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAg
dmFyaWFibGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1h
Y3Jvcy4KKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGlu
Y2x1ZGUgZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5
IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8K
KworLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8q
IEJpc29uIHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKworLyog
U2tlbGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisv
KiBQdXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMQorCisvKiBVc2luZyBsb2NhdGlv
bnMuICAqLworI2RlZmluZSBZWUxTUF9ORUVERUQgMAorCisvKiBTdWJzdGl0dXRlIHRoZSB2YXJp
YWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworI2RlZmluZSB5eXBhcnNlIHBwcGFyc2UKKyNk
ZWZpbmUgeXlsZXggICBwcGxleAorI2RlZmluZSB5eWVycm9yIHBwZXJyb3IKKyNkZWZpbmUgeXls
dmFsICBwcGx2YWwKKyNkZWZpbmUgeXljaGFyICBwcGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyBwcGRl
YnVnCisjZGVmaW5lIHl5bmVycnMgcHBuZXJycworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVm
IFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMg
aW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisg
ICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFRP
S19DT05TVF9JTlQgPSAyNTgsCisgICAgIFRPS19PUF9PUiA9IDI1OSwKKyAgICAgVE9LX09QX0FO
RCA9IDI2MCwKKyAgICAgVE9LX09QX05FID0gMjYxLAorICAgICBUT0tfT1BfRVEgPSAyNjIsCisg
ICAgIFRPS19PUF9HRSA9IDI2MywKKyAgICAgVE9LX09QX0xFID0gMjY0LAorICAgICBUT0tfT1Bf
UklHSFQgPSAyNjUsCisgICAgIFRPS19PUF9MRUZUID0gMjY2LAorICAgICBUT0tfVU5BUlkgPSAy
NjcKKyAgIH07CisjZW5kaWYKKy8qIFRva2Vucy4gICovCisjZGVmaW5lIFRPS19DT05TVF9JTlQg
MjU4CisjZGVmaW5lIFRPS19PUF9PUiAyNTkKKyNkZWZpbmUgVE9LX09QX0FORCAyNjAKKyNkZWZp
bmUgVE9LX09QX05FIDI2MQorI2RlZmluZSBUT0tfT1BfRVEgMjYyCisjZGVmaW5lIFRPS19PUF9H
RSAyNjMKKyNkZWZpbmUgVE9LX09QX0xFIDI2NAorI2RlZmluZSBUT0tfT1BfUklHSFQgMjY1Cisj
ZGVmaW5lIFRPS19PUF9MRUZUIDI2NgorI2RlZmluZSBUT0tfVU5BUlkgMjY3CisKKworCisKKy8q
IENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWYgY2xhbmcgb3IgZ2NjLgorI2lmIGRlZmluZWQo
X19HTlVDX18pCisKKy8vIFR1cm4gb2ZmIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3Mg
dHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisvLyBUaGUg
ZmxhZyBpcyBjYWxsZWQgIi1XdW5pbml0aWFsaXplZCIgb24gY2xhbmcgYW5kIGdjYyA8IDQuNy4K
Ky8vIE9uIGdjYyA0LjcrLCBpdCdzIGNhbGxlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIi4KKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgKCFkZWZpbmVkKF9fY2xhbmdfXykgJiYgKF9fR05VQ19f
IDwgNCB8fCBfX0dOVUNfTUlOT1JfXyA8IDcpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZWxzZQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQiCisjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfTVND
X1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisjZW5kaWYKKworI2lu
Y2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVk
ZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUgIkxl
eGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCit0eXBl
ZGVmIF9faW50NjQgWVlTVFlQRTsKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+Cit0eXBlZGVm
IGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8vIF9NU0NfVkVSCisjZGVmaW5lIFlZRU5BQkxF
X05MUyAwCisjZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNf
VFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorCituYW1lc3BhY2Ugewor
c3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOworICAg
IHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAgICBpbnQqIHJlc3Vs
dDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworCitzdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUqIGx2
YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKworCisvKiBFbmFibGluZyB0cmFjZXMuICAqLwor
I2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisvKiBFbmFibGlu
ZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMg
dW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UK
KyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdGhlIHRv
a2VuIHRhYmxlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTl9UQUJMRQorIyBkZWZpbmUgWVlUT0tFTl9U
QUJMRSAwCisjZW5kaWYKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNU
WVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIGludCBZWVNUWVBFOworIyBkZWZpbmUgeXlzdHlwZSBZ
WVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlT
VFlQRV9JU19ERUNMQVJFRCAxCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlm
CisKKworCisvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICov
CisKKworLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KKworCisjaWZkZWYgc2hvcnQKKyMgdW5k
ZWYgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9V
SU5UOCB5eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91
aW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDgg
eXl0eXBlX2ludDg7CisjZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19G
VU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIp
Cit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQg
aW50IHl5dHlwZV9pbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVm
IFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IGludCB5eXR5cGVfdWludDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5
cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGlu
dCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJ
WkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmlu
ZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZ
U0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisg
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgIGluY2x1
ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZp
bmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBp
bnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1Qp
IC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMK
KyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dp
ZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8obXNnaWQp
IG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdh
cm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBf
X0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQorIyBkZWZpbmUg
WVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNl
ZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KKyNp
Zm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRlZmluZWQgX19T
VERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVz
cGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50IGkpCisjZWxz
ZQorc3RhdGljIGludAorWVlJRCAoaSkKKyAgICBpbnQgaTsKKyNlbmRpZgoreworICByZXR1cm4g
aTsKK30KKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJC
T1NFCisKKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhl
IG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMg
IGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAgIGRlZmluZSBZ
WVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX19CVUlMVElO
X1ZBX0FSR19JTkNSCisjICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgX19hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMgICAgaW5jbHVk
ZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICAgZGVm
aW5lIGFsbG9jYSBfYWxsb2NhCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBh
bGxvY2EKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9I
ICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAgIGluY2x1ZGUg
PHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgICBpZm5k
ZWYgX1NURExJQl9ICisjICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgICBlbmRpZgorIyAg
ICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tf
QUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gICovCisj
ICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoWVlJ
RCAoMCkpCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyogVGhlIE9TIG1p
Z2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0
YWNrLAorICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRl
cy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4
Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAgICAgdG8gYWxs
b3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAq
LworIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFzb25hYmxlIGNp
cmNhIDIwMDYgKi8KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZ
TUFMTE9DCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVmIFlZU1RBQ0tf
QUxMT0NfTUFYSU1VTQorIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gWVlTSVpFX01B
WElNVU0KKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQg
X1NURExJQl9IIFwKKyAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1h
bGxvYykgXAorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorIyAg
IGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMgICBlbmRpZgor
IyAgZW5kaWYKKyMgIGlmbmRlZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MK
KyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAgZW5kaWYK
KyMgIGlmbmRlZiBZWUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBpZiAhIGRlZmlu
ZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qICEg
ZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNpZiAoISBkZWZp
bmVkIHl5b3ZlcmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKKwkgfHwg
KGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisv
KiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAg
Ki8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3M7CisgIFlZU1RZUEUgeXl2
czsKKyAgfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFs
aWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElN
VU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQorCisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJh
eSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxl
bWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisgICAgICgoTikgKiAoc2l6
ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorICAgICAgKyBZWVNUQUNL
X0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAg
VGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFwLiAgKi8KKyMgaWZu
ZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KKyMgICBk
ZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAorICAgICAgX19idWlsdGluX21lbWNweSAo
VG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorIyAgZWxzZQorIyAgIGRlZmlu
ZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAgICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJ
ICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlp
KyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCisJfQkJCQkJXAorICAgICAg
d2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogUmVsb2NhdGUgU1RBQ0sg
ZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisgICBsb2NhbCB2YXJp
YWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIg
b2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9j
YXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGln
bmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBkZWZpbmUgWVlTVEFD
S19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJ
CQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNr
LCBTdGFjaywgeXlzaXplKTsJCQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJ
eXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBf
TUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwK
KyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorCisjZW5kaWYKKworLyog
WVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNk
ZWZpbmUgWVlGSU5BTCAgMTQKKy8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAq
LworI2RlZmluZSBZWUxBU1QgICAxNzUKKworLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJt
aW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDI3CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9m
IG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5UUyAgMworLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHJ1bGVzLiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDI2CisvKiBZWU5SVUxFUyAtLSBO
dW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUgWVlOU1RBVEVTICA1MgorCisvKiBZWVRSQU5T
TEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2RlZmluZSBZWU1BWFVUT0sgICAyNjcKKwor
I2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAorICAoKHVuc2lnbmVkIGludCkgKFlZWCkg
PD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisKKy8qIFlZVFJB
TlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlM
RVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAg
ICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgIDIzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMSwgICAgIDgs
ICAgICAyLAorICAgICAgMjUsICAgIDI2LCAgICAxOSwgICAgMTcsICAgICAyLCAgICAxOCwgICAg
IDIsICAgIDIwLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgIDExLCAgICAg
MiwgICAgMTIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgNywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgNiwgICAgIDIsICAgIDI0LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDks
ICAgIDEwLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMjIKK307CisKKyNpZiBZWURF
QlVHCisvKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBy
dWxlIG51bWJlciBZWU4gaW4KKyAgIFlZUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAg
ICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcsCisgICAgICAzMSwgICAgMzUsICAgIDM5
LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAgNTksICAgIDYzLCAgICA2NywKKyAgICAg
IDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NSwgICAgODgsICAgIDkxCit9OworCisvKiBZ
WVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLworc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQoreworICAgICAgMjgsICAgICAwLCAgICAt
MSwgICAgMjksICAgIC0xLCAgICAgMywgICAgLTEsICAgIDI5LCAgICAgNCwgICAgMjksCisgICAg
ICAtMSwgICAgMjksICAgICA1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgNiwgICAgMjksICAg
IC0xLCAgICAyOSwKKyAgICAgICA3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAgOCwgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAxMCwgICAg
MjksICAgIC0xLCAgICAyOSwgICAgMTMsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAxNCwg
ICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDExLCAg
ICAyOSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTUsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDE2
LCAgICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTgsICAgIDI5LCAgICAtMSwgICAgMjksICAg
IDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAyMSwgICAgMjksCisgICAgICAtMSwgICAgMjks
ICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxOSwgICAgMjksICAgIC0xLCAgICAyMywK
KyAgICAgIDI5LCAgICAtMSwgICAgMjQsICAgIDI5LCAgICAtMSwgICAgMTgsICAgIDI5LCAgICAt
MSwgICAgMTcsICAgIDI5LAorICAgICAgLTEsICAgIDI1LCAgICAyOSwgICAgMjYsICAgIC0xCit9
OworCisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlO
IHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlybGluZVtdID0K
K3sKKyAgICAgICAwLCAgICA5NiwgICAgOTYsICAgMTAzLCAgIDEwNCwgICAxMDcsICAgMTEwLCAg
IDExMywgICAxMTYsICAgMTE5LAorICAgICAxMjIsICAgMTI1LCAgIDEyOCwgICAxMzEsICAgMTM0
LCAgIDEzNywgICAxNDAsICAgMTQzLCAgIDE0NiwgICAxNDksCisgICAgIDE2MiwgICAxNzUsICAg
MTc4LCAgIDE4MSwgICAxODQsICAgMTg3LCAgIDE5MAorfTsKKyNlbmRpZgorCisjaWYgWVlERUJV
RyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQorLyogWVlUTkFNRVtTWU1CT0wt
TlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0uCisgICBGaXJzdCwg
dGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMu
ICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Cit7CisgICIkZW5kIiwg
ImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVE9LX0NPTlNUX0lOVCIsICJUT0tfT1BfT1IiLAorICAi
VE9LX09QX0FORCIsICInfCciLCAiJ14nIiwgIicmJyIsICJUT0tfT1BfTkUiLCAiVE9LX09QX0VR
IiwgIic8JyIsCisgICInPiciLCAiVE9LX09QX0dFIiwgIlRPS19PUF9MRSIsICJUT0tfT1BfUklH
SFQiLCAiVE9LX09QX0xFRlQiLCAiJysnIiwKKyAgIictJyIsICInKiciLCAiJy8nIiwgIiclJyIs
ICJUT0tfVU5BUlkiLCAiJyEnIiwgIid+JyIsICInKCciLCAiJyknIiwKKyAgIiRhY2NlcHQiLCAi
aW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisv
KiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvCisgICB0b2tlbiBZWUxFWC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTks
ICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKKyAgICAgMjYyLCAgICA2MCwgICAg
NjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUsICAgIDQyLAorICAg
ICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAgNDEKK307CisjIGVu
ZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUg
WVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQorewor
ICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Cit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVtYmVy
IG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAg
ICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAg
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0
byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQorICAgU1RBVEUtTlVNIHdoZW4gWVlUQUJMRSBkb2Vzbid0
IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICBtZWFucyB0aGUgZGVmYXVs
dCBpcyBhbiBlcnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10g
PQoreworICAgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMiwgICAgMjUsCisgICAgICAyNCwgICAgMjIsICAgIDIzLCAgICAgMCwgICAg
IDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAxMSwgICAgMTIsICAg
IDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAyMSwKKyAgICAgIDIwLCAgICAxOQorfTsKKwor
LyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5
ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAgNywgICAgIDgKK307CisKKy8qIFlZUEFDVFtT
VEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwor
ICAgU1RBVEUtTlVNLiAgKi8KKyNkZWZpbmUgWVlQQUNUX05JTkYgLTExCitzdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAorICAgICAtMTEsICAg
LTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
NDYsCisgICAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0Niwg
ICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDYsICAgLTExLCAgICA4
NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAorICAgICAxNTQsICAgLTEwLCAg
IC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAzMSwgICAtMTEsCisg
ICAgIC0xMSwgICAtMTEKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KK3sKKyAgICAgLTExLCAgIC0xMSwgICAgLTIK
K307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0
ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdh
dGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAg
SWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50
YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXl0YWJsZVtdID0KK3sKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMy
LCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
CisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDEsCisgICAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwK
KyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAg
IDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAyMiwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyCit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1td
ID0KK3sKKyAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAgMCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwK
KyAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCisgICAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgICA1LCAg
ICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAor
ICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxCit9
OworCisvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUp
IGFjY2Vzc2luZworICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMTcsICAg
IDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
CisgICAgICAyOSwgICAgMjkKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0g
MCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZ
CQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2Vw
dGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJ
Z290byB5eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJy
b3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNp
dGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0ND
IHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKwor
I2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAg
KCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAor
ZG8JCQkJCQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwK
KyAgICB7CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5
bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNo
YXIpOwkJCQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFj
a3VwOwkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJ
CQlcCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJh
Y2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit3aGls
ZSAoWVlJRCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQky
NTYKKworCisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhT
WzFdIHRvIFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1w
dHkgbG9jYXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChh
bHdheXMgZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0td
KQorI2lmbmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVu
dCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAoTikpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7CQkJ
CQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmly
c3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEp
LmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChS
aHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xP
QyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJ
CVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxh
c3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJ
ICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkg
ICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAg
d2hpbGUgKFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJp
bnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFu
ZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJl
YWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLwor
CisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAg
ZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZp
bGUsICIlZC4lZC0lZC4lZCIsCQkJXAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZp
cnN0X2NvbHVtbiwJXAorCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1u
KQorIyBlbHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQp
IDApCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0
aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmlu
ZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlM
RVggeXlsZXggKCZ5eWx2YWwsIGNvbnRleHQpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2lu
ZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisj
ICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRG
KEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJ
TlRGIEFyZ3M7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xf
UFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkg
IFwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9s
X3ByaW50IChzdGRlcnIsCQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisg
ICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAg
XAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3By
aW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
dmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJ
TEUgKnl5b3V0cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0
IHl5dmFsdWVwOworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZh
bHVlcCkKKyAgICByZXR1cm47CisgIFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAor
ICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251
bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVu
ZGlmCisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7Cisg
ICAgfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0
YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRleHQpCisjZWxzZQor
c3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAs
IGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNU
WVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRp
ZgoreworICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZRlBSSU5URiAo
eXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5eV9zeW1ib2xf
dmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KTsKKyAgWVlG
UFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5X3N0YWNrX3By
aW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwK
K3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQx
NiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3Rh
Y2tfcHJpbnQgKGJvdHRvbSwgdG9wKQorICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOworICAgIHl5
dHlwZV9pbnQxNiAqdG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sg
bm93Iik7CisgIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKKyAgICBZWUZQUklOVEYg
KHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Cit9
CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJ
CQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20p
LCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhhdCB0aGUgWVlS
VUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRl
ZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVm
aW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5
dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5
eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCisgICAgWVlTVFlQRSAqeXl2
c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlmCit7Cisg
IGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIHVuc2lnbmVkIGxvbmcg
aW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVj
aW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisJICAgICB5eXJ1bGUgLSAxLCB5
eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLworICBmb3IgKHl5aSA9
IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLCAi
ICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgeXly
aHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAorCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCisJCSAgICAgICAJCSAgICAgICAsIGNvbnRleHQpOworICAgICAgZnByaW50ZiAo
c3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxl
KQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAorICAgIHl5X3JlZHVjZV9wcmlu
dCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCit9IHdoaWxlIChZWUlEICgwKSkKKworLyogTm9u
emVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBz
byB0aGF0CisgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KK2ludCB5eWRlYnVn
OworI2Vsc2UgLyogIVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmlu
ZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQorI2VuZGlmIC8qICFZWURFQlVHICovCisKKworLyogWVlJTklUREVQVEggLS0gaW5pdGlh
bCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAor
IyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhp
bXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRo
ZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3Qg
bWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgor
ICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKyAg
IGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAq
LworCisjaWZuZGVmIFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKKyNlbmRp
ZgorCisMCisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlm
IGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICisjICAgZGVmaW5lIHl5c3Ry
bGVuIHN0cmxlbgorIyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwor
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyBZWVNJWkVf
VAoreXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vsc2UKK3N0YXRpYyBZWVNJWkVfVAor
eXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5c3RyOworI2VuZGlmCit7CisgIFlZ
U0laRV9UIHl5bGVuOworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQor
ICAgIGNvbnRpbnVlOworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisj
IGlmbmRlZiB5eXN0cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RS
SU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkK
KyMgIGVsc2UKKy8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mg
b2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICovCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKGNo
YXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreXlz
dHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisgICAgY2hhciAqeXlkZXN0OworICAgIGNvbnN0IGNoYXIg
Knl5c3JjOworI2VuZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAq
eXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAg
Y29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorCisj
IGlmbmRlZiB5eXRuYW1lcnIKKy8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RS
IGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5CisgICBxdW90ZXMgYW5kIGJhY2tzbGFz
aGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUKKyAgIGhldXJpc3Rp
YyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5n
CisgICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVy
IHRoYW4KKyAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRu
YW1lLiAgSWYgWVlSRVMgaXMKKyAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4g
dGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdvdWxkIGhhdmUgYmVlbi4gICovCitz
dGF0aWMgWVlTSVpFX1QKK3l5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3Ry
KQoreworICBpZiAoKnl5c3RyID09ICciJykKKyAgICB7CisgICAgICBZWVNJWkVfVCB5eW4gPSAw
OworICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CisKKyAgICAgIGZvciAoOzspCisJc3dp
dGNoICgqKyt5eXApCisJICB7CisJICBjYXNlICdcJyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290
byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCisJICBjYXNlICdcXCc6CisJICAgIGlmICgqKyt5eXAg
IT0gJ1xcJykKKwkgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisJICAgIC8qIEZhbGwg
dGhyb3VnaC4gICovCisJICBkZWZhdWx0OgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNb
eXluXSA9ICp5eXA7CisJICAgIHl5bisrOworCSAgICBicmVhazsKKworCSAgY2FzZSAnIic6CisJ
ICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5
bjsKKwkgIH0KKyAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlmICghIHl5
cmVzKQorICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0cGNweSAo
eXlyZXMsIHl5c3RyKSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8gWVlSRVNV
TFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorICAgWVlDSEFS
IHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3Bp
ZWQsCisgICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4gIElmIFlZUkVTVUxU
IGlzIG51bGwsIGRvIG5vdAorICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJl
ciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCisgICBjb3BpZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwg
cmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKKyAgIG1lc3NhZ2Ugd2lsbCBk
by4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMgZHVyaW5nCisgICBz
aXplIGNhbGN1bGF0aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXlzeW50YXhfZXJyb3IgKGNo
YXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKK3sKKyAgaW50IHl5biA9IHl5
cGFjdFt5eXN0YXRlXTsKKworICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZ
TEFTVCkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgeXl0eXBlID0g
WVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWVNJWkVfVCB5eXNpemUwID0geXl0bmFtZXJy
ICgwLCB5eXRuYW1lW3l5dHlwZV0pOworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsK
KyAgICAgIFlZU0laRV9UIHl5c2l6ZTE7CisgICAgICBpbnQgeXlzaXplX292ZXJmbG93ID0gMDsK
KyAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAgICAg
Y2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgICAgICBp
bnQgeXl4OworCisjIGlmIDAKKyAgICAgIC8qIFRoaXMgaXMgc28geGdldHRleHQgc2VlcyB0aGUg
dHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKKwkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4g
ICovCisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpOworICAgICAgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpOworICAgICAgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworICAg
ICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBv
ciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGlu
ZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOworIyBlbmRpZgorICAgICAgY2hhciAqeXlmbXQ7Cisg
ICAgICBjaGFyIGNvbnN0ICp5eWY7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0
ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworICAgICAgc3RhdGljIGNoYXIg
Y29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7CisgICAgICBzdGF0aWMgY2hh
ciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKKyAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5
dW5leHBlY3RlZAorCQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCisJCSAgICArICgoWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCisJCSAgICAgICAqIChzaXplb2YgeXlvciAt
IDEpKV07CisgICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0aW5nOworCisgICAg
ICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRl
eGVzIGluCisJIFlZQ0hFQ0suICAqLworICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15
eW4gOiAwOworCisgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFu
ZCB5eXRuYW1lLiAgKi8KKyAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsK
KyAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6
IFlZTlRPS0VOUzsKKyAgICAgIGludCB5eWNvdW50ID0gMTsKKworICAgICAgeXlhcmdbMF0gPSB5
eXRuYW1lW3l5dHlwZV07CisgICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZvcm1hdCwgeXl1bmV4
cGVjdGVkKTsKKworICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5
eCkKKwlpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCisJ
ICB7CisJICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisJ
ICAgICAgeworCQl5eWNvdW50ID0gMTsKKwkJeXlzaXplID0geXlzaXplMDsKKwkJeXlmb3JtYXRb
c2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAg
ICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOworCSAgICB5eXNpemUxID0geXlzaXpl
ICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOworCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0g
KHl5c2l6ZTEgPCB5eXNpemUpOworCSAgICB5eXNpemUgPSB5eXNpemUxOworCSAgICB5eWZtdCA9
IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOworCSAgICB5eXByZWZpeCA9IHl5b3I7CisJICB9
CisKKyAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAgICB5eXNpemUxID0geXlzaXplICsg
eXlzdHJsZW4gKHl5Zik7CisgICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNp
emUpOworICAgICAgeXlzaXplID0geXlzaXplMTsKKworICAgICAgaWYgKHl5c2l6ZV9vdmVyZmxv
dykKKwlyZXR1cm4gWVlTSVpFX01BWElNVU07CisKKyAgICAgIGlmICh5eXJlc3VsdCkKKwl7CisJ
ICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidzIG5hbWUg
c3BhY2UuCisJICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0
cmFuc2xhdGlvbgorCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVy
IG9mICIlcyJzLiAgKi8KKwkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OworCSAgaW50IHl5aSA9IDA7
CisJICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKCp5
eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkKKwkJeworCQkgIHl5
cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKwkJICB5eWYgKz0gMjsKKwkJfQor
CSAgICAgIGVsc2UKKwkJeworCQkgIHl5cCsrOworCQkgIHl5ZisrOworCQl9CisJICAgIH0KKwl9
CisgICAgICByZXR1cm4geXlzaXplOworICAgIH0KK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJP
U0UgKi8KKwwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KK3wgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8
CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisv
KkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitz
dGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZ
U1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5
eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBj
aGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOworICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAg
IENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlV
U0UgKGNvbnRleHQpOworCisgIGlmICgheXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOwor
ICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7
CisKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOwor
ICAgIH0KK30KKwwKKworLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5
cGVzLiAgKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsK
KyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFN
ICovCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlw
YXJzZSAoQ29udGV4dCAqY29udGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYK
KyNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKworCisKKworCisKKy8qLS0tLS0tLS0tLS4K
K3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNp
ZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBk
ZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZv
aWQgKllZUEFSU0VfUEFSQU0pCisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQor
ICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJB
TSAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisg
ICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlw
YXJzZSAoQ29udGV4dCAqY29udGV4dCkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisg
ICAgQ29udGV4dCAqY29udGV4dDsKKyNlbmRpZgorI2VuZGlmCit7CisgIC8qIFRoZSBsb29rLWFo
ZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2Yg
dGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisvKiBOdW1iZXIg
b2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworaW50IHl5bmVycnM7CisKKyAgaW50IHl5c3Rh
dGU7CisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTnVtYmVyIG9mIHRva2VucyB0
byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgIGludCB5eWVycnN0
YXR1czsKKyAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkg
dG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAwOworI2lmIFlZRVJST1JfVkVSQk9T
RQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXpl
LiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOwor
ICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisgIC8q
IFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgIGB5eXNzJzogcmVsYXRlZCB0byBz
dGF0ZXMsCisgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCisgICAgIGB5
eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0
aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgIHRvIHJlYWxs
b2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworCisgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisg
IHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgIHl5dHlwZV9pbnQxNiAqeXlzcyA9
IHl5c3NhOworICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgIC8qIFRoZSBzZW1hbnRpYyB2YWx1
ZSBzdGFjay4gICovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICBZWVNUWVBFICp5
eXZzID0geXl2c2E7CisgIFlZU1RZUEUgKnl5dnNwOworCisKKworI2RlZmluZSBZWVBPUFNUQUNL
KE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQorCisgIFlZU0laRV9UIHl5c3RhY2tz
aXplID0gWVlJTklUREVQVEg7CisKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBz
ZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVz
LiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBv
biB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5v
IHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICBZWURQ
UklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOwor
ICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJ
LyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNr
IHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24g
c3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0
YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXpl
ZC4gICovCisKKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNl
dHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGlj
aCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4g
YWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFj
a3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUg
ZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlz
c3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQor
ICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0
YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5
eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBj
aGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ug
c28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9y
eS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOworCisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0
aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4g
IFRoaXMgdXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBl
eHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93
IGlzIGEgbWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAor
CQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5
c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKworCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3Mg
PSB5eXNzMTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92ZXJmbG93
ICovCisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFi
OworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAg
ICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0ZWRsYWI7
CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNr
c2l6ZSkKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5cGVfaW50
MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlh
bGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlm
ICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5
eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKworIyAgdW5kZWYgWVlTVEFDS19SRUxP
Q0FURQorCWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAg
ICAgfQorIyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3Ag
PSB5eXNzICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisK
KworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1
XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYg
KHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisKKyAg
WVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKwor
ICBnb3RvIHl5YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0t
LS0tLS0tLSovCit5eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdp
dmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2stYWhlYWQgdG9rZW4gaWYg
d2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0
IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFk
IHRva2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFD
VF9OSU5GKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBs
b29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZ
Q0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3lt
Ym9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7
CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAgeXljaGFyID0g
eXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBv
ZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRva2VuID0gWVlU
UkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlz
IiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElmIHRoZSBwcm9w
ZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bworICAg
ICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4gKz0geXl0b2tl
bjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRv
a2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5
eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklO
RikKKwlnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1
Y2U7CisgICAgfQorCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAv
KiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2Zm
IGVycm9yCisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0
YXR1cy0tOworCisgIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lN
Qk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAv
KiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLworICBpZiAo
eXljaGFyICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5
bjsKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0
YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07Cisg
IGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVk
dWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgor
ICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5
eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQg
dGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAg
IE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAg
ICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNo
b3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0
aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQor
ICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAq
LworICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4p
OworICBzd2l0Y2ggKHl5bikKKyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAg
ICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50PigoeXl2c3BbKDEpIC0gKDEp
XSkpOworICAgICAgICBZWUFDQ0VQVDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8fCAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDU6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNwWygzKSAtICgzKV0p
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
ICYgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5Ogor
CisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICE9ICh5eXZzcFso
MykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNwWygzKSAtICgzKV0p
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5
dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE0OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDwgKHl5
dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAoeXl2c3BbKDMpIC0g
KDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAgICAg
ICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxOToKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7
CisgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3Ry
ZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiICUgIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9O
X0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICUgKHl5dnNwWygz
KSAtICgzKV0pOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIwOgor
CisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKKyAgICAgICAg
ICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICBzdHJlYW0gPDwgKHl5
dnNwWygxKSAtICgzKV0pIDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4t
PmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjE6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorCisgICAgeworICAgICAgICAoeXl2
YWwpID0gISAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDIzOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAgICAgICAoeXl2YWwp
ID0gLSAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI1
OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDI2OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0g
KHl5dnNwWygyKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKworLyogTGluZSAxMjY3
IG9mIHlhY2MuYy4gICovCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgWVlfU1lN
Qk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZ
UE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywg
eXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUg
cmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0
IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1
bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKwor
ICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8
PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5
c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0
ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0g
aGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9t
IGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0dXMpCisg
ICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAgICB5eWVy
cm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisgICAgICB7CisJWVlT
SVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7CisJaWYg
KHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJ
TVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKKwkgICAgaWYg
KCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVN
KSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworCSAgICBpZiAoeXlt
c2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIHl5bXNn
ID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7CisJICAgIGlmICh5eW1zZykKKwkg
ICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXl5bXNn
ID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworCSAgICAgIH0K
KwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKKwkgIHsK
KwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKwkg
ICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgeXll
cnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisJICAgIGlmICh5eXNpemUgIT0g
MCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAgfQorICAgICAgfQorI2VuZGlmCisg
ICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAgICB7CisgICAgICAvKiBJZiBq
dXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgor
CSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisJ
eworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5
eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHl5
ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWws
IGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CisgICAgfQorCisgIC8qIEVsc2Ug
d2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJy
b3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxhYiAt
LSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgorCisg
IC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGlu
dm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5l
dmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05EKi8g
MCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1i
b2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVSUk9S
LiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJsYWIx
OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRh
eCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJzdGF0
dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwor
CisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAg
aWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAo
MCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJ
ICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJ
CWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVj
YXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlz
c3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9w
cGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBP
UFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlB
Q0NFUFQ7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKworICAvKiBTaGlmdCB0aGUgZXJyb3Ig
dG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5
eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFi
IC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0
dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0
bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1
cm47CisKKyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVz
dGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKGNvbnRleHQsIFlZ
XygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91
Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5
Y2hhciAhPSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBs
b29rYWhlYWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7CisgIC8qIERvIG5vdCBy
ZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKyAg
ICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOwor
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB3aGlsZSAoeXlzc3AgIT0geXlzcykK
KyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCisJCSAgeXlzdG9z
Wyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0K
KyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZS
RUUgKHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5
eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNlbmRpZgorICAvKiBNYWtlIHN1
cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKK30KKworCisK
KworCitpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAg
aW50IHR5cGUgPSAwOworCisgICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOwor
ICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNP
TlNUX0lOVDoKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CisgICAgICAg
IGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1cs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICB9CisgICAgICAgICpsdmFscCA9IHN0YXRpY19jYXN0
PFlZU1RZUEU+KHZhbCk7CisgICAgICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19P
UF9PUjsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09Q
X0FORDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1Bf
TkU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VR
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsg
YnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJy
ZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hU
OyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xF
RlQ7IGJyZWFrOworICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2Fz
ZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJy
ZWFrOworICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6
IHR5cGUgPSAnPCc7IGJyZWFrOworICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwor
ICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUg
PSAnJSc7IGJyZWFrOworICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAg
Y2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7
IGJyZWFrOworICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAn
KCc6IHR5cGUgPSAnKCc7IGJyZWFrOworICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFr
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRo
ZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAh
PSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQor
Cit2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQorewor
ICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElE
X0VYUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50
b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24p
OworfQorCituYW1lc3BhY2UgcHAgeworCitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFy
c2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVy
KGxleGVyKSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhw
cmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBD
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsK
KyAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsK
KyAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29u
dGV4dCk7CisgICAgc3dpdGNoIChyZXQpCisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2Fz
ZSAxOgorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAi
Iik7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFs
c2UpOworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxf
RVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmV0ID09IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA5MmQwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuaApAQCAtMCwwICsx
LDM0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQ
UkVTU0lPTl9QQVJTRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJ
T05fUEFSU0VSX0hfCisKKyNpbmNsdWRlICJwcF91dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sK
KworY2xhc3MgRGlhZ25vc3RpY3M7CitjbGFzcyBMZXhlcjsKK3N0cnVjdCBUb2tlbjsKKworY2xh
c3MgRXhwcmVzc2lvblBhcnNlcgoreworICBwdWJsaWM6CisgICAgRXhwcmVzc2lvblBhcnNlcihM
ZXhlciogbGV4ZXIsIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7CisKKyAgICBib29sIHBhcnNl
KFRva2VuKiB0b2tlbiwgaW50KiByZXN1bHQpOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOworCisgICAgTGV4ZXIqIG1MZXhl
cjsKKyAgICBEaWFnbm9zdGljcyogbURpYWdub3N0aWNzOworfTsKKworfSAgLy8gbmFtZXNwYWNl
IHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLnkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42MjlkNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2Vy
LnkKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24u
CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRl
X3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBwcmVwcm9jZXNzb3IgZXhw
cmVzc2lvbiBwYXJzZXIuCisqLworCisleworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBp
cyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisv
LyBJZiBjbGFuZyBvciBnY2MuCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKworLy8gVHVybiBvZmYg
dW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2Vu
ZXJhdGVkIHBwbHZhbCB2YXJpYWJsZS4KKy8vIE9uIGdjYyA0LjcrLCBUaGUgZmxhZyBpcyBjYWxs
ZWQgIi1XbWF5YmUtdW5pbml0aWFsaXplZCIuCisvLyBPbiBjbGFuZyBhbmQgZ2NjIDwgNC43LCB0
aGUgZmxhZyBpcyBjYWxsZWQgIi1XdW5pbml0aWFsaXplZCIuCisjaWYgIWRlZmluZWQoX19jbGFu
Z19fKSAmJiAoKF9fR05VQ19fID09IDQgJiYgX19HTlVfQ19NSU5PUl9fID49IDcpIHx8IF9fR05V
Q19fID4gNCkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtYXliZS11bmluaXRp
YWxpemVkIgorI2Vsc2UKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRp
YWxpemVkIgorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFy
c2VyLmgiCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNs
dWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7
CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOwor
I2VuZGlmICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVOQUJMRV9OTFMgMAorI2RlZmluZSBZWUxU
WVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZ
WVNUWVBFX0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7Cisg
ICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOwor
ICAgIHBwOjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNw
YWNlCislfQorCislcHVyZS1wYXJzZXIKKyVuYW1lLXByZWZpeD0icHAiCislcGFyc2UtcGFyYW0g
e0NvbnRleHQgKmNvbnRleHR9CislbGV4LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0fQorCislewor
c3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7CitzdGF0
aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7Cisl
fQorCisldG9rZW4gVE9LX0NPTlNUX0lOVAorJWxlZnQgVE9LX09QX09SCislbGVmdCBUT0tfT1Bf
QU5ECislbGVmdCAnfCcKKyVsZWZ0ICdeJworJWxlZnQgJyYnCislbGVmdCBUT0tfT1BfRVEgVE9L
X09QX05FCislbGVmdCAnPCcgJz4nIFRPS19PUF9MRSBUT0tfT1BfR0UKKyVsZWZ0IFRPS19PUF9M
RUZUIFRPS19PUF9SSUdIVAorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdo
dCBUT0tfVU5BUlkKKworJSUKKworaW5wdXQKKyAgICA6IGV4cHJlc3Npb24geworICAgICAgICAq
KGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCQxKTsKKyAgICAgICAgWVlBQ0NF
UFQ7CisgICAgfQorOworCitleHByZXNzaW9uCisgICAgOiBUT0tfQ09OU1RfSU5UCisgICAgfCBl
eHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8fCAkMzsK
KyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9BTkQgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgJiYgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhwcmVzc2lvbiB7
CisgICAgICAgICQkID0gJDEgfCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICdeJyBleHBy
ZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSBeICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
JyYnIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICYgJDM7CisgICAgfQorICAgIHwgZXhw
cmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgIT0gJDM7Cisg
ICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfRVEgZXhwcmVzc2lvbiB7CisgICAgICAgICQk
ID0gJDEgPT0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfR0UgZXhwcmVzc2lv
biB7CisgICAgICAgICQkID0gJDEgPj0gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiBUT0tf
T1BfTEUgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPD0gJDM7CisgICAgfQorICAgIHwg
ZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPiAkMzsKKyAgICB9
CisgICAgfCBleHByZXNzaW9uICc8JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA8ICQz
OworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09QX1JJR0hUIGV4cHJlc3Npb24geworICAg
ICAgICAkJCA9ICQxID4+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gVE9LX09QX0xFRlQg
ZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVz
c2lvbiAnLScgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgLSAkMzsKKyAgICB9CisgICAg
fCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSArICQzOworICAg
IH0KKyAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24geworICAgICAgICBpZiAoJDMgPT0g
MCkgeworICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAg
IHN0cmVhbSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRl
eHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOworICAgICAg
ICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkID0gJDEgJSAk
MzsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJy8nIGV4cHJlc3Npb24gewor
ICAgICAgICBpZiAoJDMgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0
cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiIC8gIiA8PCAkMzsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4t
PmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
LmNfc3RyKCkpOworICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICQkID0gJDEgLyAkMzsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
JyonIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQxICogJDM7CisgICAgfQorICAgIHwgJyEn
IGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKKyAgICAgICAgJCQgPSAhICQyOworICAgIH0K
KyAgICB8ICd+JyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7CisgICAgICAgICQkID0gfiAk
MjsKKyAgICB9CisgICAgfCAnLScgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgeworICAgICAg
ICAkJCA9IC0gJDI7CisgICAgfQorICAgIHwgJysnIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZ
IHsKKyAgICAgICAgJCQgPSArICQyOworICAgIH0KKyAgICB8ICcoJyBleHByZXNzaW9uICcpJyB7
CisgICAgICAgICQkID0gJDI7CisgICAgfQorOworCislJQorCitpbnQgeXlsZXgoWVlTVFlQRSog
bHZhbHAsIENvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW50IHR5cGUgPSAwOworCisgICAgcHA6
OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOworICAgIHN3aXRjaCAodG9rZW4tPnR5cGUp
CisgICAgeworICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoKKyAgICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CisgICAgICAgIGlmICghdG9rZW4tPnVWYWx1ZSgmdmFs
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAg
ICB9CisgICAgICAgICpsdmFscCA9IHN0YXRpY19jYXN0PFlZU1RZUEU+KHZhbCk7CisgICAgICAg
IHR5cGUgPSBUT0tfQ09OU1RfSU5UOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNh
c2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7CisgICAgICBjYXNl
IHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7CisgICAgICBjYXNl
IHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOworICAgICAgY2FzZSAn
fCc6IHR5cGUgPSAnfCc7IGJyZWFrOworICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJyZWFr
OworICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOworICAgICAgY2FzZSAnPic6IHR5
cGUgPSAnPic7IGJyZWFrOworICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOworICAg
ICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOworICAgICAgY2FzZSAnKyc6IHR5cGUgPSAn
Kyc7IGJyZWFrOworICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOworICAgICAgY2Fz
ZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOworICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7IGJy
ZWFrOworICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOworICAgICAgY2FzZSAnfic6
IHR5cGUgPSAnfic7IGJyZWFrOworICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFrOwor
ICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOworCisgICAgICBkZWZhdWx0OiBicmVh
azsKKyAgICB9CisKKyAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJy
ZW50IG9uZSBpcyB2YWxpZC4KKyAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+bGV4
KHRva2VuKTsKKworICAgIHJldHVybiB0eXBlOworfQorCit2b2lkIHl5ZXJyb3IoQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOworfQorCituYW1lc3BhY2UgcHAgewor
CitFeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKSA6CisgICAgbUxleGVyKGxleGVyKSwKKyAgICBtRGlhZ25vc3Rp
Y3MoZGlhZ25vc3RpY3MpCit7Cit9CisKK2Jvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9r
ZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKK3sKKyAgICBDb250ZXh0IGNvbnRleHQ7CisgICAgY29u
dGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKKyAgICBjb250ZXh0LmxleGVyID0gbUxl
eGVyOworICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKKyAgICBjb250ZXh0LnJlc3VsdCA9IHJl
c3VsdDsKKyAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7CisgICAgc3dpdGNoIChyZXQp
CisgICAgeworICAgICAgY2FzZSAwOgorICAgICAgY2FzZSAxOgorICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSAyOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6
T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworCisg
ICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwg
IiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID09IDA7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xMTg2OGMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAKQEAgLTAs
MCArMSw1NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJJbnB1dC5oIgorCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KKwor
bmFtZXNwYWNlIHBwCit7CisKK0lucHV0OjpJbnB1dCgpIDogbUNvdW50KDApLCBtU3RyaW5nKDAp
Cit7Cit9CisKK0lucHV0OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
Z1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pIDoKKyAgICBtQ291bnQoY291bnQpLAorICAgIG1TdHJp
bmcoc3RyaW5nKQoreworICAgIGFzc2VydChtQ291bnQgPj0gMCk7CisgICAgbUxlbmd0aC5yZXNl
cnZlKG1Db3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ291bnQ7ICsraSkKKyAgICB7
CisgICAgICAgIGludCBsZW4gPSBsZW5ndGggPyBsZW5ndGhbaV0gOiAtMTsKKyAgICAgICAgbUxl
bmd0aC5wdXNoX2JhY2sobGVuIDwgMCA/IHN0ZDo6c3RybGVuKG1TdHJpbmdbaV0pIDogbGVuKTsK
KyAgICB9Cit9CisKK2ludCBJbnB1dDo6cmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKQorewor
ICAgIGludCBuUmVhZCA9IDA7CisgICAgd2hpbGUgKChuUmVhZCA8IG1heFNpemUpICYmIChtUmVh
ZExvYy5zSW5kZXggPCBtQ291bnQpKQorICAgIHsKKyAgICAgICAgaW50IHNpemUgPSBtTGVuZ3Ro
W21SZWFkTG9jLnNJbmRleF0gLSBtUmVhZExvYy5jSW5kZXg7CisgICAgICAgIHNpemUgPSBzdGQ6
Om1pbihzaXplLCBtYXhTaXplKTsKKyAgICAgICAgc3RkOjptZW1jcHkoYnVmICsgblJlYWQsIG1T
dHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRleCwgc2l6ZSk7CisgICAgICAg
IG5SZWFkICs9IHNpemU7CisgICAgICAgIG1SZWFkTG9jLmNJbmRleCArPSBzaXplOworCisgICAg
ICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0
cmluZy4KKyAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRleCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJ
bmRleF0pCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbVJlYWRMb2Muc0luZGV4OworICAgICAg
ICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
blJlYWQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjNzM0YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5wdXQu
aApAQCAtMCwwICsxLDQ4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfSU5QVVRfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hf
CisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBwcAoreworCisvLyBIb2xkcyBhbmQg
cmVhZHMgaW5wdXQgZm9yIExleGVyLgorY2xhc3MgSW5wdXQKK3sKKyAgcHVibGljOgorICAgIElu
cHV0KCk7CisgICAgSW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwg
Y29uc3QgaW50IGxlbmd0aFtdKTsKKworICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1D
b3VudDsgfQorICAgIGNvbnN0IGNoYXIqIHN0cmluZyhpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1TdHJpbmdbaW5kZXhdOyB9CisgICAgaW50IGxlbmd0aChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1MZW5ndGhbaW5kZXhdOyB9CisKKyAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhT
aXplKTsKKworICAgIHN0cnVjdCBMb2NhdGlvbgorICAgIHsKKyAgICAgICAgaW50IHNJbmRleDsg
IC8vIFN0cmluZyBpbmRleDsKKyAgICAgICAgaW50IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCisK
KyAgICAgICAgTG9jYXRpb24oKSA6IHNJbmRleCgwKSwgY0luZGV4KDApIHsgfQorICAgIH07Cisg
ICAgY29uc3QgTG9jYXRpb24mIHJlYWRMb2MoKSBjb25zdCB7IHJldHVybiBtUmVhZExvYzsgfQor
CisgIHByaXZhdGU6CisgICAgLy8gSW5wdXQuCisgICAgaW50IG1Db3VudDsKKyAgICBjb25zdCBj
aGFyKiBjb25zdCogbVN0cmluZzsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1MZW5ndGg7CisKKyAg
ICBMb2NhdGlvbiBtUmVhZExvYzsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzY2M2VlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9M
ZXhlci5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJMZXhl
ci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworTGV4ZXI6On5MZXhlcigpCit7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmViODVjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmgKQEAgLTAsMCArMSwyNSBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXworCituYW1lc3BhY2UgcHAKK3sK
Kworc3RydWN0IFRva2VuOworCitjbGFzcyBMZXhlcgoreworICBwdWJsaWM6CisgICAgdmlydHVh
bCB+TGV4ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKSA9IDA7Cit9
OworCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X0xFWEVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjJlMzA4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uY3BwCkBAIC0wLDAgKzEsMjMg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiTWFjcm8uaCIKKworI2luY2x1ZGUgIlRva2Vu
LmgiCisKK25hbWVzcGFjZSBwcAoreworCitib29sIE1hY3JvOjplcXVhbHMoY29uc3QgTWFjcm8m
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgorICAg
ICAgICAgICAobmFtZSA9PSBvdGhlci5uYW1lKSAmJgorICAgICAgICAgICAocGFyYW1ldGVycyA9
PSBvdGhlci5wYXJhbWV0ZXJzKSAmJgorICAgICAgICAgICAocmVwbGFjZW1lbnRzID09IG90aGVy
LnJlcGxhY2VtZW50cyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3Jv
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjMDE0OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvTWFjcm8uaApAQCAtMCwwICsxLDQ0IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X01BQ1JPX0hfCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHZlY3Rvcj4KKworbmFtZXNwYWNlIHBwCit7CisKK3N0cnVjdCBUb2tlbjsKKworc3RydWN0IE1h
Y3JvCit7CisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBrVHlwZU9iaiwKKyAgICAgICAg
a1R5cGVGdW5jCisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQ
YXJhbWV0ZXJzOworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFJlcGxhY2VtZW50czsK
KworICAgIE1hY3JvKCkgOiBwcmVkZWZpbmVkKGZhbHNlKSwgZGlzYWJsZWQoZmFsc2UpLCB0eXBl
KGtUeXBlT2JqKSB7IH0KKyAgICBib29sIGVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0
OworCisgICAgYm9vbCBwcmVkZWZpbmVkOworICAgIG11dGFibGUgYm9vbCBkaXNhYmxlZDsKKwor
ICAgIFR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIFBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKKyAgICBSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRzOworfTsKKwordHlwZWRlZiBz
dGQ6Om1hcDxzdGQ6OnN0cmluZywgTWFjcm8+IE1hY3JvU2V0OworCit9ICAvLyBuYW1lc3BhY2Ug
cHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3Jv
RXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xMTE2YzUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcApAQCAtMCwwICsxLDM3
MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0
aWNzQmFzZS5oIgorI2luY2x1ZGUgIlRva2VuLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFz
cyBUb2tlbkxleGVyIDogcHVibGljIExleGVyCit7CisgcHVibGljOgorICAgIHR5cGVkZWYgc3Rk
Ojp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9yOworCisgICAgVG9rZW5MZXhlcihUb2tlblZlY3Rv
ciogdG9rZW5zKQorICAgIHsKKyAgICAgICAgdG9rZW5zLT5zd2FwKG1Ub2tlbnMpOworICAgICAg
ICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4
KFRva2VuKiB0b2tlbikKKyAgICB7CisgICAgICAgIGlmIChtSXRlciA9PSBtVG9rZW5zLmVuZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICB0b2tlbi0+cmVzZXQoKTsKKyAgICAgICAgICAgIHRv
a2VuLT50eXBlID0gVG9rZW46OkxBU1Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICAqdG9rZW4gPSAqbUl0ZXIrKzsKKyAgICAgICAgfQorICAgIH0KKwor
IHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRva2VuTGV4ZXIpOwor
CisgICAgVG9rZW5WZWN0b3IgbVRva2VuczsKKyAgICBUb2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgbUl0ZXI7Cit9OworCitNYWNyb0V4cGFuZGVyOjpNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAg
ICBtTGV4ZXIobGV4ZXIpLAorICAgIG1NYWNyb1NldChtYWNyb1NldCksCisgICAgbURpYWdub3N0
aWNzKGRpYWdub3N0aWNzKQoreworfQorCitNYWNyb0V4cGFuZGVyOjp+TWFjcm9FeHBhbmRlcigp
Cit7CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG1Db250ZXh0U3RhY2suc2l6ZSgp
OyArK2kpCisgICAgeworICAgICAgICBkZWxldGUgbUNvbnRleHRTdGFja1tpXTsKKyAgICB9Cit9
CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAgICB3aGlsZSAo
dHJ1ZSkKKyAgICB7CisgICAgICAgIGdldFRva2VuKHRva2VuKTsKKworICAgICAgICBpZiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2FibGVkKCkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+Zmlu
ZCh0b2tlbi0+dGV4dCk7CisgICAgICAgIGlmIChpdGVyID09IG1NYWNyb1NldC0+ZW5kKCkpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjb25zdCBNYWNybyYgbWFjcm8gPSBpdGVyLT5z
ZWNvbmQ7CisgICAgICAgIGlmIChtYWNyby5kaXNhYmxlZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gSWYgYSBwYXJ0aWN1bGFyIHRva2VuIGlzIG5vdCBleHBhbmRlZCwgaXQgaXMgbmV2ZXIg
ZXhwYW5kZWQuCisgICAgICAgICAgICB0b2tlbi0+c2V0RXhwYW5zaW9uRGlzYWJsZWQodHJ1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1hY3JvLnR5cGUg
PT0gTWFjcm86OmtUeXBlRnVuYykgJiYgIWlzTmV4dFRva2VuTGVmdFBhcmVuKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0b2tlbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFj
cm8gbmFtZSBpcyBub3QgYSAnKCcsCisgICAgICAgICAgICAvLyB0aGlzIG1hY3JvIHNob3VsZCBu
b3QgYmUgZXhwYW5kZWQuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHB1c2hNYWNybyhtYWNybywgKnRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRl
cjo6Z2V0VG9rZW4oVG9rZW4qIHRva2VuKQoreworICAgIGlmIChtUmVzZXJ2ZVRva2VuLmdldCgp
KQorICAgIHsKKyAgICAgICAgKnRva2VuID0gKm1SZXNlcnZlVG9rZW47CisgICAgICAgIG1SZXNl
cnZlVG9rZW4ucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZpcnN0
IHBvcCBhbGwgZW1wdHkgbWFjcm8gY29udGV4dHMuCisgICAgd2hpbGUgKCFtQ29udGV4dFN0YWNr
LmVtcHR5KCkgJiYgbUNvbnRleHRTdGFjay5iYWNrKCktPmVtcHR5KCkpCisgICAgeworICAgICAg
ICBwb3BNYWNybygpOworICAgIH0KKworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgKnRva2VuID0gbUNvbnRleHRTdGFjay5iYWNrKCktPmdldCgpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgfQor
fQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnVuZ2V0VG9rZW4oY29uc3QgVG9rZW4mIHRva2VuKQor
eworICAgIGlmICghbUNvbnRleHRTdGFjay5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgTWFjcm9D
b250ZXh0KiBjb250ZXh0ID0gbUNvbnRleHRTdGFjay5iYWNrKCk7CisgICAgICAgIGNvbnRleHQt
PnVuZ2V0KCk7CisgICAgICAgIGFzc2VydChjb250ZXh0LT5yZXBsYWNlbWVudHNbY29udGV4dC0+
aW5kZXhdID09IHRva2VuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0
KCFtUmVzZXJ2ZVRva2VuLmdldCgpKTsKKyAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldChuZXcg
VG9rZW4odG9rZW4pKTsKKyAgICB9Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6aXNOZXh0VG9r
ZW5MZWZ0UGFyZW4oKQoreworICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7
CisKKyAgICBib29sIGxwYXJlbiA9IHRva2VuLnR5cGUgPT0gJygnOworICAgIHVuZ2V0VG9rZW4o
dG9rZW4pOworCisgICAgcmV0dXJuIGxwYXJlbjsKK30KKworYm9vbCBNYWNyb0V4cGFuZGVyOjpw
dXNoTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYgaWRlbnRpZmllcikKK3sK
KyAgICBhc3NlcnQoIW1hY3JvLmRpc2FibGVkKTsKKyAgICBhc3NlcnQoIWlkZW50aWZpZXIuZXhw
YW5zaW9uRGlzYWJsZWQoKSk7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudHlwZSA9PSBUb2tlbjo6
SURFTlRJRklFUik7CisgICAgYXNzZXJ0KGlkZW50aWZpZXIudGV4dCA9PSBtYWNyby5uYW1lKTsK
KworICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CisgICAgaWYgKCFleHBhbmRN
YWNybyhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBleHBhbnNpb24gdW50aWwgaXQg
aXMgcG9wcGVkIG9mZiB0aGUgc3RhY2suCisgICAgbWFjcm8uZGlzYWJsZWQgPSB0cnVlOworCisg
ICAgTWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29udGV4dDsKKyAgICBjb250ZXh0
LT5tYWNybyA9ICZtYWNybzsKKyAgICBjb250ZXh0LT5yZXBsYWNlbWVudHMuc3dhcChyZXBsYWNl
bWVudHMpOworICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNvbnRleHQpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKCkKK3sKKyAgICBhc3Nl
cnQoIW1Db250ZXh0U3RhY2suZW1wdHkoKSk7CisKKyAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQg
PSBtQ29udGV4dFN0YWNrLmJhY2soKTsKKyAgICBtQ29udGV4dFN0YWNrLnBvcF9iYWNrKCk7CisK
KyAgICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7CisgICAgYXNzZXJ0KGNvbnRleHQtPm1hY3Jv
LT5kaXNhYmxlZCk7CisgICAgY29udGV4dC0+bWFjcm8tPmRpc2FibGVkID0gZmFsc2U7CisgICAg
ZGVsZXRlIGNvbnRleHQ7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8oY29u
c3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
b2tlbiYgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7CisgICAgcmVwbGFjZW1lbnRzLT5jbGVhcigp
OworICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZU9iaikKKyAgICB7CisgICAgICAg
IHJlcGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50cy5iZWdpbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZW5kKCkpOworCisgICAg
ICAgIGlmIChtYWNyby5wcmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMg
Y29uc3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18iOworICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsKKworICAgICAgICAgICAgYXNz
ZXJ0KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOworICAgICAgICAgICAgVG9rZW4mIHJlcGwg
PSByZXBsYWNlbWVudHMtPmZyb250KCk7CisgICAgICAgICAgICBpZiAobWFjcm8ubmFtZSA9PSBr
TGluZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0g
c3RyZWFtOworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmxp
bmU7CisgICAgICAgICAgICAgICAgcmVwbC50ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9PSBrRmlsZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAg
ICAgICAgICAgIHN0cmVhbSA8PCBpZGVudGlmaWVyLmxvY2F0aW9uLmZpbGU7CisgICAgICAgICAg
ICAgICAgcmVwbC50ZXh0ID0gc3RyZWFtLnN0cigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydChtYWNyby50eXBlID09IE1h
Y3JvOjprVHlwZUZ1bmMpOworICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4gYXJnczsKKyAg
ICAgICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgaWYg
KCFjb2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAmYXJncykpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmVwbGFjZU1hY3JvUGFyYW1zKG1hY3JvLCBhcmdz
LCByZXBsYWNlbWVudHMpOworICAgIH0KKworICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkg
PCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAgVG9rZW4mIHJlcGwg
PSByZXBsYWNlbWVudHMtPmF0KGkpOworICAgICAgICBpZiAoaSA9PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaW4gdGhlIHJlcGxhY2VtZW50IGxpc3QgaW5o
ZXJpdHMgdGhlIHBhZGRpbmcKKyAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgb2YgdGhlIGlkZW50
aWZpZXIgdG9rZW4uCisgICAgICAgICAgICByZXBsLnNldEF0U3RhcnRPZkxpbmUoaWRlbnRpZmll
ci5hdFN0YXJ0T2ZMaW5lKCkpOworICAgICAgICAgICAgcmVwbC5zZXRIYXNMZWFkaW5nU3BhY2Uo
aWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVwbC5s
b2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RNYWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1h
Y3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBp
ZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVj
dG9yPE1hY3JvQXJnPiogYXJncykKK3sKKyAgICBUb2tlbiB0b2tlbjsKKyAgICBnZXRUb2tlbigm
dG9rZW4pOworICAgIGFzc2VydCh0b2tlbi50eXBlID09ICcoJyk7CisKKyAgICBhcmdzLT5wdXNo
X2JhY2soTWFjcm9BcmcoKSk7CisgICAgZm9yIChpbnQgb3BlblBhcmVucyA9IDE7IG9wZW5QYXJl
bnMgIT0gMDsgKQorICAgIHsKKyAgICAgICAgZ2V0VG9rZW4oJnRva2VuKTsKKworICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FU
SU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllci5sb2NhdGlv
biwgaWRlbnRpZmllci50ZXh0KTsKKyAgICAgICAgICAgIC8vIERvIG5vdCBsb3NlIEVPRiB0b2tl
bi4KKyAgICAgICAgICAgIHVuZ2V0VG9rZW4odG9rZW4pOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0FyZyA9IGZhbHNlOyAvLyBUcnVlIGlm
IHRva2VuIGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisgICAgICAgIHN3aXRjaCAo
dG9rZW4udHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAg
KytvcGVuUGFyZW5zOworICAgICAgICAgICAgaXNBcmcgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAgICAtLW9wZW5QYXJlbnM7CisgICAg
ICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgLy8gVGhlIGluZGl2aWR1YWwgYXJndW1lbnRz
IGFyZSBzZXBhcmF0ZWQgYnkgY29tbWEgdG9rZW5zLCBidXQKKyAgICAgICAgICAgIC8vIHRoZSBj
b21tYSB0b2tlbnMgYmV0d2VlbiBtYXRjaGluZyBpbm5lciBwYXJlbnRoZXNlcyBkbyBub3QKKyAg
ICAgICAgICAgIC8vIHNlcGVyYXRlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIGlmIChvcGVuUGFy
ZW5zID09IDEpIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsKKyAgICAgICAgICAgIGlzQXJn
ID0gb3BlblBhcmVucyAhPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGlzQXJnID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGlmIChpc0FyZykKKyAgICAgICAgeworICAgICAgICAgICAgTWFjcm9Bcmcm
IGFyZyA9IGFyZ3MtPmJhY2soKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWwgd2hpdGVzcGFjZSBp
cyBub3QgcGFydCBvZiB0aGUgYXJndW1lbnQuCisgICAgICAgICAgICBpZiAoYXJnLmVtcHR5KCkp
IHRva2VuLnNldEhhc0xlYWRpbmdTcGFjZShmYWxzZSk7CisgICAgICAgICAgICBhcmcucHVzaF9i
YWNrKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IE1hY3JvOjpQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBtYWNyby5wYXJhbWV0ZXJzOworICAgIC8vIElmIHRoZXJlIGlzIG9ubHkg
b25lIGVtcHR5IGFyZ3VtZW50LCBpdCBpcyBlcXVpdmFsZW50IHRvIG5vIGFyZ3VtZW50LgorICAg
IGlmIChwYXJhbXMuZW1wdHkoKSAmJiAoYXJncy0+c2l6ZSgpID09IDEpICYmIGFyZ3MtPmZyb250
KCkuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGFyZ3MtPmNsZWFyKCk7CisgICAgfQorICAgIC8v
IFZhbGlkYXRlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChhcmdzLT5zaXplKCkg
IT0gcGFyYW1zLnNpemUoKSkKKyAgICB7CisgICAgICAgIERpYWdub3N0aWNzOjpJRCBpZCA9IGFy
Z3MtPnNpemUoKSA8IG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpID8KKyAgICAgICAgICAgIERpYWdu
b3N0aWNzOjpNQUNST19UT09fRkVXX0FSR1MgOgorICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1B
Q1JPX1RPT19NQU5ZX0FSR1M7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KGlkLCBpZGVu
dGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnRleHQpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3VtZW50IGJlZm9yZSBzdWJzdGl0
dXRpb24uCisgICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFs
bHkgYmVmb3JlIHRoZXkgYXJlCisgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgbWFjcm8gYm9keS4K
KyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgYXJncy0+c2l6ZSgpOyArK2kpCisgICAg
eworICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YXQoaSk7CisgICAgICAgIFRva2VuTGV4
ZXIgbGV4ZXIoJmFyZyk7CisgICAgICAgIE1hY3JvRXhwYW5kZXIgZXhwYW5kZXIoJmxleGVyLCBt
TWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisKKyAgICAgICAgYXJnLmNsZWFyKCk7CisgICAgICAg
IGV4cGFuZGVyLmxleCgmdG9rZW4pOworICAgICAgICB3aGlsZSAodG9rZW4udHlwZSAhPSBUb2tl
bjo6TEFTVCkKKyAgICAgICAgeworICAgICAgICAgICAgYXJnLnB1c2hfYmFjayh0b2tlbik7Cisg
ICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpyZXBsYWNlTWFjcm9QYXJhbXMo
Y29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCit7
CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG1hY3JvLnJlcGxhY2VtZW50cy5zaXpl
KCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRva2VuJiByZXBsID0gbWFjcm8ucmVwbGFj
ZW1lbnRzW2ldOworICAgICAgICBpZiAocmVwbC50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETyhhbG9rcCk6
IE9wdGltaXplIHRoaXMuCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VhcmNoIGZv
ciBtYWNybyBwYXJhbXMgZXZlcnkgdGltZS4KKyAgICAgICAgLy8gVGhlIHBhcmFtIGluZGV4IGNh
biBiZSBjYWNoZWQgd2l0aCB0aGUgcmVwbGFjZW1lbnQgdG9rZW4uCisgICAgICAgIE1hY3JvOjpQ
YXJhbWV0ZXJzOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3RkOjpmaW5kKAorICAgICAgICAgICAg
bWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpLCByZXBsLnRl
eHQpOworICAgICAgICBpZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc3RkOjpzaXplX3QgaUFyZyA9IHN0
ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBpdGVyKTsKKyAgICAgICAgY29u
c3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107CisgICAgICAgIGlmIChhcmcuZW1wdHkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3Rk
OjpzaXplX3QgaVJlcGwgPSByZXBsYWNlbWVudHMtPnNpemUoKTsKKyAgICAgICAgcmVwbGFjZW1l
bnRzLT5pbnNlcnQocmVwbGFjZW1lbnRzLT5lbmQoKSwgYXJnLmJlZ2luKCksIGFyZy5lbmQoKSk7
CisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCB0b2tlbiBpbmhlcml0cyBwYWRkaW5nIHByb3Bl
cnRpZXMgZnJvbQorICAgICAgICAvLyBtYWNybyByZXBsYWNlbWVudCB0b2tlbi4KKyAgICAgICAg
cmVwbGFjZW1lbnRzLT5hdChpUmVwbCkuc2V0SGFzTGVhZGluZ1NwYWNlKHJlcGwuaGFzTGVhZGlu
Z1NwYWNlKCkpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9F
eHBhbmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9NYWNyb0V4cGFuZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjFiNjc1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRF
Ul9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKwor
I2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHZlY3Rvcj4K
KworI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJwcF91
dGlscy5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNz
IE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAgIE1hY3JvRXhw
YW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERpYWdub3N0aWNzKiBkaWFn
bm9zdGljcyk7CisgICAgdmlydHVhbCB+TWFjcm9FeHBhbmRlcigpOworCisgICAgdmlydHVhbCB2
b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOworCisgICAgdm9pZCBnZXRUb2tlbihUb2tlbiog
dG9rZW4pOworICAgIHZvaWQgdW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4pOworICAgIGJv
b2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKKworICAgIGJvb2wgcHVzaE1hY3JvKGNvbnN0IE1h
Y3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpOworICAgIHZvaWQgcG9wTWFjcm8o
KTsKKworICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAorICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7CisKKyAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKKyAgICBib29sIGNvbGxlY3RNYWNyb0FyZ3MoY29uc3Qg
TWFjcm8mIG1hY3JvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRl
bnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+
KiBhcmdzKTsKKyAgICB2b2lkIHJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNybyYgbWFjcm8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+
JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiog
cmVwbGFjZW1lbnRzKTsKKworICAgIHN0cnVjdCBNYWNyb0NvbnRleHQKKyAgICB7CisgICAgICAg
IGNvbnN0IE1hY3JvKiBtYWNybzsKKyAgICAgICAgc3RkOjpzaXplX3QgaW5kZXg7CisgICAgICAg
IHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7CisKKyAgICAgICAgTWFjcm9Db250ZXh0
KCkgOiBtYWNybygwKSwgaW5kZXgoMCkgeyB9CisgICAgICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7
IHJldHVybiBpbmRleCA9PSByZXBsYWNlbWVudHMuc2l6ZSgpOyB9CisgICAgICAgIGNvbnN0IFRv
a2VuJiBnZXQoKSB7IHJldHVybiByZXBsYWNlbWVudHNbaW5kZXgrK107IH0KKyAgICAgICAgdm9p
ZCB1bmdldCgpIHsgYXNzZXJ0KGluZGV4ID4gMCk7IC0taW5kZXg7IH0KKyAgICB9OworCisgICAg
TGV4ZXIqIG1MZXhlcjsKKyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNz
KiBtRGlhZ25vc3RpY3M7CisKKyAgICBzdGQ6OmF1dG9fcHRyPFRva2VuPiBtUmVzZXJ2ZVRva2Vu
OworICAgIHN0ZDo6dmVjdG9yPE1hY3JvQ29udGV4dCo+IG1Db250ZXh0U3RhY2s7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JP
X0VYUEFOREVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTAyNGZlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9j
ZXNzb3IuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIlBy
ZXByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzc3RyZWFtPgor
CisjaW5jbHVkZSAiRGlhZ25vc3RpY3NCYXNlLmgiCisjaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2Vy
LmgiCisjaW5jbHVkZSAiTWFjcm8uaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5j
bHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIHBwCit7
CisKK3N0cnVjdCBQcmVwcm9jZXNzb3JJbXBsCit7CisgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0
aWNzOworICAgIE1hY3JvU2V0IG1hY3JvU2V0OworICAgIFRva2VuaXplciB0b2tlbml6ZXI7Cisg
ICAgRGlyZWN0aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNlcjsKKyAgICBNYWNyb0V4cGFuZGVyIG1h
Y3JvRXhwYW5kZXI7CisKKyAgICBQcmVwcm9jZXNzb3JJbXBsKERpYWdub3N0aWNzKiBkaWFnLAor
ICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikg
OgorICAgICAgICBkaWFnbm9zdGljcyhkaWFnKSwKKyAgICAgICAgdG9rZW5pemVyKGRpYWcpLAor
ICAgICAgICBkaXJlY3RpdmVQYXJzZXIoJnRva2VuaXplciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJl
Y3RpdmVIYW5kbGVyKSwKKyAgICAgICAgbWFjcm9FeHBhbmRlcigmZGlyZWN0aXZlUGFyc2VyLCAm
bWFjcm9TZXQsIGRpYWcpCisgICAgeworICAgIH0KK307CisKK1ByZXByb2Nlc3Nvcjo6UHJlcHJv
Y2Vzc29yKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpCit7CisgICAgbUltcGwgPSBu
ZXcgUHJlcHJvY2Vzc29ySW1wbChkaWFnbm9zdGljcywgZGlyZWN0aXZlSGFuZGxlcik7Cit9CisK
K1ByZXByb2Nlc3Nvcjo6flByZXByb2Nlc3NvcigpCit7CisgICAgZGVsZXRlIG1JbXBsOworfQor
Citib29sIFByZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGtHTFNMVmVyc2lv
biA9IDEwMDsKKworICAgIC8vIEFkZCBzdGFuZGFyZCBwcmUtZGVmaW5lZCBtYWNyb3MuCisgICAg
cHJlZGVmaW5lTWFjcm8oIl9fTElORV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fRklM
RV9fIiwgMCk7CisgICAgcHJlZGVmaW5lTWFjcm8oIl9fVkVSU0lPTl9fIiwga0dMU0xWZXJzaW9u
KTsKKyAgICBwcmVkZWZpbmVNYWNybygiR0xfRVMiLCAxKTsKKworICAgIHJldHVybiBtSW1wbC0+
dG9rZW5pemVyLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKK30KKwordm9pZCBQcmVwcm9j
ZXNzb3I6OnByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUsIGludCB2YWx1ZSkKK3sKKyAg
ICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8PCB2YWx1ZTsKKworICAg
IFRva2VuIHRva2VuOworICAgIHRva2VuLnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOworICAgIHRv
a2VuLnRleHQgPSBzdHJlYW0uc3RyKCk7CisKKyAgICBNYWNybyBtYWNybzsKKyAgICBtYWNyby5w
cmVkZWZpbmVkID0gdHJ1ZTsKKyAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOworICAg
IG1hY3JvLm5hbWUgPSBuYW1lOworICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2sodG9r
ZW4pOworCisgICAgbUltcGwtPm1hY3JvU2V0W25hbWVdID0gbWFjcm87Cit9CisKK3ZvaWQgUHJl
cHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZh
bHNlOworICAgIHdoaWxlICghdmFsaWRUb2tlbikKKyAgICB7CisgICAgICAgIG1JbXBsLT5tYWNy
b0V4cGFuZGVyLmxleCh0b2tlbik7CisgICAgICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJldHVybmluZyBpbnRlcm5hbCBw
cmVwcm9jZXNzaW5nIHRva2Vucy4KKyAgICAgICAgICAvLyBDb252ZXJ0IHByZXByb2Nlc3Npbmcg
dG9rZW5zIHRvIGNvbXBpbGVyIHRva2VucyBvciByZXBvcnQKKyAgICAgICAgICAvLyBkaWFnbm9z
dGljcy4KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgorICAgICAgICAgICAgYXNzZXJ0
KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVG9rZW46OkNPTlNU
X0lOVDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgdmFsID0gMDsKKyAgICAgICAgICAg
IGlmICghdG9rZW4tPmlWYWx1ZSgmdmFsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBEbyBub3QgbWFyayB0aGUgdG9rZW4gYXMgaW52YWxpZC4KKyAgICAgICAgICAgICAgICAv
LyBKdXN0IGVtaXQgdGhlIGRpYWdub3N0aWMgYW5kIHJlc2V0IHZhbHVlIHRvIDAuCisgICAgICAg
ICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVHRVJf
T1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdG9rZW4tPnRleHQu
YXNzaWduKCIwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWxpZFRva2VuID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFRva2Vu
OjpDT05TVF9GTE9BVDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCB2YWwgPSAwOwor
ICAgICAgICAgICAgaWYgKCF0b2tlbi0+ZlZhbHVlKCZ2YWwpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSB0b2tlbiBhcyBpbnZhbGlkLgorICAgICAg
ICAgICAgICAgIC8vIEp1c3QgZW1pdCB0aGUgZGlhZ25vc3RpYyBhbmQgcmVzZXQgdmFsdWUgdG8g
MC4wLgorICAgICAgICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpGTE9BVF9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB0
b2tlbi0+dGV4dC5hc3NpZ24oIjAuMCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFs
aWRUb2tlbiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAg
ICAgY2FzZSBUb2tlbjo6UFBfTlVNQkVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTlVNQkVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9PVEhFUjoKKyAgICAgICAg
ICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJB
Q1RFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nl
c3Nvci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9QcmVwcm9jZXNzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmUz
NWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaApAQCAtMCwwICsxLDQ5IEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KKworI2luY2x1ZGUg
InBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEaWFnbm9zdGljczsKK2Ns
YXNzIERpcmVjdGl2ZUhhbmRsZXI7CitzdHJ1Y3QgUHJlcHJvY2Vzc29ySW1wbDsKK3N0cnVjdCBU
b2tlbjsKKworY2xhc3MgUHJlcHJvY2Vzc29yCit7CisgIHB1YmxpYzoKKyAgICBQcmVwcm9jZXNz
b3IoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLCBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVI
YW5kbGVyKTsKKyAgICB+UHJlcHJvY2Vzc29yKCk7CisKKyAgICAvLyBjb3VudDogc3BlY2lmaWVz
IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHN0cmluZyBhbmQgbGVuZ3RoIGFycmF5cy4K
KyAgICAvLyBzdHJpbmc6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBzdHJpbmdz
LgorICAgIC8vIGxlbmd0aDogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHN0cmluZyBsZW5ndGhzLgor
ICAgIC8vIElmIGxlbmd0aCBpcyBOVUxMLCBlYWNoIHN0cmluZyBpcyBhc3N1bWVkIHRvIGJlIG51
bGwgdGVybWluYXRlZC4KKyAgICAvLyBJZiBsZW5ndGggaXMgYSB2YWx1ZSBvdGhlciB0aGFuIE5V
TEwsIGl0IHBvaW50cyB0byBhbiBhcnJheSBjb250YWluaW5nCisgICAgLy8gYSBzdHJpbmcgbGVu
Z3RoIGZvciBlYWNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHN0cmluZy4KKyAg
ICAvLyBFYWNoIGVsZW1lbnQgaW4gdGhlIGxlbmd0aCBhcnJheSBtYXkgY29udGFpbiB0aGUgbGVu
Z3RoIG9mIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nIG9yIGEgdmFsdWUgbGVzcyB0
aGFuIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RyaW5nCisgICAgLy8gaXMgbnVsbCB0ZXJtaW5h
dGVkLgorICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pOworICAgIC8vIEFkZHMgYSBwcmUtZGVmaW5lZCBtYWNyby4K
KyAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUsIGludCB2YWx1ZSk7CisK
KyAgICB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CisKKyAgICBQcmVwcm9jZXNzb3JJbXBs
KiBtSW1wbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9j
YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgyNjEzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oCkBAIC0wLDAgKzEsMzggQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KKyNkZWZp
bmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworCituYW1lc3BhY2Ug
cHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uCit7CisgICAgU291cmNlTG9jYXRpb24oKSA6
IGZpbGUoMCksIGxpbmUoMCkgeyB9CisgICAgU291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6
IGZpbGUoZiksIGxpbmUobCkgeyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2Nh
dGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIu
ZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGluZSk7CisgICAgfQorCisgICAgaW50IGZpbGU7Cisg
ICAgaW50IGxpbmU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxv
Y2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuIGxo
cy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VM
b2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VMb2NhdGlvbiYgcmhzKQoreworICAgIHJldHVybiAh
bGhzLmVxdWFscyhyaHMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2Y1MGFhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbi5jcHAKQEAgLTAsMCArMSw4MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJU
b2tlbi5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworI2luY2x1ZGUgIm51bWVyaWNfbGV4Lmgi
CisKK25hbWVzcGFjZSBwcAoreworCit2b2lkIFRva2VuOjpyZXNldCgpCit7CisgICAgdHlwZSA9
IDA7CisgICAgZmxhZ3MgPSAwOworICAgIGxvY2F0aW9uID0gU291cmNlTG9jYXRpb24oKTsKKyAg
ICB0ZXh0LmNsZWFyKCk7Cit9CisKK2Jvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAg
ICAgIChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKKyAgICAgICAgICAgKGxvY2F0aW9uID09IG90
aGVyLmxvY2F0aW9uKSAmJgorICAgICAgICAgICAodGV4dCA9PSBvdGhlci50ZXh0KTsKK30KKwor
dm9pZCBUb2tlbjo6c2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0KQoreworICAgIGlmIChzdGFy
dCkKKyAgICAgICAgZmxhZ3MgfD0gQVRfU1RBUlRfT0ZfTElORTsKKyAgICBlbHNlCisgICAgICAg
IGZsYWdzICY9IH5BVF9TVEFSVF9PRl9MSU5FOworfQorCit2b2lkIFRva2VuOjpzZXRIYXNMZWFk
aW5nU3BhY2UoYm9vbCBzcGFjZSkKK3sKKyAgICBpZiAoc3BhY2UpCisgICAgICAgIGZsYWdzIHw9
IEhBU19MRUFESU5HX1NQQUNFOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkhBU19MRUFE
SU5HX1NQQUNFOworfQorCit2b2lkIFRva2VuOjpzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRp
c2FibGUpCit7CisgICAgaWYgKGRpc2FibGUpCisgICAgICAgIGZsYWdzIHw9IEVYUEFOU0lPTl9E
SVNBQkxFRDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzICY9IH5FWFBBTlNJT05fRElTQUJMRUQ7
Cit9CisKK2Jvb2wgVG9rZW46OmlWYWx1ZShpbnQqIHZhbHVlKSBjb25zdAoreworICAgIGFzc2Vy
dCh0eXBlID09IENPTlNUX0lOVCk7CisgICAgcmV0dXJuIG51bWVyaWNfbGV4X2ludCh0ZXh0LCB2
YWx1ZSk7Cit9CisKK2Jvb2wgVG9rZW46OnVWYWx1ZSh1bnNpZ25lZCBpbnQqIHZhbHVlKSBjb25z
dAoreworICAgIGFzc2VydCh0eXBlID09IENPTlNUX0lOVCk7CisgICAgcmV0dXJuIG51bWVyaWNf
bGV4X2ludCh0ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wgVG9rZW46OmZWYWx1ZShmbG9hdCogdmFs
dWUpIGNvbnN0Cit7CisgICAgYXNzZXJ0KHR5cGUgPT0gQ09OU1RfRkxPQVQpOworICAgIHJldHVy
biBudW1lcmljX2xleF9mbG9hdCh0ZXh0LCB2YWx1ZSk7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKQoreworICAgIGlm
ICh0b2tlbi5oYXNMZWFkaW5nU3BhY2UoKSkKKyAgICAgICAgb3V0IDw8ICIgIjsKKworICAgIG91
dCA8PCB0b2tlbi50ZXh0OworICAgIHJldHVybiBvdXQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhi
NTUzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXworI2RlZmluZSBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KKworI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVk
ZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiU291cmNlTG9jYXRpb24uaCIKKworbmFtZXNwYWNlIHBw
Cit7CisKK3N0cnVjdCBUb2tlbgoreworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAgTEFT
VCA9IDAsICAvLyBFT0YuCisKKyAgICAgICAgSURFTlRJRklFUiA9IDI1OCwKKworICAgICAgICBD
T05TVF9JTlQsCisgICAgICAgIENPTlNUX0ZMT0FULAorCisgICAgICAgIE9QX0lOQywKKyAgICAg
ICAgT1BfREVDLAorICAgICAgICBPUF9MRUZULAorICAgICAgICBPUF9SSUdIVCwKKyAgICAgICAg
T1BfTEUsCisgICAgICAgIE9QX0dFLAorICAgICAgICBPUF9FUSwKKyAgICAgICAgT1BfTkUsCisg
ICAgICAgIE9QX0FORCwKKyAgICAgICAgT1BfWE9SLAorICAgICAgICBPUF9PUiwKKyAgICAgICAg
T1BfQUREX0FTU0lHTiwKKyAgICAgICAgT1BfU1VCX0FTU0lHTiwKKyAgICAgICAgT1BfTVVMX0FT
U0lHTiwKKyAgICAgICAgT1BfRElWX0FTU0lHTiwKKyAgICAgICAgT1BfTU9EX0FTU0lHTiwKKyAg
ICAgICAgT1BfTEVGVF9BU1NJR04sCisgICAgICAgIE9QX1JJR0hUX0FTU0lHTiwKKyAgICAgICAg
T1BfQU5EX0FTU0lHTiwKKyAgICAgICAgT1BfWE9SX0FTU0lHTiwKKyAgICAgICAgT1BfT1JfQVNT
SUdOLAorCisgICAgICAgIC8vIFByZXByb2Nlc3NpbmcgdG9rZW4gdHlwZXMuCisgICAgICAgIC8v
IFRoZXNlIHR5cGVzIGFyZSB1c2VkIGJ5IHRoZSBwcmVwcm9jZXNzb3IgaW50ZXJuYWxseS4KKyAg
ICAgICAgLy8gUHJlcHJvY2Vzc29yIGNsaWVudHMgbXVzdCBub3QgZGVwZW5kIG9yIGNoZWNrIGZv
ciB0aGVtLgorICAgICAgICBQUF9IQVNILAorICAgICAgICBQUF9OVU1CRVIsCisgICAgICAgIFBQ
X09USEVSCisgICAgfTsKKyAgICBlbnVtIEZsYWdzCisgICAgeworICAgICAgICBBVF9TVEFSVF9P
Rl9MSU5FICAgPSAxIDw8IDAsCisgICAgICAgIEhBU19MRUFESU5HX1NQQUNFICA9IDEgPDwgMSwK
KyAgICAgICAgRVhQQU5TSU9OX0RJU0FCTEVEID0gMSA8PCAyCisgICAgfTsKKworICAgIFRva2Vu
KCkgOiB0eXBlKDApLCBmbGFncygwKSB7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29s
IGVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCisgICAgLy8gSXQgZGlzcmVnYXJk
cyBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgIGJvb2wgYXRTdGFydE9mTGluZSgpIGNvbnN0
IHsgcmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7IH0KKyAgICB2b2lkIHNl
dEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7CisKKyAgICBib29sIGhhc0xlYWRpbmdTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNFKSAhPSAwOyB9CisgICAg
dm9pZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7CisKKyAgICBib29sIGV4cGFuc2lv
bkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgRVhQQU5TSU9OX0RJU0FCTEVEKSAh
PSAwOyB9CisgICAgdm9pZCBzZXRFeHBhbnNpb25EaXNhYmxlZChib29sIGRpc2FibGUpOworCisg
ICAgLy8gQ29udmVydHMgdGV4dCBpbnRvIG51bWVyaWMgdmFsdWUgZm9yIENPTlNUX0lOVCBhbmQg
Q09OU1RfRkxPQVQgdG9rZW4uCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFyc2VkIHZh
bHVlIGNhbm5vdCBmaXQgaW50byBhbiBpbnQgb3IgZmxvYXQuCisgICAgYm9vbCBpVmFsdWUoaW50
KiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCB1VmFsdWUodW5zaWduZWQgaW50KiB2YWx1ZSkgY29u
c3Q7CisgICAgYm9vbCBmVmFsdWUoZmxvYXQqIHZhbHVlKSBjb25zdDsKKworICAgIGludCB0eXBl
OworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgICBTb3VyY2VMb2NhdGlvbiBsb2NhdGlvbjsK
KyAgICBzdGQ6OnN0cmluZyB0ZXh0OworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJldHVybiBsaHMuZXF1YWxz
KHJocyk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVG9rZW4mIGxocywgY29u
c3QgVG9rZW4mIHJocykKK3sKKyAgICByZXR1cm4gIWxocy5lcXVhbHMocmhzKTsKK30KKworZXh0
ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9r
ZW4mIHRva2VuKTsKKworfSAgLy8gbmFtZXBzYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9UT0tFTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTc2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXpl
ci5jcHAKQEAgLTAsMCArMSwyMzU2IEBACisjbGluZSAxNiAiLi9Ub2tlbml6ZXIubCIKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFy
c2VyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICIuL1Rva2VuaXplci5jcHAiCisK
KyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5l
ciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZ
WV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQor
I2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNpZiBZWV9GTEVYX1NVQk1JTk9S
X1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBk
ZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4g
Ki8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2Vy
IHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElO
VF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMg
bWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBf
X1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1RE
Q19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50
IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAorICovCisjaWZuZGVm
IF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjZW5k
aWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsK
K3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVmIGludDE2X3QgZmxleF9pbnQx
Nl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiBpbnQzMl90IGZs
ZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKK3R5cGVkZWYgdWlu
dDY0X3QgZmxleF91aW50NjRfdDsKKyNlbHNlCit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50
OF90OwordHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9p
bnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxl
eF91aW50MzJfdDsKKyNlbmRpZiAvKiAhIEM5OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwg
dHlwZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAg
ICAgKC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAg
ICAgICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmlu
ZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVm
IElOVDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgor
I2lmbmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3Njcp
CisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAg
ICAgKDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4
X01BWCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2Rl
ZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlO
VDMyX01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNl
bmRpZgorCisjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisK
Ky8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVm
aW5lIFlZX1VTRV9DT05TVAorCisjZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSBy
ZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19T
VERDX18pCisKKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NU
RENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09O
U1QKKyNkZWZpbmUgeXljb25zdCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlm
CisKKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAor
CisvKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0
byBhbiB1bnNpZ25lZAorICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYg
dGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0
IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3Qu
CisgKi8KKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBj
aGFyKSBjKQorCisvKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9Z
WV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9p
ZCogeXlzY2FuX3Q7CisjZW5kaWYKKworLyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChw
bHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50
cmFudCBzY2FubmVyLiAqLworI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0
IHl5Zy0+eXlvdXRfcgorI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5
bGVuZyB5eWctPnl5bGVuZ19yCisjZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5l
IHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZp
bmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2Rl
ZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3Rh
cnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRl
ciwKKyAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1
cyBieSB0aGUgKCktbGVzcworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBC
RUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQg
c3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8g
QkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBs
ZXgKKyAqIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0
YXJ0IC0gMSkgLyAyKQorI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1i
ZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NU
QVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNp
YWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVm
aW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIu
ICovCisjaWZuZGVmIFlZX0JVRl9TSVpFCisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5k
aWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBz
dGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9T
VEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBl
KSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBF
REVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9C
VUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2Rl
ZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2Vu
ZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9F
TkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5l
IFlZX0xFU1NfTElORU5PKG4pCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4i
IG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5l
IHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcg
dXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisg
ICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0geXln
LT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBc
CisJCX0gXAorCXdoaWxlICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXln
LT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKworI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVS
X1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKK3N0cnVjdCB5eV9idWZm
ZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsKKworCWNoYXIgKnl5X2NoX2J1ZjsJ
CS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0
aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0
ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5
eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGlu
dG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJ
eXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIg
LSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFsbG9jKCkgaXQg
dG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUgaXQuCisJICov
CisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVy
YWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRp
byBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBm
cmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVh
Y2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVy
IHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisJICog
SWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3
aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisKKyAgICBpbnQgeXlfYnNfbGlu
ZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwg
VGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRo
ZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJ
aW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisKKyNkZWZpbmUg
WVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQorCS8qIFdoZW4gYW4g
RU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCisJ
ICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRl
IHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNl
IGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRv
IG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgorCSAq
CisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMg
dG8gIm5ldyIKKwkgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29u
dGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQg
ZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKKworCX07CisjZW5k
aWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KKworLyogV2UgcHJvdmlkZSBtYWNy
b3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUg
d2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJz
Y2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBO
VUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3Rh
Y2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5V
TEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93
IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFu
IGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190
b3BdCisKK3ZvaWQgcHByZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKK3ZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZm
ZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZm
ZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9k
ZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2
b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwordm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZl
ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgWVlf
RkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVy
KQorCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90
IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3Ry
aW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZG
RVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVu
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90ICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlz
Y2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZmZXIKKworI2RlZmlu
ZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nh
bm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAg
cHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCisJfSBcCisJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0
aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCisJeyBcCisJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAg
ICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCisJfSBc
CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKKwl9CisK
KyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
KQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgcHB3cmFwKG4pIDEKKyNkZWZp
bmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisKK3R5
cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgor
CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlfc3Rh
dGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQg
eXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5
X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQg
YmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KKyAq
LworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwl5eWctPnl5dGV4dF9wdHIgPSB5eV9i
cDsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCXl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyAzNworI2RlZmluZSBZWV9FTkRfT0Zf
QlVGRkVSIDM4CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCisg
ICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90cmFuc19pbmZv
CisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5X254dDsKKwl9
Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4NF0gPQorICAgIHsgICAw
LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM4LCAgIDM2LCAgIDM0LCAgIDM1LCAg
IDM1LCAgIDMzLAorICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMz
LCAgIDMzLCAgIDMzLCAgICA5LAorICAgICAgICA5LCAgIDMzLCAgIDMzLCAgIDMzLCAgICA4LCAg
IDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAorICAgICAgICA0LCAgIDM0LCAgIDM1LCAgIDE5
LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAgIDIzLAorICAgICAgIDEzLCAgIDI0LCAg
IDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLCAgIDExLAorICAgICAgIDEx
LCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1LCAgICA4LCAgIDMxLAor
ICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAgICA2LCAgIDExLCAgIDEwLCAgIDEx
LCAgICAxLAorICAgICAgIDEwLCAgIDExLCAgICAwLCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LCAg
ICAwLCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgIDEwLCAgICAwCisgICAgfSA7CisKK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAgICB7ICAgMCwKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywK
KyAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwgICAgNiwgICAg
MSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKKyAgICAgICAgOSwgICAxMCwgICAxMSwgICAgOSwg
ICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKKyAgICAgICAxNiwgICAxNiwgICAx
NiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwgICAgOSwgICAxOCwKKyAgICAgICAxOSwg
ICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMiwgICAyMSwKKyAg
ICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywKKyAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
NCwgICAyMywgICAyMywKKyAgICAgICAgOSwgICAgMSwgICAgOSwgICAyNSwgICAyMywgICAgMSwg
ICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAgIDIyLCAgIDIxLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LAorICAgICAgIDIzLCAg
IDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQzMl90IHl5X21ldGFbMjddID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAg
MiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAgMSwg
ICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0gPQorICAgIHsgICAwLAorICAgICAgICAw
LCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAgMTUwLCAgMTU5LCAgMTQ1LCAgMTI4LAor
ICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTExLCAgIDIxLCAgIDI1LCAgIDMwLCAgIDI5
LCAgIDM2LAorICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAgIDQ1LCAgICAwLCAgIDE2LCAgIDQ3LCAg
ICAwLCAgMTU5LCAgIDg0LAorICAgICAgIDY1LCAgIDczLCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5
LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAorICAgICAgMTU5LCAgMTU5LCAgIDYxLCAgMTU5LCAg
ICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgzLAorICAgICAgIDk1LCAgIDY4LCAgICAw
LCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAgICAwLCAgMTU5LAorICAgICAgMTU5LCAg
MTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4LCAgICAwLCAgMTEwLCAgICAwLAorICAg
ICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAgMTU5LCAgMTU5LCAgMTAxLCAgIDk3LCAg
MTEyLAorICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQwLCAgIDI4LCAgMTQ1LCAgMTUwLCAgMTUy
CisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbODldID0KKyAg
ICB7ICAgMCwKKyAgICAgICA4MywgICAgMSwgICA4NCwgICA4NCwgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICAyMCwgICA4MywgICA4MywgICA4Mywg
ICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywKKyAgICAgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4MywgICAyMCwgICAyMCwgICA0NywKKyAg
ICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4NSwg
ICA4MywKKyAgICAgICA4MywgICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywgICA0MywgICA0
MywgICA2NywgICA4NywKKyAgICAgICA0NywgICA1MCwgICA4MywgICA1MSwgICA4OCwgICA4Mywg
ICA4MywgICA4MywgICA2OSwgICA3MiwKKyAgICAgICA4MywgICA4MywgICAgMCwgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfbnh0WzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICA2LCAgICA3LCAgICA4LCAgICA5
LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAorICAgICAgIDE2LCAgIDE3LCAg
IDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAorICAgICAgIDI1
LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMwLAor
ICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYwLCAgIDMxLCAgIDQxLCAgIDc3LCAgIDQ0
LCAgIDQwLAorICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAgIDQyLCAgIDQzLCAgIDQzLCAgIDQzLCAg
IDQ2LCAgIDQ3LCAgIDc2LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ5LCAgIDU0LCAgIDU1LCAgIDUw
LCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAorICAgICAgIDUzLCAgIDUzLCAgIDUzLCAgIDU3LCAg
IDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUwLAorICAgICAgIDQ5LCAgIDQ5LCAgIDYz
LCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY2LCAgIDUwLAorICAgICAgIDUwLCAg
IDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1LCAgIDcxLCAgIDcxLCAgIDcxLAorICAg
ICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAg
IDUwLAorCisgICAgICAgODMsICAgODMsICAgNTAsICAgNTAsICAgNTAsICAgNzMsICAgNzMsICAg
ODMsICAgODMsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNjcsICAgNjcsICAgNjcsICAgODIs
ICAgODIsICAgODIsICAgNTYsICAgNjcsCisgICAgICAgNzgsICAgNzgsICAgODMsICAgODMsICAg
NzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgsCisgICAgICAgMzUsICAgODAsICAgODAs
ICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIsCisgICAgICAgMjgsICAg
MjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQsICAgMzMsICAgNjQsICAgNjQsCisgICAg
ICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAgNzUsICAgNzUsICAgODMsICAgIDUsICAg
ODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMK
KyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxODZdID0KKyAg
ICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAgNCwKKyAgICAgICAxMywgICAxNiwgICA4
NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwgICAxOSwgICAxNiwKKyAgICAgICAyNiwg
ICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyMCwgICA1NCwKKyAg
ICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwgICA0OCwgICAyMCwgICAyMCwgICAyMCwg
ICAyMCwKKyAgICAgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwgICAyNywgICA3MywgICA3
MywgICA3MywgICAyMSwKKyAgICAgICA0OSwgICA0OSwgICAyNywgICA0MywgICAzMiwgICA0Mywg
ICA0MywgICA0MywgICAzMSwgICA0OSwKKyAgICAgICA1MiwgICA0MywgICA0MywgICA0MywgICA0
MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywKKyAgICAgICA1MiwgICA1MiwgICA3NSwg
ICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1MCwgICA1MCwKKworICAgICAgIDc0LCAg
IDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUxLCAgIDc5LCAgIDc5LCAgIDUxLAorICAg
ICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDIzLCAg
IDY3LAorICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgwLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDcy
LCAgIDcyLCAgIDE1LAorICAgICAgIDEyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDgxLCAgIDgxLCAg
IDgxLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0LCAgIDg0
LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAorICAgICAgIDg3LCAgICA3LCAgIDg3LCAg
IDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAgfSA7CisKKy8qIFRoZSBp
bnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCisgKiBhbnkg
dXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8KKyNkZWZpbmUgUkVKRUNUIHJl
amVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRf
YnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAwCisjZGVmaW5lIFlZX1JFU1RP
UkVfWVlfTU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29u
dGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nlc3Nvci4KK0Jh
c2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29yIEdyYW1tYXI6
CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlzODkuYXNweAor
CitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9w
YXJzZXIuc2guCisqLworCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisKKyNpbmNsdWRlICJEaWFn
bm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorCisjaWYgZGVmaW5lZChfX0dOVUNf
XykKKy8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3IgZnVu
Y3Rpb24uCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVy
biIKKyNlbmRpZgorCit0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Cit0eXBlZGVmIHBwOjpT
b3VyY2VMb2NhdGlvbiBZWUxUWVBFOworCisvLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2YXJp
YWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KKyNkZWZpbmUgeXlmaWxlbm8geXlj
b2x1bW4KKworI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAorICAgIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZpbGVubyA9IDA7
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAorICAgICAgICB5
eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZp
bmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHA6OklucHV0KiBp
bnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAgICAg
ICAgICBcCisgICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50KCkp
ICYmICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXggPj0g
aW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAorICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgrKyk7
ICAgIFwKKyAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bGxvYy0+ZmlsZSA9
IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
eXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9JTlBVVChi
dWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAorICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJlYWQo
YnVmLCBtYXhTaXplKTsKKworI2RlZmluZSBJTklUSUFMIDAKKyNkZWZpbmUgQ09NTUVOVCAxCisK
KyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBwcDo6VG9rZW5pemVyOjpDb250ZXh0KgorCisvKiBIb2xk
cyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KK3N0cnVjdCB5
eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxl
eC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8qIFRoZSByZXN0IGFy
ZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBz
Y2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAgc2l6ZV90IHl5X2J1
ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworICAgIHNpemVf
dCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAgIFlZ
X0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4g
Ki8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAg
ICB5eV9zaXplX3QgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlf
aW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAgIGludCB5eV9zdGFydF9zdGFj
a19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAgIHl5X3N0YXRlX3R5cGUgeXlf
bGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsK
KworICAgIGludCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4X2RlYnVnX3I7CisKKyAgICBj
aGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOworICAgIGludCB5eV9tb3JlX2xl
bjsKKworICAgIFlZU1RZUEUgKiB5eWx2YWxfcjsKKworICAgIFlZTFRZUEUgKiB5eWxsb2NfcjsK
KworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGludCB5eV9pbml0
X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgLyogVGhpcyBtdXN0IGdvIGhl
cmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAorICAgICAqIGZyb20g
Ymlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLworICAgICMgICAgZGVmaW5lIHl5bHZhbCB5eWct
Pnl5bHZhbF9yCisgICAgCisgICAgIyAgICBkZWZpbmUgeXlsbG9jIHl5Zy0+eXlsbG9jX3IKKyAg
ICAKK2ludCBwcGxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7CisKK2ludCBwcGxleF9pbml0
X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7CisK
Ky8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRlIHZpc2li
bGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisKK2ludCBw
cGxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHBwZ2V0X2RlYnVnICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcg
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2Vy
X2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpwcGdldF9pbiAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBzZXRfaW4gIChGSUxFICogaW5fc3RyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworRklMRSAqcHBnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
Kwordm9pZCBwcHNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK3l5X3NpemVfdCBwcGdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworY2hhciAq
cHBnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCBwcGdldF9saW5lbm8gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVy
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHBwZ2V0X2x2YWwgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0g
LHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgICAgWVlMVFlQRSAqcHBnZXRfbGxvYyAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7CisgICAgCisgICAgICAgIHZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQ
RSAqIHl5bGxvY19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBNYWNyb3Mg
YWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9u
cyBpbgorICogc2VjdGlvbiAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRl
ZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyNlbHNlCitleHRlcm4gaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5k
aWYKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3Ry
bmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNl
bmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4g
KHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYg
WVlfTk9fSU5QVVQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1
cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNkZWZp
bmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0ZXZlciB0aGUg
bGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNpZm5kZWYgRUNI
TworLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1p
Z2h0IGNvbnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICovCisjZGVmaW5l
IEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlmCisKKy8qIEdl
dHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
cmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZu
ZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsg
XAorCQlpbnQgYyA9ICcqJzsgXAorCQl5eV9zaXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8
IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9
ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4n
ICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJv
ciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIg
ZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQll
cnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5
aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRS
KSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIg
ZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNs
ZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWkt
Y29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0
ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4i
IGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBh
Ym91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisj
ZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIg
b2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZu
ZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQor
I2VuZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9F
UlJPUgorI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgLCB5
eXNjYW5uZXIpCisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVy
ZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5lcmF0
ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBwYXJh
bWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEK
KworZXh0ZXJuIGludCBwcGxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9w
YXJhbSxZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVm
aW5lIFlZX0RFQ0wgaW50IHBwbGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFs
X3BhcmFtLCBZWUxUWVBFICogeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQorI2Vu
ZGlmIC8qICFZWV9ERUNMICovCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBv
ZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVw
LgorICovCisjaWZuZGVmIFlZX1VTRVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisj
ZW5kaWYKKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNp
Zm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYKKworI2RlZmlu
ZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5l
ciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXJl
Z2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5
eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyogTGluZSBjb21t
ZW50ICovCisKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07CisKKyAgICB5eWxsb2MgPSB5eWxs
b2NfcGFyYW07CisKKwlpZiAoICF5eWctPnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9
IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJWVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJ
aWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0
YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQorCQkJeXlpbiA9IHN0ZGluOworCisJCWlm
ICggISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsKKworCQlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKSB7CisJCQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZf
U0laRSAseXlzY2FubmVyKTsKKwkJfQorCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOworCQl9CisKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMg
cmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBv
cnQgb2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5
eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YK
KwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9j
dXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJ
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07CisJCQlp
ZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQkJeworCQkJCXl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJCXl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJCX0KKwkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCQl7CisJ
CQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlf
Y3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4MyApOworCQl5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5
eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKwor
ZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlv
bnMuICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24g
c3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUg
ZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOworCitjYXNlIDE6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworLyog
QmxvY2sgY29tbWVudCAqLworLyogTGluZSBicmVha3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCBy
ZXR1cm5lZC4gKi8KKy8qIFRoZSBjb21tZW50IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNl
LiAqLyAKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQ09NTUVOVCk7IH0KKwlZWV9C
UkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JV
TEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDU6CisvKiBydWxlIDUgY2FuIG1hdGNoIGVvbCAq
LworWVlfUlVMRV9TRVRVUAoreyArK3l5bGluZW5vOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjoKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOworICAgIEJF
R0lOKElOSVRJQUwpOworfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9yIHByZXByb2Nlc3NvciBk
aXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJu
IHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6IHBwOjpUb2tlbjo6UFBf
T1RIRVI7Cit9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJ
RklFUjsKK30KKwlZWV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9J
TlQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZM
T0FUOworfQorCVlZX0JSRUFLCisvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lU
fSBvciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworLyogUnVsZSB0byBjYXRjaCBhbGwg
aW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAqLworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6UFBfTlVNQkVSOworfQorCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9TRVRVUAor
eworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9JTkM7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7Cisg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX0RFQzsKK30KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
TEVGVDsKK30KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklH
SFQ7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFOwor
fQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKwlZ
WV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX05FOworfQorCVlZX0JSRUFLCitj
YXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MjE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKwlZWV9CUkVBSworY2FzZSAyMjoK
K1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9S
VUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjU6
CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2Ug
MjY6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nh
c2UgMjc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisJWVlfQlJFQUsK
K2Nhc2UgMjg6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdOOworfQorCVlZX0JS
RUFLCitjYXNlIDI5OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisJ
WVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Cit9
CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUl9BU1NJR047
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FTU0lH
TjsKK30KKwlZWV9CUkVBSworY2FzZSAzMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwt
PmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisJWVlfQlJF
QUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRy
dWU7IH0KKwlZWV9CUkVBSworY2FzZSAzNToKKy8qIHJ1bGUgMzUgY2FuIG1hdGNoIGVvbCAqLwor
WVlfUlVMRV9TRVRVUAoreworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwg
J1xuJyk7CisgICAgcmV0dXJuICdcbic7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzY6CitZWV9SVUxF
X1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5J
VElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NRU5UKToKK3sKKyAgICAvLyBZWV9VU0VSX0FD
VElPTiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9j
YXRpb24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5
ZXh0cmEtPmlucHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRy
YS0+c2NhbkxvYzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50
KCkgLSAxKTsKKyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7Cisg
ICAgICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmlu
Z3MgYXQgdGhlCisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2Mt
PnNJbmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxl
bm8gPSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0g
eXlmaWxlbm87CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVh
cigpOworCisgICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4
dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9u
KHl5ZmlsZW5vLCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiIpOworICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDM3
OgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVG
RkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUg
RU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5
X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZ
WV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJ
WVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2Un
cmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3Nz
aWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2lu
dGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHBwbGV4KCkuICBJZiBz
bywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9D
VVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQg
cGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAo
b3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9y
IHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3Rl
IHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJ
CSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxs
CisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0
ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhl
CisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0
CisJCSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7
IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9z
dGF0ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50
X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91
c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVk
IHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJ
CSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9y
IHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBw
b3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQg
amFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93
bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9j
dXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIg
KyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyog
Q29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJ
CQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0
Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9C
X0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9v
bl9lb2YgPSAwOworCisJCQkJaWYgKCBwcHdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJ
CS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4
dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0
IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhv
c2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVy
IGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAt
IGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJ
CQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJ
CQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9u
OworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJl
YWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5
X2NfYnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90
ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5
Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNh
c2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5
eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKwor
CQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRy
ICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7
CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nh
bm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFj
dGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8q
IGVuZCBvZiBwcGxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBp
biBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0
aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAt
IGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRf
T0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVy
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5
eWctPnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCBy
ZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigK
KwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNz
ZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIg
PT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBh
biBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlf
TU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3Rl
ciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8K
KwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJ
CS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBw
cm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQor
CQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxh
c3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkg
KHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7
IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisK
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9C
VUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3Vh
cmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8K
KwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJz
ID0gMDsKKworCWVsc2UKKwkJeworCQkJeXlfc2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisK
KwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGlu
IHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZv
ciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVO
VF9CVUZGRVI7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+
eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsK
KworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5
X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJ
CQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIg
RU9CIGNoYXJzLiAqLworCQkJCQlwcHJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5
X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0
IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJ
CQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwg
ZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9j
X2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19y
ZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1i
ZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9C
VUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVh
ZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90
b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXln
LT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJewor
CQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwg
PSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJcHByZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwor
CQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJ
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JV
RkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FD
VF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBu
dW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7
CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5
IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJl
cl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcHJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAo
ICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJ
fQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVS
X0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3Zh
bDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJl
Zm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90
eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lz
dGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9j
cDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2Nw
ID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9w
OyArK3l5X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlf
ZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1
cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJ
CX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9
IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5
X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCAp
CisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyog
eXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNo
YXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFu
cyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5
X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJl
IHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2Nw
ID0geXlnLT55eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvcyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9z
dGF0ZSA+PSA4NCApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJ
fQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09
IDgzKTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKwor
I2lmbmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5
eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50
cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3Vy
cyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5V
TDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLwor
CQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8K
KwkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3Jl
IGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55
eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9u
ZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9N
QVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBz
ZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhh
dCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJ
CSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0
Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9N
QVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkv
KiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQlwcHJlc3RhcnQoeXlpbiAseXlzY2FubmVy
KTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklM
RToKKwkJCQkJeworCQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4g
MDsKKworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJ
CQkJWVlfTkVXX0ZJTEU7CisjaWZkZWYgX19jcGx1c3BsdXMKKwkJCQkJcmV0dXJuIHl5aW5wdXQo
eXlzY2FubmVyKTsKKyNlbHNlCisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworI2VuZGlm
CisJCQkJCX0KKworCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0K
KwkJCX0KKwkJfQorCisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8q
IGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBw
cmVzZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZf
cDsKKworCXJldHVybiBjOworfQorI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLworCisv
KiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IHN0cmVhbS4KKyAqIEBw
YXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBU
aGUgc2Nhbm5lciBvYmplY3QuCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0
IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCisgKi8KKyAgICB2b2lkIHBwcmVz
dGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlm
ICggISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAgICBwcGVuc3VyZV9idWZmZXJfc3RhY2sg
KHl5c2Nhbm5lcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisgICAgICAgICAgICBw
cF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJfQorCisJcHBf
aW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKKwlw
cF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKK30KKworLyoqIFN3aXRjaCB0byBhIGRp
ZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0
IGJ1ZmZlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisg
ICAgdm9pZCBwcF9zd2l0Y2hfdG9fYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVy
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxl
IHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkgKgkJcHBw
b3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXBwcHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7
CisgICAgICovCisJcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCWlmICggWVlf
Q1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCisJCXJldHVybjsKKworCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1
ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJ
fQorCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwlwcF9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hl
dGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GIChwcHdyYXAoKSkgcHJvY2Vz
c2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFm
dGVyIHBwd3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5k
IGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
PSAxOworfQorCitzdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlf
Y19idWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZl
ciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNp
emUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNl
IEBjIFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVG
RkVSX1NUQVRFIHBwX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIgPSAoWVlf
QlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5
eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0g
c2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFu
IHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1i
dWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYgPSAoY2hhciAqKSBwcGFsbG9j
KGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiAp
CisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX2NyZWF0ZV9i
dWZmZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcHBfaW5pdF9idWZm
ZXIoYixmaWxlICx5eXNjYW5uZXIpOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRo
ZSBidWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggcHBfY3JlYXRlX2J1
ZmZlcigpCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAg
IHZvaWQgcHBfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKKworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJaWYgKCBiID09IFlZX0NV
UlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOworCisJaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKKwkJcHBmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlz
Y2FubmVyICk7CisKKwlwcGZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7Cit9CisKKy8qIElu
aXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlz
IHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICog
c3VjaCBhcyBkdXJpbmcgYSBwcHJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMg
dm9pZCBwcF9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJcHBfZmx1
c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7CisKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwli
LT55eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZl
ciwgdGhlbiBwcF9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9t
IHBwcmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgorICAgICAqIEluIHRo
YXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAg
ICAgKi8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7CisgICAgICAgIGItPnl5X2Jz
X2xpbmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7CisgICAgfQorCisgICAg
ICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAgICAKKwllcnJubyA9IG9lcnJubzsKK30K
KworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4s
IFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0
byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX2ZsdXNoX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEg
YiApCisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5l
ZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBh
IHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNl
cworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRf
Ym9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICgg
YiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5l
ciApOworfQorCisvKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBu
ZXcgc3RhdGUgYmVjb21lcworICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdp
bGwgYWxsb2NhdGUgdGhlIHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdf
YnVmZmVyIFRoZSBuZXcgc3RhdGUuCisgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBv
YmplY3QuCisgKi8KK3ZvaWQgcHBwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5l
d19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmIChuZXdfYnVmZmVyID09IE5V
TEwpCisJCXJldHVybjsKKworCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOworCisJ
LyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBm
b3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVm
X3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKKwkJfQorCisJLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVw
bGFjZSB0b3AuICovCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQorCQl5eWctPnl5X2J1ZmZlcl9z
dGFja190b3ArKzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJ
LyogY29waWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlwcF9sb2FkX2J1ZmZlcl9z
dGF0ZSh5eXNjYW5uZXIgKTsKKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7
Cit9CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBw
cmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRvcC4KKyAqICBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHBvcF9idWZm
ZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZF
UikKKwkJcmV0dXJuOworCisJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlz
Y2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5
X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKwor
CWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KK30KKwor
LyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqICBHdWFyYW50
ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KKyAqLworc3RhdGljIHZvaWQgcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJeXlfc2l6ZV90IG51bV90
b19hbGxvYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CisKKwkJLyogRmlyc3Qg
YWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlm
IHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0
ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQg
Y2FsbC4KKyAgICAgICAgICovCisJCW51bV90b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcGFsbG9jCisJCQkJCQkJCShudW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlz
Y2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OworCQkJCQkJCQkgIAorCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19h
bGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5
X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
ID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhl
IGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCWludCBncm93X3Np
emUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0geXln
LT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOworCQl5eWctPnl5X2J1ZmZlcl9zdGFj
ayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopcHByZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5
X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1
ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBz
bG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9z
dGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikp
OworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJfQorfQorCisv
KiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1
c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgorICogQHBhcmFtIGJhc2UgdGhlIGNoYXJh
Y3RlciBidWZmZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFy
YWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
IEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LiAKKyAqLwor
WVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAg
c2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAK
KwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkK
KwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1
cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSBwcGFsbG9jKHNpemVvZiggc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnVmZmVyKCkiICk7CisKKwli
LT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3Mg
Ki8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJf
YnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+
eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9
IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTkVXOworCisJcHBfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKworCXJl
dHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEg
c3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUg
Y29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcg
dG8gc2NhbgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0
dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElm
IHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVu
IHVzZQorICogICAgICAgcHBfc2Nhbl9ieXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9T
VEFURSBwcF9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgCisJcmV0dXJuIHBwX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3Ry
KSAseXlzY2FubmVyKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8g
c2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCisgKiBz
Y2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIGJ5dGVzIHRoZSBieXRl
IGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhl
IGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fYnl0ZXMgICh5eWNvbnN0
IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG4s
IGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFj
ZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0g
KGNoYXIgKikgcHBhbGxvYyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9ieXRlcygpIiApOwor
CisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0
ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0gcHBfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5l
cik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4gcHBfc2Nh
bl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwg
YW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLwor
CWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlf
RVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4
aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3
b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxl
c3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAg
ICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0g
eXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNz
X21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwK
KwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2Fy
ZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3Nl
dCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRl
ZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJy
ZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKi8KK2ludCBwcGdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAor
ICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIHJldHVybiB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1
bW4gbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
K2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAg
ICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIHJldHVybiB5eWNvbHVtbjsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X2lu
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdl
dCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCitGSUxFICpwcGdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAg
IHJldHVybiB5eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRv
a2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3l5X3Np
emVfdCBwcGdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXls
ZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5l
ciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKworY2hhciAqcHBnZXRfdGV4dCAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNl
ci1kZWZpbmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVy
LgorICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisg
Ki8KK3ZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8q
KiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2xp
bmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAg
ICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8K
KyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9mYXRhbF9l
cnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsg
CisgICAgCisgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3Vy
cmVudCBjb2x1bW4uCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5f
bm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5
IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NV
UlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4g
Y2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAorICAgIHl5Y29sdW1u
ID0gY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBu
b3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0
ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICogQHNlZSBwcF9zd2l0Y2hfdG9fYnVmZmVyCisgKi8KK3ZvaWQgcHBzZXRfaW4gKEZJ
TEUgKiAgaW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWluID0gaW5fc3Ry
IDsKK30KKwordm9pZCBwcHNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgeXlvdXQgPSBvdXRfc3RyIDsKK30KKworaW50IHBwZ2V0X2RlYnVnICAo
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwor
dm9pZCBwcHNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHl5X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCisvKiBBY2Nlc3NvciBtZXRob2RzIGZv
ciB5eWx2YWwgYW5kIHl5bGxvYyAqLworCitZWVNUWVBFICogcHBnZXRfbHZhbCAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bHZhbDsKK30KKwordm9pZCBwcHNldF9sdmFs
IChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAg
eXlsdmFsID0geXlsdmFsX3BhcmFtOworfQorCitZWUxUWVBFICpwcGdldF9sbG9jICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsbG9jOworfQorICAgIAordm9pZCBwcHNl
dF9sbG9jIChZWUxUWVBFICogIHl5bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOworfQorICAgIAorLyogVXNlci12aXNpYmxlIEFQ
SSAqLworCisvKiBwcGxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBz
Y2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0
aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRo
YXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9m
IHVzaW5nIG91ciBtYWNyb3MuCisgKi8KKworaW50IHBwbGV4X2luaXQoeXlzY2FuX3QqIHB0cl95
eV9nbG9iYWxzKQorCit7CisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAg
ICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95
eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3Qg
KSwgTlVMTCApOworCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAg
ZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIEJ5IHNl
dHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBh
dCAweDAwIGZvciByZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAs
c2l6ZW9mKHN0cnVjdCB5eWd1dHNfdCkpOworCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAo
ICpwdHJfeXlfZ2xvYmFscyApOworfQorCisvKiBwcGxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2Ft
ZSBmdW5jdGlvbmFsaXR5IGFzIHBwbGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQorICogY29udmVu
dGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93
ZXZlciwgdGhhdAorICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdp
bGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCisgKiBpcyB0aGUgcmVhc29uLCB0b28s
IHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbiku
CisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJl
IGF2YWlsYWJsZSB0byBwcGFsbG9jIGluCisgKiB0aGUgeXlleHRyYSBmaWVsZC4KKyAqLworCitp
bnQgcHBsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5f
dCogcHRyX3l5X2dsb2JhbHMgKQorCit7CisgICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0
czsKKworICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwor
CisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZB
TDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCQorICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5
eXNjYW5fdCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1
dHMgKTsKKwkKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJu
byA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorICAgIC8qIEJ5IHNl
dHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExl
YXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMs
MHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisgICAgCisgICAgcHBzZXRfZXh0cmEgKHl5
X3VzZXJfZGVmaW5lZCwgKnB0cl95eV9nbG9iYWxzKTsKKyAgICAKKyAgICByZXR1cm4geXlfaW5p
dF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9n
bG9iYWxzICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIC8qIEluaXRpYWxpemF0aW9uIGlz
IHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcHBsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0
ZSBoZXJlLgorICAgICAqLworCisgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOworICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4
ID0gMDsKKyAgICB5eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOworICAgIHl5Zy0+eXlfaW5p
dCA9IDA7CisgICAgeXlnLT55eV9zdGFydCA9IDA7CisKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNr
X3B0ciA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7CisgICAgeXlnLT55
eV9zdGFydF9zdGFjayA9ICBOVUxMOworCisvKiBEZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVm
IFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47CisgICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxz
ZQorICAgIHl5aW4gPSAoRklMRSAqKSAwOworICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRp
ZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2lu
Y2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHBwbGV4X2luaXQoKQorICAgICAqLworICAgIHJl
dHVybiAwOworfQorCisvKiBwcGxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQg
bm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCBwcGxleF9kZXN0cm95ICAoeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKworICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5n
IGVhY2ggZWxlbWVudC4gKi8KKwl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7CisJCXBwX2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBOVUxMOworCQlwcHBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9
CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJcHBmcmVlKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKwor
ICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KKyAgICAgICAgcHBm
cmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOworICAgICAgICB5eWctPnl5X3N0
YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGlt
cG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAg
ICogcHBsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAg
eXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBz
dHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICBwcGZyZWUgKCB5eXNjYW5uZXIgLCB5eXNj
YW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCisvKgor
ICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIK
K3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMy
LCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3Ig
KCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lm
ZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNo
YXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBuOworCWZvciAo
IG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lk
ICpwcGFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0
dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOworfQorCit2b2lkICpwcHJlYWxsb2MgICh2b2lk
ICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJLyogVGhl
IGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAq
IGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhv
c2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0
aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNz
IGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFs
IHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdu
bWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXpl
ICk7Cit9CisKK3ZvaWQgcHBmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQor
eworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgcHByZWFsbG9jKCkgZm9yIChjaGFyICop
IGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKworbmFtZXNw
YWNlIHBwIHsKKworLy8gVE9ETyhhbG9rcCk6IE1heGltdW0gdG9rZW4gbGVuZ3RoIHNob3VsZCBp
ZGVhbGx5IGJlIHNwZWNpZmllZCBieQorLy8gdGhlIHByZXByb2Nlc3NvciBjbGllbnQsIGkuZS4s
IHRoZSBjb21waWxlci4KK2NvbnN0IHNpemVfdCBUb2tlbml6ZXI6OmtNYXhUb2tlbkxlbmd0aCA9
IDI1NjsKKworVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6
IG1IYW5kbGUoMCkKK3sKKyAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOwor
fQorCitUb2tlbml6ZXI6On5Ub2tlbml6ZXIoKQoreworICAgIGRlc3Ryb3lTY2FubmVyKCk7Cit9
CisKK2Jvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3Ry
aW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKK3sKKyAgICBpZiAoY291bnQgPCAwKSByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKChjb3VudCA+IDApICYmIChzdHJpbmcgPT0gMCkpIHJldHVybiBmYWxz
ZTsKKworICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsK
KyAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKK30KKwordm9pZCBUb2tlbml6ZXI6OnNldEZpbGVO
dW1iZXIoaW50IGZpbGUpCit7CisgICAgLy8gV2UgdXNlIGNvbHVtbiBudW1iZXIgYXMgZmlsZSBu
dW1iZXIuCisgICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5vLgorICAgIHBwc2V0X2NvbHVtbihmaWxl
LG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkK
K3sKKyAgICBwcHNldF9saW5lbm8obGluZSxtSGFuZGxlKTsKK30KKwordm9pZCBUb2tlbml6ZXI6
OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnRl
eHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKKyAgICBpZiAodG9rZW4tPnRleHQuc2l6ZSgp
ID4ga01heFRva2VuTGVuZ3RoKQorICAgIHsKKyAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
IHRva2VuLT50ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0aCk7CisgICAgfQorCisgICAgdG9rZW4t
PmZsYWdzID0gMDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVT
dGFydCk7CisgICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKwor
ICAgIHRva2VuLT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAg
ICBtQ29udGV4dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6Omlu
aXRTY2FubmVyKCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgcHBsZXhfaW5pdF9l
eHRyYSgmbUNvbnRleHQsJm1IYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBw
cHJlc3RhcnQoMCxtSGFuZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUb2tlbml6
ZXI6OmRlc3Ryb3lTY2FubmVyKCkKK3sKKyAgICBpZiAobUhhbmRsZSA9PSBOVUxMKQorICAgICAg
ICByZXR1cm47CisKKyAgICBwcGxleF9kZXN0cm95KG1IYW5kbGUpOworICAgIG1IYW5kbGUgPSBO
VUxMOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwMzEzNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
VG9rZW5pemVyLmgKQEAgLTAsMCArMSw1OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfVE9LRU5JWkVSX0hfCisKKyNpbmNsdWRlICJJbnB1dC5oIgorI2luY2x1ZGUgIkxleGVy
LmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERp
YWdub3N0aWNzOworCitjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGlj
OgorICAgIHN0cnVjdCBDb250ZXh0CisgICAgeworICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3M7CisKKyAgICAgICAgSW5wdXQgaW5wdXQ7CisgICAgICAgIC8vIFRoZSBsb2NhdGlvbiB3
aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJhY2sKKyAgICAg
ICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNlIHRoZXkgbWF5
IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVkIHVwIGluIHRo
ZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgSW5wdXQ6OkxvY2F0aW9uIHNjYW5Mb2M7
CisKKyAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7CisgICAgICAgIGJvb2wgbGluZVN0YXJ0Owor
ICAgIH07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGtNYXhUb2tlbkxlbmd0aDsKKwor
ICAgIFRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOworICAgIH5Ub2tlbml6ZXIo
KTsKKworICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1td
LCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxl
KTsKKyAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworCisgICAgdmlydHVhbCB2b2lk
IGxleChUb2tlbiogdG9rZW4pOworCisgIHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRva2VuaXplcik7CisgICAgYm9vbCBpbml0U2Nhbm5lcigpOworICAgIHZvaWQg
ZGVzdHJveVNjYW5uZXIoKTsKKworICAgIHZvaWQqIG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRs
ZS4KKyAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8gU2Nhbm5lciBleHRyYS4KK307CisKK30gIC8v
IG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVS
X0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvVG9rZW5pemVyLmwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjY4OWFlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCkBAIC0wLDAgKzEsMzQw
IEBACisvKgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXgg
c3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUyBwcmVwcm9jZXNzb3IuCitCYXNlZCBvbiBNaWNyb3Nv
ZnQgVmlzdWFsIFN0dWRpbyAyMDEwIFByZXByb2Nlc3NvciBHcmFtbWFyOgoraHR0cDovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzJzY3h5czg5LmFzcHgKKworSUYgWU9VIE1PRElG
WSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorKi8K
KworJXRvcHsKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKK30KKworJXsKKyNpbmNsdWRlICJU
b2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUgIlRv
a2VuLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRv
LWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KKyNwcmFnbWEgR0NDIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgorI2VuZGlmCisKK3R5cGVkZWYgc3RkOjpz
dHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisKKy8v
IFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykg
bnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJfSU5J
VCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxlYWRp
bmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAg
ICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5M
b2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChzY2Fu
TG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRl
eCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1
dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZpbGVu
bzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJbmRl
eCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdo
aWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisgICAg
cmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCislfQorCislb3B0
aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gcmVlbnRyYW50
IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKKyVvcHRpb24gcHJlZml4PSJwcCIKKyVvcHRp
b24gZXh0cmEtdHlwZT0icHA6OlRva2VuaXplcjo6Q29udGV4dCoiCisleCBDT01NRU5UCisKK05F
V0xJTkUgICAgIFxufFxyfFxyXG4KK0lERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoK
K1BVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCisKK0RFQ0lNQUxfQ09OU1RB
TlQgICAgICBbMS05XVswLTldKgorT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKK0hFWEFE
RUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworCitESUdJVCAgICAgICAgICAgICAg
ICBbMC05XQorRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKK0ZSQUNUSU9O
QUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisKKyUlCisK
KyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKyIvLyJbXlxyXG5dKgorCisgICAgLyogQmxvY2sgY29t
bWVudCAqLworICAgIC8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJu
ZWQuICovCisgICAgLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2Uu
ICovIAorIi8qIiB7IEJFR0lOKENPTU1FTlQpOyB9Cis8Q09NTUVOVD5bXipcclxuXSsKKzxDT01N
RU5UPiIqIgorPENPTU1FTlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQorPENPTU1FTlQ+Iiov
IiB7CisgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKKyAgICBCRUdJTihJTklUSUFM
KTsKK30KKworIyB7CisgICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxpbmUgZm9y
IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFsw
XSk7CisgICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBfSEFTSCA6
IHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKK3tJREVOVElGSUVSfSB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7
Cit9CisKK3tERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVDSU1BTF9D
T05TVEFOVH0geworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Cit9CisKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8
KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7
Cit9CisKKyAgICAvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBvciAue0RJ
R0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLworICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFs
aWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KKyh7RElHSVR9K1tfYS16QS1aMC05Ll0qKXwoIi4i
e0RJR0lUfStbX2EtekEtWjAtOS5dKikgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Cit9CisKKyIrKyIgeworICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9JTkM7Cit9CisiLS0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorIjw8IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Cit9Cisi
Pj4iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfUklHSFQ7Cit9CisiPD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisiPj0iIHsKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
R0U7Cit9CisiPT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Cit9CisiIT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Cit9CisiJiYiIHsK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfQU5EOworfQorIl5eIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKK30KKyJ8fCIgeworICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKK30K
KyIrPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOworfQorIi09IiB7CisgICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJR047Cit9
CisiKj0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJu
IHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKK30KKyIvPSIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNTSUdOOwor
fQorIiU9IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Cit9CisiPDw9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRfQVNTSUdO
OworfQorIj4+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Cit9CisiJj0iIHsKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FT
U0lHTjsKK30KKyJePSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOworfQorInw9IiB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SX0FT
U0lHTjsKK30KKwore1BVTkNUVUFUT1J9IHsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRb
MF0pOworICAgIHJldHVybiB5eXRleHRbMF07Cit9CisKK1sgXHRcdlxmXSsgICB7IHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KKwore05FV0xJTkV9IHsKKyAgICArK3l5bGluZW5vOwor
ICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOworICAgIHJldHVybiAnXG4nOworfQorCisuIHsK
KyAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiBwcDo6VG9rZW46
OlBQX09USEVSOworfQorCis8Kj48PEVPRj4+IHsKKyAgICAvLyBZWV9VU0VSX0FDVElPTiBpcyBu
b3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgorICAgIC8vIFNldCB0aGUgbG9jYXRpb24gZm9y
IEVPRiB0b2tlbiBtYW51YWxseS4KKyAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlu
cHV0OworICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2Nhbkxv
YzsKKyAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkgLSAxKTsK
KyAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKKyAgICB7CisgICAgICAgIC8v
IFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgYXQgdGhl
CisgICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCisgICAgICAgIHNjYW5Mb2MtPnNJbmRleCA9
IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKKyAgICAgICAgeXlmaWxlbm8gPSBzSW5k
ZXhNYXg7IHl5bGluZW5vID0gMTsKKyAgICB9CisgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87
CisgICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87CisgICAgeXlsdmFsLT5jbGVhcigpOworCisg
ICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCisgICAgeworICAgICAgICB5eWV4dHJhLT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5v
LCB5eWxpbmVubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwor
ICAgIH0KKyAgICB5eXRlcm1pbmF0ZSgpOworfQorCislJQorCituYW1lc3BhY2UgcHAgeworCisv
LyBUT0RPKGFsb2twKTogTWF4aW11bSB0b2tlbiBsZW5ndGggc2hvdWxkIGlkZWFsbHkgYmUgc3Bl
Y2lmaWVkIGJ5CisvLyB0aGUgcHJlcHJvY2Vzc29yIGNsaWVudCwgaS5lLiwgdGhlIGNvbXBpbGVy
LgorY29uc3Qgc2l6ZV90IFRva2VuaXplcjo6a01heFRva2VuTGVuZ3RoID0gMjU2OworCitUb2tl
bml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQor
eworICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXpl
cjo6flRva2VuaXplcigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tl
bml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3Qg
aW50IGxlbmd0aFtdKQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNv
bnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBp
bml0U2Nhbm5lcigpOworfQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmls
ZSkKK3sKKyAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAv
LyBTZWUgbWFjcm8geXlmaWxlbm8uCisgICAgeXlzZXRfY29sdW1uKGZpbGUsIG1IYW5kbGUpOwor
fQorCit2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKK3sKKyAgICB5eXNl
dF9saW5lbm8obGluZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4q
IHRva2VuKQoreworICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT50ZXh0LCAmdG9rZW4t
PmxvY2F0aW9uLCBtSGFuZGxlKTsKKyAgICBpZiAodG9rZW4tPnRleHQuc2l6ZSgpID4ga01heFRv
a2VuTGVuZ3RoKQorICAgIHsKKyAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHRva2VuLT50
ZXh0LmVyYXNlKGtNYXhUb2tlbkxlbmd0aCk7CisgICAgfQorCisgICAgdG9rZW4tPmZsYWdzID0g
MDsKKworICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7Cisg
ICAgbUNvbnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKKworICAgIHRva2Vu
LT5zZXRIYXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKKyAgICBtQ29udGV4
dC5sZWFkaW5nU3BhY2UgPSBmYWxzZTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVy
KCkKK3sKKyAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNv
bnRleHQsICZtSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgeXlyZXN0YXJ0
KDAsIG1IYW5kbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVz
dHJveVNjYW5uZXIoKQoreworICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVy
bjsKKworICAgIHl5bGV4X2Rlc3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzOTE1OGQyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCisrKyAvZGV2L251bGwKQEAgLTEs
NzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBO
VklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxp
ZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBt
b2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNv
bnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVl
IHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9y
IHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1z
dWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24t
ZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3Jp
Z2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCBy
ZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZv
cm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2Fy
ZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3Vj
aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5h
bWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9y
YXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRo
aXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGll
ZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0
ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVy
aXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0
d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVu
ZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9O
LCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBN
RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRT
IFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9U
SEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1Ig
QU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRT
OyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1V
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lO
RyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04g
QU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVT
RUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0KLS8vCi0vLyBhdG9tLmMKLS8vCi0KLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKLQotI3VuZGVmIG1h
bGxvYwotI3VuZGVmIHJlYWxsb2MKLSN1bmRlZiBmcmVlCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotc3RhdGljIGNvbnN0
IHN0cnVjdCB7Ci0gICAgaW50IHZhbDsKLSAgICBjb25zdCBjaGFyICpzdHI7Ci19IHRva2Vuc1td
ID0gewotICAgIHsgQ1BQX0FORF9PUCwgICAgICAgICAiJiYiIH0sCi0gICAgeyBDUFBfQU5EX0FT
U0lHTiwgICAgICImPSIgfSwKLSAgICB7IENQUF9TVUJfQVNTSUdOLCAgICAgIi09IiB9LAotICAg
IHsgQ1BQX01PRF9BU1NJR04sICAgICAiJT0iIH0sCi0gICAgeyBDUFBfQUREX0FTU0lHTiwgICAg
ICIrPSIgfSwKLSAgICB7IENQUF9ESVZfQVNTSUdOLCAgICAgIi89IiB9LAotICAgIHsgQ1BQX01V
TF9BU1NJR04sICAgICAiKj0iIH0sCi0gICAgeyBDUFBfUklHSFRfQlJBQ0tFVCwgICI6PiIgfSwK
LSAgICB7IENQUF9FUV9PUCwgICAgICAgICAgIj09IiB9LAotICAgIHsgQ1BQX1hPUl9PUCwgICAg
ICAgICAiXl4iIH0sIAotICAgIHsgQ1BQX1hPUl9BU1NJR04sICAgICAiXj0iIH0sIAotICAgIHsg
Q1BQX0ZMT0FUQ09OU1RBTlQsICAiPGZsb2F0LWNvbnN0PiIgfSwKLSAgICB7IENQUF9HRV9PUCwg
ICAgICAgICAgIj49IiB9LAotICAgIHsgQ1BQX1JJR0hUX09QLCAgICAgICAiPj4iIH0sCi0gICAg
eyBDUFBfUklHSFRfQVNTSUdOLCAgICI+Pj0iIH0sIAotICAgIHsgQ1BQX0lERU5USUZJRVIsICAg
ICAiPGlkZW50PiIgfSwKLSAgICB7IENQUF9JTlRDT05TVEFOVCwgICAgIjxpbnQtY29uc3Q+IiB9
LAotICAgIHsgQ1BQX0xFX09QLCAgICAgICAgICAiPD0iIH0sCi0gICAgeyBDUFBfTEVGVF9PUCwg
ICAgICAgICI8PCIgfSwKLSAgICB7IENQUF9MRUZUX0FTU0lHTiwgICAgIjw8PSIgfSwKLSAgICB7
IENQUF9MRUZUX0JSQUNLRVQsICAgIjw6IiB9LAotICAgIHsgQ1BQX0xFRlRfQlJBQ0UsICAgICAi
PCUiIH0sIAotICAgIHsgQ1BQX0RFQ19PUCwgICAgICAgICAiLS0iIH0sCi0gICAgeyBDUFBfUklH
SFRfQlJBQ0UsICAgICIlPiIgfSwgCi0gICAgeyBDUFBfTkVfT1AsICAgICAgICAgICIhPSIgfSwK
LSAgICB7IENQUF9PUl9PUCwgICAgICAgICAgInx8IiB9LAotICAgIHsgQ1BQX09SX0FTU0lHTiwg
ICAgICAifD0iIH0sIAotICAgIHsgQ1BQX0lOQ19PUCwgICAgICAgICAiKysiIH0sCi0gICAgeyBD
UFBfU1RSQ09OU1RBTlQsICAgICI8c3RyaW5nLWNvbnN0PiIgfSwKLSAgICB7IENQUF9UWVBFSURF
TlRJRklFUiwgIjx0eXBlLWlkZW50PiIgfSwKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8gU3RyaW5nIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2RlZmluZSBJTklUX1NU
UklOR19UQUJMRV9TSVpFIDE2Mzg0Ci0KLXR5cGVkZWYgc3RydWN0IFN0cmluZ1RhYmxlX1JlYyB7
Ci0gICAgY2hhciAqc3RyaW5nczsKLSAgICBpbnQgbmV4dEZyZWU7Ci0gICAgaW50IHNpemU7Ci19
IFN0cmluZ1RhYmxlOwotCi0vKgotICogSW5pdFN0cmluZ1RhYmxlKCkgLSBJbml0aWFsaXplIHRo
ZSBzdHJpbmcgdGFibGUuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgSW5pdFN0cmluZ1RhYmxlKFN0
cmluZ1RhYmxlICpzdGFibGUpCi17Ci0gICAgc3RhYmxlLT5zdHJpbmdzID0gKGNoYXIgKikgbWFs
bG9jKElOSVRfU1RSSU5HX1RBQkxFX1NJWkUpOwotICAgIGlmICghc3RhYmxlLT5zdHJpbmdzKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBaZXJvLXRoIG9mZnNldCBtZWFucyAiZW1wdHkiIHNv
IGRvbid0IHVzZSBpdC4KLSAgICBzdGFibGUtPm5leHRGcmVlID0gMTsKLSAgICBzdGFibGUtPnNp
emUgPSBJTklUX1NUUklOR19UQUJMRV9TSVpFOwotICAgIHJldHVybiAxOwotfSAvLyBJbml0U3Ry
aW5nVGFibGUKLQotLyoKLSAqIEZyZWVTdHJpbmdUYWJsZSgpIC0gRnJlZSB0aGUgc3RyaW5nIHRh
YmxlLgotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBGcmVlU3RyaW5nVGFibGUoU3RyaW5nVGFibGUg
KnN0YWJsZSkKLXsKLSAgICBpZiAoc3RhYmxlLT5zdHJpbmdzKQotICAgICAgICBmcmVlKHN0YWJs
ZS0+c3RyaW5ncyk7Ci0gICAgc3RhYmxlLT5zdHJpbmdzID0gTlVMTDsKLSAgICBzdGFibGUtPm5l
eHRGcmVlID0gMDsKLSAgICBzdGFibGUtPnNpemUgPSAwOwotfSAvLyBGcmVlU3RyaW5nVGFibGUK
LQotLyoKLSAqIEhhc2hTdHJpbmcoKSAtIEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgYmFzZSBoYXNo
IGZ1bmN0aW9uLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEhhc2hTdHJpbmcoY29uc3QgY2hhciAq
cykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0KLSAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgaHZh
bCA9IChodmFsKjEzNTA3ICsgKnMqMTk3KSBeIChodmFsID4+IDIpOwotICAgICAgICBzKys7Ci0g
ICAgfQotICAgIHJldHVybiBodmFsICYgMHg3ZmZmZmZmZjsKLX0gLy8gSGFzaFN0cmluZwotCi0v
KgotICogSGFzaFN0cmluZzIoKSAtIEhhc2ggYSBzdHJpbmcgd2l0aCB0aGUgaW5jcmltZW50aW5n
IGhhc2ggZnVuY3Rpb24uCi0gKgotICovCi0KLXN0YXRpYyBpbnQgSGFzaFN0cmluZzIoY29uc3Qg
Y2hhciAqcykKLXsKLSAgICBpbnQgaHZhbCA9IDA7Ci0KLSAgICB3aGlsZSAoKnMpIHsKLSAgICAg
ICAgaHZhbCA9IChodmFsKjcyOSArICpzKjM3KSBeIChodmFsID4+IDEpOwotICAgICAgICBzKys7
Ci0gICAgfQotICAgIHJldHVybiBodmFsOwotfSAvLyBIYXNoU3RyaW5nMgotCi0vKgotICogQWRk
U3RyaW5nKCkgLSBBZGQgYSBzdHJpbmcgdG8gYSBzdHJpbmcgdGFibGUuICBSZXR1cm4gaXQncyBv
ZmZzZXQuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgQWRkU3RyaW5nKFN0cmluZ1RhYmxlICpzdGFi
bGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGxlbiwgbG9jOwotICAgIGNoYXIgKnN0cjsK
LQotICAgIGxlbiA9IChpbnQpIHN0cmxlbihzKTsKLSAgICB3aGlsZSAoc3RhYmxlLT5uZXh0RnJl
ZSArIGxlbiArIDEgPj0gc3RhYmxlLT5zaXplKSB7Ci0gICAgICAgIGFzc2VydChzdGFibGUtPnNp
emUgPCAxMDAwMDAwKTsKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWFsbG9jKHN0YWJsZS0+c2l6
ZSoyKTsKLSAgICAgICAgbWVtY3B5KHN0ciwgc3RhYmxlLT5zdHJpbmdzLCBzdGFibGUtPnNpemUp
OwotICAgICAgICBmcmVlKHN0YWJsZS0+c3RyaW5ncyk7Ci0gICAgICAgIHN0YWJsZS0+c3RyaW5n
cyA9IHN0cjsKLSAgICAgICAgc3RhYmxlLT5zaXplID0gc3RhYmxlLT5zaXplKjI7Ci0gICAgfQot
ICAgIGxvYyA9IHN0YWJsZS0+bmV4dEZyZWU7Ci0gICAgc3RyY3B5KCZzdGFibGUtPnN0cmluZ3Nb
bG9jXSwgcyk7Ci0gICAgc3RhYmxlLT5uZXh0RnJlZSArPSBsZW4gKyAxOwotICAgIHJldHVybiBs
b2M7Ci19IC8vIEFkZFN0cmluZwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBIYXNoIHRh
YmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNkZWZpbmUgSU5JVF9IQVNIX1RBQkxFX1NJ
WkUgMjA0NwotI2RlZmluZSBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TIDMKLQotdHlwZWRlZiBz
dHJ1Y3QgSGFzaEVudHJ5X1JlYyB7Ci0gICAgaW50IGluZGV4OyAgICAgIC8vIFN0cmluZyB0YWJs
ZSBvZmZzZXQgb2Ygc3RyaW5nIHJlcHJlc2VudGF0aW9uCi0gICAgaW50IHZhbHVlOyAgICAgIC8v
IEF0b20gKHN5bWJvbCkgdmFsdWUKLX0gSGFzaEVudHJ5OwotCi10eXBlZGVmIHN0cnVjdCBIYXNo
VGFibGVfUmVjIHsKLSAgICBIYXNoRW50cnkgKmVudHJ5OwotICAgIGludCBzaXplOwotICAgIGlu
dCBlbnRyaWVzOwotICAgIGludCBjb3VudHNbSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyArIDFd
OwotfSBIYXNoVGFibGU7Ci0KLS8qCi0gKiBJbml0SGFzaFRhYmxlKCkgLSBJbml0aWFsaXplIHRo
ZSBoYXNoIHRhYmxlLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEluaXRIYXNoVGFibGUoSGFzaFRh
YmxlICpodGFibGUsIGludCBmc2l6ZSkKLXsKLSAgICBpbnQgaWk7Ci0KLSAgICBodGFibGUtPmVu
dHJ5ID0gKEhhc2hFbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKEhhc2hFbnRyeSkqZnNpemUpOwotICAg
IGlmICghaHRhYmxlLT5lbnRyeSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaHRhYmxlLT5zaXpl
ID0gZnNpemU7Ci0gICAgZm9yIChpaSA9IDA7IGlpIDwgZnNpemU7IGlpKyspIHsKLSAgICAgICAg
aHRhYmxlLT5lbnRyeVtpaV0uaW5kZXggPSAwOwotICAgICAgICBodGFibGUtPmVudHJ5W2lpXS52
YWx1ZSA9IDA7Ci0gICAgfQotICAgIGh0YWJsZS0+ZW50cmllcyA9IDA7Ci0gICAgZm9yIChpaSA9
IDA7IGlpIDw9IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlM7IGlpKyspCi0gICAgICAgIGh0YWJs
ZS0+Y291bnRzW2lpXSA9IDA7Ci0gICAgcmV0dXJuIDE7Ci19IC8vIEluaXRIYXNoVGFibGUKLQot
LyoKLSAqIEZyZWVIYXNoVGFibGUoKSAtIEZyZWUgdGhlIGhhc2ggdGFibGUuCi0gKgotICovCi0K
LXN0YXRpYyB2b2lkIEZyZWVIYXNoVGFibGUoSGFzaFRhYmxlICpodGFibGUpCi17Ci0gICAgaWYg
KGh0YWJsZS0+ZW50cnkpCi0gICAgICAgIGZyZWUoaHRhYmxlLT5lbnRyeSk7Ci0gICAgaHRhYmxl
LT5lbnRyeSA9IE5VTEw7Ci0gICAgaHRhYmxlLT5zaXplID0gMDsKLSAgICBodGFibGUtPmVudHJp
ZXMgPSAwOwotfSAvLyBGcmVlSGFzaFRhYmxlCi0KLS8qCi0gKiBFbXB0eSgpIC0gU2VlIGlmIGEg
aGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4KLSAqCi0gKi8KLQotc3RhdGljIGludCBFbXB0eShI
YXNoVGFibGUgKmh0YWJsZSwgaW50IGhhc2hsb2MpCi17Ci0gICAgYXNzZXJ0KGhhc2hsb2MgPj0g
MCAmJiBoYXNobG9jIDwgaHRhYmxlLT5zaXplKTsKLSAgICBpZiAoaHRhYmxlLT5lbnRyeVtoYXNo
bG9jXS5pbmRleCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0gLy8gRW1wdHkKLQotLyoKLSAqIE1hdGNoKCkgLSBTZWUg
aWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlzIG1hdGNoZXMgYSBzdHJpbmcuCi0gKgotICovCi0KLXN0
YXRpYyBpbnQgTWF0Y2goSGFzaFRhYmxlICpodGFibGUsIFN0cmluZ1RhYmxlICpzdGFibGUsIGNv
bnN0IGNoYXIgKnMsIGludCBoYXNobG9jKQotewotICAgIGludCBzdHJsb2M7Ci0KLSAgICBzdHJs
b2MgPSBodGFibGUtPmVudHJ5W2hhc2hsb2NdLmluZGV4OwotICAgIGlmICghc3RyY21wKHMsICZz
dGFibGUtPnN0cmluZ3Nbc3RybG9jXSkpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfSAvLyBNYXRjaAotCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLyBBdG9tIHRhYmxlOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNkZWZp
bmUgSU5JVF9BVE9NX1RBQkxFX1NJWkUgMTAyNAotCi0KLXN0cnVjdCBBdG9tVGFibGVfUmVjIHsK
LSAgICBTdHJpbmdUYWJsZSBzdGFibGU7IC8vIFN0cmluZyB0YWJsZS4KLSAgICBIYXNoVGFibGUg
aHRhYmxlOyAgIC8vIEhhc2hlcyBzdHJpbmcgdG8gYXRvbSBudW1iZXIgYW5kIHRva2VuIHZhbHVl
LiAgTXVsdGlwbGUgc3RyaW5ncyBjYW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUg
dGhlIHNhbWUgdG9rZW4gdmFsdWUgYnV0IGVhY2ggdW5pcXVlIHN0cmluZyBpcyBhIHVuaXF1ZSBh
dG9tLgotICAgIGludCAqYW1hcDsgICAgICAgICAgLy8gTWFwcyBhdG9tIHZhbHVlIHRvIG9mZnNl
dCBpbiBzdHJpbmcgdGFibGUuICBBdG9tcyBhbGwgbWFwIHRvIHVuaXF1ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc3RyaW5ncyBleGNlcHQgZm9yIHNvbWUgdW5kZWZpbmVkIHZhbHVlcyBp
biB0aGUgbG93ZXIsIGZpeGVkIHBhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRo
ZSBhdG9tIHRhYmxlIHRoYXQgbWFwIHRvICI8dW5kZWZpbmVkPiIuICBUaGUgbG93ZXN0IDI1NiBh
dG9tcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZCB0byBzaW5nbGUgY2hh
cmFjdGVyIEFTQ0lJIHZhbHVlcyBleGNlcHQgZm9yIGFscGhhbnVtZXJpYwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBhbmQgJ18nLCB3aGljaCBjYW4gYmUgb3RoZXIgdG9r
ZW5zLiAgTmV4dCBjb21lIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2Ug
dG9rZW5zIHdpdGggdGhlaXIgYXRvbSB2YWx1ZXMgZXF1YWwgdG8gdGhlIHRva2VuIHZhbHVlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBjb21lIHByZWRlZmluZWQgYXRvbXMsIGZv
bGxvd2VkIGJ5IHVzZXIgc3BlY2lmaWVkIGlkZW50aWZpZXJzLgotICAgIGludCAqYXJldjsgICAg
ICAgICAgLy8gUmV2ZXJzZWQgYXRvbSBmb3Igc3ltYm9sIHRhYmxlIHVzZS4KLSAgICBpbnQgbmV4
dEZyZWU7Ci0gICAgaW50IHNpemU7Ci19OwotCi1zdGF0aWMgQXRvbVRhYmxlIGxhdGFibGUgPSB7
IHsgTlVMTCwgMCwgMCB9LCB7IE5VTEwsIDAsIDAsIHswfSB9LCBOVUxMLCBOVUxMLCAwLCAwIH07
Ci1BdG9tVGFibGUgKmF0YWJsZSA9ICZsYXRhYmxlOwotCi1zdGF0aWMgaW50IEFkZEF0b21GaXhl
ZChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pOwotCi0vKgotICog
R3Jvd0F0b21UYWJsZSgpIC0gR3JvdyB0aGUgYXRvbSB0YWJsZSB0byBhdCBsZWFzdCAic2l6ZSIg
aWYgaXQncyBzbWFsbGVyLgotICoKLSAqLwotCi1zdGF0aWMgaW50IEdyb3dBdG9tVGFibGUoQXRv
bVRhYmxlICphdGFibGUsIGludCBzaXplKQotewotICAgIGludCAqbmV3bWFwLCAqbmV3cmV2Owot
Ci0gICAgaWYgKGF0YWJsZS0+c2l6ZSA8IHNpemUpIHsKLSAgICAgICAgaWYgKGF0YWJsZS0+YW1h
cCkgewotICAgICAgICAgICAgbmV3bWFwID0gcmVhbGxvYyhhdGFibGUtPmFtYXAsIHNpemVvZihp
bnQpKnNpemUpOwotICAgICAgICAgICAgbmV3cmV2ID0gcmVhbGxvYyhhdGFibGUtPmFyZXYsIHNp
emVvZihpbnQpKnNpemUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmV3bWFwID0g
bWFsbG9jKHNpemVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgbmV3cmV2ID0gbWFsbG9jKHNp
emVvZihpbnQpKnNpemUpOwotICAgICAgICAgICAgYXRhYmxlLT5zaXplID0gMDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIW5ld21hcCB8fCAhbmV3cmV2KSB7Ci0gICAgICAgICAgICAvKiBmYWls
ZWQgdG8gZ3JvdyAtLSBlcnJvciAqLwotICAgICAgICAgICAgaWYgKG5ld21hcCkKLSAgICAgICAg
ICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdtYXA7Ci0gICAgICAgICAgICBpZiAobmV3cmV2KQot
ICAgICAgICAgICAgICAgIGF0YWJsZS0+YXJldiA9IG5ld3JldjsKLSAgICAgICAgICAgIHJldHVy
biAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoJm5ld21hcFthdGFibGUtPnNpemVdLCAw
LCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgIG1lbXNldCgm
bmV3cmV2W2F0YWJsZS0+c2l6ZV0sIDAsIChzaXplIC0gYXRhYmxlLT5zaXplKSAqIHNpemVvZihp
bnQpKTsKLSAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3bWFwOwotICAgICAgICBhdGFibGUtPmFy
ZXYgPSBuZXdyZXY7Ci0gICAgICAgIGF0YWJsZS0+c2l6ZSA9IHNpemU7Ci0gICAgfQotICAgIHJl
dHVybiAwOwotfSAvLyBHcm93QXRvbVRhYmxlCi0KLS8qCi0gKiBsUmV2ZXJzZSgpIC0gUmV2ZXJz
ZSB0aGUgYm90dG9tIDIwIGJpdHMgb2YgYSAzMiBiaXQgaW50LgotICoKLSAqLwotCi1zdGF0aWMg
aW50IGxSZXZlcnNlKGludCBmdmFsKQotewotICAgIHVuc2lnbmVkIGludCBpbiA9IGZ2YWw7Ci0g
ICAgaW50IHJlc3VsdCA9IDAsIGNudCA9IDA7Ci0KLSAgICB3aGlsZShpbikgewotICAgICAgICBy
ZXN1bHQgPDw9IDE7Ci0gICAgICAgIHJlc3VsdCB8PSBpbiYxOwotICAgICAgICBpbiA+Pj0gMTsK
LSAgICAgICAgY250Kys7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgdXNlIGFsbCAzMSBiaXRzLiAg
T25lIG1pbGxpb24gYXRvbXMgaXMgcGxlbnR5IGFuZCBzb21ldGltZXMgdGhlCi0gICAgLy8gdXBw
ZXIgYml0cyBhcmUgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLgotCi0gICAgaWYgKGNudCA8IDIwKQot
ICAgICAgICByZXN1bHQgPDw9IDIwIC0gY250OwotICAgIHJldHVybiByZXN1bHQ7Ci19IC8vIGxS
ZXZlcnNlCi0KLS8qCi0gKiBBbGxvY2F0ZUF0b20oKSAtIEFsbG9jYXRlIGEgbmV3IGF0b20uICBB
c3NvY2lhdGVkIHdpdGggdGhlICJ1bmRlZmluZWQiIHZhbHVlIG9mIC0xLgotICoKLSAqLwotCi1z
dGF0aWMgaW50IEFsbG9jYXRlQXRvbShBdG9tVGFibGUgKmF0YWJsZSkKLXsKLSAgICBpZiAoYXRh
YmxlLT5uZXh0RnJlZSA+PSBhdGFibGUtPnNpemUpCi0gICAgICAgIEdyb3dBdG9tVGFibGUoYXRh
YmxlLCBhdGFibGUtPm5leHRGcmVlKjIpOwotICAgIGF0YWJsZS0+YW1hcFthdGFibGUtPm5leHRG
cmVlXSA9IC0xOwotICAgIGF0YWJsZS0+YXJldlthdGFibGUtPm5leHRGcmVlXSA9IGxSZXZlcnNl
KGF0YWJsZS0+bmV4dEZyZWUpOwotICAgIGF0YWJsZS0+bmV4dEZyZWUrKzsKLSAgICByZXR1cm4g
YXRhYmxlLT5uZXh0RnJlZSAtIDE7Ci19IC8vIEFsbG9jYXRlQXRvbQotCi0vKgotICogU2V0QXRv
bVZhbHVlKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9tIGFzc29jaWF0ZWQgd2l0aCAiaGFzaGluZGV4
Ii4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgU2V0QXRvbVZhbHVlKEF0b21UYWJsZSAqYXRhYmxl
LCBpbnQgYXRvbW51bWJlciwgaW50IGhhc2hpbmRleCkKLXsKLSAgICBhdGFibGUtPmFtYXBbYXRv
bW51bWJlcl0gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLmluZGV4OwotICAgIGF0
YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWUgPSBhdG9tbnVtYmVyOwotfSAvLyBT
ZXRBdG9tVmFsdWUKLQotLyoKLSAqIEZpbmRIYXNoTG9jKCkgLSBGaW5kIHRoZSBoYXNoIGxvY2F0
aW9uIGZvciB0aGlzIHN0cmluZy4gIFJldHVybiAtMSBpdCBoYXNoIHRhYmxlIGlzIGZ1bGwuCi0g
KgotICovCi0KLXN0YXRpYyBpbnQgRmluZEhhc2hMb2MoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0
IGNoYXIgKnMpCi17Ci0gICAgaW50IGhhc2hsb2MsIGhhc2hkZWx0YSwgY291bnQ7Ci0gICAgaW50
IEZvdW5kRW1wdHlTbG90ID0gMDsKLSAgICBpbnQgY29sbGlzaW9uW0hBU0hfVEFCTEVfTUFYX0NP
TExJU0lPTlMgKyAxXTsKLQotICAgIGhhc2hsb2MgPSBIYXNoU3RyaW5nKHMpICUgYXRhYmxlLT5o
dGFibGUuc2l6ZTsKLSAgICBpZiAoIUVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsK
LSAgICAgICAgaWYgKE1hdGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0YWJsZS0+c3RhYmxlLCBzLCBo
YXNobG9jKSkKLSAgICAgICAgICAgIHJldHVybiBoYXNobG9jOwotICAgICAgICBjb2xsaXNpb25b
MF0gPSBoYXNobG9jOwotICAgICAgICBoYXNoZGVsdGEgPSBIYXNoU3RyaW5nMihzKTsKLSAgICAg
ICAgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAoY291bnQgPCBIQVNIX1RBQkxFX01BWF9DT0xM
SVNJT05TKSB7Ci0gICAgICAgICAgICBoYXNobG9jID0gKChoYXNobG9jICsgaGFzaGRlbHRhKSAm
IDB4N2ZmZmZmZmYpICUgYXRhYmxlLT5odGFibGUuc2l6ZTsKLSAgICAgICAgICAgIGlmICghRW1w
dHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkgewotICAgICAgICAgICAgICAgIGlmIChNYXRj
aCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJsZSwgcywgaGFzaGxvYykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hsb2M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBGb3VuZEVtcHR5U2xvdCA9IDE7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb3VudCsrOwot
ICAgICAgICAgICAgY29sbGlzaW9uW2NvdW50XSA9IGhhc2hsb2M7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIUZvdW5kRW1wdHlTbG90KSB7Ci0gICAgICAgICAgICBpZiAoY3BwLT5vcHRpb25z
LkR1bXBBdG9tVGFibGUpIHsKLSAgICAgICAgICAgICAgICBpbnQgaWk7Ci0gICAgICAgICAgICAg
ICAgY2hhciBzdHJbMjAwXTsKLSAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiKioqIEhhc2ggZmFpbGVkIHdpdGggbW9yZSB0aGFuICVkIGNvbGxpc2lvbnMuIE11c3Qg
aW5jcmVhc2UgaGFzaCB0YWJsZSBzaXplLiAqKioiLAotICAgICAgICAgICAgICAgICAgICAgICBI
QVNIX1RBQkxFX01BWF9DT0xMSVNJT05TKTsKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coc3RyKTsKLQotICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIq
KiogTmV3IHN0cmluZyBcIiVzXCIsIGhhc2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lv
blswXSwgaGFzaGRlbHRhKTsKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsK
LSAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElT
SU9OUzsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihz
dHIpLCAiKioqIENvbGxpZGVzIG9uIHRyeSAlZCBhdCBoYXNoIGVudHJ5ICUwNHggd2l0aCBcIiVz
XCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgKyAxLCBjb2xsaXNpb25baWldLCBH
ZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRhYmxlLT5odGFibGUuZW50cnlbY29sbGlzaW9uW2lpXV0u
dmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKHN0cik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXRhYmxlLT5odGFibGUuY291bnRzW2NvdW50XSsr
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBoYXNobG9jOwotfSAvLyBGaW5kSGFzaExv
YwotCi0vKgotICogSW5jcmVhc2VIYXNoVGFibGVTaXplKCkKLSAqCi0gKi8KLQotc3RhdGljIGlu
dCBJbmNyZWFzZUhhc2hUYWJsZVNpemUoQXRvbVRhYmxlICphdGFibGUpCi17Ci0gICAgaW50IGlp
LCBzdHJsb2MsIG9sZGhhc2hsb2MsIHZhbHVlLCBzaXplOwotICAgIEF0b21UYWJsZSBvbGR0YWJs
ZTsKLSAgICBjaGFyICpzOwotCi0gICAgLy8gU2F2ZSB0aGUgb2xkIGF0b20gdGFibGUgYW5kIGNy
ZWF0ZSBhIG5ldyBvbmU6Ci0KLSAgICBvbGR0YWJsZSA9ICphdGFibGU7Ci0gICAgc2l6ZSA9IG9s
ZHRhYmxlLmh0YWJsZS5zaXplKjIgKyAxOwotICAgIGlmICghSW5pdEF0b21UYWJsZShhdGFibGUs
IHNpemUpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEFkZCBhbGwgdGhlIGV4aXN0aW5n
IHZhbHVlcyB0byB0aGUgbmV3IGF0b20gdGFibGUgcHJlc2VydmluZyB0aGVpciBhdG9tIHZhbHVl
czoKLQotICAgIGZvciAoaWkgPSBhdGFibGUtPm5leHRGcmVlOyBpaSA8IG9sZHRhYmxlLm5leHRG
cmVlOyBpaSsrKSB7Ci0gICAgICAgIHN0cmxvYyA9IG9sZHRhYmxlLmFtYXBbaWldOwotICAgICAg
ICBzID0gJm9sZHRhYmxlLnN0YWJsZS5zdHJpbmdzW3N0cmxvY107Ci0gICAgICAgIG9sZGhhc2hs
b2MgPSBGaW5kSGFzaExvYygmb2xkdGFibGUsIHMpOwotICAgICAgICBhc3NlcnQob2xkaGFzaGxv
YyA+PSAwKTsKLSAgICAgICAgdmFsdWUgPSBvbGR0YWJsZS5odGFibGUuZW50cnlbb2xkaGFzaGxv
Y10udmFsdWU7Ci0gICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsIHMsIHZhbHVlKTsKLSAgICB9
Ci0gICAgRnJlZUF0b21UYWJsZSgmb2xkdGFibGUpOwotICAgIHJldHVybiAxOwotfSAvLyBJbmNy
ZWFzZUhhc2hUYWJsZVNpemUKLQotLyoKLSAqIExvb2tVcEFkZFN0cmluZ0hhc2goKSAtIExvb2t1
cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElmIGl0J3Mgbm90IHRoZXJlLCBhZGQgaXQg
YW5kCi0gKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRvbSB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJs
ZSB0byAwLiAgUmV0dXJuIHRoZSBoYXNoIHRhYmxlIGluZGV4LgotICovCi0KLXN0YXRpYyBpbnQg
TG9va1VwQWRkU3RyaW5nSGFzaChBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKLXsK
LSAgICBpbnQgaGFzaGxvYywgc3RybG9jOwotCi0gICAgd2hpbGUoMSkgewotICAgICAgICBoYXNo
bG9jID0gRmluZEhhc2hMb2MoYXRhYmxlLCBzKTsKLSAgICAgICAgaWYgKGhhc2hsb2MgPj0gMCkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBJbmNyZWFzZUhhc2hUYWJsZVNpemUoYXRhYmxl
KTsKLSAgICB9Ci0KLSAgICBpZiAoRW1wdHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkgewot
ICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKys7Ci0gICAgICAgIHN0cmxvYyA9IEFkZFN0
cmluZygmYXRhYmxlLT5zdGFibGUsIHMpOwotICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyeVto
YXNobG9jXS5pbmRleCA9IHN0cmxvYzsKLSAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFz
aGxvY10udmFsdWUgPSAwOwotICAgIH0KLSAgICByZXR1cm4gaGFzaGxvYzsKLX0gLy8gTG9va1Vw
QWRkU3RyaW5nSGFzaAotCi0vKgotICogTG9va1VwQWRkU3RyaW5nKCkgLSBMb29rdXAgYSBzdHJp
bmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdzIG5vdCB0aGVyZSwgYWRkIGl0IGFuZAotICog
ICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUgdG8gdGhl
IG5leHQgYXRvbSBudW1iZXIuCi0gKiAgICAgICAgUmV0dXJuIHRoZSBhdG9tIHZhbHVlIG9mIHN0
cmluZy4KLSAqLwotCi1pbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBjb25z
dCBjaGFyICpzKQotewotICAgIGludCBoYXNoaW5kZXgsIGF0b207Ci0KLSAgICBoYXNoaW5kZXgg
PSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwgcyk7Ci0gICAgYXRvbSA9IGF0YWJsZS0+aHRh
YmxlLmVudHJ5W2hhc2hpbmRleF0udmFsdWU7Ci0gICAgaWYgKGF0b20gPT0gMCkgewotICAgICAg
ICBhdG9tID0gQWxsb2NhdGVBdG9tKGF0YWJsZSk7Ci0gICAgICAgIFNldEF0b21WYWx1ZShhdGFi
bGUsIGF0b20sIGhhc2hpbmRleCk7Ci0gICAgfQotICAgIHJldHVybiBhdG9tOwotfSAvLyBMb29r
VXBBZGRTdHJpbmcKLQotLyoKLSAqIEdldEF0b21TdHJpbmcoKQotICoKLSAqLwotCi1jb25zdCAg
Y2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCi17Ci0gICAg
aW50IHNvZmZzZXQ7Ci0KLSAgICBpZiAoYXRvbSA+IDAgJiYgYXRvbSA8IGF0YWJsZS0+bmV4dEZy
ZWUpIHsKLSAgICAgICAgc29mZnNldCA9IGF0YWJsZS0+YW1hcFthdG9tXTsKLSAgICAgICAgaWYg
KHNvZmZzZXQgPiAwICYmIHNvZmZzZXQgPCBhdGFibGUtPnN0YWJsZS5uZXh0RnJlZSkgewotICAg
ICAgICAgICAgcmV0dXJuICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW3NvZmZzZXRdOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICI8aW50ZXJuYWwgZXJyb3I6IGJhZCBzb2Zm
c2V0PiI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXRvbSA9PSAwKSB7
Ci0gICAgICAgICAgICByZXR1cm4gIjxudWxsIGF0b20+IjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChhdG9tID09IEVPRikgewotICAgICAgICAgICAgICAgIHJldHVybiAiPEVP
Rj4iOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIjxpbnZh
bGlkIGF0b20+IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0gLy8gR2V0QXRv
bVN0cmluZwotCi0vKgotICogR2V0UmV2ZXJzZWRBdG9tKCkKLSAqCi0gKi8KLQotaW50IEdldFJl
dmVyc2VkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pCi17Ci0gICAgaWYgKGF0b20g
PiAwICYmIGF0b20gPCBhdGFibGUtPm5leHRGcmVlKSB7Ci0gICAgICAgIHJldHVybiBhdGFibGUt
PmFyZXZbYXRvbV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfSAv
LyBHZXRSZXZlcnNlZEF0b20KLQotLyoKLSAqIEFkZEF0b20oKSAtIEFkZCBhIHN0cmluZyB0byB0
aGUgYXRvbSwgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJl
LgotICogICAgICAgICBSZXR1cm4gaXQncyBhdG9tIGluZGV4LgotICovCi0KLWludCBBZGRBdG9t
KEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQotewotICAgIGludCBhdG9tOwotCi0g
ICAgYXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHMpOwotICAgIHJldHVybiBhdG9tOwot
fSAvLyBBZGRBdG9tCi0KLS8qCi0gKiBBZGRBdG9tRml4ZWQoKSAtIEFkZCBhbiBhdG9tIHRvIHRo
ZSBoYXNoIGFuZCBzdHJpbmcgdGFibGVzIGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUuCi0gKiAg
ICAgICAgIEFzc2lnbiBpdCB0aGUgYXRvbSB2YWx1ZSBvZiAiYXRvbSIuCi0gKi8KLQotc3RhdGlj
IGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBh
dG9tKQotewotICAgIGludCBoYXNoaW5kZXgsIGxzaXplOwotCi0gICAgaGFzaGluZGV4ID0gTG9v
a1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOwotICAgIGlmIChhdGFibGUtPm5leHRGcmVlID49
IGF0YWJsZS0+c2l6ZSB8fCBhdG9tID49IGF0YWJsZS0+c2l6ZSkgewotICAgICAgICBsc2l6ZSA9
IGF0YWJsZS0+c2l6ZSoyOwotICAgICAgICBpZiAobHNpemUgPD0gYXRvbSkKLSAgICAgICAgICAg
IGxzaXplID0gYXRvbSArIDE7Ci0gICAgICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBsc2l6ZSk7
Ci0gICAgfQotICAgIGF0YWJsZS0+YW1hcFthdG9tXSA9IGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hh
c2hpbmRleF0uaW5kZXg7Ci0gICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1
ZSA9IGF0b207Ci0gICAgLy9pZiAoYXRvbSA+PSBhdGFibGUtPm5leHRGcmVlKQotICAgIC8vICAg
IGF0YWJsZS0+bmV4dEZyZWUgPSBhdG9tICsgMTsKLSAgICB3aGlsZSAoYXRvbSA+PSBhdGFibGUt
Pm5leHRGcmVlKSB7Ci0gICAgICAgIGF0YWJsZS0+YXJldlthdGFibGUtPm5leHRGcmVlXSA9IGxS
ZXZlcnNlKGF0YWJsZS0+bmV4dEZyZWUpOwotICAgICAgICBhdGFibGUtPm5leHRGcmVlKys7Ci0g
ICAgfQotICAgIHJldHVybiBhdG9tOwotfSAvLyBBZGRBdG9tRml4ZWQKLQotLyoKLSAqIEluaXRB
dG9tVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGF0b20gdGFibGUuCi0gKgotICovCi0KLWludCBJ
bml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXplKQotewotICAgIHVuc2ln
bmVkIGludCBpaTsKLQotICAgIGh0c2l6ZSA9IGh0c2l6ZSA8PSAwID8gSU5JVF9IQVNIX1RBQkxF
X1NJWkUgOiBodHNpemU7Ci0gICAgaWYgKCFJbml0U3RyaW5nVGFibGUoJmF0YWJsZS0+c3RhYmxl
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFJbml0SGFzaFRhYmxlKCZhdGFibGUtPmh0
YWJsZSwgaHRzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBhdGFibGUtPm5leHRGcmVl
ID0gMDsKLSAgICBhdGFibGUtPmFtYXAgPSBOVUxMOwotICAgIGF0YWJsZS0+c2l6ZSA9IDA7Ci0g
ICAgR3Jvd0F0b21UYWJsZShhdGFibGUsIElOSVRfQVRPTV9UQUJMRV9TSVpFKTsKLSAgICBpZiAo
IWF0YWJsZS0+YW1hcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBJbml0aWFsaXplIGxv
d2VyIHBhcnQgb2YgYXRvbSB0YWJsZSB0byAiPHVuZGVmaW5lZD4iIGF0b206Ci0KLSAgICBBZGRB
dG9tRml4ZWQoYXRhYmxlLCAiPHVuZGVmaW5lZD4iLCAwKTsKLSAgICBmb3IgKGlpID0gMDsgaWkg
PCBGSVJTVF9VU0VSX1RPS0VOX1NZOyBpaSsrKQotICAgICAgICBhdGFibGUtPmFtYXBbaWldID0g
YXRhYmxlLT5hbWFwWzBdOwotCi0gICAgLy8gQWRkIHNpbmdsZSBjaGFyYWN0ZXIgdG9rZW5zIHRv
IHRoZSBhdG9tIHRhYmxlOgotCi0gICAgewotCQljb25zdCBjaGFyICpzID0gIn4hJV4mKigpLSs9
fCwuPD4vPzs6W117fSMiOwotICAgICAgICBjaGFyIHRbMl07Ci0KLSAgICAgICAgdFsxXSA9ICdc
MCc7Ci0gICAgICAgIHdoaWxlICgqcykgewotICAgICAgICAgICAgdFswXSA9ICpzOwotICAgICAg
ICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgdCwgc1swXSk7Ci0gICAgICAgICAgICBzKys7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBZGQgbXVsdGlwbGUgY2hhcmFjdGVyIHNjYW5uZXIg
dG9rZW5zIDoKLQotICAgIGZvciAoaWkgPSAwOyBpaSA8IHNpemVvZih0b2tlbnMpL3NpemVvZih0
b2tlbnNbMF0pOyBpaSsrKQotICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxlLCB0b2tlbnNbaWld
LnN0ciwgdG9rZW5zW2lpXS52YWwpOwotCi0gICAgLy8gQWRkIGVycm9yIHN5bWJvbCBpZiBydW5u
aW5nIGluIGVycm9yIG1vZGU6Ci0KLSAgICBpZiAoY3BwLT5vcHRpb25zLkVycm9yTW9kZSkKLSAg
ICAgICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgImVycm9yIiwgRVJST1JfU1kpOwotCi0gICAgQWRk
QXRvbShhdGFibGUsICI8KioqIGVuZCBmaXhlZCBhdG9tcyAqKio+Iik7Ci0KLSAgICByZXR1cm4g
MTsKLX0gLy8gSW5pdEF0b21UYWJsZQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBEZWJ1ZyBQcmludGlu
ZyBGdW5jdGlvbnM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8qCi0gKiBQcmludEF0b21UYWJsZSgp
Ci0gKgotICovCi0KLXZvaWQgUHJpbnRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCi17Ci0g
ICAgaW50IGlpOwotICAgIGNoYXIgc3RyWzIwMF07Ci0KLSAgICBmb3IgKGlpID0gMDsgaWkgPCBh
dGFibGUtPm5leHRGcmVlOyBpaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0
ciksICIlZDogXCIlc1wiIiwgaWksICZhdGFibGUtPnN0YWJsZS5zdHJpbmdzW2F0YWJsZS0+YW1h
cFtpaV1dKTsKLSAgICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9Ci0gICAgc25wcmlu
dGYoc3RyLCBzaXplb2Yoc3RyKSwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNv
bGxpc2lvbnM9IiwKLSAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFi
bGUuZW50cmllcyk7Ci0gICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICBmb3IgKGlpID0gMDsg
aWkgPCBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNucHJpbnRm
KHN0ciwgc2l6ZW9mKHN0ciksICIgJWQiLCBhdGFibGUtPmh0YWJsZS5jb3VudHNbaWldKTsKLSAg
ICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9Ci0KLX0gLy8gUHJpbnRBdG9tVGFibGUK
LQotCi0vKgotICogR2V0U3RyaW5nT2ZBdG9tKCkKLSAqCi0gKi8KLQotY2hhciogR2V0U3RyaW5n
T2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSkKLXsKLQkgY2hhciogY2hyX3N0cjsK
LQkgY2hyX3N0cj0mYXRhYmxlLT5zdGFibGUuc3RyaW5nc1thdGFibGUtPmFtYXBbYXRvbV1dOwot
CSByZXR1cm4gY2hyX3N0cjsKLX0gLy8gR2V0U3RyaW5nT2ZBdG9tCi0KLS8qCi0gKiBGcmVlQXRv
bVRhYmxlKCkgLSBGcmVlIHRoZSBhdG9tIHRhYmxlIGFuZCBhc3NvY2lhdGVkIG1lbW9yeQotICoK
LSAqLwotCi12b2lkIEZyZWVBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpCi17Ci0gICAgRnJl
ZVN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSk7Ci0gICAgRnJlZUhhc2hUYWJsZSgmYXRhYmxl
LT5odGFibGUpOwotICAgIGlmIChhdGFibGUtPmFtYXApCi0gICAgICAgIGZyZWUoYXRhYmxlLT5h
bWFwKTsKLSAgICBpZiAoYXRhYmxlLT5hcmV2KQotICAgICAgICBmcmVlKGF0YWJsZS0+YXJldik7
Ci0gICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKLSAgICBhdGFibGUtPmFyZXYgPSBOVUxMOwotICAg
IGF0YWJsZS0+bmV4dEZyZWUgPSAwOwotICAgIGF0YWJsZS0+c2l6ZSA9IDA7Ci19IC8vIEZyZWVB
dG9tVGFibGUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBhdG9tLmMgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxZDg0YzMyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAs
MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlz
IHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNh
dGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0
ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0
aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0
cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3Qg
dG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNp
dmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBO
VklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVj
ZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Ig
d2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHBy
b3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3Ug
bXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2Ug
YW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlz
dHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJh
ZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
ZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3Rp
Y2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUg
Z3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBh
bnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZl
Ci13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1h
eSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAot
Ci1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFT
SVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVS
IEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5U
QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFO
RCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBS
T0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BF
Q0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFO
WSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1Ig
RElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQg
V0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8vCi0vLyBhdG9tLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX0FUT01f
SCkKLSNkZWZpbmUgX19BVE9NX0ggMQotCi10eXBlZGVmIHN0cnVjdCBBdG9tVGFibGVfUmVjIEF0
b21UYWJsZTsKLQotZXh0ZXJuIEF0b21UYWJsZSAqYXRhYmxlOwotCi1pbnQgSW5pdEF0b21UYWJs
ZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci12b2lkIEZyZWVBdG9tVGFibGUoQXRv
bVRhYmxlICphdGFibGUpOwotaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNo
YXIgKnMpOwotdm9pZCBQcmludEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSk7Ci1pbnQgTG9v
a1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKTsKLWNvbnN0IGNo
YXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKLWludCBHZXRS
ZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKLWNoYXIqIEdldFN0cmlu
Z09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwotI2VuZGlmIC8vICFkZWZpbmVk
KF9fQVRPTV9IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTE4MDg1My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCAr
MCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
Ci0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgot
UFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotLy8KLS8vIGNvbXBpbGUuaAotLy8KLQotI2lmICFkZWZpbmVkKF9f
Q09NUElMRV9IKQotI2RlZmluZSBfX0NPTVBJTEVfSCAxCi0KLWludCBJbml0Q1BQU3RydWN0KHZv
aWQpOwotCi10eXBlZGVmIHN0cnVjdCBPcHRpb25zX1JlY3sKLSAgICBjb25zdCBjaGFyICpwcm9m
aWxlU3RyaW5nOwotICAgIGludCBFcnJvck1vZGU7Ci0gICAgaW50IFF1aWV0OwotCQotICAgIC8v
IERlYnVnIFRoZSBDb21waWxlciBvcHRpb25zOgotICAgIGludCBEdW1wQXRvbVRhYmxlOwotfSBP
cHRpb25zOwotCi0jZGVmaW5lIE1BWF9JRl9ORVNUSU5HICA2NAotc3RydWN0IENQUFN0cnVjdF9S
ZWMgewotICAgIC8vIFB1YmxpYyBtZW1iZXJzCi0gICAgU291cmNlTG9jICpwTGFzdFNvdXJjZUxv
YzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzdGF0ZW1lbnQgYnkgdGhlIHRyZWUgd2Fs
a2VycwotICAgIE9wdGlvbnMgb3B0aW9uczsgICAgICAgICAgICAvLyBDb21waWxlIG9wdGlvbnMg
YW5kIHBhcmFtZXRlcnMKLQotICAgIC8vIFByaXZhdGUgbWVtYmVycwotICAgIFNvdXJjZUxvYyBs
YXN0U291cmNlTG9jOwotCi0gICAgLy8gU2Nhbm5lciBkYXRhOgotCi0gICAgU291cmNlTG9jICp0
b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2NhdGlvbiBvZiBtb3N0IHJlY2VudCB0b2tlbiBz
ZWVuIGJ5IHRoZSBzY2FubmVyCi0gICAgaW50IG1vc3RSZWNlbnRUb2tlbjsgICAgICAgIC8vIE1v
c3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIKLSAgICBJbnB1dFNyYyAqY3VycmVu
dElucHV0OwotICAgIGludCBwcmV2aW91c190b2tlbjsKLSAgICBpbnQgcGFzdEZpcnN0U3RhdGVt
ZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUgdGhhdCAjdmVyc2lvbiBpcyB0aGUgZmlyc3Qg
c3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlmIHByZXNlbnQKLSAgICAKLQl2b2lkICpwQzsg
ICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0aGUgcGFyc2VDb250ZXh0IG9mIHRoZSBjb21w
aWxlIG9iamVjdCBpbiBjcHAuICAKLSAgICAgCi0gICAgLy8gUHJpdmF0ZSBtZW1iZXJzOgotICAg
IFNvdXJjZUxvYyBsdG9rZW5Mb2M7Ci0JaW50IGlmZGVwdGg7ICAgICAgICAgICAgICAgIC8vY3Vy
cmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3RpbmcgaW4gdGhlIGNwcC5jIGZpbGUgKHByZS1wcm9j
ZXNzb3IpICAgIAotICAgIGludCBlbHNlZGVwdGhbTUFYX0lGX05FU1RJTkddOy8vS2VlcCBhIHRy
YWNrIG9mICNpZiBkZXB0aC4uTWF4IGFsbG93ZWQgaXMgNjQuCi0gICAgaW50IGVsc2V0cmFja2Vy
OyAgICAgICAgICAgIC8vI2lmLSNlbHNlIGFuZCAjZW5kaWYgY29uc3RydWN0cy4uLkNvdW50ZXIu
Ci0gICAgY29uc3QgY2hhciAqRXJyTXNnOwotICAgIGludCBDb21waWxlRXJyb3I7ICAgICAgICAg
ICAvL0luZGljYXRlIGNvbXBpbGUgZXJyb3Igd2hlbiAjZXJyb3IsICNlbHNlLCNlbGlmIG1pc21h
dGNoLgotCi0gICAgLy8KLSAgICAvLyBHbG9iYWxzIHVzZWQgdG8gY29tbXVuaWNhdGUgYmV0d2Vl
biBQYVBhcnNlU3RyaW5ncygpIGFuZCB5eV9pbnB1dCgpYW5kIAotICAgIC8vIGFsc28gYWNyb3Nz
IHRoZSBmaWxlcy4oZ2VuX2dsc2xhbmcuY3BwIGFuZCBzY2FubmVyLmMpCi0gICAgLy8KLSAgICBp
bnQgUGFXaGljaFN0cjsgICAgICAgICAgICAgLy8gd2hpY2ggc3RyaW5nIHdlJ3JlIHBhcnNpbmcK
LSAgICBjb25zdCBpbnQqIFBhU3RyTGVuOyAgICAgICAgLy8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0
aGUgUGFBcmd2IHN0cmluZ3MKLSAgICBpbnQgUGFBcmdjOyAgICAgICAgICAgICAgICAgLy8gY291
bnQgb2Ygc3RyaW5ncyBpbiB0aGUgYXJyYXkKLSAgICBjb25zdCBjaGFyKiBjb25zdCogUGFBcmd2
OyAgLy8gb3VyIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UgICAgCi0gICAgdW5zaWduZWQgaW50
IHRva2Vuc0JlZm9yZUVPRiA6IDE7Ci19OwotCi0jZW5kaWYgLy8gIWRlZmluZWQoX19DT01QSUxF
X0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NwcC5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExMDc2Yi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTExOCArMCwwIEBACi0vKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1O
VklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91
IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVy
bXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJp
YnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9m
IHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxl
YXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklE
SUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFi
aWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywg
TlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5k
ZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAo
dGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJl
ZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNh
dGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5
b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhl
IGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2lu
ZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRo
ZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNl
IG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEu
Ci1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmln
aHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJ
QSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRz
IHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90
aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0
ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09G
VFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM
SUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRI
RVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5P
IEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwK
LUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRI
RSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0Yg
VEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRI
RU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJ
QUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ly8KLS8vIGNwcC5jCi0vLwotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxj
dHlwZS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNTQpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDE1MikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzA2KQotI2VuZGlmCi0KLXN0YXRpYyBp
bnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0vKiBEb24ndCB1c2UgbWVtb3J5LmMn
cyByZXBsYWNlbWVudHMsIGFzIHdlIGNsZWFuIHVwIHByb3Blcmx5IGhlcmUgKi8KLSN1bmRlZiBt
YWxsb2MKLSN1bmRlZiBmcmVlCi0KLXN0YXRpYyBpbnQgYmluZEF0b20gPSAwOwotc3RhdGljIGlu
dCBjb25zdEF0b20gPSAwOwotc3RhdGljIGludCBkZWZhdWx0QXRvbSA9IDA7Ci1zdGF0aWMgaW50
IGRlZmluZUF0b20gPSAwOwotc3RhdGljIGludCBkZWZpbmVkQXRvbSA9IDA7Ci1zdGF0aWMgaW50
IGVsc2VBdG9tID0gMDsKLXN0YXRpYyBpbnQgZWxpZkF0b20gPSAwOwotc3RhdGljIGludCBlbmRp
ZkF0b20gPSAwOwotc3RhdGljIGludCBpZkF0b20gPSAwOwotc3RhdGljIGludCBpZmRlZkF0b20g
PSAwOwotc3RhdGljIGludCBpZm5kZWZBdG9tID0gMDsKLXN0YXRpYyBpbnQgaW5jbHVkZUF0b20g
PSAwOwotc3RhdGljIGludCBsaW5lQXRvbSA9IDA7Ci1zdGF0aWMgaW50IHByYWdtYUF0b20gPSAw
Owotc3RhdGljIGludCB0ZXh1bml0QXRvbSA9IDA7Ci1zdGF0aWMgaW50IHVuZGVmQXRvbSA9IDA7
Ci1zdGF0aWMgaW50IGVycm9yQXRvbSA9IDA7Ci1zdGF0aWMgaW50IF9fTElORV9fQXRvbSA9IDA7
Ci1zdGF0aWMgaW50IF9fRklMRV9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IF9fVkVSU0lPTl9fQXRv
bSA9IDA7Ci1zdGF0aWMgaW50IHZlcnNpb25BdG9tID0gMDsKLXN0YXRpYyBpbnQgZXh0ZW5zaW9u
QXRvbSA9IDA7Ci0KLXN0YXRpYyBTY29wZSAqbWFjcm9zID0gMDsKLSNkZWZpbmUgTUFYX01BQ1JP
X0FSR1MgIDY0Ci0KLXN0YXRpYyBTb3VyY2VMb2MgaWZsb2M7IC8qIG91dGVybW9zdCAjaWYgKi8K
LQotaW50IEluaXRDUFAodm9pZCkKLXsKLSAgICBjaGFyICAgICAgICBidWZmZXJbNjRdLCAqdDsK
LSAgICBjb25zdCBjaGFyICAqZjsKLQotICAgIC8vIEFkZCB2YXJpb3VzIGF0b21zIG5lZWRlZCBi
eSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKLSAgICBiaW5kQXRvbSA9IExvb2tVcEFkZFN0cmluZyhh
dGFibGUsICJiaW5kIik7Ci0gICAgY29uc3RBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwg
ImNvbnN0Iik7Ci0gICAgZGVmYXVsdEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVm
YXVsdCIpOwotICAgIGRlZmluZUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5l
Iik7Ci0gICAgZGVmaW5lZEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiZGVmaW5lZCIp
OwotICAgIGVsaWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVsaWYiKTsKLSAgICBl
bHNlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlbHNlIik7Ci0gICAgZW5kaWZBdG9t
ID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImVuZGlmIik7Ci0gICAgaWZBdG9tID0gTG9va1Vw
QWRkU3RyaW5nKGF0YWJsZSwgImlmIik7Ci0gICAgaWZkZWZBdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgImlmZGVmIik7Ci0gICAgaWZuZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJpZm5kZWYiKTsKLSAgICBpbmNsdWRlQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
ICJpbmNsdWRlIik7Ci0gICAgbGluZUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAibGlu
ZSIpOwotICAgIHByYWdtYUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAicHJhZ21hIik7
Ci0gICAgdGV4dW5pdEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAidGV4dW5pdCIpOwot
ICAgIHVuZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJ1bmRlZiIpOwotCWVycm9y
QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlcnJvciIpOwotICAgIF9fTElORV9fQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0xJTkVfXyIpOwotICAgIF9fRklMRV9fQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX0ZJTEVfXyIpOwotCV9fVkVSU0lPTl9fQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJfX1ZFUlNJT05fXyIpOwotICAgIHZlcnNpb25B
dG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInZlcnNpb24iKTsKLSAgICBleHRlbnNpb25B
dG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImV4dGVuc2lvbiIpOwotICAgIG1hY3JvcyA9
IE5ld1Njb3BlSW5Qb29sKG1lbV9DcmVhdGVQb29sKDAsIDApKTsKLSAgICBzdHJjcHkoYnVmZmVy
LCAiUFJPRklMRV8iKTsKLSAgICB0ID0gYnVmZmVyICsgc3RybGVuKGJ1ZmZlcik7Ci0gICAgZiA9
IGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nOwotICAgIHdoaWxlICgoaXNhbG51bSgqZikgfHwg
KmYgPT0gJ18nKSAmJiB0IDwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikgLSAxKQotICAgICAgICAq
dCsrID0gdG91cHBlcigqZisrKTsKLSAgICAqdCA9IDA7Ci0KLSAgICBQcmVkZWZpbmVJbnRNYWNy
bygiR0xfRVMiLCAxKTsKLSAgICBQcmVkZWZpbmVJbnRNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lT
SU9OX0hJR0giLCAxKTsKLQotCXJldHVybiAxOwotfSAvLyBJbml0Q1BQCi0KLWludCBGcmVlQ1BQ
KHZvaWQpCi17Ci0gICAgaWYgKG1hY3JvcykKLSAgICB7Ci0gICAgICAgIG1lbV9GcmVlUG9vbCht
YWNyb3MtPnBvb2wpOwotICAgICAgICBtYWNyb3MgPSAwOwotICAgIH0KLQotICAgIHJldHVybiAx
OwotfQotCi1pbnQgRmluYWxDUFAodm9pZCkKLXsKLQlpZiAoY3BwLT5pZmRlcHRoKQotCQlDUFBF
cnJvclRvSW5mb0xvZygiI2lmIG1pc21hdGNoIik7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRp
YyBpbnQgQ1BQZGVmaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiwg
bmFtZSwgYXJnc1tNQVhfTUFDUk9fQVJHU10sIGFyZ2M7Ci0gICAgY29uc3QgY2hhciAqbWVzc2Fn
ZTsKLSAgICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgU3ltYm9sICpzeW1iOwotICAgIFNvdXJjZUxv
YyBkdW1teUxvYzsKLSAgICBtZW1zZXQoJm1hYywgMCwgc2l6ZW9mKG1hYykpOwotICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coIiNkZWZpbmUiKTsKLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLSAgICBuYW1l
ID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gPT0gJygnICYm
ICF5eWx2YWxwcC0+c2NfaW50KSB7Ci0gICAgICAgIC8vIGdhdGhlciBhcmd1bWVudHMKLSAgICAg
ICAgYXJnYyA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
IGlmIChhcmdjID09IDAgJiYgdG9rZW4gPT0gJyknKSBicmVhazsKLSAgICAgICAgICAgIGlmICh0
b2tlbiAhPSBDUFBfSURFTlRJRklFUikgewotCQkJCUNQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5l
Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGFyZ2MgPCBNQVhfTUFDUk9fQVJHUykKLSAgICAgICAgICAgICAgICBhcmdzW2Fy
Z2MrK10gPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0g
d2hpbGUgKHRva2VuID09ICcsJyk7Ci0gICAgICAgIGlmICh0b2tlbiAhPSAnKScpIHsKLSAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5lIik7Ci0gICAgICAgICAgICByZXR1cm4g
dG9rZW47Ci0gICAgICAgIH0KLSAgICAgICAgbWFjLmFyZ2MgPSBhcmdjOwotICAgICAgICBtYWMu
YXJncyA9IG1lbV9BbGxvYyhtYWNyb3MtPnBvb2wsIGFyZ2MgKiBzaXplb2YoaW50KSk7Ci0gICAg
ICAgIG1lbWNweShtYWMuYXJncywgYXJncywgYXJnYyAqIHNpemVvZihpbnQpKTsKLSAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotCX0KLSAgICBtYWMuYm9keSA9IE5ld1Rva2VuU3RyZWFtKEdldEF0b21TdHJpbmcoYXRh
YmxlLCBuYW1lKSwgbWFjcm9zLT5wb29sKTsKLSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgewot
ICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykgewotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0
aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKLSAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluICNk
ZWZpbmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgUmVjb3JkVG9rZW4obWFjLmJv
ZHksIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICB9OwotCi0gICAgc3ltYiA9
IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOwotICAgIGlmIChzeW1iKSB7Ci0gICAgICAgIGlm
ICghc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYpIHsKLSAgICAgICAgICAgIC8vIGFscmVhZHkgZGVm
aW5lZCAtLSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBpZGVudGljYWwKLSAgICAgICAgICAg
IGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdjICE9IG1hYy5hcmdjKSBnb3RvIGVycm9yOwotICAg
ICAgICAgICAgZm9yIChhcmdjPTA7IGFyZ2MgPCBtYWMuYXJnYzsgYXJnYysrKQotICAgICAgICAg
ICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdzW2FyZ2NdICE9IG1hYy5hcmdzW2FyZ2Nd
KQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgUmV3aW5kVG9r
ZW5TdHJlYW0oc3ltYi0+ZGV0YWlscy5tYWMuYm9keSk7Ci0gICAgICAgICAgICBSZXdpbmRUb2tl
blN0cmVhbShtYWMuYm9keSk7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaW50
IG9sZF9sdmFsLCBvbGRfdG9rZW47Ci0gICAgICAgICAgICAgICAgb2xkX3Rva2VuID0gUmVhZFRv
a2VuKHN5bWItPmRldGFpbHMubWFjLmJvZHksIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBv
bGRfbHZhbCA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBSZWFk
VG9rZW4obWFjLmJvZHksIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0g
b2xkX3Rva2VuIHx8IHl5bHZhbHBwLT5zY19pbnQgIT0gb2xkX2x2YWwpIHsgCi0gICAgICAgICAg
ICAgICAgZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJNYWNybyBSZWRlZmlu
ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJs
ZSxuYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsK
LSAgICAgICAgICAgICAgICAgICAgRGVjTGluZU51bWJlcigpOwotICAgICAgICAgICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIEluY0xpbmVO
dW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyB9Ci0gICAgICAgICAgICB9IHdoaWxlICh0b2tlbiA+IDApOwotICAg
ICAgICB9Ci0gICAgICAgIC8vRnJlZU1hY3JvKCZzeW1iLT5kZXRhaWxzLm1hYyk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgZHVtbXlMb2MuZmlsZSA9IDA7Ci0gICAgICAgIGR1bW15TG9jLmxpbmUg
PSAwOwotICAgICAgICBzeW1iID0gQWRkU3ltYm9sKCZkdW1teUxvYywgbWFjcm9zLCBuYW1lLCBN
QUNST19TKTsKLSAgICB9Ci0gICAgc3ltYi0+ZGV0YWlscy5tYWMgPSBtYWM7Ci0gICAgcmV0dXJu
ICdcbic7Ci19IC8vIENQUGRlZmluZQotCi1zdGF0aWMgaW50IENQUHVuZGVmKHl5c3R5cGVwcCAq
IHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNw
cC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgU3ltYm9sICpzeW1iOwotCWlmKHRva2Vu
ID09ICdcbicpewotCQlDUFBFcnJvclRvSW5mb0xvZygiI3VuZGVmIik7Ci0JICAgIHJldHVybiB0
b2tlbjsKLSAgICB9Ci0gICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKQotICAgICAgICAg
IGdvdG8gZXJyb3I7Ci0gICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5z
Y19pZGVudCk7Ci0gICAgaWYgKHN5bWIpIHsKLSAgICAgICAgc3ltYi0+ZGV0YWlscy5tYWMudW5k
ZWYgPSAxOwotICAgIH0KLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2VuICE9ICdcbicpIHsKLSAgICBl
cnJvcjoKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN1bmRlZiIpOwotICAgIH0KLSAgICBy
ZXR1cm4gdG9rZW47Ci19IC8vIENQUHVuZGVmCi0KLS8qIENQUGVsc2UgLS0gc2tpcCBmb3J3YXJk
IHRvIGFwcHJvcHJpYXRlIHNwb3QuICBUaGlzIGlzIGFjdHVhbGx5IHVzZWQKLSoqIHRvIHNraXAg
dG8gYW5kICNlbmRpZiBhZnRlciBzZWVpbmcgYW4gI2Vsc2UsIEFORCB0byBza2lwIHRvIGEgI2Vs
c2UsCi0qKiAjZWxpZiwgb3IgI2VuZGlmIGFmdGVyIGEgI2lmLyNpZmRlZi8jaWZuZGVmLyNlbGlm
IHRlc3Qgd2FzIGZhbHNlCi0qLwotCi1zdGF0aWMgaW50IENQUGVsc2UoaW50IG1hdGNoZWxzZSwg
eXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50IGF0b20sZGVwdGg9MDsKLSAgICBpbnQg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotCQotCXdoaWxlICh0b2tlbiA+IDApIHsKLSAgICAgICAgaWYgKHRva2VuICE9ICcjJykg
ewotICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0g
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBp
bnB1dCBpbiAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5l
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0JCWlmICgodG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApKSAhPSBDUFBfSURFTlRJRklFUikKLQkJCWNvbnRpbnVlOwotICAg
ICAgICBhdG9tID0geXlsdmFscHAtPnNjX2lkZW50OwotICAgICAgICBpZiAoYXRvbSA9PSBpZkF0
b20gfHwgYXRvbSA9PSBpZmRlZkF0b20gfHwgYXRvbSA9PSBpZm5kZWZBdG9tKXsKLSAgICAgICAg
ICAgIGRlcHRoKys7IGNwcC0+aWZkZXB0aCsrOyBjcHAtPmVsc2V0cmFja2VyKys7Ci0gICAgICAg
ICAgICBpZiAoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05FU1RJTkcpIHsKLSAgICAgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkIik7Ci0g
ICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gc2FuaXR5IGNoZWNrIGVsc2V0
cmFja2VyCi0gICAgICAgICAgICBpZiAoY3BwLT5lbHNldHJhY2tlciA8IDAgfHwgY3BwLT5lbHNl
dHJhY2tlciA+PSBNQVhfSUZfTkVTVElORykgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJtaXNtYXRjaGVkICNpZi8jZW5kaWYgc3RhdGVtZW50cyIpOwotICAgICAgICAgICAg
ICAgIGNwcC0+Q29tcGlsZUVycm9yID0gMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJd
ID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChhdG9tID09IGVuZGlmQXRvbSkgewot
ICAgICAgICAgICAgaWYoLS1kZXB0aDwwKXsKLSAgICAgICAgICAgICAgICBpZiAoY3BwLT5lbHNl
dHJhY2tlcikKLSAgICAgICAgICAgICAgICAgICAgLS1jcHAtPmVsc2V0cmFja2VyOwotICAgICAg
ICAgICAgICAgIGlmIChjcHAtPmlmZGVwdGgpIAotICAgICAgICAgICAgICAgICAgICAtLWNwcC0+
aWZkZXB0aDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gICAgICAgICAg
ICAgCi0gICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7Ci0gICAgICAgICAgICAtLWNwcC0+
aWZkZXB0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgoKGludCkobWF0Y2hlbHNlKSAh
PSAwKSYmIGRlcHRoPT0wKSB7Ci0JCQlpZiAoYXRvbSA9PSBlbHNlQXRvbSApIHsKLSAgICAgICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9s
bG93aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUi
KTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8
PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBmb2xsb3dpbmcgI2Vsc2UgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAKLQkJCQlicmVhazsKLQkJCX0g
Ci0JCQllbHNlIGlmIChhdG9tID09IGVsaWZBdG9tKSB7Ci0gICAgICAgICAgICAgICAgLyogd2Ug
ZGVjcmVtZW50IGNwcC0+aWZkZXB0aCBoZXJlLCBiZWNhdXNlIENQUGlmIHdpbGwgaW5jcmVtZW50
Ci0gICAgICAgICAgICAgICAgICogaXQgYW5kIHdlIHJlYWxseSB3YW50IHRvIGxlYXZlIGl0IGFs
b25lICovCi0JCQkJaWYgKGNwcC0+aWZkZXB0aCl7Ci0JCQkJCS0tY3BwLT5pZmRlcHRoOwotCQkJ
CSAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7Ci0JCQkJfQotICAgICAgICAgICAgICAgIHJldHVybiBD
UFBpZih5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Ci0JCX0KLSAgICAgICAgZWxzZSBpZigoYXRv
bT09ZWxzZUF0b20pICYmICghQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKCkpKXsKLSAgICAgICAgICAg
IENQUEVycm9yVG9JbmZvTG9nKCIjZWxzZSBhZnRlciBhICNlbHNlIik7Ci0gICAgICAgICAgICBj
cHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQl9
OwotICAgIHJldHVybiB0b2tlbjsKLX0KLQotZW51bSBldmFsX3ByZWMgewotICAgIE1JTl9QUkVD
LAotICAgIENPTkQsIExPR09SLCBMT0dBTkQsIE9SLCBYT1IsIEFORCwgRVFVQUwsIFJFTEFUSU9O
LCBTSElGVCwgQURELCBNVUwsIFVOQVJZLAotICAgIE1BWF9QUkVDCi19OwotCi1zdGF0aWMgaW50
IG9wX2xvZ29yKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSB8fCBiOyB9Ci1zdGF0aWMgaW50IG9w
X2xvZ2FuZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJiYgYjsgfQotc3RhdGljIGludCBvcF9v
cihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgfCBiOyB9Ci1zdGF0aWMgaW50IG9wX3hvcihpbnQg
YSwgaW50IGIpIHsgcmV0dXJuIGEgXiBiOyB9Ci1zdGF0aWMgaW50IG9wX2FuZChpbnQgYSwgaW50
IGIpIHsgcmV0dXJuIGEgJiBiOyB9Ci1zdGF0aWMgaW50IG9wX2VxKGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9Ci1zdGF0aWMgaW50IG9wX25lKGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSAhPSBiOyB9Ci1zdGF0aWMgaW50IG9wX2dlKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PSBi
OyB9Ci1zdGF0aWMgaW50IG9wX2xlKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8PSBiOyB9Ci1z
dGF0aWMgaW50IG9wX2d0KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA+IGI7IH0KLXN0YXRpYyBp
bnQgb3BfbHQoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDwgYjsgfQotc3RhdGljIGludCBvcF9z
aGwoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw8IGI7IH0KLXN0YXRpYyBpbnQgb3Bfc2hyKGlu
dCBhLCBpbnQgYikgeyByZXR1cm4gYSA+PiBiOyB9Ci1zdGF0aWMgaW50IG9wX2FkZChpbnQgYSwg
aW50IGIpIHsgcmV0dXJuIGEgKyBiOyB9Ci1zdGF0aWMgaW50IG9wX3N1YihpbnQgYSwgaW50IGIp
IHsgcmV0dXJuIGEgLSBiOyB9Ci1zdGF0aWMgaW50IG9wX211bChpbnQgYSwgaW50IGIpIHsgcmV0
dXJuIGEgKiBiOyB9Ci1zdGF0aWMgaW50IG9wX2RpdihpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEg
LyBiOyB9Ci1zdGF0aWMgaW50IG9wX21vZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgJSBiOyB9
Ci1zdGF0aWMgaW50IG9wX3BvcyhpbnQgYSkgeyByZXR1cm4gYTsgfQotc3RhdGljIGludCBvcF9u
ZWcoaW50IGEpIHsgcmV0dXJuIC1hOyB9Ci1zdGF0aWMgaW50IG9wX2NtcGwoaW50IGEpIHsgcmV0
dXJuIH5hOyB9Ci1zdGF0aWMgaW50IG9wX25vdChpbnQgYSkgeyByZXR1cm4gIWE7IH0KLQotc3Ry
dWN0IHsKLSAgICBpbnQgdG9rZW4sIHByZWMsICgqb3ApKGludCwgaW50KTsKLX0gYmlub3BbXSA9
IHsKLSAgICB7IENQUF9PUl9PUCwgTE9HT1IsIG9wX2xvZ29yIH0sCi0gICAgeyBDUFBfQU5EX09Q
LCBMT0dBTkQsIG9wX2xvZ2FuZCB9LAotICAgIHsgJ3wnLCBPUiwgb3Bfb3IgfSwKLSAgICB7ICde
JywgWE9SLCBvcF94b3IgfSwKLSAgICB7ICcmJywgQU5ELCBvcF9hbmQgfSwKLSAgICB7IENQUF9F
UV9PUCwgRVFVQUwsIG9wX2VxIH0sCi0gICAgeyBDUFBfTkVfT1AsIEVRVUFMLCBvcF9uZSB9LAot
ICAgIHsgJz4nLCBSRUxBVElPTiwgb3BfZ3QgfSwKLSAgICB7IENQUF9HRV9PUCwgUkVMQVRJT04s
IG9wX2dlIH0sCi0gICAgeyAnPCcsIFJFTEFUSU9OLCBvcF9sdCB9LAotICAgIHsgQ1BQX0xFX09Q
LCBSRUxBVElPTiwgb3BfbGUgfSwKLSAgICB7IENQUF9MRUZUX09QLCBTSElGVCwgb3Bfc2hsIH0s
Ci0gICAgeyBDUFBfUklHSFRfT1AsIFNISUZULCBvcF9zaHIgfSwKLSAgICB7ICcrJywgQURELCBv
cF9hZGQgfSwKLSAgICB7ICctJywgQURELCBvcF9zdWIgfSwKLSAgICB7ICcqJywgTVVMLCBvcF9t
dWwgfSwKLSAgICB7ICcvJywgTVVMLCBvcF9kaXYgfSwKLSAgICB7ICclJywgTVVMLCBvcF9tb2Qg
fSwKLX07Ci0KLXN0cnVjdCB7Ci0gICAgaW50IHRva2VuLCAoKm9wKShpbnQpOwotfSB1bm9wW10g
PSB7Ci0gICAgeyAnKycsIG9wX3BvcyB9LAotICAgIHsgJy0nLCBvcF9uZWcgfSwKLSAgICB7ICd+
Jywgb3BfY21wbCB9LAotICAgIHsgJyEnLCBvcF9ub3QgfSwKLX07Ci0KLSNkZWZpbmUgQUxFTihB
KSAoc2l6ZW9mKEEpL3NpemVvZihBWzBdKSkKLQotc3RhdGljIGludCBldmFsKGludCB0b2tlbiwg
aW50IHByZWMsIGludCAqcmVzLCBpbnQgKmVyciwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0g
ICAgaW50ICAgICAgICAgaSwgdmFsOwotICAgIFN5bWJvbCAgICAgICpzOwotICAgIGlmICh0b2tl
biA9PSBDUFBfSURFTlRJRklFUikgewotICAgICAgICBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09
IGRlZmluZWRBdG9tKSB7Ci0gICAgICAgICAgICBpbnQgbmVlZGNsb3NlID0gMDsKLSAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKCcpIHsKLSAgICAgICAgICAgICAg
ICBuZWVkY2xvc2UgPSAxOwotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikKLSAgICAgICAgICAgICAgICBn
b3RvIGVycm9yOwotICAgICAgICAgICAgKnJlcyA9IChzID0gTG9va1VwU3ltYm9sKG1hY3Jvcywg
eXlsdmFscHAtPnNjX2lkZW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgID8gIXMtPmRldGFp
bHMubWFjLnVuZGVmIDogMDsKLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChuZWVk
Y2xvc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJyknKQotICAgICAgICAgICAg
ICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIH0K
LQkJfSBlbHNlIGlmIChNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRlbnQsIHl5bHZhbHBwKSkg
ewotCQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgcmV0dXJuIGV2YWwodG9rZW4sIHByZWMsIHJlcywgZXJy
LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwot
ICAgICAgICB9Ci0JfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKLSAgICAg
ICAgKnJlcyA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50
SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICB9IGVsc2UgaWYg
KHRva2VuID09ICcoJykgewotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIHRva2VuID0gZXZhbCh0b2tl
biwgTUlOX1BSRUMsIHJlcywgZXJyLCB5eWx2YWxwcCk7Ci0gICAgICAgIGlmICghKmVycikgewot
ICAgICAgICAgICAgaWYgKHRva2VuICE9ICcpJykKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9y
OwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpID0gQUxFTih1bm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAodW5v
cFtpXS50b2tlbiA9PSB0b2tlbikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElu
cHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB0b2tl
biA9IGV2YWwodG9rZW4sIFVOQVJZLCByZXMsIGVyciwgeXlsdmFscHApOwotICAgICAgICAgICAg
KnJlcyA9IHVub3BbaV0ub3AoKnJlcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBn
b3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlICghKmVycikgewotICAgICAg
ICBpZiAodG9rZW4gPT0gJyknIHx8IHRva2VuID09ICdcbicpIGJyZWFrOwotICAgICAgICBmb3Ig
KGkgPSBBTEVOKGJpbm9wKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoYmlu
b3BbaV0udG9rZW4gPT0gdG9rZW4pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGkgPCAwIHx8IGJpbm9wW2ldLnByZWMgPD0gcHJlYykKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB2YWwgPSAqcmVzOwotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIHRva2Vu
ID0gZXZhbCh0b2tlbiwgYmlub3BbaV0ucHJlYywgcmVzLCBlcnIsIHl5bHZhbHBwKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChiaW5vcFtpXS5vcCA9PSBvcF9kaXYgfHwgYmlub3BbaV0ub3AgPT0g
b3BfbW9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKnJlcyA9PSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJwcmVwcm9jZXNzb3IgZGl2
aWRlIG9yIG1vZHVsbyBieSB6ZXJvIik7Ci0gICAgICAgICAgICAgICAgKmVyciA9IDE7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgKnJlcyA9IGJpbm9wW2ldLm9wKHZhbCwgKnJlcyk7Ci0gICAgfQotICAgIHJldHVybiB0
b2tlbjsKLWVycm9yOgotICAgIENQUEVycm9yVG9JbmZvTG9nKCJpbmNvcnJlY3QgcHJlcHJvY2Vz
c29yIGRpcmVjdGl2ZSIpOwotICAgICplcnIgPSAxOwotICAgICpyZXMgPSAwOwotICAgIHJldHVy
biB0b2tlbjsKLX0gLy8gZXZhbAotCi1zdGF0aWMgaW50IENQUGlmKHl5c3R5cGVwcCAqIHl5bHZh
bHBwKSB7Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpbnQgcmVzID0gMCwgZXJyID0gMDsKLQotICAgIGlm
ICghY3BwLT5pZmRlcHRoKyspCi0gICAgICAgIGlmbG9jID0gKmNwcC0+dG9rZW5Mb2M7Ci0gICAg
aWYoY3BwLT5pZmRlcHRoID4gTUFYX0lGX05FU1RJTkcpewotICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygibWF4ICNpZiBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkIik7Ci0gICAgICAgIGNwcC0+Q29t
cGlsZUVycm9yID0gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGNwcC0+ZWxzZXRy
YWNrZXIrKzsKLSAgICAvLyBzYW5pdHkgY2hlY2sgZWxzZXRyYWNrZXIKLSAgICBpZiAoY3BwLT5l
bHNldHJhY2tlciA8IDAgfHwgY3BwLT5lbHNldHJhY2tlciA+PSBNQVhfSUZfTkVTVElORykgewot
ICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygibWlzbWF0Y2hlZCAjaWYvI2VuZGlmIHN0YXRlbWVu
dHMiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOwotCi0gICAg
dG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywgJnJlcywgJmVyciwgeXlsdmFscHApOwotICAg
IGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhw
ZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjaWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVj
dGVkIGEgbmV3bGluZSIpOwotICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgewotICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9y
Ci0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQgZW5kIG9mIGlu
cHV0IGluICNpZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9IAotICAgIGlmICghcmVzICYmICFlcnIpIHsKLSAgICAgICAgdG9rZW4gPSBDUFBlbHNlKDEs
IHl5bHZhbHBwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUGlmCi0KLXN0
YXRpYyBpbnQgQ1BQaWZkZWYoaW50IGRlZmluZWQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewot
ICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgaW50IG5hbWUgPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Ci0gICAgaWYo
KytjcHAtPmlmZGVwdGggPiBNQVhfSUZfTkVTVElORyl7Ci0gICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJtYXggI2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKLSAgICAgICAgY3BwLT5Db21w
aWxlRXJyb3IgPSAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY3BwLT5lbHNldHJh
Y2tlcisrOwotICAgIC8vIHNhbml0eSBjaGVjayBlbHNldHJhY2tlcgotICAgIGlmIChjcHAtPmVs
c2V0cmFja2VyIDwgMCB8fCBjcHAtPmVsc2V0cmFja2VyID49IE1BWF9JRl9ORVNUSU5HKSB7Ci0g
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtaXNtYXRjaGVkICNpZi8jZW5kaWYgc3RhdGVtZW50
cyIpOwotICAgICAgICBjcHAtPkNvbXBpbGVFcnJvciA9IDE7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7Ci0KLSAgICBp
ZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgICAgIGRlZmluZWQgPyBDUFBF
cnJvclRvSW5mb0xvZygiaWZkZWYiKTpDUFBFcnJvclRvSW5mb0xvZygiaWZuZGVmIik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgU3ltYm9sICpzID0gTG9va1VwU3ltYm9sKG1hY3JvcywgbmFtZSk7
Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAg
IENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjaWZkZWYg
cHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAg
ICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjaWZk
ZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgocyAmJiAhcy0+ZGV0YWlscy5tYWMudW5kZWYpID8g
MSA6IDApICE9IGRlZmluZWQpCi0gICAgICAgICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFs
cHApOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUGlmZGVmCi0KLXN0YXRpYyBp
bnQgQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkgCi17Ci0gICAgaW50IHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQlpZih0
b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIiNsaW5lIik7Ci0gICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLQkJcmV0dXJuIHRva2VuOwot
CX0KLQllbHNlIGlmICh0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpIHsKLQkJeXlsdmFscHAtPnNj
X2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JCVNldExpbmVOdW1iZXIoeXlsdmFs
cHAtPnNjX2ludCk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgCi0JCWlmICh0b2tlbiA9PSBDUFBf
SU5UQ09OU1RBTlQpIHsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQ9YXRvaSh5eWx2YWxw
cC0+c3ltYm9sX25hbWUpOwotCQkJU2V0U3RyaW5nTnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOwot
ICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotCQkJaWYodG9rZW4hPSdcbicpCi0JCQkJQ1BQRXJyb3JUb0luZm9M
b2coIiNsaW5lIik7Ci0gICAgICAgIH0KLQkJZWxzZSBpZiAodG9rZW4gPT0gJ1xuJyl7Ci0JCQly
ZXR1cm4gdG9rZW47Ci0JCX0KLQkJZWxzZXsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCIjbGluZSIpOwotCQl9Ci0JfQotCWVsc2V7Ci0gICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IiNsaW5lIik7Ci0JfQotICAgIHJldHVybiB0b2tlbjsKLX0KLQotc3RhdGljIGludCBDUFBlcnJv
cih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotCi0JaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBjb25zdCBjaGFyICpt
ZXNzYWdlOwotCQotICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgIGlmICh0b2tl
biA8PSAwKXsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBv
ZiBpbnB1dCBpbiAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3
bGluZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH1lbHNlIGlmICh0b2tlbiA9
PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpewotICAgICAg
ICAgICAgU3RvcmVTdHIoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKLQkJfWVsc2UgaWYodG9rZW4g
PT0gQ1BQX0lERU5USUZJRVIgfHwgdG9rZW4gPT0gQ1BQX1NUUkNPTlNUQU5UKXsKLQkJCVN0b3Jl
U3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAtPnNjX2lkZW50KSk7Ci0JCX1lbHNl
IHsKLQkJICAgIFN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUsdG9rZW4pKTsKLQkJfQot
CQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0JfQotCURlY0xpbmVOdW1iZXIoKTsKLQkvL3N0b3JlIHRoaXMgbXNnIGludG8gdGhl
IHNoYWRlcidzIGluZm9ybWF0aW9uIGxvZy4uc2V0IHRoZSBDb21waWxlIEVycm9yIGZsYWchISEh
Ci0JbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdl
KTsKLSAgICBSZXNldFRTdHJpbmcoKTsKLSAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgIElu
Y0xpbmVOdW1iZXIoKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0vL0NQUGVycm9yCi0KLXN0YXRpYyBp
bnQgQ1BQcHJhZ21hKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotCWNoYXIgU3JjU3RyTmFtZVsy
XTsKLQljaGFyKiogYWxsVG9rZW5zOwotCWludCB0b2tlbkNvdW50ID0gMDsKLQlpbnQgbWF4VG9r
ZW5Db3VudCA9IDEwOwotCWNvbnN0IGNoYXIqIFNyY1N0cjsKLQlpbnQgaTsKLQotCWludCB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0JCi0JaWYgKHRva2VuPT0nXG4nKSB7Ci0JCURlY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIiNwcmFnbWEiKTsKLSAgICAgICAgSW5jTGluZU51bWJlcigpOwotCSAg
ICByZXR1cm4gdG9rZW47Ci0JfQotCQotCWFsbFRva2VucyA9IChjaGFyKiopbWFsbG9jKHNpemVv
ZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsJCi0KLQl3aGlsZSAodG9rZW4gIT0gJ1xuJykgewot
CQlpZiAodG9rZW5Db3VudCA+PSBtYXhUb2tlbkNvdW50KSB7Ci0JCQltYXhUb2tlbkNvdW50ICo9
IDI7Ci0JCQlhbGxUb2tlbnMgPSAoY2hhcioqKXJlYWxsb2MoKGNoYXIqKilhbGxUb2tlbnMsIHNp
emVvZihjaGFyKikgKiBtYXhUb2tlbkNvdW50KTsKLQkJfQotCQlzd2l0Y2ggKHRva2VuKSB7Ci0J
CWNhc2UgQ1BQX0lERU5USUZJRVI6Ci0JCQlTcmNTdHIgPSBHZXRBdG9tU3RyaW5nKGF0YWJsZSwg
eXlsdmFscHAtPnNjX2lkZW50KTsKLQkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKilt
YWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJCXN0cmNweShhbGxUb2tlbnNbdG9rZW5Db3Vu
dCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQljYXNlIENQUF9JTlRDT05TVEFOVDoKLQkJCVNy
Y1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKLQkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9
IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJCXN0cmNweShhbGxUb2tlbnNb
dG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQljYXNlIENQUF9GTE9BVENPTlNU
QU5UOgotCQkJU3JjU3RyID0geXlsdmFscHAtPnN5bWJvbF9uYW1lOwotCQkJYWxsVG9rZW5zW3Rv
a2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oU3JjU3RyKSArIDEpOwotCQkJc3RyY3B5
KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgLTE6
Ci0gICAgICAgICAgICAvLyBFT0YKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ByYWdt
YSBkaXJlY3RpdmUgbXVzdCBlbmQgd2l0aCBhIG5ld2xpbmUiKTsJCQkKLQkJCWdvdG8gZnJlZU1l
bW9yeUFuZFJldHVyblRva2VuOwotCQlkZWZhdWx0OgotCQkJU3JjU3RyTmFtZVswXSA9IHRva2Vu
OwotCQkJU3JjU3RyTmFtZVsxXSA9ICdcMCc7Ci0JCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAo
Y2hhciopbWFsbG9jKDIpOwotCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNT
dHJOYW1lKTsKLQkJfQotCQl0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotCi0JSGFuZGxlUHJhZ21hKChjb25zdCBjaGFyKiop
YWxsVG9rZW5zLCB0b2tlbkNvdW50KTsKLQkKLWZyZWVNZW1vcnlBbmRSZXR1cm5Ub2tlbjoKLQlm
b3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7Ci0JCWZyZWUgKGFsbFRva2Vuc1tpXSk7
Ci0JfQotCWZyZWUgKGFsbFRva2Vucyk7CQotCi0JcmV0dXJuIHRva2VuOyAgICAKLX0gLy8gQ1BQ
cHJhZ21hCi0KLSNkZWZpbmUgRVNTTF9WRVJTSU9OX05VTUJFUiAxMDAKLSNkZWZpbmUgRVNTTF9W
RVJTSU9OX1NUUklORyAiMTAwIgotCi1zdGF0aWMgaW50IENQUHZlcnNpb24oeXlzdHlwZXBwICog
eXlsdmFscHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCi0gICAgaWYgKGNwcC0+cGFzdEZpcnN0U3Rh
dGVtZW50ID09IDEpCi0gICAgICAgIENQUFNoSW5mb0xvZ01zZygiI3ZlcnNpb24gbXVzdCBvY2N1
ciBiZWZvcmUgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGUgcHJvZ3JhbSIpOwotCi0gICAgaWYo
dG9rZW49PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0gICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCIjdmVyc2lvbiIpOwotICAgICAgICBJbmNMaW5lTnVtYmVyKCk7Ci0JCXJldHVybiB0b2tl
bjsKLQl9Ci0gICAgaWYgKHRva2VuICE9IENQUF9JTlRDT05TVEFOVCkKLSAgICAgICAgQ1BQRXJy
b3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7Ci0JCi0gICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5
bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JLy9TZXRWZXJzaW9uTnVtYmVyKHl5bHZhbHBwLT5zY19p
bnQpOwotICAgIAotICAgIGlmICh5eWx2YWxwcC0+c2NfaW50ICE9IEVTU0xfVkVSU0lPTl9OVU1C
RVIpCi0gICAgICAgIENQUFNoSW5mb0xvZ01zZygiVmVyc2lvbiBudW1iZXIgbm90IHN1cHBvcnRl
ZCBieSBFU1NMIik7Ci0KLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgCi0JaWYgKHRva2VuID09ICdcbicpewotCQly
ZXR1cm4gdG9rZW47Ci0JfQotCWVsc2V7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVy
c2lvbiIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUHZlcnNpb24KLQotc3RhdGlj
IGludCBDUFBleHRlbnNpb24oeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0KLSAgICBpbnQgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgIGNoYXIgZXh0ZW5zaW9uTmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07Ci0KLSAg
ICBpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJleHRlbnNpb24gbmFtZSBub3Qgc3BlY2lmaWVkIik7Ci0gICAgICAgIEluY0xpbmVO
dW1iZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQotICAgIGlmICh0b2tlbiAhPSBDUFBfSURF
TlRJRklFUikKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNpb24iKTsKLSAgICAK
LSAgICBzdHJuY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxw
cC0+c2NfaWRlbnQpLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICBleHRlbnNpb25OYW1lW01B
WF9TWU1CT0xfTkFNRV9MRU5dID0gJ1wwJzsKLQkgICAgCi0gICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGlmICh0b2tl
biAhPSAnOicpIHsKLSAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCInOicgbWlzc2luZyBhZnRlciBl
eHRlbnNpb24gbmFtZSIpOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotICAgIAotICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKCJiZWhhdmlvciBmb3IgZXh0ZW5zaW9uIG5vdCBzcGVjaWZpZWQiKTsKLSAgICAg
ICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGV4
dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsK
LQotICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLQlpZiAodG9rZW4gPT0gJ1xuJyl7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0J
ZWxzZXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNpb24iKTsKLQl9Ci0gICAg
cmV0dXJuIHRva2VuOwotfSAvLyBDUFBleHRlbnNpb24KLQotaW50IHJlYWRDUFBsaW5lKHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgY29uc3QgY2hhciAqbWVzc2Fn
ZTsKLQotICAgIGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUikgewotICAgICAgICBpZiAoeXls
dmFscHAtPnNjX2lkZW50ID09IGRlZmluZUF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQ
UGRlZmluZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50
ID09IGVsc2VBdG9tKSB7Ci0JCQkgaWYoQ2hrQ29ycmVjdEVsc2VOZXN0aW5nKCkpewotICAgICAg
ICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCApewotICAgICAgICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIiNlbHNlIG1pc21hdGNoIik7Ci0gICAgICAgICAgICAgICAgICAgICBj
cHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICBp
ZiAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5m
b0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJl
Y3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygidW5leHBlY3RlZCBl
bmQgb2YgaW5wdXQgaW4gI2lmZGVmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBh
IG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICB9Ci0JCQkgICAgIHRva2VuID0gQ1BQZWxzZSgwLCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZWxzZSBh
ZnRlciBhICNlbHNlIik7Ci0gICAgICAgICAgICAgICAgIGNwcC0+aWZkZXB0aCA9IDA7Ci0gICAg
ICAgICAgICAgICAgIGNwcC0+ZWxzZXRyYWNrZXIgPSAwOwotICAgICAgICAgICAgICAgICBjcHAt
PnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0gICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVy
cm9yID0gMTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgfQotCQl9
IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlbGlmQXRvbSkgewotICAgICAgICAgICAg
aWYgKCFjcHAtPmlmZGVwdGgpewotICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
I2VsaWYgbWlzbWF0Y2giKTsKLSAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsK
LSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAg
Ly8gdGhpcyB0b2tlbiBpcyByZWFsbHkgYSBkb250IGNhcmUsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRv
IGVhdCB0aGUgdG9rZW5zCi0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7IAotICAgICAgICAgICAgd2hpbGUgKHRv
a2VuICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJ1bmV4cGVjdCB0b2tlbnMgZm9sbG93aW5nICNlbGlmIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAg
Y3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0JCSAgICB0b2tlbiA9IENQUGVsc2UoMCwg
eXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBlbmRp
ZkF0b20pIHsKLSAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCl7Ci0gICAgICAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzbWF0Y2giKTsKLSAgICAgICAgICAgICAg
ICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgLS1jcHAtPmlm
ZGVwdGg7Ci0KLSAgICAgICAgICAgICBpZiAoY3BwLT5lbHNldHJhY2tlcikKLSAgICAgICAgICAg
ICAgICAgLS1jcHAtPmVsc2V0cmFja2VyOwotCi0JICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNj
X2lkZW50ID09IGlmQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQaWYoeXlsdmFscHAp
OwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSBpZmRlZkF0b20pIHsK
LSAgICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDEsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBl
bHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZuZGVmQXRvbSkgewotICAgICAgICAgICAg
IHRva2VuID0gQ1BQaWZkZWYoMCwgeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZh
bHBwLT5zY19pZGVudCA9PSBsaW5lQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQbGlu
ZSh5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHBy
YWdtYUF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUHByYWdtYSh5eWx2YWxwcCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IHVuZGVmQXRvbSkgewotICAg
ICAgICAgICAgIHRva2VuID0gQ1BQdW5kZWYoeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYg
KHl5bHZhbHBwLT5zY19pZGVudCA9PSBlcnJvckF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9
IENQUGVycm9yKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRl
bnQgPT0gdmVyc2lvbkF0b20pIHsKLSAgICAgICAgICAgIHRva2VuID0gQ1BQdmVyc2lvbih5eWx2
YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGV4dGVuc2lv
bkF0b20pIHsKLSAgICAgICAgICAgIHRva2VuID0gQ1BQZXh0ZW5zaW9uKHl5bHZhbHBwKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN0b3JlU3RyKCJJbnZhbGlkIERpcmVjdGl2ZSIp
OwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC0+
c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAg
ICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICAgICAgICAgIFJlc2V0VFN0cmlu
ZygpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nICYmIHRva2Vu
ICE9IDAgJiYgdG9rZW4gIT0gRU9GKSB7Ci0JCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQl9Ci0gICAgICAgIAotICAgIGNwcC0+
cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKLQotICAgIHJldHVybiB0b2tlbjsKLX0gLy8gcmVhZENQ
UGxpbmUKLQotdm9pZCBGcmVlTWFjcm8oTWFjcm9TeW1ib2wgKnMpIHsKLSAgICBEZWxldGVUb2tl
blN0cmVhbShzLT5ib2R5KTsKLX0KLQotdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFy
ICpuYW1lLCBpbnQgdmFsdWUpIHsKLSAgICBTb3VyY2VMb2MgbG9jYXRpb24gPSB7MCwgMH07Ci0g
ICAgU3ltYm9sICpzeW1ib2wgPSBOVUxMOwotICAgIE1hY3JvU3ltYm9sIG1hY3JvID0gezAsIE5V
TEwsIE5VTEwsIDAsIDB9OwotICAgIHl5c3R5cGVwcCB2YWwgPSB7MCwgMC4wLCAwLCB7MH19Owot
ICAgIGludCBhdG9tID0gMDsKLQotICAgIG1hY3JvLmJvZHkgPSBOZXdUb2tlblN0cmVhbShuYW1l
LCBtYWNyb3MtPnBvb2wpOwotICAgIHZhbC5zY19pbnQgPSB2YWx1ZTsKLSAgICBzbnByaW50Zih2
YWwuc3ltYm9sX25hbWUsIE1BWF9TWU1CT0xfTkFNRV9MRU4rMSwgIiVkIiwgdmFsdWUpOwotICAg
IFJlY29yZFRva2VuKG1hY3JvLmJvZHksIENQUF9JTlRDT05TVEFOVCwgJnZhbCk7Ci0gICAgYXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIG5hbWUpOwotICAgIHN5bWJvbCA9IEFkZFN5bWJv
bCgmbG9jYXRpb24sIG1hY3JvcywgYXRvbSwgTUFDUk9fUyk7Ci0gICAgc3ltYm9sLT5kZXRhaWxz
Lm1hYyA9IG1hY3JvOwotfQotCi1zdGF0aWMgaW50IGVvZl9zY2FuKElucHV0U3JjICppbiwgeXlz
dHlwZXBwICogeXlsdmFscHApIHsgcmV0dXJuIC0xOyB9Ci1zdGF0aWMgdm9pZCBub29wKElucHV0
U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeyB9Ci0KLXN0YXRpYyB2b2lk
IFB1c2hFb2ZTcmMoKSB7Ci0gICAgSW5wdXRTcmMgKmluID0gbWFsbG9jKHNpemVvZihJbnB1dFNy
YykpOwotICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKElucHV0U3JjKSk7Ci0gICAgaW4tPnNjYW4g
PSBlb2Zfc2NhbjsKLSAgICBpbi0+Z2V0Y2ggPSBlb2Zfc2NhbjsKLSAgICBpbi0+dW5nZXRjaCA9
IG5vb3A7Ci0gICAgaW4tPnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAgICBjcHAtPmN1cnJl
bnRJbnB1dCA9IGluOwotfQotCi1zdGF0aWMgdm9pZCBQb3BFb2ZTcmMoKSB7Ci0gICAgaWYgKGNw
cC0+Y3VycmVudElucHV0LT5zY2FuID09IGVvZl9zY2FuKSB7Ci0gICAgICAgIElucHV0U3JjICpp
biA9IGNwcC0+Y3VycmVudElucHV0OwotICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5w
cmV2OwotICAgICAgICBmcmVlKGluKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUb2tlblN0cmVhbSAq
UHJlc2Nhbk1hY3JvQXJnKFRva2VuU3RyZWFtICphLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewot
ICAgIGludCB0b2tlbjsKLSAgICBUb2tlblN0cmVhbSAqbjsKLSAgICBSZXdpbmRUb2tlblN0cmVh
bShhKTsKLSAgICBkbyB7Ci0gICAgICAgIHRva2VuID0gUmVhZFRva2VuKGEsIHl5bHZhbHBwKTsK
LSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYmIExvb2tVcFN5bWJvbChtYWNy
b3MsIHl5bHZhbHBwLT5zY19pZGVudCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9IHdoaWxl
ICh0b2tlbiA+IDApOwotICAgIGlmICh0b2tlbiA8PSAwKSByZXR1cm4gYTsKLSAgICBuID0gTmV3
VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwotICAgIFB1c2hFb2ZTcmMoKTsKLSAgICBSZWFk
RnJvbVRva2VuU3RyZWFtKGEsIDAsIDApOwotICAgIHdoaWxlICgodG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApKSA+IDApIHsKLSAgICAg
ICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYmIE1hY3JvRXhwYW5kKHl5bHZhbHBwLT5z
Y19pZGVudCwgeXlsdmFscHApKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlY29y
ZFRva2VuKG4sIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgfQotICAgIFBvcEVvZlNyYygpOwotICAg
IERlbGV0ZVRva2VuU3RyZWFtKGEpOwotICAgIHJldHVybiBuOwotfSAvLyBQcmVzY2FuTWFjcm9B
cmcKLQotdHlwZWRlZiBzdHJ1Y3QgTWFjcm9JbnB1dFNyYyB7Ci0gICAgSW5wdXRTcmMgICAgYmFz
ZTsKLSAgICBNYWNyb1N5bWJvbCAqbWFjOwotICAgIFRva2VuU3RyZWFtICoqYXJnczsKLX0gTWFj
cm9JbnB1dFNyYzsKLQotLyogbWFjcm9fc2NhbiAtLS0KLSoqIHJldHVybiB0aGUgbmV4dCB0b2tl
biBmb3IgYSBtYWNybyBleHBhbmlvbiwgaGFuZGxpbmcgbWFjcm8gYXJncyAKLSovCi1zdGF0aWMg
aW50IG1hY3JvX3NjYW4oTWFjcm9JbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7
Ci0gICAgaW50IGk7Ci0gICAgaW50IHRva2VuID0gUmVhZFRva2VuKGluLT5tYWMtPmJvZHksIHl5
bHZhbHBwKTsKLSAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgZm9y
IChpID0gaW4tPm1hYy0+YXJnYy0xOyBpPj0wOyBpLS0pCi0gICAgICAgICAgICBpZiAoaW4tPm1h
Yy0+YXJnc1tpXSA9PSB5eWx2YWxwcC0+c2NfaWRlbnQpIGJyZWFrOwotICAgICAgICBpZiAoaSA+
PSAwKSB7Ci0gICAgICAgICAgICBSZWFkRnJvbVRva2VuU3RyZWFtKGluLT5hcmdzW2ldLCB5eWx2
YWxwcC0+c2NfaWRlbnQsIDApOwotICAgICAgICAgICAgcmV0dXJuIGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2VuOwotICAgIGluLT5tYWMtPmJ1c3kgPSAwOwot
ICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsKLSAgICBpZiAoaW4tPmFyZ3Mp
IHsKLSAgICAgICAgZm9yIChpPWluLT5tYWMtPmFyZ2MtMTsgaT49MDsgaS0tKQotICAgICAgICAg
ICAgRGVsZXRlVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0pOwotICAgICAgICBmcmVlKGluLT5hcmdz
KTsKLSAgICB9Ci0gICAgZnJlZShpbik7Ci0gICAgcmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci19IC8vIG1hY3JvX3NjYW4KLQotLyog
TWFjcm9FeHBhbmQKLSoqIGNoZWNrIGFuIGlkZW50aWZpZXIgKGF0b20pIHRvIHNlZSBpZiBpdCBh
IG1hY3JvIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLgotKiogSWYgaXQgaXMsIHB1c2ggYW4gSW5w
dXRTcmMgdGhhdCB3aWxsIHByb2R1Y2UgdGhlIGFwcHJvcHJpYXRlIGV4cGFuc2lvbgotKiogYW5k
IHJldHVybiBUUlVFLiAgSWYgbm90LCByZXR1cm4gRkFMU0UuCi0qLwotCi1pbnQgTWFjcm9FeHBh
bmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIFN5bWJvbCAgICAgICAg
ICAgICAgKnN5bSA9IExvb2tVcFN5bWJvbChtYWNyb3MsIGF0b20pOwotICAgIE1hY3JvSW5wdXRT
cmMgICAgICAgKmluOwotICAgIGludCBpLGosIHRva2VuLCBkZXB0aD0wOwotICAgIGNvbnN0IGNo
YXIgKm1lc3NhZ2U7Ci0JaWYgKGF0b20gPT0gX19MSU5FX19BdG9tKSB7Ci0gICAgICAgIHl5bHZh
bHBwLT5zY19pbnQgPSBHZXRMaW5lTnVtYmVyKCk7Ci0gICAgICAgIHNucHJpbnRmKHl5bHZhbHBw
LT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQiLCB5eWx2YWxwcC0+c2Nf
aW50KTsKLSAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsKLSAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmIChhdG9tID09IF9fRklMRV9fQXRvbSkgewot
ICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0U3RyaW5nTnVtYmVyKCk7Ci0gICAgICAgIHNu
cHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgTUFYX1NZTUJPTF9OQU1FX0xFTisxLCAiJWQi
LCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQs
IHl5bHZhbHBwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCWlmIChhdG9tID09IF9fVkVS
U0lPTl9fQXRvbSkgewotICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLEVTU0xf
VkVSU0lPTl9TVFJJTkcpOwotICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYXRvaSh5eWx2YWxw
cC0+c3ltYm9sX25hbWUpOwotICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXls
dmFscHApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgaWYgKCFzeW0gfHwgc3ltLT5k
ZXRhaWxzLm1hYy51bmRlZikgcmV0dXJuIDA7Ci0gICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYnVz
eSkgcmV0dXJuIDA7ICAgICAgICAvLyBubyByZWN1cnNpdmUgZXhwYW5zaW9ucwotICAgIGluID0g
bWFsbG9jKHNpemVvZigqaW4pKTsKLSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZigqaW4pKTsKLSAg
ICBpbi0+YmFzZS5zY2FuID0gKHZvaWQgKiltYWNyb19zY2FuOwotICAgIGluLT5iYXNlLmxpbmUg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICBpbi0+YmFzZS5uYW1lID0gY3BwLT5jdXJy
ZW50SW5wdXQtPm5hbWU7Ci0gICAgaW4tPm1hYyA9ICZzeW0tPmRldGFpbHMubWFjOwotICAgIGlm
IChzeW0tPmRldGFpbHMubWFjLmFyZ3MpIHsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQlpZiAodG9rZW4gIT0g
JygnKSB7Ci0gICAgICAgICAgICBVbmdldFRva2VuKHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBhdG9tOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIH0KLSAgICAgICAgaW4tPmFyZ3MgPSBtYWxsb2MoaW4tPm1hYy0+YXJnYyAqIHNpemVv
ZihUb2tlblN0cmVhbSAqKSk7Ci0gICAgICAgIGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkr
KykKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIs
IDApOwotCQlpPTA7aj0wOwotICAgICAgICBkb3sKLSAgICAgICAgICAgIGRlcHRoID0gMDsKLQkJ
CXdoaWxlKDEpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
a2VuIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAi
KTsKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxh
dG9tKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOwotICAgICAgICAgICAg
ICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKChpbi0+bWFjLT5hcmdjPT0wKSAm
JiAodG9rZW4hPScpJykpIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwICYm
ICh0b2tlbiA9PSAnLCcgfHwgdG9rZW4gPT0gJyknKSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
aWYgKHRva2VuID09ICcoJykgZGVwdGgrKzsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0g
JyknKSBkZXB0aC0tOwotICAgICAgICAgICAgICAgIFJlY29yZFRva2VuKGluLT5hcmdzW2ldLCB0
b2tlbiwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGo9MTsKLQkJCX0KLSAgICAgICAgICAg
IGlmICh0b2tlbiA9PSAnKScpIHsKLSAgICAgICAgICAgICAgICBpZigoaW4tPm1hYy0+YXJnYz09
MSkgJiZqPT0wKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBp
Kys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
Kys7Ci0JCX13aGlsZShpIDwgaW4tPm1hYy0+YXJnYyk7Ci0KLSAgICAgICAgaWYgKGkgPCBpbi0+
bWFjLT5hcmdjKSB7Ci0gICAgICAgICAgICBTdG9yZVN0cigiVG9vIGZldyBhcmdzIGluIE1hY3Jv
ICIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7
Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAgICAgICAgICBDUFBT
aEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh0b2tlbiAhPSAnKScpIHsKLSAgICAgICAgICAgIGRlcHRoPTA7Ci0JCQl3
aGlsZSAodG9rZW4gPj0gMCAmJiAoZGVwdGggPiAwIHx8IHRva2VuICE9ICcpJykpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOwotICAgICAgICAgICAgICAgIHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBkZXB0aCsrOwotICAgICAgICAg
ICAgfQotCQkJCi0gICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgewotICAgICAgICAgICAgICAg
IFN0b3JlU3RyKCJFT0YgaW4gTWFjcm8gIik7Ci0gICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0
U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZT1HZXRT
dHJmcm9tVFN0cigpOwotICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsK
LSAgICAgICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
MTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0b3JlU3RyKCJUb28gbWFueSBhcmdzIGlu
IE1hY3JvICIpOwotICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxh
dG9tKSk7Ci0gICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAgICAgICAg
ICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsK
LQkJfQotCQlmb3IgKGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBpKyspIHsKLSAgICAgICAgICAgIGlu
LT5hcmdzW2ldID0gUHJlc2Nhbk1hY3JvQXJnKGluLT5hcmdzW2ldLCB5eWx2YWxwcCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0jaWYgMAotICAgIHByaW50ZigiICA8JXM6JWQ+Zm91bmQgbWFjcm8gJXNc
biIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBsb2MuZmlsZSksCi0gICAgICAgICAgIGxvYy5saW5l
LCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgYXRvbSkpOwotICAgIGZvciAoaT0wOyBpPGluLT5tYWMt
PmFyZ2M7IGkrKykgewotICAgICAgICBwcmludGYoIlx0YXJnICVzID0gJyIsIEdldEF0b21TdHJp
bmcoYXRhYmxlLCBpbi0+bWFjLT5hcmdzW2ldKSk7Ci0gICAgICAgIER1bXBUb2tlblN0cmVhbShz
dGRvdXQsIGluLT5hcmdzW2ldKTsKLSAgICAgICAgcHJpbnRmKCInXG4iKTsKLSAgICB9Ci0jZW5k
aWYKLQkvKnJldGFpbiB0aGUgaW5wdXQgc291cmNlKi8KLSAgICBpbi0+YmFzZS5wcmV2ID0gY3Bw
LT5jdXJyZW50SW5wdXQ7Ci0gICAgc3ltLT5kZXRhaWxzLm1hYy5idXN5ID0gMTsKLSAgICBSZXdp
bmRUb2tlblN0cmVhbShzeW0tPmRldGFpbHMubWFjLmJvZHkpOwotICAgIGNwcC0+Y3VycmVudElu
cHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVybiAxOwotfSAvLyBNYWNyb0V4cGFuZAotCi1pbnQg
Q2hrQ29ycmVjdEVsc2VOZXN0aW5nKHZvaWQpCi17Ci0gICAgLy8gc2FuaXR5IGNoZWNrIHRvIG1h
a2Ugc3VyZSBlbHNldHJhY2tlciBpcyBpbiBhIHZhbGlkIHJhbmdlCi0gICAgaWYgKGNwcC0+ZWxz
ZXRyYWNrZXIgPCAwIHx8IGNwcC0+ZWxzZXRyYWNrZXIgPj0gTUFYX0lGX05FU1RJTkcpIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxz
ZXRyYWNrZXJdID09IDApIHsKLSAgICAgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tl
cl0gPSAxOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY3BwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMmUyM2UuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBD
b3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNv
bnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5k
IHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24g
b2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2Ug
dGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8g
bm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29m
dHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkg
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEg
Z3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklE
SUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJO
VklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmli
dXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywg
aW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRp
c3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJp
Z2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0
IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJ
QSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mg
bm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2Vw
dCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3Ig
bGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVp
biwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBt
YXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29y
a3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8g
aGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJ
UyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1J
TkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
VElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9O
RSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQg
U0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURF
TlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwg
UkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5W
SURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9G
IENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZ
IE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8g
Y3BwLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX0NQUF9IKQotI2RlZmluZSBfX0NQUF9IIDEKLQot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0KLWludCBJbml0Q1BQKHZvaWQpOwotaW50IEZp
bmFsQ1BQKHZvaWQpOwotaW50ICByZWFkQ1BQbGluZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Ci1p
bnQgTWFjcm9FeHBhbmQoaW50IGF0b20sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLWludCBDaGtD
b3JyZWN0RWxzZU5lc3Rpbmcodm9pZCk7Ci0KLXR5cGVkZWYgc3RydWN0IE1hY3JvU3ltYm9sIHsK
LSAgICBpbnQgYXJnYzsKLSAgICBpbnQgKmFyZ3M7Ci0gICAgVG9rZW5TdHJlYW0gKmJvZHk7Ci0g
ICAgdW5zaWduZWQgYnVzeToxOwotICAgIHVuc2lnbmVkIHVuZGVmOjE7Ci19IE1hY3JvU3ltYm9s
OwotCi12b2lkIEZyZWVNYWNybyhNYWNyb1N5bWJvbCAqKTsKLXZvaWQgUHJlZGVmaW5lSW50TWFj
cm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKLQotdm9pZCAgQ1BQRGVidWdMb2dNc2co
Y29uc3QgY2hhciAqbXNnKTsgICAgICAvLyBQcmludHMgaW5mb3JtYXRpb24gaW50byBkZWJ1ZyBs
b2cKLXZvaWQgIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyKik7ICAgICAgICAgLy8gU3RvcmUg
Y3BwIEVyciBNc2cgaW50byBTaC5JbmZvLkxvZwotdm9pZCAgQ1BQV2FybmluZ1RvSW5mb0xvZyhj
b25zdCBjaGFyICptc2cpOyAvLyBQcmludHMgd2FybmluZyBtZXNzYWdlcyBpbnRvIGluZm8gbG9n
Ci12b2lkICBIYW5kbGVQcmFnbWEoY29uc3QgY2hhcioqLCBpbnQgbnVtVG9rZW5zKTsgIC8vICNw
cmFnbWEgZGlyZWN0aXZlIGNvbnRhaW5lci4KLXZvaWQgIFJlc2V0VFN0cmluZyh2b2lkKTsgICAg
ICAgICAgICAgICAgICAgLy8gI2Vycm9yIE1lc3NhZ2UgYXMgVFN0cmluZy4KLXZvaWQgIENQUEVy
cm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIqKTsgICAgICAgLy8gU3RpY2sgYWxsIGNwcCBlcnJvcnMg
aW50byBTaC5JbmZvLmxvZy4KLXZvaWQgIFN0b3JlU3RyKGNvbnN0IGNoYXIqKTsgICAgICAgICAg
ICAgICAgLy8gU3RvcmUgdGhlIFRTdHJpbmcgaW4gUGFyc2UgQ29udGV4dC4KLXZvaWQgIFNldExp
bmVOdW1iZXIoaW50KTsgICAgICAgICAgICAgICAgICAgLy8gU2V0IGxpbmUgbnVtYmVyLiAgCi12
b2lkICBTZXRTdHJpbmdOdW1iZXIoaW50KTsgICAgICAgICAgICAgICAgIC8vIFNldCBzdHJpbmcg
bnVtYmVyLiAgICAKLWludCAgIEdldExpbmVOdW1iZXIodm9pZCk7ICAgICAgICAgICAgICAgICAg
Ly8gR2V0IHRoZSBjdXJyZW50IFN0cmluZyBOdW1iZXIuIAotaW50ICAgR2V0U3RyaW5nTnVtYmVy
KHZvaWQpOyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51bWJlci4g
Ci1jb25zdCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKTsgICAgICAgICAgIC8vIENvbnZlcnQg
VFN0cmluZyB0byBTdHJpbmcuICAKLXZvaWQgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0
IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsKLWludCAgIEZyZWVDUFAodm9p
ZCk7Ci0KLSNlbmRpZiAvLyAhKGRlZmluZWQoX19DUFBfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVj
dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNmZjMxLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3Ry
dWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENv
cnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQg
eW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBv
ZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0
ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBu
b3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0
d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBn
cmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJ
QSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5W
SURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1
dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBp
biBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlz
dHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmln
aHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQg
YW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElB
IFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBu
b3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0
IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBs
aWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWlu
LCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1h
eSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3Jr
cyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBo
YXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElT
IEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05F
IE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBT
SEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVO
VEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBS
RVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJ
RElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0Yg
Q09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkg
T1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBj
cHBzdHJ1Y3QuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+
Ci0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0KLUNQUFN0
cnVjdCAgKmNwcCAgICAgID0gTlVMTDsKLXN0YXRpYyBpbnQgIHJlZkNvdW50ID0gMDsKLQotaW50
IEluaXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1pbnQgUmVzZXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1p
bnQgRnJlZUNQUFN0cnVjdCh2b2lkKTsKLWludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsK
LQotLyoKLSAqIEluaXRDUFBTdHJ1Y3QoKSAtIEluaXRpbGFpemUgdGhlIENQUCBzdHJ1Y3R1cmUu
Ci0gKgotICovCi0KLWludCBJbml0Q1BQU3RydWN0KHZvaWQpCi17Ci0gICAgaW50IGxlbjsKLSAg
ICBjaGFyICpwOwotCi0gICAgY3BwID0gKENQUFN0cnVjdCAqKSBtYWxsb2Moc2l6ZW9mKENQUFN0
cnVjdCkpOwotICAgIGlmIChjcHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZWZDb3VudCsrOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBwdWJsaWMgbWVtYmVyczoKLSAgICBjcHAt
PnBMYXN0U291cmNlTG9jID0gJmNwcC0+bGFzdFNvdXJjZUxvYzsKLSAgICAKLQlwID0gKGNoYXIg
KikgJmNwcC0+b3B0aW9uczsKLSAgICBsZW4gPSBzaXplb2YoY3BwLT5vcHRpb25zKTsKLSAgICB3
aGlsZSAoLS1sZW4gPj0gMCkKLSAgICAgICAgcFtsZW5dID0gMDsKLSAgICAgCi0gICAgUmVzZXRQ
cmVwcm9jZXNzb3IoKTsKLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdENQUFN0cnVjdAotCi1pbnQg
UmVzZXRQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICAvLyBJbml0aWFsaXplIHByaXZhdGUgbWVt
YmVyczoKLQotICAgIGNwcC0+bGFzdFNvdXJjZUxvYy5maWxlID0gMDsKLSAgICBjcHAtPmxhc3RT
b3VyY2VMb2MubGluZSA9IDA7Ci0gICAgY3BwLT5wQyA9IDA7Ci0gICAgY3BwLT5Db21waWxlRXJy
b3IgPSAwOwotICAgIGNwcC0+aWZkZXB0aCA9IDA7Ci0gICAgZm9yKGNwcC0+ZWxzZXRyYWNrZXIg
PSAwOyBjcHAtPmVsc2V0cmFja2VyIDwgTUFYX0lGX05FU1RJTkc7IGNwcC0+ZWxzZXRyYWNrZXIr
KykKLSAgICAgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOwotICAgIGNw
cC0+ZWxzZXRyYWNrZXIgPSAwOwotICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0gMDsKLSAgICBy
ZXR1cm4gMTsKLX0KLQotLy9JbnRpYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgotCi1pbnQgSW5p
dFByZXByb2Nlc3Nvcih2b2lkKQotewotICAgIyAgZGVmaW5lIENQUF9TVFVGRiB0cnVlCi0gICAg
ICAgICMgIGlmZGVmIENQUF9TVFVGRgotICAgICAgICAgICAgRnJlZUNQUFN0cnVjdCgpOwotICAg
ICAgICAgICAgSW5pdENQUFN0cnVjdCgpOwotICAgICAgICAgICAgY3BwLT5vcHRpb25zLlF1aWV0
ID0gMTsKLSAgICAgICAgICAgIGNwcC0+b3B0aW9ucy5wcm9maWxlU3RyaW5nID0gImdlbmVyaWMi
OwotICAgICAgICAgICAgaWYgKCFJbml0QXRvbVRhYmxlKGF0YWJsZSwgMCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAoIUluaXRTY2FubmVyKGNwcCkpCi0JICAg
ICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIyAgZW5kaWYKLSAgcmV0dXJuIDA7IAotfQotCi0v
L0ZyZWVDUFBTdHJ1Y3QoKSAtIEZyZWUgdGhlIENQUCBzdHJ1Y3R1cmUuCi0KLWludCBGcmVlQ1BQ
U3RydWN0KHZvaWQpCi17Ci0gICAgaWYgKHJlZkNvdW50KQotICAgIHsKLSAgICAgICBmcmVlKGNw
cCk7Ci0gICAgICAgcmVmQ291bnQtLTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDE7Ci19Ci0K
LS8vRmluYWxpemluZyB0aGUgUHJlcHJvY2Vzc29yLgotCi1pbnQgRmluYWxpemVQcmVwcm9jZXNz
b3Iodm9pZCkKLXsKLSAgICMgIGRlZmluZSBDUFBfU1RVRkYgdHJ1ZQotICAgICAgICAjICBpZmRl
ZiBDUFBfU1RVRkYKLSAgICAgICAgICAgIEZyZWVBdG9tVGFibGUoYXRhYmxlKTsKLSAgICAgICAg
ICAgIEZyZWVDUFBTdHJ1Y3QoKTsKLSAgICAgICAgICAgIEZyZWVTY2FubmVyKCk7Ci0gICAgICAg
IyAgZW5kaWYKLSAgcmV0dXJuIDA7IAotfQotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQg
b2YgY3Bwc3RydWN0LmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2dlbmVyYXRlX3BhcnNl
ci5zaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Z2VuZXJhdGVfcGFyc2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5
YzcwYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2dlbmVyYXRlX3BhcnNlci5zaApAQCAtMCwwICsxLDI2IEBACisj
IS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyB2YXJpb3VzIGNvbXBvbmVudHMgb2YgR0xTTCBF
UyBwcmVwcm9jZXNzb3IuCisKK3J1bl9mbGV4KCkKK3sKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIv
JDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIvJDIKK2ZsZXggLS1ub2xpbmUgLS1ub3VuaXN0
ZCAtLW91dGZpbGU9JG91dHB1dF9zb3VyY2UgJGlucHV0X2ZpbGUKK30KKworcnVuX2Jpc29uKCkK
K3sKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvJDEKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIv
JDIKK2Jpc29uIC0tbm8tbGluZXMgLS1za2VsZXRvbj15YWNjLmMgLS1vdXRwdXQ9JG91dHB1dF9z
b3VyY2UgJGlucHV0X2ZpbGUKK30KKworc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCisKKyMgR2Vu
ZXJhdGUgcHJlcHJvY2Vzc29yCitydW5fZmxleCBUb2tlbml6ZXIubCBUb2tlbml6ZXIuY3BwCity
dW5fYmlzb24gRXhwcmVzc2lvblBhcnNlci55IEV4cHJlc3Npb25QYXJzZXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21l
bW9yeS5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9tZW1vcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI5NTIxYS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L21lbW9yeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJ
QSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4K
LWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRp
b24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhl
c2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2Ug
ZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQot
c29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUg
YnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklE
SUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBO
VklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUK
LSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0
cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9u
cywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSBy
ZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29w
eXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10
ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5W
SURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFy
a3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4
Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMg
b3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhl
cmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhh
dCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIg
d29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4g
Tm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FS
RSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQs
Ci1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBB
TE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZF
TlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5D
SURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVT
RSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUK
LU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZ
IE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklM
SVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwot
I2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgotCi0jaWZuZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKLQotI2lmIGRlZmluZWQo
X01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwNikKLSNlbmRpZgotCi0vLyBk
ZWZhdWx0IGFsaWdubWVudCBhbmQgY2h1bmtzaXplLCBpZiBjYWxsZWQgd2l0aCAwIGFyZ3VtZW50
cwotI2RlZmluZSBDSFVOS1NJWkUgICAgICAgKDY0KjEwMjQpCi0jZGVmaW5lIEFMSUdOICAgICAg
ICAgICA4Ci0KLS8vIHdlIG5lZWQgdG8gY2FsbCB0aGUgYHJlYWwnIG1hbGxvYyBhbmQgZnJlZSwg
bm90IG91ciByZXBsYWNlbWVudHMKLSN1bmRlZiBtYWxsb2MKLSN1bmRlZiBmcmVlCi0KLXN0cnVj
dCBjaHVuayB7Ci0gICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4dDsKLX07Ci0KLXN0cnVjdCBj
bGVhbnVwIHsKLSAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpuZXh0OwotICAgIHZvaWQgICAgICAg
ICAgICAgICAgKCpmbikodm9pZCAqKTsKLSAgICB2b2lkICAgICAgICAgICAgICAgICphcmc7Ci19
OwotCi1zdHJ1Y3QgTWVtb3J5UG9vbF9yZWMgewotICAgIHN0cnVjdCBjaHVuayAgICAgICAgKm5l
eHQ7Ci0gICAgdWludHB0cl90ICAgICAgICAgICBmcmVlLCBlbmQ7Ci0gICAgc2l6ZV90ICAgICAg
ICAgICAgICBjaHVua3NpemU7Ci0gICAgdWludHB0cl90ICAgICAgICAgICBhbGlnbm1hc2s7Ci0g
ICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xlYW51cDsKLX07Ci0KLU1lbW9yeVBvb2wgKm1lbV9D
cmVhdGVQb29sKHNpemVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbikKLXsKLSAgICBN
ZW1vcnlQb29sICAqcG9vbDsKLQotICAgIGlmIChhbGlnbiA9PSAwKSBhbGlnbiA9IEFMSUdOOwot
ICAgIGlmIChjaHVua3NpemUgPT0gMCkgY2h1bmtzaXplID0gQ0hVTktTSVpFOwotICAgIGlmIChh
bGlnbiAmIChhbGlnbi0xKSkgcmV0dXJuIDA7Ci0gICAgaWYgKGNodW5rc2l6ZSA8IHNpemVvZihN
ZW1vcnlQb29sKSkgcmV0dXJuIDA7Ci0gICAgaWYgKGNodW5rc2l6ZSAmIChhbGlnbi0xKSkgcmV0
dXJuIDA7Ci0gICAgaWYgKCEocG9vbCA9IG1hbGxvYyhjaHVua3NpemUpKSkgcmV0dXJuIDA7Ci0g
ICAgcG9vbC0+bmV4dCA9IDA7Ci0gICAgcG9vbC0+Y2h1bmtzaXplID0gY2h1bmtzaXplOwotICAg
IHBvb2wtPmFsaWdubWFzayA9ICh1aW50cHRyX3QpKGFsaWduKS0xOyAgCi0gICAgcG9vbC0+ZnJl
ZSA9ICgodWludHB0cl90KShwb29sICsgMSkgKyBwb29sLT5hbGlnbm1hc2spICYgfnBvb2wtPmFs
aWdubWFzazsKLSAgICBwb29sLT5lbmQgPSAodWludHB0cl90KXBvb2wgKyBjaHVua3NpemU7Ci0g
ICAgcG9vbC0+Y2xlYW51cCA9IDA7Ci0gICAgcmV0dXJuIHBvb2w7Ci19Ci0KLXZvaWQgbWVtX0Zy
ZWVQb29sKE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0gICAgc3RydWN0IGNsZWFudXAgICAgICAqY2xl
YW51cDsKLSAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpwLCAqbmV4dDsKLQotICAgIGZvciAoY2xl
YW51cCA9IHBvb2wtPmNsZWFudXA7IGNsZWFudXA7IGNsZWFudXAgPSBjbGVhbnVwLT5uZXh0KSB7
Ci0gICAgICAgIGNsZWFudXAtPmZuKGNsZWFudXAtPmFyZyk7Ci0gICAgfQotICAgIGZvciAocCA9
IChzdHJ1Y3QgY2h1bmsgKilwb29sOyBwOyBwID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gcC0+
bmV4dDsKLSAgICAgICAgZnJlZShwKTsKLSAgICB9Ci19Ci0KLXZvaWQgKm1lbV9BbGxvYyhNZW1v
cnlQb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzdHJ1Y3QgY2h1bmsgKmNoOwotICAg
IHZvaWQgKnJ2ID0gKHZvaWQgKilwb29sLT5mcmVlOwotICAgIHNpemUgPSAoc2l6ZSArIHBvb2wt
PmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOwotICAgIGlmIChzaXplIDw9IDApIHNpemUg
PSBwb29sLT5hbGlnbm1hc2s7Ci0gICAgcG9vbC0+ZnJlZSArPSBzaXplOwotICAgIGlmIChwb29s
LT5mcmVlID4gcG9vbC0+ZW5kIHx8IHBvb2wtPmZyZWUgPCAodWludHB0cl90KXJ2KSB7Ci0gICAg
ICAgIHNpemVfdCBtaW5yZXEgPSAoc2l6ZSArIHNpemVvZihzdHJ1Y3QgY2h1bmspICsgcG9vbC0+
YWxpZ25tYXNrKQotICAgICAgICAgICAgICAgICAgICAgICYgfnBvb2wtPmFsaWdubWFzazsKLSAg
ICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpcnY7Ci0gICAgICAgIGlmIChtaW5yZXEgPj0g
cG9vbC0+Y2h1bmtzaXplKSB7Ci0gICAgICAgICAgICAvLyByZXF1ZXN0IHNpemUgaXMgdG9vIGJp
ZyBmb3IgdGhlIGNodW5rc2l6ZSwgc28gYWxsb2NhdGUgaXQgYXMKLSAgICAgICAgICAgIC8vIGEg
c2luZ2xlIGNodW5rIG9mIHRoZSByaWdodCBzaXplCi0gICAgICAgICAgICBjaCA9IG1hbGxvYyht
aW5yZXEpOwotICAgICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIDA7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBjaCA9IG1hbGxvYyhwb29sLT5jaHVua3NpemUpOwotICAgICAgICAgICAg
aWYgKCFjaCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICBwb29sLT5mcmVlID0gKHVpbnRwdHJfdClj
aCArIG1pbnJlcTsKLSAgICAgICAgICAgIHBvb2wtPmVuZCA9ICh1aW50cHRyX3QpY2ggKyBwb29s
LT5jaHVua3NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgY2gtPm5leHQgPSBwb29sLT5uZXh0Owot
ICAgICAgICBwb29sLT5uZXh0ID0gY2g7Ci0gICAgICAgIHJ2ID0gKHZvaWQgKikoKCh1aW50cHRy
X3QpKGNoKzEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2spOwotICAgIH0K
LSAgICByZXR1cm4gcnY7Ci19Ci0KLWludCBtZW1fQWRkQ2xlYW51cChNZW1vcnlQb29sICpwb29s
LCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZykgewotICAgIHN0cnVjdCBjbGVhbnVwICpj
bGVhbnVwOwotCi0gICAgcG9vbC0+ZnJlZSA9IChwb29sLT5mcmVlICsgc2l6ZW9mKHZvaWQgKikg
LSAxKSAmIH4oc2l6ZW9mKHZvaWQgKiktMSk7Ci0gICAgY2xlYW51cCA9IG1lbV9BbGxvYyhwb29s
LCBzaXplb2Yoc3RydWN0IGNsZWFudXApKTsKLSAgICBpZiAoIWNsZWFudXApIHJldHVybiAtMTsK
LSAgICBjbGVhbnVwLT5uZXh0ID0gcG9vbC0+Y2xlYW51cDsKLSAgICBjbGVhbnVwLT5mbiA9IGZu
OwotICAgIGNsZWFudXAtPmFyZyA9IGFyZzsKLSAgICBwb29sLT5jbGVhbnVwID0gY2xlYW51cDsK
LSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ZmNhZGIzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJ
RElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVz
IHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50
IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9k
aWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25z
dGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3
aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciBy
ZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3Vi
amVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4
Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdp
bmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVw
cm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0
aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3Jt
czsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUs
IHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5v
dGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2gg
cmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1l
LCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0
aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlz
IG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQs
IGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVk
IHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2
YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdh
cmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRl
ci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElT
IiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBF
SVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVS
Q0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBV
U0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhF
UgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFO
WSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcg
SU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFO
RC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VE
IEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJ
QSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwotLy8KLSNpZm5kZWYgX19NRU1PUllfSAotI2RlZmluZSBfX01F
TU9SWV9ICi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgTWVtb3J5UG9v
bF9yZWMgTWVtb3J5UG9vbDsKLQotZXh0ZXJuIE1lbW9yeVBvb2wgKm1lbV9DcmVhdGVQb29sKHNp
emVfdCBjaHVua3NpemUsIHVuc2lnbmVkIGludCBhbGlnbik7Ci1leHRlcm4gdm9pZCBtZW1fRnJl
ZVBvb2woTWVtb3J5UG9vbCAqKTsKLWV4dGVybiB2b2lkICptZW1fQWxsb2MoTWVtb3J5UG9vbCAq
cCwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIHZvaWQgKm1lbV9SZWFsbG9jKE1lbW9yeVBvb2wgKnAs
IHZvaWQgKm9sZCwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBuZXdzaXplKTsKLWV4dGVybiBpbnQg
bWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcCwgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICph
cmcpOwotCi0jZW5kaWYgLyogX19NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
YWdub3N0aWNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNzVhOWMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlhZ25vc3RpY3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwot
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElBR05PU1RJQ1NfSF8KLQotI2luY2x1ZGUg
PHN0cmluZz4KLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBTb3VyY2VMb2NhdGlvbjsKLQot
Ly8gQmFzZSBjbGFzcyBmb3IgcmVwb3J0aW5nIGRpYWdub3N0aWMgbWVzc2FnZXMuCi0vLyBEZXJp
dmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBmb3JtYXR0aW5nIGFuZCBwcmludGluZyB0
aGUgbWVzc2FnZXMuCi1jbGFzcyBEaWFnbm9zdGljcwotewotICBwdWJsaWM6Ci0gICAgZW51bSBT
ZXZlcml0eQotICAgIHsKLSAgICAgICAgRVJST1IsCi0gICAgICAgIFdBUk5JTkcKLSAgICB9Owot
ICAgIGVudW0gSUQKLSAgICB7Ci0gICAgICAgIEVSUk9SX0JFR0lOLAotICAgICAgICBJTlRFUk5B
TF9FUlJPUiwKLSAgICAgICAgT1VUX09GX01FTU9SWSwKLSAgICAgICAgSU5WQUxJRF9DSEFSQUNU
RVIsCi0gICAgICAgIElOVkFMSURfTlVNQkVSLAotICAgICAgICBJTlZBTElEX0VYUFJFU1NJT04s
Ci0gICAgICAgIERJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgIEVPRl9JTl9DT01NRU5ULAotICAg
ICAgICBFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICBVTkVYUEVDVEVEX1RPS0VOLAotICAgICAg
ICBESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAgICBNQUNST19OQU1FX1JFU0VSVkVELAot
ICAgICAgICBNQUNST19SRURFRklORUQsCi0gICAgICAgIE1BQ1JPX1BSRURFRklORURfUkVERUZJ
TkVELAotICAgICAgICBNQUNST19QUkVERUZJTkVEX1VOREVGSU5FRCwKLSAgICAgICAgTUFDUk9f
VU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCi0gICAgICAgIE1BQ1JPX1RPT19GRVdfQVJHUywKLSAg
ICAgICAgTUFDUk9fVE9PX01BTllfQVJHUywKLSAgICAgICAgQ09ORElUSU9OQUxfRU5ESUZfV0lU
SE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAotICAgICAgICBD
T05ESVRJT05BTF9FTFNFX0FGVEVSX0VMU0UsCi0gICAgICAgIENPTkRJVElPTkFMX0VMSUZfV0lU
SE9VVF9JRiwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9BRlRFUl9FTFNFLAotICAgICAgICBD
T05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX05BTUUs
Ci0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAotICAgICAgICBJTlZBTElEX0VY
VEVOU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFMSURfVkVSU0lPTl9OVU1CRVIsCi0gICAg
ICAgIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCi0gICAgICAgIElOVkFMSURfTElORV9OVU1C
RVIsCi0gICAgICAgIElOVkFMSURfRklMRV9OVU1CRVIsCi0gICAgICAgIElOVkFMSURfTElORV9E
SVJFQ1RJVkUsCi0gICAgICAgIEVSUk9SX0VORCwKLQotICAgICAgICBXQVJOSU5HX0JFR0lOLAot
ICAgICAgICBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICBVTlJFQ09HTkla
RURfUFJBR01BLAotICAgICAgICBXQVJOSU5HX0VORAotICAgIH07Ci0KLSAgICB2aXJ0dWFsIH5E
aWFnbm9zdGljcygpOwotCi0gICAgdm9pZCByZXBvcnQoSUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0
aW9uJiBsb2MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAg
U2V2ZXJpdHkgc2V2ZXJpdHkoSUQgaWQpOwotCi0gICAgdmlydHVhbCB2b2lkIHByaW50KElEIGlk
LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkgPSAwOwotfTsKLQot
fSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESUFH
Tk9TVElDU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMzI1NDAuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlh
Z25vc3RpY3NCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0K
LW5hbWVzcGFjZSBwcAotewotCi1EaWFnbm9zdGljczo6fkRpYWdub3N0aWNzKCkKLXsKLX0KLQot
dm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIHRleHQpCi17Ci0gICAgLy8gVE9ETyhhbG9rcCk6IEtlZXAgYSBjb3Vu
dCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgotICAgIHByaW50KGlkLCBsb2MsIHRleHQpOwotfQot
Ci1EaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNldmVyaXR5KElEIGlkKQotewot
ICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJST1JfRU5EKSkKLSAgICAgICAg
cmV0dXJuIEVSUk9SOwotCi0gICAgaWYgKChpZCA+IFdBUk5JTkdfQkVHSU4pICYmIChpZCA8IFdB
Uk5JTkdfRU5EKSkKLSAgICAgICAgcmV0dXJuIFdBUk5JTkc7Ci0KLSAgICBhc3NlcnQoZmFsc2Up
OwotICAgIHJldHVybiBFUlJPUjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9E
aXJlY3RpdmVIYW5kbGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJhYWVlYzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJf
UFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVSX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi1uYW1l
c3BhY2UgcHAKLXsKLQotc3RydWN0IFNvdXJjZUxvY2F0aW9uOwotCi0vLyBCYXNlIGNsYXNzIGZv
ciBoYW5kbGluZyBkaXJlY3RpdmVzLgotLy8gUHJlcHJvY2Vzc29yIHVzZXMgdGhpcyBjbGFzcyB0
byBub3RpZnkgdGhlIGNsaWVudHMgYWJvdXQgY2VydGFpbgotLy8gcHJlcHJvY2Vzc29yIGRpcmVj
dGl2ZXMuIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgZm9yCi0vLyBoYW5kbGluZyB0
aGVtIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4KLWNsYXNzIERpcmVjdGl2ZUhhbmRsZXIKLXsK
LSAgcHVibGljOgotICAgIHZpcnR1YWwgfkRpcmVjdGl2ZUhhbmRsZXIoKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbXNnKSA9IDA7Ci0KLSAgICAv
LyBIYW5kbGUgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXQotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVQcmFnbWEoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXh0ZW5zaW9uKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBi
ZWhhdmlvcikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVZlcnNpb24oY29uc3QgU291
cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVy
c2lvbikgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFu
ZGxlckJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjYTkxZTFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAi
RGlyZWN0aXZlSGFuZGxlci5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotRGlyZWN0aXZlSGFuZGxl
cjo6fkRpcmVjdGl2ZUhhbmRsZXIoKQotewotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1ODVhOTBlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw4OTkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRl
ICJEaXJlY3RpdmVQYXJzZXIuaCIKLQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0
ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAiRGlhZ25vc3RpY3MuaCIKLSNp
bmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5o
IgotI2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotI2luY2x1
ZGUgIlRva2VuaXplci5oIgotCi1uYW1lc3BhY2UgewotZW51bSBEaXJlY3RpdmVUeXBlCi17Ci0g
ICAgRElSRUNUSVZFX05PTkUsCi0gICAgRElSRUNUSVZFX0RFRklORSwKLSAgICBESVJFQ1RJVkVf
VU5ERUYsCi0gICAgRElSRUNUSVZFX0lGLAotICAgIERJUkVDVElWRV9JRkRFRiwKLSAgICBESVJF
Q1RJVkVfSUZOREVGLAotICAgIERJUkVDVElWRV9FTFNFLAotICAgIERJUkVDVElWRV9FTElGLAot
ICAgIERJUkVDVElWRV9FTkRJRiwKLSAgICBESVJFQ1RJVkVfRVJST1IsCi0gICAgRElSRUNUSVZF
X1BSQUdNQSwKLSAgICBESVJFQ1RJVkVfRVhURU5TSU9OLAotICAgIERJUkVDVElWRV9WRVJTSU9O
LAotICAgIERJUkVDVElWRV9MSU5FCi19OwotfSAgLy8gbmFtZXNwYWNlCi0KLXN0YXRpYyBEaXJl
Y3RpdmVUeXBlIGdldERpcmVjdGl2ZShjb25zdCBwcDo6VG9rZW4qIHRva2VuKQotewotICAgIHN0
YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRGVmaW5lKCJkZWZpbmUiKTsKLSAgICBz
dGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVVuZGVmKCJ1bmRlZiIpOwotICAgIHN0
YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWYoImlmIik7Ci0gICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZmRlZigiaWZkZWYiKTsKLSAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlmbmRlZigiaWZuZGVmIik7Ci0gICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbHNlKCJlbHNlIik7Ci0gICAgc3RhdGljIGNvbnN0
IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbGlmKCJlbGlmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0
ZDo6c3RyaW5nIGtEaXJlY3RpdmVFbmRpZigiZW5kaWYiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga0RpcmVjdGl2ZUVycm9yKCJlcnJvciIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6
OnN0cmluZyBrRGlyZWN0aXZlUHJhZ21hKCJwcmFnbWEiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3Rk
OjpzdHJpbmcga0RpcmVjdGl2ZUV4dGVuc2lvbigiZXh0ZW5zaW9uIik7Ci0gICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVWZXJzaW9uKCJ2ZXJzaW9uIik7Ci0gICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVMaW5lKCJsaW5lIik7Ci0KLSAgICBpZiAodG9r
ZW4tPnR5cGUgIT0gcHA6OlRva2VuOjpJREVOVElGSUVSKQotICAgICAgICByZXR1cm4gRElSRUNU
SVZFX05PTkU7Ci0KLSAgICBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVEZWZpbmUpCi0g
ICAgICAgIHJldHVybiBESVJFQ1RJVkVfREVGSU5FOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1
ZSA9PSBrRGlyZWN0aXZlVW5kZWYpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfVU5ERUY7Ci0g
ICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZikKLSAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9JRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUlm
ZGVmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGREVGOwotICAgIGVsc2UgaWYgKHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZuZGVmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lG
TkRFRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVsc2UpCi0gICAg
ICAgIHJldHVybiBESVJFQ1RJVkVfRUxTRTsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0g
a0RpcmVjdGl2ZUVsaWYpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRUxJRjsKLSAgICBlbHNl
IGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUVuZGlmKQotICAgICAgICByZXR1cm4gRElS
RUNUSVZFX0VORElGOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXJy
b3IpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVJST1I7Ci0gICAgZWxzZSBpZiAodG9rZW4t
PnZhbHVlID09IGtEaXJlY3RpdmVQcmFnbWEpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfUFJB
R01BOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRXh0ZW5zaW9uKQot
ICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VYVEVOU0lPTjsKLSAgICBlbHNlIGlmICh0b2tlbi0+
dmFsdWUgPT0ga0RpcmVjdGl2ZVZlcnNpb24pCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfVkVS
U0lPTjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZUxpbmUpCi0gICAg
ICAgIHJldHVybiBESVJFQ1RJVkVfTElORTsKLQotICAgIHJldHVybiBESVJFQ1RJVkVfTk9ORTsK
LX0KLQotc3RhdGljIGJvb2wgaXNDb25kaXRpb25hbERpcmVjdGl2ZShEaXJlY3RpdmVUeXBlIGRp
cmVjdGl2ZSkKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKLSAgICB7Ci0gICAgICBjYXNlIERJ
UkVDVElWRV9JRjoKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgotICAgICAgY2FzZSBESVJF
Q1RJVkVfSUZOREVGOgotICAgICAgY2FzZSBESVJFQ1RJVkVfRUxTRToKLSAgICAgIGNhc2UgRElS
RUNUSVZFX0VMSUY6Ci0gICAgICBjYXNlIERJUkVDVElWRV9FTkRJRjoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIHJlcHJlc2VudHMgRW5kIE9mIERpcmVjdGl2
ZS4KLXN0YXRpYyBib29sIGlzRU9EKGNvbnN0IHBwOjpUb2tlbiogdG9rZW4pCi17Ci0gICAgcmV0
dXJuICh0b2tlbi0+dHlwZSA9PSAnXG4nKSB8fCAodG9rZW4tPnR5cGUgPT0gcHA6OlRva2VuOjpM
QVNUKTsKLX0KLQotc3RhdGljIHZvaWQgc2tpcFVudGlsRU9EKHBwOjpMZXhlciogbGV4ZXIsIHBw
OjpUb2tlbiogdG9rZW4pCi17Ci0gICAgd2hpbGUoIWlzRU9EKHRva2VuKSkKLSAgICB7Ci0gICAg
ICAgIGxleGVyLT5sZXgodG9rZW4pOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgaXNNYWNyb05h
bWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKLXsKLSAgICAvLyBOYW1lcyBwcmVm
aXhlZCB3aXRoICJHTF8iIGFyZSByZXNlcnZlZC4KLSAgICBpZiAobmFtZS5zdWJzdHIoMCwgMykg
PT0gIkdMXyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTmFtZXMgY29udGFpbmlu
ZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgotICAgIGlmIChuYW1l
LmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBpc01hY3JvUHJlZGVmaW5lZChj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBwOjpNYWNyb1NldCYgbWFjcm9TZXQpCi17Ci0gICAgcHA6Ok1hY3JvU2V0Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gbWFjcm9TZXQuZmluZChuYW1lKTsKLSAgICByZXR1cm4gaXRlciAhPSBt
YWNyb1NldC5lbmQoKSA/IGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkIDogZmFsc2U7Ci19Ci0KLW5h
bWVzcGFjZSBwcAotewotCi1jbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExleGVyCi17Ci0g
IHB1YmxpYzoKLSAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlciwKLSAgICAgICAgICAgICAg
ICAgIGNvbnN0IE1hY3JvU2V0KiBtYWNyb1NldCwKLSAgICAgICAgICAgICAgICAgIERpYWdub3N0
aWNzKiBkaWFnbm9zdGljcykgOgotICAgICAgICBtTGV4ZXIobGV4ZXIpLAotICAgICAgICBtTWFj
cm9TZXQobWFjcm9TZXQpLAotICAgICAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCi0gICAg
ewotICAgIH0KLQotICBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9r
ZW4pCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RlZmluZWQoImRl
ZmluZWQiKTsKLQotICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7Ci0gICAgICAgIGlmICh0b2tl
bi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKHRva2VuLT52YWx1ZSAhPSBrRGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBib29sIHBhcmVuID0gZmFsc2U7Ci0gICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsK
LSAgICAgICAgaWYgKHRva2VuLT50eXBlID09ICcoJykKLSAgICAgICAgewotICAgICAgICAgICAg
cGFyZW4gPSB0cnVlOwotICAgICAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIHNraXBVbnRpbEVPRChtTGV4ZXIsIHRv
a2VuKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBNYWNyb1NldDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOwotICAg
ICAgICBzdGQ6OnN0cmluZyBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVuZCgpID8g
IjEiIDogIjAiOwotCi0gICAgICAgIGlmIChwYXJlbikKLSAgICAgICAgewotICAgICAgICAgICAg
bUxleGVyLT5sZXgodG9rZW4pOwotICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
c2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGhhdmUgYSB2YWxpZCBkZWZp
bmVkIG9wZXJhdG9yLgotICAgICAgICAvLyBDb252ZXJ0IHRoZSBjdXJyZW50IHRva2VuIGludG8g
YSBDT05TVF9JTlQgdG9rZW4uCi0gICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkNPTlNUX0lO
VDsKLSAgICAgICAgdG9rZW4tPnZhbHVlID0gZXhwcmVzc2lvbjsKLSAgICB9Ci0KLSAgcHJpdmF0
ZToKLSAgICBMZXhlciogbUxleGVyOwotICAgIGNvbnN0IE1hY3JvU2V0KiBtTWFjcm9TZXQ7Ci0g
ICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKLX07Ci0KLURpcmVjdGl2ZVBhcnNlcjo6RGly
ZWN0aXZlUGFyc2VyKFRva2VuaXplciogdG9rZW5pemVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgotICAgIG1U
b2tlbml6ZXIodG9rZW5pemVyKSwKLSAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAotICAgIG1EaWFn
bm9zdGljcyhkaWFnbm9zdGljcyksCi0gICAgbURpcmVjdGl2ZUhhbmRsZXIoZGlyZWN0aXZlSGFu
ZGxlcikKLXsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OmxleChUb2tlbiogdG9rZW4pCi17
Ci0gICAgZG8KLSAgICB7Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0KLSAgICAg
ICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpQUF9IQVNIKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBwYXJzZURpcmVjdGl2ZSh0b2tlbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodG9r
ZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbUNv
bmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsK
LSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElU
SU9OQUxfVU5URVJNSU5BVEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLmxvY2F0aW9uLCBibG9jay50eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICB9IHdoaWxlIChza2lwcGluZygpIHx8ICh0b2tlbi0+
dHlwZSA9PSAnXG4nKSk7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURpcmVjdGl2
ZShUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KHRva2VuLT50eXBlID09IFRva2VuOjpQUF9I
QVNIKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgRGlyZWN0aXZlVHlwZSBk
aXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4pOwotCi0gICAgLy8gV2hpbGUgaW4gYW4gZXhj
bHVkZWQgY29uZGl0aW9uYWwgYmxvY2svZ3JvdXAsCi0gICAgLy8gd2Ugb25seSBwYXJzZSBjb25k
aXRpb25hbCBkaXJlY3RpdmVzLgotICAgIGlmIChza2lwcGluZygpICYmICFpc0NvbmRpdGlvbmFs
RGlyZWN0aXZlKGRpcmVjdGl2ZSkpCi0gICAgewotICAgICAgICBza2lwVW50aWxFT0QobVRva2Vu
aXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoKGRpcmVj
dGl2ZSkKLSAgICB7Ci0gICAgICBjYXNlIERJUkVDVElWRV9OT05FOgotICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RElSRUNUSVZFX0lOVkFMSURfTkFNRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwot
ICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRElSRUNUSVZFX0RFRklORToKLSAgICAgICAgcGFyc2VEZWZpbmUodG9rZW4p
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX1VOREVGOgotICAgICAgICBw
YXJzZVVuZGVmKHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9J
RjoKLSAgICAgICAgcGFyc2VJZih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBE
SVJFQ1RJVkVfSUZERUY6Ci0gICAgICAgIHBhcnNlSWZkZWYodG9rZW4pOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoKLSAgICAgICAgcGFyc2VJZm5kZWYodG9r
ZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VMU0U6Ci0gICAgICAg
IHBhcnNlRWxzZSh0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVf
RUxJRjoKLSAgICAgICAgcGFyc2VFbGlmKHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIERJUkVDVElWRV9FTkRJRjoKLSAgICAgICAgcGFyc2VFbmRpZih0b2tlbik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfRVJST1I6Ci0gICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX1BSQUdNQToKLSAg
ICAgICAgcGFyc2VQcmFnbWEodG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElS
RUNUSVZFX0VYVEVOU0lPTjoKLSAgICAgICAgcGFyc2VFeHRlbnNpb24odG9rZW4pOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX1ZFUlNJT046Ci0gICAgICAgIHBhcnNlVmVy
c2lvbih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfTElORToK
LSAgICAgICAgcGFyc2VMaW5lKHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBz
a2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgIGlmICh0b2tlbi0+dHlwZSA9PSBU
b2tlbjo6TEFTVCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpFT0ZfSU5fRElSRUNUSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgfQotfQotCi12b2lkIERpcmVjdGl2ZVBh
cnNlcjo6cGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9ERUZJTkUpOwotCi0gICAgbVRva2VuaXplci0+bGV4KHRv
a2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCi0gICAgewot
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tF
TiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc01hY3JvUHJlZGVmaW5l
ZCh0b2tlbi0+dmFsdWUsICptTWFjcm9TZXQpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURFRklORURfUkVERUZJTkVELAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzTWFjcm9OYW1lUmVzZXJ2ZWQodG9rZW4t
PnZhbHVlKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpNQUNST19OQU1FX1JFU0VSVkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBNYWNybyBtYWNybzsKLSAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOwotICAgIG1h
Y3JvLm5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwot
ICAgIGlmICh0b2tlbi0+dHlwZSA9PSAnKCcgJiYgIXRva2VuLT5oYXNMZWFkaW5nU3BhY2UoKSkK
LSAgICB7Ci0gICAgICAgIC8vIEZ1bmN0aW9uLWxpa2UgbWFjcm8uIENvbGxlY3QgYXJndW1lbnRz
LgotICAgICAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlRnVuYzsKLSAgICAgICAgZG8gewot
ICAgICAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICAgICAgICAgIGlmICh0b2tl
bi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIG1hY3JvLnBhcmFtZXRlcnMucHVzaF9iYWNrKHRva2VuLT52YWx1ZSk7Ci0KLSAg
ICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBHZXQgJywnLgotICAgICAgICB9
IHdoaWxlICh0b2tlbi0+dHlwZSA9PSAnLCcpOwotCi0gICAgICAgIGlmICh0b2tlbi0+dHlwZSAh
PSAnKScpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOyAgLy8gR2V0ICcpJy4KLSAgICB9Ci0KLSAgICB3aGlsZSAoKHRv
a2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAg
ewotICAgICAgICAvLyBSZXNldCB0aGUgdG9rZW4gbG9jYXRpb24gYmVjYXVzZSBpdCBpcyB1bm5l
Y2Vzc2FyeSBpbiByZXBsYWNlbWVudAotICAgICAgICAvLyBsaXN0LiBSZXNldHRpbmcgaXQgYWxz
byBhbGxvd3MgdXMgdG8gcmV1c2UgVG9rZW46OmVxdWFscygpIHRvCi0gICAgICAgIC8vIGNvbXBh
cmUgbWFjcm9zLgotICAgICAgICB0b2tlbi0+bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOwot
ICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMucHVzaF9iYWNrKCp0b2tlbik7Ci0gICAgICAgIG1U
b2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgfQotICAgIGlmICghbWFjcm8ucmVwbGFjZW1lbnRz
LmVtcHR5KCkpCi0gICAgewotICAgICAgICAvLyBXaGl0ZXNwYWNlIHByZWNlZGluZyB0aGUgcmVw
bGFjZW1lbnQgbGlzdCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0IG9mCi0gICAgICAgIC8vIHRoZSBy
ZXBsYWNlbWVudCBsaXN0IGZvciBlaXRoZXIgZm9ybSBvZiBtYWNyby4KLSAgICAgICAgbWFjcm8u
cmVwbGFjZW1lbnRzLmZyb250KCkuc2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKLSAgICB9Ci0K
LSAgICAvLyBDaGVjayBmb3IgbWFjcm8gcmVkZWZpbml0aW9uLgotICAgIE1hY3JvU2V0Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKG1hY3JvLm5hbWUpOwotICAgIGlmIChp
dGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgJiYgIW1hY3JvLmVxdWFscyhpdGVyLT5zZWNvbmQpKQot
ICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1JF
REVGSU5FRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyby5uYW1lKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtTWFjcm9TZXQtPmluc2VydChzdGQ6Om1ha2VfcGFpcihtYWNyby5uYW1l
LCBtYWNybykpOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VVbmRlZihUb2tlbiog
dG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1VO
REVGKTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgaWYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIE1hY3JvU2V0OjppdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRv
a2VuLT52YWx1ZSk7Ci0gICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIGlmIChpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX1BSRURFRklORURfVU5E
RUZJTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgbU1hY3JvU2V0LT5lcmFzZShpdGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUlmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBE
SVJFQ1RJVkVfSUYpOwotICAgIHBhcnNlQ29uZGl0aW9uYWxJZih0b2tlbik7Ci19Ci0KLXZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmZGVmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQo
Z2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZERUYpOwotICAgIHBhcnNlQ29uZGl0
aW9uYWxJZih0b2tlbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlmbmRlZihU
b2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNU
SVZFX0lGTkRFRik7Ci0gICAgcGFyc2VDb25kaXRpb25hbElmKHRva2VuKTsKLX0KLQotdm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZShUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdl
dERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VMU0UpOwotCi0gICAgaWYgKG1Db25kaXRp
b25hbFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNr
aXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsK
LSAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQotICAgIHsKLSAgICAgICAgLy8gTm8gZGlhZ25vc3Rp
Y3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGluZS4KLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tl
bml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYmxvY2suZm91
bmRFbHNlR3JvdXApCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6Q09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBi
bG9jay5mb3VuZEVsc2VHcm91cCA9IHRydWU7Ci0gICAgYmxvY2suc2tpcEdyb3VwID0gYmxvY2su
Zm91bmRWYWxpZEdyb3VwOwotICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IHRydWU7Ci0KLSAg
ICAvLyBXYXJuIGlmIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMgYWZ0ZXIgI2Vsc2UuCi0gICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKLSAgICBpZiAoIWlzRU9EKHRva2VuKSkKLSAgICB7Ci0gICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVD
VEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7
Ci0gICAgfQotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbGlmKFRva2VuKiB0b2tl
bikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRUxJRik7
Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX1dJVEhPVVRf
SUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRp
dGlvbmFsU3RhY2suYmFjaygpOwotICAgIGlmIChibG9jay5za2lwQmxvY2spCi0gICAgewotICAg
ICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBsaW5lLgotICAgICAg
ICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTElGX0FGVEVSX0VMU0UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoYmxvY2suZm91bmRWYWxpZEdyb3VwKQotICAgIHsKLSAgICAg
ICAgLy8gRG8gbm90IHBhcnNlIHRoZSBleHByZXNzaW9uLgotICAgICAgICAvLyBBbHNvIGJlIGNh
cmVmdWwgbm90IHRvIGVtaXQgYSBkaWFnbm9zdGljLgotICAgICAgICBibG9jay5za2lwR3JvdXAg
PSB0cnVlOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25J
Zih0b2tlbik7Ci0gICAgYmxvY2suc2tpcEdyb3VwID0gZXhwcmVzc2lvbiA9PSAwOwotICAgIGJs
b2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKLX0KLQotdm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJl
Y3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTkRJRik7Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFs
U3RhY2suZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtQ29uZGl0aW9uYWxTdGFjay5wb3BfYmFjaygpOwotCi0gICAgLy8gV2FybiBpZiB0aGVyZSBh
cmUgdG9rZW5zIGFmdGVyICNlbmRpZi4KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAg
IGlmICghaXNFT0QodG9rZW4pKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUVycm9yKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGly
ZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVJST1IpOwotCi0gICAgc3RkOjpzdHJpbmdzdHJl
YW0gc3RyZWFtOwotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tl
bi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQotICAgIHsK
LSAgICAgICAgc3RyZWFtIDw8ICp0b2tlbjsKLSAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2Vu
KTsKLSAgICB9Ci0gICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZUVycm9yKHRva2VuLT5sb2Nh
dGlvbiwgc3RyZWFtLnN0cigpKTsKLX0KLQotLy8gUGFyc2VzIHByYWdtYSBvZiBmb3JtOiAjcHJh
Z21hIG5hbWVbKHZhbHVlKV0uCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VQcmFnbWEoVG9r
ZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElW
RV9QUkFHTUEpOwotCi0gICAgZW51bSBTdGF0ZQotICAgIHsKLSAgICAgICAgUFJBR01BX05BTUUs
Ci0gICAgICAgIExFRlRfUEFSRU4sCi0gICAgICAgIFBSQUdNQV9WQUxVRSwKLSAgICAgICAgUklH
SFRfUEFSRU4KLSAgICB9OwotCi0gICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAgc3RkOjpzdHJp
bmcgbmFtZSwgdmFsdWU7Ci0gICAgaW50IHN0YXRlID0gUFJBR01BX05BTUU7Ci0KLSAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwotICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaChzdGF0
ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBQUkFHTUFfTkFNRToKLSAgICAgICAgICAg
IG5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tl
bi0+dHlwZSA9PSBUb2tlbjo6SURFTlRJRklFUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIExFRlRfUEFSRU46Ci0gICAgICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tl
bi0+dHlwZSA9PSAnKCcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQUkFH
TUFfVkFMVUU6Ci0gICAgICAgICAgICB2YWx1ZSA9IHRva2VuLT52YWx1ZTsKLSAgICAgICAgICAg
IHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46Ci0gICAgICAgICAg
ICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4p
OwotICAgIH0KLQotICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFHTUFfTkFNRSkg
fHwgICAgIC8vIEVtcHR5IHByYWdtYS4KLSAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0g
TEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgotICAgICAgICAgICAgICAgICAg
ICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCi0gICAgaWYg
KCF2YWxpZCkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTlJFQ09HTklaRURfUFJBR01BLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIG5hbWUpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdGF0ZSA+IFBSQUdNQV9O
QU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgotICAgIHsKLSAgICAgICAg
bURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24sIG5hbWUsIHZh
bHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVuc2lvbihU
b2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNU
SVZFX0VYVEVOU0lPTik7Ci0KLSAgICBlbnVtIFN0YXRlCi0gICAgewotICAgICAgICBFWFRfTkFN
RSwKLSAgICAgICAgQ09MT04sCi0gICAgICAgIEVYVF9CRUhBVklPUgotICAgIH07Ci0KLSAgICBi
b29sIHZhbGlkID0gdHJ1ZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1lLCBiZWhhdmlvcjsKLSAgICBp
bnQgc3RhdGUgPSBFWFRfTkFNRTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAg
d2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxB
U1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBFWFRfTkFNRToKLSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OklERU5USUZJRVIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHZhbGlkKSBuYW1lID0gdG9rZW4tPnZhbHVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDT0xPTjoKLSAgICAgICAgICAgIGlmICh2YWxpZCAm
JiAodG9rZW4tPnR5cGUgIT0gJzonKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRVhUX0JFSEFWSU9SOgotICAgICAgICAg
ICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZhbGlk
KSBiZWhhdmlvciA9IHRva2VuLT52YWx1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9L
RU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEVYVF9CRUhB
VklPUiArIDEpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB2YWxpZCA9IGZh
bHNlOwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5o
YW5kbGVFeHRlbnNpb24odG9rZW4tPmxvY2F0aW9uLCBuYW1lLCBiZWhhdmlvcik7Ci19Ci0KLXZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKQotewotICAgIGFz
c2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9WRVJTSU9OKTsKLQotICAgIGVu
dW0gU3RhdGUKLSAgICB7Ci0gICAgICAgIFZFUlNJT05fTlVNQkVSCi0gICAgfTsKLQotICAgIGJv
b2wgdmFsaWQgPSB0cnVlOwotICAgIGludCB2ZXJzaW9uID0gMDsKLSAgICBpbnQgc3RhdGUgPSBW
RVJTSU9OX05VTUJFUjsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUg
KCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBWRVJTSU9OX05VTUJFUjoKLSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9OVU1CRVIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAodmFsaWQpIHZlcnNpb24gPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0
cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBpZiAodmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAg
ICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0K
LSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVNQkVSICsgMSkpCi0gICAgewot
ICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9WRVJTSU9O
X0RJUkVDVElWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9u
LCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAo
dmFsaWQpCi0gICAgICAgIG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5s
b2NhdGlvbiwgdmVyc2lvbik7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUo
VG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9MSU5FKTsKLQotICAgIGVudW0gU3RhdGUKLSAgICB7Ci0gICAgICAgIExJTkVfTlVNQkVS
LAotICAgICAgICBGSUxFX05VTUJFUgotICAgIH07Ci0KLSAgICBib29sIHZhbGlkID0gdHJ1ZTsK
LSAgICBpbnQgbGluZSA9IDAsIGZpbGUgPSAwOwotICAgIGludCBzdGF0ZSA9IExJTkVfTlVNQkVS
OwotCi0gICAgTWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyKG1Ub2tlbml6ZXIsIG1NYWNyb1Nl
dCwgbURpYWdub3N0aWNzKTsKLSAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Ci0gICAgd2hp
bGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1Qp
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBMSU5FX05VTUJFUjoKLSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUg
IT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9OVU1CRVIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+
dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAodmFsaWQpIGxpbmUgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0cigpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRklMRV9OVU1CRVI6Ci0gICAgICAg
ICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpJTlZBTElEX0ZJTEVfTlVNQkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZhbGlkKSBmaWxl
ID0gYXRvaSh0b2tlbi0+dmFsdWUuY19zdHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHZhbGlkKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVE
X1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbWFjcm9F
eHBhbmRlci5sZXgodG9rZW4pOwotICAgIH0KLQotICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0g
RklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUiArIDEpKQotICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9ESVJFQ1RJ
VkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnZhbHVlKTsKLSAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHZhbGlkKQot
ICAgIHsKLSAgICAgICAgbVRva2VuaXplci0+c2V0TGluZU51bWJlcihsaW5lKTsKLSAgICAgICAg
aWYgKHN0YXRlID09IEZJTEVfTlVNQkVSICsgMSkgbVRva2VuaXplci0+c2V0RmlsZU51bWJlcihm
aWxlKTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlyZWN0aXZlUGFyc2VyOjpza2lwcGluZygpIGNvbnN0
Ci17Ci0gICAgaWYgKG1Db25kaXRpb25hbFN0YWNrLmVtcHR5KCkpIHJldHVybiBmYWxzZTsKLQot
ICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJsb2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFj
aygpOwotICAgIHJldHVybiBibG9jay5za2lwQmxvY2sgfHwgYmxvY2suc2tpcEdyb3VwOwotfQot
Ci12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0b2tlbikK
LXsKLSAgICBDb25kaXRpb25hbEJsb2NrIGJsb2NrOwotICAgIGJsb2NrLnR5cGUgPSB0b2tlbi0+
dmFsdWU7Ci0gICAgYmxvY2subG9jYXRpb24gPSB0b2tlbi0+bG9jYXRpb247Ci0KLSAgICBpZiAo
c2tpcHBpbmcoKSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgaXMg
aW5zaWRlIGFub3RoZXIgY29uZGl0aW9uYWwgZ3JvdXAKLSAgICAgICAgLy8gd2hpY2ggaXMgc2tp
cHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0aGlzIHdob2xlIGJsb2NrIGlzIHNraXBwZWQuCi0gICAg
ICAgIC8vIEJlIGNhcmVmdWwgbm90IHRvIHBhcnNlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9u
IHRoYXQgbWlnaHQKLSAgICAgICAgLy8gZW1pdCBhIGRpYWdub3N0aWMuCi0gICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIGJsb2NrLnNraXBCbG9jayA9IHRy
dWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIERpcmVjdGl2ZVR5cGUgZGlyZWN0
aXZlID0gZ2V0RGlyZWN0aXZlKHRva2VuKTsKLQotICAgICAgICBpbnQgZXhwcmVzc2lvbiA9IDA7
Ci0gICAgICAgIHN3aXRjaCAoZGlyZWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBE
SVJFQ1RJVkVfSUY6Ci0gICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWYo
dG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZE
RUY6Ci0gICAgICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVGOgot
ICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2VuKSA9PSAw
ID8gMSA6IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGJsb2NrLnNraXBHcm91cCA9IGV4cHJlc3Npb24gPT0gMDsKLSAgICAgICAgYmxvY2suZm91
bmRWYWxpZEdyb3VwID0gZXhwcmVzc2lvbiAhPSAwOwotICAgIH0KLSAgICBtQ29uZGl0aW9uYWxT
dGFjay5wdXNoX2JhY2soYmxvY2spOwotfQotCi1pbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4
cHJlc3Npb25JZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9r
ZW4pID09IERJUkVDVElWRV9JRikgfHwKLSAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0VMSUYpKTsKLQotICAgIERlZmluZWRQYXJzZXIgZGVmaW5lZFBhcnNlciht
VG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7Ci0gICAgTWFjcm9FeHBhbmRlciBt
YWNyb0V4cGFuZGVyKCZkZWZpbmVkUGFyc2VyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7Ci0g
ICAgRXhwcmVzc2lvblBhcnNlciBleHByZXNzaW9uUGFyc2VyKCZtYWNyb0V4cGFuZGVyLCBtRGlh
Z25vc3RpY3MpOwotCi0gICAgaW50IGV4cHJlc3Npb24gPSAwOwotICAgIG1hY3JvRXhwYW5kZXIu
bGV4KHRva2VuKTsKLSAgICBleHByZXNzaW9uUGFyc2VyLnBhcnNlKHRva2VuLCAmZXhwcmVzc2lv
bik7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2lmIGV4cHJlc3Np
b24uCi0gICAgaWYgKCFpc0VPRCh0b2tlbikpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwot
ICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgIH0KLQotICAgIHJl
dHVybiBleHByZXNzaW9uOwotfQotCi1pbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Np
b25JZmRlZihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4p
ID09IERJUkVDVElWRV9JRkRFRikgfHwKLSAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0lGTkRFRikpOwotCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCi0gICAgewotICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwot
ICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBNYWNyb1NldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NYWNyb1Nl
dC0+ZmluZCh0b2tlbi0+dmFsdWUpOwotICAgIGludCBleHByZXNzaW9uID0gaXRlciAhPSBtTWFj
cm9TZXQtPmVuZCgpID8gMSA6IDA7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMg
YWZ0ZXIgI2lmZGVmIGV4cHJlc3Npb24uCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAg
ICBpZiAoIWlzRU9EKHRva2VuKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAg
IHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgfQotICAgIHJldHVybiBleHBy
ZXNzaW9uOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNl
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvRGlyZWN0aXZlUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNWEw
MWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElS
RUNUSVZFX1BBUlNFUl9IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZF
X1BBUlNFUl9IXwotCi0jaW5jbHVkZSAiTGV4ZXIuaCIKLSNpbmNsdWRlICJNYWNyby5oIgotI2lu
Y2x1ZGUgInBwX3V0aWxzLmgiCi0jaW5jbHVkZSAiU291cmNlTG9jYXRpb24uaCIKLQotbmFtZXNw
YWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsK
LWNsYXNzIFRva2VuaXplcjsKLQotY2xhc3MgRGlyZWN0aXZlUGFyc2VyIDogcHVibGljIExleGVy
Ci17Ci0gIHB1YmxpYzoKLSAgICBEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0b2tlbml6ZXIs
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKLSAgICAgICAgICAgICAg
ICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzLAotICAgICAgICAgICAgICAgICAgICBEaXJl
Y3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgo
VG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihEaXJlY3RpdmVQYXJzZXIpOwotCi0gICAgdm9pZCBwYXJzZURpcmVjdGl2ZShUb2tlbiog
dG9rZW4pOwotICAgIHZvaWQgcGFyc2VEZWZpbmUoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBh
cnNlVW5kZWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlSWYoVG9rZW4qIHRva2VuKTsK
LSAgICB2b2lkIHBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlSWZuZGVm
KFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUVsc2UoVG9rZW4qIHRva2VuKTsKLSAgICB2
b2lkIHBhcnNlRWxpZihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VFbmRpZihUb2tlbiog
dG9rZW4pOwotICAgIHZvaWQgcGFyc2VFcnJvcihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFy
c2VQcmFnbWEoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0
b2tlbik7Ci0gICAgdm9pZCBwYXJzZVZlcnNpb24oVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBh
cnNlTGluZShUb2tlbiogdG9rZW4pOwotCi0gICAgYm9vbCBza2lwcGluZygpIGNvbnN0OwotICAg
IHZvaWQgcGFyc2VDb25kaXRpb25hbElmKFRva2VuKiB0b2tlbik7Ci0gICAgaW50IHBhcnNlRXhw
cmVzc2lvbklmKFRva2VuKiB0b2tlbik7Ci0gICAgaW50IHBhcnNlRXhwcmVzc2lvbklmZGVmKFRv
a2VuKiB0b2tlbik7Ci0KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxCbG9jawotICAgIHsKLSAgICAg
ICAgc3RkOjpzdHJpbmcgdHlwZTsKLSAgICAgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247Ci0g
ICAgICAgIGJvb2wgc2tpcEJsb2NrOwotICAgICAgICBib29sIHNraXBHcm91cDsKLSAgICAgICAg
Ym9vbCBmb3VuZFZhbGlkR3JvdXA7Ci0gICAgICAgIGJvb2wgZm91bmRFbHNlR3JvdXA7Ci0KLSAg
ICAgICAgQ29uZGl0aW9uYWxCbG9jaygpIDoKLSAgICAgICAgICAgIHNraXBCbG9jayhmYWxzZSks
Ci0gICAgICAgICAgICBza2lwR3JvdXAoZmFsc2UpLAotICAgICAgICAgICAgZm91bmRWYWxpZEdy
b3VwKGZhbHNlKSwKLSAgICAgICAgICAgIGZvdW5kRWxzZUdyb3VwKGZhbHNlKQotICAgICAgICB7
Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHN0ZDo6dmVjdG9yPENvbmRpdGlvbmFsQmxvY2s+IG1D
b25kaXRpb25hbFN0YWNrOwotICAgIFRva2VuaXplciogbVRva2VuaXplcjsKLSAgICBNYWNyb1Nl
dCogbU1hY3JvU2V0OwotICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Ci0gICAgRGlyZWN0
aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAK
LSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9QQVJTRVJfSF8KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhOWNlOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFy
c2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NDAgKzAsMCBAQAotLyogQSBCaXNvbiBwYXJz
ZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCi0KLS8qIFNrZWxldG9uIGltcGxlbWVudGF0
aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKLQotICAgQ29weXJpZ2h0IChD
KSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2Ci0gICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
LSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg
dmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5
IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKLSAgIHBhcnQgb3IgYWxsIG9mIHRo
ZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi0gICB1bmRl
ciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxm
IGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQg
dmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHks
IGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0
c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi0gICBzcGVjaWFsIGV4
Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcK
LSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVy
YWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQot
ICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLwotCi0vKiBDIExBTFIo
MSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKLSAgIHNp
bXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLwot
Ci0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZ
LCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3Vs
ZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3Ro
ZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgotICAgVGhlcmUgYXJlIHNvbWUgdW5h
dm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bwotICAgZGVmaW5lIG5l
Y2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KLSAg
IFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0vKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQu
ICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5l
IFlZQklTT05fVkVSU0lPTiAiMi4zIgotCi0vKiBTa2VsZXRvbiBuYW1lLiAgKi8KLSNkZWZpbmUg
WVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCi0KLS8qIFB1cmUgcGFyc2Vycy4gICovCi0jZGVmaW5l
IFlZUFVSRSAxCi0KLS8qIFVzaW5nIGxvY2F0aW9ucy4gICovCi0jZGVmaW5lIFlZTFNQX05FRURF
RCAwCi0KLS8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcy4gICov
Ci0jZGVmaW5lIHl5cGFyc2UgcHBwYXJzZQotI2RlZmluZSB5eWxleCAgIHBwbGV4Ci0jZGVmaW5l
IHl5ZXJyb3IgcHBlcnJvcgotI2RlZmluZSB5eWx2YWwgIHBwbHZhbAotI2RlZmluZSB5eWNoYXIg
IHBwY2hhcgotI2RlZmluZSB5eWRlYnVnIHBwZGVidWcKLSNkZWZpbmUgeXluZXJycyBwcG5lcnJz
Ci0KLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9L
RU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRo
YXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0g
ICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgVE9LX0NPTlNUX0lOVCA9IDI1OCwKLSAgICAgVE9L
X09QX09SID0gMjU5LAotICAgICBUT0tfT1BfQU5EID0gMjYwLAotICAgICBUT0tfT1BfTkUgPSAy
NjEsCi0gICAgIFRPS19PUF9FUSA9IDI2MiwKLSAgICAgVE9LX09QX0dFID0gMjYzLAotICAgICBU
T0tfT1BfTEUgPSAyNjQsCi0gICAgIFRPS19PUF9SSUdIVCA9IDI2NSwKLSAgICAgVE9LX09QX0xF
RlQgPSAyNjYsCi0gICAgIFRPS19VTkFSWSA9IDI2NwotICAgfTsKLSNlbmRpZgotLyogVG9rZW5z
LiAgKi8KLSNkZWZpbmUgVE9LX0NPTlNUX0lOVCAyNTgKLSNkZWZpbmUgVE9LX09QX09SIDI1OQot
I2RlZmluZSBUT0tfT1BfQU5EIDI2MAotI2RlZmluZSBUT0tfT1BfTkUgMjYxCi0jZGVmaW5lIFRP
S19PUF9FUSAyNjIKLSNkZWZpbmUgVE9LX09QX0dFIDI2MwotI2RlZmluZSBUT0tfT1BfTEUgMjY0
Ci0jZGVmaW5lIFRPS19PUF9SSUdIVCAyNjUKLSNkZWZpbmUgVE9LX09QX0xFRlQgMjY2Ci0jZGVm
aW5lIFRPS19VTkFSWSAyNjcKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2Vy
IGRlY2xhcmF0aW9ucy4gICovCi0KLQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRoaXMgZmlsZSBpcyBh
dXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQotCi0jaWYg
ZGVmaW5lZChfX0dOVUNfXykKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBs
dmFsIHZhcmlhYmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VuaW5pdGlh
bGl6ZWQiCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQwNjUgNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNlci5oIgotCi0j
aW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPHNzdHJlYW0+
Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVk
ZSAiVG9rZW4uaCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi10eXBlZGVmIF9faW50NjQgWVlT
VFlQRTsKLSNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKLSNlbHNlCi0jaW5jbHVkZSA8c3RkaW50
Lmg+Ci10eXBlZGVmIGludG1heF90IFlZU1RZUEU7Ci0jZW5kaWYgIC8vIF9NU0NfVkVSCi0jZGVm
aW5lIFlZRU5BQkxFX05MUyAwCi0jZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCi0jZGVmaW5l
IFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQotCi1u
YW1lc3BhY2Ugewotc3RydWN0IENvbnRleHQKLXsKLSAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzOwotICAgIHBwOjpMZXhlciogbGV4ZXI7Ci0gICAgcHA6OlRva2VuKiB0b2tlbjsKLSAg
ICBpbnQqIHJlc3VsdDsKLX07Ci19ICAvLyBuYW1lc3BhY2UKLQotCi1zdGF0aWMgaW50IHl5bGV4
KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3Io
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKLQotCi0vKiBFbmFibGluZyB0
cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgot
Ci0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9S
X1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJP
U0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5h
YmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZp
bmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQotI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEg
ZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi10eXBlZGVmIGludCBZWVNUWVBFOwotIyBkZWZp
bmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwot
IyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJ
QUwgMQotI2VuZGlmCi0KLQotCi0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xh
cmF0aW9ucy4gICovCi0KLQotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLQotCi0jaWZkZWYg
c2hvcnQKLSMgdW5kZWYgc2hvcnQKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX1VJTlQ4Ci10eXBl
ZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHl5dHlwZV91aW50ODsKLSNlbmRpZgotCi0jaWZkZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYg
WVlUWVBFX0lOVDggeXl0eXBlX2ludDg7Ci0jZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OwotI2Vsc2UKLXR5
cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlO
VDE2Ci10eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKLSNlbHNlCi10eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OwotI2VuZGlmCi0KLSNpZmRlZiBZWVRZ
UEVfSU5UMTYKLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKLSNlbHNlCi10eXBl
ZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWVNJWkVfVAot
IyBpZmRlZiBfX1NJWkVfVFlQRV9fCi0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXwot
IyBlbGlmIGRlZmluZWQgc2l6ZV90Ci0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsaWYg
ISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovCi0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNJWkVf
VCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlZU0laRV9NQVhJTVVN
ICgoWVlTSVpFX1QpIC0xKQotCi0jaWZuZGVmIFlZXwotIyBpZiBZWUVOQUJMRV9OTFMKLSMgIGlm
IEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1
bnRpbWUiLCBtc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmlu
ZSBZWV8obXNnaWQpIG1zZ2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2Vk
LXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQg
fHwgZGVmaW5lZCBfX0dOVUNfXwotIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCi0jZWxz
ZQotIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0vKiBJZGVudGl0eSBm
dW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRp
b25zLiAgKi8KLSNpZm5kZWYgbGludAotIyBkZWZpbmUgWVlJRChuKSAobikKLSNlbHNlCi0jaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGludAotWVlJRCAo
aW50IGkpCi0jZWxzZQotc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKLSNlbmRpZgot
ewotICByZXR1cm4gaTsKLX0KLSNlbmRpZgotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwg
WVlFUlJPUl9WRVJCT1NFCi0KLS8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9j
OyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VT
RV9BTExPQ0EKLSMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0j
ICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmlu
ZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAg
ZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIK
LSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlT
VEFDS19BTExPQyBhbGxvY2EKLSMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmlu
ZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLSMg
ICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
Ci0jICAgICBpZm5kZWYgX1NURExJQl9ICi0jICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCi0jICAg
ICBlbmRpZgotIyAgICBlbmRpZgotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlm
ZGVmIFlZU1RBQ0tfQUxMT0MKLSAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2Fy
bmluZy4gICovCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsg
fSB3aGlsZSAoWVlJRCAoMCkpCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCi0gICAg
LyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0
b20gb2YgdGhlIHN0YWNrLAotICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwg
YXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKLSAgICAgICBpbnZva2UgYWxsb2Nh
IChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCi0g
ICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3Rh
Y2sgc2xvdHMuICAqLwotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiBy
ZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBZWVNU
QUNLX0FMTE9DIFlZTUFMTE9DCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQotIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElN
VU0gWVlTSVpFX01BWElNVU0KLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAm
JiAhIGRlZmluZWQgX1NURExJQl9IIFwKLSAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8
fCBkZWZpbmVkIG1hbGxvYykgXAotCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQg
ZnJlZSkpKQotIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICAgaWZuZGVmIF9TVERMSUJfSAotIyAgICBkZWZpbmUgX1NURExJQl9IIDEK
LSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWU1BTExPQwotIyAgIGRlZmluZSBZWU1B
TExPQyBtYWxsb2MKLSMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElC
X0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotdm9pZCAqbWFsbG9j
IChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRp
ZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZWUZSRUUKLSMgICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMg
ICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyBlbmRpZgot
I2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLwotCi0K
LSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAotICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNw
bHVzIFwKLQkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJ
VklBTCkpKQotCi0vKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3Rh
Y2sgbWVtYmVyLiAgKi8KLXVuaW9uIHl5YWxsb2MKLXsKLSAgeXl0eXBlX2ludDE2IHl5c3M7Ci0g
IFlZU1RZUEUgeXl2czsKLSAgfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJl
dHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMgZGVmaW5lIFlZU1RB
Q0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQotCi0vKiBUaGUgc2l6
ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdp
dGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAg
ICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAotICAg
ICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBG
Uk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KLSAgIG5vdCBvdmVybGFw
LiAgKi8KLSMgaWZuZGVmIFlZQ09QWQotIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19H
TlVDX18KLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAotICAgICAgX19idWls
dGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQotIyAgZWxz
ZQotIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAotICAgICAgZG8JCQkJCVwK
LQl7CQkJCQlcCi0JICBZWVNJWkVfVCB5eWk7CQkJCVwKLQkgIGZvciAoeXlpID0gMDsgeXlpIDwg
KENvdW50KTsgeXlpKyspCVwKLQkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCi0JfQkJ
CQkJXAotICAgICAgd2hpbGUgKFlZSUQgKDApKQotIyAgZW5kaWYKLSMgZW5kaWYKLQotLyogUmVs
b2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCi0g
ICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5k
IG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVz
IHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBw
cm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAotICAgc3RhY2suICAqLwotIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKLSAgICBkbwkJCQkJCQkJCVwKLSAg
ICAgIHsJCQkJCQkJCQlcCi0JWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgm
eXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFj
azsJCQkJCQlcCi0JeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsg
WVlTVEFDS19HQVBfTUFYSU1VTTsgXAotCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5
eXB0cik7CQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotCi0j
ZW5kaWYKLQotLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0
YXRlLiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgMTQKLS8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGlu
IFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAxNzUKLQotLyogWVlOVE9LRU5TIC0tIE51
bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDI3Ci0vKiBZWU5OVFMg
LS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgMwotLyogWVlO
UlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDI2Ci0vKiBZ
WU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVTICA1Mgot
Ci0vKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25k
aW5nIHRvIFlZTEVYLiAgKi8KLSNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVU
T0sgICAyNjcKLQotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAotICAoKHVuc2lnbmVk
IGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0sp
Ci0KLS8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3Bv
bmRpbmcgdG8gWVlMRVguICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0
ZVtdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIzLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAyMSwgICAgIDgsICAgICAyLAotICAgICAgMjUsICAgIDI2LCAgICAxOSwgICAgMTcsICAgICAy
LCAgICAxOCwgICAgIDIsICAgIDIwLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgIDExLCAgICAgMiwgICAgMTIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgNiwgICAgIDIsICAgIDI0LCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAg
ICAgNSwgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMjIKLX07
Ci0KLSNpZiBZWURFQlVHCi0vKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhT
IHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KLSAgIFlZUkhTLiAgKi8KLXN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlwcmhzW10gPQotewotICAgICAgIDAsICAgICAwLCAgICAgMywgICAg
IDUsICAgICA3LCAgICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcsCi0gICAgICAzMSwg
ICAgMzUsICAgIDM5LCAgICA0MywgICAgNDcsICAgIDUxLCAgICA1NSwgICAgNTksICAgIDYzLCAg
ICA2NywKLSAgICAgIDcxLCAgICA3NSwgICAgNzksICAgIDgyLCAgICA4NSwgICAgODgsICAgIDkx
Ci19OwotCi0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBS
SFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQotewotICAgICAgMjgs
ICAgICAwLCAgICAtMSwgICAgMjksICAgIC0xLCAgICAgMywgICAgLTEsICAgIDI5LCAgICAgNCwg
ICAgMjksCi0gICAgICAtMSwgICAgMjksICAgICA1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAg
NiwgICAgMjksICAgIC0xLCAgICAyOSwKLSAgICAgICA3LCAgICAyOSwgICAgLTEsICAgIDI5LCAg
ICAgOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgIDksICAgIDI5LAotICAgICAgLTEsICAgIDI5
LCAgICAxMCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTMsICAgIDI5LCAgICAtMSwgICAgMjks
Ci0gICAgICAxNCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTIsICAgIDI5LCAgICAtMSwgICAg
MjksICAgIDExLCAgICAyOSwKLSAgICAgIC0xLCAgICAyOSwgICAgMTUsICAgIDI5LCAgICAtMSwg
ICAgMjksICAgIDE2LCAgICAyOSwgICAgLTEsICAgIDI5LAotICAgICAgMTgsICAgIDI5LCAgICAt
MSwgICAgMjksICAgIDE3LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAyMSwgICAgMjksCi0gICAg
ICAtMSwgICAgMjksICAgIDIwLCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxOSwgICAgMjksICAg
IC0xLCAgICAyMywKLSAgICAgIDI5LCAgICAtMSwgICAgMjQsICAgIDI5LCAgICAtMSwgICAgMTgs
ICAgIDI5LCAgICAtMSwgICAgMTcsICAgIDI5LAotICAgICAgLTEsICAgIDI1LCAgICAyOSwgICAg
MjYsICAgIC0xCi19OwotCi0vKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVs
ZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXlybGluZVtdID0KLXsKLSAgICAgICAwLCAgICA4OSwgICAgODksICAgIDk2LCAgICA5NywgICAx
MDAsICAgMTAzLCAgIDEwNiwgICAxMDksICAgMTEyLAotICAgICAxMTUsICAgMTE4LCAgIDEyMSwg
ICAxMjQsICAgMTI3LCAgIDEzMCwgICAxMzMsICAgMTM2LCAgIDEzOSwgICAxNDIsCi0gICAgIDE1
NSwgICAxNjgsICAgMTcxLCAgIDE3NCwgICAxNzcsICAgMTgwLCAgIDE4MwotfTsKLSNlbmRpZgot
Ci0jaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQotLyogWVlU
TkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1OVU0u
Ci0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBu
b250ZXJtaW5hbHMuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9Ci17
Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVE9LX0NPTlNUX0lOVCIsICJUT0tf
T1BfT1IiLAotICAiVE9LX09QX0FORCIsICInfCciLCAiJ14nIiwgIicmJyIsICJUT0tfT1BfTkUi
LCAiVE9LX09QX0VRIiwgIic8JyIsCi0gICInPiciLCAiVE9LX09QX0dFIiwgIlRPS19PUF9MRSIs
ICJUT0tfT1BfUklHSFQiLCAiVE9LX09QX0xFRlQiLCAiJysnIiwKLSAgIictJyIsICInKiciLCAi
Jy8nIiwgIiclJyIsICJUT0tfVU5BUlkiLCAiJyEnIiwgIid+JyIsICInKCciLCAiJyknIiwKLSAg
IiRhY2NlcHQiLCAiaW5wdXQiLCAiZXhwcmVzc2lvbiIsIDAKLX07Ci0jZW5kaWYKLQotIyBpZmRl
ZiBZWVBSSU5UCi0vKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJl
ciBjb3JyZXNwb25kaW5nIHRvCi0gICB0b2tlbiBZWUxFWC1OVU0uICAqLwotc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Ci17Ci0gICAgICAgMCwgICAyNTYsICAgMjU3LCAg
IDI1OCwgICAyNTksICAgMjYwLCAgIDEyNCwgICAgOTQsICAgIDM4LCAgIDI2MSwKLSAgICAgMjYy
LCAgICA2MCwgICAgNjIsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgICA0MywgICAgNDUs
ICAgIDQyLAotICAgICAgNDcsICAgIDM3LCAgIDI2NywgICAgMzMsICAgMTI2LCAgICA0MCwgICAg
NDEKLX07Ci0jIGVuZGlmCi0KLS8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJv
bCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXIxW10gPQotewotICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKLSAgICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5Ci19OwotCi0vKiBZWVIyW1lZ
Tl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxl
IFlZTi4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Ci17Ci0gICAgICAg
MCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAz
LCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDMKLX07Ci0KLS8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERl
ZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQotICAgU1RBVEUtTlVNIHdoZW4gWVlU
QUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCi0gICBtZWFu
cyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5ZGVmYWN0W10gPQotewotICAgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgMjUsCi0gICAgICAyNCwgICAgMjIsICAgIDIz
LCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjYsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTQsICAgIDEzLCAgICAx
MSwgICAgMTIsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE3LCAgICAyMSwKLSAgICAgIDIwLCAg
ICAxOQotfTsKLQotLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KLXsKLSAgICAgIC0xLCAgICAgNywgICAgIDgKLX07Ci0K
LS8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24g
ZGVzY3JpYmluZwotICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTExCi1z
dGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KLXsKLSAgICAgIDQ2LCAgIC0xMSwg
ICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICAxMiwgICAgNjgsICAgLTExLAot
ICAgICAtMTEsICAgLTExLCAgIC0xMSwgICAgMjcsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2
LCAgICA0NiwgICAgNDYsCi0gICAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAg
IDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKLSAgICAgIDQ2LCAgICA0NiwgICAgNDYs
ICAgLTExLCAgICA4NSwgICAxMDEsICAgMTE2LCAgIDEzMCwgICAxNDMsICAgMTU0LAotICAgICAx
NTQsICAgLTEwLCAgIC0xMCwgICAtMTAsICAgLTEwLCAgICAzNywgICAgMzcsICAgIDMxLCAgICAz
MSwgICAtMTEsCi0gICAgIC0xMSwgICAtMTEKLX07Ci0KLS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlwZ290b1tdID0KLXsKLSAgICAgLTExLCAg
IC0xMSwgICAgLTIKLX07Ci0KLS8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0
byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgotICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9r
ZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCi0gICBudW1iZXIgaXMgdGhl
IG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgotICAgSWYgWVlUQUJM
RV9OSU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTEKLXN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXl0YWJsZVtdID0KLXsKLSAgICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAg
ICAgMzEsICAgIDMyLCAgICAxNCwgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwKLSAgICAgIDUxLCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgIDEsCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAg
ICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA0LAotICAgICAgIDUsICAgICA2
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
Ci0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE3LCAgICAxOCwgICAgMTksCi0gICAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyCi19OwotCi1zdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDggeXljaGVja1tdID0KLXsKLSAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAotICAgICAgMjAsICAgIDIxLCAgICAg
MCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCi0gICAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDMsCi0gICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCi0gICAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwK
LSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAg
IDE5LCAgICAyMCwgICAgMjEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAg
ICAyMSwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxCi19OwotCi0vKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51
bWJlciBvZiB0aGUpIGFjY2Vzc2luZwotICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICov
Ci1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KLXsKLSAgICAgICAwLCAgICAg
MywgICAgMTcsICAgIDE4LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyOCwgICAgMjksICAgIDI5
LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgICAwLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDI2LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAotICAg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjkKLX07Ci0KLSNkZWZpbmUgeXllcnJvawkJKHl5
ZXJyc3RhdHVzID0gMCkKLSNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQotI2Rl
ZmluZSBZWUVNUFRZCQkoLTIpCi0jZGVmaW5lIFlZRU9GCQkwCi0KLSNkZWZpbmUgWVlBQ0NFUFQJ
Z290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKLSNkZWZp
bmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCi0KLQotLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBk
byBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQotICAgdG8gZWFz
ZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4K
LSAgIE9uY2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2Fu
IGdvLiAgKi8KLQotI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKLQotI2RlZmluZSBZWVJF
Q09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCi0KLSNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZh
bHVlKQkJCQkJXAotZG8JCQkJCQkJCVwKLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVu
ID09IDEpCQkJCVwKLSAgICB7CQkJCQkJCQlcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJ
CVwKLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAotICAgICAgeXl0b2tlbiA9IFlZVFJB
TlNMQVRFICh5eWNoYXIpOwkJCQlcCi0gICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCi0gICAg
ICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKLSAgICB9CQkJCQkJCQlcCi0gIGVsc2UJCQkJCQkJCVwK
LSAgICB7CQkJCQkJCQlcCi0gICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJv
cjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7CQkJCQkJCVwKLSAgICB9CQkJ
CQkJCQlcCi13aGlsZSAoWVlJRCAoMCkpCi0KLQotI2RlZmluZSBZWVRFUlJPUgkxCi0jZGVmaW5l
IFlZRVJSQ09ERQkyNTYKLQotCi0vKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBz
cGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVO
VCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcwotICAgdGhlIHByZXZpb3VzIHN5bWJv
bDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCkuICAqLwotCi0jZGVmaW5lIFlZUkhTTE9DKFJocywg
SykgKChSaHMpW0tdKQotI2lmbmRlZiBZWUxMT0NfREVGQVVMVAotIyBkZWZpbmUgWVlMTE9DX0RF
RkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCi0gICAgZG8JCQkJCQkJCQlcCi0gICAgICBpZiAo
WVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0Mg
KFJocywgMSkuZmlyc3RfbGluZTsJXAotCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhT
TE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAotCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9
IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKLQkgIChDdXJyZW50KS5sYXN0X2NvbHVt
biAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAotCX0JCQkJCQkJCVwKLSAgICAg
IGVsc2UJCQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0g
KEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9s
aW5lOwkJCQlcCi0JICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29s
dW1uID0JCVwKLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKLQl9CQkJ
CQkJCQlcCi0gICAgd2hpbGUgKFlZSUQgKDApKQotI2VuZGlmCi0KLQotLyogWVlfTE9DQVRJT05f
UFJJTlQgLS0gUHJpbnQgdGhlIGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCi0gICBUaGlzIG1hY3Jv
IHdhcyBub3QgbWFuZGF0ZWQgb3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdwotICAg
d2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdl
IGtub3cuICAqLwotCi0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCi0jIGlmIFlZTFRZUEVfSVNf
VFJJVklBTAotIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCi0gICAg
IGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAotCSAgICAgIChMb2MpLmZpcnN0X2xp
bmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAotCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2Mp
Lmxhc3RfY29sdW1uKQotIyBlbHNlCi0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwg
TG9jKSAoKHZvaWQpIDApCi0jIGVuZGlmCi0jZW5kaWYKLQotCi0vKiBZWUxFWCAtLSBjYWxsaW5n
IGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KLQotI2lmZGVmIFlZTEVYX1BB
UkFNCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCi0jZWxzZQot
IyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIGNvbnRleHQpCi0jZW5kaWYKLQotLyogRW5h
YmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVCVUcKLQotIyBpZm5kZWYg
WVlGUFJJTlRGCi0jICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCi0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMgZW5kaWYKLQotIyBkZWZp
bmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAotZG8gewkJCQkJCVwKLSAgaWYgKHl5ZGVidWcpCQkJCQlc
Ci0gICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0jIGRlZmlu
ZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKLWRv
IHsJCQkJCQkJCQkgIFwKLSAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKLSAgICB7CQkJCQkJCQkJ
ICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAotICAg
ICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJICBcCi0JCSAgVHlwZSwgVmFsdWUsIGNv
bnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCi0gICAg
fQkJCQkJCQkJCSAgXAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAo
ZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZp
bmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3lt
Ym9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25z
dCAqIGNvbnN0IHl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQotI2Vsc2UKLXN0YXRpYyB2b2lk
Ci15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250
ZXh0KQotICAgIEZJTEUgKnl5b3V0cHV0OwotICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSBj
b25zdCAqIGNvbnN0IHl5dmFsdWVwOwotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0jZW5kaWYKLXsK
LSAgaWYgKCF5eXZhbHVlcCkKLSAgICByZXR1cm47Ci0gIFlZVVNFIChjb250ZXh0KTsKLSMgaWZk
ZWYgWVlQUklOVAotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZUFJJTlQgKHl5b3V0
cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwotIyBlbHNlCi0gIFlZVVNFICh5eW91
dHB1dCk7Ci0jIGVuZGlmCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLSAgICAgIGRlZmF1bHQ6
Ci0JYnJlYWs7Ci0gICAgfQotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCi18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAotYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQg
X19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBp
bnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRleHQgKmNvbnRl
eHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlw
ZSwgeXl2YWx1ZXAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7Ci0gICAgaW50IHl5dHlw
ZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0gICAgQ29udGV4dCAqY29u
dGV4dDsKLSNlbmRpZgotewotICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQotICAgIFlZRlBSSU5U
RiAoeXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLSAgZWxzZQotICAg
IFlZRlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKLQot
ICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250
ZXh0KTsKLSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKLX0KLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18
IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00g
dXAgdG8gaXRzIHwKLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQg
KHl5dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKLSNlbHNlCi1zdGF0aWMg
dm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90
dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOwotI2VuZGlmCi17Ci0gIFlZRlBSSU5URiAoc3Rk
ZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKLSAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOwotICBZWUZQUklOVEYgKHN0ZGVy
ciwgIlxuIik7Ci19Ci0KLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlc
Ci1kbyB7CQkJCQkJCQlcCi0gIGlmICh5eWRlYnVnKQkJCQkJCQlcCi0gICAgeXlfc3RhY2tfcHJp
bnQgKChCb3R0b20pLCAoVG9wKSk7CQkJCVwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZXBvcnQg
dGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8Ci1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQg
KFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBDb250ZXh0ICpjb250ZXh0KQotI2Vsc2UKLXN0
YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCi0gICAg
WVlTVFlQRSAqeXl2c3A7Ci0gICAgaW50IHl5cnVsZTsKLSAgICBDb250ZXh0ICpjb250ZXh0Owot
I2VuZGlmCi17Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07Ci0gIGludCB5eWk7Ci0gIHVu
c2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwotICBZWUZQUklOVEYgKHN0
ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0JICAgICB5
eXJ1bGUgLSAxLCB5eWxubyk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwot
ICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCi0gICAgewotICAgICAgZnByaW50
ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7Ci0gICAgICB5eV9zeW1ib2xfcHJpbnQg
KHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAotCQkgICAgICAgJih5eXZzcFso
eXlpICsgMSkgLSAoeXlucmhzKV0pCi0JCSAgICAgICAJCSAgICAgICAsIGNvbnRleHQpOwotICAg
ICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLSMgZGVmaW5lIFlZX1JFRFVD
RV9QUklOVChSdWxlKQkJXAotZG8gewkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJXAotICAgIHl5
X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCi19IHdoaWxlIChZWUlEICgw
KSkKLQotLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5p
bml0aWFsaXplZCBzbyB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8K
LWludCB5eWRlYnVnOwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihB
cmdzKQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRp
b24pCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JF
RFVDRV9QUklOVChSdWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQotLyogWVlJTklUREVQ
VEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZglZ
WUlOSVRERVBUSAotIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhE
RVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9u
bHkKLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgot
Ci0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVu
ZGVmaW5lZCBpZgotICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlN
QVhERVBUSCkKLSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFy
aXRobWV0aWMuICAqLwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEgg
MTAwMDAKLSNlbmRpZgotCi0MCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlz
dHJsZW4KLSMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAg
ZGVmaW5lIHl5c3RybGVuIHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2Yg
WVlTVFIuICAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0
YXRpYyBZWVNJWkVfVAoteXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQotI2Vsc2UKLXN0YXRp
YyBZWVNJWkVfVAoteXlzdHJsZW4gKHl5c3RyKQotICAgIGNvbnN0IGNoYXIgKnl5c3RyOwotI2Vu
ZGlmCi17Ci0gIFlZU0laRV9UIHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5d
OyB5eWxlbisrKQotICAgIGNvbnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgot
IyBlbmRpZgotCi0jIGlmbmRlZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYg
ZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0
cGNweSBzdHBjcHkKLSMgIGVsc2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcg
dGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi0j
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIGNoYXIgKgot
eXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCi0jZWxzZQotc3RhdGlj
IGNoYXIgKgoteXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCi0gICAgY2hhciAqeXlkZXN0OwotICAg
IGNvbnN0IGNoYXIgKnl5c3JjOwotI2VuZGlmCi17Ci0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKLSAg
Y29uc3QgY2hhciAqeXlzID0geXlzcmM7Ci0KLSAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9
ICdcMCcpCi0gICAgY29udGludWU7Ci0KLSAgcmV0dXJuIHl5ZCAtIDE7Ci19Ci0jICBlbmRpZgot
IyBlbmRpZgotCi0jIGlmbmRlZiB5eXRuYW1lcnIKLS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRl
bnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5Ci0gICBxdW90ZXMg
YW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUK
LSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVz
cyB0aGUgc3RyaW5nCi0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1hLCBvciBiYWNr
c2xhc2ggKG90aGVyIHRoYW4KLSAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFr
ZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0
ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKLSAgIHdvdWxkIGhhdmUg
YmVlbi4gICovCi1zdGF0aWMgWVlTSVpFX1QKLXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0
IGNoYXIgKnl5c3RyKQotewotICBpZiAoKnl5c3RyID09ICciJykKLSAgICB7Ci0gICAgICBZWVNJ
WkVfVCB5eW4gPSAwOwotICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7Ci0KLSAgICAgIGZv
ciAoOzspCi0Jc3dpdGNoICgqKyt5eXApCi0JICB7Ci0JICBjYXNlICdcJyc6Ci0JICBjYXNlICcs
JzoKLQkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0JICBjYXNlICdcXCc6Ci0JICAg
IGlmICgqKyt5eXAgIT0gJ1xcJykKLQkgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0J
ICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0JICBkZWZhdWx0OgotCSAgICBpZiAoeXlyZXMpCi0J
ICAgICAgeXlyZXNbeXluXSA9ICp5eXA7Ci0JICAgIHl5bisrOwotCSAgICBicmVhazsKLQotCSAg
Y2FzZSAnIic6Ci0JICAgIGlmICh5eXJlcykKLQkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLQkg
ICAgcmV0dXJuIHl5bjsKLQkgIH0KLSAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQot
Ci0gIGlmICghIHl5cmVzKQotICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVy
biB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5
IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tl
bgotICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhlIG51bWJlciBv
ZiBieXRlcyBjb3BpZWQsCi0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4g
IElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAotICAgY29weSBhbnl0aGluZzsganVzdCByZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCi0gICBjb3BpZWQuICBBcyBhIHNw
ZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKLSAgIG1l
c3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxvdyBvY2N1cnMg
ZHVyaW5nCi0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXlzeW50
YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hhcikKLXsKLSAg
aW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKLQotICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4g
JiYgeXluIDw9IFlZTEFTVCkpCi0gICAgcmV0dXJuIDA7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBp
bnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUw
ID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOwotICAgICAgWVlTSVpFX1QgeXlzaXpl
ID0geXlzaXplMDsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTE7Ci0gICAgICBpbnQgeXlzaXplX292
ZXJmbG93ID0gMDsKLSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0g
NSB9OwotICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1V
TV07Ci0gICAgICBpbnQgeXl4OwotCi0jIGlmIDAKLSAgICAgIC8qIFRoaXMgaXMgc28geGdldHRl
eHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKLQkgY29uc3RydWN0ZWQg
b24gdGhlIGZseS4gICovCi0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIp
OwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIp
OwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBv
ciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGlu
ZyAlcyBvciAlcyBvciAlcyIpOwotICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQg
JXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOwotIyBlbmRpZgotICAgICAgY2hh
ciAqeXlmbXQ7Ci0gICAgICBjaGFyIGNvbnN0ICp5eWY7Ci0gICAgICBzdGF0aWMgY2hhciBjb25z
dCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOwotICAgICAg
c3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAlcyI7Ci0gICAg
ICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKLSAgICAgIGNoYXIgeXlmb3Jt
YXRbc2l6ZW9mIHl5dW5leHBlY3RlZAotCQkgICAgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCi0J
CSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCi0JCSAgICAgICAqIChz
aXplb2YgeXlvciAtIDEpKV07Ci0gICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9IHl5ZXhwZWN0
aW5nOwotCi0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBu
ZWdhdGl2ZSBpbmRleGVzIGluCi0JIFlZQ0hFQ0suICAqLwotICAgICAgaW50IHl5eGJlZ2luID0g
eXluIDwgMCA/IC15eW4gOiAwOwotCi0gICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90
aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNU
IC0geXluICsgMTsKLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8g
eXljaGVja2xpbSA6IFlZTlRPS0VOUzsKLSAgICAgIGludCB5eWNvdW50ID0gMTsKLQotICAgICAg
eXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07Ci0gICAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZv
cm1hdCwgeXl1bmV4cGVjdGVkKTsKLQotICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwg
eXl4ZW5kOyArK3l5eCkKLQlpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0g
WVlURVJST1IpCi0JICB7Ci0JICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0pCi0JICAgICAgewotCQl5eWNvdW50ID0gMTsKLQkJeXlzaXplID0geXlzaXplMDsK
LQkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKLQkJYnJlYWs7Ci0J
ICAgICAgfQotCSAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwotCSAgICB5eXNp
emUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOwotCSAgICB5eXNpemVf
b3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOwotCSAgICB5eXNpemUgPSB5eXNpemUxOwot
CSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOwotCSAgICB5eXByZWZpeCA9
IHl5b3I7Ci0JICB9Ci0KLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7Ci0gICAgICB5eXNpemUx
ID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7Ci0gICAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5
c2l6ZTEgPCB5eXNpemUpOwotICAgICAgeXlzaXplID0geXlzaXplMTsKLQotICAgICAgaWYgKHl5
c2l6ZV9vdmVyZmxvdykKLQlyZXR1cm4gWVlTSVpFX01BWElNVU07Ci0KLSAgICAgIGlmICh5eXJl
c3VsdCkKLQl7Ci0JICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUg
dXNlcidzIG5hbWUgc3BhY2UuCi0JICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBl
dmVuIGlmIHRoZSB0cmFuc2xhdGlvbgotCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUg
d3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KLQkgIGNoYXIgKnl5cCA9IHl5cmVzdWx0OwotCSAg
aW50IHl5aSA9IDA7Ci0JICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQotCSAgICB7Ci0J
ICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwgeXljb3VudCkK
LQkJewotCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKLQkJICB5eWYg
Kz0gMjsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkgIHl5cCsrOwotCQkgIHl5ZisrOwotCQl9
Ci0JICAgIH0KLQl9Ci0gICAgICByZXR1cm4geXlzaXplOwotICAgIH0KLX0KLSNlbmRpZiAvKiBZ
WUVSUk9SX1ZFUkJPU0UgKi8KLQwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhp
cyBzeW1ib2wuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwotCi0vKkFSR1NVU0VEKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCi1zdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGlu
dCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBDb250ZXh0ICpjb250ZXh0KQotI2Vsc2UKLXN0
YXRpYyB2b2lkCi15eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkK
LSAgICBjb25zdCBjaGFyICp5eW1zZzsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgKnl5
dmFsdWVwOwotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgWVlVU0UgKHl5dmFs
dWVwKTsKLSAgWVlVU0UgKGNvbnRleHQpOwotCi0gIGlmICgheXltc2cpCi0gICAgeXltc2cgPSAi
RGVsZXRpbmciOwotICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5
eWxvY2F0aW9ucCk7Ci0KLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0
OgotCWJyZWFrOwotICAgIH0KLX0KLQwKLQotLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlz
c2luZy1wcm90b3R5cGVzLiAgKi8KLQotI2lmZGVmIFlZUEFSU0VfUEFSQU0KLSNpZiBkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlICh2b2lkICpZWVBB
UlNFX1BBUkFNKTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2Vsc2UgLyogISBZ
WVBBUlNFX1BBUkFNICovCi0jaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzCi1pbnQgeXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCk7Ci0jZWxzZQotaW50IHl5cGFyc2Ug
KCk7Ci0jZW5kaWYKLSNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLQotCi0KLQotCi0KLS8q
LS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KLQotI2lmZGVmIFlZUEFS
U0VfUEFSQU0KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18g
XAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCi1pbnQK
LXl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pCi0jZWxzZQotaW50Ci15eXBhcnNlIChZWVBB
UlNFX1BBUkFNKQotICAgIHZvaWQgKllZUEFSU0VfUEFSQU07Ci0jZW5kaWYKLSNlbHNlIC8qICEg
WVlQQVJTRV9QQVJBTSAqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKLWludAoteXlwYXJzZSAoQ29udGV4dCAqY29udGV4dCkKLSNlbHNlCi1pbnQKLXl5cGFyc2Ug
KGNvbnRleHQpCi0gICAgQ29udGV4dCAqY29udGV4dDsKLSNlbmRpZgotI2VuZGlmCi17Ci0gIC8q
IFRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICovCi1pbnQgeXljaGFyOwotCi0vKiBUaGUgc2VtYW50
aWMgdmFsdWUgb2YgdGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KLVlZU1RZUEUgeXlsdmFsOwot
Ci0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwotaW50IHl5bmVycnM7Ci0K
LSAgaW50IHl5c3RhdGU7Ci0gIGludCB5eW47Ci0gIGludCB5eXJlc3VsdDsKLSAgLyogTnVtYmVy
IG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCi0g
IGludCB5eWVycnN0YXR1czsKLSAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAo
dHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KLSAgaW50IHl5dG9rZW4gPSAwOwotI2lmIFlZ
RVJST1JfVkVSQk9TRQotICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFs
bG9jYXRlZCBzaXplLiAgKi8KLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOwotICBjaGFyICp5eW1zZyA9
IHl5bXNnYnVmOwotICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKLSNl
bmRpZgotCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzog
cmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1
ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8g
dGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0g
ICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBz
dGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlwZV9p
bnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBz
ZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwot
ICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0KLQotI2RlZmlu
ZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQotCi0gIFlZU0la
RV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2Vk
IHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0
aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLQotCi0gIC8qIFRoZSBudW1iZXIg
b2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCi0gICAgIEtlZXAgdG8g
emVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KLSAgaW50IHl5bGVuID0g
MDsKLQotICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOwotCi0gIHl5
c3RhdGUgPSAwOwotICB5eWVycnN0YXR1cyA9IDA7Ci0gIHl5bmVycnMgPSAwOwotICB5eWNoYXIg
PSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLQotICAvKiBJbml0
aWFsaXplIHN0YWNrIHBvaW50ZXJzLgotICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBh
bmQgbG9jYXRpb24gc3RhY2sKLSAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2
ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgotICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZl
ciBpbml0aWFsaXplZC4gICovCi0KLSAgeXlzc3AgPSB5eXNzOwotICB5eXZzcCA9IHl5dnM7Ci0K
LSAgZ290byB5eXNldHN0YXRlOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3
IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0
ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBs
b2NhdGlvbiBzdGFja3MKLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBh
IHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0
YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOwotCi0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAx
IDw9IHl5c3NwKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2Yg
dGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXpl
ID0geXlzc3AgLSB5eXNzICsgMTsKLQotI2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLQkvKiBH
aXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9m
Ci0JICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50
bwotCSAgIG1lbW9yeS4gICovCi0JWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotCXl5dHlwZV9pbnQx
NiAqeXlzczEgPSB5eXNzOwotCi0KLQkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBm
b2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLQkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNr
LCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0JICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1
c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotCSAgIGJlIHVuZGVmaW5lZCBp
ZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4
aGF1c3RlZCIpLAotCQkgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0JCSAg
ICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLQotCQkgICAgJnl5c3RhY2tzaXpl
KTsKLQotCXl5c3MgPSB5eXNzMTsKLQl5eXZzID0geXl2czE7Ci0gICAgICB9Ci0jZWxzZSAvKiBu
byB5eW92ZXJmbG93ICovCi0jIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOwotIyBlbHNlCi0gICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24g
d2F5LiAgKi8KLSAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotCWdvdG8geXll
eGhhdXN0ZWRsYWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAqPSAyOwotICAgICAgaWYgKFlZTUFYREVQ
VEggPCB5eXN0YWNrc2l6ZSkKLQl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7Ci0KLSAgICAgIHsK
LQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLQl1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0J
ICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNr
c2l6ZSkpOwotCWlmICghIHl5cHRyKQotCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQlZWVNUQUNL
X1JFTE9DQVRFICh5eXNzKTsKLQlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKLQotIyAgdW5kZWYg
WVlTVEFDS19SRUxPQ0FURQotCWlmICh5eXNzMSAhPSB5eXNzYSkKLQkgIFlZU1RBQ0tfRlJFRSAo
eXlzczEpOwotICAgICAgfQotIyBlbmRpZgotI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KLQot
ICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKLSAgICAgIHl5dnNwID0geXl2cyArIHl5
c2l6ZSAtIDE7Ci0KLQotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNy
ZWFzZWQgdG8gJWx1XG4iLAotCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsK
LQotICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0JWVlBQk9SVDsK
LSAgICB9Ci0KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5
c3RhdGUpKTsKLQotICBnb3RvIHl5YmFja3VwOwotCi0vKi0tLS0tLS0tLS0tLgotfCB5eWJhY2t1
cC4gIHwKLWAtLS0tLS0tLS0tLSovCi15eWJhY2t1cDoKLQotICAvKiBEbyBhcHByb3ByaWF0ZSBw
cm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCi0gICAgIGxvb2stYWhl
YWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwot
Ci0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0
byBsb29rLWFoZWFkIHRva2VuLiAgKi8KLSAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAo
eXluID09IFlZUEFDVF9OSU5GKQotICAgIGdvdG8geXlkZWZhdWx0OwotCi0gIC8qIE5vdCBrbm93
biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAq
LwotCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxv
b2stYWhlYWQgc3ltYm9sLiAgKi8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAg
ICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXlj
aGFyID0gWVlMRVg7Ci0gICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAg
ICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
Tm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5
eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1CT0xfUFJJTlQgKCJO
ZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgfQotCi0gIC8q
IElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVj
ZSBvciB0bwotICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwotICB5
eW4gKz0geXl0b2tlbjsKLSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tb
eXluXSAhPSB5eXRva2VuKQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4gPSB5eXRhYmxlW3l5
bl07Ci0gIGlmICh5eW4gPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXluID09IDAgfHwgeXluID09
IFlZVEFCTEVfTklORikKLQlnb3RvIHl5ZXJybGFiOwotICAgICAgeXluID0gLXl5bjsKLSAgICAg
IGdvdG8geXlyZWR1Y2U7Ci0gICAgfQotCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFD
Q0VQVDsKLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhy
ZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0gIGlmICh5eWVycnN0YXR1cykK
LSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAg
Ki8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXls
bG9jKTsKLQotICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2Yu
ICAqLwotICBpZiAoeXljaGFyICE9IFlZRU9GKQotICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0KLSAg
eXlzdGF0ZSA9IHl5bjsKLSAgKisreXl2c3AgPSB5eWx2YWw7Ci0KLSAgZ290byB5eW5ld3N0YXRl
OwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCi18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRo
ZSBjdXJyZW50IHN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZGVmYXVsdDoKLSAgeXluID0geXlkZWZhY3Rb
eXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gMCkKLSAgICBnb3RvIHl5ZXJybGFiOwotICBnb3RvIHl5
cmVkdWNlOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5cmVkdWNl
IC0tIERvIGEgcmVkdWN0aW9uLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LXl5cmVkdWNlOgotICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdp
dGguICAqLwotICB5eWxlbiA9IHl5cjJbeXluXTsKLQotICAvKiBJZiBZWUxFTiBpcyBub256ZXJv
LCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKLSAgICAgYCQkID0g
JDEnLgotCi0gICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8g
Z2FyYmFnZS4KLSAgICAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCi0g
ICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCi0g
ICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBp
dCBhdm9pZHMgYQotICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5p
dGlhbGl6ZWQuICAqLwotICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOwotCi0KLSAgWVlfUkVEVUNF
X1BSSU5UICh5eW4pOwotICBzd2l0Y2ggKHl5bikKLSAgICB7Ci0gICAgICAgIGNhc2UgMjoKLQot
ICAgIHsKLSAgICAgICAgKihjb250ZXh0LT5yZXN1bHQpID0gc3RhdGljX2Nhc3Q8aW50PigoeXl2
c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICBZWUFDQ0VQVDsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgNDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
KSB8fCAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDU6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiYgKHl5dnNw
WygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA2OgotCi0gICAgewot
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHwgKHl5dnNwWygzKSAtICgzKV0p
OwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3OgotCi0gICAgewotICAgICAgICAoeXl2
YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIF4gKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0g
ICAgYnJlYWs7Ci0KLSAgY2FzZSA4OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pICYgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSA5OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0p
ICE9ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA6
Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPT0gKHl5dnNw
WygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMToKLQotICAgIHsK
LSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PSAoeXl2c3BbKDMpIC0gKDMp
XSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDEyOgotCi0gICAgewotICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw9ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTM6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXSkgPiAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDE0OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAt
ICgzKV0pIDwgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+PiAo
eXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE2OgotCi0g
ICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIDw8ICh5eXZzcFsoMykg
LSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTc6Ci0KLSAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgLSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0g
ICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE4OgotCi0gICAgewotICAgICAgICAoeXl2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0pICsgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAg
YnJlYWs7Ci0KLSAgY2FzZSAxOToKLQotICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAo
MyldKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAg
ICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0pIDw8ICIgJSAiIDw8ICh5eXZzcFso
MykgLSAoMyldKTsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGlj
czo6RElWSVNJT05fQllfWkVSTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwotICAgICAgICAgICAgWVlBQk9SVDsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
JSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgIH0KLSAgICA7fQotICAgIGJyZWFrOwotCi0g
IGNhc2UgMjA6Ci0KLSAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkg
ewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgICAgICAgICAgc3Ry
ZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7
Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwotICAgICAgICAg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9O
X0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZQUJPUlQ7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC8gKHl5dnNwWygz
KSAtICgzKV0pOwotICAgICAgICB9Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDIxOgot
Ci0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pICogKHl5dnNwWygz
KSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMjoKLQotICAgIHsKLSAg
ICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAyMzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9IH4gKHl5dnNwWygyKSAt
ICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNDoKLQotICAgIHsKLSAgICAg
ICAgKHl5dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAyNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICsgKHl5dnNwWygyKSAtICgy
KV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyNjoKLQotICAgIHsKLSAgICAgICAg
KHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0KLS8q
IExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9
Ci0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9j
KTsKLQotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIHl5bGVuID0gMDsKLSAgWVlfU1RBQ0tfUFJJ
TlQgKHl5c3MsIHl5c3NwKTsKLQotICAqKyt5eXZzcCA9IHl5dmFsOwotCi0KLSAgLyogTm93IGBz
aGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUK
LSAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8g
YW5kIHRoZSBydWxlCi0gICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIx
W3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsK
LSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3Rh
dGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQot
ICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKLQotICBnb3RvIHl5bmV3
c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJsYWI6Ci0gIC8qIElmIG5vdCBhbHJlYWR5IHJlY292
ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLwotICBpZiAoIXl5ZXJy
c3RhdHVzKQotICAgIHsKLSAgICAgICsreXluZXJyczsKLSNpZiAhIFlZRVJST1JfVkVSQk9TRQot
ICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7Ci0jZWxzZQotICAg
ICAgewotCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNo
YXIpOwotCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tf
QUxMT0NfTUFYSU1VTSkKLQkgIHsKLQkgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7
Ci0JICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxM
T0NfTUFYSU1VTSkpCi0JICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKLQkg
ICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQotCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwot
CSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOwotCSAgICBpZiAo
eXltc2cpCi0JICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOwotCSAgICBlbHNlCi0JICAgICAg
ewotCQl5eW1zZyA9IHl5bXNnYnVmOwotCQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsK
LQkgICAgICB9Ci0JICB9Ci0KLQlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxs
b2MpCi0JICB7Ci0JICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5
Y2hhcik7Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsKLQkgIH0KLQllbHNlCi0JICB7
Ci0JICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOwotCSAgICBpZiAo
eXlzaXplICE9IDApCi0JICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLQkgIH0KLSAgICAgIH0K
LSNlbmRpZgotICAgIH0KLQotCi0KLSAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCi0gICAgewotICAg
ICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4g
YWZ0ZXIgYW4KLQkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwotCi0gICAgICBpZiAoeXljaGFyIDw9
IFlZRU9GKQotCXsKLQkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICov
Ci0JICBpZiAoeXljaGFyID09IFlZRU9GKQotCSAgICBZWUFCT1JUOwotCX0KLSAgICAgIGVsc2UK
LQl7Ci0JICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAotCQkgICAgICB5eXRva2Vu
LCAmeXlsdmFsLCBjb250ZXh0KTsKLQkgIHl5Y2hhciA9IFlZRU1QVFk7Ci0JfQotICAgIH0KLQot
ICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRp
bmcgdGhlIGVycm9yCi0gICAgIHRva2VuLiAgKi8KLSAgZ290byB5eWVycmxhYjE7Ci0KLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5
ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKLWAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXllcnJv
cmxhYjoKLQotICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29k
ZSBuZXZlciBpbnZva2VzCi0gICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRo
ZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKLSAgICAgY29kZS4gICovCi0gIGlmICgvKkNP
TlNUQ09ORCovIDApCi0gICAgIGdvdG8geXllcnJvcmxhYjsKLQotICAvKiBEbyBub3QgcmVjbGFp
bSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCi0gICAgIHRo
aXMgWVlFUlJPUi4gICovCi0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKLSAgeXlsZW4gPSAwOwotICBZ
WV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICB5eXN0YXRlID0gKnl5c3NwOwotICBnb3Rv
IHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3Ig
Ym90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjE6Ci0g
IHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0
aGlzLiAgKi8KLQotICBmb3IgKDs7KQotICAgIHsKLSAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRl
XTsKLSAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCi0JewotCSAgeXluICs9IFlZVEVSUk9S
OwotCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZ
VEVSUk9SKQotCSAgICB7Ci0JICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotCSAgICAgIGlmICgw
IDwgeXluKQotCQlicmVhazsKLQkgICAgfQotCX0KLQotICAgICAgLyogUG9wIHRoZSBjdXJyZW50
IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwotICAg
ICAgaWYgKHl5c3NwID09IHl5c3MpCi0JWVlBQk9SVDsKLQotCi0gICAgICB5eWRlc3RydWN0ICgi
RXJyb3I6IHBvcHBpbmciLAotCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNvbnRleHQpOwot
ICAgICAgWVlQT1BTVEFDSyAoMSk7Ci0gICAgICB5eXN0YXRlID0gKnl5c3NwOwotICAgICAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgICB9Ci0KLSAgaWYgKHl5biA9PSBZWUZJTkFM
KQotICAgIFlZQUNDRVBUOwotCi0gICorK3l5dnNwID0geXlsdmFsOwotCi0KLSAgLyogU2hpZnQg
dGhlIGVycm9yIHRva2VuLiAgKi8KLSAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0
b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKLQotICB5eXN0YXRlID0geXluOwotICBnb3RvIHl5bmV3
c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhY2NlcHRsYWI6Ci0gIHl5cmVzdWx0ID0gMDsKLSAg
Z290byB5eXJldHVybjsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlhYm9ydGxhYjoKLSAgeXlyZXN1bHQgPSAxOwotICBn
b3RvIHl5cmV0dXJuOwotCi0jaWZuZGVmIHl5b3ZlcmZsb3cKLS8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVt
b3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXhoYXVzdGVkbGFiOgotICB5eWVycm9yIChj
b250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Ci0gIHl5cmVzdWx0ID0gMjsKLSAgLyog
RmFsbCB0aHJvdWdoLiAgKi8KLSNlbmRpZgotCi15eXJldHVybjoKLSAgaWYgKHl5Y2hhciAhPSBZ
WUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKLSAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRp
c2NhcmRpbmcgbG9va2FoZWFkIiwKLQkJIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOwotICAv
KiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJp
Z2dlcmVkCi0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICovCi0gIFlZUE9QU1RBQ0sg
KHl5bGVuKTsKLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKLSAgd2hpbGUgKHl5c3Nw
ICE9IHl5c3MpCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAot
CQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgx
KTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAgaWYgKHl5c3MgIT0geXlzc2EpCi0gICAg
WVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lmIFlZRVJST1JfVkVSQk9TRQotICBpZiAo
eXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0jZW5kaWYKLSAg
LyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCi0gIHJldHVybiBZWUlEICh5eXJlc3VsdCk7
Ci19Ci0KLQotCi0KLQotaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0
KQotewotICAgIGludCB0eXBlID0gMDsKLQotICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0
LT50b2tlbjsKLSAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgcHA6
OlRva2VuOjpDT05TVF9JTlQ6Ci0gICAgICAgICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVl
LmNfc3RyKCksIE5VTEwsIDApOwotICAgICAgICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9P
UjsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FO
RDsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7
IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBi
cmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJl
YWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFr
OwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBi
cmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7
IGJyZWFrOwotICAgICAgY2FzZSAnfCc6IHR5cGUgPSAnfCc7IGJyZWFrOwotICAgICAgY2FzZSAn
Xic6IHR5cGUgPSAnXic7IGJyZWFrOwotICAgICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFr
OwotICAgICAgY2FzZSAnPic6IHR5cGUgPSAnPic7IGJyZWFrOwotICAgICAgY2FzZSAnPCc6IHR5
cGUgPSAnPCc7IGJyZWFrOwotICAgICAgY2FzZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwotICAg
ICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJyZWFrOwotICAgICAgY2FzZSAnJSc6IHR5cGUgPSAn
JSc7IGJyZWFrOwotICAgICAgY2FzZSAnLyc6IHR5cGUgPSAnLyc7IGJyZWFrOwotICAgICAgY2Fz
ZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOwotICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJy
ZWFrOwotICAgICAgY2FzZSAnfic6IHR5cGUgPSAnfic7IGJyZWFrOwotICAgICAgY2FzZSAnKCc6
IHR5cGUgPSAnKCc7IGJyZWFrOwotICAgICAgY2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOwot
Ci0gICAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBu
ZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9uZSBpcyB2YWxpZC4KLSAgICBpZiAodHlwZSAhPSAw
KSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2VuKTsKLQotICAgIHJldHVybiB0eXBlOwotfQotCi12
b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQotewotICAg
IGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VY
UFJFU1NJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tl
bi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwot
fQotCi1uYW1lc3BhY2UgcHAgewotCi1FeHByZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2Vy
KExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxl
eGVyKSwKLSAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCi17Ci19Ci0KLWJvb2wgRXhwcmVz
c2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2VuLCBpbnQqIHJlc3VsdCkKLXsKLSAgICBDb250
ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5kaWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKLSAg
ICBjb250ZXh0LmxleGVyID0gbUxleGVyOwotICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKLSAg
ICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsKLSAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4
dCk7Ci0gICAgc3dpdGNoIChyZXQpCi0gICAgewotICAgICAgY2FzZSAwOgotICAgICAgY2FzZSAx
OgotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2Up
OwotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJS
T1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmV0ID09IDA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHBy
ZXNzaW9uUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA5MmQwNTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwotCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQotbmFt
ZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERpYWdub3N0aWNzOwotY2xhc3MgTGV4ZXI7Ci1zdHJ1Y3Qg
VG9rZW47Ci0KLWNsYXNzIEV4cHJlc3Npb25QYXJzZXIKLXsKLSAgcHVibGljOgotICAgIEV4cHJl
c3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOwotCi0g
ICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KTsKLQotICBwcml2YXRlOgot
ICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNzaW9uUGFyc2VyKTsKLQotICAg
IExleGVyKiBtTGV4ZXI7Ci0gICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKLX07Ci0KLX0g
IC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVT
U0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJz
ZXIueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdjOWYwNS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9F
eHByZXNzaW9uUGFyc2VyLnkKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIFlhY2MgZ3JhbW1hciBmb3IgR0xT
TCBFUyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbi4KLQotSUYgWU9VIE1PRElGWSBUSElTIEZJTEUg
WU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLAotV0hJQ0ggR0VORVJBVEVT
IFRIRSBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHBhcnNlci4KLSovCi0KLSV7Ci0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotLy8gVG9n
Z2xlIHRoZSB3YXJuaW5nIGZvciAtV3ByYWdtYXMgdG8gZW5zdXJlIHdlIGRvIG5vdCBicmVhayB0
aGUgYnVpbGQKLS8vIHdpdGggZWFybGllciBjb21waWxlciB2ZXJzaW9ucyBiZWNhdXNlIG9mIHVu
a25vd24gcHJhZ21hIG9wdGlvbnMuCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
cHJhZ21hcyIKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlh
YmxlLgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCi0j
cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWF5YmUtdW5pbml0aWFsaXplZCIKLSNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgd2FybmluZyAiLVdwcmFnbWFzIgotI2VsaWYgZGVmaW5lZChf
TVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCi0jZW5kaWYKLQot
I2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKLQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5j
bHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAiRGlhZ25vc3Rp
Y3MuaCIKLSNpbmNsdWRlICJMZXhlci5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLSNpZiBkZWZp
bmVkKF9NU0NfVkVSKQotdHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7Ci0jZGVmaW5lIHN0cnRvbGwg
X3N0cnRvaTY0Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGludC5oPgotdHlwZWRlZiBpbnRtYXhfdCBZ
WVNUWVBFOwotI2VuZGlmICAvLyBfTVNDX1ZFUgotI2RlZmluZSBZWUVOQUJMRV9OTFMgMAotI2Rl
ZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMQotI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQot
I2RlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLQotbmFtZXNwYWNlIHsKLXN0cnVjdCBDb250
ZXh0Ci17Ci0gICAgcHA6OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKLSAgICBwcDo6TGV4ZXIq
IGxleGVyOwotICAgIHBwOjpUb2tlbiogdG9rZW47Ci0gICAgaW50KiByZXN1bHQ7Ci19OwotfSAg
Ly8gbmFtZXNwYWNlCi0lfQotCi0lcHVyZS1wYXJzZXIKLSVuYW1lLXByZWZpeD0icHAiCi0lcGFy
c2UtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9Ci0lbGV4LXBhcmFtIHtDb250ZXh0ICpjb250ZXh0
fQotCi0lewotc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4
dCk7Ci1zdGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJl
YXNvbik7Ci0lfQotCi0ldG9rZW4gVE9LX0NPTlNUX0lOVAotJWxlZnQgVE9LX09QX09SCi0lbGVm
dCBUT0tfT1BfQU5ECi0lbGVmdCAnfCcKLSVsZWZ0ICdeJwotJWxlZnQgJyYnCi0lbGVmdCBUT0tf
T1BfRVEgVE9LX09QX05FCi0lbGVmdCAnPCcgJz4nIFRPS19PUF9MRSBUT0tfT1BfR0UKLSVsZWZ0
IFRPS19PUF9MRUZUIFRPS19PUF9SSUdIVAotJWxlZnQgJysnICctJwotJWxlZnQgJyonICcvJyAn
JScKLSVyaWdodCBUT0tfVU5BUlkKLQotJSUKLQotaW5wdXQKLSAgICA6IGV4cHJlc3Npb24gewot
ICAgICAgICAqKGNvbnRleHQtPnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCQxKTsKLSAgICAg
ICAgWVlBQ0NFUFQ7Ci0gICAgfQotOwotCi1leHByZXNzaW9uCi0gICAgOiBUT0tfQ09OU1RfSU5U
Ci0gICAgfCBleHByZXNzaW9uIFRPS19PUF9PUiBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAk
MSB8fCAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uIFRPS19PUF9BTkQgZXhwcmVzc2lvbiB7
Ci0gICAgICAgICQkID0gJDEgJiYgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnfCcgZXhw
cmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgfCAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9u
ICdeJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSBeICQzOwotICAgIH0KLSAgICB8IGV4
cHJlc3Npb24gJyYnIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxICYgJDM7Ci0gICAgfQot
ICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTkUgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEg
IT0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfRVEgZXhwcmVzc2lvbiB7Ci0g
ICAgICAgICQkID0gJDEgPT0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfR0Ug
ZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPj0gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVz
c2lvbiBUT0tfT1BfTEUgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPD0gJDM7Ci0gICAg
fQotICAgIHwgZXhwcmVzc2lvbiAnPicgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPiAk
MzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICc8JyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQg
PSAkMSA8ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gVE9LX09QX1JJR0hUIGV4cHJlc3Np
b24gewotICAgICAgICAkJCA9ICQxID4+ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gVE9L
X09QX0xFRlQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPDwgJDM7Ci0gICAgfQotICAg
IHwgZXhwcmVzc2lvbiAnLScgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgLSAkMzsKLSAg
ICB9Ci0gICAgfCBleHByZXNzaW9uICcrJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSAr
ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyUnIGV4cHJlc3Npb24gewotICAgICAgICBp
ZiAoJDMgPT0gMCkgewotICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAg
ICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOwotICAgICAgICAgICAgc3RkOjpz
dHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7
Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJCQg
PSAkMSAlICQzOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnLycgZXhwcmVz
c2lvbiB7Ci0gICAgICAgIGlmICgkMyA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZ3N0
cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAvICIgPDwgJDM7Ci0g
ICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwotICAgICAgICAgICAg
Y29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZ
X1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZQUJPUlQ7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAkJCA9ICQxIC8gJDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBleHBy
ZXNzaW9uICcqJyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSAqICQzOwotICAgIH0KLSAg
ICB8ICchJyBleHByZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7Ci0gICAgICAgICQkID0gISAkMjsK
LSAgICB9Ci0gICAgfCAnficgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgewotICAgICAgICAk
JCA9IH4gJDI7Ci0gICAgfQotICAgIHwgJy0nIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsK
LSAgICAgICAgJCQgPSAtICQyOwotICAgIH0KLSAgICB8ICcrJyBleHByZXNzaW9uICVwcmVjIFRP
S19VTkFSWSB7Ci0gICAgICAgICQkID0gKyAkMjsKLSAgICB9Ci0gICAgfCAnKCcgZXhwcmVzc2lv
biAnKScgewotICAgICAgICAkJCA9ICQyOwotICAgIH0KLTsKLQotJSUKLQotaW50IHl5bGV4KFlZ
U1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KQotewotICAgIGludCB0eXBlID0gMDsKLQot
ICAgIHBwOjpUb2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKLSAgICBzd2l0Y2ggKHRva2Vu
LT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6Ci0gICAgICAg
ICpsdmFscCA9IHN0cnRvbGwodG9rZW4tPnZhbHVlLmNfc3RyKCksIE5VTEwsIDApOwotICAgICAg
ICB0eXBlID0gVE9LX0NPTlNUX0lOVDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9PUjogdHlwZSA9IFRPS19PUF9PUjsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfQU5EOiB0eXBlID0gVE9LX09QX0FORDsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfTkU6IHR5cGUgPSBUT0tfT1BfTkU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0VROiB0eXBlID0gVE9LX09QX0VROyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9HRTogdHlwZSA9IFRPS19PUF9HRTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfTEU6IHR5cGUgPSBUT0tfT1BfTEU7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9Q
X1JJR0hUOiB0eXBlID0gVE9LX09QX1JJR0hUOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9MRUZUOiB0eXBlID0gVE9LX09QX0xFRlQ7IGJyZWFrOwotICAgICAgY2FzZSAnfCc6IHR5
cGUgPSAnfCc7IGJyZWFrOwotICAgICAgY2FzZSAnXic6IHR5cGUgPSAnXic7IGJyZWFrOwotICAg
ICAgY2FzZSAnJic6IHR5cGUgPSAnJic7IGJyZWFrOwotICAgICAgY2FzZSAnPic6IHR5cGUgPSAn
Pic7IGJyZWFrOwotICAgICAgY2FzZSAnPCc6IHR5cGUgPSAnPCc7IGJyZWFrOwotICAgICAgY2Fz
ZSAnLSc6IHR5cGUgPSAnLSc7IGJyZWFrOwotICAgICAgY2FzZSAnKyc6IHR5cGUgPSAnKyc7IGJy
ZWFrOwotICAgICAgY2FzZSAnJSc6IHR5cGUgPSAnJSc7IGJyZWFrOwotICAgICAgY2FzZSAnLyc6
IHR5cGUgPSAnLyc7IGJyZWFrOwotICAgICAgY2FzZSAnKic6IHR5cGUgPSAnKic7IGJyZWFrOwot
ICAgICAgY2FzZSAnISc6IHR5cGUgPSAnISc7IGJyZWFrOwotICAgICAgY2FzZSAnfic6IHR5cGUg
PSAnfic7IGJyZWFrOwotICAgICAgY2FzZSAnKCc6IHR5cGUgPSAnKCc7IGJyZWFrOwotICAgICAg
Y2FzZSAnKSc6IHR5cGUgPSAnKSc7IGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiBicmVhazsKLSAg
ICB9Ci0KLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJyZW50IG9u
ZSBpcyB2YWxpZC4KLSAgICBpZiAodHlwZSAhPSAwKSBjb250ZXh0LT5sZXhlci0+bGV4KHRva2Vu
KTsKLQotICAgIHJldHVybiB0eXBlOwotfQotCi12b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4
dCwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWFzb24pOwotfQotCi1uYW1lc3BhY2UgcHAgewotCi1FeHBy
ZXNzaW9uUGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKExleGVyKiBsZXhlciwgRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzKSA6Ci0gICAgbUxleGVyKGxleGVyKSwKLSAgICBtRGlhZ25vc3RpY3MoZGlh
Z25vc3RpY3MpCi17Ci19Ci0KLWJvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRv
a2VuLCBpbnQqIHJlc3VsdCkKLXsKLSAgICBDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5k
aWFnbm9zdGljcyA9IG1EaWFnbm9zdGljczsKLSAgICBjb250ZXh0LmxleGVyID0gbUxleGVyOwot
ICAgIGNvbnRleHQudG9rZW4gPSB0b2tlbjsKLSAgICBjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDsK
LSAgICBpbnQgcmV0ID0geXlwYXJzZSgmY29udGV4dCk7Ci0gICAgc3dpdGNoIChyZXQpCi0gICAg
ewotICAgICAgY2FzZSAwOgotICAgICAgY2FzZSAxOgotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09G
X01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBk
ZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0ID09IDA7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjM2RlOTVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiSW5wdXQuaCIK
LQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPGNz
dHJpbmc+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1JbnB1dDo6SW5wdXQoKSA6IG1Db3VudCgwKSwg
bVN0cmluZygwKQotewotfQotCi1JbnB1dDo6SW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKSA6Ci0gICAgbUNvdW50KGNvdW50KSwK
LSAgICBtU3RyaW5nKHN0cmluZykKLXsKLSAgICBhc3NlcnQobUNvdW50ID49IDApOwotICAgIG1M
ZW5ndGgucmVzZXJ2ZShtQ291bnQpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNvdW50OyAr
K2kpCi0gICAgewotICAgICAgICBpbnQgbGVuID0gbGVuZ3RoID8gbGVuZ3RoW2ldIDogLTE7Ci0g
ICAgICAgIG1MZW5ndGgucHVzaF9iYWNrKGxlbiA8IDAgPyBzdHJsZW4obVN0cmluZ1tpXSkgOiBs
ZW4pOwotICAgIH0KLX0KLQotaW50IElucHV0OjpyZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUp
Ci17Ci0gICAgaW50IG5SZWFkID0gMDsKLSAgICB3aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYg
KG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCi0gICAgewotICAgICAgICBpbnQgc2l6ZSA9IG1M
ZW5ndGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFkTG9jLmNJbmRleDsKLSAgICAgICAgc2l6ZSA9
IHN0ZDo6bWluKHNpemUsIG1heFNpemUpOwotICAgICAgICBtZW1jcHkoYnVmICsgblJlYWQsIG1T
dHJpbmdbbVJlYWRMb2Muc0luZGV4XSArIG1SZWFkTG9jLmNJbmRleCwgc2l6ZSk7Ci0gICAgICAg
IG5SZWFkICs9IHNpemU7Ci0gICAgICAgIG1SZWFkTG9jLmNJbmRleCArPSBzaXplOwotCi0gICAg
ICAgIC8vIEFkdmFuY2Ugc3RyaW5nIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBjdXJyZW50IHN0
cmluZy4KLSAgICAgICAgaWYgKG1SZWFkTG9jLmNJbmRleCA9PSBtTGVuZ3RoW21SZWFkTG9jLnNJ
bmRleF0pCi0gICAgICAgIHsKLSAgICAgICAgICAgICsrbVJlYWRMb2Muc0luZGV4OwotICAgICAg
ICAgICAgbVJlYWRMb2MuY0luZGV4ID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
blJlYWQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNzM0Yi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5k
ZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBS
T0NFU1NPUl9JTlBVVF9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgcHAKLXsK
LQotLy8gSG9sZHMgYW5kIHJlYWRzIGlucHV0IGZvciBMZXhlci4KLWNsYXNzIElucHV0Ci17Ci0g
IHB1YmxpYzoKLSAgICBJbnB1dCgpOwotICAgIElucHV0KGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci0KLSAgICBpbnQgY291bnQoKSBj
b25zdCB7IHJldHVybiBtQ291bnQ7IH0KLSAgICBjb25zdCBjaGFyKiBzdHJpbmcoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtU3RyaW5nW2luZGV4XTsgfQotICAgIGludCBsZW5ndGgoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtTGVuZ3RoW2luZGV4XTsgfQotCi0gICAgaW50IHJlYWQoY2hh
ciogYnVmLCBpbnQgbWF4U2l6ZSk7Ci0KLSAgICBzdHJ1Y3QgTG9jYXRpb24KLSAgICB7Ci0gICAg
ICAgIGludCBzSW5kZXg7ICAvLyBTdHJpbmcgaW5kZXg7Ci0gICAgICAgIGludCBjSW5kZXg7ICAv
LyBDaGFyIGluZGV4LgotCi0gICAgICAgIExvY2F0aW9uKCkgOiBzSW5kZXgoMCksIGNJbmRleCgw
KSB7IH0KLSAgICB9OwotICAgIGNvbnN0IExvY2F0aW9uJiByZWFkTG9jKCkgY29uc3QgeyByZXR1
cm4gbVJlYWRMb2M7IH0KLQotICBwcml2YXRlOgotICAgIC8vIElucHV0LgotICAgIGludCBtQ291
bnQ7Ci0gICAgY29uc3QgY2hhciogY29uc3QqIG1TdHJpbmc7Ci0gICAgc3RkOjp2ZWN0b3I8aW50
PiBtTGVuZ3RoOwotCi0gICAgTG9jYXRpb24gbVJlYWRMb2M7Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0xleGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M2
NjNlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9MZXhlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkxleGVyLmgiCi0KLW5hbWVzcGFjZSBwcAotewot
Ci1MZXhlcjo6fkxleGVyKCkKLXsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9M
ZXhlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTGV4ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4NWNlYS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9MZXhlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hfCi0jZGVmaW5lIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9MRVhFUl9IXwotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0
IFRva2VuOwotCi1jbGFzcyBMZXhlcgotewotICBwdWJsaWM6Ci0gICAgdmlydHVhbCB+TGV4ZXIo
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKSA9IDA7Ci19OwotCi19ICAv
LyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVSX0hf
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjJlMzA4OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIk1hY3JvLmgiCi0KLSNpbmNsdWRl
ICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotYm9vbCBNYWNybzo6ZXF1YWxzKGNvbnN0
IE1hY3JvJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSkg
JiYKLSAgICAgICAgICAgKG5hbWUgPT0gb3RoZXIubmFtZSkgJiYKLSAgICAgICAgICAgKHBhcmFt
ZXRlcnMgPT0gb3RoZXIucGFyYW1ldGVycykgJiYKLSAgICAgICAgICAgKHJlcGxhY2VtZW50cyA9
PSBvdGhlci5yZXBsYWNlbWVudHMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L01hY3JvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzAxNDku
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvTWFjcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwotI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNs
dWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3Ry
dWN0IFRva2VuOwotCi1zdHJ1Y3QgTWFjcm8KLXsKLSAgICBlbnVtIFR5cGUKLSAgICB7Ci0gICAg
ICAgIGtUeXBlT2JqLAotICAgICAgICBrVHlwZUZ1bmMKLSAgICB9OwotICAgIHR5cGVkZWYgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxUb2tlbj4gUmVwbGFjZW1lbnRzOwotCi0gICAgTWFjcm8oKSA6IHByZWRlZmluZWQoZmFsc2Up
LCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQotICAgIGJvb2wgZXF1YWxzKGNv
bnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBib29sIHByZWRlZmluZWQ7Ci0gICAgbXV0
YWJsZSBib29sIGRpc2FibGVkOwotCi0gICAgVHlwZSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5h
bWU7Ci0gICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIFJlcGxhY2VtZW50cyByZXBsYWNl
bWVudHM7Ci19OwotCi10eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNYWNybz4gTWFjcm9T
ZXQ7Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfTUFDUk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNWE3YWUuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9F
eHBhbmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLSNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0j
aW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxzc3RyZWFtPgotCi0jaW5jbHVkZSAiRGlhZ25v
c3RpY3MuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3Mg
VG9rZW5MZXhlciA6IHB1YmxpYyBMZXhlcgotewotIHB1YmxpYzoKLSAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPFRva2VuPiBUb2tlblZlY3RvcjsKLQotICAgIFRva2VuTGV4ZXIoVG9rZW5WZWN0b3Iq
IHRva2VucykKLSAgICB7Ci0gICAgICAgIHRva2Vucy0+c3dhcChtVG9rZW5zKTsKLSAgICAgICAg
bUl0ZXIgPSBtVG9rZW5zLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGxleChU
b2tlbiogdG9rZW4pCi0gICAgewotICAgICAgICBpZiAobUl0ZXIgPT0gbVRva2Vucy5lbmQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgdG9rZW4tPnJlc2V0KCk7Ci0gICAgICAgICAgICB0b2tl
bi0+dHlwZSA9IFRva2VuOjpMQVNUOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgKnRva2VuID0gKm1JdGVyKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSBw
cml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbkxleGVyKTsKLQot
ICAgIFRva2VuVmVjdG9yIG1Ub2tlbnM7Ci0gICAgVG9rZW5WZWN0b3I6OmNvbnN0X2l0ZXJhdG9y
IG1JdGVyOwotfTsKLQotTWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcihMZXhlciogbGV4ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6Ci0gICAg
bUxleGVyKGxleGVyKSwKLSAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAotICAgIG1EaWFnbm9zdGlj
cyhkaWFnbm9zdGljcykKLXsKLX0KLQotTWFjcm9FeHBhbmRlcjo6fk1hY3JvRXhwYW5kZXIoKQot
ewotICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0eSgpKSBwb3BNYWNybygpOwotfQotCi12
b2lkIE1hY3JvRXhwYW5kZXI6OmxleChUb2tlbiogdG9rZW4pCi17Ci0gICAgd2hpbGUgKHRydWUp
Ci0gICAgewotICAgICAgICBnZXRUb2tlbih0b2tlbik7Ci0KLSAgICAgICAgaWYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
aWYgKHRva2VuLT5leHBhbnNpb25EaXNhYmxlZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9r
ZW4tPnZhbHVlKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbU1hY3JvU2V0LT5lbmQoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNvbnN0IE1hY3JvJiBtYWNybyA9IGl0ZXItPnNlY29u
ZDsKLSAgICAgICAgaWYgKG1hY3JvLmRpc2FibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBJZiBhIHBhcnRpY3VsYXIgdG9rZW4gaXMgbm90IGV4cGFuZGVkLCBpdCBpcyBuZXZlciBleHBh
bmRlZC4KLSAgICAgICAgICAgIHRva2VuLT5zZXRFeHBhbnNpb25EaXNhYmxlZCh0cnVlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgobWFjcm8udHlwZSA9PSBN
YWNybzo6a1R5cGVGdW5jKSAmJiAhaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gSWYgdGhlIHRva2VuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWNybyBu
YW1lIGlzIG5vdCBhICcoJywKLSAgICAgICAgICAgIC8vIHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBi
ZSBleHBhbmRlZC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVz
aE1hY3JvKG1hY3JvLCAqdG9rZW4pOwotICAgIH0KLX0KLQotdm9pZCBNYWNyb0V4cGFuZGVyOjpn
ZXRUb2tlbihUb2tlbiogdG9rZW4pCi17Ci0gICAgaWYgKG1SZXNlcnZlVG9rZW4uZ2V0KCkpCi0g
ICAgewotICAgICAgICAqdG9rZW4gPSAqbVJlc2VydmVUb2tlbjsKLSAgICAgICAgbVJlc2VydmVU
b2tlbi5yZXNldCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRmlyc3QgcG9w
IGFsbCBlbXB0eSBtYWNybyBjb250ZXh0cy4KLSAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1w
dHkoKSAmJiBtQ29udGV4dFN0YWNrLmJhY2soKS0+ZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIHBv
cE1hY3JvKCk7Ci0gICAgfQotCi0gICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCi0gICAg
ewotICAgICAgICAqdG9rZW4gPSBtQ29udGV4dFN0YWNrLmJhY2soKS0+Z2V0KCk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1MZXhlci0+bGV4KHRva2VuKTsKLSAgICB9Ci19Ci0K
LXZvaWQgTWFjcm9FeHBhbmRlcjo6dW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4pCi17Ci0g
ICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCi0gICAgewotICAgICAgICBNYWNyb0NvbnRl
eHQqIGNvbnRleHQgPSBtQ29udGV4dFN0YWNrLmJhY2soKTsKLSAgICAgICAgY29udGV4dC0+dW5n
ZXQoKTsKLSAgICAgICAgYXNzZXJ0KGNvbnRleHQtPnJlcGxhY2VtZW50c1tjb250ZXh0LT5pbmRl
eF0gPT0gdG9rZW4pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBhc3NlcnQoIW1S
ZXNlcnZlVG9rZW4uZ2V0KCkpOwotICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KG5ldyBUb2tl
bih0b2tlbikpOwotICAgIH0KLX0KLQotYm9vbCBNYWNyb0V4cGFuZGVyOjppc05leHRUb2tlbkxl
ZnRQYXJlbigpCi17Ci0gICAgVG9rZW4gdG9rZW47Ci0gICAgZ2V0VG9rZW4oJnRva2VuKTsKLQot
ICAgIGJvb2wgbHBhcmVuID0gdG9rZW4udHlwZSA9PSAnKCc7Ci0gICAgdW5nZXRUb2tlbih0b2tl
bik7Ci0KLSAgICByZXR1cm4gbHBhcmVuOwotfQotCi1ib29sIE1hY3JvRXhwYW5kZXI6OnB1c2hN
YWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKQotewotICAg
IGFzc2VydCghbWFjcm8uZGlzYWJsZWQpOwotICAgIGFzc2VydCghaWRlbnRpZmllci5leHBhbnNp
b25EaXNhYmxlZCgpKTsKLSAgICBhc3NlcnQoaWRlbnRpZmllci50eXBlID09IFRva2VuOjpJREVO
VElGSUVSKTsKLSAgICBhc3NlcnQoaWRlbnRpZmllci52YWx1ZSA9PSBtYWNyby5uYW1lKTsKLQot
ICAgIHN0ZDo6dmVjdG9yPFRva2VuPiByZXBsYWNlbWVudHM7Ci0gICAgaWYgKCFleHBhbmRNYWNy
byhtYWNybywgaWRlbnRpZmllciwgJnJlcGxhY2VtZW50cykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIE1hY3JvIGlzIGRpc2FibGVkIGZvciBleHBhbnNpb24gdW50aWwgaXQgaXMg
cG9wcGVkIG9mZiB0aGUgc3RhY2suCi0gICAgbWFjcm8uZGlzYWJsZWQgPSB0cnVlOwotCi0gICAg
TWFjcm9Db250ZXh0KiBjb250ZXh0ID0gbmV3IE1hY3JvQ29udGV4dDsKLSAgICBjb250ZXh0LT5t
YWNybyA9ICZtYWNybzsKLSAgICBjb250ZXh0LT5yZXBsYWNlbWVudHMuc3dhcChyZXBsYWNlbWVu
dHMpOwotICAgIG1Db250ZXh0U3RhY2sucHVzaF9iYWNrKGNvbnRleHQpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKCkKLXsKLSAgICBhc3NlcnQo
IW1Db250ZXh0U3RhY2suZW1wdHkoKSk7Ci0KLSAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBt
Q29udGV4dFN0YWNrLmJhY2soKTsKLSAgICBtQ29udGV4dFN0YWNrLnBvcF9iYWNrKCk7Ci0KLSAg
ICBhc3NlcnQoY29udGV4dC0+ZW1wdHkoKSk7Ci0gICAgYXNzZXJ0KGNvbnRleHQtPm1hY3JvLT5k
aXNhYmxlZCk7Ci0gICAgY29udGV4dC0+bWFjcm8tPmRpc2FibGVkID0gZmFsc2U7Ci0gICAgZGVs
ZXRlIGNvbnRleHQ7Ci19Ci0KLWJvb2wgTWFjcm9FeHBhbmRlcjo6ZXhwYW5kTWFjcm8oY29uc3Qg
TWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tl
biYgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpCi17Ci0gICAgcmVwbGFjZW1lbnRzLT5jbGVhcigpOwot
ICAgIGlmIChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZU9iaikKLSAgICB7Ci0gICAgICAgIHJl
cGxhY2VtZW50cy0+YXNzaWduKG1hY3JvLnJlcGxhY2VtZW50cy5iZWdpbigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZW5kKCkpOwotCi0gICAgICAg
IGlmIChtYWNyby5wcmVkZWZpbmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0aWMgY29u
c3Qgc3RkOjpzdHJpbmcga0xpbmUgPSAiX19MSU5FX18iOwotICAgICAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6c3RyaW5nIGtGaWxlID0gIl9fRklMRV9fIjsKLQotICAgICAgICAgICAgYXNzZXJ0
KHJlcGxhY2VtZW50cy0+c2l6ZSgpID09IDEpOwotICAgICAgICAgICAgVG9rZW4mIHJlcGwgPSBy
ZXBsYWNlbWVudHMtPmZyb250KCk7Ci0gICAgICAgICAgICBpZiAobWFjcm8ubmFtZSA9PSBrTGlu
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJl
YW07Ci0gICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24ubGluZTsK
LSAgICAgICAgICAgICAgICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobWFjcm8ubmFtZSA9PSBrRmlsZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAg
ICAgICAgc3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24uZmlsZTsKLSAgICAgICAgICAgICAg
ICByZXBsLnZhbHVlID0gc3RyZWFtLnN0cigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGFzc2VydChtYWNyby50eXBlID09IE1hY3Jv
OjprVHlwZUZ1bmMpOwotICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4gYXJnczsKLSAgICAg
ICAgYXJncy5yZXNlcnZlKG1hY3JvLnBhcmFtZXRlcnMuc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFj
b2xsZWN0TWFjcm9BcmdzKG1hY3JvLCBpZGVudGlmaWVyLCAmYXJncykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmVwbGFjZU1hY3JvUGFyYW1zKG1hY3JvLCBhcmdzLCBy
ZXBsYWNlbWVudHMpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVwbGFj
ZW1lbnRzLT5zaXplKCk7ICsraSkKLSAgICB7Ci0gICAgICAgIFRva2VuJiByZXBsID0gcmVwbGFj
ZW1lbnRzLT5hdChpKTsKLSAgICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSByZXBsYWNlbWVudCBsaXN0IGluaGVyaXRzIHRo
ZSBwYWRkaW5nCi0gICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG9mIHRoZSBpZGVudGlmaWVyIHRv
a2VuLgotICAgICAgICAgICAgcmVwbC5zZXRBdFN0YXJ0T2ZMaW5lKGlkZW50aWZpZXIuYXRTdGFy
dE9mTGluZSgpKTsKLSAgICAgICAgICAgIHJlcGwuc2V0SGFzTGVhZGluZ1NwYWNlKGlkZW50aWZp
ZXIuaGFzTGVhZGluZ1NwYWNlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJlcGwubG9jYXRpb24g
PSBpZGVudGlmaWVyLmxvY2F0aW9uOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBNYWNyb0V4cGFuZGVyOjpjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYgaWRlbnRpZmll
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxNYWNy
b0FyZz4qIGFyZ3MpCi17Ci0gICAgVG9rZW4gdG9rZW47Ci0gICAgZ2V0VG9rZW4oJnRva2VuKTsK
LSAgICBhc3NlcnQodG9rZW4udHlwZSA9PSAnKCcpOwotCi0gICAgYXJncy0+cHVzaF9iYWNrKE1h
Y3JvQXJnKCkpOwotICAgIGZvciAoaW50IG9wZW5QYXJlbnMgPSAxOyBvcGVuUGFyZW5zICE9IDA7
ICkKLSAgICB7Ci0gICAgICAgIGdldFRva2VuKCZ0b2tlbik7Ci0KLSAgICAgICAgaWYgKHRva2Vu
LnR5cGUgPT0gVG9rZW46OkxBU1QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50
aWZpZXIudmFsdWUpOwotICAgICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9GIHRva2VuLgotICAg
ICAgICAgICAgdW5nZXRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGlzQXJnID0gZmFsc2U7IC8vIFRydWUgaWYgdG9rZW4g
aXMgcGFydCBvZiB0aGUgY3VycmVudCBhcmd1bWVudC4KLSAgICAgICAgc3dpdGNoICh0b2tlbi50
eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAnKCc6Ci0gICAgICAgICAgICArK29wZW5Q
YXJlbnM7Ci0gICAgICAgICAgICBpc0FyZyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlICcpJzoKLSAgICAgICAgICAgIC0tb3BlblBhcmVuczsKLSAgICAgICAgICAg
IGlzQXJnID0gb3BlblBhcmVucyAhPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSAnLCc6Ci0gICAgICAgICAgICAvLyBUaGUgaW5kaXZpZHVhbCBhcmd1bWVudHMgYXJlIHNl
cGFyYXRlZCBieSBjb21tYSB0b2tlbnMsIGJ1dAotICAgICAgICAgICAgLy8gdGhlIGNvbW1hIHRv
a2VucyBiZXR3ZWVuIG1hdGNoaW5nIGlubmVyIHBhcmVudGhlc2VzIGRvIG5vdAotICAgICAgICAg
ICAgLy8gc2VwZXJhdGUgYXJndW1lbnRzLgotICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnMgPT0g
MSkgYXJncy0+cHVzaF9iYWNrKE1hY3JvQXJnKCkpOwotICAgICAgICAgICAgaXNBcmcgPSBvcGVu
UGFyZW5zICE9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgaXNBcmcgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzQXJnKQotICAgICAgICB7Ci0gICAgICAgICAgICBNYWNyb0FyZyYgYXJnID0g
YXJncy0+YmFjaygpOwotICAgICAgICAgICAgLy8gSW5pdGlhbCB3aGl0ZXNwYWNlIGlzIG5vdCBw
YXJ0IG9mIHRoZSBhcmd1bWVudC4KLSAgICAgICAgICAgIGlmIChhcmcuZW1wdHkoKSkgdG9rZW4u
c2V0SGFzTGVhZGluZ1NwYWNlKGZhbHNlKTsKLSAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9r
ZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgTWFjcm86OlBhcmFtZXRlcnMmIHBh
cmFtcyA9IG1hY3JvLnBhcmFtZXRlcnM7Ci0gICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgZW1w
dHkgYXJndW1lbnQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gbm8gYXJndW1lbnQuCi0gICAgaWYgKHBh
cmFtcy5lbXB0eSgpICYmIChhcmdzLT5zaXplKCkgPT0gMSkgJiYgYXJncy0+ZnJvbnQoKS5lbXB0
eSgpKQotICAgIHsKLSAgICAgICAgYXJncy0+Y2xlYXIoKTsKLSAgICB9Ci0gICAgLy8gVmFsaWRh
dGUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCi0gICAgaWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJh
bXMuc2l6ZSgpKQotICAgIHsKLSAgICAgICAgRGlhZ25vc3RpY3M6OklEIGlkID0gYXJncy0+c2l6
ZSgpIDwgbWFjcm8ucGFyYW1ldGVycy5zaXplKCkgPwotICAgICAgICAgICAgRGlhZ25vc3RpY3M6
Ok1BQ1JPX1RPT19GRVdfQVJHUyA6Ci0gICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9P
X01BTllfQVJHUzsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoaWQsIGlkZW50aWZpZXIu
bG9jYXRpb24sIGlkZW50aWZpZXIudmFsdWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gUHJlLWV4cGFuZCBlYWNoIGFyZ3VtZW50IGJlZm9yZSBzdWJzdGl0dXRpb24u
Ci0gICAgLy8gVGhpcyBzdGVwIGV4cGFuZHMgZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFsbHkgYmVm
b3JlIHRoZXkgYXJlCi0gICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgbWFjcm8gYm9keS4KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3MtPnNpemUoKTsgKytpKQotICAgIHsKLSAgICAgICAg
TWFjcm9BcmcmIGFyZyA9IGFyZ3MtPmF0KGkpOwotICAgICAgICBUb2tlbkxleGVyIGxleGVyKCZh
cmcpOwotICAgICAgICBNYWNyb0V4cGFuZGVyIGV4cGFuZGVyKCZsZXhlciwgbU1hY3JvU2V0LCBt
RGlhZ25vc3RpY3MpOwotCi0gICAgICAgIGFyZy5jbGVhcigpOwotICAgICAgICBleHBhbmRlci5s
ZXgoJnRva2VuKTsKLSAgICAgICAgd2hpbGUgKHRva2VuLnR5cGUgIT0gVG9rZW46OkxBU1QpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOwotICAgICAgICAgICAg
ZXhwYW5kZXIubGV4KCZ0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1hY3JvUGFyYW1zKGNvbnN0IE1hY3Jv
JiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVwbGFjZW1lbnRzKQotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1lbnRzLnNpemUoKTsgKytpKQotICAgIHsK
LSAgICAgICAgY29uc3QgVG9rZW4mIHJlcGwgPSBtYWNyby5yZXBsYWNlbWVudHNbaV07Ci0gICAg
ICAgIGlmIChyZXBsLnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUT0RPKGFsb2twKTogT3B0aW1pemUgdGhpcy4K
LSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2ggZm9yIG1hY3JvIHBhcmFtcyBl
dmVyeSB0aW1lLgotICAgICAgICAvLyBUaGUgcGFyYW0gaW5kZXggY2FuIGJlIGNhY2hlZCB3aXRo
IHRoZSByZXBsYWNlbWVudCB0b2tlbi4KLSAgICAgICAgTWFjcm86OlBhcmFtZXRlcnM6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBzdGQ6OmZpbmQoCi0gICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJz
LmJlZ2luKCksIG1hY3JvLnBhcmFtZXRlcnMuZW5kKCksIHJlcGwudmFsdWUpOwotICAgICAgICBp
ZiAoaXRlciA9PSBtYWNyby5wYXJhbWV0ZXJzLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXBsYWNlbWVudHMtPnB1c2hfYmFjayhyZXBsKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGlBcmcgPSBzdGQ6OmRpc3RhbmNlKG1hY3JvLnBh
cmFtZXRlcnMuYmVnaW4oKSwgaXRlcik7Ci0gICAgICAgIGNvbnN0IE1hY3JvQXJnJiBhcmcgPSBh
cmdzW2lBcmddOwotICAgICAgICBpZiAoYXJnLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHNpemVfdCBpUmVwbCA9IHJlcGxhY2Vt
ZW50cy0+c2l6ZSgpOwotICAgICAgICByZXBsYWNlbWVudHMtPmluc2VydChyZXBsYWNlbWVudHMt
PmVuZCgpLCBhcmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsKLSAgICAgICAgLy8gVGhlIHJlcGxhY2Vt
ZW50IHRva2VuIGluaGVyaXRzIHBhZGRpbmcgcHJvcGVydGllcyBmcm9tCi0gICAgICAgIC8vIG1h
Y3JvIHJlcGxhY2VtZW50IHRva2VuLgotICAgICAgICByZXBsYWNlbWVudHMtPmF0KGlSZXBsKS5z
ZXRIYXNMZWFkaW5nU3BhY2UocmVwbC5oYXNMZWFkaW5nU3BhY2UoKSk7Ci0gICAgfQotfQotCi19
ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTA0ZWJhLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01h
Y3JvRXhwYW5kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXwotI2Rl
ZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KLQotI2luY2x1ZGUg
PG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJMZXhlci5oIgotI2luY2x1
ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0K
LWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBNYWNyb0V4cGFuZGVyIDogcHVibGljIExleGVy
Ci17Ci0gIHB1YmxpYzoKLSAgICBNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwgTWFjcm9TZXQq
IG1hY3JvU2V0LCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOwotICAgIHZpcnR1YWwgfk1hY3Jv
RXhwYW5kZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKLQotICBw
cml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNYWNyb0V4cGFuZGVyKTsK
LQotICAgIHZvaWQgZ2V0VG9rZW4oVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHVuZ2V0VG9rZW4o
Y29uc3QgVG9rZW4mIHRva2VuKTsKLSAgICBib29sIGlzTmV4dFRva2VuTGVmdFBhcmVuKCk7Ci0K
LSAgICBib29sIHB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sIGNvbnN0IFRva2VuJiBpZGVu
dGlmaWVyKTsKLSAgICB2b2lkIHBvcE1hY3JvKCk7Ci0KLSAgICBib29sIGV4cGFuZE1hY3JvKGNv
bnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVu
dGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNl
bWVudHMpOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gTWFjcm9Bcmc7Ci0gICAg
Ym9vbCBjb2xsZWN0TWFjcm9BcmdzKGNvbnN0IE1hY3JvJiBtYWNybywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncyk7Ci0gICAgdm9pZCByZXBsYWNlTWFj
cm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiYgYXJncywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7Ci0KLSAgICBzdHJ1Y3Qg
TWFjcm9Db250ZXh0Ci0gICAgewotICAgICAgICBjb25zdCBNYWNybyogbWFjcm87Ci0gICAgICAg
IHNpemVfdCBpbmRleDsKLSAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxhY2VtZW50czsK
LQotICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBpbmRleCgwKSB7IH0KLSAgICAg
ICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09IHJlcGxhY2VtZW50cy5zaXpl
KCk7IH0KLSAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0dXJuIHJlcGxhY2VtZW50c1tp
bmRleCsrXTsgfQotICAgICAgICB2b2lkIHVuZ2V0KCkgeyAtLWluZGV4OyB9Ci0gICAgfTsKLQot
ICAgIExleGVyKiBtTGV4ZXI7Ci0gICAgTWFjcm9TZXQqIG1NYWNyb1NldDsKLSAgICBEaWFnbm9z
dGljcyogbURpYWdub3N0aWNzOwotCi0gICAgc3RkOjphdXRvX3B0cjxUb2tlbj4gbVJlc2VydmVU
b2tlbjsKLSAgICBzdGQ6OnZlY3RvcjxNYWNyb0NvbnRleHQqPiBtQ29udGV4dFN0YWNrOwotfTsK
LQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9N
QUNST19FWFBBTkRFUl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29y
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5MDFmYS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Q
cmVwcm9jZXNzb3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0jaW5jbHVkZSAiUHJlcHJvY2Vzc29yLmgiCi0KLSNpbmNsdWRlIDxjYXNzZXJ0Pgot
I2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUg
IkRpcmVjdGl2ZVBhcnNlci5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAiTWFjcm9F
eHBhbmRlci5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0jaW5jbHVkZSAiVG9rZW5pemVyLmgiCi0K
LW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgUHJlcHJvY2Vzc29ySW1wbAotewotICAgIERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljczsKLSAgICBNYWNyb1NldCBtYWNyb1NldDsKLSAgICBUb2tlbml6
ZXIgdG9rZW5pemVyOwotICAgIERpcmVjdGl2ZVBhcnNlciBkaXJlY3RpdmVQYXJzZXI7Ci0gICAg
TWFjcm9FeHBhbmRlciBtYWNyb0V4cGFuZGVyOwotCi0gICAgUHJlcHJvY2Vzc29ySW1wbChEaWFn
bm9zdGljcyogZGlhZywKLSAgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRp
cmVjdGl2ZUhhbmRsZXIpIDoKLSAgICAgICAgZGlhZ25vc3RpY3MoZGlhZyksCi0gICAgICAgIHRv
a2VuaXplcihkaWFnKSwKLSAgICAgICAgZGlyZWN0aXZlUGFyc2VyKCZ0b2tlbml6ZXIsICZtYWNy
b1NldCwgZGlhZywgZGlyZWN0aXZlSGFuZGxlciksCi0gICAgICAgIG1hY3JvRXhwYW5kZXIoJmRp
cmVjdGl2ZVBhcnNlciwgJm1hY3JvU2V0LCBkaWFnKQotICAgIHsKLSAgICB9Ci19OwotCi1QcmVw
cm9jZXNzb3I6OlByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKQot
ewotICAgIG1JbXBsID0gbmV3IFByZXByb2Nlc3NvckltcGwoZGlhZ25vc3RpY3MsIGRpcmVjdGl2
ZUhhbmRsZXIpOwotfQotCi1QcmVwcm9jZXNzb3I6On5QcmVwcm9jZXNzb3IoKQotewotICAgIGRl
bGV0ZSBtSW1wbDsKLX0KLQotYm9vbCBQcmVwcm9jZXNzb3I6OmluaXQoaW50IGNvdW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoW10pCi17Ci0gICAgc3RhdGljIGNvbnN0
IGludCBrR0xTTFZlcnNpb24gPSAxMDA7Ci0KLSAgICAvLyBBZGQgc3RhbmRhcmQgcHJlLWRlZmlu
ZWQgbWFjcm9zLgotICAgIHByZWRlZmluZU1hY3JvKCJfX0xJTkVfXyIsIDApOwotICAgIHByZWRl
ZmluZU1hY3JvKCJfX0ZJTEVfXyIsIDApOwotICAgIHByZWRlZmluZU1hY3JvKCJfX1ZFUlNJT05f
XyIsIGtHTFNMVmVyc2lvbik7Ci0gICAgcHJlZGVmaW5lTWFjcm8oIkdMX0VTIiwgMSk7Ci0KLSAg
ICByZXR1cm4gbUltcGwtPnRva2VuaXplci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7Ci19
Ci0KLXZvaWQgUHJlcHJvY2Vzc29yOjpwcmVkZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1lLCBp
bnQgdmFsdWUpCi17Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8
PCB2YWx1ZTsKLQotICAgIFRva2VuIHRva2VuOwotICAgIHRva2VuLnR5cGUgPSBUb2tlbjo6Q09O
U1RfSU5UOwotICAgIHRva2VuLnZhbHVlID0gc3RyZWFtLnN0cigpOwotCi0gICAgTWFjcm8gbWFj
cm87Ci0gICAgbWFjcm8ucHJlZGVmaW5lZCA9IHRydWU7Ci0gICAgbWFjcm8udHlwZSA9IE1hY3Jv
OjprVHlwZU9iajsKLSAgICBtYWNyby5uYW1lID0gbmFtZTsKLSAgICBtYWNyby5yZXBsYWNlbWVu
dHMucHVzaF9iYWNrKHRva2VuKTsKLQotICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3Jv
OwotfQotCi12b2lkIFByZXByb2Nlc3Nvcjo6bGV4KFRva2VuKiB0b2tlbikKLXsKLSAgICBib29s
IHZhbGlkVG9rZW4gPSBmYWxzZTsKLSAgICB3aGlsZSAoIXZhbGlkVG9rZW4pCi0gICAgewotICAg
ICAgICBtSW1wbC0+bWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwotICAgICAgICBzd2l0Y2ggKHRv
a2VuLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSByZXR1
cm5pbmcgaW50ZXJuYWwgcHJlcHJvY2Vzc2luZyB0b2tlbnMuCi0gICAgICAgICAgLy8gQ29udmVy
dCBwcmVwcm9jZXNzaW5nIHRva2VucyB0byBjb21waWxlciB0b2tlbnMgb3IgcmVwb3J0Ci0gICAg
ICAgICAgLy8gZGlhZ25vc3RpY3MuCi0gICAgICAgICAgY2FzZSBUb2tlbjo6UFBfSEFTSDoKLSAg
ICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIFRva2VuOjpQUF9OVU1CRVI6Ci0gICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9OVU1CRVIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRva2VuOjpQUF9PVEhFUjoKLSAgICAgICAgICAg
IG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0NIQVJBQ1RF
UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJv
Y2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9QcmVwcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZl
MzViMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQ
Uk9DRVNTT1JfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9I
XwotCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERp
YWdub3N0aWNzOwotY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKLXN0cnVjdCBQcmVwcm9jZXNzb3JJ
bXBsOwotc3RydWN0IFRva2VuOwotCi1jbGFzcyBQcmVwcm9jZXNzb3IKLXsKLSAgcHVibGljOgot
ICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MsIERpcmVjdGl2ZUhhbmRs
ZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOwotICAgIH5QcmVwcm9jZXNzb3IoKTsKLQotICAgIC8vIGNv
dW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGFuZCBs
ZW5ndGggYXJyYXlzLgotICAgIC8vIHN0cmluZzogc3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50
ZXJzIHRvIHN0cmluZ3MuCi0gICAgLy8gbGVuZ3RoOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2Ygc3Ry
aW5nIGxlbmd0aHMuCi0gICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEwsIGVhY2ggc3RyaW5nIGlzIGFz
c3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgotICAgIC8vIElmIGxlbmd0aCBpcyBhIHZhbHVl
IG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKLSAgICAv
LyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMg
b2Ygc3RyaW5nLgotICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgbGVuZ3RoIGFycmF5IG1heSBj
b250YWluIHRoZSBsZW5ndGggb2YgdGhlCi0gICAgLy8gY29ycmVzcG9uZGluZyBzdHJpbmcgb3Ig
YSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmcKLSAgICAvLyBp
cyBudWxsIHRlcm1pbmF0ZWQuCi0gICAgYm9vbCBpbml0KGludCBjb3VudCwgY29uc3QgY2hhciog
Y29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Ci0gICAgLy8gQWRkcyBhIHByZS1k
ZWZpbmVkIG1hY3JvLgotICAgIHZvaWQgcHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwg
aW50IHZhbHVlKTsKLQotICAgIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7Ci0KLSAgcHJpdmF0ZToK
LSAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJlcHJvY2Vzc29yKTsKLQotICAgIFBy
ZXByb2Nlc3NvckltcGwqIG1JbXBsOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291
cmNlTG9jYXRpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDY5ODI2MTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRpb24uaAorKysgL2Rldi9udWxsCkBA
IC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9TT1VSQ0VfTE9DQVRJT05fSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NP
VVJDRV9MT0NBVElPTl9IXwotCi1uYW1lc3BhY2UgcHAKLXsKLQotc3RydWN0IFNvdXJjZUxvY2F0
aW9uCi17Ci0gICAgU291cmNlTG9jYXRpb24oKSA6IGZpbGUoMCksIGxpbmUoMCkgeyB9Ci0gICAg
U291cmNlTG9jYXRpb24oaW50IGYsIGludCBsKSA6IGZpbGUoZiksIGxpbmUobCkgeyB9Ci0KLSAg
ICBib29sIGVxdWFscyhjb25zdCBTb3VyY2VMb2NhdGlvbiYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gKGZpbGUgPT0gb3RoZXIuZmlsZSkgJiYgKGxpbmUgPT0gb3RoZXIubGlu
ZSk7Ci0gICAgfQotCi0gICAgaW50IGZpbGU7Ci0gICAgaW50IGxpbmU7Ci19OwotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxv
Y2F0aW9uJiByaHMpCi17Ci0gICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKLX0KLQotaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBTb3VyY2VMb2NhdGlvbiYgbGhzLCBjb25zdCBTb3VyY2VM
b2NhdGlvbiYgcmhzKQotewotICAgIHJldHVybiAhbGhzLmVxdWFscyhyaHMpOwotfQotCi19ICAv
LyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9M
T0NBVElPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5NjAzODBjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiVG9rZW4uaCIKLQot
bmFtZXNwYWNlIHBwCi17Ci0KLXZvaWQgVG9rZW46OnJlc2V0KCkKLXsKLSAgICB0eXBlID0gMDsK
LSAgICBmbGFncyA9IDA7Ci0gICAgbG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOwotICAgIHZh
bHVlLmNsZWFyKCk7Ci19Ci0KLWJvb2wgVG9rZW46OmVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCi0gICAgICAgICAg
IChmbGFncyA9PSBvdGhlci5mbGFncykgJiYKLSAgICAgICAgICAgKGxvY2F0aW9uID09IG90aGVy
LmxvY2F0aW9uKSAmJgotICAgICAgICAgICAodmFsdWUgPT0gb3RoZXIudmFsdWUpOwotfQotCi12
b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5lKGJvb2wgc3RhcnQpCi17Ci0gICAgaWYgKHN0YXJ0
KQotICAgICAgICBmbGFncyB8PSBBVF9TVEFSVF9PRl9MSU5FOwotICAgIGVsc2UKLSAgICAgICAg
ZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJTkU7Ci19Ci0KLXZvaWQgVG9rZW46OnNldEhhc0xlYWRp
bmdTcGFjZShib29sIHNwYWNlKQotewotICAgIGlmIChzcGFjZSkKLSAgICAgICAgZmxhZ3MgfD0g
SEFTX0xFQURJTkdfU1BBQ0U7Ci0gICAgZWxzZQotICAgICAgICBmbGFncyAmPSB+SEFTX0xFQURJ
TkdfU1BBQ0U7Ci19Ci0KLXZvaWQgVG9rZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlz
YWJsZSkKLXsKLSAgICBpZiAoZGlzYWJsZSkKLSAgICAgICAgZmxhZ3MgfD0gRVhQQU5TSU9OX0RJ
U0FCTEVEOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3MgJj0gfkVYUEFOU0lPTl9ESVNBQkxFRDsK
LX0KLQotc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBU
b2tlbiYgdG9rZW4pCi17Ci0gICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFjZSgpKQotICAgICAg
ICBvdXQgPDwgIiAiOwotCi0gICAgb3V0IDw8IHRva2VuLnZhbHVlOwotICAgIHJldHVybiBvdXQ7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzEwMjEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1RPS0VOX0hfCi0KLSNpbmNsdWRlIDxvc3RyZWFtPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2lu
Y2x1ZGUgIlNvdXJjZUxvY2F0aW9uLmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgVG9r
ZW4KLXsKLSAgICBlbnVtIFR5cGUKLSAgICB7Ci0gICAgICAgIExBU1QgPSAwLCAgLy8gRU9GLgot
Ci0gICAgICAgIElERU5USUZJRVIgPSAyNTgsCi0KLSAgICAgICAgQ09OU1RfSU5ULAotICAgICAg
ICBDT05TVF9GTE9BVCwKLQotICAgICAgICBPUF9JTkMsCi0gICAgICAgIE9QX0RFQywKLSAgICAg
ICAgT1BfTEVGVCwKLSAgICAgICAgT1BfUklHSFQsCi0gICAgICAgIE9QX0xFLAotICAgICAgICBP
UF9HRSwKLSAgICAgICAgT1BfRVEsCi0gICAgICAgIE9QX05FLAotICAgICAgICBPUF9BTkQsCi0g
ICAgICAgIE9QX1hPUiwKLSAgICAgICAgT1BfT1IsCi0gICAgICAgIE9QX0FERF9BU1NJR04sCi0g
ICAgICAgIE9QX1NVQl9BU1NJR04sCi0gICAgICAgIE9QX01VTF9BU1NJR04sCi0gICAgICAgIE9Q
X0RJVl9BU1NJR04sCi0gICAgICAgIE9QX01PRF9BU1NJR04sCi0gICAgICAgIE9QX0xFRlRfQVNT
SUdOLAotICAgICAgICBPUF9SSUdIVF9BU1NJR04sCi0gICAgICAgIE9QX0FORF9BU1NJR04sCi0g
ICAgICAgIE9QX1hPUl9BU1NJR04sCi0gICAgICAgIE9QX09SX0FTU0lHTiwKLQotICAgICAgICAv
LyBQcmVwcm9jZXNzaW5nIHRva2VuIHR5cGVzLgotICAgICAgICAvLyBUaGVzZSB0eXBlcyBhcmUg
dXNlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGludGVybmFsbHkuCi0gICAgICAgIC8vIFByZXByb2Nl
c3NvciBjbGllbnRzIG11c3Qgbm90IGRlcGVuZCBvciBjaGVjayBmb3IgdGhlbS4KLSAgICAgICAg
UFBfSEFTSCwKLSAgICAgICAgUFBfTlVNQkVSLAotICAgICAgICBQUF9PVEhFUgotICAgIH07Ci0g
ICAgZW51bSBGbGFncwotICAgIHsKLSAgICAgICAgQVRfU1RBUlRfT0ZfTElORSAgID0gMSA8PCAw
LAotICAgICAgICBIQVNfTEVBRElOR19TUEFDRSAgPSAxIDw8IDEsCi0gICAgICAgIEVYUEFOU0lP
Tl9ESVNBQkxFRCA9IDEgPDwgMgotICAgIH07Ci0KLSAgICBUb2tlbigpIDogdHlwZSgwKSwgZmxh
Z3MoMCkgeyB9Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgVG9r
ZW4mIG90aGVyKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBm
aXJzdCB0b2tlbiBvbiBsaW5lLgotICAgIC8vIEl0IGRpc3JlZ2FyZHMgYW55IGxlYWRpbmcgd2hp
dGVzcGFjZS4KLSAgICBib29sIGF0U3RhcnRPZkxpbmUoKSBjb25zdCB7IHJldHVybiAoZmxhZ3Mg
JiBBVF9TVEFSVF9PRl9MSU5FKSAhPSAwOyB9Ci0gICAgdm9pZCBzZXRBdFN0YXJ0T2ZMaW5lKGJv
b2wgc3RhcnQpOwotCi0gICAgYm9vbCBoYXNMZWFkaW5nU3BhY2UoKSBjb25zdCB7IHJldHVybiAo
ZmxhZ3MgJiBIQVNfTEVBRElOR19TUEFDRSkgIT0gMDsgfQotICAgIHZvaWQgc2V0SGFzTGVhZGlu
Z1NwYWNlKGJvb2wgc3BhY2UpOwotCi0gICAgYm9vbCBleHBhbnNpb25EaXNhYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIChmbGFncyAmIEVYUEFOU0lPTl9ESVNBQkxFRCkgIT0gMDsgfQotICAgIHZvaWQg
c2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKTsKLQotICAgIGludCB0eXBlOwotICAg
IHVuc2lnbmVkIGludCBmbGFnczsKLSAgICBTb3VyY2VMb2NhdGlvbiBsb2NhdGlvbjsKLSAgICBz
dGQ6OnN0cmluZyB2YWx1ZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVG9r
ZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKLXsKLSAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMp
OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRv
a2VuJiByaHMpCi17Ci0gICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Ci19Ci0KLWV4dGVybiBz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0
b2tlbik7Ci0KLX0gIC8vIG5hbWVwc2FjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9D
RVNTT1JfVE9LRU5fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmMzZDFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQ0ICswLDAgQEAKLSNsaW5lIDE2ICIuL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmwiCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLQotCi0j
bGluZSAxMyAiLi9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAiCi0KLSNkZWZpbmUgIFlZ
X0lOVF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQg
YnkgZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9S
X1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKLSNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAw
Ci0jZGVmaW5lIEZMRVhfQkVUQQotI2VuZGlmCi0KLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBs
YXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KLQotLyogYmVn
aW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyog
ZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KLQotLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5p
dGlvbnMgKi8KLQotI2lmbmRlZiBGTEVYSU5UX0gKLSNkZWZpbmUgRkxFWElOVF9ICi0KLS8qIEM5
OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBu
b3QuICovCi0KLSNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lP
Tl9fID49IDE5OTkwMUwKLQotLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNS
T1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKLSAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAo
bWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIAotICovCi0jaWZuZGVmIF9fU1REQ19MSU1J
VF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCi0jZW5kaWYKLQotI2luY2x1
ZGUgPGludHR5cGVzLmg+Ci10eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsKLXR5cGVkZWYgdWlu
dDhfdCBmbGV4X3VpbnQ4X3Q7Ci10eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OwotdHlwZWRl
ZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsK
LXR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKLSNlbHNlCi10eXBlZGVmIHNpZ25lZCBj
aGFyIGZsZXhfaW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQgZmxleF9pbnQxNl90OwotdHlwZWRl
ZiBpbnQgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsg
Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwotdHlwZWRlZiB1bnNp
Z25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwotCi0vKiBMaW1pdHMg
b2YgaW50ZWdyYWwgdHlwZXMuICovCi0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlO
ICAgICAgICAgICAgICAgKC0xMjgpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5l
IElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMy
X01JTgotI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2Vu
ZGlmCi0jaWZuZGVmIElOVDhfTUFYCi0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEy
NykKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAg
ICAgICAoMzI3NjcpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01B
WCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0j
ZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlO
VDE2X01BWAotI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYK
LSNpZm5kZWYgVUlOVDMyX01BWAotI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0
OTY3Mjk1VSkKLSNlbmRpZgotCi0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KLQotI2lmZGVmIF9f
Y3BsdXNwbHVzCi0KLS8qIFRoZSAiY29uc3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFs
aWQuICovCi0jZGVmaW5lIFlZX1VTRV9DT05TVAotCi0jZWxzZQkvKiAhIF9fY3BsdXNwbHVzICov
Ci0KLS8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCi0jaWYg
ZGVmaW5lZCAoX19TVERDX18pCi0KLSNkZWZpbmUgWVlfVVNFX0NPTlNUCi0KLSNlbmRpZgkvKiBk
ZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCi0KLSNpZmRl
ZiBZWV9VU0VfQ09OU1QKLSNkZWZpbmUgeXljb25zdCBjb25zdAotI2Vsc2UKLSNkZWZpbmUgeXlj
b25zdAotI2VuZGlmCi0KLS8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovCi0jZGVmaW5l
IFlZX05VTEwgMAotCi0vKiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBz
aWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAotICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5
IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLAotICogd2Ugd2FudCB0byBp
bnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQotICog
ZG91YmxlIGNhc3QuCi0gKi8KLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQp
ICh1bnNpZ25lZCBjaGFyKSBjKQotCi0vKiBBbiBvcGFxdWUgcG9pbnRlci4gKi8KLSNpZm5kZWYg
WVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QK
LXR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Ci0jZW5kaWYKLQotLyogRm9yIGNvbnZlbmllbmNlLCB0
aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2YXJzIGZhciBiZWxvdykKLSAgIGFyZSBtYWNyb3Mg
aW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9yCi0j
ZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgotI2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9y
Ci0jZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVuZ19yCi0jZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4
dF9yCi0jZGVmaW5lIHl5bGluZW5vIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xp
bmVubykKLSNkZWZpbmUgeXljb2x1bW4gKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNf
Y29sdW1uKQotI2RlZmluZSB5eV9mbGV4X2RlYnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCi0KLS8q
IEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFr
ZSBhIHBhcmFtZXRlciwKLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5
IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcwotICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KLSAq
LwotI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0YXJ0ID0gMSArIDIgKgotCi0vKiBUcmFuc2xhdGUg
dGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhh
bmRlZAotICogdG8gQkVHSU4gdG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFs
aWFzIGlzIGZvciBsZXgKLSAqIGNvbXBhdGliaWxpdHkuCi0gKi8KLSNkZWZpbmUgWVlfU1RBUlQg
KCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQotI2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCi0KLS8q
IEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCi0j
ZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEp
Ci0KLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmls
ZSIuICovCi0jZGVmaW5lIFlZX05FV19GSUxFIHBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIgKQot
Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwCi0KLS8qIFNpemUgb2YgZGVmYXVsdCBp
bnB1dCBidWZmZXIuICovCi0jaWZuZGVmIFlZX0JVRl9TSVpFCi0jZGVmaW5lIFlZX0JVRl9TSVpF
IDE2Mzg0Ci0jZW5kaWYKLQotLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0
byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KLSAqLwot
I2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5
eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotI2Rl
ZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQotdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5kaWYKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZ
X1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiBzaXplX3QgeXlf
c2l6ZV90OwotI2VuZGlmCi0KLSNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKLSNkZWZp
bmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCi0jZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCi0K
LSAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCi0gICAgCi0vKiBSZXR1cm4gYWxsIGJ1dCB0
aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0u
ICovCi0jZGVmaW5lIHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyogVW5kbyBlZmZlY3Rz
IG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJn
ID0gKG4pOyBcCi0gICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLQkJ
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLQkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNF
VCBcCi0JCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJn
IC0gWVlfTU9SRV9BREo7IFwKLQkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4
dCBhZ2FpbiAqLyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLSNkZWZpbmUgdW5wdXQoYykgeXl1
bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKLQotI2lmbmRlZiBZWV9TVFJV
Q1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLXN0
cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAqeXlfaW5wdXRfZmlsZTsKLQotCWNoYXIg
Knl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwotCWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBj
dXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0JLyogU2l6ZSBvZiBpbnB1dCBi
dWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0JICogY2hhcmFjdGVy
cy4KLQkgKi8KLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLQkvKiBOdW1iZXIgb2YgY2hhcmFj
dGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgotCSAqIGNoYXJhY3Rl
cnMuCi0JICovCi0JeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLQkvKiBXaGV0aGVyIHdlICJvd24i
IHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCi0JICogYW5kIGNhbiBy
ZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KLQkgKiBkZWxl
dGUgaXQuCi0JICovCi0JaW50IHl5X2lzX291cl9idWZmZXI7Ci0KLQkvKiBXaGV0aGVyIHRoaXMg
aXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLQkgKiBpZiB3ZSdy
ZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0JICog
aW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBh
ZnRlcgotCSAqIGVhY2ggbmV3bGluZS4KLQkgKi8KLQlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0K
LQkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBh
IGxpbmUuCi0JICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBt
YXRjaCwgb3RoZXJ3aXNlCi0JICogbm90LgotCSAqLwotCWludCB5eV9hdF9ib2w7Ci0KLSAgICBp
bnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwotICAgIGludCB5eV9ic19j
b2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLSAgICAKLQkvKiBXaGV0aGVyIHRvIHRy
eSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKLQkgKiBlbmQgb2Yg
aXQuCi0JICovCi0JaW50IHl5X2ZpbGxfYnVmZmVyOwotCi0JaW50IHl5X2J1ZmZlcl9zdGF0dXM7
Ci0KLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCi0jZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwgMQot
CS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0
byBwcm9jZXNzCi0JICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcs
IHRvIGluZGljYXRlIHRoYXQgd2UKLQkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUg
aW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLQkgKiBzdGlsbCBoYXZlIGEgYnVuY2gg
b2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKLQkgKiBwb3NzaWJsZSBiYWNr
aW5nLXVwLgotCSAqCi0JICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdl
IHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHBwcmVzdGFydCgpKSwgc28gdGhhdCB0aGUg
dXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKLQkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQg
YSBuZXcgaW5wdXQgZmlsZS4KLQkgKi8KLSNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIK
LQotCX07Ci0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KLQotLyogV2Ug
cHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhl
Ci0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdl
bmVyYWwKLSAqICJzY2FubmVyIHN0YXRlIi4KLSAqCi0gKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhl
IHN0YWNrLCBvciBOVUxMLgotICovCi0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXlnLT55
eV9idWZmZXJfc3RhY2sgXAotICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IE5VTEwpCi0KLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwg
d2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKLSAqIE5VTEwgb3Igd2hl
biB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgotICovCi0jZGVmaW5l
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1
ZmZlcl9zdGFja190b3BdCi0KLXZvaWQgcHByZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NU
QVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBw
X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
Owotdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7Ci12b2lkIHBwX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RB
VEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwcG9wX2J1ZmZlcl9z
dGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXN0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZl
cl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwcF9sb2FkX2J1ZmZl
cl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwcF9pbml0X2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LSNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHBwX2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UiAseXlzY2FubmVyKQotCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgKGNoYXIgKmJh
c2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRF
IHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5
eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCAqcHBhbGxvYyAoeXlf
c2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBwcmVhbGxvYyAodm9pZCAqLHl5
X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwZnJlZSAodm9pZCAqICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBwX2NyZWF0ZV9idWZm
ZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKLQl7IFwK
LQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICBwcGVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAot
ICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIp
OyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9
IGlzX2ludGVyYWN0aXZlOyBcCi0JfQotCi0jZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCi0J
eyBcCi0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAotICAgICAgICBwcGVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAg
XAotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5u
ZXIpOyBcCi0JfSBcCi0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9i
b2w7IFwKLQl9Ci0KLSNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYXRfYm9sKQotCi0vKiBCZWdpbiB1c2VyIHNlY3QzICovCi0KLSNkZWZpbmUgcHB3cmFw
KG4pIDEKLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZ
X0NIQVI7Ci0KLXR5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7Ci0KLSNkZWZpbmUgeXl0ZXh0X3B0
ciB5eXRleHRfcgotCi1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90
cmFucyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsK
LXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0
YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4g
bWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVw
IHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLQl5eWctPnl5dGV4
dF9wdHIgPSB5eV9icDsgXAotCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAot
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCi0JKnl5X2NwID0gJ1wwJzsgXAotCXl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAzNwotI2RlZmluZSBZ
WV9FTkRfT0ZfQlVGRkVSIDM4Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNj
YW5uZXIsCi0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KLXN0cnVjdCB5eV90
cmFuc19pbmZvCi0JewotCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0JZmxleF9pbnQzMl90IHl5
X254dDsKLQl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4NF0gPQot
ICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM4LCAgIDM2LCAgIDM0
LCAgIDM1LCAgIDM1LCAgIDMzLAotICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAotICAgICAgICA5LCAgIDMzLCAgIDMzLCAgIDMz
LCAgICA4LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LCAgICA1LAotICAgICAgICA0LCAgIDM0LCAg
IDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLCAgIDIzLAotICAgICAgIDEz
LCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLCAgIDExLAot
ICAgICAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1LCAgICA4
LCAgIDMxLAotICAgICAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAgICA2LCAgIDExLCAg
IDEwLCAgIDExLCAgICAxLAotICAgICAgIDEwLCAgIDExLCAgICAwLCAgIDEwLCAgICA5LCAgIDI4
LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLAotICAgICAgIDEwLCAgIDEwLCAgICAwCi0gICAgfSA7
Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KLSAgICB7ICAgMCwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MiwgICAgMywKLSAgICAgICAgMiwgICAgMiwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMiwgICAgNSwgICAgMSwg
ICAgNiwgICAgMSwgICAgNywgICAgOCwgICAgMSwgICAgOSwKLSAgICAgICAgOSwgICAxMCwgICAx
MSwgICAgOSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNiwKLSAgICAgICAxNiwg
ICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNywgICAxNywgICAgOSwgICAgOSwgICAxOCwKLSAg
ICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMiwg
ICAyMSwKLSAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyNCwgICAyMywgICAyMywKLSAgICAgICAgOSwgICAgMSwgICAgOSwgICAyNSwgICAy
MywgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLQotICAgICAgIDIyLCAgIDIxLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LAotICAg
ICAgIDIzLCAgIDIzLCAgICA5LCAgIDI2LCAgICA5LCAgICA5LCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
Ci0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKLSAgICB9IDsKLQotc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjddID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwg
ICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKLSAg
ICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMQotICAgIH0gOwot
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4OV0gPQotICAgIHsgICAwLAot
ICAgICAgICAwLCAgICAwLCAgIDI0LCAgIDI2LCAgMTU4LCAgMTU5LCAgMTUwLCAgMTU5LCAgMTQ1
LCAgMTI4LAotICAgICAgMTU5LCAgMTEyLCAgIDIzLCAgMTU5LCAgMTExLCAgIDIxLCAgIDI1LCAg
IDMwLCAgIDI5LCAgIDM2LAotICAgICAgIDQ2LCAgIDM2LCAgMTAwLCAgIDQ1LCAgICAwLCAgIDE2
LCAgIDQ3LCAgICAwLCAgMTU5LCAgIDg0LAotICAgICAgIDY1LCAgIDczLCAgMTU5LCAgMTU5LCAg
MTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LCAgMTU5LAotICAgICAgMTU5LCAgMTU5LCAgIDYx
LCAgMTU5LCAgICAwLCAgMTU5LCAgIDczLCAgIDMyLCAgIDU2LCAgIDgzLAotICAgICAgIDk1LCAg
IDY4LCAgICAwLCAgIDMxLCAgMTU5LCAgMTU5LCAgMTU5LCAgIDE5LCAgICAwLCAgMTU5LAotICAg
ICAgMTU5LCAgMTU5LCAgMTU5LCAgICAwLCAgMTU5LCAgMTU5LCAgIDk4LCAgICAwLCAgMTEwLCAg
ICAwLAotICAgICAgICAwLCAgMTE3LCAgIDUyLCAgIDkwLCAgIDgwLCAgMTU5LCAgMTU5LCAgMTAx
LCAgIDk3LCAgMTEyLAotICAgICAgMTIwLCAgMTIzLCAgMTU5LCAgMTQwLCAgIDI4LCAgMTQ1LCAg
MTUwLCAgMTUyCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZb
ODldID0KLSAgICB7ICAgMCwKLSAgICAgICA4MywgICAgMSwgICA4NCwgICA4NCwgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAgICAgICAyMCwgICA4MywgICA4
MywgICA4MywgICA4NSwgICA4MywgICA4MywgICA4NiwgICA4MywgICA4MywKLSAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4NywgICA4MywgICA4MywgICAyMCwgICAyMCwg
ICA0NywKLSAgICAgICA1MCwgICA4OCwgICAyMSwgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4NSwgICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4NiwgICA4MywgICA4Mywg
ICA0MywgICA0MywgICA2NywgICA4NywKLSAgICAgICA0NywgICA1MCwgICA4MywgICA1MSwgICA4
OCwgICA4MywgICA4MywgICA4MywgICA2OSwgICA3MiwKLSAgICAgICA4MywgICA4MywgICAgMCwg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MwotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfbnh0WzE4Nl0gPQotICAgIHsgICAwLAotICAgICAgICA2LCAgICA3LCAg
ICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAotICAgICAgIDE2
LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAot
ICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI5LCAgIDMwLCAgIDI5
LCAgIDMwLAotICAgICAgIDM2LCAgIDM5LCAgIDU5LCAgIDMxLCAgIDYwLCAgIDMxLCAgIDQxLCAg
IDc3LCAgIDQ0LCAgIDQwLAotICAgICAgIDYxLCAgIDM3LCAgIDQ1LCAgIDQyLCAgIDQzLCAgIDQz
LCAgIDQzLCAgIDQ2LCAgIDQ3LCAgIDc2LAotICAgICAgIDQ4LCAgIDQ4LCAgIDQ5LCAgIDU0LCAg
IDU1LCAgIDUwLCAgIDUwLCAgIDUxLCAgIDUwLCAgIDUyLAotICAgICAgIDUzLCAgIDUzLCAgIDUz
LCAgIDU3LCAgIDU4LCAgIDYyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUwLAotICAgICAgIDQ5LCAg
IDQ5LCAgIDYzLCAgIDY3LCAgIDMyLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY2LCAgIDUwLAotICAg
ICAgIDUwLCAgIDY3LCAgIDY5LCAgIDY3LCAgIDY3LCAgIDUwLCAgIDY1LCAgIDcxLCAgIDcxLCAg
IDcxLAotICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDcyLCAgIDUwLCAgIDUwLCAgIDUw
LCAgIDUwLCAgIDUwLAotCi0gICAgICAgODMsICAgODMsICAgNTAsICAgNTAsICAgNTAsICAgNzMs
ICAgNzMsICAgODMsICAgODMsICAgNzQsCi0gICAgICAgNzQsICAgNzQsICAgNjcsICAgNjcsICAg
NjcsICAgODIsICAgODIsICAgODIsICAgNTYsICAgNjcsCi0gICAgICAgNzgsICAgNzgsICAgODMs
ICAgODMsICAgNzksICAgNzksICAgNzksICAgNzgsICAgNzgsICAgMzgsCi0gICAgICAgMzUsICAg
ODAsICAgODAsICAgODAsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIsCi0gICAg
ICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgNjQsICAgMzQsICAgMzMsICAgNjQsICAg
NjQsCi0gICAgICAgNzAsICAgMzIsICAgNzAsICAgNzAsICAgNzAsICAgNzUsICAgNzUsICAgODMs
ICAgIDUsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sx
ODZdID0KLSAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwgICAgNCwKLSAgICAgICAxMywg
ICAxNiwgICA4NSwgICAgMywgICAyNiwgICAgNCwgICAxNywgICA1OCwgICAxOSwgICAxNiwKLSAg
ICAgICAyNiwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyMCwg
ICA1NCwKLSAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMiwgICAyMiwgICA0OCwgICAyMCwgICAy
MCwgICAyMCwgICAyMCwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwgICAyNywg
ICA3MywgICA3MywgICA3MywgICAyMSwKLSAgICAgICA0OSwgICA0OSwgICAyNywgICA0MywgICAz
MiwgICA0MywgICA0MywgICA0MywgICAzMSwgICA0OSwKLSAgICAgICA1MiwgICA0MywgICA0Mywg
ICA0MywgICA0MywgICA0NywgICAzMCwgICA0NywgICA0NywgICA0NywKLSAgICAgICA1MiwgICA1
MiwgICA3NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA1MCwgICA1MCwKLQotICAg
ICAgIDc0LCAgIDc0LCAgIDc1LCAgIDc1LCAgIDUwLCAgIDUxLCAgIDUxLCAgIDc5LCAgIDc5LCAg
IDUxLAotICAgICAgIDUxLCAgIDUxLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDc4LCAgIDc4LCAgIDc4
LCAgIDIzLCAgIDY3LAotICAgICAgIDY5LCAgIDY5LCAgIDgwLCAgIDgwLCAgIDY5LCAgIDY5LCAg
IDY5LCAgIDcyLCAgIDcyLCAgIDE1LAotICAgICAgIDEyLCAgIDcyLCAgIDcyLCAgIDcyLCAgIDgx
LCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgyLCAgIDgyLAotICAgICAgIDg0LCAgIDg0LCAgIDg0LCAg
IDg0LCAgIDg0LCAgIDg2LCAgIDEwLCAgICA5LCAgIDg2LCAgIDg2LAotICAgICAgIDg3LCAgICA3
LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg4LCAgIDg4LCAgICA1LCAgIDgzLCAgIDgzLAotICAgICAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCi0gICAgfSA7Ci0K
LS8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNo
Ci0gKiBhbnkgdXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCi0gKi8KLSNkZWZpbmUg
UkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKLSNkZWZpbmUgeXltb3JlKCkgeXlt
b3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZAotI2RlZmluZSBZWV9NT1JFX0FESiAwCi0jZGVmaW5l
IFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKLS8qCi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi1UaGlz
IGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTIHByZXByb2Nl
c3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlcHJvY2Vzc29y
IEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMnNjeHlz
ODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBn
ZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0jaW5jbHVkZSAiVG9rZW5pemVyLmgiCi0KLSNpbmNs
dWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9f
R05VQ19fKQotLy8gVHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJv
ciBmdW5jdGlvbi4KLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5v
cmV0dXJuIgotI2VuZGlmCi0KLXR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKLXR5cGVkZWYg
cHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7Ci0KLS8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1u
IHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmluZykgbnVtYmVyLgotI2RlZmluZSB5eWZpbGVu
byB5eWNvbHVtbgotCi0jZGVmaW5lIFlZX1VTRVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCi0g
ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5ZmlsZW5v
ID0gMDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCi0gICAg
ICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7ICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQot
I2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcDo6SW5w
dXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsg
ICAgICAgICAgIFwKLSAgICAgICAgd2hpbGUgKChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291
bnQoKSkgJiYgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRl
eCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCkpKSBcCi0gICAgICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRl
eCsrKTsgICAgXAotICAgICAgICAgICAgKyt5eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5m
aWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIHNjYW5Mb2MtPmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lO
UFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCi0gICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQu
cmVhZChidWYsIG1heFNpemUpOwotCi0jZGVmaW5lIElOSVRJQUwgMAotI2RlZmluZSBDT01NRU5U
IDEKLQotI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBwOjpUb2tlbml6ZXI6OkNvbnRleHQqCi0KLS8q
IEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLwotc3Ry
dWN0IHl5Z3V0c190Ci0gICAgewotCi0gICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBi
eSBmbGV4LiAqLwotICAgIFlZX0VYVFJBX1RZUEUgeXlleHRyYV9yOwotCi0gICAgLyogVGhlIHJl
c3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRy
YW50IHNjYW5uZXIuICovCi0gICAgRklMRSAqeXlpbl9yLCAqeXlvdXRfcjsKLSAgICBzaXplX3Qg
eXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCi0gICAg
c2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCi0g
ICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFy
cmF5LiAqLwotICAgIGNoYXIgeXlfaG9sZF9jaGFyOwotICAgIHl5X3NpemVfdCB5eV9uX2NoYXJz
OwotICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKLSAgICBjaGFyICp5eV9jX2J1Zl9wOwotICAgIGlu
dCB5eV9pbml0OwotICAgIGludCB5eV9zdGFydDsKLSAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mOwotICAgIGludCB5eV9zdGFydF9zdGFja19wdHI7Ci0gICAgaW50IHl5X3N0YXJ0
X3N0YWNrX2RlcHRoOwotICAgIGludCAqeXlfc3RhcnRfc3RhY2s7Ci0gICAgeXlfc3RhdGVfdHlw
ZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19j
cG9zOwotCi0gICAgaW50IHl5bGluZW5vX3I7Ci0gICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKLQot
ICAgIGNoYXIgKnl5dGV4dF9yOwotICAgIGludCB5eV9tb3JlX2ZsYWc7Ci0gICAgaW50IHl5X21v
cmVfbGVuOwotCi0gICAgWVlTVFlQRSAqIHl5bHZhbF9yOwotCi0gICAgWVlMVFlQRSAqIHl5bGxv
Y19yOwotCi0gICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLwotCi1zdGF0aWMgaW50IHl5
X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAvKiBUaGlzIG11c3Qg
Z28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCi0gICAgICog
ZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCi0gICAgIyAgICBkZWZpbmUgeXlsdmFs
IHl5Zy0+eXlsdmFsX3IKLSAgICAKLSAgICAjICAgIGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2Nf
cgotICAgIAotaW50IHBwbGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKLQotaW50IHBwbGV4
X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVy
KTsKLQotLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgotICAgVGhlc2UgYXJlIG1hZGUg
dmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KLQot
aW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfZGVi
dWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgZGVidWdf
ZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLVlZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12b2lkIHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBF
IHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJTEUgKnBwZ2V0X2luICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9pZCBwcHNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotCi1GSUxFICpwcGdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotCi12b2lkIHBwc2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLQoteXlfc2l6ZV90IHBwZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1j
aGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotaW50IHBwZ2V0X2xpbmVu
byAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9u
dW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi1ZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlz
Y2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9w
YXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLSAgICAgICBZWUxUWVBFICpwcGdldF9sbG9j
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLSAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZ
WUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSAgICAKLS8qIE1h
Y3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmlu
aXRpb25zIGluCi0gKiBzZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAot
I2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nh
bm5lciApOwotI2Vsc2UKLWV4dGVybiBpbnQgcHB3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxl
eF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIp
OwotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0
cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lm
bmRlZiBZWV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1
dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotc3RhdGljIGludCBpbnB1dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0jZW5kaWYKLQotI2VuZGlmCi0KLS8qIEFtb3VudCBvZiBzdHVmZiB0
byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KLSNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQot
I2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKLSNlbmRpZgotCi0vKiBDb3B5IHdoYXRldmVy
IHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwotI2lmbmRl
ZiBFQ0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJp
bmcgbWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCi0gKi8KLSNk
ZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCi0jZW5kaWYKLQot
LyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFj
dGVycyByZWFkLCBvciBZWV9OVUxMLAotICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCi0gKi8K
LSNpZm5kZWYgWVlfSU5QVVQKLSNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkg
XAotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwK
LQkJeyBcCi0JCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCi0JCWZvciAoIG4gPSAw
OyBuIDwgbWF4X3NpemUgJiYgXAotCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYm
IGMgIT0gJ1xuJzsgKytuICkgXAotCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKLQkJaWYgKCBjID09
ICdcbicgKSBcCi0JCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCi0JCWlmICggYyA9PSBFT0YgJiYg
ZmVycm9yKCB5eWluICkgKSBcCi0JCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nh
bm5lciBmYWlsZWQiICk7IFwKLQkJcmVzdWx0ID0gbjsgXAotCQl9IFwKLQllbHNlIFwKLQkJeyBc
Ci0JCWVycm5vPTA7IFwKLQkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6
ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotCQkJeyBcCi0JCQlpZiggZXJybm8gIT0g
RUlOVFIpIFwKLQkJCQl7IFwKLQkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nh
bm5lciBmYWlsZWQiICk7IFwKLQkJCQlicmVhazsgXAotCQkJCX0gXAotCQkJZXJybm89MDsgXAot
CQkJY2xlYXJlcnIoeXlpbik7IFwKLQkJCX0gXAotCQl9XAotXAotCi0jZW5kaWYKLQotLyogTm8g
c2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVy
bWluYXRlKCk7IiAtCi0gKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJl
dHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKLSAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBs
YWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCi0gKi8KLSNpZm5kZWYgeXl0ZXJtaW5h
dGUKLSNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAotI2VuZGlmCi0KLS8qIE51
bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8K
LSNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgotI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNS
IDI1Ci0jZW5kaWYKLQotLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCi0jaWZuZGVmIFlZX0ZB
VEFMX0VSUk9SCi0jZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1z
ZyAsIHl5c2Nhbm5lcikKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3Ry
dWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdl
bmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRk
IHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lTX09V
UlMgMQotCi1leHRlcm4gaW50IHBwbGV4IFwKLSAgICAgICAgICAgICAgIChZWVNUWVBFICogeXls
dmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0K
LSNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5
eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIp
Ci0jZW5kaWYgLyogIVlZX0RFQ0wgKi8KLQotLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5u
aW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKLSAqIGhhdmUgYmVlbiBz
ZXQgdXAuCi0gKi8KLSNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KLSNkZWZpbmUgWVlfVVNFUl9BQ1RJ
T04KLSNlbmRpZgotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAq
LwotI2lmbmRlZiBZWV9CUkVBSwotI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNlbmRpZgotCi0j
ZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotCVlZX1VTRVJfQUNUSU9OCi0KLS8qKiBUaGUgbWFpbiBz
Y2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgotICovCi1ZWV9ERUNMCi17
Ci0JcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotCXJlZ2lzdGVyIGNo
YXIgKnl5X2NwLCAqeXlfYnA7Ci0JcmVnaXN0ZXIgaW50IHl5X2FjdDsKLSAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAvKiBMaW5l
IGNvbW1lbnQgKi8KLQotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKLQotICAgIHl5bGxvYyA9
IHl5bGxvY19wYXJhbTsKLQotCWlmICggIXl5Zy0+eXlfaW5pdCApCi0JCXsKLQkJeXlnLT55eV9p
bml0ID0gMTsKLQotI2lmZGVmIFlZX1VTRVJfSU5JVAotCQlZWV9VU0VSX0lOSVQ7Ci0jZW5kaWYK
LQotCQlpZiAoICEgeXlnLT55eV9zdGFydCApCi0JCQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmly
c3Qgc3RhcnQgc3RhdGUgKi8KLQotCQlpZiAoICEgeXlpbiApCi0JCQl5eWluID0gc3RkaW47Ci0K
LQkJaWYgKCAhIHl5b3V0ICkKLQkJCXl5b3V0ID0gc3Rkb3V0OwotCi0JCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApIHsKLQkJCXBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLQkJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9Ci0JCQkJcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZ
X0JVRl9TSVpFICx5eXNjYW5uZXIpOwotCQl9Ci0KLQkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7Ci0JCX0KLQotCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmls
ZSBpcyByZWFjaGVkICovCi0JCXsKLQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLQkJLyog
U3VwcG9ydCBvZiB5eXRleHQuICovCi0JCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0J
CS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFy
dCBvZgotCQkgKiB0aGUgY3VycmVudCBydW4uCi0JCSAqLwotCQl5eV9icCA9IHl5X2NwOwotCi0J
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwoteXlfbWF0Y2g6Ci0JCWRvCi0JCQl7
Ci0JCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsK
LQkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLQkJCQl7Ci0JCQkJeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0JCQkJeXlnLT55eV9s
YXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCQkJfQotCQkJd2hpbGUgKCB5eV9jaGtbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotCQkJ
CXsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NCApCi0JCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJCX0KLQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9u
eHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJ
Kyt5eV9jcDsKLQkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgzICk7Ci0JCXl5
X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQoteXlfZmluZF9hY3Rpb246Ci0JCXl5X2Fj
dCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKLQotCQlZWV9ET19CRUZPUkVfQUNUSU9O
OwotCi1kb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0Yg
YWN0aW9ucy4gKi8KLQotCQlzd2l0Y2ggKCB5eV9hY3QgKQotCXsgLyogYmVnaW5uaW5nIG9mIGFj
dGlvbiBzd2l0Y2ggKi8KLQkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0JCQkvKiB1bmRv
IHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLQkJCSp5eV9jcCA9IHl5Zy0+
eXlfaG9sZF9jaGFyOwotCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0J
CQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLQkJCWdv
dG8geXlfZmluZF9hY3Rpb247Ci0KLWNhc2UgMToKLVlZX1JVTEVfU0VUVVAKLQotCVlZX0JSRUFL
Ci0vKiBCbG9jayBjb21tZW50ICovCi0vKiBMaW5lIGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0g
bm90IHJldHVybmVkLiAqLwotLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUg
c3BhY2UuICovIAotY2FzZSAyOgotWVlfUlVMRV9TRVRVUAoteyBCRUdJTihDT01NRU5UKTsgfQot
CVlZX0JSRUFLCi1jYXNlIDM6Ci1ZWV9SVUxFX1NFVFVQCi0KLQlZWV9CUkVBSwotY2FzZSA0Ogot
WVlfUlVMRV9TRVRVUAotCi0JWVlfQlJFQUsKLWNhc2UgNToKLS8qIHJ1bGUgNSBjYW4gbWF0Y2gg
ZW9sICovCi1ZWV9SVUxFX1NFVFVQCi17ICsreXlsaW5lbm87IH0KLQlZWV9CUkVBSwotY2FzZSA2
OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7Ci0g
ICAgQkVHSU4oSU5JVElBTCk7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAK
LXsKLSAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vz
c29yIGRpcmVjdGl2ZXMuCi0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAgICBy
ZXR1cm4geXlleHRyYS0+bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2Vu
OjpQUF9PVEhFUjsKLX0KLQlZWV9CUkVBSwotY2FzZSA4OgotWVlfUlVMRV9TRVRVUAotewotICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpJ
REVOVElGSUVSOwotfQotCVlZX0JSRUFLCi1jYXNlIDk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OkNP
TlNUX0lOVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09O
U1RfRkxPQVQ7Ci19Ci0JWVlfQlJFQUsKLS8qIEFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7
RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICovCi0vKiBSdWxlIHRvIGNhdGNo
IGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICovCi1jYXNlIDExOgotWVlfUlVMRV9T
RVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
cHA6OlRva2VuOjpQUF9OVU1CRVI7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTI6Ci1ZWV9SVUxFX1NF
VFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX0lOQzsKLX0KLQlZWV9CUkVBSwotY2FzZSAxMzoKLVlZX1JVTEVfU0VUVVAK
LXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfREVDOwotfQotCVlZX0JSRUFLCi1jYXNlIDE0OgotWVlfUlVMRV9TRVRVUAotewot
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9MRUZUOwotfQotCVlZX0JSRUFLCi1jYXNlIDE1OgotWVlfUlVMRV9TRVRVUAotewotICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9SSUdIVDsKLX0KLQlZWV9CUkVBSwotY2FzZSAxNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
TEU7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTc6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOwot
fQotCVlZX0JSRUFLCi1jYXNlIDE4OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9FUTsKLX0KLQlZ
WV9CUkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Ci19Ci0JWVlfQlJF
QUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORDsKLX0KLQlZWV9CUkVBSwot
Y2FzZSAyMToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SOwotfQotCVlZX0JSRUFLCi1jYXNl
IDIyOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyMzoK
LVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAy
NDoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2Fz
ZSAyNToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwot
Y2FzZSAyNjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKLX0KLQlZWV9CUkVB
SwotY2FzZSAyNzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FTU0lHTjsKLX0KLQlZWV9C
UkVBSwotY2FzZSAyODoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRl
eHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Ci19Ci0J
WVlfQlJFQUsKLWNhc2UgMjk6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsK
LX0KLQlZWV9CUkVBSwotY2FzZSAzMDoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lH
TjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FT
U0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAzMjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1Jf
QVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDMzOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5
bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Ci0gICAgcmV0dXJuIHl5dGV4dFswXTsKLX0KLQlZ
WV9CUkVBSwotY2FzZSAzNDoKLVlZX1JVTEVfU0VUVVAKLXsgeXlleHRyYS0+bGVhZGluZ1NwYWNl
ID0gdHJ1ZTsgfQotCVlZX0JSRUFLCi1jYXNlIDM1OgotLyogcnVsZSAzNSBjYW4gbWF0Y2ggZW9s
ICovCi1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgKyt5eWxpbmVubzsKLSAgICB5eWx2YWwtPmFzc2ln
bigxLCAnXG4nKTsKLSAgICByZXR1cm4gJ1xuJzsKLX0KLQlZWV9CUkVBSwotY2FzZSAzNjoKLVlZ
X1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwotICAgIHJl
dHVybiBwcDo6VG9rZW46OlBQX09USEVSOwotfQotCVlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VP
RihJTklUSUFMKToKLWNhc2UgWVlfU1RBVEVfRU9GKENPTU1FTlQpOgotewotICAgIC8vIFlZX1VT
RVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBFT0YuCi0gICAgLy8gU2V0IHRo
ZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgotICAgIHBwOjpJbnB1dCogaW5wdXQg
PSAmeXlleHRyYS0+aW5wdXQ7Ci0gICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5
eWV4dHJhLT5zY2FuTG9jOwotICAgIGludCBzSW5kZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+
Y291bnQoKSAtIDEpOwotICAgIGlmIChzY2FuTG9jLT5zSW5kZXggIT0gc0luZGV4TWF4KQotICAg
IHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkg
c3RyaW5ncyBhdCB0aGUKLSAgICAgICAgLy8gZW5kIG9mIHRoZSBpbnB1dC4KLSAgICAgICAgc2Nh
bkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5kZXggPSAwOwotICAgICAgICB5
eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOwotICAgIH0KLSAgICB5eWxsb2MtPmZp
bGUgPSB5eWZpbGVubzsKLSAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsKLSAgICB5eWx2YWwt
PmNsZWFyKCk7Ci0KLSAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKLSAgICB7Ci0gICAgICAg
IHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09N
TUVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcDo6U291cmNlTG9j
YXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiIik7Ci0gICAgfQotICAgIHl5dGVybWluYXRlKCk7Ci19Ci0JWVlfQlJFQUsKLWNh
c2UgMzc6Ci1ZWV9SVUxFX1NFVFVQCi1FQ0hPOwotCVlZX0JSRUFLCi0KLQljYXNlIFlZX0VORF9P
Rl9CVUZGRVI6Ci0JCXsKLQkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5n
IHRoZSBFT0IgY2hhci4gKi8KLQkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50
KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotCQkvKiBVbmRvIHRoZSBlZmZlY3Rz
IG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0JCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFy
OwotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0KLQkJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0JCQl7Ci0JCQkv
KiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLQkJCSAq
IHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCi0JCQkgKiBqdXN0
IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAotCQkJICogcHBsZXgoKS4g
IElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0JCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVu
IFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLQkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSBy
aWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLQkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRj
aCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0JCQkgKi8KLQkJCXl5Zy0+eXlfbl9jaGFycyA9
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLQkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotCQkJfQotCi0JCS8q
IE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRp
b24KLQkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9w
IHdpbGwKLQkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNo
YXJhY3RlcgotCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0
byB0aGUKLQkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhl
IHRlc3QKLQkJICogaW4gaW5wdXQoKS4KLQkJICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkK
LQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotCQkJeXlfc3RhdGVfdHlwZSB5eV9u
ZXh0X3N0YXRlOwotCi0JCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9h
bW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0JCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0
aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0JCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2
ZQotCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0JCQkg
KiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLQkJCSAqIHdpdGgg
dGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotCQkJICogd2FudCB0byBi
dWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0JCQkgKiB3aWxsIHJ1biBtb3Jl
IHNsb3dseSkuCi0JCQkgKi8KLQotCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMo
IHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0JCQl5eV9icCA9IHl5Zy0+eXl0ZXh0
X3B0ciArIFlZX01PUkVfQURKOwotCi0JCQlpZiAoIHl5X25leHRfc3RhdGUgKQotCQkJCXsKLQkJ
CQkvKiBDb25zdW1lIHRoZSBOVUwuICovCi0JCQkJeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsK
LQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKLQkJCQlnb3RvIHl5X21hdGNo
OwotCQkJCX0KLQotCQkJZWxzZQotCQkJCXsKLQkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfY3BvczsKLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGlu
Z19zdGF0ZTsKLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwotCQkJCX0KLQkJCX0KLQotCQllbHNl
IHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotCQkJewotCQkJY2Fz
ZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCXsKLQkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZiA9IDA7Ci0KLQkJCQlpZiAoIHBwd3JhcCh5eXNjYW5uZXIgKSApCi0JCQkJCXsK
LQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCi0JCQkJCSAqIHl5X2dl
dF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0JCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5v
dyBzZXQgdXAKLQkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKLQkJCQkJ
ICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCi0JCQkJCSAqIGNhbGwgdGhlIHNj
YW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3
b3JrIC0gYW5vdGhlcgotCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgotCQkJCQkg
Ki8KLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7
Ci0KLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLQkJCQkJZ290byBkb19h
Y3Rpb247Ci0JCQkJCX0KLQotCQkJCWVsc2UKLQkJCQkJewotCQkJCQlpZiAoICEgeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotCQkJCQkJWVlfTkVXX0ZJTEU7Ci0JCQkJCX0KLQkJ
CQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotCQkJCXl5
Zy0+eXlfY19idWZfcCA9Ci0JCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRj
aGVkX3RleHQ7Ci0KLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRl
KCB5eXNjYW5uZXIgKTsKLQotCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotCQkJCXl5X2Jw
ID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0JCQkJZ290byB5eV9tYXRjaDsKLQot
CQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJeXlnLT55eV9jX2J1Zl9wID0KLQkJCQkm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKLQot
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciAp
OwotCi0JCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0JCQkJeXlfYnAgPSB5eWctPnl5dGV4
dF9wdHIgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwotCQkJfQotCQli
cmVhazsKLQkJfQotCi0JZGVmYXVsdDoKLQkJWVlfRkFUQUxfRVJST1IoCi0JCQkiZmF0YWwgZmxl
eCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0JfSAvKiBlbmQg
b2YgYWN0aW9uIHN3aXRjaCAqLwotCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8K
LX0gLyogZW5kIG9mIHBwbGV4ICovCi0KLS8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byBy
ZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBh
biBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQotICoJRU9CX0FDVF9DT05USU5VRV9T
Q0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKglFT0JfQUNU
X0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotCXJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLQlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0J
aW50IHJldF92YWw7Ci0KLQlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCi0JCVlZX0ZBVEFMX0VS
Uk9SKAotCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVy
IG1pc3NlZCIgKTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1
ZmZlciA9PSAwICkKLQkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlz
IGlzIGFuIEVPRi4gKi8KLQkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIg
LSBZWV9NT1JFX0FESiA9PSAxICkKLQkJCXsKLQkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hh
cmFjdGVyLCB0aGUgRU9CLCBzbwotCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLQkJ
CSAqLwotCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJ
ewotCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKLQkJ
CSAqIHByb2Nlc3MgaXQuCi0JCQkgKi8KLQkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0J
CQl9Ci0JCX0KLQotCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotCS8qIEZpcnN0IG1v
dmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0JbnVtYmVyX3RvX21vdmUgPSAo
aW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLQlmb3IgKCBp
ID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsr
KTsKLQotCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09
IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0JCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5v
dCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0JCSAqIGp1c3QgZm9yY2UgYW4gRU9GCi0J
CSAqLwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25f
Y2hhcnMgPSAwOwotCi0JZWxzZQotCQl7Ci0JCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQotCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0g
MTsKLQotCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotCQkJeyAvKiBOb3QgZW5vdWdoIHJv
b20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLQkJCS8qIGp1c3QgYSBzaG9ydGVyIG5h
bWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9D
VVJSRU5UX0JVRkZFUjsKLQotCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLQkJCQkoaW50KSAo
eXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKLQotCQkJaWYgKCBiLT55eV9pc19vdXJf
YnVmZmVyICkKLQkJCQl7Ci0JCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUg
KiAyOwotCi0JCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKLQkJCQkJYi0+eXlfYnVmX3NpemUgKz0g
Yi0+eXlfYnVmX3NpemUgLyA4OwotCQkJCWVsc2UKLQkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsK
LQotCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0JCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBm
b3IgMiBFT0IgY2hhcnMuICovCi0JCQkJCXBwcmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYs
Yi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQkJCQl9Ci0JCQllbHNlCi0JCQkJLyog
Q2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwotCQkJCWItPnl5X2NoX2J1ZiA9IDA7
Ci0KLQkJCWlmICggISBiLT55eV9jaF9idWYgKQotCQkJCVlZX0ZBVEFMX0VSUk9SKAotCQkJCSJm
YXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwotCi0JCQl5eWct
Pnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKLQotCQkJbnVt
X3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLQkJCQkJ
CW51bWJlcl90b19tb3ZlIC0gMTsKLQotCQkJfQotCi0JCWlmICggbnVtX3RvX3JlYWQgPiBZWV9S
RUFEX0JVRl9TSVpFICkKLQkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKLQotCQkv
KiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KLQkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKLQkJCXl5Zy0+eXlfbl9jaGFycywg
bnVtX3RvX3JlYWQgKTsKLQotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQot
CQl7Ci0JCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQotCQkJewotCQkJcmV0
X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0JCQlwcHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5l
cik7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRD
SDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0JCQkJ
WVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJfQotCQl9Ci0KLQllbHNlCi0JCXJldF92YWwgPSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFy
cyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3Np
emUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSBy
ZWFsbHkgbmVlZC4gKi8KLQkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsg
bnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOwotCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7Ci0J
CWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0JCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIg
KTsKLQl9Ci0KLQl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7Ci0JWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUjsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5
X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCXl5Zy0+eXl0ZXh0X3B0
ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKLQotCXJldHVybiBy
ZXRfdmFsOwotfQotCi0vKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1
c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLwotCi0gICAgc3RhdGljIHl5X3N0
YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0J
cmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotCXJlZ2lzdGVyIGNoYXIg
Knl5X2NwOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQotCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwotCi0JZm9yICgg
eXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2Nf
YnVmX3A7ICsreXlfY3AgKQotCQl7Ci0JCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3Ag
PyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotCQlpZiAoIHl5X2FjY2VwdFt5eV9j
dXJyZW50X3N0YXRlXSApCi0JCQl7Ci0JCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0g
eXlfY3VycmVudF9zdGF0ZTsKLQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2Nw
OwotCQkJfQotCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlf
Y10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCQl7Ci0JCQl5eV9jdXJyZW50X3N0YXRlID0gKGlu
dCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49
IDg0ICkKLQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJCX0KLQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQotCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwotfQot
Ci0vKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBO
VUwgY2hhcmFjdGVyCi0gKgotICogc3lub3BzaXMKLSAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVM
X3RyYW5zKCBjdXJyZW50X3N0YXRlICk7Ci0gKi8KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5
eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCB5eV9pc19qYW07Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBt
YXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9wdGlvbnMuICovCi0JcmVnaXN0ZXIgY2hhciAq
eXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0KLQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOwot
CWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLQkJewotCQl5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLQkJeXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19jcG9zID0geXlfY3A7Ci0JCX0KLQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCXsKLQkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJy
ZW50X3N0YXRlID49IDg0ICkKLQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwotCQl9Ci0JeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3Rh
dGUgPT0gODMpOwotCi0JcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOwot
fQotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICBzdGF0aWMg
aW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbHNlCi0gICAgc3RhdGljIGludCBp
bnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZgotCi17Ci0JaW50IGM7Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JKnl5
Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotCi0JaWYgKCAqeXlnLT55eV9jX2J1
Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0JCXsKLQkJLyogeXlfY19idWZfcCBub3cg
cG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0JCSAqIElmIHRoaXMg
b2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLQkJICogdmFs
aWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLQkJ
ICovCi0JCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVM
LiAqLwotCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLQkJZWxzZQotCQkJeyAvKiBuZWVk
IG1vcmUgaW5wdXQgKi8KLQkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5
eWctPnl5dGV4dF9wdHI7Ci0JCQkrK3l5Zy0+eXlfY19idWZfcDsKLQotCQkJc3dpdGNoICggeXlf
Z2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0JCQkJewotCQkJCWNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgotCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0JCQkJ
CSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0JCQkJCSAqIHRva2VuIGFuZCBmbGFn
cyB0aGF0IHdlIG5lZWQgdG8KLQkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUK
LQkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKLQkJCQkJICogdGhlcmUncyBu
byBtYXRjaGluZyB0byBjb25zaWRlci4KLQkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9M
QVNUX01BVENICi0JCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0JCQkJCSAqLwotCi0J
CQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0JCQkJCXBwcmVzdGFydCh5eWluICx5eXNj
YW5uZXIpOwotCi0JCQkJCS8qRkFMTFRIUk9VR0gqLwotCi0JCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlmICggcHB3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJCXJl
dHVybiAwOwotCi0JCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiAp
Ci0JCQkJCQlZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotCQkJCQlyZXR1cm4geXlp
bnB1dCh5eXNjYW5uZXIpOwotI2Vsc2UKLQkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7Ci0j
ZW5kaWYKLQkJCQkJfQotCi0JCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0JCQkJCXl5
Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLQkJCQkJYnJlYWs7Ci0J
CQkJfQotCQkJfQotCQl9Ci0KLQljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZf
cDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0JKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7
CS8qIHByZXNlcnZlIHl5dGV4dCAqLwotCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9j
X2J1Zl9wOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICov
Ci0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgot
ICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
cmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQg
cHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
Ci0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAg
ICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLQl9Ci0K
LQlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIp
OwotCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotfQotCi0vKiogU3dpdGNoIHRv
IGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcg
aW5wdXQgYnVmZmVyLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0g
Ki8KLSAgICB2b2lkIHBwX3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19i
dWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JLyogVE9ETy4gV2Ugc2hvdWxkIGJl
IGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0JICogd2l0aAotCSAq
CQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJcHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVm
ZmVyKTsKLSAgICAgKi8KLQlwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0JaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLQkJcmV0dXJuOwotCi0JaWYgKCBZ
WV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBv
bGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0J
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsK
LQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJz
OwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCXBwX2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0JLyogV2UgZG9uJ3QgYWN0dWFsbHkga25v
dyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLQkgKiBFT0YgKHBwd3JhcCgpKSBw
cm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLQkgKiBpcyBsb29rZWQgYXQg
aXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLQkgKiB0byBnbyBhaGVh
ZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnM7Ci0JeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOwotCXl5aW4gPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7Ci0JeXlnLT55eV9ob2xkX2NoYXIgPSAqeXln
LT55eV9jX2J1Zl9wOwotfQotCi0vKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQg
YnVmZmVyIHN0YXRlLgotICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0gKiBAcGFy
YW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0
LCB1c2UgQGMgWVlfQlVGX1NJWkUuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3RhdGUuCi0gKi8KLSAgICBZ
WV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0JYiA9
IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
ICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfYnVmX3Np
emUgPSBzaXplOwotCi0JLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2Vy
IHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotCSAqLwotCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBw
YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLQlpZiAoICEgYi0+eXlfY2hf
YnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3Jl
YXRlX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQlwcF9pbml0
X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7Ci0KLQlyZXR1cm4gYjsKLX0KLQotLyoqIERlc3Ry
b3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVh
dGVfYnVmZmVyKCkKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICov
Ci0gICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCAhIGIgKQotCQlyZXR1cm47Ci0KLQlpZiAoIGIgPT0g
WVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICov
Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7Ci0KLQlp
ZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQlwcGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVm
ICx5eXNjYW5uZXIgKTsKLQotCXBwZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKLX0KLQot
LyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMgZnVuY3Rp
b24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIs
Ci0gKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwotICAgIHN0
YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmls
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLQotewotCWludCBvZXJybm8gPSBlcnJubzsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQlw
cF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKLQotCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxl
OwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQg
YnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVk
IGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICog
SW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1u
LgotICAgICAqLwotICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+
eXlfYnNfbGluZW5vID0gMTsKLSAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0K
LSAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIAotCWVycm5vID0gb2Vycm5v
OwotfQotCi0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQg
c2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0
YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfZmx1c2hf
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCWlm
ICggISBiICkKLQkJcmV0dXJuOwotCi0JYi0+eXlfbl9jaGFycyA9IDA7Ci0KLQkvKiBXZSBhbHdh
eXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwot
CSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQg
Y2F1c2VzCi0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLQkgKi8KLQliLT55eV9jaF9idWZbMF0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0JYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOwotCi0JYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07Ci0KLQliLT55
eV9hdF9ib2wgPSAxOwotCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwotCi0J
aWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7Ci19Ci0KLS8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4g
VGhlIG5ldyBzdGF0ZSBiZWNvbWVzCi0gKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rp
b24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKLSAqICBpZiBuZWNlc3NhcnkuCi0gKiAgQHBhcmFt
IG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KLSAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RB
VEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKG5ld19idWZmZXIg
PT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JcHBlbnN1cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7
Ci0KLQkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHBwX3N3aXRjaF90b19idWZmZXIuICov
Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsKLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0
aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xk
X2NoYXI7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlf
Y19idWZfcDsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOwotCQl9Ci0KLQkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNl
LCByZXBsYWNlIHRvcC4gKi8KLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpCi0JCXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcCsrOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7
Ci0KLQkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotCXBwX2xvYWRfYnVm
ZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMTsKLX0KLQotLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ss
IGlmIHByZXNlbnQuCi0gKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgot
ICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwcG9w
X2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQlpZiAoIVlZX0NVUlJFTlRf
QlVGRkVSKQotCQlyZXR1cm47Ci0KLQlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
ICx5eXNjYW5uZXIpOwotCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JaWYgKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCi0JCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
OwotCi0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0JCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOwotCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0JfQot
fQotCi0vKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgotICogIEd1
YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgotICovCi1zdGF0aWMgdm9pZCBw
cGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQl5eV9zaXplX3Qg
bnVtX3RvX2FsbG9jOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLQotCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKLQotCQkvKiBG
aXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtu
b3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAy
IGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUg
bmV4dCBjYWxsLgotICAgICAgICAgKi8KLQkJbnVtX3RvX2FsbG9jID0gMTsKLQkJeXlnLT55eV9i
dWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBwYWxsb2MKLQkJCQkJCQkJ
KG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJ
LCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotCQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNr
KCkiICk7Ci0JCQkJCQkJCSAgCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0JCQkJCi0JCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLQkJeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFj
a190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKLQotCQkvKiBJbmNyZWFz
ZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLQkJaW50IGdy
b3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotCQludW1fdG9fYWxsb2Mg
PSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0JCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwcHJlYWxsb2MKLQkJCQkJCQkJKHl5
Zy0+eXlfYnVmZmVyX3N0YWNrLAotCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopCi0JCQkJCQkJCSwgeXlzY2FubmVyKTsKLQkJaWYgKCAhIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0JCS8qIHplcm8gb25seSB0aGUg
bmV3IHNsb3RzLiovCi0JCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKSk7Ci0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLQl9Ci19
Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJv
bSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFzZSB0aGUg
Y2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhl
IGNoYXJhY3RlciBidWZmZXIKLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAot
ICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6
ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwot
ICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCi0J
CXJldHVybiAwOwotCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotCWlmICggISBiICkKLQkJWVlfRkFU
QUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsK
LQotCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBF
T0IncyAqLwotCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotCWItPnl5X2lz
X291cl9idWZmZXIgPSAwOwotCWItPnl5X2lucHV0X2ZpbGUgPSAwOwotCWItPnl5X25fY2hhcnMg
PSBiLT55eV9idWZfc2l6ZTsKLQliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7Ci0JYi0+eXlfYXRf
Ym9sID0gMTsKLQliLT55eV9maWxsX2J1ZmZlciA9IDA7Ci0JYi0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9ORVc7Ci0KLQlwcF9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwot
Ci0JcmV0dXJuIGI7Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNj
YW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCi0gKiBzY2FuIGZyb20g
YSBAZSBjb3B5IG9mIEBhIHN0ci4KLSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0
cmluZyB0byBzY2FuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAq
IEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICogQG5v
dGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMs
IHRoZW4gdXNlCi0gKiAgICAgICBwcF9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KLSAqLwotWVlfQlVG
RkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKLXsKLSAgICAKLQlyZXR1cm4gcHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4o
eXlzdHIpICx5eXNjYW5uZXIpOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0
ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwK
LSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhl
IGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBp
biB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5
Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotCVlZX0JVRkZFUl9TVEFURSBiOwotCWNoYXIgKmJ1ZjsKLQl5eV9zaXpl
X3QgbiwgaTsKLSAgICAKLQkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5n
IHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KLQluID0gX3l5Ynl0ZXNfbGVuICsgMjsKLQli
dWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nhbm5lciApOwotCWlmICggISBidWYgKQotCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCki
ICk7Ci0KLQlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLQkJYnVmW2ldID0g
eXlieXRlc1tpXTsKLQotCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIgPSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlz
Y2FubmVyKTsKLQlpZiAoICEgYiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBw
cF9zY2FuX2J5dGVzKCkiICk7Ci0KLQkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVm
ZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0JICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0J
ICovCi0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7Ci0KLQlyZXR1cm4gYjsKLX0KLQotI2lmbmRl
ZiBZWV9FWElUX0ZBSUxVUkUKLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKLSNlbmRpZgotCi1z
dGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7
Ci0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Ci19Ci0KLS8qIFJlZGVmaW5lIHl5bGVzcygpIHNv
IGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwotCi0jdW5kZWYgeXlsZXNzCi0jZGVmaW5l
IHl5bGVzcyhuKSBcCi0JZG8gXAotCQl7IFwKLQkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcg
dXAgeXl0ZXh0LiAqLyBcCi0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCi0g
ICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLQkJeXl0ZXh0W3l5bGVu
Z10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5
eWxlc3NfbWFjcm9fYXJnOyBcCi0JCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZf
cDsgXAotCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotCQl5eWxlbmcgPSB5eWxlc3NfbWFj
cm9fYXJnOyBcCi0JCX0gXAotCXdoaWxlICggMCApCi0KLS8qIEFjY2Vzc29yICBtZXRob2RzIChn
ZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCi0KLS8qKiBHZXQgdGhlIHVz
ZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5ZXh0cmE7Ci19Ci0KLS8qKiBHZXQgdGhl
IGN1cnJlbnQgbGluZSBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KLSAqLwotaW50IHBwZ2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgCi0gICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgcmV0dXJuIHl5bGluZW5vOwotfQotCi0vKiogR2V0IHRoZSBjdXJyZW50
IGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgCi0g
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgcmV0dXJuIHl5Y29sdW1uOwotfQotCi0vKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0u
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqcHBn
ZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWluOwotfQotCi0v
KiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKi8KLUZJTEUgKnBwZ2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
Ci0gICAgcmV0dXJuIHl5b3V0OwotfQotCi0vKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJl
bnQgdG9rZW4uCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwot
eXlfc2l6ZV90IHBwZ2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVy
biB5eWxlbmc7Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCi0gKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotCi1jaGFyICpwcGdldF90ZXh0ICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXl0ZXh0OwotfQotCi0vKiogU2V0IHRo
ZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNj
YW5uZXIuCi0gKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHNjYW5uZXIuCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KLSAqLwotdm9pZCBwcHNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwg
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKLX0K
LQotLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSBsaW5lX251bWJl
cgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBz
ZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQot
ICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3Rz
LiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIHl5X2Zh
dGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5u
ZXIpOyAKLSAgICAKLSAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwotfQotCi0vKiogU2V0IHRo
ZSBjdXJyZW50IGNvbHVtbi4KLSAqIEBwYXJhbSBsaW5lX251bWJlcgotICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNv
bHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAgICAgICAgLyogY29sdW1uIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KLSAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2Nv
bHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCi0gICAgCi0gICAgeXlj
b2x1bW4gPSBjb2x1bW5fbm87Ci19Ci0KLS8qKiBTZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBk
b2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0g
aW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCi0gKiBAc2VlIHBwX3N3aXRjaF90b19idWZmZXIKLSAqLwotdm9pZCBwcHNldF9p
biAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5aW4gPSBp
bl9zdHIgOwotfQotCi12b2lkIHBwc2V0X291dCAoRklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICB5eW91dCA9IG91dF9zdHIgOwotfQotCi1pbnQgcHBnZXRfZGVi
dWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOwot
fQotCi12b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7Ci19Ci0KLS8qIEFjY2Vzc29yIG1ldGhv
ZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCi0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlsdmFsOwotfQotCi12b2lkIHBwc2V0
X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewot
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
LSAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Ci19Ci0KLVlZTFRZUEUgKnBwZ2V0X2xsb2MgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJldHVybiB5eWxsb2M7Ci19Ci0gICAgCi12b2lk
IHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9jX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLSAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07Ci19Ci0gICAgCi0vKiBVc2VyLXZpc2li
bGUgQVBJICovCi0KLS8qIHBwbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMg
dGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwotICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0
aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50Lgot
ICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3Rl
YWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KLSAqLwotCi1pbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCog
cHRyX3l5X2dsb2JhbHMpCi0KLXsKLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0g
ICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAq
cHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1
dHNfdCApLCBOVUxMICk7Ci0KLSAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewotICAg
ICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExl
YXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwotICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMs
MHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7Ci0KLSAgICByZXR1cm4geXlfaW5pdF9nbG9i
YWxzICggKnB0cl95eV9nbG9iYWxzICk7Ci19Ci0KLS8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRo
ZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCi0gKiBj
b252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90
ZSBob3dldmVyLCB0aGF0Ci0gKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMg
aXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKLSAqIGlzIHRoZSByZWFzb24s
IHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0
aW9uKS4KLSAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdp
bGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4KLSAqIHRoZSB5eWV4dHJhIGZpZWxkLgotICov
Ci0KLWludCBwcGxleF9pbml0X2V4dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5
c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCi0KLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlf
eXlndXRzOwotCi0gICAgcHBzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0
cyk7Ci0KLSAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0g
RUlOVkFMOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0JCi0gICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15
X3l5Z3V0cyApOwotCQotICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAg
IGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgCi0gICAgLyog
Qnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbgotICAgIHl5X2luaXRfZ2xvYmFs
cy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMuICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xv
YmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRzX3QpKTsKLSAgICAKLSAgICBwcHNldF9leHRy
YSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOwotICAgIAotICAgIHJldHVybiB5
eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsKLX0KLQotc3RhdGljIGludCB5eV9p
bml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgLyogSW5pdGlhbGl6YXRp
b24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCi0gICAgICog
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFs
bG9jYXRlIGhlcmUuCi0gICAgICovCi0KLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7Ci0g
ICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggPSAwOwotICAgIHl5Zy0+eXlfY19idWZfcCA9IChjaGFyICopIDA7Ci0gICAgeXlnLT55
eV9pbml0ID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0ID0gMDsKLQotICAgIHl5Zy0+eXlfc3RhcnRf
c3RhY2tfcHRyID0gMDsKLSAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKLSAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7Ci0KLS8qIERlZmluZWQgaW4gbWFpbi5jICovCi0j
aWZkZWYgWVlfU1RESU5JVAotICAgIHl5aW4gPSBzdGRpbjsKLSAgICB5eW91dCA9IHN0ZG91dDsK
LSNlbHNlCi0gICAgeXlpbiA9IChGSUxFICopIDA7Ci0gICAgeXlvdXQgPSAoRklMRSAqKSAwOwot
I2VuZGlmCi0KLSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9y
LCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5Ci0gICAgICogcHBsZXhfaW5pdCgpCi0gICAgICovCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBwbGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50
IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLwotaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNj
YW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ry
b3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLQkJcHBf
ZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7Ci0JCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0JCXBwcG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIp
OwotCX0KLQotCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLQlwcGZyZWUoeXlnLT55
eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0JeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxM
OwotCi0gICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwotICAgICAg
ICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwotCi0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMg
aXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUK
LSAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8K
LSAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBt
YWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAs
IHl5c2Nhbm5lciApOwotICAgIHl5c2Nhbm5lciA9IE5VTEw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgotICovCi0KLSNpZm5kZWYgeXl0ZXh0
X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFy
ICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJlZ2lzdGVyIGludCBpOwot
CWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLQkJczFbaV0gPSBzMltpXTsKLX0KLSNlbmRpZgot
Ci0jaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29u
c3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgaW50IG47Ci0J
Zm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQotCXJldHVybiBuOwotfQotI2VuZGlmCi0K
LXZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LQlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7Ci19Ci0KLXZvaWQgKnBwcmVhbGxvYyAg
KHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQkv
KiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3Ro
Ci0JICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFu
ZCB0aG9zZQotCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3
aXRoIHRoZSBsYXR0ZXIKLQkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2Fz
dGxlc3MgYXNzaWdubWVudCBmcm9tCi0JICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5k
IGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwotCSAqIGFzIHRob3VnaCBkb2luZyBhbiBh
c3NpZ25tZW50LgotCSAqLwotCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIs
IHNpemUgKTsKLX0KLQotdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCi17Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNo
YXIgKikgY2FzdCAqLwotfQotCi0jZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgotCi1u
YW1lc3BhY2UgcHAgewotCi1Ub2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3MpIDogbUhhbmRsZSgwKQotewotICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25v
c3RpY3M7Ci19Ci0KLVRva2VuaXplcjo6flRva2VuaXplcigpCi17Ci0gICAgZGVzdHJveVNjYW5u
ZXIoKTsKLX0KLQotYm9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIGlmIChjb3VudCA8IDAp
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0
dXJuIGZhbHNlOwotCi0gICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBs
ZW5ndGgpOwotICAgIHJldHVybiBpbml0U2Nhbm5lcigpOwotfQotCi12b2lkIFRva2VuaXplcjo6
c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKLXsKLSAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBh
cyBmaWxlIG51bWJlci4KLSAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCi0gICAgcHBzZXRfY29s
dW1uKGZpbGUsbUhhbmRsZSk7Ci19Ci0KLXZvaWQgVG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKGlu
dCBsaW5lKQotewotICAgIHBwc2V0X2xpbmVubyhsaW5lLG1IYW5kbGUpOwotfQotCi12b2lkIFRv
a2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKLXsKLSAgICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0
b2tlbi0+dmFsdWUsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKLSAgICB0b2tlbi0+ZmxhZ3Mg
PSAwOwotCi0gICAgdG9rZW4tPnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQubGluZVN0YXJ0KTsK
LSAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4nOwotCi0gICAgdG9r
ZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2UpOwotICAgIG1Db250
ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwotfQotCi1ib29sIFRva2VuaXplcjo6aW5pdFNjYW5u
ZXIoKQotewotICAgIGlmICgobUhhbmRsZSA9PSBOVUxMKSAmJiBwcGxleF9pbml0X2V4dHJhKCZt
Q29udGV4dCwmbUhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBwcmVzdGFy
dCgwLG1IYW5kbGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRva2VuaXplcjo6ZGVz
dHJveVNjYW5uZXIoKQotewotICAgIGlmIChtSGFuZGxlID09IE5VTEwpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHBwbGV4X2Rlc3Ryb3kobUhhbmRsZSk7Ci0gICAgbUhhbmRsZSA9IE5VTEw7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjRhMjg4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOSVpFUl9IXwotI2RlZmluZSBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCi0KLSNpbmNsdWRlICJJbnB1dC5oIgotI2luY2x1
ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0K
LWNsYXNzIERpYWdub3N0aWNzOwotCi1jbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKLXsK
LSAgcHVibGljOgotICAgIHN0cnVjdCBDb250ZXh0Ci0gICAgewotICAgICAgICBEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3M7Ci0KLSAgICAgICAgSW5wdXQgaW5wdXQ7Ci0gICAgICAgIC8vIFRoZSBs
b2NhdGlvbiB3aGVyZSB5eXRleHQgcG9pbnRzIHRvLiBUb2tlbiBsb2NhdGlvbiBzaG91bGQgdHJh
Y2sKLSAgICAgICAgLy8gc2NhbkxvYyBpbnN0ZWFkIG9mIElucHV0OjptUmVhZExvYyBiZWNhdXNl
IHRoZXkgbWF5IG5vdCBiZSB0aGUgc2FtZQotICAgICAgICAvLyBpZiB0ZXh0IGlzIGJ1ZmZlcmVk
IHVwIGluIHRoZSBzY2FubmVyIGlucHV0IGJ1ZmZlci4KLSAgICAgICAgSW5wdXQ6OkxvY2F0aW9u
IHNjYW5Mb2M7Ci0KLSAgICAgICAgYm9vbCBsZWFkaW5nU3BhY2U7Ci0gICAgICAgIGJvb2wgbGlu
ZVN0YXJ0OwotICAgIH07Ci0KLSAgICBUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KTsKLSAgICB+VG9rZW5pemVyKCk7Ci0KLSAgICBib29sIGluaXQoaW50IGNvdW50LCBjb25zdCBj
aGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKLQotICAgIHZvaWQgc2V0
RmlsZU51bWJlcihpbnQgZmlsZSk7Ci0gICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAg
IFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUb2tlbml6ZXIpOwotICAgIGJvb2wgaW5pdFNj
YW5uZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lTY2FubmVyKCk7Ci0KLSAgICB2b2lkKiBtSGFuZGxl
OyAgLy8gU2Nhbm5lciBoYW5kbGUuCi0gICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIg
ZXh0cmEuCi19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOSVpFUl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDFjNzMyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5sCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLS8qCi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNM
IEVTIHByZXByb2Nlc3Nvci4KLUJhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAg
UHJlcHJvY2Vzc29yIEdyYW1tYXI6Ci1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xp
YnJhcnkvMnNjeHlzODkuYXNweAotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBO
RUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCi0qLwotCi0ldG9wewotLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2gu
IERPIE5PVCBFRElUIQotfQotCi0lewotI2luY2x1ZGUgIlRva2VuaXplci5oIgotCi0jaW5jbHVk
ZSAiRGlhZ25vc3RpY3MuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi0jaWYgZGVmaW5lZChfX0dO
VUNfXykKLS8vIFRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgeXlfZmF0YWxfZXJyb3Ig
ZnVuY3Rpb24uCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3Jl
dHVybiIKLSNlbmRpZgotCi10eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7Ci10eXBlZGVmIHBw
OjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOwotCi0vLyBVc2UgdGhlIHVudXNlZCB5eWNvbHVtbiB2
YXJpYWJsZSB0byB0cmFjayBmaWxlIChzdHJpbmcpIG51bWJlci4KLSNkZWZpbmUgeXlmaWxlbm8g
eXljb2x1bW4KLQotI2RlZmluZSBZWV9VU0VSX0lOSVQgICAgICAgICAgICAgICAgICAgXAotICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWZpbGVubyA9
IDA7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxpbmVubyA9IDE7ICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSBmYWxzZTsgXAotICAgICAg
ICB5eWV4dHJhLT5saW5lU3RhcnQgPSB0cnVlOyAgICAgXAotICAgIH0gd2hpbGUoMCk7Ci0KLSNk
ZWZpbmUgWVlfVVNFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcHA6OklucHV0
KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBwcDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7ICAg
ICAgICAgICBcCi0gICAgICAgIHdoaWxlICgoc2NhbkxvYy0+c0luZGV4IDwgaW5wdXQtPmNvdW50
KCkpICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIChzY2FuTG9jLT5jSW5kZXgg
Pj0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgpKSkgXAotICAgICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBzY2FuTG9jLT5jSW5kZXggLT0gaW5wdXQtPmxlbmd0aChzY2FuTG9jLT5zSW5kZXgr
Kyk7ICAgIFwKLSAgICAgICAgICAgICsreXlmaWxlbm87IHl5bGluZW5vID0gMTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+Zmls
ZSA9IHl5ZmlsZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBzY2FuTG9jLT5jSW5kZXggKz0geXlsZW5nOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9JTlBV
VChidWYsIHJlc3VsdCwgbWF4U2l6ZSkgXAotICAgIHJlc3VsdCA9IHl5ZXh0cmEtPmlucHV0LnJl
YWQoYnVmLCBtYXhTaXplKTsKLQotJX0KLQotJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVy
LWludGVyYWN0aXZlCi0lb3B0aW9uIHJlZW50cmFudCBiaXNvbi1icmlkZ2UgYmlzb24tbG9jYXRp
b25zCi0lb3B0aW9uIHByZWZpeD0icHAiCi0lb3B0aW9uIGV4dHJhLXR5cGU9InBwOjpUb2tlbml6
ZXI6OkNvbnRleHQqIgotJXggQ09NTUVOVAotCi1ORVdMSU5FICAgICBcbnxccnxcclxuCi1JREVO
VElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCi1QVU5DVFVBVE9SICBbXVs8Pigpe30uKy0v
KiVefCZ+PSE6Oyw/XQotCi1ERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKLU9DVEFM
X0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05
YS1mQS1GXSsKLQotRElHSVQgICAgICAgICAgICAgICAgWzAtOV0KLUVYUE9ORU5UX1BBUlQgICAg
ICAgIFtlRV1bKy1dP3tESUdJVH0rCi1GUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7
RElHSVR9Kyl8KHtESUdJVH0rIi4iKQotCi0lJQotCi0gICAgLyogTGluZSBjb21tZW50ICovCi0i
Ly8iW15cclxuXSoKLQotICAgIC8qIEJsb2NrIGNvbW1lbnQgKi8KLSAgICAvKiBMaW5lIGJyZWFr
cyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLwotICAgIC8qIFRoZSBjb21tZW50
IGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLiAqLyAKLSIvKiIgeyBCRUdJTihDT01NRU5U
KTsgfQotPENPTU1FTlQ+W14qXHJcbl0rCi08Q09NTUVOVD4iKiIKLTxDT01NRU5UPntORVdMSU5F
fSB7ICsreXlsaW5lbm87IH0KLTxDT01NRU5UPiIqLyIgewotICAgIHl5ZXh0cmEtPmxlYWRpbmdT
cGFjZSA9IHRydWU7Ci0gICAgQkVHSU4oSU5JVElBTCk7Ci19Ci0KLSMgewotICAgIC8vICMgaXMg
b25seSB2YWxpZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4K
LSAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwotICAgIHJldHVybiB5eWV4dHJhLT5s
aW5lU3RhcnQgPyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOwotfQot
Ci17SURFTlRJRklFUn0gewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwotfQotCi17REVDSU1BTF9DT05TVEFOVH18
e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwot
fQotCi0oe0RJR0lUfSt7RVhQT05FTlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQ
T05FTlRfUEFSVH0/KSB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwotfQotCi0gICAgLyogQW55dGhpbmcgdGhh
dCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBiZSBhIG51bWJlci4gKi8K
LSAgICAvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9hdHMuICov
Ci0oe0RJR0lUfStbX2EtekEtWjAtOS5dKil8KCIuIntESUdJVH0rW19hLXpBLVowLTkuXSopIHsK
LSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tl
bjo6UFBfTlVNQkVSOwotfQotCi0iKysiIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOwotfQotIi0tIiB7Ci0gICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0RF
QzsKLX0KLSI8PCIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOwotfQotIj4+IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24o
eXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOwotfQotIjw9
IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6
VG9rZW46Ok9QX0xFOwotfQotIj49IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxl
bmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOwotfQotIj09IiB7Ci0gICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0VROwot
fQotIiE9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVy
biBwcDo6VG9rZW46Ok9QX05FOwotfQotIiYmIiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORDsKLX0KLSJeXiIgewotICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9YT1I7Ci19Ci0ifHwiIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0g
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1I7Ci19Ci0iKz0iIHsKLSAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FTU0lHTjsK
LX0KLSItPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9TVUJfQVNTSUdOOwotfQotIio9IiB7Ci0gICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX01VTF9BU1NJR047
Ci19Ci0iLz0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfRElWX0FTU0lHTjsKLX0KLSIlPSIgewotICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NT0RfQVNTSUdO
OwotfQotIjw8PSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKLX0KLSI+Pj0iIHsKLSAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRf
QVNTSUdOOwotfQotIiY9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwot
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FORF9BU1NJR047Ci19Ci0iXj0iIHsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9S
X0FTU0lHTjsKLX0KLSJ8PSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Ci19Ci0KLXtQVU5DVFVBVE9SfSB7
Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKLSAgICByZXR1cm4geXl0ZXh0WzBd
OwotfQotCi1bIFx0XHZcZl0rICAgeyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9Ci0K
LXtORVdMSU5FfSB7Ci0gICAgKyt5eWxpbmVubzsKLSAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4n
KTsKLSAgICByZXR1cm4gJ1xuJzsKLX0KLQotLiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0
ZXh0WzBdKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9PVEhFUjsKLX0KLQotPCo+PDxFT0Y+
PiB7Ci0gICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQgZm9yIGhhbmRsaW5nIEVP
Ri4KLSAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4gbWFudWFsbHkuCi0gICAg
cHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKLSAgICBwcDo6SW5wdXQ6OkxvY2F0
aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7Ci0gICAgaW50IHNJbmRleE1heCA9IHN0
ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7Ci0gICAgaWYgKHNjYW5Mb2MtPnNJbmRleCAh
PSBzSW5kZXhNYXgpCi0gICAgewotICAgICAgICAvLyBXZSBjYW4gb25seSByZWFjaCBoZXJlIGlm
IHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQotICAgICAgICAvLyBlbmQgb2YgdGhlIGlu
cHV0LgotICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7IHNjYW5Mb2MtPmNJbmRl
eCA9IDA7Ci0gICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxpbmVubyA9IDE7Ci0gICAg
fQotICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOwotICAgIHl5bGxvYy0+bGluZSA9IHl5bGlu
ZW5vOwotICAgIHl5bHZhbC0+Y2xlYXIoKTsKLQotICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5U
KQotICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkVPRl9JTl9DT01NRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAgICB9Ci0gICAgeXl0ZXJtaW5hdGUoKTsK
LX0KLQotJSUKLQotbmFtZXNwYWNlIHBwIHsKLQotVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKLXsKLSAgICBtQ29udGV4dC5kaWFnbm9z
dGljcyA9IGRpYWdub3N0aWNzOwotfQotCi1Ub2tlbml6ZXI6On5Ub2tlbml6ZXIoKQotewotICAg
IGRlc3Ryb3lTY2FubmVyKCk7Ci19Ci0KLWJvb2wgVG9rZW5pemVyOjppbml0KGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkKLXsKLSAgICBp
ZiAoY291bnQgPCAwKSByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKChjb3VudCA+IDApICYmIChzdHJp
bmcgPT0gMCkpIHJldHVybiBmYWxzZTsKLQotICAgIG1Db250ZXh0LmlucHV0ID0gSW5wdXQoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICByZXR1cm4gaW5pdFNjYW5uZXIoKTsKLX0KLQotdm9p
ZCBUb2tlbml6ZXI6OnNldEZpbGVOdW1iZXIoaW50IGZpbGUpCi17Ci0gICAgLy8gV2UgdXNlIGNv
bHVtbiBudW1iZXIgYXMgZmlsZSBudW1iZXIuCi0gICAgLy8gU2VlIG1hY3JvIHl5ZmlsZW5vLgot
ICAgIHl5c2V0X2NvbHVtbihmaWxlLCBtSGFuZGxlKTsKLX0KLQotdm9pZCBUb2tlbml6ZXI6OnNl
dExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0gICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUp
OwotfQotCi12b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKLXsKLSAgICB0b2tlbi0+
dHlwZSA9IHl5bGV4KCZ0b2tlbi0+dmFsdWUsICZ0b2tlbi0+bG9jYXRpb24sIG1IYW5kbGUpOwot
ICAgIHRva2VuLT5mbGFncyA9IDA7Ci0KLSAgICB0b2tlbi0+c2V0QXRTdGFydE9mTGluZShtQ29u
dGV4dC5saW5lU3RhcnQpOwotICAgIG1Db250ZXh0LmxpbmVTdGFydCA9IHRva2VuLT50eXBlID09
ICdcbic7Ci0KLSAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1Db250ZXh0LmxlYWRpbmdT
cGFjZSk7Ci0gICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7Ci19Ci0KLWJvb2wgVG9r
ZW5pemVyOjppbml0U2Nhbm5lcigpCi17Ci0gICAgaWYgKChtSGFuZGxlID09IE5VTEwpICYmIHl5
bGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCAmbUhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHl5cmVzdGFydCgwLCBtSGFuZGxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBUb2tlbml6ZXI6OmRlc3Ryb3lTY2FubmVyKCkKLXsKLSAgICBpZiAobUhhbmRsZSA9PSBO
VUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICB5eWxleF9kZXN0cm95KG1IYW5kbGUpOwotICAg
IG1IYW5kbGUgPSBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgcHAKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvZ2Vu
ZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCBlOWM3MGIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L2dlbmVyYXRlX3BhcnNlci5zaAorKysgL2Rldi9u
dWxsCkBAIC0xLDI2ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgR2VuZXJhdGVzIHZhcmlv
dXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nlc3Nvci4KLQotcnVuX2ZsZXgoKQotewot
aW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQotb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgot
ZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJjZSAkaW5wdXRf
ZmlsZQotfQotCi1ydW5fYmlzb24oKQotewotaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQotb3V0
cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgotYmlzb24gLS1uby1saW5lcyAtLXNrZWxldG9uPXlh
Y2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQotfQotCi1zY3JpcHRfZGly
PSQoZGlybmFtZSAkMCkKLQotIyBHZW5lcmF0ZSBwcmVwcm9jZXNzb3IKLXJ1bl9mbGV4IFRva2Vu
aXplci5sIFRva2VuaXplci5jcHAKLXJ1bl9iaXNvbiBFeHByZXNzaW9uUGFyc2VyLnkgRXhwcmVz
c2lvblBhcnNlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFhNWZkOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9uZXdfZmlsZS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0gICAgU29tZSBuZXcgY29kZSB0aGF0IHVzZXMg
dGFicwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlMi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9u
ZXdfZmlsZTIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGUxNmRmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L25ld19maWxlMi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1zb21lIG90
aGVyIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxNzE2NGVhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3BwX3V0aWxzLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gcHBfdXRpbHMuaDogQ29tbW9u
IHByZXByb2Nlc3NvciB1dGlsaXRpZXMKLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
UFBVVElMU19IXwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXwotCi0v
LyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0g
ZnVuY3Rpb25zCi0vLyBUaGlzIG11c3QgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRp
b25zIGZvciBhIGNsYXNzLgotI2RlZmluZSBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlw
ZU5hbWUpIFwKLSAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICBcCi0g
IHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikKLQotI2VuZGlmIC8vIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJv
Y2Vzc29yLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZhOTc1OS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAg
QEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgotPFZpc3Vh
bFN0dWRpb1Byb2plY3QKLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKLQlWZXJzaW9uPSI5LjAw
IgotCU5hbWU9InByZXByb2Nlc3NvciIKLQlQcm9qZWN0R1VJRD0ie0ZCRTMyREYzLTBGQjAtNEYy
Ri1BNDI0LTJDMjFCRDdCQzMyNX0iCi0JUm9vdE5hbWVzcGFjZT0icHJlcHJvY2Vzc29yIgotCUtl
eXdvcmQ9IldpbjMyUHJvaiIKLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCi0JPgot
CTxQbGF0Zm9ybXM+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0iV2luMzIiCi0JCS8+Ci0JCTxQbGF0
Zm9ybQotCQkJTmFtZT0ieDY0IgotCQkvPgotCTwvUGxhdGZvcm1zPgotCTxUb29sRmlsZXM+Ci0J
PC9Ub29sRmlsZXM+Ci0JPENvbmZpZ3VyYXRpb25zPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFt
ZT0iRGVidWd8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25m
aWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlv
bk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0J
CQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9
IldJTjMyO19ERUJVRztfTElCIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2lj
UnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21w
aWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJV2FybkFzRXJyb3I9InRy
dWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDcwMiIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlicmFyaWFu
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJ
Lz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFz
ZXxXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRp
b25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSki
Ci0JCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xl
UHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVC
dWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJ
CQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5p
dGlvbnM9IldJTjMyO05ERUJVRztfTElCIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJCUVu
YWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVy
PSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCQlE
ZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0
MTAwOzQxMjc7NDI0NCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291
cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNv
bXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJPC9Db25maWd1
cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iRGVidWd8eDY0IgotCQkJT3V0cHV0
RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25O
YW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmln
dXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCi0JCQlDaGFyYWN0ZXJTZXQ9
IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249
IjAiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfTElCIgotCQkJ
CU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlS
dW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJu
aW5nTGV2ZWw9IjQiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlv
bkZvcm1hdD0iMyIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7
NDI2Nzs0NzAyIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VD
b21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGls
ZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIK
LQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRp
b24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCIKLQkJCU91dHB1dERp
cmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFt
ZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgotCQkJQ2hhcmFjdGVyU2V0PSIx
IgotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkND
dXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5l
cmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlH
ZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJ
CQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUVuYWJsZUludHJpbnNpY0Z1
bmN0aW9ucz0idHJ1ZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVH
O19MSUIiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExp
bmtpbmc9InRydWUiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xl
dmVsPSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ9IjMiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0OzQyNjci
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQk8L0Nv
bmZpZ3VyYXRpb25zPgotCTxSZWZlcmVuY2VzPgotCTwvUmVmZXJlbmNlcz4KLQk8RmlsZXM+Ci0J
CTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKLQkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4
O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZD
NzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVIYW5kbGVyLmNwcCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVQYXJzZXIu
Y3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEV4
cHJlc3Npb25QYXJzZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXElucHV0LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLlxMZXhlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIuY3BwIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFByZXByb2Nlc3Nvci5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFRva2Vu
aXplci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQkJPEZpbHRlcgotCQkJ
TmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2Qi
Ci0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJF
QkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpYWdub3N0aWNzLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0
aXZlSGFuZGxlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXERpcmVjdGl2ZVBhcnNlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXEV4cHJlc3Npb25QYXJzZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxJbnB1dC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXExleGVyLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cTWFjcm8uaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNyb0V4cGFuZGVyLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHBfdXRpbHMu
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxQcmVw
cm9jZXNzb3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlxTb3VyY2VMb2NhdGlvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXFRva2VuLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0Zp
bHRlcj4KLQk8L0ZpbGVzPgotCTxHbG9iYWxzPgotCTwvR2xvYmFscz4KLTwvVmlzdWFsU3R1ZGlv
UHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iMDQxMjVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oCkBAIC0w
LDAgKzEsNjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBudW1lcmljX2xleC5oOiBGdW5jdGlvbnMg
dG8gZXh0cmFjdCBudW1lcmljIHZhbHVlcyBmcm9tIHN0cmluZy4KKworI2lmbmRlZiBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfTlVNRVJJQ19MRVhfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX05VTUVSSUNfTEVYX0hfCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorCituYW1lc3BhY2UgcHAg
eworCitpbmxpbmUgc3RkOjppb3M6OmZtdGZsYWdzIG51bWVyaWNfYmFzZV9pbnQoY29uc3Qgc3Rk
OjpzdHJpbmcmIHN0cikKK3sKKyAgICBpZiAoKHN0ci5zaXplKCkgPj0gMikgJiYKKyAgICAgICAg
KHN0clswXSA9PSAnMCcpICYmCisgICAgICAgIChzdHJbMV0gPT0gJ3gnIHx8IHN0clsxXSA9PSAn
WCcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW9zOjpoZXg7CisgICAgfQorICAgIGVs
c2UgaWYgKChzdHIuc2l6ZSgpID49IDEpICYmIChzdHJbMF0gPT0gJzAnKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGQ6Omlvczo6b2N0OworICAgIH0KKyAgICByZXR1cm4gc3RkOjppb3M6OmRl
YzsKK30KKworLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcGFyc2UgdGhlIGdpdmVuIHN0cmlu
ZyB0byBleHRyYWN0IGEgbnVtZXJpY2FsCisvLyB2YWx1ZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gVGhl
c2UgZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBzdHJpbmcgaXMKKy8vIG9mIHRoZSBjb3JyZWN0
IGZvcm0uIFRoZXkgY2FuIG9ubHkgZmFpbCBpZiB0aGUgcGFyc2VkIHZhbHVlIGlzIHRvbyBiaWcs
CisvLyBpbiB3aGljaCBjYXNlIGZhbHNlIGlzIHJldHVybmVkLgorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnRUeXBlPgorYm9vbCBudW1lcmljX2xleF9pbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwg
SW50VHlwZSogdmFsdWUpCit7CisgICAgc3RkOjppc3RyaW5nc3RyZWFtIHN0cmVhbShzdHIpOwor
ICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGJ1dCBNU1ZTIGhhcyBhIGJ1Z2d5
IGltcGxlbWVudGF0aW9uLgorICAgIC8vIEl0IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgaWYg
dGhlIGJhc2UgaXMgbm90IHNwZWNpZmllZC4KKyAgICBzdHJlYW0uc2V0ZihudW1lcmljX2Jhc2Vf
aW50KHN0ciksIHN0ZDo6aW9zOjpiYXNlZmllbGQpOworCisgICAgc3RyZWFtID4+ICgqdmFsdWUp
OworICAgIHJldHVybiAhc3RyZWFtLmZhaWwoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRmxv
YXRUeXBlPgorYm9vbCBudW1lcmljX2xleF9mbG9hdChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBG
bG9hdFR5cGUqIHZhbHVlKQoreworICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBzdHJlYW0oc3RyKTsK
KyAgICAvLyBGb3JjZSAiQyIgbG9jYWxlIHNvIHRoYXQgZGVjaW1hbCBjaGFyYWN0ZXIgaXMgYWx3
YXlzICcuJywgYW5kCisgICAgLy8gbm90IGRlcGVuZGVudCBvbiB0aGUgY3VycmVudCBsb2NhbGUu
CisgICAgc3RyZWFtLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCkpOworCisgICAgc3RyZWFt
ID4+ICgqdmFsdWUpOworICAgIHJldHVybiAhc3RyZWFtLmZhaWwoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgcHAuCisjZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX05VTUVSSUNfTEVYX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3BhcnNlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3MzQy
Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4K
LQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRv
IHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5n
IHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRp
c3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5j
ZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMs
IHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMg
TlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0
byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVy
bXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2Us
IHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdh
cmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFu
ZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2Rp
ZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQg
aWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWlu
IHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xs
b3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBv
ZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2Vy
dmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJ
RElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVy
IHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBO
VklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJp
Z2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBi
eSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jw
b3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElB
IFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQK
LVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1Ig
SU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04g
RUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1J
TiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJF
Q1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBP
RiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9O
IE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRF
UiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklD
VCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotI2lmbmRlZiBCSVNPTl9QQVJTRVJfSAotIyBkZWZpbmUgQklTT05fUEFSU0VSX0gKLQot
I2lmbmRlZiB5eXN0eXBlcHAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBpbnQgICAgc2NfaW50Owot
ICAgIGZsb2F0ICBzY19mdmFsOwotICAgIGludCAgICBzY19pZGVudDsKLQljaGFyICAgc3ltYm9s
X25hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTisxXTsKLX0geXlzdHlwZXBwOwotCi0jIGRlZmluZSBZ
WVNUWVBFX0lTX1RSSVZJQUwgMQotI2VuZGlmCi0jIGRlZmluZQlDUFBfQU5EX09QCSAgICAgICAg
MjU3Ci0jIGRlZmluZQlDUFBfU1VCX0FTU0lHTgkgICAgMjU5Ci0jIGRlZmluZQlDUFBfTU9EX0FT
U0lHTgkgICAgMjYwCi0jIGRlZmluZQlDUFBfQUREX0FTU0lHTgkyNjEKLSMgZGVmaW5lCUNQUF9E
SVZfQVNTSUdOCTI2MgotIyBkZWZpbmUJQ1BQX01VTF9BU1NJR04JMjYzCi0jIGRlZmluZQlDUFBf
RVFfT1AJICAgICAgICAyNjQKLSMgZGVmaW5lICAgIENQUF9YT1JfT1AgICAgICAgICAyNjUgCi0j
IGRlZmluZQlFUlJPUl9TWQkgICAgMjY2Ci0jIGRlZmluZQlDUFBfRkxPQVRDT05TVEFOVAkyNjcK
LSMgZGVmaW5lCUNQUF9HRV9PUAkgICAgICAgIDI2OAotIyBkZWZpbmUJQ1BQX1JJR0hUX09QICAg
ICAgICAyNjkKLSMgZGVmaW5lCUNQUF9JREVOVElGSUVSCSAgICAyNzAKLSMgZGVmaW5lCUNQUF9J
TlRDT05TVEFOVAkgICAgMjcxCi0jIGRlZmluZQlDUFBfTEVfT1AJICAgICAgICAyNzIKLSMgZGVm
aW5lCUNQUF9MRUZUX09QCSAgICAgICAgMjczCi0jIGRlZmluZQlDUFBfREVDX09QCTI3NAotIyBk
ZWZpbmUJQ1BQX05FX09QCSAgICAgICAgMjc1Ci0jIGRlZmluZQlDUFBfT1JfT1AJICAgICAgICAy
NzYKLSMgZGVmaW5lCUNQUF9JTkNfT1AJICAgIDI3NwotIyBkZWZpbmUJQ1BQX1NUUkNPTlNUQU5U
CSAgICAyNzgKLSMgZGVmaW5lCUNQUF9UWVBFSURFTlRJRklFUgkyNzkKLQotIyBkZWZpbmUJRklS
U1RfVVNFUl9UT0tFTl9TWQkyODkKLQotIyBkZWZpbmUJQ1BQX1JJR0hUX0FTU0lHTgkgICAgMjgw
Ci0jIGRlZmluZQlDUFBfTEVGVF9BU1NJR04JICAgIDI4MQotIyBkZWZpbmUJQ1BQX0FORF9BU1NJ
R04JMjgyCi0jIGRlZmluZQlDUFBfT1JfQVNTSUdOICAJMjgzCi0jIGRlZmluZQlDUFBfWE9SX0FT
U0lHTgkyODQKLSMgZGVmaW5lCUNQUF9MRUZUX0JSQUNLRVQJMjg1Ci0jIGRlZmluZQlDUFBfUklH
SFRfQlJBQ0tFVAkyODYKLSMgZGVmaW5lCUNQUF9MRUZUX0JSQUNFCTI4NwotIyBkZWZpbmUJQ1BQ
X1JJR0hUX0JSQUNFCTI4OAotCi0jZW5kaWYgLyogbm90IEJJU09OX1BBUlNFUl9IICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BwX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3BwX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcx
NjRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaApAQCAtMCwwICsxLDE4IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gcHBfdXRpbHMuaDogQ29tbW9uIHByZXByb2Nlc3NvciB1dGlsaXRpZXMKKworI2lm
bmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfUFBVVElMU19IXworI2RlZmluZSBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfUFBVVElMU19IXworCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5
IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIG11c3QgYmUgdXNl
ZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzLgorI2RlZmluZSBQUF9E
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoY29uc3QgVHlw
ZU5hbWUmKTsgICAgICAgICAgICAgICBcCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1l
JikKKworI2VuZGlmIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3By
ZXByb2Nlc3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvcHJlcHJvY2Vzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTA1NmRh
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvcHJlcHJvY2Vzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJl
IHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBy
ZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0
YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVy
bXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRo
aXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2Ug
dGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vu
c2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29m
dHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5
IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBt
b2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRo
YXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0
YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9u
cyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywg
c2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElB
IFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20g
TlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90
aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBi
eSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50
IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBv
ciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5j
b3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJ
RElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhP
VVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg
T1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJ
T04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgot
Ci1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5E
SVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9V
VCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVU
SU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBV
TkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNU
UklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKLWV4
dGVybiBDUFBTdHJ1Y3QgKmNwcDsKLWludCBJbml0Q1BQU3RydWN0KHZvaWQpOwotaW50IEluaXRT
Y2FubmVyKENQUFN0cnVjdCAqY3BwKTsKLWludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRh
YmxlLCBpbnQgaHRzaXplKTsKLWNoYXIqIEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJs
ZSwgaW50IGF0b20pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmRlODUzYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDY5
OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJ
RElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVz
IHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50
IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9k
aWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25z
dGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3
aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciBy
ZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3Vi
amVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4
Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdp
bmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVw
cm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0
aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3Jt
czsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUs
IHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5v
dGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2gg
cmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1l
LCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0
aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlz
IG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQs
IGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVk
IHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2
YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdh
cmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRl
ci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElT
IiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBF
SVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVS
Q0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBV
U0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhF
UgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFO
WSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcg
SU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFO
RC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VE
IEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJ
QSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwotLy8KLS8vIHNjYW5uZXIuYwotLy8KLQotI2luY2x1ZGUgPGFz
c2VydC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZiAwCi0gICAgI2luY2x1ZGUg
PGllZWVmcC5oPgotI2Vsc2UKLSAgICAjZGVmaW5lIGlzaW5mZih4KSAoKCgqKGludCAqKSYoeCkg
JiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBMKSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICgoKihpbnQgKikmKHgpICYgMHgwMDdmZmZmZkwpPT0wMDAwMDAwMDAwTCkpCi0jZW5kaWYKLQot
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKLSNpbmNsdWRlICJj
b21waWxlci91dGlsLmgiCi0KLXR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKLSAgICBJ
bnB1dFNyYyBiYXNlOwotICAgIGNoYXIgKnA7Ci19IFN0cmluZ0lucHV0U3JjOwotCi1zdGF0aWMg
aW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpOwotCi1zdGF0aWMgaW50IGVvZl9zY2Fu
KElucHV0U3JjICppcywgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgcmV0dXJuIEVPRjsK
LX0gLy8gZW9mX3NjYW4KLQotc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwg
eXlzdHlwZXBwICogeXlsdmFscHApIHt9Ci0KLXN0YXRpYyBJbnB1dFNyYyBlb2ZfaW5wdXRzcmMg
PSB7IDAsICZlb2Zfc2NhbiwgJmVvZl9zY2FuLCAmbm9vcCwgMCwgMCB9OwotCi1zdGF0aWMgaW50
IGJ5dGVfc2NhbihJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Ci0KLSNkZWZpbmUg
RU9MX1NZICdcbicKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgI2RlZmluZSBEQkdfQlJF
QUtQT0lOVCgpIF9fYXNtIGludCAzCi0jZWxpZiBkZWZpbmVkKF9NX0FNRDY0KQotICAgICNkZWZp
bmUgREJHX0JSRUFLUE9JTlQoKSBhc3NlcnQoISJEYmdfQnJlYWtwb2ludCIpOwotI2Vsc2UKLSAg
ICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZF
UikgJiYgIWRlZmluZWQoX01fQU1ENjQpCi0gICAgX19pbnQ2NCBSRFRTQyAoIHZvaWQgKSB7Ci0K
LSAgICAgICAgX19pbnQ2NCB2OwotICAgIAotICAgICAgICBfX2FzbSBfX2VtaXQgMHgwZgotICAg
ICAgICBfX2FzbSBfX2VtaXQgMHgzMQotICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYsIGVh
eAotICAgICAgICBfX2FzbSBtb3YgZHdvcmQgcHRyIHYrNCwgZWR4Ci0gICAgCi0gICAgICAgIHJl
dHVybiB2OwotICAgIH0KLSNlbmRpZgotCi0KLWludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNw
cCkKLXsKLSAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBuZWVkZWQgYnkgdGhlIENQUCBsaW5lIHNj
YW5uZXI6Ci0gICAgaWYgKCFJbml0Q1BQKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY3Bw
LT5tb3N0UmVjZW50VG9rZW4gPSAwOwotICAgIGNwcC0+dG9rZW5Mb2MgPSAmY3BwLT5sdG9rZW5M
b2M7Ci0KLSAgICBjcHAtPmx0b2tlbkxvYy5maWxlID0gMDsKLSAgICBjcHAtPmx0b2tlbkxvYy5s
aW5lID0gMDsKLQotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmVvZl9pbnB1dHNyYzsKLSAgICBj
cHAtPnByZXZpb3VzX3Rva2VuID0gJ1xuJzsKLSAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9
IDA7Ci0KLSAgICByZXR1cm4gMTsKLX0gLy8gSW5pdFNjYW5uZXIKLQotaW50IEZyZWVTY2FubmVy
KHZvaWQpCi17Ci0gICAgcmV0dXJuIChGcmVlQ1BQKCkpOwotfQotCi1pbnQgSW5pdFNjYW5uZXJJ
bnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIGNwcC0+UGFXaGljaFN0ciA9IDA7Ci0gICAg
Y3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOwotICAgIGNwcC0+UGFBcmdjICAgICA9IGNvdW50Owot
ICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKLSAgICBTY2FuRnJvbVN0cmluZyhzdHJpbmdb
MF0pOwotICAgIHJldHVybiAwOwotfQotCi0vKgotICogc3RyX2dldGNoKCkKLSAqIHRha2VzIGNh
cmUgb2YgcmVhZGluZyBmcm9tIG11bHRpcGxlIHN0cmluZ3MuCi0gKiByZXR1cm5zIHRoZSBuZXh0
LWNoYXIgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLgotICogcmV0dXJucyBFT0Ygd2hlbiB0aGUgY29t
cGxldGUgc2hhZGVyIGlzIHBhcnNlZC4KLSAqLwotc3RhdGljIGludCBzdHJfZ2V0Y2goU3RyaW5n
SW5wdXRTcmMgKmluKQotewotICAgIGZvcig7Oyl7Ci0gICAgICAgaWYgKCppbi0+cCl7Ci0gICAg
ICAgICAgaWYgKCppbi0+cCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgaW4tPmJhc2UubGluZSsr
OwotICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
cmV0dXJuICppbi0+cCsrOwotICAgICAgIH0KLSAgICAgICBpZigrKyhjcHAtPlBhV2hpY2hTdHIp
IDwgY3BwLT5QYUFyZ2MpewotICAgICAgICAgIGZyZWUoaW4pOwotICAgICAgICAgIFNldFN0cmlu
Z051bWJlcihjcHAtPlBhV2hpY2hTdHIpOwotICAgICAgICAgIFNldExpbmVOdW1iZXIoMSk7Ci0g
ICAgICAgICAgU2NhbkZyb21TdHJpbmcoY3BwLT5QYUFyZ3ZbY3BwLT5QYVdoaWNoU3RyXSk7Ci0g
ICAgICAgICAgaW49KFN0cmluZ0lucHV0U3JjKiljcHAtPmN1cnJlbnRJbnB1dDsKLSAgICAgICAg
ICBjb250aW51ZTsgICAgICAgICAgICAgCi0gICAgICAgfQotICAgICAgIGVsc2V7Ci0gICAgICAg
ICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+YmFzZS5wcmV2OwotICAgICAgICAgIGNwcC0+UGFX
aGljaFN0cj0wOwotICAgICAgICAgIGZyZWUoaW4pOwotICAgICAgICAgIHJldHVybiBFT0Y7Ci0g
ICAgICAgfSAgCi0gICAgfQotfSAvLyBzdHJfZ2V0Y2gKLQotc3RhdGljIHZvaWQgc3RyX3VuZ2V0
Y2goU3RyaW5nSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVwcCAqdHlwZSkgewotICAgIGlm
IChpbi0+cFstMV0gPT0gY2gpaW4tPnAtLTsKLSAgICBlbHNlIHsKLSAgICAgICAgKihpbi0+cCk9
J1wwJzsgLy90aGlzIHdvdWxkIHRha2UgY2FyZSBvZiBzaGlmdGluZyB0byB0aGUgcHJldmlvdXMg
c3RyaW5nLgotICAgICAgICBjcHAtPlBhV2hpY2hTdHItLTsKLSAgICB9ICAKLSAgICBpZiAoY2gg
PT0gJ1xuJykgewotICAgICAgICBpbi0+YmFzZS5saW5lLS07Ci0gICAgICAgIERlY0xpbmVOdW1i
ZXIoKTsKLSAgICB9Ci19IC8vIHN0cl91bmdldGNoCi0KLWludCBTY2FuRnJvbVN0cmluZyhjb25z
dCBjaGFyICpzKQotewotICAgIAotICAgIFN0cmluZ0lucHV0U3JjICppbiA9IG1hbGxvYyhzaXpl
b2YoU3RyaW5nSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihTdHJpbmdJbnB1
dFNyYykpOwotICAgIGluLT5wID0gKGNoYXIqKSBzOwotICAgIGluLT5iYXNlLmxpbmUgPSAxOwot
ICAgIGluLT5iYXNlLnNjYW4gPSBieXRlX3NjYW47Ci0gICAgaW4tPmJhc2UuZ2V0Y2ggPSAoaW50
ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc3RyX2dldGNoOwotICAgIGluLT5iYXNlLnVu
Z2V0Y2ggPSAodm9pZCAoKikoSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAgKikpc3RyX3VuZ2V0
Y2g7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OwotICAgIGNwcC0+Y3Vy
cmVudElucHV0ID0gJmluLT5iYXNlOwotCi0gICAgcmV0dXJuIDE7Ci19IC8vIFNjYW5Gcm9tU3Ry
aW5nOwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGbG9hdGluZyBwb2ludCBjb25zdGFudHM6IC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLQotI2RlZmluZSBBUFBFTkRfQ0hBUl9TKGNoLCBzdHIsIGxlbiwgbWF4
X2xlbikgXAotICAgICAgaWYgKGxlbiA8IG1heF9sZW4pIHsgXAotICAgICAgICAgIHN0cltsZW4r
K10gPSBjaDsgXAotICAgICAgfSBlbHNlIGlmICghYWxyZWFkeUNvbXBsYWluZWQpIHsgXAotICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJCVUZGRVIgT1ZFUkZMT1ciKTsgXAotICAgICAgICAg
IGFscmVhZHlDb21wbGFpbmVkID0gMTsgXAotICAgICAgfQotCi0vKgotICogbEZsb2F0Q29uc3Qo
KSAtIFNjYW4gYSBmbG9hdGluZyBwb2ludCBjb25zdGFudC4gIEFzc3VtZXMgdGhhdCB0aGUgc2Nh
bm5lcgotICogICAgICAgICBoYXMgc2VlbiBhdCBsZWFzdCBvbmUgZGlnaXQsIGZvbGxvd2VkIGJ5
IGVpdGhlciBhIGRlY2ltYWwgJy4nIG9yIHRoZQotICogICAgICAgICBsZXR0ZXIgJ2UnLgotICog
Y2ggLSAnLicgb3IgJ2UnCi0gKiBsZW4gLSBsZW5ndGggb2Ygc3RyaW5nIGFscmVhZHkgY29waWVk
IGludG8geXlsdmFscHAtPnN5bWJvbF9uYW1lLgotICovCi0KLXN0YXRpYyBpbnQgbEZsb2F0Q29u
c3QoaW50IGNoLCBpbnQgbGVuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgYWxy
ZWFkeUNvbXBsYWluZWQgPSAwOwotICAgIGFzc2VydCgoY2ggPT0gJy4nKSB8fCAoY2ggPT0gJ2Un
KSB8fCAoY2ggPT0gJ0UnKSk7Ci0KLSAgICBpZiAoY2ggPT0gJy4nKSB7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVu
LCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gd2hpbGUg
KGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwotICAgIH0KLQotICAgIC8vIEV4cG9uZW50OgotICAg
IGlmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7Ci0gICAgICAgIEFQUEVORF9DSEFSX1MoY2gs
IHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgaWYgKGNoID09ICcrJykgewotICAgICAgICAgICAgQVBQRU5EX0NIQVJf
UyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwot
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLScpIHsKLSAgICAgICAg
ICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lN
Qk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNo
ID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAt
PnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAg
IGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygiRVhQT05FTlQgSU5WQUxJRCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNw
cC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHAp
OwotCi0gICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICB5eWx2YWxw
cC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgeXlsdmFscHAtPnNjX2Z2YWwgPSAoZmxv
YXQpIGF0b2ZfZG90KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0gICAgaWYgKGlzaW5mZih5eWx2
YWxwcC0+c2NfZnZhbCkpIHsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkZMT0FUIENPTlNU
QU5UIE9WRVJGTE9XIik7Ci0gICAgfQotICAgIHJldHVybiBDUFBfRkxPQVRDT05TVEFOVDsKLX0g
Ly8gbEZsb2F0Q29uc3QKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIE5vcm1hbCBTY2FubmVy
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIAotc3RhdGljIGludCBieXRlX3NjYW4oSW5wdXRT
cmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBjaGFyIHN0cmluZ192YWxbTUFY
X1NUUklOR19MRU4gKyAxXTsKLSAgICBpbnQgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwotICAgIGlu
dCBsZW4sIGNoLCBpaSwgaXZhbCA9IDA7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHl5bHZh
bHBwLT5zY19pbnQgPSAwOwotICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotIAotICAgICAgICB3aGlsZSAoY2ggPT0gJyAn
IHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xyJykgewotICAgICAgICAgICAgeXlsdmFscHAtPnNj
X2ludCA9IDE7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBj
cHAtPmx0b2tlbkxvYy5maWxlID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7Ci0gICAgICAgIGNw
cC0+bHRva2VuTG9jLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICAgICAgYWxy
ZWFkeUNvbXBsYWluZWQgPSAwOwotICAgICAgICBsZW4gPSAwOwotICAgICAgICBzd2l0Y2ggKGNo
KSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gY2g7IC8vIFNpbmdsZSBj
aGFyYWN0ZXIgdG9rZW4KLSAgICAgICAgY2FzZSBFT0Y6Ci0gICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdF
JzoKLSAgICAgICAgY2FzZSAnRic6IGNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6IGNhc2Ug
J0onOgotICAgICAgICBjYXNlICdLJzogY2FzZSAnTCc6IGNhc2UgJ00nOiBjYXNlICdOJzogY2Fz
ZSAnTyc6Ci0gICAgICAgIGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6IGNhc2UgJ1MnOiBj
YXNlICdUJzoKLSAgICAgICAgY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6
IGNhc2UgJ1knOgotICAgICAgICBjYXNlICdaJzogY2FzZSAnXyc6Ci0gICAgICAgIGNhc2UgJ2En
OiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKLSAgICAgICAgY2FzZSAn
Zic6IGNhc2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOgotICAgICAgICBjYXNl
ICdrJzogY2FzZSAnbCc6IGNhc2UgJ20nOiBjYXNlICduJzogY2FzZSAnbyc6Ci0gICAgICAgIGNh
c2UgJ3AnOiBjYXNlICdxJzogY2FzZSAncic6IGNhc2UgJ3MnOiBjYXNlICd0JzoKLSAgICAgICAg
Y2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOgotICAgICAg
ICBjYXNlICd6JzogICAgICAgICAgICAKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJP
TF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKChj
aCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fAotICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdB
JyAmJiBjaCA8PSAnWicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYmIGNo
IDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJyk7Ci0gICAgICAgICAg
ICBhc3NlcnQobGVuIDw9IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgeXlsdmFs
cHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAg
ICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+
c3ltYm9sX25hbWUpOwotICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElGSUVSOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJzAnOgotICAgICAgICAgICAgQVBQRU5EX0NIQVJf
UyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwot
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSB7
ICAvLyBoZXhhZGVjaW1hbCBpbnRlZ2VyIGNvbnN0YW50cwotICAgICAgICAgICAgICAgIEFQUEVO
RF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVf
TEVOKTsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGlmICgoY2ggPj0gJzAn
ICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8
PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGl2YWwgPSAwOwotICAgICAg
ICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGl2YWwgPD0g
MHgwZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnMCc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnQScgKyAxMDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpaSA9IGNoIC0gJ2EnICsgMTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCA0KSB8IGlpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYWxyZWFkeUNvbXBsYWluZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiSEVYIENPTlNU
QU5UIE9WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUNvbXBs
YWluZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8
PSAnOScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2gg
PD0gJ0YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNo
IDw9ICdmJykpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IENQUEVycm9yVG9JbmZvTG9nKCJIRVggQ09OU1RBTlQgSU5WQUxJRCIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1BWF9TWU1CT0xfTkFNRV9MRU4p
OwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAg
ICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gaXZh
bDsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7IC8vIG9jdGFsIGludGVnZXIgY29u
c3RhbnRzCi0gICAgICAgICAgICAgICAgaXZhbCA9IDA7Ci0gICAgICAgICAgICAgICAgZG8gewot
ICAgICAgICAgICAgICAgICAgICBpZiAoKGl2YWwgPD0gMHgxZmZmZmZmZikgJiYgKGxlbiA8IE1B
WF9TWU1CT0xfTkFNRV9MRU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWxwcC0+
c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNo
IC0gJzAnOwotICAgICAgICAgICAgICAgICAgICAgICAgaXZhbCA9IChpdmFsIDw8IDMpIHwgaWk7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFscmVhZHlDb21wbGFpbmVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiT0NUIENPTlNUQU5UIE9W
RVJGTE9XIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5Q29tcGxhaW5lZCA9IDE7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKTsKLSAgICAgICAgICAgICAg
ICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICdlJyB8fCBjaCA9PSAnZicgfHwgY2ggPT0gJ2gnIHx8
IGNoID09ICd4J3x8IGNoID09ICdFJykgCi0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gbEZs
b2F0Q29uc3QoY2gsIGxlbiwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGFzc2VydChsZW4g
PD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51
bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAg
IHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOwotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5U
Q09OU1RBTlQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3Vy
cmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgIGNoID0gJzAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRmFs
bCB0aHJvdWdoLi4uCi0gICAgICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2Ug
JzQnOgotICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2Fz
ZSAnOSc6Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhj
aCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAg
ICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0g
JzknKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ2UnIHx8IGNoID09ICdF
JykgewotICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdChjaCwgbGVuLCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFzc2VydChsZW4gPD0g
TUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9u
YW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGl2
YWwgPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGxlbjsgaWkrKykgewot
ICAgICAgICAgICAgICAgICAgICBjaCA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtpaV0gLSAnMCc7
Ci0gICAgICAgICAgICAgICAgICAgIGl2YWwgPSBpdmFsKjEwICsgY2g7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICgoaXZhbCA+IDIxNDc0ODM2NCkgfHwgKGl2YWwgPT0gMjE0NzQ4MzY0ICYmIGNo
ID49IDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiSU5U
RUdFUiBDT05TVEFOVCBPVkVSRkxPVyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Ci0gICAgICAgICAgICAgICAgaWYoaXZhbD09MCkK
LSAgICAgICAgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCIwIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICctJzoKLSAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
ICAgICAgICBpZiAoY2ggPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ERUNf
T1A7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAg
IHJldHVybiBDUFBfU1VCX0FTU0lHTjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICctJzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICcr
JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5DX09QOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0FERF9BU1NJ
R047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElu
cHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgICAgIHJldHVybiAnKyc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJyonOgotICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX01VTF9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwg
eXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnKic7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAn
PScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01PRF9BU1NJR047Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGNoID09ICc+Jyl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdI
VF9CUkFDRTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJy
ZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICclJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnOic6
Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICc+JykgewotICAgICAgICAg
ICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJBQ0tFVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICc6JzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSAnXic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYg
KGNoID09ICdeJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfWE9SX09QOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9BU1NJR047Ci0gICAgICAgICAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuICdeJzsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlICc9
JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9FUV9PUDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICc9JzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgY2FzZSAnISc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09
ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTkVfT1A7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnISc7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ3wnOgotICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgIGlmIChjaCA9PSAnfCcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09SX09Q
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09SX0FTU0lHTjsKLSAgICAgICAgICAgICAg
ICBlbHNlewotICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4g
J3wnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnJic6
Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICcmJykgewotICAgICAgICAg
ICAgICAgIHJldHVybiBDUFBfQU5EX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0FO
RF9BU1NJR047Ci0gICAgICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgJzwnOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlm
IChjaCA9PSAnPCcpIHsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGlmKGNo
ID09ICc9JykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX0FTU0lHTjsKLSAg
ICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1
dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9MRUZUX09QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ1BQX0xFX09QOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnJScpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0U7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNo
ID09ICc6JykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9CUkFDS0VU
OwotICAgICAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgICAgICAgY3Bw
LT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBjYXNlICc+JzoK
LSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7Ci0gICAgICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaCA9PSAnPScpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDUFBfUklHSFRfQVNTSUdOOwotICAgICAgICAgICAgICAgIGVsc2V7Ci0gICAg
ICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1JJR0hU
X09QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0dF
X09QOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNwcC0+
Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz4nOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAg
aWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoJy4nLCAwLCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLicpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBTcGVjaWFsIEVPRiBoYWNrCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAnLic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBj
YXNlICcvJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJy8nKSB7Ci0g
ICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT0gRU9GKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdcbic7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcqJykgewot
ICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoY2ggIT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
PT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IkVPRiBJTiBDT01NRU5UIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygiRU9GIElOIENPTU1FTlQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gd2hp
bGUgKGNoICE9ICcvJyk7Ci0gICAgICAgICAgICAgICAgLy8gR28gdHJ5IGl0IGFnYWluLi4uCi0g
ICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVy
biBDUFBfRElWX0FTU0lHTjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcvJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJy
ZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAg
ICB3aGlsZSAoY2ggIT0gJyInICYmIGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNoID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFy
dCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBUFBFTkRf
Q0hBUl9TKGNoLCBzdHJpbmdfdmFsLCBsZW4sIE1BWF9TVFJJTkdfTEVOKTsKLSAgICAgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NU
UklOR19MRU4pOwotICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5dID0gJ1wwJzsKLSAgICAgICAg
ICAgIGlmIChjaCA9PSAnIicpIHsKLSAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQg
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFsKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX1NUUkNPTlNUQU5UOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9MIElOIFNUUklORyIpOwotICAgICAgICAgICAgICAg
IHJldHVybiBFUlJPUl9TWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotfSAvLyBieXRlX3NjYW4KLQotaW50IHl5bGV4X0NQUChjaGFyKiBidWYs
IGludCBtYXhTaXplKQoteyAgICAKLSAgICB5eXN0eXBlcHAgeXlsdmFscHA7Ci0gICAgaW50IHRv
a2VuID0gJ1xuJzsgICAKLQotICAgIGZvcig7OykgewotCi0gICAgICAgIGNoYXIqIHRva2VuU3Ry
aW5nID0gMDsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKLSAgICAgICAgaWYoY2hlY2tfRU9GKHRva2VuKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAodG9rZW4gPCAwKSB7Ci0gICAgICAgICAg
ICAvLyBUaGlzIGNoZWNrIG1heSBuZWVkIHRvIGJlIGltcHJvdmVkIHRvIHN1cHBvcnQgVVRGLTgK
LSAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgaW4gY29tbWVudHMuCi0gICAgICAgICAgICBDUFBF
cnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGVuY291bnRlcmVkIG5vbi1BU0NJSSBjaGFyYWN0
ZXIgaW4gc2hhZGVyIHNvdXJjZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHRva2VuID09ICcjJykgewotICAgICAgICAgICAgaWYgKGNwcC0+cHJldmlv
dXNfdG9rZW4gPT0gJ1xuJ3x8IGNwcC0+cHJldmlvdXNfdG9rZW4gPT0gMCkgewotICAgICAgICAg
ICAgICAgIHRva2VuID0gcmVhZENQUGxpbmUoJnl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBp
ZihjaGVja19FT0YodG9rZW4pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgQ1BQRXJyb3JUb0luZm9Mb2coInByZXByb2Nlc3NvciBjb21tYW5kIG11c3Qgbm90IGJlIHBy
ZWNlZGVkIGJ5IGFueSBvdGhlciBzdGF0ZW1lbnQgaW4gdGhhdCBsaW5lIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY3BwLT5w
cmV2aW91c190b2tlbiA9IHRva2VuOwotICAgICAgICAvLyBleHBhbmQgbWFjcm9zCi0gICAgICAg
IGlmICh0b2tlbiA9PSBDUFBfSURFTlRJRklFUiAmJiBNYWNyb0V4cGFuZCh5eWx2YWxwcC5zY19p
ZGVudCwgJnl5bHZhbHBwKSkgewotICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQg
PSAxOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodG9r
ZW4gPT0gJ1xuJykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjcHAtPnBhc3RGaXJz
dFN0YXRlbWVudCA9IDE7Ci0KLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7
Ci0gICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFs
cHAuc2NfaWRlbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09IENQUF9GTE9BVENPTlNU
QU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7Ci0gICAgICAgICAgICB0b2tlblN0cmlu
ZyA9IHl5bHZhbHBwLnN5bWJvbF9uYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
dG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICh0b2tlblN0cmluZykgewotICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxl
bih0b2tlblN0cmluZyk7Ci0gICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDE7Ci0g
ICAgICAgICAgICBpZiAobGVuID49IG1heFNpemUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bWF4U2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZSAgaWYgKGxlbiA+IDApIHsKLSAgICAgICAgICAg
ICAgICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxl
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci19IC8vIHl5bGV4Ci0KLS8vQ2hlY2tzIGlmIHRoZSB0b2tlbiBqdXN0IHJlYWQgaXMgRU9G
IG9yIG5vdC4KLWludCBjaGVja19FT0YoaW50IHRva2VuKQotewotICAgaWYodG9rZW49PS0xKXsK
LSAgICAgICBpZihjcHAtPmlmZGVwdGggPjApewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
I2VuZGlmIG1pc3NpbmchISBDb21waWxhdGlvbiBzdG9wcGVkIik7Ci0gICAgICAgIGNwcC0+Q29t
cGlsZUVycm9yPTE7Ci0gICAgICAgfQotICAgICAgcmV0dXJuIDE7Ci0gICB9Ci0gICByZXR1cm4g
MDsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2Ygc2Nhbm5lci5jIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiNjdjMWQ2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5W
SURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGll
cyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1v
ZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29u
c3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUg
d2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3Ig
cmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBv
ZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1
YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1l
eGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmln
aW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJl
cHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdp
dGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9y
bXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJl
LCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBu
b3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNo
IHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFt
ZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3Jh
dGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhp
cyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVk
LCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRl
ZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJp
dmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3
YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5k
ZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJ
UyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
RUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04s
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1F
UkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMg
VVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RI
RVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBB
TlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5H
IElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBB
TkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNF
RCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklE
SUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1c
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBzY2FubmVyLmgKLS8vCi0KLSNpZiAhZGVmaW5l
ZChfX1NDQU5ORVJfSCkKLSNkZWZpbmUgX19TQ0FOTkVSX0ggMQotCi0jaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3IvcGFyc2VyLmgiCi0KLS8vIE5vdCByZWFsbHkgYXRvbSB0YWJsZSBzdHVmZiBidXQg
bmVlZGVkIGZpcnN0Li4uCi0KLXR5cGVkZWYgc3RydWN0IFNvdXJjZUxvY19SZWMgewotICAgIHVu
c2lnbmVkIHNob3J0IGZpbGUsIGxpbmU7Ci19IFNvdXJjZUxvYzsKLQotaW50IHl5bGV4X0NQUChj
aGFyKiBidWYsIGludCBtYXhTaXplKTsKLQotdHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgewotICAg
IHN0cnVjdCBJbnB1dFNyYwkqcHJldjsKLSAgICBpbnQJCQkoKnNjYW4pKHN0cnVjdCBJbnB1dFNy
YyAqLCB5eXN0eXBlcHAgKik7Ci0gICAgaW50CQkJKCpnZXRjaCkoc3RydWN0IElucHV0U3JjICos
IHl5c3R5cGVwcCAqKTsKLSAgICB2b2lkCQkoKnVuZ2V0Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCBp
bnQsIHl5c3R5cGVwcCAqKTsKLSAgICBpbnQJCQluYW1lOyAgLyogYXRvbSAqLwotICAgIGludAkJ
CWxpbmU7Ci19IElucHV0U3JjOwotCi1pbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOyAg
IC8vIEludGlhbGlzZSB0aGUgY3BwIHNjYW5uZXIuIAotaW50IEluaXRTY2FubmVySW5wdXQoQ1BQ
U3RydWN0ICpjcHAsIGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0
IGludCBsZW5ndGhbXSk7Ci1pbnQgY2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVj
ayBpZiB3ZSBoaXQgYSBFT0YgYWJydXB0bHkgCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0
IGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhlIG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLklu
Zm8ubG9nCi12b2lkIFNldExpbmVOdW1iZXIoaW50KTsKLXZvaWQgU2V0U3RyaW5nTnVtYmVyKGlu
dCk7Ci12b2lkIEluY0xpbmVOdW1iZXIodm9pZCk7Ci12b2lkIERlY0xpbmVOdW1iZXIodm9pZCk7
Ci1pbnQgRnJlZVNjYW5uZXIodm9pZCk7ICAgICAgICAgICAgICAgICAvLyBGcmVlIHRoZSBjcHAg
c2Nhbm5lcgotI2VuZGlmIC8vICEoZGVmaW5lZChfX1NDQU5ORVJfSCkKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2Jh
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c2xnbG9iYWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MzQ2MjYuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zbGdsb2JhbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5W
SURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3Ug
aW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmli
dXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2Yg
dGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVh
c2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJ
QQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJp
ZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBO
VklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRl
ciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0
aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVk
aXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlv
dSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUg
Y29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5n
Ci10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhl
IE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2Ug
bWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4K
LUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdo
dHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElB
IGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMg
dGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3Ro
ZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRl
ZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZU
V0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJ
RUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhF
UiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8g
RVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAot
SU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhF
IFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBU
SEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhF
T1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElB
QklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0v
LwotLy8gc2xnbG9iYWxzLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX1NMR0xPQkFMU19IKQotI2Rl
ZmluZSBfX1NMR0xPQkFMU19IIDEKLQotdHlwZWRlZiBzdHJ1Y3QgQ1BQU3RydWN0X1JlYyBDUFBT
dHJ1Y3Q7Ci0KLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKLQotI3VuZGVmICBDUFBDX0RFQlVHX1RI
RV9DT01QSUxFUgotI2lmIGRlZmluZWQoX0RFQlVHKQotI2RlZmluZSBDUFBDX0RFQlVHX1RIRV9D
T01QSUxFUiAxCi0jZW5kaWYKLQotI3VuZGVmICBDUFBDX0VOQUJMRV9UT09MUwotI2RlZmluZSBD
UFBDX0VOQUJMRV9UT09MUyAxCi0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCIKLSNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCIKLSNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIgotI2lmICFkZWZpbmVkKE5PX1BBUlNF
UikKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCi0jZW5kaWYKLQot
I2lmICFkZWZpbmVkKE5VTEwpCi0jZGVmaW5lIE5VTEwgMAotI2VuZGlmCi0KLSNlbmRpZiAvLyAh
KGRlZmluZWQoX19TTEdMT0JBTFNfSCkKLQotCi0gICAgCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOGIyNTYuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMK
KysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1D
b3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0
aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1
c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlz
IE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4g
IElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNl
LCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4K
LQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMg
eW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNv
cHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBT
b2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhl
Ci1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3Vy
Y2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0
ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90
aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRp
c2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3
YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9n
b3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4
cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNl
cwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNs
dWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBp
bmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3
aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2Fy
ZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5H
IFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElO
RyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwK
LU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElO
IENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBO
VklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBF
WEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RV
Q1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNP
RlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJB
Q1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RI
RVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBzeW1ib2xz
LmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFs
cy5oIgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NzA2KQotI2VuZGlmCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTeW1ib2wgVGFibGUgVmFyaWFibGVz
OiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLQotU2NvcGUgKlNjb3BlTGlzdCA9IE5VTEw7Ci1TY29wZSAq
Q3VycmVudFNjb3BlID0gTlVMTDsKLVNjb3BlICpHbG9iYWxTY29wZSA9IE5VTEw7Ci0KLXN0YXRp
YyB2b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkgewotICAgIFNjb3BlICpzY29wZSA9IF9z
Y29wZTsKLQotICAgIGlmIChzY29wZS0+bmV4dCkKLSAgICAgICAgc2NvcGUtPm5leHQtPnByZXYg
PSBzY29wZS0+cHJldjsKLSAgICBpZiAoc2NvcGUtPnByZXYpCi0gICAgICAgIHNjb3BlLT5wcmV2
LT5uZXh0ID0gc2NvcGUtPm5leHQ7Ci0gICAgZWxzZQotICAgICAgICBTY29wZUxpc3QgPSBzY29w
ZS0+bmV4dDsKLX0KLQotLyoKLSAqIE5ld1Njb3BlKCkKLSAqCi0gKi8KLVNjb3BlICpOZXdTY29w
ZUluUG9vbChNZW1vcnlQb29sICpwb29sKQotewotICAgIFNjb3BlICpsU2NvcGU7Ci0KLSAgICBs
U2NvcGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNjb3BlKSk7Ci0gICAgbFNjb3BlLT5wb29s
ID0gcG9vbDsKLSAgICBsU2NvcGUtPnBhcmVudCA9IE5VTEw7Ci0gICAgbFNjb3BlLT5mdW5TY29w
ZSA9IE5VTEw7Ci0gICAgbFNjb3BlLT5zeW1ib2xzID0gTlVMTDsKLSAgICAKLSAgICBsU2NvcGUt
PmxldmVsID0gMDsKLQotICAgIGxTY29wZS0+cHJvZ3JhbXMgPSBOVUxMOwotICAgIGlmICgobFNj
b3BlLT5uZXh0ID0gU2NvcGVMaXN0KSkKLSAgICAgICAgU2NvcGVMaXN0LT5wcmV2ID0gbFNjb3Bl
OwotICAgIGxTY29wZS0+cHJldiA9IDA7Ci0gICAgU2NvcGVMaXN0ID0gbFNjb3BlOwotICAgIG1l
bV9BZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBsU2NvcGUpOwotICAgIHJldHVybiBsU2Nv
cGU7Ci19IC8vIE5ld1Njb3BlCi0KLS8qCi0gKiBQdXNoU2NvcGUoKQotICoKLSAqLwotCi12b2lk
IFB1c2hTY29wZShTY29wZSAqZlNjb3BlKQotewotICAgIFNjb3BlICpsU2NvcGU7Ci0KLSAgICBp
ZiAoQ3VycmVudFNjb3BlKSB7Ci0gICAgICAgIGZTY29wZS0+bGV2ZWwgPSBDdXJyZW50U2NvcGUt
PmxldmVsICsgMTsKLSAgICAgICAgaWYgKGZTY29wZS0+bGV2ZWwgPT0gMSkgewotICAgICAgICAg
ICAgaWYgKCFHbG9iYWxTY29wZSkgewotICAgICAgICAgICAgICAgIC8qIEhBQ0sgLSBDVEQgLS0g
aWYgR2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0xLCB3ZSdyZQotICAgICAgICAgICAgICAg
ICAqIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1cGVyZ2xvYmFsIHNjb3BlLiAgVGhpbmdz
Ci0gICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBpZiB3ZSBsZWF2ZSB0aGUgbGV2ZWwgYXMg
MSwgc28gd2UgYXJiaXRyYXJpbHkKLSAgICAgICAgICAgICAgICAgKiBzZXQgaXQgdG8gMiAqLwot
ICAgICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAyOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49IDIpIHsKLSAgICAgICAgICAgIGxTY29w
ZSA9IGZTY29wZTsKLSAgICAgICAgICAgIHdoaWxlIChsU2NvcGUtPmxldmVsID4gMikKLSAgICAg
ICAgICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7Ci0gICAgICAgICAgICBmU2NvcGUtPmZ1
blNjb3BlID0gbFNjb3BlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZlNjb3Bl
LT5sZXZlbCA9IDA7Ci0gICAgfQotICAgIGZTY29wZS0+cGFyZW50ID0gQ3VycmVudFNjb3BlOwot
ICAgIEN1cnJlbnRTY29wZSA9IGZTY29wZTsKLX0gLy8gUHVzaFNjb3BlCi0KLS8qCi0gKiBQb3BT
Y29wZSgpCi0gKgotICovCi0KLVNjb3BlICpQb3BTY29wZSh2b2lkKQotewotICAgIFNjb3BlICps
U2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBDdXJyZW50U2NvcGU7Ci0gICAgaWYgKEN1cnJlbnRTY29w
ZSkKLSAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVudFNjb3BlLT5wYXJlbnQ7Ci0gICAgcmV0
dXJuIGxTY29wZTsKLX0gLy8gUG9wU2NvcGUKLQotLyoKLSAqIE5ld1N5bWJvbCgpIC0gQWxsb2Nh
dGUgYSBuZXcgc3ltYm9sIG5vZGU7Ci0gKgotICovCi0KLVN5bWJvbCAqTmV3U3ltYm9sKFNvdXJj
ZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKQotewot
ICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgY2hhciAqcGNoOwotICAgIHVuc2lnbmVkIGludCBpaTsK
LQotICAgIGxTeW1iID0gKFN5bWJvbCAqKSBtZW1fQWxsb2MoZlNjb3BlLT5wb29sLCBzaXplb2Yo
U3ltYm9sKSk7Ci0gICAgbFN5bWItPmxlZnQgPSBOVUxMOwotICAgIGxTeW1iLT5yaWdodCA9IE5V
TEw7Ci0gICAgbFN5bWItPm5leHQgPSBOVUxMOwotICAgIGxTeW1iLT5uYW1lID0gbmFtZTsKLSAg
ICBsU3ltYi0+bG9jID0gKmxvYzsKLSAgICBsU3ltYi0+a2luZCA9IGtpbmQ7Ci0gICAgCi0gICAg
Ly8gQ2xlYXIgdW5pb24gYXJlYToKLQotICAgIHBjaCA9IChjaGFyICopICZsU3ltYi0+ZGV0YWls
czsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YobFN5bWItPmRldGFpbHMpOyBpaSsrKQot
ICAgICAgICAqcGNoKysgPSAwOwotICAgIHJldHVybiBsU3ltYjsKLX0gLy8gTmV3U3ltYm9sCi0K
LS8qCi0gKiBsQWRkVG9UcmVlKCkgLSBVc2luZyBhIGJpbmFyeSB0cmVlIGlzIG5vdCBhIGdvb2Qg
aWRlYSBmb3IgYmFzaWMgYXRvbSB2YWx1ZXMgYmVjYXVzZSB0aGV5Ci0gKiAgICAgICAgIGFyZSBn
ZW5lcmF0ZWQgaW4gb3JkZXIuICBXZSdsbCBmaXggdGhpcyBsYXRlciAoYnkgcmV2ZXJzaW5nIHRo
ZSBiaXQgcGF0dGVybikuCi0gKi8KLQotc3RhdGljIHZvaWQgbEFkZFRvVHJlZShTeW1ib2wgKipm
U3ltYm9scywgU3ltYm9sICpmU3ltYikKLXsKLSAgICBTeW1ib2wgKmxTeW1iOwotICAgIGludCBs
cmV2LCBmcmV2OwotCi0gICAgbFN5bWIgPSAqZlN5bWJvbHM7Ci0gICAgaWYgKGxTeW1iKSB7Ci0g
ICAgICAgIGZyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBmU3ltYi0+bmFtZSk7Ci0gICAg
ICAgIHdoaWxlIChsU3ltYikgewotICAgICAgICAgICAgbHJldiA9IEdldFJldmVyc2VkQXRvbShh
dGFibGUsIGxTeW1iLT5uYW1lKTsKLSAgICAgICAgICAgIGlmIChscmV2ID09IGZyZXYpIHsKLSAg
ICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiR2V0QXRvbVN0cmluZyhhdGFibGUsIGZT
eW1iLT5uYW1lKSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAobHJldiA+IGZyZXYpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGxTeW1iLT5sZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYiA9IGxT
eW1iLT5sZWZ0OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbFN5bWItPmxlZnQgPSBmU3ltYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5yaWdodCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+cmlnaHQgPSBmU3ltYjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
KmZTeW1ib2xzID0gZlN5bWI7Ci0gICAgfQotfSAvLyBsQWRkVG9UcmVlCi0KLQotLyoKLSAqIEFk
ZFN5bWJvbCgpIC0gQWRkIGEgdmFyaWFibGUsIHR5cGUsIG9yIGZ1bmN0aW9uIG5hbWUgdG8gYSBz
Y29wZS4KLSAqCi0gKi8KLQotU3ltYm9sICpBZGRTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3Bl
ICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQpCi17Ci0gICAgU3ltYm9sICpsU3lt
YjsKLQotICAgIGlmICghZlNjb3BlKQotICAgICAgICBmU2NvcGUgPSBDdXJyZW50U2NvcGU7Ci0g
ICAgbFN5bWIgPSBOZXdTeW1ib2wobG9jLCBmU2NvcGUsIGF0b20sIGtpbmQpOwotICAgIGxBZGRU
b1RyZWUoJmZTY29wZS0+c3ltYm9scywgbFN5bWIpOwotICAgIHJldHVybiBsU3ltYjsKLX0gLy8g
QWRkU3ltYm9sCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogU3ltYm9sIFNlbWFudGljIEZ1bmN0
aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTG9va1VwTG9jYWxTeW1ib2woKQotICoKLSAq
LwotCi1TeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKQot
ewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgaW50IHJuYW1lLCByYXRvbTsKLQotICAgIHJhdG9t
ID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgYXRvbSk7Ci0gICAgaWYgKCFmU2NvcGUpCi0gICAg
ICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKLSAgICBsU3ltYiA9IGZTY29wZS0+c3ltYm9sczsK
LSAgICB3aGlsZSAobFN5bWIpIHsKLSAgICAgICAgcm5hbWUgPSBHZXRSZXZlcnNlZEF0b20oYXRh
YmxlLCBsU3ltYi0+bmFtZSk7Ci0gICAgICAgIGlmIChybmFtZSA9PSByYXRvbSkgewotICAgICAg
ICAgICAgcmV0dXJuIGxTeW1iOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJu
YW1lID4gcmF0b20pIHsKLSAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5yaWdodDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0gLy8g
TG9va1VwTG9jYWxTeW1ib2wKLQotLyoKLSAqIExvb2tVcFN5bWJvbCgpCi0gKgotICovCi0KLVN5
bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKQotewotICAgIFN5bWJv
bCAqbFN5bWI7Ci0KLSAgICBpZiAoIWZTY29wZSkKLSAgICAgICAgZlNjb3BlID0gQ3VycmVudFNj
b3BlOwotICAgIHdoaWxlIChmU2NvcGUpIHsKLSAgICAgICAgbFN5bWIgPSBMb29rVXBMb2NhbFN5
bWJvbChmU2NvcGUsIGF0b20pOwotICAgICAgICBpZiAobFN5bWIpCi0gICAgICAgICAgICByZXR1
cm4gbFN5bWI7Ci0gICAgICAgIGZTY29wZSA9IGZTY29wZS0+cGFyZW50OwotICAgIH0KLSAgICBy
ZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwU3ltYm9sCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZDBiMDcuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5
cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9u
KCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2Us
Ci1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5W
SURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElm
IHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBp
bnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQot
SW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91
IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHly
aWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0
d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1O
VklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2Ug
YW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0
aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNl
IG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2Ns
YWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJl
LgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mg
b2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJl
c3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwot
ZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRp
bmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZy
aW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGlj
aCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBp
cyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBS
T1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBX
SVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5P
Ti1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENP
TUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklE
SUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVN
UExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
LVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJ
T04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRX
QVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1Qs
Ci1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJX
SVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBzeW1ib2xzLmgK
LS8vCi0KLSNpZiAhZGVmaW5lZChfX1NZTUJPTFNfSCkKLSNkZWZpbmUgX19TWU1CT0xTX0ggMQot
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oIgotCi10eXBlZGVmIGVu
dW0gc3ltYm9sa2luZCB7Ci0gICBNQUNST19TCi19IHN5bWJvbGtpbmQ7Ci0KLS8vIFR5cGVkZWZz
IGZvciB0aGluZ3MgZGVmaW5lZCBoZXJlIGluICJzeW1ib2xzLmgiOgotCi10eXBlZGVmIHN0cnVj
dCBTY29wZV9SZWMgU2NvcGU7Ci10eXBlZGVmIHN0cnVjdCBTeW1ib2xfUmVjIFN5bWJvbDsKLQot
dHlwZWRlZiBzdHJ1Y3QgU3ltYm9sTGlzdF9SZWMgewotICAgIHN0cnVjdCBTeW1ib2xMaXN0X1Jl
YyAqbmV4dDsKLSAgICBTeW1ib2wgKnN5bWI7Ci19IFN5bWJvbExpc3Q7Ci0KLXN0cnVjdCBTY29w
ZV9SZWMgewotICAgIFNjb3BlICpuZXh0LCAqcHJldjsgICAgIC8vIGRvdWJseS1saW5rZWQgbGlz
dCBvZiBhbGwgc2NvcGVzCi0gICAgU2NvcGUgKnBhcmVudDsKLSAgICBTY29wZSAqZnVuU2NvcGU7
ICAgICAgICAvLyBQb2ludHMgdG8gYmFzZSBzY29wZSBvZiBlbmNsb3NpbmcgZnVuY3Rpb24KLSAg
ICBNZW1vcnlQb29sICpwb29sOyAgICAgICAvLyBwb29sIHVzZWQgZm9yIGFsbG9jYXRpb24gaW4g
dGhpcyBzY29wZQotICAgIFN5bWJvbCAqc3ltYm9sczsKLSAgICAKLQlpbnQgbGV2ZWw7ICAgICAg
ICAgICAgICAvLyAwID0gc3VwZXIgZ2xvYmFscywgMSA9IGdsb2JhbHMsIGV0Yy4KLQotICAgIC8v
IE9ubHkgdXNlZCBhdCBnbG9iYWwgc2NvcGUgKGxldmVsIDEpOgotICAgIFN5bWJvbExpc3QgKnBy
b2dyYW1zOyAgIC8vIExpc3Qgb2YgcHJvZ3JhbXMgZm9yIHRoaXMgY29tcGlsYXRpb24uCi19Owot
Ci0KLS8vIFN5bWJvbCB0YWJsZSBpcyBhIHNpbXBsZSBiaW5hcnkgdHJlZS4KLQotI2luY2x1ZGUg
ImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaCIgICAgICAgIC8vIHRvIGdldCBNYWNyb1N5bWJv
bCBkZWYKLQotc3RydWN0IFN5bWJvbF9SZWMgewotICAgIFN5bWJvbCAqbGVmdCwgKnJpZ2h0Owot
ICAgIFN5bWJvbCAqbmV4dDsKLSAgICBpbnQgbmFtZTsgICAgICAgLy8gTmFtZSBhdG9tCi0gICAg
U291cmNlTG9jIGxvYzsKLSAgICBzeW1ib2xraW5kIGtpbmQ7Ci0gICAgdW5pb24gewotICAgICAg
ICBNYWNyb1N5bWJvbCBtYWM7Ci0gICAgfSBkZXRhaWxzOwotfTsKLQotZXh0ZXJuIFNjb3BlICpD
dXJyZW50U2NvcGU7Ci1leHRlcm4gU2NvcGUgKkdsb2JhbFNjb3BlOwotZXh0ZXJuIFNjb3BlICpT
Y29wZUxpc3Q7Ci0KLVNjb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICopOwotI2RlZmlu
ZSBOZXdTY29wZSgpICAgICAgTmV3U2NvcGVJblBvb2woQ3VycmVudFNjb3BlLT5wb29sKQotdm9p
ZCBQdXNoU2NvcGUoU2NvcGUgKmZTY29wZSk7Ci1TY29wZSAqUG9wU2NvcGUodm9pZCk7Ci1TeW1i
b2wgKk5ld1N5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IG5hbWUsIHN5
bWJvbGtpbmQga2luZCk7Ci1TeW1ib2wgKkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUg
KmZTY29wZSwgaW50IGF0b20sIHN5bWJvbGtpbmQga2luZCk7Ci1TeW1ib2wgKkxvb2tVcExvY2Fs
U3ltYm9sKFNjb3BlICpmU2NvcGUsIGludCBhdG9tKTsKLVN5bWJvbCAqTG9va1VwU3ltYm9sKFNj
b3BlICpmU2NvcGUsIGludCBhdG9tKTsKLQotCi0jZW5kaWYgLy8gIWRlZmluZWQoX19TWU1CT0xT
X0gpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
OTRjMDVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjcgKzAsMCBAQAot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3
YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9s
bG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBv
ciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNj
ZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQot
dGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRl
IHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhl
c2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxp
Y2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEg
c29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9k
aWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91
dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVk
IHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAot
cmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRo
ZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0
aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJr
cywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJ
RElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZy
b20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5v
IG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRl
ZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0
ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3Jr
cyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQot
aW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUg
TlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJ
VEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF
U1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElU
WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVS
QVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RT
LgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg
SU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkK
LU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJ
QlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhF
UiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSks
IFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4g
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KLS8vCi0vLyB0b2tlbnMuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4K
LQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVi
dWcuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvdXRpbC5oIgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0MDU0KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxNTIpCi0j
ZW5kaWYKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLyBQcmVwcm9jZXNzb3IgYW5kIFRva2VuIFJlY29yZGVyIGFuZCBQbGF5
YmFjazogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0vKgotICogaWRzdHIoKQotICogQ29weSBhIHN0cmluZyB0byBhIG1h
bGxvYydlZCBibG9jayBhbmQgY29udmVydCBpdCBpbnRvIHNvbWV0aGluZyBzdWl0YWJsZQotICog
Zm9yIGFuIElECi0gKgotICovCi0KLXN0YXRpYyBjaGFyICppZHN0cihjb25zdCBjaGFyICpmc3Ry
LCBNZW1vcnlQb29sICpwb29sKQotewotICAgIHNpemVfdCBsZW47Ci0gICAgY2hhciAqc3RyLCAq
dDsKLSAgICBjb25zdCBjaGFyICpmOwotCi0gICAgbGVuID0gc3RybGVuKGZzdHIpOwotICAgIGlm
ICghcG9vbCkKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWFsbG9jKGxlbiArIDEpOwotICAgIGVs
c2UKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWVtX0FsbG9jKHBvb2wsIGxlbiArIDEpOwotICAg
IAotICAgIGZvciAoZj1mc3RyLCB0PXN0cjsgKmY7IGYrKykgewotICAgICAgICBpZiAoaXNhbG51
bSgqZikpICp0KysgPSAqZjsKLSAgICAgICAgZWxzZSBpZiAoKmYgPT0gJy4nIHx8ICpmID09ICcv
JykgKnQrKyA9ICdfJzsKLSAgICB9Ci0gICAgKnQgPSAwOwotICAgIHJldHVybiBzdHI7Ci19IC8v
IGlkc3RyCi0KLQotLyoKLSAqIGxOZXdCbG9jaygpCi0gKgotICovCi0KLXN0YXRpYyBUb2tlbkJs
b2NrICpsTmV3QmxvY2soVG9rZW5TdHJlYW0gKmZUb2ssIE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0g
ICAgVG9rZW5CbG9jayAqbEJsb2NrOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBsQmxvY2sg
PSAoVG9rZW5CbG9jayAqKSBtYWxsb2Moc2l6ZW9mKFRva2VuQmxvY2spICsgMjU2KTsKLSAgICBl
bHNlCi0gICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2NrICopIG1lbV9BbGxvYyhwb29sLCBzaXpl
b2YoVG9rZW5CbG9jaykgKyAyNTYpOwotICAgIGxCbG9jay0+Y291bnQgPSAwOwotICAgIGxCbG9j
ay0+Y3VycmVudCA9IDA7Ci0gICAgbEJsb2NrLT5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgbEJs
b2NrICsgc2l6ZW9mKFRva2VuQmxvY2spOwotICAgIGxCbG9jay0+bWF4ID0gMjU2OwotICAgIGxC
bG9jay0+bmV4dCA9IE5VTEw7Ci0gICAgaWYgKGZUb2stPmhlYWQpIHsKLSAgICAgICAgZlRvay0+
Y3VycmVudC0+bmV4dCA9IGxCbG9jazsKLSAgICB9IGVsc2UgewotICAgICAgICBmVG9rLT5oZWFk
ID0gbEJsb2NrOwotICAgIH0KLSAgICBmVG9rLT5jdXJyZW50ID0gbEJsb2NrOwotICAgIHJldHVy
biBsQmxvY2s7Ci19IC8vIGxOZXdCbG9jawotCi0vKgotICogbEFkZEJ5dGUoKQotICoKLSAqLwot
Ci1zdGF0aWMgdm9pZCBsQWRkQnl0ZShUb2tlblN0cmVhbSAqZlRvaywgdW5zaWduZWQgY2hhciBm
VmFsKQotewotICAgIFRva2VuQmxvY2sgKmxCbG9jazsKLSAgICBsQmxvY2sgPSBmVG9rLT5jdXJy
ZW50OwotICAgIGlmIChsQmxvY2stPmNvdW50ID49IGxCbG9jay0+bWF4KQotICAgICAgICBsQmxv
Y2sgPSBsTmV3QmxvY2soZlRvaywgMCk7Ci0gICAgbEJsb2NrLT5kYXRhW2xCbG9jay0+Y291bnQr
K10gPSBmVmFsOwotfSAvLyBsQWRkQnl0ZQotCi0KLQotLyoKLSAqIGxSZWFkQnl0ZSgpIC0gR2V0
IHRoZSBuZXh0IGJ5dGUgZnJvbSBhIHN0cmVhbS4KLSAqCi0gKi8KLQotc3RhdGljIGludCBsUmVh
ZEJ5dGUoVG9rZW5TdHJlYW0gKnBUb2spCi17Ci0gICAgVG9rZW5CbG9jayAqbEJsb2NrOwotICAg
IGludCBsdmFsID0gLTE7Ci0KLSAgICBsQmxvY2sgPSBwVG9rLT5jdXJyZW50OwotICAgIGlmIChs
QmxvY2spIHsKLSAgICAgICAgaWYgKGxCbG9jay0+Y3VycmVudCA+PSBsQmxvY2stPmNvdW50KSB7
Ci0gICAgICAgICAgICBsQmxvY2sgPSBsQmxvY2stPm5leHQ7Ci0gICAgICAgICAgICBpZiAobEJs
b2NrKQotICAgICAgICAgICAgICAgIGxCbG9jay0+Y3VycmVudCA9IDA7Ci0gICAgICAgICAgICBw
VG9rLT5jdXJyZW50ID0gbEJsb2NrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsQmxvY2spCi0g
ICAgICAgICAgICBsdmFsID0gbEJsb2NrLT5kYXRhW2xCbG9jay0+Y3VycmVudCsrXTsKLSAgICB9
Ci0gICAgcmV0dXJuIGx2YWw7Ci19IC8vIGxSZWFkQnl0ZQotCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8gR2xvYmFsIEZ1bmN0aW9uczovLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogTmV3VG9rZW5TdHJlYW0oKQotICoKLSAqLwot
Ci1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgTWVtb3J5UG9v
bCAqcG9vbCkKLXsKLSAgICBUb2tlblN0cmVhbSAqcFRvazsKLQotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcFRvayA9IChUb2tlblN0cmVhbSAqKSBtYWxsb2Moc2l6ZW9mKFRva2VuU3RyZWFtKSk7
Ci0gICAgZWxzZQotICAgICAgICBwVG9rID0gKFRva2VuU3RyZWFtKiltZW1fQWxsb2MocG9vbCwg
c2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgcFRvay0+bmV4dCA9IE5VTEw7Ci0gICAgcFRvay0+
bmFtZSA9IGlkc3RyKG5hbWUsIHBvb2wpOwotICAgIHBUb2stPmhlYWQgPSBOVUxMOwotICAgIHBU
b2stPmN1cnJlbnQgPSBOVUxMOwotICAgIGxOZXdCbG9jayhwVG9rLCBwb29sKTsKLSAgICByZXR1
cm4gcFRvazsKLX0gLy8gTmV3VG9rZW5TdHJlYW0KLQotLyoKLSAqIERlbGV0ZVRva2VuU3RyZWFt
KCkKLSAqCi0gKi8KLQotdm9pZCBEZWxldGVUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvaykK
LXsKLSAgICBUb2tlbkJsb2NrICpwQmxvY2ssICpuQmxvY2s7Ci0KLSAgICBpZiAocFRvaykgewot
ICAgICAgICBwQmxvY2sgPSBwVG9rLT5oZWFkOwotICAgICAgICB3aGlsZSAocEJsb2NrKSB7Ci0g
ICAgICAgICAgICBuQmxvY2sgPSBwQmxvY2stPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKHBCbG9j
ayk7Ci0gICAgICAgICAgICBwQmxvY2sgPSBuQmxvY2s7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHBUb2stPm5hbWUpCi0gICAgICAgICAgICBmcmVlKHBUb2stPm5hbWUpOwotICAgICAgICBmcmVl
KHBUb2spOwotICAgIH0KLX0gLy8gRGVsZXRlVG9rZW5TdHJlYW0KLQotLyoKLSAqIFJlY29yZFRv
a2VuKCkgLSBBZGQgYSB0b2tlbiB0byB0aGUgZW5kIG9mIGEgbGlzdCBmb3IgbGF0ZXIgcGxheWJh
Y2sgb3IgcHJpbnRvdXQuCi0gKgotICovCi0KLXZvaWQgUmVjb3JkVG9rZW4oVG9rZW5TdHJlYW0g
KnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgY29uc3QgY2hh
ciAqczsKLSAgICBjaGFyICpzdHI9TlVMTDsKLQotICAgIGlmICh0b2tlbiA+IDI1NikKLSAgICAg
ICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKCh0b2tlbiAmIDB4N2YpICsgMHg4MCkp
OwotICAgIGVsc2UKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpKHRva2Vu
ICYgMHg3ZikpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIENQUF9JREVOVElGSUVS
OgotICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgotICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5U
OgotICAgICAgICBzID0gR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCk7
Ci0gICAgICAgIHdoaWxlICgqcykKLSAgICAgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25l
ZCBjaGFyKSAqcysrKTsKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgMCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0gICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6
Ci0gICAgICAgICBzdHI9eXlsdmFscHAtPnN5bWJvbF9uYW1lOwotICAgICAgICAgd2hpbGUgKCpz
dHIpewotICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpICpzdHIrKyk7
Ci0gICAgICAgICB9Ci0gICAgICAgICBsQWRkQnl0ZShwVG9rLCAwKTsKLSAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgJygnOgotICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhciko
eXlsdmFscHAtPnNjX2ludCA/IDEgOiAwKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfSAvLyBSZWNvcmRUb2tlbgotCi0vKgotICogUmV3aW5kVG9rZW5TdHJlYW0oKSAt
IFJlc2V0IGEgdG9rZW4gc3RyZWFtIGluIHByZXBlcmF0aW9uIGZvciByZWFkaW5nLgotICoKLSAq
LwotCi12b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKQotewotICAgIGlm
IChwVG9rLT5oZWFkKSB7Ci0gICAgICAgIHBUb2stPmN1cnJlbnQgPSBwVG9rLT5oZWFkOwotICAg
ICAgICBwVG9rLT5jdXJyZW50LT5jdXJyZW50ID0gMDsKLSAgICB9Ci19IC8vIFJld2luZFRva2Vu
U3RyZWFtCi0KLS8qCi0gKiBSZWFkVG9rZW4oKSAtIFJlYWQgdGhlIG5leHQgdG9rZW4gZnJvbSBh
IHN0cmVhbS4KLSAqCi0gKi8KLQotaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlz
dHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05B
TUVfTEVOICsgMV07Ci0gICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07Ci0g
ICAgaW50IGx0b2tlbiwgbGVuOwotICAgIGNoYXIgY2g7Ci0gICAgaW50IGJhc2UsIGFjY3VtOwot
ICAgIGNoYXIgY2hfdmFsOwotCi0gICAgbHRva2VuID0gbFJlYWRCeXRlKHBUb2spOwotICAgIGlm
IChsdG9rZW4gPj0gMCkgewotICAgICAgICBpZiAobHRva2VuID4gMTI3KQotICAgICAgICAgICAg
bHRva2VuICs9IDEyODsKLSAgICAgICAgc3dpdGNoIChsdG9rZW4pIHsKLSAgICAgICAgY2FzZSBD
UFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6Ci0gICAgICAg
ICAgICBsZW4gPSAwOwotICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAg
ICAgICB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8Ci0gICAgICAgICAgICAgICAg
ICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKLSAgICAgICAgICAgICAgICAgICAgIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAotICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ18n
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05B
TUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwot
ICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsK
LSAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5z
Y19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5bWJvbF9uYW1lKTsKLSAgICAgICAg
ICAgIHJldHVybiBDUFBfSURFTlRJRklFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENQUF9TVFJDT05TVEFOVDoKLSAgICAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAgICB3
aGlsZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAwKQotICAgICAgICAgICAgICAgIGlmIChs
ZW4gPCBNQVhfU1RSSU5HX0xFTikKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW4r
K10gPSBjaDsKLSAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9ICdcMCc7Ci0gICAgICAgICAg
ICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzdHJpbmdfdmFs
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgot
ICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwot
ICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKXx8KGNoPT0nZSd8fGNo
PT0nRSd8fGNoPT0nLicpfHwoY2g9PScrJ3x8Y2g9PSctJykpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGNo
ID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgYXNzZXJ0KGNo
ID09ICdcMCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1i
b2xfbmFtZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfZnZhbD0oZmxvYXQpYXRvZl9kb3Qo
eXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENQUF9JTlRDT05TVEFOVDoKLSAgICAgICAgICAgIGxlbiA9IDA7Ci0JICAgIGFjY3VtID0gMDsK
LSAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgaWYgKGNoID09
ICcwJykgewotICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAg
ICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgICAgIGlmIChjaCA9
PSAneCcgfHwgY2ggPT0gJ1gnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xl
bisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTY7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJhc2UgPSA4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IDEwOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB3aGlsZSAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjaF92YWwgPSAtMTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNkaWdpdChjaCkpCi0gICAgICAgICAgICAgICAgICAgIGNoX3ZhbCA9IGNoIC0gJzAnOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGlzeGRpZ2l0KGNoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y2hfdmFsID0gdG9sb3dlcihjaCkgLSAnYScgKyAxMDsKLQotICAgICAgICAgICAgICAgIGlmIChj
aF92YWwgPCAwIHx8IGNoX3ZhbCA+PSBiYXNlKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAg
ICAgIGFjY3VtID0gYWNjdW0gKiBiYXNlICsgY2hfdmFsOwotICAgICAgICAgICAgICAgIGNoID0g
bFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3ltYm9sX25hbWVb
bGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7Ci0gICAgICAgICAg
ICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAg
ICB5eWx2YWxwcC0+c2NfaW50ID0gYWNjdW07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAnKCc6Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2sp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGx0b2tlbjsK
LSAgICB9Ci0gICAgcmV0dXJuIEVPRl9TWTsKLX0gLy8gUmVhZFRva2VuCi0KLXR5cGVkZWYgc3Ry
dWN0IFRva2VuSW5wdXRTcmMgewotICAgIElucHV0U3JjICAgICAgICAgICAgYmFzZTsKLSAgICBU
b2tlblN0cmVhbSAgICAgICAgICp0b2tlbnM7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAoKmZp
bmFsKShDUFBTdHJ1Y3QgKik7Ci19IFRva2VuSW5wdXRTcmM7Ci0KLXN0YXRpYyBpbnQgc2Nhbl90
b2tlbihUb2tlbklucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50
IHRva2VuID0gUmVhZFRva2VuKGluLT50b2tlbnMsIHl5bHZhbHBwKTsKLSAgICBpbnQgKCpmaW5h
bCkoQ1BQU3RydWN0ICopOwotICAgIGNwcC0+dG9rZW5Mb2MtPmZpbGUgPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+bmFtZTsKLSAgICBjcHAtPnRva2VuTG9jLT5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQt
PmxpbmU7Ci0gICAgaWYgKHRva2VuID09ICdcbicpIHsKLSAgICAgICAgaW4tPmJhc2UubGluZSsr
OwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotICAgIGlmICh0b2tlbiA+IDApIHJldHVy
biB0b2tlbjsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7Ci0gICAgZmlu
YWwgPSBpbi0+ZmluYWw7Ci0gICAgZnJlZShpbik7Ci0gICAgaWYgKGZpbmFsICYmICFmaW5hbChj
cHApKSByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci19Ci0KLWludCBSZWFkRnJvbVRva2VuU3RyZWFtKFRv
a2VuU3RyZWFtICp0cywgaW50IG5hbWUsIGludCAoKmZpbmFsKShDUFBTdHJ1Y3QgKikpCi17Ci0g
ICAgVG9rZW5JbnB1dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKFRva2VuSW5wdXRTcmMpKTsKLSAg
ICBtZW1zZXQoaW4sIDAsIHNpemVvZihUb2tlbklucHV0U3JjKSk7Ci0gICAgaW4tPmJhc2UubmFt
ZSA9IG5hbWU7Ci0gICAgaW4tPmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OwotICAgIGlu
LT5iYXNlLnNjYW4gPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc2Nhbl90b2tl
bjsKLSAgICBpbi0+YmFzZS5saW5lID0gMTsKLSAgICBpbi0+dG9rZW5zID0gdHM7Ci0gICAgaW4t
PmZpbmFsID0gZmluYWw7Ci0gICAgUmV3aW5kVG9rZW5TdHJlYW0odHMpOwotICAgIGNwcC0+Y3Vy
cmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJldHVybiAxOwotfQotCi10eXBlZGVmIHN0cnVj
dCBVbmdvdFRva2VuIHsKLSAgICBJbnB1dFNyYyAgICBiYXNlOwotICAgIGludCAgICAgICAgIHRv
a2VuOwotICAgIHl5c3R5cGVwcCAgICAgbHZhbDsKLX0gVW5nb3RUb2tlbjsKLQotc3RhdGljIGlu
dCByZWdldF90b2tlbihVbmdvdFRva2VuICp0LCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAg
ICBpbnQgdG9rZW4gPSB0LT50b2tlbjsKLSAgICAqeXlsdmFscHAgPSB0LT5sdmFsOwotICAgIGNw
cC0+Y3VycmVudElucHV0ID0gdC0+YmFzZS5wcmV2OwotICAgIGZyZWUodCk7Ci0gICAgcmV0dXJu
IHRva2VuOwotfQotCi12b2lkIFVuZ2V0VG9rZW4oaW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2
YWxwcCkgewotICAgIFVuZ290VG9rZW4gKnQgPSBtYWxsb2Moc2l6ZW9mKFVuZ290VG9rZW4pKTsK
LSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKFVuZ290VG9rZW4pKTsKLSAgICB0LT50b2tlbiA9IHRv
a2VuOwotICAgIHQtPmx2YWwgPSAqeXlsdmFscHA7Ci0gICAgdC0+YmFzZS5zY2FuID0gKHZvaWQg
KilyZWdldF90b2tlbjsKLSAgICB0LT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAg
ICB0LT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICB0LT5iYXNlLmxp
bmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZ0
LT5iYXNlOwotfQotCi0KLXZvaWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVh
bSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAgICBpbnQgdG9rZW47Ci0gICAgY2hhciBz
dHJbMTAwXTsKLQotICAgIGlmIChmcCA9PSAwKSBmcCA9IHN0ZG91dDsKLSAgICBSZXdpbmRUb2tl
blN0cmVhbShzKTsKLSAgICB3aGlsZSAoKHRva2VuID0gUmVhZFRva2VuKHMsIHl5bHZhbHBwKSkg
PiAwKSB7Ci0gICAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBDUFBfSURFTlRJ
RklFUjoKLSAgICAgICAgY2FzZSBDUFBfVFlQRUlERU5USUZJRVI6Ci0gICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZh
bHBwLT5zY19pZGVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BQX1NU
UkNPTlNUQU5UOgotICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIlwiJXNc
IiIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQUF9GTE9BVENPTlNUQU5UOgotICAgICAgICAgICAg
Ly9wcmludGYoIiVnOS42ICIsIHl5bHZhbHBwLT5zY19mdmFsKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKLSAgICAgICAgICAgIC8vcHJpbnRmKCIl
ZCAiLCB5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgaWYgKHRva2VuID49IDEyNykKLSAgICAgICAgICAgICAgICBzbnBy
aW50ZihzdHIsIHNpemVvZihzdHIpLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2Vu
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc25wcmludGYoc3RyLCBzaXpl
b2Yoc3RyKSwgIiVjIiwgdG9rZW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICB9Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8gRW5kIG9mIHRva2Vucy5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5z
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rv
a2Vucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmY0YTJjLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29y
cG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25z
aWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5
b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9m
IHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRl
cm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5v
dCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3
YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdy
YW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElB
J3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJ
RElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0
ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGlu
IHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0
cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdo
dCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBh
bmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEg
U29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5v
ciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQg
YXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxp
Y2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4s
IGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5
IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtz
IGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhh
cmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMg
QkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5D
TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJ
VExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUg
T1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNI
QUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5U
QUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJF
UFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklE
SUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBD
T05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBP
UiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIHRv
a2Vucy5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKLSNkZWZpbmUgX19UT0tFTlNf
SCAxCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wYXJzZXIuaCIKLQotI2RlZmluZSBFT0ZfU1kgKC0xKQotCi10eXBlZGVmIHN0cnVjdCBUb2tl
bkJsb2NrX1JlYyBUb2tlbkJsb2NrOwotCi10eXBlZGVmIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMg
ewotICAgIHN0cnVjdCBUb2tlblN0cmVhbV9SZWMgKm5leHQ7Ci0gICAgY2hhciAqbmFtZTsKLSAg
ICBUb2tlbkJsb2NrICpoZWFkOwotICAgIFRva2VuQmxvY2sgKmN1cnJlbnQ7Ci19IFRva2VuU3Ry
ZWFtOwotCi1zdHJ1Y3QgVG9rZW5CbG9ja19SZWMgewotICAgIFRva2VuQmxvY2sgKm5leHQ7Ci0g
ICAgaW50IGN1cnJlbnQ7Ci0gICAgaW50IGNvdW50OwotICAgIGludCBtYXg7Ci0gICAgdW5zaWdu
ZWQgY2hhciAqZGF0YTsKLX07Ci0KLWV4dGVybiBUb2tlblN0cmVhbSBzdGRsaWJfY3BwX3N0cmVh
bTsKLQotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgTWVt
b3J5UG9vbCAqcG9vbCk7Ci12b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9r
KTsgCi12b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgdG9rZW4sIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKTsKLXZvaWQgUmV3aW5kVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBU
b2spOwotaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFs
cHApOwotaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2ssIGludCBuYW1l
LCBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopKTsKLXZvaWQgVW5nZXRUb2tlbihpbnQsIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKTsKLQotI2lmIGRlZmluZWQoQ1BQQ19FTkFCTEVfVE9PTFMpCi0KLXZv
aWQgRHVtcFRva2VuU3RyZWFtKEZJTEUgKiwgVG9rZW5TdHJlYW0gKiwgeXlzdHlwZXBwICogeXls
dmFscHApOwotCi0jZW5kaWYgLy8gZGVmaW5lZChDUFBDX0VOQUJMRV9UT09MUykKLQotI2VuZGlm
IC8vICFkZWZpbmVkKF9fVE9LRU5TX0gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0NvbmZpZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YmM4ZDgu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzk5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIENvbmZpZy5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6Q29uZmlnIGNsYXNzLCBkZXNjcmli
aW5nIHRoZSBmb3JtYXQsIHR5cGUKLS8vIGFuZCBzaXplIGZvciBhbiBlZ2w6OlN1cmZhY2UuIElt
cGxlbWVudHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCi0vLyBbRUdMIDEu
NF0gc2VjdGlvbiAzLjQgcGFnZSAxNS4KLQotI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIKLQot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIGVnbAotewot
Q29uZmlnOjpDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5JbnRl
cnZhbCwgRUdMaW50IG1heEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBE
M0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0
ZXhXaWR0aCwgRUdMaW50IHRleEhlaWdodCkKLSAgICA6IG1EaXNwbGF5TW9kZShkaXNwbGF5TW9k
ZSksIG1SZW5kZXJUYXJnZXRGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KSwgbURlcHRoU3RlbmNp
bEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpLCBtTXVsdGlTYW1wbGUobXVsdGlTYW1wbGUpCi17
Ci0gICAgc2V0KGRpc3BsYXlNb2RlLCBtaW5JbnRlcnZhbCwgbWF4SW50ZXJ2YWwsIHJlbmRlclRh
cmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNhbXBsZSwgdGV4V2lkdGgsIHRl
eEhlaWdodCk7Ci19Ci0KLXZvaWQgQ29uZmlnOjpzZXREZWZhdWx0cygpCi17Ci0gICAgbUJ1ZmZl
clNpemUgPSAwOwotICAgIG1SZWRTaXplID0gMDsKLSAgICBtR3JlZW5TaXplID0gMDsKLSAgICBt
Qmx1ZVNpemUgPSAwOwotICAgIG1MdW1pbmFuY2VTaXplID0gMDsKLSAgICBtQWxwaGFTaXplID0g
MDsKLSAgICBtQWxwaGFNYXNrU2l6ZSA9IDA7Ci0gICAgbUJpbmRUb1RleHR1cmVSR0IgPSBFR0xf
RE9OVF9DQVJFOwotICAgIG1CaW5kVG9UZXh0dXJlUkdCQSA9IEVHTF9ET05UX0NBUkU7Ci0gICAg
bUNvbG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVSOwotICAgIG1Db25maWdDYXZlYXQgPSBF
R0xfRE9OVF9DQVJFOwotICAgIG1Db25maWdJRCA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbUNvbmZv
cm1hbnQgPSAwOwotICAgIG1EZXB0aFNpemUgPSAwOwotICAgIG1MZXZlbCA9IDA7Ci0gICAgbU1h
dGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7Ci0gICAgbU1heFBCdWZmZXJXaWR0aCA9IDA7Ci0g
ICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOwotICAgIG1NYXhQQnVmZmVyUGl4ZWxzID0gMDsKLSAg
ICBtTWF4U3dhcEludGVydmFsID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtTWluU3dhcEludGVydmFs
ID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtTmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9ET05UX0NBUkU7
Ci0gICAgbU5hdGl2ZVZpc3VhbElEID0gMDsKLSAgICBtTmF0aXZlVmlzdWFsVHlwZSA9IEVHTF9E
T05UX0NBUkU7Ci0gICAgbVJlbmRlcmFibGVUeXBlID0gRUdMX09QRU5HTF9FU19CSVQ7Ci0gICAg
bVNhbXBsZUJ1ZmZlcnMgPSAwOwotICAgIG1TYW1wbGVzID0gMDsKLSAgICBtU3RlbmNpbFNpemUg
PSAwOwotICAgIG1TdXJmYWNlVHlwZSA9IEVHTF9XSU5ET1dfQklUOwotICAgIG1UcmFuc3BhcmVu
dFR5cGUgPSBFR0xfTk9ORTsKLSAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IEVHTF9ET05UX0NB
UkU7Ci0gICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbVRy
YW5zcGFyZW50Qmx1ZVZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKLX0KLQotdm9pZCBDb25maWc6OnNl
dChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pbkludGVydmFsLCBFR0xpbnQg
bWF4SW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0
aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdMaW50IHRleFdpZHRoLCBFR0xp
bnQgdGV4SGVpZ2h0KQotewotICAgIG1CaW5kVG9UZXh0dXJlUkdCID0gRUdMX0ZBTFNFOwotICAg
IG1CaW5kVG9UZXh0dXJlUkdCQSA9IEVHTF9GQUxTRTsKLSAgICBzd2l0Y2ggKHJlbmRlclRhcmdl
dEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgbUJ1
ZmZlclNpemUgPSAxNjsKLSAgICAgICAgbVJlZFNpemUgPSA1OwotICAgICAgICBtR3JlZW5TaXpl
ID0gNTsKLSAgICAgICAgbUJsdWVTaXplID0gNTsKLSAgICAgICAgbUFscGhhU2l6ZSA9IDE7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIG1C
dWZmZXJTaXplID0gMzI7Ci0gICAgICAgIG1SZWRTaXplID0gMTA7Ci0gICAgICAgIG1HcmVlblNp
emUgPSAxMDsKLSAgICAgICAgbUJsdWVTaXplID0gMTA7Ci0gICAgICAgIG1BbHBoYVNpemUgPSAy
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICBt
QnVmZmVyU2l6ZSA9IDMyOwotICAgICAgICBtUmVkU2l6ZSA9IDg7Ci0gICAgICAgIG1HcmVlblNp
emUgPSA4OwotICAgICAgICBtQmx1ZVNpemUgPSA4OwotICAgICAgICBtQWxwaGFTaXplID0gODsK
LSAgICAgICAgbUJpbmRUb1RleHR1cmVSR0JBID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMTY7Ci0gICAgICAg
IG1SZWRTaXplID0gNTsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDY7Ci0gICAgICAgIG1CbHVlU2l6
ZSA9IDU7Ci0gICAgICAgIG1BbHBoYVNpemUgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwotICAgICAgICBt
UmVkU2l6ZSA9IDg7Ci0gICAgICAgIG1HcmVlblNpemUgPSA4OwotICAgICAgICBtQmx1ZVNpemUg
PSA4OwotICAgICAgICBtQWxwaGFTaXplID0gMDsKLSAgICAgICAgbUJpbmRUb1RleHR1cmVSR0Ig
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7ICAgLy8gT3RoZXIgZm9ybWF0cyBzaG91bGQgbm90IGJlIHZhbGlkCi0gICAgfQotCi0g
ICAgbUx1bWluYW5jZVNpemUgPSAwOwotICAgIG1BbHBoYU1hc2tTaXplID0gMDsKLSAgICBtQ29s
b3JCdWZmZXJUeXBlID0gRUdMX1JHQl9CVUZGRVI7Ci0gICAgbUNvbmZpZ0NhdmVhdCA9IChkaXNw
bGF5TW9kZS5Gb3JtYXQgPT0gcmVuZGVyVGFyZ2V0Rm9ybWF0KSA/IEVHTF9OT05FIDogRUdMX1NM
T1dfQ09ORklHOwotICAgIG1Db25maWdJRCA9IDA7Ci0gICAgbUNvbmZvcm1hbnQgPSBFR0xfT1BF
TkdMX0VTMl9CSVQ7Ci0KLSAgICBzd2l0Y2ggKGRlcHRoU3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICBtRGVwdGhTaXplID0gMDsKLSAgICAg
ICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0vLyAgICBjYXNlIEQzREZNVF9E
MTZfTE9DS0FCTEU6Ci0vLyAgICAgIG1EZXB0aFNpemUgPSAxNjsKLS8vICAgICAgbVN0ZW5jaWxT
aXplID0gMDsKLS8vICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMzI6Ci0gICAgICAg
IG1EZXB0aFNpemUgPSAzMjsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAgICAgICAgbURlcHRoU2l6ZSA9IDE1Owot
ICAgICAgICBtU3RlbmNpbFNpemUgPSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNE
Rk1UX0QyNFM4OgotICAgICAgICBtRGVwdGhTaXplID0gMjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6
ZSA9IDg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAg
IG1EZXB0aFNpemUgPSAyNDsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgotICAgICAgICBtRGVwdGhTaXplID0gMjQ7
Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBE
M0RGTVRfRDE2OgotICAgICAgICBtRGVwdGhTaXplID0gMTY7Ci0gICAgICAgIG1TdGVuY2lsU2l6
ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotLy8gICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToK
LS8vICAgICAgbURlcHRoU2l6ZSA9IDMyOwotLy8gICAgICBtU3RlbmNpbFNpemUgPSAwOwotLy8g
ICAgICBicmVhazsKLS8vICAgIGNhc2UgRDNERk1UX0QyNEZTODoKLS8vICAgICAgbURlcHRoU2l6
ZSA9IDI0OwotLy8gICAgICBtU3RlbmNpbFNpemUgPSA4OwotLy8gICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgbUxldmVsID0g
MDsKLSAgICBtTWF0Y2hOYXRpdmVQaXhtYXAgPSBFR0xfTk9ORTsKLSAgICBtTWF4UEJ1ZmZlcldp
ZHRoID0gdGV4V2lkdGg7Ci0gICAgbU1heFBCdWZmZXJIZWlnaHQgPSB0ZXhIZWlnaHQ7Ci0gICAg
bU1heFBCdWZmZXJQaXhlbHMgPSB0ZXhXaWR0aCp0ZXhIZWlnaHQ7Ci0gICAgbU1heFN3YXBJbnRl
cnZhbCA9IG1heEludGVydmFsOwotICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBtaW5JbnRlcnZhbDsK
LSAgICBtTmF0aXZlUmVuZGVyYWJsZSA9IEVHTF9GQUxTRTsKLSAgICBtTmF0aXZlVmlzdWFsSUQg
PSAwOwotICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gMDsKLSAgICBtUmVuZGVyYWJsZVR5cGUgPSBF
R0xfT1BFTkdMX0VTMl9CSVQ7Ci0gICAgbVNhbXBsZUJ1ZmZlcnMgPSBtdWx0aVNhbXBsZSA/IDEg
OiAwOwotICAgIG1TYW1wbGVzID0gbXVsdGlTYW1wbGU7Ci0gICAgbVN1cmZhY2VUeXBlID0gRUdM
X1BCVUZGRVJfQklUIHwgRUdMX1dJTkRPV19CSVQgfCBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJW
RURfQklUOwotICAgIG1UcmFuc3BhcmVudFR5cGUgPSBFR0xfTk9ORTsKLSAgICBtVHJhbnNwYXJl
bnRSZWRWYWx1ZSA9IDA7Ci0gICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7Ci0gICAgbVRy
YW5zcGFyZW50Qmx1ZVZhbHVlID0gMDsKLX0KLQotRUdMQ29uZmlnIENvbmZpZzo6Z2V0SGFuZGxl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKEVHTENvbmZpZykoc2l6ZV90KW1Db25maWdJRDsKLX0K
LQotU29ydENvbmZpZzo6U29ydENvbmZpZyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpCi0gICAg
OiBtV2FudFJlZChmYWxzZSksIG1XYW50R3JlZW4oZmFsc2UpLCBtV2FudEJsdWUoZmFsc2UpLCBt
V2FudEFscGhhKGZhbHNlKSwgbVdhbnRMdW1pbmFuY2UoZmFsc2UpCi17Ci0gICAgc2NhbkZvcldh
bnRlZENvbXBvbmVudHMoYXR0cmliTGlzdCk7Ci19Ci0KLXZvaWQgU29ydENvbmZpZzo6c2NhbkZv
cldhbnRlZENvbXBvbmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQotewotICAgIC8vIFtF
R0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNAotICAgIC8vIFNvcnRpbmcgcnVsZSAjMzogYnkgbGFy
Z2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBub3QgY29uc2lkZXJpbmcKLSAgICAvLyBj
b21wb25lbnRzIHRoYXQgYXJlIDAgb3IgZG9uJ3QtY2FyZS4KLSAgICBmb3IgKGNvbnN0IEVHTGlu
dCAqYXR0ciA9IGF0dHJpYkxpc3Q7IGF0dHJbMF0gIT0gRUdMX05PTkU7IGF0dHIgKz0gMikKLSAg
ICB7Ci0gICAgICAgIGlmIChhdHRyWzFdICE9IDAgJiYgYXR0clsxXSAhPSBFR0xfRE9OVF9DQVJF
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dHJbMF0pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICBtV2FudFJlZCA9IHRydWU7
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgbVdhbnRHcmVl
biA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAg
bVdhbnRCbHVlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJ
WkU6ICAgICBtV2FudEFscGhhID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdM
X0xVTUlOQU5DRV9TSVpFOiBtV2FudEx1bWluYW5jZSA9IHRydWU7IGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1FR0xpbnQgU29ydENvbmZpZzo6d2FudGVkQ29t
cG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcpIGNvbnN0Ci17Ci0gICAgRUdMaW50IHRv
dGFsID0gMDsKLQotICAgIGlmIChtV2FudFJlZCkgICAgICAgdG90YWwgKz0gY29uZmlnLm1SZWRT
aXplOwotICAgIGlmIChtV2FudEdyZWVuKSAgICAgdG90YWwgKz0gY29uZmlnLm1HcmVlblNpemU7
Ci0gICAgaWYgKG1XYW50Qmx1ZSkgICAgICB0b3RhbCArPSBjb25maWcubUJsdWVTaXplOwotICAg
IGlmIChtV2FudEFscGhhKSAgICAgdG90YWwgKz0gY29uZmlnLm1BbHBoYVNpemU7Ci0gICAgaWYg
KG1XYW50THVtaW5hbmNlKSB0b3RhbCArPSBjb25maWcubUx1bWluYW5jZVNpemU7Ci0KLSAgICBy
ZXR1cm4gdG90YWw7Ci19Ci0KLWJvb2wgU29ydENvbmZpZzo6b3BlcmF0b3IoKShjb25zdCBDb25m
aWcgKngsIGNvbnN0IENvbmZpZyAqeSkgY29uc3QKLXsKLSAgICByZXR1cm4gKCp0aGlzKSgqeCwg
KnkpOwotfQotCi1ib29sIFNvcnRDb25maWc6Om9wZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBj
b25zdCBDb25maWcgJnkpIGNvbnN0Ci17Ci0gICAgI2RlZmluZSBTT1JUKGF0dHJpYnV0ZSkgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICh4LmF0dHJpYnV0ZSAhPSB5LmF0dHJp
YnV0ZSkgICAgICAgICAgICBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXR1cm4geC5hdHRyaWJ1dGUgPCB5LmF0dHJp
YnV0ZTsgICAgICBcCi0gICAgICAgIH0KLQotICAgIE1FVEFfQVNTRVJUKEVHTF9OT05FIDwgRUdM
X1NMT1dfQ09ORklHICYmIEVHTF9TTE9XX0NPTkZJRyA8IEVHTF9OT05fQ09ORk9STUFOVF9DT05G
SUcpOwotICAgIFNPUlQobUNvbmZpZ0NhdmVhdCk7Ci0KLSAgICBNRVRBX0FTU0VSVChFR0xfUkdC
X0JVRkZFUiA8IEVHTF9MVU1JTkFOQ0VfQlVGRkVSKTsKLSAgICBTT1JUKG1Db2xvckJ1ZmZlclR5
cGUpOwotCi0gICAgLy8gQnkgbGFyZ2VyIHRvdGFsIG51bWJlciBvZiBjb2xvciBiaXRzLCBvbmx5
IGNvbnNpZGVyaW5nIHRob3NlIHRoYXQgYXJlIHJlcXVlc3RlZCB0byBiZSA+IDAuCi0gICAgRUdM
aW50IHhDb21wb25lbnRzU2l6ZSA9IHdhbnRlZENvbXBvbmVudHNTaXplKHgpOwotICAgIEVHTGlu
dCB5Q29tcG9uZW50c1NpemUgPSB3YW50ZWRDb21wb25lbnRzU2l6ZSh5KTsKLSAgICBpZiAoeENv
bXBvbmVudHNTaXplICE9IHlDb21wb25lbnRzU2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4
Q29tcG9uZW50c1NpemUgPiB5Q29tcG9uZW50c1NpemU7Ci0gICAgfQotCi0gICAgU09SVChtQnVm
ZmVyU2l6ZSk7Ci0gICAgU09SVChtU2FtcGxlQnVmZmVycyk7Ci0gICAgU09SVChtU2FtcGxlcyk7
Ci0gICAgU09SVChtRGVwdGhTaXplKTsKLSAgICBTT1JUKG1TdGVuY2lsU2l6ZSk7Ci0gICAgU09S
VChtQWxwaGFNYXNrU2l6ZSk7Ci0gICAgU09SVChtTmF0aXZlVmlzdWFsVHlwZSk7Ci0gICAgU09S
VChtQ29uZmlnSUQpOwotCi0gICAgI3VuZGVmIFNPUlQKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotLy8gV2UnZCBsaWtlIHRvIHVzZSBTb3J0Q29uZmlnIHRvIGFsc28gZWxpbWluYXRlIGR1cGxp
Y2F0ZSBjb25maWdzLgotLy8gVGhpcyB3b3JrcyBhcyBsb25nIGFzIHdlIG5ldmVyIGhhdmUgdHdv
IGNvbmZpZ3Mgd2l0aCBkaWZmZXJlbnQgcGVyLVJHQi1jb21wb25lbnQgbGF5b3V0cywKLS8vIGJ1
dCB0aGUgc2FtZSB0b3RhbC4KLS8vIDU1NTEgYW5kIDU2NSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ug
UitHK0IgaXMgZGlmZmVyZW50LgotLy8gNTU1MSBhbmQgNTU1IGFyZSBkaWZmZXJlbnQgYmVjYXVz
ZSBidWZmZXJTaXplIGlzIGRpZmZlcmVudC4KLWNvbnN0IEVHTGludCBDb25maWdTZXQ6Om1Tb3J0
QXR0cmlic1tdID0KLXsKLSAgICBFR0xfUkVEX1NJWkUsIDEsCi0gICAgRUdMX0dSRUVOX1NJWkUs
IDEsCi0gICAgRUdMX0JMVUVfU0laRSwgMSwKLSAgICBFR0xfTFVNSU5BTkNFX1NJWkUsIDEsCi0g
ICAgLy8gQlVUIE5PVCBBTFBIQQotICAgIEVHTF9OT05FCi19OwotCi1Db25maWdTZXQ6OkNvbmZp
Z1NldCgpCi0gICAgOiBtU2V0KFNvcnRDb25maWcobVNvcnRBdHRyaWJzKSkKLXsKLX0KLQotdm9p
ZCBDb25maWdTZXQ6OmFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pblN3
YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRhcmdl
dEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2FtcGxl
LCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWlnaHQpCi17Ci0gICAgQ29uZmlnIGNvbmZp
ZyhkaXNwbGF5TW9kZSwgbWluU3dhcEludGVydmFsLCBtYXhTd2FwSW50ZXJ2YWwsIHJlbmRlclRh
cmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCBtdWx0aVNhbXBsZSwgdGV4V2lkdGgsIHRl
eEhlaWdodCk7Ci0KLSAgICBtU2V0Lmluc2VydChjb25maWcpOwotfQotCi1zaXplX3QgQ29uZmln
U2V0OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNldC5zaXplKCk7Ci19Ci0KLWJvb2wg
Q29uZmlnU2V0OjpnZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdMaW50ICph
dHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpCi17Ci0gICAg
dmVjdG9yPGNvbnN0IENvbmZpZyo+IHBhc3NlZDsKLSAgICBwYXNzZWQucmVzZXJ2ZShtU2V0LnNp
emUoKSk7Ci0KLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmln
ICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsKLSAgICAgICAgYm9vbCBtYXRjaCA9IHRy
dWU7Ci0gICAgICAgIGNvbnN0IEVHTGludCAqYXR0cmlidXRlID0gYXR0cmliTGlzdDsKLQotICAg
ICAgICB3aGlsZSAoYXR0cmlidXRlWzBdICE9IEVHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVswXSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1CdWZm
ZXJTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAgICAgIG1hdGNoID0gY29u
ZmlnLT5tQWxwaGFTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICBt
YXRjaCA9IGNvbmZpZy0+bUJsdWVTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgICAg
ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1HcmVlblNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1JFRF9TSVpF
OiAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tUmVkU2l6ZSA+PSBhdHRyaWJ1dGVb
MV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVH
TF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bURlcHRoU2l6ZSA+
PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBFR0xfU1RFTkNJTF9TSVpFOiAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1T
dGVuY2lsU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAgICAgICAgIG1hdGNoID0g
Y29uZmlnLT5tQ29uZmlnQ2F2ZWF0ID09IChFR0xlbnVtKSBhdHRyaWJ1dGVbMV07ICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAg
ICBtYXRjaCA9IGNvbmZpZy0+bUNvbmZpZ0lEID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTEVWRUw6ICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MZXZlbCA+PSBhdHRyaWJ1dGVbMV07ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX05BVElW
RV9SRU5ERVJBQkxFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTmF0aXZlUmVuZGVyYWJsZSA9
PSAoRUdMQm9vbGVhbikgYXR0cmlidXRlWzFdOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU5hdGl2ZVZp
c3VhbFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBFR0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWct
Pm1TYW1wbGVzID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgIG1hdGNo
ID0gY29uZmlnLT5tU2FtcGxlQnVmZmVycyA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9TVVJGQUNFX1RZUEU6ICAgICAgICAg
ICAgICBtYXRjaCA9IChjb25maWctPm1TdXJmYWNlVHlwZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0
cmlidXRlWzFdOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRf
VFlQRTogICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFR5cGUgPT0gKEVHTGVu
dW0pIGF0dHJpYnV0ZVsxXTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1RS
QU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRCbHVl
VmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTogICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5z
cGFyZW50R3JlZW5WYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFOiAgICAgbWF0Y2ggPSBjb25m
aWctPm1UcmFuc3BhcmVudFJlZFZhbHVlID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgIG1h
dGNoID0gY29uZmlnLT5tQmluZFRvVGV4dHVyZVJHQiA9PSAoRUdMQm9vbGVhbikgYXR0cmlidXRl
WzFdOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdC
QTogICAgICBtYXRjaCA9IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVSR0JBID09IChFR0xCb29sZWFu
KSBhdHRyaWJ1dGVbMV07ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTUlOX1NXQVBf
SU5URVJWQUw6ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NaW5Td2FwSW50ZXJ2YWwgPT0gYXR0
cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdM
X01BWF9TV0FQX0lOVEVSVkFMOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4U3dhcEludGVy
dmFsID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUx1
bWluYW5jZVNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfTUFTS19TSVpFOiAgICAgICAgICAgbWF0Y2ggPSBj
b25maWctPm1BbHBoYU1hc2tTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTE9SX0JVRkZFUl9UWVBFOiAgICAgICAg
IG1hdGNoID0gY29uZmlnLT5tQ29sb3JCdWZmZXJUeXBlID09IChFR0xlbnVtKSBhdHRyaWJ1dGVb
MV07ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJBQkxFX1RZUEU6
ICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1SZW5kZXJhYmxlVHlwZSAmIGF0dHJpYnV0ZVsx
XSkgPT0gYXR0cmlidXRlWzFdOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTUFUQ0hf
TkFUSVZFX1BJWE1BUDogICAgICAgbWF0Y2ggPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
RUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgIG1hdGNoID0gKGNvbmZpZy0+bUNvbmZvcm1h
bnQgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9XSURUSDogICAgICAgICBtYXRjaCA9IGNvbmZpZy0+
bU1heFBCdWZmZXJXaWR0aCA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBFR0xfTUFYX1BCVUZGRVJfSEVJR0hUOiAgICAgICAgbWF0Y2gg
PSBjb25maWctPm1NYXhQQnVmZmVySGVpZ2h0ID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9QQlVGRkVSX1BJWEVMUzogICAg
ICAgIG1hdGNoID0gY29uZmlnLT5tTWF4UEJ1ZmZlclBpeGVscyA+PSBhdHRyaWJ1dGVbMV07ICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtYXRj
aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgYXR0cmlidXRlICs9IDI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bWF0Y2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhc3NlZC5wdXNoX2JhY2soJipjb25maWcp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbmZpZ3MpCi0gICAgewotICAgICAgICBz
b3J0KHBhc3NlZC5iZWdpbigpLCBwYXNzZWQuZW5kKCksIFNvcnRDb25maWcoYXR0cmliTGlzdCkp
OwotCi0gICAgICAgIEVHTGludCBpbmRleDsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgY29uZmlnU2l6ZSAmJiBpbmRleCA8IHN0YXRpY19jYXN0PEVHTGludD4ocGFzc2VkLnNpemUo
KSk7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbmZpZ3NbaW5kZXhdID0gcGFz
c2VkW2luZGV4XS0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAqbnVtQ29uZmln
ID0gaW5kZXg7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgICpudW1Db25maWcgPSBw
YXNzZWQuc2l6ZSgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jb25zdCBlZ2w6
OkNvbmZpZyAqQ29uZmlnU2V0OjpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSkKLXsKLSAgICBm
b3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7
IGNvbmZpZysrKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZy0+Z2V0SGFuZGxlKCkgPT0gY29u
ZmlnSGFuZGxlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJigqY29uZmlnKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk1NjI2ZWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9Db25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBDb25maWcuaDogRGVmaW5lcyB0aGUgZWdsOjpDb25maWcgY2xhc3MsIGRl
c2NyaWJpbmcgdGhlIGZvcm1hdCwgdHlwZQotLy8gYW5kIHNpemUgZm9yIGFuIGVnbDo6U3VyZmFj
ZS4gSW1wbGVtZW50cyBFR0xDb25maWcgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KLS8vIFtF
R0wgMS40XSBzZWN0aW9uIDMuNCBwYWdlIDE1LgotCi0jaWZuZGVmIElOQ0xVREVfQ09ORklHX0hf
Ci0jZGVmaW5lIElOQ0xVREVfQ09ORklHX0hfCi0KLSNkZWZpbmUgRUdMQVBJCi0jaW5jbHVkZSA8
RUdML2VnbC5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgPHNldD4KLQotI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNzIERpc3Bs
YXk7Ci0KLWNsYXNzIENvbmZpZwotewotICBwdWJsaWM6Ci0gICAgQ29uZmlnKEQzRERJU1BMQVlN
T0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcElu
dGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50IHRl
eEhlaWdodCk7Ci0KLSAgICB2b2lkIHNldERlZmF1bHRzKCk7Ci0gICAgdm9pZCBzZXQoRDNERElT
UExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhT
d2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0
aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdMaW50IHRleFdpZHRoLCBFR0xp
bnQgdGV4SGVpZ2h0KTsKLSAgICBFR0xDb25maWcgZ2V0SGFuZGxlKCkgY29uc3Q7Ci0KLSAgICBj
b25zdCBEM0RESVNQTEFZTU9ERSBtRGlzcGxheU1vZGU7Ci0gICAgY29uc3QgRDNERk9STUFUIG1S
ZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgY29uc3QgRDNERk9STUFUIG1EZXB0aFN0ZW5jaWxGb3Jt
YXQ7Ci0gICAgY29uc3QgRUdMaW50IG1NdWx0aVNhbXBsZTsKLQotICAgIEVHTGludCBtQnVmZmVy
U2l6ZTsgICAgICAgICAgICAgIC8vIERlcHRoIG9mIHRoZSBjb2xvciBidWZmZXIKLSAgICBFR0xp
bnQgbVJlZFNpemU7ICAgICAgICAgICAgICAgICAvLyBCaXRzIG9mIFJlZCBpbiB0aGUgY29sb3Ig
YnVmZmVyCi0gICAgRUdMaW50IG1HcmVlblNpemU7ICAgICAgICAgICAgICAgLy8gQml0cyBvZiBH
cmVlbiBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1CbHVlU2l6ZTsgICAgICAgICAg
ICAgICAgLy8gQml0cyBvZiBCbHVlIGluIHRoZSBjb2xvciBidWZmZXIKLSAgICBFR0xpbnQgbUx1
bWluYW5jZVNpemU7ICAgICAgICAgICAvLyBCaXRzIG9mIEx1bWluYW5jZSBpbiB0aGUgY29sb3Ig
YnVmZmVyCi0gICAgRUdMaW50IG1BbHBoYVNpemU7ICAgICAgICAgICAgICAgLy8gQml0cyBvZiBB
bHBoYSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdMaW50IG1BbHBoYU1hc2tTaXplOyAgICAg
ICAgICAgLy8gQml0cyBvZiBBbHBoYSBNYXNrIGluIHRoZSBtYXNrIGJ1ZmZlcgotICAgIEVHTEJv
b2xlYW4gbUJpbmRUb1RleHR1cmVSR0I7ICAgIC8vIFRydWUgaWYgYmluZGFibGUgdG8gUkdCIHRl
eHR1cmVzLgotICAgIEVHTEJvb2xlYW4gbUJpbmRUb1RleHR1cmVSR0JBOyAgIC8vIFRydWUgaWYg
YmluZGFibGUgdG8gUkdCQSB0ZXh0dXJlcy4KLSAgICBFR0xlbnVtIG1Db2xvckJ1ZmZlclR5cGU7
ICAgICAgICAvLyBDb2xvciBidWZmZXIgdHlwZQotICAgIEVHTGVudW0gbUNvbmZpZ0NhdmVhdDsg
ICAgICAgICAgIC8vIEFueSBjYXZlYXRzIGZvciB0aGUgY29uZmlndXJhdGlvbgotICAgIEVHTGlu
dCBtQ29uZmlnSUQ7ICAgICAgICAgICAgICAgIC8vIFVuaXF1ZSBFR0xDb25maWcgaWRlbnRpZmll
cgotICAgIEVHTGludCBtQ29uZm9ybWFudDsgICAgICAgICAgICAgIC8vIFdoZXRoZXIgY29udGV4
dHMgY3JlYXRlZCB3aXRoIHRoaXMgY29uZmlnIGFyZSBjb25mb3JtYW50Ci0gICAgRUdMaW50IG1E
ZXB0aFNpemU7ICAgICAgICAgICAgICAgLy8gQml0cyBvZiBaIGluIHRoZSBkZXB0aCBidWZmZXIK
LSAgICBFR0xpbnQgbUxldmVsOyAgICAgICAgICAgICAgICAgICAvLyBGcmFtZSBidWZmZXIgbGV2
ZWwKLSAgICBFR0xCb29sZWFuIG1NYXRjaE5hdGl2ZVBpeG1hcDsgICAvLyBNYXRjaCB0aGUgbmF0
aXZlIHBpeG1hcCBmb3JtYXQKLSAgICBFR0xpbnQgbU1heFBCdWZmZXJXaWR0aDsgICAgICAgICAv
LyBNYXhpbXVtIHdpZHRoIG9mIHBidWZmZXIKLSAgICBFR0xpbnQgbU1heFBCdWZmZXJIZWlnaHQ7
ICAgICAgICAvLyBNYXhpbXVtIGhlaWdodCBvZiBwYnVmZmVyCi0gICAgRUdMaW50IG1NYXhQQnVm
ZmVyUGl4ZWxzOyAgICAgICAgLy8gTWF4aW11bSBzaXplIG9mIHBidWZmZXIKLSAgICBFR0xpbnQg
bU1heFN3YXBJbnRlcnZhbDsgICAgICAgICAvLyBNYXhpbXVtIHN3YXAgaW50ZXJ2YWwKLSAgICBF
R0xpbnQgbU1pblN3YXBJbnRlcnZhbDsgICAgICAgICAvLyBNaW5pbXVtIHN3YXAgaW50ZXJ2YWwK
LSAgICBFR0xCb29sZWFuIG1OYXRpdmVSZW5kZXJhYmxlOyAgICAvLyBFR0xfVFJVRSBpZiBuYXRp
dmUgcmVuZGVyaW5nIEFQSXMgY2FuIHJlbmRlciB0byBzdXJmYWNlCi0gICAgRUdMaW50IG1OYXRp
dmVWaXN1YWxJRDsgICAgICAgICAgLy8gSGFuZGxlIG9mIGNvcnJlc3BvbmRpbmcgbmF0aXZlIHZp
c3VhbAotICAgIEVHTGludCBtTmF0aXZlVmlzdWFsVHlwZTsgICAgICAgIC8vIE5hdGl2ZSB2aXN1
YWwgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2aXN1YWwKLSAgICBFR0xpbnQgbVJlbmRlcmFibGVU
eXBlOyAgICAgICAgICAvLyBXaGljaCBjbGllbnQgcmVuZGVyaW5nIEFQSXMgYXJlIHN1cHBvcnRl
ZC4KLSAgICBFR0xpbnQgbVNhbXBsZUJ1ZmZlcnM7ICAgICAgICAgICAvLyBOdW1iZXIgb2YgbXVs
dGlzYW1wbGUgYnVmZmVycwotICAgIEVHTGludCBtU2FtcGxlczsgICAgICAgICAgICAgICAgIC8v
IE51bWJlciBvZiBzYW1wbGVzIHBlciBwaXhlbAotICAgIEVHTGludCBtU3RlbmNpbFNpemU7ICAg
ICAgICAgICAgIC8vIEJpdHMgb2YgU3RlbmNpbCBpbiB0aGUgc3RlbmNpbCBidWZmZXIKLSAgICBF
R0xpbnQgbVN1cmZhY2VUeXBlOyAgICAgICAgICAgICAvLyBXaGljaCB0eXBlcyBvZiBFR0wgc3Vy
ZmFjZXMgYXJlIHN1cHBvcnRlZC4KLSAgICBFR0xlbnVtIG1UcmFuc3BhcmVudFR5cGU7ICAgICAg
ICAvLyBUeXBlIG9mIHRyYW5zcGFyZW5jeSBzdXBwb3J0ZWQKLSAgICBFR0xpbnQgbVRyYW5zcGFy
ZW50UmVkVmFsdWU7ICAgICAvLyBUcmFuc3BhcmVudCByZWQgdmFsdWUKLSAgICBFR0xpbnQgbVRy
YW5zcGFyZW50R3JlZW5WYWx1ZTsgICAvLyBUcmFuc3BhcmVudCBncmVlbiB2YWx1ZQotICAgIEVH
TGludCBtVHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgIC8vIFRyYW5zcGFyZW50IGJsdWUgdmFsdWUK
LX07Ci0KLS8vIEZ1bmN0aW9uIG9iamVjdCB1c2VkIGJ5IFNUTCBzb3J0aW5nIHJvdXRpbmVzIGZv
ciBvcmRlcmluZyBDb25maWdzIGFjY29yZGluZyB0byBbRUdMXSBzZWN0aW9uIDMuNC4xIHBhZ2Ug
MjQuCi1jbGFzcyBTb3J0Q29uZmlnCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTb3J0Q29u
ZmlnKGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0KLSAgICBib29sIG9wZXJhdG9yKCkoY29u
c3QgQ29uZmlnICp4LCBjb25zdCBDb25maWcgKnkpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAmeSkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToK
LSAgICB2b2lkIHNjYW5Gb3JXYW50ZWRDb21wb25lbnRzKGNvbnN0IEVHTGludCAqYXR0cmliTGlz
dCk7Ci0gICAgRUdMaW50IHdhbnRlZENvbXBvbmVudHNTaXplKGNvbnN0IENvbmZpZyAmY29uZmln
KSBjb25zdDsKLQotICAgIGJvb2wgbVdhbnRSZWQ7Ci0gICAgYm9vbCBtV2FudEdyZWVuOwotICAg
IGJvb2wgbVdhbnRCbHVlOwotICAgIGJvb2wgbVdhbnRBbHBoYTsKLSAgICBib29sIG1XYW50THVt
aW5hbmNlOwotfTsKLQotY2xhc3MgQ29uZmlnU2V0Ci17Ci0gICAgZnJpZW5kIERpc3BsYXk7Ci0K
LSAgcHVibGljOgotICAgIENvbmZpZ1NldCgpOwotCi0gICAgdm9pZCBhZGQoRDNERElTUExBWU1P
REUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50
ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5j
aWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4
SGVpZ2h0KTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAgIGJvb2wgZ2V0Q29uZmlncyhF
R0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZp
Z1NpemUsIEVHTGludCAqbnVtQ29uZmlnKTsKLSAgICBjb25zdCBlZ2w6OkNvbmZpZyAqZ2V0KEVH
TENvbmZpZyBjb25maWdIYW5kbGUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKENvbmZpZ1NldCk7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6c2V0PENvbmZpZywgU29y
dENvbmZpZz4gU2V0OwotICAgIHR5cGVkZWYgU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKLSAgICBT
ZXQgbVNldDsKLQotICAgIHN0YXRpYyBjb25zdCBFR0xpbnQgbVNvcnRBdHRyaWJzW107Ci19Owot
fQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBjYzBiOTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9EaXNwbGF5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNTAgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gRGlzcGxheS5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6RGlzcGxh
eSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFjdAotLy8gZGlzcGxheSBvbiB3aGljaCBn
cmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdMRGlzcGxheS4KLS8vIFtFR0wgMS40XSBz
ZWN0aW9uIDIuMS4yIHBhZ2UgMy4KLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNp
bmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQot
I2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9t
YWluLmgiCi0KLS8vIENhbiBhbHNvIGJlIGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JB
U1QgaW4gdGhlIHByb2plY3QncyBwcmVkZWZpbmVkIG1hY3JvcwotI2RlZmluZSBSRUZfUkFTVCAw
Ci0KLS8vIFRoZSAiRGVidWcgVGhpcyBQaXhlbC4uLiIgZmVhdHVyZSBpbiBQSVggb2Z0ZW4gZmFp
bHMgd2hlbiB1c2luZyB0aGUKLS8vIEQzRDlFeCBpbnRlcmZhY2VzLiAgSW4gb3JkZXIgdG8gZ2V0
IGRlYnVnIHBpeGVsIHRvIHdvcmsgb24gYSBWaXN0YS9XaW4gNwotLy8gbWFjaGluZSwgZGVmaW5l
ICJBTkdMRV9FTkFCTEVfRDNEOUVYPTAiIGluIHlvdXIgcHJvamVjdCBmaWxlLgotI2lmICFkZWZp
bmVkKEFOR0xFX0VOQUJMRV9EM0Q5RVgpCi0vLyBFbmFibGVzIHVzZSBvZiB0aGUgSURpcmVjdDNE
OUV4IGludGVyZmFjZSwgd2hlbiBhdmFpbGFibGUKLSNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlF
WCAxCi0jZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKLQotbmFtZXNwYWNl
IGVnbAotewotbmFtZXNwYWNlCi17Ci0gICAgdHlwZWRlZiBzdGQ6Om1hcDxFR0xOYXRpdmVEaXNw
bGF5VHlwZSwgRGlzcGxheSo+IERpc3BsYXlNYXA7IAotICAgIERpc3BsYXlNYXAgZGlzcGxheXM7
Ci19Ci0KLWVnbDo6RGlzcGxheSAqRGlzcGxheTo6Z2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5
VHlwZSBkaXNwbGF5SWQpCi17Ci0gICAgaWYgKGRpc3BsYXlzLmZpbmQoZGlzcGxheUlkKSAhPSBk
aXNwbGF5cy5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaXNwbGF5c1tkaXNwbGF5SWRd
OwotICAgIH0KLQotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IE5VTEw7Ci0KLSAgICBpZiAo
ZGlzcGxheUlkID09IEVHTF9ERUZBVUxUX0RJU1BMQVkpCi0gICAgewotICAgICAgICBkaXNwbGF5
ID0gbmV3IGVnbDo6RGlzcGxheShkaXNwbGF5SWQsIChIREMpTlVMTCwgZmFsc2UpOwotICAgIH0K
LSAgICBlbHNlIGlmIChkaXNwbGF5SWQgPT0gRUdMX1NPRlRXQVJFX0RJU1BMQVlfQU5HTEUpCi0g
ICAgewotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6RGlzcGxheShkaXNwbGF5SWQsIChIREMp
TlVMTCwgdHJ1ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBD
aGVjayBpZiBkaXNwbGF5SWQgaXMgYSB2YWxpZCBkaXNwbGF5IGRldmljZSBjb250ZXh0Ci0KLSAg
ICAgICAgZGlzcGxheSA9IG5ldyBlZ2w6OkRpc3BsYXkoZGlzcGxheUlkLCAoSERDKWRpc3BsYXlJ
ZCwgZmFsc2UpOwotICAgIH0KLQotICAgIGRpc3BsYXlzW2Rpc3BsYXlJZF0gPSBkaXNwbGF5Owot
ICAgIHJldHVybiBkaXNwbGF5OwotfQotCi1EaXNwbGF5OjpEaXNwbGF5KEVHTE5hdGl2ZURpc3Bs
YXlUeXBlIGRpc3BsYXlJZCwgSERDIGRldmljZUNvbnRleHQsIGJvb2wgc29mdHdhcmUpIDogbURj
KGRldmljZUNvbnRleHQpCi17Ci0gICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotICAgIAotICAgIG1E
M2Q5ID0gTlVMTDsKLSAgICBtRDNkOUV4ID0gTlVMTDsKLSAgICBtRGV2aWNlID0gTlVMTDsKLSAg
ICBtRGV2aWNlRXggPSBOVUxMOwotICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwotCi0gICAgbUFk
YXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7Ci0KLSAgICAjaWYgUkVGX1JBU1QgPT0gMSB8fCBk
ZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAgICAgICBtRGV2aWNlVHlwZSA9IEQzRERFVlRZUEVf
UkVGOwotICAgICNlbHNlCi0gICAgICAgIG1EZXZpY2VUeXBlID0gRDNEREVWVFlQRV9IQUw7Ci0g
ICAgI2VuZGlmCi0KLSAgICBtTWluU3dhcEludGVydmFsID0gMTsKLSAgICBtTWF4U3dhcEludGVy
dmFsID0gMTsKLSAgICBtU29mdHdhcmVEZXZpY2UgPSBzb2Z0d2FyZTsKLSAgICBtRGlzcGxheUlk
ID0gZGlzcGxheUlkOwotICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7Ci19Ci0KLURpc3BsYXk6On5E
aXNwbGF5KCkKLXsKLSAgICB0ZXJtaW5hdGUoKTsKLQotICAgIERpc3BsYXlNYXA6Oml0ZXJhdG9y
IHRoaXNEaXNwbGF5ID0gZGlzcGxheXMuZmluZChtRGlzcGxheUlkKTsKLQotICAgIGlmICh0aGlz
RGlzcGxheSAhPSBkaXNwbGF5cy5lbmQoKSkKLSAgICB7Ci0gICAgICBkaXNwbGF5cy5lcmFzZSh0
aGlzRGlzcGxheSk7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmluaXRpYWxpemUoKQotewot
ICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAobVNvZnR3YXJlRGV2aWNlKQotICAgIHsKLSAgICAgIG1EM2Q5TW9kdWxl
ID0gR2V0TW9kdWxlSGFuZGxlKFRFWFQoInN3aWZ0c2hhZGVyX2QzZDkuZGxsIikpOwotICAgIH0g
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIG1EM2Q5TW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlKFRF
WFQoImQzZDkuZGxsIikpOwotICAgIH0KLSAgICBpZiAobUQzZDlNb2R1bGUgPT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3JlYXRlOUV4RnVuYykoVUlO
VCwgSURpcmVjdDNEOUV4KiopOwotICAgIERpcmVjdDNEQ3JlYXRlOUV4RnVuYyBEaXJlY3QzRENy
ZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RXhGdW5jPihHZXRQ
cm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4IikpOwotCi0gICAgLy8g
VXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHZl
cnNpb24gaXMgbGVzcwotICAgIC8vIGluY2xpbmVkIHRvIHJlcG9ydCBhIGxvc3QgY29udGV4dCwg
Zm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcwotICAgIC8vIGRlc2t0b3AuIERpcmVj
dDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZpc3RhIGFuZCBsYXRlciBpZiBzdWl0YWJs
ZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCi0gICAgaWYgKEFOR0xFX0VOQUJMRV9EM0Q5RVggJiYg
RGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVjdDNEQ3JlYXRlOUV4UHRyKEQz
RF9TREtfVkVSU0lPTiwgJm1EM2Q5RXgpKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtRDNkOUV4
KTsKLSAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRDksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKLSAgICAgICAgQVNTRVJUKG1EM2Q5KTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUQzZDkgPSBEaXJlY3QzRENyZWF0ZTkoRDNE
X1NES19WRVJTSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDkpCi0gICAgewotICAgICAgICBp
ZiAobURjICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgLy8gIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoaWNoIGFkYXB0ZXIgaW5kZXggdGhlIGRldmljZSBjb250
ZXh0IGNvcnJlc3BvbmRzIHRvCi0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3VsdDsK
LSAgICAgICAgCi0gICAgICAgIC8vIEdpdmUgdXAgb24gZ2V0dGluZyBkZXZpY2UgY2FwcyBhZnRl
ciBhYm91dCBvbmUgc2Vjb25kLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5HZXREZXZpY2VDYXBzKG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBzKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09
IEQzREVSUl9OT1RBVkFJTEFCTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2xl
ZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29tZSB0aW1lIHRvIGluaXRpYWxpemUvcmVj
b3ZlcgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkp
ICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVfT1VUT0ZNRU1PUlksIEQzREVSUl9JTlZB
TElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNhbid0IHJlY292ZXIgZnJvbQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNf
VkVSU0lPTigyLCAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgdGVybWluYXRlKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gV2hlbiBEaXJlY3RYOSBpcyBydW5uaW5nIHdpdGggYW4gb2xkZXIg
RGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0Y2hSZWN0IGZyb20gYSByZWd1bGFyIHRleHR1cmUgdG8g
YSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgLy8gVGhp
cyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KLSAgICAg
ICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQzRERFVkNBUFMyX0NBTl9TVFJFVENIUkVD
VF9GUk9NX1RFWFRVUkVTKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGUo
KTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtTWluU3dhcEludGVydmFsID0gNDsKLSAgICAgICAgbU1h
eFN3YXBJbnRlcnZhbCA9IDA7Ci0KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlv
bkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFKSB7bU1pblN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDApOyBtTWF4U3dhcEludGVydmFsID0g
c3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMCk7fQotICAgICAgICBpZiAobURldmljZUNhcHMu
UHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkUpICAgICAgIHtt
TWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMSk7IG1NYXhTd2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAxKTt9Ci0gICAgICAgIGlmICht
RGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RX
TykgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAy
KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDIpO30KLSAg
ICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRf
SU5URVJWQUxfVEhSRUUpICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2Fw
SW50ZXJ2YWwsIDMpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZh
bCwgMyk7fQotICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYg
RDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjpt
aW4obU1pblN3YXBJbnRlcnZhbCwgNCk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4
U3dhcEludGVydmFsLCA0KTt9Ci0KLSAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJJZGVudGlmaWVy
KG1BZGFwdGVyLCAwLCAmbUFkYXB0ZXJJZGVudGlmaWVyKTsKLQotICAgICAgICBjb25zdCBEM0RG
T1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KLSAgICAgICAgewotICAgICAgICAgICAgRDNE
Rk1UX0ExUjVHNUI1LAotICAgICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBj
b2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdORURf
QllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIg
dmFsdWUuCi0gICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRf
UjVHNkI1LAotICAgICAgICAvLyAgRDNERk1UX1gxUjVHNUI1LCAgICAgIC8vIEhhcyBubyBjb21w
YXRpYmxlIE9wZW5HTCBFUyByZW5kZXJidWZmZXIgZm9ybWF0Ci0gICAgICAgICAgICBEM0RGTVRf
WDhSOEc4QjgKLSAgICAgICAgfTsKLQotICAgICAgICBjb25zdCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0c1tdID0KLSAgICAgICAgewotICAgICAgICAgICAgRDNERk1UX1VOS05PV04sCi0g
ICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxFLAotICAgICAgICAgICAgRDNERk1UX0QzMiwK
LSAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKLSAgICAgICAgICAgIEQzREZNVF9EMjRTOCwKLSAg
ICAgICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAgICAgLy8gIEQzREZNVF9EMjRYNFM0LAotICAg
ICAgICAgICAgRDNERk1UX0QxNiwKLSAgICAgICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAot
ICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAotICAgICAgICB9OwotCi0gICAgICAgIEQzRERJU1BM
QVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNw
bGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAgICAgICAgQ29uZmln
U2V0IGNvbmZpZ1NldDsKLQotICAgICAgICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1h
dEluZGV4IDwgc2l6ZW9mKHJlbmRlclRhcmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7
IGZvcm1hdEluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzREZPUk1BVCByZW5kZXJU
YXJnZXRGb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKLQotICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7Ci0KLSAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgc2l6
ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGRlcHRoU3RlbmNp
bEluZGV4KyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBEM0RGT1JN
QVQgZGVwdGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJ
bmRleF07Ci0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNEX09LOwotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYoZGVwdGhTdGVuY2lsRm9y
bWF0ICE9IEQzREZNVF9VTktOT1dOKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNU
RU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZvcm1hdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlcHRo
U3RlbmNpbEZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0
aFN0ZW5jaWxNYXRjaChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5G
b3JtYXQsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURF
RChyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NldC5hZGQoY3VycmVudERpc3BsYXlNb2RlLCBtTWlu
U3dhcEludGVydmFsLCBtTWF4U3dhcEludGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRo
U3RlbmNpbEZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aCwgbURldmljZUNhcHMuTWF4VGV4dHVyZUhl
aWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRl
cm5hbGx5Ci0gICAgICAgIEVHTGludCBpbmRleCA9IDE7Ci0gICAgICAgIGZvciAoQ29uZmlnU2V0
OjpJdGVyYXRvciBjb25maWcgPSBjb25maWdTZXQubVNldC5iZWdpbigpOyBjb25maWcgIT0gY29u
ZmlnU2V0Lm1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgICAgICB7Ci0gICAgICAgICAgICBDb25m
aWcgY29uZmlndXJhdGlvbiA9ICpjb25maWc7Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9uLm1D
b25maWdJRCA9IGluZGV4OwotICAgICAgICAgICAgaW5kZXgrKzsKLQotICAgICAgICAgICAgbUNv
bmZpZ1NldC5tU2V0Lmluc2VydChjb25maWd1cmF0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgIHsKLSAgICAgICAgdGVybWluYXRlKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGluaXRFeHRlbnNpb25TdHJpbmco
KTsKLQotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhp
ZGRlbldpbmRvdyIpOwotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQo
IlNUQVRJQyIpOwotCi0gICAgbURldmljZVdpbmRvdyA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05P
QUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgV1NfRElTQUJMRUQgfCBXU19QT1BVUCwg
MCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBHZXRNb2R1bGVIYW5kbGUoTlVMTCksIE5V
TEwpOwotCi0gICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0
ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkKLXsKLSAgICB3aGlsZSAoIW1TdXJmYWNlU2V0
LmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZXN0cm95U3VyZmFjZSgqbVN1cmZhY2VTZXQuYmVn
aW4oKSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtQ29udGV4dFNldC5lbXB0eSgpKQotICAgIHsK
LSAgICAgICAgZGVzdHJveUNvbnRleHQoKm1Db250ZXh0U2V0LmJlZ2luKCkpOwotICAgIH0KLQot
ICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCi0gICAgewotICAgICAgICBtRXZl
bnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5w
b3BfYmFjaygpOwotICAgIH0KLQotICAgIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgLy8g
SWYgdGhlIGRldmljZSBpcyBsb3N0LCByZXNldCBpdCBmaXJzdCB0byBwcmV2ZW50IGxlYXZpbmcg
dGhlIGRyaXZlciBpbiBhbiB1bnN0YWJsZSBzdGF0ZQotICAgICAgICBpZiAodGVzdERldmljZUxv
c3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzZXREZXZpY2UoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZSA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2VFeC0+UmVs
ZWFzZSgpOwotICAgICAgICBtRGV2aWNlRXggPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRDNk
OSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EM2Q5ID0gTlVM
TDsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZVdpbmRvdykKLSAgICB7Ci0gICAgICAgIERlc3Ry
b3lXaW5kb3cobURldmljZVdpbmRvdyk7Ci0gICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwot
ICAgIH0KLSAgICAKLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIG1EM2Q5RXgtPlJl
bGVhc2UoKTsKLSAgICAgICAgbUQzZDlFeCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5
TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotICAgIH0KLX0KLQot
dm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKLXsKLSAgICBpZiAoIW1TY2VuZVN0YXJ0ZWQpCi0g
ICAgewotICAgICAgICBsb25nIHJlc3VsdCA9IG1EZXZpY2UtPkJlZ2luU2NlbmUoKTsKLSAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGRlZmVu
c2l2ZSBjaGVja2luZyBhZ2FpbnN0IHRoZSBkZXZpY2UgYmVpbmcKLSAgICAgICAgICAgIC8vIGxv
c3QgYXQgdW5leHBlY3RlZCB0aW1lcy4KLSAgICAgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIERpc3BsYXk6OmVuZFNjZW5lKCkKLXsKLSAg
ICBpZiAobVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIEVuZFNjZW5lIGNhbiBmYWls
IGlmIHRoZSBkZXZpY2Ugd2FzIGxvc3QsIGZvciBleGFtcGxlIGR1ZQotICAgICAgICAvLyB0byBh
IFREUiBkdXJpbmcgYSBkcmF3IGNhbGwuCi0gICAgICAgIG1EZXZpY2UtPkVuZFNjZW5lKCk7Ci0g
ICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlzcGxheTo6
Z2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwg
RUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmlnKQotewotICAgIHJldHVybiBtQ29u
ZmlnU2V0LmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliTGlzdCwgY29uZmlnU2l6ZSwgbnVtQ29u
ZmlnKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRDb25maWdBdHRyaWIoRUdMQ29uZmlnIGNvbmZp
ZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSkKLXsKLSAgICBjb25zdCBlZ2w6OkNv
bmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7Ci0KLSAgICBzd2l0
Y2ggKGF0dHJpYnV0ZSkKLSAgICB7Ci0gICAgICBjYXNlIEVHTF9CVUZGRVJfU0laRTogICAgICAg
ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQnVmZmVyU2l6ZTsgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tQWxwaGFTaXplOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVHTF9CTFVFX1NJWkU6ICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tQmx1ZVNpemU7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9HUkVFTl9T
SVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tR3JlZW5TaXplOyAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9SRURfU0laRTogICAgICAgICAgICAg
ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVkU2l6ZTsgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tRGVwdGhTaXplOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVHTF9TVEVOQ0lMX1NJWkU6ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
U3RlbmNpbFNpemU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT05GSUdfQ0FW
RUFUOiAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnQ2F2ZWF0OyAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6ICAgICAgICAgICAgICAg
ICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQ29uZmlnSUQ7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVHTF9MRVZFTDogICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tTGV2ZWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVH
TF9OQVRJVkVfUkVOREVSQUJMRTogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTmF0
aXZlUmVuZGVyYWJsZTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFM
X1RZUEU6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTmF0aXZlVmlzdWFsVHlwZTsg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9TQU1QTEVTOiAgICAgICAgICAgICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU2FtcGxlczsgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1
cmF0aW9uLT5tU2FtcGxlQnVmZmVyczsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9T
VVJGQUNFX1RZUEU6ICAgICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tU3VyZmFj
ZVR5cGU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9UWVBF
OiAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRUeXBlOyAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9CTFVFX1ZBTFVFOiAgICAqdmFs
dWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJlbnRCbHVlVmFsdWU7ICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTogICAqdmFsdWUgPSBjb25maWd1cmF0
aW9uLT5tVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9UUkFO
U1BBUkVOVF9SRURfVkFMVUU6ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tVHJhbnNwYXJl
bnRSZWRWYWx1ZTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdC
OiAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQjsgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQTogICAgICAqdmFsdWUg
PSBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQkE7ICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVHTF9NSU5fU1dBUF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9u
LT5tTWluU3dhcEludGVydmFsOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhfU1dB
UF9JTlRFUlZBTDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4U3dhcEludGVy
dmFsOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAg
ICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTHVtaW5hbmNlU2l6ZTsgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVHTF9BTFBIQV9NQVNLX1NJWkU6ICAgICAgICAgICAqdmFsdWUgPSBj
b25maWd1cmF0aW9uLT5tQWxwaGFNYXNrU2l6ZTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVHTF9DT0xPUl9CVUZGRVJfVFlQRTogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5t
Q29sb3JCdWZmZXJUeXBlOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9SRU5ERVJBQkxF
X1RZUEU6ICAgICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tUmVuZGVyYWJsZVR5cGU7
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVRDSF9OQVRJVkVfUElYTUFQOiAgICAg
ICAqdmFsdWUgPSBmYWxzZTsgVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVHTF9DT05GT1JNQU5UOiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjb25m
aWd1cmF0aW9uLT5tQ29uZm9ybWFudDsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVH
TF9NQVhfUEJVRkZFUl9XSURUSDogICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4
UEJ1ZmZlcldpZHRoOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9I
RUlHSFQ6ICAgICAgICAqdmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZlckhlaWdodDsg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVHTF9NQVhfUEJVRkZFUl9QSVhFTFM6ICAgICAgICAq
dmFsdWUgPSBjb25maWd1cmF0aW9uLT5tTWF4UEJ1ZmZlclBpeGVsczsgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRGlzcGxheTo6Y3JlYXRlRGV2aWNlKCkKLXsKLSAgICBEM0RQUkVT
RU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFt
ZXRlcnMoKTsKLSAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJW
RSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
M2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNlV2luZG93LCBi
ZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RD
UkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0KLSAgICBp
ZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZSht
QWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RD
UkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURl
dmljZSk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfTk9UQVZBSUxBQkxFIHx8IHJlc3Vs
dCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5RXgpCi0g
ICAgewotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShJSURfSURpcmVj
dDNERGV2aWNlOUV4LCAodm9pZCoqKSAmbURldmljZUV4KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXplRGV2aWNlKCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotLy8gZG8gYW55IG9uZS10aW1lIGRldmljZSBpbml0aWFsaXphdGlv
bgotLy8gTk9URTogdGhpcyBpcyBhbHNvIG5lZWRlZCBhZnRlciBhIGRldmljZSBsb3N0L3Jlc2V0
Ci0vLyB0byByZXNldCB0aGUgc2NlbmUgc3RhdHVzIGFuZCBlbnN1cmUgdGhlIGRlZmF1bHQgc3Rh
dGVzIGFyZSByZXNldC4KLXZvaWQgRGlzcGxheTo6aW5pdGlhbGl6ZURldmljZSgpCi17Ci0gICAg
Ly8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcwotICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKLSAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19MQVNUUElYRUwsIEZBTFNFKTsKLQotICAgIG1TY2VuZVN0YXJ0ZWQgPSBm
YWxzZTsKLX0KLQotYm9vbCBEaXNwbGF5OjpyZXNldERldmljZSgpCi17Ci0gICAgRDNEUFJFU0VO
VF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVmYXVsdFByZXNlbnRQYXJhbWV0
ZXJzKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRF9PSzsKLSAgICBib29sIGxvc3QgPSB0
ZXN0RGV2aWNlTG9zdCgpOwotICAgIGludCBhdHRlbXB0cyA9IDM7ICAgIAotCi0gICAgd2hpbGUg
KGxvc3QgJiYgYXR0ZW1wdHMgPiAwKQotICAgIHsKLSAgICAgICAgaWYgKG1EZXZpY2VFeCkKLSAg
ICAgICAgewotICAgICAgICAgICAgU2xlZXAoNTAwKTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBk
cml2ZXIgc29tZSBDUFUgdGltZQotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZUV4LT5SZXNl
dEV4KCZwcmVzZW50UGFyYW1ldGVycywgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVM
ZXZlbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAocmVzdWx0ID09IEQzREVS
Ul9ERVZJQ0VMT1NUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNsZWVwKDEwMCk7
ICAgLy8gR2l2ZSB0aGUgZ3JhcGhpY3MgZHJpdmVyIHNvbWUgQ1BVIHRpbWUKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VOT1RSRVNFVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5SZXNldCgm
cHJlc2VudFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
bG9zdCA9IHRlc3REZXZpY2VMb3N0KCk7Ci0gICAgICAgIGF0dGVtcHRzIC0tOwotICAgIH0KLQot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiUmVzZXQvUmVzZXRF
eCBmYWlsZWQgbXVsdGlwbGUgdGltZXM6IDB4JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gcmVzZXQgZGV2
aWNlIGRlZmF1bHRzCi0gICAgaW5pdGlhbGl6ZURldmljZSgpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLUVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRv
dywgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQotewotICAgIGNv
bnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7Ci0gICAg
RUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBFR0xfRkFMU0U7Ci0KLSAgICBpZiAoYXR0
cmliTGlzdCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICgqYXR0cmliTGlzdCAhPSBFR0xfTk9ORSkK
LSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzBdKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJfQlVGRkVSOgotICAgICAgICAgICAg
ICAgIHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEVHTF9CQUNLX0JVRkZFUjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9TSU5HTEVfQlVGRkVSOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOyAgIC8v
IFJlbmRlcmluZyBkaXJlY3RseSB0byBmcm9udCBidWZmZXIgbm90IHN1cHBvcnRlZAotICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZG
RVJfU1VQUE9SVEVEX05WOgotICAgICAgICAgICAgICAgIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQg
PSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FM
UEhBX0ZPUk1BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwg
RUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJMaXN0ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdpbmRvdykpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0K
LQotICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKSAKLSAgICB7Ci0gICAgICAgIGlmICghcmVzdG9y
ZUxvc3REZXZpY2UoKSkKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICB9
Ci0KLSAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlv
biwgd2luZG93LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKLQotICAgIGlmICghc3VyZmFjZS0+
aW5pdGlhbGl6ZSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHN1cmZhY2U7Ci0gICAgICAgIHJl
dHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAgICBtU3VyZmFjZVNldC5pbnNlcnQoc3Vy
ZmFjZSk7Ci0KLSAgICByZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKLX0KLQotRUdMU3VyZmFjZSBE
aXNwbGF5OjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENvbmZpZyBjb25maWcsIEhBTkRMRSBz
aGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KQotewotICAgIEVHTGludCB3aWR0
aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgRUdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gRUdMX05PX1RF
WFRVUkU7Ci0gICAgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0gICAg
Y29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKLQot
ICAgIGlmIChhdHRyaWJMaXN0KQotICAgIHsKLSAgICAgICAgd2hpbGUgKCphdHRyaWJMaXN0ICE9
IEVHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYkxpc3RbMF0p
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1dJRFRIOgotICAgICAgICAg
ICAgICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgotICAgICAgICAgICAgICAgIGhlaWdodCA9IGF0
dHJpYkxpc3RbMV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
RUdMX0xBUkdFU1RfUEJVRkZFUjoKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmliTGlzdFsxXSAh
PSBFR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7IC8vIEZJWE1F
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVf
Rk9STUFUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFsxXSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9OT19URVhUVVJFOgotICAgICAg
ICAgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9SR0I6Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEVHTF9URVhUVVJFX1JHQkE6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSBh
dHRyaWJMaXN0WzFdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FU
VFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9UQVJHRVQ6Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzFdKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgRUdMX05PX1RFWFRVUkU6Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEVHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlVGFyZ2V0ID0g
YXR0cmliTGlzdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
VFRSSUJVVEUsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01JUE1BUF9URVhUVVJFOgotICAg
ICAgICAgICAgICAgIGlmIChhdHRyaWJMaXN0WzFdICE9IEVHTF9GQUxTRSkKLSAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQ
QUNFOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9f
U1VSRkFDRSk7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBhdHRyaWJMaXN0ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9Q
QVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPT0gMCB8
fCBoZWlnaHQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJ
QlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAgIGlmICh0ZXh0dXJlRm9ybWF0ICE9
IEVHTF9OT19URVhUVVJFICYmICFnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpICYmICghZ2w6
OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAg
IGlmICgodGV4dHVyZUZvcm1hdCAhPSBFR0xfTk9fVEVYVFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ID09
IEVHTF9OT19URVhUVVJFKSB8fAotICAgICAgICAodGV4dHVyZUZvcm1hdCA9PSBFR0xfTk9fVEVY
VFVSRSAmJiB0ZXh0dXJlVGFyZ2V0ICE9IEVHTF9OT19URVhUVVJFKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0g
ICAgaWYgKCEoY29uZmlndXJhdGlvbi0+bVN1cmZhY2VUeXBlICYgRUdMX1BCVUZGRVJfQklUKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFD
RSk7Ci0gICAgfQotCi0gICAgaWYgKCh0ZXh0dXJlRm9ybWF0ID09IEVHTF9URVhUVVJFX1JHQiAm
JiBjb25maWd1cmF0aW9uLT5tQmluZFRvVGV4dHVyZVJHQiAhPSBFR0xfVFJVRSkgfHwKLSAgICAg
ICAgKHRleHR1cmVGb3JtYXQgPT0gRUdMX1RFWFRVUkVfUkdCQSAmJiBjb25maWd1cmF0aW9uLT5t
QmluZFRvVGV4dHVyZVJHQkEgIT0gRUdMX1RSVUUpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYg
KHRlc3REZXZpY2VMb3N0KCkpIAotICAgIHsKLSAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERldmlj
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAgIH0KLQotICAgIFN1
cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBjb25maWd1cmF0aW9uLCBzaGFyZUhh
bmRsZSwgd2lkdGgsIGhlaWdodCwgdGV4dHVyZUZvcm1hdCwgdGV4dHVyZVRhcmdldCk7Ci0KLSAg
ICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBzdXJm
YWNlOwotICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgfQotCi0gICAgbVN1cmZh
Y2VTZXQuaW5zZXJ0KHN1cmZhY2UpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3Moc3VyZmFjZSk7Ci19
Ci0KLUVHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFu
ZGxlLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywg
Ym9vbCByb2J1c3RBY2Nlc3MpCi17Ci0gICAgaWYgKCFtRGV2aWNlKQotICAgIHsKLSAgICAgICAg
aWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGVzdERldmljZUxvc3QoKSkgICAvLyBM
b3N0IGRldmljZQotICAgIHsKLSAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERldmljZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgY29uc3QgZWdsOjpDb25maWcgKmNv
bmZpZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRsZSk7Ci0KLSAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcsIHNoYXJlQ29udGV4dCwgbm90aWZ5UmVz
ZXRzLCByb2J1c3RBY2Nlc3MpOwotICAgIG1Db250ZXh0U2V0Lmluc2VydChjb250ZXh0KTsKLSAg
ICBtRGV2aWNlTG9zdCA9IGZhbHNlOwotCi0gICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLWJvb2wg
RGlzcGxheTo6cmVzdG9yZUxvc3REZXZpY2UoKQotewotICAgIGZvciAoQ29udGV4dFNldDo6aXRl
cmF0b3IgY3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY3R4ICE9IG1Db250ZXh0U2V0LmVuZCgp
OyBjdHgrKykKLSAgICB7Ci0gICAgICAgIGlmICgoKmN0eCktPmlzUmVzZXROb3RpZmljYXRpb25F
bmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gSWYgcmVzZXQgbm90aWZp
Y2F0aW9ucyBoYXZlIGJlZW4gcmVxdWVzdGVkLCBhcHBsaWNhdGlvbiBtdXN0IGRlbGV0ZSBhbGwg
Y29udGV4dHMgZmlyc3QKLSAgICB9Ci0gCi0gICAgLy8gUmVsZWFzZSBzdXJmYWNlIHJlc291cmNl
cyB0byBtYWtlIHRoZSBSZXNldCgpIHN1Y2NlZWQKLSAgICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJh
dG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0
LmVuZCgpOyBzdXJmYWNlKyspCi0gICAgewotICAgICAgICAoKnN1cmZhY2UpLT5yZWxlYXNlKCk7
Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0g
ICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVhc2UoKTsKLSAgICAgICAgbUV2ZW50
UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXNldERldmljZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc3RvcmUgYW55
IHN1cmZhY2VzIHRoYXQgbWF5IGhhdmUgYmVlbiBsb3N0Ci0gICAgZm9yIChTdXJmYWNlU2V0Ojpp
dGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFj
ZVNldC5lbmQoKTsgc3VyZmFjZSsrKQotICAgIHsKLSAgICAgICAgKCpzdXJmYWNlKS0+cmVzZXRT
d2FwQ2hhaW4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi12b2lkIERpc3Bs
YXk6OmRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBkZWxldGUg
c3VyZmFjZTsKLSAgICBtU3VyZmFjZVNldC5lcmFzZShzdXJmYWNlKTsKLX0KLQotdm9pZCBEaXNw
bGF5OjpkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBnbERlc3Ry
b3lDb250ZXh0KGNvbnRleHQpOwotICAgIG1Db250ZXh0U2V0LmVyYXNlKGNvbnRleHQpOwotfQot
Ci12b2lkIERpc3BsYXk6Om5vdGlmeURldmljZUxvc3QoKQotewotICAgIGZvciAoQ29udGV4dFNl
dDo6aXRlcmF0b3IgY29udGV4dCA9IG1Db250ZXh0U2V0LmJlZ2luKCk7IGNvbnRleHQgIT0gbUNv
bnRleHRTZXQuZW5kKCk7IGNvbnRleHQrKykKLSAgICB7Ci0gICAgICAgICgqY29udGV4dCktPm1h
cmtDb250ZXh0TG9zdCgpOwotICAgIH0KLSAgICBtRGV2aWNlTG9zdCA9IHRydWU7Ci0gICAgZXJy
b3IoRUdMX0NPTlRFWFRfTE9TVCk7Ci19Ci0KLWJvb2wgRGlzcGxheTo6aXNEZXZpY2VMb3N0KCkK
LXsKLSAgICByZXR1cm4gbURldmljZUxvc3Q7Ci19Ci0KLWJvb2wgRGlzcGxheTo6aXNJbml0aWFs
aXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EM2Q5ICE9IE5VTEwgJiYgbUNvbmZpZ1NldC5z
aXplKCkgPiAwOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNv
bmZpZykKLXsKLSAgICByZXR1cm4gbUNvbmZpZ1NldC5nZXQoY29uZmlnKSAhPSBOVUxMOwotfQot
Ci1ib29sIERpc3BsYXk6OmlzVmFsaWRDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQotewot
ICAgIHJldHVybiBtQ29udGV4dFNldC5maW5kKGNvbnRleHQpICE9IG1Db250ZXh0U2V0LmVuZCgp
OwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFj
ZSkKLXsKLSAgICByZXR1cm4gbVN1cmZhY2VTZXQuZmluZChzdXJmYWNlKSAhPSBtU3VyZmFjZVNl
dC5lbmQoKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpoYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdO
RCB3aW5kb3cpCi17Ci0gICAgZm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1
cmZhY2VTZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsr
KQotICAgIHsKLSAgICAgICAgaWYgKCgqc3VyZmFjZSktPmdldFdpbmRvd0hhbmRsZSgpID09IHdp
bmRvdykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUVHTGludCBEaXNwbGF5OjpnZXRNaW5Td2Fw
SW50ZXJ2YWwoKQotewotICAgIHJldHVybiBtTWluU3dhcEludGVydmFsOwotfQotCi1FR0xpbnQg
RGlzcGxheTo6Z2V0TWF4U3dhcEludGVydmFsKCkKLXsKLSAgICByZXR1cm4gbU1heFN3YXBJbnRl
cnZhbDsKLX0KLQotSURpcmVjdDNERGV2aWNlOSAqRGlzcGxheTo6Z2V0RGV2aWNlKCkKLXsKLSAg
ICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBpZiAoIWNyZWF0ZURldmljZSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBtRGV2aWNlOwotfQotCi1EM0RDQVBTOSBEaXNwbGF5OjpnZXREZXZpY2VDYXBzKCkK
LXsKLSAgICByZXR1cm4gbURldmljZUNhcHM7Ci19Ci0KLUQzREFEQVBURVJfSURFTlRJRklFUjkg
KkRpc3BsYXk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4gJm1BZGFwdGVy
SWRlbnRpZmllcjsKLX0KLQotYm9vbCBEaXNwbGF5Ojp0ZXN0RGV2aWNlTG9zdCgpCi17Ci0gICAg
aWYgKG1EZXZpY2VFeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBGQUlMRUQobURldmljZUV4LT5D
aGVja0RldmljZVN0YXRlKE5VTEwpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURldmljZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBGQUlMRUQobURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vIGRldmljZSB5ZXQsIHNvIG5v
IHJlc2V0IHJlcXVpcmVkCi19Ci0KLWJvb2wgRGlzcGxheTo6dGVzdERldmljZVJlc2V0dGFibGUo
KQotewotICAgIEhSRVNVTFQgc3RhdHVzID0gRDNEX09LOwotCi0gICAgaWYgKG1EZXZpY2VFeCkK
LSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IG1EZXZpY2VFeC0+Q2hlY2tEZXZpY2VTdGF0ZShOVUxM
KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURldmljZSkKLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9
IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0gICAgfQotCi0gICAgc3dpdGNoIChz
dGF0dXMpCi0gICAgewotICAgICAgY2FzZSBEM0RFUlJfREVWSUNFTk9UUkVTRVQ6Ci0gICAgICBj
YXNlIEQzREVSUl9ERVZJQ0VIVU5HOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlzcGxheTo6c3lu
Yyhib29sIGJsb2NrKQotewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgSURpcmVjdDNEUXVl
cnk5KiBxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIGlmICghcXVlcnkpCi0gICAg
ewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gcXVlcnktPklzc3VlKEQz
RElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIGRvCi0g
ICAgewotICAgICAgICByZXN1bHQgPSBxdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRB
X0ZMVVNIKTsKLQotICAgICAgICBpZihibG9jayAmJiByZXN1bHQgPT0gU19GQUxTRSkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhyZWFk
cyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAgICAgICBTbGVlcCgwKTsKLSAg
ICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGRldmljZSBsb3NzCi0gICAgICAgICAg
ICAvLyBzb21lIGRyaXZlcnMgc2VlbSB0byByZXR1cm4gU19GQUxTRSBldmVuIGlmIHRoZSBkZXZp
Y2UgaXMgbG9zdAotICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBEM0RFUlJfREVWSUNFTE9TVCBs
aWtlIHRoZXkgc2hvdWxkCi0gICAgICAgICAgICBpZiAodGVzdERldmljZUxvc3QoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBEM0RFUlJfREVWSUNFTE9TVDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB3aGlsZShibG9jayAmJiByZXN1bHQg
PT0gU19GQUxTRSk7Ci0KLSAgICBmcmVlRXZlbnRRdWVyeShxdWVyeSk7Ci0KLSAgICBpZiAoaXNE
ZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIG5vdGlmeURldmljZUxvc3Qo
KTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFF1ZXJ5OSogRGlzcGxheTo6YWxsb2NhdGVFdmVudFF1
ZXJ5KCkKLXsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gTlVMTDsKLQotICAgIGlmICht
RXZlbnRRdWVyeVBvb2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmcXVlcnkpOwotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBxdWVyeSA9IG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5
UG9vbC5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIHJldHVybiBxdWVyeTsKLX0KLQotdm9pZCBE
aXNwbGF5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0RRdWVyeTkqIHF1ZXJ5KQotewotICAgIGlm
IChtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpID4gMTAwMCkKLSAgICB7Ci0gICAgICAgIHF1ZXJ5LT5S
ZWxlYXNlKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9v
bC5wdXNoX2JhY2socXVlcnkpOwotICAgIH0KLX0KLQotdm9pZCBEaXNwbGF5OjpnZXRNdWx0aVNh
bXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkKLXsK
LSAgICBmb3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8PSBE
M0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNhbXBsZUluZGV4KyspCi0gICAgewotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZSht
QWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgKEQzRE1VTFRJU0FNUExFX1RZ
UEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7Ci0KLSAgICAgICAgbXVsdGlTYW1wbGVBcnJheVtt
dWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1bHQpOwotICAgIH0KLX0KLQotYm9vbCBE
aXNwbGF5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1
cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFw
dGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHJldHVybiBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKLX0KLQotYm9v
bCBEaXNwbGF5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQotewotICAgIEQzRERJU1BMQVlNT0RF
IGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1B
ZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHJldHVybiBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKLX0KLQot
Ym9vbCBEaXNwbGF5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQotewotICAgIEQzRERJU1BMQVlN
T0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2Rl
KG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHJldHVybiBTVUNDRUVERUQo
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDUpKTsKLX0K
LQotLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGluIERpcmVjdDNEOQotLy8gd2Ug
YWxzbyB3YW50IE5VTEwgdGV4dHVyZSBzdXBwb3J0IHRvIGVuc3VyZSB0aGUgd2UgY2FuIG1ha2Ug
ZGVwdGgtb25seSBGQk9zCi0vLyBzZWUgaHR0cDovL2FyYXMtcC5pbmZvL3RleHRzL0QzRDlHUFVI
YWNrcy5odG1sCi1ib29sIERpc3BsYXk6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdAot
ewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0
QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKLQotICAg
IGJvb2wgaW50eiA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfREVQVEhTVEVOQ0lM
LCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfSU5UWikpOwotICAgIGJvb2wgbnVsbCA9IFNVQ0NF
RURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNF
LCBEM0RGTVRfTlVMTCkpOwotCi0gICAgcmV0dXJuIGludHogJiYgbnVsbDsKLX0KLQotYm9vbCBE
aXNwbGF5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpy
ZW5kZXJhYmxlKQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAg
ICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlN
b2RlKTsKLQotICAgICpmaWx0ZXJpbmcgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUVVFUllfRklMVEVSLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikp
ICYmCi0gICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FH
RV9RVUVSWV9GSUxURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7
Ci0gICAgCi0gICAgKnJlbmRlcmFibGUgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikp
JiYKLSAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikp
OwotCi0gICAgaWYgKCEqZmlsdGVyaW5nICYmICEqcmVuZGVyYWJsZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZN
VF9BMzJCMzJHMzJSMzJGKSkgJiYKLSAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29s
IERpc3BsYXk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wg
KnJlbmRlcmFibGUpCi17Ci0gICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwot
ICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxh
eU1vZGUpOwotCi0gICAgKmZpbHRlcmluZyA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBE
M0RVU0FHRV9RVUVSWV9GSUxURVIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZG
KSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVT
QUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYp
KTsKLSAgICAKLSAgICAqcmVuZGVyYWJsZSA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VG
b3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZG
KSkgJiYKLSAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVT
QUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYp
KTsKLQotICAgIGlmICghKmZpbHRlcmluZyAmJiAhKnJlbmRlcmFibGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURl
dmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RG
TVRfQTE2QjE2RzE2UjE2RikpICYmCi0gICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotYm9v
bCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpCi17Ci0gICAgRDNERElTUExB
WU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1v
ZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgcmV0dXJuIFNVQ0NFRURF
RChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50
RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfTDgpKTsKLX0K
LQotYm9vbCBEaXNwbGF5OjpnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkKLXsKLSAg
ICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0
ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAgICByZXR1
cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZN
VF9BOEw4KSk7Ci19Ci0KLUQzRFBPT0wgRGlzcGxheTo6Z2V0QnVmZmVyUG9vbChEV09SRCB1c2Fn
ZSkgY29uc3QKLXsKLSAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEQzRFBPT0xfREVGQVVMVDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYg
KCEodXNhZ2UgJiBEM0RVU0FHRV9EWU5BTUlDKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEQzRFBPT0xfTUFOQUdFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBEM0RQ
T09MX0RFRkFVTFQ7Ci19Ci0KLUQzRFBPT0wgRGlzcGxheTo6Z2V0VGV4dHVyZVBvb2woRFdPUkQg
dXNhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEM0RQT09MX0RFRkFVTFQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IGlmICghKHVzYWdlICYgKEQzRFVTQUdFX0RFUFRIU1RFTkNJTCB8IEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKLX0KLQotYm9v
bCBEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCi17Ci0gICAgSURpcmVjdDNEUXVlcnk5
ICpxdWVyeSA9IGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIGlmIChxdWVyeSkKLSAgICB7Ci0g
ICAgICAgIGZyZWVFdmVudFF1ZXJ5KHF1ZXJ5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUQz
RFBSRVNFTlRfUEFSQU1FVEVSUyBEaXNwbGF5OjpnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMo
KQotewotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsK
LQotICAgIC8vIFRoZSBkZWZhdWx0IHN3YXAgY2hhaW4gaXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4g
U3VyZmFjZSB3aWxsIGNyZWF0ZSBhIG5ldyBzd2FwIGNoYWluIHdpdGggdGhlIHByb3BlciBwYXJh
bWV0ZXJzLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBE
M0RGTVRfVU5LTk9XTjsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAx
OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBEM0RGTVRfVU5LTk9X
TjsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSAxOwotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5G
bGFncyA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1EZXZpY2VX
aW5kb3c7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsKLSAg
ICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05F
OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gRDNEUFJFU0VO
VF9JTlRFUlZBTF9ERUZBVUxUOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBE
M0RTV0FQRUZGRUNUX0RJU0NBUkQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBU
UlVFOwotCi0gICAgcmV0dXJuIHByZXNlbnRQYXJhbWV0ZXJzOwotfQotCi12b2lkIERpc3BsYXk6
OmluaXRFeHRlbnNpb25TdHJpbmcoKQotewotICAgIEhNT0RVTEUgc3dpZnRTaGFkZXIgPSBHZXRN
b2R1bGVIYW5kbGUoVEVYVCgic3dpZnRzaGFkZXJfZDNkOS5kbGwiKSk7Ci0KLSAgICBtRXh0ZW5z
aW9uU3RyaW5nID0gIiI7Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwot
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVz
cyAiOwotCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChzaGFyZUhh
bmRsZVN1cHBvcnRlZCgpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdM
X0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVfY2xpZW50X2J1ZmZlciAiOwotICAgIH0KLQotICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9xdWVyeV9zdXJmYWNlX3BvaW50ZXIgIjsKLQot
ICAgIGlmIChzd2lmdFNoYWRlcikKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkVHTF9BTkdMRV9zb2Z0d2FyZV9kaXNwbGF5ICI7Ci0gICAgfQotCi0gICAgaWYgKHNoYXJlSGFu
ZGxlU3VwcG9ydGVkKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xf
QU5HTEVfc3VyZmFjZV9kM2RfdGV4dHVyZV8yZF9zaGFyZV9oYW5kbGUgIjsKLSAgICB9Ci0KLSAg
ICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyIjsKLQotICAgIHN0
ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90
X29mKCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKLSAgICB9Ci19Ci0KLWNvbnN0IGNo
YXIgKkRpc3BsYXk6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1F
eHRlbnNpb25TdHJpbmcuY19zdHIoKTsKLX0KLQotYm9vbCBEaXNwbGF5OjpzaGFyZUhhbmRsZVN1
cHBvcnRlZCgpIGNvbnN0IAotewotICAgIC8vIFBJWCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB1
c2luZyBzaGFyZSBoYW5kbGVzLCBzbyBkaXNhYmxlIHRoZW0uCi0gICAgcmV0dXJuIGlzRDNkOUV4
RGV2aWNlKCkgJiYgIWdsOjpwZXJmQWN0aXZlKCk7Ci19Ci0KLS8vIE9ubHkgRGlyZWN0M0QgMTAg
cmVhZHkgZGV2aWNlcyBzdXBwb3J0IGFsbCB0aGUgbmVjZXNzYXJ5IHZlcnRleCB0ZXh0dXJlIGZv
cm1hdHMuCi0vLyBXZSB0ZXN0IHRoaXMgdXNpbmcgRDNEOSBieSBjaGVja2luZyBzdXBwb3J0IGZv
ciB0aGUgUjE2RiBmb3JtYXQuCi1ib29sIERpc3BsYXk6OmdldFZlcnRleFRleHR1cmVTdXBwb3J0
KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCBtRGV2aWNlQ2Fwcy5QaXhl
bFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDMsIDApKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9k
ZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERp
c3BsYXlNb2RlKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYp
OwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChyZXN1bHQpOwotfQotCi1ib29sIERpc3BsYXk6Omdl
dE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIShtRGV2aWNl
Q2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19QT1cyKSAmJgotICAgICAgICAgICAh
KG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX0NVQkVNQVBfUE9XMikg
JiYKLSAgICAgICAgICAgIShtRGV2aWNlQ2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQ
U19OT05QT1cyQ09ORElUSU9OQUwpOwotfQotCi1ib29sIERpc3BsYXk6OmdldE9jY2x1c2lvblF1
ZXJ5U3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEUXVlcnk5ICpxdWVy
eSA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RR
VUVSWVRZUEVfT0NDTFVTSU9OLCAmcXVlcnkpOwotICAgIAotICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSAmJiBxdWVyeSkKLSAgICB7Ci0gICAgICAgIHF1ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID49IEQzRFBT
X1ZFUlNJT04oMywgMCk7IAotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjdkYmQwLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IERpc3BsYXkuaDogRGVmaW5lcyB0aGUgZWdsOjpEaXNwbGF5IGNsYXNzLCByZXByZXNlbnRpbmcg
dGhlIGFic3RyYWN0Ci0vLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1w
bGVtZW50cyBFR0xEaXNwbGF5LgotLy8gW0VHTCAxLjRdIHNlY3Rpb24gMi4xLjIgcGFnZSAzLgot
Ci0jaWZuZGVmIElOQ0xVREVfRElTUExBWV9IXwotI2RlZmluZSBJTkNMVURFX0RJU1BMQVlfSF8K
LQotI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01F
QU4KLSNlbmRpZgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNp
bmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0Nv
bnRleHQuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9Db25maWcuaCIKLSNpbmNsdWRlICJsaWJFR0wv
U3VyZmFjZS5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBEaXNwbGF5Ci17Ci0gIHB1Ymxp
YzoKLSAgICB+RGlzcGxheSgpOwotCi0gICAgYm9vbCBpbml0aWFsaXplKCk7Ci0gICAgdm9pZCB0
ZXJtaW5hdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydFNjZW5lKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGVuZFNjZW5lKCk7Ci0KLSAgICBzdGF0aWMgZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5
KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCk7Ci0KLSAgICBib29sIGdldENvbmZpZ3Mo
RUdMQ29uZmlnICpjb25maWdzLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QsIEVHTGludCBjb25m
aWdTaXplLCBFR0xpbnQgKm51bUNvbmZpZyk7Ci0gICAgYm9vbCBnZXRDb25maWdBdHRyaWIoRUdM
Q29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7Ci0KLSAgICBF
R0xTdXJmYWNlIGNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25m
aWcsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMU3VyZmFjZSBjcmVhdGVPZmZz
Y3JlZW5TdXJmYWNlKEVHTENvbmZpZyBjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgY29uc3Qg
RUdMaW50ICphdHRyaWJMaXN0KTsKLSAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29u
ZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBu
b3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKLQotICAgIHZvaWQgZGVzdHJveVN1cmZh
Y2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKLSAgICB2b2lkIGRlc3Ryb3lDb250ZXh0KGdsOjpD
b250ZXh0ICpjb250ZXh0KTsKLQotICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0OwotICAg
IGJvb2wgaXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29uZmlnKTsKLSAgICBib29sIGlzVmFsaWRD
b250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLSAgICBib29sIGlzVmFsaWRTdXJmYWNlKGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgYm9vbCBoYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2Uo
SFdORCB3aW5kb3cpOwotCi0gICAgRUdMaW50IGdldE1pblN3YXBJbnRlcnZhbCgpOwotICAgIEVH
TGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNERGV2aWNl
OSAqZ2V0RGV2aWNlKCk7Ci0gICAgdmlydHVhbCBEM0RDQVBTOSBnZXREZXZpY2VDYXBzKCk7Ci0g
ICAgdmlydHVhbCBEM0RBREFQVEVSX0lERU5USUZJRVI5ICpnZXRBZGFwdGVySWRlbnRpZmllcigp
OwotICAgIHZpcnR1YWwgYm9vbCB0ZXN0RGV2aWNlTG9zdCgpOwotICAgIHZpcnR1YWwgYm9vbCB0
ZXN0RGV2aWNlUmVzZXR0YWJsZSgpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jKGJvb2wgYmxvY2sp
OwotICAgIHZpcnR1YWwgSURpcmVjdDNEUXVlcnk5KiBhbGxvY2F0ZUV2ZW50UXVlcnkoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZnJlZUV2ZW50UXVlcnkoSURpcmVjdDNEUXVlcnk5KiBxdWVyeSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBi
b29sICptdWx0aVNhbXBsZUFycmF5KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVT
dXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1
cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVh
bCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldElu
c3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0OwotICAgIHZpcnR1YWwgRDNEUE9PTCBnZXRUZXh0dXJlUG9v
bChEV09SRCB1c2FnZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RGV2aWNlTG9z
dCgpOwotICAgIGJvb2wgaXNEZXZpY2VMb3N0KCk7Ci0KLSAgICBib29sIGlzRDNkOUV4RGV2aWNl
KCkgY29uc3QgeyByZXR1cm4gbUQzZDlFeCAhPSBOVUxMOyB9Ci0gICAgY29uc3QgY2hhciAqZ2V0
RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBzaGFyZUhhbmRsZVN1cHBvcnRlZCgp
IGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERpc3Bs
YXkpOwotCi0gICAgRGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5SWQsIEhEQyBk
ZXZpY2VDb250ZXh0LCBib29sIHNvZnR3YXJlKTsKLQotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVS
UyBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKLQotICAgIGJvb2wgcmVzdG9yZUxvc3RE
ZXZpY2UoKTsKLQotICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlIG1EaXNwbGF5SWQ7Ci0gICAgY29u
c3QgSERDIG1EYzsKLQotICAgIEhNT0RVTEUgbUQzZDlNb2R1bGU7Ci0gICAgCi0gICAgVUlOVCBt
QWRhcHRlcjsKLSAgICBEM0RERVZUWVBFIG1EZXZpY2VUeXBlOwotICAgIElEaXJlY3QzRDkgKm1E
M2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVyIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCi0g
ICAgSURpcmVjdDNEOUV4ICptRDNkOUV4OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMg
bm90IHN1cHBvcnRlZC4KLSAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwotICAgIElEaXJl
Y3QzRERldmljZTlFeCAqbURldmljZUV4OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMg
bm90IHN1cHBvcnRlZC4KLQotICAgIC8vIEEgcG9vbCBvZiBldmVudCBxdWVyaWVzIHRoYXQgYXJl
IGN1cnJlbnRseSB1bnVzZWQuCi0gICAgc3RkOjp2ZWN0b3I8SURpcmVjdDNEUXVlcnk5Kj4gbUV2
ZW50UXVlcnlQb29sOwotCi0gICAgRDNEQ0FQUzkgbURldmljZUNhcHM7Ci0gICAgRDNEQURBUFRF
Ul9JREVOVElGSUVSOSBtQWRhcHRlcklkZW50aWZpZXI7Ci0gICAgSFdORCBtRGV2aWNlV2luZG93
OwotCi0gICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAgIEVHTGludCBtTWF4U3dhcEludGVydmFs
OwotICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOwotICAgIGJvb2wgbVNvZnR3YXJlRGV2aWNl
OwotICAgIAotICAgIHR5cGVkZWYgc3RkOjpzZXQ8U3VyZmFjZSo+IFN1cmZhY2VTZXQ7Ci0gICAg
U3VyZmFjZVNldCBtU3VyZmFjZVNldDsKLQotICAgIENvbmZpZ1NldCBtQ29uZmlnU2V0OwotCi0g
ICAgdHlwZWRlZiBzdGQ6OnNldDxnbDo6Q29udGV4dCo+IENvbnRleHRTZXQ7Ci0gICAgQ29udGV4
dFNldCBtQ29udGV4dFNldDsKLSAgICBib29sIG1EZXZpY2VMb3N0OwotCi0gICAgYm9vbCBjcmVh
dGVEZXZpY2UoKTsKLSAgICB2b2lkIGluaXRpYWxpemVEZXZpY2UoKTsKLSAgICBib29sIHJlc2V0
RGV2aWNlKCk7Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAgICBzdGQ6OnN0
cmluZyBtRXh0ZW5zaW9uU3RyaW5nOwotfTsKLX0KLQotI2VuZGlmICAgLy8gSU5DTFVERV9ESVNQ
TEFZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1JF
QURNRSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvUkVBRE1FCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZjA3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1JFQURNRQpAQCAtMCwwICsxIEBACitU
aGlzIGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFyZSBub3Qgc3luY2VkIGZyb20gdGhlIEFOR0xFIHBy
b2plY3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBpbiBXZWJLaXQgbmVlZHMgdGhlbSB5ZXQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODk5Yjc3OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjgy
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFN1cmZhY2UuY3BwOiBJbXBsZW1lbnRz
IHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJlcHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQot
Ly8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEgb2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFj
ayBidWZmZXJzLgotLy8gSW1wbGVtZW50cyBFR0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIuMiBwYWdlIDMuCi0KLSNpbmNsdWRlIDx0Y2hhci5o
PgotCi0jaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1
Zy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wv
bWFpbi5oIgotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLSNpbmNsdWRlIDxkd21hcGku
aD4KLQotbmFtZXNwYWNlIGVnbAotewotCi1uYW1lc3BhY2UKLXsKLWNvbnN0IGludCB2ZXJzaW9u
V2luZG93c1Zpc3RhID0gTUFLRVdPUkQoMHgwMCwgMHgwNik7Ci1jb25zdCBpbnQgdmVyc2lvbldp
bmRvd3M3ID0gTUFLRVdPUkQoMHgwMSwgMHgwNik7Ci0KLS8vIFJldHVybiB0aGUgdmVyc2lvbiBv
ZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3Igb3JkZXJpbmcK
LS8vIGNvbXBhcmlzb24uCi1pbnQgZ2V0Q29tcGFyYWJsZU9TVmVyc2lvbigpCi17Ci0gICAgRFdP
UkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKLSAgICBpbnQgbWFqb3JWZXJzaW9uID0gTE9CWVRF
KExPV09SRCh2ZXJzaW9uKSk7Ci0gICAgaW50IG1pbm9yVmVyc2lvbiA9IEhJQllURShMT1dPUkQo
dmVyc2lvbikpOwotICAgIHJldHVybiBNQUtFV09SRChtaW5vclZlcnNpb24sIG1ham9yVmVyc2lv
bik7Ci19Ci19Ci0KLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29u
ZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkg
Ci0gICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRv
dyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCi17Ci0g
ICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIG1EZXB0
aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1PZmZzY3Jl
ZW5UZXh0dXJlID0gTlVMTDsKLSAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgIG1UZXh0dXJl
ID0gTlVMTDsKLSAgICBtVGV4dHVyZUZvcm1hdCA9IEVHTF9OT19URVhUVVJFOwotICAgIG1UZXh0
dXJlVGFyZ2V0ID0gRUdMX05PX1RFWFRVUkU7Ci0KLSAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChF
R0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUg
YWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwotICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19C
VUZGRVI7Ci0gICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwotICAgIG1T
d2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7Ci0KLSAgICBzdWJjbGFz
c1dpbmRvdygpOwotfQotCi1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0
IENvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3aWR0aCwgRUdMaW50
IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1cmVUeXBlKQotICAg
IDogbURpc3BsYXkoZGlzcGxheSksIG1XaW5kb3coTlVMTCksIG1Db25maWcoY29uZmlnKSwgbVNo
YXJlSGFuZGxlKHNoYXJlSGFuZGxlKSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBt
UG9zdFN1YkJ1ZmZlclN1cHBvcnRlZChFR0xfRkFMU0UpCi17Ci0gICAgbVN3YXBDaGFpbiA9IE5V
TEw7Ci0gICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwot
ICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsK
LSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAg
ICBtVGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7Ci0gICAgbVRleHR1cmVUYXJnZXQgPSB0
ZXh0dXJlVHlwZTsKLQotICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICogRUdM
X0RJU1BMQVlfU0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNw
ZWN0IHJhdGlvCi0gICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKLSAgICBtU3dh
cEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IC0x
OwotICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKLX0KLQotU3VyZmFjZTo6flN1cmZhY2UoKQotewot
ICAgIHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICByZWxlYXNlKCk7Ci19Ci0KLWJvb2wgU3VyZmFj
ZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtU3dhcENoYWluICYmICFtT2Zmc2NyZWVu
VGV4dHVyZSAmJiAhbURlcHRoU3RlbmNpbCk7Ci0KLSAgICBpZiAoIXJlc2V0U3dhcENoYWluKCkp
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBNb2RpZnkgcHJlc2VudCBwYXJhbWV0ZXJz
IGZvciB0aGlzIHdpbmRvdywgaWYgd2UgYXJlIGNvbXBvc2l0ZWQsCi0gICAgLy8gdG8gbWluaW1p
emUgdGhlIGFtb3VudCBvZiBxdWV1aW5nIGRvbmUgYnkgRFdNIGJldHdlZW4gb3VyIGNhbGxzIHRv
Ci0gICAgLy8gcHJlc2VudCBhbmQgdGhlIGFjdHVhbCBzY3JlZW4uCi0gICAgaWYgKG1XaW5kb3cg
JiYgKGdldENvbXBhcmFibGVPU1ZlcnNpb24oKSA+PSB2ZXJzaW9uV2luZG93c1Zpc3RhKSkgewot
ICAgICAgQk9PTCBpc0NvbXBvc2l0ZWQ7Ci0gICAgICBIUkVTVUxUIHJlc3VsdCA9IER3bUlzQ29t
cG9zaXRpb25FbmFibGVkKCZpc0NvbXBvc2l0ZWQpOwotICAgICAgaWYgKFNVQ0NFRURFRChyZXN1
bHQpICYmIGlzQ29tcG9zaXRlZCkgewotICAgICAgICBEV01fUFJFU0VOVF9QQVJBTUVURVJTIHBy
ZXNlbnRQYXJhbXM7Ci0gICAgICAgIG1lbXNldCgmcHJlc2VudFBhcmFtcywgMCwgc2l6ZW9mKHBy
ZXNlbnRQYXJhbXMpKTsKLSAgICAgICAgcHJlc2VudFBhcmFtcy5jYlNpemUgPSBzaXplb2YoRFdN
X1BSRVNFTlRfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHByZXNlbnRQYXJhbXMuY0J1ZmZlciA9IDI7
Ci0KLSAgICAgICAgcmVzdWx0ID0gRHdtU2V0UHJlc2VudFBhcmFtZXRlcnMobVdpbmRvdywgJnBy
ZXNlbnRQYXJhbXMpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgRVJS
KCJVbmFibGUgdG8gc2V0IHByZXNlbnQgcGFyYW1ldGVyczogMHglMDhYIiwgcmVzdWx0KTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpyZWxl
YXNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4t
PlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYg
KG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAg
ICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2ls
KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVw
dGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7
Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdl
dCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAg
ICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblRl
eHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAg
IG1UZXh0dXJlLT5yZWxlYXNlVGV4SW1hZ2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwot
ICAgIH0KLQotICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVz
ZXRTd2FwQ2hhaW4oKQotewotICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVy
biByZXNldFN3YXBDaGFpbihtV2lkdGgsIG1IZWlnaHQpOwotICAgIH0KLQotICAgIFJFQ1Qgd2lu
ZG93UmVjdDsKLSAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5k
b3dSZWN0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0KLSAgICAgICAgRVJSKCJD
b3VsZCBub3QgcmV0cmlldmUgdGhlIHdpbmRvdyBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzZXRTd2FwQ2hhaW4od2luZG93UmVjdC5y
aWdodCAtIHdpbmRvd1JlY3QubGVmdCwgd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRv
cCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0
aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbURpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgaWYgKGRldmljZSA9PSBOVUxMKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEV2aWN0IGFsbCBub24t
cmVuZGVyIHRhcmdldCB0ZXh0dXJlcyB0byBzeXN0ZW0gbWVtb3J5IGFuZCByZWxlYXNlIGFsbCBy
ZXNvdXJjZXMKLSAgICAvLyBiZWZvcmUgcmVhbGxvY2F0aW5nIHRoZW0gdG8gZnJlZSB1cCBhcyBt
dWNoIHZpZGVvIG1lbW9yeSBhcyBwb3NzaWJsZS4KLSAgICBkZXZpY2UtPkV2aWN0TWFuYWdlZFJl
c291cmNlcygpOwotCi0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJz
ID0gezB9OwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0
b0RlcHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAg
Ly8gV2Ugc2V0IEJhY2tCdWZmZXJDb3VudCA9IDEgZXZlbiB3aGVuIHdlIHVzZSBEM0RTV0FQRUZG
RUNUX0ZMSVBFWC4KLSAgICAvLyBXZSBkbyB0aGlzIGJlY2F1c2UgRGlyZWN0WCBkb2NzIGFyZSBh
IGJpdCB2YWd1ZSB3aGV0aGVyIHRvIHNldCB0aGlzIHRvIDEKLSAgICAvLyBvciAyLiBUaGUgcnVu
dGltZSBzZWVtcyB0byBhY2NlcHQgMSwgc28gd2Ugc3BlY3VsYXRlIHRoYXQgZWl0aGVyIGl0IGlz
Ci0gICAgLy8gZm9yY2luZyBpdCB0byAyIHdpdGhvdXQgdGVsbGluZyB1cywgb3IgYmV0dGVyLCBk
b2luZyBzb21ldGhpbmcgc21hcnQKLSAgICAvLyBiZWhpbmQgdGhlIHNjZW5lcyBrbm93aW5nIHRo
YXQgd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJD
b3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IG1Db25m
aWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0
b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7
Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11
bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVt
ZW50ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IG1QcmVz
ZW50SW50ZXJ2YWw7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBF
RkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwot
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0
OwotCi0gICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMgdG8gZnJlZSB1cCBtZW1vcnkg
Zm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCi0gICAgLy8gb2xkIHJlbmRlciB0
YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250
ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJl
bGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1C
YWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAg
ICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKLSAg
ICBIQU5ETEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7Ci0gICAgaWYgKCFtV2luZG93ICYmIG1EaXNw
bGF5LT5zaGFyZUhhbmRsZVN1cHBvcnRlZCgpKQotICAgIHsKLSAgICAgICAgcFNoYXJlSGFuZGxl
ID0gJm1TaGFyZUhhbmRsZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3Jt
YXQsIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUpOwot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1bHQpOwotICAgICAgICByZWxlYXNl
KCk7Ci0KLSAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqb2xkUmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdl
dDsKLQotICAgIHJlc3VsdCA9IG1PZmZzY3JlZW5UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwg
Jm1SZW5kZXJUYXJnZXQpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBp
ZiAob2xkUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0ID0KLSAgICAgICAg
ewotICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodAotICAgICAg
ICB9OwotCi0gICAgICAgIGlmIChyZWN0LnJpZ2h0ID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVj
dC5yaWdodCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHN0YXRpY19jYXN0PExPTkc+KHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LmJv
dHRvbSA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1SZW5kZXJUYXJnZXQsICZyZWN0
LCBEM0RURVhGX05PTkUpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChtV2lu
ZG93KQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dh
cENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJm1Td2FwQ2hhaW4pOwotCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1
bHQgPT0gRDNERVJSX0lOVkFMSURDQUxMIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7
Ci0KLSAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hh
aW5zIG9yIG9mZnNjcmVlbiBzdXJmYWNlczogJTA4bFgiLCByZXN1bHQpOwotICAgICAgICAgICAg
cmVsZWFzZSgpOwotCi0gICAgICAgICAgICBpZihpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQ
RV9NT05PLCAmbUJhY2tCdWZmZXIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgIH0KLQotICAgIGlmIChtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZN
VF9VTktOT1dOKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0
ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxG
b3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11
bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKLQotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkg
fHwgcmVzdWx0ID09IEQzREVSUl9JTlZBTElEQ0FMTCk7Ci0KLSAgICAgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4
JTA4WCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgIGlm
KGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJXaWR0aDsKLSAgICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodDsKLQotICAgIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eSA9IGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFN1cmZhY2U6OnN3YXBSZWN0KEVHTGludCB4LCBFR0xp
bnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KQotewotICAgIGlmICghbVN3YXBDaGFp
bikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh4ICsgd2lk
dGggPiBtV2lkdGgpCi0gICAgewotICAgICAgICB3aWR0aCA9IG1XaWR0aCAtIHg7Ci0gICAgfQot
Ci0gICAgaWYgKHkgKyBoZWlnaHQgPiBtSGVpZ2h0KQotICAgIHsKLSAgICAgICAgaGVpZ2h0ID0g
bUhlaWdodCAtIHk7Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAp
Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0KLSAgICAvLyBEaXNhYmxlIGFs
bCBwaXBlbGluZSBvcGVyYXRpb25zCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
RU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19G
SUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RD
T0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09M
T1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JH
QldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
Q0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVM
TCk7Ci0gICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0KLSAgICBkZXZpY2UtPlNl
dFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7Ci0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKE5VTEwpOwotCi0gICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIG1PZmZzY3JlZW5U
ZXh0dXJlKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xP
Uk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0
ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RUQV9URVhUVVJFKTsKLSAgICBkZXZpY2UtPlNldFRl
eHR1cmVTdGFnZVN0YXRlKDEsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfRElTQUJMRSk7Ci0gICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfUE9J
TlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBE
M0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FE
RFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
MCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0
RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7Ci0KLSAgICBEM0RWSUVXUE9SVDkgdmll
d3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0LCAwLjBmLCAxLjBmfTsKLSAgICBkZXZpY2Ut
PlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0KLSAgICBmbG9hdCB4MSA9IHggLSAwLjVmOwotICAg
IGZsb2F0IHkxID0gKG1IZWlnaHQgLSB5IC0gaGVpZ2h0KSAtIDAuNWY7Ci0gICAgZmxvYXQgeDIg
PSAoeCArIHdpZHRoKSAtIDAuNWY7Ci0gICAgZmxvYXQgeTIgPSAobUhlaWdodCAtIHkpIC0gMC41
ZjsKLQotICAgIGZsb2F0IHUxID0geCAvIGZsb2F0KG1XaWR0aCk7Ci0gICAgZmxvYXQgdjEgPSB5
IC8gZmxvYXQobUhlaWdodCk7Ci0gICAgZmxvYXQgdTIgPSAoeCArIHdpZHRoKSAvIGZsb2F0KG1X
aWR0aCk7Ci0gICAgZmxvYXQgdjIgPSAoeSArIGhlaWdodCkgLyBmbG9hdChtSGVpZ2h0KTsKLQot
ICAgIGZsb2F0IHF1YWRbNF1bNl0gPSB7e3gxLCB5MSwgMC4wZiwgMS4wZiwgdTEsIHYyfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHt4MiwgeTEsIDAuMGYsIDEuMGYsIHUyLCB2Mn0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7eDIsIHkyLCAwLjBmLCAxLjBmLCB1MiwgdjF9LAotICAgICAg
ICAgICAgICAgICAgICAgICAge3gxLCB5MiwgMC4wZiwgMS4wZiwgdTEsIHYxfX07ICAgLy8geCwg
eSwgeiwgcmh3LCB1LCB2Ci0KLSAgICBtRGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgIGRldmlj
ZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFRkFOLCAyLCBxdWFkLCA2ICogc2l6ZW9m
KGZsb2F0KSk7Ci0gICAgbURpc3BsYXktPmVuZFNjZW5lKCk7Ci0KLSAgICBkZXZpY2UtPlNldFRl
eHR1cmUoMCwgTlVMTCk7Ci0KLSAgICBSRUNUIHJlY3QgPQotICAgIHsKLSAgICAgICAgeCwgbUhl
aWdodCAtIHkgLSBoZWlnaHQsCi0gICAgICAgIHggKyB3aWR0aCwgbUhlaWdodCAtIHkKLSAgICB9
OwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5QcmVzZW50KCZyZWN0LCAmcmVj
dCwgTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19j
YXN0PGdsOjpDb250ZXh0Kj4oZ2xHZXRDdXJyZW50Q29udGV4dCgpKTsKLSAgICBpZiAoY29udGV4
dCkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPm1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0gICAgfQot
Ci0gICAgaWYgKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgewotICAgICAgICBtRGlz
cGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgIH0K
LQotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBjaGVja0Zvck91dE9mRGF0
ZVN3YXBDaGFpbigpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUhXTkQgU3VyZmFjZTo6Z2V0
V2luZG93SGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbVdpbmRvdzsKLX0KLQotCi0jZGVmaW5lIGtT
dXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFjZU93bmVyIikKLSNkZWZpbmUga1BhcmVu
dFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFByb2MiKQotCi1zdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBTdXJmYWNlV2luZG93UHJvYyhIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNIHdwYXJhbSwgTFBBUkFNIGxwYXJhbSkKLXsKLSAgaWYgKG1lc3NhZ2UgPT0gV01fU0la
RSkKLSAgewotICAgICAgU3VyZmFjZSogc3VyZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+
KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkpOwotICAgICAgaWYoc3VyZikKLSAgICAg
IHsKLSAgICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwotICAgICAg
fQotICB9Ci0gIFdORFBST0MgcHJldlduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PFdORFBST0Mg
PihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7Ci0gIHJldHVybiBDYWxsV2luZG93UHJv
YyhwcmV2V25kRnVuYywgaHduZCwgbWVzc2FnZSwgd3BhcmFtLCBscGFyYW0pOwotfQotCi12b2lk
IFN1cmZhY2U6OnN1YmNsYXNzV2luZG93KCkKLXsKLSAgICBpZiAoIW1XaW5kb3cpCi0gICAgewot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRFdPUkQgcHJvY2Vzc0lkOwotICAgIERXT1JE
IHRocmVhZElkID0gR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKG1XaW5kb3csICZwcm9jZXNzSWQp
OwotICAgIGlmIChwcm9jZXNzSWQgIT0gR2V0Q3VycmVudFByb2Nlc3NJZCgpIHx8IHRocmVhZElk
ICE9IEdldEN1cnJlbnRUaHJlYWRJZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFNldExhc3RFcnJvcigwKTsKLSAgICBMT05HX1BUUiBvbGRXbmRQcm9jID0gU2V0V2lu
ZG93TG9uZ1B0cihtV2luZG93LCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19Q
VFI+KFN1cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgaWYob2xkV25kUHJvYyA9PSAwICYmIEdldExh
c3RFcnJvcigpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBtV2luZG93U3ViY2xh
c3NlZCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0UHJvcChtV2lu
ZG93LCBrU3VyZmFjZVByb3BlcnR5LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwot
ICAgIFNldFByb3AobVdpbmRvdywga1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFO
RExFPihvbGRXbmRQcm9jKSk7Ci0gICAgbVdpbmRvd1N1YmNsYXNzZWQgPSB0cnVlOwotfQotCi12
b2lkIFN1cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3coKQotewotICAgIGlmKCFtV2luZG93U3ViY2xh
c3NlZCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyB1bi1zdWJjbGFz
cwotICAgIExPTkdfUFRSIHBhcmVudFduZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkdfUFRS
PihHZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKSk7Ci0KLSAgICAvLyBDaGVjayB0aGUg
d2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2luZG93UHJvYy4KLSAgICAvLyBJZiB0aGlzIGFz
c2VydCBmYWlscywgdGhlbiBpdCBpcyBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGhhcyBzdWJjbGFz
c2VkIHRoZQotICAgIC8vIGh3bmQgYXMgd2VsbCBhbmQgZGlkIG5vdCB1bnN1YmNsYXNzIGJlZm9y
ZSBkZXN0cm95aW5nIGl0cyBFR0wgY29udGV4dC4gVGhlCi0gICAgLy8gYXBwbGljYXRpb24gc2hv
dWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFzcyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRo
ZQotICAgIC8vIEVHTCBjb250ZXh0LCBvciB0byB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5n
IHRoZSBFR0wgY29udGV4dC4KLSAgICBpZihwYXJlbnRXbmRGdW5jKQotICAgIHsKLSAgICAgICAg
TE9OR19QVFIgcHJldlduZEZ1bmMgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBfV05E
UFJPQywgcGFyZW50V25kRnVuYyk7Ci0gICAgICAgIEFTU0VSVChwcmV2V25kRnVuYyA9PSByZWlu
dGVycHJldF9jYXN0PExPTkdfUFRSPihTdXJmYWNlV2luZG93UHJvYykpOwotICAgIH0KLQotICAg
IFJlbW92ZVByb3AobVdpbmRvdywga1N1cmZhY2VQcm9wZXJ0eSk7Ci0gICAgUmVtb3ZlUHJvcCht
V2luZG93LCBrUGFyZW50V25kUHJvYyk7Ci0gICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsK
LX0KLQotYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpCi17Ci0gICAg
UkVDVCBjbGllbnQ7Ci0gICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAm
Y2xpZW50KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUgd2luZG93
IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRp
b24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0g
ICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwotICAgIGJv
b2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQg
IT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoc2l6ZURpcnR5IHx8IG1QcmVzZW50SW50ZXJ2YWxE
aXJ0eSkKLSAgICB7Ci0gICAgICAgIHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBjbGllbnRI
ZWlnaHQpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0Q3VycmVu
dERyYXdTdXJmYWNlKCkpID09IHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsTWFrZUN1
cnJlbnQoZ2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihn
ZXRDdXJyZW50RGlzcGxheSgpKSwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1EV09SRCBTdXJmYWNlOjpjb252
ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQotewotICAgIHN3aXRjaChpbnRlcnZhbCkKLSAg
ICB7Ci0gICAgICBjYXNlIDA6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsK
LSAgICAgIGNhc2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOwotICAgICAgY2Fz
ZSAyOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087Ci0gICAgICBjYXNlIDM6IHJldHVy
biBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFOwotICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJF
U0VOVF9JTlRFUlZBTF9GT1VSOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotfQotCi1ib29sIFN1
cmZhY2U6OnN3YXAoKQotewotICAgIHJldHVybiBzd2FwUmVjdCgwLCAwLCBtV2lkdGgsIG1IZWln
aHQpOwotfQotCi1ib29sIFN1cmZhY2U6OnBvc3RTdWJCdWZmZXIoRUdMaW50IHgsIEVHTGludCB5
LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCFtUG9zdFN1YkJ1ZmZl
clN1cHBvcnRlZCkKLSAgICB7Ci0gICAgICAgIC8vIFNwZWMgaXMgbm90IGNsZWFyIGFib3V0IGhv
dyB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHN3YXBSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi1FR0xp
bnQgU3VyZmFjZTo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtV2lkdGg7Ci19Ci0K
LUVHTGludCBTdXJmYWNlOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtSGVpZ2h0
OwotfQotCi1FR0xpbnQgU3VyZmFjZTo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQ7Ci19Ci0KLS8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6OmdldFJlbmRlclRhcmdl
dCgpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFy
Z2V0LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKLX0KLQot
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0
RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAg
IG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtRGVwdGhTdGVu
Y2lsOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqU3VyZmFjZTo6Z2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpCi17Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNj
cmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4
dHVyZTsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFs
KQotewotICAgIGlmIChtU3dhcEludGVydmFsID09IGludGVydmFsKQotICAgIHsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtU3dhcEludGVydmFsID0gaW50ZXJ2YWw7Ci0gICAg
bVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNaW5T
d2FwSW50ZXJ2YWwoKSk7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2
YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50ZXJ2YWwoKSk7Ci0KLSAgICBtUHJlc2VudEludGVy
dmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2YWwpOwotICAgIG1QcmVzZW50SW50ZXJ2
YWxEaXJ0eSA9IHRydWU7Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZUZvcm1hdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlRm9ybWF0OwotfQotCi1FR0xlbnVtIFN1cmZh
Y2U6OmdldFRleHR1cmVUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZVRhcmdl
dDsKLX0KLQotdm9pZCBTdXJmYWNlOjpzZXRCb3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4
dHVyZSkKLXsKLSAgICBtVGV4dHVyZSA9IHRleHR1cmU7Ci19Ci0KLWdsOjpUZXh0dXJlMkQgKlN1
cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwot
fQotCi1EM0RGT1JNQVQgU3VyZmFjZTo6Z2V0Rm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQwYmQ3MDIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotLy8KLQotLy8gU3VyZmFjZS5oOiBEZWZpbmVzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJl
cHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQotLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEg
b2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBidWZmZXJzLgotLy8gSW1wbGVtZW50cyBF
R0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIu
MiBwYWdlIDMuCi0KLSNpZm5kZWYgSU5DTFVERV9TVVJGQUNFX0hfCi0jZGVmaW5lIElOQ0xVREVf
U1VSRkFDRV9IXwotCi0jZGVmaW5lIEVHTEFQSQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNs
dWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3Bh
Y2UgZ2wKLXsKLWNsYXNzIFRleHR1cmUyRDsKLX0KLQotbmFtZXNwYWNlIGVnbAotewotY2xhc3Mg
RGlzcGxheTsKLWNsYXNzIENvbmZpZzsKLQotY2xhc3MgU3VyZmFjZQotewotICBwdWJsaWM6Ci0g
ICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBI
V05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOwotICAgIFN1cmZhY2Uo
RGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgSEFORExFIHNoYXJl
SGFuZGxlLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQsIEVHTGVudW0gdGV4dHVyZUZvcm1h
dCwgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0KTsKLQotICAgIH5TdXJmYWNlKCk7Ci0KLSAgICBib29s
IGluaXRpYWxpemUoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAgICBib29sIHJlc2V0U3dhcENo
YWluKCk7Ci0KLSAgICBIV05EIGdldFdpbmRvd0hhbmRsZSgpOwotICAgIGJvb2wgc3dhcCgpOwot
ICAgIGJvb2wgcG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwg
RUdMaW50IGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBFR0xp
bnQgaXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFRleHR1cmU5
ICpnZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0KLSAgICBIQU5ETEUgZ2V0U2hhcmVIYW5kbGUoKSB7
IHJldHVybiBtU2hhcmVIYW5kbGU7IH0KLQotICAgIHZvaWQgc2V0U3dhcEludGVydmFsKEVHTGlu
dCBpbnRlcnZhbCk7Ci0gICAgYm9vbCBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOyAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBzd2FwY2hhaW4gY2hhbmdlZCBkdWUgdG8gcmVzaXplIG9yIGludGVy
dmFsIHVwZGF0ZQotCi0gICAgdmlydHVhbCBFR0xlbnVtIGdldFRleHR1cmVGb3JtYXQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEVHTGVudW0gZ2V0VGV4dHVyZVRhcmdldCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgRDNERk9STUFUIGdldEZvcm1hdCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKTsKLSAgICB2aXJ0dWFsIGdsOjpU
ZXh0dXJlMkQgKmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKLQotICAgIERpc3BsYXkgKmNvbnN0IG1EaXNw
bGF5OwotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKm1Td2FwQ2hhaW47Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKm1CYWNrQnVmZmVyOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVu
Y2lsOwotICAgIElEaXJlY3QzRFN1cmZhY2U5KiBtUmVuZGVyVGFyZ2V0OwotICAgIElEaXJlY3Qz
RFRleHR1cmU5KiBtT2Zmc2NyZWVuVGV4dHVyZTsKLQotICAgIEhBTkRMRSBtU2hhcmVIYW5kbGU7
Ci0KLSAgICB2b2lkIHN1YmNsYXNzV2luZG93KCk7Ci0gICAgdm9pZCB1bnN1YmNsYXNzV2luZG93
KCk7Ci0gICAgYm9vbCByZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFj
a2J1ZmZlckhlaWdodCk7Ci0gICAgYm9vbCBzd2FwUmVjdChFR0xpbnQgeCwgRUdMaW50IHksIEVH
TGludCB3aWR0aCwgRUdMaW50IGhlaWdodCk7Ci0gICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRl
cnZhbChFR0xpbnQgaW50ZXJ2YWwpOwotCi0gICAgY29uc3QgSFdORCBtV2luZG93OyAgICAgICAg
ICAgIC8vIFdpbmRvdyB0aGF0IHRoZSBzdXJmYWNlIGlzIGNyZWF0ZWQgZm9yLgotICAgIGJvb2wg
bVdpbmRvd1N1YmNsYXNzZWQ7ICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB3ZSBzdWNjZXNz
ZnVsbHkgc3ViY2xhc3NlZCBtV2luZG93IGZvciBXTV9SRVNJWkUgaG9va2luZwotICAgIGNvbnN0
IGVnbDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wgY29uZmlnIHN1cmZhY2Ugd2FzIGNyZWF0
ZWQgd2l0aAotICAgIEVHTGludCBtSGVpZ2h0OyAgICAgICAgICAgICAgICAvLyBIZWlnaHQgb2Yg
c3VyZmFjZQotICAgIEVHTGludCBtV2lkdGg7ICAgICAgICAgICAgICAgICAvLyBXaWR0aCBvZiBz
dXJmYWNlCi0vLyAgRUdMaW50IGhvcml6b250YWxSZXNvbHV0aW9uOyAgIC8vIEhvcml6b250YWwg
ZG90IHBpdGNoCi0vLyAgRUdMaW50IHZlcnRpY2FsUmVzb2x1dGlvbjsgICAgIC8vIFZlcnRpY2Fs
IGRvdCBwaXRjaAotLy8gIEVHTEJvb2xlYW4gbGFyZ2VzdFBCdWZmZXI7ICAgICAvLyBJZiB0cnVl
LCBjcmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxlCi0vLyAgRUdMQm9vbGVhbiBtaXBtYXBU
ZXh0dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBoYXMgbWlwbWFwcwotLy8gIEVHTGludCBt
aXBtYXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgdG8gcmVuZGVyIHRvCi0vLyAg
RUdMZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8vIE11bHRpc2FtcGxlIHJlc29sdmUgYmVo
YXZpb3IKLSAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0aW87ICAgICAgLy8gRGlzcGxheSBhc3Bl
Y3QgcmF0aW8KLSAgICBFR0xlbnVtIG1SZW5kZXJCdWZmZXI7ICAgICAgICAgLy8gUmVuZGVyIGJ1
ZmZlcgotICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsgICAgICAgICAvLyBCdWZmZXIgc3dhcCBi
ZWhhdmlvcgotICAgIEVHTGVudW0gbVRleHR1cmVGb3JtYXQ7ICAgICAgICAvLyBGb3JtYXQgb2Yg
dGV4dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJlCi0gICAgRUdMZW51bSBtVGV4dHVyZVRh
cmdldDsgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTogMkQgb3Igbm8gdGV4dHVyZQotLy8gIEVH
TGVudW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBBbHBoYSBmb3JtYXQgZm9yIE9wZW5WRwot
Ly8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBDb2xvciBzcGFjZSBmb3IgT3Bl
blZHCi0gICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7Ci0gICAgRUdMaW50IG1Qb3N0U3ViQnVmZmVy
U3VwcG9ydGVkOwotICAgIAotICAgIERXT1JEIG1QcmVzZW50SW50ZXJ2YWw7Ci0gICAgYm9vbCBt
UHJlc2VudEludGVydmFsRGlydHk7Ci0gICAgZ2w6OlRleHR1cmUyRCAqbVRleHR1cmU7Ci19Owot
fQotCi0jZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0VfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTA4OWQyYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML2xpYkVHTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgxICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIGxpYkVHTC5jcHA6IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIEVHTCBm
dW5jdGlvbnMuCi0KLSNpbmNsdWRlIDxleGNlcHRpb24+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKLSNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQotI2luY2x1ZGUgImxp
YkVHTC9tYWluLmgiCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotCi1ib29sIHZhbGlk
YXRlRGlzcGxheShlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpCi17Ci0gICAgaWYgKGRpc3BsYXkgPT0g
RUdMX05PX0RJU1BMQVkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQ
TEFZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKCFkaXNwbGF5LT5pc0luaXRpYWxpemVkKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2Up
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHZhbGlkYXRlQ29uZmlnKGVn
bDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmlnIGNvbmZpZykKLXsKLSAgICBpZiAoIXZhbGlk
YXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRDb25maWcoY29uZmlnKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgZmFsc2UpOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIHZhbGlkYXRlQ29udGV4dChlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRp
c3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgh
ZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdXJmYWNlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpT
dXJmYWNlICpzdXJmYWNlKQotewotICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghZGlzcGxheS0+
aXNWYWxpZFN1cmZhY2Uoc3VyZmFjZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9TVVJGQUNFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWV4
dGVybiAiQyIKLXsKLUVHTGludCBfX3N0ZGNhbGwgZWdsR2V0RXJyb3Iodm9pZCkKLXsKLSAgICBF
VkVOVCgiKCkiKTsKLQotICAgIEVHTGludCBlcnJvciA9IGVnbDo6Z2V0Q3VycmVudEVycm9yKCk7
Ci0KLSAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBlZ2w6OnNl
dEN1cnJlbnRFcnJvcihFR0xfU1VDQ0VTUyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycm9yOwot
fQotCi1FR0xEaXNwbGF5IF9fc3RkY2FsbCBlZ2xHZXREaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlU
eXBlIGRpc3BsYXlfaWQpCi17Ci0gICAgRVZFTlQoIihFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNw
bGF5X2lkID0gMHglMC44cCkiLCBkaXNwbGF5X2lkKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVnbDo6RGlzcGxheTo6Z2V0RGlzcGxheShkaXNwbGF5X2lkKTsKLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVHTGludCAqbWFqb3IsIEVHTGlu
dCAqbWlub3IpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTGlu
dCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9yID0gMHglMC44cCkiLAotICAgICAgICAg
IGRweSwgbWFqb3IsIG1pbm9yKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGRweSA9
PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAg
ICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOwotICAgICAgICBpZiAobWlub3IpICptaW5v
ciA9IDQ7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bFRlcm1pbmF0ZShFR0xEaXNwbGF5IGRweSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5
ID0gMHglMC44cCkiLCBkcHkpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoZHB5ID09
IEVHTF9OT19ESVNQTEFZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9ESVNQTEFZLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAg
ICBkaXNwbGF5LT50ZXJtaW5hdGUoKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJV
RSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotY29uc3Qg
Y2hhciAqX19zdGRjYWxsIGVnbFF1ZXJ5U3RyaW5nKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgbmFt
ZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IG5hbWUg
PSAlZCkiLCBkcHksIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAg
IGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAobmFtZSkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgRUdMX0NMSUVOVF9BUElTOgotICAgICAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoIk9wZW5HTF9FUyIpOwotICAgICAgICAgIGNhc2UgRUdMX0VYVEVOU0lPTlM6Ci0gICAg
ICAgICAgICByZXR1cm4gZGlzcGxheS0+Z2V0RXh0ZW5zaW9uU3RyaW5nKCk7Ci0gICAgICAgICAg
Y2FzZSBFR0xfVkVORE9SOgotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoIkdvb2dsZSBJbmMu
Iik7Ci0gICAgICAgICAgY2FzZSBFR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiBzdWNj
ZXNzKCIxLjQgKEFOR0xFICJWRVJTSU9OX1NUUklORyIpIik7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIChjb25zdCBjaGFyKilOVUxMKTsKLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQUxMT0MsIChjb25zdCBjaGFyKilOVUxMKTsKLSAgICB9Ci19Ci0KLUVHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyAq
Y29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25maWcpCi17Ci0gICAg
RVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyAqY29uZmlncyA9IDB4
JTAuOHAsICIKLSAgICAgICAgICAiRUdMaW50IGNvbmZpZ19zaXplID0gJWQsIEVHTGludCAqbnVt
X2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGNvbmZpZ3MsIGNvbmZpZ19zaXpl
LCBudW1fY29uZmlnKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAo
IXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbnVtX2NvbmZpZykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFM
U0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgRUdMaW50IGF0dHJpYkxpc3RbXSA9ICAg
IHtFR0xfTk9ORX07Ci0KLSAgICAgICAgaWYgKCFkaXNwbGF5LT5nZXRDb25maWdzKGNvbmZpZ3Ms
IGF0dHJpYkxpc3QsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbENo
b29zZUNvbmZpZyhFR0xEaXNwbGF5IGRweSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwgRUdM
Q29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmlnX3NpemUsIEVHTGludCAqbnVtX2NvbmZpZykK
LXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgY29uc3QgRUdMaW50ICph
dHRyaWJfbGlzdCA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiRUdMQ29uZmlnICpjb25maWdzID0g
MHglMC44cCwgRUdMaW50IGNvbmZpZ19zaXplID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4
JTAuOHApIiwKLSAgICAgICAgICBkcHksIGF0dHJpYl9saXN0LCBjb25maWdzLCBjb25maWdfc2l6
ZSwgbnVtX2NvbmZpZyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYg
KCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW51bV9jb25maWcpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX0ZB
TFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IEVHTGludCBhdHRyaWJMaXN0W10gPSAg
ICB7RUdMX05PTkV9OwotCi0gICAgICAgIGlmICghYXR0cmliX2xpc3QpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGF0dHJpYl9saXN0ID0gYXR0cmliTGlzdDsKLSAgICAgICAgfQotCi0gICAgICAg
IGRpc3BsYXktPmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliX2xpc3QsIGNvbmZpZ19zaXplLCBu
dW1fY29uZmlnKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNh
bGwgZWdsR2V0Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBF
R0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMaW50IGF0dHJp
YnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgY29u
ZmlnLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpE
aXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAg
ICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWRp
c3BsYXktPmdldENvbmZpZ0F0dHJpYihjb25maWcsIGF0dHJpYnV0ZSwgdmFsdWUpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxT
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0
ZGNhbGwgZWdsQ3JlYXRlV2luZG93U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNv
bmZpZywgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4sIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
Ci17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25m
aWcgPSAweCUwLjhwLCBFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbiA9IDB4JTAuOHAsICIKLSAgICAg
ICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwgZHB5LCBjb25maWcs
IHdpbiwgYXR0cmliX2xpc3QpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAg
IGlmICghdmFsaWRhdGVDb25maWcoZGlzcGxheSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAgICAgICB9Ci0KLSAgICAgICAgSFdORCB3
aW5kb3cgPSAoSFdORCl3aW47Ci0KLSAgICAgICAgaWYgKCFJc1dpbmRvdyh3aW5kb3cpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9OQVRJVkVfV0lORE9XLCBF
R0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGlzcGxheS0+Y3Jl
YXRlV2luZG93U3VyZmFjZSh3aW5kb3csIGNvbmZpZywgYXR0cmliX2xpc3QpOwotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0
ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBj
b25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBjb25zdCBFR0xp
bnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgY29uZmlnLCBhdHRy
aWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGlzcGxheS0+
Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShjb25maWcsIE5VTEwsIGF0dHJpYl9saXN0KTsKLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci19Ci0KLUVHTFN1cmZhY2Ug
X19zdGRjYWxsIGVnbENyZWF0ZVBpeG1hcFN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENvbmZp
ZyBjb25maWcsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb25m
aWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlUGl4bWFwVHlwZSBwaXhtYXAgPSAweCUwLjhw
LCAiCi0gICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsIGRw
eSwgY29uZmlnLCBwaXhtYXAsIGF0dHJpYl9saXN0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZpZykpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNF
KTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbERlc3Ryb3lTdXJmYWNlKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBz
dXJmYWNlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNl
ICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRpc3BsYXktPmRlc3Ryb3lTdXJmYWNlKChlZ2w6OlN1cmZhY2UqKXN1cmZhY2UpOwotCi0g
ICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZh
Y2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwg
RUdMaW50ICp2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwg
RUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xp
bnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRl
LCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFj
ZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3VyZmFjZSA9
PSBFR0xfTk9fU1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfU1VSRkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAo
YXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xfVkdfQUxQSEFfRk9STUFU
OgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgotICAgICAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEVHTF9DT05GSUdfSUQ6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX0hFSUdIVDoKLSAgICAg
ICAgICAgICp2YWx1ZSA9IGVnbFN1cmZhY2UtPmdldEhlaWdodCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBFR0xfSE9SSVpPTlRBTF9SRVNPTFVUSU9OOgotICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEVHTF9MQVJHRVNUX1BCVUZGRVI6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX01J
UE1BUF9URVhUVVJFOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBfTEVWRUw6Ci0gICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgRUdMX01VTFRJU0FNUExFX1JFU09MVkU6Ci0gICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRUdMX1BJWEVMX0FTUEVDVF9SQVRJTzoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfUkVOREVS
X0JVRkZFUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfU1dBUF9CRUhBVklPUjoKLSAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBFR0xfVEVYVFVSRV9GT1JNQVQ6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1RF
WFRVUkVfVEFSR0VUOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9WRVJUSUNBTF9SRVNPTFVUSU9O
OgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9XSURUSDoKLSAgICAgICAgICAgICp2YWx1ZSA9IGVn
bFN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgotICAgICAgICAgICAgKnZhbHVlID0g
ZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QVRUUklCVVRFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19
Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xE
aXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgYXR0cmlidXRlLCB2b2lkICoq
dmFsdWUpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZh
Y2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgdm9pZCAqKnZhbHVl
ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3Vy
ZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1
cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9f
U1VSRkFDRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VS
RkFDRSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRl
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xfRDNEX1RFWFRVUkVfMkRfU0hBUkVfSEFO
RExFX0FOR0xFOgotICAgICAgICAgICAgKnZhbHVlID0gKHZvaWQqKSBlZ2xTdXJmYWNlLT5nZXRT
aGFyZUhhbmRsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBl
Z2xCaW5kQVBJKEVHTGVudW0gYXBpKQotewotICAgIEVWRU5UKCIoRUdMZW51bSBhcGkgPSAweCVY
KSIsIGFwaSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXBpKQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0FQSToKLSAgICAgICAgICBjYXNlIEVHTF9P
UEVOVkdfQVBJOgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBF
R0xfRkFMU0UpOyAgIC8vIE5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbgotICAg
ICAgICAgIGNhc2UgRUdMX09QRU5HTF9FU19BUEk6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVS
LCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZWdsOjpzZXRDdXJyZW50QVBJKGFw
aSk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTGVudW0gX19zdGRjYWxsIGVnbFF1ZXJ5
QVBJKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IEVHTGVudW0gQVBJID0gZWdsOjpnZXRDdXJyZW50QVBJKCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoQVBJKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQot
Ci1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xpZW50KHZvaWQpCi17Ci0gICAgRVZFTlQo
IigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFJlbGVhc2VU
aHJlYWQodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZWdsTWFrZUN1cnJlbnQoRUdMX05PX0RJU1BMQVksIEVHTF9OT19DT05URVhULCBFR0xfTk9f
U1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9U
UlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xT
dXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihFR0xEaXNw
bGF5IGRweSwgRUdMZW51bSBidWZ0eXBlLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBFR0xDb25m
aWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQotewotICAgIEVWRU5UKCIoRUdM
RGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xlbnVtIGJ1ZnR5cGUgPSAweCVYLCBFR0xDbGllbnRC
dWZmZXIgYnVmZmVyID0gMHglMC44cCwgIgotICAgICAgICAgICJFR0xDb25maWcgY29uZmlnID0g
MHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwKLSAgICAgICAg
ICBkcHksIGJ1ZnR5cGUsIGJ1ZmZlciwgY29uZmlnLCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBj
b25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoYnVmdHlwZSAhPSBFR0xfRDNEX1RFWFRVUkVfMkRfU0hB
UkVfSEFORExFX0FOR0xFIHx8ICFidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoY29uZmlnLCAo
SEFORExFKWJ1ZmZlciwgYXR0cmliX2xpc3QpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05P
X1NVUkZBQ0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsU3VyZmFjZUF0
dHJpYihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgYXR0cmlidXRl
LCBFR0xpbnQgdmFsdWUpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAs
IEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGludCBhdHRyaWJ1dGUgPSAlZCwgRUdM
aW50IHZhbHVlID0gJWQpIiwKLSAgICAgICAgICBkcHksIHN1cmZhY2UsIGF0dHJpYnV0ZSwgdmFs
dWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBz
dGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVn
bFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKLQotICAgICAg
ICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBlZ2xTdXJmYWNlKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVF
KTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ug
c3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGJ1ZmZlciA9ICVk
KSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAg
ICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNl
Kj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWds
U3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoYnVmZmVyICE9IEVHTF9CQUNLX0JVRkZFUikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UgfHwg
ZWdsU3VyZmFjZS0+Z2V0V2luZG93SGFuZGxlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZWdsU3VyZmFjZS0+Z2V0Qm91bmRUZXh0dXJlKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FDQ0VTUywgRUdMX0ZBTFNFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5nZXRUZXh0dXJlRm9ybWF0KCkgPT0gRUdMX05P
X1RFWFRVUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01B
VENILCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnbEJpbmRUZXhJbWFn
ZShlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3VjY2Vz
cyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0K
LQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFzZVRleEltYWdlKEVHTERpc3BsYXkgZHB5
LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCBidWZmZXIpCi17Ci0gICAgRVZFTlQoIihFR0xE
aXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTGlu
dCBidWZmZXIgPSAlZCkiLCBkcHksIHN1cmZhY2UsIGJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0
PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNl
KGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJ1ZmZlciAhPSBFR0xfQkFDS19CVUZG
RVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRF
UiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9O
T19TVVJGQUNFIHx8IGVnbFN1cmZhY2UtPmdldFdpbmRvd0hhbmRsZSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2UtPmdldFRleHR1cmVGb3JtYXQoKSA9PSBF
R0xfTk9fVEVYVFVSRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6VGV4dHVyZTJE
ICp0ZXh0dXJlID0gZWdsU3VyZmFjZS0+Z2V0Qm91bmRUZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYg
KHRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRleHR1cmUtPnJlbGVhc2VUZXhJbWFn
ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19z
dGRjYWxsIGVnbFN3YXBJbnRlcnZhbChFR0xEaXNwbGF5IGRweSwgRUdMaW50IGludGVydmFsKQot
ewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQgaW50ZXJ2YWwg
PSAlZCkiLCBkcHksIGludGVydmFsKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpE
aXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAg
ICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6U3VyZmFjZSAq
ZHJhd19zdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZWdsOjpnZXRDdXJyZW50
RHJhd1N1cmZhY2UoKSk7Ci0KLSAgICAgICAgaWYgKGRyYXdfc3VyZmFjZSA9PSBOVUxMKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFM
U0UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkcmF3X3N1cmZhY2UtPnNldFN3YXBJ
bnRlcnZhbChpbnRlcnZhbCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTENvbnRleHQg
X19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25m
aWcsIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkK
LXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZp
ZyA9IDB4JTAuOHAsIEVHTENvbnRleHQgc2hhcmVfY29udGV4dCA9IDB4JTAuOHAsICIKLSAgICAg
ICAgICAiY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwgZHB5LCBjb25maWcs
IHNoYXJlX2NvbnRleHQsIGF0dHJpYl9saXN0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Ly8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNo
ZWNrIGl0IGlzIHR3by4KLSAgICAgICAgRUdMaW50IGNsaWVudF92ZXJzaW9uID0gMTsKLSAgICAg
ICAgYm9vbCByZXNldF9ub3RpZmljYXRpb24gPSBmYWxzZTsKLSAgICAgICAgYm9vbCByb2J1c3Rf
YWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGF0dHJpYl9saXN0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBmb3IgKGNvbnN0IEVHTGludCogYXR0cmlidXRlID0gYXR0cmliX2xpc3Q7IGF0
dHJpYnV0ZVswXSAhPSBFR0xfTk9ORTsgYXR0cmlidXRlICs9IDIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVbMF0pCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTjoKLSAgICAg
ICAgICAgICAgICAgICAgY2xpZW50X3ZlcnNpb24gPSBhdHRyaWJ1dGVbMV07Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfQ09OVEVYVF9PUEVO
R0xfUk9CVVNUX0FDQ0VTU19FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVb
MV0gPT0gRUdMX1RSVUUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgRUdMX05PX0NPTlRFWFQpOyAgIC8v
IFVuaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvYnVzdF9hY2Nlc3Mg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGF0dHJpYnV0ZVsxXSAhPSBFR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9DT05URVhUX09Q
RU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlWzFdID09IEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzZXRfbm90aWZpY2F0aW9uID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlWzFdICE9IEVHTF9OT19SRVNFVF9OT1RJRklD
QVRJT05fRVhUKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QVRUUklCVVRFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNsaWVudF92ZXJzaW9u
ICE9IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTkZJ
RywgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNoYXJlX2NvbnRl
eHQgJiYgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KS0+aXNSZXNldE5v
dGlmaWNhdGlvbkVuYWJsZWQoKSAhPSByZXNldF9ub3RpZmljYXRpb24pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fQ09OVEVYVCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxl
Z2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb25maWcoZGlzcGxh
eSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9OT19DT05URVhU
OwotICAgICAgICB9Ci0KLSAgICAgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gZGlzcGxheS0+Y3Jl
YXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4
dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2FjY2Vzcyk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVHTF9OT19DT05U
RVhUKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19DT05URVhUKTsKLSAgICB9Ci19Ci0K
LUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbERlc3Ryb3lDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBF
R0xDb250ZXh0IGN0eCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwg
RUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsIGRweSwgY3R4KTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6
Q29udGV4dCo+KGN0eCk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbnRleHQoZGlzcGxheSwg
Y29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoY3R4ID09IEVHTF9OT19DT05URVhUKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBFR0xfRkFMU0UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+ZGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdM
X0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbE1ha2VDdXJyZW50
KEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIGRyYXcsIEVHTFN1cmZhY2UgcmVhZCwgRUdMQ29u
dGV4dCBjdHgpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1
cmZhY2UgZHJhdyA9IDB4JTAuOHAsIEVHTFN1cmZhY2UgcmVhZCA9IDB4JTAuOHAsIEVHTENvbnRl
eHQgY3R4ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgZHJhdywgcmVhZCwgY3R4KTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nh
c3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBz
dGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0gICAgICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGRpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgICAgIGlmICghZGV2aWNlIHx8
IGRpc3BsYXktPnRlc3REZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3Bs
YXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZGlzcGxheS0+aXNEZXZpY2VMb3N0KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGN0eCAhPSBFR0xfTk9fQ09OVEVYVCAmJiAhdmFs
aWRhdGVDb250ZXh0KGRpc3BsYXksIGNvbnRleHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkcmF3ICE9IEVHTF9O
T19TVVJGQUNFICYmICF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgc3RhdGljX2Nhc3Q8ZWdsOjpT
dXJmYWNlKj4oZHJhdykpKSB8fAotICAgICAgICAgICAgKHJlYWQgIT0gRUdMX05PX1NVUkZBQ0Ug
JiYgIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihy
ZWFkKSkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGRyYXcgIT0gcmVhZCkKLSAgICAgICAgewotICAgICAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OnNl
dEN1cnJlbnREaXNwbGF5KGRweSk7Ci0gICAgICAgIGVnbDo6c2V0Q3VycmVudERyYXdTdXJmYWNl
KGRyYXcpOwotICAgICAgICBlZ2w6OnNldEN1cnJlbnRSZWFkU3VyZmFjZShyZWFkKTsKLQotICAg
ICAgICBnbE1ha2VDdXJyZW50KGNvbnRleHQsIGRpc3BsYXksIHN0YXRpY19jYXN0PGVnbDo6U3Vy
ZmFjZSo+KGRyYXcpKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQ29udGV4dCBfX3N0
ZGNhbGwgZWdsR2V0Q3VycmVudENvbnRleHQodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gZ2xHZXRDdXJyZW50
Q29udGV4dCgpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOwotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX05PX0NPTlRFWFQpOwotICAgIH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0
ZGNhbGwgZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMaW50IHJlYWRkcmF3KQotewotICAgIEVWRU5U
KCIoRUdMaW50IHJlYWRkcmF3ID0gJWQpIiwgcmVhZGRyYXcpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAocmVhZGRyYXcgPT0gRUdMX1JFQUQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVHTFN1cmZhY2UgcmVhZCA9IGVnbDo6Z2V0Q3VycmVudFJlYWRTdXJmYWNlKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gc3VjY2VzcyhyZWFkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChy
ZWFkZHJhdyA9PSBFR0xfRFJBVykKLSAgICAgICAgewotICAgICAgICAgICAgRUdMU3VyZmFjZSBk
cmF3ID0gZWdsOjpnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKLSAgICAgICAgICAgIHJldHVybiBz
dWNjZXNzKGRyYXcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfTk9fU1VSRkFDRSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci19
Ci0KLUVHTERpc3BsYXkgX19zdGRjYWxsIGVnbEdldEN1cnJlbnREaXNwbGF5KHZvaWQpCi17Ci0g
ICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIEVHTERpc3BsYXkgZHB5
ID0gZWdsOjpnZXRDdXJyZW50RGlzcGxheSgpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKGRw
eSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fRElTUExBWSk7Ci0gICAgfQotfQotCi1F
R0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENv
bnRleHQgY3R4LCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQotewotICAgIEVWRU5U
KCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHAsIEVH
TGludCBhdHRyaWJ1dGUgPSAlZCwgRUdMaW50ICp2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAg
ICBkcHksIGN0eCwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQq
PihjdHgpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb250ZXh0KGRpc3BsYXksIGNvbnRleHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0K
LSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQot
RUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdEdMKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQot
Ci0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZB
TFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFdhaXROYXRpdmUoRUdM
aW50IGVuZ2luZSkKLXsKLSAgICBFVkVOVCgiKEVHTGludCBlbmdpbmUgPSAlZCkiLCBlbmdpbmUp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUK
LQotICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9G
QUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xTd2FwQnVmZmVycyhF
R0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQotewotICAgIEVWRU5UKCIoRUdMRGlz
cGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRweSwg
c3VyZmFjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFj
ZSAqZWdsU3VyZmFjZSA9IChlZ2w6OlN1cmZhY2UqKXN1cmZhY2U7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlzcGxheS0+
aXNEZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Q09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZh
Y2UgPT0gRUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZWdsU3VyZmFjZS0+c3dhcCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2Vz
cyhFR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9GQUxTRTsKLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNh
bGwgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdM
TmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9
IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTE5hdGl2ZVBpeG1hcFR5
cGUgdGFyZ2V0ID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UsIHRhcmdldCk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRp
Y19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVT
dXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpc3BsYXktPmlzRGV2aWNl
TG9zdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRf
TE9TVCwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFBv
c3RTdWJCdWZmZXJOVihFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQg
eCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCkKLXsKLSAgICBFVkVOVCgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwg
RUdMaW50IHggPSAlZCwgRUdMaW50IHkgPSAlZCwgRUdMaW50IHdpZHRoID0gJWQsIEVHTGludCBo
ZWlnaHQgPSAlZCkiLCBkcHksIHN1cmZhY2UsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoeCA8IDAgfHwgeSA8IDAgfHwgd2lkdGggPCAwIHx8IGhl
aWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGVnbDo6
U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHN1cmZhY2Up
OwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRpc3BsYXksIGVnbFN1cmZhY2UpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGRpc3BsYXktPmlzRGV2aWNlTG9zdCgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZhY2UtPnBvc3RTdWJCdWZmZXIoeCwgeSwgd2lkdGgs
IGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVF
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1fX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlIF9fc3RkY2FsbCBlZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9j
bmFtZSkKLXsKLSAgICBFVkVOVCgiKGNvbnN0IGNoYXIgKnByb2NuYW1lID0gXCIlc1wiKSIsIHBy
b2NuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3RydWN0IEV4dGVuc2lvbgotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOwotICAgICAgICAgICAgX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOwotICAgICAgICB9Owot
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24gZWdsRXh0ZW5zaW9uc1tdID0KLSAgICAg
ICAgewotICAgICAgICAgICAgeyJlZ2xRdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUiLCAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xRdWVyeVN1cmZhY2VQb2ludGVy
QU5HTEV9LAotICAgICAgICAgICAgeyJlZ2xQb3N0U3ViQnVmZmVyTlYiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xQb3N0U3ViQnVmZmVyTlZ9LAotICAgICAg
ICAgICAgeyIiLCBOVUxMfSwKLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKGludCBleHQgPSAw
OyBleHQgPCBzaXplb2YoZWdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAocHJvY25hbWUsIGVnbEV4dGVuc2lv
bnNbZXh0XS5uYW1lKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xFeHRlbnNpb25z
W2V4dF0uYWRkcmVzczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBnbEdldFByb2NBZGRyZXNzKHByb2NuYW1lKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKU5VTEwpOwotICAgIH0KLX0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRl
ZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNWU2Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwz
NiArMCwwIEBACi1MSUJSQVJZCWxpYkVHTAotRVhQT1JUUwotCWVnbEJpbmRBUEkgICAgICAgICAg
ICAgICAgICAgICAgQDE0Ci0JZWdsQmluZFRleEltYWdlICAgICAgICAgICAgICAgICBAMjAKLQll
Z2xDaG9vc2VDb25maWcgICAgICAgICAgICAgICAgIEA3Ci0JZWdsQ29weUJ1ZmZlcnMgICAgICAg
ICAgICAgICAgICBAMzMKLQllZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgIEAyMwotCWVn
bENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyICAgICAgICBAMTgKLQllZ2xDcmVhdGVQYnVm
ZmVyU3VyZmFjZSAgICAgICAgIEAxMAotCWVnbENyZWF0ZVBpeG1hcFN1cmZhY2UgICAgICAgICAg
QDExCi0JZWdsQ3JlYXRlV2luZG93U3VyZmFjZSAgICAgICAgICBAOQotCWVnbERlc3Ryb3lDb250
ZXh0ICAgICAgICAgICAgICAgQDI0Ci0JZWdsRGVzdHJveVN1cmZhY2UgICAgICAgICAgICAgICBA
MTIKLQllZ2xHZXRDb25maWdBdHRyaWIgICAgICAgICAgICAgIEA4Ci0JZWdsR2V0Q29uZmlncyAg
ICAgICAgICAgICAgICAgICBANgotCWVnbEdldEN1cnJlbnRDb250ZXh0ICAgICAgICAgICAgQDI2
Ci0JZWdsR2V0Q3VycmVudERpc3BsYXkgICAgICAgICAgICBAMjgKLQllZ2xHZXRDdXJyZW50U3Vy
ZmFjZSAgICAgICAgICAgIEAyNwotCWVnbEdldERpc3BsYXkgICAgICAgICAgICAgICAgICAgQDIK
LQllZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgIEAxCi0JZWdsR2V0UHJvY0FkZHJlc3Mg
ICAgICAgICAgICAgICBAMzQKLQllZ2xJbml0aWFsaXplICAgICAgICAgICAgICAgICAgIEAzCi0J
ZWdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICBAMjUKLQllZ2xRdWVyeUFQSSAgICAgICAg
ICAgICAgICAgICAgIEAxNQotCWVnbFF1ZXJ5Q29udGV4dCAgICAgICAgICAgICAgICAgQDI5Ci0J
ZWdsUXVlcnlTdHJpbmcgICAgICAgICAgICAgICAgICBANQotCWVnbFF1ZXJ5U3VyZmFjZSAgICAg
ICAgICAgICAgICAgQDEzCi0JZWdsUmVsZWFzZVRleEltYWdlICAgICAgICAgICAgICBAMjEKLQll
Z2xSZWxlYXNlVGhyZWFkICAgICAgICAgICAgICAgIEAxNwotCWVnbFN1cmZhY2VBdHRyaWIgICAg
ICAgICAgICAgICAgQDE5Ci0JZWdsU3dhcEJ1ZmZlcnMgICAgICAgICAgICAgICAgICBAMzIKLQll
Z2xTd2FwSW50ZXJ2YWwgICAgICAgICAgICAgICAgIEAyMgotCWVnbFRlcm1pbmF0ZSAgICAgICAg
ICAgICAgICAgICAgQDQKLQllZ2xXYWl0Q2xpZW50ICAgICAgICAgICAgICAgICAgIEAxNgotCWVn
bFdhaXRHTCAgICAgICAgICAgICAgICAgICAgICAgQDMwCi0JZWdsV2FpdE5hdGl2ZSAgICAgICAg
ICAgICAgICAgICBAMzEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5yYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1ZDFmMzJmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLnJjCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8vIE1p
Y3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCi0vLwotI2luY2x1
ZGUgInJlc291cmNlLmgiCi0KLSNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUg
MiByZXNvdXJjZS4KLS8vCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgIi4uL2NvbW1v
bi92ZXJzaW9uLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jdW5kZWYgQVBTVFVESU9fUkVB
RE9OTFlfU1lNQk9MUwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRW5nbGlzaCAoVS5TLikg
cmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFG
WF9UQVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFO
R19FTkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQotI2VuZGlmIC8vX1dJTjMyCi0K
LSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIFRF
WFRJTkNMVURFCi0vLwotCi0xIFRFWFRJTkNMVURFIAotQkVHSU4KLSAgICAicmVzb3VyY2UuaFww
IgotRU5ECi0KLTIgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICIjaW5jbHVkZSAiImFmeHJlcy5o
IiJcclxuIgotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1vbi92ZXJzaW9uLmgiIlwwIgotRU5ECi0K
LTMgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJcclxuIgotICAgICJcMCIKLUVORAotCi0jZW5k
aWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwot
Ly8gVmVyc2lvbgotLy8KLQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCi0gRklMRVZFUlNJ
T04gTUFKT1JfVkVSU0lPTixNSU5PUl9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJ
T04KLSBQUk9EVUNUVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVS
U0lPTixCVUlMRF9SRVZJU0lPTgotIEZJTEVGTEFHU01BU0sgMHgxN0wKLSNpZmRlZiBfREVCVUcK
LSBGSUxFRkxBR1MgMHgxTAotI2Vsc2UKLSBGSUxFRkxBR1MgMHgwTAotI2VuZGlmCi0gRklMRU9T
IDB4NEwKLSBGSUxFVFlQRSAweDJMCi0gRklMRVNVQlRZUEUgMHgwTAotQkVHSU4KLSAgICBCTE9D
SyAiU3RyaW5nRmlsZUluZm8iCi0gICAgQkVHSU4KLSAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgot
ICAgICAgICBCRUdJTgotICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdM
RSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnkiCi0gICAgICAgICAgICBWQUxVRSAiRmlsZVZl
cnNpb24iLCBWRVJTSU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIs
ICJsaWJFR0wiCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIgotICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5h
bWUiLCAibGliRUdMLmRsbCIKLSAgICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJT
SU9OX1NUUklORwotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkVH
TCBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lv
biIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgIEVORAotICAgIEVORAotICAgIEJMT0NLICJWYXJG
aWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwg
MTIwMAotICAgIEVORAotRU5ECi0KLSNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJj
ZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0jaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQK
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNM
VURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jZW5kaWYgICAg
Ly8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAy
ZDI5Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xp
YkVHTC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw0NDMgKzAsMCBAQAotPD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAot
CVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgotCVZlcnNpb249IjkuMDAiCi0JTmFtZT0ibGliRUdM
IgotCVByb2plY3RHVUlEPSJ7RTc0NkZDQTktNjRDMy00MzNFLTg1RTgtOUE1QTY3QUI3RUQ2fSIK
LQlSb290TmFtZXNwYWNlPSJsaWJFR0wiCi0JS2V5d29yZD0iV2luMzJQcm9qIgotCVRhcmdldEZy
YW1ld29ya1ZlcnNpb249IjEzMTA3MiIKLQk+Ci0JPFBsYXRmb3Jtcz4KLQkJPFBsYXRmb3JtCi0J
CQlOYW1lPSJXaW4zMiIKLQkJLz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJ4NjQiCi0JCS8+Ci0J
PC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8L1Rvb2xGaWxlcz4KLQk8Q29uZmlndXJhdGlv
bnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERp
cmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVk
aWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlw
ZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
cmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVp
bGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9y
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMCIK
LQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFBy
b2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJ
TjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05P
X0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNp
Y1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJ
RGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0
aW9uRm9ybWF0PSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNM
aW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlv
bmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBkeGd1aWQubGliIGR3bWFwaS5saWIiCi0JCQkJTGlu
a0luY3JlbWVudGFsPSIyIgotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJFR0wuZGVmIgot
CQkJCURlbGF5TG9hZERMTHM9ImR3bWFwaS5kbGwiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0
aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9
IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0i
MSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gw
RDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlv
bk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwm
cXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwm
cXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9u
PgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCU91dHB1dERp
cmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVk
aWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlw
ZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0i
MSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFu
c2lvbj0iMiIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3REaXIp
Ly4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5p
dGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkVHTF9FWFBPUlRTO19DUlRf
U0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVM
aWJyYXJ5PSIwIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZl
bD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0
MjQ0OzQyNDU7NDUxMjs0NzAyIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0i
ZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0i
dHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGls
ZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9u
cz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgZHhndWlk
LmxpYiBkd21hcGkubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZp
bml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJCQlEZWxheUxvYWRETExzPSJkd21hcGkuZGxsIgot
CQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0J
CQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCi0J
CQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9u
PSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjEiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJ
Q29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGly
KS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZx
dW90OyQoT3V0RGlyKVxsaWJFR0wuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91
dERpcilcbGliRUdMLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29u
ZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIK
LQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRl
YnVnfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFt
ZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxh
dGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIy
IgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1
aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZp
cm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9
IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQcmVw
cm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCRUdM
X0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIgotCQkJCU1pbmltYWxS
ZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGli
cmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9
IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0
NDs0MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZh
bHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJV2FybkFzRXJyb3I9InRy
dWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVy
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9
Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIGR4Z3VpZC5s
aWIgZHdtYXBpLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCi0JCQkJTW9kdWxlRGVmaW5p
dGlvbkZpbGU9ImxpYkVHTC5kZWYiCi0JCQkJRGVsYXlMb2FkRExMcz0iZHdtYXBpLmRsbCIKLQkJ
CQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJ
CVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0i
MCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
QUxpbmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
RnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlD
b21tYW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0
RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25m
aWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7Igot
CQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVs
ZWFzZXx4NjQiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5h
bWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBs
YXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0i
MiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIK
LQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDTUlETFRvb2wiCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIK
LQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUi
Ci0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNS
RExMO0xJQkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VD
VVJFX1NDTD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJCVVzZVByZWNvbXBpbGVkSGVh
ZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyIgotCQkJCURldGVjdDY0
Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1h
dD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9v
bCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25hbERlcGVu
ZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21hcGkubGliIgotCQkJCUxpbmtJbmNyZW1l
bnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJCQlEZWxh
eUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1
ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgotCQkJCUVu
YWJsZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJ
CURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjE3IgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERD
TWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBB
O21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlc
JnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRsbCZxdW90OyAm
cXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYj
eDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gw
QTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JPC9D
b25maWd1cmF0aW9ucz4KLQk8UmVmZXJlbmNlcz4KLQk8L1JlZmVyZW5jZXM+Ci0JPEZpbGVzPgot
CQk8RmlsdGVyCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4
eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRG
QzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLlxDb25maWcuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxDb21tb25cZGVidWcuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuY3BwIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkVHTC5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5j
cHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQkJPEZpbHRlcgotCQkJTmFtZT0i
SGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCi0JCQlV
bmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIK
LQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXENvbmZpZy5oIgotCQkJCT4KLQkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxF
R0xcZWdsLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGluY2x1ZGVcRUdMXGVnbGV4dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2xwbGF0Zm9ybS5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxyZXNvdXJjZS5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFN1cmZh
Y2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Y29tbW9uXHZlcnNpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCTwvRmlsdGVyPgotCQk8Rmls
ZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkVHTC5kZWYiCi0JCQk+Ci0JCTwvRmlsZT4KLQkJPEZp
bGUKLQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wucmMiCi0JCQk+Ci0JCTwvRmlsZT4KLQk8L0Zp
bGVzPgotCTxHbG9iYWxzPgotCTwvR2xvYmFscz4KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxYzEwN2JmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBhbmQg
bWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQotI2luY2x1ZGUgImxpYkVHTC9tYWlu
LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotc3RhdGljIERXT1JEIGN1cnJlbnRU
TFMgPSBUTFNfT1VUX09GX0lOREVYRVM7Ci0KLUJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNF
IGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKLXsKLSAgICBzd2l0Y2gg
KHJlYXNvbikKLSAgICB7Ci0gICAgICBjYXNlIERMTF9QUk9DRVNTX0FUVEFDSDoKLSAgICAgICAg
ewotI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJBQ0UpCi0gICAgICAgICAgICBGSUxFICpk
ZWJ1ZyA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAicnQiKTsKLQotICAgICAgICAgICAgaWYg
KGRlYnVnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZjbG9zZShkZWJ1Zyk7Ci0g
ICAgICAgICAgICAgICAgZGVidWcgPSBmb3BlbihUUkFDRV9PVVRQVVRfRklMRSwgInd0Iik7ICAg
Ly8gRXJhc2UKLSAgICAgICAgICAgICAgICBmY2xvc2UoZGVidWcpOwotICAgICAgICAgICAgfQot
I2VuZGlmCi0KLSAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOwotCi0gICAgICAg
ICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAotICAgICAgY2Fz
ZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgZWdsOjpDdXJyZW50
ICpjdXJyZW50ID0gKGVnbDo6Q3VycmVudCopTG9jYWxBbGxvYyhMUFRSLCBzaXplb2YoZWdsOjpD
dXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOwotCi0gICAgICAg
ICAgICAgICAgY3VycmVudC0+ZXJyb3IgPSBFR0xfU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICBj
dXJyZW50LT5BUEkgPSBFR0xfT1BFTkdMX0VTX0FQSTsKLSAgICAgICAgICAgICAgICBjdXJyZW50
LT5kaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+ZHJh
d1N1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5yZWFk
U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKLSAgICAgICAgewotICAg
ICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAg
ICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2Nh
bEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgotICAgICAgICB7Ci0gICAg
ICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAg
ICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2Fs
RnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBUbHNG
cmVlKGN1cnJlbnRUTFMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLW5hbWVz
cGFjZSBlZ2wKLXsKLXZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJvcikKLXsKLSAgICBD
dXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0g
ICAgY3VycmVudC0+ZXJyb3IgPSBlcnJvcjsKLX0KLQotRUdMaW50IGdldEN1cnJlbnRFcnJvcigp
Ci17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50
VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5lcnJvcjsKLX0KLQotdm9pZCBzZXRDdXJyZW50
QVBJKEVHTGVudW0gQVBJKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxz
R2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5BUEkgPSBBUEk7Ci19Ci0KLUVH
TGVudW0gZ2V0Q3VycmVudEFQSSgpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50
KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5BUEk7Ci19
Ci0KLXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxheSBkcHkpCi17Ci0gICAgQ3VycmVu
dCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIGN1
cnJlbnQtPmRpc3BsYXkgPSBkcHk7Ci19Ci0KLUVHTERpc3BsYXkgZ2V0Q3VycmVudERpc3BsYXko
KQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVu
dFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKLX0KLQotdm9pZCBzZXRDdXJy
ZW50RHJhd1N1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKQotewotICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5k
cmF3U3VyZmFjZSA9IHN1cmZhY2U7Ci19Ci0KLUVHTFN1cmZhY2UgZ2V0Q3VycmVudERyYXdTdXJm
YWNlKCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1
cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmRyYXdTdXJmYWNlOwotfQotCi12b2lk
IHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpCi17Ci0gICAgQ3VycmVu
dCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIGN1
cnJlbnQtPnJlYWRTdXJmYWNlID0gc3VyZmFjZTsKLX0KLQotRUdMU3VyZmFjZSBnZXRDdXJyZW50
UmVhZFN1cmZhY2UoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+cmVhZFN1cmZhY2U7Ci19
Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29kZSkKLXsKLSAgICBlZ2w6OnNldEN1cnJl
bnRFcnJvcihlcnJvckNvZGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9tYWluLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L21haW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA5ZDllNi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIG1haW4uaDogTWFu
YWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQotI2lmbmRlZiBMSUJFR0xfTUFJTl9IXwot
I2RlZmluZSBMSUJFR0xfTUFJTl9IXwotCi0jZGVmaW5lIEVHTEFQSQotI2luY2x1ZGUgPEVHTC9l
Z2wuaD4KLSNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLXN0cnVj
dCBDdXJyZW50Ci17Ci0gICAgRUdMaW50IGVycm9yOwotICAgIEVHTGVudW0gQVBJOwotICAgIEVH
TERpc3BsYXkgZGlzcGxheTsKLSAgICBFR0xTdXJmYWNlIGRyYXdTdXJmYWNlOwotICAgIEVHTFN1
cmZhY2UgcmVhZFN1cmZhY2U7Ci19OwotCi12b2lkIHNldEN1cnJlbnRFcnJvcihFR0xpbnQgZXJy
b3IpOwotRUdMaW50IGdldEN1cnJlbnRFcnJvcigpOwotCi12b2lkIHNldEN1cnJlbnRBUEkoRUdM
ZW51bSBBUEkpOwotRUdMZW51bSBnZXRDdXJyZW50QVBJKCk7Ci0KLXZvaWQgc2V0Q3VycmVudERp
c3BsYXkoRUdMRGlzcGxheSBkcHkpOwotRUdMRGlzcGxheSBnZXRDdXJyZW50RGlzcGxheSgpOwot
Ci12b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpOwotRUdMU3Vy
ZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKTsKLQotdm9pZCBzZXRDdXJyZW50UmVhZFN1cmZh
Y2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKLUVHTFN1cmZhY2UgZ2V0Q3VycmVudFJlYWRTdXJmYWNl
KCk7Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29kZSk7Ci0KLXRlbXBsYXRlPGNsYXNz
IFQ+Ci1jb25zdCBUICZlcnJvcihFR0xpbnQgZXJyb3JDb2RlLCBjb25zdCBUICZyZXR1cm5WYWx1
ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBUPgotY29uc3QgVCAmc3VjY2Vzcyhjb25zdCBUICZyZXR1cm5W
YWx1ZSkKLXsKLSAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihFR0xfU1VDQ0VTUyk7Ci0KLSAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLSNlbmRpZiAgLy8gTElCRUdMX01BSU5fSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvcmVzb3VyY2UuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvcmVzb3VyY2UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzkyMWY0Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML3Jlc291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCww
IEBACi0vL3t7Tk9fREVQRU5ERU5DSUVTfX0KLS8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVy
YXRlZCBpbmNsdWRlIGZpbGUuCi0vLyBVc2VkIGJ5IGxpYkVHTC5yYwotCi0vLyBOZXh0IGRlZmF1
bHQgdmFsdWVzIGZvciBuZXcgb2JqZWN0cwotLy8gCi0jaWZkZWYgQVBTVFVESU9fSU5WT0tFRAot
I2lmbmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCi0jZGVmaW5lIF9BUFNfTkVYVF9SRVNP
VVJDRV9WQUxVRSAgICAgICAgMTAxCi0jZGVmaW5lIF9BUFNfTkVYVF9DT01NQU5EX1ZBTFVFICAg
ICAgICAgNDAwMDEKLSNkZWZpbmUgX0FQU19ORVhUX0NPTlRST0xfVkFMVUUgICAgICAgICAxMDAx
Ci0jZGVmaW5lIF9BUFNfTkVYVF9TWU1FRF9WQUxVRSAgICAgICAgICAgMTAxCi0jZW5kaWYKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9C
bGl0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDhkNjkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYwNCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCbGl0LmNwcDogU3Vy
ZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQmxpdC5oIgot
Ci0jaW5jbHVkZSA8ZDNkeDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKLQotbmFtZXNwYWNlCi17Ci0vLyBTdGFuZGFyZCBWZXJ0
ZXggU2hhZGVyCi0vLyBJbnB1dCAwIGlzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uLgotLy8gT3V0
cHV0cyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBhcy1pcy4KLS8vIE91dHB1dHMgYSB0ZXggY29v
cmQgd2l0aCAoMCwwKSBpbiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiBhbmQg
KDEsMSkgaW4gdGhlIGJvdHRvbSByaWdodC4KLS8vIEMwLlggbXVzdCBiZSBuZWdhdGl2ZSBoYWxm
LXBpeGVsIHdpZHRoLCBDMC5ZIG11c3QgYmUgaGFsZi1waXhlbCBoZWlnaHQuIEMwLlpXIG11c3Qg
YmUgMC4KLWNvbnN0IGNoYXIgc3RhbmRhcmR2c1tdID0KLSJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0i
e1xuIgotIiAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJVElPTjtcbiIKLSIgICAgZmxvYXQ0IHRl
eGNvb3JkIDogVEVYQ09PUkQwO1xuIgotIn07XG4iCi0iXG4iCi0idW5pZm9ybSBmbG9hdDQgaGFs
ZlBpeGVsU2l6ZSA6IGMwO1xuIgotIlxuIgotIlZTX09VVFBVVCBtYWluKGluIGZsb2F0NCBwb3Np
dGlvbiA6IFBPU0lUSU9OKVxuIgotIntcbiIKLSIgICAgVlNfT1VUUFVUIE91dDtcbiIKLSJcbiIK
LSIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBoYWxmUGl4ZWxTaXplO1xuIgotIiAgICBP
dXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgwLjUsIC0wLjUsIDEuMCwgMS4wKSArIGZs
b2F0NCgwLjUsIDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0iICAgIHJldHVybiBPdXQ7XG4iCi0ifVxu
IjsKLQotLy8gRmxpcCBZIFZlcnRleCBTaGFkZXIKLS8vIElucHV0IDAgaXMgdGhlIGhvbW9nZW5v
dXMgcG9zaXRpb24uCi0vLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0aW9uIGFzLWlzLgot
Ly8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDEpIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5l
ciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwwKSBpbiB0aGUgYm90dG9tIHJpZ2h0LgotLy8gQzAuWFkg
bXVzdCBiZSB0aGUgaGFsZi1waXhlbCB3aWR0aCBhbmQgaGVpZ2h0LiBDMC5aVyBtdXN0IGJlIDAu
Ci1jb25zdCBjaGFyIGZsaXB5dnNbXSA9Ci0ic3RydWN0IFZTX09VVFBVVFxuIgotIntcbiIKLSIg
ICAgZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT047XG4iCi0iICAgIGZsb2F0NCB0ZXhjb29yZCA6
IFRFWENPT1JEMDtcbiIKLSJ9O1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0IGhhbGZQaXhlbFNp
emUgOiBjMDtcbiIKLSJcbiIKLSJWU19PVVRQVVQgbWFpbihpbiBmbG9hdDQgcG9zaXRpb24gOiBQ
T1NJVElPTilcbiIKLSJ7XG4iCi0iICAgIFZTX09VVFBVVCBPdXQ7XG4iCi0iXG4iCi0iICAgIE91
dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTtcbiIKLSIgICAgT3V0LnRleGNv
b3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAwLjUsIDEuMCwgMS4wKSArIGZsb2F0NCgwLjUs
IDAuNSwgMCwgMCk7XG4iCi0iXG4iCi0iICAgIHJldHVybiBPdXQ7XG4iCi0ifVxuIjsKLQotLy8g
UGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0
IHRleGNvb3JkIDAuCi1jb25zdCBjaGFyIHBhc3N0aHJvdWdocHNbXSA9Ci0ic2FtcGxlcjJEIHRl
eCA6IHMwO1xuIgotIlxuIgotImZsb2F0NCBtYWluKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JE
MCkgOiBDT0xPUlxuIgotIntcbiIKLSIJcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpO1xu
IgotIn1cbiI7Ci0KLS8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0
cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgotLy8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBz
ZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlgg
PSAwLCBDMC5ZID0gMS4KLWNvbnN0IGNoYXIgbHVtaW5hbmNlcHNbXSA9Ci0ic2FtcGxlcjJEIHRl
eCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDtcbiIKLSJcbiIKLSJm
bG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1JcbiIKLSJ7XG4i
Ci0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIKLSIJdG1wLncgPSB0
bXAudyAqIG1vZGUueCArIG1vZGUueTtcbiIKLSIJcmV0dXJuIHRtcC54eHh3O1xuIgotIn1cbiI7
Ci0KLS8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1w
bGUodGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEu
Ci0vLyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4K
LS8vIFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAu
WiA9IDEsIEMwLlcgPSAwLgotY29uc3QgY2hhciBjb21wb25lbnRtYXNrcHNbXSA9Ci0ic2FtcGxl
cjJEIHRleCA6IHMwO1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDtcbiIKLSJc
biIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1JcbiIK
LSJ7XG4iCi0iCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIKLSIJdG1w
Lnh5eiA9IHRtcC54eXogKiBtb2RlLng7XG4iCi0iCXRtcC53ID0gdG1wLncgKiBtb2RlLnogKyBt
b2RlLnc7XG4iCi0iCXJldHVybiB0bXA7XG4iCi0ifVxuIjsKLQotfQotCi1uYW1lc3BhY2UgZ2wK
LXsKLQotY29uc3QgY2hhciAqIGNvbnN0IEJsaXQ6Om1TaGFkZXJTb3VyY2VbXSA9Ci17Ci0gICAg
c3RhbmRhcmR2cywKLSAgICBmbGlweXZzLAotICAgIHBhc3N0aHJvdWdocHMsCi0gICAgbHVtaW5h
bmNlcHMsCi0gICAgY29tcG9uZW50bWFza3BzCi19OwotCi1CbGl0OjpCbGl0KENvbnRleHQgKmNv
bnRleHQpCi0gIDogbUNvbnRleHQoY29udGV4dCksIG1RdWFkVmVydGV4QnVmZmVyKE5VTEwpLCBt
UXVhZFZlcnRleERlY2xhcmF0aW9uKE5VTEwpLCBtU2F2ZWRSZW5kZXJUYXJnZXQoTlVMTCksIG1T
YXZlZERlcHRoU3RlbmNpbChOVUxMKSwgbVNhdmVkU3RhdGVCbG9jayhOVUxMKQotewotICAgIGlu
aXRHZW9tZXRyeSgpOwotICAgIG1lbXNldChtQ29tcGlsZWRTaGFkZXJzLCAwLCBzaXplb2YobUNv
bXBpbGVkU2hhZGVycykpOwotfQotCi1CbGl0Ojp+QmxpdCgpCi17Ci0gICAgaWYgKG1TYXZlZFN0
YXRlQmxvY2spIG1TYXZlZFN0YXRlQmxvY2stPlJlbGVhc2UoKTsKLSAgICBpZiAobVF1YWRWZXJ0
ZXhCdWZmZXIpIG1RdWFkVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1RdWFkVmVy
dGV4RGVjbGFyYXRpb24pIG1RdWFkVmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgU0hBREVSX0NPVU5UOyBpKyspCi0gICAgewotICAgICAgICBp
ZiAobUNvbXBpbGVkU2hhZGVyc1tpXSkKLSAgICAgICAgewotICAgICAgICAgICAgbUNvbXBpbGVk
U2hhZGVyc1tpXS0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEJsaXQ6
OmluaXRHZW9tZXRyeSgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHF1YWRbXSA9Ci0gICAg
ewotICAgICAgICAtMSwgLTEsCi0gICAgICAgIC0xLCAgMSwKLSAgICAgICAgIDEsIC0xLAotICAg
ICAgICAgMSwgIDEKLSAgICB9OwotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVm
ZmVyKHNpemVvZihxdWFkKSwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBEM0RQT09MX0RFRkFVTFQs
ICZtUXVhZFZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLQotICAgIHZvaWQgKmxvY2tQdHIgPSBOVUxMOwotICAgIHJlc3Vs
dCA9IG1RdWFkVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZsb2NrUHRyLCAwKTsKLQotICAgIGlm
IChGQUlMRUQocmVzdWx0KSB8fCBsb2NrUHRyID09IE5VTEwpCi0gICAgewotICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LQotICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXplb2YocXVhZCkpOwotICAgIG1RdWFkVmVy
dGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5U
OSBlbGVtZW50c1tdID0KLSAgICB7Ci0gICAgICAgIHsgMCwgMCwgRDNEREVDTFRZUEVfRkxPQVQy
LCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xVU0FHRV9QT1NJVElPTiwgMCB9LAotICAg
ICAgICBEM0RERUNMX0VORCgpCi0gICAgfTsKLQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
VmVydGV4RGVjbGFyYXRpb24oZWxlbWVudHMsICZtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKLQot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KLWJvb2wgQmxpdDo6c2V0U2hhZGVyKFNoYWRlcklkIHNv
dXJjZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQg
KFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5OjoqY3JlYXRlU2hhZGVyKShjb25zdCBEV09SRCAqLCBE
M0RTaGFkZXJUeXBlKiopLAotICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElE
aXJlY3QzRERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSkKLXsKLSAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEQzRFNoYWRlclR5cGUg
KnNoYWRlcjsKLQotICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0gIT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHNoYWRlciA9IHN0YXRpY19jYXN0PEQzRFNoYWRlclR5cGUqPihtQ29tcGls
ZWRTaGFkZXJzW3NvdXJjZV0pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBJRDNE
WEJ1ZmZlciAqc2hhZGVyQ29kZTsKLSAgICAgICAgSFJFU1VMVCBociA9IEQzRFhDb21waWxlU2hh
ZGVyKG1TaGFkZXJTb3VyY2Vbc291cmNlXSwgc3RybGVuKG1TaGFkZXJTb3VyY2Vbc291cmNlXSks
IE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwgJnNoYWRlckNvZGUsIE5VTEwsIE5VTEwp
OwotCi0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIo
IkZhaWxlZCB0byBjb21waWxlICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQsIGVycm9y
IDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaHIgPSAoZGV2aWNlLT4qY3JlYXRlU2hhZGVy
KShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KHNoYWRlckNvZGUtPkdldEJ1ZmZlclBvaW50ZXIo
KSksICZzaGFkZXIpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgc2hhZGVyQ29kZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8g
Y3JlYXRlICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBw
cm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc2hhZGVyQ29kZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIG1Db21w
aWxlZFNoYWRlcnNbc291cmNlXSA9IHNoYWRlcjsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIGhyID0g
KGRldmljZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKLQotICAgIGlmIChGQUlMRUQoaHIpKQotICAg
IHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0ICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRp
b24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxp
dDo6c2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAgICByZXR1cm4gc2V0U2hh
ZGVyPElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hh
ZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3Jl
YXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKLX0K
LQotYm9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0
dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1
cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiLCAmSURpcmVjdDNERGV2
aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRl
cik7Ci19Ci0KLVJFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1
cmZhY2UpIGNvbnN0Ci17Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgc3VyZmFjZS0+
R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVjdC5sZWZ0ID0gMDsKLSAg
ICByZWN0LnRvcCA9IDA7Ci0gICAgcmVjdC5yaWdodCA9IGRlc2MuV2lkdGg7Ci0gICAgcmVjdC5i
b3R0b20gPSBkZXNjLkhlaWdodDsKLQotICAgIHJldHVybiByZWN0OwotfQotCi1ib29sIEJsaXQ6
OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVzdCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9U
ZXh0dXJlKHNvdXJjZSwgZ2V0U3VyZmFjZVJlY3Qoc291cmNlKSk7Ci0gICAgaWYgKCF0ZXh0dXJl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBk
ZXZpY2UtPlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJn
ZXQoMCwgZGVzdCk7Ci0KLSAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsK
LSAgICBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOwotCi0gICAgc2V0Q29t
bW9uQmxpdFN0YXRlKCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9N
SU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgw
LCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOwotCi0gICAgc2V0Vmlld3BvcnQo
Z2V0U3VyZmFjZVJlY3QoZGVzdCksIDAsIDApOwotCi0gICAgcmVuZGVyKCk7Ci0KLSAgICB0ZXh0
dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3RhdGUoKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEJsaXQ6OmNvcHkoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3Qg
UkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQotewotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRDNEU1VSRkFDRV9ERVNDIHNvdXJjZURl
c2M7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc3REZXNjOwotICAgIHNvdXJjZS0+R2V0RGVzYygm
c291cmNlRGVzYyk7Ci0gICAgZGVzdC0+R2V0RGVzYygmZGVzdERlc2MpOwotCi0gICAgaWYgKHNv
dXJjZURlc2MuRm9ybWF0ID09IGRlc3REZXNjLkZvcm1hdCAmJiBkZXN0RGVzYy5Vc2FnZSAmIEQz
RFVTQUdFX1JFTkRFUlRBUkdFVCkgICAvLyBDYW4gdXNlIFN0cmV0Y2hSZWN0Ci0gICAgewotICAg
ICAgICBSRUNUIGRlc3RSZWN0ID0ge3hvZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyAoc291cmNl
UmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCksIHlvZmZzZXQgKyAoc291cmNlUmVjdC5ib3R0
b20gLSBzb3VyY2VSZWN0LnRvcCl9OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
U3RyZXRjaFJlY3Qoc291cmNlLCAmc291cmNlUmVjdCwgZGVzdCwgJmRlc3RSZWN0LCBEM0RURVhG
X1BPSU5UKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gZm9ybWF0Q29udmVydChzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RGb3JtYXQsIHhv
ZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEJsaXQ6OmZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29uc3Qg
UkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQotewotICAgIElEaXJlY3QzRFRleHR1
cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBzb3VyY2VSZWN0KTsK
LSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBzYXZl
U3RhdGUoKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKLSAgICBkZXZp
Y2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKLQotICAgIHNldFZpZXdwb3J0KHNvdXJjZVJl
Y3QsIHhvZmZzZXQsIHlvZmZzZXQpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAg
aWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQotICAgIHsKLSAgICAgICAg
cmVuZGVyKCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotCi0gICAgcmVzdG9y
ZVN0YXRlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0OjpzZXRGb3JtYXRD
b252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKLXsKLSAgICBib29sIG9rYXkgPSBzZXRW
ZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1h
dCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9S
R0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgIGNhc2UgR0xfUkdCOgotICAgICAg
Y2FzZSBHTF9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hB
REVSX1BTX0NPTVBPTkVOVE1BU0spOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgb2theSA9
IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0xVTUlOQU5DRSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGlmICghb2theSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsgWCA9IDAsIFkgPSAxLCBaID0gMiwgVyA9IDMgfTsKLQot
ICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3RhbnQgZGVwZW5kcyBvbiB0aGUgc2hhZGVy
IHRoYXQgd2FzIHNlbGVjdGVkLgotICAgIC8vIFNlZSB0aGUgc2hhZGVyIGFzc2VtYmx5IGNvZGUg
YWJvdmUgZm9yIGRldGFpbHMuCi0gICAgZmxvYXQgcHNDb25zdDBbNF0gPSB7IDAsIDAsIDAsIDAg
fTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoK
LSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAx
OwotICAgICAgICBwc0NvbnN0MFtXXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl
IEdMX0FMUEhBOgotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgcHNDb25zdDBbWV0gPSAxOwotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHBzQ29u
c3QwW1hdID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZ2V0RGV2aWNlKCktPlNl
dFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1RleHR1cmUoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpCi17Ci0gICAg
aWYgKCFzdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRDNEU1VSRkFDRV9ERVNDIHNvdXJjZURl
c2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7Ci0KLSAgICAvLyBDb3B5IHRo
ZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnRl
eHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoc291cmNl
UmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20gLSBzb3VyY2VS
ZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZvcm1hdCwgRDNE
UE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
Ci0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOwotICAgIHJlc3VsdCA9IHRleHR1cmUtPkdl
dFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHRleHR1cmUtPlJlbGVh
c2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RU
ZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHN1cmZhY2UsICZzb3VyY2VSZWN0LCB0ZXh0dXJl
U3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgIHRleHR1cmVTdXJmYWNlLT5SZWxl
YXNlKCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9pZCBCbGl0OjpzZXRWaWV3cG9ydChjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KQotewotICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRDNEVklFV1BPUlQ5IHZw
OwotICAgIHZwLlggICAgICA9IHhvZmZzZXQ7Ci0gICAgdnAuWSAgICAgID0geW9mZnNldDsKLSAg
ICB2cC5XaWR0aCAgPSBzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5sZWZ0OwotICAgIHZw
LkhlaWdodCA9IHNvdXJjZVJlY3QuYm90dG9tIC0gc291cmNlUmVjdC50b3A7Ci0gICAgdnAuTWlu
WiAgID0gMC4wZjsKLSAgICB2cC5NYXhaICAgPSAxLjBmOwotICAgIGRldmljZS0+U2V0Vmlld3Bv
cnQoJnZwKTsKLQotICAgIGZsb2F0IGhhbGZQaXhlbEFkanVzdFs0XSA9IHsgLTEuMGYvdnAuV2lk
dGgsIDEuMGYvdnAuSGVpZ2h0LCAwLCAwIH07Ci0gICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJD
b25zdGFudEYoMCwgaGFsZlBpeGVsQWRqdXN0LCAxKTsKLX0KLQotdm9pZCBCbGl0OjpzZXRDb21t
b25CbGl0U3RhdGUoKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotCi0gICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0g
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsK
LSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNF
KTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05P
TkUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAw
KTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQz
RENPTE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RD
T0xPUldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwot
Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NQUdGSUxURVIsIEQzRFRF
WEZfUE9JTlQpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklM
VEVSLCBEM0RURVhGX1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RT
QU1QX1NSR0JURVhUVVJFLCBGQUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9BRERSRVNTVSwgRDNEVEFERFJFU1NfQ0xBTVApOwotICAgIGRldmljZS0+U2V0U2Ft
cGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKLQotICAg
IFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Npc3NvcmluZyBpcyBkaXNhYmxlZCBmb3Ig
ZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2FwdHVyZSBhbmQgcmVzdG9yZSB0aGUgb2xk
IHJlY3RhbmdsZQotICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3QoJnNjaXNzb3JSZWN0KTsKLQot
ICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQmxpdDo6cmVuZGVyKCkKLXsKLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNw
bGF5KCk7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAg
ICBIUkVTVUxUIGhyID0gZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZm
ZXIsIDAsIDIgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBociA9IGRldmljZS0+U2V0VmVydGV4RGVj
bGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbik7Ci0KLSAgICBkaXNwbGF5LT5zdGFydFNj
ZW5lKCk7Ci0gICAgaHIgPSBkZXZpY2UtPkRyYXdQcmltaXRpdmUoRDNEUFRfVFJJQU5HTEVTVFJJ
UCwgMCwgMik7Ci19Ci0KLXZvaWQgQmxpdDo6c2F2ZVN0YXRlKCkKLXsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHI7Ci0KLSAgICBk
ZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJm1TYXZlZERlcHRoU3RlbmNpbCk7Ci0gICAg
ZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1TYXZlZFJlbmRlclRhcmdldCk7Ci0KLSAgICBp
ZiAobVNhdmVkU3RhdGVCbG9jayA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgaHIgPSBkZXZpY2Ut
PkJlZ2luU3RhdGVCbG9jaygpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAg
ICAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQg
ZHVtbXlDb25zdFs0XSA9IHsgMCwgMCwgMCwgMCB9OwotCi0gICAgICAgIGRldmljZS0+U2V0VmVy
dGV4U2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
RigwLCBkdW1teUNvbnN0LCAxKTsKLSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxM
KTsKLSAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RigwLCBkdW1teUNvbnN0
LCAxKTsKLQotICAgICAgICBEM0RWSUVXUE9SVDkgZHVtbXlWcDsKLSAgICAgICAgZHVtbXlWcC5Y
ID0gMDsKLSAgICAgICAgZHVtbXlWcC5ZID0gMDsKLSAgICAgICAgZHVtbXlWcC5XaWR0aCA9IDE7
Ci0gICAgICAgIGR1bW15VnAuSGVpZ2h0ID0gMTsKLSAgICAgICAgZHVtbXlWcC5NaW5aID0gMDsK
LSAgICAgICAgZHVtbXlWcC5NYXhaID0gMTsKLQotICAgICAgICBkZXZpY2UtPlNldFZpZXdwb3J0
KCZkdW1teVZwKTsKLQotICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7Ci0KLSAg
ICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgbVF1YWRWZXJ0ZXhCdWZmZXIsIDAsIDAp
OwotCi0gICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obVF1YWRWZXJ0ZXhEZWNs
YXJhdGlvbik7Ci0KLSAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1TYXZlZFN0
YXRlQmxvY2spOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBB
U1NFUlQobVNhdmVkU3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAgIGlmIChtU2F2ZWRTdGF0ZUJs
b2NrICE9IE5VTEwpCi0gICAgewotICAgICAgICBociA9IG1TYXZlZFN0YXRlQmxvY2stPkNhcHR1
cmUoKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgIH0KLX0KLQotdm9pZCBC
bGl0OjpyZXN0b3JlU3RhdGUoKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOwotCi0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1TYXZlZERl
cHRoU3RlbmNpbCk7Ci0gICAgaWYgKG1TYXZlZERlcHRoU3RlbmNpbCAhPSBOVUxMKQotICAgIHsK
LSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1TYXZlZERl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQo
MCwgbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLSAgICBpZiAobVNhdmVkUmVuZGVyVGFyZ2V0ICE9IE5V
TEwpCi0gICAgewotICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAg
ICAgbVNhdmVkUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBBU1NFUlQobVNhdmVk
U3RhdGVCbG9jayAhPSBOVUxMKTsKLQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwp
Ci0gICAgewotICAgICAgICBtU2F2ZWRTdGF0ZUJsb2NrLT5BcHBseSgpOwotICAgIH0KLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkyOGVjZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkg
dXRpbGl0eSBjbGFzcy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQkxJVF9IXwotI2RlZmluZSBMSUJH
TEVTVjJfQkxJVF9IXwotCi0jaW5jbHVkZSA8bWFwPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgQ29udGV4dDsKLQot
Y2xhc3MgQmxpdAotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQmxpdChDb250ZXh0ICpjb250
ZXh0KTsKLSAgICB+QmxpdCgpOwotCi0gICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRv
IGRlc3Qgc3VyZmFjZS4KLSAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBp
biBEM0QgY29vcmRpbmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQotICAgIGJvb2wgY29weShJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0gZGVz
dEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QpOwotCi0gICAgLy8gQ29weSBmcm9tIHNvdXJjZSBzdXJmYWNlIHRvIGRlc3Qgc3VyZmFj
ZS4KLSAgICAvLyBzb3VyY2VSZWN0LCB4b2Zmc2V0LCB5b2Zmc2V0IGFyZSBpbiBEM0QgY29vcmRp
bmF0ZXMgKDAsMCBpbiB1cHBlci1sZWZ0KQotICAgIC8vIHNvdXJjZSBpcyBpbnRlcnByZXRlZCBh
cyBSR0JBIGFuZCBkZXN0Rm9ybWF0IHNwZWNpZmllcyB0aGUgZGVzaXJlZCByZXN1bHQgZm9ybWF0
LiBGb3IgZXhhbXBsZSwgaWYgZGVzdEZvcm1hdCA9IEdMX1JHQiwgdGhlIGFscGhhIGNoYW5uZWwg
d2lsbCBiZSBmb3JjZWQgdG8gMC4KLSAgICBib29sIGZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3Vy
ZmFjZTkgKnNvdXJjZSwgY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsK
LQotICAgIC8vIDJ4MiBib3ggZmlsdGVyIHNhbXBsZSBmcm9tIHNvdXJjZSB0byBkZXN0LgotICAg
IC8vIFJlcXVpcmVzIHRoYXQgc291cmNlIGlzIFJHQihBKSBhbmQgZGVzdCBoYXMgdGhlIHNhbWUg
Zm9ybWF0IGFzIHNvdXJjZS4KLSAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBDb250
ZXh0ICptQ29udGV4dDsKLQotICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKm1RdWFkVmVydGV4
QnVmZmVyOwotICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbVF1YWRWZXJ0ZXhEZWNs
YXJhdGlvbjsKLQotICAgIHZvaWQgaW5pdEdlb21ldHJ5KCk7Ci0KLSAgICBib29sIHNldEZvcm1h
dENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0Rm9ybWF0KTsKLQotICAgIElEaXJlY3QzRFRleHR1
cmU5ICpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29u
c3QgUkVDVCAmc291cmNlUmVjdCk7Ci0gICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBSRUNUICZz
b3VyY2VSZWN0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0KTsKLSAgICB2b2lkIHNldENv
bW1vbkJsaXRTdGF0ZSgpOwotICAgIFJFQ1QgZ2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBlbnVtIGlzIHVzZWQgdG8gaW5kZXgg
bUNvbXBpbGVkU2hhZGVycyBhbmQgbVNoYWRlclNvdXJjZS4KLSAgICBlbnVtIFNoYWRlcklkCi0g
ICAgewotICAgICAgICBTSEFERVJfVlNfU1RBTkRBUkQsCi0gICAgICAgIFNIQURFUl9WU19GTElQ
WSwKLSAgICAgICAgU0hBREVSX1BTX1BBU1NUSFJPVUdILAotICAgICAgICBTSEFERVJfUFNfTFVN
SU5BTkNFLAotICAgICAgICBTSEFERVJfUFNfQ09NUE9ORU5UTUFTSywKLSAgICAgICAgU0hBREVS
X0NPVU5UCi0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbVNoYWRlclNv
dXJjZVtdOwotCi0gICAgLy8gVGhpcyBhY3R1YWxseSBjb250YWlucyBJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5IG9yIElEaXJlY3QzRFBpeGVsU2hhZGVyOSBjYXN0ZWQgdG8gSVVua25vd24uCi0gICAg
SVVua25vd24gKm1Db21waWxlZFNoYWRlcnNbU0hBREVSX0NPVU5UXTsKLQotICAgIHRlbXBsYXRl
IDxjbGFzcyBEM0RTaGFkZXJUeXBlPgotICAgIGJvb2wgc2V0U2hhZGVyKFNoYWRlcklkIHNvdXJj
ZSwgY29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICBIUkVTVUxUIChXSU5B
UEkgSURpcmVjdDNERGV2aWNlOTo6KmNyZWF0ZVNoYWRlcikoY29uc3QgRFdPUkQgKiwgRDNEU2hh
ZGVyVHlwZSAqKiksCi0gICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3Qz
RERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSk7Ci0KLSAgICBib29sIHNldFZl
cnRleFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOwotICAgIGJvb2wgc2V0UGl4ZWxTaGFkZXIoU2hh
ZGVySWQgc2hhZGVyKTsKLSAgICB2b2lkIHJlbmRlcigpOwotCi0gICAgdm9pZCBzYXZlU3RhdGUo
KTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZSgpOwotICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICpt
U2F2ZWRTdGF0ZUJsb2NrOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU2F2ZWRSZW5kZXJUYXJn
ZXQ7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1TYXZlZERlcHRoU3RlbmNpbDsKLQotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCbGl0KTsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdM
RVNWMl9CTElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0J1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0J1ZmZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMTJlM2MuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IEJ1ZmZlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpCdWZmZXIgY2xhc3MsIHJlcHJlc2VudGlu
ZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKLS8vIGluZGV4IGRhdGEuIEltcGxlbWVudHMgR0wg
YnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KLS8vIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZl
ci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
VmVydGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdl
ci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotQnVmZmVyOjpCdWZmZXIoR0x1aW50IGlkKSA6IFJl
ZkNvdW50T2JqZWN0KGlkKQotewotICAgIG1Db250ZW50cyA9IE5VTEw7Ci0gICAgbVNpemUgPSAw
OwotICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsKLQotICAgIG1TdGF0aWNWZXJ0ZXhCdWZm
ZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVVubW9kaWZp
ZWREYXRhVXNlID0gMDsKLX0KLQotQnVmZmVyOjp+QnVmZmVyKCkKLXsKLSAgICBkZWxldGVbXSBt
Q29udGVudHM7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci0gICAgZGVsZXRlIG1T
dGF0aWNJbmRleEJ1ZmZlcjsKLX0KLQotdm9pZCBCdWZmZXI6OmJ1ZmZlckRhdGEoY29uc3Qgdm9p
ZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2UpCi17Ci0gICAgaWYgKHNpemUg
PT0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLSAgICAgICAgbUNvbnRl
bnRzID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSAhPSBtU2l6ZSkKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLSAgICAgICAgbUNvbnRlbnRzID0gbmV3IEdMdWJ5
dGVbc2l6ZV07Ci0gICAgICAgIG1lbXNldChtQ29udGVudHMsIDAsIHNpemUpOwotICAgIH0KLQot
ICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSA+IDApCi0gICAgewotICAgICAgICBtZW1jcHko
bUNvbnRlbnRzLCBkYXRhLCBzaXplKTsKLSAgICB9Ci0KLSAgICBtU2l6ZSA9IHNpemU7Ci0gICAg
bVVzYWdlID0gdXNhZ2U7Ci0KLSAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOwotCi0gICAgaWYg
KHVzYWdlID09IEdMX1NUQVRJQ19EUkFXKQotICAgIHsKLSAgICAgICAgbVN0YXRpY1ZlcnRleEJ1
ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOwotICAgICAgICBtU3Rh
dGljSW5kZXhCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOwotICAg
IH0KLX0KLQotdm9pZCBCdWZmZXI6OmJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xz
aXplaXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWVtY3B5KG1Db250ZW50cyAr
IG9mZnNldCwgZGF0YSwgc2l6ZSk7Ci0gICAgCi0gICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVy
ICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPnNpemUoKSAhPSAwKSB8fCAobVN0YXRpY0luZGV4QnVm
ZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+c2l6ZSgpICE9IDApKQotICAgIHsKLSAgICAgICAg
aW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Ci0KLSAgICBtVW5tb2RpZmllZERhdGFVc2Ug
PSAwOwotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXIgKkJ1ZmZlcjo6Z2V0U3RhdGljVmVydGV4QnVm
ZmVyKCkKLXsKLSAgICByZXR1cm4gbVN0YXRpY1ZlcnRleEJ1ZmZlcjsKLX0KLQotU3RhdGljSW5k
ZXhCdWZmZXIgKkJ1ZmZlcjo6Z2V0U3RhdGljSW5kZXhCdWZmZXIoKQotewotICAgIHJldHVybiBt
U3RhdGljSW5kZXhCdWZmZXI7Ci19Ci0KLXZvaWQgQnVmZmVyOjppbnZhbGlkYXRlU3RhdGljRGF0
YSgpCi17Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci0gICAgbVN0YXRpY1ZlcnRl
eEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVN0YXRpY0luZGV4QnVmZmVyOwotICAgIG1T
dGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwot
fQotCi0vLyBDcmVhdGVzIHN0YXRpYyBidWZmZXJzIGlmIHN1ZmZpY2llbnQgdXNlZCBkYXRhIGhh
cyBiZWVuIGxlZnQgdW5tb2RpZmllZAotdm9pZCBCdWZmZXI6OnByb21vdGVTdGF0aWNVc2FnZShp
bnQgZGF0YVNpemUpCi17Ci0gICAgaWYgKCFtU3RhdGljVmVydGV4QnVmZmVyICYmICFtU3RhdGlj
SW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVW5tb2RpZmllZERhdGFVc2UgKz0gZGF0YVNp
emU7Ci0KLSAgICAgICAgaWYgKG1Vbm1vZGlmaWVkRGF0YVVzZSA+IDMgKiBtU2l6ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhC
dWZmZXIoZ2V0RGV2aWNlKCkpOwotICAgICAgICAgICAgbVN0YXRpY0luZGV4QnVmZmVyID0gbmV3
IFN0YXRpY0luZGV4QnVmZmVyKGdldERldmljZSgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZm
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMTljNGUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEJ1ZmZlci5oOiBEZWZpbmVz
IHRoZSBnbDo6QnVmZmVyIGNsYXNzLCByZXByZXNlbnRpbmcgc3RvcmFnZSBvZiB2ZXJ0ZXggYW5k
L29yCi0vLyBpbmRleCBkYXRhLiBJbXBsZW1lbnRzIEdMIGJ1ZmZlciBvYmplY3RzIGFuZCByZWxh
dGVkIGZ1bmN0aW9uYWxpdHkuCi0vLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkgcGFn
ZSAyMS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfQlVGRkVSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9C
VUZGRVJfSF8KLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jZGVm
aW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0KLW5h
bWVzcGFjZSBnbAotewotY2xhc3MgU3RhdGljVmVydGV4QnVmZmVyOwotY2xhc3MgU3RhdGljSW5k
ZXhCdWZmZXI7Ci0KLWNsYXNzIEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAotewotICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQnVmZmVyKEdMdWludCBpZCk7Ci0KLSAgICB2aXJ0dWFsIH5C
dWZmZXIoKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVp
cHRyIHNpemUsIEdMZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZv
aWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKLQotICAgIHZvaWQg
KmRhdGEoKSB7IHJldHVybiBtQ29udGVudHM7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1TaXplOyB9Ci0gICAgR0xlbnVtIHVzYWdlKCkgY29uc3QgeyByZXR1cm4gbVVzYWdl
OyB9Ci0KLSAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpOwot
ICAgIFN0YXRpY0luZGV4QnVmZmVyICpnZXRTdGF0aWNJbmRleEJ1ZmZlcigpOwotICAgIHZvaWQg
aW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB2b2lkIHByb21vdGVTdGF0aWNVc2FnZShpbnQg
ZGF0YVNpemUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1
ZmZlcik7Ci0KLSAgICBHTHVieXRlICptQ29udGVudHM7Ci0gICAgR0xzaXplaXB0ciBtU2l6ZTsK
LSAgICBHTGVudW0gbVVzYWdlOwotCi0gICAgU3RhdGljVmVydGV4QnVmZmVyICptU3RhdGljVmVy
dGV4QnVmZmVyOwotICAgIFN0YXRpY0luZGV4QnVmZmVyICptU3RhdGljSW5kZXhCdWZmZXI7Ci0g
ICAgR0xzaXplaXB0ciBtVW5tb2RpZmllZERhdGFVc2U7Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8v
IExJQkdMRVNWMl9CVUZGRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWM2
MDc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzM5ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFz
cywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nCi0vLyByZW5kZXJpbmcgb3Bl
cmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENv
bnRleHQuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvRnJhbWVCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRl
eERhdGFNYW5hZ2VyLmgiCi0KLSN1bmRlZiBuZWFyCi0jdW5kZWYgZmFyCi0KLW5hbWVzcGFjZSBn
bAotewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBn
bDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RB
Y2Nlc3MpIDogbUNvbmZpZyhjb25maWcpCi17Ci0gICAgQVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBm
YWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAotCi0gICAgbURpc3BsYXkgPSBOVUxMOwotICAgIG1E
ZXZpY2UgPSBOVUxMOwotCi0gICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUo
MCk7Ci0KLSAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwotCi0gICAg
bVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7Ci0gICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlID0gMDsKLQotICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5jdWxs
TW9kZSA9IEdMX0JBQ0s7Ci0gICAgbVN0YXRlLmZyb250RmFjZSA9IEdMX0NDVzsKLSAgICBtU3Rh
dGUuZGVwdGhUZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLmRlcHRoRnVuYyA9IEdMX0xFU1M7Ci0g
ICAgbVN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNvdXJjZUJsZW5kUkdCID0gR0xf
T05FOwotICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIG1TdGF0ZS5k
ZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pF
Uk87Ci0gICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsKLSAgICBtU3Rh
dGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgbVN0YXRlLmJsZW5kQ29s
b3IucmVkID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IDA7Ci0gICAgbVN0YXRl
LmJsZW5kQ29sb3IuYmx1ZSA9IDA7Ci0gICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgPSAwOwot
ICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGZhbHNlOwotICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9
IEdMX0FMV0FZUzsKLSAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5j
aWxNYXNrID0gLTE7Ci0gICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgPSAtMTsKLSAgICBtU3Rh
dGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Jl
ZiA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IC0gMTsKLSAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tXcml0ZW1hc2sgPSAtMTsKLSAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBHTF9LRUVQ
OwotICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IEdMX0tFRVA7Ci0gICAgbVN0YXRl
LnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tG
YWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gR0xf
S0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gR0xfS0VFUDsKLSAg
ICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBmYWxzZTsKLSAgICBtU3RhdGUucG9seWdvbk9m
ZnNldEZhY3RvciA9IDAuMGY7Ci0gICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IDAuMGY7
Ci0gICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZSA9IGZhbHNlOwotICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0g
MS4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgPSBmYWxzZTsKLSAgICBtU3Rh
dGUuc2Npc3NvclRlc3QgPSBmYWxzZTsKLSAgICBtU3RhdGUuZGl0aGVyID0gdHJ1ZTsKLSAgICBt
U3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gR0xfRE9OVF9DQVJFOwotICAgIG1TdGF0ZS5mcmFn
bWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gR0xfRE9OVF9DQVJFOwotCi0gICAgbVN0YXRlLmxp
bmVXaWR0aCA9IDEuMGY7Ci0KLSAgICBtU3RhdGUudmlld3BvcnRYID0gMDsKLSAgICBtU3RhdGUu
dmlld3BvcnRZID0gMDsKLSAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IGNvbmZpZy0+bURpc3Bs
YXlNb2RlLldpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGNvbmZpZy0+bURpc3Bs
YXlNb2RlLkhlaWdodDsKLSAgICBtU3RhdGUuek5lYXIgPSAwLjBmOwotICAgIG1TdGF0ZS56RmFy
ID0gMS4wZjsKLQotICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7Ci0gICAgbVN0YXRlLnNjaXNzb3JZ
ID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvcldpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lk
dGg7Ci0gICAgbVN0YXRlLnNjaXNzb3JIZWlnaHQgPSBjb25maWctPm1EaXNwbGF5TW9kZS5IZWln
aHQ7Ci0KLSAgICBtU3RhdGUuY29sb3JNYXNrUmVkID0gdHJ1ZTsKLSAgICBtU3RhdGUuY29sb3JN
YXNrR3JlZW4gPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlID0gdHJ1ZTsKLSAgICBt
U3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwotICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVl
OwotCi0gICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVJlc291
cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKLSAgICAgICAgbVJl
c291cmNlTWFuYWdlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7Ci0gICAgfQotCi0gICAg
Ly8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6Ci0gICAgLy8gSW4gdGhl
IGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVfQ1VCRV9NQVAgaGF2ZSB0d29k
aW1lbnNpb25hbAotICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZlY3RvcnMgcmVz
cGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgotICAgIC8vIEluIG9yZGVyIHRoYXQgYWNj
ZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkgYXJlIHRyZWF0
ZWQgYXMgdGV4dHVyZQotICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3NlIG5hbWVzIGFyZSAwLgot
Ci0gICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOwotICAgIG1UZXh0dXJl
Q3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcCgwKSk7Ci0KLSAgICBtU3RhdGUuYWN0
aXZlU2FtcGxlciA9IDA7Ci0gICAgYmluZEFycmF5QnVmZmVyKDApOwotICAgIGJpbmRFbGVtZW50
QXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwotICAgIGJpbmRUZXh0
dXJlMkQoMCk7Ci0gICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKLSAgICBiaW5kRHJhd0ZyYW1l
YnVmZmVyKDApOwotICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7Ci0KLSAgICBtU3RhdGUuY3VycmVu
dFByb2dyYW0gPSAwOwotCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0
ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0g
ZmFsc2U7Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1JbmRleERhdGFN
YW5hZ2VyID0gTlVMTDsKLSAgICBtQmxpdCA9IE5VTEw7Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxM
OwotCi0gICAgbUludmFsaWRFbnVtID0gZmFsc2U7Ci0gICAgbUludmFsaWRWYWx1ZSA9IGZhbHNl
OwotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0gICAgbU91dE9mTWVtb3J5ID0gZmFs
c2U7Ci0gICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgbUhh
c0JlZW5DdXJyZW50ID0gZmFsc2U7Ci0gICAgbUNvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAgbVJl
c2V0U3RhdHVzID0gR0xfTk9fRVJST1I7Ci0gICAgbVJlc2V0U3RyYXRlZ3kgPSAobm90aWZ5UmVz
ZXRzID8gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCA6IEdMX05PX1JFU0VUX05PVElGSUNB
VElPTl9FWFQpOwotICAgIG1Sb2J1c3RBY2Nlc3MgPSByb2J1c3RBY2Nlc3M7Ci0KLSAgICBtU3Vw
cG9ydHNEWFQxVGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBm
YWxzZTsKLSAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNF
dmVudFF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzID0gZmFs
c2U7Ci0gICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7Ci0gICAgbU1heFN1cHBv
cnRlZFNhbXBsZXMgPSAwOwotICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOwotICAg
IG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLUNvbnRleHQ6On5Db250ZXh0KCkKLXsKLSAgICBp
ZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICE9IDApCi0gICAgewotICAgICAgICBQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVu
dFByb2dyYW0pOwotICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcHJvZ3JhbU9iamVjdC0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgICAgIG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRnJhbWVidWZmZXJN
YXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZl
ck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1w
dHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJz
dCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUXVlcnlNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAg
d2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZWxl
dGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNvbmQ7Ci0gICAgICAgIG1NdWx0
aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpKTsKLSAgICB9
Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVfVFlQRV9DT1VOVDsgdHlw
ZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEY7IHNhbXBsZXIrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLnNldChOVUxM
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVY
VFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBtSW5jb21wbGV0ZVRleHR1
cmVzW3R5cGVdLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmFj
dGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBtU3RhdGUuYXJyYXlCdWZmZXIu
c2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAg
IG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwotCi0gICAgbVRleHR1cmUyRFplcm8uc2V0
KE5VTEwpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOwotCi0gICAgZGVsZXRl
IG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7Ci0gICAg
ZGVsZXRlIG1CbGl0OwotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLQotICAgIGlmIChtTWFza2Vk
Q2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+
UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVhc2UoKTsKLX0K
LQotdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6
U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBtRGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgbURldmlj
ZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgIGlmICghbUhhc0JlZW5DdXJyZW50KQot
ICAgIHsKLSAgICAgICAgbURldmljZUNhcHMgPSBtRGlzcGxheS0+Z2V0RGV2aWNlQ2FwcygpOwot
Ci0gICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlz
LCBtRGV2aWNlKTsKLSAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFu
YWdlcih0aGlzLCBtRGV2aWNlKTsKLSAgICAgICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKLQot
ICAgICAgICBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZl
cnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsKLSAgICAgICAgbVN1cHBvcnRzVmVydGV4VGV4
dHVyZSA9IG1EaXNwbGF5LT5nZXRWZXJ0ZXhUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3Vw
cG9ydHNOb25Qb3dlcjJUZXh0dXJlID0gbURpc3BsYXktPmdldE5vblBvd2VyMlRleHR1cmVTdXBw
b3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtRGlzcGxheS0+Z2V0SW5zdGFu
Y2luZ1N1cHBvcnQoKTsKLQotICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWlu
KHN0ZDo6bWluKChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZVdpZHRoLCAoaW50KW1EZXZpY2VD
YXBzLk1heFRleHR1cmVIZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOwotICAgICAg
ICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihtTWF4VGV4dHVyZURpbWVuc2lv
biwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7Ci0g
ICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4VGV4dHVyZURpbWVuc2lvbjsK
LSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1heFRleHR1cmVEaW1lbnNpb24pICsg
MTsKLSAgICAgICAgVFJBQ0UoIk1heFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1YmVUZXh0dXJl
RGltZW5zaW9uPSVkLCBNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1cmVMZXZl
bD0lZCIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1
cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0dXJlTGV2ZWwp
OwotCi0gICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5kZXJCdWZmZXJGb3JtYXRzW10gPQotICAg
ICAgICB7Ci0gICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRf
WDhSOEc4QjgsCi0gICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAgICAgRDNERk1U
X0QyNFM4Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW50IG1heCA9IDA7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZW9mKHJlbmRlckJ1ZmZlckZvcm1hdHMpIC8gc2l6ZW9mKEQzREZP
Uk1BVCk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJh
eSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAgICAg
IG1EaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQocmVuZGVyQnVmZmVyRm9ybWF0c1tpXSwg
bXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRl
ckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKLQotICAgICAgICAgICAgZm9y
IChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0g
RDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXg7
Ci0KLSAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbURpc3BsYXktPmdldEV2ZW50UXVl
cnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBtRGlzcGxh
eS0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0
dXJlcyA9IG1EaXNwbGF5LT5nZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBv
cnRzRFhUM1RleHR1cmVzID0gbURpc3BsYXktPmdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAg
ICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0RFhUNVRleHR1cmVTdXBw
b3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZtU3Vw
cG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzKTsKLSAgICAgICAgbVN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRz
RmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMp
OwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXRMdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRl
eHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKLSAg
ICAgICAgbVN1cHBvcnRzRGVwdGhUZXh0dXJlcyA9IG1EaXNwbGF5LT5nZXREZXB0aFRleHR1cmVT
dXBwb3J0KCk7Ci0KLSAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbURldmljZUNhcHMu
TWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwotCi0gICAgICAgIG1OdW1Db21wcmVzc2VkVGV4
dHVyZUZvcm1hdHMgPSAwOwotICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyArPSAyOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDE7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgKz0gMTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAgICAgICAgaW5pdFJlbmRlcmVyU3RyaW5n
KCk7Ci0KLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7Ci0gICAgICAgIG1TdGF0ZS52aWV3
cG9ydFkgPSAwOwotICAgICAgICBtU3RhdGUudmlld3BvcnRXaWR0aCA9IHN1cmZhY2UtPmdldFdp
ZHRoKCk7Ci0gICAgICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdo
dCgpOwotCi0gICAgICAgIG1TdGF0ZS5zY2lzc29yWCA9IDA7Ci0gICAgICAgIG1TdGF0ZS5zY2lz
c29yWSA9IDA7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0
aCgpOwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IHN1cmZhY2UtPmdldEhlaWdodCgp
OwotCi0gICAgICAgIG1IYXNCZWVuQ3VycmVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gV3Jh
cCB0aGUgZXhpc3RpbmcgRGlyZWN0M0QgOSByZXNvdXJjZXMgaW50byBHTCBvYmplY3RzIGFuZCBh
c3NpZ24gdGhlbSB0byB0aGUgJzAnIG5hbWVzCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlZmF1
bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gc3VyZmFjZS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0K
LSAgICBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXJaZXJvID0gbmV3IENvbG9yYnVmZmVyKGRlZmF1
bHRSZW5kZXJUYXJnZXQpOwotICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2lsYnVm
ZmVyWmVybyA9IG5ldyBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsKLSAgICBGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlcihjb2xvcmJ1
ZmZlclplcm8sIGRlcHRoU3RlbmNpbGJ1ZmZlclplcm8pOwotCi0gICAgc2V0RnJhbWVidWZmZXJa
ZXJvKGZyYW1lYnVmZmVyWmVybyk7Ci0KLSAgICBpZiAoZGVmYXVsdFJlbmRlclRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoZGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNl
KCk7Ci0gICAgfQotICAgIAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLS8vIFRoaXMg
ZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxhdGVkIGRpcnR5IGZsYWdzLCBz
byB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJlLWRyYXcuCi12b2lkIENvbnRl
eHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKLXsKLSAgICBmb3IgKGludCB0ID0gMDsgdCA8IE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTOyB0KyspCi0gICAgewotICAgICAgICBtQXBwbGllZFRleHR1cmVT
ZXJpYWxQU1t0XSA9IDA7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgdCA9IDA7IHQgPCBNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyB0KyspCi0gICAgewotICAgICAgICBtQXBwbGll
ZFRleHR1cmVTZXJpYWxWU1t0XSA9IDA7Ci0gICAgfQotCi0gICAgbUFwcGxpZWRQcm9ncmFtU2Vy
aWFsID0gMDsKLSAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IDA7Ci0gICAgbUFwcGxp
ZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFs
ID0gMDsKLSAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKLSAgICBtRGVwdGhTdGVuY2lsSW5pdGlh
bGl6ZWQgPSBmYWxzZTsKLSAgICBtVmlld3BvcnRJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIG1S
ZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIG1WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7Ci0KLSAgICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1
ZTsKLSAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0
cnVlOwotICAgIG1NYXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbUJsZW5kU3RhdGVEaXJ0eSA9
IHRydWU7Ci0gICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtUG9seWdvbk9mZnNl
dFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
bVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsK
LSAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVl
OwotICAgIG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6
bWFya0R4VW5pZm9ybXNEaXJ0eSgpCi17Ci0gICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6bWFya0NvbnRleHRMb3N0KCkKLXsKLSAgICBpZiAobVJlc2V0U3Ry
YXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCkKLSAgICAgICAgbVJlc2V0U3Rh
dHVzID0gR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VYVDsKLSAgICBtQ29udGV4dExvc3QgPSB0
cnVlOwotfQotCi1ib29sIENvbnRleHQ6OmlzQ29udGV4dExvc3QoKQotewotICAgIHJldHVybiBt
Q29udGV4dExvc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQs
IGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKLSAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVu
ID0gZ3JlZW47Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlID0gYmx1ZTsKLSAgICBt
U3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhID0gYWxwaGE7Ci19Ci0KLXZvaWQgQ29udGV4dDo6
c2V0Q2xlYXJEZXB0aChmbG9hdCBkZXB0aCkKLXsKLSAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVl
ID0gZGVwdGg7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q2xlYXJTdGVuY2lsKGludCBzdGVuY2ls
KQotewotICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuY3Vs
bEZhY2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5jdWxsRmFjZSA9IGVuYWJs
ZWQ7Ci0gICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENv
bnRleHQ6OmlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLmN1
bGxGYWNlOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1bGxNb2RlKEdMZW51bSBtb2RlKQotewot
ICAgIGlmIChtU3RhdGUuY3VsbE1vZGUgIT0gbW9kZSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5j
dWxsTW9kZSA9IG1vZGU7Ci0gICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OnNldEZyb250RmFjZShHTGVudW0gZnJvbnQpCi17Ci0gICAgaWYg
KG1TdGF0ZS5mcm9udEZhY2UgIT0gZnJvbnQpCi0gICAgewotICAgICAgICBtU3RhdGUuZnJvbnRG
YWNlID0gZnJvbnQ7Ci0gICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQot
Ci12b2lkIENvbnRleHQ6OnNldERlcHRoVGVzdChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1T
dGF0ZS5kZXB0aFRlc3QgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kZXB0aFRl
c3QgPSBlbmFibGVkOwotICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19
Ci0KLWJvb2wgQ29udGV4dDo6aXNEZXB0aFRlc3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN0YXRlLmRlcHRoVGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aEZ1bmMoR0xl
bnVtIGRlcHRoRnVuYykKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoRnVuYyAhPSBkZXB0aEZ1bmMp
Ci0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhGdW5jID0gZGVwdGhGdW5jOwotICAgICAgICBt
RGVwdGhTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVw
dGhSYW5nZShmbG9hdCB6TmVhciwgZmxvYXQgekZhcikKLXsKLSAgICBtU3RhdGUuek5lYXIgPSB6
TmVhcjsKLSAgICBtU3RhdGUuekZhciA9IHpGYXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Qmxl
bmQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuYmxlbmQgIT0gZW5hYmxlZCkKLSAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1CbGVuZFN0YXRl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0JsZW5kRW5hYmxlZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5ibGVuZDsKLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBz
b3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSkKLXsKLSAgICBpZiAobVN0YXRlLnNvdXJjZUJs
ZW5kUkdCICE9IHNvdXJjZVJHQiB8fAotICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSAh
PSBzb3VyY2VBbHBoYSB8fAotICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCICE9IGRlc3RSR0Ig
fHwKLSAgICAgICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhICE9IGRlc3RBbHBoYSkKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IHNvdXJjZVJHQjsKLSAgICAgICAgbVN0YXRl
LmRlc3RCbGVuZFJHQiA9IGRlc3RSR0I7Ci0gICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhh
ID0gc291cmNlQWxwaGE7Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IGRlc3RBbHBo
YTsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENv
bnRleHQ6OnNldEJsZW5kQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwg
ZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5ibGVuZENvbG9yLnJlZCAhPSByZWQgfHwK
LSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuZ3JlZW4gIT0gZ3JlZW4gfHwKLSAgICAgICAgbVN0
YXRlLmJsZW5kQ29sb3IuYmx1ZSAhPSBibHVlIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9y
LmFscGhhICE9IGFscGhhKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IucmVkID0g
cmVkOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbiA9IGdyZWVuOwotICAgICAgICBt
U3RhdGUuYmxlbmRDb2xvci5ibHVlID0gYmx1ZTsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3Iu
YWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVxdWF0aW9uLCBH
TGVudW0gYWxwaGFFcXVhdGlvbikKLXsKLSAgICBpZiAobVN0YXRlLmJsZW5kRXF1YXRpb25SR0Ig
IT0gcmdiRXF1YXRpb24gfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSAhPSBh
bHBoYUVxdWF0aW9uKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBy
Z2JFcXVhdGlvbjsKLSAgICAgICAgbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IGFscGhhRXF1
YXRpb247Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRTdGVuY2lsVGVzdChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0
ZS5zdGVuY2lsVGVzdCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxU
ZXN0ID0gZW5hYmxlZDsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTdGVuY2lsVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtU3RhdGUuc3RlbmNpbFRlc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNp
bFBhcmFtcyhHTGVudW0gc3RlbmNpbEZ1bmMsIEdMaW50IHN0ZW5jaWxSZWYsIEdMdWludCBzdGVu
Y2lsTWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxGdW5jICE9IHN0ZW5jaWxGdW5jIHx8
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmICE9IHN0ZW5jaWxSZWYgfHwKLSAgICAgICAgbVN0
YXRlLnN0ZW5jaWxNYXNrICE9IHN0ZW5jaWxNYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0
ZW5jaWxGdW5jID0gc3RlbmNpbEZ1bmM7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUmVmID0gKHN0
ZW5jaWxSZWYgPiAwKSA/IHN0ZW5jaWxSZWYgOiAwOwotICAgICAgICBtU3RhdGUuc3RlbmNpbE1h
c2sgPSBzdGVuY2lsTWFzazsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJhY2tQYXJhbXMoR0xlbnVtIHN0ZW5j
aWxCYWNrRnVuYywgR0xpbnQgc3RlbmNpbEJhY2tSZWYsIEdMdWludCBzdGVuY2lsQmFja01hc2sp
Ci17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgIT0gc3RlbmNpbEJhY2tGdW5jIHx8
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1JlZiAhPSBzdGVuY2lsQmFja1JlZiB8fAotICAg
ICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrICE9IHN0ZW5jaWxCYWNrTWFzaykKLSAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBzdGVuY2lsQmFja0Z1bmM7Ci0gICAgICAg
IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA9IChzdGVuY2lsQmFja1JlZiA+IDApID8gc3RlbmNpbEJh
Y2tSZWYgOiAwOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gc3RlbmNpbEJhY2tN
YXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRTdGVuY2lsV3JpdGVtYXNrKEdMdWludCBzdGVuY2lsV3JpdGVtYXNrKQot
ewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAhPSBzdGVuY2lsV3JpdGVtYXNrKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgPSBzdGVuY2lsV3JpdGVtYXNr
OwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRTdGVuY2lsQmFja1dyaXRlbWFzayhHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1h
c2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayAhPSBzdGVuY2lsQmFj
a1dyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9
IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsT3BlcmF0aW9ucyhHTGVudW0g
c3RlbmNpbEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxQ
YXNzRGVwdGhQYXNzKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEZhaWwgIT0gc3RlbmNpbEZh
aWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsICE9IHN0ZW5jaWxQYXNz
RGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyAhPSBzdGVu
Y2lsUGFzc0RlcHRoUGFzcykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IHN0
ZW5jaWxGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBzdGVuY2ls
UGFzc0RlcHRoRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gc3Rl
bmNpbFBhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0g
ICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrT3BlcmF0aW9ucyhHTGVudW0g
c3RlbmNpbEJhY2tGYWlsLCBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsLCBHTGVudW0g
c3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbEJhY2tG
YWlsICE9IHN0ZW5jaWxCYWNrRmFpbCB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhGYWlsICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCB8fAotICAgICAgICBtU3RhdGUu
c3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykKLSAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBzdGVuY2lsQmFja0ZhaWw7Ci0g
ICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBzdGVuY2lsQmFja1Bhc3NE
ZXB0aEZhaWw7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBzdGVu
Y2lsQmFja1Bhc3NEZXB0aFBhc3M7Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFBvbHlnb25PZmZzZXRGaWxsKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsICE9IGVuYWJsZWQpCi0g
ICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZpbGwgPSBlbmFibGVkOwotICAgICAg
ICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250
ZXh0Ojppc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsKLQotfQotCi12b2lkIENvbnRleHQ6OnNldFBvbHlnb25P
ZmZzZXRQYXJhbXMoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpCi17Ci0gICAgaWYgKG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yICE9IGZhY3RvciB8fAotICAgICAgICBtU3RhdGUucG9s
eWdvbk9mZnNldFVuaXRzICE9IHVuaXRzKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnBvbHlnb25P
ZmZzZXRGYWN0b3IgPSBmYWN0b3I7Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMg
PSB1bml0czsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSAhPSBlbmFibGVkKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGVuYWJsZWQ7Ci0g
ICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4
dDo6aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTYW1w
bGVDb3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFn
ZSAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZW5h
YmxlZDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9v
bCBDb250ZXh0Ojppc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTYW1wbGVDb3Zl
cmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBpbnZlcnQpCi17Ci0gICAgaWYgKG1TdGF0
ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IHZhbHVlIHx8Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZUludmVydCAhPSBpbnZlcnQpCi0gICAgewotICAgICAgICBtU3RhdGUuc2FtcGxlQ292
ZXJhZ2VWYWx1ZSA9IHZhbHVlOwotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQg
PSBpbnZlcnQ7Ci0gICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LXZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmICht
U3RhdGUuc2Npc3NvclRlc3QgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zY2lz
c29yVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7Ci0g
ICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2Npc3NvclRlc3RFbmFibGVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN0YXRlLnNjaXNzb3JUZXN0OwotfQotCi12b2lkIENvbnRleHQ6OnNldERp
dGhlcihib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5kaXRoZXIgIT0gZW5hYmxlZCkK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5kaXRoZXIgPSBlbmFibGVkOwotICAgICAgICBtRGl0aGVy
U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzRGl0aGVyRW5h
YmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kaXRoZXI7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0TGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpCi17Ci0gICAgbVN0YXRlLmxpbmVXaWR0
aCA9IHdpZHRoOwotfQotCi12b2lkIENvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGludChHTGVu
dW0gaGludCkKLXsKLSAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50ID0gaGludDsKLX0KLQot
dm9pZCBDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50KEdMZW51bSBoaW50
KQotewotICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50ID0gaGludDsKLSAg
ICAvLyBUT0RPOiBQcm9wYWdhdGUgdGhlIGhpbnQgdG8gc2hhZGVyIHRyYW5zbGF0b3Igc28gd2Ug
Y2FuIHdyaXRlCi0gICAgLy8gZGR4LCBkZHhfY29hcnNlLCBvciBkZHhfZmluZSBkZXBlbmRpbmcg
b24gdGhlIGhpbnQuCi0gICAgLy8gSWdub3JlIGZvciBub3cuIEl0IGlzIHZhbGlkIGZvciBpbXBs
ZW1lbnRhdGlvbnMgdG8gaWdub3JlIGhpbnQuCi19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Vmlld3Bv
cnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0WSA9IHk7
Ci0gICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsKLSAgICBtU3RhdGUudmlld3BvcnRI
ZWlnaHQgPSBoZWlnaHQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyhHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAo
bVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZICE9IHkgfHwgCi0gICAgICAg
IG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRlLnNjaXNzb3JIZWlnaHQgIT0g
aGVpZ2h0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0geDsKLSAgICAgICAgbVN0
YXRlLnNjaXNzb3JZID0geTsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHdpZHRoOwot
ICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbVNjaXNzb3JT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q29sb3JNYXNr
KGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCi17Ci0gICAgaWYg
KG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAhPSBn
cmVlbiB8fAotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAhPSBibHVlIHx8IG1TdGF0ZS5j
b2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tS
ZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IGdyZWVuOwotICAgICAg
ICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tB
bHBoYSA9IGFscGhhOwotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0K
LQotdm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQotewotICAgIGlmIChtU3Rh
dGUuZGVwdGhNYXNrICE9IG1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhNYXNrID0g
bWFzazsKLSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcih1bnNpZ25lZCBpbnQgYWN0aXZlKQotewotICAgIG1T
dGF0ZS5hY3RpdmVTYW1wbGVyID0gYWN0aXZlOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0UmVh
ZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFt
ZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7Ci19Ci0KLUdMdWlu
dCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBt
U3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1
ZmZlckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgp
OwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRhcmdldCkgY29u
c3QKLXsKLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBOVUxMOwotICAgIAotICAgIHN3aXRjaCAo
dGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAg
ICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNf
UEFTU0VEXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5h
Y3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFXS5nZXQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZmFsc2UpOwot
ICAgIH0KLQotICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBxdWVy
eU9iamVjdC0+aWQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubUFycmF5RW5hYmxlZCA9IGVuYWJsZWQ7Ci19Ci0KLWNvbnN0
IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQg
aW50IGF0dHJpYk51bSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVk
IGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQotewotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsKLSAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVNpemUgPSBzaXplOwotICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7Ci0gICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKLSAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVN0cmlkZSA9IHN0cmlkZTsKLSAg
ICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIgPSBwb2ludGVyOwot
fQotCi1jb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVk
IGludCBhdHRyaWJOdW0pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tUG9pbnRlcjsKLX0KLQotY29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkg
JkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMoKQotewotICAgIHJldHVybiBtU3RhdGUudmVy
dGV4QXR0cmlidXRlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFBhY2tBbGlnbm1lbnQoR0xpbnQg
YWxpZ25tZW50KQotewotICAgIG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OwotfQot
Ci1HTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVN0YXRlLnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0VW5wYWNrQWxpZ25t
ZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gYWxp
Z25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25tZW50OwotfQotCi12b2lkIENvbnRleHQ6
OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpCi17Ci0gICAgbVN0
YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7Ci19Ci0KLWJvb2wgQ29u
dGV4dDo6Z2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0
ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVy
KCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlQnVmZmVyKCk7Ci19Ci0K
LUdMdWludCBDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNl
TWFuYWdlci0+Y3JlYXRlUHJvZ3JhbSgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlU2hh
ZGVyKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVT
aGFkZXIodHlwZSk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZSgpOwotfQotCi1HTHVpbnQg
Q29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFu
YWdlci0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIGZy
YW1lYnVmZmVyIG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0g
ICAgR0x1aW50IGhhbmRsZSA9IG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgp
OwotCi0gICAgbUZyYW1lYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhh
bmRsZTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZlbmNlKCkKLXsKLSAgICBHTHVpbnQg
aGFuZGxlID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtRmVuY2VN
YXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtRGlzcGxheSk7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwot
fQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBxdWVyeSBuYW1lCi1HTHVpbnQgQ29udGV4dDo6Y3Jl
YXRlUXVlcnkoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtUXVlcnlIYW5kbGVBbGxvY2F0b3Iu
YWxsb2NhdGUoKTsKLQotICAgIG1RdWVyeU1hcFtoYW5kbGVdID0gTlVMTDsKLQotICAgIHJldHVy
biBoYW5kbGU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIp
Ci17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihidWZmZXIpKQotICAgIHsK
LSAgICAgICAgZGV0YWNoQnVmZmVyKGJ1ZmZlcik7Ci0gICAgfQotICAgIAotICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZUJ1ZmZlcihidWZmZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0
ZVNoYWRlcihHTHVpbnQgc2hhZGVyKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNo
YWRlcihzaGFkZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0oR0x1aW50IHBy
b2dyYW0pCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsK
LSAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBOVUxMOwotfQotCi12b2lkIENvbnRleHQ6OmRl
bGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFnZXIt
PmdldFRleHR1cmUodGV4dHVyZSkpCi0gICAgewotICAgICAgICBkZXRhY2hUZXh0dXJlKHRleHR1
cmUpOwotICAgIH0KLQotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVRleHR1cmUodGV4dHVy
ZSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJi
dWZmZXIpCi17Ci0gICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlcihyZW5k
ZXJidWZmZXIpKQotICAgIHsKLSAgICAgICAgZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZl
cik7Ci0gICAgfQotICAgIAotICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZl
cihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdM
dWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVi
dWZmZXJPYmplY3QgPSBtRnJhbWVidWZmZXJNYXAuZmluZChmcmFtZWJ1ZmZlcik7Ci0KLSAgICBp
ZiAoZnJhbWVidWZmZXJPYmplY3QgIT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAg
ICAgICAgZGV0YWNoRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotCi0gICAgICAgIG1GcmFtZWJ1
ZmZlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZyYW1lYnVmZmVyT2JqZWN0LT5maXJzdCk7Ci0g
ICAgICAgIGRlbGV0ZSBmcmFtZWJ1ZmZlck9iamVjdC0+c2Vjb25kOwotICAgICAgICBtRnJhbWVi
dWZmZXJNYXAuZXJhc2UoZnJhbWVidWZmZXJPYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpkZWxldGVGZW5jZShHTHVpbnQgZmVuY2UpCi17Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9y
IGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVuY2UpOwotCi0gICAgaWYgKGZlbmNlT2Jq
ZWN0ICE9IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1GZW5jZUhhbmRsZUFsbG9j
YXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGRlbGV0ZSBmZW5jZU9i
amVjdC0+c2Vjb25kOwotICAgICAgICBtRmVuY2VNYXAuZXJhc2UoZmVuY2VPYmplY3QpOwotICAg
IH0KLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVRdWVyeShHTHVpbnQgcXVlcnkpCi17Ci0gICAg
UXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5T2JqZWN0ID0gbVF1ZXJ5TWFwLmZpbmQocXVlcnkpOwot
ICAgIGlmIChxdWVyeU9iamVjdCAhPSBtUXVlcnlNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBt
UXVlcnlIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShxdWVyeU9iamVjdC0+Zmlyc3QpOwotICAgICAg
ICBpZiAocXVlcnlPYmplY3QtPnNlY29uZCkKLSAgICAgICAgewotICAgICAgICAgICAgcXVlcnlP
YmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgICAgIG1RdWVyeU1hcC5l
cmFzZShxdWVyeU9iamVjdCk7Ci0gICAgfQotfQotCi1CdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZl
cihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZm
ZXIoaGFuZGxlKTsKLX0KLQotU2hhZGVyICpDb250ZXh0OjpnZXRTaGFkZXIoR0x1aW50IGhhbmRs
ZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0U2hhZGVyKGhhbmRsZSk7Ci19
Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkKLXsKLSAgICBy
ZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5kbGUpOwotfQotCi1UZXh0dXJl
ICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIG1SZXNv
dXJjZU1hbmFnZXItPmdldFRleHR1cmUoaGFuZGxlKTsKLX0KLQotUmVuZGVyYnVmZmVyICpDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291
cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7Ci19Ci0KLUZyYW1lYnVmZmVyICpD
b250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZl
cihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsKLX0KLQotRnJhbWVidWZmZXIgKkNvbnRleHQ6Omdl
dERyYXdGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1Cb3VuZERyYXdGcmFtZWJ1ZmZlcjsK
LX0KLQotdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikK
LXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsK
LQotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12
b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikK
LXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsK
LQotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsK
LX0KLQotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQotewotICAg
IG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVS
RV8yRCk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFj
dGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKLX0KLQotdm9pZCBDb250ZXh0
OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgbVJlc291cmNlTWFu
YWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFX0NVQkUpOwotCi0g
ICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBs
ZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKLX0KLQotdm9pZCBDb250ZXh0OjpiaW5kUmVh
ZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWdldEZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1
ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAgICB9Ci0KLSAgICBtU3RhdGUucmVhZEZyYW1l
YnVmZmVyID0gZnJhbWVidWZmZXI7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZERyYXdGcmFtZWJ1
ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFt
ZWJ1ZmZlcikpCi0gICAgewotICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0g
bmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAgfQotCi0gICAgbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9
IGZyYW1lYnVmZmVyOwotCi0gICAgbUJvdW5kRHJhd0ZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZm
ZXIoZnJhbWVidWZmZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0x1
aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1
ZmZlckFsbG9jYXRpb24ocmVuZGVyYnVmZmVyKTsKLQotICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIu
c2V0KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKLX0KLQotdm9pZCBDb250ZXh0Ojp1
c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIEdMdWludCBwcmlvclByb2dyYW0gPSBt
U3RhdGUuY3VycmVudFByb2dyYW07Ci0gICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3Jh
bTsgICAgICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBiZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZSwg
b3RoZXJ3aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLgotCi0gICAgaWYgKHByaW9yUHJvZ3JhbSAh
PSBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgUHJvZ3JhbSAqbmV3UHJvZ3JhbSA9IG1SZXNvdXJj
ZU1hbmFnZXItPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAgIFByb2dyYW0gKm9sZFByb2dy
YW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByaW9yUHJvZ3JhbSk7Ci0gICAgICAg
IG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IE5VTEw7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkg
PSB0cnVlOwotCi0gICAgICAgIGlmIChuZXdQcm9ncmFtKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBuZXdQcm9ncmFtLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KG9sZFByb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9sZFByb2dyYW0tPnJlbGVhc2Uo
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51
bSB0YXJnZXQsIEdMdWludCBxdWVyeSkKLXsKLSAgICAvLyBGcm9tIEVYVF9vY2NsdXNpb25fcXVl
cnlfYm9vbGVhbjogSWYgQmVnaW5RdWVyeUVYVCBpcyBjYWxsZWQgd2l0aCBhbiA8aWQ+ICAKLSAg
ICAvLyBvZiB6ZXJvLCBpZiB0aGUgYWN0aXZlIHF1ZXJ5IG9iamVjdCBuYW1lIGZvciA8dGFyZ2V0
PiBpcyBub24temVybyAoZm9yIHRoZSAgCi0gICAgLy8gdGFyZ2V0cyBBTllfU0FNUExFU19QQVNT
RURfRVhUIGFuZCBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwgaWYgIAotICAg
IC8vIHRoZSBhY3RpdmUgcXVlcnkgZm9yIGVpdGhlciB0YXJnZXQgaXMgbm9uLXplcm8pLCBpZiA8
aWQ+IGlzIHRoZSBuYW1lIG9mIGFuIAotICAgIC8vIGV4aXN0aW5nIHF1ZXJ5IG9iamVjdCB3aG9z
ZSB0eXBlIGRvZXMgbm90IG1hdGNoIDx0YXJnZXQ+LCBvciBpZiA8aWQ+IGlzIHRoZQotICAgIC8v
IGFjdGl2ZSBxdWVyeSBvYmplY3QgbmFtZSBmb3IgYW55IHF1ZXJ5IHR5cGUsIHRoZSBlcnJvciBJ
TlZBTElEX09QRVJBVElPTiBpcwotICAgIC8vIGdlbmVyYXRlZC4KLQotICAgIC8vIEVuc3VyZSBu
byBvdGhlciBxdWVyaWVzIGFyZSBhY3RpdmUKLSAgICAvLyBOT1RFOiBJZiBvdGhlciBxdWVyaWVz
IHRoYW4gb2NjbHVzaW9uIGFyZSBzdXBwb3J0ZWQsIHdlIHdpbGwgbmVlZCB0byBjaGVjawotICAg
IC8vIHNlcGFyYXRlbHkgdGhhdDoKLSAgICAvLyAgICBhKSBUaGUgcXVlcnkgSUQgcGFzc2VkIGlz
IG5vdCB0aGUgY3VycmVudCBhY3RpdmUgcXVlcnkgZm9yIGFueSB0YXJnZXQvdHlwZQotICAgIC8v
ICAgIGIpIFRoZXJlIGFyZSBubyBhY3RpdmUgcXVlcmllcyBmb3IgdGhlIHJlcXVlc3RlZCB0YXJn
ZXQgKGFuZCBpbiB0aGUgY2FzZQotICAgIC8vICAgICAgIG9mIEdMX0FOWV9TQU1QTEVTX1BBU1NF
RF9FWFQgYW5kIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhULAotICAgIC8v
ICAgICAgIG5vIHF1ZXJ5IG1heSBiZSBhY3RpdmUgZm9yIGVpdGhlciBpZiBnbEJlZ2luUXVlcnkg
dGFyZ2V0cyBlaXRoZXIuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5U
OyBpKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLmdldCgpICE9
IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBRdWVyeVR5cGUgcVR5cGU7Ci0gICAg
c3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURf
RVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9F
WFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJ
VkU7IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFs
c2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0g
Z2V0UXVlcnkocXVlcnksIHRydWUsIHRhcmdldCk7Ci0KLSAgICAvLyBjaGVjayB0aGF0IG5hbWUg
d2FzIG9idGFpbmVkIHdpdGggZ2xHZW5RdWVyaWVzCi0gICAgaWYgKCFxdWVyeU9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQot
Ci0gICAgLy8gY2hlY2sgZm9yIHR5cGUgbWlzbWF0Y2gKLSAgICBpZiAocXVlcnlPYmplY3QtPmdl
dFR5cGUoKSAhPSB0YXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIC8vIHNldCBxdWVyeSBhcyBhY3RpdmUgZm9yIHNw
ZWNpZmllZCB0YXJnZXQKLSAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLnNldChxdWVyeU9i
amVjdCk7Ci0KLSAgICAvLyBiZWdpbiBxdWVyeQotICAgIHF1ZXJ5T2JqZWN0LT5iZWdpbigpOwot
fQotCi12b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgUXVlcnlU
eXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExF
U19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVl
cnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5nZXQoKTsKLQotICAg
IGlmIChxdWVyeU9iamVjdCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBxdWVyeU9iamVjdC0+ZW5kKCk7Ci0K
LSAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLnNldChOVUxMKTsKLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKLXsKLSAgICBkZWxl
dGUgbUZyYW1lYnVmZmVyTWFwWzBdOwotICAgIG1GcmFtZWJ1ZmZlck1hcFswXSA9IGJ1ZmZlcjsK
LSAgICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSAwKQotICAgIHsKLSAgICAgICAgbUJv
dW5kRHJhd0ZyYW1lYnVmZmVyID0gYnVmZmVyOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IG1TdGF0ZS5yZW5kZXJi
dWZmZXIuZ2V0KCk7Ci0gICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9yYWdlKHJlbmRlcmJ1
ZmZlcik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25l
ZCBpbnQgaGFuZGxlKQotewotICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZl
ciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIg
PT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+c2Vjb25k
OwotICAgIH0KLX0KLQotRmVuY2UgKkNvbnRleHQ6OmdldEZlbmNlKHVuc2lnbmVkIGludCBoYW5k
bGUpCi17Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0gbUZlbmNlTWFwLmZpbmQoaGFu
ZGxlKTsKLQotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VNYXAuZW5kKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZl
bmNlLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1RdWVyeSAqQ29udGV4dDo6Z2V0UXVlcnkodW5zaWdu
ZWQgaW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51bSB0eXBlKQotewotICAgIFF1ZXJ5TWFw
OjppdGVyYXRvciBxdWVyeSA9IG1RdWVyeU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAocXVl
cnkgPT0gbVF1ZXJ5TWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghcXVlcnktPnNlY29uZCAmJiBjcmVhdGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5LT5zZWNvbmQgPSBuZXcgUXVlcnkoaGFuZGxl
LCB0eXBlKTsKLSAgICAgICAgICAgIHF1ZXJ5LT5zZWNvbmQtPmFkZFJlZigpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBxdWVyeS0+c2Vjb25kOwotICAgIH0KLX0KLQotQnVmZmVyICpDb250
ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5n
ZXQoKTsKLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKQotewot
ICAgIHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwotfQotCi1Qcm9ncmFt
ICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCi17Ci0gICAgaWYgKCFtQ2FjaGVkQ3VycmVu
dFByb2dyYW0pCi0gICAgewotICAgICAgICBtQ2FjaGVkQ3VycmVudFByb2dyYW0gPSBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7Ci0gICAgfQotICAg
IHJldHVybiBtQ2FjaGVkQ3VycmVudFByb2dyYW07Ci19Ci0KLVRleHR1cmUyRCAqQ29udGV4dDo6
Z2V0VGV4dHVyZTJEKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTJEKj4oZ2V0
U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkQpKTsKLX0KLQot
VGV4dHVyZUN1YmVNYXAgKkNvbnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKCkKLXsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUu
YWN0aXZlU2FtcGxlciwgVEVYVFVSRV9DVUJFKSk7Ci19Ci0KLVRleHR1cmUgKkNvbnRleHQ6Omdl
dFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKQot
ewotICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVy
XS5pZCgpOwotCi0gICAgaWYgKHRleGlkID09IDApICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVy
cyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBiYXNlZCBvbiB0aGUgdGFyZ2V0Ci0gICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogcmV0dXJuIG1UZXh0dXJl
MkRaZXJvLmdldCgpOwotICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiByZXR1cm4gbVRleHR1
cmVDdWJlTWFwWmVyby5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uZ2V0KCk7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcykKLXsKLSAgICBz
d2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOiAgICAg
ICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOiAgICAqcGFyYW1zID0gbVN0
YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RF
UFRIX1dSSVRFTUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNrOyAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOgotICAg
ICAgICBwYXJhbXNbMF0gPSBtU3RhdGUuY29sb3JNYXNrUmVkOwotICAgICAgICBwYXJhbXNbMV0g
PSBtU3RhdGUuY29sb3JNYXNrR3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xv
ck1hc2tCbHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuY29sb3JNYXNrQWxwaGE7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICpwYXJhbXMgPSBtU3RhdGUucG9s
eWdvbk9mZnNldEZpbGw7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FNUExFX0FM
UEhBX1RPX0NPVkVSQUdFOiAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2Np
c3NvclRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9U
RVNUOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsVGVzdDsgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmRlcHRoVGVzdDsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxl
bmQ7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRElUSEVSOiAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kaXRoZXI7ICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUOiAq
cGFyYW1zID0gbVJvYnVzdEFjY2VzcyA/IEdMX1RSVUUgOiBHTF9GQUxTRTsgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAq
cGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBERVBUSF9DTEVBUl9WQUxVRSBpcyBpbmNs
dWRlZCBpbiBvdXIgaW50ZXJuYWwgZ2V0RmxvYXR2IGltcGxlbWVudGF0aW9uCi0gICAgLy8gYmVj
YXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBH
TCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8vIEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVl
cnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUgY29udmVyc2lvbiBpbiBhbnkKLSAgICAv
LyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBw
bGljYXRpb24uCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0xJTkVf
V0lEVEg6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5saW5lV2lkdGg7ICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRTogICAgKnBhcmFt
cyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RF
UFRIX0NMRUFSX1ZBTFVFOiAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjogICAgKnBh
cmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0
VW5pdHM7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToK
LSAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU47Ci0g
ICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgotICAg
ICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTjsKLSAgICAg
ICAgcGFyYW1zWzFdID0gc3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/IGdsOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0VfTUFYX1NNMyA6IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NN
MjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOgotICAgICAgICBw
YXJhbXNbMF0gPSBtU3RhdGUuek5lYXI7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS56RmFy
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAg
ICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkOwotICAgICAgICBwYXJh
bXNbMV0gPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuOwotICAgICAgICBwYXJhbXNbMl0g
PSBtU3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWU7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0
ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9DT0xPUjoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmJsZW5kQ29sb3IucmVkOwot
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUuYmxlbmRDb2xvci5ncmVlbjsKLSAgICAgICAgcGFy
YW1zWzJdID0gbVN0YXRlLmJsZW5kQ29sb3IuYmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0
YXRlLmJsZW5kQ29sb3IuYWxwaGE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAg
ICAvLyBQbGVhc2Ugbm90ZTogREVQVEhfQ0xFQVJfVkFMVUUgaXMgbm90IGluY2x1ZGVkIGluIG91
ciBpbnRlcm5hbCBnZXRJbnRlZ2VydiBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGJlY2F1c2UgaXQg
aXMgc3RvcmVkIGFzIGEgZmxvYXQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgR0wgRVMgMi4w
IHNwZWMgbmFtZXMKLSAgICAvLyBHZXRJbnRlZ2VydiBhcyBpdHMgbmF0aXZlIHF1ZXJ5IGZ1bmN0
aW9uLiBBcyBpdCB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24gaW4gYW55Ci0gICAgLy8gY2FzZSwg
dGhpcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9u
LiBZb3UgbWF5IGZpbmQgaXQgaW4gCi0gICAgLy8gQ29udGV4dDo6Z2V0RmxvYXR2LgotICAgIHN3
aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAg
ICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOyAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICpwYXJhbXMg
PSBnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzogKnBhcmFtcyA9IGdldE1heGlt
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IGdldE1heGltdW1WZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lN
QUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
OyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUzogICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOyAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkU6ICAgICAgICAgICAg
KnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKTsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFyYW1zID0g
MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkgZm9ybWF0
cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BUlJBWV9C
VUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1ZmZlci5p
ZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVG
RkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgp
OyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOiAgICAg
ICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19B
TkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBh
cmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0
YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
UkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucmVuZGVy
YnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVVJSRU5UX1BS
T0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRTog
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJB
R01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUuZnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FDVElWRV9URVhU
VVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsg
R0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnN0ZW5jaWxNYXNrOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JBQ0tfUkVGOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFj
a1JlZjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19W
QUxVRV9NQVNLOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrTWFzazsgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbDsgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3Rl
bmNpbEJhY2tGYWlsOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bh
c3NEZXB0aEZhaWw7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNT
X0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFz
czsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhGdW5jOyAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QkxFTkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJs
ZW5kUkdCOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9EU1Rf
QUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYTsg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjog
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENs
ZWFyVmFsdWU7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRT
OiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKTsgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAg
ICpwYXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKTsgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6ICAgCi0gICAgICAg
IHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKLSAgICAgICAgewotICAgICAgICAg
ICAgR0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpOwotICAgICAg
ICAgICAgaWYgKG1heFNhbXBsZXMgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbWF4U2FtcGxlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIEdMX1NBTVBM
RV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAKLSAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5l
c3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVM6
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICAgKnBhcmFtcyA9
IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7ICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOiAqcGFyYW1zID0gZ2w6OklNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZJ
RVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBz
dGQ6Om1heChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCksIGdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKCkpOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gbWF4RGltZW5zaW9uOwot
ICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5zaW9uOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDsKLSAgICAgICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0RY
VDNUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xF
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9WSUVXUE9SVDoKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnZpZXdwb3J0WDsKLSAgICAg
ICAgcGFyYW1zWzFdID0gbVN0YXRlLnZpZXdwb3J0WTsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0
YXRlLnZpZXdwb3J0V2lkdGg7Ci0gICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS52aWV3cG9ydEhl
aWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgotICAgICAg
ICBwYXJhbXNbMF0gPSBtU3RhdGUuc2Npc3Nvclg7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0
ZS5zY2lzc29yWTsKLSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLnNjaXNzb3JXaWR0aDsKLSAg
ICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLnNjaXNzb3JIZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5jdWxsTW9kZTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9G
Uk9OVF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcm9udEZh
Y2U7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRURfQklUUzoKLSAgICAg
IGNhc2UgR0xfR1JFRU5fQklUUzoKLSAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgotICAgICAgY2Fz
ZSBHTF9BTFBIQV9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6UmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOwot
Ci0gICAgICAgICAgICBpZiAoY29sb3JidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1JFRF9CSVRTOiAgICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgp
OyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOiAqcGFyYW1z
ID0gY29sb3JidWZmZXItPmdldEdyZWVuU2l6ZSgpOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfQkxVRV9CSVRTOiAgKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRCbHVlU2l6ZSgp
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICpwYXJhbXMg
PSBjb2xvcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQklUUzoKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXpl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigp
OwotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChzdGVuY2lsYnVmZmVy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGVuY2lsYnVmZmVy
LT5nZXRTdGVuY2lsU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdf
MkQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAg
fHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpIC0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRV
UkVfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2
ZVNhbXBsZXIgPiBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRl
LmFjdGl2ZVNhbXBsZXJdLmlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6Ci0gICAgICAgICpwYXJhbXMg
PSBtUmVzZXRTdHJhdGVneTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9QUk9H
UkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKLSAgICAgICAgKnBhcmFtcyA9IDE7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKLSAgICAgICAg
KnBhcmFtcyA9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1l
LCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQotewotICAgIC8vIFBsZWFz
ZSBub3RlOiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBmb3IgREVQVEhfQ0xFQVJfVkFMVUUgaW4g
dGhpcyBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGlzIEZMT0FUIHJhdGhlciB0aGFuIElOVCwgYXMg
d291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3BlYy4gVGhpcyBpcyBkdWUKLSAg
ICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgZmxvYXQs
IGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24KLSAgICAvLyBpZiByZXR1cm5lZCBmcm9t
IENvbnRleHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlzIGNvbnZlcnNpb24gaXMgYWxyZWFkeSBp
bXBsZW1lbnRlZCAKLSAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9uZSBjYWxscyBnbEdldEludGVn
ZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFyaWFibGUsIHdlCi0gICAgLy8g
cGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRzLiBUaGlzIHNob3VsZCBtYWtl
IG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKLSAgICAvLyBhcHBsaWNhdGlvbi4KLSAgICBz
d2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZP
Uk1BVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAg
ICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKLSAg
ICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFy
YW1zID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZF
UlRFWF9BVFRSSUJTOgotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoK
LSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6
Ci0gICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICBjYXNl
IEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5B
UllfRk9STUFUUzoKLSAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRT
OgotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfRlJB
TUVCVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6Ci0g
ICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTToKLSAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1F
TlQ6Ci0gICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6Ci0gICAgICBj
YXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6Ci0gICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9I
SU5UOgotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzoK
LSAgICAgIGNhc2UgR0xfUkVEX0JJVFM6Ci0gICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6Ci0gICAg
ICBjYXNlIEdMX0JMVUVfQklUUzoKLSAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKLSAgICAgIGNh
c2UgR0xfREVQVEhfQklUUzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOgotICAgICAgY2Fz
ZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgY2FzZSBHTF9DVUxMX0ZB
Q0VfTU9ERToKLSAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRToKLSAgICAgIGNhc2UgR0xfQUNUSVZF
X1RFWFRVUkU6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzoKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjoKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6Ci0gICAgICBjYXNlIEdMX1NU
RU5DSUxfQkFDS19GVU5DOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6Ci0g
ICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6Ci0gICAgICBjYXNlIEdM
X0RFUFRIX0ZVTkM6Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6Ci0gICAgICBjYXNlIEdM
X0JMRU5EX1NSQ19BTFBIQToKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX1JHQjoKLSAgICAgIGNh
c2UgR0xfQkxFTkRfRFNUX0FMUEhBOgotICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6
Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOgotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAgIGNhc2UgR0xfU1VCUElYRUxf
QklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRToKLSAgICAgIGNhc2UgR0xfTUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6Ci0g
ICAgICBjYXNlIEdMX1NBTVBMRVM6Ci0gICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfVFlQRToKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQ6Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKLSAgICAgIGNhc2UgR0xfVEVY
VFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05f
U1RSQVRFR1lfRVhUOgotICAgICAgY2FzZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUU19P
RVM6Ci0gICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgotICAgICAgICB7
Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAx
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19B
TkdMRToKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMo
KSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwot
ICAgICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFY
X1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwot
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKLSAgICAg
ICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1z
ID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0NP
TVBJTEVSOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAgY2Fz
ZSBHTF9ERVBUSF9XUklURU1BU0s6Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAg
ICAgICAgLy8gQ1VMTF9GQUNFIHRocm91Z2ggRElUSEVSIGFyZSBuYXR1cmFsIHRvIElzRW5hYmxl
ZCwKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAvLyBidXQgY2FuIGJl
IHJldHJpZXZlZCB0aHJvdWdoIHRoZSBHZXR7VHlwZX12IHF1ZXJpZXMuCi0gICAgICBjYXNlIEdM
X1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogLy8gRm9yIHRoaXMgcHVycG9zZSwgdGhleSBhcmUg
dHJlYXRlZCBoZXJlIGFzIGJvb2wtbmF0dXJhbAotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9U
RVNUOgotICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOgotICAgICAgY2FzZSBHTF9CTEVORDoKLSAg
ICAgIGNhc2UgR0xfRElUSEVSOgotICAgICAgY2FzZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1Nf
RVhUOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Ci0gICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQ09MT1JfV1JJVEVNQVNLOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0JP
T0w7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOgotICAgICAgY2FzZSBHTF9Q
T0xZR09OX09GRlNFVF9VTklUUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVF
OgotICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRToKLSAgICAgIGNhc2UgR0xfTElORV9X
SURUSDoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKLSAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfUE9J
TlRfU0laRV9SQU5HRToKLSAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gMjsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFM
VUU6Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgotICAgICAgICB7Ci0gICAgICAgICAgICAq
dHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHJlbmRlciB0YXJn
ZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5nbGUgYW5k
Ci0vLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLWJvb2wgQ29u
dGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ25vcmVWaWV3cG9ydCkKLXsKLSAgICBGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAg
IGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVz
cygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgLy8gaWYgdGhlcmUgaXMgbm8gY29sb3IgYXR0YWNobWVudCB3ZSBtdXN0IHN5bnRoZXNpemUg
YSBOVUxMIGNvbG9yYXR0YWNobWVudAotICAgIC8vIHRvIGtlZXAgdGhlIEQzRCBydW50aW1lIGhh
cHB5LiAgVGhpcyBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkZXB0aCB0ZXh0dXJpbmcuCi0g
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBOVUxMOwotICAgIGlmIChmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0g
ICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1
ZmZlcigpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZW5kZXJidWZmZXJPYmpl
Y3QgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0TnVsbENvbG9yYnVmZmVyKCk7Ci0gICAgfQotICAg
IGlmICghcmVuZGVyYnVmZmVyT2JqZWN0KQotICAgIHsKLSAgICAgICAgRVJSKCJ1bmFibGUgdG8g
bG9jYXRlIHJlbmRlcmJ1ZmZlciBmb3IgRkJPLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgYm9vbCByZW5kZXJUYXJnZXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgaW50IHJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0U2VyaWFs
KCk7Ci0gICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNl
cmlhbCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBy
ZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOwotICAgICAgICBpZiAoIXJlbmRl
clRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50
ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8g
Q29udGV4dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgfQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRT
ZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9
IHRydWU7IC8vIFNjaXNzb3IgYXJlYSBtdXN0IGJlIGNsYW1wZWQgdG8gcmVuZGVyIHRhcmdldCdz
IHNpemUtLSB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHJlbmRlciB0YXJnZXRzLgot
ICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0
LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNp
bCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IGRlcHRoYnVmZmVyU2VyaWFsID0gMDsKLSAgICB1
bnNpZ25lZCBpbnQgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgaWYgKGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAg
UmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1
ZmZlcigpOwotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsKCk7Ci0gICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgPSBkZXB0aGJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUp
Ci0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZl
ck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBzdGVu
Y2lsYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsID0gc3RlbmNpbGJ1ZmZlci0+Z2V0
U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVk
RGVwdGhidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBw
bGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKLSAgICAgICAgIW1EZXB0aFN0ZW5jaWxJbml0aWFs
aXplZCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVw
dGhTdGVuY2lsKTsKLSAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVm
ZmVyU2VyaWFsOwotICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2ls
YnVmZmVyU2VyaWFsOwotICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5j
aWwtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1SZW5kZXJUYXJnZXREZXNjSW5pdGlh
bGl6ZWQgfHwgcmVuZGVyVGFyZ2V0Q2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldFJlbmRlclRhcmdl
dCgpOwotICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBsb3N0Ci0gICAgICAgIH0KLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZtUmVuZGVyVGFyZ2V0RGVzYyk7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICByZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQ7Ci0KLSAgICBm
bG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKLSAgICBmbG9hdCB6RmFyID0gY2xh
bXAwMShtU3RhdGUuekZhcik7Ci0KLSAgICBpZiAoaWdub3JlVmlld3BvcnQpCi0gICAgewotICAg
ICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmlld3BvcnQuWSA9IDA7Ci0gICAgICAgIHZp
ZXdwb3J0LldpZHRoID0gbVJlbmRlclRhcmdldERlc2MuV2lkdGg7Ci0gICAgICAgIHZpZXdwb3J0
LkhlaWdodCA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodDsKLSAgICAgICAgdmlld3BvcnQuTWlu
WiA9IDAuMGY7Ci0gICAgICAgIHZpZXdwb3J0Lk1heFogPSAxLjBmOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICB2aWV3cG9ydC5YID0gY2xhbXAobVN0YXRlLnZpZXdwb3J0WCwgMEws
IHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgIHZp
ZXdwb3J0LlkgPSBjbGFtcChtU3RhdGUudmlld3BvcnRZLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4o
bVJlbmRlclRhcmdldERlc2MuSGVpZ2h0KSk7Ci0gICAgICAgIHZpZXdwb3J0LldpZHRoID0gY2xh
bXAobVN0YXRlLnZpZXdwb3J0V2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFy
Z2V0RGVzYy5XaWR0aCkgLSBzdGF0aWNfY2FzdDxMT05HPih2aWV3cG9ydC5YKSk7Ci0gICAgICAg
IHZpZXdwb3J0LkhlaWdodCA9IGNsYW1wKG1TdGF0ZS52aWV3cG9ydEhlaWdodCwgMEwsIHN0YXRp
Y19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkgLSBzdGF0aWNfY2FzdDxMT05H
Pih2aWV3cG9ydC5ZKSk7Ci0gICAgICAgIHZpZXdwb3J0Lk1pblogPSB6TmVhcjsKLSAgICAgICAg
dmlld3BvcnQuTWF4WiA9IHpGYXI7Ci0gICAgfQotCi0gICAgaWYgKHZpZXdwb3J0LldpZHRoIDw9
IDAgfHwgdmlld3BvcnQuSGVpZ2h0IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
ICAgLy8gTm90aGluZyB0byByZW5kZXIKLSAgICB9Ci0KLSAgICBpZiAocmVuZGVyVGFyZ2V0Q2hh
bmdlZCB8fCAhbVZpZXdwb3J0SW5pdGlhbGl6ZWQgfHwgbWVtY21wKCZ2aWV3cG9ydCwgJm1TZXRW
aWV3cG9ydCwgc2l6ZW9mIG1TZXRWaWV3cG9ydCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZp
Y2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7Ci0gICAgICAgIG1TZXRWaWV3cG9ydCA9IHZpZXdw
b3J0OwotICAgICAgICBtVmlld3BvcnRJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIG1EeFVu
aWZvcm1zRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtU2Npc3NvclN0YXRlRGlydHkp
Ci0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBSRUNUIHJlY3Q7Ci0gICAgICAgICAgICByZWN0LmxlZnQgPSBjbGFtcChtU3RhdGUu
c2Npc3NvclgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCkp
OwotICAgICAgICAgICAgcmVjdC50b3AgPSBjbGFtcChtU3RhdGUuc2Npc3NvclksIDBMLCBzdGF0
aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsKLSAgICAgICAgICAgIHJl
Y3QucmlnaHQgPSBjbGFtcChtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoLCAw
TCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdldERlc2MuV2lkdGgpKTsKLSAgICAgICAg
ICAgIHJlY3QuYm90dG9tID0gY2xhbXAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQpKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZyZWN0KTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBUUlVFKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobVN0YXRlLmN1cnJlbnRQcm9ncmFtICYmIG1EeFVuaWZvcm1zRGlydHkpCi0gICAgewotICAg
ICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKLSAgICAg
ICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dy
YW1CaW5hcnkoKTsKLQotICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCB4eVsyXSA9
IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIC0xLjBmIC8gdmlld3BvcnQuSGVpZ2h0fTsKLSAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7Ci0K
LSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGZvciBjb21wdXRpbmcgZ2xfRnJhZ0Nv
b3JkIGluIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpLgotICAgICAgICBHTGludCBjb29yZCA9IHBy
b2dyYW1CaW5hcnktPmdldER4Q29vcmRMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IHdoeHlb
NF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCBtU3RhdGUudmlld3BvcnRIZWlnaHQg
LyAyLjBmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9y
dFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIu
MGZ9OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGZ2KGNvb3JkLCAxLCB3aHh5
KTsKLQotICAgICAgICBHTGludCBkZXB0aCA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhMb2Nh
dGlvbigpOwotICAgICAgICBHTGZsb2F0IGR6WzJdID0geyh6RmFyIC0gek5lYXIpIC8gMi4wZiwg
KHpOZWFyICsgekZhcikgLyAyLjBmfTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTJmdihkZXB0aCwgMSwgZHopOwotCi0gICAgICAgIEdMaW50IGRlcHRoUmFuZ2UgPSBwcm9ncmFt
QmluYXJ5LT5nZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IG5lYXJG
YXJEaWZmWzNdID0ge3pOZWFyLCB6RmFyLCB6RmFyIC0gek5lYXJ9OwotICAgICAgICBwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGRlcHRoUmFuZ2UsIDEsIG5lYXJGYXJEaWZmKTsKLSAgICAg
ICAgbUR4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi0vLyBBcHBsaWVzIHRoZSBmaXhlZC1mdW5jdGlvbiBzdGF0ZSAoY3VsbGluZywgZGVwdGgg
dGVzdCwgYWxwaGEgYmxlbmRpbmcsIHN0ZW5jaWxpbmcsIGV0YykgdG8gdGhlIERpcmVjdDNEIDkg
ZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQotewotICAg
IFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5
KCk7Ci0KLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVi
dWZmZXIoKTsKLQotICAgIEdMaW50IGZyb250Q0NXID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhGcm9u
dENDV0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQgY2N3ID0gKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q0NXKTsKLSAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGZyb250Q0NXLCAxLCAmY2N3
KTsKLQotICAgIEdMaW50IHBvaW50c09yTGluZXMgPSBwcm9ncmFtQmluYXJ5LT5nZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbigpOwotICAgIEdMaW50IGFsd2F5c0Zyb250ID0gIWlzVHJpYW5nbGVN
b2RlKGRyYXdNb2RlKTsKLSAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KHBvaW50c09y
TGluZXMsIDEsICZhbHdheXNGcm9udCk7Ci0KLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5ICpp
ZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7Ci0gICAgYm9vbCB6
ZXJvQ29sb3JNYXNrQWxsb3dlZCA9IGlkZW50aWZpZXItPlZlbmRvcklkICE9IDB4MTAwMjsKLSAg
ICAvLyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdp
dGggYSB6ZXJvIGNvbG9yCi0gICAgLy8gd3JpdGUgbWFzayBjYW4gY2F1c2UgbGF0ZXIgZHJhd3Mg
dG8gaGF2ZSBpbmNvcnJlY3QgcmVzdWx0cy4gSW5zdGVhZCwKLSAgICAvLyBzZXQgYSBub256ZXJv
IGNvbG9yIHdyaXRlIG1hc2sgYnV0IG1vZGlmeSB0aGUgYmxlbmQgc3RhdGUgc28gdGhhdCBubwot
ICAgIC8vIGRyYXdpbmcgaXMgZG9uZS4KLSAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5Ci0KLSAgICBpZiAobUN1bGxTdGF0ZURp
cnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuY3VsbEZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5jdWxsTW9kZSwgbVN0YXRl
LmZyb250RmFjZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9O
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3VsbFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUu
ZGVwdGhUZXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9UUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRl
cHRoRnVuYykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQot
ICAgIGlmICghemVyb0NvbG9yTWFza0FsbG93ZWQgJiYgKG1NYXNrU3RhdGVEaXJ0eSB8fCBtQmxl
bmRTdGF0ZURpcnR5KSkKLSAgICB7Ci0gICAgICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwot
ICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtQmxlbmRT
dGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5ibGVuZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJM
RSwgVFJVRSk7Ci0KLSAgICAgICAgICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gR0xf
Q09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSAmJgotICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0g
R0xfQ09OU1RBTlRfQUxQSEEgJiYgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9PTkVfTUlOVVNf
Q09OU1RBTlRfQUxQSEEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVzMmR4OjpDb252ZXJ0Q29sb3IobVN0
YXRlLmJsZW5kQ29sb3IpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19C
TEVOREZBQ1RPUiwgRDNEQ09MT1JfUkdCQSh1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBo
YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bm9ybTw4PihtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSkpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQs
IGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQikpOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5ELCBlczJkeDo6Q29u
dmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0
YXRlLmJsZW5kRXF1YXRpb25SR0IpKTsKLQotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zb3VyY2VC
bGVuZFJHQiAhPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSB8fCAKLSAgICAgICAgICAgICAgICBt
U3RhdGUuZGVzdEJsZW5kUkdCICE9IG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSB8fCAKLSAgICAgICAg
ICAgICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSBtU3RhdGUuYmxlbmRFcXVhdGlvbkFs
cGhhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVOREFMUEhBLCBlczJkeDo6
Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkpOwotICAgICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVOREFMUEhBLCBlczJkeDo6
Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kQWxwaGEpKTsKLSAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QQUxQSEEsIGVzMmR4OjpDb252
ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxT
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0gICAg
ewotICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5o
YXNTdGVuY2lsKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwgVFJVRSk7Ci0KLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBVbnN1cHBvcnRlZCBieSBEM0Q5Ci0gICAgICAgICAgICBjb25zdCBEM0RS
RU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxSRUYgPSBEM0RSU19TVEVOQ0lMUkVGOwot
ICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVUWVBFIEQzRFJTX0NDV19TVEVOQ0lMTUFT
SyA9IEQzRFJTX1NURU5DSUxNQVNLOwotICAgICAgICAgICAgY29uc3QgRDNEUkVOREVSU1RBVEVU
WVBFIEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLID0gRDNEUlNfU1RFTkNJTFdSSVRFTUFTSzsK
LSAgICAgICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAhPSBtU3RhdGUuc3RlbmNp
bEJhY2tXcml0ZW1hc2sgfHwgCi0gICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgIT0g
bVN0YXRlLnN0ZW5jaWxCYWNrUmVmIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGVuY2ls
TWFzayAhPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEVSUigiU2VwYXJhdGUgZnJvbnQvYmFjayBzdGVuY2lsIHdyaXRlbWFza3MsIHJlZmVy
ZW5jZSB2YWx1ZXMsIG9yIHN0ZW5jaWwgbWFzayB2YWx1ZXMgYXJlIGludmFsaWQgdW5kZXIgV2Vi
R0wuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUg
b2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzdGVuY2ls
YnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAg
ICAgIEdMdWludCBtYXhTdGVuY2lsID0gKDEgPDwgc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNp
emUoKSkgLSAxOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUu
ZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1df
U1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RS
U19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNp
bEZ1bmMpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5DSUxS
RUYsIChtU3RhdGUuc3RlbmNpbFJlZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVu
Y2lsUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNf
Q0NXX1NURU5DSUxNQVNLLCBtU3RhdGUuc3RlbmNpbE1hc2spOwotCi0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NU
RU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxGYWls
KSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNl
ID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUws
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5j
aWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJ
TFBBU1MgOiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbFBhc3NEZXB0
aFBhc3MpKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RSU19DQ1dfU1RF
TkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RS
U19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuc3RlbmNp
bEJhY2tGdW5jKSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMUkVGIDogRDNEUlNfQ0NXX1NURU5D
SUxSRUYsIChtU3RhdGUuc3RlbmNpbEJhY2tSZWYgPCAoR0xpbnQpbWF4U3RlbmNpbCkgPyBtU3Rh
dGUuc3RlbmNpbEJhY2tSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMTUFT
SyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayk7Ci0KLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q1cgPyBEM0RSU19TVEVOQ0lMRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMRkFJTCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0
ZS5zdGVuY2lsQmFja0ZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVOQ0lMWkZBSUwgOiBEM0RSU19D
Q1dfU1RFTkNJTFpGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMy
ZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCkpOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBH
TF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0
YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTEVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURp
cnR5ID0gZmFsc2U7Ci0gICAgICAgIG1Gcm9udEZhY2VEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChtTWFza1N0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpbnQgY29sb3JNYXNrID0g
ZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9yTWFza1JlZCwgbVN0YXRlLmNvbG9y
TWFza0dyZWVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBtU3RhdGUuY29sb3JNYXNrQWxwaGEpOwotICAgICAg
ICBpZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBz
byBub3RoaW5nIHdpbGwgYmUgZHJhd24uCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFC
TEUsIFRSVUUpOwotCi0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
UkNCTEVORCwgRDNEQkxFTkRfWkVSTyk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19ERVNUQkxFTkQsIEQzREJMRU5EX09ORSk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVORE9QLCBEM0RCTEVORE9QX0FERCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBjb2xvck1hc2spOwotICAgICAgICB9Ci0g
ICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgbVN0YXRl
LmRlcHRoTWFzayA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSkKLSAgICB7
Ci0gICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICBpZiAoZGVwdGhidWZmZXIpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xP
UEVTQ0FMRURFUFRIQklBUywgKigoRFdPUkQqKSZtU3RhdGUucG9seWdvbk9mZnNldEZhY3Rvcikp
OwotICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQmlhcyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29u
T2Zmc2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkpKTsKLSAgICAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19ERVBUSEJJQVMsICooKERX
T1JEKikmZGVwdGhCaWFzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
TE9QRVNDQUxFREVQVEhCSUFTLCAwKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtUG9seWdvbk9m
ZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVNhbXBsZVN0YXRlRGly
dHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1
bmltcGxlbWVudGVkLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVMsIFRSVUUpOwotICAgICAgICBpZiAobVN0
YXRlLnNhbXBsZUNvdmVyYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
bWFzayA9IDA7Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB0aHJlc2hvbGQgPSAwLjVm
OwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0U2FtcGxlcygpOyArK2kpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBtYXNrIDw8PSAxOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICogbVN0
YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPj0gdGhyZXNob2xkKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgKz0gMS4wZjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hc2sgfD0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgbWFzayk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobURpdGhl
clN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19ESVRIRVJFTkFCTEUsIG1TdGF0ZS5kaXRoZXIgPyBUUlVFIDogRkFMU0UpOwotCi0gICAgICAg
IG1EaXRoZXJTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gQ29udGV4dDo6
YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewotICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUg
YXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgR0xlbnVtIGVyciA9IG1WZXJ0
ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEoZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVz
LCBpbnN0YW5jZXMpOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNo
ZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIGdldEN1cnJlbnRQcm9ncmFt
KCksIGluc3RhbmNlcywgcmVwZWF0RHJhdyk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIGluZGljZXMg
YW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi1HTGVu
dW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAq
aW5kZXhJbmZvKQotewotICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+cHJlcGFy
ZUluZGV4RGF0YSh0eXBlLCBjb3VudCwgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwg
aW5kaWNlcywgaW5kZXhJbmZvKTsKLQotICAgIGlmIChlcnIgPT0gR0xfTk9fRVJST1IpCi0gICAg
ewotICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNlcmlhbCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0SW5kaWNlcyhpbmRleEluZm8tPmluZGV4
QnVmZmVyKTsKLSAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBpbmRleEluZm8tPnNlcmlh
bDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8vIEFwcGxpZXMg
dGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Ci12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGlmIChwcm9n
cmFtT2JqZWN0LT5nZXRTZXJpYWwoKSAhPSBtQXBwbGllZFByb2dyYW1TZXJpYWwpCi0gICAgewot
ICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtQmlu
YXJ5LT5nZXRWZXJ0ZXhTaGFkZXIoKTsKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpw
aXhlbFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsU2hhZGVyKCk7Ci0KLSAgICAgICAg
bURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwotICAgICAgICBtRGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGly
dHlBbGxVbmlmb3JtcygpOwotICAgICAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSBwcm9ncmFt
T2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVu
aWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRl
cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygp
Ci17Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1BJWEVMKTsKLQotICAgIGlmIChtU3VwcG9y
dHNWZXJ0ZXhUZXh0dXJlKQotICAgIHsKLSAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1ZF
UlRFWCk7Ci0gICAgfQotfQotCi0vLyBGb3IgZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0
aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCi0vLyBsb29rcyB1cCB0aGUgY29ycmVzcG9u
ZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFuZCB0ZXh0dXJlIHR5cGUsCi0vLyBhbmQg
c2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3NpbmcvZmlsdGVyaW5nIHN0YXRlIChvciBO
VUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJU
eXBlIHR5cGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9n
cmFtKCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGludCBzYW1wbGVyQ291bnQgPSAodHlwZSA9PSBT
QU1QTEVSX1BJWEVMKSA/IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIDogTUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTX1ZURjsgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCA5IHNhbXBsZXJzIG9m
IGdpdmVuIHNhbXBsZXIgdHlwZQotICAgIHVuc2lnbmVkIGludCAqYXBwbGllZFRleHR1cmVTZXJp
YWwgPSAodHlwZSA9PSBTQU1QTEVSX1BJWEVMKSA/IG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTIDog
bUFwcGxpZWRUZXh0dXJlU2VyaWFsVlM7Ci0gICAgaW50IGQzZFNhbXBsZXJPZmZzZXQgPSAodHlw
ZSA9PSBTQU1QTEVSX1BJWEVMKSA/IDAgOiBEM0RWRVJURVhURVhUVVJFU0FNUExFUjA7Ci0gICAg
aW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRTYW1wbGVyUmFuZ2UodHlw
ZSk7Ci0KLSAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXggPCBzYW1w
bGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQotICAgIHsKLSAgICAgICAgaW50IHRleHR1cmVVbml0
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsg
ICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Ci0gICAgICAgIGludCBkM2RTYW1w
bGVyID0gc2FtcGxlckluZGV4ICsgZDNkU2FtcGxlck9mZnNldDsKLQotICAgICAgICBpZiAodGV4
dHVyZVVuaXQgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRleHR1cmVUeXBlIHRleHR1
cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIHNhbXBs
ZXJJbmRleCk7Ci0KLSAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4
dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50
IHRleFNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKLQotICAgICAgICAgICAg
aWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4U2VyaWFsIHx8IHRl
eHR1cmUtPmhhc0RpcnR5UGFyYW1ldGVycygpIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpk
M2RUZXh0dXJlID0gdGV4dHVyZS0+Z2V0VGV4dHVyZSgpOwotCi0gICAgICAgICAgICAgICAgaWYg
KGQzZFRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
YXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVy
ZS0+aGFzRGlydHlQYXJhbWV0ZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSB3cmFwUyA9IHRleHR1cmUtPmdldFdyYXBTKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gd3JhcFQgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1p
bkZpbHRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIG1hZ0ZpbHRlciA9IHRl
eHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNv
bnZlcnRUZXh0dXJlV3JhcCh3cmFwUykpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfQUREUkVTU1YsIGVzMmR4OjpD
b252ZXJ0VGV4dHVyZVdyYXAod3JhcFQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbURl
dmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFHRklMVEVSLCBlczJk
eDo6Q29udmVydE1hZ0ZpbHRlcihtYWdGaWx0ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFRFWFRVUkVGSUxURVJUWVBFIGQzZE1pbkZpbHRlciwgZDNkTWlwRmlsdGVyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0ZXIobWluRmlsdGVyLCAmZDNk
TWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWlu
RmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNl
cmlhbFtzYW1wbGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdl
cygpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2
aWNlLT5TZXRUZXh0dXJlKGQzZFNhbXBsZXIsIGQzZFRleHR1cmUpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2Ft
cGxlciwgZ2V0SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFs
W3NhbXBsZXJJbmRleF0gPSB0ZXhTZXJpYWw7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVz
ZXREaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0g
IT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJl
KGQzZFNhbXBsZXIsIE5VTEwpOwotICAgICAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFs
W3NhbXBsZXJJbmRleF0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXggPCBz
YW1wbGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKGFwcGxpZWRU
ZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZShzYW1wbGVySW5kZXggKyBkM2RTYW1wbGVyT2Zmc2V0LCBOVUxM
KTsKLSAgICAgICAgICAgIGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gPSAwOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZv
aWQqIHBpeGVscykKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJh
bWVidWZmZXIoKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmIChnZXRSZWFkRnJh
bWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
fQotCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0
LCB0eXBlLCBtU3RhdGUucGFja0FsaWdubWVudCk7Ci0gICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5
IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQgcmVxdWlyZWRTaXpl
ID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAgIGlmIChyZXF1aXJlZFNpemUgPiAqYnVm
U2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5k
ZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgaWYgKCFyZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxv
c3QsIHJldHVybiBzaWxlbnRseQotICAgIH0KLQotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwot
ICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBpZiAoZGVzYy5NdWx0aVNh
bXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVN
RU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBTdHJldGNoUmVjdCBp
bnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAgICAgICByZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLQotICAgIEhSRVNVTFQgcmVzdWx0OwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1T
dXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0gIWdldFBhY2tSZXZlcnNl
Um93T3JkZXIoKSAmJiBnZXRQYWNrQWxpZ25tZW50KCkgPD0gNCAmJiBtRGlzcGxheS0+aXNEM2Q5
RXhEZXZpY2UoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAw
ICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVp
Z2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
OFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFOwotICAgIGlmIChkaXJlY3RUb1BpeGVscykKLSAgICB7Ci0gICAgICAgIC8vIFVzZSB0aGUg
cGl4ZWxzIHB0ciBhcyBhIHNoYXJlZCBoYW5kbGUgdG8gd3JpdGUgZGlyZWN0bHkgaW50byBjbGll
bnQncyBtZW1vcnkKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxh
aW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRlc2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lT
VEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwgJnBpeGVscyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVHJ5IGFnYWluIHdpdGhvdXQgdGhlIHNo
YXJlZCBoYW5kbGUKLSAgICAgICAgICAgIGRpcmVjdFRvUGl4ZWxzID0gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoIWRpcmVjdFRvUGl4ZWxzKQotICAgIHsKLSAgICAgICAgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2MuV2lkdGgsIGRl
c2MuSGVpZ2h0LCBkZXNjLkZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmc3lzdGVtU3VyZmFjZSwg
TlVMTCk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVyVGFy
Z2V0LCBzeXN0ZW1TdXJmYWNlKTsKLSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICBy
ZW5kZXJUYXJnZXQgPSBOVUxMOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIC8vIEl0IHR1cm5zIG91
dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKLSAgICAgICAgLy8g
Y29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgotICAgICAgICBpZiAoY2hlY2tEZXZpY2VMb3N0
KHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgaWYgKGRpcmVjdFRvUGl4
ZWxzKQotICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUkVDVCByZWN0OwotICAgIHJlY3QubGVmdCA9IGNsYW1wKHgs
IDBMLCBzdGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAgcmVjdC50b3AgPSBjbGFt
cCh5LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLSAgICByZWN0LnJpZ2h0
ID0gY2xhbXAoeCArIHdpZHRoLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5XaWR0aCkpOwot
ICAgIHJlY3QuYm90dG9tID0gY2xhbXAoeSArIGhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExPTkc+
KGRlc2MuSGVpZ2h0KSk7Ci0KLSAgICBEM0RMT0NLRURfUkVDVCBsb2NrOwotICAgIHJlc3VsdCA9
IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19SRUFET05MWSk7
Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0dXJuOyAg
IC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCi0gICAgfQotCi0gICAgdW5zaWduZWQg
Y2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0gICAgdW5zaWduZWQgc2hvcnQg
KmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCi0gICAgdW5zaWduZWQgY2hhciAq
c291cmNlOwotICAgIGludCBpbnB1dFBpdGNoOwotICAgIGlmIChnZXRQYWNrUmV2ZXJzZVJvd09y
ZGVyKCkpCi0gICAgewotICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJp
dHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7Ci0gICAgICAg
IGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7Ci0gICAgICAgIGlucHV0UGl0
Y2ggPSBsb2NrLlBpdGNoOwotICAgIH0KLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5i
b3R0b20gLSByZWN0LnRvcDsgaisrKQotICAgIHsKLSAgICAgICAgaWYgKGRlc2MuRm9ybWF0ID09
IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYm
Ci0gICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuCi0gICAg
ICAgICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRo
IG5vCi0gICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cu
Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAocmVj
dC5yaWdodCAtIHJlY3QubGVmdCkgKiA0KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAgICBmbG9h
dCBnOwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICog
aSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwot
ICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkgKiAoMS4wZiAvIDB4MDdFMCk7
Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgxLjBmIC8gMHhGODAw
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2Ug
KyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFy
Z2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJn
YiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAo
YXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhC
ODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBh
cmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsK
LQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBmIC8g
MHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAwRkYp
ICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYg
MHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICBy
ID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZN
VF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1
dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gMS4wZjsKLSAgICAgICAgICAgICAg
ICAgICAgYiA9ICh4cmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gKHhyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAw
RkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4MDBGRjAwMDApICogKDEu
MGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVk
IGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAweEMwMDAwMDAwKTsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikgKiAoMS4wZiAvIDB4MDAw
MDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMEZGQzAwKSAqICgx
LjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4M0ZG
MDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRz
IGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQK
LSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAq
IGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAqKChmbG9hdCopKHNv
dXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgICAgICAg
ICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKTsK
LSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAq
IGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJl
IHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGFiZ3JbNF07Ci0KLSAgICAgICAgICAgICAgICAgICAgRDNEWEZsb2F0
MTZUbzMyQXJyYXkoYWJnciwgKEQzRFhGTE9BVDE2Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5w
dXRQaXRjaCksIDQpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSBhYmdyWzNdOwotICAgICAg
ICAgICAgICAgICAgICBiID0gYWJnclsyXTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGFiZ3Jb
MV07Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBhYmdyWzBdOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSAr
IDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAz
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80
X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3Rv
cCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgot
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkg
ICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAg
IC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5k
ICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNl
IG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5k
IHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRj
aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYp
IDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9m
IFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0
eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAg
MTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAz
ICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAg
ICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAg
ICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3Qg
Y29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAg
ICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVm
KSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEg
KiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQjogICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfVFlQRQotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRj
aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAo
KHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0KLSAg
ICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6Y2xlYXIoR0xi
aXRmaWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdl
dERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFt
ZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04pOwotICAgIH0KLQotICAgIERXT1JEIGZsYWdzID0gMDsKLQotICAgIGlmIChtYXNrICYg
R0xfQ09MT1JfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JV
RkZFUl9CSVQ7Ci0KLSAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1ZmZl
clR5cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RD
TEVBUl9UQVJHRVQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpCi0gICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklU
OwotICAgICAgICBpZiAobVN0YXRlLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgZmxh
Z3MgfD0gRDNEQ0xFQVJfWkJVRkZFUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMdWludCBz
dGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0KLSAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAg
ICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdM
X05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0
ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0
ZW5jaWwoKTsKLSAgICAgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgICAgICAgICBkZXB0
aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwotICAgICAgICAgICAgZGVwdGhTdGVuY2lsLT5SZWxl
YXNlKCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGR4MmVzOjpH
ZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7Ci0gICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQg
PSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0KLSAgICAgICAgICAgIGlmIChzdGVuY2lsVW5t
YXNrZWQgIT0gMHgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEQz
RENMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobWFzayAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQodHJ1ZSkpICAgLy8gQ2xp
cHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9y
dAotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEQzRENPTE9SIGNvbG9yID0g
RDNEQ09MT1JfQVJHQih1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLmFscGhhKSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWUucmVkKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4pLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7Ci0g
ICAgZmxvYXQgZGVwdGggPSBjbGFtcDAxKG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUpOwotICAgIGlu
dCBzdGVuY2lsID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAg
IGJvb2wgYWxwaGFVbm1hc2tlZCA9IChkeDJlczo6R2V0QWxwaGFTaXplKG1SZW5kZXJUYXJnZXRE
ZXNjLkZvcm1hdCkgPT0gMCkgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3Qg
Ym9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRlLnN0ZW5j
aWxXcml0ZW1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLSAgICBj
b25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGZsYWdzICYgRDNEQ0xFQVJfVEFSR0VU
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKG1TdGF0ZS5jb2xv
ck1hc2tSZWQgJiYgbVN0YXRlLmNvbG9yTWFza0dyZWVuICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tl
ZCk7Ci0KLSAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxD
bGVhcikKLSAgICB7Ci0gICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBh
dGhzIGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KLSAgICAgICAg
Ly8gU3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBvbmx5IHNvbWUgcGF0aHMgd2lsbCBiZSBmbGFn
Z2VkIGRpcnR5IGluIHRoZSBjYXNlIHRoYXQKLSAgICAgICAgLy8gIHRoYXQgcGF0aCBpcyB0YWtl
bi4KLSAgICAgICAgSFJFU1VMVCBocjsKLSAgICAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3Rh
dGUgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgaHIgPSBtRGV2aWNlLT5CZWdpblN0
YXRlQmxvY2soKTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAg
ICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBf
QUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFC
TEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NV
TExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7
Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFC
TEUsIDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JX
UklURUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNo
YWRlcihOVUxMKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZGX0RJRkZV
U0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDAp
OwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBI
QUJMRU5ERU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFn
ZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcxLCBEM0RU
QV9URkFDVE9SKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19BTFBIQU9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9S
KTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNU
T1IsIGNvbG9yKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01V
TFRJU0FNUExFTUFTSywgMHhGRkZGRkZGRik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZv
cihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBociA9IG1EZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1N
YXNrZWRDbGVhclNhdmVkU3RhdGUpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikg
fHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBO
VUxMKTsKLQotICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSAhPSBOVUxMKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBociA9IG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkNhcHR1cmUo
KTsKLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZ
Uyk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEZBTFNF
KTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENV
TExfTk9ORSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RF
LCBEM0RGSUxMX1NPTElEKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
QUxQSEFURVNURU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKLQotICAgICAgICBpZiAoZmxhZ3Mg
JiBEM0RDTEVBUl9UQVJHRVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIGVzMmR4OjpDb252ZXJ0Q29sb3JNYXNr
KG1TdGF0ZS5jb2xvck1hc2tSZWQsIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiwgbVN0YXRlLmNvbG9y
TWFza0JsdWUsIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSkpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q09MT1JXUklURUVOQUJMRSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RlbmNpbFVu
bWFza2VkICE9IDB4MCAmJiAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVOQ0lMKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwg
VFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURF
RFNURU5DSUxNT0RFLCBGQUxTRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TVEVOQ0lMRlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMUkVGLCBzdGVuY2lsKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NURU5DSUxGQUlMLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBM
QUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxQ
QVNTLCBEM0RTVEVOQ0lMT1BfUkVQTEFDRSk7Ci0gICAgICAgICAgICBtU3RlbmNpbFN0YXRlRGly
dHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0UpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKLSAgICAgICAgbURldmljZS0+U2V0
RlZGKEQzREZWRl9YWVpSSFcpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotICAgICAgICBtRGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwot
ICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JBUkcx
LCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUo
MCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAgICAgICAgbURldmljZS0+
U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBQVJHMSwgRDNEVEFfVEZBQ1RPUik7
Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RFWFRVUkVGQUNUT1IsIGNv
bG9yKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVN
QVNLLCAweEZGRkZGRkZGKTsKLQotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVh
bVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBxdWFkWzRdWzRd
OyAgIC8vIEEgcXVhZHJpbGF0ZXJhbCBjb3ZlcmluZyB0aGUgdGFyZ2V0LCBhbGlnbmVkIHRvIG1h
dGNoIHRoZSBlZGdlcwotICAgICAgICBxdWFkWzBdWzBdID0gLTAuNWY7Ci0gICAgICAgIHF1YWRb
MF1bMV0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQgLSAwLjVmOwotICAgICAgICBxdWFkWzBd
WzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFswXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVhZFsx
XVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldpZHRoIC0gMC41ZjsKLSAgICAgICAgcXVhZFsxXVsx
XSA9IG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbMV1bMl0g
PSAwLjBmOwotICAgICAgICBxdWFkWzFdWzNdID0gMS4wZjsKLQotICAgICAgICBxdWFkWzJdWzBd
ID0gLTAuNWY7Ci0gICAgICAgIHF1YWRbMl1bMV0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFsyXVsy
XSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMl1bM10gPSAxLjBmOwotCi0gICAgICAgIHF1YWRbM11b
MF0gPSBtUmVuZGVyVGFyZ2V0RGVzYy5XaWR0aCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbM11bMV0g
PSAtMC41ZjsKLSAgICAgICAgcXVhZFszXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbM11bM10g
PSAxLjBmOwotCi0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIG1EZXZp
Y2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2Yo
ZmxvYXRbNF0pKTsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9aQlVGRkVSKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxF
LCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklU
RUVOQUJMRSwgVFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RD
TEVBUl9aQlVGRkVSLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+QXBwbHkoKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBlbHNlIGlmIChmbGFncykKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5V
TEwsIGZsYWdzLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwg
R0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0K
LQotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZlVHlwZTsKLSAgICBpbnQgcHJpbWl0aXZl
Q291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50
LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJpbWl0aXZlQ291bnQgPD0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZh
bHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhcHBseVN0YXRlKG1v
ZGUpOwotCi0gICAgR0xzaXplaSByZXBlYXREcmF3ID0gMTsKLSAgICBHTGVudW0gZXJyID0gYXBw
bHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsICZyZXBlYXREcmF3KTsKLSAg
ICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKGVy
cik7Ci0gICAgfQotCi0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAgYXBwbHlUZXh0dXJlcygpOwot
Ci0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5nZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlk
YXRlU2FtcGxlcnMoTlVMTCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmICghY3VsbFNraXBzRHJhdyhtb2RlKSkKLSAg
ICB7Ci0gICAgICAgIG1EaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdMaW5l
TG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RhdGljSW5kZXhCdWZm
ZXIgKmNvdW50aW5nSUIgPSBtSW5kZXhEYXRhTWFuYWdlci0+Z2V0Q291bnRpbmdJbmRpY2VzKGNv
dW50KTsKLSAgICAgICAgICAgIGlmIChjb3VudGluZ0lCKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IGNvdW50aW5nSUItPmdldFNlcmlhbCgp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0SW5k
aWNlcyhjb3VudGluZ0lCLT5nZXRCdWZmZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1BcHBs
aWVkSUJTZXJpYWwgPSBjb3VudGluZ0lCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdERyYXc7IGkrKykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRl
eGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIDAsIGNvdW50LCAwLCBwcmltaXRpdmVDb3Vu
dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIGNv
dW50aW5nIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkLiIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gUmVndWxhciBjYXNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0
aXZlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRyYXdFbGVt
ZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVu
dFByb2dyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgIH0KLQotICAgIGlmICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBwcmltaXRpdmVUeXBlOwotICAgIGludCBw
cmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUobW9k
ZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0aXZlQ291bnQpKQotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8PSAw
KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghYXBwbHlSZW5kZXJU
YXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFwcGx5
U3RhdGUobW9kZSk7Ci0KLSAgICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBH
TGVudW0gZXJyID0gYXBwbHlJbmRleEJ1ZmZlcihpbmRpY2VzLCBjb3VudCwgbW9kZSwgdHlwZSwg
JmluZGV4SW5mbyk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihlcnIpOwotICAgIH0KLQotICAgIEdMc2l6ZWkgdmVydGV4Q291bnQgPSBp
bmRleEluZm8ubWF4SW5kZXggLSBpbmRleEluZm8ubWluSW5kZXggKyAxOwotICAgIEdMc2l6ZWkg
cmVwZWF0RHJhdyA9IDE7Ci0gICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1p
bkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzLCAmcmVwZWF0RHJhdyk7Ci0gICAgaWYgKGVy
ciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihlcnIpOwotICAg
IH0KLQotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVyZXMoKTsKLQotICAgIGlm
ICghZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0UHJvZ3JhbUJpbmFyeSgpLT52YWxpZGF0ZVNhbXBs
ZXJzKGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQotICAgIHsKLSAg
ICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLQotICAgICAgICBpZiAobW9kZSA9PSBHTF9M
SU5FX0xPT1ApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgdHlw
ZSwgaW5kaWNlcywgaW5kZXhJbmZvLm1pbkluZGV4KTsgICAKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwZWF0RHJh
dzsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2UtPkRyYXdJbmRl
eGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5taW5JbmRleCwgaW5k
ZXhJbmZvLm1pbkluZGV4LCB2ZXJ0ZXhDb3VudCwgaW5kZXhJbmZvLnN0YXJ0SW5kZXgsIHByaW1p
dGl2ZUNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gSW1w
bGVtZW50cyBnbEZsdXNoIHdoZW4gYmxvY2sgaXMgZmFsc2UsIGdsRmluaXNoIHdoZW4gYmxvY2sg
aXMgdHJ1ZQotdm9pZCBDb250ZXh0OjpzeW5jKGJvb2wgYmxvY2spCi17Ci0gICAgbURpc3BsYXkt
PnN5bmMoYmxvY2spOwotfQotCi12b2lkIENvbnRleHQ6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgpCi17
Ci0gICAgLy8gR2V0IHRoZSByYXcgaW5kaWNlcyBmb3IgYW4gaW5kZXhlZCBkcmF3Ci0gICAgaWYg
KHR5cGUgIT0gR0xfTk9ORSAmJiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpKQotICAg
IHsKLSAgICAgICAgQnVmZmVyICppbmRleEJ1ZmZlciA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXIuZ2V0KCk7Ci0gICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGluZGljZXMpOwotICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1
Ynl0ZSo+KGluZGV4QnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0OwotICAgIH0KLQotICAgIFVJTlQg
c3RhcnRJbmRleCA9IDA7Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSBmYWxzZTsKLQotICAgIGlmIChz
dXBwb3J0czMyYml0SW5kaWNlcygpKQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHNwYWNlTmVl
ZGVkID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgaW50KTsKLQotICAgICAgICBpZiAo
IW1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGluZUxvb3BJQiA9IG5ldyBT
dHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpFLCBE
M0RGTVRfSU5ERVgzMik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUxpbmVMb29wSUIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVk
ZWQsIEdMX1VOU0lHTkVEX0lOVCk7Ci0KLSAgICAgICAgICAgIFVJTlQgb2Zmc2V0ID0gMDsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludCo+
KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgICAgIHN0
YXJ0SW5kZXggPSBvZmZzZXQgLyA0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0
YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRl
eGVkIGRyYXcKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
W2ldID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRh
W2NvdW50XSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNl
cylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtj
b3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbMF07Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ld
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWludCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNl
cylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBtTGluZUxvb3BJQi0+dW5tYXAoKTsKLSAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IGludCBzcGFjZU5lZWRlZCA9IChjb3VudCArIDEpICogc2l6ZW9mKHVuc2lnbmVk
IHNob3J0KTsKLQotICAgICAgICBpZiAoIW1MaW5lTG9vcElCKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtTGluZUxvb3BJQiA9IG5ldyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklU
SUFMX0lOREVYX0JVRkZFUl9TSVpFLCBEM0RGTVRfSU5ERVgxNik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElC
LT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKTsKLQotICAgICAg
ICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKmRhdGEg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1MaW5lTG9vcElCLT5tYXAoc3BhY2VOZWVk
ZWQsICZvZmZzZXQpKTsKLSAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBvZmZzZXQgLyAyOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9OT05FOiAgIC8vIE5vbi1pbmRleGVkIGRyYXcKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gaTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBH
THVieXRlKj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hv
cnQqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcylb
MF07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpW2ldOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbMF07Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtTGluZUxvb3BJQi0+dW5tYXAoKTsKLSAg
ICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGlmIChzdWNjZWVkZWQpCi0gICAgewotICAgICAgICBpZiAobUFw
cGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldEluZGljZXMobUxpbmVMb29wSUItPmdldEJ1ZmZlcigpKTsK
LSAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQ
VF9MSU5FU1RSSVAsIC1taW5JbmRleCwgbWluSW5kZXgsIGNvdW50LCBzdGFydEluZGV4LCBjb3Vu
dCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBhIGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AuIik7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6
cmVjb3JkSW52YWxpZEVudW0oKQotewotICAgIG1JbnZhbGlkRW51bSA9IHRydWU7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6cmVjb3JkSW52YWxpZFZhbHVlKCkKLXsKLSAgICBtSW52YWxpZFZhbHVlID0g
dHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCkKLXsKLSAg
ICBtSW52YWxpZE9wZXJhdGlvbiA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4dDo6cmVjb3JkT3V0
T2ZNZW1vcnkoKQotewotICAgIG1PdXRPZk1lbW9yeSA9IHRydWU7Ci19Ci0KLXZvaWQgQ29udGV4
dDo6cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCkKLXsKLSAgICBtSW52YWxpZEZy
YW1lYnVmZmVyT3BlcmF0aW9uID0gdHJ1ZTsKLX0KLQotLy8gR2V0IG9uZSBvZiB0aGUgcmVjb3Jk
ZWQgZXJyb3JzIGFuZCBjbGVhciBpdHMgZmxhZywgaWYgYW55LgotLy8gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gMi41IHBhZ2UgMTMuCi1HTGVudW0gQ29udGV4dDo6Z2V0RXJyb3IoKQotewot
ICAgIGlmIChtSW52YWxpZEVudW0pCi0gICAgewotICAgICAgICBtSW52YWxpZEVudW0gPSBmYWxz
ZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9FTlVNOwotICAgIH0KLQotICAgIGlmICht
SW52YWxpZFZhbHVlKQotICAgIHsKLSAgICAgICAgbUludmFsaWRWYWx1ZSA9IGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX1ZBTFVFOwotICAgIH0KLQotICAgIGlmIChtSW52YWxp
ZE9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0K
LSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIGlmICht
T3V0T2ZNZW1vcnkpCi0gICAgewotICAgICAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsKLQotICAg
ICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAgICB9Ci0KLSAgICBpZiAobUludmFsaWRG
cmFtZWJ1ZmZlck9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIG1JbnZhbGlkRnJhbWVidWZmZXJP
cGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1HTGVu
dW0gQ29udGV4dDo6Z2V0UmVzZXRTdGF0dXMoKQotewotICAgIGlmIChtUmVzZXRTdGF0dXMgPT0g
R0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBib29sIGxvc3QgPSBtRGlzcGxheS0+dGVzdERl
dmljZUxvc3QoKTsKLQotICAgICAgICBpZiAobG9zdCkKLSAgICAgICAgewotICAgICAgICAgICAg
bURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsgICAvLyBTZXRzIG1SZXNldFN0YXR1cwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgR0xlbnVtIHN0YXR1cyA9IG1SZXNldFN0YXR1czsKLQotICAg
IGlmIChtUmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBpZiAobURp
c3BsYXktPnRlc3REZXZpY2VSZXNldHRhYmxlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1S
ZXNldFN0YXR1cyA9IEdMX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBzdGF0dXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJs
ZWQoKQotewotICAgIHJldHVybiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09O
X1JFU0VUX0VYVCk7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSBj
b25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDM7Ci19Ci0KLWludCBDb250
ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdAotewotICAgIHJldHVybiBtU3Vw
cG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5H
X1ZFQ1RPUlNfU00yOwotfQotCi11bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzVmVydGV4
VGV4dHVyZSA/IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYgOiAwOwotfQotCi11
bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSBjb25zdAotewotICAgIHJldHVybiBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIGdldE1heGlt
dW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11
bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNT
aGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMyA6IE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4U3VwcG9y
dGVkU2FtcGxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwot
fQotCi1pbnQgQ29udGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZv
cm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKLXsKLSAgICBpZiAocmVxdWVzdGVkID09IDApCi0g
ICAgewotICAgICAgICByZXR1cm4gcmVxdWVzdGVkOwotICAgIH0KLQotICAgIHN0ZDo6bWFwPEQz
REZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9y
dC5maW5kKGZvcm1hdCk7Ci0gICAgaWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBy
ZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgKytpKQotICAgIHsKLSAg
ICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FC
TEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRXZlbnRRdWVyaWVz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRXZlbnRRdWVyaWVzOwotfQotCi1ib29s
IENvbnRleHQ6OnN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNE
WFQxVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNEWFQxVGV4dHVyZXM7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSBjb25zdAotewotICAg
IHJldHVybiBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9y
dHNEWFQ1VGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNEWFQ1VGV4dHVy
ZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4
dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcjsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNG
bG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxv
YXQxNlRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNlRleHR1
cmVzOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXI7Ci19Ci0KLWJv
b2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKLX0KLQotaW50
IENvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0
TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtTWF4VGV4dHVy
ZURpbWVuc2lvbjsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVu
c2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLX0K
LQotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSBjb25zdAotewotICAgIHJl
dHVybiBtTWF4VGV4dHVyZUxldmVsOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5h
bmNlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0
dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMo
KSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwot
fQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9y
dHMzMmJpdEluZGljZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHMzMmJpdEluZGlj
ZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZTsKLX0KLQotYm9vbCBDb250
ZXh0OjpzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNJ
bnN0YW5jaW5nOwotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVy
KQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIyOgotICAg
IC8vIElmIGEgYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdoaWxlIGl0IGlzIGJvdW5kLCBhbGwg
YmluZGluZ3MgdG8gdGhhdCBvYmplY3QgaW4gdGhlIGN1cnJlbnQgY29udGV4dAotICAgIC8vIChp
LmUuIGluIHRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFyZSByZXNldCB0
byB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAg
aWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgewotICAg
ICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBm
b3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0
cmlidXRlXS5tQm91bmRCdWZmZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0KE5V
TEwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaFRleHR1cmUo
R0x1aW50IHRleHR1cmUpCi17Ci0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44
IHBhZ2UgODQ6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBpcyBkZWxldGVkLCBpdCBpcyBh
cyBpZiBhbGwgdGV4dHVyZSB1bml0cyB3aGljaCBhcmUgYm91bmQgdG8gdGhhdCB0ZXh0dXJlIG9i
amVjdCBhcmUKLSAgICAvLyByZWJvdW5kIHRvIHRleHR1cmUgb2JqZWN0IHplcm8KLQotICAgIGZv
ciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAg
ewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgc2FtcGxlcisrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCkgPT0gdGV4dHVy
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVb
dHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTEyOgotICAg
IC8vIElmIGEgdGV4dHVyZSBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0
YWNoZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgdGhlbiBpdCBpcwotICAg
IC8vIGFzIGlmIEZyYW1lYnVmZmVyVGV4dHVyZTJEIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHRl
eHR1cmUgb2YgMCwgZm9yIGVhY2ggYXR0YWNobWVudCBwb2ludCB0byB3aGljaCB0aGlzCi0gICAg
Ly8gaW1hZ2Ugd2FzIGF0dGFjaGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIu
Ci0KLSAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVy
KCk7Ci0gICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZl
cigpOwotCi0gICAgaWYgKHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlYWRGcmFt
ZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd0Zy
YW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCi0gICAgewot
ICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0gICAgfQot
fQotCi12b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikK
LXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDc6Ci0gICAg
Ly8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFyZ2V0
IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaAotICAgIC8vIEJpbmRGcmFt
ZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIg
YW5kIGZyYW1lYnVmZmVyIG9mIHplcm8uCi0KLSAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZl
ciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmRSZWFkRnJhbWVidWZmZXIoMCk7
Ci0gICAgfQotCi0gICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPT0gZnJhbWVidWZmZXIp
Ci0gICAgewotICAgICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwotICAgIH0KLX0KLQotdm9p
ZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDk6Ci0gICAgLy8gSWYg
YSByZW5kZXJidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gUkVOREVSQlVGRkVSIGlz
IGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaCBCaW5kUmVuZGVyYnVmZmVyCi0gICAgLy8gaGFkIGJl
ZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6ZXJv
LgotCi0gICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKSA9PSByZW5kZXJidWZmZXIpCi0g
ICAgewotICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwotICAgIH0KLQotICAgIC8vIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMToKLSAgICAvLyBJZiBhIHJlbmRlcmJ1
ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdHMgaW1hZ2UgaXMgYXR0YWNoZWQgdG8gdGhl
IGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwKLSAgICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZl
ciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50Ci0gICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhpcyBp
bWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KLQot
ICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsK
LSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7
Ci0KLSAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVhZEZyYW1lYnVm
ZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCi0g
ICAgewotICAgICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJi
dWZmZXIpOwotICAgIH0KLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1
cmUoVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0
dXJlc1t0eXBlXS5nZXQoKTsKLQotICAgIGlmICh0ID09IE5VTEwpCi0gICAgewotICAgICAgICBz
dGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAwLCAyNTUgfTsKLQotICAgICAg
ICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIC8vIGRlZmF1bHQgZmFsbHMgdGhyb3VnaCB0
byBURVhUVVJFXzJECi0KLSAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJE
KFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0gICAgICAgICAgICAgICAgaW5jb21w
bGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBj
b2xvcik7Ci0gICAgICAgICAgICAgICAgdCA9IGluY29tcGxldGUyZDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9
IG5ldyBUZXh0dXJlQ3ViZU1hcChUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwotCi0g
ICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1goMCwgMSwgMSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRl
Q3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEs
IGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1h
Z2VQb3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAg
ICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0KLSAgICAgICAgICAgICAgdCA9IGluY29t
cGxldGVDdWJlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldCh0KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdDsKLX0KLQotYm9vbCBDb250ZXh0OjpjdWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3
TW9kZSkKLXsKLSAgICByZXR1cm4gbVN0YXRlLmN1bGxGYWNlICYmIG1TdGF0ZS5jdWxsTW9kZSA9
PSBHTF9GUk9OVF9BTkRfQkFDSyAmJiBpc1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7Ci19Ci0KLWJv
b2wgQ29udGV4dDo6aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQotewotICAgIHN3aXRj
aCAoZHJhd01vZGUpCi0gICAgewotICAgICAgY2FzZSBHTF9UUklBTkdMRVM6Ci0gICAgICBjYXNl
IEdMX1RSSUFOR0xFX0ZBTjoKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgICBjYXNlIEdMX0xJTkVT
OgotICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6Ci0gICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJp
YihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKLXsKLSAgICBBU1NFUlQoaW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1ZXNbMF07Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsKLSAgICBtU3Rh
dGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOwot
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbM10gPSB2YWx1
ZXNbM107Ci0KLSAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGluZGV4
KTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRl
eCwgR0x1aW50IGRpdmlzb3IpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tRGl2aXNvciA9
IGRpdmlzb3I7Ci19Ci0KLS8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCi0v
LyBPRVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lvbnMKLS8vIFZlbmRvciBleHRlbnNpb25z
Ci12b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQotewotICAgIG1FeHRlbnNpb25T
dHJpbmcgPSAiIjsKLQotICAgIC8vIE9FUyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzMzJi
aXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
ZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0gICAgLy9tRXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMgIjsKLQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygp
KQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkp
Ci0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMo
KSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zs
b2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xp
bmVhciAiOwotICAgIH0KLQotICAgIGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAg
ICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX25wb3QgIjsK
LSAgICB9Ci0KLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwotICAgIGlmIChz
dXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAiOwotICAgIH0KLQotICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7Ci0gICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3MgIjsKLQotICAgIGlmIChzdXBwb3J0c0RY
VDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhU
X3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOwotICAgIG1FeHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLQotICAgIC8vIEFOR0xFLXNwZWNp
ZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgewot
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7Ci0g
ICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dCAiOwotICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
ICI7Ci0gICAgfQotCi0gICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygpKQotICAgIHsKLSAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAiOwotICAg
IH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3df
b3JkZXIgIjsKLQotICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgIHsKLSAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQz
ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgIHsKLSAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1
ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91
c2FnZSAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hh
ZGVyX3NvdXJjZSAiOwotCi0gICAgLy8gT3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMK
LSAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmc6OnNp
emVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAg
ICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lv
blN0cmluZy5yZXNpemUoZW5kKzEpOwotICAgIH0KLX0KLQotY29uc3QgY2hhciAqQ29udGV4dDo6
Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUV4dGVuc2lvblN0cmlu
Zy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpCi17Ci0g
ICAgRDNEQURBUFRFUl9JREVOVElGSUVSOSAqaWRlbnRpZmllciA9IG1EaXNwbGF5LT5nZXRBZGFw
dGVySWRlbnRpZmllcigpOwotCi0gICAgbVJlbmRlcmVyU3RyaW5nID0gIkFOR0xFICgiOwotICAg
IG1SZW5kZXJlclN0cmluZyArPSBpZGVudGlmaWVyLT5EZXNjcmlwdGlvbjsKLSAgICBtUmVuZGVy
ZXJTdHJpbmcgKz0gIikiOwotfQotCi1jb25zdCBjaGFyICpDb250ZXh0OjpnZXRSZW5kZXJlclN0
cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZW5kZXJlclN0cmluZy5jX3N0cigpOwotfQot
Ci12b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAs
IEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaykKLXsKLSAgICBGcmFt
ZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJh
bWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAg
aWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAh
PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fAotICAgICAgICAhZHJhd0ZyYW1lYnVmZmVyIHx8
IGRyYXdGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMo
KSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICB9Ci0KLSAgICBpbnQgcmVhZEJ1ZmZlcldpZHRoID0gcmVhZEZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOwotICAgIGludCByZWFkQnVmZmVySGVpZ2h0ID0g
cmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsKLSAgICBpbnQg
ZHJhd0J1ZmZlcldpZHRoID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRX
aWR0aCgpOwotICAgIGludCBkcmF3QnVmZmVySGVpZ2h0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsKLQotICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICBS
RUNUIGRlc3RSZWN0OwotCi0gICAgaWYgKHNyY1gwIDwgc3JjWDEpCi0gICAgewotICAgICAgICBz
b3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsKLSAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gx
OwotICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0
ID0gZHN0WDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QubGVm
dCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJj
ZVJlY3QucmlnaHQgPSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3QucmlnaHQgPSBkc3RYMDsKLSAg
ICB9Ci0KLSAgICBpZiAoc3JjWTAgPCBzcmNZMSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3Qu
Ym90dG9tID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRzdFkxOwotICAgICAg
ICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kwOwotICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMDsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBzcmNZ
MDsKLSAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3Qu
dG9wID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnRvcCA9IGRzdFkxOwotICAgIH0KLQotICAg
IFJFQ1Qgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgUkVDVCBkZXN0U2Np
c3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCkKLSAg
ICB7Ci0gICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZy
YW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVzdAotICAgICAgICAvLyBQbGVhc2Ug
bm90ZTogdGhlIGRlc3RSZWN0IGlzIG5vdyBpbiBEM0Qtc3R5bGUgY29vcmRpbmF0ZXMsIHNvIHRo
ZSAqdG9wKiBvZiB0aGUKLSAgICAgICAgLy8gcmVjdCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBz
Y2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4KLSAgICAgICAgaWYgKGRlc3RSZWN0Lmxl
ZnQgPCBtU3RhdGUuc2Npc3NvclgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9
IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7Ci0gICAgICAgICAgICBkZXN0U2Npc3Nv
cmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOwotICAgICAgICAgICAgc291cmNlU2Npc3Nv
cmVkUmVjdC5sZWZ0ICs9IHhEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0
LnJpZ2h0ID4gbVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJlY3QucmlnaHQgLSAobVN0YXRlLnNjaXNz
b3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVj
dC5yaWdodCA9IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGg7Ci0gICAgICAg
ICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8IG1TdGF0ZS5zY2lzc29yWSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHlEaWZmID0gbVN0YXRlLnNjaXNzb3JZIC0gZGVzdFJlY3QudG9wOwotICAg
ICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QudG9wID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZGVzdFJlY3QuYm90dG9tID4gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNz
b3JIZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IGRlc3RSZWN0LmJv
dHRvbSAtIChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCk7Ci0gICAgICAg
ICAgICBkZXN0U2Npc3NvcmVkUmVjdC5ib3R0b20gPSBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUu
c2Npc3NvckhlaWdodDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuYm90dG9tIC09
IHlEaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0g
ZmFsc2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSRUNUIHNv
dXJjZVRyaW1tZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsKLSAgICBSRUNUIGRlc3RUcmlt
bWVkUmVjdCA9IGRlc3RTY2lzc29yZWRSZWN0OwotCi0gICAgLy8gVGhlIHNvdXJjZSAmIGRlc3Rp
bmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFs
bCBvdXQgb2YgdGhlIGJvdW5kcyBvZiAKLSAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQg
c3VyZmFjZXMuCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCAwKQotICAgIHsKLSAg
ICAgICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQ7Ci0gICAgICAgIHNv
dXJjZVRyaW1tZWRSZWN0LmxlZnQgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QubGVmdCAr
PSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiByZWFk
QnVmZmVyV2lkdGgpCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSBzb3VyY2VUcmltbWVkUmVj
dC5yaWdodCAtIHJlYWRCdWZmZXJXaWR0aDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qucmln
aHQgPSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4
RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50b3A7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3Ag
Kz0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJl
YWRCdWZmZXJIZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVk
UmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVj
dC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90
dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDAp
Ci0gICAgewotICAgICAgICBpbnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQ7Ci0g
ICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJl
Y3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0
ID4gZHJhd0J1ZmZlcldpZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1t
ZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
cmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0
IC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QudG9wIDwgMCkKLSAg
ICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOwotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QudG9wID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9w
ICs9IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJh
d0J1ZmZlckhlaWdodCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IGRlc3RUcmltbWVkUmVj
dC5ib3R0b20gLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90
dG9tID0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9t
IC09IHlEaWZmOwotICAgIH0KLQotICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsK
LSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gc291cmNlVHJpbW1lZFJlY3QudG9w
IDwgcmVhZEJ1ZmZlckhlaWdodCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAt
IHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRl
c3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0J1ZmZlckhl
aWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3Qu
bGVmdCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3Ag
IT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVm
dCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApCi0gICAgewotICAgICAgICBwYXJ0
aWFsQnVmZmVyQ29weSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9C
VUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgY29uc3QgYm9vbCB2YWxpZFJlYWRUeXBlID0gcmVh
ZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0g
ICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JF
TkRFUkJVRkZFUjsKLSAgICAgICAgY29uc3QgYm9vbCB2YWxpZERyYXdUeXBlID0gZHJhd0ZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhUVVJFXzJEIHx8Ci0gICAgICAg
ICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpID09IEdMX1JFTkRFUkJV
RkZFUjsKLSAgICAgICAgaWYgKCF2YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8Ci0g
ICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1h
dCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJz
aW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1l
bnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYm
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBibGl0UmVuZGVyVGFyZ2V0ID0gdHJ1ZTsKLQotICAgIH0KLQotICAgIGlmIChtYXNrICYg
KEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgIHsKLSAg
ICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNCdWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJi
dWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBkbyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0
YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8v
IGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVm
ZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBk
cmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJh
d0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAgICAg
ICByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0
aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIg
PSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigp
ICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBl
KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RG
b3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9y
bWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWREU0J1
ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5
KQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk9ubHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFu
ZCBzdGVuY2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9ubHkg
d2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCi0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAK
LSAgICAgICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkg
IT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8
fCBibGl0RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmVuZFNjZW5lKCk7
Ci0KLSAgICAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5KiByZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEZyYW1lYnVmZmVyLT5n
ZXRSZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5KiBkcmF3UmVu
ZGVyVGFyZ2V0ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLQotICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkUmVuZGVyVGFy
Z2V0LCAmc291cmNlVHJpbW1lZFJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LCAmZGVzdFRyaW1tZWRSZWN0LCBE
M0RURVhGX05PTkUpOwotCi0gICAgICAgICAgICByZWFkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICBkcmF3UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIo
IkJsaXRGcmFtZWJ1ZmZlckFOR0xFIGZhaWxlZDogU3RyZXRjaFJlY3QgcmV0dXJuZWQgJXguIiwg
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWREZXB0aFN0ZW5jaWwgPSByZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdE
ZXB0aFN0ZW5jaWwgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWREZXB0aFN0
ZW5jaWwsIE5VTEwsIGRyYXdEZXB0aFN0ZW5jaWwsIE5VTEwsIEQzRFRFWEZfTk9ORSk7Ci0KLSAg
ICAgICAgICAgIHJlYWREZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGRyYXdE
ZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5H
TEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotVmVy
dGV4RGVjbGFyYXRpb25DYWNoZTo6VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpIDogbU1heExydSgw
KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJ
RVM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFy
YXRpb24gPSBOVUxMOwotICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLmxydUNvdW50ID0gMDsK
LSAgICB9Ci19Ci0KLVZlcnRleERlY2xhcmF0aW9uQ2FjaGU6On5WZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9F
TlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0
ZXhEZWNsYXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtp
XS52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1H
TGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsYXJhdGlvbihJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tdLCBQcm9ncmFt
ICpwcm9ncmFtLCBHTHNpemVpIGluc3RhbmNlcywgR0xzaXplaSAqcmVwZWF0RHJhdykKLXsKLSAg
ICAqcmVwZWF0RHJhdyA9IDE7Ci0KLSAgICBpbnQgaW5kZXhlZEF0dHJpYnV0ZSA9IE1BWF9WRVJU
RVhfQVRUUklCUzsKLSAgICBpbnQgaW5zdGFuY2VkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRS
SUJTOwotCi0gICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgewotICAgICAgICAvLyBGaW5kIGFu
IGluZGV4ZWQgYXR0cmlidXRlIHRvIGJlIG1hcHBlZCB0byBEM0Qgc3RyZWFtIDAKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChpbmRleGVkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ld
LmRpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhlZEF0dHJpYnV0ZSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdGFuY2VkQXR0cmlidXRl
ID09IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgIT0gMCkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VkQXR0cmlidXRlID0gaTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIGJyZWFrOyAgIC8vIEZvdW5kIGJvdGggYW4gaW5kZXhlZCBhbmQgaW5zdGFuY2VkIGF0dHJp
YnV0ZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZGV4ZWRBdHRy
aWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBEM0RWRVJU
RVhFTEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMgKyAxXTsKLSAgICBEM0RWRVJU
RVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50c1swXTsKLQotICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3Ry
ZWFtID0gaTsKLQotICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8gRHVlIHRvIGEgYnVnIG9uIEFUSSBjYXJkcyB3ZSBjYW4ndCBl
bmFibGUgaW5zdGFuY2luZyB3aGVuIG5vbmUgb2YgdGhlIGF0dHJpYnV0ZXMgYXJlIGluc3RhbmNl
ZC4KLSAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhf
QVRUUklCUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpyZXBlYXRE
cmF3ID0gaW5zdGFuY2VzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbmRleGVk
QXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHJlYW0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyZWFtID0gaW5kZXhlZEF0dHJpYnV0ZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIFVJTlQgZnJlcXVlbmN5ID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW2ldLmRpdmlzb3Ig
PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJl
cXVlbmN5ID0gRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgaW5zdGFuY2VzOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gRDNEU1RSRUFNU09V
UkNFX0lOU1RBTkNFREFUQSB8IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHN0cmVhbSwgZnJlcXVlbmN5KTsKLSAgICAgICAgICAgICAg
ICAgICAgbUluc3RhbmNpbmdFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtQXBwbGllZFZCc1tzdHJlYW1dLnNlcmlhbCAh
PSBhdHRyaWJ1dGVzW2ldLnNlcmlhbCB8fAotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0
cmVhbV0uc3RyaWRlICE9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlIHx8Ci0gICAgICAgICAgICAgICAg
bUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgIT0gYXR0cmlidXRlc1tpXS5vZmZzZXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2Uoc3RyZWFt
LCBhdHRyaWJ1dGVzW2ldLnZlcnRleEJ1ZmZlciwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJp
YnV0ZXNbaV0uc3RyaWRlKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLnNl
cmlhbCA9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJz
W3N0cmVhbV0uc3RyaWRlID0gYXR0cmlidXRlc1tpXS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAg
bUFwcGxpZWRWQnNbc3RyZWFtXS5vZmZzZXQgPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOwotICAgICAg
ICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBh
dHRyaWJ1dGVzW2ldLnR5cGU7Ci0gICAgICAgICAgICBlbGVtZW50LT5NZXRob2QgPSBEM0RERUNM
TUVUSE9EX0RFRkFVTFQ7Ci0gICAgICAgICAgICBlbGVtZW50LT5Vc2FnZSA9IEQzRERFQ0xVU0FH
RV9URVhDT09SRDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlSW5kZXggPSBwcm9ncmFtQmlu
YXJ5LT5nZXRTZW1hbnRpY0luZGV4KGkpOwotICAgICAgICAgICAgZWxlbWVudCsrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGluc3RhbmNlZEF0dHJpYnV0
ZSA9PSBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAgICBpZiAobUluc3RhbmNpbmdF
bmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRldmlj
ZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgbUluc3RhbmNpbmdFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBz
dGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNEREVDTF9FTkQoKTsKLSAgICAq
KGVsZW1lbnQrKykgPSBlbmQ7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhf
REVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAgewotICAgICAgICBWZXJ0ZXhEZWNsQ2FjaGVF
bnRyeSAqZW50cnkgPSAmbVZlcnRleERlY2xDYWNoZVtpXTsKLSAgICAgICAgaWYgKG1lbWNtcChl
bnRyeS0+Y2FjaGVkRWxlbWVudHMsIGVsZW1lbnRzLCAoZWxlbWVudCAtIGVsZW1lbnRzKSAqIHNp
emVvZihEM0RWRVJURVhFTEVNRU5UOSkpID09IDAgJiYgZW50cnktPnZlcnRleERlY2xhcmF0aW9u
KQotICAgICAgICB7Ci0gICAgICAgICAgICBlbnRyeS0+bHJ1Q291bnQgPSArK21NYXhMcnU7Ci0g
ICAgICAgICAgICBpZihlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24gIT0gbUxhc3RTZXRWRGVjbCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFZlcnRleERlY2xhcmF0
aW9uKGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgbUxhc3RTZXRW
RGVjbCA9IGVudHJ5LT52ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcmV0dXJuIEdMX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVmVydGV4
RGVjbENhY2hlRW50cnkgKmxhc3RDYWNoZSA9IG1WZXJ0ZXhEZWNsQ2FjaGU7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKyspCi0gICAg
ewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS5scnVDb3VudCA8IGxhc3RDYWNoZS0+
bHJ1Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RDYWNoZSA9ICZtVmVydGV4RGVj
bENhY2hlW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24gIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVj
bGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlv
biA9IE5VTEw7Ci0gICAgICAgIC8vIG1MYXN0U2V0VkRlY2wgaXMgc2V0IHRvIHRoZSByZXBsYWNl
bWVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQotICAgICAgICAvLyBhYm91dCBpdC4KLSAg
ICB9Ci0KLSAgICBtZW1jcHkobGFzdENhY2hlLT5jYWNoZWRFbGVtZW50cywgZWxlbWVudHMsIChl
bGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5KSk7Ci0gICAgZGV2
aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJmxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24pOwotICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24obGFzdENhY2hl
LT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgbUxhc3RTZXRWRGVjbCA9IGxhc3RDYWNoZS0+dmVy
dGV4RGVjbGFyYXRpb247Ci0gICAgbGFzdENhY2hlLT5scnVDb3VudCA9ICsrbU1heExydTsKLQot
ICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotdm9pZCBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
OjptYXJrU3RhdGVEaXJ0eSgpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVkJzW2ldLnNlcmlhbCA9IDA7
Ci0gICAgfQotCi0gICAgbUxhc3RTZXRWRGVjbCA9IE5VTEw7Ci0gICAgbUluc3RhbmNpbmdFbmFi
bGVkID0gdHJ1ZTsgICAvLyBGb3JjZXMgaXQgdG8gYmUgZGlzYWJsZWQgd2hlbiBub3QgdXNlZAot
fQotCi19Ci0KLWV4dGVybiAiQyIKLXsKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29u
c3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwg
Ym9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQotewotICAgIHJldHVybiBuZXcg
Z2w6OkNvbnRleHQoY29uZmlnLCBzaGFyZUNvbnRleHQsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNj
ZXNzKTsKLX0KLQotdm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQot
ewotICAgIGRlbGV0ZSBjb250ZXh0OwotCi0gICAgaWYgKGNvbnRleHQgPT0gZ2w6OmdldENvbnRl
eHQoKSkKLSAgICB7Ci0gICAgICAgIGdsOjptYWtlQ3VycmVudChOVUxMLCBOVUxMLCBOVUxMKTsK
LSAgICB9Ci19Ci0KLXZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4dCAqY29udGV4dCwgZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0gICAgZ2w6Om1h
a2VDdXJyZW50KGNvbnRleHQsIGRpc3BsYXksIHN1cmZhY2UpOwotfQotCi1nbDo6Q29udGV4dCAq
Z2xHZXRDdXJyZW50Q29udGV4dCgpCi17Ci0gICAgcmV0dXJuIGdsOjpnZXRDb250ZXh0KCk7Ci19
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDQ3Y2U3Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjYxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbnRleHQuaDog
RGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQg
cGVyZm9ybWluZwotLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVj
aWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgotCi0jaWZuZGVmIExJQkdMRVNWMl9D
T05URVhUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05URVhUX0hfCi0KLSNkZWZpbmUgR0xfQVBJ
Q0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgot
I2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgot
Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPGhhc2hfbWFwPgotCi0jaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0hh
bmRsZUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBEaXNwbGF5OwotY2xh
c3MgU3VyZmFjZTsKLWNsYXNzIENvbmZpZzsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci1zdHJ1Y3Qg
VHJhbnNsYXRlZEF0dHJpYnV0ZTsKLXN0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhOwotCi1jbGFz
cyBCdWZmZXI7Ci1jbGFzcyBTaGFkZXI7Ci1jbGFzcyBQcm9ncmFtOwotY2xhc3MgVGV4dHVyZTsK
LWNsYXNzIFRleHR1cmUyRDsKLWNsYXNzIFRleHR1cmVDdWJlTWFwOwotY2xhc3MgRnJhbWVidWZm
ZXI7Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlOwotY2xh
c3MgQ29sb3JidWZmZXI7Ci1jbGFzcyBEZXB0aGJ1ZmZlcjsKLWNsYXNzIFN0cmVhbWluZ0luZGV4
QnVmZmVyOwotY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsK
LWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwotY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKLWNsYXNz
IEJsaXQ7Ci1jbGFzcyBGZW5jZTsKLWNsYXNzIFF1ZXJ5OwotCi1lbnVtCi17Ci0gICAgRDNEOV9N
QVhfRkxPQVRfQ09OU1RBTlRTID0gMjU2LAotICAgIEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRTID0g
MTYsCi0gICAgRDNEOV9NQVhfSU5UX0NPTlNUQU5UUyA9IDE2LAotCi0gICAgTUFYX1ZFUlRFWF9B
VFRSSUJTID0gMTYsCi0gICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMgLSAyLCAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGR4X0hhbGZQaXhlbFNp
emUgYW5kIGR4X0RlcHRoUmFuZ2UuCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9SU19TTTIgPSA4LAot
ICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0gMTAsCi0gICAgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgPSAxNiwKLSAgICBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGID0gNCwg
ICAvLyBGb3IgZGV2aWNlcyBzdXBwb3J0aW5nIHZlcnRleCB0ZXh0dXJlIGZldGNoCi0gICAgTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFMgKyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGLCAgICAKLSAgICBNQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMiA9IDMyIC0gMywgICAgLy8gUmVzZXJ2ZSBzcGFjZSBm
b3IgZHhfQ29vcmQsIGR4X0RlcHRoLCBhbmQgZHhfRGVwdGhSYW5nZS4gZHhfUG9pbnRPckxpbmVz
IGFuZCBkeF9Gcm9udENDVyB1c2Ugc2VwYXJhdGUgYm9vbCByZWdpc3RlcnMuCi0gICAgTUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTMgPSAyMjQgLSAzLAotICAgIE1BWF9EUkFXX0JVRkZF
UlMgPSAxLAotCi0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgPSBHTF9SR0Is
Ci0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFID0gR0xfVU5TSUdORURfU0hPUlRf
NV82XzUKLX07Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFT
U0VELAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUsCi0KLSAgICBR
VUVSWV9UWVBFX0NPVU5UCi19OwotCi1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFO
R0VfTUlOID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVgg
PSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTiA9IDEuMGY7
Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMiA9IDEuMGY7Ci1j
b25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMyA9IDY0LjBmOwotCi1z
dHJ1Y3QgQ29sb3IKLXsKLSAgICBmbG9hdCByZWQ7Ci0gICAgZmxvYXQgZ3JlZW47Ci0gICAgZmxv
YXQgYmx1ZTsKLSAgICBmbG9hdCBhbHBoYTsKLX07Ci0KLS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVz
Y3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCi1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUK
LXsKLSAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBt
U2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwg
bUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCi0gICAgewotICAgICAgICBtQ3VycmVu
dFZhbHVlWzBdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAg
ICAgIG1DdXJyZW50VmFsdWVbMl0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0g
MS4wZjsKLSAgICB9Ci0KLSAgICBpbnQgdHlwZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
c3dpdGNoIChtVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURTogICAgICAg
ICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKLSAgICAgICAgICBj
YXNlIEdMX1NIT1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7Ci0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9mKEdM
dXNob3J0KTsKLSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNpemUg
KiBzaXplb2YoR0xmaXhlZCk7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgcmV0
dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU3Ry
aWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRnJvbSBnbFZlcnRl
eEF0dHJpYlBvaW50ZXIKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAg
Ym9vbCBtTm9ybWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1
cmFsIHN0cmlkZQotCi0gICAgdW5pb24KLSAgICB7Ci0gICAgICAgIGNvbnN0IHZvaWQgKm1Qb2lu
dGVyOwotICAgICAgICBpbnRwdHJfdCBtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBCaW5kaW5nUG9p
bnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBDYXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0
cmliUG9pbnRlciBpcyBjYWxsZWQuCi0KLSAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJv
bSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKLSAgICBmbG9hdCBtQ3VycmVudFZh
bHVlWzRdOyAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKLSAgICB1bnNpZ25lZCBpbnQgbURpdmlz
b3I7Ci19OwotCi10eXBlZGVmIFZlcnRleEF0dHJpYnV0ZSBWZXJ0ZXhBdHRyaWJ1dGVBcnJheVtN
QVhfVkVSVEVYX0FUVFJJQlNdOwotCi0vLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCBy
YXcgc3RhdGUKLXN0cnVjdCBTdGF0ZQotewotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKLSAg
ICBHTGNsYW1wZiBkZXB0aENsZWFyVmFsdWU7Ci0gICAgaW50IHN0ZW5jaWxDbGVhclZhbHVlOwot
Ci0gICAgYm9vbCBjdWxsRmFjZTsKLSAgICBHTGVudW0gY3VsbE1vZGU7Ci0gICAgR0xlbnVtIGZy
b250RmFjZTsKLSAgICBib29sIGRlcHRoVGVzdDsKLSAgICBHTGVudW0gZGVwdGhGdW5jOwotICAg
IGJvb2wgYmxlbmQ7Ci0gICAgR0xlbnVtIHNvdXJjZUJsZW5kUkdCOwotICAgIEdMZW51bSBkZXN0
QmxlbmRSR0I7Ci0gICAgR0xlbnVtIHNvdXJjZUJsZW5kQWxwaGE7Ci0gICAgR0xlbnVtIGRlc3RC
bGVuZEFscGhhOwotICAgIEdMZW51bSBibGVuZEVxdWF0aW9uUkdCOwotICAgIEdMZW51bSBibGVu
ZEVxdWF0aW9uQWxwaGE7Ci0gICAgQ29sb3IgYmxlbmRDb2xvcjsKLSAgICBib29sIHN0ZW5jaWxU
ZXN0OwotICAgIEdMZW51bSBzdGVuY2lsRnVuYzsKLSAgICBHTGludCBzdGVuY2lsUmVmOwotICAg
IEdMdWludCBzdGVuY2lsTWFzazsKLSAgICBHTGVudW0gc3RlbmNpbEZhaWw7Ci0gICAgR0xlbnVt
IHN0ZW5jaWxQYXNzRGVwdGhGYWlsOwotICAgIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzczsK
LSAgICBHTHVpbnQgc3RlbmNpbFdyaXRlbWFzazsKLSAgICBHTGVudW0gc3RlbmNpbEJhY2tGdW5j
OwotICAgIEdMaW50IHN0ZW5jaWxCYWNrUmVmOwotICAgIEdMdWludCBzdGVuY2lsQmFja01hc2s7
Ci0gICAgR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbDsKLSAgICBHTGVudW0gc3RlbmNpbEJhY2tQYXNz
RGVwdGhGYWlsOwotICAgIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7Ci0gICAgR0x1
aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrOwotICAgIGJvb2wgcG9seWdvbk9mZnNldEZpbGw7Ci0g
ICAgR0xmbG9hdCBwb2x5Z29uT2Zmc2V0RmFjdG9yOwotICAgIEdMZmxvYXQgcG9seWdvbk9mZnNl
dFVuaXRzOwotICAgIGJvb2wgc2FtcGxlQWxwaGFUb0NvdmVyYWdlOwotICAgIGJvb2wgc2FtcGxl
Q292ZXJhZ2U7Ci0gICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VWYWx1ZTsKLSAgICBib29sIHNh
bXBsZUNvdmVyYWdlSW52ZXJ0OwotICAgIGJvb2wgc2Npc3NvclRlc3Q7Ci0gICAgYm9vbCBkaXRo
ZXI7Ci0KLSAgICBHTGZsb2F0IGxpbmVXaWR0aDsKLQotICAgIEdMZW51bSBnZW5lcmF0ZU1pcG1h
cEhpbnQ7Ci0gICAgR0xlbnVtIGZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7Ci0KLSAgICBH
TGludCB2aWV3cG9ydFg7Ci0gICAgR0xpbnQgdmlld3BvcnRZOwotICAgIEdMc2l6ZWkgdmlld3Bv
cnRXaWR0aDsKLSAgICBHTHNpemVpIHZpZXdwb3J0SGVpZ2h0OwotICAgIGZsb2F0IHpOZWFyOwot
ICAgIGZsb2F0IHpGYXI7Ci0KLSAgICBHTGludCBzY2lzc29yWDsKLSAgICBHTGludCBzY2lzc29y
WTsKLSAgICBHTHNpemVpIHNjaXNzb3JXaWR0aDsKLSAgICBHTHNpemVpIHNjaXNzb3JIZWlnaHQ7
Ci0KLSAgICBib29sIGNvbG9yTWFza1JlZDsKLSAgICBib29sIGNvbG9yTWFza0dyZWVuOwotICAg
IGJvb2wgY29sb3JNYXNrQmx1ZTsKLSAgICBib29sIGNvbG9yTWFza0FscGhhOwotICAgIGJvb2wg
ZGVwdGhNYXNrOwotCi0gICAgdW5zaWduZWQgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZl
IHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCi0gICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRB
cnJheUJ1ZmZlcjsKLSAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVyOwotICAgIEdMdWludCBkcmF3
RnJhbWVidWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiByZW5kZXJidWZm
ZXI7Ci0gICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwotCi0gICAgVmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEJpbmRpbmdQb2ludGVyPFRl
eHR1cmU+IHNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfVFlQRV9DT1VOVF1bTUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLSAgICBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gYWN0aXZl
UXVlcnlbUVVFUllfVFlQRV9DT1VOVF07Ci0KLSAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0g
ICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tSZXZlcnNlUm93T3JkZXI7Ci19
OwotCi0vLyBIZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFy
YXRpb25zCi1jbGFzcyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlCi17Ci0gIHB1YmxpYzoKLSAgICBW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlKCk7Ci0gICAgflZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKTsK
LQotICAgIEdMZW51bSBhcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwg
VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6
ZWkgaW5zdGFuY2VzLCBHTHNpemVpICpyZXBlYXREcmF3KTsKLQotICAgIHZvaWQgbWFya1N0YXRl
RGlydHkoKTsKLQotICBwcml2YXRlOgotICAgIFVJTlQgbU1heExydTsKLQotICAgIGVudW0geyBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUyA9IDMyIH07Ci0KLSAgICBzdHJ1Y3QgVkJEYXRh
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc2VyaWFsOwotICAgICAgICB1bnNpZ25lZCBp
bnQgc3RyaWRlOwotICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotICAgIH07Ci0KLSAgICBW
QkRhdGEgbUFwcGxpZWRWQnNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBJRGlyZWN0M0RWZXJ0
ZXhEZWNsYXJhdGlvbjkgKm1MYXN0U2V0VkRlY2w7Ci0gICAgYm9vbCBtSW5zdGFuY2luZ0VuYWJs
ZWQ7Ci0KLSAgICBzdHJ1Y3QgVmVydGV4RGVjbENhY2hlRW50cnkKLSAgICB7Ci0gICAgICAgIEQz
RFZFUlRFWEVMRU1FTlQ5IGNhY2hlZEVsZW1lbnRzW01BWF9WRVJURVhfQVRUUklCUyArIDFdOwot
ICAgICAgICBVSU5UIGxydUNvdW50OwotICAgICAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlv
bjkgKnZlcnRleERlY2xhcmF0aW9uOwotICAgIH0gbVZlcnRleERlY2xDYWNoZVtOVU1fVkVSVEVY
X0RFQ0xfQ0FDSEVfRU5UUklFU107Ci19OwotCi1jbGFzcyBDb250ZXh0Ci17Ci0gIHB1YmxpYzoK
LSAgICBDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0
ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7Ci0K
LSAgICB+Q29udGV4dCgpOwotCi0gICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRp
c3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFya0Fs
bFN0YXRlRGlydHkoKTsKLSAgICB2b2lkIG1hcmtEeFVuaWZvcm1zRGlydHkoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBtYXJrQ29udGV4dExvc3QoKTsKLSAgICBib29sIGlzQ29udGV4dExvc3QoKTsK
LQotICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgotICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9h
dCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7Ci0KLSAgICB2b2lk
IHNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOwotCi0gICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwo
aW50IHN0ZW5jaWwpOwotCi0gICAgdm9pZCBzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpOwotICAg
IGJvb2wgaXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0Q3VsbE1vZGUo
R0xlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KTsKLQot
ICAgIHZvaWQgc2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0RlcHRoVGVz
dEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1
bmMpOwotCi0gICAgdm9pZCBzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKTsK
LSAgICAKLSAgICB2b2lkIHNldEJsZW5kKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0JsZW5k
RW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJj
ZVJHQiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBo
YSk7Ci0gICAgdm9pZCBzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0
IGJsdWUsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHNldEJsZW5kRXF1YXRpb24oR0xlbnVtIHJn
YkVxdWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbik7Ci0KLSAgICB2b2lkIHNldFN0ZW5jaWxU
ZXN0KGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0
OwotCi0gICAgdm9pZCBzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2lsRnVuYywgR0xpbnQg
c3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxCYWNr
UGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVp
bnQgc3RlbmNpbEJhY2tNYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50
IHN0ZW5jaWxXcml0ZW1hc2spOwotICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1
aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxPcGVyYXRpb25z
KEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0g
c3RlbmNpbFBhc3NEZXB0aFBhc3MpOwotICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tPcGVyYXRpb25z
KEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWws
IEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpOwotCi0gICAgdm9pZCBzZXRQb2x5Z29u
T2Zmc2V0RmlsbChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNQb2x5Z29uT2Zmc2V0RmlsbEVu
YWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0
IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7Ci0KLSAgICB2b2lkIHNldFNhbXBsZUFscGhhVG9Db3Zl
cmFnZShib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFi
bGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCk7
Ci0gICAgYm9vbCBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBz
ZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBpbnZlcnQpOwotCi0g
ICAgdm9pZCBzZXRTY2lzc29yVGVzdChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNTY2lzc29y
VGVzdEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0RGl0aGVyKGJvb2wgZW5hYmxlZCk7
Ci0gICAgYm9vbCBpc0RpdGhlckVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0TGluZVdp
ZHRoKEdMZmxvYXQgd2lkdGgpOwotCi0gICAgdm9pZCBzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xl
bnVtIGhpbnQpOwotICAgIHZvaWQgc2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludChHTGVu
dW0gaGludCk7Ci0KLSAgICB2b2lkIHNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZvaWQgc2V0U2Npc3NvclBh
cmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0K
LSAgICB2b2lkIHNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBi
b29sIGFscGhhKTsKLSAgICB2b2lkIHNldERlcHRoTWFzayhib29sIG1hc2spOwotCi0gICAgdm9p
ZCBzZXRBY3RpdmVTYW1wbGVyKHVuc2lnbmVkIGludCBhY3RpdmUpOwotCi0gICAgR0x1aW50IGdl
dFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXREcmF3RnJhbWVi
dWZmZXJIYW5kbGUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0UmVuZGVyYnVmZmVySGFuZGxlKCkg
Y29uc3Q7Ci0KLSAgICBHTHVpbnQgZ2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdDsKLQotICAg
IEdMdWludCBnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICAgIHZvaWQg
c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBl
bmFibGVkKTsKLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmdldFZlcnRleEF0dHJpYlN0YXRl
KHVuc2lnbmVkIGludCBhdHRyaWJOdW0pOwotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUo
dW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwg
R0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6
ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKLSAgICBjb25zdCB2b2lk
ICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0Owot
Ci0gICAgY29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJmdldFZlcnRleEF0dHJpYnV0ZXMoKTsK
LQotICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7Ci0gICAgR0xp
bnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhY2tBbGlnbm1l
bnQoR0xpbnQgYWxpZ25tZW50KTsKLSAgICBHTGludCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3JkZXIp
OwotICAgIGJvb2wgZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0OwotCi0gICAgLy8gVGhl
c2UgY3JlYXRlICBhbmQgZGVzdHJveSBtZXRob2RzIGFyZSBtZXJlbHkgcGFzcy10aHJvdWdocyB0
byAKLSAgICAvLyBSZXNvdXJjZU1hbmFnZXIsIHdoaWNoIG93bnMgdGhlc2Ugb2JqZWN0IHR5cGVz
Ci0gICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOwotICAgIEdMdWludCBjcmVhdGVTaGFkZXIoR0xl
bnVtIHR5cGUpOwotICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgR0x1aW50IGNyZWF0
ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KLSAgICB2b2lk
IGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVp
bnQgc2hhZGVyKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwotICAg
IHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZWxldGVSZW5k
ZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJl
IG93bmVkIGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91
Z2gKLSAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1l
YnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0KLSAgICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5
IHRoZSBDb250ZXh0LgotICAgIEdMdWludCBjcmVhdGVGZW5jZSgpOwotICAgIHZvaWQgZGVsZXRl
RmVuY2UoR0x1aW50IGZlbmNlKTsKLSAgICAKLSAgICAvLyBRdWVyaWVzIGFyZSBvd25lZCBieSB0
aGUgQ29udGV4dDsKLSAgICBHTHVpbnQgY3JlYXRlUXVlcnkoKTsKLSAgICB2b2lkIGRlbGV0ZVF1
ZXJ5KEdMdWludCBxdWVyeSk7Ci0KLSAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKLSAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7Ci0g
ICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGJpbmRUZXh0
dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVy
KEdMdWludCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWlu
dCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJi
dWZmZXIpOwotICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7Ci0KLSAgICB2b2lk
IGJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KTsKLSAgICB2b2lkIGVuZFF1
ZXJ5KEdMZW51bSB0YXJnZXQpOwotCi0gICAgdm9pZCBzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyKTsKLQotICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZShS
ZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpOwotCi0gICAgdm9pZCBzZXRWZXJ0ZXhB
dHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpOwotICAgIHZvaWQgc2V0
VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKLQotICAg
IEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIEZlbmNlICpnZXRGZW5jZShH
THVpbnQgaGFuZGxlKTsKLSAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKLSAg
ICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwotICAgIFRleHR1cmUgKmdldFRl
eHR1cmUoR0x1aW50IGhhbmRsZSk7Ci0gICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdM
dWludCBoYW5kbGUpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpOwotICAgIFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwg
R0xlbnVtIHR5cGUpOwotCi0gICAgQnVmZmVyICpnZXRBcnJheUJ1ZmZlcigpOwotICAgIEJ1ZmZl
ciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgUHJvZ3JhbSAqZ2V0Q3VycmVudFByb2dy
YW0oKTsKLSAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVDdWJlTWFw
ICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVu
c2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKLSAgICBGcmFtZWJ1ZmZlciAq
Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZl
cigpOwotCi0gICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMp
OwotICAgIGJvb2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKLSAg
ICBib29sIGdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMpOwotCi0g
ICAgYm9vbCBnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUs
IHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKTsKLQotICAgIHZvaWQgcmVhZFBpeGVscyhHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCBj
bGVhcihHTGJpdGZpZWxkIG1hc2spOwotICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwg
R0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2b2lk
IGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIHZvaWQgc3luYyhi
b29sIGJsb2NrKTsgICAvLyBmbHVzaC9maW5pc2gKLQotICAgIHZvaWQgZHJhd0xpbmVMb29wKEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5J
bmRleCk7Ci0KLSAgICB2b2lkIHJlY29yZEludmFsaWRFbnVtKCk7Ci0gICAgdm9pZCByZWNvcmRJ
bnZhbGlkVmFsdWUoKTsKLSAgICB2b2lkIHJlY29yZEludmFsaWRPcGVyYXRpb24oKTsKLSAgICB2
b2lkIHJlY29yZE91dE9mTWVtb3J5KCk7Ci0gICAgdm9pZCByZWNvcmRJbnZhbGlkRnJhbWVidWZm
ZXJPcGVyYXRpb24oKTsKLQotICAgIEdMZW51bSBnZXRFcnJvcigpOwotICAgIEdMZW51bSBnZXRS
ZXNldFN0YXR1cygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxl
ZCgpOwotCi0gICAgYm9vbCBzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0OwotICAgIGludCBn
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4
aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdl
dE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7Ci0gICAgaW50IGdldE1h
eGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1S
ZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVE
aW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9u
KCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSBjb25zdDsKLSAgICBH
THNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKLSAgICBpbnQgZ2V0TmVhcmVz
dFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3Q7
Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7Ci0gICAgY29uc3Qg
Y2hhciAqZ2V0UmVuZGVyZXJTdHJpbmcoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRXZlbnRR
dWVyaWVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSBjb25z
dDsKLSAgICBib29sIHN1cHBvcnRzRFhUMVRleHR1cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBw
b3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNEWFQ1VGV4dHVyZXMo
KSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkgY29uc3Q7Ci0gICAg
Ym9vbCBzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSBjb25zdDsKLSAgICBib29sIHN1cHBv
cnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNG
bG9hdDE2VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQxNkxpbmVhckZp
bHRlcigpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVz
KCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29s
IHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHMzMmJpdElu
ZGljZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0
OwotICAgIGJvb2wgc3VwcG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGJsaXRG
cmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBz
cmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkw
LCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xi
aXRmaWVsZCBtYXNrKTsKLQotICAgIEJsaXQgKmdldEJsaXR0ZXIoKSB7IHJldHVybiBtQmxpdDsg
fQotCi0gICAgY29uc3QgRDNEQ0FQUzkgJmdldERldmljZUNhcHMoKSB7IHJldHVybiBtRGV2aWNl
Q2FwczsgfQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbnRl
eHQpOwotCi0gICAgYm9vbCBhcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KTsK
LSAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsKLSAgICBHTGVudW0gYXBwbHlW
ZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCBHTHNpemVpICpyZXBlYXREcmF3KTsKLSAgICBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25z
dCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKLSAgICB2b2lkIGFwcGx5U2hhZGVy
cygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhT
YW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIHZvaWQgZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIp
OwotICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZXRh
Y2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwotICAgIHZvaWQgZGV0YWNoUmVuZGVy
YnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0gICAgVGV4dHVyZSAqZ2V0SW5jb21wbGV0
ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSk7Ci0KLSAgICBib29sIGN1bGxTa2lwc0RyYXcoR0xl
bnVtIGRyYXdNb2RlKTsKLSAgICBib29sIGlzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7
Ci0KLSAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAgICB2b2lkIGluaXRSZW5kZXJl
clN0cmluZygpOwotCi0gICAgY29uc3QgZWdsOjpDb25maWcgKmNvbnN0IG1Db25maWc7Ci0gICAg
ZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwot
Ci0gICAgU3RhdGUgbVN0YXRlOwotCi0gICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEPiBtVGV4
dHVyZTJEWmVybzsKLSAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVD
dWJlTWFwWmVybzsKLQotICAgIHR5cGVkZWYgc3RkZXh0OjpoYXNoX21hcDxHTHVpbnQsIEZyYW1l
YnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7Ci0gICAgRnJhbWVidWZmZXJNYXAgbUZyYW1lYnVmZmVy
TWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3I7Ci0K
LSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1aW50LCBGZW5jZSo+IEZlbmNlTWFwOwot
ICAgIEZlbmNlTWFwIG1GZW5jZU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlSGFuZGxl
QWxsb2NhdG9yOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgUXVlcnkq
PiBRdWVyeU1hcDsKLSAgICBRdWVyeU1hcCBtUXVlcnlNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9y
IG1RdWVyeUhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHN0ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJp
bmc7Ci0gICAgc3RkOjpzdHJpbmcgbVJlbmRlcmVyU3RyaW5nOwotCi0gICAgVmVydGV4RGF0YU1h
bmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhE
YXRhTWFuYWdlcjsKLQotICAgIEJsaXQgKm1CbGl0OwotCi0gICAgU3RyZWFtaW5nSW5kZXhCdWZm
ZXIgKm1MaW5lTG9vcElCOwotICAgIAotICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IG1JbmNv
bXBsZXRlVGV4dHVyZXNbVEVYVFVSRV9UWVBFX0NPVU5UXTsKLQotICAgIC8vIFJlY29yZGVkIGVy
cm9ycwotICAgIGJvb2wgbUludmFsaWRFbnVtOwotICAgIGJvb2wgbUludmFsaWRWYWx1ZTsKLSAg
ICBib29sIG1JbnZhbGlkT3BlcmF0aW9uOwotICAgIGJvb2wgbU91dE9mTWVtb3J5OwotICAgIGJv
b2wgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbjsKLQotICAgIC8vIEN1cnJlbnQvbG9zdCBj
b250ZXh0IGZsYWdzCi0gICAgYm9vbCBtSGFzQmVlbkN1cnJlbnQ7Ci0gICAgYm9vbCBtQ29udGV4
dExvc3Q7Ci0gICAgR0xlbnVtIG1SZXNldFN0YXR1czsKLSAgICBHTGVudW0gbVJlc2V0U3RyYXRl
Z3k7Ci0gICAgYm9vbCBtUm9idXN0QWNjZXNzOwotCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVk
VGV4dHVyZVNlcmlhbFBTW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICB1bnNpZ25lZCBp
bnQgbUFwcGxpZWRUZXh0dXJlU2VyaWFsVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
X1ZURl07Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbVNlcmlhbDsKLSAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1B
cHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNp
bGJ1ZmZlclNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKLSAgICBi
b29sIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZDsKLSAgICBib29sIG1WaWV3cG9ydEluaXRpYWxp
emVkOwotICAgIEQzRFZJRVdQT1JUOSBtU2V0Vmlld3BvcnQ7Ci0gICAgYm9vbCBtUmVuZGVyVGFy
Z2V0RGVzY0luaXRpYWxpemVkOwotICAgIEQzRFNVUkZBQ0VfREVTQyBtUmVuZGVyVGFyZ2V0RGVz
YzsKLSAgICBib29sIG1EeFVuaWZvcm1zRGlydHk7Ci0gICAgUHJvZ3JhbSAqbUNhY2hlZEN1cnJl
bnRQcm9ncmFtOwotICAgIEZyYW1lYnVmZmVyICptQm91bmREcmF3RnJhbWVidWZmZXI7Ci0KLSAg
ICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKLSAgICBib29sIG1TdXBwb3J0c1ZlcnRleFRl
eHR1cmU7Ci0gICAgYm9vbCBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlOwotICAgIGJvb2wgbVN1
cHBvcnRzSW5zdGFuY2luZzsKLSAgICBpbnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247Ci0g
ICAgaW50ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURp
bWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJlTGV2ZWw7Ci0gICAgc3RkOjptYXA8RDNERk9S
TUFULCBib29sICo+IG1NdWx0aVNhbXBsZVN1cHBvcnQ7Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9y
dGVkU2FtcGxlczsKLSAgICBib29sIG1TdXBwb3J0c0V2ZW50UXVlcmllczsKLSAgICBib29sIG1T
dXBwb3J0c09jY2x1c2lvblF1ZXJpZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQxVGV4dHVyZXM7
Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQzVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNEWFQ1
VGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM7Ci0gICAgYm9vbCBt
U3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyOwotICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlczsKLSAg
ICBib29sIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXI7Ci0gICAgYm9vbCBtU3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwotICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlVGV4
dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOwotICAgIGJv
b2wgbVN1cHBvcnRzRGVwdGhUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0czMyYml0SW5kaWNl
czsKLSAgICBpbnQgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKLQotICAgIC8vIHN0YXRl
IGNhY2hpbmcgZmxhZ3MKLSAgICBib29sIG1DbGVhclN0YXRlRGlydHk7Ci0gICAgYm9vbCBtQ3Vs
bFN0YXRlRGlydHk7Ci0gICAgYm9vbCBtRGVwdGhTdGF0ZURpcnR5OwotICAgIGJvb2wgbU1hc2tT
dGF0ZURpcnR5OwotICAgIGJvb2wgbVBpeGVsUGFja2luZ1N0YXRlRGlydHk7Ci0gICAgYm9vbCBt
QmxlbmRTdGF0ZURpcnR5OwotICAgIGJvb2wgbVN0ZW5jaWxTdGF0ZURpcnR5OwotICAgIGJvb2wg
bVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5OwotICAgIGJvb2wgbVNjaXNzb3JTdGF0ZURpcnR5Owot
ICAgIGJvb2wgbVNhbXBsZVN0YXRlRGlydHk7Ci0gICAgYm9vbCBtRnJvbnRGYWNlRGlydHk7Ci0g
ICAgYm9vbCBtRGl0aGVyU3RhdGVEaXJ0eTsKLQotICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICpt
TWFza2VkQ2xlYXJTYXZlZFN0YXRlOwotCi0gICAgRDNEQ0FQUzkgbURldmljZUNhcHM7Ci0KLSAg
ICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7Ci0KLSAgICBWZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOwotfTsKLX0KLQotZXh0ZXJuICJDIgot
ewotLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xD
cmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0
ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7Ci12
b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwotdm9pZCBnbE1ha2VD
dXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6
U3VyZmFjZSAqc3VyZmFjZSk7Ci1nbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgpOwot
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQ
cm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSk7Ci1ib29sIF9fc3RkY2FsbCBnbEJpbmRU
ZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURF
X0NPTlRFWFRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRmVuY2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9G
ZW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDEyMzkuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRmVu
Y2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRo
ZSBHTF9OVl9mZW5jZSBleHRlbnNpb24uCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIK
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1GZW5j
ZTo6RmVuY2UoZWdsOjpEaXNwbGF5KiBkaXNwbGF5KQotewotICAgIG1EaXNwbGF5ID0gZGlzcGxh
eTsKLSAgICBtUXVlcnkgPSBOVUxMOwotICAgIG1Db25kaXRpb24gPSBHTF9OT05FOwotICAgIG1T
dGF0dXMgPSBHTF9GQUxTRTsKLX0KLQotRmVuY2U6On5GZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVy
eSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPmZyZWVFdmVudFF1ZXJ5KG1RdWVy
eSk7Ci0gICAgfQotfQotCi1HTGJvb2xlYW4gRmVuY2U6OmlzRmVuY2UoKQotewotICAgIC8vIEdM
X05WX2ZlbmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBi
dXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlz
dGluZyBmZW5jZS4KLSAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7Ci19Ci0KLXZvaWQgRmVuY2U6
OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCi17Ci0gICAgaWYgKCFtUXVlcnkpCi0gICAgewot
ICAgICAgICBtUXVlcnkgPSBtRGlzcGxheS0+YWxsb2NhdGVFdmVudFF1ZXJ5KCk7Ci0gICAgICAg
IGlmICghbVF1ZXJ5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1R
dWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotCi0gICAgbUNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKLSAgICBtU3RhdHVzID0gR0xfRkFMU0U7
Ci19Ci0KLUdMYm9vbGVhbiBGZW5jZTo6dGVzdEZlbmNlKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09
IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IEdMX1RSVUUpOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRh
KE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0gICAgaWYgKGNoZWNrRGV2aWNlTG9zdChy
ZXN1bHQpKQotICAgIHsKLSAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xf
VFJVRSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBT
X0ZBTFNFKTsKLSAgICBtU3RhdHVzID0gcmVzdWx0ID09IFNfT0s7Ci0gICAgcmV0dXJuIG1TdGF0
dXM7Ci19Ci0KLXZvaWQgRmVuY2U6OmZpbmlzaEZlbmNlKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09
IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAgewotICAgICAgICBTbGVl
cCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2U6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBH
TGludCAqcGFyYW1zKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNo
IChwbmFtZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgICAgICAgICAgLy8gT25j
ZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5j
ZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhl
ciBUZXN0RmVuY2VOVgotICAgICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRo
ZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4
dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KLSAgICAgICAgICAgIGlmIChtU3RhdHVzKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCAwKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGNoZWNrRGV2aWNlTG9zdChyZXN1bHQpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOwotICAg
ICAgICAgICAgbVN0YXR1cyA9IHJlc3VsdCA9PSBTX09LOwotICAgICAgICAgICAgcGFyYW1zWzBd
ID0gbVN0YXR1czsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6Ci0gICAgICAgICAgICBwYXJhbXNb
MF0gPSBtQ29uZGl0aW9uOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GZW5jZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GZW5jZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjI2Y2IwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZl
bmNlLmg6IERlZmluZXMgdGhlIGdsOjpGZW5jZSBjbGFzcywgd2hpY2ggc3VwcG9ydHMgdGhlIEdM
X05WX2ZlbmNlIGV4dGVuc2lvbi4KLQotI2lmbmRlZiBMSUJHTEVTVjJfRkVOQ0VfSF8KLSNkZWZp
bmUgTElCR0xFU1YyX0ZFTkNFX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNzIERpc3BsYXk7Ci19Ci0KLW5hbWVzcGFj
ZSBnbAotewotCi1jbGFzcyBGZW5jZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRmVuY2Uo
ZWdsOjpEaXNwbGF5KiBkaXNwbGF5KTsKLSAgICB2aXJ0dWFsIH5GZW5jZSgpOwotCi0gICAgR0xi
b29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwot
ICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAg
dm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2UpOwotCi0gICAgZWdsOjpEaXNw
bGF5KiBtRGlzcGxheTsKLSAgICBJRGlyZWN0M0RRdWVyeTkqIG1RdWVyeTsKLSAgICBHTGVudW0g
bUNvbmRpdGlvbjsKLSAgICBHTGJvb2xlYW4gbVN0YXR1czsKLX07Ci0KLX0KLQotI2VuZGlmICAg
Ly8gTElCR0xFU1YyX0ZFTkNFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NmQ0MjgzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTA5ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEZyYW1lYnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUg
Z2w6OkZyYW1lYnVmZmVyIGNsYXNzLiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCi0vLyBvYmpl
Y3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDQuNCBwYWdlIDEwNS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1GcmFtZWJ1ZmZlcjo6RnJhbWVi
dWZmZXIoKQotewotICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1EZXB0aGJ1
ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci19
Ci0KLUZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQotewotICAgIG1Db2xvcmJ1ZmZlclBvaW50
ZXIuc2V0KE5VTEwpOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50
ZXIuc2V0KE5VTEwpOwotfQotCi1SZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5k
ZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0Ci17Ci0gICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIFJlbmRlcmJ1ZmZlciAqYnVm
ZmVyID0gTlVMTDsKLQotICAgIGlmICh0eXBlID09IEdMX05PTkUpCi0gICAgewotICAgICAgICBi
dWZmZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX1JFTkRFUkJVRkZF
UikKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5k
bGUpOwotICAgIH0KLSAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0eXBlKSkK
LSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0
UmVuZGVyYnVmZmVyKHR5cGUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgRnJhbWVi
dWZmZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpCi17
Ci0gICAgbUNvbG9yYnVmZmVyVHlwZSA9IChjb2xvcmJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9O
T05FOwotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBl
LCBjb2xvcmJ1ZmZlcikpOwotfQotCi12b2lkIEZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1ZmZlcihH
TGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQotewotICAgIG1EZXB0aGJ1ZmZlclR5cGUg
PSAoZGVwdGhidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtRGVwdGhidWZmZXJQ
b2ludGVyLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIpKTsKLX0KLQot
dm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0
ZW5jaWxidWZmZXIpCi17Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIg
IT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxv
b2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7Ci19Ci0KLXZvaWQgRnJhbWVi
dWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgaWYgKG1Db2xvcmJ1
ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1D
b2xvcmJ1ZmZlclR5cGUpKQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05P
TkU7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAg
IGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4
dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKLSAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZl
clR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsK
LSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAm
JiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQotICAgIHsKLSAg
ICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZm
ZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OmRldGFj
aFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIGlmIChtQ29sb3JidWZm
ZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xf
UkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX05PTkU7
Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlm
IChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1EZXB0aGJ1ZmZl
clR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgbURlcHRoYnVmZmVyVHlw
ZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAg
IH0KLQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIg
JiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAgICAg
IG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyUG9p
bnRlci5zZXQoTlVMTCk7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6Omdl
dFJlbmRlclRhcmdldFNlcmlhbCgpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9
IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAoY29sb3JidWZmZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gY29sb3JidWZmZXItPmdldFNlcmlhbCgpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBj
YWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZh
Y2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBSZW5kZXJidWZmZXIg
KmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKLQotICAgIGlmIChjb2xv
cmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFy
Z2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwo
KQotewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVy
UG9pbnRlci5nZXQoKTsKLSAgICAKLSAgICBpZiAoIWRlcHRoc3RlbmNpbGJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIGRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQo
KTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhzdGVuY2lsYnVmZmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhi
dWZmZXJTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBtRGVwdGhi
dWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGRlcHRoYnVmZmVyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFs
KCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIoKQotewotICAg
IHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOwotfQotCi1SZW5kZXJidWZmZXIgKkZy
YW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxi
dWZmZXIoKQotewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci19Ci0K
LVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldE51bGxDb2xvcmJ1ZmZlcigpCi17Ci0gICAg
UmVuZGVyYnVmZmVyICpudWxsYnVmZmVyICA9IG1OdWxsQ29sb3JidWZmZXJQb2ludGVyLmdldCgp
OwotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwotCi0g
ICAgaWYgKCFkZXB0aGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIEVSUigiVW5leHBlY3RlZCBudWxs
IGRlcHRoYnVmZmVyIGZvciBkZXB0aC1vbmx5IEZCTy4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotCi0gICAgR0xzaXplaSB3aWR0aCAgPSBkZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKTsK
LSAgICBHTHNpemVpIGhlaWdodCA9IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKTsKLQotICAgIGlm
ICghbnVsbGJ1ZmZlciB8fAotICAgICAgICB3aWR0aCAhPSBudWxsYnVmZmVyLT5nZXRXaWR0aCgp
IHx8IGhlaWdodCAhPSBudWxsYnVmZmVyLT5nZXRIZWlnaHQoKSkKLSAgICB7Ci0gICAgICAgIG51
bGxidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKDAsIG5ldyBDb2xvcmJ1ZmZlcih3aWR0aCwgaGVp
Z2h0LCBHTF9OT05FLCAwKSk7Ci0gICAgICAgIG1OdWxsQ29sb3JidWZmZXJQb2ludGVyLnNldChu
dWxsYnVmZmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbGJ1ZmZlcjsKLX0KLQotR0xlbnVt
IEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUoKQotewotICAgIHJldHVybiBtQ29sb3Ji
dWZmZXJUeXBlOwotfQotCi1HTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyVHlwZSgp
Ci17Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7Ci19Ci0KLUdMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKQotewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5
cGU7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5kbGUoKQotewot
ICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmlkKCk7Ci19Ci0KLUdMdWludCBGcmFtZWJ1
ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKQotewotICAgIHJldHVybiBtRGVwdGhidWZmZXJQ
b2ludGVyLmlkKCk7Ci19Ci0KLUdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhh
bmRsZSgpCi17Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpOwotfQotCi1i
b29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkKLXsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJU
eXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZm
ZXJPYmplY3QgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxidWZm
ZXJPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyT2Jq
ZWN0LT5nZXRTdGVuY2lsU2l6ZSgpID4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQotewotICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBpbnQgd2lkdGgg
PSAwOwotICAgIGludCBoZWlnaHQgPSAwOwotICAgIGludCBzYW1wbGVzID0gLTE7Ci0gICAgYm9v
bCBtaXNzaW5nQXR0YWNobWVudCA9IHRydWU7Ci0KLSAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSAh
PSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdl
dENvbG9yYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFjb2xvcmJ1ZmZlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8
IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtQ29s
b3JidWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9y
bWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBEM0RG
T1JNQVQgZDNkZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEQzREZvcm1hdCgpOwotCi0gICAgICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSB8fAotICAgICAgICAgICAgICAg
IGludGVybmFsZm9ybWF0ID09IEdMX0FMUEhBIHx8Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQg
PT0gR0xfTFVNSU5BTkNFX0FMUEhBKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKChkeDJlczo6SXNGbG9hdDMyRm9ybWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQt
PnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygpKSB8fAotICAgICAgICAgICAgICAg
IChkeDJlczo6SXNGbG9hdDE2Rm9ybWF0KGQzZGZvcm1hdCkgJiYgIWNvbnRleHQtPnN1cHBvcnRz
RmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcygpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChkeDJlczo6SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSB8
fCBkeDJlczo6SXNTdGVuY2lsVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIHdpZHRo
ID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IGNvbG9yYnVmZmVy
LT5nZXRIZWlnaHQoKTsKLSAgICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVz
KCk7Ci0gICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgUmVu
ZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7Ci0gICAgUmVuZGVyYnVmZmVyICpzdGVuY2ls
YnVmZmVyID0gTlVMTDsKLQotICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCi0g
ICAgewotICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7Ci0KLSAgICAgICAg
aWYgKCFkZXB0aGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
ZXB0aGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IGRlcHRoYnVmZmVyLT5nZXRIZWlnaHQoKSA9
PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5
cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJ
c0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgRDNERk9STUFUIGQzZGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXREM0RGb3Jt
YXQoKTsKLQotICAgICAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJl
IE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghZHgyZXM6OklzRGVwdGhUZXh0dXJlRm9ybWF0KGQzZGZvcm1hdCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB3
aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gZGVw
dGhidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVmZmVy
LT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0
aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBkZXB0aGJ1ZmZlci0+Z2V0U2Ft
cGxlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICht
U3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIHN0ZW5jaWxidWZm
ZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFzdGVuY2lsYnVmZmVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXItPmdldFdp
ZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5E
RVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ2w6OklzU3RlbmNpbFJlbmRl
cmFibGUoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVy
bmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBEM0RGT1JNQVQgZDNkZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0RDNERm9ybWF0KCk7
Ci0KLSAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25n
IGFzIHBhcnQKLSAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9F
Uy9BTkdMRV9kZXB0aF90ZXh0dXJlCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
RGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghZHgyZXM6OklzU3RlbmNpbFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdp
ZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN0
ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICAgICAgc2FtcGxlcyA9IHN0ZW5jaWxi
dWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAod2lkdGggIT0gc3RlbmNpbGJ1ZmZlci0+
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVO
U0lPTlM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBzdGVuY2lsYnVm
ZmVyLT5nZXRTYW1wbGVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FOR0xFOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gaWYgd2UgaGF2ZSBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCB0aGV5
IG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0Ci0gICAgLy8gc2luY2Ugd2Ugb25seSBzdXBw
b3J0IHBhY2tlZF9kZXB0aF9zdGVuY2lsIGFuZCBub3Qgc2VwYXJhdGUgZGVwdGggYW5kIHN0ZW5j
aWwKLSAgICBpZiAoZGVwdGhidWZmZXIgJiYgc3RlbmNpbGJ1ZmZlciAmJiAoZGVwdGhidWZmZXIg
IT0gc3RlbmNpbGJ1ZmZlcikpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQ7Ci0gICAgfQotCi0gICAgLy8gd2UgbmVlZCB0byBoYXZlIGF0IGxlYXN0IG9u
ZSBhdHRhY2htZW50IHRvIGJlIGNvbXBsZXRlCi0gICAgaWYgKG1pc3NpbmdBdHRhY2htZW50KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19B
VFRBQ0hNRU5UOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsK
LX0KLQotRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIg
KmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbCkKLXsKLSAgICBt
Q29sb3JidWZmZXJQb2ludGVyLnNldChuZXcgUmVuZGVyYnVmZmVyKDAsIGNvbG9yYnVmZmVyKSk7
Ci0KLSAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5k
ZXJidWZmZXIoMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChk
ZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQo
ZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKLQotICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9S
RU5ERVJCVUZGRVI7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aFN0ZW5jaWxSZW5kZXJi
dWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORTsK
LSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRT
dGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORTsKLX0KLQotaW50
IEZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkKLXsKLSAgICBpZiAoY29tcGxldGVuZXNzKCkgPT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0U2FtcGxlcygpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMZW51bSBEZWZhdWx0RnJhbWVidWZmZXI6OmNvbXBsZXRl
bmVzcygpCi17Ci0gICAgLy8gVGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxkIGFsd2F5cyBi
ZSBjb21wbGV0ZQotICAgIEFTU0VSVChGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgPT0gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEUpOwotCi0gICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0ZyYW1lYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDljMmEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFt
ZWJ1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gRnJhbWVidWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6OkZyYW1lYnVmZmVyIGNsYXNz
LiBJbXBsZW1lbnRzIEdMIGZyYW1lYnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0
aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNS4KLQotI2lm
bmRlZiBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0ZSQU1FQlVG
RkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2lu
Y2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVk
ZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgUmVu
ZGVyYnVmZmVyOwotY2xhc3MgQ29sb3JidWZmZXI7Ci1jbGFzcyBEZXB0aGJ1ZmZlcjsKLWNsYXNz
IFN0ZW5jaWxidWZmZXI7Ci1jbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7Ci0KLWNsYXNzIEZyYW1l
YnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBGcmFtZWJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCB+
RnJhbWVidWZmZXIoKTsKLQotICAgIHZvaWQgc2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwg
R0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKLQotICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVp
bnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1
ZmZlcik7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgdW5zaWduZWQgaW50
IGdldFJlbmRlclRhcmdldFNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXREZXB0aGJ1ZmZl
clNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCk7Ci0K
LSAgICBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKCk7Ci0gICAgUmVuZGVyYnVmZmVyICpn
ZXREZXB0aGJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOwot
ICAgIFJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKCk7Ci0KLSAgICBHTGVudW0gZ2V0
Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgpOwotICAg
IEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwotCi0gICAgR0x1aW50IGdldENvbG9yYnVm
ZmVySGFuZGxlKCk7Ci0gICAgR0x1aW50IGdldERlcHRoYnVmZmVySGFuZGxlKCk7Ci0gICAgR0x1
aW50IGdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKLQotICAgIGJvb2wgaGFzU3RlbmNpbCgpOwot
ICAgIGludCBnZXRTYW1wbGVzKCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3Mo
KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgR0xlbnVtIG1Db2xvcmJ1ZmZlclR5cGU7Ci0gICAgQmlu
ZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQb2ludGVyOwotCi0gICAgR0xl
bnVtIG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBt
RGVwdGhidWZmZXJQb2ludGVyOwotCi0gICAgR0xlbnVtIG1TdGVuY2lsYnVmZmVyVHlwZTsKLSAg
ICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyUG9pbnRlcjsKLQot
ICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXI7
Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIp
OwotCi0gICAgUmVuZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBoYW5kbGUpIGNvbnN0OwotfTsKLQotY2xhc3MgRGVmYXVsdEZyYW1lYnVmZmVyIDogcHVi
bGljIEZyYW1lYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBEZWZhdWx0RnJhbWVidWZmZXIoQ29s
b3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbCk7
Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsKLQotICBwcml2YXRlOgotICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0RnJhbWVidWZmZXIpOwotfTsKLQotfQot
Ci0jZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5OGY4YS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBIYW5k
bGVBbGxvY2F0b3IuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6SGFuZGxlQWxsb2NhdG9yIGNsYXNz
LCB3aGljaCBpcyB1c2VkCi0vLyB0byBhbGxvY2F0ZSBHTCBoYW5kbGVzLgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLUhhbmRsZUFsbG9jYXRvcjo6SGFuZGxlQWxsb2NhdG9y
KCkgOiBtQmFzZVZhbHVlKDEpLCBtTmV4dFZhbHVlKDEpCi17Ci19Ci0KLUhhbmRsZUFsbG9jYXRv
cjo6fkhhbmRsZUFsbG9jYXRvcigpCi17Ci19Ci0KLXZvaWQgSGFuZGxlQWxsb2NhdG9yOjpzZXRC
YXNlSGFuZGxlKEdMdWludCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobUJhc2VWYWx1ZSA9PSBtTmV4
dFZhbHVlKTsKLSAgICBtQmFzZVZhbHVlID0gdmFsdWU7Ci0gICAgbU5leHRWYWx1ZSA9IHZhbHVl
OwotfQotCi1HTHVpbnQgSGFuZGxlQWxsb2NhdG9yOjphbGxvY2F0ZSgpCi17Ci0gICAgaWYgKG1G
cmVlVmFsdWVzLnNpemUoKSkKLSAgICB7Ci0gICAgICAgIEdMdWludCBoYW5kbGUgPSBtRnJlZVZh
bHVlcy5iYWNrKCk7Ci0gICAgICAgIG1GcmVlVmFsdWVzLnBvcF9iYWNrKCk7Ci0gICAgICAgIHJl
dHVybiBoYW5kbGU7Ci0gICAgfQotICAgIHJldHVybiBtTmV4dFZhbHVlKys7Ci19Ci0KLXZvaWQg
SGFuZGxlQWxsb2NhdG9yOjpyZWxlYXNlKEdMdWludCBoYW5kbGUpCi17Ci0gICAgaWYgKGhhbmRs
ZSA9PSBtTmV4dFZhbHVlIC0gMSkKLSAgICB7Ci0gICAgICAgIC8vIERvbid0IGRyb3AgYmVsb3cg
YmFzZSB2YWx1ZQotICAgICAgICBpZihtTmV4dFZhbHVlID4gbUJhc2VWYWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbU5leHRWYWx1ZS0tOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIC8vIE9ubHkgZnJlZSBoYW5kbGVzIHRoYXQgd2Ugb3duIC0gZG9uJ3Qg
ZHJvcCBiZWxvdyB0aGUgYmFzZSB2YWx1ZQotICAgICAgICBpZiAoaGFuZGxlID49IG1CYXNlVmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmVlVmFsdWVzLnB1c2hfYmFjayhoYW5kbGUp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTkyZTE2OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gSGFuZGxlQWxsb2NhdG9yLmg6IERl
ZmluZXMgdGhlIGdsOjpIYW5kbGVBbGxvY2F0b3IgY2xhc3MsIHdoaWNoIGlzIHVzZWQgdG8KLS8v
IGFsbG9jYXRlIEdMIGhhbmRsZXMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRP
Ul9IXwotI2RlZmluZSBMSUJHTEVTVjJfSEFORExFQUxMT0NBVE9SX0hfCi0KLSNkZWZpbmUgR0xf
QVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0j
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNz
IEhhbmRsZUFsbG9jYXRvcgotewotICBwdWJsaWM6Ci0gICAgSGFuZGxlQWxsb2NhdG9yKCk7Ci0g
ICAgdmlydHVhbCB+SGFuZGxlQWxsb2NhdG9yKCk7Ci0KLSAgICB2b2lkIHNldEJhc2VIYW5kbGUo
R0x1aW50IHZhbHVlKTsKLQotICAgIEdMdWludCBhbGxvY2F0ZSgpOwotICAgIHZvaWQgcmVsZWFz
ZShHTHVpbnQgaGFuZGxlKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihIYW5kbGVBbGxvY2F0b3IpOwotCi0gICAgR0x1aW50IG1CYXNlVmFsdWU7Ci0gICAgR0x1
aW50IG1OZXh0VmFsdWU7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxHTHVpbnQ+IEhhbmRsZUxp
c3Q7Ci0gICAgSGFuZGxlTGlzdCBtRnJlZVZhbHVlczsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8g
TElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYzBhZWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBJbmRleERhdGFN
YW5hZ2VyLmNwcDogRGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0v
LyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBmb3IgaW5kZXggYnVmZmVycy4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJj
b21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi1u
YW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBJbmRleEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwg
PSAxOwotCi1JbmRleERhdGFNYW5hZ2VyOjpJbmRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRl
eHQsIElEaXJlY3QzRERldmljZTkgKmRldmljZSkgOiBtRGV2aWNlKGRldmljZSkKLXsKLSAgICBt
U3RyZWFtaW5nQnVmZmVyU2hvcnQgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwg
SU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMTYpOwotCi0gICAgaWYgKGNv
bnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtU3RyZWFtaW5n
QnVmZmVySW50ID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5E
RVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsKLQotICAgICAgICBpZiAoIW1TdHJlYW1p
bmdCdWZmZXJJbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIERvbid0IGxlYXZlIGl0IGlu
IGEgaGFsZi1pbml0aWFsaXplZCBzdGF0ZQotICAgICAgICAgICAgZGVsZXRlIG1TdHJlYW1pbmdC
dWZmZXJTaG9ydDsKLSAgICAgICAgICAgIG1TdHJlYW1pbmdCdWZmZXJTaG9ydCA9IE5VTEw7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVN0cmVhbWluZ0J1ZmZl
ckludCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyU2hvcnQpCi0g
ICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSB0aGUgc3RyZWFtaW5nIGluZGV4
IGJ1ZmZlcihzKS4iKTsKLSAgICB9Ci0KLSAgICBtQ291bnRpbmdCdWZmZXIgPSBOVUxMOwotfQot
Ci1JbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFuYWdlcigpCi17Ci0gICAgZGVsZXRlIG1T
dHJlYW1pbmdCdWZmZXJTaG9ydDsKLSAgICBkZWxldGUgbVN0cmVhbWluZ0J1ZmZlckludDsKLSAg
ICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotfQotCi12b2lkIGNvbnZlcnRJbmRpY2VzKEdMZW51
bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCwgR0xzaXplaSBjb3VudCwgdm9pZCAqb3V0cHV0KQot
ewotICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBjb25z
dCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbnB1dCk7Ci0gICAg
ICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7Ci0KLSAg
ICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0W2ldID0gaW5baV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
dHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCi0gICAgewotICAgICAgICBtZW1jcHkob3V0cHV0LCBp
bnB1dCwgY291bnQgKiBzaXplb2YoR0x1aW50KSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUg
PT0gR0xfVU5TSUdORURfU0hPUlQpCi0gICAgewotICAgICAgICBtZW1jcHkob3V0cHV0LCBpbnB1
dCwgY291bnQgKiBzaXplb2YoR0x1c2hvcnQpKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhUeXBlPgotdm9pZCBjb21wdXRlUmFuZ2Uo
Y29uc3QgSW5kZXhUeXBlICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTHVpbnQgKm1pbkluZGV4
LCBHTHVpbnQgKm1heEluZGV4KQotewotICAgICptaW5JbmRleCA9IGluZGljZXNbMF07Ci0gICAg
Km1heEluZGV4ID0gaW5kaWNlc1swXTsKLQotICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgewotICAgICAgICBpZiAoKm1pbkluZGV4ID4gaW5kaWNlc1tpXSkgKm1p
bkluZGV4ID0gaW5kaWNlc1tpXTsKLSAgICAgICAgaWYgKCptYXhJbmRleCA8IGluZGljZXNbaV0p
ICptYXhJbmRleCA9IGluZGljZXNbaV07Ci0gICAgfQotfQotCi12b2lkIGNvbXB1dGVSYW5nZShH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTHVpbnQg
Km1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQotewotICAgIGlmICh0eXBlID09IEdMX1VOU0lH
TkVEX0JZVEUpCi0gICAgewotICAgICAgICBjb21wdXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3Qg
R0x1Ynl0ZSo+KGluZGljZXMpLCBjb3VudCwgbWluSW5kZXgsIG1heEluZGV4KTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCi0gICAgewotICAgICAgICBjb21w
dXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5J
bmRleCwgbWF4SW5kZXgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVE
X1NIT1JUKQotICAgIHsKLSAgICAgICAgY29tcHV0ZVJhbmdlKHN0YXRpY19jYXN0PGNvbnN0IEdM
dXNob3J0Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRleCwgbWF4SW5kZXgpOwotICAgIH0KLSAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLUdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVw
YXJlSW5kZXhEYXRhKEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIgKmJ1ZmZlciwg
Y29uc3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKQot
ewotICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlclNob3J0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAgRDNERk9STUFUIGZvcm1hdCA9ICh0eXBl
ID09IEdMX1VOU0lHTkVEX0lOVCkgPyBEM0RGTVRfSU5ERVgzMiA6IEQzREZNVF9JTkRFWDE2Owot
ICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMp
OwotICAgIGJvb2wgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwotCi0gICAgaWYgKGJ1ZmZlciAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgYWxpZ25lZE9mZnNldCA9IChvZmZzZXQgJSBzaXplb2Yo
R0x1Ynl0ZSkgPT0gMCk7ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OiBhbGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAlIHNpemVvZihHTHVzaG9ydCkgPT0gMCk7IGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgIGFsaWduZWRPZmZzZXQgPSAob2Zm
c2V0ICUgc2l6ZW9mKEdMdWludCkgPT0gMCk7ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBvZmZzZXQgPiBzdGF0aWNfY2FzdDxzdGQ6
OnNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
R0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgICAgIH0KLQotICAgICAgICBpbmRpY2VzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKLSAgICB9
Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqc3RyZWFtaW5nQnVmZmVyID0gKHR5cGUgPT0g
R0xfVU5TSUdORURfSU5UKSA/IG1TdHJlYW1pbmdCdWZmZXJJbnQgOiBtU3RyZWFtaW5nQnVmZmVy
U2hvcnQ7Ci0KLSAgICBTdGF0aWNJbmRleEJ1ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8g
YnVmZmVyLT5nZXRTdGF0aWNJbmRleEJ1ZmZlcigpIDogTlVMTDsKLSAgICBJbmRleEJ1ZmZlciAq
aW5kZXhCdWZmZXIgPSBzdHJlYW1pbmdCdWZmZXI7Ci0gICAgVUlOVCBzdHJlYW1PZmZzZXQgPSAw
OwotCi0gICAgaWYgKHN0YXRpY0J1ZmZlciAmJiBzdGF0aWNCdWZmZXItPmxvb2t1cFR5cGUodHlw
ZSkgJiYgYWxpZ25lZE9mZnNldCkKLSAgICB7Ci0gICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGlj
QnVmZmVyOwotICAgICAgICBzdHJlYW1PZmZzZXQgPSBzdGF0aWNCdWZmZXItPmxvb2t1cFJhbmdl
KG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heElu
ZGV4KTsKLQotICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0ID09IC0xKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gdHlwZVNpemUodHlwZSkpICogaW5kZXhT
aXplKGZvcm1hdCk7Ci0gICAgICAgICAgICBjb21wdXRlUmFuZ2UodHlwZSwgaW5kaWNlcywgY291
bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKLSAgICAg
ICAgICAgIHN0YXRpY0J1ZmZlci0+YWRkUmFuZ2Uob2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+
bWluSW5kZXgsIHRyYW5zbGF0ZWQtPm1heEluZGV4LCBzdHJlYW1PZmZzZXQpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGludCBjb252ZXJ0Q291bnQgPSBjb3Vu
dDsKLQotICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoc3RhdGljQnVmZmVyLT5zaXplKCkgPT0gMCAmJiBhbGlnbmVkT2Zmc2V0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOwotICAgICAg
ICAgICAgICAgIGNvbnZlcnRDb3VudCA9IGJ1ZmZlci0+c2l6ZSgpIC8gdHlwZVNpemUodHlwZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYnVmZmVyLT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOwotICAgICAgICAgICAgICAg
IHN0YXRpY0J1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkICpvdXRwdXQgPSBOVUxMOwotICAgICAgICAKLSAgICAgICAgaWYgKGluZGV4QnVmZmVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleEJ1ZmZlci0+cmVzZXJ2ZVNwYWNlKGNvbnZl
cnRDb3VudCAqIGluZGV4U2l6ZShmb3JtYXQpLCB0eXBlKTsKLSAgICAgICAgICAgIG91dHB1dCA9
IGluZGV4QnVmZmVyLT5tYXAoaW5kZXhTaXplKGZvcm1hdCkgKiBjb252ZXJ0Q291bnQsICZzdHJl
YW1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3V0cHV0ID09IE5V
TEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCBpbmRleCBidWZm
ZXIuIik7Ci0gICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNvbnZlcnRJbmRpY2VzKHR5cGUsIHN0YXRpY0J1ZmZlciA/IGJ1ZmZlci0+ZGF0
YSgpIDogaW5kaWNlcywgY29udmVydENvdW50LCBvdXRwdXQpOwotICAgICAgICBpbmRleEJ1ZmZl
ci0+dW5tYXAoKTsKLQotICAgICAgICBjb21wdXRlUmFuZ2UodHlwZSwgaW5kaWNlcywgY291bnQs
ICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKLQotICAgICAg
ICBpZiAoc3RhdGljQnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQg
PSAob2Zmc2V0IC8gdHlwZVNpemUodHlwZSkpICogaW5kZXhTaXplKGZvcm1hdCk7Ci0gICAgICAg
ICAgICBzdGF0aWNCdWZmZXItPmFkZFJhbmdlKG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1p
bkluZGV4LCB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1
ZmZlcigpOwotICAgIHRyYW5zbGF0ZWQtPnNlcmlhbCA9IGluZGV4QnVmZmVyLT5nZXRTZXJpYWwo
KTsKLSAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gaW5kZXhTaXpl
KGZvcm1hdCk7Ci0KLSAgICBpZiAoYnVmZmVyKQotICAgIHsKLSAgICAgICAgYnVmZmVyLT5wcm9t
b3RlU3RhdGljVXNhZ2UoY291bnQgKiB0eXBlU2l6ZSh0eXBlKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIEdMX05PX0VSUk9SOwotfQotCi1zdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRl
eFNpemUoRDNERk9STUFUIGZvcm1hdCkgY29uc3QKLXsKLSAgICByZXR1cm4gKGZvcm1hdCA9PSBE
M0RGTVRfSU5ERVgzMikgPyBzaXplb2YodW5zaWduZWQgaW50KSA6IHNpemVvZih1bnNpZ25lZCBz
aG9ydCk7Ci19Ci0KLXN0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51
bSB0eXBlKSBjb25zdAotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDogICByZXR1cm4gc2l6ZW9mKEdMdWludCk7Ci0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURTogIHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOyByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKLSAgICB9Ci19Ci0KLVN0YXRpY0lu
ZGV4QnVmZmVyICpJbmRleERhdGFNYW5hZ2VyOjpnZXRDb3VudGluZ0luZGljZXMoR0xzaXplaSBj
b3VudCkKLXsKLSAgICBpZiAoY291bnQgPD0gNjU1MzYpICAgLy8gMTYtYml0IGluZGljZXMKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IGNvdW50ICogc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KTsKLQotICAgICAgICBpZiAoIW1Db3VudGluZ0J1ZmZlciB8fCBt
Q291bnRpbmdCdWZmZXItPnNpemUoKSA8IHNwYWNlTmVlZGVkKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAgICAgICAgICAgbUNvdW50aW5nQnVmZmVy
ID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKG1EZXZpY2UpOwotICAgICAgICAgICAgbUNvdW50aW5n
QnVmZmVyLT5yZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX1NIT1JUKTsKLQot
ICAgICAgICAgICAgVUlOVCBvZmZzZXQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0
YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4obUNvdW50aW5nQnVmZmVyLT5tYXAoc3Bh
Y2VOZWVkZWQsICZvZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1Db3VudGluZ0J1ZmZlci0+dW5t
YXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChtU3Ry
ZWFtaW5nQnVmZmVySW50KSAgIC8vIDMyLWJpdCBpbmRpY2VzIHN1cHBvcnRlZAotICAgIHsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNwYWNlTmVlZGVkID0gY291bnQgKiBzaXplb2YodW5z
aWduZWQgaW50KTsKLQotICAgICAgICBpZiAoIW1Db3VudGluZ0J1ZmZlciB8fCBtQ291bnRpbmdC
dWZmZXItPnNpemUoKSA8IHNwYWNlTmVlZGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxl
dGUgbUNvdW50aW5nQnVmZmVyOwotICAgICAgICAgICAgbUNvdW50aW5nQnVmZmVyID0gbmV3IFN0
YXRpY0luZGV4QnVmZmVyKG1EZXZpY2UpOwotICAgICAgICAgICAgbUNvdW50aW5nQnVmZmVyLT5y
ZXNlcnZlU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCk7Ci0KLSAgICAgICAgICAg
IFVJTlQgb2Zmc2V0OwotICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Kj4obUNvdW50aW5nQnVmZmVyLT5tYXAoc3BhY2VOZWVkZWQsICZvZmZz
ZXQpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtQ291bnRpbmdCdWZmZXItPnVu
bWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSByZXR1cm4g
TlVMTDsKLSAgICAKLSAgICByZXR1cm4gbUNvdW50aW5nQnVmZmVyOwotfQotCi1JbmRleEJ1ZmZl
cjo6SW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIHNpemUsIEQzREZP
Uk1BVCBmb3JtYXQpIDogbURldmljZShkZXZpY2UpLCBtQnVmZmVyU2l6ZShzaXplKSwgbUluZGV4
QnVmZmVyKE5VTEwpCi17Ci0gICAgaWYgKHNpemUgPiAwKQotICAgIHsKLSAgICAgICAgRDNEUE9P
TCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX0RZTkFNSUMgfCBE
M0RVU0FHRV9XUklURU9OTFkpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05M
WSwgZm9ybWF0LCBwb29sLCAmbUluZGV4QnVmZmVyLCBOVUxMKTsKLSAgICAgICAgbVNlcmlhbCA9
IGlzc3VlU2VyaWFsKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhbiBpbmRleCBidWZm
ZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUluZGV4QnVm
ZmVyOjp+SW5kZXhCdWZmZXIoKQotewotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAg
ICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzREluZGV4
QnVmZmVyOSAqSW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1J
bmRleEJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgaW50IEluZGV4QnVmZmVyOjpnZXRTZXJpYWwoKSBj
b25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgSW5kZXhCdWZm
ZXI6Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKLX0KLQot
dm9pZCBJbmRleEJ1ZmZlcjo6dW5tYXAoKQotewotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAg
ewotICAgICAgICBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotICAgIH0KLX0KLQotU3RyZWFtaW5n
SW5kZXhCdWZmZXI6OlN0cmVhbWluZ0luZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSwgVUlOVCBpbml0aWFsU2l6ZSwgRDNERk9STUFUIGZvcm1hdCkgOiBJbmRleEJ1ZmZlcihkZXZp
Y2UsIGluaXRpYWxTaXplLCBmb3JtYXQpCi17Ci0gICAgbVdyaXRlUG9zaXRpb24gPSAwOwotfQot
Ci1TdHJlYW1pbmdJbmRleEJ1ZmZlcjo6flN0cmVhbWluZ0luZGV4QnVmZmVyKCkKLXsKLX0KLQot
dm9pZCAqU3RyZWFtaW5nSW5kZXhCdWZmZXI6Om1hcChVSU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQg
Km9mZnNldCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0gICAgaWYgKG1JbmRleEJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5Mb2Nr
KG1Xcml0ZVBvc2l0aW9uLCByZXF1aXJlZFNwYWNlLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZFUldS
SVRFKTsKLSAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwot
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAqb2Zmc2V0ID0g
bVdyaXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBTdHJlYW1pbmdJbmRleEJ1
ZmZlcjo6cmVzZXJ2ZVNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpCi17Ci0g
ICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmICht
SW5kZXhCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgbUluZGV4QnVmZmVyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgocmVxdWlyZWRTcGFjZSwgMiAqIG1CdWZmZXJTaXpl
KTsKLQotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXREaXNwbGF5KCktPmdldEJ1ZmZlclBvb2wo
RDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSk7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIobUJ1ZmZlclNpemUsIEQzRFVTQUdF
X0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIHR5cGUgPT0gR0xfVU5TSUdORURfSU5UID8g
RDNERk1UX0lOREVYMzIgOiBEM0RGTVRfSU5ERVgxNiwgcG9vbCwgJm1JbmRleEJ1ZmZlciwgTlVM
TCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOwotICAgIAotICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9y
eSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBtQnVmZmVyU2l6ZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Ci0gICAgfQotICAgIGVs
c2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgcmVxdWlyZWRTcGFjZSA+IG1CdWZmZXJTaXplKSAgIC8v
IFJlY3ljbGUKLSAgICB7Ci0gICAgICAgIHZvaWQgKmR1bW15OwotICAgICAgICBtSW5kZXhCdWZm
ZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOwotICAgICAgICBtSW5kZXhC
dWZmZXItPlVubG9jaygpOwotCi0gICAgICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKLSAgICB9Ci19
Ci0KLVN0YXRpY0luZGV4QnVmZmVyOjpTdGF0aWNJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UpIDogSW5kZXhCdWZmZXIoZGV2aWNlLCAwLCBEM0RGTVRfVU5LTk9XTikKLXsKLSAg
ICBtQ2FjaGVUeXBlID0gR0xfTk9ORTsKLX0KLQotU3RhdGljSW5kZXhCdWZmZXI6On5TdGF0aWNJ
bmRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQgKlN0YXRpY0luZGV4QnVmZmVyOjptYXAoVUlOVCBy
ZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpCi17Ci0gICAgdm9pZCAqbWFwUHRyID0gTlVMTDsK
LQotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1JbmRleEJ1ZmZlci0+TG9jaygwLCByZXF1aXJlZFNwYWNlLCAmbWFwUHRyLCAwKTsKLSAgICAg
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCIgTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAqb2Zmc2V0ID0gMDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIFN0YXRpY0luZGV4QnVmZmVyOjpyZXNlcnZl
U3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSkKLXsKLSAgICBpZiAoIW1JbmRl
eEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAwKQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29s
ID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX1dSSVRFT05MWSk7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIocmVxdWlyZWRT
cGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCA/IEQzREZN
VF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2wsICZtSW5kZXhCdWZmZXIsIE5VTEwpOwot
ICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKLSAgICAKLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxs
b2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgbUJ1ZmZlclNpemUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSByZXF1aXJlZFNwYWNlOwotICAgICAgICBt
Q2FjaGVUeXBlID0gdHlwZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobUluZGV4QnVmZmVyICYmIG1C
dWZmZXJTaXplID49IHJlcXVpcmVkU3BhY2UgJiYgbUNhY2hlVHlwZSA9PSB0eXBlKQotICAgIHsK
LSAgICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJM
RSgpOyAgIC8vIFN0YXRpYyBpbmRleCBidWZmZXJzIGNhbid0IGJlIHJlc2l6ZWQKLX0KLQotYm9v
bCBTdGF0aWNJbmRleEJ1ZmZlcjo6bG9va3VwVHlwZShHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1
cm4gbUNhY2hlVHlwZSA9PSB0eXBlOwotfQotCi1VSU5UIFN0YXRpY0luZGV4QnVmZmVyOjpsb29r
dXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQsIFVJTlQgKm1pbkluZGV4LCBV
SU5UICptYXhJbmRleCkKLXsKLSAgICBJbmRleFJhbmdlIHJhbmdlID0ge29mZnNldCwgY291bnR9
OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5kZXhSZXN1bHQ+OjppdGVyYXRvciByZXMg
PSBtQ2FjaGUuZmluZChyYW5nZSk7Ci0gICAgCi0gICAgaWYgKHJlcyA9PSBtQ2FjaGUuZW5kKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgKm1pbkluZGV4ID0gcmVz
LT5zZWNvbmQubWluSW5kZXg7Ci0gICAgKm1heEluZGV4ID0gcmVzLT5zZWNvbmQubWF4SW5kZXg7
Ci0gICAgcmV0dXJuIHJlcy0+c2Vjb25kLnN0cmVhbU9mZnNldDsKLX0KLQotdm9pZCBTdGF0aWNJ
bmRleEJ1ZmZlcjo6YWRkUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5U
IG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0cmVhbU9mZnNldCkKLXsKLSAgICBJbmRl
eFJhbmdlIGluZGV4UmFuZ2UgPSB7b2Zmc2V0LCBjb3VudH07Ci0gICAgSW5kZXhSZXN1bHQgaW5k
ZXhSZXN1bHQgPSB7bWluSW5kZXgsIG1heEluZGV4LCBzdHJlYW1PZmZzZXR9OwotICAgIG1DYWNo
ZVtpbmRleFJhbmdlXSA9IGluZGV4UmVzdWx0OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWQ0MTY4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4RGF0
YU1hbmFnZXIuaDogRGVmaW5lcyB0aGUgSW5kZXhEYXRhTWFuYWdlciwgYSBjbGFzcyB0aGF0Ci0v
LyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2VzcyBmb3IgaW5kZXggYnVmZmVycy4K
LQotI2lmbmRlZiBMSUJHTEVTVjJfSU5ERVhEQVRBTUFOQUdFUl9IXwotI2RlZmluZSBMSUJHTEVT
VjJfSU5ERVhEQVRBTUFOQUdFUl9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGNz
dGRkZWY+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlCi17Ci0gICAgZW51bSB7
IElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUgPSA0MDk2ICogc2l6ZW9mKEdMdWludCkgfTsKLX0K
LQotbmFtZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhCi17Ci0gICAg
VUlOVCBtaW5JbmRleDsKLSAgICBVSU5UIG1heEluZGV4OwotICAgIFVJTlQgc3RhcnRJbmRleDsK
LQotICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQg
aW50IHNlcmlhbDsKLX07Ci0KLWNsYXNzIEluZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBJ
bmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFVJTlQgc2l6ZSwgRDNERk9STUFU
IGZvcm1hdCk7Ci0gICAgdmlydHVhbCB+SW5kZXhCdWZmZXIoKTsKLQotICAgIFVJTlQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9Ci0gICAgdmlydHVhbCB2b2lkICptYXAoVUlO
VCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpID0gMDsKLSAgICB2b2lkIHVubWFwKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UsIEdMZW51bSB0
eXBlKSA9IDA7Ci0KLSAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0
OwotICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKLQotICBwcm90ZWN0ZWQ6Ci0g
ICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURldmljZTsKLQotICAgIElEaXJlY3QzREluZGV4
QnVmZmVyOSAqbUluZGV4QnVmZmVyOwotICAgIFVJTlQgbUJ1ZmZlclNpemU7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgbVNlcmlhbDsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKLQotICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZlcik7Ci19OwotCi1jbGFzcyBT
dHJlYW1pbmdJbmRleEJ1ZmZlciA6IHB1YmxpYyBJbmRleEJ1ZmZlcgotewotICBwdWJsaWM6Ci0g
ICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIGlu
aXRpYWxTaXplLCBEM0RGT1JNQVQgZm9ybWF0KTsKLSAgICB+U3RyZWFtaW5nSW5kZXhCdWZmZXIo
KTsKLQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zm
c2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2ZVNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwg
R0xlbnVtIHR5cGUpOwotCi0gIHByaXZhdGU6Ci0gICAgVUlOVCBtV3JpdGVQb3NpdGlvbjsKLX07
Ci0KLWNsYXNzIFN0YXRpY0luZGV4QnVmZmVyIDogcHVibGljIEluZGV4QnVmZmVyCi17Ci0gIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBTdGF0aWNJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UpOwotICAgIH5TdGF0aWNJbmRleEJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCB2b2lkICpt
YXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSk7Ci0KLSAgICBib29s
IGxvb2t1cFR5cGUoR0xlbnVtIHR5cGUpOwotICAgIFVJTlQgbG9va3VwUmFuZ2UoaW50cHRyX3Qg
b2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5UICptaW5JbmRleCwgVUlOVCAqbWF4SW5kZXgpOyAg
IC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBpbmRleCBidWZmZXIsIG9yIC0xIGlmIG5v
dCBmb3VuZAotICAgIHZvaWQgYWRkUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50
LCBVSU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0cmVhbU9mZnNldCk7Ci0KLSAg
cHJpdmF0ZToKLSAgICBHTGVudW0gbUNhY2hlVHlwZTsKLSAgICAKLSAgICBzdHJ1Y3QgSW5kZXhS
YW5nZQotICAgIHsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0OwotICAgICAgICBHTHNpemVpIGNv
dW50OwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEluZGV4UmFuZ2UmIHJocykgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG9mZnNldCAhPSByaHMub2Zmc2V0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgPCByaHMub2Zmc2V0Owot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvdW50ICE9IHJocy5jb3VudCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY291bnQgPCByaHMuY291bnQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgc3RydWN0IEluZGV4UmVzdWx0Ci0gICAgewotICAgICAgICBVSU5UIG1pbkluZGV4Owot
ICAgICAgICBVSU5UIG1heEluZGV4OwotICAgICAgICBVSU5UIHN0cmVhbU9mZnNldDsKLSAgICB9
OwotCi0gICAgc3RkOjptYXA8SW5kZXhSYW5nZSwgSW5kZXhSZXN1bHQ+IG1DYWNoZTsKLX07Ci0K
LWNsYXNzIEluZGV4RGF0YU1hbmFnZXIKLXsKLSAgcHVibGljOgotICAgIEluZGV4RGF0YU1hbmFn
ZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZXZpY2UpOwotICAgIHZpcnR1
YWwgfkluZGV4RGF0YU1hbmFnZXIoKTsKLQotICAgIEdMZW51bSBwcmVwYXJlSW5kZXhEYXRhKEdM
ZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIgKmFycmF5RWxlbWVudEJ1ZmZlciwgY29u
c3QgR0x2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKTsKLSAg
ICBTdGF0aWNJbmRleEJ1ZmZlciAqZ2V0Q291bnRpbmdJbmRpY2VzKEdMc2l6ZWkgY291bnQpOwot
Ci0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEluZGV4RGF0YU1hbmFn
ZXIpOwotCi0gICAgc3RkOjpzaXplX3QgdHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0OwotICAg
IHN0ZDo6c2l6ZV90IGluZGV4U2l6ZShEM0RGT1JNQVQgZm9ybWF0KSBjb25zdDsKLQotICAgIElE
aXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZpY2U7Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZl
ciAqbVN0cmVhbWluZ0J1ZmZlclNob3J0OwotICAgIFN0cmVhbWluZ0luZGV4QnVmZmVyICptU3Ry
ZWFtaW5nQnVmZmVySW50OwotICAgIFN0YXRpY0luZGV4QnVmZmVyICptQ291bnRpbmdCdWZmZXI7
Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9JTkRFWERBVEFNQU5BR0VSX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0u
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4YTlkOC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTA3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFByb2dyYW0uY3Bw
OiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFt
IG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0u
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotCi0jaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLSNp
bmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBnbAotewotY29uc3QgY2hhciAqIGNvbnN0IGdf
ZmFrZXBhdGggPSAiQzpcXGZha2VwYXRoIjsKLQotdW5zaWduZWQgaW50IFByb2dyYW06Om1DdXJy
ZW50U2VyaWFsID0gMTsKLQotQXR0cmlidXRlQmluZGluZ3M6OkF0dHJpYnV0ZUJpbmRpbmdzKCkK
LXsKLX0KLQotQXR0cmlidXRlQmluZGluZ3M6On5BdHRyaWJ1dGVCaW5kaW5ncygpCi17Ci19Ci0K
LUluZm9Mb2c6OkluZm9Mb2coKSA6IG1JbmZvTG9nKE5VTEwpCi17Ci19Ci0KLUluZm9Mb2c6On5J
bmZvTG9nKCkKLXsKLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLX0KLQotCi1pbnQgSW5mb0xvZzo6
Z2V0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbiht
SW5mb0xvZykgKyAxOwotICAgIH0KLX0KLQotdm9pZCBJbmZvTG9nOjpnZXRMb2coR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCi17Ci0gICAgaW50IGluZGV4
ID0gMDsKLQotICAgIGlmIChidWZTaXplID4gMCkKLSAgICB7Ci0gICAgICAgIGlmIChtSW5mb0xv
ZykKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4obUluZm9Mb2cpKTsKLSAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5m
b0xvZywgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAn
OwotICAgIH0KLQotICAgIGlmIChsZW5ndGgpCi0gICAgewotICAgICAgICAqbGVuZ3RoID0gaW5k
ZXg7Ci0gICAgfQotfQotCi0vLyBhcHBlbmQgYSBzYW50aXplZCBtZXNzYWdlIHRvIHRoZSBwcm9n
cmFtIGluZm8gbG9nLgotLy8gVGhlIEQzRCBjb21waWxlciBpbmNsdWRlcyBhIGZha2UgZmlsZSBw
YXRoIGluIHNvbWUgb2YgdGhlIHdhcm5pbmcgb3IgZXJyb3IgCi0vLyBtZXNzYWdlcywgc28gbGV0
cyByZW1vdmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZmFrZSBmaWxlIHBhdGggZnJvbSB0aGUg
bG9nLgotdm9pZCBJbmZvTG9nOjphcHBlbmRTYW5pdGl6ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkK
LXsKLSAgICBzdGQ6OnN0cmluZyBtc2cobWVzc2FnZSk7Ci0KLSAgICBzaXplX3QgZm91bmQ7Ci0g
ICAgZG8KLSAgICB7Ci0gICAgICAgIGZvdW5kID0gbXNnLmZpbmQoZ19mYWtlcGF0aCk7Ci0gICAg
ICAgIGlmIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgewotICAgICAgICAg
ICAgbXNnLmVyYXNlKGZvdW5kLCBzdHJsZW4oZ19mYWtlcGF0aCkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHdoaWxlIChmb3VuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0KLSAgICBhcHBlbmQo
IiVzXG4iLCBtc2cuY19zdHIoKSk7Ci19Ci0KLXZvaWQgSW5mb0xvZzo6YXBwZW5kKGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlmICghZm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQotICAgIHZhX2xpc3QgdmFyYXJn
OwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6
ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgdmFfZW5kKHZhcmFyZyk7Ci0KLSAgICBz
aXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihpbmZvKTsKLQotICAgIGlmICghbUluZm9Mb2cpCi0g
ICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAxXTsKLSAgICAg
ICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7Ci0gICAgICAgIGNoYXIgKm5l
d0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3Ry
Y3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAgICAgICBzdHJjcHkobmV3TG9nICsgbG9nTGVuZ3Ro
LCBpbmZvKTsKLQotICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICAgICAgbUluZm9Mb2cg
PSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lkIEluZm9Mb2c6OnJlc2V0KCkKLXsKLSAgICBpZiAo
bUluZm9Mb2cpCi0gICAgewotICAgICAgICBkZWxldGUgW10gbUluZm9Mb2c7Ci0gICAgICAgIG1J
bmZvTG9nID0gTlVMTDsKLSAgICB9Ci19Ci0KLVByb2dyYW06OlByb2dyYW0oUmVzb3VyY2VNYW5h
Z2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlciks
IG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQotewotICAgIG1GcmFnbWVu
dFNoYWRlciA9IE5VTEw7Ci0gICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgbVByb2dyYW1C
aW5hcnkgPSBOVUxMOwotICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKLSAgICBtUmVmQ291bnQg
PSAwOwotfQotCi1Qcm9ncmFtOjp+UHJvZ3JhbSgpCi17Ci0gICAgdW5saW5rKHRydWUpOwotCi0g
ICAgaWYgKG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFk
ZXItPnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdtZW50U2hhZGVyICE9IE5VTEwp
Ci0gICAgewotICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0K
LWJvb2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChz
aGFkZXItPmdldFR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYg
KG1WZXJ0ZXhTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hhZGVyKilzaGFkZXI7
Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIGlmIChz
aGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBp
ZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIq
KXNoYWRlcjsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRSZWYoKTsKLSAgICB9Ci0gICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKQotewotICAgIGlmIChzaGFkZXItPmdldFR5
cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0
ZXhTaGFkZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9
PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVy
ICE9IHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1GcmFn
bWVudFNoYWRlciA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1pbnQgUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQo
KSBjb25zdAotewotICAgIHJldHVybiAobVZlcnRleFNoYWRlciA/IDEgOiAwKSArIChtRnJhZ21l
bnRTaGFkZXIgPyAxIDogMCk7Ci19Ci0KLXZvaWQgQXR0cmlidXRlQmluZGluZ3M6OmJpbmRBdHRy
aWJ1dGVMb2NhdGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYg
KGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
bUF0dHJpYnV0ZUJpbmRpbmdbaV0uZXJhc2UobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
QXR0cmlidXRlQmluZGluZ1tpbmRleF0uaW5zZXJ0KG5hbWUpOwotICAgIH0KLX0KLQotdm9pZCBQ
cm9ncmFtOjpiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpu
YW1lKQotewotICAgIG1BdHRyaWJ1dGVCaW5kaW5ncy5iaW5kQXR0cmlidXRlTG9jYXRpb24oaW5k
ZXgsIG5hbWUpOwotfQotCi0vLyBMaW5rcyB0aGUgSExTTCBjb2RlIG9mIHRoZSB2ZXJ0ZXggYW5k
IHBpeGVsIHNoYWRlciBieSBtYXRjaGluZyB1cCB0aGVpciB2YXJ5aW5ncywKLS8vIGNvbXBpbGlu
ZyB0aGVtIGludG8gYmluYXJpZXMsIGRldGVybWluaW5nIHRoZSBhdHRyaWJ1dGUgbWFwcGluZ3Ms
IGFuZCBjb2xsZWN0aW5nCi0vLyBhIGxpc3Qgb2YgdW5pZm9ybXMKLXZvaWQgUHJvZ3JhbTo6bGlu
aygpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLQotICAgIG1JbmZvTG9nLnJlc2V0KCk7Ci0KLSAg
ICBtUHJvZ3JhbUJpbmFyeSA9IG5ldyBQcm9ncmFtQmluYXJ5OwotICAgIGlmICghbVByb2dyYW1C
aW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVy
LCBtVmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAgIHVubGluayhmYWxzZSk7Ci0gICAgfQot
fQotCi1pbnQgQXR0cmlidXRlQmluZGluZ3M6OmdldEF0dHJpYnV0ZUJpbmRpbmcoY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUpIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgbG9jYXRpb24gPSAwOyBsb2Nh
dGlvbiA8IE1BWF9WRVJURVhfQVRUUklCUzsgbG9jYXRpb24rKykKLSAgICB7Ci0gICAgICAgIGlm
IChtQXR0cmlidXRlQmluZGluZ1tsb2NhdGlvbl0uZmluZChuYW1lKSAhPSBtQXR0cmlidXRlQmlu
ZGluZ1tsb2NhdGlvbl0uZW5kKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2Nh
dGlvbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotLy8gUmV0dXJu
cyB0aGUgcHJvZ3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGJlZm9yZSByZS1saW5r
aW5nLCBvciBhdCBkZXN0cnVjdGlvbgotdm9pZCBQcm9ncmFtOjp1bmxpbmsoYm9vbCBkZXN0cm95
KQotewotICAgIGlmIChkZXN0cm95KSAgIC8vIE9iamVjdCBiZWluZyBkZXN0cnVjdGVkCi0gICAg
ewotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9
IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAgbVZl
cnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVByb2dyYW1C
aW5hcnkpCi0gICAgewotICAgICAgICBkZWxldGUgbVByb2dyYW1CaW5hcnk7Ci0gICAgICAgIG1Q
cm9ncmFtQmluYXJ5ID0gTlVMTDsKLSAgICB9Ci19Ci0KLVByb2dyYW1CaW5hcnkqIFByb2dyYW06
OmdldFByb2dyYW1CaW5hcnkoKQotewotICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeTsKLX0KLQot
dm9pZCBQcm9ncmFtOjpzZXRQcm9ncmFtQmluYXJ5KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkpCi17Ci0gICAgdW5saW5rKGZhbHNlKTsKLSAgICBtUHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1C
aW5hcnk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07
Ci0KLSAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAg
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0obUhhbmRsZSk7Ci0gICAgfQotfQot
Ci12b2lkIFByb2dyYW06OmFkZFJlZigpCi17Ci0gICAgbVJlZkNvdW50Kys7Ci19Ci0KLXVuc2ln
bmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1SZWZD
b3VudDsKLX0KLQotdW5zaWduZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBQcm9ncmFtOjppc3N1ZVNlcmlh
bCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLWludCBQcm9ncmFtOjpn
ZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TGVuZ3Ro
KCk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAgICByZXR1cm4gbUluZm9Mb2cuZ2V0TG9n
KGJ1ZlNpemUsIGxlbmd0aCwgaW5mb0xvZyk7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRl
cnMpCi17Ci0gICAgaW50IHRvdGFsID0gMDsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAg
IHsKLSAgICAgICAgaWYgKHRvdGFsIDwgbWF4Q291bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHNoYWRlcnNbdG90YWxdID0gbVZlcnRleFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB0b3RhbCsrOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0g
ICAgewotICAgICAgICBpZiAodG90YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAgICAg
ICAgc2hhZGVyc1t0b3RhbF0gPSBtRnJhZ21lbnRTaGFkZXItPmdldEhhbmRsZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdG90YWwrKzsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQpCi0gICAgewot
ICAgICAgICAqY291bnQgPSB0b3RhbDsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICBpZiAo
bVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZl
QXR0cmlidXRlKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA+IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG5hbWVbMF0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgICp0eXBlID0gR0xfTk9ORTsKLSAgICAgICAgKnNpemUgPSAxOwotICAg
IH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKQotewotICAg
IGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFy
eS0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1HTGludCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRy
aWJ1dGVNYXhMZW5ndGgoKQotewotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQot
dm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAq
bmFtZSkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICByZXR1cm4g
bVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm0oaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwg
c2l6ZSwgdHlwZSwgbmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChi
dWZzaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZVswXSA9ICdcMCc7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVu
Z3RoID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgICpzaXplID0gMDsKLSAgICAgICAgKnR5cGUg
PSBHTF9OT05FOwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUNv
dW50KCkKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0gICAgewotICAgICAgICByZXR1cm4g
bVByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMaW50IFByb2dyYW06Omdl
dEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKQotewotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybU1heExl
bmd0aCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZmxhZ0ZvckRlbGV0aW9uKCkKLXsKLSAgICBtRGVsZXRlU3Rh
dHVzID0gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6dmFs
aWRhdGUoKQotewotICAgIG1JbmZvTG9nLnJlc2V0KCk7Ci0KLSAgICBpZiAobVByb2dyYW1CaW5h
cnkpCi0gICAgewotICAgICAgICBtUHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGUobUluZm9Mb2cpOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtSW5mb0xvZy5hcHBlbmQoIlByb2dyYW0g
aGFzIG5vdCBiZWVuIHN1Y2Nlc3NmdWxseSBsaW5rZWQuIik7Ci0gICAgfQotfQotCi1ib29sIFBy
b2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKLXsKLSAgICBpZiAobVByb2dyYW1CaW5hcnkpCi0g
ICAgewotICAgICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnktPmlzVmFsaWRhdGVkKCk7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3Jh
bS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDczMWQuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUHJvZ3JhbS5oOiBEZWZp
bmVzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFtIG9iamVjdHMK
LS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9u
IDIuMTAuMyBwYWdlIDI4LgotCi0jaWZuZGVmIExJQkdMRVNWMl9QUk9HUkFNX0hfCi0jZGVmaW5l
IExJQkdMRVNWMl9QUk9HUkFNX0hfCi0KLSNpbmNsdWRlIDxkM2R4OS5oPgotI2luY2x1ZGUgPHN0
cmluZz4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBS
ZXNvdXJjZU1hbmFnZXI7Ci1jbGFzcyBGcmFnbWVudFNoYWRlcjsKLWNsYXNzIFZlcnRleFNoYWRl
cjsKLQotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBnX2Zha2VwYXRoOwotCi1jbGFzcyBBdHRy
aWJ1dGVCaW5kaW5ncwotewotICBwdWJsaWM6Ci0gICAgQXR0cmlidXRlQmluZGluZ3MoKTsKLSAg
ICB+QXR0cmlidXRlQmluZGluZ3MoKTsKLQotICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9u
KEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0gICAgaW50IGdldEF0dHJpYnV0ZUJp
bmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAg
c3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhfQVRUUklC
U107Ci19OwotCi1jbGFzcyBJbmZvTG9nCi17Ci0gIHB1YmxpYzoKLSAgICBJbmZvTG9nKCk7Ci0g
ICAgfkluZm9Mb2coKTsKLQotICAgIGludCBnZXRMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdl
dExvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7Ci0K
LSAgICB2b2lkIGFwcGVuZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKTsKLSAgICB2b2lk
IGFwcGVuZChjb25zdCBjaGFyICppbmZvLCAuLi4pOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5mb0xvZyk7Ci0gICAgY2hhciAq
bUluZm9Mb2c7Ci19OwotCi1jbGFzcyBQcm9ncmFtCi17Ci0gIHB1YmxpYzoKLSAgICBQcm9ncmFt
KFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7Ci0KLSAgICB+UHJvZ3Jh
bSgpOwotCi0gICAgYm9vbCBhdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOwotICAgIGJvb2wg
ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGVyKTsKLSAgICBpbnQgZ2V0QXR0YWNoZWRTaGFkZXJz
Q291bnQoKSBjb25zdDsKLQotICAgIHZvaWQgYmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBp
bmRleCwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLSAgICB2b2lkIGxpbmsoKTsKLSAgICB2b2lkIHNl
dFByb2dyYW1CaW5hcnkoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgUHJvZ3Jh
bUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0gICAgaW50IGdldEluZm9Mb2dMZW5ndGgo
KSBjb25zdDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIGNoYXIgKmluZm9Mb2cpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6
ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOwotCi0gICAgdm9p
ZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKLSAg
ICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAgIEdMaW50IGdldEFjdGl2ZUF0
dHJpYnV0ZU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBp
bmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVu
dW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50
KCk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBh
ZGRSZWYoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291
bnQoKSBjb25zdDsKLSAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwotICAgIGJvb2wgaXNGbGFn
Z2VkRm9yRGVsZXRpb24oKSBjb25zdDsKLQotICAgIHZvaWQgdmFsaWRhdGUoKTsKLSAgICBib29s
IGlzVmFsaWRhdGVkKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29u
c3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7
Ci0KLSAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBmYWxzZSk7Ci0KLSAgICBzdGF0aWMg
dW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0KLSAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdt
ZW50U2hhZGVyOwotICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKLQotICAgIEF0dHJp
YnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsKLQotICAgIFByb2dyYW1CaW5hcnkqIG1Q
cm9ncmFtQmluYXJ5OwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGlj
YXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNl
Ci0KLSAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50
IG1TZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwotCi0g
ICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwotICAgIGNvbnN0IEdMdWludCBt
SGFuZGxlOwotCi0gICAgSW5mb0xvZyBtSW5mb0xvZzsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9QUk9HUkFNX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWMyOGU1MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4MCArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9ncmFtLmNwcDogSW1wbGVtZW50cyB0aGUg
Z2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVudHMgR0wgcHJvZ3JhbSBvYmplY3RzCi0vLyBhbmQg
cmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMg
cGFnZSAyOC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nPgot
Ci0jaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCi0jZGVmaW5l
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMMwotI2VuZGlmCi0KLW5hbWVzcGFjZSBnbAotewotc3RkOjpzdHJpbmcgc3RyKGludCBp
KQotewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihi
dWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1Vbmlmb3JtOjpVbmlm
b3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBfbmFtZShfbmFtZSksIG5hbWUoUHJvZ3JhbUJp
bmFyeTo6dW5kZWNvcmF0ZVVuaWZvcm0oX25hbWUpKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKLXsK
LSAgICBpbnQgYnl0ZXMgPSBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogYXJyYXlTaXplOwot
ICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0gICAgbWVtc2V0KGRhdGEsIDAs
IGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci19Ci0KLVVuaWZvcm06On5Vbmlmb3JtKCkKLXsK
LSAgICBkZWxldGVbXSBkYXRhOwotfQotCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKQotewotICAg
IHJldHVybiBfbmFtZS5jb21wYXJlKDAsIDMsICJhcl8iKSA9PSAwOwotfQotCi1Vbmlmb3JtTG9j
YXRpb246OlVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUsIHVuc2lnbmVk
IGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAotICAgIDogbmFtZShQcm9ncmFtQmlu
YXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShfbmFtZSkpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChp
bmRleCkKLXsKLX0KLQotUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeSgpCi17Ci0gICAgbURl
dmljZSA9IGdldERldmljZSgpOwotCi0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAg
bVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwot
ICAgIG1Db25zdGFudFRhYmxlVlMgPSBOVUxMOwotCi0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5k
ZXgrKykKLSAgICB7Ci0gICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwotICAgIH0K
LQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1BTW2luZGV4XS5hY3RpdmUgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgaW5kZXgrKykKLSAgICB7Ci0gICAgICAgIG1TYW1w
bGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0KLSAgICBt
RHhEZXB0aFJhbmdlTG9jYXRpb24gPSAtMTsKLSAgICBtRHhEZXB0aExvY2F0aW9uID0gLTE7Ci0g
ICAgbUR4Q29vcmRMb2NhdGlvbiA9IC0xOwotICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9
IC0xOwotICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKLSAgICBtRHhQb2ludHNPckxpbmVz
TG9jYXRpb24gPSAtMTsKLX0KLQotUHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkoKQotewot
ICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJs
ZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYg
KG1Db25zdGFudFRhYmxlUFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5SZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlVlMpCi0gICAgewotICAgICAg
ICBtQ29uc3RhbnRUYWJsZVZTLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtVW5p
Zm9ybXMuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwot
ICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFBpeGVs
U2hhZGVyOSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxTaGFkZXIoKQotewotICAgIHJldHVybiBt
UGl4ZWxFeGVjdXRhYmxlOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpQcm9ncmFtQmlu
YXJ5OjpnZXRWZXJ0ZXhTaGFkZXIoKQotewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsK
LX0KLQotR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNo
YXIgKm5hbWUpCi17Ci0gICAgaWYgKG5hbWUpCi0gICAgewotICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZSA9PSBzdGQ6OnN0cmlu
ZyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCkKLXsK
LSAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPj0gMCAmJiBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUyk7Ci0gICAgCi0gICAgcmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0
ZUluZGV4XTsKLX0KLQotLy8gUmV0dXJucyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IHNhbXBs
ZXIgaW5kZXggdXNlZC4KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldFVzZWRTYW1wbGVyUmFuZ2Uo
U2FtcGxlclR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICByZXR1cm4gbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsK
LSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIHJldHVybiBtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRl
eHR1cmUgaW1hZ2UgdW5pdCAoMC0xOSkgY29ycmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2Ft
cGxlcgotLy8gaW5kZXggKDAtMTUgZm9yIHRoZSBwaXhlbCBzaGFkZXIgYW5kIDAtMyBmb3IgdGhl
IHZlcnRleCBzaGFkZXIpLgotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlck1hcHBpbmco
U2FtcGxlclR5cGUgdHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKLXsKLSAgICBHTGlu
dCBsb2dpY2FsVGV4dHVyZVVuaXQgPSAtMTsKLQotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0g
ICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBz
aXplb2YobVNhbXBsZXJzUFMpL3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotCi0gICAgICAgIGlm
IChtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2Fs
VGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNBTVBM
RVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVy
c1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLQotICAgICAgICBpZiAobVNhbXBsZXJzVlNb
c2FtcGxlckluZGV4XS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvZ2ljYWxUZXh0
dXJlVW5pdCA9IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0Owot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICBpZiAobG9naWNhbFRleHR1cmVVbml0ID49IDAgJiYgbG9naWNhbFRleHR1
cmVVbml0IDwgKEdMaW50KWdldENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBSZXR1cm5zIHRoZSB0ZXh0dXJlIHR5cGUg
Zm9yIGEgZ2l2ZW4gRGlyZWN0M0QgOSBzYW1wbGVyIHR5cGUgYW5kCi0vLyBpbmRleCAoMC0xNSBm
b3IgdGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1UZXh0
dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUg
dHlwZSwgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgewotICAgICAgY2FzZSBTQU1QTEVSX1BJWEVMOgotICAgICAgICBBU1NFUlQoc2FtcGxlcklu
ZGV4IDwgc2l6ZW9mKG1TYW1wbGVyc1BTKS9zaXplb2YobVNhbXBsZXJzUFNbMF0pKTsKLSAgICAg
ICAgQVNTRVJUKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgcmV0
dXJuIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBjYXNlIFNB
TVBMRVJfVkVSVEVYOgotICAgICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1w
bGVyc1ZTKS9zaXplb2YobVNhbXBsZXJzVlNbMF0pKTsKLSAgICAgICAgQVNTRVJUKG1TYW1wbGVy
c1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlKTsKLSAgICAgICAgcmV0dXJuIG1TYW1wbGVyc1ZTW3Nh
bXBsZXJJbmRleF0udGV4dHVyZVR5cGU7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBURVhUVVJFXzJEOwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5
OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKLXsKLSAgICB1bnNpZ25lZCBp
bnQgc3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBvcGVy
YXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAotICAgIHNpemVfdCBvcGVuID0gbmFtZS5m
aW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFzdF9vZign
XScpOwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUu
bGVuZ3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0
cihvcGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5hbWUuZXJhc2Uob3Blbik7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1z
OyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
Lm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCA9PSBzdWJzY3JpcHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlv
bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCBQcm9ncmFt
QmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0KiB2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0K
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAg
ICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0g
dlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbMl0g
PSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0
OwotICAgICAgICAgICAgdiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNp
emUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9
PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFu
ICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJn
ZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAg
IHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAg
ICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAg
diArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
LQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBh
cmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwot
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8g
d3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJB
VElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgR0xmbG9hdCAqdGFy
Z2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAg
ICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAg
ICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAg
ICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29s
UGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiAzOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQgKiAzOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXpl
b2YoR0xmbG9hdCkgKiA0LAotICAgICAgICAgICAgICAgdiwgNCAqIHNpemVvZihHTGZsb2F0KSAq
IGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9C
T09MX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+
YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAg
IGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogNDsgKytpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFy
YW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJn
ZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0
cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaW50IGNvcHlXaWR0
aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7Ci0gICAgaW50IGNvcHlIZWlnaHQg
PSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7Ci0KLSAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGNvcHlXaWR0aDsgeCsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBjb3B5SGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt4ICogdGFy
Z2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOwotICAgICAgICB9Ci0g
ICAgfQotICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSBzcmNX
aWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdl
dFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8g
Y2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0
YXJnZXRIZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRX
aWR0aCArIHhdID0gKFQpMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0
cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0g
dGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRy
YW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0
YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAg
aWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0g
KGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDMsMywzPih0
YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDEyOwotICAgICAgICB2YWx1ZSArPSA5
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDQpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdl
dFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJh
eSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVv
ZihHTGZsb2F0KSAqIDE2KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZh
bHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2YWx1ZSArPSAxNjsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
U0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJf
Q1VCRSkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAg
ICAgICAgdiwgc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4g
KmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
PT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5p
Zm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAq
IDIsCi0gICAgICAgICAgICAgICB2LCAyICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMjsKLQotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJv
b2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAg
ICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAg
ICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZv
cm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFy
cmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
Ci0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAzLAotICAgICAgICAgICAgICAgdiwgMyAq
IHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9
IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAqIDM7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00aXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlm
IChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJn
ZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xp
bnQpICogNCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwot
ICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkK
LSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0Owot
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1
ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0t
IGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZT
aXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxT
aXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJl
ZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIs
NCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFy
YW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRD
b3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRl
cm5hbENvdW50ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0
VW5pZm9ybS0+dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9v
bFBhcmFtcyA9IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1z
W2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3Vu
dCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXpl
b2YoR0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0lOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICpp
bnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
KmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2Nh
dGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNb
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVm
U2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAg
ICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFt
cywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogMTYpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUV4
dGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpbnQgaW50ZXJuYWxDb3VudCA9IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50
KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21w
b25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291bnQ7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQp
Ym9vbFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1z
ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogaW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAg
bWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQgKiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW1C
aW5hcnk6OmRpcnR5QWxsVW5pZm9ybXMoKQotewotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3Jt
cyA9IG1Vbmlmb3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBp
bmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1zW2lu
ZGV4XS0+ZGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZv
cm1zIHNldCBmb3IgdGhpcyBwcm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UK
LXZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCi17Ci0gICAgZm9yIChzdGQ6OnZl
Y3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZvcm1zLmJlZ2luKCksIHVlID0gbVVu
aWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikgewotICAgICAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gKnViOwotCi0gICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLSAgICAgICAgICAgIEdMZmxvYXQgKmYgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YTsKLSAgICAgICAgICAgIEdMaW50ICppID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwot
ICAgICAgICAgICAgR0xib29sZWFuICpiID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6ICAgICAgIGFwcGx5VW5pZm9ybW5idih0
YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDEsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzI6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5pZm9ybSwgYXJyYXlT
aXplLCAyLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOiAg
YXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgMywgYik7ICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDogIGFwcGx5VW5pZm9ybW5idih0YXJn
ZXRVbmlmb3JtLCBhcnJheVNpemUsIDQsIGIpOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogYXBwbHlV
bmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIGYpOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FN
UExFUl9DVUJFOgotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAgIGFwcGx5VW5pZm9y
bTFpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVuaWZvcm0yaXYodGFyZ2V0VW5pZm9ybSwg
YXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZF
QzM6ICAgYXBwbHlVbmlmb3JtM2l2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OiAgIGFwcGx5VW5pZm9ybTRp
dih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBhdHRhY2hlZCBz
aGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRDEwQmxvYiAqUHJvZ3JhbUJpbmFy
eTo6Y29tcGlsZVRvQmluYXJ5KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKmhsc2wsIGNv
bnN0IGNoYXIgKnByb2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpCi17
Ci0gICAgaWYgKCFobHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0g
ICAgRFdPUkQgcmVzdWx0OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNv
dXJjZVRleHQ7Ci0gICAgaWYgKHBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9
IEQzRENPTVBJTEVfREVCVUc7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgIGZsYWdzIHw9IEFOR0xF
X0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNE
Q09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5n
IHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpz
dHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikg
KyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIo
KSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMOwotICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICBJRDNEMTBCbG9i
ICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0QxMEJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0g
ICAgcmVzdWx0ID0gRDNEQ29tcGlsZShobHNsLCBzdHJsZW4oaGxzbCksIGdfZmFrZXBhdGgsIE5V
TEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MsIDAsICZiaW5hcnksICZlcnJvck1lc3Nh
Z2UpOwotCi0gICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIg
Km1lc3NhZ2UgPSAoY29uc3QgY2hhciopZXJyb3JNZXNzYWdlLT5HZXRCdWZmZXJQb2ludGVyKCk7
Ci0KLSAgICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgIFRS
QUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgbWVzc2FnZSk7Ci0KLSAg
ICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBE
M0RYR2V0U2hhZGVyQ29uc3RhbnRUYWJsZShzdGF0aWNfY2FzdDxjb25zdCBEV09SRCo+KGJpbmFy
eS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgY29uc3RhbnRUYWJsZSk7Ci0KLSAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJpbmFyeS0+
UmVsZWFzZSgpOwotCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBi
aW5hcnk7Ci19Ci0KLS8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lz
dGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFn
ZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCi0vLyBSZXR1cm5z
IHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNm
dWwKLWludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29u
c3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIp
Ci17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25zdCBpbnQg
bWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsK
LQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0Nv
dW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJp
YWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKLQotICAgICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0g
biAmJiAhc3VjY2VzczsgcisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wg
YXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
biAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hd
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2
YWlsYWJsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmct
PnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsg
eCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsg
ci0tKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFi
bGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAm
JiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNr
aW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8
IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAobSA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07
Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9
IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Bh
Y2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdW
ZWN0b3JzOyByKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IXBhY2tpbmdbcl1bY29sdW1uXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFy
eWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBz
dWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmct
Pm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50
IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0
b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3Jd
WzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0
ZXJzOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZv
TG9nLCBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikK
LXsKLSAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlc2V0IHRoZSB2YXJ5
aW5nIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
ZnJhZ1ZhciA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgZnJhZ1ZhciAhPSBm
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBmcmFnVmFyKyspCi0gICAgewotICAgICAg
ICBmcmFnVmFyLT5yZWcgPSAtMTsKLSAgICAgICAgZnJhZ1Zhci0+Y29sID0gLTE7Ci0gICAgfQot
Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdnR4VmFyID0gdmVydGV4U2hhZGVyLT5t
VmFyeWluZ3MuYmVnaW4oKTsgdnR4VmFyICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgp
OyB2dHhWYXIrKykKLSAgICB7Ci0gICAgICAgIHZ0eFZhci0+cmVnID0gLTE7Ci0gICAgICAgIHZ0
eFZhci0+Y29sID0gLTE7Ci0gICAgfQotCi0gICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUg
cmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdfVkVD
VE9SU19TTTNdWzRdID0ge05VTEx9OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3Mo
aW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA8
IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUg
dGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIENvbnRleHQgKmNvbnRleHQg
PSBnZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1No
YWRlck1vZGVsMygpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQt
PmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhW
YXJ5aW5nVmVjdG9ycyAmJiBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewot
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBw
b3J0IGdsX0ZyYWdDb29yZCIpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
aW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCi0gICAgICAg
IGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZhcnlp
bmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0
cHV0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQt
Pm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAh
PSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0
ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5n
Iiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9
IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOwot
Ci0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1hdGNoZWQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGcmFnbWVudCB2YXJ5aW5nICVzIGRv
ZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkpOwot
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGQ6
OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09SRCIpOwot
Ci0gICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1
dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5i
ZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0
cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4SExTTCArPSAiICAgIGZs
b2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogdmVydGV4SExT
TCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAiOyAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MngyICI7
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVydGV4SExTTCArPSAiICAg
IGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogdmVydGV4
SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSBkZWNvcmF0ZUF0
dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0lu
ZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3Vu
dChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCi0g
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgVlNfT1VU
UFVUXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFBPU0lUSU9OO1xuIjsKLQotICAgIGZvciAoaW50IHIgPSAw
OyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0g
cGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/
IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdp
c3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3Ry
KHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nv
b3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQotICAgIHsK
LSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xu
IjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAg
ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQp
XG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5
OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUr
KykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1
dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0gICAgICAgIGlmIChWYXJpYWJsZVJvd0Nv
dW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAotICAgICAgICB7Ci0gICAgICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVy
dGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUp
ICsgIik7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggLSBkeF9IYWxmUGl4
ZWxTaXplLnggKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKyBkeF9IYWxmUGl4ZWxTaXplLnkg
KiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24u
dztcbiI7Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0g
ICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGNs
YW1wKGdsX1BvaW50U2l6ZSwgMS4wLCAiICsgc3RyKChpbnQpQUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFX01BWF9TTTMpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0
LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgdmFyeWluZyAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+
dHlwZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+
cmVnICsgaSAqIHJvd3MgKyBqOwotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LnYiICsgc3RyKHIpOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVk
UmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdz
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBd
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
cl1beF0gPT0gJip2YXJ5aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9ICIgKyB2YXJ5
aW5nLT5uYW1lOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBz
dHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtcbiI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmVydGV4SExTTCAr
PSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAg
ICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRc
biIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAg
IHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZh
cnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAi
O1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQg
Z2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtc
biI7Ci0gICAgICAgIGlmIChzbTMpIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0gICAgewotICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQotICAgIHsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgdkZhY2UgOiBWRkFDRTtcbiI7Ci0gICAgfQot
Ci0gICAgcGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgot
ICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAg
ICAgICAgICAie1xuIjsKLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQp
Ci0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1
dC5nbF9GcmFnQ29vcmQudztcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAoc20zKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0
LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkeF9Db29yZCBjb250YWlucyB0aGUg
dmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIENv
bnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KCkKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X0Nvb3Jk
LnggKyBkeF9Db29yZC56O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0Zy
YWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X0Nvb3JkLnkgKyBk
eF9Db29yZC53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcGl4ZWxITFNMICs9
ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhf
RGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc1BvaW50Q29vcmQgJiYgc20zKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAg
Z2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKLSAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29y
ZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNp
bmcpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4
X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAo
aW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6
Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZh
cnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAg
IHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZh
cnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIHBpeGVsSExT
TCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh2
YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihq
KSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBnbF9t
YWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAg
IFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCi0gICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAg
ICAgICAgICAgICAgICAifVxuIjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dy
YW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3Mg
JmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyKQotewotICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZy
YWdtZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNDb21w
aWxlZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0ZDo6
c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgc3RkOjpz
dHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOwotCi0gICAgaWYgKCFs
aW5rVmFyeWluZ3MoaW5mb0xvZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRl
ciwgdmVydGV4U2hhZGVyKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGNoYXIgKnZl
cnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInZzXzNfMCIg
OiAidnNfMl8wIjsKLSAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5zdXBw
b3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKLQotICAgIElEM0QxMEJs
b2IgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCB2ZXJ0ZXhITFNMLmNf
c3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKLSAgICBJRDNEMTBCbG9i
ICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBwaXhlbEhMU0wuY19zdHIo
KSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7Ci0KLSAgICBpZiAodmVydGV4Qmlu
YXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCB2ZXJ0ZXhSZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKLSAgICAgICAgSFJFU1VMVCBwaXhl
bFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKChEV09SRCopcGl4ZWxCaW5hcnkt
PkdldEJ1ZmZlclBvaW50ZXIoKSwgJm1QaXhlbEV4ZWN1dGFibGUpOwotCi0gICAgICAgIGlmICh2
ZXJ0ZXhSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgdmVydGV4UmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkgfHwgcGl4ZWxSZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcGl4ZWxSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQodmVydGV4UmVzdWx0KSAmJiBTVUNDRUVERUQocGl4ZWxSZXN1
bHQpKTsKLQotICAgICAgICB2ZXJ0ZXhCaW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgcGl4ZWxC
aW5hcnktPlJlbGVhc2UoKTsKLSAgICAgICAgdmVydGV4QmluYXJ5ID0gTlVMTDsKLSAgICAgICAg
cGl4ZWxCaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSAmJiBt
UGl4ZWxFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtBdHRyaWJ1
dGVzKGluZm9Mb2csIGF0dHJpYnV0ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hh
ZGVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdMX0ZS
QUdNRU5UX1NIQURFUiwgbUNvbnN0YW50VGFibGVQUykpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
IWxpbmtVbmlmb3JtcyhpbmZvTG9nLCBHTF9WRVJURVhfU0hBREVSLCBtQ29uc3RhbnRUYWJsZVZT
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBh
bHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGdsXyBhbmQgZHhfCi0gICAgICAgICAgICAvLyBhcmUg
cmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBub3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRp
b24KLSAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlv
bigiZHhfRGVwdGhSYW5nZSIpOwotICAgICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdldFVu
aWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgiKTsKLSAgICAgICAgICAgIG1EeENvb3JkTG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0Nvb3JkIik7Ci0gICAgICAgICAgICBtRHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUiKTsK
LSAgICAgICAgICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4
X0Zyb250Q0NXIik7Ci0gICAgICAgICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X1BvaW50c09yTGluZXMiKTsKLQotICAgICAgICAgICAgY29udGV4
dC0+bWFya0R4VW5pZm9ybXNEaXJ0eSgpOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gRGV0ZXJtaW5lcyB0
aGUgbWFwcGluZyBiZXR3ZWVuIEdMIGF0dHJpYnV0ZXMgYW5kIERpcmVjdDNEIDkgdmVydGV4IHN0
cmVhbSB1c2FnZSBpbmRpY2VzCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcikKLXsKLSAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7Ci0KLSAgICAvLyBM
aW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0
cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7
IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmlu
ZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlm
IChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVt
cHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZl
IGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICph
dHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZF
UlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBm
aXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2Vk
TG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmlu
ZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0
ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRl
eFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAg
aW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRy
aWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0
IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAgICAgaW50IGF2
YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dz
LCBNQVhfVkVSVEVYX0FUVFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXgg
PT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3Rp
dmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluawotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1
dGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7
IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCi0gICAgewotICAgICAgICBp
bnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFy
aWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7
Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5h
cnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBJRDNEWENv
bnN0YW50VGFibGUgKmNvbnN0YW50VGFibGUpCi17Ci0gICAgRDNEWENPTlNUQU5UVEFCTEVfREVT
QyBjb25zdGFudFRhYmxlRGVzY3JpcHRpb247Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNj
KCZjb25zdGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29u
c3RhbnRJbmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24u
Q29uc3RhbnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNv
bnN0YW50SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRl
eCk7Ci0KLSAgICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAg
ICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBjb25zdGFudFRhYmxlLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRIYW5kbGUsICZjb25zdGFu
dERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGluZm9Mb2csIHNoYWRl
ciwgY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBmb3VuZCBpbiB0
aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcwotLy8gUmV0dXJucyB0cnVl
IGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQotYm9vbCBQcm9ncmFt
QmluYXJ5OjpkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNv
bnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSkKLXsKLSAgICBpZiAoY29uc3Rh
bnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBEM0RYUlNfU0FNUExFUikKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29uc3RhbnREZXNjcmlwdGlvbi5SZWdp
c3RlckNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzRFhIQU5ETEUgcHNDb25z
dGFudCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50
RGVzY3JpcHRpb24uTmFtZSk7Ci0gICAgICAgICAgICBEM0RYSEFORExFIHZzQ29uc3RhbnQgPSBt
Q29uc3RhbnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZShOVUxMLCBjb25zdGFudERlc2NyaXB0
aW9uLk5hbWUpOwotCi0gICAgICAgICAgICBpZiAocHNDb25zdGFudCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFi
bGVQUy0+R2V0U2FtcGxlckluZGV4KHBzQ29uc3RhbnQpICsgaTsKLQotICAgICAgICAgICAgICAg
IGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0
aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4
XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBM
RVJDVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAg
IG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJ
bmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiUGl4ZWwgc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZzQ29uc3RhbnQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IG1D
b25zdGFudFRhYmxlVlMtPkdldFNhbXBsZXJJbmRleCh2c0NvbnN0YW50KSArIGk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgZ2V0Q29udGV4dCgpLT5nZXRNYXhpbXVtVmVy
dGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25z
dGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFRFWFRVUkVfQ1VC
RSA6IFRFWFRVUkVfMkQ7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJ
bmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgbVVzZWRW
ZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJW
ZXJ0ZXggc2hhZGVyIHNhbXBsZXIgY291bnQgZXhjZWVkcyBNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFMgKCVkKS4iLCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaChj
b25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNEWFBDX1NUUlVD
VDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9
IDA7IGFycmF5SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzOyBhcnJheUluZGV4
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmll
bGQgPSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQr
KykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzRFhIQU5ETEUgZmll
bGRIYW5kbGUgPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudChjb25zdGFudEhhbmRsZSwg
ZmllbGQpOwotCi0gICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVz
Y3JpcHRpb247Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7
Ci0KLSAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3RhbnRUYWJsZVBT
LT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3Jp
cHRpb25Db3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgc3RydWN0SW5kZXggPSAoY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyA+IDEpID8gKCJbIiArIHN0cihhcnJheUluZGV4KSAr
ICJdIikgOiAiIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oaW5m
b0xvZywgc2hhZGVyLCBmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0
YW50RGVzY3JpcHRpb24uTmFtZSArIHN0cnVjdEluZGV4ICsgIi4iKSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgY2FzZSBEM0RYUENfU0NBTEFSOgot
ICAgICAgY2FzZSBEM0RYUENfVkVDVE9SOgotICAgICAgY2FzZSBEM0RYUENfTUFUUklYX0NPTFVN
TlM6Ci0gICAgICBjYXNlIEQzRFhQQ19PQkpFQ1Q6Ci0gICAgICAgIHJldHVybiBkZWZpbmVVbmlm
b3JtKHNoYWRlciwgY29uc3RhbnREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50RGVzY3JpcHRp
b24uTmFtZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVu
aWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVz
Y3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1bmlm
b3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFudERlc2NyaXB0aW9uLCBfbmFtZSk7Ci0KLSAgICBp
ZighdW5pZm9ybSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBDaGVjayBpZiBhbHJlYWR5IGRlZmluZWQKLSAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbih1bmlmb3JtLT5uYW1lKTsKLSAgICBHTGVudW0gdHlwZSA9IHVuaWZvcm0tPnR5
cGU7Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlm
b3JtOwotICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURFUikg
dW5pZm9ybS0+cHMuc2V0KGNvbnN0YW50RGVzY3JpcHRpb24pOwotICAgIGlmIChzaGFkZXIgPT0g
R0xfVkVSVEVYX1NIQURFUikgICB1bmlmb3JtLT52cy5zZXQoY29uc3RhbnREZXNjcmlwdGlvbik7
Ci0KLSAgICBpZiAobG9jYXRpb24gPj0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmlmb3Jt
LT50eXBlID09IHR5cGU7Ci0gICAgfQotCi0gICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3Jt
KTsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmFycmF5U2l6ZTsg
KytpKQotICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0
aW9uKF9uYW1lLCBpLCB1bmlmb3JtSW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotVW5pZm9ybSAqUHJvZ3JhbUJpbmFyeTo6Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09O
U1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1l
KQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gMSkgICAvLyBWZWN0b3Jz
IGFuZCBzY2FsYXJzCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKLSAgICAg
ICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJE
LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKLSAgICAgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSX0NVQkUsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRDNEWFBUX0JPT0w6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
Q29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfQk9PTCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwot
ICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIsIF9u
YW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSAz
OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlw
dGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3Jt
KEdMX0JPT0xfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dp
dGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9JTlRfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDMywg
X25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNl
IDQ6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDNCwgX25hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRf
RkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0o
R0xfRkxPQVQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDMiwgX25hbWUsIGNv
bnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVy
biBuZXcgVW5pZm9ybShHTF9GTE9BVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5F
bGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZM
T0FUX1ZFQzQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93cyA9
PSBjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpICAvLyBTcXVhcmUgbWF0cmljZXMKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBEM0RYUFRfRkxPQVQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50
RGVzY3JpcHRpb24uUm93cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRp
b24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShH
TF9GTE9BVF9NQVQzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAg
ICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDQsIF9uYW1l
LCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIG5lZWRz
IHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5
OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKLXsKLSAgICBpZiAo
bmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhf
IikgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6dW5kZWNv
cmF0ZVVuaWZvcm0oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lKQotewotICAgIHN0ZDo6c3RyaW5n
IG5hbWUgPSBfbmFtZTsKLSAgICAKLSAgICAvLyBSZW1vdmUgYW55IHN0cnVjdHVyZSBmaWVsZCBk
ZWNvcmF0aW9uCi0gICAgc2l6ZV90IHBvcyA9IDA7Ci0gICAgd2hpbGUgKChwb3MgPSBuYW1lLmZp
bmQoIi5fIiwgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgewotICAgICAgICBuYW1l
LnJlcGxhY2UocG9zLCAyLCAiLiIpOwotICAgIH0KLQotICAgIC8vIFJlbW92ZSB0aGUgbGVhZGlu
ZyBkZWNvcmF0aW9uCi0gICAgaWYgKG5hbWVbMF0gPT0gJ18nKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG5hbWUuc3Vic3RyKDEpOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lLmNvbXBhcmUoMCwg
MywgImFyXyIpID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMyk7Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBuYW1lOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybW5idihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBpbnQg
d2lkdGgsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBmbG9hdCB2ZWN0b3JbRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTICogNF07Ci0gICAgQk9PTCBib29sVmVjdG9yW0QzRDlfTUFYX0JPT0xf
Q09OU1RBTlRTXTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAw
IHx8IHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApCi0gICAgewotICAgICAgICBB
U1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDQ7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
aiA8IHdpZHRoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9y
W2kgKiA0ICsgal0gPSAodltpICogd2lkdGggKyBqXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4w
ZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yW2kgKiA0ICsgal0gPSAwLjBmOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCB8fCB0YXJnZXRVbmlmb3JtLT52cy5i
b29sSW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIGludCBwc0NvdW50ID0gdGFyZ2V0VW5pZm9y
bS0+cHMuYm9vbEluZGV4ID49IDAgPyB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50IDog
MDsKLSAgICAgICAgaW50IHZzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXggPj0g
MCA/IHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgY29w
eUNvdW50ID0gc3RkOjptaW4oY291bnQgKiB3aWR0aCwgc3RkOjptYXgocHNDb3VudCwgdnNDb3Vu
dCkpOwotICAgICAgICBBU1NFUlQoY29weUNvdW50IDw9IEQzRDlfTUFYX0JPT0xfQ09OU1RBTlRT
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Q291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgYm9vbFZlY3RvcltpXSA9IHZbaV0gIT0gR0xfRkFMU0U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0gMCkK
LSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVu
aWZvcm0tPnBzLmZsb2F0NEluZGV4LCB2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVy
Q291bnQpOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJ
bmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFu
dEIodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4LCBib29sVmVjdG9yLCB0YXJnZXRVbmlmb3Jt
LT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnZzLmZsb2F0NEluZGV4ID49IDApCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHZlY3RvciwgdGFy
Z2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4ID49IDApCi0gICAgewotICAgICAgICBtRGV2aWNl
LT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIodGFyZ2V0VW5pZm9ybS0+dnMuYm9vbEluZGV4LCBi
b29sVmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci19Ci0K
LWJvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmZ2KFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lz
dGVyQ291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cHMucmVn
aXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVy
Q291bnQpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYo
dGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lz
dGVyQ291bnQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1C
aW5hcnk6OmFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNEOV9NQVhfRkxP
QVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhfRkxPQVRfQ09O
U1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0g
ICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2W2ldLCAwLCAwLCAwKTsKLSAg
ICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wcy5zYW1wbGVySW5kZXggPj0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJnZXRVbmlmb3JtLT5w
cy5zYW1wbGVySW5kZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4ID0gZmlyc3RJbmRleCArIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2FtcGxlcklu
ZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwot
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0
dXJlVW5pdCA9IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVu
aWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0UGl4
ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIChjb25zdCBm
bG9hdCopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQotICAg
IHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzLnNhbXBsZXJJbmRleCA+PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZv
cm0tPnZzLnNhbXBsZXJJbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1w
bGVySW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1TYW1wbGVyc1ZTW3NhbXBsZXJJ
bmRleF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlcklu
ZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSB2W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9h
dDRJbmRleCwgKGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3Rl
ckNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTJpdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291bnQgPD0gRDNE
OV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3JbRDNEOV9NQVhf
RkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxv
YXQpdlsxXSwgMCwgMCk7Ci0KLSAgICAgICAgdiArPSAyOwotICAgIH0KLQotICAgIGFwcGx5VW5p
Zm9ybW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTNpdihVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQo
Y291bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0
b3JbRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9h
dCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIDApOwotCi0gICAgICAgIHYgKz0gMzsK
LSAgICB9Ci0KLSAgICBhcHBseVVuaWZvcm1uaXYodGFyZ2V0VW5pZm9ybSwgY291bnQsIHZlY3Rv
cik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVu
aWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyk7
Ci0gICAgRDNEWFZFQ1RPUjQgdmVjdG9yW0QzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UU107Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3Jb
aV0gPSBEM0RYVkVDVE9SNCgoZmxvYXQpdlswXSwgKGZsb2F0KXZbMV0sIChmbG9hdCl2WzJdLCAo
ZmxvYXQpdlszXSk7Ci0KLSAgICAgICAgdiArPSA0OwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9y
bW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybW5pdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBEM0RYVkVDVE9SNCAqdmVjdG9yKQotewotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDApOwotICAgICAgICBtRGV2aWNl
LT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCwg
KGNvbnN0IGZsb2F0ICopdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsK
LSAgICB9Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJbmRleCA+PSAwKTsKLSAg
ICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZz
LmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJl
Z2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRl
ZCgpIGNvbnN0IAotewotICAgIHJldHVybiBtVmFsaWRhdGVkOwotfQotCi12b2lkIFByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUp
Ci17Ci0gICAgLy8gU2tpcCBvdmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKLSAgICB1bnNpZ25lZCBp
bnQgYWN0aXZlQXR0cmlidXRlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOwotICAg
IGZvciAoYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRy
aWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0u
bmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlQXR0cmlidXRlKys7
Ci0gICAgfQotCi0gICAgaWYgKGJ1ZnNpemUgPiAwKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hh
ciAqc3RyaW5nID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm5hbWUuY19zdHIoKTsKLQot
ICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZywgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVm
c2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICAqbGVuZ3RoID0gc3RybGVuKG5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
KnNpemUgPSAxOyAgIC8vIEFsd2F5cyBhIHNpbmdsZSAndHlwZScgaW5zdGFuY2UKLQotICAgICp0
eXBlID0gbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVdLnR5cGU7Ci19Ci0KLUdMaW50IFByb2dy
YW1CaW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkKLXsKLSAgICBpbnQgY291bnQgPSAw
OwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICgh
bUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNv
dW50OwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5n
dGgoKQotewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRl
SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJ
bmRleF0ubmFtZS5lbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBz
dGQ6Om1heCgoaW50KShtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmxlbmd0
aCgpICsgMSksIG1heExlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF4
TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm0oR0x1aW50
IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdM
ZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1
bmlmb3JtcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlmb3JtID0gMDsKLSAgICB1bnNpZ25l
ZCBpbnQgdW5pZm9ybTsKLSAgICBmb3IgKHVuaWZvcm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1z
LnNpemUoKTsgdW5pZm9ybSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3Jt
XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3RpdmVVbmlmb3JtID09IGlu
ZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGFjdGl2ZVVuaWZvcm0rKzsKLSAgICB9Ci0KLSAgICBBU1NFUlQodW5pZm9ybSA8IG1Vbmlmb3Jt
cy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZv
cm1Db3VudCgpCi0KLSAgICBpZiAoYnVmc2l6ZSA+IDApCi0gICAgewotICAgICAgICBzdGQ6OnN0
cmluZyBzdHJpbmcgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWU7Ci0KLSAgICAgICAgaWYgKG1V
bmlmb3Jtc1t1bmlmb3JtXS0+aXNBcnJheSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJp
bmcgKz0gIlswXSI7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJuY3B5KG5hbWUsIHN0cmluZy5j
X3N0cigpLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCi0g
ICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGggPSBzdHJs
ZW4obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6ZSA9IG1Vbmlmb3Jtc1t1bmlm
b3JtXS0+YXJyYXlTaXplOwotCi0gICAgKnR5cGUgPSBtVW5pZm9ybXNbdW5pZm9ybV0tPnR5cGU7
Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi17Ci0g
ICAgaW50IGNvdW50ID0gMDsKLQotICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlm
b3Jtcy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5p
Zm9ybUluZGV4IDwgbnVtVW5pZm9ybXM7IHVuaWZvcm1JbmRleCsrKQotICAgIHsKLSAgICAgICAg
aWYgKG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVu
aWZvcm1NYXhMZW5ndGgoKQotewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9y
bUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5u
YW1lLmVtcHR5KCkgJiYgbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuY29tcGFyZSgwLCAz
LCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxlbmd0aCA9IChpbnQp
KG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgICAg
ICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBsZW5ndGggKz0gMzsgIC8vIENvdW50aW5nIGluICJbMF0iLgotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBtYXhM
ZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsKLX0KLQot
dm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKQotewotICAgIGFw
cGx5VW5pZm9ybXMoKTsKLSAgICBpZiAoIXZhbGlkYXRlU2FtcGxlcnMoJmluZm9Mb2cpKQotICAg
IHsKLSAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBtVmFsaWRhdGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6dmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKQotewotICAgIC8vIGlmIGFueSB0
d28gYWN0aXZlIHNhbXBsZXJzIGluIGEgcHJvZ3JhbSBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBi
dXQgcmVmZXIgdG8gdGhlIHNhbWUKLSAgICAvLyB0ZXh0dXJlIGltYWdlIHVuaXQsIGFuZCB0aGlz
IGlzIHRoZSBjdXJyZW50IHByb2dyYW0sIHRoZW4gVmFsaWRhdGVQcm9ncmFtIHdpbGwgZmFpbCwg
YW5kCi0gICAgLy8gRHJhd0FycmF5cyBhbmQgRHJhd0VsZW1lbnRzIHdpbGwgaXNzdWUgdGhlIElO
VkFMSURfT1BFUkFUSU9OIGVycm9yLgotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IG1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMgPSBnZXRDb250ZXh0KCktPmdldE1heGltdW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKCk7Ci0gICAgVGV4dHVyZVR5cGUgdGV4dHVyZVVuaXRUeXBlW01BWF9D
T01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURjsgKytpKQot
ICAgIHsKLSAgICAgICAgdGV4dHVyZVVuaXRUeXBlW2ldID0gVEVYVFVSRV9VTktOT1dOOwotICAg
IH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVzZWRQaXhlbFNhbXBsZXJS
YW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1BTW2ldLmFjdGl2ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNQU1tpXS5s
b2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1bml0ID49
IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGluZm9Mb2cpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlwZVt1
bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0XSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5hcHBl
bmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRleHR1
cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNQU1tpXS50ZXh0dXJlVHlwZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2U7ICsraSkKLSAgICB7Ci0gICAgICAgIGlm
IChtU2FtcGxlcnNWU1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCB1bml0ID0gbVNhbXBsZXJzVlNbaV0ubG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAodW5pdCA+PSBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVyIHVu
aWZvcm0gKCVkKSBleGNlZWRzIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCki
LCB1bml0LCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICh0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gIT0gVEVYVFVSRV9VTktOT1dOKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlw
ZSAhPSB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5mb0xvZykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb0xvZy0+YXBwZW5kKCJTYW1wbGVycyBvZiBjb25mbGljdGluZyB0
eXBlcyByZWZlciB0byB0aGUgc2FtZSB0ZXh0dXJlIGltYWdlIHVuaXQgKCVkKS4iLCB1bml0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVVuaXRUeXBlW3VuaXRdID0gbVNh
bXBsZXJzVlNbaV0udGV4dHVyZVR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhEZXB0
aFJhbmdlTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aFJhbmdlTG9jYXRp
b247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5h
cnk6OmdldER4Q29vcmRMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeENvb3JkTG9j
YXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotfQot
Ci1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBtRHhGcm9udENDV0xvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtQmluYXJ5
OjpnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbjsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWU5YzVlMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9ncmFtLmg6IERlZmluZXMgdGhlIGds
OjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cwotLy8gYW5kIHJl
bGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBh
Z2UgMjguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwotCi0jaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRl
IDxkM2Rjb21waWxlci5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRl
eHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBGcmFnbWVudFNoYWRlcjsKLWNsYXNzIFZl
cnRleFNoYWRlcjsKLQotLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hh
ZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwg
Y29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKLQotICAg
IH5Vbmlmb3JtKCk7Ci0KLSAgICBib29sIGlzQXJyYXkoKTsKLQotICAgIGNvbnN0IEdMZW51bSB0
eXBlOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIF9uYW1lOyAgIC8vIERlY29yYXRlZCBuYW1lCi0g
ICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZTsgICAgLy8gVW5kZWNvcmF0ZWQgbmFtZQotICAgIGNv
bnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7Ci0KLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwot
ICAgIGJvb2wgZGlydHk7Ci0KLSAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvCi0gICAgewotICAgICAg
ICBSZWdpc3RlckluZm8oKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdDRJbmRleCA9IC0x
OwotICAgICAgICAgICAgc2FtcGxlckluZGV4ID0gLTE7Ci0gICAgICAgICAgICBib29sSW5kZXgg
PSAtMTsKLSAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAwOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXQoY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVyU2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzRFhSU19CT09MOiAg
ICBib29sSW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7ICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEQzRFhSU19GTE9BVDQ6ICBmbG9hdDRJbmRleCA9IGNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEQzRFhSU19TQU1QTEVSOiBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lz
dGVySW5kZXg7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJD
b3VudCA9PSAwIHx8IHJlZ2lzdGVyQ291bnQgPT0gKGludCljb25zdGFudERlc2NyaXB0aW9uLlJl
Z2lzdGVyQ291bnQpOwotICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCA9IGNvbnN0YW50RGVzY3Jp
cHRpb24uUmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBmbG9hdDRJbmRl
eDsKLSAgICAgICAgaW50IHNhbXBsZXJJbmRleDsKLSAgICAgICAgaW50IGJvb2xJbmRleDsKLQot
ICAgICAgICBpbnQgcmVnaXN0ZXJDb3VudDsKLSAgICB9OwotCi0gICAgUmVnaXN0ZXJJbmZvIHBz
OwotICAgIFJlZ2lzdGVySW5mbyB2czsKLX07Ci0KLS8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxh
dGluZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1
Y3QgVW5pZm9ybUxvY2F0aW9uCi17Ci0gICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7Ci0K
LSAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVu
c2lnbmVkIGludCBpbmRleDsKLX07Ci0KLS8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBsaW5raW5n
IGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUgcGFzc2VkIHRvIFByb2dy
YW1CaW5hcnkuCi1jbGFzcyBQcm9ncmFtQmluYXJ5Ci17Ci0gIHB1YmxpYzoKLSAgICBQcm9ncmFt
QmluYXJ5KCk7Ci0gICAgflByb2dyYW1CaW5hcnkoKTsKLQotICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqZ2V0UGl4ZWxTaGFkZXIoKTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICpnZXRW
ZXJ0ZXhTaGFkZXIoKTsKLQotICAgIEdMdWludCBnZXRBdHRyaWJ1dGVMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChpbnQgYXR0cmlidXRlSW5kZXgp
OwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcoU2FtcGxlclR5cGUgdHlwZSwgdW5zaWdu
ZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgVGV4dHVyZVR5cGUgZ2V0U2FtcGxlclRleHR1cmVU
eXBlKFNhbXBsZXJUeXBlIHR5cGUsIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpOwotICAgIEdM
aW50IGdldFVzZWRTYW1wbGVyUmFuZ2UoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBHTGludCBn
ZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3Jt
MWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAg
ICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlmb3JtNGZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29s
IHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yaXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNl
dFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9y
bWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLQot
ICAgIEdMaW50IGdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0
RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhDb29yZExvY2F0aW9uKCkg
Y29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKLSAg
ICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFBv
aW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1z
KCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7Ci0KLSAgICBib29sIGxpbmsoSW5mb0xvZyAm
aW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsK
LSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpj
b3VudCwgR0x1aW50ICpzaGFkZXJzKTsKLQotICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdM
dWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXpl
LCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmli
dXRlQ291bnQoKTsKLSAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKLQot
ICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUp
OwotICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwotICAgIEdMaW50IGdldEFjdGl2
ZVVuaWZvcm1NYXhMZW5ndGgoKTsKLQotICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xv
Zyk7Ci0gICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOwotICAgIGJv
b2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKLQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0
ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQgYW4gdW5k
ZXJzY29yZQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlVW5pZm9ybShjb25zdCBz
dGQ6OnN0cmluZyAmX25hbWUpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKLQotICBw
cml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKLQot
ICAgIElEM0QxMEJsb2IgKmNvbXBpbGVUb0JpbmFyeShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBj
aGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25z
dGFudFRhYmxlKTsKLQotICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29u
c3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIp
OwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBw
aXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21l
bnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLQotICAgIGJvb2wgbGlua0F0
dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJp
YnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9M
b2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJsZSk7Ci0g
ICAgYm9vbCBkZWZpbmVVbmlmb3JtKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNv
bnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAm
Y29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBib29sIGRl
ZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0
YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKLSAgICBVbmlmb3JtICpj
cmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9u
LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm1uZnYoVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVu
aWZvcm0xaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTNp
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7
Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00aXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEQzRFhWRUNUT1I0ICp2ZWN0
b3IpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdM
c2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2KTsKLQotICAgIElEaXJl
Y3QzRERldmljZTkgKm1EZXZpY2U7Ci0KLSAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1QaXhl
bEV4ZWN1dGFibGU7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbVZlcnRleEV4ZWN1dGFi
bGU7Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBsaW5raW5nLgotICAgIElE
M0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVQUzsKLSAgICBJRDNEWENvbnN0YW50VGFi
bGUgKm1Db25zdGFudFRhYmxlVlM7Ci0KLSAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtN
QVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FU
VFJJQlNdOwotCi0gICAgc3RydWN0IFNhbXBsZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgYWN0aXZl
OwotICAgICAgICBHTGludCBsb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIFRleHR1cmVUeXBl
IHRleHR1cmVUeXBlOwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1TYW1wbGVyc1BTW01BWF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKLSAgICBTYW1wbGVyIG1TYW1wbGVyc1ZTW01BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUU19WVEZdOwotICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5n
ZTsKLSAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKLQotICAgIHR5cGVkZWYgc3Rk
Ojp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKLSAgICBVbmlmb3JtQXJyYXkgbVVuaWZv
cm1zOwotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybUxvY2F0aW9uPiBVbmlmb3JtSW5k
ZXg7Ci0gICAgVW5pZm9ybUluZGV4IG1Vbmlmb3JtSW5kZXg7Ci0KLSAgICBHTGludCBtRHhEZXB0
aFJhbmdlTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBt
RHhDb29yZExvY2F0aW9uOwotICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKLSAg
ICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwotICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbjsKLQotICAgIGJvb2wgbVZhbGlkYXRlZDsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1F1ZXJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBl
ZGRhNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1F1ZXJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gUXVlcnkuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UXVlcnkgY2xhc3MKLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci0KLVF1ZXJ5OjpRdWVyeShHTHVpbnQgaWQsIEdMZW51bSB0eXBlKSA6
IFJlZkNvdW50T2JqZWN0KGlkKQoteyAKLSAgICBtUXVlcnkgPSBOVUxMOwotICAgIG1TdGF0dXMg
PSBHTF9GQUxTRTsKLSAgICBtUmVzdWx0ID0gR0xfRkFMU0U7Ci0gICAgbVR5cGUgPSB0eXBlOwot
fQotCi1RdWVyeTo6flF1ZXJ5KCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAgewot
ICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9
Ci19Ci0KLXZvaWQgUXVlcnk6OmJlZ2luKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0g
ICAgewotICAgICAgICBpZiAoRkFJTEVEKGdldERldmljZSgpLT5DcmVhdGVRdWVyeShEM0RRVUVS
WVRZUEVfT0NDTFVTSU9OLCAmbVF1ZXJ5KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLX0KLQotdm9pZCBRdWVyeTo6ZW5kKCkKLXsKLSAgICBpZiAobVF1
ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJ
U1NVRV9FTkQpOwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgCi0gICAgbVN0
YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1SZXN1bHQgPSBHTF9GQUxTRTsKLX0KLQotR0x1aW50IFF1
ZXJ5OjpnZXRSZXN1bHQoKQotewotICAgIGlmIChtUXVlcnkgIT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIHdoaWxlICghdGVzdFF1ZXJ5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNsZWVwKDAp
OwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVjayBmb3IgZGV2aWNlIGxvc3MKLSAgICAg
ICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRvIHJldHVybiBTX0ZBTFNFIGV2ZW4gaWYgdGhl
IGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIEQzREVSUl9ERVZJQ0VM
T1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAgICAgIGlmIChnbDo6Z2V0RGlzcGxheSgpLT50
ZXN0RGV2aWNlTG9zdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpnZXRE
aXNwbGF5KCktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gKEdMdWludCltUmVzdWx0OwotfQotCi1HTGJvb2xlYW4gUXVlcnk6Omlz
UmVzdWx0QXZhaWxhYmxlKCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAgewotICAg
ICAgICB0ZXN0UXVlcnkoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1TdGF0dXM7Ci19Ci0K
LUdMZW51bSBRdWVyeTo6Z2V0VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UeXBlOwotfQot
Ci1HTGJvb2xlYW4gUXVlcnk6OnRlc3RRdWVyeSgpCi17Ci0gICAgaWYgKG1RdWVyeSAhPSBOVUxM
ICYmIG1TdGF0dXMgIT0gR0xfVFJVRSkKLSAgICB7Ci0gICAgICAgIERXT1JEIG51bVBpeGVscyA9
IDA7Ci0KLSAgICAgICAgSFJFU1VMVCBocmVzID0gbVF1ZXJ5LT5HZXREYXRhKCZudW1QaXhlbHMs
IHNpemVvZihEV09SRCksIEQzREdFVERBVEFfRkxVU0gpOwotICAgICAgICBpZiAoaHJlcyA9PSBT
X09LKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJVRTsKLQotICAgICAg
ICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAgICAgICAgIG1SZXN1bHQgPSAo
bnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaGVja0Rldmlj
ZUxvc3QoaHJlcykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IG1TdGF0dXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1RSVUU7IC8vIHByZXZlbnQgYmxvY2tp
bmcgd2hlbiBxdWVyeSBpcyBudWxsCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1F1ZXJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MzU3
YTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9R
dWVyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8v
IFF1ZXJ5Lmg6IERlZmluZXMgdGhlIGdsOjpRdWVyeSBjbGFzcwotCi0jaWZuZGVmIExJQkdMRVNW
Ml9RVUVSWV9IXwotI2RlZmluZSBMSUJHTEVTVjJfUVVFUllfSF8KLQotI2RlZmluZSBHTF9BUElD
QUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIFF1ZXJ5IDogcHVibGljIFJlZkNvdW50T2Jq
ZWN0Ci17Ci0gIHB1YmxpYzoKLSAgICBRdWVyeShHTHVpbnQgaWQsIEdMZW51bSB0eXBlKTsKLSAg
ICB2aXJ0dWFsIH5RdWVyeSgpOwotCi0gICAgdm9pZCBiZWdpbigpOwotICAgIHZvaWQgZW5kKCk7
Ci0gICAgR0x1aW50IGdldFJlc3VsdCgpOwotICAgIEdMYm9vbGVhbiBpc1Jlc3VsdEF2YWlsYWJs
ZSgpOwotCi0gICAgR0xlbnVtIGdldFR5cGUoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihRdWVyeSk7Ci0KLSAgICBHTGJvb2xlYW4gdGVzdFF1ZXJ5
KCk7Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIG1RdWVyeTsKLSAgICBHTGVudW0gbVR5cGU7Ci0g
ICAgR0xib29sZWFuIG1TdGF0dXM7Ci0gICAgR0xpbnQgbVJlc3VsdDsKLX07Ci0KLX0KLQotI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX1FVRVJZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JFQURNRSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUy
N2QzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSdzIGNvbnRlbnRzIGFy
ZSBub3Qgc3luY2VkIGZyb20gdGhlIEFOR0xFIHByb2plY3QgYmVjYXVzZSBubyBwbGF0Zm9ybSBp
biBXZWJLaXQgbmVlZHMgdGhlbSB5ZXQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZm
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjkxMWU4Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBSZW5kZXJidWZmZXIuY3BwOiB0aGUgZ2w6OlJlbmRlcmJ1ZmZlciBjbGFzcyBhbmQgaXRzIGRl
cml2ZWQgY2xhc3NlcwotLy8gQ29sb3JidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVm
ZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgotLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclN0b3JhZ2U6Om1DdXJyZW50U2VyaWFsID0gMTsKLQotUmVuZGVyYnVmZmVySW50
ZXJmYWNlOjpSZW5kZXJidWZmZXJJbnRlcmZhY2UoKQotewotfQotCi0vLyBUaGUgZGVmYXVsdCBj
YXNlIGZvciBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIFJlbmRlcmJ1ZmZlckludGVyZmFjZSBpcyBu
b3QgdG8KLS8vIG5lZWQgdG8gZG8gYW55dGhpbmcgdXBvbiB0aGUgcmVmZXJlbmNlIGNvdW50IHRv
IHRoZSBwYXJlbnQgUmVuZGVyYnVmZmVyIGluY3JlbWVudGluZwotLy8gb3IgZGVjcmVtZW50aW5n
LiAKLXZvaWQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KQotewotfQotCi12b2lkIFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6cmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci19Ci0KLUdMdWludCBSZW5kZXJi
dWZmZXJJbnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6
R2V0UmVkU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4MmVzOjpHZXRHcmVl
blNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNl
OjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4MmVzOjpHZXRCbHVlU2l6ZShn
ZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEFs
cGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4MmVzOjpHZXRBbHBoYVNpemUoZ2V0RDNE
Rm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXREZXB0aFNp
emUoKSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0RGVwdGhTaXplKGdldEQzREZvcm1h
dCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBkeDJlczo6R2V0U3RlbmNpbFNpemUoZ2V0RDNERm9ybWF0
KCkpOwotfQotCi0vLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8v
Ly8vLy8KLQotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4
dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQotewotICAg
IG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwotfQotCi1SZW5kZXJidWZmZXJUZXh0dXJlMkQ6On5S
ZW5kZXJidWZmZXJUZXh0dXJlMkQoKQotewotICAgIG1UZXh0dXJlMkQuc2V0KE5VTEwpOwotfQot
Ci0vLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQg
Zm9yIHJlZmVyZW5jZXMgdmlhCi0vLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBI
ZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsK
LSAgICBtVGV4dHVyZTJELT5hZGRQcm94eVJlZihwcm94eSk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsK
LSAgICBtVGV4dHVyZTJELT5yZWxlYXNlUHJveHkocHJveHkpOwotfQotCi0vLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVy
bmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdl
dChtVGFyZ2V0KTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJl
dHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Ci19Ci0KLUdMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldFdpZHRoKDApOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0
KDApOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRJbnRlcm5hbEZvcm1h
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFsRm9ybWF0KDAp
OwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREM0RGb3JtYXQoKSBj
b25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREM0RGb3JtYXQoMCk7Ci19Ci0KLUdM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Vy
aWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKG1UYXJnZXQpOwotfQotCi0vLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBs
ZW1lbnRhdGlvbiAvLy8vLy8vLwotCi1SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJn
ZXQpIDogbVRhcmdldCh0YXJnZXQpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJl
KTsKLX0KLQotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6On5SZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcCgpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFwLnNldChOVUxMKTsKLX0KLQotLy8gVGV4
dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50IGZvciByZWZl
cmVuY2VzIHZpYQotLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4gSGVyZSwgd2Ug
bm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgotdm9pZCBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAg
ICBtVGV4dHVyZUN1YmVNYXAtPmFkZFByb3h5UmVmKHByb3h5KTsKLX0KLQotdm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpCi17Ci0gICAgbVRleHR1cmVDdWJlTWFwLT5yZWxlYXNlUHJveHkocHJveHkpOwotfQotCi0v
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICByZXR1cm4gbVRleHR1cmVD
dWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobVRhcmdldCk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVm
Y291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
c3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpn
ZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBOVUxMOwotfQotCi1HTHNpemVpIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAw
KTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRIZWlnaHQoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKTsKLX0KLQotR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0
dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKTsKLX0KLQotRDNERk9STUFUIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRE
M0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEQzREZv
cm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwotfQotCi1HTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRT
ZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRh
cmdldFNlcmlhbChtVGFyZ2V0KTsKLX0KLQotLy8vLy8vIFJlbmRlcmJ1ZmZlciBJbXBsZW1lbnRh
dGlvbiAvLy8vLy8KLQotUmVuZGVyYnVmZmVyOjpSZW5kZXJidWZmZXIoR0x1aW50IGlkLCBSZW5k
ZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQotewotICAg
IEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsKLSAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKLX0K
LQotUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkKLXsKLSAgICBkZWxldGUgbUluc3RhbmNl
OwotfQotCi0vLyBUaGUgUmVuZGVyYnVmZmVySW50ZXJmYWNlIGNvbnRhaW5lZCBpbiB0aGlzIFJl
bmRlcmJ1ZmZlciBtYXkgbmVlZCB0byBtYWludGFpbgotLy8gaXRzIG93biByZWZlcmVuY2UgY291
bnQsIHNvIHdlIHBhc3MgaXQgb24gaGVyZS4KLXZvaWQgUmVuZGVyYnVmZmVyOjphZGRSZWYoKSBj
b25zdAotewotICAgIG1JbnN0YW5jZS0+YWRkUHJveHlSZWYodGhpcyk7Ci0KLSAgICBSZWZDb3Vu
dE9iamVjdDo6YWRkUmVmKCk7Ci19Ci0KLXZvaWQgUmVuZGVyYnVmZmVyOjpyZWxlYXNlKCkgY29u
c3QKLXsKLSAgICBtSW5zdGFuY2UtPnJlbGVhc2VQcm94eSh0aGlzKTsKLQotICAgIFJlZkNvdW50
T2JqZWN0OjpyZWxlYXNlKCk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICByZXR1
cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBz
dXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwo
KQotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwotfQotCi1HTHNp
emVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFu
Y2UtPmdldFdpZHRoKCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQoKSBj
b25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEhlaWdodCgpOwotfQotCi1HTGVudW0g
UmVuZGVyYnVmZmVyOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1J
bnN0YW5jZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLX0KLQotRDNERk9STUFUIFJlbmRlcmJ1ZmZl
cjo6Z2V0RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREM0RG
b3JtYXQoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVkU2l6ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVyOjpnZXRHcmVlblNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdl
dEdyZWVuU2l6ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRCbHVlU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0Qmx1ZVNpemUoKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRBbHBoYVNpemUoKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhT
aXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0aFNpemUoKTsKLX0K
LQotR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAotewotICAgIHJl
dHVybiBtSW5zdGFuY2UtPmdldFN0ZW5jaWxTaXplKCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVm
ZmVyOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRTYW1w
bGVzKCk7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2VyaWFsKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
YnVmZmVyOjpzZXRTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKm5ld1N0b3JhZ2UpCi17Ci0g
ICAgQVNTRVJUKG5ld1N0b3JhZ2UgIT0gTlVMTCk7Ci0KLSAgICBkZWxldGUgbUluc3RhbmNlOwot
ICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7Ci19Ci0KLVJlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKLXsKLSAgICBtV2lk
dGggPSAwOwotICAgIG1IZWlnaHQgPSAwOwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkE0
OwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfQThSOEc4Qjg7Ci0gICAgbVNhbXBsZXMgPSAwOwot
fQotCi1SZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSgpCi17Ci19Ci0K
LS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZl
clN0b3JhZ2U6OmdldFJlbmRlclRhcmdldCgpCi17Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdMc2l6
ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBt
V2lkdGg7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0SGVpZ2h0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUhlaWdodDsKLX0KLQotR0xlbnVtIFJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUludGVybmFsRm9y
bWF0OwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RDNERm9ybWF0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbUQzREZvcm1hdDsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNhbXBsZXM7Ci19
Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTZXJpYWwoKSBjb25zdAot
ewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3Rv
cmFnZTo6aXNzdWVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwotfQot
Ci11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpCi17
Ci0gICAgdW5zaWduZWQgaW50IGZpcnN0U2VyaWFsID0gbUN1cnJlbnRTZXJpYWw7Ci0gICAgbUN1
cnJlbnRTZXJpYWwgKz0gNjsKLSAgICByZXR1cm4gZmlyc3RTZXJpYWw7Ci19Ci0KLUNvbG9yYnVm
ZmVyOjpDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KSA6IG1SZW5k
ZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotewotICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgewot
ICAgICAgICByZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotCi0gICAgICAgIEQzRFNVUkZBQ0VfREVT
QyBkZXNjcmlwdGlvbjsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlv
bik7Ci0KLSAgICAgICAgbVdpZHRoID0gZGVzY3JpcHRpb24uV2lkdGg7Ci0gICAgICAgIG1IZWln
aHQgPSBkZXNjcmlwdGlvbi5IZWlnaHQ7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGR4MmVz
OjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBt
RDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwotICAgICAgICBtU2FtcGxlcyA9IGR4MmVz
OjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5
cGUpOwotICAgIH0KLX0KLQotQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKSA6IG1SZW5kZXJUYXJnZXQo
TlVMTCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQot
ICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBlczJkeDo6Q29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChmb3JtYXQpOwotICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0gZ2V0Q29udGV4dCgp
LT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOwot
Ci0gICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPT0gLTEpCi0gICAgewotICAgICAgICBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVz
MmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwgMCwg
RkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICB9Ci0KLSAgICBtV2lkdGggPSB3aWR0aDsKLSAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAg
IG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKLSAgICBtRDNERm9ybWF0ID0gcmVxdWVzdGVkRm9y
bWF0OwotICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLX0KLQotQ29sb3JidWZmZXI6
On5Db2xvcmJ1ZmZlcigpCi17Ci0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAg
ICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0vLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0
KCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJn
ZXQtPkFkZFJlZigpOwotICAgIH0KLQotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi1E
ZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVwdGhTdGVuY2lsKSA6IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVuY2lsKQotewotICAgIGlmIChk
ZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotCi0g
ICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgZGVwdGhTdGVuY2ls
LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgbVdpZHRoID0gZGVzY3JpcHRpb24u
V2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlwdGlvbi5IZWlnaHQ7Ci0gICAgICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlc2NyaXB0
aW9uLkZvcm1hdCk7Ci0gICAgICAgIG1TYW1wbGVzID0gZHgyZXM6OkdldFNhbXBsZXNGcm9tTXVs
dGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7IAotICAgICAgICBtRDNE
Rm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwotICAgIH0KLX0KLQotRGVwdGhTdGVuY2lsYnVm
ZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNh
bXBsZXMpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0K
LSAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICAKLSAgICBpbnQgc3VwcG9ydGVkU2FtcGxl
cyA9IGdldENvbnRleHQoKS0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk1UX0QyNFM4
LCBzYW1wbGVzKTsKLQotICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQotICAgIHsKLSAg
ICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKLSAgICB7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWln
aHQsIEQzREZNVF9EMjRTOCwgZXMyZHg6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1
cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIDApOwotCi0gICAg
ICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIG1XaWR0aCA9IHdpZHRoOwotICAgIG1I
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM7Ci0gICAgbUQzREZvcm1hdCA9IEQzREZNVF9EMjRTODsKLSAgICBtU2FtcGxlcyA9IHN1
cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLURlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1
ZmZlcigpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
LUlEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgp
Ci17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2ls
LT5BZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKLX0KLQotRGVw
dGhidWZmZXI6OkRlcHRoYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDog
RGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCkKLXsKLSAgICBpZiAoZGVwdGhTdGVuY2ls
KQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7
ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2Fs
bGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3Jt
YXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotICAgIH0KLX0KLQotRGVwdGhidWZm
ZXI6OkRlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKSA6
IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQotewotICAgIGlmICht
RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfREVQVEhf
Q09NUE9ORU5UMTY7ICAgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVy
aWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRl
cmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotICAgIH0KLX0K
LQotRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCi17Ci19Ci0KLVN0ZW5jaWxidWZmZXI6OlN0
ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBEZXB0aFN0ZW5j
aWxidWZmZXIoZGVwdGhTdGVuY2lsKQotewotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewot
ICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgICAvLyBJZiB0aGUg
cmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwg
ZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlCi0gICAgfQotfQotCi1TdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVy
KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1
ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQotewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQot
ICAgIHsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRFWDg7ICAgLy8g
SWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBm
dW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1
c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotICAgIH0KLX0KLQotU3RlbmNpbGJ1ZmZlcjo6flN0ZW5j
aWxidWZmZXIoKQotewotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTZkNWRkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlcmJ1ZmZlci5oOiBEZWZpbmVzIHRoZSB3cmFwcGVy
IGNsYXNzIGdsOjpSZW5kZXJidWZmZXIsIGFzIHdlbGwgYXMgdGhlCi0vLyBjbGFzcyBoaWVyYXJj
aHkgdXNlZCB0byBzdG9yZSBpdHMgY29udGVudHM6IFJlbmRlcmJ1ZmZlclN0b3JhZ2UsIENvbG9y
YnVmZmVyLAotLy8gRGVwdGhTdGVuY2lsYnVmZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1
ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIKLS8vIG9iamVjdHMgYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDgu
Ci0KLSNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwotI2RlZmluZSBMSUJHTEVTVjJf
UkVOREVSQlVGRkVSX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
Ci0jaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBnbAotewot
Y2xhc3MgVGV4dHVyZTJEOwotY2xhc3MgVGV4dHVyZUN1YmVNYXA7Ci1jbGFzcyBSZW5kZXJidWZm
ZXI7Ci1jbGFzcyBDb2xvcmJ1ZmZlcjsKLWNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKLQotY2xh
c3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJJ
bnRlcmZhY2UoKTsKLQotICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlckludGVyZmFjZSgpIHt9Owot
Ci0gICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
OwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKSA9
IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCkgPSAw
OwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0
SW50ZXJuYWxGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNE
Rm9ybWF0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29u
c3QgPSAwOwotCi0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0
R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVTaXplKCkgY29uc3Q7Ci0gICAg
R0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBj
b25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0ID0gMDsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJJbnRlcmZhY2UpOwotfTsKLQotY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQot
ewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVy
ZSwgR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlMkQo
KTsKLQotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0g
ICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JN
QVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0Owot
Ci0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRCk7Ci0KLSAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4dHVyZTJEOwot
ICAgIEdMZW51bSBtVGFyZ2V0OwotfTsKLQotY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICBSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRh
cmdldCk7Ci0KLSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpOwotCi0g
ICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lk
IHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0
RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXRE
M0RGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXApOwotCi0gICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmVDdWJlTWFwPiBtVGV4dHVyZUN1
YmVNYXA7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7Ci19OwotCi0vLyBBIGNsYXNzIGRlcml2ZWQgZnJv
bSBSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNyZWF0ZWQgd2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlCi0vLyBpcyBjYWxsZWQuIFRoZSBzcGVjaWZpYyBjb25jcmV0ZSB0eXBlIGRlcGVuZHMg
b24gd2hldGhlciB0aGUgaW50ZXJuYWwgZm9ybWF0IGlzCi0vLyBjb2xvdXIgZGVwdGgsIHN0ZW5j
aWwgb3IgcGFja2VkIGRlcHRoL3N0ZW5jaWwuCi1jbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlIDog
cHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVm
ZmVyU3RvcmFnZSgpOwotCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyU3RvcmFnZSgpID0gMDsK
LQotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOwotICAg
IHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgdmly
dHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhl
aWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNl
cmlhbCgpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVDdWJlU2VyaWFscygpOwotCi0g
IHByb3RlY3RlZDoKLSAgICBHTHNpemVpIG1XaWR0aDsKLSAgICBHTHNpemVpIG1IZWlnaHQ7Ci0g
ICAgR0xlbnVtIG1JbnRlcm5hbEZvcm1hdDsKLSAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsKLSAg
ICBHTHNpemVpIG1TYW1wbGVzOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IG1T
ZXJpYWw7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwotfTsKLQot
Ly8gUmVuZGVyYnVmZmVyIGltcGxlbWVudHMgdGhlIEdMIHJlbmRlcmJ1ZmZlciBvYmplY3QuCi0v
LyBJdCdzIG9ubHkgYSBwcm94eSBmb3IgYSBSZW5kZXJidWZmZXJJbnRlcmZhY2UgaW5zdGFuY2U7
IHRoZSBpbnRlcm5hbCBvYmplY3QKLS8vIGNhbiBjaGFuZ2Ugd2hlbmV2ZXIgZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlIGlzIGNhbGxlZC4KLWNsYXNzIFJlbmRlcmJ1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVy
YnVmZmVySW50ZXJmYWNlICpzdG9yYWdlKTsKLQotICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlcigp
OwotCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGZyb20gUmVmQ291bnRPYmplY3QgYXJlIG92ZXJs
b2FkZWQgaGVyZSBiZWNhdXNlCi0gICAgLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVp
ciBvd24gY291bnQgb2YgcmVmZXJlbmNlcyB0byB0aGVtIHZpYQotICAgIC8vIFJlbmRlcmJ1ZmZl
cnMvUmVuZGVyYnVmZmVyVGV4dHVyZXMuIFRoZXNlIGZ1bmN0aW9ucyBpbnZva2UgdGhvc2UKLSAg
ICAvLyByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rpb25zIG9uIHRoZSBSZW5kZXJidWZmZXJJbnRl
cmZhY2UuCi0gICAgdm9pZCBhZGRSZWYoKSBjb25zdDsKLSAgICB2b2lkIHJlbGVhc2UoKSBjb25z
dDsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3Q7Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0
SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29u
c3Q7Ci0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5T
aXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50
IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsK
LSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25zdDsKLSAgICBHTHNpemVpIGdldFNhbXBs
ZXMoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKLQotICAg
IHZvaWQgc2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpuZXdTdG9yYWdlKTsKLQotICBw
cml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOwotCi0g
ICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICptSW5zdGFuY2U7Ci19OwotCi1jbGFzcyBDb2xvcmJ1
ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKLSAgICBD
b2xvcmJ1ZmZlcihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBzYW1wbGVzKTsKLQotICAgIHZpcnR1YWwgfkNvbG9yYnVmZmVyKCk7Ci0KLSAgICB2
aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb2xvcmJ1ZmZlcik7Ci0KLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKLX07Ci0KLWNsYXNzIERlcHRoU3RlbmNpbGJ1
ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBEZXB0aFN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7
Ci0gICAgRGVwdGhTdGVuY2lsYnVmZmVyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIHNhbXBsZXMpOwotCi0gICAgfkRlcHRoU3RlbmNpbGJ1ZmZlcigpOwotCi0gICAgdmly
dHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgcHJvdGVjdGVk
OgotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2lsOwotCi0gIHByaXZhdGU6Ci0g
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoU3RlbmNpbGJ1ZmZlcik7Ci19OwotCi1j
bGFzcyBEZXB0aGJ1ZmZlciA6IHB1YmxpYyBEZXB0aFN0ZW5jaWxidWZmZXIKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IERlcHRoYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5j
aWwpOwotICAgIERlcHRoYnVmZmVyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+RGVwdGhidWZmZXIoKTsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXB0aGJ1ZmZlcik7Ci19OwotCi1jbGFz
cyBTdGVuY2lsYnVmZmVyIDogcHVibGljIERlcHRoU3RlbmNpbGJ1ZmZlcgotewotICBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgU3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVu
Y2lsKTsKLSAgICBTdGVuY2lsYnVmZmVyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIHNhbXBsZXMpOwotCi0gICAgdmlydHVhbCB+U3RlbmNpbGJ1ZmZlcigpOwotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN0ZW5jaWxidWZmZXIpOwotfTsK
LX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTI2MzUyLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBSZXNvdXJjZU1hbmFnZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UmVzb3VyY2VNYW5hZ2Vy
IGNsYXNzLCB3aGljaCB0cmFja3MgYW5kIAotLy8gcmV0cmlldmVzIG9iamVjdHMgd2hpY2ggbWF5
IGJlIHNoYXJlZCBieSBtdWx0aXBsZSBDb250ZXh0cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9S
ZXNvdXJjZU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZm
ZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1SZXNvdXJjZU1hbmFnZXI6OlJlc291cmNl
TWFuYWdlcigpCi17Ci0gICAgbVJlZkNvdW50ID0gMTsKLX0KLQotUmVzb3VyY2VNYW5hZ2VyOjp+
UmVzb3VyY2VNYW5hZ2VyKCkKLXsKLSAgICB3aGlsZSAoIW1CdWZmZXJNYXAuZW1wdHkoKSkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBk
ZWxldGVQcm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3
aGlsZSAoIW1TaGFkZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVNoYWRlciht
U2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1SZW5kZXJi
dWZmZXJNYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihtUmVu
ZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1UZXh0
dXJlTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFw
LmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjphZGRS
ZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6cmVs
ZWFzZSgpCi17Ci0gICAgaWYgKC0tbVJlZkNvdW50ID09IDApCi0gICAgewotICAgICAgICBkZWxl
dGUgdGhpczsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIGJ1ZmZlciBuYW1lCi1H
THVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVCdWZmZXIoKQotewotICAgIEdMdWludCBoYW5k
bGUgPSBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtQnVmZmVyTWFw
W2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJucyBh
biB1bnVzZWQgc2hhZGVyL3Byb2dyYW0gbmFtZQotR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3Jl
YXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtUHJvZ3JhbVNo
YWRlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgaWYgKHR5cGUgPT0gR0xfVkVS
VEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIG1TaGFkZXJNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0
ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9G
UkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcg
RnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJM
RSgpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgcHJv
Z3JhbS9zaGFkZXIgbmFtZQotR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlUHJvZ3JhbSgp
Ci17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yLmFs
bG9jYXRlKCk7Ci0KLSAgICBtUHJvZ3JhbU1hcFtoYW5kbGVdID0gbmV3IFByb2dyYW0odGhpcywg
aGFuZGxlKTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2Vk
IHRleHR1cmUgbmFtZQotR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlVGV4dHVyZSgpCi17
Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1UZXh0dXJlSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7
Ci0KLSAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7
Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZlciBuYW1lCi1HTHVpbnQgUmVz
b3VyY2VNYW5hZ2VyOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIEdMdWludCBoYW5kbGUg
PSBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtUmVuZGVy
YnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9p
ZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIEJ1
ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyT2JqZWN0ID0gbUJ1ZmZlck1hcC5maW5kKGJ1ZmZlcik7
Ci0KLSAgICBpZiAoYnVmZmVyT2JqZWN0ICE9IG1CdWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAg
ICAgICBtQnVmZmVySGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoYnVmZmVyT2JqZWN0LT5maXJzdCk7
Ci0gICAgICAgIGlmIChidWZmZXJPYmplY3QtPnNlY29uZCkgYnVmZmVyT2JqZWN0LT5zZWNvbmQt
PnJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlck1hcC5lcmFzZShidWZmZXJPYmplY3QpOwotICAg
IH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVy
KQotewotICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyT2JqZWN0ID0gbVNoYWRlck1hcC5m
aW5kKHNoYWRlcik7Ci0KLSAgICBpZiAoc2hhZGVyT2JqZWN0ICE9IG1TaGFkZXJNYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICBpZiAoc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmdldFJlZkNvdW50KCkg
PT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbVByb2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0
b3IucmVsZWFzZShzaGFkZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgICAgIGRlbGV0ZSBzaGFk
ZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1TaGFkZXJNYXAuZXJhc2Uoc2hhZGVyT2Jq
ZWN0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNo
YWRlck9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0p
Ci17Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9iamVjdCA9IG1Qcm9ncmFtTWFw
LmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3JhbU9iamVjdCAhPSBtUHJvZ3JhbU1hcC5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFtT2JqZWN0LT5zZWNvbmQtPmdldFJlZkNv
dW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbVByb2dyYW1TaGFkZXJIYW5kbGVB
bGxvY2F0b3IucmVsZWFzZShwcm9ncmFtT2JqZWN0LT5maXJzdCk7Ci0gICAgICAgICAgICBkZWxl
dGUgcHJvZ3JhbU9iamVjdC0+c2Vjb25kOwotICAgICAgICAgICAgbVByb2dyYW1NYXAuZXJhc2Uo
cHJvZ3JhbU9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7IAotICAg
ICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVRleHR1cmUoR0x1
aW50IHRleHR1cmUpCi17Ci0gICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9
IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7Ci0KLSAgICBpZiAodGV4dHVyZU9iamVjdCAhPSBt
VGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlSGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UodGV4dHVyZU9iamVjdC0+Zmlyc3QpOwotICAgICAgICBpZiAodGV4dHVyZU9iamVj
dC0+c2Vjb25kKSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAgICAgbVRl
eHR1cmVNYXAuZXJhc2UodGV4dHVyZU9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNl
TWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAg
UmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJidWZmZXJPYmplY3QgPSBtUmVuZGVyYnVm
ZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsKLQotICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3Qg
IT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJidWZmZXJI
YW5kbGVBbGxvY2F0b3IucmVsZWFzZShyZW5kZXJidWZmZXJPYmplY3QtPmZpcnN0KTsKLSAgICAg
ICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdC0+c2Vjb25kKSByZW5kZXJidWZmZXJPYmplY3QtPnNl
Y29uZC0+cmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVyYnVmZmVyTWFwLmVyYXNlKHJlbmRlcmJ1
ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi1CdWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0QnVm
ZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZm
ZXIgPSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChidWZmZXIgPT0gbUJ1ZmZl
ck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICByZXR1cm4gYnVmZmVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1TaGFk
ZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2hhZGVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0g
ICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXIgPSBtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKTsK
LQotICAgIGlmIChzaGFkZXIgPT0gbVNoYWRlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gc2hhZGVy
LT5zZWNvbmQ7Ci0gICAgfQotfQotCi1UZXh0dXJlICpSZXNvdXJjZU1hbmFnZXI6OmdldFRleHR1
cmUodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBpZiAoaGFuZGxlID09IDApIHJldHVybiBO
VUxMOwotCi0gICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVyZSA9IG1UZXh0dXJlTWFwLmZp
bmQoaGFuZGxlKTsKLQotICAgIGlmICh0ZXh0dXJlID09IG1UZXh0dXJlTWFwLmVuZCgpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1Qcm9ncmFtICpSZXNvdXJjZU1h
bmFnZXI6OmdldFByb2dyYW0odW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBQcm9ncmFtTWFw
OjppdGVyYXRvciBwcm9ncmFtID0gbVByb2dyYW1NYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYg
KHByb2dyYW0gPT0gbVByb2dyYW1NYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb2dyYW0tPnNlY29u
ZDsKLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRSZW5kZXJi
dWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJh
dG9yIHJlbmRlcmJ1ZmZlciA9IG1SZW5kZXJidWZmZXJNYXAuZmluZChoYW5kbGUpOwotCi0gICAg
aWYgKHJlbmRlcmJ1ZmZlciA9PSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBy
ZW5kZXJidWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpz
ZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpidWZmZXIpCi17Ci0g
ICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gYnVmZmVyOwotfQotCi12b2lkIFJlc291cmNl
TWFuYWdlcjo6Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVuc2lnbmVkIGludCBidWZmZXIpCi17Ci0g
ICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAgICAg
IEJ1ZmZlciAqYnVmZmVyT2JqZWN0ID0gbmV3IEJ1ZmZlcihidWZmZXIpOwotICAgICAgICBtQnVm
ZmVyTWFwW2J1ZmZlcl0gPSBidWZmZXJPYmplY3Q7Ci0gICAgICAgIGJ1ZmZlck9iamVjdC0+YWRk
UmVmKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tUZXh0dXJlQWxs
b2NhdGlvbihHTHVpbnQgdGV4dHVyZSwgVGV4dHVyZVR5cGUgdHlwZSkKLXsKLSAgICBpZiAoIWdl
dFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAwKQotICAgIHsKLSAgICAgICAgVGV4dHVy
ZSAqdGV4dHVyZU9iamVjdDsKLQotICAgICAgICBpZiAodHlwZSA9PSBURVhUVVJFXzJEKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3IFRleHR1cmUyRCh0ZXh0dXJl
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVfQ1VCRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0
ZXh0dXJlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9IHRleHR1cmVPYmplY3Q7Ci0gICAgICAgIHRleHR1cmVP
YmplY3QtPmFkZFJlZigpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNr
UmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIGlmIChy
ZW5kZXJidWZmZXIgIT0gMCAmJiAhZ2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAg
ewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IG5ldyBSZW5kZXJi
dWZmZXIocmVuZGVyYnVmZmVyLCBuZXcgQ29sb3JidWZmZXIoMCwgMCwgR0xfUkdCQTQsIDApKTsK
LSAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcFtyZW5kZXJidWZmZXJdID0gcmVuZGVyYnVmZmVyT2Jq
ZWN0OwotICAgICAgICByZW5kZXJidWZmZXJPYmplY3QtPmFkZFJlZigpOwotICAgIH0KLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVz
b3VyY2VNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxODVmYzkuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJj
ZU1hbmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBSZXNvdXJjZU1hbmFnZXIuaCA6IERlZmluZXMgdGhlIFJlc291cmNlTWFuYWdl
ciBjbGFzcywgd2hpY2ggdHJhY2tzIG9iamVjdHMKLS8vIHNoYXJlZCBieSBtdWx0aXBsZSBHTCBj
b250ZXh0cy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCi0jZGVmaW5l
IExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlIDxoYXNoX21hcD4KLQotI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5o
IgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJ1ZmZlcjsKLWNsYXNzIFNoYWRlcjsKLWNsYXNz
IFByb2dyYW07Ci1jbGFzcyBUZXh0dXJlOwotY2xhc3MgUmVuZGVyYnVmZmVyOwotCi1lbnVtIFRl
eHR1cmVUeXBlCi17Ci0gICAgVEVYVFVSRV8yRCwKLSAgICBURVhUVVJFX0NVQkUsCi0KLSAgICBU
RVhUVVJFX1RZUEVfQ09VTlQsCi0gICAgVEVYVFVSRV9VTktOT1dOCi19OwotCi1lbnVtIFNhbXBs
ZXJUeXBlCi17Ci0gICAgU0FNUExFUl9QSVhFTCwKLSAgICBTQU1QTEVSX1ZFUlRFWAotfTsKLQot
Y2xhc3MgUmVzb3VyY2VNYW5hZ2VyCi17Ci0gIHB1YmxpYzoKLSAgICBSZXNvdXJjZU1hbmFnZXIo
KTsKLSAgICB+UmVzb3VyY2VNYW5hZ2VyKCk7Ci0KLSAgICB2b2lkIGFkZFJlZigpOwotICAgIHZv
aWQgcmVsZWFzZSgpOwotCi0gICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOwotICAgIEdMdWludCBj
cmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7Ci0g
ICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVmZmVy
KCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGRl
bGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50
IHByb2dyYW0pOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAg
dm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBCdWZm
ZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVp
bnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwotICAg
IFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7Ci0gICAgUmVuZGVyYnVmZmVyICpn
ZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgCi0gICAgdm9pZCBzZXRSZW5kZXJi
dWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIpOwotCi0gICAg
dm9pZCBjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50IGJ1ZmZlcik7Ci0gICAgdm9p
ZCBjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBUZXh0dXJlVHlwZSB0eXBl
KTsKLSAgICB2b2lkIGNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVuZGVyYnVm
ZmVyKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZXNvdXJj
ZU1hbmFnZXIpOwotCi0gICAgc3RkOjpzaXplX3QgbVJlZkNvdW50OwotCi0gICAgdHlwZWRlZiBz
dGRleHQ6Omhhc2hfbWFwPEdMdWludCwgQnVmZmVyKj4gQnVmZmVyTWFwOwotICAgIEJ1ZmZlck1h
cCBtQnVmZmVyTWFwOwotICAgIEhhbmRsZUFsbG9jYXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9y
OwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgU2hhZGVyKj4gU2hhZGVy
TWFwOwotICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhh
c2hfbWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1NYXA7Ci0gICAgUHJvZ3JhbU1hcCBtUHJv
Z3JhbU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbVByb2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0
b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1aW50LCBUZXh0dXJlKj4gVGV4
dHVyZU1hcDsKLSAgICBUZXh0dXJlTWFwIG1UZXh0dXJlTWFwOwotICAgIEhhbmRsZUFsbG9jYXRv
ciBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHR5cGVkZWYgc3RkZXh0OjpoYXNoX21h
cDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKLSAgICBSZW5kZXJidWZm
ZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbVJlbmRlcmJ1ZmZl
ckhhbmRsZUFsbG9jYXRvcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRVNPVVJD
RU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmZDNkNS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
U2hhZGVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlNoYWRlciBjbGFzcyBhbmQgaXRzICBkZXJp
dmVkIGNsYXNzZXMKLS8vIFZlcnRleFNoYWRlciBhbmQgRnJhZ21lbnRTaGFkZXIuIEltcGxlbWVu
dHMgR0wgc2hhZGVyIG9iamVjdHMgYW5kIHJlbGF0ZWQKLS8vIGZ1bmN0aW9uYWxpdHkuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAgcGFnZSAyNCBhbmQgc2VjdGlvbiAzLjggcGFnZSA4
NC4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZz4K
LQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVybGFuZy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZ2wK
LXsKLXZvaWQgKlNoYWRlcjo6bUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwotdm9pZCAqU2hhZGVy
OjptVmVydGV4Q29tcGlsZXIgPSBOVUxMOwotCi1TaGFkZXI6OlNoYWRlcihSZXNvdXJjZU1hbmFn
ZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogbUhhbmRsZShoYW5kbGUpLCBtUmVzb3VyY2VN
YW5hZ2VyKG1hbmFnZXIpCi17Ci0gICAgbVNvdXJjZSA9IE5VTEw7Ci0gICAgbUhsc2wgPSBOVUxM
OwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQotICAgIHVuY29tcGlsZSgpOwotICAgIGluaXRpYWxp
emVDb21waWxlcigpOwotCi0gICAgbVJlZkNvdW50ID0gMDsKLSAgICBtRGVsZXRlU3RhdHVzID0g
ZmFsc2U7Ci19Ci0KLVNoYWRlcjo6flNoYWRlcigpCi17Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsK
LSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLX0KLQotR0x1aW50
IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUhhbmRsZTsKLX0KLQot
dm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3RyaW5n
LCBjb25zdCBHTGludCAqbGVuZ3RoKQotewotICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAgaW50
IHRvdGFsTGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IChpbnQpc3RybGVu
KHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtU291cmNlID0gbmV3IGNoYXJb
dG90YWxMZW5ndGggKyAxXTsKLSAgICBjaGFyICpjb2RlID0gbVNvdXJjZTsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGludCBzdHJpbmdMZW5n
dGg7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gKGludClzdHJsZW4o
c3RyaW5nW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cm5jcHkoY29kZSwgc3RyaW5nW2ld
LCBzdHJpbmdMZW5ndGgpOwotICAgICAgICBjb2RlICs9IHN0cmluZ0xlbmd0aDsKLSAgICB9Ci0K
LSAgICBtU291cmNlW3RvdGFsTGVuZ3RoXSA9ICdcMCc7Ci19Ci0KLWludCBTaGFkZXI6OmdldElu
Zm9Mb2dMZW5ndGgoKSBjb25zdAotewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVu
KG1JbmZvTG9nKSArIDE7Ci0gICAgfQotfQotCi12b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKLXsKLSAgICBpbnQg
aW5kZXggPSAwOwotCi0gICAgaWYgKGJ1ZlNpemUgPiAwKQotICAgIHsKLSAgICAgICAgaWYgKG1J
bmZvTG9nKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUg
LSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2cs
IG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmZvTG9nW2luZGV4XSA9
ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGgg
PSBpbmRleDsKLSAgICB9Ci19Ci0KLWludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSArIDE7Ci0gICAg
fQotfQotCi1pbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkgKyAxOwotICAgIH0KLX0KLQot
dm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQotewotICAgIGludCBpbmRleCA9IDA7Ci0K
LSAgICBpZiAoYnVmU2l6ZSA+IDApCi0gICAgewotICAgICAgICBpZiAoc291cmNlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxl
bihzb3VyY2UpKTsKLSAgICAgICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgaW5kZXgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAg
aWYgKGxlbmd0aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0K
LXZvaWQgU2hhZGVyOjpnZXRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBnZXRTb3VyY2VJbXBsKG1Tb3VyY2UsIGJ1ZlNpemUsIGxl
bmd0aCwgYnVmZmVyKTsKLX0KLQotdm9pZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKLXsKLSAgICBnZXRT
b3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7Ci19Ci0KLWJvb2wgU2hh
ZGVyOjppc0NvbXBpbGVkKCkKLXsKLSAgICByZXR1cm4gbUhsc2wgIT0gTlVMTDsKLX0KLQotY29u
c3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKLXsKLSAgICByZXR1cm4gbUhsc2w7Ci19Ci0KLXZv
aWQgU2hhZGVyOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi12b2lkIFNoYWRl
cjo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAgICBpZiAobVJlZkNvdW50ID09
IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRl
bGV0ZVNoYWRlcihtSGFuZGxlKTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBTaGFkZXI6Omdl
dFJlZkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlZkNvdW50OwotfQotCi1ib29sIFNo
YWRlcjo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVsZXRl
U3RhdHVzOwotfQotCi12b2lkIFNoYWRlcjo6ZmxhZ0ZvckRlbGV0aW9uKCkKLXsKLSAgICBtRGVs
ZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotLy8gUGVyZm9ybSBhIG9uZS10aW1lIGluaXRpYWxpemF0
aW9uIG9mIHRoZSBzaGFkZXIgY29tcGlsZXIgKG9yIGFmdGVyIGJlaW5nIGRlc3RydWN0ZWQgYnkg
cmVsZWFzZUNvbXBpbGVyKQotdm9pZCBTaGFkZXI6OmluaXRpYWxpemVDb21waWxlcigpCi17Ci0g
ICAgaWYgKCFtRnJhZ21lbnRDb21waWxlcikKLSAgICB7Ci0gICAgICAgIGludCByZXN1bHQgPSBT
aEluaXRpYWxpemUoKTsKLQotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgcmVzb3VyY2VzOwotICAgICAgICAgICAgU2hJbml0QnVp
bHRJblJlc291cmNlcygmcmVzb3VyY2VzKTsKLSAgICAgICAgICAgIENvbnRleHQgKmNvbnRleHQg
PSBnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJz
ID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7Ci0gICAgICAgICAgICBy
ZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtVmFyeWluZ1Zl
Y3RvcnMoKTsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0
cyA9IGNvbnRleHQtPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOwotICAgICAg
ICAgICAgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBjb250ZXh0LT5n
ZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwotICAgICAgICAgICAgcmVzb3Vy
Y2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7Ci0gICAg
ICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IGNvbnRleHQtPmdl
dE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7Ci0gICAgICAgICAgICByZXNvdXJjZXMu
TWF4RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZGRVJTOwotICAgICAgICAgICAgcmVzb3VyY2Vz
Lk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAgICAvLyByZXNvdXJjZXMu
T0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IGdldERpc3BsYXkoKS0+aXNEM2Q5RXhEZXZpY2UoKSA/
IDEgOiAwOyAvLyBUT0RPOiBjb21tZW50ZWQgb3V0IHVudGlsIHRoZSBleHRlbnNpb24gaXMgYWN0
dWFsbHkgc3VwcG9ydGVkLgotCi0gICAgICAgICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29u
c3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBTSF9ITFNM
X09VVFBVVCwgJnJlc291cmNlcyk7Ci0gICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENv
bnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRFWF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIFNIX0hMU0xf
T1VUUFVULCAmcmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6
OnJlbGVhc2VDb21waWxlcigpCi17Ci0gICAgU2hEZXN0cnVjdChtRnJhZ21lbnRDb21waWxlcik7
Ci0gICAgU2hEZXN0cnVjdChtVmVydGV4Q29tcGlsZXIpOwotCi0gICAgbUZyYWdtZW50Q29tcGls
ZXIgPSBOVUxMOwotICAgIG1WZXJ0ZXhDb21waWxlciA9IE5VTEw7Ci0KLSAgICBTaEZpbmFsaXpl
KCk7Ci19Ci0KLXZvaWQgU2hhZGVyOjpwYXJzZVZhcnlpbmdzKCkKLXsKLSAgICBpZiAobUhsc2wp
Ci0gICAgewotICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxzbCwgIi8vIFZh
cnlpbmdzIikgKyAxMjsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdOYW1l
WzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGlj
ICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKLQotICAgICAgICAgICAg
aWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIodmFyeWlu
Z05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IDE7Ci0KLSAgICAgICAgICAgIGlm
IChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzaXplID0gYXRvaShhcnJh
eSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUodmFyeWlu
Z1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOwotCi0gICAgICAgICAg
ICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLQotICAgICAgICBt
VXNlc0ZyYWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5V
TEw7Ci0gICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZS
T05UX0ZBQ0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0gc3Ryc3RyKG1I
bHNsLCAiR0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNQb2ludENv
b3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9DT09SRCIpICE9IE5VTEw7Ci0gICAg
fQotfQotCi0vLyBpbml0aWFsaXplL2NsZWFuIHVwIHByZXZpb3VzIHN0YXRlCi12b2lkIFNoYWRl
cjo6dW5jb21waWxlKCkKLXsKLSAgICAvLyBzZXQgYnkgY29tcGlsZVRvSExTTAotICAgIGRlbGV0
ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAg
ICBtSW5mb0xvZyA9IE5VTEw7Ci0KLSAgICAvLyBzZXQgYnkgcGFyc2VWYXJ5aW5ncwotICAgIG1W
YXJ5aW5ncy5jbGVhcigpOwotCi0gICAgbVVzZXNGcmFnQ29vcmQgPSBmYWxzZTsKLSAgICBtVXNl
c0Zyb250RmFjaW5nID0gZmFsc2U7Ci0gICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsKLSAgICBt
VXNlc1BvaW50Q29vcmQgPSBmYWxzZTsKLX0KLQotdm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wo
dm9pZCAqY29tcGlsZXIpCi17Ci0gICAgLy8gZW5zdXJlIHdlIGRvbid0IHBhc3MgYSBOVUxMIHNv
dXJjZSB0byB0aGUgY29tcGlsZXIKLSAgICBjaGFyICpzb3VyY2UgPSAiXDAiOwotICAgIGlmICht
U291cmNlKQotICAgIHsKLSAgICAgICAgc291cmNlID0gbVNvdXJjZTsKLSAgICB9Ci0KLSAgICAv
LyBlbnN1cmUgdGhlIGNvbXBpbGVyIGlzIGxvYWRlZAotICAgIGluaXRpYWxpemVDb21waWxlcigp
OwotCi0gICAgaW50IGNvbXBpbGVPcHRpb25zID0gU0hfT0JKRUNUX0NPREU7Ci0gICAgc3RkOjpz
dHJpbmcgc291cmNlUGF0aDsKLSAgICBpZiAocGVyZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAg
c291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRo
LmNfc3RyKCksIHNvdXJjZSwgc3RybGVuKHNvdXJjZSkpOwotICAgICAgICBjb21waWxlT3B0aW9u
cyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7Ci0gICAgfQotCi0gICAgaW50IHJlc3VsdDsKLSAgICBp
ZiAoc291cmNlUGF0aC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gU2hDb21waWxl
KGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0aW9ucyk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbMl0gPQotICAgICAgICB7
Ci0gICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3RyKCksCi0gICAgICAgICAgICBzb3VyY2UKLSAg
ICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0
cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOwotICAgIH0KLQotICAg
IGlmIChyZXN1bHQpCi0gICAgewotICAgICAgICBpbnQgb2JqQ29kZUxlbiA9IDA7Ci0gICAgICAg
IFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxlbik7
Ci0gICAgICAgIG1IbHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07Ci0gICAgICAgIFNoR2V0T2Jq
ZWN0Q29kZShjb21waWxlciwgbUhsc2wpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBpbnQgaW5mb0xvZ0xlbiA9IDA7Ci0gICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5G
T19MT0dfTEVOR1RILCAmaW5mb0xvZ0xlbik7Ci0gICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJb
aW5mb0xvZ0xlbl07Ci0gICAgICAgIFNoR2V0SW5mb0xvZyhjb21waWxlciwgbUluZm9Mb2cpOwot
Ci0gICAgICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cpOwotICAgIH0KLX0KLQotR0xlbnVtIFNo
YWRlcjo6cGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKQotewotICAgIGlmICh0eXBl
ID09ICJmbG9hdCIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MiIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxP
QVRfVkVDMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzIikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzQ7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBH
TF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDN4MyIpCi0g
ICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
dHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7
Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiBHTF9OT05FOwot
fQotCi0vLyB0cnVlIGlmIHZhcnlpbmcgeCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgaW4gcGFja2lu
ZyB0aGFuIHkKLWJvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBj
b25zdCBWYXJ5aW5nICZ5KQotewotICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCi0gICAgewotICAg
ICAgICByZXR1cm4geC5zaXplID4geS5zaXplOwotICAgIH0KLQotICAgIHN3aXRjaCAoeC50eXBl
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIHRydWU7Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAg
ICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVy
biBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICBz
d2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotVmVydGV4U2hhZGVy
OjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6
IFNoYWRlcihtYW5hZ2VyLCBoYW5kbGUpCi17Ci19Ci0KLVZlcnRleFNoYWRlcjo6flZlcnRleFNo
YWRlcigpCi17Ci19Ci0KLUdMZW51bSBWZXJ0ZXhTaGFkZXI6OmdldFR5cGUoKQotewotICAgIHJl
dHVybiBHTF9WRVJURVhfU0hBREVSOwotfQotCi12b2lkIFZlcnRleFNoYWRlcjo6dW5jb21waWxl
KCkKLXsKLSAgICBTaGFkZXI6OnVuY29tcGlsZSgpOwotCi0gICAgLy8gc2V0IGJ5IFBhcnNlQXR0
cmlidXRlcwotICAgIG1BdHRyaWJ1dGVzLmNsZWFyKCk7Ci19OwotCi12b2lkIFZlcnRleFNoYWRl
cjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxlKCk7Ci0KLSAgICBjb21waWxlVG9ITFNMKG1W
ZXJ0ZXhDb21waWxlcik7Ci0gICAgcGFyc2VBdHRyaWJ1dGVzKCk7Ci0gICAgcGFyc2VWYXJ5aW5n
cygpOwotfQotCi1pbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6
c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQotewotICAgIGlmICghYXR0cmlidXRlTmFtZS5lbXB0eSgp
KQotICAgIHsKLSAgICAgICAgaW50IHNlbWFudGljSW5kZXggPSAwOwotICAgICAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gbUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi12
b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVzKCkKLXsKLSAgICBjb25zdCBjaGFyICpo
bHNsID0gZ2V0SExTTCgpOwotICAgIGlmIChobHNsKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hh
ciAqaW5wdXQgPSBzdHJzdHIoaGxzbCwgIi8vIEF0dHJpYnV0ZXMiKSArIDE0OwotCi0gICAgICAg
IHdoaWxlKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlVHlwZVsy
NTZdOwotICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAg
IGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICUyNTVzIF8lMjU1cyIsIGF0dHJp
YnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSAy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBtQXR0cmlidXRlcy5wdXNoX2JhY2soQXR0cmlidXRlKHBhcnNlVHlwZShh
dHRyaWJ1dGVUeXBlKSwgYXR0cmlidXRlTmFtZSkpOwotCi0gICAgICAgICAgICBpbnB1dCA9IHN0
cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUZyYWdtZW50U2hh
ZGVyOjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5k
bGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKLXsKLX0KLQotRnJhZ21lbnRTaGFkZXI6On5G
cmFnbWVudFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBGcmFnbWVudFNoYWRlcjo6Z2V0VHlwZSgp
Ci17Ci0gICAgcmV0dXJuIEdMX0ZSQUdNRU5UX1NIQURFUjsKLX0KLQotdm9pZCBGcmFnbWVudFNo
YWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgdW5jb21waWxlKCk7Ci0KLSAgICBjb21waWxlVG9ITFNM
KG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7Ci0gICAgbVZhcnlpbmdz
LnNvcnQoY29tcGFyZVZhcnlpbmcpOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQz
MDgzZWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBTaGFkZXIuaDogRGVmaW5lcyB0aGUgYWJzdHJhY3QgZ2w6OlNoYWRlciBjbGFz
cyBhbmQgaXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVmVydGV4U2hhZGVyIGFuZCBG
cmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2JqZWN0cyBhbmQKLS8vIHJlbGF0
ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMCBwYWdlIDI0
IGFuZCBzZWN0aW9uCi0vLyAzLjggcGFnZSA4NC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfU0hBREVS
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KLQotI2RlZmluZSBHTF9BUElDQUxMCi0j
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNkeDkuaD4KLSNpbmNsdWRlIDxsaXN0
PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFn
ZXIuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1zdHJ1Y3QgVmFyeWluZwotewotICAgIFZhcnlpbmco
R0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBpbnQgc2l6ZSwgYm9vbCBhcnJh
eSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpLCBzaXplKHNpemUpLCBhcnJheShh
cnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgR0xlbnVtIHR5cGU7
Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQgc2l6ZTsgICAvLyBOdW1iZXIgb2YgJ3R5
cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQotICAgIGludCByZWc7ICAgIC8vIEZpcnN0
IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi0gICAgaW50IGNvbDsgICAg
Ly8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWduZWQgZHVyaW5nIGxpbmsKLX07Ci0KLXR5
cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0OwotCi1jbGFzcyBTaGFkZXIKLXsK
LSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKLQotICBwdWJsaWM6Ci0gICAgU2hhZGVy
KFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7Ci0KLSAgICB2aXJ0dWFs
IH5TaGFkZXIoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKSA9IDA7Ci0gICAgR0x1
aW50IGdldEhhbmRsZSgpIGNvbnN0OwotCi0gICAgdm9pZCBkZWxldGVTb3VyY2UoKTsKLSAgICB2
b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBH
TGludCAqbGVuZ3RoKTsKLSAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwotICAgIHZv
aWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5m
b0xvZyk7Ci0gICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0U291
cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotICAg
IGludCBnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFu
c2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZm
ZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHVuY29tcGlsZSgpOwotICAgIGJvb2wgaXNDb21waWxlZCgpOwotICAgIGNvbnN0IGNoYXIgKmdl
dEhMU0woKTsKLQotICAgIHZvaWQgYWRkUmVmKCk7Ci0gICAgdm9pZCByZWxlYXNlKCk7Ci0gICAg
dW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0ZsYWdnZWRGb3JE
ZWxldGlvbigpIGNvbnN0OwotICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7Ci0KLSAgICBzdGF0
aWMgdm9pZCByZWxlYXNlQ29tcGlsZXIoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYXJz
ZVZhcnlpbmdzKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpOwot
Ci0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Ci0KLSAgICBzdGF0aWMgR0xlbnVtIHBhcnNl
VHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSk7Ci0gICAgc3RhdGljIGJvb2wgY29tcGFyZVZh
cnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWluZyAmeSk7Ci0KLSAgICBWYXJ5aW5n
TGlzdCBtVmFyeWluZ3M7Ci0KLSAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwotICAgIGJvb2wgbVVz
ZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1Vc2VzUG9pbnRTaXplOwotICAgIGJvb2wgbVVzZXNQ
b2ludENvb3JkOwotCi0gICAgc3RhdGljIHZvaWQgKm1GcmFnbWVudENvbXBpbGVyOwotICAgIHN0
YXRpYyB2b2lkICptVmVydGV4Q29tcGlsZXI7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oU2hhZGVyKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7
Ci0KLSAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsKLSAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50
OyAgICAgLy8gTnVtYmVyIG9mIHByb2dyYW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hl
ZCB0bwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAgICAgICAvLyBGbGFnIHRvIGluZGljYXRl
IHRoYXQgdGhlIHNoYWRlciBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKLQot
ICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAgY2hhciAqbUhsc2w7Ci0gICAgY2hhciAqbUluZm9Mb2c7
Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7Ci19OwotCi1zdHJ1Y3Qg
QXR0cmlidXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0eXBlKEdMX05PTkUpLCBuYW1lKCIiKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
R0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2
ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKLQotY2xhc3MgVmVydGV4U2hhZGVyIDog
cHVibGljIFNoYWRlcgotewotICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OwotCi0gIHB1
YmxpYzoKLSAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQg
aGFuZGxlKTsKLQotICAgIH5WZXJ0ZXhTaGFkZXIoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdl
dFR5cGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1
bmNvbXBpbGUoKTsKLSAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAm
YXR0cmlidXRlTmFtZSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVmVydGV4U2hhZGVyKTsKLQotICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGVzKCk7Ci0KLSAgICBB
dHRyaWJ1dGVBcnJheSBtQXR0cmlidXRlczsKLX07Ci0KLWNsYXNzIEZyYWdtZW50U2hhZGVyIDog
cHVibGljIFNoYWRlcgotewotICBwdWJsaWM6Ci0gICAgRnJhZ21lbnRTaGFkZXIoUmVzb3VyY2VN
YW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIH5GcmFnbWVudFNoYWRlcigp
OwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb21w
aWxlKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21l
bnRTaGFkZXIpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1NIQURFUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZjI0NTMuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI5MDkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGV4dHVyZS5jcHA6
IEltcGxlbWVudHMgdGhlIGdsOjpUZXh0dXJlIGNsYXNzIGFuZCBpdHMgZGVyaXZlZCBjbGFzc2Vz
Ci0vLyBUZXh0dXJlMkQgYW5kIFRleHR1cmVDdWJlTWFwLiBJbXBsZW1lbnRzIEdMIHRleHR1cmUg
b2JqZWN0cyBhbmQgcmVsYXRlZAotLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gMy43IHBhZ2UgNjMuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgot
Ci0jaW5jbHVkZSA8ZDNkeDl0ZXguaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRl
IDxpbnRyaW4uaD4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGli
RUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVm
ZmVyLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlOjpt
Q3VycmVudFRleHR1cmVTZXJpYWwgPSAxOwotCi1zdGF0aWMgRDNERk9STUFUIENvbnZlcnRUZXh0
dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBpZiAoSXNE
ZXB0aFRleHR1cmUoZm9ybWF0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfSU5UWjsK
LSAgICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQgfHwKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Ci0gICAgfQotICAg
IGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQzOwotICAgIH0KLSAgICBlbHNlIGlmIChm
b3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBEM0RGTVRfRFhUNTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9G
TE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQTMyQjMyRzMyUjMyRjsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEM0RGTVRfQTE2QjE2RzE2UjE2RjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9
PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9MVU1J
TkFOQ0UgJiYgZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTDg7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAmJiBnZXRDb250ZXh0KCktPnN1
cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRDNERk1UX0E4TDg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09
IEdMX1JHQikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLX0KLQotc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNE
Rk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc3dpdGNo
KGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1U
X0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBj
YXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMy
RjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBE
V09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlKQotewotICAgIERXT1JEIGQzZHVzYWdlID0gMDsKLQotICAgIGlm
IChkM2RmbXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICBkM2R1c2FnZSB8PSBEM0RV
U0FHRV9ERVBUSFNURU5DSUw7Ci0gICAgfQotICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8
IChJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQotICAgIHsKLSAgICAgICAgZDNkdXNhZ2UgfD0g
RDNEVVNBR0VfUkVOREVSVEFSR0VUOwotICAgIH0KLSAgICByZXR1cm4gZDNkdXNhZ2U7Ci19Ci0K
LUltYWdlOjpJbWFnZSgpCi17Ci0gICAgbVdpZHRoID0gMDsgCi0gICAgbUhlaWdodCA9IDA7Ci0g
ICAgbUZvcm1hdCA9IEdMX05PTkU7Ci0gICAgbVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotCi0g
ICAgbVN1cmZhY2UgPSBOVUxMOwotCi0gICAgbURpcnR5ID0gZmFsc2U7Ci0KLSAgICBtRDNEUG9v
bCA9IEQzRFBPT0xfU1lTVEVNTUVNOwotICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsK
LX0KLQotSW1hZ2U6On5JbWFnZSgpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAg
ICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW1hZ2U6OnJlZGVmaW5l
KEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlw
ZSwgYm9vbCBmb3JjZVJlbGVhc2UpCi17Ci0gICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAotICAg
ICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAotICAgICAgICBtRm9ybWF0ICE9IGZvcm1hdCB8fAot
ICAgICAgICBtVHlwZSAhPSB0eXBlIHx8Ci0gICAgICAgIGZvcmNlUmVsZWFzZSkKLSAgICB7Ci0g
ICAgICAgIG1XaWR0aCA9IHdpZHRoOwotICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAg
ICBtRm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtVHlwZSA9IHR5cGU7Ci0gICAgICAgIC8vIGNv
bXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQzREZvcm1h
dCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShtRm9ybWF0LCBtVHlwZSk7Ci0KLSAgICAgICAg
aWYgKG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEltYWdlOjpj
cmVhdGVTdXJmYWNlKCkKLXsKLSAgICBpZihtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwotICAgIGNvbnN0IEQzRFBP
T0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07Ci0gICAgY29uc3QgRDNERk9STUFUIGQz
ZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOwotICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1U
X0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCi0K
LSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQotICAgIHsKLSAgICAgICAgaW50
IGxldmVsVG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRo
OwotICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVpZ2h0OwotICAgICAgICBpZiAo
SXNDb21wcmVzc2VkKG1Gb3JtYXQpICYmIChtV2lkdGggJSA0ICE9IDAgfHwgbUhlaWdodCAlIDQg
IT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgaXNNdWx0NCA9IGZhbHNlOwotICAg
ICAgICAgICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgd2hpbGUgKCFpc011
bHQ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlcXVlc3RXaWR0aCA8PD0gMTsK
LSAgICAgICAgICAgICAgICByZXF1ZXN0SGVpZ2h0IDw8PSAxOwotICAgICAgICAgICAgICAgIHVw
c2FtcGxlQ291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFdpZHRoICUgNCA9PSAw
ICYmIHJlcXVlc3RIZWlnaHQgJSA0ID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpc011bHQ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBsZUNvdW50OwotICAgICAgICB9
Ci0KLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShy
ZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIGQzZEZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb29sVG9Vc2UsICZuZXdUZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAg
RVJSKCJDcmVhdGluZyBpbWFnZSBzdXJmYWNlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5ld1RleHR1
cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNlKTsKLSAgICAgICAg
bmV3VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1TdXJmYWNlID0gbmV3U3VyZmFj
ZTsKLSAgICBtRGlydHkgPSBmYWxzZTsKLSAgICBtRDNEUG9vbCA9IHBvb2xUb1VzZTsKLX0KLQot
SFJFU1VMVCBJbWFnZTo6bG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVD
VCAqcmVjdCkKLXsKLSAgICBjcmVhdGVTdXJmYWNlKCk7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9
IEQzREVSUl9JTlZBTElEQ0FMTDsKLQotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAg
IHJlc3VsdCA9IG1TdXJmYWNlLT5Mb2NrUmVjdChsb2NrZWRSZWN0LCByZWN0LCAwKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBtRGlydHkgPSB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2U6OnVubG9jaygpCi17
Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3Vy
ZmFjZS0+VW5sb2NrUmVjdCgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwot
ICAgIH0KLX0KLQotYm9vbCBJbWFnZTo6aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QKLXsgICAg
Ci0gICAgcmV0dXJuIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZ2V0RDNERm9ybWF0KCkpOwot
fQotCi1EM0RGT1JNQVQgSW1hZ2U6OmdldEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgLy8gdGhp
cyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBm
aXJzdAotICAgIC8vIHdoaWNoIHdvdWxkIGJlIGEgYnVnIGJ5IHRoZSBjYWxsZXIKLSAgICBBU1NF
UlQobUQzREZvcm1hdCAhPSBEM0RGTVRfVU5LTk9XTik7Ci0KLSAgICByZXR1cm4gbUQzREZvcm1h
dDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOjpnZXRTdXJmYWNlKCkKLXsKLSAgICBj
cmVhdGVTdXJmYWNlKCk7Ci0KLSAgICByZXR1cm4gbVN1cmZhY2U7Ci19Ci0KLXZvaWQgSW1hZ2U6
OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKQotewotICAgIGlm
IChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKHN1
cmZhY2UsIE5VTEwsIE5VTEwsIG1TdXJmYWNlLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gs
IDApOwotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOwotICAgIHN1cmZhY2UtPkdldERlc2MoJmRlc2MpOwotICAgIEFTU0VSVChk
ZXNjLlBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKTsKLQotICAgIG1TdXJmYWNlID0gc3VyZmFjZTsK
LSAgICBtRDNEUG9vbCA9IGRlc2MuUG9vbDsKLX0KLQotdm9pZCBJbWFnZTo6dXBkYXRlU3VyZmFj
ZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpzb3VyY2VTdXJmYWNlID0gZ2V0U3VyZmFjZSgpOwotCi0gICAgaWYgKHNvdXJjZVN1
cmZhY2UgJiYgc291cmNlU3VyZmFjZSAhPSBkZXN0U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIFJF
Q1QgcmVjdDsKLSAgICAgICAgcmVjdC5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgcmVjdC50b3Ag
PSB5b2Zmc2V0OwotICAgICAgICByZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAg
ICByZWN0LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0KLSAgICAgICAgaWYgKG1EM0RQb29s
ID09IEQzRFBPT0xfTUFOQUdFRCkKLSAgICAgICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShkZXN0U3VyZmFjZSwgTlVMTCwgJnJlY3Qs
IHNvdXJjZVN1cmZhY2UsIE5VTEwsICZyZWN0LCBEM0RYX0ZJTFRFUl9CT1gsIDApOwotICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZVN1cmZhY2U6IHNvdXJjZSBtdXN0IGJl
IFNZU1RFTU1FTSwgZGVzdCBtdXN0IGJlIERFRkFVTFQgcG9vbHMgCi0gICAgICAgICAgICBQT0lO
VCBwb2ludCA9IHtyZWN0LmxlZnQsIHJlY3QudG9wfTsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZ2V0RGV2aWNlKCktPlVwZGF0ZVN1cmZhY2Uoc291cmNlU3VyZmFjZSwgJnJlY3QsIGRl
c3RTdXJmYWNlLCAmcG9pbnQpOwotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBk
ZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3Rv
cmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0Ci0vLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVj
dGFuZ2xlLgotdm9pZCBJbWFnZTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKLXsK
LSAgICBSRUNUIGxvY2tSZWN0ID0KLSAgICB7Ci0gICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCi0g
ICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAotICAgIH07Ci0KLSAgICBE
M0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBsb2NrKCZsb2NrZWQs
ICZsb2NrUmVjdCk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0
aCwgbUZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAobUZv
cm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBp
ZiAoc3VwcG9ydHNTU0UyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZEFs
cGhhRGF0YVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAg
ICAgICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1U
X0w4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1h
dCgpID09IEQzREZNVF9BOEw4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQlVCeXRlRGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgaWYgKHN1cHBvcnRz
U1NFMigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRh
U1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAg
ICAgICAgbG9hZEJHUkFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1
RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV81XzVfMToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgbG9hZFJHQkE1NTUxRGF0YSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAo
bUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252
ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQz
RAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkQWxwaGFGbG9hdERh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgbG9hZFJHQkZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAg
bG9hZFJHQkFGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5v
dCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAgICAgICAgICBjYXNl
IEdMX0FMUEhBOgotICAgICAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAg
ICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVtaW5h
bmNlQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBs
b2FkUkdCQUhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxv
Y2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHVubG9jaygpOwotfQotCi12
b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBfX20xMjhpIHpl
cm9XaWRlID0gX21tX3NldHplcm9fc2kxMjgoKTsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQotICAgICAgICBpbnQgeDsKLSAgICAgICAg
Ly8gTWFrZSBvdXRwdXQgd3JpdGVzIGFsaWduZWQKLSAgICAgICAgZm9yICh4ID0gMDsgKChyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PigmZGVzdFt4XSkgJiAweEYpICE9IDAgJiYgeCA8IHdpZHRo
KTsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0W3hdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Pihzb3VyY2VbeF0pIDw8IDI0OwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICg7
IHggKyA3IDwgd2lkdGg7IHggKz0gOCkKLSAgICAgICAgewotICAgICAgICAgICAgX19tMTI4aSBz
b3VyY2VEYXRhID0gX21tX2xvYWRsX2VwaTY0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4
aSo+KCZzb3VyY2VbeF0pKTsKLSAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCBieXRlIHRv
IDE2Yml0LCBtYWtlIHRoZSBsb3dlciBieXRlIHRvIHplcm8KLSAgICAgICAgICAgIHNvdXJjZURh
dGEgPSBfbW1fdW5wYWNrbG9fZXBpOCh6ZXJvV2lkZSwgc291cmNlRGF0YSk7Ci0gICAgICAgICAg
ICAvLyBJbnRlcmxlYXZlIGVhY2ggMTZiaXQgdG8gMzJiaXQsIG1ha2UgdGhlIGxvd2VyIDE2Yml0
IHRvIHplcm8KLSAgICAgICAgICAgIF9fbTEyOGkgbG8gPSBfbW1fdW5wYWNrbG9fZXBpMTYoemVy
b1dpZGUsIHNvdXJjZURhdGEpOwotICAgICAgICAgICAgX19tMTI4aSBoaSA9IF9tbV91bnBhY2to
aV9lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7Ci0KLSAgICAgICAgICAgIF9tbV9zdG9yZV9z
aTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4XSksIGxvKTsKLSAgICAgICAg
ICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdFt4ICsg
NF0pLCBoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUgdGhlIHJlbWFpbmRlcgot
ICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRl
c3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwgMjQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAg
IGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxw
aGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAotewot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0KLSAgICAgICAgaWYgKCFu
YXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgICAvLyBMOCBkZXN0aW5h
dGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwg
d2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
RmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0
ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVFRUVNTU1NTU1NTU1NLCBTID0g
MCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRhdGlvbiBvZiAxCi0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5hdGl2ZSkgICAv
LyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNv
dXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDIpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCBmbG9hdCAq
c291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCVUJ5dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAq
IDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewot
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikg
PDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChy
Z2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwot
ICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4w
ZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBz
b3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4
ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHgzQzAwOyAvLyBTRUVF
RUVNTU1NTU1NTU1NLCBTID0gMCwgRSA9IDE1LCBNID0gMDogMTZiaXQgZmxwdCByZXByZXNlbnRh
dGlvbiBvZiAxCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5
dGVEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2ln
bmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwot
ICAgIF9fbTEyOGkgYnJNYXNrID0gX21tX3NldDFfZXBpMzIoMHgwMGZmMDBmZik7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGludCB4ID0gMDsKLQotICAg
ICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxpZ25lZAotICAgICAgICBmb3IgKHggPSAwOyAo
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZkZXN0W3hdKSAmIDE1KSAhPSAwKSAmJiB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBz
b3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBm
ZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
OyB4ICsgMyA8IHdpZHRoOyB4ICs9IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9fbTEyOGkg
c291cmNlRGF0YSA9IF9tbV9sb2FkdV9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEy
OGkqPigmc291cmNlW3hdKSk7Ci0gICAgICAgICAgICAvLyBNYXNrIG91dCBnIGFuZCBhLCB3aGlj
aCBkb24ndCBjaGFuZ2UKLSAgICAgICAgICAgIF9fbTEyOGkgZ2FDb21wb25lbnRzID0gX21tX2Fu
ZG5vdF9zaTEyOChick1hc2ssIHNvdXJjZURhdGEpOwotICAgICAgICAgICAgLy8gTWFzayBvdXQg
YiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBickNvbXBvbmVudHMgPSBfbW1fYW5kX3NpMTI4
KHNvdXJjZURhdGEsIGJyTWFzayk7Ci0gICAgICAgICAgICAvLyBTd2FwIGIgYW5kIHIKLSAgICAg
ICAgICAgIF9fbTEyOGkgYnJTd2FwcGVkID0gX21tX3NodWZmbGVoaV9lcGkxNihfbW1fc2h1ZmZs
ZWxvX2VwaTE2KGJyQ29tcG9uZW50cywgX01NX1NIVUZGTEUoMiwgMywgMCwgMSkpLCBfTU1fU0hV
RkZMRSgyLCAzLCAwLCAxKSk7Ci0gICAgICAgICAgICBfX20xMjhpIHJlc3VsdCA9IF9tbV9vcl9z
aTEyOChnYUNvbXBvbmVudHMsIGJyU3dhcHBlZCk7Ci0gICAgICAgICAgICBfbW1fc3RvcmVfc2kx
MjgocmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oJmRlc3RbeF0pLCByZXN1bHQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gUGVyZm9ybSBsZWZ0b3ZlciB3cml0ZXMKLSAgICAgICAgZm9yICg7
IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdi
YSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYg
MHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17
Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGlu
dCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50
Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotCi0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hd
ID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJn
YmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2Jh
ICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4gMTIpOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAw
RikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1
MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkg
Pj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+
IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUZsb2F0RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAg
bWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCQUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBtZW1jcHkoZGVz
dCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEJHUkFE
YXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpIHsKLSAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOwotCi0gICAgUkVDVCBsb2Nr
UmVjdCA9IHsKLSAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKLSAgICAgICAgeG9mZnNldCArIHdp
ZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0Ci0gICAgfTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tl
ZDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKLSAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
R0xzaXplaSBpbnB1dFNpemUgPSBDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwg
bUZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRj
aCh3aWR0aCwgbUZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNo
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVt
Y3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9p
ZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQot
Ci0gICAgdW5sb2NrKCk7Ci19Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUlt
YWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5j
b21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
SURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCkKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFy
Z2V0RGF0YSA9IE5VTEw7Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgIHJl
bmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwotICAgIAotICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzY3JpcHRpb24uV2lk
dGgsIGRlc2NyaXB0aW9uLkhlaWdodCwgZGVzY3JpcHRpb24uRm9ybWF0LCBEM0RQT09MX1NZU1RF
TU1FTSwgJnJlbmRlclRhcmdldERhdGEsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0
aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRhcmdldERhdGEocmVuZGVy
VGFyZ2V0LCByZW5kZXJUYXJnZXREYXRhKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVk
LiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBSRUNUIHNvdXJjZVJlY3Qg
PSB7eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0fTsKLSAgICBSRUNUIGRlc3RSZWN0ID0ge3hv
ZmZzZXQsIHlvZmZzZXQsIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodH07Ci0KLSAg
ICBpZiAoaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAgICAgICByZXN1bHQgPSBEM0RY
TG9hZFN1cmZhY2VGcm9tU3VyZmFjZShnZXRTdXJmYWNlKCksIE5VTEwsICZkZXN0UmVjdCwgcmVu
ZGVyVGFyZ2V0RGF0YSwgTlVMTCwgJnNvdXJjZVJlY3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiQ29weWluZyBzdXJmYWNlcyB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAg
ICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sgPSB7MH07Ci0gICAgICAgIHJlc3Vs
dCA9IHJlbmRlclRhcmdldERhdGEtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCAmc291cmNlUmVjdCwg
MCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0
IGJlIGludmFsaWQpLiIpOwotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07Ci0gICAgICAgIHJlc3Vs
dCA9IGxvY2soJmRlc3RMb2NrLCAmZGVzdFJlY3QpOwotICAgICAgICAKLSAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2Nr
IHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7
Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgICAg
ICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdExvY2sucEJp
dHMgJiYgc291cmNlTG9jay5wQml0cykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKWRlc3RMb2NrLnBCaXRz
OwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLkZvcm1hdCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgICAgICAgIHN3aXRjaChnZXREM0RGb3JtYXQo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoK
LSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3Vy
Y2VMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5Q
aXRjaDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFt4ICogMiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VM
b2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRj
aDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGdldEQzREZv
cm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0w4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsg
MV0gJiAweEY4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSByZWQgfCAo
cmVkID4+IDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweDdDOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJj
ZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBp
dGNoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgICAgICAgICAg
Zm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNo
YXIpc291cmNlW3ggKiAyICsgMV0gPj4gNzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHVubG9jaygpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0
KCk7Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotCi0gICAgbURp
cnR5ID0gdHJ1ZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2U6OlRleHR1cmVTdG9yYWdlKERXT1JEIHVz
YWdlKQotICAgIDogbUQzRFVzYWdlKHVzYWdlKSwKLSAgICAgIG1EM0RQb29sKGdldERpc3BsYXko
KS0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKSwKLSAgICAgIG1UZXh0dXJlU2VyaWFsKGlzc3VlVGV4
dHVyZVNlcmlhbCgpKQotewotfQotCi1UZXh0dXJlU3RvcmFnZTo6flRleHR1cmVTdG9yYWdlKCkK
LXsKLX0KLQotYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAotewot
ICAgIHJldHVybiAobUQzRFVzYWdlICYgKEQzRFVTQUdFX1JFTkRFUlRBUkdFVCB8IEQzRFVTQUdF
X0RFUFRIU1RFTkNJTCkpICE9IDA7Ci19Ci0KLWJvb2wgVGV4dHVyZVN0b3JhZ2U6OmlzTWFuYWdl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEUG9vbCA9PSBEM0RQT09MX01BTkFHRUQpOwot
fQotCi1EM0RQT09MIFRleHR1cmVTdG9yYWdlOjpnZXRQb29sKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUQzRFBvb2w7Ci19Ci0KLURXT1JEIFRleHR1cmVTdG9yYWdlOjpnZXRVc2FnZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1EM0RVc2FnZTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVTZXJp
YWw7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTo6aXNzdWVUZXh0dXJlU2VyaWFs
KCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFsKys7Ci19Ci0KLVRleHR1cmU6
OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQotewotICAgIG1NaW5GaWx0
ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7Ci0gICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVB
UjsKLSAgICBtV3JhcFMgPSBHTF9SRVBFQVQ7Ci0gICAgbVdyYXBUID0gR0xfUkVQRUFUOwotICAg
IG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgIG1Vc2FnZSA9IEdMX05PTkU7Ci0gICAgCi0g
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLQotICAgIG1JbW11dGFibGUgPSBmYWxzZTsKLX0KLQot
VGV4dHVyZTo6flRleHR1cmUoKQotewotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1
bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVy
ZTo6c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0g
ICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAg
ICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9N
SVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAg
ICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1NaW5GaWx0ZXIgIT0gZmlsdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1NaW5GaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAgICAgICAgbURpcnR5UGFyYW1ldGVycyA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8g
UmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51
bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKQot
ewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAg
ICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU1hZ0ZpbHRl
ciAhPSBmaWx0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbU1hZ0ZpbHRlciA9
IGZpbHRlcjsKLSAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1i
b29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQotewotICAgIHN3aXRjaCAod3JhcCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURH
RToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobVdyYXBTICE9IHdyYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVdy
YXBTID0gd3JhcDsKLSAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRy
dWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIp
Ci1ib29sIFRleHR1cmU6OnNldFdyYXBUKEdMZW51bSB3cmFwKQotewotICAgIHN3aXRjaCAod3Jh
cCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9f
RURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobVdyYXBUICE9IHdyYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bVdyYXBUID0gd3JhcDsKLSAgICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5z
IHRydWUgb24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1l
dGVyKQotYm9vbCBUZXh0dXJlOjpzZXRVc2FnZShHTGVudW0gdXNhZ2UpCi17Ci0gICAgc3dpdGNo
ICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0gICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAgIG1Vc2FnZSA9IHVzYWdlOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRNaW5GaWx0ZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBtTWluRmlsdGVyOwotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0TWFnRmlsdGVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbU1hZ0ZpbHRlcjsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFdy
YXBTKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVdyYXBTOwotfQotCi1HTGVudW0gVGV4dHVyZTo6
Z2V0V3JhcFQoKSBjb25zdAotewotICAgIHJldHVybiBtV3JhcFQ7Ci19Ci0KLUdMZW51bSBUZXh0
dXJlOjpnZXRVc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Vc2FnZTsKLX0KLQotdm9pZCBU
ZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhl
aWdodCgpLCBpbWFnZS0+Z2V0VHlwZSgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci0gICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFn
ZSAqaW1hZ2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgaW1h
Z2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdl
dEhlaWdodCgpLCBwaXhlbHMpOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0K
LX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1h
Z2UpCi17Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgaW1hZ2UtPmxv
YWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHVucGFja0FsaWdu
bWVudCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIElt
YWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBp
bWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVy
ZSgpCi17Ci0gICAgaWYgKCFpc1NhbXBsZXJDb21wbGV0ZSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUg
aXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKGZhbHNlKSA9PSBOVUxMKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAg
cmV0dXJuIGdldEJhc2VUZXh0dXJlKCk7Ci19Ci0KLWJvb2wgVGV4dHVyZTo6aGFzRGlydHlQYXJh
bWV0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURpcnR5UGFyYW1ldGVyczsKLX0KLQotYm9v
bCBUZXh0dXJlOjpoYXNEaXJ0eUltYWdlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EaXJ0eUlt
YWdlczsKLX0KLQotdm9pZCBUZXh0dXJlOjpyZXNldERpcnR5KCkKLXsKLSAgICBtRGlydHlQYXJh
bWV0ZXJzID0gZmFsc2U7Ci0gICAgbURpcnR5SW1hZ2VzID0gZmFsc2U7Ci19Ci0KLXVuc2lnbmVk
IGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFsKCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZSAq
dGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVy
ZS0+Z2V0VGV4dHVyZVNlcmlhbCgpIDogMDsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmU6Omdl
dFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KQotewotICAgIFRleHR1cmVTdG9yYWdl
ICp0ZXh0dXJlID0gZ2V0U3RvcmFnZSh0cnVlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1
cmUtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQpIDogMDsKLX0KLQotYm9vbCBUZXh0dXJl
Ojppc0ltbXV0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbW11dGFibGU7Ci19Ci0KLUdM
aW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KSBjb25zdAotewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSkgfHwg
Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOyAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGxldmVscwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHdpdGhvdXQgR0xfT0VTX3RleHR1cmVf
bnBvdCBkb2VzIG5vdCBwZXJtaXQgTlBPVCBtaXBtYXBzLgotICAgICAgICByZXR1cm4gMTsKLSAg
ICB9Ci19Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSk7Ci19Ci0KLWludCBU
ZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUo
KSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSA6IDA7Ci19Ci0KLUJsaXQgKlRl
eHR1cmU6OmdldEJsaXR0ZXIoKQotewotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0
KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQtPmdldEJsaXR0ZXIoKTsKLX0KLQotYm9vbCBUZXh0dXJl
Ojpjb3B5VG9SZW5kZXJUYXJnZXQoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1
cmZhY2U5ICpzb3VyY2UsIGJvb2wgZnJvbU1hbmFnZWQpCi17Ci0gICAgaWYgKHNvdXJjZSAmJiBk
ZXN0KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKGZyb21N
YW5hZ2VkKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBEM0RYTG9hZFN1cmZhY2VG
cm9tU3VyZmFjZShkZXN0LCBOVUxMLCBOVUxMLCBzb3VyY2UsIE5VTEwsIE5VTEwsIEQzRFhfRklM
VEVSX0JPWCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Ci0gICAgICAgICAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgICAg
ICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0dXJlU3RvcmFnZTJEOjpUZXh0dXJl
U3RvcmFnZTJEKElEaXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSkgOiBUZXh0dXJlU3Rv
cmFnZShEM0RVU0FHRV9SRU5ERVJUQVJHRVQpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0gICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4
dHVyZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6VGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxz
LCBEM0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQot
ICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtUmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCi17Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAg
IC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJl
IHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAgLy8gd2UgaGFuZGxlIHRoYXQg
aGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KLSAgICBpZiAod2lkdGgg
PiAwICYmIGhlaWdodCA+IDApCi0gICAgewotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBnZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBv
b2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6
On5UZXh0dXJlU3RvcmFnZTJEKCkKLXsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAg
ICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3Vu
dCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJm
YWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2UyRDo6Z2V0U3VyZmFjZUxldmVs
KGludCBsZXZlbCkKLXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0K
LSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZzdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotSURp
cmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlOwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0
b3JhZ2UyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRTZXJpYWw7Ci19Ci0KLVRleHR1cmUyRDo6VGV4dHVyZTJE
KEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAg
ICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotICAgIG1Q
cm94eVJlZnMgPSAwOwotfQotCi1UZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQotewotICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4
U3RvcmFnZSA9IE5VTEw7Ci0gICAgCi0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAg
bVN1cmZhY2UtPnNldEJvdW5kVGV4dHVyZShOVUxMKTsKLSAgICAgICAgbVN1cmZhY2UgPSBOVUxM
OwotICAgIH0KLX0KLQotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5j
ZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1
cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8gdXNlIGEgcG9pbnRlciAKLS8vIHRvIGEg
cmVuZGVyYnVmZmVyIHByb3h5IHdoaWNoIGhhcyBiZWVuIGRlbGV0ZWQuCi12b2lkIFRleHR1cmUy
RDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtUHJveHlS
ZWZzKys7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKLXsKLSAgICBpZiAobVByb3h5UmVmcyA+IDApCi0gICAgICAgIG1Qcm94eVJl
ZnMtLTsKLQotICAgIGlmIChtUHJveHlSZWZzID09IDApCi0gICAgICAgIG1Db2xvcmJ1ZmZlclBy
b3h5ID0gTlVMTDsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKLX0KLQotR0xzaXplaSBUZXh0dXJlMkQ6OmdldFdp
ZHRoKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5n
ZXRXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUdMc2l6ZWkgVGV4
dHVyZTJEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdl
QXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19
Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25z
dAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykK
LSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2xldmVsXS5nZXRGb3JtYXQoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotfQotCi1EM0RGT1JNQVQgVGV4dHVyZTJEOjpnZXRE
M0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2
ZWxdLmdldEQzREZvcm1hdCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktO
T1dOOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQot
ewotICAgIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmluZWQgPSBtSW1hZ2VB
cnJheVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBmYWxzZSk7
Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0ubWFya0RpcnR5KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgICAgIG1UZXhTdG9yYWdl
ID0gTlVMTDsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIHR5cGUpOwotCi0gICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOwotfQotCi12b2lkIFRleHR1cmUy
RDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICByZWxlYXNlVGV4
SW1hZ2UoKTsKLQotICAgIEdMZW51bSBmb3JtYXQ7Ci0KLSAgICBzd2l0Y2goc3VyZmFjZS0+Z2V0
Rm9ybWF0KCkpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIGZv
cm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4
Qjg6Ci0gICAgICAgIGZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtSW1hZ2VBcnJheVswXS5yZWRlZmluZShmb3JtYXQsIHN1cmZhY2UtPmdldFdpZHRoKCks
IHN1cmZhY2UtPmdldEhlaWdodCgpLCBHTF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLQotICAgIGRl
bGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJE
KHN1cmZhY2UtPmdldE9mZnNjcmVlblRleHR1cmUoKSk7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwotICAgIG1TdXJmYWNlID0gc3VyZmFjZTsKLSAgICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0
dXJlKHRoaXMpOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFzZVRleEltYWdlKCkKLXsKLSAg
ICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJl
KE5VTEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKG1UZXhTdG9y
YWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgICAg
ICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5yZWRlZmluZShHTF9SR0JBLCAwLCAwLCBH
TF9VTlNJR05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0
dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFn
ZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4
dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBBU1NFUlQobUltYWdl
QXJyYXlbbGV2ZWxdLmdldFN1cmZhY2UoKSAhPSBOVUxMKTsKLQotICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0TGV2ZWwg
PSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKLQotICAgICAgICBpZiAoZGVz
dExldmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJy
YXlbbGV2ZWxdOwotICAgICAgICAgICAgaW1hZ2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgICAgICAgICAgZGVzdExldmVs
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywg
Jm1JbWFnZUFycmF5W2xldmVsXSkpCi0gICAgewotICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVy
ZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJl
OjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpCi0gICAgewotICAg
ICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51
bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJU
YXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRh
cmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LQotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5T
SUdORURfQllURSk7Ci0gICAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS5pc1JlbmRlcmFi
bGVGb3JtYXQoKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5jb3B5KDAsIDAs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIG1EaXJ0eUltYWdl
cyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3Jh
Z2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLm1hcmtDbGVhbigpOwotCi0gICAgICAgIGlmICh3aWR0aCAh
PSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQg
PSB4OwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0g
eSArIGhlaWdodDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKLQotICAgICAgICAg
ICAgaWYgKGRlc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigp
LT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgZm9ybWF0LCAwLCAwLCBkZXN0KTsKLSAg
ICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJl
MkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRXaWR0aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBt
SW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJl
bmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRl
clRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5k
ZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCi0gICAgewotICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0uY29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1
cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9
IHg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOwotICAgICAgICAg
ICAgc291cmNlUmVjdC50b3AgPSB5OwotICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5
ICsgaGVpZ2h0OwotCi0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRl
eFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5k
ZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmdldEZvcm1hdCgpLCB4b2Zmc2V0
LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgR0xl
bnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBHTGVu
dW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgRDNERk9STUFU
IGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7Ci0K
LSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1J
bW11dGFibGUgPSB0cnVlOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVs
czsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHRydWUpOwotICAgICAgICB3aWR0aCA9IHN0ZDo6
bWF4KDEsIHdpZHRoID4+IDEpOwotICAgICAgICBoZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQg
Pj4gMSk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKEdMX05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZ
VEUsIHRydWUpOwotICAgIH0KLQotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0g
ICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZh
Y2VMZXZlbChsZXZlbCk7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uc2V0TWFuYWdl
ZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIFRlc3RzIGZvciAy
RCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gMy44LjIgcGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNv
bnN0Ci17Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0g
ICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKLQotICAgIGlm
ICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGJvb2wgbWlwbWFwcGluZyA9IGZhbHNlOwotCi0gICAgc3dpdGNoICht
TWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xf
TElORUFSOgotICAgICAgICBtaXBtYXBwaW5nID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJf
TUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSB0
cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgaWYgKChnZXRJbnRlcm5hbEZvcm1hdCgwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29u
dGV4dCgpLT5zdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldElu
dGVybmFsRm9ybWF0KDApID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1
cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKSkKLSAgICB7Ci0gICAgICAgIGlmIChtTWFnRmls
dGVyICE9IEdMX05FQVJFU1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmls
dGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG5wb3RTdXBwb3J0
ID0gZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKTsKLQotICAgIGlmICgh
bnBvdFN1cHBvcnQpCi0gICAgewotICAgICAgICBpZiAoKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBf
VE9fRURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKLSAgICAgICAgICAgIChnZXRXcmFwVCgpICE9
IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1pcG1hcHBp
bmcpCi0gICAgewotICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIWlzUG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghaXNNaXBtYXBDb21wbGV0ZSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkgY29tcGxldGVuZXNzLiBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZTJEOjpp
c01pcG1hcENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1h
Z2VBcnJheVswXS5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlb
MF0uZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgcSA9IGxvZzIoc3Rk
OjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8
PSBxOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS5nZXRG
b3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS5nZXRGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFnZUFycmF5
W2xldmVsXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF0uZ2V0VHlwZSgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUlt
YWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhl
aWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmUyRDo6
aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdAotewotICAgIHJldHVybiBJc0NvbXByZXNz
ZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKLX0KLQotYm9vbCBUZXh0dXJlMkQ6OmlzRGVw
dGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzRGVwdGhUZXh0dXJlKGdldElu
dGVybmFsRm9ybWF0KGxldmVsKSk7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVy
ZTJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8g
bVRleFN0b3JhZ2UtPmdldEJhc2VUZXh0dXJlKCkgOiBOVUxMOwotfQotCi0vLyBDb25zdHJ1Y3Rz
IGEgRGlyZWN0M0QgOSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzCi12
b2lkIFRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1J
bWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJh
eVswXS5nZXRIZWlnaHQoKTsKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0
aCwgaGVpZ2h0KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNE
Rm9ybWF0KCk7Ci0gICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBt
VXNhZ2UsIGZhbHNlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFn
ZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7
Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxl
dmVsKGxldmVsKTsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3Vy
ZmFjZShzdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1EaXJ0eUltYWdlcyA9IHRy
dWU7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKLXsKLSAgICBpbnQgbGV2
ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxl
dmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJh
eVtsZXZlbF07Ci0KLSAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS5nZXRX
aWR0aCgpLCBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBU
ZXh0dXJlU3RvcmFnZTJEICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKLQotICAgIGlmIChtSW1hZ2VB
cnJheVswXS5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkgIT0g
MCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS5nZXRXaWR0
aCgpOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgp
OwotICAgICAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdLmdldEQzREZvcm1hdCgp
OwotICAgICAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUpOwotCi0gICAgICAgIG5ld1RleFN0b3Jh
Z2UgPSBuZXcgVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VM
ZXZlbChpKTsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1Rl
eFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbChpKTsKLQotICAgICAgICAgICAgICAgIGlmICghY29w
eVRvUmVuZGVyVGFyZ2V0KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkK
LSAgICAgICAgICAgICAgICB7ICAgCi0gICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0
b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRlc3QpIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3Rv
cmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12
b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkKLXsKLSAgICBpZiAoIWdldENvbnRleHQo
KS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93
MihtSW1hZ2VBcnJheVswXS5nZXRXaWR0aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdl
dEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxl
dmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRl
ZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1h
Z2VBcnJheVswXS5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSkpOwotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICB7Ci0gICAgICAgIHJl
ZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCksIAotICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgPj4gaSwgMSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0uZ2V0SGVp
Z2h0KCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbMF0u
Z2V0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2Ut
PmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICp1cHBlciA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoaSAtIDEpOwotICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZl
bChpKTsKLQotICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1
cHBlciwgbG93ZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodXBwZXIgIT0g
TlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBs
b3dlci0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5tYXJrQ2xlYW4o
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
SW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChGQUlMRUQoRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2UobUlt
YWdlQXJyYXlbaV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0u
Z2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8g
JWQuIiwgaSAtIDEsIGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW1hZ2VBcnJh
eVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpU
ZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICh0YXJn
ZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIGlmICht
Q29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJv
eHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhp
cywgdGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OwotfQot
Ci0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxl
YXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6
OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQotewotICAgIEFTU0VSVCh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCk7Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBp
cyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAg
ICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKGlzRGVwdGgo
MCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIG1UZXhT
dG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0
YXJnZXQpCi17Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKLQotICAgIC8v
IGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3Rv
cmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
Ci0gICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkg
YSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKCFpc0RlcHRoKDApKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVs
KDApOwotfQotCi1UZXh0dXJlU3RvcmFnZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KQotewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAh
bVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRl
clRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Ci19
Ci0KLVRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKGludCBsZXZl
bHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JEIHVzYWdlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1
cmVTdG9yYWdlKHVzYWdlKSwgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsKFJlbmRlcmJ1ZmZlclN0
b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKLXsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAg
Ly8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
YW4gaW5jb21wbGV0ZSB0ZXh0dXJlCi0gICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lw
cGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewot
ICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscywg
Z2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KTsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1UZXh0dXJlU3RvcmFnZUN1YmVNYXA6On5UZXh0dXJlU3RvcmFnZUN1YmVNYXAoKQot
ewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7
Ci0gICAgfQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5
ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFy
Z2V0LCBpbnQgbGV2ZWwpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OwotCi0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
VGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZXMyZHg6OkNvbnZlcnRDdWJlRmFjZShmYWNlVGFy
Z2V0KSwgbGV2ZWwsICZzdXJmYWNlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VyZmFjZTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1
cmU5ICpUZXh0dXJlU3RvcmFnZUN1YmVNYXA6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUN1YmVN
YXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIHJl
dHVybiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgKyBUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4
KHRhcmdldCk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQp
IDogVGV4dHVyZShpZCkKLXsKLSAgICBtVGV4U3RvcmFnZSA9IE5VTEw7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxM
OwotICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSA9IDA7Ci0gICAgfQotfQotCi1UZXh0dXJlQ3Vi
ZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkr
KykKLSAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgfQotCi0gICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLX0KLQotLy8gV2Ug
bmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBh
Y3RpbmcgYXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1
cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0
LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHBy
b3h5IHBvaW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0v
LyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAg
ICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hp
ZXNbaV0gPT0gcHJveHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVm
c1tpXSA+IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAg
ICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQ
cm94aWVzW2ldID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVD
dWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVf
TUFQOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLmdldFdpZHRoKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsK
LX0KLQotR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJn
ZXQpXVtsZXZlbF0uZ2V0SGVpZ2h0KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0K
LQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLmdldEZvcm1hdCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEdM
X05PTkU7Ci19Ci0KLUQzREZPUk1BVCBUZXh0dXJlQ3ViZU1hcDo6Z2V0RDNERm9ybWF0KEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewotICAgIGlmIChsZXZlbCA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2Zh
Y2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gRDNERk1UX1VOS05PV047Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
YWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0K
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJbWFnZSgzLCBs
ZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBzZXRJ
bWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsK
LSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXBy
ZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQotewotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4KGZhY2UpLCBsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLQotICAgIFRleHR1cmU6OnNl
dENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRl
eChmYWNlKV1bbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChp
bnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEFTU0VSVChtSW1hZ2VBcnJheVtmYWNl
XVtsZXZlbF0uZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwotCi0gICAgaWYgKGxldmVsIDwgbGV2ZWxD
b3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RMZXZlbCA9IG1U
ZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAgICAgIEFTU0VSVChkZXN0TGV2ZWwgIT0gTlVMTCk7Ci0K
LSAgICAgICAgaWYgKGRlc3RMZXZlbCAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBJ
bWFnZSAqaW1hZ2UgPSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwotICAgICAgICAgICAgaW1h
Z2UtPnVwZGF0ZVN1cmZhY2UoZGVzdExldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKLQotICAgICAgICAgICAgZGVzdExldmVsLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBp
bWFnZS0+bWFya0NsZWFuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdl
QXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpCi0gICAgewotICAgICAgICBjb21taXRS
ZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXByZXNz
ZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJlOjpzdWJJ
bWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBp
bWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0p
KQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotLy8gVGVzdHMgZm9y
IGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rp
b24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRl
KCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7
Ci0KLSAgICBib29sIG1pcG1hcHBpbmc7Ci0KLSAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCi0gICAg
ewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAg
IG1pcG1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoK
LSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5F
QVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5z
dXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkgfHwKLSAgICAgICAgKGdldEludGVybmFsRm9y
bWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9P
RVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpKQotICAg
IHsKLSAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAh
PSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghaXNQb3cyKHNpemUpICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93
ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgaWYgKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBf
VE9fRURHRSB8fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFtaXBtYXBwaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0N1YmVDb21wbGV0
ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFpc01pcG1hcEN1YmVDb21wbGV0ZSgp
KSAgIC8vIEFsc28gdGVzdHMgZm9yIGlzQ3ViZUNvbXBsZXRlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vIFRlc3RzIGZvciBjdWJlIHRleHR1cmUgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6Omlz
Q3ViZUNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lk
dGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpICE9IG1JbWFnZUFycmF5
WzBdWzBdLmdldFdpZHRoKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAg
ewotICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0V2lkdGgoKSAhPSBtSW1hZ2VB
cnJheVswXVswXS5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVsw
XS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEhlaWdodCgpIHx8Ci0gICAgICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXVsw
XS5nZXRGb3JtYXQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0uZ2V0VHlw
ZSgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3QKLXsK
LSAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS5nZXRX
aWR0aCgpOwotCi0gICAgaW50IHEgPSBsb2cyKHNpemUpOwotCi0gICAgZm9yIChpbnQgZmFjZSA9
IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7
IGxldmVsIDw9IHE7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VB
cnJheVtmYWNlXVtsZXZlbF0uZ2V0Rm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0Rm9y
bWF0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdl
dFR5cGUoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRUeXBlKCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwg
c2l6ZSA+PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKLX0KLQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4U3Rv
cmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRCYXNlVGV4dHVyZSgpIDogTlVMTDsKLX0KLQotLy8gQ29u
c3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGlt
YWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNy
ZWF0ZVRleHR1cmUoKQotewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdl
dFdpZHRoKCk7Ci0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0g
ICAgRDNERk9STUFUIGQzZGZtdCA9IG1JbWFnZUFycmF5WzBdWzBdLmdldEQzREZvcm1hdCgpOwot
ICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxz
ZSk7Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4
dHVyZVN0b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7Ci0KLSAg
ICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVs
cyA9IGxldmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7
IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRDdWJlTWFwU3VyZmFjZShH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCk7Ci0gICAgICAgICAg
ICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2Up
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6dXBkYXRlVGV4dHVyZSgpCi17Ci0gICAg
Zm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgewotICAgICAgICBpbnQg
bGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVs
IDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbWFnZSAqaW1hZ2Ug
PSAmbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPmlz
RGlydHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb21taXRSZWN0KGZhY2Us
IGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgKm5l
d1RleFN0b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRo
KCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBd
LmdldFdpZHRoKCk7Ci0gICAgICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUs
IDApOwotICAgICAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0RDNE
Rm9ybWF0KCk7Ci0gICAgICAgIERXT1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZt
dCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSk7Ci0KLSAgICAgICAgbmV3
VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxzLCBkM2RmbXQsIGQz
ZHVzYWdlLCBzaXplKTsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLSAgICAgICAgICAg
IGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlID0gbVRleFN0b3Jh
Z2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGYs
IGkpOwotICAgICAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG5ld1Rl
eFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCArIGYsIGkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghY29weVRvUmVuZGVyVGFyZ2V0
KGRlc3QsIHNvdXJjZSwgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHNvdXJjZS0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2
ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0KLSAgICBUZXh0dXJlOjpzZXRJbWFn
ZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
KTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZh
Y2UpCi17Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIC0g
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDEpOwotICAgIE1FVEFfQVNTRVJUKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCA9PSAyKTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMyk7Ci0gICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDQpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA1KTsKLQotICAgIHJl
dHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOwotfQotCi12b2lkIFRl
eHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKQotewot
ICAgIGJvb2wgcmVkZWZpbmVkID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLnJlZGVmaW5lKGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSwgZmFsc2UpOwotCi0gICAgaWYgKG1UZXhTdG9yYWdl
ICYmIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgICAgICBtVGV4U3RvcmFnZSA9
IE5VTEw7Ci0KLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRl
clRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIg
dGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwotICAg
IHJlZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBH
TF9VTlNJR05FRF9CWVRFKTsKLQotICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZl
bF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtmYWNl
aW5kZXhdW2xldmVsXS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdl
dCk7Ci0gICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0u
bWFya0NsZWFuKCk7Ci0KLSAgICAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7Ci0KLSAgICAg
ICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0g
eDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAg
ICBzb3VyY2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkg
KyBoZWlnaHQ7Ci0KLSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0
b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBp
ZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNv
cHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOwotICAgICAg
ICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmVDdWJl
TWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQotewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1J
bWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0V2lkdGgoKTsKLQotICAgIGlm
ICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgIH0KLQotICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRhcmdl
dCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXgg
PSBmYWNlSW5kZXgodGFyZ2V0KTsKLQotICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVts
ZXZlbF0uaXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVy
Q29tcGxldGUoKSkpCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVs
XS5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAg
IG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlm
ICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAg
ICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3Qucmln
aHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Ci0gICAgICAg
ICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7Ci0KLSAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0ID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdl
dCwgbGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3VyY2VSZWN0LCBt
SW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7Ci0g
ICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSBzaXplKQotewotICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChp
bnRlcm5hbGZvcm1hdCk7Ci0gICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJu
YWxmb3JtYXQpOwotICAgIEQzREZPUk1BVCBkM2RmbXQgPSBDb252ZXJ0VGV4dHVyZUZvcm1hdFR5
cGUoZm9ybWF0LCB0eXBlKTsKLSAgICBEV09SRCBkM2R1c2FnZSA9IEdldFRleHR1cmVVc2FnZShk
M2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNk
dXNhZ2UsIHNpemUpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCi0gICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50
IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCBzaXplLCBzaXplLCB0eXBlLCB0
cnVlKTsKLSAgICAgICAgICAgIHNpemUgPSBzdGQ6Om1heCgxLCBzaXplID4+IDEpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRlZmluZShHTF9OT05FLCAwLCAwLCBHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtVGV4U3RvcmFn
ZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
OwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZl
bCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtmYWNlXVtsZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlw
bWFwcygpCi17Ci0gICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAoIWdldENv
bnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBpZiAo
IWlzUG93MihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhl
bSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVk
IGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgcmVkZWZp
bmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS5nZXRGb3JtYXQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgo
KSA+PiBpLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUlt
YWdlQXJyYXlbZl1bMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1bMF0uZ2V0VHlwZSgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQo
KSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVw
cGVyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCArIGYsIGktMSk7Ci0gICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
Kmxvd2VyID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGYsIGkpOwotCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5V
TEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7
Ci0KLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5tYXJrQ2xlYW4oKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmXVtpXS5nZXRTdXJmYWNlKCkgPT0gTlVMTCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
RkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ZdW2ldLmdldFN1
cmZhY2UoKSwgTlVMTCwgTlVMTCwgbUltYWdlQXJyYXlbZl1baSAtIDFdLmdldFN1cmZhY2UoKSwg
TlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwg
aSAtIDEsIGkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2ZdW2ldLm1hcmtEaXJ0eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
fQotCi1SZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCkKLXsKLSAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1
ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4
KHRhcmdldCk7Ci0KLSAgICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCi0gICAgewot
ICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
LUlEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSB0YXJnZXQpCi17Ci0gICAgQVNTRVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7
Ci0KLSAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAg
aWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKHRhcmdldCwgMCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdl
ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKLXsKLSAgICBp
ZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRl
clRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVyZSgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzMTNhMTYyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDI3ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuaDogRGVmaW5lcyB0aGUgYWJzdHJh
Y3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0vLyBjbGFzc2Vz
IFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmpl
Y3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVSRV9IXwotI2RlZmlu
ZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jZGVmaW5lIEdM
X0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBTdXJmYWNlOwotfQot
Ci1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci1jbGFzcyBGcmFtZWJ1ZmZlcjsKLQotZW51
bQotewotICAgIC8vIFRoZXNlIGFyZSB0aGUgbWF4aW11bXMgdGhlIGltcGxlbWVudGF0aW9uIGNh
biBzdXBwb3J0Ci0gICAgLy8gVGhlIGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBk
ZXZpY2UgY2FwcwotICAgIC8vIGFuZCBzaG91bGQgYmUgcXVlcmllZCBmcm9tIHRoZSBDb250ZXh0
Ci0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAotICAgIElNUExF
TUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKLQotICAgIElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8gMStsb2cyIG9mIE1BWF9URVhU
VVJFX1NJWkUKLX07Ci0KLWNsYXNzIEltYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBJbWFnZSgpOwot
ICAgIH5JbWFnZSgpOwotCi0gICAgYm9vbCByZWRlZmluZShHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIGJvb2wgZm9yY2VSZWxlYXNlKTsK
LSAgICB2b2lkIG1hcmtEaXJ0eSgpIHttRGlydHkgPSB0cnVlO30KLSAgICB2b2lkIG1hcmtDbGVh
bigpIHttRGlydHkgPSBmYWxzZTt9Ci0KLSAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNv
bnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLQotICAgIEdMc2l6ZWkg
Z2V0V2lkdGgoKSBjb25zdCB7cmV0dXJuIG1XaWR0aDt9Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQo
KSBjb25zdCB7cmV0dXJuIG1IZWlnaHQ7fQotICAgIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdCB7
cmV0dXJuIG1Gb3JtYXQ7fQotICAgIEdMZW51bSBnZXRUeXBlKCkgY29uc3Qge3JldHVybiBtVHlw
ZTt9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7
fQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7Ci0KLSAgICB2b2lkIHNldE1h
bmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICB2b2lkIHVwZGF0
ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZvaWQgbG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0KLSAgICB2b2lkIGxvYWRBbHBoYURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRGF0YVNTRTIoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dDsKLSAgICB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZEx1bWluYW5jZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
THVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdDsKLSAgICB2b2lkIGxvYWRSR0JVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAg
IHZvaWQgbG9hZFJHQjU2NURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JG
bG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhU1NF
MihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLSAgICB2b2lkIGxvYWRSR0JBNTU1MURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Owot
ICAgIHZvaWQgbG9hZFJHQkFGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRSR0JBSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRCR1JBRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRDb21wcmVzc2VkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7Ci0K
LSAgICB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KEltYWdlKTsKLQotICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOwotCi0gICAgSFJFU1VMVCBsb2Nr
KEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKLSAgICB2b2lk
IHVubG9jaygpOwotCi0gICAgR0xzaXplaSBtV2lkdGg7Ci0gICAgR0xzaXplaSBtSGVpZ2h0Owot
ICAgIEdMZW51bSBtRm9ybWF0OwotICAgIEdMZW51bSBtVHlwZTsKLQotICAgIGJvb2wgbURpcnR5
OwotCi0gICAgRDNEUE9PTCBtRDNEUG9vbDsgICAvLyBjYW4gb25seSBiZSBEM0RQT09MX1NZU1RF
TU1FTSBvciBEM0RQT09MX01BTkFHRUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgbG9ja2FibGUuCi0g
ICAgRDNERk9STUFUIG1EM0RGb3JtYXQ7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVN1cmZh
Y2U7Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgVGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZVN0
b3JhZ2UoKTsKLQotICAgIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKLSAgICBib29sIGlz
TWFuYWdlZCgpIGNvbnN0OwotICAgIEQzRFBPT0wgZ2V0UG9vbCgpIGNvbnN0OwotICAgIERXT1JE
IGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xl
bnVtIHRhcmdldCkgY29uc3QgPSAwOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlKTsKLQotICAgIGNvbnN0IERXT1JEIG1EM0RVc2FnZTsK
LSAgICBjb25zdCBEM0RQT09MIG1EM0RQb29sOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IG1U
ZXh0dXJlU2VyaWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVUZXh0dXJlU2VyaWFs
KCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50VGV4dHVyZVNlcmlhbDsKLX07
Ci0KLWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKLXsKLSAgcHVibGljOgot
ICAgIGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsKLQotICAgIHZpcnR1YWwgflRleHR1cmUo
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCA9
IDA7Ci0KLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNl
dE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3cmFw
KTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFVzYWdlKEdM
ZW51bSB1c2FnZSk7Ci0KLSAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7Ci0gICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwotICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0Owot
ICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OwotICAgIEdMZW51bSBnZXRVc2FnZSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QgPSAwOwotCi0g
ICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBSZW5k
ZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5U3Vi
SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBG
cmFtZWJ1ZmZlciAqc291cmNlKSA9IDA7Ci0KLSAgICBib29sIGhhc0RpcnR5UGFyYW1ldGVycygp
IGNvbnN0OwotICAgIGJvb2wgaGFzRGlydHlJbWFnZXMoKSBjb25zdDsKLSAgICB2b2lkIHJlc2V0
RGlydHkoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpOwotICAgIHVuc2ln
bmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCk7Ci0KLSAgICBib29s
IGlzSW1tdXRhYmxlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExF
VEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1
cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBi
ZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4K
LQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSk7Ci0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsK
LSAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKTsKLQotICAgIEdMaW50
IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSBjb25zdDsKLSAg
ICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQo
KSA9IDA7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSB0YXJnZXQpID0gMDsKLQotICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7Ci0KLSAgICBz
dGF0aWMgQmxpdCAqZ2V0QmxpdHRlcigpOwotICAgIHN0YXRpYyBib29sIGNvcHlUb1JlbmRlclRh
cmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwg
Ym9vbCBmcm9tTWFuYWdlZCk7Ci0KLSAgICBHTGVudW0gbU1pbkZpbHRlcjsKLSAgICBHTGVudW0g
bU1hZ0ZpbHRlcjsKLSAgICBHTGVudW0gbVdyYXBTOwotICAgIEdMZW51bSBtV3JhcFQ7Ci0gICAg
Ym9vbCBtRGlydHlQYXJhbWV0ZXJzOwotICAgIEdMZW51bSBtVXNhZ2U7Ci0KLSAgICBib29sIG1E
aXJ0eUltYWdlczsKLQotICAgIGJvb2wgbUltbXV0YWJsZTsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKLQotICAgIHZpcnR1YWwgVGV4dHVyZVN0
b3JhZ2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKLX07Ci0KLWNsYXNzIFRl
eHR1cmVTdG9yYWdlMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAg
IGV4cGxpY2l0IFRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0
dXJlKTsKLSAgICBUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQs
IERXT1JEIHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB+VGV4
dHVyZVN0b3JhZ2UyRCgpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZl
bChpbnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlh
bChHTGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTJEKTsKLQotICAgIElEaXJlY3QzRFRleHR1cmU5ICpt
VGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKLX07
Ci0KLWNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBUZXh0dXJlMkQoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlMkQoKTsKLQotICAg
IHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCBy
ZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdM
ZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2
ZWwpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKLSAg
ICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEQzREZP
Uk1BVCBnZXREM0RGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIGJvb2wgaXNDb21wcmVz
c2VkKEdMaW50IGxldmVsKSBjb25zdDsKLSAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1Yklt
YWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29t
cHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFn
ZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1l
YnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VUZXhJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwot
Ci0gICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IHRhcmdldCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2ls
KEdMZW51bSB0YXJnZXQpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmUyRCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0
QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZl
cnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpOwotCi0gICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29u
c3Q7Ci0KLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7Ci0gICAgdm9pZCBj
b21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVtJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3JhZ2UyRCAq
bVRleFN0b3JhZ2U7Ci0gICAgZWdsOjpTdXJmYWNlICptU3VyZmFjZTsKLQotICAgIC8vIEEgc3Bl
Y2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHBy
b3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3Rp
bmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJhY2sg
dG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3
ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291
bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8vIHRo
ZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhl
IFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5OwotICAg
IHVuc2lnbmVkIGludCBtUHJveHlSZWZzOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwIDogcHVibGljIFRleHR1cmVTdG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBUZXh0dXJlU3Rv
cmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGlu
dCBzaXplKTsKLQotICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpOwotCi0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBp
bnQgbGV2ZWwpOwotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChH
TGVudW0gdGFyZ2V0KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUZXh0dXJlU3RvcmFnZUN1YmVNYXApOwotCi0gICAgSURpcmVjdDNEQ3ViZVRleHR1
cmU5ICptVGV4dHVyZTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0
U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQotewot
ICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKTsKLQotICAg
IH5UZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotICAgIAot
ICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owot
ICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsK
LSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpIGNvbnN0OwotICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldElt
YWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZ
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotCi0g
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQg
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNp
emUpOwotCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7Ci0KLSAgICB2aXJ0dWFsIFJlbmRlcmJ1
ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOwotCi0gICAgc3RhdGljIHVuc2ln
bmVkIGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOwotCi0gIHByb3RlY3RlZDoKLSAgICBmcmll
bmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7Ci0gICAgdmlydHVhbCBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsKLQotICAgIHZp
cnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAg
dmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Ci0K
LSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEN1YmVD
b21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0g
ICAgdm9pZCBjb21taXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAg
dm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpOwotCi0gICAg
SW1hZ2UgbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsK
LQotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAqbVRleFN0b3JhZ2U7Ci0KLSAgICAvLyBBIHNw
ZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBw
cm94eSByZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0
aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNr
IHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYg
d2UgdXNlZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNv
dW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0
aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRo
ZSBSZW5kZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAg
dW5zaWduZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9URVhUVVJFX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFN
YW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmNDc1Zi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFN
YW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4NCArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBWZXJ0ZXhEYXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBWZXJ0ZXhEYXRhTWFu
YWdlciwgYSBjbGFzcyB0aGF0Ci0vLyBydW5zIHRoZSBCdWZmZXIgdHJhbnNsYXRpb24gcHJvY2Vz
cy4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotCi0jaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvdmVydGV4Y29udmVyc2lvbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5h
Z2VyLmgiCi0KLW5hbWVzcGFjZQotewotICAgIGVudW0geyBJTklUSUFMX1NUUkVBTV9CVUZGRVJf
U0laRSA9IDEwMjQqMTAyNCB9OwotICAgIC8vIFRoaXMgaGFzIHRvIGJlIGF0IGxlYXN0IDRrIG9y
IGVsc2UgaXQgZmFpbHMgb24gQVRJIGNhcmRzLgotICAgIGVudW0geyBDT05TVEFOVF9WRVJURVhf
QlVGRkVSX1NJWkUgPSA0MDk2IH07Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotdW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjo6bUN1cnJlbnRTZXJpYWwgPSAxOwotCi1pbnQgZWxlbWVudHNJbkJ1ZmZl
cihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgaW50IHNpemUpCi17Ci0gICAgaW50
IHN0cmlkZSA9IGF0dHJpYnV0ZS5zdHJpZGUoKTsKLSAgICByZXR1cm4gKHNpemUgLSBhdHRyaWJ1
dGUubU9mZnNldCAlIHN0cmlkZSArIChzdHJpZGUgLSBhdHRyaWJ1dGUudHlwZVNpemUoKSkpIC8g
c3RyaWRlOwotfQotCi1WZXJ0ZXhEYXRhTWFuYWdlcjo6VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4
dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtRGV2aWNlKGRldmljZSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbURpcnR5Q3VycmVudFZhbHVlW2ldID0gdHJ1
ZTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXSA9IE5VTEw7Ci0gICAgICAgIG1DdXJy
ZW50VmFsdWVPZmZzZXRzW2ldID0gMDsKLSAgICB9Ci0KLSAgICBjb25zdCBEM0RDQVBTOSAmY2Fw
cyA9IGNvbnRleHQtPmdldERldmljZUNhcHMoKTsKLSAgICBjaGVja1ZlcnRleENhcHMoY2Fwcy5E
ZWNsVHlwZXMpOwotCi0gICAgbVN0cmVhbWluZ0J1ZmZlciA9IG5ldyBTdHJlYW1pbmdWZXJ0ZXhC
dWZmZXIobURldmljZSwgSU5JVElBTF9TVFJFQU1fQlVGRkVSX1NJWkUpOwotCi0gICAgaWYgKCFt
U3RyZWFtaW5nQnVmZmVyKQotICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gYWxsb2NhdGUg
dGhlIHN0cmVhbWluZyB2ZXJ0ZXggYnVmZmVyLiIpOwotICAgIH0KLX0KLQotVmVydGV4RGF0YU1h
bmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCi17Ci0gICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZm
ZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQot
ICAgIHsKLSAgICAgICAgZGVsZXRlIG1DdXJyZW50VmFsdWVCdWZmZXJbaV07Ci0gICAgfQotfQot
Ci1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6d3JpdGVBdHRyaWJ1dGVEYXRhKEFycmF5
VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0g
ICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJ1dGUubUJvdW5kQnVmZmVyLmdldCgpOwotCi0gICAg
aW50IGlucHV0U3RyaWRlID0gYXR0cmlidXRlLnN0cmlkZSgpOwotICAgIGludCBlbGVtZW50U2l6
ZSA9IGF0dHJpYnV0ZS50eXBlU2l6ZSgpOwotICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29u
dmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnV0ZSk7Ci0gICAgc3RkOjpzaXplX3Qgc3Ry
ZWFtT2Zmc2V0ID0gMDsKLQotICAgIHZvaWQgKm91dHB1dCA9IE5VTEw7Ci0gICAgCi0gICAgaWYg
KHZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG91dHB1dCA9IHZlcnRleEJ1ZmZlci0+bWFw
KGF0dHJpYnV0ZSwgc3BhY2VSZXF1aXJlZChhdHRyaWJ1dGUsIGNvdW50LCBpbnN0YW5jZXMpLCAm
c3RyZWFtT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBpZiAob3V0cHV0ID09IE5VTEwpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlci4iKTsKLSAgICAgICAgcmV0
dXJuIC0xOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLQotICAgIGlm
IChidWZmZXIpCi0gICAgewotICAgICAgICBpbnQgb2Zmc2V0ID0gYXR0cmlidXRlLm1PZmZzZXQ7
Ci0KLSAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyLT5kYXRh
KCkpICsgb2Zmc2V0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpbnB1dCA9IHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWJ1dGUubVBvaW50ZXIpOwotICAgIH0KLQotICAg
IGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWJ1dGUubURpdmlzb3IgPT0gMCkKLSAgICB7Ci0g
ICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3RhcnQ7Ci0gICAgfQotCi0gICAgaWYgKGNv
bnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkKLSAgICB7Ci0g
ICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29udmVydGVyLmNvbnZlcnRBcnJheShpbnB1dCwg
aW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwotICAgIH0KLQotICAgIHZlcnRleEJ1ZmZlci0+
dW5tYXAoKTsKLQotICAgIHJldHVybiBzdHJlYW1PZmZzZXQ7Ci19Ci0KLUdMZW51bSBWZXJ0ZXhE
YXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewot
ICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9PVVRf
T0ZfTUVNT1JZOwotICAgIH0KLQotICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRy
aWJzID0gbUNvbnRleHQtPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKLSAgICBQcm9ncmFtICpwcm9n
cmFtID0gbUNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGZvciAo
aW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0
ZUluZGV4XS5hY3RpdmUgPSAocHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1
dGVJbmRleCkgIT0gLTEpOwotICAgIH0KLQotICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQg
c3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1ZmZlciwgYW5kIGludmFsaWRhdGUgc3RhdGljIGJ1ZmZl
cnMgdGhhdCBkb24ndCBjb250YWluIG1hdGNoaW5nIGF0dHJpYnV0ZXMKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKHRy
YW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0ubUFycmF5RW5hYmxlZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlci5n
ZXQoKTsKLSAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAqc3RhdGljQnVmZmVyID0gYnVm
ZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7Ci0KLSAgICAgICAg
ICAgIGlmIChzdGF0aWNCdWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0YXRpY0J1ZmZlci0+c2l6ZSgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwg
YnVmZmVyLT5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBzdGF0aWNCdWZmZXItPmFkZFJl
cXVpcmVkU3BhY2Uoc3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCB0b3RhbENvdW50LCAwKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRpY0J1ZmZlci0+
bG9va3VwQXR0cmlidXRlKGF0dHJpYnNbaV0pID09IC0xKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGF0aWMgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBtYXRj
aGluZyBhdHRyaWJ1dGVzLCBzbyBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHN0cmVhbWluZyBidWZm
ZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBzcGFjZSBvZiBhbGwgcHJldmlvdXMg
YXR0cmlidXRlcyBiZWxvbmdpbmcgdG8gdGhlIGludmFsaWRhdGVkIHN0YXRpYyBidWZmZXIgdG8g
dGhlIHN0cmVhbWluZyBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgcHJldmlv
dXMgPSAwOyBwcmV2aW91cyA8IGk7IHByZXZpb3VzKyspCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkW3ByZXZpb3VzXS5hY3RpdmUg
JiYgYXR0cmlic1twcmV2aW91c10ubUFycmF5RW5hYmxlZCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgKnByZXZpb3VzQnVmZmVy
ID0gYXR0cmlic1twcmV2aW91c10ubUJvdW5kQnVmZmVyLmdldCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAqcHJldmlvdXNTdGF0aWNCdWZmZXIgPSBw
cmV2aW91c0J1ZmZlciA/IHByZXZpb3VzQnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6
IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyID09
IHByZXZpb3VzU3RhdGljQnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWly
ZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNbcHJldmlvdXNdLCBjb3VudCwgaW5zdGFuY2Vz
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVN0cmVh
bWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIGNv
dW50LCBpbnN0YW5jZXMpKTsKLQotICAgICAgICAgICAgICAgICAgICBidWZmZXItPmludmFsaWRh
dGVTdGF0aWNEYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSAgICAKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU3RyZWFtaW5n
QnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgY291bnQs
IGluc3RhbmNlcykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
UmVzZXJ2ZSB0aGUgcmVxdWlyZWQgc3BhY2UgcGVyIHVzZWQgYnVmZmVyCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh0
cmFuc2xhdGVkW2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIu
Z2V0KCk7Ci0gICAgICAgICAgICBBcnJheVZlcnRleEJ1ZmZlciAqc3RhdGljQnVmZmVyID0gYnVm
ZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7Ci0gICAgICAgICAg
ICBBcnJheVZlcnRleEJ1ZmZlciAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGlj
QnVmZmVyIDogbVN0cmVhbWluZ0J1ZmZlcjsKLQotICAgICAgICAgICAgaWYgKHZlcnRleEJ1ZmZl
cikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXItPnJlc2VydmVS
ZXF1aXJlZFNwYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBQZXJmb3JtIHRoZSB2ZXJ0ZXggZGF0YSB0cmFuc2xhdGlvbnMKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKHRyYW5z
bGF0ZWRbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlic1tpXS5t
QXJyYXlFbmFibGVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlciAqYnVm
ZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIWJ1ZmZlciAmJiBhdHRyaWJzW2ldLm1Qb2ludGVyID09IE5VTEwpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFwcGxpY2F0aW9uIGVycm9y
IHRoYXQgd291bGQgbm9ybWFsbHkgcmVzdWx0IGluIGEgY3Jhc2gsIGJ1dCB3ZSBjYXRjaCBpdCBh
bmQgcmV0dXJuIGFuIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIEVSUigiQW4gZW5hYmxlZCB2
ZXJ0ZXggYXJyYXkgaGFzIG5vIGJ1ZmZlciBhbmQgbm8gcG9pbnRlci4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9y
bWF0Q29udmVydGVyKGF0dHJpYnNbaV0pOwotCi0gICAgICAgICAgICAgICAgU3RhdGljVmVydGV4
QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZmZXItPmdldFN0YXRpY1ZlcnRleEJ1
ZmZlcigpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBBcnJheVZlcnRleEJ1ZmZlciAqdmVydGV4
QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogc3RhdGljX2Nhc3Q8QXJyYXlW
ZXJ0ZXhCdWZmZXIqPihtU3RyZWFtaW5nQnVmZmVyKTsKLQotICAgICAgICAgICAgICAgIHN0ZDo6
c2l6ZV90IHN0cmVhbU9mZnNldCA9IC0xOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1
ZmZlcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNl
dCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRlKGF0dHJpYnNbaV0pOwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGVudGlyZSBidWZmZXIK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gZWxlbWVudHNJbkJ1ZmZl
cihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0dHJpYnNbaV0uc3RyaWRlKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHdyaXRlQXR0cmlidXRl
RGF0YShzdGF0aWNCdWZmZXIsIC1zdGFydEluZGV4LCB0b3RhbENvdW50LCBhdHRyaWJzW2ldLCAw
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJl
YW1PZmZzZXQgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmVhbU9mZnNldCArPSAoYXR0cmlic1tpXS5tT2Zmc2V0IC8gYXR0cmlic1tpXS5z
dHJpZGUoKSkgKiBjb252ZXJ0ZXIub3V0cHV0RWxlbWVudFNpemU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWJzW2ldLm1EaXZpc29yID09IDAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyZWFtT2Zmc2V0ICs9IHN0YXJ0ICogY29udmVydGVyLm91dHB1dEVsZW1lbnRTaXplOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHdyaXRlQXR0cmlidXRlRGF0YShtU3RyZWFtaW5n
QnVmZmVyLCBzdGFydCwgY291bnQsIGF0dHJpYnNbaV0sIGluc3RhbmNlcyk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN0cmVhbU9mZnNldCA9PSAtMSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZ
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udmVy
dGV4QnVmZmVyID0gdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLnNlcmlhbCA9IHZlcnRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tpXS5tRGl2aXNvcjsKLQot
ICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9IGNvbnZlcnRlci5kM2REZWNsVHlw
ZTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IGNvbnZlcnRlci5vdXRw
dXRFbGVtZW50U2l6ZTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IHN0
cmVhbU9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1DdXJyZW50VmFsdWVCdWZmZXJbaV0pCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyW2ldID0g
bmV3IFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihtRGV2aWNlLCBDT05TVEFOVF9WRVJURVhfQlVGRkVS
X1NJWkUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFN0cmVhbWluZ1Zl
cnRleEJ1ZmZlciAqYnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXTsKLQotICAgICAgICAg
ICAgICAgIGlmIChtRGlydHlDdXJyZW50VmFsdWVbaV0pCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVxdWlyZWRTcGFjZSA9IDQgKiBzaXplb2YoZmxv
YXQpOwotICAgICAgICAgICAgICAgICAgICBidWZmZXItPmFkZFJlcXVpcmVkU3BhY2UocmVxdWly
ZWRTcGFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+cmVzZXJ2ZVJlcXVpcmVkU3Bh
Y2UoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmRhdGEgPSBzdGF0aWNfY2FzdDxmbG9h
dCo+KGJ1ZmZlci0+bWFwKFZlcnRleEF0dHJpYnV0ZSgpLCByZXF1aXJlZFNwYWNlLCAmbUN1cnJl
bnRWYWx1ZU9mZnNldHNbaV0pKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gPSBhdHRy
aWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFd
ID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsyXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFbM10gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbM107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXItPnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
RGlydHlDdXJyZW50VmFsdWVbaV0gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udmVydGV4QnVm
ZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXS0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgICAgICAg
ICAgdHJhbnNsYXRlZFtpXS5zZXJpYWwgPSBtQ3VycmVudFZhbHVlQnVmZmVyW2ldLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmRpdmlzb3IgPSAwOwotCi0gICAg
ICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50eXBlID0gRDNEREVDTFRZUEVfRkxPQVQ0OwotICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKLSAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICh0cmFuc2xhdGVkW2ldLmFjdGl2
ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ1
ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KLSAgICAgICAg
ICAgIGlmIChidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT5w
cm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBhdHRyaWJzW2ldLnR5cGVTaXplKCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQot
Ci1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1aXJlZChjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
KSBjb25zdAotewotICAgIHNpemVfdCBlbGVtZW50U2l6ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRy
aWIpLm91dHB1dEVsZW1lbnRTaXplOwotCi0gICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJp
Yi5tRGl2aXNvciA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnRTaXplICogY291
bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbGVtZW50U2l6ZSAq
ICgoaW5zdGFuY2VzICsgYXR0cmliLm1EaXZpc29yIC0gMSkgLyBhdHRyaWIubURpdmlzb3IpOwot
ICAgIH0KLX0KLQotLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2ZXJ0ZXggYXR0cmliIHR5cGUg
dG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAgICAgICAgICAgICAgICBTSE9SVCAoQ2Fz
dCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3JtYWxpemUpIChjYW4ndCBiZSBl
eGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCi0vLyBVTlNJR05FRF9CWVRFICAgICAg
ICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX0JZVEUtbm9y
bSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gU0hPUlQgICAg
ICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8gU0hPUlQtbm9ybSAgICAgICAgICAgU0hP
UlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBVTlNJR05FRF9TSE9S
VCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX1NIT1JULW5vcm0gIFVTSE9SVC1ub3Jt
IChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIEZJWEVEIChub3QgaW4gV2ViR0wp
IEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAgICAgICAgICAgICAgICBGTE9BVCAoSWRl
bnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlwZSAoYXMgR0xlbnVtKSB0byB0
aGUgQyB0eXBlZGVmLiAKLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBl
IHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9CWVRFPiB7IHR5cGVkZWYg
R0xieXRlIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVE
X0JZVEU+IHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xU
b0NUeXBlPEdMX1NIT1JUPiB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5
cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiB7IHR5cGVkZWYg
R0x1aW50IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiB7
IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyB9OwotCi0vLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RERUNM
VFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVkIGxh
c3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNEVlRfRkxPQVQsCi0gICAgRDNEVlRf
U0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBEM0RWVF9VQllURSwKLSAgICBEM0RW
VF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JNCi19OwotCi0vLyBEM0RUb0NUeXBl
IG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8gdGhl
IGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBlPiBz
dHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQz
RFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBE
M0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9ydCB0
eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsgdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlw
ZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21iaW5h
dGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMgdG8g
YSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXplLgot
dGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6ZT4KLXN0cnVjdCBXaWRlblJ1bGUK
LXsKLX07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9B
VCwgc2l6ZT4gICAgICAgICAgOiBnbDo6Tm9XaWRlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50
IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNpemU+ICAgICAgICAgIDogZ2w6
OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVu
UnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4g
eyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBz
aXplPiAgICAgICAgICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50
IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6ZT4gICAgIDogZ2w6
OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVu
UnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4g
eyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBl
IGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlw
ZSAmIHNpemUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGlu
dCBzaXplPgotc3RydWN0IFZlcnRleFR5cGVGbGFncwotewotfTsKLQotdGVtcGxhdGUgPHVuc2ln
bmVkIGludCBjYXBmbGFnLCB1bnNpZ25lZCBpbnQgZGVjbGZsYWc+Ci1zdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBjYXBmbGFnIH07Ci0gICAgZW51
bSB7IGRlY2xmbGFnID0gZGVjbGZsYWcgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQz
RERFQ0xUWVBFX0ZMT0FUMT4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFn
czxEM0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVf
RkxPQVQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZM
T0FULCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+IHsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDog
VmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4geyB9OwotdGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBl
cjwwLCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNE
RFRDQVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4
VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4geyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JNLCA0
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZUEVf
VUJZVEU0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9V
U0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJO
LCBEM0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNE
RFRDQVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRl
eFR5cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQg
YW5kIGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMpLgot
dGVtcGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXplZD4KLXN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZwotewotfTsKLQotdGVtcGxhdGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVkLCBE
M0RWZXJ0ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVkPgotc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nQmFzZQotewotICAgIGVudW0geyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQgfTsKLSAgICBlbnVt
IHsgZmFsbGJhY2sgPSBGYWxsYmFjayB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVy
dGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwg
dHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNE
VlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAg
ICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9G
TE9BVD4geyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwgQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAg
IDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7
IH07ICAgICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZU1hcHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAg
IC8vIElkZW50aXR5Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hP
UlQsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8
RDNEVlRfU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1hbGl6
ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JU
LCBmYWxzZT4gICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FU
PiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAg
OiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7
IH07ICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBG
aXhlZFRvRmxvYXQKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLQotCi0v
LyBHaXZlbiBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNpb25S
dWxlIHByb3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJ
ZGVudGl0eSwgRml4ZWRUb0Zsb2F0KS4KLS8vIFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2
ZXMgYXJlIGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lvbi5oLgotCi0vLyBBbG1vc3QgYWxsIGNh
c2VzIGFyZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxs
eSBJZGVudGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBwaW5n
KS4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQg
aW50IHRvVHlwZT4KLXN0cnVjdCBDb252ZXJzaW9uUnVsZSA6IGdsOjpDYXN0PHR5cGVuYW1lIEdM
VG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlw
ZT4KLXsKLX07Ci0KLS8vIEFsbCBjb252ZXJzaW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8g
ZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3BlcmF0b3IuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21U
eXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6
IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9Owot
Ci0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVy
ZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQg
cnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUs
IEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4g
OiBnbDo6Rml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotCi0vLyBBIDItc3RhZ2UgY29uc3Ry
dWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0
IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKLS8vIHdoZXRoZXIgaXQgaXMgbm9y
bWFsaXplZCBvciBub3QuCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPgotc3Ry
dWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKLXsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBnbDo6Tm9ybWFs
aXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZh
dWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVz
PFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBmb3IgYSBEM0Qg
dHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZCAKLXRlbXBsYXRlIDxjbGFzcyBULCBi
b29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlcyA6IERlZmF1bHRWZXJ0
ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4KLXsKLX07Ci0KLXRlbXBsYXRlIDxib29sIG5v
cm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3JtYWxpemVkPiA6
IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07Ci0KLS8vIFBvbGljeSBydWxlcyBm
b3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UgdGhlIHByZWZl
cnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8gVGhlIGZhbGxiYWNrIGNvbnZlcnNpb24g
cHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBtdXN0IHN1cHBvcnQuCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVudW0geyB0eXBlID0gVDo6
cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZUZhbGxiYWNrIHsg
ZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9OwotCi0vLyBDb252ZXJ0ZXIgdGllcyBpdCBh
bGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9m
IHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAotLy8gaXQgcHJvdmlkZXMgYWxsIHRoZSBt
ZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQ
Uzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0vLyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1l
bWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4gZGVjbGZsYWcuCi10ZW1w
bGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0
ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+Ci1zdHJ1Y3QgQ29udmVydGVyCi0gICAg
OiBnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVuY2VS
dWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwgc2l6
ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9uUnVsZTxmcm9tVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJl
bmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZhbHVlczx0eXBl
bmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlw
ZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Ci17Ci1wcml2YXRl
OgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5n
PGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07Ci0gICAgZW51bSB7IGQzZHNpemUgPSBX
aWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKLQotcHVibGljOgotICAgIGVu
dW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFn
IH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNp
emU+OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlhbGlzZSBhIFRyYW5zbGF0aW9uSW5mbwot
I2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRp
dHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwg
bm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29u
dmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdGF0aWNfY2FzdDxE
M0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xm
bGFnKSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAotICAgICAgICBUUkFOU0xBVElPTih0
eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAotICAgICAgICBUUkFOU0xB
VElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAotICAgIH0KLQot
I2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAg
ICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElP
TlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBF
X05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgNCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4RGF0YU1hbmFnZXI6OlRyYW5zbGF0aW9u
RGVzY3JpcHRpb24gVmVydGV4RGF0YU1hbmFnZXI6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1f
R0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRl
ZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRSQU5TTEFUSU9O
U19GT1JfVFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdO
RURfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwKLSAgICBUUkFO
U0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19G
T1JfVFlQRV9OT19OT1JNKEdMX0ZJWEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9f
Tk9STShHTF9GTE9BVCkKLX07Ci0KLXZvaWQgVmVydGV4RGF0YU1hbmFnZXI6OmNoZWNrVmVydGV4
Q2FwcyhEV09SRCBkZWNsVHlwZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0g
MCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFn
KSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUF0dHJpYnV0
ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJl
ZENvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1BdHRyaWJ1dGVUeXBlc1tpXVtq
XVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQot
Ci0vLyBUaGlzIGlzIHVzZWQgdG8gaW5kZXggbUF0dHJpYnV0ZVR5cGVzIGFuZCBtUG9zc2libGVU
cmFuc2xhdGlvbnMuCi11bnNpZ25lZCBpbnQgVmVydGV4RGF0YU1hbmFnZXI6OnR5cGVJbmRleChH
TGVudW0gdHlwZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJu
IDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7Ci0gICAg
ICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1WZXJ0ZXhCdWZmZXI6OlZlcnRleEJ1ZmZlcihJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERXT1JEIHVzYWdlRmxhZ3Mp
IDogbURldmljZShkZXZpY2UpLCBtVmVydGV4QnVmZmVyKE5VTEwpCi17Ci0gICAgaWYgKHNpemUg
PiAwKQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZm
ZXJQb29sKHVzYWdlRmxhZ3MpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlVmVydGV4QnVmZmVyKHNpemUsIHVzYWdlRmxhZ3MsIDAsIHBvb2wsICZtVmVydGV4QnVmZmVy
LCBOVUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT3V0
IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXpl
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotVmVydGV4QnVmZmVyOjp+VmVydGV4QnVmZmVyKCkK
LXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIt
PlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVmVydGV4QnVmZmVyOjp1bm1hcCgpCi17Ci0g
ICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5Vbmxv
Y2soKTsKLSAgICB9Ci19Ci0KLUlEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjo6
Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVZlcnRleEJ1ZmZlcjsKLX0KLQotdW5z
aWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjo6aXNzdWVTZXJpYWwoKQot
ewotICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwotfQotCi1BcnJheVZlcnRleEJ1ZmZlcjo6
QXJyYXlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBz
aXplLCBEV09SRCB1c2FnZUZsYWdzKSA6IFZlcnRleEJ1ZmZlcihkZXZpY2UsIHNpemUsIHVzYWdl
RmxhZ3MpCi17Ci0gICAgbUJ1ZmZlclNpemUgPSBzaXplOwotICAgIG1Xcml0ZVBvc2l0aW9uID0g
MDsKLSAgICBtUmVxdWlyZWRTcGFjZSA9IDA7Ci19Ci0KLUFycmF5VmVydGV4QnVmZmVyOjp+QXJy
YXlWZXJ0ZXhCdWZmZXIoKQotewotfQotCi12b2lkIEFycmF5VmVydGV4QnVmZmVyOjphZGRSZXF1
aXJlZFNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSkKLXsKLSAgICBtUmVxdWlyZWRTcGFjZSArPSBy
ZXF1aXJlZFNwYWNlOwotfQotCi1TdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6OlN0cmVhbWluZ1ZlcnRl
eEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IGluaXRpYWxTaXpl
KSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgaW5pdGlhbFNpemUsIEQzRFVTQUdFX0RZTkFN
SUMgfCBEM0RVU0FHRV9XUklURU9OTFkpCi17Ci19Ci0KLVN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6
flN0cmVhbWluZ1ZlcnRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQgKlN0cmVhbWluZ1ZlcnRleEJ1
ZmZlcjo6bWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCBy
ZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KQotewotICAgIHZvaWQgKm1hcFB0ciA9
IE5VTEw7Ci0KLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhtV3JpdGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFj
ZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQg
d2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgICAgIH0KLQotICAgICAgICAqb2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAgIG1X
cml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcFB0
cjsKLX0KLQotdm9pZCBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6OnJlc2VydmVSZXF1aXJlZFNwYWNl
KCkKLXsKLSAgICBpZiAobVJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4QnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgobVJlcXVpcmVkU3BhY2UsIDMg
KiBtQnVmZmVyU2l6ZSAvIDIpOyAgIC8vIDEuNSB4IG1CdWZmZXJTaXplIGlzIGFyYml0cmFyeSBh
bmQgc2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdlIGRvbid0IGhhdmUgdG9vIG1hbnkgcmVhbGxv
Y2F0aW9ucy4KLQotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXREaXNwbGF5KCktPmdldEJ1ZmZl
clBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSk7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKG1CdWZmZXJTaXplLCBE
M0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBwb29sLCAmbVZlcnRleEJ1
ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOwotICAgIAotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT3V0
IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBtQnVm
ZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Ci0gICAg
fQotICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgbVJlcXVpcmVkU3BhY2UgPiBtQnVmZmVy
U2l6ZSkgICAvLyBSZWN5Y2xlCi0gICAgewotICAgICAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgdm9pZCAqZHVtbXk7Ci0gICAgICAgICAgICBtVmVydGV4QnVm
ZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKLSAgICAgICAgICAgIG1W
ZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVdyaXRlUG9zaXRp
b24gPSAwOwotICAgIH0KLQotICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKLX0KLQotU3RhdGljVmVy
dGV4QnVmZmVyOjpTdGF0aWNWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6
IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgMCwgRDNEVVNBR0VfV1JJVEVPTkxZKQotewotfQot
Ci1TdGF0aWNWZXJ0ZXhCdWZmZXI6On5TdGF0aWNWZXJ0ZXhCdWZmZXIoKQotewotfQotCi12b2lk
ICpTdGF0aWNWZXJ0ZXhCdWZmZXI6Om1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNldCkK
LXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0g
ICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sobVdyaXRl
UG9zaXRpb24sIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIsIDApOwotICAgICAgICAKLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkxvY2sgZmFp
bGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxM
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldCA9IGF0dHJpYnV0ZS5t
T2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpOwotICAgICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1l
bnQgPSB7YXR0cmlidXRlLm1UeXBlLCBhdHRyaWJ1dGUubVNpemUsIGF0dHJpYnV0ZS5zdHJpZGUo
KSwgYXR0cmlidXRlLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZzZXQsIG1Xcml0ZVBvc2l0aW9u
fTsKLSAgICAgICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsKLQotICAgICAgICAqc3RyZWFt
T2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgICAgIG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVp
cmVkU3BhY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBTdGF0aWNW
ZXJ0ZXhCdWZmZXI6OnJlc2VydmVSZXF1aXJlZFNwYWNlKCkKLXsKLSAgICBpZiAoIW1WZXJ0ZXhC
dWZmZXIgJiYgbUJ1ZmZlclNpemUgPT0gMCkKLSAgICB7Ci0gICAgICAgIEQzRFBPT0wgcG9vbCA9
IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9XUklURU9OTFkpOwotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihtUmVxdWlyZWRT
cGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBwb29sLCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7
Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOwotCi0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9j
YXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIG1SZXF1aXJlZFNwYWNlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1CdWZmZXJTaXplID0gbVJlcXVpcmVkU3BhY2U7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKG1WZXJ0ZXhCdWZmZXIgJiYgbUJ1ZmZlclNpemUgPj0gbVJlcXVpcmVkU3Bh
Y2UpCi0gICAgewotICAgICAgICAvLyBBbHJlYWR5IGFsbG9jYXRlZAotICAgIH0KLSAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7ICAgLy8gU3RhdGljIHZlcnRleCBidWZmZXJzIGNhbid0IGJlIHJlc2l6
ZWQKLQotICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKLX0KLQotc3RkOjpzaXplX3QgU3RhdGljVmVy
dGV4QnVmZmVyOjpsb29rdXBBdHRyaWJ1dGUoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1
dGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBtQ2Fj
aGUuc2l6ZSgpOyBlbGVtZW50KyspCi0gICAgewotICAgICAgICBpZiAobUNhY2hlW2VsZW1lbnRd
LnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCi0gICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0u
c2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKLSAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5z
dHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYmCi0gICAgICAgICAgICBtQ2FjaGVbZWxlbWVu
dF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5vcm1hbGl6ZWQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmlidXRlT2Zmc2V0ID09IGF0dHJpYnV0ZS5t
T2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBtQ2FjaGVbZWxlbWVudF0uc3RyZWFtT2Zmc2V0OwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1jb25zdCBWZXJ0ZXhEYXRh
TWFuYWdlcjo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhEYXRhTWFuYWdlcjo6Zm9ybWF0Q29udmVy
dGVyKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKSBjb25zdAotewotICAgIHJldHVy
biBtQXR0cmlidXRlVHlwZXNbdHlwZUluZGV4KGF0dHJpYnV0ZS5tVHlwZSldW2F0dHJpYnV0ZS5t
Tm9ybWFsaXplZF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NzU5MWEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZl
cnRleERhdGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIFZlcnRleERhdGFNYW5hZ2VyLCBhIGNsYXNz
IHRoYXQKLS8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzLgotCi0jaWZuZGVm
IExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVY
REFUQU1BTkFHRVJfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxjc3RkZGVmPgot
Ci0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1zdHJ1Y3QgVHJhbnNs
YXRlZEF0dHJpYnV0ZQotewotICAgIGJvb2wgYWN0aXZlOwotCi0gICAgRDNEREVDTFRZUEUgdHlw
ZTsKLSAgICBVSU5UIG9mZnNldDsKLSAgICBVSU5UIHN0cmlkZTsgICAvLyAwIG1lYW5zIG5vdCB0
byBhZHZhbmNlIHRoZSByZWFkIHBvaW50ZXIgYXQgYWxsCi0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhC
dWZmZXI5ICp2ZXJ0ZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbDsKLSAgICB1bnNp
Z25lZCBpbnQgZGl2aXNvcjsKLX07Ci0KLWNsYXNzIFZlcnRleEJ1ZmZlcgotewotICBwdWJsaWM6
Ci0gICAgVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qg
c2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0gICAgdmlydHVhbCB+VmVydGV4QnVmZmVyKCk7Ci0K
LSAgICB2b2lkIHVubWFwKCk7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpnZXRCdWZm
ZXIoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJv
dGVjdGVkOgotICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZpY2U7Ci0gICAgSURpcmVj
dDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1ZmZlcjsKLQotICAgIHVuc2lnbmVkIGludCBtU2Vy
aWFsOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAgICBzdGF0aWMg
dW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFZlcnRleEJ1ZmZlcik7Ci19OwotCi1jbGFzcyBBcnJheVZlcnRleEJ1
ZmZlciA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAgIEFycmF5VmVydGV4
QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQg
dXNhZ2VGbGFncyk7Ci0gICAgfkFycmF5VmVydGV4QnVmZmVyKCk7Ci0KLSAgICBzdGQ6OnNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Km1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgc3RkOjpzaXplX3QgcmVxdWly
ZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgpID0gMDsKLSAgICB2b2lkIGFkZFJlcXVpcmVkU3BhY2Uo
VUlOVCByZXF1aXJlZFNwYWNlKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgc3RkOjpzaXplX3QgbUJ1
ZmZlclNpemU7Ci0gICAgc3RkOjpzaXplX3QgbVdyaXRlUG9zaXRpb247Ci0gICAgc3RkOjpzaXpl
X3QgbVJlcXVpcmVkU3BhY2U7Ci19OwotCi1jbGFzcyBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIgOiBw
dWJsaWMgQXJyYXlWZXJ0ZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAgIFN0cmVhbWluZ1ZlcnRl
eEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IGluaXRpYWxTaXpl
KTsKLSAgICB+U3RyZWFtaW5nVmVydGV4QnVmZmVyKCk7Ci0KLSAgICB2b2lkICptYXAoY29uc3Qg
VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0
ZDo6c2l6ZV90ICpzdHJlYW1PZmZzZXQpOwotICAgIHZvaWQgcmVzZXJ2ZVJlcXVpcmVkU3BhY2Uo
KTsKLX07Ci0KLWNsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZlciA6IHB1YmxpYyBBcnJheVZlcnRleEJ1
ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RhdGljVmVydGV4QnVmZmVyKElEaXJl
Y3QzRERldmljZTkgKmRldmljZSk7Ci0gICAgflN0YXRpY1ZlcnRleEJ1ZmZlcigpOwotCi0gICAg
dm9pZCAqbWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCBy
ZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqc3RyZWFtT2Zmc2V0KTsKLSAgICB2b2lkIHJlc2Vy
dmVSZXF1aXJlZFNwYWNlKCk7Ci0KLSAgICBzdGQ6OnNpemVfdCBsb29rdXBBdHRyaWJ1dGUoY29u
c3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOyAgIC8vIFJldHVybnMgdGhlIG9mZnNldCBp
bnRvIHRoZSB2ZXJ0ZXggYnVmZmVyLCBvciAtMSBpZiBub3QgZm91bmQKLQotICBwcml2YXRlOgot
ICAgIHN0cnVjdCBWZXJ0ZXhFbGVtZW50Ci0gICAgewotICAgICAgICBHTGVudW0gdHlwZTsKLSAg
ICAgICAgR0xpbnQgc2l6ZTsKLSAgICAgICAgR0xzaXplaSBzdHJpZGU7Ci0gICAgICAgIGJvb2wg
bm9ybWFsaXplZDsKLSAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldDsKLQotICAgICAgICBzdGQ6
OnNpemVfdCBzdHJlYW1PZmZzZXQ7Ci0gICAgfTsKLQotICAgIHN0ZDo6dmVjdG9yPFZlcnRleEVs
ZW1lbnQ+IG1DYWNoZTsKLX07Ci0KLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyCi17Ci0gIHB1Ymxp
YzoKLSAgICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZp
Y2U5ICpiYWNrZW5kKTsKLSAgICB2aXJ0dWFsIH5WZXJ0ZXhEYXRhTWFuYWdlcigpOwotCi0gICAg
dm9pZCBkaXJ0eUN1cnJlbnRWYWx1ZShpbnQgaW5kZXgpIHsgbURpcnR5Q3VycmVudFZhbHVlW2lu
ZGV4XSA9IHRydWU7IH0KLQotICAgIEdMZW51bSBwcmVwYXJlVmVydGV4RGF0YShHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicywgR0xzaXpl
aSBpbnN0YW5jZXMpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFZlcnRleERhdGFNYW5hZ2VyKTsKLQotICAgIHN0ZDo6c2l6ZV90IHNwYWNlUmVxdWlyZWQoY29u
c3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcykgY29uc3Q7Ci0gICAgc3RkOjpzaXplX3Qgd3JpdGVBdHRyaWJ1dGVEYXRhKEFycmF5
VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBpbnN0YW5jZXMpOwotCi0g
ICAgQ29udGV4dCAqY29uc3QgbUNvbnRleHQ7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3Qg
bURldmljZTsKLQotICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciAqbVN0cmVhbWluZ0J1ZmZlcjsK
LQotICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAg
U3RyZWFtaW5nVmVydGV4QnVmZmVyICptQ3VycmVudFZhbHVlQnVmZmVyW01BWF9WRVJURVhfQVRU
UklCU107Ci0gICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldHNbTUFYX1ZFUlRFWF9B
VFRSSUJTXTsKLQotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIHN0cnVj
dCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAgICAg
IHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICB2b2lkICgqY29udmVydEFy
cmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2
b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsKLSAgICB9OwotCi0g
ICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OwotCi0gICAgRm9ybWF0
Q29udmVydGVyIG1BdHRyaWJ1dGVUeXBlc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1b
NF07ICAgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6
ZWRdW3NpemUgLSAxXQotCi0gICAgc3RydWN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24KLSAgICB7
Ci0gICAgICAgIERXT1JEIGNhcHNGbGFnOwotICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgcHJlZmVy
cmVkQ29udmVyc2lvbjsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIGZhbGxiYWNrQ29udmVyc2lv
bjsKLSAgICB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRy
aWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25EZXNjcmlwdGlvbiBtUG9z
c2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOyAvLyBb
R0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAt
IDFdCi0KLSAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlwZXMpOwotCi0gICAg
dW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3Q7Ci0gICAgY29uc3QgRm9y
bWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRy
aWJ1dGUpIGNvbnN0OwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfVkVSVEVYREFU
QU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbGliR0xFU3YyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJhMjUzZC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OTc1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLS8vIGxpYkdMRVN2Mi5jcHA6IEltcGxlbWVudHMgdGhlIGV4cG9ydGVkIE9wZW5HTCBF
UyAyLjAgZnVuY3Rpb25zLgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLQotI2luY2x1ZGUgPGV4Y2VwdGlvbj4K
LSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRl
ICJjb21tb24vdmVyc2lvbi5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL1RleHR1cmUuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKLQotYm9vbCB2
YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZ2w6OmdldENvbnRleHQo
KSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChsZXZlbCA9PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGdsOjppc1BvdzIod2lk
dGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBjaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIC8v
IHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93
KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAg
IGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgIGNhc2UgR0xfQUxQ
SEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICBjYXNlIEdMX0RFUFRI
X1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBpbnZh
bGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAgIC8vIGludmFsaWQgPGZvcm1hdD4r
PHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
ICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2Ug
R0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
IGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNl
KTsKLSAgICB9Ci19Ci1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChib29sIGNvbXByZXNz
ZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51
bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0
ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVz
c2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAo
Zm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0
KGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAg
aWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwK
LSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhl
aWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQg
KyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKGxldmVsKSB8fAotICAgICAgICB5b2Zmc2V0ICsg
aGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVzc2Vk
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQodGFyZ2V0
LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUgJiYgZm9ybWF0
ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAw
ICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgMCkpIHx8Ci0gICAgICAgICAg
ICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0
LCAwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3
aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZz
ZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBmb3IgY29tYmluYXRpb25zIG9mIGZvcm1h
dCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVscwotYm9vbCB2YWxpZFJlYWRG
b3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAg
IHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGdsOjpJTVBMRU1FTlRBVElP
Tl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWV4dGVybiAiQyIKLXsK
LQotdm9pZCBfX3N0ZGNhbGwgZ2xBY3RpdmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKQotewotICAg
IEVWRU5UKCIoR0xlbnVtIHRleHR1cmUgPSAweCVYKSIsIHRleHR1cmUpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dGV4dHVyZSA8IEdMX1RFWFRVUkUwIHx8IHRleHR1cmUgPiBHTF9URVhUVVJFMCArIGNvbnRleHQt
PmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRBY3RpdmVTYW1wbGVyKHRleHR1cmUg
LSBHTF9URVhUVVJFMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xBdHRhY2hTaGFkZXIoR0x1aW50IHByb2dyYW0sIEdM
dWludCBzaGFkZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQg
c2hhZGVyID0gJWQpIiwgcHJvZ3JhbSwgc2hhZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICAgICAg
Z2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0K
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFz
aGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+YXR0YWNo
U2hhZGVyKHNoYWRlck9iamVjdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bEJlZ2luUXVlcnlFWFQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCAlZCkiLCB0YXJnZXQsIGlkKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NB
TVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpZCA9PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+
YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRBdHRyaWJMb2NhdGlvbihHTHVp
bnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIqIG5hbWUpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xjaGFy
KiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBpbmRleCwgbmFtZSk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0K
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHN0
cm5jbXAobmFtZSwgImdsXyIsIDMpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+YmluZEF0dHJpYnV0ZUxvY2F0aW9uKGluZGV4LCBu
YW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IGJ1ZmZlcikK
LXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgYnVmZmVyID0gJWQp
IiwgdGFyZ2V0LCBidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xC
aW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBmcmFtZWJ1ZmZlciA9ICVkKSIs
IHRhcmdldCwgZnJhbWVidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFy
Z2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FO
R0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSB8fCB0YXJnZXQgPT0gR0xfRlJBTUVCVUZGRVIp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFJlYWRGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSB8fCB0YXJnZXQgPT0g
R0xfRlJBTUVCVUZGRVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
YmluZERyYXdGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xCaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMdWludCByZW5kZXJidWZmZXIpCi17
Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IHJlbmRlcmJ1ZmZlciA9
ICVkKSIsIHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKHRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZl
cihyZW5kZXJidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZFRleHR1cmUoR0xlbnVtIHRhcmdldCwgR0x1
aW50IHRleHR1cmUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50
IHRleHR1cmUgPSAlZCkiLCB0YXJnZXQsIHRleHR1cmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICAgICAg
ICAgIGlmICh0ZXh0dXJlT2JqZWN0ICYmIHRleHR1cmVPYmplY3QtPmdldFRhcmdldCgpICE9IHRh
cmdldCAmJiB0ZXh0dXJlICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZTJEKHRl
eHR1cmUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlQ3Vi
ZU1hcCh0ZXh0dXJlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZENvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYg
Z3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKQotewotICAgIEVWRU5UKCIoR0xj
bGFtcGYgcmVkID0gJWYsIEdMY2xhbXBmIGdyZWVuID0gJWYsIEdMY2xhbXBmIGJsdWUgPSAlZiwg
R0xjbGFtcGYgYWxwaGEgPSAlZikiLAotICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRDb2xvcihnbDo6Y2xhbXAwMShyZWQpLCBnbDo6
Y2xhbXAwMShncmVlbiksIGdsOjpjbGFtcDAxKGJsdWUpLCBnbDo6Y2xhbXAwMShhbHBoYSkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsQmxlbmRFcXVhdGlvbihHTGVudW0gbW9kZSkKLXsKLSAgICBnbEJsZW5kRXF1YXRp
b25TZXBhcmF0ZShtb2RlLCBtb2RlKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0
aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgRVZF
TlQoIihHTGVudW0gbW9kZVJHQiA9IDB4JVgsIEdMZW51bSBtb2RlQWxwaGEgPSAweCVYKSIsIG1v
ZGVSR0IsIG1vZGVBbHBoYSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobW9k
ZVJHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9GVU5DX1NVQlRSQUNUOgotICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NV
QlRSQUNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3dpdGNoIChtb2RlQWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfQURE
OgotICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKLSAgICAgICAgICBjYXNlIEdMX0ZV
TkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJsZW5k
RnVuYyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpCi17Ci0gICAgZ2xCbGVuZEZ1bmNT
ZXBhcmF0ZShzZmFjdG9yLCBkZmFjdG9yLCBzZmFjdG9yLCBkZmFjdG9yKTsKLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdC
LCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMZW51
bSBzcmNSR0IgPSAweCVYLCBHTGVudW0gZHN0UkdCID0gMHglWCwgR0xlbnVtIHNyY0FscGhhID0g
MHglWCwgR0xlbnVtIGRzdEFscGhhID0gMHglWCkiLAotICAgICAgICAgIHNyY1JHQiwgZHN0UkdC
LCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2gg
KHNyY1JHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAgICAgICAgICBj
YXNlIEdMX09ORToKLSAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6Ci0g
ICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xf
U1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKLSAgICAg
ICAgICBjYXNlIEdMX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1Rf
QUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5U
X0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgotICAg
ICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChkc3RSR0IpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAg
Y2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9S
OgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBj
YXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6
Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2Ug
R0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRf
Q09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoc3JjQWxwaGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2Fz
ZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgot
ICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVT
X0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0g
ICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xf
Q09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9T
QVRVUkFURToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAoZHN0QWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0g
ICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAg
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNU
X0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAg
ICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQ
SEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVf
TUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAg
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBH
TF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9B
TFBIQToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgY29uc3RhbnRDb2xvclVzZWQgPSAoc3JjUkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IHNy
Y1JHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkc3RSR0IgPT0gR0xfQ09OU1RBTlRfQ09MT1IgfHwgZHN0UkdCID09
IEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUik7Ci0KLSAgICAgICAgYm9vbCBjb25zdGFudEFs
cGhhVXNlZCA9IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEgfHwgc3JjUkdCID09IEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRzdFJHQiA9PSBHTF9DT05TVEFOVF9BTFBIQSB8fCBkc3RSR0IgPT0gR0xfT05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBKTsKLQotICAgICAgICBpZiAoY29uc3RhbnRDb2xvclVzZWQgJiYgY29u
c3RhbnRBbHBoYVVzZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2ltdWx0YW5lb3Vz
IHVzZSBvZiBHTF9DT05TVEFOVF9BTFBIQS9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgYW5k
IEdMX0NPTlNUQU5UX0NPTE9SL0dMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiBpbnZhbGlkIHVu
ZGVyIFdlYkdMIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBo
YSwgZHN0QWxwaGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVp
cHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSwgR0xlbnVtIHVzYWdlKQotewotICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZv
aWQqIGRhdGEgPSAweCUwLjhwLCBHTGVudW0gdXNhZ2UgPSAlZCkiLAotICAgICAgICAgIHRhcmdl
dCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoc2l6
ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAodXNhZ2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1NUUkVBTV9EUkFXOgotICAgICAgICAgIGNhc2UgR0xfU1RBVElDX0RS
QVc6Ci0gICAgICAgICAgY2FzZSBHTF9EWU5BTUlDX0RSQVc6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoK
LSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBidWZmZXItPmJ1ZmZlckRhdGEoZGF0YSwgc2l6ZSwgdXNhZ2Up
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQg
X19zdGRjYWxsIGdsQnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQs
IEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQotewotICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIHNpemUg
PSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHNpemUg
PCAwIHx8IG9mZnNldCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkYXRhID09IE5VTEwp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsK
LQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghYnVm
ZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoc2l6ZV90
KXNpemUgKyBvZmZzZXQgPiBidWZmZXItPnNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGJ1ZmZlci0+YnVmZmVyU3ViRGF0YShkYXRhLCBzaXplLCBvZmZzZXQpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLUdMZW51bSBf
X3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQpCi17Ci0gICAg
RVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9E
UkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FO
R0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
LCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAg
ICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVm
ZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5jb21w
bGV0ZW5lc3MoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVs
ZCBtYXNrKQotewotICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNrID0gJVgpIiwgbWFzayk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xlYXJDb2xvcihHTGNsYW1w
ZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSkKLXsK
LSAgICBFVkVOVCgiKEdMY2xhbXBmIHJlZCA9ICVmLCBHTGNsYW1wZiBncmVlbiA9ICVmLCBHTGNs
YW1wZiBibHVlID0gJWYsIEdMY2xhbXBmIGFscGhhID0gJWYpIiwKLSAgICAgICAgICByZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFyQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xlYXJEZXB0aGYoR0xjbGFtcGYgZGVwdGgp
Ci17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiBkZXB0aCA9ICVmKSIsIGRlcHRoKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29udGV4dC0+c2V0Q2xlYXJEZXB0aChkZXB0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDbGVhclN0ZW5jaWwoR0xp
bnQgcykKLXsKLSAgICBFVkVOVCgiKEdMaW50IHMgPSAlZCkiLCBzKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4
dC0+c2V0Q2xlYXJTdGVuY2lsKHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiByZWQs
IEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKLXsKLSAg
ICBFVkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdMYm9v
bGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9ICVkKSIsCi0gICAgICAgICAgcmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRDb2xvck1hc2socmVkID09
IEdMX1RSVUUsIGdyZWVuID09IEdMX1RSVUUsIGJsdWUgPT0gR0xfVFJVRSwgYWxwaGEgPT0gR0xf
VFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xDb21waWxlU2hhZGVyKEdMdWludCBzaGFkZXIpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgc2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlNoYWRlciAq
c2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAg
IGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzaGFkZXJPYmplY3QtPmNvbXBp
bGUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVy
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgIiAKLSAgICAgICAgICAiR0xzaXplaSBo
ZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsIEdMc2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNv
bnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKLSAgICAgICAgICB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0
aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4
aW11bVRleHR1cmVMZXZlbCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11
bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVp
Z2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0g
aGVpZ2h0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdl
dE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQg
c3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBm
b3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRl
cm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSAhPSBnbDo6Q29tcHV0ZUNvbXBy
ZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0
ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2UobGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFw
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3QgR0x2b2lkKiBkYXRhKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVk
LCAiCi0gICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwg
R0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAgICAiR0xzaXplaSBpbWFnZVNpemUgPSAl
ZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBk
YXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoeG9mZnNldCA8IDAgfHwg
eW9mZnNldCA8IDAgfHwgIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBp
bWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0g
MCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhp
cyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8g
aW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBm
YWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3
aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAlIDQgIT0gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyB3
ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGlsIHRoaXMgcG9pbnQsIGJlY2F1c2UgdGhl
IG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBleGlzdCB1bmxlc3MgRFhUIHRl
eHR1cmVzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRCh0cnVlLCB3aWR0aCwgaGVpZ2h0
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUs
IGRhdGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFn
ZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0
LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xpbnQgYm9yZGVyKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsICIKLSAg
ICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwg
R0xzaXplaSBoZWlnaHQgPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQpIiwKLSAgICAgICAgICB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lk
dGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lk
dGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
RGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhp
bXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+
IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIo
KTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkg
IT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7Ci0gICAgICAgICAgICBH
TGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7Ci0K
LSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X0FMUEhBICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQg
JiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAm
JgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9S
R0IgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VT
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAg
ICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAg
ICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JB
NCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0Ex
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09F
UykKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RY
VDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdM
RToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMzJfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VT
OgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0
YXJnZXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5j
b3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlv
ZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xz
aXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdl
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB4b2Zmc2V0IDwgMCB8fCB5
b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdp
ZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhl
aWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQt
PmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJh
bWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3Mo
KSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVy
SGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxl
cygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7Ci0gICAg
ICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9y
bWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7Ci0gICAgICAg
ICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWln
aHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCB0ZXgyZCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVn
aXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSB0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpOwotICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgyZDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQs
IHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRleGN1YmUpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lz
dGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gdGV4Y3ViZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFy
Z2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgIC8v
IFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAgIHN3aXRjaCAodGV4dHVy
ZUZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAg
ICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEEgJiYKLSAgICAg
ICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAg
ICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAg
ICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQiAmJgotICAgICAgICAg
ICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1NjUgJiYKLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCOF9PRVMgJiYKLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAg
ICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAg
IGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAg
ICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBICYmCi0gICAgICAg
ICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9P
RVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0dXJl
LT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotR0x1aW50IF9fc3RkY2FsbCBnbENyZWF0ZVByb2dyYW0odm9p
ZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmNyZWF0ZVBy
b2dyYW0oKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUdMdWludCBfX3N0ZGNhbGwgZ2xDcmVhdGVTaGFkZXIoR0xl
bnVtIHR5cGUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdHlwZSA9IDB4JVgpIiwgdHlwZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0sIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xDdWxsRmFjZShHTGVudW0gbW9kZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHgl
WCkiLCBtb2RlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6
Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsTW9kZShtb2RlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xEZWxldGVCdWZmZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBidWZmZXJzKQotewotICAg
IEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogYnVmZmVycyA9IDB4JTAuOHAp
IiwgbiwgYnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcnNbaV0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsRGVsZXRlRmVuY2VzTlYoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZlbmNlcykKLXsK
LSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGZlbmNlcyA9IDB4JTAu
OHApIiwgbiwgZmVuY2VzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5kZWxldGVGZW5jZShmZW5jZXNbaV0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsRGVsZXRlRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1
ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBmcmFt
ZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZyYW1lYnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyc1tpXSAhPSAwKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRnJhbWVi
dWZmZXIoZnJhbWVidWZmZXJzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xEZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIEVWRU5UKCIo
R0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVRdWVyaWVzRVhUKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50ICppZHMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAl
ZCwgY29uc3QgR0x1aW50ICppZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlUXVlcnkoaWRzW2ld
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBu
LCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4g
PSAlZCwgY29uc3QgR0x1aW50KiByZW5kZXJidWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJi
dWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyc1tpXSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xEZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVOVCgiKEdM
dWludCBzaGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBp
ZiAoc2hhZGVyID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+ZGVs
ZXRlU2hhZGVyKHNoYWRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVUZXh0dXJlcyhHTHNpemVpIG4sIGNv
bnN0IEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29u
c3QgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlc1tpXSAhPSAwKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4
dHVyZSh0ZXh0dXJlc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQotewotICAgIEVWRU5UKCIoR0xlbnVtIGZ1bmMg
PSAweCVYKSIsIGZ1bmMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGZ1bmMp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FVkVSOgotICAgICAgICAgIGNhc2UgR0xf
QUxXQVlTOgotICAgICAgICAgIGNhc2UgR0xfTEVTUzoKLSAgICAgICAgICBjYXNlIEdMX0xFUVVB
TDoKLSAgICAgICAgICBjYXNlIEdMX0VRVUFMOgotICAgICAgICAgIGNhc2UgR0xfR1JFQVRFUjoK
LSAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX05PVEVRVUFMOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhGdW5jKGZ1bmMp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQg
X19zdGRjYWxsIGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKQotewotICAgIEVWRU5UKCIoR0xi
b29sZWFuIGZsYWcgPSAlZCkiLCBmbGFnKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhNYXNr
KGZsYWcgIT0gR0xfRkFMU0UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVwdGhSYW5nZWYoR0xjbGFtcGYgek5lYXIs
IEdMY2xhbXBmIHpGYXIpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiB6TmVhciA9ICVmLCBHTGNs
YW1wZiB6RmFyID0gJWYpIiwgek5lYXIsIHpGYXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0
aFJhbmdlKHpOZWFyLCB6RmFyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERldGFjaFNoYWRlcihHTHVpbnQgcHJvZ3Jh
bSwgR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdM
dWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFkZXIpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0KLSAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLSAgICAg
ICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFk
ZXIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyQnlQcm9ncmFtSGFu
ZGxlOwotICAgICAgICAgICAgICAgIHNoYWRlckJ5UHJvZ3JhbUhhbmRsZSA9IGNvbnRleHQtPmdl
dFNoYWRlcihwcm9ncmFtKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNoYWRlckJ5UHJvZ3JhbUhh
bmRsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtQnlTaGFkZXJIYW5kbGUgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHNoYWRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9ncmFtQnlTaGFkZXJI
YW5kbGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmRldGFjaFNoYWRlcihzaGFkZXJP
YmplY3QpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEaXNhYmxlKEdMZW51
bSBjYXApCi17Ci0gICAgRVZFTlQoIihHTGVudW0gY2FwID0gMHglWCkiLCBjYXApOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5z
ZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdl
KGZhbHNlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVT
VDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRo
VGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JM
RU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCki
LCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdM
aW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCkiLCBtb2RlLCBmaXJzdCwgY291bnQp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IGZpcnN0IDwgMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQsIDApOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
RHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZSA9
IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xzaXplaSBwcmlt
Y291bnQgPSAlZCkiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgZmlyc3QgPCAwIHx8IHByaW1jb3VudCA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcmltY291bnQgPiAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcykKLXsKLSAgICBFVkVO
VCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVudW0gdHlwZSA9
IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBtb2Rl
LCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChj
b3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywg
MCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBw
cmltY291bnQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291
bnQgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUw
LjhwLCBHTHNpemVpIHByaW1jb3VudCA9ICVkKSIsCi0gICAgICAgICAgbW9kZSwgY291bnQsIHR5
cGUsIGluZGljZXMsIHByaW1jb3VudCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChj
b3VudCA8IDAgfHwgcHJpbWNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHByaW1j
b3VudCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOyAgICAKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgaW5kaWNlcywgcHJpbWNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEVu
YWJsZShHTGVudW0gY2FwKQotewotICAgIEVWRU5UKCIoR0xlbnVtIGNhcCA9IDB4JVgpIiwgY2Fw
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgc3dpdGNoIChjYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFjZSh0cnVl
KTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZG
U0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwodHJ1ZSk7ICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNv
bnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVD
b3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNT
T1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QodHJ1ZSk7ICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250ZXh0LT5zZXRE
ZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQodHJ1ZSk7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHTHVpbnQgaW5kZXgpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCki
LCBpbmRleCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeUVYVChHTGVudW0gdGFyZ2V0KQotewotICAg
IEVWRU5UKCJHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
QU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19Q
QVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+ZW5kUXVlcnkodGFyZ2V0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEZpbmlzaEZlbmNlTlYoR0x1
aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZlbmNlID0gJWQpIiwgZmVuY2UpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2Up
OwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5jZU9iamVjdC0+ZmluaXNoRmVuY2UoKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEZpbmlzaCh2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5zeW5jKHRydWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRmx1c2godm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+c3luYyhmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQgPSAweCVYLCAiCi0gICAgICAgICAgIkdMdWludCByZW5kZXJidWZmZXIgPSAlZCki
LCB0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgcmVuZGVyYnVmZmVyKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIg
JiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JF
QURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB8fCAocmVuZGVyYnVmZmVydGFyZ2V0
ICE9IEdMX1JFTkRFUkJVRkZFUiAmJiByZW5kZXJidWZmZXIgIT0gMCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJI
YW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVS
X0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJI
YW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFt
ZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXIgfHwgKGZyYW1l
YnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9IDApKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJi
dWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5k
ZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBs
ZXZlbCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNo
bWVudCA9IDB4JVgsIEdMZW51bSB0ZXh0YXJnZXQgPSAweCVYLCAiCi0gICAgICAgICAgIkdMdWlu
dCB0ZXh0dXJlID0gJWQsIEdMaW50IGxldmVsID0gJWQpIiwgdGFyZ2V0LCBhdHRhY2htZW50LCB0
ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZF
Ul9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX0NPTE9SX0FUVEFDSE1FTlQwOgotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVO
VDoKLSAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9ORTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4ID0g
Y29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQotICAgICAgICAgICAgICAgIGlmICh0ZXgg
PT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJE
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IHN0
YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VC
RV9NQVApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAq
dGV4Y3ViZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxl
dmVsKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKGxldmVsICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9
IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVy
ID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZy
YW1lYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMDogIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcih0ZXh0YXJnZXQsIHRl
eHR1cmUpOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6
ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZl
ci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEZyb250RmFjZShHTGVudW0gbW9kZSkKLXsKLSAgICBFVkVOVCgiKEdM
ZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DVzoKLSAgICAgICAgICBj
YXNlIEdMX0NDVzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRGcm9udEZhY2UobW9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2VuQnVmZmVycyhHTHNpemVpIG4s
IEdMdWludCogYnVmZmVycykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQq
IGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJ1ZmZlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVCdWZmZXIo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQp
Ci17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodGV4
MmQtPmlzRGVwdGgoMCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0ZXgyZC0+Z2VuZXJhdGVNaXBtYXBzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5p
c0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIHRleGN1YmUtPmdlbmVyYXRlTWlwbWFwcygpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbEdlbkZlbmNlc05WKEdMc2l6ZWkgbiwgR0x1aW50KiBmZW5jZXMpCi17Ci0gICAg
RVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBmZW5jZXMgPSAweCUwLjhwKSIsIG4sIGZl
bmNlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmVuY2Vz
W2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdl
bkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogZnJhbWVidWZmZXJzKQotewotICAgIEVW
RU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogZnJhbWVidWZmZXJzID0gMHglMC44cCkiLCBu
LCBmcmFtZWJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5RdWVyaWVzRVhUKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMp
Ci17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAweCUwLjhwKSIs
IG4sIGlkcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWRz
W2ldID0gY29udGV4dC0+Y3JlYXRlUXVlcnkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdl
blJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpCi17Ci0gICAg
RVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiByZW5kZXJidWZmZXJzID0gMHglMC44cCki
LCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZW5kZXJidWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0dXJlcyhHTHNpemVpIG4sIEdMdWludCog
dGV4dHVyZXMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiB0ZXh0dXJl
cyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZUF0dHJpYihHTHVpbnQgcHJvZ3JhbSwg
R0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNp
emUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAgIEVWRU5UKCIoR0x1aW50IHBy
b2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNp
emVpICpsZW5ndGggPSAweCUwLjhwLCAiCi0gICAgICAgICAgIkdMaW50ICpzaXplID0gMHglMC44
cCwgR0xlbnVtICp0eXBlID0gJTAuOHAsIEdMY2hhciAqbmFtZSA9ICUwLjhwKSIsCi0gICAgICAg
ICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAo
R0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRy
aWJ1dGUoaW5kZXgsIGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRBY3RpdmVVbmlmb3JtKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNo
YXIqIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5k
ZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsICIKLSAgICAgICAgICAiR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xpbnQqIHNpemUgPSAweCUwLjhwLCBHTGVudW0qIHR5cGUgPSAweCUw
LjhwLCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgaW5kZXgs
IGJ1ZnNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNo
YWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmpl
Y3QtPmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwg
bGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEF0dGFjaGVkU2hhZGVycyhH
THVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXplaSogY291bnQsIEdMdWludCog
c2hhZGVycykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMc2l6ZWkgbWF4
Y291bnQgPSAlZCwgR0xzaXplaSogY291bnQgPSAweCUwLjhwLCBHTHVpbnQqIHNoYWRlcnMgPSAw
eCUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgbWF4Y291bnQsIGNvdW50LCBzaGFkZXJzKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG1heGNvdW50IDwgMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBwcm9n
cmFtT2JqZWN0LT5nZXRBdHRhY2hlZFNoYWRlcnMobWF4Y291bnQsIGNvdW50LCBzaGFkZXJzKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1pbnQgX19z
dGRjYWxsIGdsR2V0QXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciog
bmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIGNvbnN0IEdMY2hhciog
bmFtZSA9ICVzKSIsIHByb2dyYW0sIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUsIC0xKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0QXR0cmlidXRl
TG9jYXRpb24obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIC0xKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0Qm9vbGVh
bnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51
bSBwbmFtZSA9IDB4JVgsIEdMYm9vbGVhbiogcGFyYW1zID0gMHglMC44cCkiLCAgcG5hbWUsIHBh
cmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMp
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUs
ICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxp
ZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgotCi0gICAgICAgICAgICAg
ICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAg
ICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKLQotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZmxvYXRQYXJhbXNbaV0gPT0gMC4wZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdM
X0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQ
YXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRb
bnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2Vydihw
bmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW50UGFyYW1zW2ldID09IDApCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJV
RTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBb
XSBpbnRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
R2V0QnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCog
cGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFt
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVS
OgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJB
WV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFy
cmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBB
IG51bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVm
ZmVyIHRhcmdldAotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1HTGVu
dW0gX19zdGRjYWxsIGdsR2V0RXJyb3Iodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgIGlmIChjb250
ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldEVycm9yKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEZlbmNl
aXZOVihHTHVpbnQgZmVuY2UsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBF
VkVOVCgiKEdMdWludCBmZW5jZSA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCAqcGFy
YW1zID0gMHglMC44cCkiLCBmZW5jZSwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZlbmNlT2JqZWN0LT5nZXRGZW5jZWl2KHBuYW1lLCBwYXJhbXMpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKQotewotICAg
IEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCki
LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1l
LCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5h
dGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFt
ZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgot
Ci0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFt
c107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJv
b2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMS4wZjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29s
UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMg
PSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5n
ZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xmbG9hdClpbnRQ
YXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAg
RVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLAotICAgICAgICAg
IHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQg
IT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUg
JiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwot
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAw
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudFR5cGU7Ci0gICAgICAgICAgICBH
THVpbnQgYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDog
ICAgCi0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgpOyAKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOiAgICAgCi0gICAgICAgICAg
ICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7
Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50
VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwotICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRs
ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
R0xlbnVtIGF0dGFjaG1lbnRPYmplY3RUeXBlOyAgIC8vIFR5cGUgY2F0ZWdvcnkKLSAgICAgICAg
ICAgIGlmIChhdHRhY2htZW50VHlwZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdM
X1JFTkRFUkJVRkZFUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50
T2JqZWN0VHlwZSA9IGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAoZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IEdMX1RF
WFRVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQ
RToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudE9iamVjdFR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfTkFNRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVj
dFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RF
WFRVUkUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
YXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9M
RVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVY
VFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBiZSBzZXQg
dG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50
T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNh
bGwgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGNvbnRleHQtPmdldFJlc2V0U3RhdHVzKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gR0xfTk9fRVJST1I7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17
Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW50ZWdlcnYo
cG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdMZW51bSBu
YXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwot
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1l
LCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9
PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5h
bWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAg
ICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwotICAg
ICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOwot
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFy
YW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDE7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBH
TF9GTE9BVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQg
KmZsb2F0UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBu
ZXcgR0xmbG9hdFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dEZsb2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5H
RSB8fCBwbmFtZSA9PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9D
TEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQp
KCgoR0xmbG9hdCkoMHhGRkZGRkZGRikgKiBmbG9hdFBhcmFtc1tpXSAtIDEuMGYpIC8gMi4wZik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShmbG9hdFBh
cmFtc1tpXSA+IDAuMGYgPyBmbG9vcihmbG9hdFBhcmFtc1tpXSArIDAuNSkgOiBjZWlsKGZsb2F0
UGFyYW1zW2ldIC0gMC41KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5h
bWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBH
TGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgcG5h
bWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MSU5LX1NU
QVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpICE9IE5VTEw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1ZBTElEQVRFX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJv
Z3JhbU9iamVjdC0+aXNWYWxpZGF0ZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FUVEFDSEVEX1NIQURFUlM6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEF0dGFjaGVkU2hhZGVyc0NvdW50
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FDVElW
RV9BVFRSSUJVVEVTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0
aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJ
VkVfVU5JRk9STVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdl
dEFjdGl2ZVVuaWZvcm1Db3VudCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX1BST0dSQU1fQklO
QVJZX0xFTkdUSF9PRVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0
UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSog
bGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9
ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xj
aGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAgICAgICAgIHByb2dyYW0sIGJ1ZnNpemUsIGxl
bmd0aCwgaW5mb2xvZyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUs
IGxlbmd0aCwgaW5mb2xvZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeWl2RVhUKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBFVkVOVCgiR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50ICpwYXJhbXMgPSAweCUwLjhwKSIs
IHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAocG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhU
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0
QWN0aXZlUXVlcnkodGFyZ2V0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUKEdMdWlu
dCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWlu
dCBpZCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHVpbnQgKnBhcmFtcyA9IDB4JTAuOHAp
IiwgaWQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2gg
KHBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgot
ICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1
ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAgICAgIGlmICghcXVlcnlPYmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaChwbmFtZSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgICAgICAg
IHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoK
LSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBxdWVyeU9iamVjdC0+aXNSZXN1bHRBdmFpbGFi
bGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBh
cmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFu
ZGxlKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXIoY29u
dGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCkpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHBu
YW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9X
SURUSDogICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFdpZHRoKCk7ICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9IRUlHSFQ6ICAg
ICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEhlaWdodCgpOyAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6ICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7IGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRTogICAgICAgICpwYXJhbXMgPSBy
ZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZm
ZXItPmdldEdyZWVuU2l6ZSgpOyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JF
TkRFUkJVRkZFUl9CTFVFX1NJWkU6ICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEJs
dWVTaXplKCk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZF
Ul9BTFBIQV9TSVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEFscGhhU2l6ZSgp
OyAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9ERVBUSF9T
SVpFOiAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpOyAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6ICAg
ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7ICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FOR0xFOgotICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXIt
PmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyaXYoR0x1aW50
IHNoYWRlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1
aW50IHNoYWRlciA9ICVkLCBHTGVudW0gcG5hbWUgPSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAu
OHApIiwgc2hhZGVyLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVy
T2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICgh
c2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TSEFERVJfVFlQ
RToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRUeXBlKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFTEVURV9TVEFU
VVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+aXNGbGFnZ2VkRm9y
RGVsZXRpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVj
dC0+aXNDb21waWxlZCgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0SW5mb0xvZ0xlbmd0aCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xF
TkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRTb3VyY2VM
ZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRToKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gc2hhZGVyT2JqZWN0LT5nZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsR2V0U2hhZGVySW5mb0xvZyhHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6
ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQotewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRl
ciA9ICVkLCBHTHNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwg
R0xjaGFyKiBpbmZvbG9nID0gMHglMC44cCkiLAotICAgICAgICAgIHNoYWRlciwgYnVmc2l6ZSwg
bGVuZ3RoLCBpbmZvbG9nKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hh
ZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzaGFkZXJPYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwgbGVu
Z3RoLCBpbmZvbG9nKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0g
c2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHBy
ZWNpc2lvbikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBzaGFkZXJ0eXBlID0gMHglWCwgR0xlbnVt
IHByZWNpc2lvbnR5cGUgPSAweCVYLCBHTGludCogcmFuZ2UgPSAweCUwLjhwLCBHTGludCogcHJl
Y2lzaW9uID0gMHglMC44cCkiLAotICAgICAgICAgIHNoYWRlcnR5cGUsIHByZWNpc2lvbnR5cGUs
IHJhbmdlLCBwcmVjaXNpb24pOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHNo
YWRlcnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6Ci0g
ICAgICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHByZWNpc2lvbnR5cGUpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX0xPV19GTE9BVDoKLSAgICAgICAgICBjYXNlIEdMX01FRElV
TV9GTE9BVDoKLSAgICAgICAgICBjYXNlIEdMX0hJR0hfRkxPQVQ6Ci0gICAgICAgICAgICAvLyBB
c3N1bWUgSUVFRSA3NTQgcHJlY2lzaW9uCi0gICAgICAgICAgICByYW5nZVswXSA9IDEyNzsKLSAg
ICAgICAgICAgIHJhbmdlWzFdID0gMTI3OwotICAgICAgICAgICAgKnByZWNpc2lvbiA9IDIzOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9MT1dfSU5UOgotICAgICAgICAg
IGNhc2UgR0xfTUVESVVNX0lOVDoKLSAgICAgICAgICBjYXNlIEdMX0hJR0hfSU5UOgotICAgICAg
ICAgICAgLy8gU29tZSAobW9zdCkgaGFyZHdhcmUgb25seSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lz
aW9uIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsCi0gICAgICAgICAgICAvLyB3aGljaCBjYW4gYWNj
dXJhdGVseSByZXByZXNlbnQgaW50ZWdlcnMgdXAgdG8gKy8tMTY3NzcyMTYKLSAgICAgICAgICAg
IHJhbmdlWzBdID0gMjQ7Ci0gICAgICAgICAgICByYW5nZVsxXSA9IDI0OwotICAgICAgICAgICAg
KnByZWNpc2lvbiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRT
aGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogc291cmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBH
THNpemVpIGJ1ZnNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiBz
b3VyY2UgPSAweCUwLjhwKSIsCi0gICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIHNv
dXJjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZzaXplIDwgMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAg
ICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0U291cmNlKGJ1ZnNpemUsIGxlbmd0aCwgc291
cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShHTHVpbnQgc2hh
ZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpCi17
Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBH
THNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIHNvdXJjZSA9IDB4JTAuOHApIiwKLSAg
ICAgICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3Qg
PSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJP
YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hhZGVyT2Jq
ZWN0LT5nZXRUcmFuc2xhdGVkU291cmNlKGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1jb25zdCBHTHVieXRl
KiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmcoR0xlbnVtIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTGVu
dW0gbmFtZSA9IDB4JVgpIiwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgc3dp
dGNoIChuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9WRU5ET1I6Ci0gICAgICAg
ICAgICByZXR1cm4gKEdMdWJ5dGUqKSJHb29nbGUgSW5jLiI7Ci0gICAgICAgICAgY2FzZSBHTF9S
RU5ERVJFUjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwp
ID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6ICJBTkdMRSIpOwotICAgICAgICAgIGNh
c2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAy
LjAgKEFOR0xFICJWRVJTSU9OX1NUUklORyIpIjsKLSAgICAgICAgICBjYXNlIEdMX1NIQURJTkdf
TEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyBHTFNMIEVTIDEuMDAgKEFOR0xFICJWRVJTSU9OX1NUUklORyIpIjsKLSAgICAgICAgICBjYXNl
IEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAh
PSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDogIiIpOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1
Ynl0ZSopTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChHTHVieXRl
KilOVUxMKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyZnYo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCi17Ci0gICAgRVZF
TlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCog
cGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
VGV4dHVyZSAqdGV4dHVyZTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAg
ICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BR19GSUxURVI6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1
cmUtPmdldE1hZ0ZpbHRlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdyYXBTKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdyYXBUKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9S
TUFUX0VYVDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKHRleHR1cmUtPmlz
SW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFVzYWdlKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRU
ZXhQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMp
Ci17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0
dXJlLT5nZXRNYWdGaWx0ZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0
ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FH
RV9BTkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0VXNhZ2UoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEdldG5Vbmlmb3JtZnZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGJ1ZlNpemUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBw
cm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBH
TGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgbG9jYXRpb24s
IGJ1ZlNpemUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZTaXpl
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFy
YW1zKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdM
dWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKQotewotICAgIEVW
RU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xmbG9hdCog
cGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJv
Z3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWZ2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRuVW5pZm9ybWl2RVhUKEdMdWludCBwcm9n
cmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBHTGludCogcGFyYW1zKQotewot
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBidWZTaXplID0gJWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIAotICAgICAgICAg
IHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNv
bnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnko
KTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1pdihsb2Nh
dGlvbiwgJmJ1ZlNpemUsIHBhcmFtcykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBw
YXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGludCBsb2NhdGlv
biA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFy
YW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBOVUxMLCBw
YXJhbXMpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotaW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQotewotICAgIEVWRU5UKCIo
R0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9n
cmFtLCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoc3Ryc3RyKG5hbWUs
ICJnbF8iKSA9PSBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwot
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCAtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5
LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlksIC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsR2V0VmVydGV4QXR0cmliZnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQq
IHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4LCBwbmFtZSwgcGFyYW1z
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLQotICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZB
TFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0
KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0
cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVG
RkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0
YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVbaV07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRToKLSAgICAgICAgICAgICAgICAqcGFy
YW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubURpdmlzb3I7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5k
ZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
aW5kZXgsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmli
U3RhdGUoaW5kZXgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1BcnJheUVuYWJsZWQgPyBHTF9U
UlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gYXR0cmliU3RhdGUubVNpemU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TdHJpZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tVHlwZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdM
X1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubUJvdW5kQnVmZmVyLmlkKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklC
OgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gYXR0cmli
U3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
KEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3VycmVudFZhbHVlICsgMC41Zikg
OiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9ESVZJU09SX0FOR0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpYXR0cmli
U3RhdGUubURpdmlzb3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUs
IEdMdm9pZCoqIHBvaW50ZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xl
bnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcG9pbnRlciA9IDB4JTAuOHApIiwgaW5kZXgsIHBu
YW1lLCBwb2ludGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocG5hbWUgIT0gR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAqcG9pbnRlciA9IGNvbnN0X2Nhc3Q8R0x2b2lkKj4oY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliUG9pbnRlcihpbmRleCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsSGludChHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gbW9kZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gbW9k
ZSA9IDB4JVgpIiwgdGFyZ2V0LCBtb2RlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChtb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GQVNURVNUOgotICAgICAg
ICAgIGNhc2UgR0xfTklDRVNUOgotICAgICAgICAgIGNhc2UgR0xfRE9OVF9DQVJFOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOyAKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDoKLSAg
ICAgICAgICAgIGlmIChjb250ZXh0KSBjb250ZXh0LT5zZXRHZW5lcmF0ZU1pcG1hcEhpbnQobW9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURF
Ul9ERVJJVkFUSVZFX0hJTlRfT0VTOgotICAgICAgICAgICAgaWYgKGNvbnRleHQpIGNvbnRleHQt
PnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQobW9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzQnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0gICAg
RVZFTlQoIihHTHVpbnQgYnVmZmVyID0gJWQpIiwgYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCAmJiBidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldEJ1ZmZlcihidWZmZXIpOwot
Ci0gICAgICAgICAgICBpZiAoYnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNF
OwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNFbmFibGVkKEdMZW51bSBjYXApCi17Ci0g
ICAgRVZFTlQoIihHTGVudW0gY2FwID0gMHglWCkiLCBjYXApOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNh
cCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0N1bGxGYWNlRW5hYmxlZCgpOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgcmV0dXJuIGNvbnRleHQtPmlz
UG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVBbHBoYVRvQ292ZXJh
Z2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAg
ICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKTsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5p
c1NjaXNzb3JUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVT
VDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU3RlbmNpbFRlc3RFbmFibGVkKCk7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNCbGVuZEVuYWJsZWQoKTsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250
ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYo
R0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZlbmNlID0gJWQpIiwgZmVuY2Up
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVu
Y2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiBmZW5jZU9iamVjdC0+aXNGZW5jZSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZB
TFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNGcmFtZWJ1ZmZlcihHTHVpbnQgZnJh
bWVidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgZnJhbWVidWZmZXIgPSAlZCkiLCBmcmFt
ZWJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQgJiYgZnJh
bWVidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0KLSAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxT
RTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkK
LXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQgJiYgcHJvZ3JhbSkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAg
IHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnlFWFQo
R0x1aW50IGlkKQotewotICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJWQpIiwgaWQpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdl
dFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAgICAgIGlmIChxdWVyeU9iamVj
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwot
ICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBn
bElzUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTHVp
bnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgcmVuZGVyYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCAmJiByZW5kZXJidWZmZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotCi0gICAgICAgICAgICBpZiAocmVuZGVyYnVm
ZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVF
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9G
QUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBz
aGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0ICYmIHNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hh
ZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlm
IChzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdM
X1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlks
IEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVh
biBfX3N0ZGNhbGwgZ2xJc1RleHR1cmUoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgRVZFTlQoIihH
THVpbnQgdGV4dHVyZSA9ICVkKSIsIHRleHR1cmUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0ICYmIHRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpU
ZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQot
ICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsTGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpCi17Ci0gICAg
RVZFTlQoIihHTGZsb2F0IHdpZHRoID0gJWYpIiwgd2lkdGgpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAod2lkdGggPD0gMC4wZikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0TGluZVdpZHRoKHdpZHRo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbExpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIEVWRU5UKCIo
R0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmxp
bmsoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbFBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pCi17
Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCBwYXJhbSA9ICVkKSIsIHBu
YW1lLCBwYXJhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgICAgICAgICBpZiAo
cGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAyICYmIHBhcmFtICE9IDQgJiYgcGFyYW0gIT0gOCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRVbnBhY2tBbGlnbm1lbnQocGFyYW0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6Ci0gICAgICAgICAgICAgICAgaWYg
KHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJhbSAhPSA0ICYmIHBhcmFtICE9IDgpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0UGFja0FsaWdubWVudChwYXJhbSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOgotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFBhY2tSZXZlcnNlUm93T3JkZXIocGFyYW0gIT0gMCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbFBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpCi17Ci0g
ICAgRVZFTlQoIihHTGZsb2F0IGZhY3RvciA9ICVmLCBHTGZsb2F0IHVuaXRzID0gJWYpIiwgZmFj
dG9yLCB1bml0cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRQYXJhbXMoZmFj
dG9yLCB1bml0cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkblBpeGVsc0VYVChHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgYnVmU2l6ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x2b2lkICpkYXRhKQotewotICAgIEVWRU5UKCIo
R0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBo
ZWlnaHQgPSAlZCwgIgotICAgICAgICAgICJHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5
cGUgPSAweCVYLCBHTHNpemVpIGJ1ZlNpemUgPSAweCVkLCBHTHZvaWQgKmRhdGEgPSAweCUwLjhw
KSIsCi0gICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBidWZTaXpl
LCBkYXRhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwIHx8IGJ1ZlNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkUmVh
ZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAmYnVmU2l6ZSwgZGF0YSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHZvaWQqIHBpeGVscykKLXsKLSAgICBFVkVOVCgiKEdMaW50IHggPSAlZCwgR0xpbnQg
eSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAg
ICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgR0x2b2lkKiBw
aXhlbHMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCAgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHdpZHRoIDwg
MCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkUmVhZEZvcm1h
dFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBOVUxMLCBwaXhlbHMpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUmVsZWFz
ZVNoYWRlckNvbXBpbGVyKHZvaWQpCi17Ci0gICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGdsOjpTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpOwotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIHNhbXBsZXMgPSAlZCwgR0xl
bnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhl
aWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVI6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVu
ZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShpbnRlcm5h
bGZvcm1hdCkgJiYgIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNp
b24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtUmVu
ZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICBzYW1wbGVzID4gY29udGV4
dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgR0x1aW50IGhhbmRsZSA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgp
OwotICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6OkRlcHRoYnVmZmVyKHdpZHRo
LCBoZWlnaHQsIHNhbXBsZXMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I4X09FUzoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6OkNvbG9yYnVmZmVyKHdpZHRoLCBoZWln
aHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6OlN0ZW5jaWxidWZmZXIod2lkdGgs
IGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgs
IGhlaWdodCwgc2FtcGxlcykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFy
Z2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQotewotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUodGFyZ2V0LCAw
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
U2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAg
RVZFTlQoIihHTGNsYW1wZiB2YWx1ZSA9ICVmLCBHTGJvb2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFs
dWUsIGludmVydCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0KiBjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKGds
OjpjbGFtcDAxKHZhbHVlKSwgaW52ZXJ0ID09IEdMX1RSVUUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2V0RmVuY2VO
VihHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24pCi17Ci0gICAgRVZFTlQoIihHTHVpbnQg
ZmVuY2UgPSAlZCwgR0xlbnVtIGNvbmRpdGlvbiA9IDB4JVgpIiwgZmVuY2UsIGNvbmRpdGlvbik7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb25kaXRpb24gIT0gR0xfQUxMX0NPTVBM
RVRFRF9OVikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVu
Y2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmZW5jZU9iamVjdC0+c2V0RmVuY2UoY29uZGl0
aW9uKTsgICAgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xTY2lzc29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5UKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5
ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCogY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lzc29yUGFyYW1zKHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBz
aGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXpl
aSBsZW5ndGgpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBz
aGFkZXJzID0gMHglMC44cCwgR0xlbnVtIGJpbmFyeWZvcm1hdCA9IDB4JVgsICIKLSAgICAgICAg
ICAiY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhwLCBHTHNpemVpIGxlbmd0aCA9ICVkKSIs
Ci0gICAgICAgICAgbiwgc2hhZGVycywgYmluYXJ5Zm9ybWF0LCBiaW5hcnksIGxlbmd0aCk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIC8vIE5vIGJpbmFyeSBzaGFkZXIgZm9ybWF0cyBhcmUg
c3VwcG9ydGVkLgotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJT
b3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5n
LCBjb25zdCBHTGludCogbGVuZ3RoKQotewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVk
LCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNv
bnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhwKSIsCi0gICAgICAgICAgc2hhZGVyLCBjb3VudCwg
c3RyaW5nLCBsZW5ndGgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVy
KTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNo
YWRlck9iamVjdC0+c2V0U291cmNlKGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xT
dGVuY2lsRnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzaykKLXsKLSAgICBn
bFN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIGZ1bmMsIHJlZiwgbWFzayk7
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwg
R0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCi17Ci0gICAgRVZFTlQoIihHTGVu
dW0gZmFjZSA9IDB4JVgsIEdMZW51bSBmdW5jID0gMHglWCwgR0xpbnQgcmVmID0gJWQsIEdMdWlu
dCBtYXNrID0gJWQpIiwgZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9O
VDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRf
QkFDSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3
aXRjaCAoZnVuYykKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfTkVWRVI6Ci0gICAgICAg
ICAgY2FzZSBHTF9BTFdBWVM6Ci0gICAgICAgICAgY2FzZSBHTF9MRVNTOgotICAgICAgICAgIGNh
c2UgR0xfTEVRVUFMOgotICAgICAgICAgIGNhc2UgR0xfRVFVQUw6Ci0gICAgICAgICAgY2FzZSBH
TF9HRVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgotICAgICAgICAgIGNhc2UgR0xf
Tk9URVFVQUw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9G
Uk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNLKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09
IEdMX0ZST05UX0FORF9CQUNLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFN0ZW5jaWxCYWNrUGFyYW1zKGZ1bmMsIHJlZiwgbWFzayk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xTdGVuY2lsTWFzayhHTHVpbnQgbWFzaykKLXsKLSAgICBnbFN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIG1hc2spOwotfQotCi12b2lkIF9fc3RkY2FsbCBn
bFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKQotewotICAgIEVW
RU5UKCIoR0xlbnVtIGZhY2UgPSAweCVYLCBHTHVpbnQgbWFzayA9ICVkKSIsIGZhY2UsIG1hc2sp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGZhY2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICAgIGNhc2UgR0xfQkFDSzoKLSAgICAgICAg
ICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsV3JpdGVtYXNrKG1h
c2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8
IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tXcml0ZW1hc2sobWFzayk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xTdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpw
YXNzKQotewotICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIGZhaWws
IHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE9wU2VwYXJhdGUo
R0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcykKLXsK
LSAgICBFVkVOVCgiKEdMZW51bSBmYWNlID0gMHglWCwgR0xlbnVtIGZhaWwgPSAweCVYLCBHTGVu
dW0gemZhaWwgPSAweCVYLCBHTGVudW0genBhcyA9IDB4JVhzKSIsCi0gICAgICAgICAgZmFjZSwg
ZmFpbCwgemZhaWwsIHpwYXNzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChm
YWNlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgICBjYXNl
IEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZmFpbCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNlIEdMX0tFRVA6Ci0g
ICAgICAgICAgY2FzZSBHTF9SRVBMQUNFOgotICAgICAgICAgIGNhc2UgR0xfSU5DUjoKLSAgICAg
ICAgICBjYXNlIEdMX0RFQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9JTkNSX1dSQVA6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHpmYWlsKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9aRVJPOgotICAgICAgICAgIGNhc2UgR0xfS0VF
UDoKLSAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSOgot
ICAgICAgICAgIGNhc2UgR0xfREVDUjoKLSAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKLSAgICAg
ICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKLSAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoenBh
c3MpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBH
TF9LRUVQOgotICAgICAgICAgIGNhc2UgR0xfUkVQTEFDRToKLSAgICAgICAgICBjYXNlIEdMX0lO
Q1I6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSOgotICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgot
ICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgotICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQ
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwg
ZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTdGVuY2lsT3BlcmF0aW9ucyhmYWlsLCB6ZmFpbCwgenBhc3MpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0g
R0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
R0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5WKEdMdWludCBmZW5jZSkKLXsKLSAgICBF
VkVOVCgiKEdMdWludCBmZW5jZSA9ICVkKSIsIGZlbmNlKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKLQotICAgICAgICAgICAgaWYg
KGZlbmNlT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIGZlbmNlT2JqZWN0LT50ZXN0RmVuY2UoKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEdMX1RSVUU7Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQotewotICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IGludGVybmFsZm9ybWF0ID0g
JWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgotICAgICAgICAg
ICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0g
MHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHglMC44cCkiLAotICAgICAgICAgIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdl
U2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnRl
cm5hbGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
dmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQot
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gKyA8dHlwZT4gY29tYmluYXRpb25z
Ci0gICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0PiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAg
ICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5W
QUxJRF9PUEVSQVRJT04KLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9B
VF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAv
LyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwot
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJyZWFr
OyAKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdl
dE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1h
eGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAg
IGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVs
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRo
ICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5z
aW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0
LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBw
b3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEgYW5kIG11bHRpcGxlIGxldmVscywKLSAgICAgICAgICAg
ICAgICAvLyBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAotICAgICAgICAgICAgICAg
IGlmIChwaXhlbHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5
cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZVBvc1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1kobGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBp
eGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBj
b250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0pCi17Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChH
TGludClwYXJhbSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZnYoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbXMpCi17Ci0gICAgZ2xU
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIChHTGludCkqcGFyYW1zKTsKLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0
V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFt
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5z
ZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3Qg
R0xpbnQqIHBhcmFtcykKLXsKLSAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKnBh
cmFtcyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
c2l6ZWkgbGV2ZWxzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkg
d2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAotICAgICAgICAgICB0YXJnZXQsIGxl
dmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQgJiYgdGFyZ2V0ICE9IEdMX1RFWFRV
UkVfQ1VCRV9NQVApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoIDwgMSB8fCBoZWlnaHQg
PCAxIHx8IGxldmVscyA8IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
VEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsZXZlbHMgIT0gMSAmJiBsZXZlbHMgIT0gZ2w6OmxvZzIoc3RkOjptYXgod2lkdGgsIGhl
aWdodCkpICsgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6
RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIEdMZW51bSB0eXBlID0gZ2w6
OkV4dHJhY3RUeXBlKGludGVybmFsZm9ybWF0KTsKLQotICAgICAgICBpZiAoZm9ybWF0ID09IEdM
X05PTkUgfHwgdHlwZSA9PSBHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYg
KHdpZHRoID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSB8fAotICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lv
bigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAg
ICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lv
bigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IGNvbnRleHQtPmdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxICYmICFjb250ZXh0LT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWdsOjppc1Bv
dzIod2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQ1
VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMzJG
X0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQkExNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZG
X0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1
cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVw
dGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKLSAgICAgICAgICAgICAg
ICBpZiAobGV2ZWxzICE9IDEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9
PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgpID09IDApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0lt
bXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0ID09
IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
LQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgpID09IDApCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50
IHlvZmZzZXQgPSAlZCwgIgotICAgICAgICAgICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkg
aGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsICIK
LSAgICAgICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCi0gICAgICAgICAg
IHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwg
PCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVp
Pjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVp
Pjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNo
ZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuOyAvLyBlcnJvciBpcyBzZXQgYnkgaGVscGVyIGZ1bmN0aW9uCi0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2
ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0ZMT0FUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRp
bmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMg
PT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQ
YXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZv
cm1hdCwgdGV4dHVyZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJl
KGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIHRleHR1cmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4
ZWxzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KQotewot
ICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgMSwgJngpOwotfQotCi12b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQq
IHYpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwot
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5n
ZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkKLXsKLSAgICBn
bFVuaWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKLXsK
LSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29u
c3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChs
b2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlBy
b2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFt
QmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3Jt
MWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCi17Ci0g
ICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsKLQotICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwg
MSwgKEdMZmxvYXQqKSZ4eSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBFVkVO
VCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9h
dCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpCi17Ci0gICAg
R0xpbnQgeHlbNF0gPSB7eCwgeX07Ci0KLSAgICBnbFVuaWZvcm0yaXYobG9jYXRpb24sIDEsIChH
TGludCopJnh5KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUw
LjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0p
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZihHTGlu
dCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKLXsKLSAgICBHTGZs
b2F0IHh5elszXSA9IHt4LCB5LCB6fTsKLQotICAgIGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgMSwg
KEdMZmxvYXQqKSZ4eXopOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0
aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0zaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeikKLXsKLSAgICBH
TGludCB4eXpbM10gPSB7eCwgeSwgen07Ci0KLSAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEs
IChHTGludCopJnh5eik7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCi17Ci0gICAgRVZFTlQoIihH
TGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0g
MHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGYo
R0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQg
dykKLXsKLSAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBnbFVuaWZv
cm00ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6dyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7
Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm00ZnYobG9jYXRpb24sIGNvdW50LCB2KSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5
LCBHTGludCB6LCBHTGludCB3KQotewotICAgIEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307
Ci0KLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIDEsIChHTGludCopJnh5encpOwotfQotCi12
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50KiB2KQotewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNv
dW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQ
cm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUp
Ci17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhw
KSIsCi0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFM
U0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwg
dmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4
M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZs
b2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8
IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnko
KTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQotewotICAgIEVWRU5UKCIo
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNw
b3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGxv
Y2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0o
KTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3Jh
bS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsK
LSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0gIT0gMCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRl
eHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50
IHByb2dyYW0pCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0p
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dy
YW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJp
YjFmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4
ID0gJWQsIEdMZmxvYXQgeCA9ICVmKSIsIGluZGV4LCB4KTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmdihHTHVpbnQgaW5kZXgs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVk
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIDAsIDAsIDEgfTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0
ZXhBdHRyaWIyZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQotewotICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZiki
LCBpbmRleCwgeCwgeSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEg
fTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1
ZXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFs
dWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0
XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihH
THVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBH
TGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNb
NF0gPSB7IHgsIHksIHosIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
Y29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwg
MSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0
IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0g
JWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xmbG9hdCB6ID0gJWYsIEdMZmxv
YXQgdyA9ICVmKSIsIGluZGV4LCB4LCB5LCB6LCB3KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0
XSA9IHsgeCwgeSwgeiwgdyB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmli
KGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmdihHTHVpbnQgaW5kZXgsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1ZXMpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVy
dGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCi17Ci0g
ICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0x1aW50IGRpdmlzb3IgPSAlZCkiLCBpbmRl
eCwgZGl2aXNvcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGlu
ZGV4LCBkaXZpc29yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGluZGV4
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkg
c3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9
ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgIgotICAgICAgICAgICJH
TGJvb2xlYW4gbm9ybWFsaXplZCA9ICVkLCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZv
aWQqIHB0ciA9IDB4JTAuOHApIiwKLSAgICAgICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBwdHIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNpemUg
PCAxIHx8IHNpemUgPiA0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgotICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNv
bnRleHQtPmdldEFycmF5QnVmZmVyKCksIHNpemUsIHR5cGUsIChub3JtYWxpemVkID09IEdMX1RS
VUUpLCBzdHJpZGUsIHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWaWV3cG9ydChHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBFVkVOVCgiKEdMaW50IHggPSAl
ZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQp
IiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh3
aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Vmlld3BvcnRQYXJhbXMoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVidWZmZXJBTkdMRShHTGludCBz
cmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAs
IEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKLXsK
LSAgICBFVkVOVCgiKEdMaW50IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNy
Y1gxID0gJWQsIEdMaW50IHNyY1kxID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgZHN0WDAgPSAl
ZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwg
IgotICAgICAgICAgICJHTGJpdGZpZWxkIG1hc2sgPSAweCVYLCBHTGVudW0gZmlsdGVyID0gMHgl
WCkiLAotICAgICAgICAgIHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAs
IGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChmaWx0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG1hc2sg
JiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBU
SF9CVUZGRVJfQklUKSkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNyY1gxIC0gc3Jj
WDAgIT0gZHN0WDEgLSBkc3RYMCB8fCBzcmNZMSAtIHNyY1kwICE9IGRzdFkxIC0gZHN0WTApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2NhbGluZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZy
YW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IGNvbnRleHQtPmdldERyYXdGcmFt
ZWJ1ZmZlckhhbmRsZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxp
dHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzayk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFn
ZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgs
ICIKLSAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBH
THNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCAiCi0gICAgICAgICAgIkdMZW51
bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JXgsIGNvbnN0IEdMdm9pZCogcGl4ZWxz
ID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFByb2dy
YW1CaW5hcnlPRVMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gKmJpbmFy
eUZvcm1hdCwgdm9pZCAqYmluYXJ5KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAw
eCVYLCBidWZTaXplID0gJXMsIGxlbmd0aCA9IDB4JTAuOHAsIGJpbmFyeUZvcm1hdCA9IDB4JTAu
OHAsIGJpbmFyeSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5n
dGgsIGJpbmFyeUZvcm1hdCwgYmluYXJ5KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9n
cmFtQmluYXJ5KCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqYmluYXJ5Rm9ybWF0ID0gR0xfUFJPR1JB
TV9CSU5BUllfQU5HTEU7Ci0KLSAgICAgICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xQ
cm9ncmFtQmluYXJ5T0VTKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQg
bGVuZ3RoKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHByb2dyYW0gPSAweCVYLCBiaW5hcnlGb3Jt
YXQgPSAweCV4LCBiaW5hcnkgPSAweCUwLjhwLCBsZW5ndGggPSAlZCkiLAotICAgICAgICAgIHBy
b2dyYW0sIGJpbmFyeUZvcm1hdCwgYmluYXJ5LCBsZW5ndGgpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYmluYXJ5
Rm9ybWF0ICE9IEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRQcm9n
cmFtQmluYXJ5KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLV9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRj
YWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpCi17Ci0gICAgc3RydWN0
IEV4dGVuc2lvbgotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKLSAgICAgICAgX19l
Z2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOwotICAgIH07Ci0K
LSAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9uc1tdID0KLSAgICB7Ci0gICAg
ICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKLSAgICAgICAgeyJnbEJsaXRGcmFtZWJ1ZmZlckFO
R0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xCbGl0RnJh
bWVidWZmZXJBTkdMRX0sCi0gICAgICAgIHsiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEV9LAotICAgICAgICB7ImdsRGVsZXRlRmVu
Y2VzTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERlbGV0
ZUZlbmNlc05WfSwKLSAgICAgICAgeyJnbEdlbkZlbmNlc05WIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5GZW5jZXNOVn0sCi0gICAgICAgIHsiZ2xJc0Zl
bmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbElzRmVu
Y2VOVn0sCi0gICAgICAgIHsiZ2xUZXN0RmVuY2VOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsVGVzdEZlbmNlTlZ9LAotICAgICAgICB7ImdsR2V0RmVuY2Vp
dk5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRGZW5j
ZWl2TlZ9LAotICAgICAgICB7ImdsRmluaXNoRmVuY2VOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9w
ZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRmluaXNoRmVuY2VOVn0sCi0gICAgICAgIHsiZ2xTZXRG
ZW5jZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xTZXRG
ZW5jZU5WfSwKLSAgICAgICAgeyJnbEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFfSwKLSAgICAgICAgeyJnbFRleFN0b3JhZ2UyREVYVCIsIChfX2VnbE11
c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGV4U3RvcmFnZTJERVhUfSwKLSAg
ICAgICAgeyJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFR9LAotICAg
ICAgICB7ImdsUmVhZG5QaXhlbHNFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbFJlYWRuUGl4ZWxzRVhUfSwKLSAgICAgICAgeyJnbEdldG5Vbmlmb3JtZnZF
WFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldG5Vbmlm
b3JtZnZFWFR9LAotICAgICAgICB7ImdsR2V0blVuaWZvcm1pdkVYVCIsIChfX2VnbE11c3RDYXN0
VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0blVuaWZvcm1pdkVYVH0sCi0gICAgICAg
IHsiZ2xHZW5RdWVyaWVzRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUpZ2xHZW5RdWVyaWVzRVhUfSwKLSAgICAgICAgeyJnbERlbGV0ZVF1ZXJpZXNFWFQiLCAo
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERlbGV0ZVF1ZXJpZXNF
WFR9LAotICAgICAgICB7ImdsSXNRdWVyeUVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5j
dGlvblBvaW50ZXJUeXBlKWdsSXNRdWVyeUVYVH0sCi0gICAgICAgIHsiZ2xCZWdpblF1ZXJ5RVhU
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xCZWdpblF1ZXJ5
RVhUfSwKLSAgICAgICAgeyJnbEVuZFF1ZXJ5RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xFbmRRdWVyeUVYVH0sCi0gICAgICAgIHsiZ2xHZXRRdWVyeWl2
RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRRdWVy
eWl2RVhUfSwKLSAgICAgICAgeyJnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRRdWVyeU9iamVjdHVpdkVYVH0sCi0g
ICAgICAgIHsiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRX0sCi0gICAg
ICAgIHsiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRX0sCi0gICAgICAg
IHsiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEV9LAotICAgICAg
ICB7ImdsR2V0UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlKWdsR2V0UHJvZ3JhbUJpbmFyeU9FU30sCi0gICAgICAgIHsiZ2xQcm9ncmFt
QmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQ
cm9ncmFtQmluYXJ5T0VTfSwgICAgfTsKLQotICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNp
emVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQotICAgIHsKLSAg
ICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZ2xFeHRlbnNpb25zW2V4dF0ubmFtZSkgPT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5j
dGlvblBvaW50ZXJUeXBlKWdsRXh0ZW5zaW9uc1tleHRdLmFkZHJlc3M7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLy8gTm9uLXB1YmxpYyBmdW5jdGlvbnMgdXNl
ZCBieSBFR0wKLQotYm9vbCBfX3N0ZGNhbGwgZ2xCaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpz
dXJmYWNlKQotewotICAgIEVWRU5UKCIoZWdsOjpTdXJmYWNlKiBzdXJmYWNlID0gMHglMC44cCki
LAotICAgICAgICAgIHN1cmZhY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJl
T2JqZWN0LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVPYmpl
Y3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZU9iamVjdC0+YmluZFRl
eEltYWdlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmRlZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRl
ZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE3NzY5Yi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKKysrIC9k
ZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotTElCUkFSWSBsaWJHTEVTdjIKLUVYUE9SVFMKLSAg
ICBnbEFjdGl2ZVRleHR1cmUgICAgICAgICAgICAgICAgIEAxCi0gICAgZ2xBdHRhY2hTaGFkZXIg
ICAgICAgICAgICAgICAgICBAMgotICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uICAgICAgICAgICAg
QDMKLSAgICBnbEJpbmRCdWZmZXIgICAgICAgICAgICAgICAgICAgIEA0Ci0gICAgZ2xCaW5kRnJh
bWVidWZmZXIgICAgICAgICAgICAgICBANQotICAgIGdsQmluZFJlbmRlcmJ1ZmZlciAgICAgICAg
ICAgICAgQDYKLSAgICBnbEJpbmRUZXh0dXJlICAgICAgICAgICAgICAgICAgIEA3Ci0gICAgZ2xC
bGVuZENvbG9yICAgICAgICAgICAgICAgICAgICBAOAotICAgIGdsQmxlbmRFcXVhdGlvbiAgICAg
ICAgICAgICAgICAgQDkKLSAgICBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAgICAgICAgIEAxMAot
ICAgIGdsQmxlbmRGdW5jICAgICAgICAgICAgICAgICAgICAgQDExCi0gICAgZ2xCbGVuZEZ1bmNT
ZXBhcmF0ZSAgICAgICAgICAgICBAMTIKLSAgICBnbEJ1ZmZlckRhdGEgICAgICAgICAgICAgICAg
ICAgIEAxMwotICAgIGdsQnVmZmVyU3ViRGF0YSAgICAgICAgICAgICAgICAgQDE0Ci0gICAgZ2xD
aGVja0ZyYW1lYnVmZmVyU3RhdHVzICAgICAgICBAMTUKLSAgICBnbENsZWFyICAgICAgICAgICAg
ICAgICAgICAgICAgIEAxNgotICAgIGdsQ2xlYXJDb2xvciAgICAgICAgICAgICAgICAgICAgQDE3
Ci0gICAgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAgICAgICBAMTgKLSAgICBnbENsZWFyU3Rl
bmNpbCAgICAgICAgICAgICAgICAgIEAxOQotICAgIGdsQ29sb3JNYXNrICAgICAgICAgICAgICAg
ICAgICAgQDIwCi0gICAgZ2xDb21waWxlU2hhZGVyICAgICAgICAgICAgICAgICBAMjEKLSAgICBn
bENvbXByZXNzZWRUZXhJbWFnZTJEICAgICAgICAgIEAyMgotICAgIGdsQ29tcHJlc3NlZFRleFN1
YkltYWdlMkQgICAgICAgQDIzCi0gICAgZ2xDb3B5VGV4SW1hZ2UyRCAgICAgICAgICAgICAgICBA
MjQKLSAgICBnbENvcHlUZXhTdWJJbWFnZTJEICAgICAgICAgICAgIEAyNQotICAgIGdsQ3JlYXRl
UHJvZ3JhbSAgICAgICAgICAgICAgICAgQDI2Ci0gICAgZ2xDcmVhdGVTaGFkZXIgICAgICAgICAg
ICAgICAgICBAMjcKLSAgICBnbEN1bGxGYWNlICAgICAgICAgICAgICAgICAgICAgIEAyOAotICAg
IGdsRGVsZXRlQnVmZmVycyAgICAgICAgICAgICAgICAgQDI5Ci0gICAgZ2xEZWxldGVGcmFtZWJ1
ZmZlcnMgICAgICAgICAgICBAMzAKLSAgICBnbERlbGV0ZVByb2dyYW0gICAgICAgICAgICAgICAg
IEAzMgotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAgICAgICAgICAgQDMzCi0gICAgZ2xEZWxl
dGVTaGFkZXIgICAgICAgICAgICAgICAgICBAMzQKLSAgICBnbERlbGV0ZVRleHR1cmVzICAgICAg
ICAgICAgICAgIEAzMQotICAgIGdsRGVwdGhGdW5jICAgICAgICAgICAgICAgICAgICAgQDM2Ci0g
ICAgZ2xEZXB0aE1hc2sgICAgICAgICAgICAgICAgICAgICBAMzcKLSAgICBnbERlcHRoUmFuZ2Vm
ICAgICAgICAgICAgICAgICAgIEAzOAotICAgIGdsRGV0YWNoU2hhZGVyICAgICAgICAgICAgICAg
ICAgQDM1Ci0gICAgZ2xEaXNhYmxlICAgICAgICAgICAgICAgICAgICAgICBAMzkKLSAgICBnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgIEA0MAotICAgIGdsRHJhd0FycmF5cyAgICAgICAg
ICAgICAgICAgICAgQDQxCi0gICAgZ2xEcmF3RWxlbWVudHMgICAgICAgICAgICAgICAgICBANDIK
LSAgICBnbEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgIEA0MwotICAgIGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkgICAgICAgQDQ0Ci0gICAgZ2xGaW5pc2ggICAgICAgICAgICAgICAgICAg
ICAgICBANDUKLSAgICBnbEZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgIEA0NgotICAgIGds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIgICAgICAgQDQ3Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRCAgICAgICAgICBANDgKLSAgICBnbEZyb250RmFjZSAgICAgICAgICAgICAgICAgICAgIEA0
OQotICAgIGdsR2VuQnVmZmVycyAgICAgICAgICAgICAgICAgICAgQDUwCi0gICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnMgICAgICAgICAgICAgICBANTIKLSAgICBnbEdlblJlbmRlcmJ1ZmZlcnMgICAgICAg
ICAgICAgIEA1MwotICAgIGdsR2VuVGV4dHVyZXMgICAgICAgICAgICAgICAgICAgQDU0Ci0gICAg
Z2xHZW5lcmF0ZU1pcG1hcCAgICAgICAgICAgICAgICBANTEKLSAgICBnbEdldEFjdGl2ZUF0dHJp
YiAgICAgICAgICAgICAgIEA1NQotICAgIGdsR2V0QWN0aXZlVW5pZm9ybSAgICAgICAgICAgICAg
QDU2Ci0gICAgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgICAgICAgICAgICBANTcKLSAgICBnbEdldEF0
dHJpYkxvY2F0aW9uICAgICAgICAgICAgIEA1OAotICAgIGdsR2V0Qm9vbGVhbnYgICAgICAgICAg
ICAgICAgICAgQDU5Ci0gICAgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiAgICAgICAgICBANjAKLSAg
ICBnbEdldEVycm9yICAgICAgICAgICAgICAgICAgICAgIEA2MQotICAgIGdsR2V0RmxvYXR2ICAg
ICAgICAgICAgICAgICAgICAgQDYyCi0gICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdiAgIEA2MwotICAgIGdsR2V0SW50ZWdlcnYgICAgICAgICAgICAgICAgICAgQDY0Ci0g
ICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyAgICAgICAgICAgICBANjYKLSAgICBnbEdldFByb2dyYW1p
diAgICAgICAgICAgICAgICAgIEA2NQotICAgIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYg
ICAgQDY3Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nICAgICAgICAgICAgICBANjkKLSAgICBnbEdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdCAgICAgIEA3MAotICAgIGdsR2V0U2hhZGVyU291cmNlICAg
ICAgICAgICAgICAgQDcxCi0gICAgZ2xHZXRTaGFkZXJpdiAgICAgICAgICAgICAgICAgICBANjgK
LSAgICBnbEdldFN0cmluZyAgICAgICAgICAgICAgICAgICAgIEA3MgotICAgIGdsR2V0VGV4UGFy
YW1ldGVyZnYgICAgICAgICAgICAgQDczCi0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJpdiAgICAgICAg
ICAgICBANzQKLSAgICBnbEdldFVuaWZvcm1Mb2NhdGlvbiAgICAgICAgICAgIEA3NwotICAgIGds
R2V0VW5pZm9ybWZ2ICAgICAgICAgICAgICAgICAgQDc1Ci0gICAgZ2xHZXRVbmlmb3JtaXYgICAg
ICAgICAgICAgICAgICBANzYKLSAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2ICAgICAgIEA4
MAotICAgIGdsR2V0VmVydGV4QXR0cmliZnYgICAgICAgICAgICAgQDc4Ci0gICAgZ2xHZXRWZXJ0
ZXhBdHRyaWJpdiAgICAgICAgICAgICBANzkKLSAgICBnbEhpbnQgICAgICAgICAgICAgICAgICAg
ICAgICAgIEA4MQotICAgIGdsSXNCdWZmZXIgICAgICAgICAgICAgICAgICAgICAgQDgyCi0gICAg
Z2xJc0VuYWJsZWQgICAgICAgICAgICAgICAgICAgICBAODMKLSAgICBnbElzRnJhbWVidWZmZXIg
ICAgICAgICAgICAgICAgIEA4NAotICAgIGdsSXNQcm9ncmFtICAgICAgICAgICAgICAgICAgICAg
QDg1Ci0gICAgZ2xJc1JlbmRlcmJ1ZmZlciAgICAgICAgICAgICAgICBAODYKLSAgICBnbElzU2hh
ZGVyICAgICAgICAgICAgICAgICAgICAgIEA4NwotICAgIGdsSXNUZXh0dXJlICAgICAgICAgICAg
ICAgICAgICAgQDg4Ci0gICAgZ2xMaW5lV2lkdGggICAgICAgICAgICAgICAgICAgICBAODkKLSAg
ICBnbExpbmtQcm9ncmFtICAgICAgICAgICAgICAgICAgIEA5MAotICAgIGdsUGl4ZWxTdG9yZWkg
ICAgICAgICAgICAgICAgICAgQDkxCi0gICAgZ2xQb2x5Z29uT2Zmc2V0ICAgICAgICAgICAgICAg
ICBAOTIKLSAgICBnbFJlYWRQaXhlbHMgICAgICAgICAgICAgICAgICAgIEA5MwotICAgIGdsUmVs
ZWFzZVNoYWRlckNvbXBpbGVyICAgICAgICAgQDk0Ci0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdl
ICAgICAgICAgICBAOTUKLSAgICBnbFNhbXBsZUNvdmVyYWdlICAgICAgICAgICAgICAgIEA5Ngot
ICAgIGdsU2Npc3NvciAgICAgICAgICAgICAgICAgICAgICAgQDk3Ci0gICAgZ2xTaGFkZXJCaW5h
cnkgICAgICAgICAgICAgICAgICBAOTgKLSAgICBnbFNoYWRlclNvdXJjZSAgICAgICAgICAgICAg
ICAgIEA5OQotICAgIGdsU3RlbmNpbEZ1bmMgICAgICAgICAgICAgICAgICAgQDEwMAotICAgIGds
U3RlbmNpbEZ1bmNTZXBhcmF0ZSAgICAgICAgICAgQDEwMQotICAgIGdsU3RlbmNpbE1hc2sgICAg
ICAgICAgICAgICAgICAgQDEwMgotICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZSAgICAgICAgICAg
QDEwMwotICAgIGdsU3RlbmNpbE9wICAgICAgICAgICAgICAgICAgICAgQDEwNAotICAgIGdsU3Rl
bmNpbE9wU2VwYXJhdGUgICAgICAgICAgICAgQDEwNQotICAgIGdsVGV4SW1hZ2UyRCAgICAgICAg
ICAgICAgICAgICAgQDEwNgotICAgIGdsVGV4UGFyYW1ldGVyZiAgICAgICAgICAgICAgICAgQDEw
NwotICAgIGdsVGV4UGFyYW1ldGVyZnYgICAgICAgICAgICAgICAgQDEwOAotICAgIGdsVGV4UGFy
YW1ldGVyaSAgICAgICAgICAgICAgICAgQDEwOQotICAgIGdsVGV4UGFyYW1ldGVyaXYgICAgICAg
ICAgICAgICAgQDExMAotICAgIGdsVGV4U3ViSW1hZ2UyRCAgICAgICAgICAgICAgICAgQDExMQot
ICAgIGdsVW5pZm9ybTFmICAgICAgICAgICAgICAgICAgICAgQDExMgotICAgIGdsVW5pZm9ybTFm
diAgICAgICAgICAgICAgICAgICAgQDExMwotICAgIGdsVW5pZm9ybTFpICAgICAgICAgICAgICAg
ICAgICAgQDExNAotICAgIGdsVW5pZm9ybTFpdiAgICAgICAgICAgICAgICAgICAgQDExNQotICAg
IGdsVW5pZm9ybTJmICAgICAgICAgICAgICAgICAgICAgQDExNgotICAgIGdsVW5pZm9ybTJmdiAg
ICAgICAgICAgICAgICAgICAgQDExNwotICAgIGdsVW5pZm9ybTJpICAgICAgICAgICAgICAgICAg
ICAgQDExOAotICAgIGdsVW5pZm9ybTJpdiAgICAgICAgICAgICAgICAgICAgQDExOQotICAgIGds
VW5pZm9ybTNmICAgICAgICAgICAgICAgICAgICAgQDEyMAotICAgIGdsVW5pZm9ybTNmdiAgICAg
ICAgICAgICAgICAgICAgQDEyMQotICAgIGdsVW5pZm9ybTNpICAgICAgICAgICAgICAgICAgICAg
QDEyMgotICAgIGdsVW5pZm9ybTNpdiAgICAgICAgICAgICAgICAgICAgQDEyMwotICAgIGdsVW5p
Zm9ybTRmICAgICAgICAgICAgICAgICAgICAgQDEyNAotICAgIGdsVW5pZm9ybTRmdiAgICAgICAg
ICAgICAgICAgICAgQDEyNQotICAgIGdsVW5pZm9ybTRpICAgICAgICAgICAgICAgICAgICAgQDEy
NgotICAgIGdsVW5pZm9ybTRpdiAgICAgICAgICAgICAgICAgICAgQDEyNwotICAgIGdsVW5pZm9y
bU1hdHJpeDJmdiAgICAgICAgICAgICAgQDEyOAotICAgIGdsVW5pZm9ybU1hdHJpeDNmdiAgICAg
ICAgICAgICAgQDEyOQotICAgIGdsVW5pZm9ybU1hdHJpeDRmdiAgICAgICAgICAgICAgQDEzMAot
ICAgIGdsVXNlUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgQDEzMQotICAgIGdsVmFsaWRhdGVQ
cm9ncmFtICAgICAgICAgICAgICAgQDEzMgotICAgIGdsVmVydGV4QXR0cmliMWYgICAgICAgICAg
ICAgICAgQDEzMwotICAgIGdsVmVydGV4QXR0cmliMWZ2ICAgICAgICAgICAgICAgQDEzNAotICAg
IGdsVmVydGV4QXR0cmliMmYgICAgICAgICAgICAgICAgQDEzNQotICAgIGdsVmVydGV4QXR0cmli
MmZ2ICAgICAgICAgICAgICAgQDEzNgotICAgIGdsVmVydGV4QXR0cmliM2YgICAgICAgICAgICAg
ICAgQDEzNwotICAgIGdsVmVydGV4QXR0cmliM2Z2ICAgICAgICAgICAgICAgQDEzOAotICAgIGds
VmVydGV4QXR0cmliNGYgICAgICAgICAgICAgICAgQDEzOQotICAgIGdsVmVydGV4QXR0cmliNGZ2
ICAgICAgICAgICAgICAgQDE0MAotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlciAgICAgICAgICAg
QDE0MQotICAgIGdsVmlld3BvcnQgICAgICAgICAgICAgICAgICAgICAgQDE0MgotCi0gICAgOyBF
eHRlbnNpb25zCi0gICAgZ2xUZXhJbWFnZTNET0VTICAgICAgICAgICAgICAgICBAMTQzCi0gICAg
Z2xCbGl0RnJhbWVidWZmZXJBTkdMRSAgICAgICAgICBAMTQ5Ci0gICAgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVBTkdMRSBAMTUwCi0gICAgZ2xEZWxldGVGZW5jZXNOViAgICAgICAg
ICAgICAgICBAMTUxCi0gICAgZ2xGaW5pc2hGZW5jZU5WICAgICAgICAgICAgICAgICBAMTUyCi0g
ICAgZ2xHZW5GZW5jZXNOViAgICAgICAgICAgICAgICAgICBAMTUzCi0gICAgZ2xHZXRGZW5jZWl2
TlYgICAgICAgICAgICAgICAgICBAMTU0Ci0gICAgZ2xJc0ZlbmNlTlYgICAgICAgICAgICAgICAg
ICAgICBAMTU1Ci0gICAgZ2xTZXRGZW5jZU5WICAgICAgICAgICAgICAgICAgICBAMTU2Ci0gICAg
Z2xUZXN0RmVuY2VOViAgICAgICAgICAgICAgICAgICBAMTU3Ci0gICAgZ2xHZXRUcmFuc2xhdGVk
U2hhZGVyU291cmNlQU5HTEUgQDE1OQotICAgIGdsVGV4U3RvcmFnZTJERVhUICAgICAgICAgICAg
ICAgQDE2MAotICAgIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCAgICAgQDE2MQotICAgIGds
UmVhZG5QaXhlbHNFWFQgICAgICAgICAgICAgICAgQDE2MgotICAgIGdsR2V0blVuaWZvcm1mdkVY
VCAgICAgICAgICAgICAgQDE2MwotICAgIGdsR2V0blVuaWZvcm1pdkVYVCAgICAgICAgICAgICAg
QDE2NAotICAgIGdsR2VuUXVlcmllc0VYVCAgICAgICAgICAgICAgICAgQDE2NQotICAgIGdsRGVs
ZXRlUXVlcmllc0VYVCAgICAgICAgICAgICAgQDE2NgotICAgIGdsSXNRdWVyeUVYVCAgICAgICAg
ICAgICAgICAgICAgQDE2NwotICAgIGdsQmVnaW5RdWVyeUVYVCAgICAgICAgICAgICAgICAgQDE2
OAotICAgIGdsRW5kUXVlcnlFWFQgICAgICAgICAgICAgICAgICAgQDE2OQotICAgIGdsR2V0UXVl
cnlpdkVYVCAgICAgICAgICAgICAgICAgQDE3MAotICAgIGdsR2V0UXVlcnlPYmplY3R1aXZFWFQg
ICAgICAgICAgQDE3MQotICAgIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFICAgICAgQDE3Mgot
ICAgIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFICAgICAgQDE3MwotICAgIGdsRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUgICAgQDE3NAotCi0gICAgOyBFR0wgZGVwZW5kZW5jaWVzCi0gICAg
Z2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBAMTQ0IE5PTkFNRQotICAgIGdsRGVzdHJv
eUNvbnRleHQgICAgICAgICAgICAgICAgQDE0NSBOT05BTUUKLSAgICBnbE1ha2VDdXJyZW50ICAg
ICAgICAgICAgICAgICAgIEAxNDYgTk9OQU1FCi0gICAgZ2xHZXRDdXJyZW50Q29udGV4dCAgICAg
ICAgICAgICBAMTQ3IE5PTkFNRQotICAgIGdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICAg
QDE0OCBOT05BTUUKLSAgICBnbEJpbmRUZXhJbWFnZSAgICAgICAgICAgICAgICAgIEAxNTggTk9O
QU1FCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xp
YkdMRVN2Mi5yYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xF
U3YyLnJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWQyMWU0Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCisr
KyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdl
bmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCi0vLwotI2luY2x1ZGUgInJlc291cmNlLmgiCi0KLSNk
ZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
Ci0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KLS8vCi0jaW5j
bHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiCi0KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0jdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCi0KLSNpZiAhZGVm
aW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKLSNpZmRlZiBf
V0lOMzIKLUxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCi0jcHJhZ21h
IGNvZGVfcGFnZSgxMjUyKQotI2VuZGlmIC8vX1dJTjMyCi0KLSNpZmRlZiBBUFNUVURJT19JTlZP
S0VECi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIFRFWFRJTkNMVURFCi0vLwotCi0xIFRF
WFRJTkNMVURFIAotQkVHSU4KLSAgICAicmVzb3VyY2UuaFwwIgotRU5ECi0KLTIgVEVYVElOQ0xV
REUgCi1CRUdJTgotICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgotICAgICIjaW5jbHVk
ZSAiIi4uL2NvbW1vbi92ZXJzaW9uLmgiIlwwIgotRU5ECi0KLTMgVEVYVElOQ0xVREUgCi1CRUdJ
TgotICAgICJcclxuIgotICAgICJcMCIKLUVORAotCi0jZW5kaWYgICAgLy8gQVBTVFVESU9fSU5W
T0tFRAotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gVmVyc2lvbgotLy8KLQotVlNf
VkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCi0gRklMRVZFUlNJT04gTUFKT1JfVkVSU0lPTixNSU5P
Ul9WRVJTSU9OLEJVSUxEX1ZFUlNJT04sQlVJTERfUkVWSVNJT04KLSBQUk9EVUNUVkVSU0lPTiBN
QUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTgot
IEZJTEVGTEFHU01BU0sgMHgxN0wKLSNpZmRlZiBfREVCVUcKLSBGSUxFRkxBR1MgMHgxTAotI2Vs
c2UKLSBGSUxFRkxBR1MgMHgwTAotI2VuZGlmCi0gRklMRU9TIDB4NEwKLSBGSUxFVFlQRSAweDJM
Ci0gRklMRVNVQlRZUEUgMHgwTAotQkVHSU4KLSAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCi0g
ICAgQkVHSU4KLSAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgotICAgICAgICBCRUdJTgotICAgICAg
ICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJHTEVTdjIgRHluYW1pYyBM
aW5rIExpYnJhcnkiCi0gICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBWRVJTSU9OX1NU
UklORwotICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJHTEVTdjIiCi0gICAg
ICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIgotICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliR0xFU3Yy
LmRsbCIKLSAgICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBWRVJTSU9OX1NUUklORwot
ICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWlj
IExpbmsgTGlicmFyeSIKLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFZFUlNJ
T05fU1RSSU5HCi0gICAgICAgIEVORAotICAgIEVORAotICAgIEJMT0NLICJWYXJGaWxlSW5mbyIK
LSAgICBCRUdJTgotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAotICAg
IEVORAotRU5ECi0KLSNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLQotCi0jaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVz
b3VyY2UuCi0vLwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jZW5kaWYgICAgLy8gbm90IEFQ
U1RVRElPX0lOVk9LRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDk3ZDRlOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2xpYkdMRVN2Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NjEgKzAsMCBAQAotPD94
bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Ci08VmlzdWFsU3R1ZGlv
UHJvamVjdAotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgotCVZlcnNpb249IjkuMDAiCi0JTmFt
ZT0ibGliR0xFU3YyIgotCVByb2plY3RHVUlEPSJ7QjU4NzFBN0EtOTY4Qy00MkUzLUEzM0ItOTgx
RTZGNDQ4RTc4fSIKLQlSb290TmFtZXNwYWNlPSJsaWJHTEVTdjIiCi0JS2V5d29yZD0iV2luMzJQ
cm9qIgotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiIKLQk+Ci0JPFBsYXRmb3Jtcz4K
LQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJXaW4zMiIKLQkJLz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1l
PSJ4NjQiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8L1Rvb2xGaWxlcz4K
LQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJEZWJ1Z3xXaW4z
MiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1l
KSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlD
b25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxE
YXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2Vydmlj
ZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9w
dGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2pl
Y3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29y
RGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9FWFBP
UlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5pbWFsUmVidWls
ZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9
IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0Igot
CQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0
NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIK
LQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvU0FG
RVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBEM2R4OS5saWIgZDNk
Y29tcGlsZXIubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKLQkJCQlNb2R1bGVEZWZpbml0
aW9uRmlsZT0ibGliR0xFU3YyLmRlZiIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRy
dWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJ
CQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERD
TWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
UG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBB
O21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlc
JnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmRsbCZxdW90
OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90
OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdMRVN2Mi5saWImcXVvdDsgJnF1
b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gw
RDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+
Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGly
ZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRp
YXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBl
PSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIx
IgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5z
aW9uPSIyIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikv
Li47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NS
VF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTAiCi0JCQkJUnVudGlt
ZUxpYnJhcnk9IjAiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xl
dmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5
OzQyNDQ7NDI0NTs0NTEyOzQ3MDI7NDcxOCIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJv
YmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCi0JCQkJV2FybkFz
RXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJj
ZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21w
aWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25h
bE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGli
IEQzZHg5LmxpYiBkM2Rjb21waWxlci5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIgotCQkJ
CUlnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM9ImZhbHNlIgotCQkJCU1vZHVsZURlZmluaXRpb25G
aWxlPSJsaWJHTEVTdjIuZGVmIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIK
LQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgotCQkJCUVuYWJs
ZUNPTURBVEZvbGRpbmc9IjIiCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURh
dGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjEiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtl
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0
QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtk
aXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVv
dDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAmcXVvdDsk
KFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYj
eDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJ
PENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfHg2NCIKLQkJCU91dHB1dERpcmVjdG9yeT0i
JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlJ
bnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1l
KSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNX
ZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNNSURMVG9vbCIKLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFk
ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERp
cikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RF
QlVHO19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQ
UkVDQVRFO05PTUlOTUFYIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVu
dGltZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxl
ZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2Fy
bmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4IgotCQkJ
CURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1h
dGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
TGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRp
b25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgRDNkeDkubGliIGQzZGNvbXBpbGVyLmxpYiIKLQkJ
CQlMaW5rSW5jcmVtZW50YWw9IjIiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2
Mi5kZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3Rl
bT0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblBy
ZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZl
c3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVy
aWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRv
b2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gw
QTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVj
dERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29w
eSAmcXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9m
ZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRp
b24KLQkJCU5hbWU9IlJlbGVhc2V8eDY0IgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9u
RGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0
ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29u
ZmlndXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQlXaG9sZVByb2dyYW1P
cHRpbWl6YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVu
dFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdldEVudmlyb25tZW50
PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlP
cHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiCi0JCQkJQWRk
aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGly
KS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVC
VUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBS
RUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9MCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMCIKLQkJ
CQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlz
YWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7
NDcwMjs0NzE4IgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0J
CQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVT
RUgiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgRDNkeDkubGliIGQzZGNv
bXBpbGVyLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJSWdub3JlQWxsRGVmYXVs
dExpYnJhcmllcz0iZmFsc2UiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5k
ZWYiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0i
MiIKLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0i
MiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZl
bnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RU
b29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZp
ZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wi
Ci0JCQkJQ29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtj
b3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERp
cikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAm
cXVvdDskKE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5c
Li5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYj
eDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25z
PgotCTxSZWZlcmVuY2VzPgotCTwvUmVmZXJlbmNlcz4KLQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJ
CU5hbWU9IlNvdXJjZSBGaWxlcyIKLQkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRs
O2hwajtiYXQ7YXNtO2FzbXgiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00
Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuXEJsaXQuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXEJ1ZmZlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cQ29udGV4dC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxkZWJ1Zy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRmVuY2UuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEZyYW1lYnVmZmVyLmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxIYW5kbGVBbGxvY2F0
b3IuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XEluZGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbS5jcHAiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUHJvZ3JhbUJpbmFyeS5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuY3BwIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25c
UmVmQ291bnRPYmplY3QuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VNYW5hZ2VyLmNwcCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTaGFkZXIuY3BwIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFRleHR1cmUuY3BwIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHV0aWxpdGll
cy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
VmVydGV4RGF0YU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0J
CTxGaWx0ZXIKLQkJCU5hbWU9IkhlYWRlciBGaWxlcyIKLQkJCUZpbHRlcj0iaDtocHA7aHh4O2ht
O2lubDtpbmM7eHNkIgotCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04
OEVCLTYyNUZCRTUyRUJGQn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxC
bGl0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
QnVmZmVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cQ29udGV4dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXEZlbmNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDIuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJl
eHQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEhhbmRsZUFsbG9jYXRvci5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEluZGV4RGF0YU1hbmFnZXIuaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWF0aHV0
aWwuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxQ
cm9ncmFtLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cUHJvZ3JhbUJpbmFyeS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXFF1ZXJ5LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxSZWZDb3VudE9iamVjdC5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHJlc291cmNlLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VN
YW5hZ2VyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cU2hhZGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii5cVGV4dHVyZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXHV0aWxpdGllcy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxjb21tb25cdmVyc2lvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXHZlcnRleGNvbnZlcnNpb24uaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxWZXJ0ZXhEYXRhTWFuYWdl
ci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2
ZVBhdGg9Ii5cbGliR0xFU3YyLmRlZiIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVs
YXRpdmVQYXRoPSIuXGxpYkdMRVN2Mi5yYyIKLQkJCT4KLQkJPC9GaWxlPgotCTwvRmlsZXM+Ci0J
PEdsb2JhbHM+Ci0JPC9HbG9iYWxzPgotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE1NGQyNzcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBtYWluLmNwcDogRExMIGVudHJ5IHBvaW50IGFu
ZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlICJj
b21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLXN0YXRpYyBEV09SRCBjdXJyZW50VExTID0gVExT
X09VVF9PRl9JTkRFWEVTOwotCi1CT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBpbnN0YW5j
ZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCi17Ci0gICAgc3dpdGNoIChyZWFzb24p
Ci0gICAgewotICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVu
dFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZh
bGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAotICAgICAgY2FzZSBETExfVEhSRUFEX0FU
VEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkN1cnJlbnQgKmN1cnJlbnQgPSAoZ2w6
OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGdsOjpDdXJyZW50KSk7Ci0KLSAgICAg
ICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRsc1Nl
dFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOwotCi0gICAgICAgICAgICAgICAgY3VycmVudC0+
Y29udGV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+ZGlzcGxheSA9IE5VTEw7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERM
TF9USFJFQURfREVUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0g
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBETExf
UFJPQ0VTU19ERVRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBU
bHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci12b2lkIG1ha2VDdXJy
ZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFs
dWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5jb250ZXh0ID0gY29udGV4dDsKLSAgICBj
dXJyZW50LT5kaXNwbGF5ID0gZGlzcGxheTsKLQotICAgIGlmIChjb250ZXh0ICYmIGRpc3BsYXkg
JiYgc3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPm1ha2VDdXJyZW50KGRpc3BsYXks
IHN1cmZhY2UpOwotICAgIH0KLX0KLQotQ29udGV4dCAqZ2V0Q29udGV4dCgpCi17Ci0gICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAg
IHJldHVybiBjdXJyZW50LT5jb250ZXh0OwotfQotCi1Db250ZXh0ICpnZXROb25Mb3N0Q29udGV4
dCgpCi17Ci0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAKLSAgICBp
ZiAoY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5pc0NvbnRleHRMb3N0KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gY29udGV4dDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
TlVMTDsKLX0KLQotZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCkKLXsKLSAgICBDdXJyZW50ICpj
dXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJu
IGN1cnJlbnQtPmRpc3BsYXk7Ci19Ci0KLUlEaXJlY3QzRERldmljZTkgKmdldERldmljZSgpCi17
Ci0gICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwotCi0gICAgcmV0dXJu
IGRpc3BsYXktPmdldERldmljZSgpOwotfQotCi1ib29sIGNoZWNrRGV2aWNlTG9zdChIUkVTVUxU
IGVycm9yQ29kZSkKLXsKLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOwotCi0gICAg
aWYgKGlzRGV2aWNlTG9zdEVycm9yKGVycm9yQ29kZSkpCi0gICAgewotICAgICAgICBkaXNwbGF5
ID0gZ2w6OmdldERpc3BsYXkoKTsKLSAgICAgICAgZGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotfQot
Ci0vLyBSZWNvcmRzIGFuIGVycm9yIGNvZGUKLXZvaWQgZXJyb3IoR0xlbnVtIGVycm9yQ29kZSkK
LXsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsR2V0Q3VycmVudENvbnRleHQoKTsKLQot
ICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChlcnJvckNvZGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfRU5VTToKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY29yZEludmFsaWRFbnVtKCk7Ci0gICAgICAgICAgICBUUkFDRSgiXHQhIEVycm9yIGdl
bmVyYXRlZDogaW52YWxpZCBlbnVtXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfSU5WQUxJRF9WQUxVRToKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFs
aWRWYWx1ZSgpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFs
aWQgdmFsdWVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9JTlZB
TElEX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRPcGVyYXRp
b24oKTsKLSAgICAgICAgICAgIFRSQUNFKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIG9w
ZXJhdGlvblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX09VVF9P
Rl9NRU1PUlk6Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRPdXRPZk1lbW9yeSgpOwotICAg
ICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IG91dCBvZiBtZW1vcnlcbiIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZEludmFsaWRGcmFtZWJ1ZmZl
ck9wZXJhdGlvbigpOwotICAgICAgICAgICAgVFJBQ0UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6IGlu
dmFsaWQgZnJhbWVidWZmZXIgb3BlcmF0aW9uXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1MDQ4NDhhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5oOiBNYW5hZ2VtZW50IG9mIHRocmVhZC1s
b2NhbCBkYXRhLgotCi0jaWZuZGVmIExJQkdMRVNWMl9NQUlOX0hfCi0jZGVmaW5lIExJQkdMRVNW
Ml9NQUlOX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgot
I2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0j
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiCi0KLW5hbWVzcGFjZSBnbAotewotc3RydWN0IEN1cnJlbnQKLXsKLSAgICBDb250ZXh0ICpj
b250ZXh0OwotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheTsKLX07Ci0KLXZvaWQgbWFrZUN1cnJl
bnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2Ug
KnN1cmZhY2UpOwotCi1Db250ZXh0ICpnZXRDb250ZXh0KCk7Ci1Db250ZXh0ICpnZXROb25Mb3N0
Q29udGV4dCgpOwotZWdsOjpEaXNwbGF5ICpnZXREaXNwbGF5KCk7Ci0KLUlEaXJlY3QzRERldmlj
ZTkgKmdldERldmljZSgpOwotCi1ib29sIGNoZWNrRGV2aWNlTG9zdChIUkVTVUxUIGVycm9yQ29k
ZSk7Ci19Ci0KLXZvaWQgZXJyb3IoR0xlbnVtIGVycm9yQ29kZSk7Ci0KLXRlbXBsYXRlPGNsYXNz
IFQ+Ci1jb25zdCBUICZlcnJvcihHTGVudW0gZXJyb3JDb2RlLCBjb25zdCBUICZyZXR1cm5WYWx1
ZSkKLXsKLSAgICBlcnJvcihlcnJvckNvZGUpOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwot
fQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFJTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3YmIyMjUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbWF0aHV0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRp
b24gZnVuY3Rpb25zLgotCi0jaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXwotI2RlZmluZSBM
SUJHTEVTVjJfTUFUSFVUSUxfSF8KLQotI2luY2x1ZGUgPGludHJpbi5oPgotI2luY2x1ZGUgPG1h
dGguaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFjZSBnbAotewotaW5saW5lIGJv
b2wgaXNQb3cyKGludCB4KQotewotICAgIHJldHVybiAoeCAmICh4IC0gMSkpID09IDAgJiYgKHgg
IT0gMCk7Ci19Ci0KLWlubGluZSBpbnQgbG9nMihpbnQgeCkKLXsKLSAgICBpbnQgciA9IDA7Ci0g
ICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOwotICAgIHJldHVybiByOwotfQotCi1pbmxpbmUg
dW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQotewotICAgIGlmICh4ICE9IDAp
IHgtLTsKLSAgICB4IHw9IHggPj4gMTsKLSAgICB4IHw9IHggPj4gMjsKLSAgICB4IHw9IHggPj4g
NDsKLSAgICB4IHw9IHggPj4gODsKLSAgICB4IHw9IHggPj4gMTY7Ci0gICAgeCsrOwotCi0gICAg
cmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE1JTiwgdHlwZW5h
bWUgTUFYPgotaW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWluLCBNQVggbWF4KQotewotICAgIHJl
dHVybiB4IDwgbWluID8gbWluIDogKHggPiBtYXggPyBtYXggOiB4KTsKLX0KLQotaW5saW5lIGZs
b2F0IGNsYW1wMDEoZmxvYXQgeCkKLXsKLSAgICByZXR1cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7
Ci19Ci0KLXRlbXBsYXRlPGNvbnN0IGludCBuPgotaW5saW5lIHVuc2lnbmVkIGludCB1bm9ybShm
bG9hdCB4KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZGRkZGRkZGID4+ICgz
MiAtIG4pOwotCi0gICAgaWYgKHggPiAxKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1heDsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoeCA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKG1heCAqIHgg
KyAwLjVmKTsKLSAgICB9Ci19Ci0KLWlubGluZSBib29sIHN1cHBvcnRzU1NFMigpCi17Ci0gICAg
c3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzID0g
ZmFsc2U7Ci0KLSAgICBpZiAoY2hlY2tlZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0
czsKLSAgICB9Ci0KLSAgICBpbnQgaW5mb1s0XTsKLSAgICBfX2NwdWlkKGluZm8sIDApOwotICAg
IAotICAgIGlmIChpbmZvWzBdID49IDEpCi0gICAgewotICAgICAgICBfX2NwdWlkKGluZm8sIDEp
OwotCi0gICAgICAgIHN1cHBvcnRzID0gKGluZm9bM10gPj4gMjYpICYgMTsKLSAgICB9Ci0KLSAg
ICBjaGVja2VkID0gdHJ1ZTsKLQotICAgIHJldHVybiBzdXBwb3J0czsKLX0KLX0KLQotI2VuZGlm
ICAgLy8gTElCR0xFU1YyX01BVEhVVElMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDM5YWRhYWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLy97e05PX0RF
UEVOREVOQ0lFU319Ci0vLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgaW5jbHVkZSBm
aWxlLgotLy8gVXNlZCBieSBsaWJHTEVTdjIucmMKLQotLy8gTmV4dCBkZWZhdWx0IHZhbHVlcyBm
b3IgbmV3IG9iamVjdHMKLS8vIAotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKLSNpZm5kZWYgQVBT
VFVESU9fUkVBRE9OTFlfU1lNQk9MUwotI2RlZmluZSBfQVBTX05FWFRfUkVTT1VSQ0VfVkFMVUUg
ICAgICAgIDEwMQotI2RlZmluZSBfQVBTX05FWFRfQ09NTUFORF9WQUxVRSAgICAgICAgIDQwMDAx
Ci0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTAwMQotI2RlZmluZSBf
QVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEwMQotI2VuZGlmCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjNjJkOS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDM1ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHV0aWxpdGll
cy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8bGltaXRzPgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotCi0jaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotLy8gVGhpcyBpcyBo
b3cgbXVjaCBkYXRhIHRoZSBhcHBsaWNhdGlvbiBleHBlY3RzIGZvciBhIHVuaWZvcm0KLWludCBV
bmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9GTE9BVDoK
LSAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgotICAgICAgY2Fz
ZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0JP
T0xfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZF
QzI6Ci0gICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMzOgotICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAgICAgICAg
cmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKLSAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6
Ci0gICAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAg
ICAgcmV0dXJuIDk7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgICAgcmV0dXJu
IDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIGlzIGhvdyBtdWNoIGRhdGEgd2UgYWN0dWFsbHkg
c3RvcmUgZm9yIGEgdW5pZm9ybQotaW50IFVuaWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KEdM
ZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JP
T0w6Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKLSAgICAg
IGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMyOgotICAgICAgICAgIHJldHVybiAy
OwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgotICAg
ICAgICAgIHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9W
RUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBHTF9JTlRfVkVDNDoK
LSAgICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAg
ICByZXR1cm4gODsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICByZXR1cm4g
MTI7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgICAgcmV0dXJuIDE2OwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVy
biAwOwotfQotCi1HTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCi17Ci0g
ICAgc3dpdGNoKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9P
TF9WRUM0OgotICAgICAgICAgIHJldHVybiBHTF9CT09MOwotICAgICAgY2FzZSBHTF9GTE9BVDoK
LSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAg
ICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgIGNhc2UgR0xfU0FN
UExFUl8yRDoKLSAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgotICAgICAgY2FzZSBHTF9JTlRf
VkVDMjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUM0Ogot
ICAgICAgICAgIHJldHVybiBHTF9JTlQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PTkU7Ci19Ci0KLXNpemVfdCBVbmlm
b3JtQ29tcG9uZW50U2l6ZShHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2godHlwZSkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX0JPT0w6ICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICAgIGNhc2Ug
R0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgICBjYXNlIEdMX0lOVDogICBy
ZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICAgIGRlZmF1bHQ6ICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXNpemVfdCBVbmlmb3JtSW50ZXJuYWxTaXpl
KEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBVbmlmb3JtQ29tcG9uZW50U2l6ZShVbmlmb3Jt
Q29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudCh0eXBl
KTsKLX0KLQotc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCi17Ci0gICAg
cmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpKSAq
IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHR5cGUpOwotfQotCi1pbnQgVmFyaWFibGVS
b3dDb3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAg
Y2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xfQk9PTDoKLSAg
ICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgIGNhc2UgR0xfQk9P
TF9WRUMyOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVD
MjoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0g
ICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHJldHVybiAyOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgVmFyaWFibGVD
b2x1bW5Db3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAg
ICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xfQk9PTDoK
LSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoK
LSAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAg
ICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOgotICAgICAgICByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgotICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgQWxsb2Nh
dGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRp
b25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCi17Ci0gICAgQVNTRVJUKGFsbG9jYXRpb25T
aXplIDw9IGJpdHNTaXplKTsKLQotICAgIHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBpbnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6ZSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCi0gICAg
ewotICAgICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgKmJpdHMgfD0gbWFzazsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbWFzayA8PD0gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLUdMc2l6ZWkg
Q29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCBhbGlnbm1lbnQpCi17Ci0gICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFs
aWdubWVudCkpOwotCi0gICAgR0xzaXplaSByYXdQaXRjaCA9IENvbXB1dGVQaXhlbFNpemUoZm9y
bWF0LCB0eXBlKSAqIHdpZHRoOwotICAgIHJldHVybiAocmF3UGl0Y2ggKyBhbGlnbm1lbnQgLSAx
KSAmIH4oYWxpZ25tZW50IC0gMSk7Ci19Ci0KLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRj
aChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KQotewotICAgIHJldHVybiBDb21wdXRlQ29t
cHJlc3NlZFNpemUod2lkdGgsIDEsIGZvcm1hdCk7Ci19Ci0KLUdMc2l6ZWkgQ29tcHV0ZUNvbXBy
ZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KQot
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6Ci0gICAgICAgIHJldHVybiA4ICogKEdMc2l6ZWkpY2VpbCgoZmxvYXQpd2lkdGggLyA0
LjBmKSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdodCAvIDQuMGYpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgcmV0dXJu
IDE2ICogKEdMc2l6ZWkpY2VpbCgoZmxvYXQpd2lkdGggLyA0LjBmKSAqIChHTHNpemVpKWNlaWwo
KGZsb2F0KWhlaWdodCAvIDQuMGYpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi19Ci0KLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpCi17Ci0gICAg
aWYoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICBm
b3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgfHwKLSAgICAgICBmb3Jt
YXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSB8fAotICAgICAgIGZvcm1h
dCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFRleHR1cmUoR0xlbnVtIGZvcm1hdCkKLXsKLSAg
ICBpZiAoZm9ybWF0ID09IEdMX0RFUFRIX0NPTVBPTkVOVCB8fAotICAgICAgICBmb3JtYXQgPT0g
R0xfREVQVEhfU1RFTkNJTF9PRVMpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFJldHVybnMgdGhlIHNpemUsIGluIGJ5dGVz
LCBvZiBhIHNpbmdsZSB0ZXhlbCBpbiBhbiBJbWFnZQotaW50IENvbXB1dGVQaXhlbFNpemUoR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcmV0dXJuIHNpemVvZih1
bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcmV0dXJu
IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QTogcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDI7Ci0gICAgICAgICAgY2FzZSBHTF9S
R0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAzOwotICAgICAg
ICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIp
ICogNDsKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAgICAgcmV0dXJuIHNpemVvZih1
bnNpZ25lZCBjaGFyKSAqIDQ7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80
XzRfNDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAg
IHJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQTog
ICAgICAgICAgIHJldHVybiBzaXplb2YoZmxvYXQpOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZihmbG9hdCkgKiAyOwotICAgICAgICAgIGNhc2UgR0xf
UkdCOiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KSAqIDM7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXplb2YoZmxvYXQpICogNDsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcmV0dXJuIHNpemVvZih1
bnNpZ25lZCBzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAgIHJldHVy
biBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOiByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDI7Ci0gICAgICAgICAgY2FzZSBH
TF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpICogMzsKLSAg
ICAgICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBz
aG9ydCkgKiA0OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi1ib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCkKLXsKLSAgICByZXR1cm4gKHRhcmdldCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1ggJiYgdGFyZ2V0IDw9IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWik7Ci19Ci0K
LWJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICByZXR1
cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpOwotfQotCi1HTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2
NTogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0I7Ci0gICAgICBjYXNlIEdM
X1JHQkE0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOwotICAgICAg
Y2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsK
LSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X1JHQjsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX1JHQkE7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDogICAgICAg
ICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThf
RVhUOiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U7Ci0gICAgICBjYXNlIEdM
X0FMUEhBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9BTFBIQTsKLSAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogICAgcmV0dXJuIEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhUOiAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsK
LSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTogcmV0dXJuIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6IHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDogICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Uz
MkZfRVhUOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFX0FM
UEhBOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfUkdCQTsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDogICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhU
OiAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOwotICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEExNkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFX0FMUEhBOwot
ICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
QkdSQV9FWFQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAg
IHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDMyX09FUzogICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQ7Ci0gICAgICBjYXNl
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9TVEVO
Q0lMX09FUzsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKLSAgICB9Ci19Ci0KLUdMZW51bSBFeHRy
YWN0VHlwZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQ7Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2Ug
R0xfUkdCQThfT0VTOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZ
VEU7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDogICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDogICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4
X0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAgIHJldHVybiBHTF9VTlNJ
R05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDog
ICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19BTkdMRTogcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6IHJldHVybiBHTF9VTlNJR05FRF9CWVRF
OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6ICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GTE9BVDsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhU
OiAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQTMyRl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAgIGNhc2UgR0xf
UkdCQTE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VT
OwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFMTZGX0VYVDogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0hBTEZfRkxPQVRfT0VTOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOiAgICAgICAgICByZXR1cm4gR0xfSEFM
Rl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDogICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQxNjogICAgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfU0hPUlQ7Ci0gICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9J
TlQ7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiAgICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOyAgIC8vIFVuc3VwcG9ydGVkCi0gICAg
fQotfQotCi1ib29sIElzQ29sb3JSZW5kZXJhYmxlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6
Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSXNEZXB0aFJlbmRlcmFi
bGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
Ci0gICAgewotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JH
QjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0g
ICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBJc1N0ZW5jaWxSZW5kZXJhYmxlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCkK
LXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9JTkRFWDg6Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVf
QTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAg
ICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGVz
MmR4Ci17Ci0KLUQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24p
Ci17Ci0gICAgRDNEQ01QRlVOQyBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsKLSAgICBzd2l0Y2gg
KGNvbXBhcmlzb24pCi0gICAgewotICAgICAgY2FzZSBHTF9ORVZFUjogICAgZDNkQ29tcCA9IEQz
RENNUF9ORVZFUjsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFdBWVM6ICAgZDNkQ29t
cCA9IEQzRENNUF9BTFdBWVM7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MRVNTOiAgICAg
ZDNkQ29tcCA9IEQzRENNUF9MRVNTOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MRVFV
QUw6ICAgZDNkQ29tcCA9IEQzRENNUF9MRVNTRVFVQUw7ICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9FUVVBTDogICAgZDNkQ29tcCA9IEQzRENNUF9FUVVBTDsgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9HUkVBVEVSOiAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSOyAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9HRVFVQUw6ICAgZDNkQ29tcCA9IEQzRENNUF9HUkVBVEVSRVFVQUw7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9OT1RFUVVBTDogZDNkQ29tcCA9IEQzRENNUF9OT1RFUVVBTDsg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZDNkQ29tcDsKLX0KLQotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xv
cikKLXsKLSAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ibHVlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYWxwaGEpKTsKLX0KLQotRDNEQkxF
TkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpCi17Ci0gICAgRDNEQkxFTkQgZDNkQmxl
bmQgPSBEM0RCTEVORF9aRVJPOwotCi0gICAgc3dpdGNoIChibGVuZCkKLSAgICB7Ci0gICAgICBj
YXNlIEdMX1pFUk86ICAgICAgICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9aRVJP
OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORTogICAgICAgICAgICAgICAgICAg
ICAgZDNkQmxlbmQgPSBEM0RCTEVORF9PTkU7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NSQ19DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNDT0xP
UjsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6ICAgICAg
ZDNkQmxlbmQgPSBEM0RCTEVORF9JTlZTUkNDT0xPUjsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0RTVF9DT0xPUjogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQ09MT1I7
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQ09MT1I6ICAgICAgZDNk
QmxlbmQgPSBEM0RCTEVORF9JTlZERVNUQ09MT1I7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NS
Q19BTFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQTsgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6ICAgICAgZDNkQmxl
bmQgPSBEM0RCTEVORF9JTlZTUkNBTFBIQTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RTVF9B
TFBIQTogICAgICAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9ERVNUQUxQSEE7ICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6ICAgICAgZDNkQmxlbmQg
PSBEM0RCTEVORF9JTlZERVNUQUxQSEE7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5U
X0NPTE9SOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjogZDNkQmxlbmQgPSBE
M0RCTEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTlNUQU5UX0FM
UEhBOiAgICAgICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9CTEVOREZBQ1RPUjsgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQTogZDNkQmxlbmQgPSBEM0RC
TEVORF9JTlZCTEVOREZBQ1RPUjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRV
UkFURTogICAgICAgZDNkQmxlbmQgPSBEM0RCTEVORF9TUkNBTFBIQVNBVDsgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVu
ZDsKLX0KLQotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCkKLXsKLSAg
ICBEM0RCTEVORE9QIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsKLQotICAgIHN3aXRjaCAo
YmxlbmRPcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNk
QmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9G
VU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9w
ID0gRDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RCbGVuZE9wOwotfQotCi1EM0RTVEVOQ0lM
T1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKQotewotICAgIEQzRFNURU5DSUxP
UCBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VFUDsKLQotICAgIHN3aXRjaCAoc3RlbmNp
bE9wKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RT
VEVOQ0lMT1BfWkVSTzsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0tFRVA6ICAgICAgZDNkU3Rl
bmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRVBM
QUNFOiAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9SRVBMQUNFOyBicmVhazsKLSAgICAg
IGNhc2UgR0xfSU5DUjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUlNBVDsg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJ
TE9QX0RFQ1JTQVQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTlZFUlQ6ICAgIGQzZFN0ZW5jaWxP
cCA9IEQzRFNURU5DSUxPUF9JTlZFUlQ7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5DUl9XUkFQ
OiBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfSU5DUjsgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0RFQ1JfV1JBUDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0RFQ1I7ICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNk
U3RlbmNpbE9wOwotfQotCi1EM0RURVhUVVJFQUREUkVTUyBDb252ZXJ0VGV4dHVyZVdyYXAoR0xl
bnVtIHdyYXApCi17Ci0gICAgRDNEVEVYVFVSRUFERFJFU1MgZDNkV3JhcCA9IEQzRFRBRERSRVNT
X1dSQVA7Ci0KLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6
ICAgICAgICAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX1dSQVA7ICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0NMQU1QX1RPX0VER0U6ICAgICBkM2RXcmFwID0gRDNEVEFERFJFU1NfQ0xBTVA7ICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOiAgIGQzZFdyYXAgPSBEM0RUQURE
UkVTU19NSVJST1I7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZDNkV3JhcDsKLX0KLQotRDNEQ1VMTCBDb252ZXJ0Q3VsbE1vZGUoR0xl
bnVtIGN1bGxGYWNlLCBHTGVudW0gZnJvbnRGYWNlKQotewotICAgIEQzRENVTEwgY3VsbCA9IEQz
RENVTExfQ0NXOwotICAgIHN3aXRjaCAoY3VsbEZhY2UpCi0gICAgewotICAgICAgY2FzZSBHTF9G
Uk9OVDoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEQ1VMTF9DVyA6
IEQzRENVTExfQ0NXKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAg
ICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ0NXIDogRDNEQ1VMTF9D
Vyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAg
ICAgY3VsbCA9IEQzRENVTExfTk9ORTsgLy8gY3VsbGluZyB3aWxsIGJlIGhhbmRsZWQgZHVyaW5n
IGRyYXcKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBjdWxsOwotfQotCi1EM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJl
RmFjZShHTGVudW0gY3ViZUZhY2UpCi17Ci0gICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gRDNE
Q1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0KLSAgICBzd2l0Y2ggKGN1YmVGYWNlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICBmYWNl
ID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1g7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJF
TUFQX0ZBQ0VfTkVHQVRJVkVfWDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9Q
T1NJVElWRV9ZOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX05FR0FUSVZFX1k7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9aOwotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhY2U7Ci19
Ci0KLURXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1
ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICByZXR1cm4gKHJlZCAgID8gRDNEQ09MT1JXUklURUVOQUJM
RV9SRUQgICA6IDApIHwKLSAgICAgICAgICAgKGdyZWVuID8gRDNEQ09MT1JXUklURUVOQUJMRV9H
UkVFTiA6IDApIHwKLSAgICAgICAgICAgKGJsdWUgID8gRDNEQ09MT1JXUklURUVOQUJMRV9CTFVF
ICA6IDApIHwKLSAgICAgICAgICAgKGFscGhhID8gRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSA6
IDApOwotfQotCi1EM0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBt
YWdGaWx0ZXIpCi17Ci0gICAgRDNEVEVYVFVSRUZJTFRFUlRZUEUgZDNkTWFnRmlsdGVyID0gRDNE
VEVYRl9QT0lOVDsKLSAgICBzd2l0Y2ggKG1hZ0ZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdM
X05FQVJFU1Q6IGQzZE1hZ0ZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7ICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTElORUFSOiAgZDNkTWFnRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7IGJyZWFrOwotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkTWFnRmls
dGVyOwotfQotCi12b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVY
VFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1p
cEZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKG1pbkZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdM
X05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAg
ICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9OT05FOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0g
ICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgICAqZDNkTWluRmlsdGVy
ID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0g
ICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZp
bHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ORUFS
RVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5U
OwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgKmQzZE1pbkZp
bHRlciA9IEQzRFRFWEZfTElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9M
SU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgKmQzZE1pbkZp
bHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05P
TkU7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotfQotCi1ib29sIENvbnZlcnRQcmlt
aXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlUSVZFVFlQRSAqZDNkUHJpbWl0aXZlVHlw
ZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCkKLXsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBl
ID0gRDNEUFRfUE9JTlRMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50
Q291bnQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FUzoKLSAgICAgICAgKmQz
ZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FTElTVDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNv
dW50ID0gZWxlbWVudENvdW50IC8gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJ
TkVfTE9PUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7Ci0g
ICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDE7ICAgLy8gRDNEIGRv
ZXNuJ3Qgc3VwcG9ydCBsaW5lIGxvb3BzLCBzbyB3ZSBkcmF3IHRoZSBsYXN0IGxpbmUgc2VwYXJh
dGVseQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICAgICAg
KmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9MSU5FU1RSSVA7Ci0gICAgICAgICpkM2RQcmltaXRp
dmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9UUklBTkdMRVM6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVM
SVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLyAzOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Ci0gICAgICAgICpkM2RQ
cmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVTVFJJUDsKLSAgICAgICAgKmQzZFByaW1pdGl2
ZUNvdW50ID0gZWxlbWVudENvdW50IC0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1RSSUFOR0xFX0ZBTjoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdM
RUZBTjsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC0gMjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVy
Rm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBHTF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9OVUxMOwotICAg
ICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xf
UkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0gICAgICBjYXNl
IEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I1RzZCNTsKLSAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVY
ODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiByZXR1cm4gRDNE
Rk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuIEQz
REZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUQzRE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlz
YW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKQotewotICAgIGlmIChzYW1wbGVz
IDw9IDEpCi0gICAgICAgIHJldHVybiBEM0RNVUxUSVNBTVBMRV9OT05FOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBFKXNhbXBsZXM7Ci19Ci0KLX0KLQotbmFt
ZXNwYWNlIGR4MmVzCi17Ci0KLXVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQg
c3RlbmNpbEZvcm1hdCkKLXsKLSAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBzd2l0Y2goc3RlbmNpbEZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRGUzg6Ci0gICAgICBjYXNlIEQzREZNVF9E
MjRTODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgotICAg
ICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgotICAgICAgICByZXR1cm4g
MTsKLSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0Qz
MjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NL
QUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy9j
YXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5
Ci0gICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RY
IDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0K
LXVuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAg
IHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2
UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMy
RjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0g
ICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIHJl
dHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiAxOwot
ICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0g
ICAgICAgIHJldHVybiAwOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotfQotCi11bnNpZ25lZCBpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZC
MTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJH
MzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIx
MDoKLSAgICAgICAgcmV0dXJuIDEwOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQz
REZNVF9BMVI1RzVCNToKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJu
IDU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2ln
bmVkIGludCBHZXRHcmVlblNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRj
aCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoK
LSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAg
ICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAg
IHJldHVybiAxMDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1
QjU6Ci0gICAgICAgIHJldHVybiA1OwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAg
ICByZXR1cm4gNjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcx
NlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIz
MkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgot
ICAgICAgICByZXR1cm4gMTA7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1U
X0ExUjVHNUI1OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gNTsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQg
aW50IEdldERlcHRoU2l6ZShEM0RGT1JNQVQgZGVwdGhGb3JtYXQpCi17Ci0gICAgaWYgKGRlcHRo
Rm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDI0OwotICAgIH0K
LSAgICBzd2l0Y2ggKGRlcHRoRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNl9M
T0NLQUJMRTogIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QzMjogICAgICAgICAgIHJl
dHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMxOiAgICAgICAgIHJldHVybiAxNTsKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFM4OiAgICAgICAgIHJldHVybiAyNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0QyNFg4OiAgICAgICAgIHJldHVybiAyNDsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6
ICAgICAgIHJldHVybiAyNDsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjogICAgICAgICAgIHJldHVy
biAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6IHJldHVybiAzMjsKLSAgICAg
IGNhc2UgRDNERk1UX0QyNEZTODogICAgICAgIHJldHVybiAyNDsKLSAgICAvL2Nhc2UgRDNERk1U
X0QzMl9MT0NLQUJMRTogIHJldHVybiAzMjsgICAvLyBEM0Q5RXggb25seQotICAgIC8vY2FzZSBE
M0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDA7ICAgIC8vIEQzRDlFeCBvbmx5Ci0gICAgICBk
ZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLWJvb2wgSXNG
bG9hdDMyRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQotewotICAgIHN3aXRjaChzdXJm
YWNlRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX1IxNkY6Ci0gICAgICBjYXNlIEQz
REZNVF9HMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEM0RGTVRfUjMyRjoKLSAgICAgIGNhc2UgRDNERk1U
X0czMlIzMkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElzRmxvYXQxNkZvcm1h
dChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICBzd2l0Y2goc3VyZmFjZUZvcm1hdCkK
LSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9SMTZGOgotICAgICAgY2FzZSBEM0RGTVRfRzE2UjE2
RjoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgY2FzZSBEM0RGTVRfUjMyRjoKLSAgICAgIGNhc2UgRDNERk1UX0czMlIzMkY6Ci0g
ICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Ogot
ICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc0RlcHRoVGV4dHVyZUZvcm1hdChEM0RG
T1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICByZXR1cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNE
Rk1UX0lOVFopOwotfQotCi1ib29sIElzU3RlbmNpbFRleHR1cmVGb3JtYXQoRDNERk9STUFUIHN1
cmZhY2VGb3JtYXQpCi17Ci0gICAgcmV0dXJuIChzdXJmYWNlRm9ybWF0ID09IEQzREZNVF9JTlRa
KTsKLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNB
TVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9OTUFT
S0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHR5cGU7
Ci19Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQot
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0
OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdM
X1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9B
MTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE0Owot
fQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQot
ewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAg
ICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRT
ODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLX0KLQotc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKQotewot
ICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07Ci0gICAgRFdPUkQgcGF0aExlbiA9IEdldFRlbXBQYXRo
QShzaXplb2YocGF0aCkgLyBzaXplb2YocGF0aFswXSksIHBhdGgpOwotICAgIGlmIChwYXRoTGVu
ID09IDApCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gc3Rk
OjpzdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBVSU5UIHVuaXF1ZSA9IEdldFRlbXBGaWxlTmFtZUEo
cGF0aCwgInNoIiwgMCwgcGF0aCk7Ci0gICAgaWYgKHVuaXF1ZSA9PSAwKQotICAgIHsKLSAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBwYXRoOwotfQotCi12b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBw
YXRoLCBjb25zdCB2b2lkKiBjb250ZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBGSUxFKiBmaWxl
ID0gZm9wZW4ocGF0aCwgInciKTsKLSAgICBpZiAoIWZpbGUpCi0gICAgewotICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZndyaXRlKGNvbnRlbnQs
IHNpemVvZihjaGFyKSwgc2l6ZSwgZmlsZSk7Ci0gICAgZmNsb3NlKGZpbGUpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjI0MTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDExMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyB1dGlsaXRpZXMuaDogQ29u
dmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCi0KLSNpZm5kZWYg
TElCR0xFU1YyX1VUSUxJVElFU19ICi0jZGVmaW5lIExJQkdMRVNWMl9VVElMSVRJRVNfSAotCi0j
ZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVT
Mi9nbDJleHQuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLWNv
bnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdJJywn
TicsJ1QnLCdaJykpKTsKLWNvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNERk9STUFU
KShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKLQotbmFtZXNwYWNlIGdsCi17Ci0KLXN0
cnVjdCBDb2xvcjsKLQotaW50IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KEdMZW51bSB0
eXBlKTsKLWludCBVbmlmb3JtSW50ZXJuYWxDb21wb25lbnRDb3VudChHTGVudW0gdHlwZSk7Ci1H
TGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpOwotc2l6ZV90IFVuaWZvcm1J
bnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwotc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xl
bnVtIHR5cGUpOwotaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOwotaW50IFZhcmlh
YmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOwotCi1pbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRz
KHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25l
ZCBpbnQgYml0c1NpemUpOwotCi1pbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSk7Ci1HTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KTsKLUdMc2l6ZWkgQ29tcHV0ZUNv
bXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKLUdMc2l6ZWkgQ29t
cHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0KTsKLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOwotYm9vbCBJc0RlcHRo
VGV4dHVyZShHTGVudW0gZm9ybWF0KTsKLWJvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVu
dW0gdGFyZ2V0KTsKLWJvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7
Ci1HTGVudW0gRXh0cmFjdEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwotR0xlbnVtIEV4
dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7Ci0KLWJvb2wgSXNDb2xvclJlbmRlcmFi
bGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKLWJvb2wgSXNEZXB0aFJlbmRlcmFibGUoR0xlbnVt
IGludGVybmFsZm9ybWF0KTsKLWJvb2wgSXNTdGVuY2lsUmVuZGVyYWJsZShHTGVudW0gaW50ZXJu
YWxmb3JtYXQpOwotCi19Ci0KLW5hbWVzcGFjZSBlczJkeAotewotCi1EM0RDTVBGVU5DIENvbnZl
cnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKLUQzRENPTE9SIENvbnZlcnRDb2xvcihn
bDo6Q29sb3IgY29sb3IpOwotRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQp
OwotRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7Ci1EM0RTVEVOQ0lM
T1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKLUQzRFRFWFRVUkVBRERSRVNT
IENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7Ci1EM0RDVUxMIENvbnZlcnRDdWxsTW9k
ZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpOwotRDNEQ1VCRU1BUF9GQUNFUyBD
b252ZXJ0Q3ViZUZhY2UoR0xlbnVtIGN1YmVGYWNlKTsKLURXT1JEIENvbnZlcnRDb2xvck1hc2so
Ym9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7Ci1EM0RURVhUVVJF
RklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpOwotdm9pZCBDb252
ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RN
aW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0ZXIpOwotYm9vbCBDb252
ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUgKmQzZFByaW1p
dGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpOwotRDNERk9STUFUIENvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11
bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLX0KLQotbmFtZXNw
YWNlIGR4MmVzCi17Ci1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7
Ci1HTHVpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotR0x1aW50IEdldEdy
ZWVuU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotR0x1aW50IEdldEJsdWVTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1BVCBkZXB0aEZv
cm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOwot
Ym9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwotYm9vbCBJc0Zs
b2F0MTZGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwotYm9vbCBJc0RlcHRoVGV4dHVy
ZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCk7Ci1ib29sIElzU3RlbmNpbFRleHR1cmVG
b3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpOwotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9t
TXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSk7Ci0KLUdMZW51bSBDb252
ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVw
dGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotCi19Ci0KLXN0ZDo6c3RyaW5nIGdl
dFRlbXBQYXRoKCk7Ci12b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lk
KiBkYXRhLCBzaXplX3Qgc2l6ZSk7Ci0KLWlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhS
RVNVTFQgZXJyb3JDb2RlKQotewotICAgIHN3aXRjaCAoZXJyb3JDb2RlKQotICAgIHsKLSAgICAg
IGNhc2UgRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1I6Ci0gICAgICBjYXNlIEQzREVSUl9ERVZJ
Q0VMT1NUOgotICAgICAgY2FzZSBEM0RFUlJfREVWSUNFSFVORzoKLSAgICAgIGNhc2UgRDNERVJS
X0RFVklDRVJFTU9WRUQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX07Ci0KLSNlbmRpZiAgLy8gTElCR0xFU1YyX1VU
SUxJVElFU19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3ZlcnRleGNvbnZlcnNpb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvdmVydGV4Y29udmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
YmI4Yjg5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvdmVydGV4Y29udmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIHZlcnRleGNvbnZlcnNpb24uaDogQSBsaWJyYXJ5IG9mIHZl
cnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZAotLy8gdGhl
IEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVzZWQgYnkgdGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5
c3RlbS4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwotI2RlZmluZSBM
SUJHTEVTVjJfVkVSVEVYQ09OVkVSU0lPTl9IXwotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNs
dWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIiAvLyBEZWZpbmVz
IEluZGV4Ci0KLW5hbWVzcGFjZSBnbAotewotCi0vLyBDb252ZXJzaW9uIHR5cGVzOgotLy8gc3Rh
dGljIGNvbnN0IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0eSB0cmFu
c2Zvcm0sIGZhbHNlIG90aGVyd2lzZQotLy8gc3RhdGljIFUgY29udmVydChUKTogY29udmVydCBh
IHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhlIG91dHB1dCB0eXBlCi0v
LyB0eXBlZGVmIC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNlZCBieSB0aGlzIGNvbnZl
cnNpb24KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgSWRlbnRpdHkKLXsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7Ci0KLSAgICB0eXBlZGVmIFQgT3V0cHV0VHlw
ZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHg7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFzcyBUb1Q+Ci1zdHJ1Y3Qg
Q2FzdAotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0
eXBlZGVmIFRvVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFRvVCBjb252ZXJ0KEZyb21UIHgp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4KTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0PFQsIFQ+Ci17Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7Ci0K
LSAgICBzdGF0aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3Jt
YWxpemUKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwotCi0gICAg
dHlwZWRlZiBmbG9hdCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoVCB4
KQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOwotICAg
ICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOwotCi0gICAgICAgIGlmIChOTDo6
aXNfc2lnbmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjb25zdCBmbG9hdCA9PiBWQzIw
MDggY29tcHV0ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0gICAgICAgICAgICAvLyBzdGF0aWMgY29u
c3QgZmxvYXQgPT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdldCBoZXJl
LCBzdG9yZXMgaXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFuZCBhbGwgdGhhdC4KLSAg
ICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0YXRpY19jYXN0PGZsb2F0
PihOTDo6bWF4KCkpKzEpOwotICAgICAgICAgICAgcmV0dXJuICgyKmYrMSkqZGl2aXNvcjsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmL05M
OjptYXgoKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBGcm9tVHlw
ZSwgc3RkOjpzaXplX3QgU2NhbGVCaXRzPgotc3RydWN0IEZpeGVkVG9GbG9hdAotewotICAgIHN0
YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIGZsb2F0IE91
dHB1dFR5cGU7Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9tVHlwZSB4KQotICAgIHsK
LSAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4o
c3RhdGljX2Nhc3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oeCkgKiBkaXZpc29yOwotICAgIH0KLX07Ci0KLS8vIFdpZGVuIHR5
cGVzOgotLy8gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFsV2lkdGg6IG51bWJlciBv
ZiBjb21wb25lbnRzIGJlZm9yZSBjb252ZXJzaW9uCi0vLyBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IGZpbmFsV2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVyIGNvbnZlcnNpb24KLQot
Ly8gRmxvYXQgaXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IE4+Ci1zdHJ1Y3QgTm9XaWRlbgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0
aWFsV2lkdGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0g
TjsKLX07Ci0KLS8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lHTkVEX1NIT1JUIGFyZSBz
dXBwb3J0ZWQgYnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwotdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IE4+Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpz
aXplX3QgaW5pdGlhbFdpZHRoID0gTjsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmlu
YWxXaWR0aCA9IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KLXN0cnVj
dCBXaWRlblRvRm91cgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lk
dGggPSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gNDsKLX07
Ci0KLS8vIE1vc3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1c3QgdGhhdC4KLXRlbXBs
YXRlIDxjbGFzcyBUPgotc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMKLXsKLSAgICBzdGF0aWMg
VCB6ZXJvKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KLSAgICBzdGF0aWMgVCBvbmUo
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigxKTsgfQotfTsKLQotLy8gQnV0IG5vcm1hbGlzZWQg
dHlwZXMgb25seSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlzIHJlcHJlc2VudGVkIGJ5
IHRoZSBtYXggdmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3JtYWxpemVkRGVm
YXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxU
PigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46Om1heCgpOyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6Ci0vLyBzdGF0aWMgY29uc3QgYm9vbCBp
ZGVudGl0eTogdHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSAod2l0aCBubyB3
aWRlbmluZykKLS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemU6IG51bWJlciBv
ZiBieXRlcyBwZXIgb3V0cHV0IHZlcnRleAotLy8gc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNv
bnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91
dCk6IGNvbnZlcnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1heSBiZSBzdHJpZGVkLCBi
dXQgb3V0cHV0IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5ULCBjbGFz
cyBXaWRlblJ1bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVsdFZhbHVlUnVsZSA9IFNp
bXBsZURlZmF1bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3QgVmVydGV4RGF0YUNvbnZlcnRlcgotewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBlIE91dHB1dFR5cGU7Ci0g
ICAgdHlwZWRlZiBJblQgSW5wdXRUeXBlOwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRp
dHkgPSAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoKSAm
JiBDb252ZXJ0ZXI6OmlkZW50aXR5OwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5h
bFNpemUgPSBXaWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0cHV0VHlwZSk7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBlICppbiwgc3RkOjpzaXpl
X3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQpCi0gICAgewotICAgICAg
ICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb25zdCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRlcyhpbiwgaSAqIHN0cmlk
ZSk7Ci0KLSAgICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDAsIHN0YXRpY19jYXN0
PE91dHB1dFR5cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwotICAgICAgICAgICAgY29w
eUNvbXBvbmVudChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZh
bHVlUnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAy
LCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAg
ICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRpY19jYXN0PE91dHB1dFR5
cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0KLSAgICAgICAgICAgIG91dCArPSBXaWRl
blJ1bGU6OmZpbmFsV2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBj
b252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXpl
X3Qgbiwgdm9pZCAqb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShzdGF0
aWNfY2FzdDxjb25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwgc3RhdGljX2Nhc3Q8T3V0
cHV0VHlwZSo+KG91dCkpOwotICAgIH0KLQotICBwcml2YXRlOgotICAgIC8vIEFkdmFuY2UgdGhl
IGdpdmVuIHBvaW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBwb2ludGVkLXRvIGVsZW1l
bnRzKS4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGF0aWMgVCAqcG9pbnRlckFkZEJ5
dGVzKFQgKmJhc2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFz
ZVB0cikgKyBudW1CeXRlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29weUNvbXBvbmVu
dChPdXRwdXRUeXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IGVsZW1l
bnRpbmRleCwgT3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCi0gICAgewotICAgICAgICBpZiAoV2lk
ZW5SdWxlOjpmaW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoV2lkZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5kZXgpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBDb252ZXJ0ZXI6OmNvbnZl
cnQoaW5bZWxlbWVudGluZGV4XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBkZWZhdWx0
dmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi19Ci0KLSNlbmRp
ZiAgIC8vIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDY1MDBmNDQuLmI0YWE0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNzExLDI0ICsy
NzExLDE3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAotICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwot
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5jCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3Bwc3RydWN0LmMKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3Bw
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuY3Bw
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmNwcAotICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5j
cHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvTWFjcm8uY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuY3BwCi0gICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zeW1ib2xzLmMKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci90b2tlbnMuYworICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5j
cHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9JbnB1dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1ByZXByb2Nlc3Nvci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hT
eW1ib2wuY3BwCkBAIC0yNzQzLDYgKzI3MzYsNyBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
VmFyaWFibGVJbmZvLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xF
L3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKICAgICApCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDZkNGEwMjYuLjYzNWQ5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQpAQCAtNjMxMiw0OCArNjMxMiwzMiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwIFwKIAlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmggXAogCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QcmFnbWEuaCBcCi0JU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmMgXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIFwKLQlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaCBcCi0J
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBc
Ci0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
aCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHBzdHJ1Y3QuYyBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9sZW5ndGhfbGltaXRzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmggXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0RpYWdub3N0aWNzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxl
ci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVQYXJzZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaCBcCi0JU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvSW5wdXQuY3BwIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5j
cHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0xleGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L01hY3JvLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5jcHAgXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3Jv
RXhwYW5kZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmggXAotCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0
aW9uLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L1Rva2VuLmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcCBcCi0JU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3Bw
X3V0aWxzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvcGFyc2VyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmggXAotCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmggXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jIFwK
LQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJv
bHMuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci90b2tlbnMuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci90b2tlbnMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3MuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJl
Y3RpdmVIYW5kbGVyQmFzZS5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3Bw
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0Rp
cmVjdGl2ZVBhcnNlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5w
dXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9MZXhlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvTGV4ZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9NYWNyby5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcCBcCisJU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJl
cHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcCBcCisJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXpl
ci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcHBfdXRpbHMuaCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmggXAogCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9SZW1vdmVUcmVlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA0
NzM5NWMyLi5hNDU4ZWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTc4LDYgKzc4LDcg
QEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xV
REVfRElSRUNUT1JJRVMKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzIgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwIgorICAgICAgICAiJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvaW5jbHVkZSIKICAgICAgICAg
IiR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL2luY2x1ZGUvR0xTTEFORyIKICAgICApCiBlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBjNTdjMjhlLi5lYTQxMDM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTk1LDYgKzE5NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dDJfSU5DTFVERV9ESVJFQ1RPUklFUwogCiBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICBs
aXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgIiR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL2luY2x1ZGUiCiAgICAgICAgICIke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9pbmNsdWRlL0dMU0xBTkciCiAgICAgKQogZW5kaWYgKCkK
</data>
<flag name="commit-queue"
          id="200094"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182208</attachid>
            <date>2013-01-10 14:25:58 -0800</date>
            <delta_ts>2013-01-10 14:29:40 -0800</delta_ts>
            <desc>Patch (ready for review)</desc>
            <filename>98972-6.patch</filename>
            <type>text/plain</type>
            <size>14936</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjN2E3M2IxLi42NWFlM2I4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMTAt
MTggIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgU2hh
ZGVyc10gVmFsaWRhdGUgdHlwZXMgb2YgYnVpbHQtaW4gdmVydGV4IGF0dHJpYnV0ZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4OTcyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIGludmFsaWQtY3VzdG9tLWZp
bHRlci1hdHRyaWJ1dGUtdHlwZXMuaHRtbCB1c2VzIGEgc2V0IG9mIHZlcnRleCBzaGFkZXJzLiBF
YWNoIHZlcnRleCBzaGFkZXIKKyAgICAgICAgZGVmaW5lcyBhIHNwZWNpZmljIGF0dHJpYnV0ZSB3
aXRoIHRoZSB3cm9uZyB0eXBlLiBOb25lIG9mIHRoZSB2ZXJ0ZXggc2hhZGVycyBpbiB0aGUgdGVz
dAorICAgICAgICBzaG91bGQgZXhlY3V0ZS4gSWYgYSB2ZXJ0ZXggc2hhZGVyIGRvZXMgZXhlY3V0
ZSwgaXRzIGFzc29jaWF0ZWQgZnJhZ21lbnQgc2hhZGVyIHdpbGwgcmVuZGVyCisgICAgICAgIGEg
Z3JlZW4gZGl2IGFzIHJlZC4KKworICAgICAgICAqIGNzczMvZmlsdGVycy9jdXN0b20vaW52YWxp
ZC1jdXN0b20tZmlsdGVyLWF0dHJpYnV0ZS10eXBlcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBjc3MzL2ZpbHRlcnMvY3VzdG9tL2ludmFsaWQtY3VzdG9tLWZpbHRlci1hdHRyaWJ1
dGUtdHlwZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL3Jlc291cmNlcy9p
bnZhbGlkLXR5cGUtYS1tZXNoLWNvb3JkLnZzOiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRl
cnMvcmVzb3VyY2VzL2ludmFsaWQtdHlwZS1hLXBvc2l0aW9uLnZzOiBBZGRlZC4KKyAgICAgICAg
KiBjc3MzL2ZpbHRlcnMvcmVzb3VyY2VzL2ludmFsaWQtdHlwZS1hLXRleC1jb29yZC52czogQWRk
ZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL3Jlc291cmNlcy9pbnZhbGlkLXR5cGUtYS10cmlh
bmdsZS1jb29yZC52czogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0ZXJzL3Jlc291cmNlcy9p
bnZhbGlkLXR5cGUtYXR0cmlidXRlLWFycmF5LnZzOiBBZGRlZC4KKwogMjAxMi0xMC0xNiAgRW1p
bCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHNwZWNpYWwt
Y2FzZSBmbG9vcmluZyBvZiBiYXNlbGluZVBvc2l0aW9uIGZvciByZXBsYWNlZCBlbGVtZW50cyBp
biBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9pbnZhbGlkLWN1c3RvbS1maWx0ZXItYXR0
cmlidXRlLXR5cGVzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvY3Vz
dG9tL2ludmFsaWQtY3VzdG9tLWZpbHRlci1hdHRyaWJ1dGUtdHlwZXMtZXhwZWN0ZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzkwZmRlCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9pbnZhbGlkLWN1c3RvbS1maWx0
ZXItYXR0cmlidXRlLXR5cGVzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFkb2N0
eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5UZXN0cyB0aGF0IGN1c3RvbSBm
aWx0ZXJzIGRvIG5vdCBleGVjdXRlIGlmIHRoZSBhdXRob3IgZGVmaW5lcyBidWlsdC1pbiBhdHRy
aWJ1dGVzIHdpdGggdGhlIHdyb25nIHR5cGUuPC90aXRsZT4KKyAgICA8IS0tIAorICAgICAgICBU
aGlzIGlzIHRoZSByZWZlcmVuY2UgZmlsZSBmb3IgdGhlIHRlc3QuCisgICAgICAgIElmIHRoZSB0
ZXN0IHBhc3NlcywgeW91IHNob3VsZCBzZWUgNSB2ZXJ0aWNhbGx5LXN0YWNrZWQgZ3JlZW4gYm94
ZXMuCisgICAgLS0+CisgICAgPHN0eWxlPgorICAgIGRpdiB7CisgICAgICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigwLCAyNTUsIDApOworICAgICAgICB3aWR0aDogNTBweDsKKyAgICAgICAgaGVp
Z2h0OiA1MHB4OworICAgICAgICBtYXJnaW46IDEwcHg7CisgICAgfQorICAgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2PjwvZGl2PgorICAgIDxkaXY+PC9kaXY+CisgICAgPGRp
dj48L2Rpdj4KKyAgICA8ZGl2PjwvZGl2PgorICAgIDxkaXY+PC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvY3VzdG9tL2ludmFsaWQt
Y3VzdG9tLWZpbHRlci1hdHRyaWJ1dGUtdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvZmls
dGVycy9jdXN0b20vaW52YWxpZC1jdXN0b20tZmlsdGVyLWF0dHJpYnV0ZS10eXBlcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWEwNTQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvY3VzdG9tL2ludmFsaWQtY3VzdG9tLWZpbHRl
ci1hdHRyaWJ1dGUtdHlwZXMuaHRtbApAQCAtMCwwICsxLDUyIEBACis8IWRvY3R5cGUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPlRlc3RzIHRoYXQgY3VzdG9tIGZpbHRlcnMgZG8g
bm90IGV4ZWN1dGUgaWYgdGhlIGF1dGhvciBkZWZpbmVzIGJ1aWx0LWluIGF0dHJpYnV0ZXMgd2l0
aCB0aGUgd3JvbmcgdHlwZS48L3RpdGxlPgorICAgIDwhLS0gSWYgdGhlIHRlc3QgcGFzc2VzLCB5
b3Ugc2hvdWxkIHNlZSA1IHZlcnRpY2FsbHktc3RhY2tlZCBncmVlbiBib3hlcy4gLS0+CisgICAg
PHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICB3
aW5kb3cudGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdENTU0N1c3RvbUZpbHRl
ckVuYWJsZWQiLCAiMSIpOworICAgICAgICAgICAgd2luZG93LnRlc3RSdW5uZXIub3ZlcnJpZGVQ
cmVmZXJlbmNlKCJXZWJLaXRXZWJHTEVuYWJsZWQiLCAiMSIpOworICAgICAgICAgICAgd2luZG93
LnRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBydW4gdGhlIHRlc3RzIGFmdGVyIHRoZSBzaGFkZXJzIGRvd25sb2FkLgorICAgICAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgIHdpbmRvdy50ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZT4KKyAg
ICBkaXYgeworICAgICAgICAvKiBJZiB0aGUgc2hhZGVycyBleGVjdXRlLCB0aGV5IHdpbGwgdHVy
biB0aGUgZWxlbWVudCdzIGNvbG9yIGZyb20gZ3JlZW4gdG8gcmVkLiAqLworICAgICAgICBiYWNr
Z3JvdW5kLWNvbG9yOiByZ2IoMCwgMjU1LCAwKTsKKyAgICAgICAgd2lkdGg6IDUwcHg7CisgICAg
ICAgIGhlaWdodDogNTBweDsKKyAgICAgICAgbWFyZ2luOiAxMHB4OworICAgIH0KKyAgICAuaW52
YWxpZC10eXBlLWEtbWVzaC1jb29yZCB7CisgICAgICAgIC13ZWJraXQtZmlsdGVyOiBjdXN0b20o
dXJsKCcuLi9yZXNvdXJjZXMvaW52YWxpZC10eXBlLWEtbWVzaC1jb29yZC52cycpIG1peCh1cmwo
Jy4uL3Jlc291cmNlcy9taXgtY29sb3IuZnMnKSBub3JtYWwgc291cmNlLWF0b3ApLCBtaXhfY29s
b3IgMS4wIDAuMCAwLjAgMS4wKTsKKyAgICB9CisgICAgLmludmFsaWQtdHlwZS1hLXBvc2l0aW9u
IHsKKyAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGN1c3RvbSh1cmwoJy4uL3Jlc291cmNlcy9pbnZh
bGlkLXR5cGUtYS1wb3NpdGlvbi52cycpIG1peCh1cmwoJy4uL3Jlc291cmNlcy9taXgtY29sb3Iu
ZnMnKSBub3JtYWwgc291cmNlLWF0b3ApLCBtaXhfY29sb3IgMS4wIDAuMCAwLjAgMS4wKTsKKyAg
ICB9CisgICAgLmludmFsaWQtdHlwZS1hLXRleC1jb29yZCB7CisgICAgICAgIC13ZWJraXQtZmls
dGVyOiBjdXN0b20odXJsKCcuLi9yZXNvdXJjZXMvaW52YWxpZC10eXBlLWEtdGV4LWNvb3JkLnZz
JykgbWl4KHVybCgnLi4vcmVzb3VyY2VzL21peC1jb2xvci5mcycpIG5vcm1hbCBzb3VyY2UtYXRv
cCksIG1peF9jb2xvciAxLjAgMC4wIDAuMCAxLjApOworICAgIH0KKyAgICAuaW52YWxpZC10eXBl
LWEtdHJpYW5nbGUtY29vcmQgeworICAgICAgICAtd2Via2l0LWZpbHRlcjogY3VzdG9tKHVybCgn
Li4vcmVzb3VyY2VzL2ludmFsaWQtdHlwZS1hLXRyaWFuZ2xlLWNvb3JkLnZzJykgbWl4KHVybCgn
Li4vcmVzb3VyY2VzL21peC1jb2xvci5mcycpIG5vcm1hbCBzb3VyY2UtYXRvcCksIG1peF9jb2xv
ciAxLjAgMC4wIDAuMCAxLjApOworICAgIH0KKyAgICAuaW52YWxpZC10eXBlLWF0dHJpYnV0ZS1h
cnJheSB7CisgICAgICAgIC13ZWJraXQtZmlsdGVyOiBjdXN0b20odXJsKCcuLi9yZXNvdXJjZXMv
aW52YWxpZC10eXBlLWF0dHJpYnV0ZS1hcnJheS52cycpIG1peCh1cmwoJy4uL3Jlc291cmNlcy9t
aXgtY29sb3IuZnMnKSBub3JtYWwgc291cmNlLWF0b3ApLCBtaXhfY29sb3IgMS4wIDAuMCAwLjAg
MS4wKTsgICAgICAgIAorICAgIH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJydW5UZXN0KCkiPgorICAgIDxkaXYgY2xhc3M9ImludmFsaWQtdHlwZS1hLW1lc2gtY29vcmQi
PjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImludmFsaWQtdHlwZS1hLXBvc2l0aW9uIj48L2Rpdj4K
KyAgICA8ZGl2IGNsYXNzPSJpbnZhbGlkLXR5cGUtYS10ZXgtY29vcmQiPjwvZGl2PgorICAgIDxk
aXYgY2xhc3M9ImludmFsaWQtdHlwZS1hLXRyaWFuZ2xlLWNvb3JkIj48L2Rpdj4KKyAgICA8ZGl2
IGNsYXNzPSJpbnZhbGlkLXR5cGUtYXR0cmlidXRlLWFycmF5Ij48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9yZXNvdXJjZXMvaW52
YWxpZC10eXBlLWEtbWVzaC1jb29yZC52cyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9yZXNv
dXJjZXMvaW52YWxpZC10eXBlLWEtbWVzaC1jb29yZC52cwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zYWRlOWM4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3Nz
My9maWx0ZXJzL3Jlc291cmNlcy9pbnZhbGlkLXR5cGUtYS1tZXNoLWNvb3JkLnZzCkBAIC0wLDAg
KzEsMTUgQEAKKy8vIElmIHRoaXMgc2hhZGVyJ3MgcmVsYXRlZCB0ZXN0IHBhc3NlcywgdGhlIGN1
c3RvbSBmaWx0ZXIgZG9lcyBub3QgZXhlY3V0ZSBiZWNhdXNlIGFfbWVzaENvb3JkJ3MgdHlwZSBp
cyBpbnZhbGlkLgorCitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKworLy8gYV9tZXNoQ29vcmQg
c2hvdWxkIGJlIGEgdmVjMiwgbm90IGEgZmxvYXQuCithdHRyaWJ1dGUgZmxvYXQgYV9tZXNoQ29v
cmQ7CisKK2F0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CisKK3VuaWZvcm0gbWF0NCB1X3Byb2pl
Y3Rpb25NYXRyaXg7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2pl
Y3Rpb25NYXRyaXggKiBhX3Bvc2l0aW9uOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3Nz
My9maWx0ZXJzL3Jlc291cmNlcy9pbnZhbGlkLXR5cGUtYS1wb3NpdGlvbi52cyBiL0xheW91dFRl
c3RzL2NzczMvZmlsdGVycy9yZXNvdXJjZXMvaW52YWxpZC10eXBlLWEtcG9zaXRpb24udnMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhNDhlOAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9yZXNvdXJjZXMvaW52YWxpZC10eXBlLWEtcG9z
aXRpb24udnMKQEAgLTAsMCArMSwxMyBAQAorLy8gSWYgdGhpcyBzaGFkZXIncyByZWxhdGVkIHRl
c3QgcGFzc2VzLCB0aGUgY3VzdG9tIGZpbHRlciBkb2VzIG5vdCBleGVjdXRlIGJlY2F1c2UgYV9w
b3NpdGlvbidzIHR5cGUgaXMgaW52YWxpZC4KKworcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisK
Ky8vIGFfcG9zaXRpb24gc2hvdWxkIGJlIGEgdmVjNCwgbm90IGEgdmVjMy4KK2F0dHJpYnV0ZSB2
ZWMzIGFfcG9zaXRpb247CisKK3VuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb25NYXRyaXg7CisKK3Zv
aWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25NYXRyaXggKiB2ZWM0
KGFfcG9zaXRpb24sIDEuMCk7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRl
cnMvcmVzb3VyY2VzL2ludmFsaWQtdHlwZS1hLXRleC1jb29yZC52cyBiL0xheW91dFRlc3RzL2Nz
czMvZmlsdGVycy9yZXNvdXJjZXMvaW52YWxpZC10eXBlLWEtdGV4LWNvb3JkLnZzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTEzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvcmVzb3VyY2VzL2ludmFsaWQtdHlwZS1hLXRleC1jb29y
ZC52cwpAQCAtMCwwICsxLDE1IEBACisvLyBJZiB0aGlzIHNoYWRlcidzIHJlbGF0ZWQgdGVzdCBw
YXNzZXMsIHRoZSBjdXN0b20gZmlsdGVyIGRvZXMgbm90IGV4ZWN1dGUgYmVjYXVzZSBhX3RleENv
b3JkJ3MgdHlwZSBpcyBpbnZhbGlkLgorCitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKworLy8g
YV9tZXNoQ29vcmQgc2hvdWxkIGJlIGEgdmVjMiwgbm90IGFuIHZlYzQuCithdHRyaWJ1dGUgdmVj
NCBhX3RleENvb3JkOworCithdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOworCit1bmlmb3JtIG1h
dDQgdV9wcm9qZWN0aW9uTWF0cml4OworCit2b2lkIG1haW4oKQoreworICAgIGdsX1Bvc2l0aW9u
ID0gdV9wcm9qZWN0aW9uTWF0cml4ICogYV9wb3NpdGlvbjsKK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2NzczMvZmlsdGVycy9yZXNvdXJjZXMvaW52YWxpZC10eXBlLWEtdHJpYW5nbGUtY29v
cmQudnMgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvcmVzb3VyY2VzL2ludmFsaWQtdHlwZS1h
LXRyaWFuZ2xlLWNvb3JkLnZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1
YzNhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvcmVzb3Vy
Y2VzL2ludmFsaWQtdHlwZS1hLXRyaWFuZ2xlLWNvb3JkLnZzCkBAIC0wLDAgKzEsMTUgQEAKKy8v
IElmIHRoaXMgc2hhZGVyJ3MgcmVsYXRlZCB0ZXN0IHBhc3NlcywgdGhlIGN1c3RvbSBmaWx0ZXIg
ZG9lcyBub3QgZXhlY3V0ZSBiZWNhdXNlIGFfdHJpYW5nbGVDb29yZCdzIHR5cGUgaXMgaW52YWxp
ZC4KKworcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisKKy8vIGFfbWVzaENvb3JkIHNob3VsZCBi
ZSBhIHZlYzMsIG5vdCBhIHZlYzIuCithdHRyaWJ1dGUgdmVjMiBhX3RyaWFuZ2xlQ29vcmQ7CisK
K2F0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CisKK3VuaWZvcm0gbWF0NCB1X3Byb2plY3Rpb25N
YXRyaXg7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2plY3Rpb25N
YXRyaXggKiBhX3Bvc2l0aW9uOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9maWx0
ZXJzL3Jlc291cmNlcy9pbnZhbGlkLXR5cGUtYXR0cmlidXRlLWFycmF5LnZzIGIvTGF5b3V0VGVz
dHMvY3NzMy9maWx0ZXJzL3Jlc291cmNlcy9pbnZhbGlkLXR5cGUtYXR0cmlidXRlLWFycmF5LnZz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzQyMjEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvcmVzb3VyY2VzL2ludmFsaWQtdHlwZS1h
dHRyaWJ1dGUtYXJyYXkudnMKQEAgLTAsMCArMSwxMyBAQAorLy8gSWYgdGhpcyBzaGFkZXIncyBy
ZWxhdGVkIHRlc3QgcGFzc2VzLCB0aGUgY3VzdG9tIGZpbHRlciBkb2VzIG5vdCBleGVjdXRlIGJl
Y2F1c2UgYV9wb3NpdGlvbidzIHR5cGUgaXMgaW52YWxpZC4KKworcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7CisKKy8vIGFfcG9zaXRpb24gc2hvdWxkIGJlIGEgdmVjNCwgbm90IGEgdmVjNCBhcnJh
eS4KK2F0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb25bMV07CisKK3VuaWZvcm0gbWF0NCB1X3Byb2pl
Y3Rpb25NYXRyaXg7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2pl
Y3Rpb25NYXRyaXggKiBhX3Bvc2l0aW9uWzBdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGNjMzQ1ZmEuLjU0
ZTVjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0xMC0xOCAgTWF4IFZ1am92
aWMgIDxtdnVqb3ZpY0BhZG9iZS5jb20+CisKKyAgICAgICAgW0NTUyBTaGFkZXJzXSBWYWxpZGF0
ZSB0eXBlcyBvZiBidWlsdC1pbiB2ZXJ0ZXggYXR0cmlidXRlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgUmVqZWN0IGN1c3RvbSBmaWx0ZXJzIGluIHdoaWNo
IHRoZSBhdXRob3IgZGVmaW5lZCBidWlsdC1pbiBhdHRyaWJ1dGVzIHdpdGggdGhlIHdyb25nIHR5
cGUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgR0xTTCBkZWNsYXJhdGlvbiAiYXR0cmlidXRl
IGZsb2F0IGFfcG9zaXRpb24iIGlzIGluY29ycmVjdCBiZWNhdXNlCisgICAgICAgIGFfcG9zaXRp
b24gc2hvdWxkIGJlIGEgdmVjNCwgbm90IGEgZmxvYXQuCisKKyAgICAgICAgVGVzdDogY3NzMy9m
aWx0ZXJzL2N1c3RvbS9pbnZhbGlkLWN1c3RvbS1maWx0ZXItYXR0cmlidXRlLXR5cGVzLmh0bWwK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpBTkdMRVNoYWRlclN5bWJvbDo6aXNTYW1wbGVyKToKKyAgICAgICAgICAg
IEFkZCBjb25zdCBxdWFsaWZpZXIgdG8gaXNTYW1wbGVyIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsdEluQXR0cmlidXRlTmFt
ZVRvVHlwZU1hcCk6CisgICAgICAgICAgICBOZXcgZmlsZSBzdGF0aWMgZnVuY3Rpb24uIFJldHVy
bnMgYSBtYXAgb2YgdGhlIENTUyBDdXN0b20gRmlsdGVycyBidWlsdC1pbiBhdHRyaWJ1dGUKKyAg
ICAgICAgICAgIG5hbWVzIGFuZCB0aGVpciBleHBlY3RlZCB0eXBlcy4KKyAgICAgICAgKFdlYkNv
cmU6OnZhbGlkYXRlU3ltYm9scyk6CisgICAgICAgICAgICBOZXcgZmlsZSBzdGF0aWMgZnVuY3Rp
b24uIExvb3AgdGhyb3VnaCBhbGwgb2YgdGhlIHN5bWJvbHMuIFJlamVjdCB0aGUgc2hhZGVyIGlm
IHdlIGZpbmQKKyAgICAgICAgICAgIGEgYnVpbHQtaW4gYXR0cmlidXRlIGRlZmluZWQgd2l0aCB0
aGUgd3JvbmcgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclZhbGlkYXRlZFBy
b2dyYW06OkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0pOgorICAgICAgICAgICAgQ2FsbCB0
aGUgbmV3IHZhbGlkYXRlU3ltYm9scyBmdW5jdGlvbi4gSWYgaXQgcmV0dXJucyBmYWxzZSwgZXhp
dCB0aGUgY29uc3RydWN0b3IgZWFybHksCisgICAgICAgICAgICB3aGljaCByZWplY3RzIHRoZSBw
cm9ncmFtLgorICAgICAgICAgICAgTW92ZSB0aGUgbG9vcCB0aGF0IGNoZWNrcyBpZiBhbnkgdW5p
Zm9ybSBpcyBhIHNhbXBsZXIgaW50byB0aGUgdGhlIHZhbGlkYXRlU3ltYm9scworICAgICAgICAg
ICAgZnVuY3Rpb24uCisKIDIwMTItMTAtMTYgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzcGVjaWFsLWNhc2UgZmxvb3Jpbmcgb2YgYmFzZWxpbmVQ
b3NpdGlvbiBmb3IgcmVwbGFjZWQgZWxlbWVudHMgaW4gSW5saW5lRmxvd0JveDo6cGxhY2VCb3hl
c0luQmxvY2tEaXJlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCmluZGV4IDE3OGQzYmQuLjVjNTA5OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
aApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgQU5HTEVTaGFkZXJTeW1ib2wgewogICAgIFNoRGF0
YVR5cGUgZGF0YVR5cGU7CiAgICAgaW50IHNpemU7CiAKLSAgICBib29sIGlzU2FtcGxlcigpCisg
ICAgYm9vbCBpc1NhbXBsZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN5bWJvbFR5
cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0KICAgICAgICAgICAgICYmIChkYXRhVHlw
ZSA9PSBTSF9TQU1QTEVSXzJECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmNwcAppbmRleCA4NWRkZGE1Li4yNmU4YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dy
YW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAKQEAgLTM3LDEyICszNyw3MCBAQAogI2luY2x1
ZGUgIkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mby5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZp
bmUgU0hBREVSKFNyYykgKCNTcmMpIAogCisvLyBGSVhNRTogUmV1c2UgdGhpcyB0eXBlIHdoZW4g
d2UgdmFsaWRhdGUgdGhlIHR5cGVzIG9mIGJ1aWx0LWluIHVuaWZvcm1zLgorLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4OTc0Cit0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBTaERhdGFUeXBlPiBTeW1ib2xOYW1lVG9UeXBlTWFwOworCitzdGF0aWMgU3ltYm9sTmFt
ZVRvVHlwZU1hcCogYnVpbHRJbkF0dHJpYnV0ZU5hbWVUb1R5cGVNYXAoKQoreworICAgIHN0YXRp
YyBTeW1ib2xOYW1lVG9UeXBlTWFwKiBuYW1lVG9UeXBlTWFwID0gMDsKKyAgICBpZiAoIW5hbWVU
b1R5cGVNYXApIHsKKyAgICAgICAgbmFtZVRvVHlwZU1hcCA9IG5ldyBTeW1ib2xOYW1lVG9UeXBl
TWFwOyAgICAgICAgCisgICAgICAgIG5hbWVUb1R5cGVNYXAtPnNldCgiYV9tZXNoQ29vcmQiLCBT
SF9GTE9BVF9WRUMyKTsKKyAgICAgICAgbmFtZVRvVHlwZU1hcC0+c2V0KCJhX3Bvc2l0aW9uIiwg
U0hfRkxPQVRfVkVDNCk7CisgICAgICAgIG5hbWVUb1R5cGVNYXAtPnNldCgiYV90ZXhDb29yZCIs
IFNIX0ZMT0FUX1ZFQzIpOworICAgICAgICBuYW1lVG9UeXBlTWFwLT5zZXQoImFfdHJpYW5nbGVD
b29yZCIsIFNIX0ZMT0FUX1ZFQzMpOworICAgIH0KKyAgICByZXR1cm4gbmFtZVRvVHlwZU1hcDsK
K30KKworc3RhdGljIGJvb2wgdmFsaWRhdGVTeW1ib2xzKGNvbnN0IFZlY3RvcjxBTkdMRVNoYWRl
clN5bWJvbD4mIHN5bWJvbHMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzeW1ib2xz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEFOR0xFU2hhZGVyU3ltYm9sJiBzeW1ib2wg
PSBzeW1ib2xzW2ldOworICAgICAgICBzd2l0Y2ggKHN5bWJvbC5zeW1ib2xUeXBlKSB7CisgICAg
ICAgIGNhc2UgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURTogeworICAgICAgICAgICAgU3lt
Ym9sTmFtZVRvVHlwZU1hcCogYXR0cmlidXRlTmFtZVRvVHlwZU1hcCA9IGJ1aWx0SW5BdHRyaWJ1
dGVOYW1lVG9UeXBlTWFwKCk7CisgICAgICAgICAgICBTeW1ib2xOYW1lVG9UeXBlTWFwOjppdGVy
YXRvciBidWlsdEluQXR0cmlidXRlID0gYXR0cmlidXRlTmFtZVRvVHlwZU1hcC0+ZmluZChzeW1i
b2wubmFtZSk7CisgICAgICAgICAgICBpZiAoYnVpbHRJbkF0dHJpYnV0ZSAhPSBhdHRyaWJ1dGVO
YW1lVG9UeXBlTWFwLT5lbmQoKSAmJiBzeW1ib2wuZGF0YVR5cGUgIT0gYnVpbHRJbkF0dHJpYnV0
ZS0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgYXV0aG9yIGRlZmluZWQgb25lIG9m
IHRoZSBidWlsdC1pbiBhdHRyaWJ1dGVzIHdpdGggdGhlIHdyb25nIHR5cGUuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhN
RTogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBub3Qgb25lIG9mIHRoZSBidWls
dC1pbiBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4OTczCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNOgorICAgICAgICAgICAgaWYgKHN5
bWJvbC5pc1NhbXBsZXIoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93LCB3
ZSByZXN0cmljdCBzaGFkZXJzIHdpdGggYW55IHNhbXBsZXIgZGVmaW5lZC4KKyAgICAgICAgICAg
ICAgICAvLyBXaGVuIHdlIGltcGxlbWVudCB0ZXh0dXJlIHBhcmFtZXRlcnMsIHdlIHdpbGwgYWxs
b3cgc2hhZGVycyB3aG9zZSBzYW1wbGVycyBhcmUgYm91bmQgdG8gdmFsaWQgdGV4dHVyZXMuCisg
ICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBub3QgYWxsb3cgT3BlbkdMIHRvIGdpdmUgdW5ib3Vu
ZCBzYW1wbGVycyBhIGRlZmF1bHQgdmFsdWUgb2YgMCBiZWNhdXNlIHRoYXQgcmVmZXJlbmNlcyB0
aGUgZWxlbWVudCB0ZXh0dXJlLAorICAgICAgICAgICAgICAgIC8vIHdoaWNoIHNob3VsZCBiZSBp
bmFjY2Vzc2libGUgdG8gdGhlIGF1dGhvcidzIHNoYWRlciBjb2RlLgorICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIzMAorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
RklYTUU6IFZhbGlkYXRlIHRoZSB0eXBlcyBvZiBidWlsdC1pbiB1bmlmb3Jtcy4KKyAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODk3NAorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIFN0cmluZyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpk
ZWZhdWx0VmVydGV4U2hhZGVyU3RyaW5nKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgdmVydGV4U2hhZGVyU3RyaW5nLCAoQVNDSUlMaXRlcmFsKFNIQURFUigKQEAgLTk1LDE2
ICsxNTMsMTAgQEAgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6Q3VzdG9tRmlsdGVyVmFs
aWRhdGVkUHJvZ3JhbShDdXN0b21GaWx0ZXJHbG9iYWxDb24KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIFZhbGlkYXRlIHRoZSBhdXRob3IncyBzYW1wbGVycy4KLSAgICBmb3IgKFZl
Y3RvcjxBTkdMRVNoYWRlclN5bWJvbD46Oml0ZXJhdG9yIGl0ID0gc3ltYm9scy5iZWdpbigpOyBp
dCAhPSBzeW1ib2xzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+aXNTYW1wbGVyKCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93LCB3ZSByZXN0cmljdCBzaGFkZXJzIHdp
dGggYW55IHNhbXBsZXIgZGVmaW5lZC4KLSAgICAgICAgICAgIC8vIFdoZW4gd2UgaW1wbGVtZW50
IHRleHR1cmUgcGFyYW1ldGVycywgd2Ugd2lsbCBhbGxvdyBzaGFkZXJzIHdob3NlIHNhbXBsZXJz
IGFyZSBib3VuZCB0byB2YWxpZCB0ZXh0dXJlcy4KLSAgICAgICAgICAgIC8vIFdlIG11c3Qgbm90
IGFsbG93IE9wZW5HTCB0byBnaXZlIHVuYm91bmQgc2FtcGxlcnMgYSBkZWZhdWx0IHZhbHVlIG9m
IDAgYmVjYXVzZSB0aGF0IHJlZmVyZW5jZXMgdGhlIERPTSBlbGVtZW50IHRleHR1cmUsCi0gICAg
ICAgICAgICAvLyB3aGljaCBzaG91bGQgYmUgaW5hY2Nlc3NpYmxlIHRvIHRoZSBhdXRob3IncyBz
aGFkZXIgY29kZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NjIzMAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYg
KCF2YWxpZGF0ZVN5bWJvbHMoc3ltYm9scykpIHsKKyAgICAgICAgLy8gRklYTUU6IFJlcG9ydCB2
YWxpZGF0aW9uIGVycm9ycy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc0NDE2CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBXZSBu
ZWVkIHRvIGFkZCB0ZXh0dXJlIGFjY2VzcywgYmxlbmRpbmcsIGFuZCBjb21wb3NpdGluZyBjb2Rl
IHRvIHNoYWRlcnMgdGhhdCBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoZSBDU1MgbWl4IGZ1bmN0aW9u
Lgo=
</data>
<flag name="commit-queue"
          id="200130"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182209</attachid>
            <date>2013-01-10 14:29:40 -0800</date>
            <delta_ts>2013-01-14 15:00:17 -0800</delta_ts>
            <desc>Patch (ready for review)</desc>
            <filename>106274-6.patch</filename>
            <type>text/plain</type>
            <size>1803092</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0IGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKaW5kZXggNWJjOWZmOC4uODA5ODkxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxpc3QKQEAgLTEsMjIgKzEsMjIgQEAKIDw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICIt
Ly9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1By
b3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotICAgIDxhcnJheT4K
LSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+
Ci0gICAgICAgICAgICA8c3RyaW5nPkFOR0xFPC9zdHJpbmc+Ci0gICAgICAgICAgICA8a2V5Pk9w
ZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0gICAgICAgICAgICA8c3RyaW5nPnIxMTcwPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0gICAgICAgICAg
ICA8c3RyaW5nPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+
Ci0gICAgICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VTQ008L2tleT4KLSAgICAgICAgICAgIDxzdHJp
bmc+c3ZuIGNvIC1yMTE3MCBodHRwOi8vYW5nbGVwcm9qZWN0Lmdvb2dsZWNvZGUuY29tL3N2bi90
cnVuay88L3N0cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUltcG9ydERhdGU8L2tl
eT4KLSAgICAgICAgICAgIDxzdHJpbmc+MjAxMi0wNi0xNzwvc3RyaW5nPgotICAgICAgICAgICAg
PGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotICAgICAgICAgICAgPHN0cmluZz5CU0Q8L3N0
cmluZz4KLSAgICAgICAgICAgIDxrZXk+T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+Ci0gICAg
ICAgICAgICA8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5nPgotICAgICAgICA8L2RpY3Q+Ci0gICAg
PC9hcnJheT4KLTwvcGxpc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPGFycmF5Pgor
CTxkaWN0PgorCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+CisJCTxzdHJpbmc+QU5HTEU8
L3N0cmluZz4KKwkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgorCQk8c3RyaW5nPnIxNjQx
PC9zdHJpbmc+CisJCTxrZXk+T3BlblNvdXJjZVdlYnNpdGVVUkw8L2tleT4KKwkJPHN0cmluZz5o
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCQk8a2V5Pk9w
ZW5Tb3VyY2VTQ008L2tleT4KKwkJPHN0cmluZz5zdm4gY28gLXIxNjQxIGh0dHA6Ly9hbmdsZXBy
b2plY3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rLzwvc3RyaW5nPgorCQk8a2V5Pk9wZW5Tb3Vy
Y2VJbXBvcnREYXRlPC9rZXk+CisJCTxzdHJpbmc+MjAxMy0wMS0wNDwvc3RyaW5nPgorCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlPC9rZXk+CisJCTxzdHJpbmc+QlNEPC9zdHJpbmc+CisJCTxrZXk+
T3BlblNvdXJjZUxpY2Vuc2VGaWxlPC9rZXk+CisJCTxzdHJpbmc+QU5HTEUudHh0PC9zdHJpbmc+
CisJPC9kaWN0PgorPC9hcnJheT4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9BTkdMRS5wcmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wcmkK
aW5kZXggMmY3YjcwMC4uMmJjN2ZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUucHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnByaQpAQCAt
OCw1ICs4LDYgQEAKIFNPVVJDRV9ESVIgPSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFCiAKIElOQ0xVREVQQVRIICs9IFwKLSAgICAkJFNPVVJDRV9ESVIvaW5jbHVk
ZS9HTFNMQU5HCisgICAgJCRTT1VSQ0VfRElSL2luY2x1ZGUvR0xTTEFORyBcCisgICAgJCRTT1VS
Q0VfRElSL2luY2x1ZGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzIwN2VjYS4uNTExM2I3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC00Miw2ICs0MiwzNSBAQAogCQlBMEFBQkU0NTEzQUZFOTQ1MDBGMkVC
RDEgLyogT3V0cHV0RVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTBBQUJFNDMxM0FGRTk0NTAwRjJFQkQxIC8qIE91dHB1dEVTU0wuaCAqLzsgfTsK
IAkJQTBBQUJFNDgxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwQUFCRTQ2MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5jcHAgKi87IH07CiAJCUEwQUFCRTQ5MTNBRkU5NjEw
MEYyRUJEMSAvKiBUcmFuc2xhdG9yRVNTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi87IH07CisJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4OTMxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5jcHAgKi87IH07CisJCUEy
NjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk0MTY5NzRERUQwMDZGQUE1
QSAvKiBEaWFnbm9zdGljc0Jhc2UuaCAqLzsgfTsKKwkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk1MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHAgKi87IH07CisJCUEyNjRGOEFGMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NEY4OTYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmggKi87IH07CisJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OTcxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi87IH07CisJCUEyNjRG
OEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAv
KiBEaXJlY3RpdmVQYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4QjIxNjk3NERFRDAwNkZBQTVBIC8q
IEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI2NEY4OTkxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
Y3BwICovOyB9OworCQlBMjY0RjhCMzE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLzsgfTsKKwkJQTI2NEY4
QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5j
cHAgKi87IH07CisJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUMxNjk3NERFRDAw
NkZBQTVBIC8qIElucHV0LmggKi87IH07CisJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBM
ZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjY0Rjg5RDE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwICovOyB9OworCQlBMjY0RjhCNzE2
OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oICovOyB9
OworCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4OUYxNjk3NERFRDAwNkZBQTVB
IC8qIE1hY3JvLmNwcCAqLzsgfTsKKwkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhB
MDE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCAqLzsgfTsKKwkJQTI2NEY4QkExNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5k
ZXIuY3BwICovOyB9OworCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4
QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCAqLzsgfTsKKwkJQTI2NEY4QkMx
Njk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJp
Y19sZXguaCAqLzsgfTsKKwkJQTI2NEY4QkQxNjk3NERFRDAwNkZBQTVBIC8qIHBwX3V0aWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNDE2
OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLzsgfTsKKwkJQTI2NEY4QkUxNjk3NERFRDAw
NkZBQTVBIC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCAqLzsgfTsKKwkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTYx
Njk3NERFRDAwNkZBQTVBIC8qIFByZXByb2Nlc3Nvci5oICovOyB9OworCQlBMjY0RjhDMDE2OTc0
REVEMDA2RkFBNUEgLyogU291cmNlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEE3MTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovOyB9OworCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4QTgx
Njk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzIxNjk3NERFRDAw
NkZBQTVBIC8qIFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLzsgfTsKKwkJQTI2
NEY4QzMxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyog
VG9rZW5pemVyLmNwcCAqLzsgfTsKKwkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2
NEY4QUIxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oICovOyB9OworCQlBMjY0RjhDODE2
OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVz
LmggKi87IH07CisJCUEyNjRGOEM5MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhD
NjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovOyB9OworCQlBMjY0RjhD
QTE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBW
YXJpYWJsZVBhY2tlci5oICovOyB9OworCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hy
cGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBE
aWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdCMDE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9Owog
CQlBMjY1NjdCQzE1OUMyMUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUz
OSAvKiBEaWFnbm9zdGljcy5oICovOyB9OwogCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi87IH07CkBAIC00OSwzMCArNzgsNiBAQAogCQlBMjY1NjdCRjE1OUMyMUIxMDAzOTg1Mzkg
LyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNDE1OUMyMUIxMDAzOTg1MzkgLyogSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5jcHAgKi87IH07CiAJCUEyNjU2N0MwMTU5QzIxQjEwMDM5ODUzOSAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjU2N0I1MTU5QzIxQjEwMDM5ODUzOSAvKiBQcmFnbWEuaCAqLzsgfTsKIAkJQTI2NTY3QzExNTlD
MjFCMTAwMzk4NTM5IC8qIFJlbmFtZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCNjE1OUMyMUIxMDAzOTg1MzkgLyogUmVuYW1l
RnVuY3Rpb24uaCAqLzsgfTsKLQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0
aWNzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RUQxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDOTE1OUMyMUNFMDAzOTg1
MzkgLyogRGlhZ25vc3RpY3MuaCAqLzsgfTsKLQkJQTI2NTY3RUUxNTlDMjFDRTAwMzk4NTM5IC8q
IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAgKi87IH07Ci0JCUEyNjU2N0VGMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY1NjdDQjE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5oICovOyB9Owot
CQlBMjY1NjdGMDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NDMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9OwotCQlBMjY1NjdGMTE1OUMyMUNF
MDAzOTg1MzkgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZl
UGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0YyMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLzsgfTsK
LQkJQTI2NTY3RjMxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0NGMTU5QzIxQ0Uw
MDM5ODUzOSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi87IH07Ci0JCUEyNjU2N0Y1MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwICovOyB9Owot
CQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0QzMTU5QzIxQ0UwMDM5ODUzOSAvKiBJ
bnB1dC5oICovOyB9OwotCQlBMjY1NjdGNzE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDQxNTlD
MjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLzsgfTsKLQkJQTI2NTY3RjgxNTlDMjFDRTAwMzk4
NTM5IC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjdENTE1OUMyMUNFMDAzOTg1MzkgLyogTGV4ZXIuaCAqLzsgfTsKLQkJQTI2NTY3
RjkxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5j
cHAgKi87IH07Ci0JCUEyNjU2N0ZBMTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RDcxNTlDMjFDRTAw
Mzk4NTM5IC8qIE1hY3JvLmggKi87IH07Ci0JCUEyNjU2N0ZCMTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLzsg
fTsKLQkJQTI2NTY3RkMxNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0Q5MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmggKi87IH07Ci0JCUEyNjU2ODAzMTU5QzIxQ0UwMDM5
ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTI2NTY3RTAxNTlDMjFDRTAwMzk4NTM5IC8qIFByZXByb2Nlc3Nvci5j
cHAgKi87IH07Ci0JCUEyNjU2ODA0MTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0UxMTU5
QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLzsgfTsKLQkJQTI2NTY4MDUxNTlDMjFD
RTAwMzk4NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdFMjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9j
YXRpb24uaCAqLzsgfTsKLQkJQTI2NTY4MDcxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2N0U0MTU5
QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbi5jcHAgKi87IH07Ci0JCUEyNjU2ODA4MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTI2NTY3RTUxNTlDMjFDRTAwMzk4NTM5IC8qIFRva2VuLmggKi87IH07Ci0JCUEyNjU2
ODBBMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5IC8qIFRv
a2VuaXplci5jcHAgKi87IH07Ci0JCUEyNjU2ODBCMTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjU2
N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCAqLzsgfTsKLQkJQTI2NTY4MkIxNTlD
MjM4ODAwMzk4NTM5IC8qIHBwX3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAq
LzsgfTsKIAkJQTI2NTY4MzkxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgyRDE1
OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCAqLzsgfTsKIAkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MkUxNTlDMjNFMTAwMzk4NTM5IC8qIERl
cGVuZGVuY3lHcmFwaC5oICovOyB9OwogCQlBMjY1NjgzQjE1OUMyM0UxMDAzOTg1MzkgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07CkBAIC04NCw2ICs4OSw3IEBACiAJCUEyNjU2ODQxMTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1Mzkg
LyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovOyB9OwogCQlBMjY1Njg0MjE1OUMy
M0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLzsgfTsKIAkJQTI2NTY4NDMx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAz
OTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCAqLzsgfTsKKwkJQTI5QjE1RTgx
Njk3ODQ1NzAwMTExRDk3IC8qIGtocnBsYXRmb3JtLmggaW4gQ29weUZpbGVzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJw
bGF0Zm9ybS5oICovOyB9OwogCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdM
U0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIz
OUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5j
cHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBG
MzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwpAQCAtOTcsMTMgKzEwMyw2IEBACiAJ
CUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCAqLzsgfTsKIAkJRkIzOUQyOEYxMjAwRjM1QTAwMDg4RTY5IC8q
IFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZCMzlEMjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07
CiAJCUZCMzlEMjkxMTIwMEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi87IH07Ci0JCUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAv
KiBhdG9tLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjM5RDI0NTEyMDBGMzVBMDAwODhFNjkgLyogYXRvbS5jICovOyB9OwotCQlGQjM5RDI5NjEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi87IH07Ci0JCUZC
MzlEMjk4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjRBMTIwMEYzNUEwMDA4OEU2OSAvKiBj
cHBzdHJ1Y3QuYyAqLzsgfTsKLQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5j
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNEIx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjM5RDI5RDEyMDBGMzVBMDAw
ODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkIzOUQyNEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJ
RkIzOUQyQTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmMgKi87IH07Ci0JCUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU0MTIw
MEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLzsgfTsKIAkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4
RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2
ZS5jcHAgKi87IH07CiAJCUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4
MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKIAkJRkIzOUQyQTgxMjAw
RjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxh
bmcuY3BwICovOyB9OwpAQCAtMTMzLDYgKzEzMiwxNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwogCQl9OworCQlBMjlCMTVFNjE2OTc4NDQ1MDAx
MTFEOTcgLyogQ29weUZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOworCQkJZHN0UGF0aCA9IHVzci9sb2NhbC9pbmNs
dWRlL0tIUjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJCUEy
OUIxNUU4MTY5Nzg0NTcwMDExMUQ5NyAvKiBraHJwbGF0Zm9ybS5oIGluIENvcHlGaWxlcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
IC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCkBAIC0xNzUsOCArMTg0LDM1IEBACiAJCUEwQUFCRTQz
MTNBRkU5NDUwMEYyRUJEMSAvKiBPdXRwdXRFU1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTBB
QUJFNDYxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JFU1NMLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTBBQUJFNDcxM0FGRTk2MTAwRjJFQkQxIC8qIFRyYW5zbGF0b3JF
U1NMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JFU1NMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3REaXNjb250aW51aXR5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4
OTQxNjk3NERFRDAwNkZBQTVBIC8qIERpYWdub3N0aWNzQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTI2NEY4OTUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTYxNjk3NERF
RDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTgxNjk3NERFRDAwNkZBQTVB
IC8qIERpcmVjdGl2ZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXJlY3RpdmVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OTkx
Njk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVB
IC8qIElucHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4OUMxNjk3NERFRDAwNkZB
QTVBIC8qIElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAv
KiBMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZXhlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1
QSAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0Rjg5RjE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm8uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEg
LyogTWFjcm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QTExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFj
cm9FeHBhbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEEyMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvRXhwYW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTI2NEY4QTMxNjk3NERFRDAwNkZBQTVBIC8qIG51bWVyaWNfbGV4LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG51bWVyaWNfbGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUEyNjRGOEE0MTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMjY0RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE2MTY5NzRERUQwMDZGQUE1QSAvKiBQcmVw
cm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEyNjRGOEE3MTY5NzRERUQwMDZGQUE1
QSAvKiBTb3VyY2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
b3VyY2VMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhBODE2
OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhB
OTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4QUExNjk3
NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBMjY0RjhDNTE2OTc0RTJBMDA2RkFBNUEgLyogSGFzaE5hbWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVQYWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMjY0RjhDNzE2OTc0RTJBMDA2RkFBNUEgLyogVmFy
aWFibGVQYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVQ
YWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2NEY4Q0MxNjk3NjJBQTAw
NkZBQTVBIC8qIGtocnBsYXRmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IGtocnBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0IwMTU5
QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjY1NjdCMjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NCwzMiArMjIwLDYgQEAKIAkJ
QTI2NTY3QjQxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I1MTU5QzIxQjEwMDM5
ODUzOSAvKiBQcmFnbWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJhZ21h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEyNjU2N0I2MTU5QzIxQjEwMDM5ODUz
OSAvKiBSZW5hbWVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5hbWVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdCNzE1
OUMyMUIxMDAzOTg1MzkgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9y
dENpcmN1aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRD
aXJjdWl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0M4MTU5QzIxQ0Uw
MDM5ODUzOSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlhZ25vc3RpY3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3QzkxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0NBMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVI
YW5kbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0NCMTU5
QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJlY3RpdmVQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRDE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVj
dGl2ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdDRTE1OUMy
MUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTI2NTY3Q0YxNTlDMjFDRTAwMzk4NTM5IC8qIEV4cHJlc3Npb25QYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhwcmVzc2lvblBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMjE1OUMyMUNFMDAzOTg1MzkgLyog
SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEMzE1OUMyMUNFMDAzOTg1Mzkg
LyogSW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDUxNTlDMjFDRTAwMzk4NTM5IC8q
IExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExleGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q2MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNy
by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBN
YWNyby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdEODE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0V4
cGFuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RDkxNTlDMjFD
RTAwMzk4NTM5IC8qIE1hY3JvRXhwYW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9FeHBhbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1
NjdFMDE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEyNjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyNjU2N0UyMTU5QzIxQ0UwMDM5ODUzOSAvKiBTb3VyY2VM
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2NhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNDE1OUMyMUNFMDAzOTg1
MzkgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9r
ZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFNTE1OUMyMUNFMDAz
OTg1MzkgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9rZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTI2NTY3RTcxNTlDMjFDRTAwMzk4NTM5
IC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjdFODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjY1NjgyQTE1
OUMyMzg4MDAzOTg1MzkgLyogcHBfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcHBfdXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MkQx
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMjY1NjgyRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMjY1NjgyRjE1OUMyM0UxMDAzOTg1MzkgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIyMiw2OSArMjMyLDYgQEAKIAkJQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTI2NTY4MzgxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZC
MzlEMEQxMTIwMEYwRTMwMDA4OEU2OSAvKiBsaWJBTkdMRS5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJBTkdMRS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQlGQjM5RDE4NjEyMDBGMjYyMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2Rl
R2VuR0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTg4MTIwMEYy
NjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxODkxMjAwRjI2MjAwMDg4RTY5IC8qIENvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8qIENvbnN0YW50VW5p
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRVbmlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyog
ZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBkZWJ1Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBkZWJ1Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE4RjEy
MDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTkwMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZvU2luay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5j
bHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDE5MjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTkzMTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6
ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk0MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
OTUxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMTk2MTIwMEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVQYXJz
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOTcxMjAwRjI2
MjAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybWVkaWF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk4MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1l
ZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaW50ZXJtZWRpYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk5MTIwMEYyNjIwMDA4OEU2OSAv
KiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBpbnRlcm1PdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDE5QTEyMDBGMjYyMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRl
cm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTlCMTIw
MEYyNjIwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMTlFMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291
cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOUYxMjAw
RjI2MjAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRw
dXRHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3V0cHV0R0xTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUExMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQTIxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0g
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdXRwdXRI
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTMxMjAwRjI2MjAw
MDg4RTY5IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3V0cHV0SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNDEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFyc2VIZWxw
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJzZUhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFBNzEyMDBGMjYyMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTgxMjAwRjI2MjAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29s
QWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUExMjAwRjI2MjAw
MDg4RTY5IC8qIGF0b20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gYXRvbS5j
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkg
LyogYXRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBhdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21w
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUQxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5j
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUUxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQUYxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBjcHBzdHJ1Y3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjExMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjIxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBwYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IHBhdGggPSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzbGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQjcxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFCODEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBzeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUI5MTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMUJBMTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gdG9rZW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFs
aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkMxMjAwRjI2MjAw
MDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUJEMTIwMEYyNjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJFMTIwMEYyNjIwMDA4OEU2OSAvKiBS
ZW1vdmVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZVRyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4RTY5
IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IFNoYWRlckxhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDFDMDEyMDBGMjYyMDAwODhFNjkgLyogU2hIYW5kbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3lt
Ym9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDMjEyMDBG
MjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
Q0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhF
NjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0Yx
MjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkg
LyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDExMjAw
RjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTMxNSwyMyArMjYyLDYgQEAKIAkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyog
UG9vbEFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xB
bGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjQzMTIwMEYzNUEw
MDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0NTEyMDBG
MzVBMDAwODhFNjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBh
dG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQ2MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8q
IGNvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyog
Y3BwLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxp
ZmllckFsaXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJB
bGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI1ODEyMDBGMzVBMDAw
ODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3Niwz
NSArMzA2LDEzIEBACiAJCQlwYXRoID0gQ29uZmlndXJhdGlvbnM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OwotCQlBMjY1NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovID0g
eworCQlBMjY0RjhDQjE2OTc2MkFBMDA2RkFBNUEgLyogS0hSICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1NjgyQTE1OUMyMzg4MDAzOTg1MzkgLyog
cHBfdXRpbHMuaCAqLywKLQkJCQlBMjY1NjdDODE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3NCYXNlLmNwcCAqLywKLQkJCQlBMjY1NjdDOTE1OUMyMUNFMDAzOTg1MzkgLyogRGlhZ25vc3Rp
Y3MuaCAqLywKLQkJCQlBMjY1NjdDQTE1OUMyMUNFMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxl
ckJhc2UuY3BwICovLAotCQkJCUEyNjU2N0NCMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJQTI2NTY3Q0MxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5jcHAgKi8sCi0JCQkJQTI2NTY3Q0QxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBh
cnNlci5oICovLAotCQkJCUEyNjU2N0NFMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLywKLQkJCQlBMjY1NjdDRjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBh
cnNlci5oICovLAotCQkJCUEyNjU2N0QyMTU5QzIxQ0UwMDM5ODUzOSAvKiBJbnB1dC5jcHAgKi8s
Ci0JCQkJQTI2NTY3RDMxNTlDMjFDRTAwMzk4NTM5IC8qIElucHV0LmggKi8sCi0JCQkJQTI2NTY3
RDQxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCAqLywKLQkJCQlBMjY1NjdENTE1OUMyMUNF
MDAzOTg1MzkgLyogTGV4ZXIuaCAqLywKLQkJCQlBMjY1NjdENjE1OUMyMUNFMDAzOTg1MzkgLyog
TWFjcm8uY3BwICovLAotCQkJCUEyNjU2N0Q3MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5oICov
LAotCQkJCUEyNjU2N0Q4MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyb0V4cGFuZGVyLmNwcCAqLywK
LQkJCQlBMjY1NjdEOTE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5oICovLAotCQkJ
CUEyNjU2N0UwMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuY3BwICovLAotCQkJCUEy
NjU2N0UxMTU5QzIxQ0UwMDM5ODUzOSAvKiBQcmVwcm9jZXNzb3IuaCAqLywKLQkJCQlBMjY1NjdF
MjE1OUMyMUNFMDAzOTg1MzkgLyogU291cmNlTG9jYXRpb24uaCAqLywKLQkJCQlBMjY1NjdFNDE1
OUMyMUNFMDAzOTg1MzkgLyogVG9rZW4uY3BwICovLAotCQkJCUEyNjU2N0U1MTU5QzIxQ0UwMDM5
ODUzOSAvKiBUb2tlbi5oICovLAotCQkJCUEyNjU2N0U3MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tl
bml6ZXIuY3BwICovLAotCQkJCUEyNjU2N0U4MTU5QzIxQ0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIu
aCAqLywKKwkJCQlBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0uaCAqLywK
IAkJCSk7Ci0JCQlwYXRoID0gbmV3OworCQkJbmFtZSA9IEtIUjsKKwkJCXBhdGggPSBpbmNsdWRl
L0tIUjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUEyNjU2ODJDMTU5QzIz
RTEwMDM5ODUzOSAvKiBkZXBncmFwaCAqLyA9IHsKQEAgLTQzMiwyNCArMzQwLDMyIEBACiAJCQlw
YXRoID0gdGltaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQTI5QjE1
RTkxNjk3OEI3RDAwMTExRDk3IC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5H
ICovLAorCQkJCUEyNjRGOENCMTY5NzYyQUEwMDZGQUE1QSAvKiBLSFIgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGluY2x1ZGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlGQjM5
RDA2RTEyMDBFRDkyMDAwODhFNjkgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUEyOUIxNUU5MTY5NzhCN0QwMDExMUQ5NyAvKiBpbmNsdWRlICovLAogCQkJCTMx
MkJEQjA3MTVGRUM4RTYwMDk3RUJDNyAvKiBtaXNjICovLAotCQkJCUZCMzlEMjIwMTIwMEYzNUEw
MDA4OEU2OSAvKiBjb21waWxlciAqLywKLQkJCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyog
U291cmNlICovLAorCQkJCUZCMzlEMDg0MTIwMEVERUIwMDA4OEU2OSAvKiBzcmMgKi8sCiAJCQkJ
NUQ3QzU5QzQxMjA4QzY4QjAwMUM4NzNFIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCUZCMzlE
MENDMTIwMEVGOUIwMDA4OEU2OSAvKiBQcm9kdWN0cyAqLywKIAkJCSk7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwotCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogU291cmNl
ICovID0geworCQlGQjM5RDA4NDEyMDBFREVCMDAwODhFNjkgLyogc3JjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhF
NjkgLyogY29tcGlsZXIgKi8sCi0JCQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xB
TkcgKi8sCisJCQkJRkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJ
KTsKLQkJCW5hbWUgPSBTb3VyY2U7CisJCQluYW1lID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKIAkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICov
ID0gewpAQCAtNDYwLDk0ICszNzYsMTIgQEAKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUZCMzlEMTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBj
b21waWxlciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
RkIzOUQxODYxMjAwRjI2MjAwMDg4RTY5IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUZCMzlEMTg3
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQxODgxMjAw
RjI2MjAwMDg4RTY5IC8qIENvZGVHZW5ITFNMLmNwcCAqLywKLQkJCQlGQjM5RDE4OTEyMDBGMjYy
MDAwODhFNjkgLyogQ29tbW9uLmggKi8sCi0JCQkJRkIzOUQxOEExMjAwRjI2MjAwMDg4RTY5IC8q
IENvbnN0YW50VW5pb24uaCAqLywKLQkJCQlGQjM5RDE4QjEyMDBGMjYyMDAwODhFNjkgLyogZGVi
dWcuY3BwICovLAotCQkJCUZCMzlEMThDMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5oICovLAot
CQkJCUEyNjU2N0FFMTU5QzIxQjEwMDM5ODUzOSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAq
LywKLQkJCQlBMjY1NjdBRjE1OUMyMUIxMDAzOTg1MzkgLyogRGV0ZWN0RGlzY29udGludWl0eS5o
ICovLAotCQkJCUZCMzlEMThGMTIwMEYyNjIwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgKi8sCi0J
CQkJRkIzOUQxOTAxMjAwRjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmggKi8sCi0JCQkJRkIzOUQx
OTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovLAotCQkJCUZCMzlEMTkyMTIw
MEYyNjIwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8sCi0JCQkJRkIzOUQxOTMxMjAwRjI2MjAw
MDg4RTY5IC8qIEluaXRpYWxpemVEbGwuY3BwICovLAotCQkJCUZCMzlEMTk0MTIwMEYyNjIwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmggKi8sCi0JCQkJRkIzOUQxOTUxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQxOTYxMjAwRjI2MjAwMDg4RTY5
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCAqLywKLQkJCQlGQjM5RDE5NzEyMDBGMjYyMDAw
ODhFNjkgLyogSW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhF
NjkgLyogaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJRkIzOUQxOTkxMjAwRjI2MjAwMDg4RTY5IC8q
IGludGVybU91dC5jcHAgKi8sCi0JCQkJRkIzOUQxOUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLywKLQkJCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhFNjkgLyogbG9jYWxp
bnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDE5QzEyMDBGMjYyMDAwODhFNjkgLyogTU1hcC5o
ICovLAotCQkJCUZCMzlEMTlEMTIwMEYyNjIwMDA4OEU2OSAvKiBvc2luY2x1ZGUuaCAqLywKLQkJ
CQlGQjM5RDE5RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovLAotCQkJ
CUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2OSAvKiBvc3NvdXJjZV93aW4uY3BwICovLAotCQkJCUZC
MzlEMUEwMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmNwcCAqLywKLQkJCQlGQjM5RDFB
MTEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovLAotCQkJCUZCMzlEMUEyMTIwMEYy
NjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQlGQjM5RDFBMzEyMDBGMjYyMDAw
ODhFNjkgLyogT3V0cHV0SExTTC5oICovLAotCQkJCUZCMzlEMUE0MTIwMEYyNjIwMDA4OEU2OSAv
KiBwYXJzZUNvbnN0LmNwcCAqLywKLQkJCQlGQjM5RDFBNTEyMDBGMjYyMDAwODhFNjkgLyogUGFy
c2VIZWxwZXIuY3BwICovLAotCQkJCUZCMzlEMUE2MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhl
bHBlci5oICovLAotCQkJCUZCMzlEMUE3MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3Bw
ICovLAotCQkJCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29sQWxsb2MuaCAqLywKLQkJ
CQlGQjM5RDFBOTEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovLAotCQkJCUZCMzlE
MUJCMTIwMEYyNjIwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi8sCi0JCQkJRkIzOUQx
QkMxMjAwRjI2MjAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmggKi8sCi0JCQkJRkIzOUQxQkQx
MjAwRjI2MjAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuY3BwICovLAotCQkJCUZCMzlEMUJFMTIwMEYy
NjIwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmggKi8sCi0JCQkJRkIzOUQxQkYxMjAwRjI2MjAwMDg4
RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUZCMzlEMUMwMTIwMEYyNjIwMDA4OEU2OSAv
KiBTaEhhbmRsZS5oICovLAotCQkJCUZCMzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xU
YWJsZS5jcHAgKi8sCi0JCQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxl
LmggKi8sCi0JCQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNw
cCAqLywKLQkJCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAq
LywKLQkJCQlGQjM5RDFDRjEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuY3BwICov
LAotCQkJCUZCMzlEMUQwMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9ySExTTC5oICovLAot
CQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAotCQkJCUEyNjU2N0I3
MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovLAotCQkJCUEyNjU2
N0I4MTU5QzIxQjEwMDM5ODUzOSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCAqLywKLQkJCSk7Ci0J
CQlpbmNsdWRlSW5JbmRleCA9IDA7Ci0JCQluYW1lID0gY29tcGlsZXI7Ci0JCQlwYXRoID0gc3Jj
L2NvbXBpbGVyOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQxQTkx
MjAwRjI2MjAwMDg4RTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQxQUExMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20u
YyAqLywKLQkJCQlGQjM5RDFBQjEyMDBGMjYyMDAwODhFNjkgLyogYXRvbS5oICovLAotCQkJCUZC
MzlEMUFDMTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlLmggKi8sCi0JCQkJRkIzOUQxQUQxMjAw
RjI2MjAwMDg4RTY5IC8qIGNwcC5jICovLAotCQkJCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAv
KiBjcHAuaCAqLywKLQkJCQlGQjM5RDFBRjEyMDBGMjYyMDAwODhFNjkgLyogY3Bwc3RydWN0LmMg
Ki8sCi0JCQkJRkIzOUQxQjAxMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5jICovLAotCQkJCUZC
MzlEMUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLywKLQkJCQlGQjM5RDFCMjEyMDBG
MjYyMDAwODhFNjkgLyogcGFyc2VyLmggKi8sCi0JCQkJRkIzOUQxQjMxMjAwRjI2MjAwMDg4RTY5
IC8qIHByZXByb2Nlc3MuaCAqLywKLQkJCQlGQjM5RDFCNDEyMDBGMjYyMDAwODhFNjkgLyogc2Nh
bm5lci5jICovLAotCQkJCUZCMzlEMUI1MTIwMEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmggKi8s
Ci0JCQkJRkIzOUQxQjYxMjAwRjI2MjAwMDg4RTY5IC8qIHNsZ2xvYmFscy5oICovLAotCQkJCUZC
MzlEMUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8sCi0JCQkJRkIzOUQxQjgxMjAw
RjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLywKLQkJCQlGQjM5RDFCOTEyMDBGMjYyMDAwODhF
NjkgLyogdG9rZW5zLmMgKi8sCi0JCQkJRkIzOUQxQkExMjAwRjI2MjAwMDg4RTY5IC8qIHRva2Vu
cy5oICovLAotCQkJKTsKLQkJCWluY2x1ZGVJbkluZGV4ID0gMDsKLQkJCXBhdGggPSBwcmVwcm9j
ZXNzb3I7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUEyNjRGOEM1MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAq
LywKKwkJCQlBMjY0RjhDNjE2OTc0RTJBMDA2RkFBNUEgLyogVmFyaWFibGVQYWNrZXIuY3BwICov
LAorCQkJCUEyNjRGOEM3MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oICovLAog
CQkJCTMxNThFQTBDMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICov
LAogCQkJCTMxNThFQTBEMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAq
LywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCkBAIC02
NDAsMjUgKzQ3NCwzMiBAQAogCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vz
c29yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBMjY1
NjdDNTE1OUMyMUNFMDAzOTg1MzkgLyogbmV3ICovLAotCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4
OEU2OSAvKiBhdG9tLmMgKi8sCi0JCQkJRkIzOUQyNDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20u
aCAqLywKLQkJCQlGQjM5RDI0NzEyMDBGMzVBMDAwODhFNjkgLyogY29tcGlsZS5oICovLAotCQkJ
CUZCMzlEMjQ4MTIwMEYzNUEwMDA4OEU2OSAvKiBjcHAuYyAqLywKLQkJCQlGQjM5RDI0OTEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmggKi8sCi0JCQkJRkIzOUQyNEExMjAwRjM1QTAwMDg4RTY5IC8q
IGNwcHN0cnVjdC5jICovLAorCQkJCUEyNjRGODkzMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwICovLAorCQkJCUEyNjRGODk0MTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuaCAqLywKKwkJCQlBMjY0Rjg5NTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwICovLAorCQkJCUEyNjRGODk2MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJl
Y3RpdmVIYW5kbGVyQmFzZS5oICovLAorCQkJCUEyNjRGODk3MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuY3BwICovLAorCQkJCUEyNjRGODk4MTY5NzRERUQwMDZGQUE1QSAvKiBE
aXJlY3RpdmVQYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5OTE2OTc0REVEMDA2RkFBNUEgLyogRXhw
cmVzc2lvblBhcnNlci5jcHAgKi8sCisJCQkJQTI2NEY4OUExNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCAqLywKKwkJCQlBMjY0Rjg5QjE2OTc0REVEMDA2RkFBNUEgLyogSW5w
dXQuY3BwICovLAorCQkJCUEyNjRGODlDMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oICovLAor
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCisJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCisJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKKwkJCQlBMjY0RjhBMDE2OTc0REVEMDA2RkFBNUEgLyog
TWFjcm8uaCAqLywKKwkJCQlBMjY0RjhBMTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRl
ci5jcHAgKi8sCisJCQkJQTI2NEY4QTIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIu
aCAqLywKKwkJCQlBMjY0RjhBMzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXguaCAqLywK
KwkJCQlBMjY0RjhBNDE2OTc0REVEMDA2RkFBNUEgLyogcHBfdXRpbHMuaCAqLywKKwkJCQlBMjY0
RjhBNTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCAqLywKKwkJCQlBMjY0RjhB
NjE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmggKi8sCisJCQkJQTI2NEY4QTcxNjk3
NERFRDAwNkZBQTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggKi8sCisJCQkJQTI2NEY4QTgxNjk3NERF
RDAwNkZBQTVBIC8qIFRva2VuLmNwcCAqLywKKwkJCQlBMjY0RjhBOTE2OTc0REVEMDA2RkFBNUEg
LyogVG9rZW4uaCAqLywKKwkJCQlBMjY0RjhBQTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlBMjY0RjhBQjE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW5pemVyLmggKi8s
CiAJCQkJNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKLQkJ
CQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8sCi0JCQkJRkIzOUQyNEMx
MjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5oICovLAotCQkJCUZCMzlEMjREMTIwMEYzNUEwMDA4
OEU2OSAvKiBwYXJzZXIuaCAqLywKLQkJCQlGQjM5RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJl
cHJvY2Vzcy5oICovLAotCQkJCUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMg
Ki8sCi0JCQkJRkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLywKLQkJCQlG
QjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8sCi0JCQkJRkIzOUQyNTIx
MjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyAqLywKLQkJCQlGQjM5RDI1MzEyMDBGMzVBMDAw
ODhFNjkgLyogc3ltYm9scy5oICovLAotCQkJCUZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAvKiB0
b2tlbnMuYyAqLywKLQkJCQlGQjM5RDI1NTEyMDBGMzVBMDAwODhFNjkgLyogdG9rZW5zLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC03MDAsMjUgKzU0MSwyOSBAQAogCQkJCUEyNjU2N0JFMTU5QzIxQjEwMDM5ODUzOSAv
KiBEaXJlY3RpdmVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMDE1OUMyMUIx
MDAzOTg1MzkgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1NjdDMTE1OUMyMUIx
MDAzOTg1MzkgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0VE
MTU5QzIxQ0UwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2
NTY3RUYxNTlDMjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUEyNjU2N0YxMTU5QzIxQ0UwMDM5ODUzOSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUEyNjU2N0YzMTU5QzIxQ0UwMDM5ODUzOSAvKiBFeHByZXNzaW9uUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGNjE1OUMyMUNFMDAzOTg1MzkgLyogSW5w
dXQuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2N0Y4MTU5QzIxQ0UwMDM5ODUzOSAvKiBMZXhl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY3RkExNTlDMjFDRTAwMzk4NTM5IC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjdGQzE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDQxNTlDMjFDRTAwMzk4NTM5IC8q
IFByZXByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTI2NTY4MDUxNTlDMjFDRTAwMzk4
NTM5IC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY1NjgwODE1OUMy
MUNFMDAzOTg1MzkgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODBCMTU5QzIx
Q0UwMDM5ODUzOSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUEyNjU2ODJCMTU5
QzIzODgwMDM5ODUzOSAvKiBwcF91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4M0Ex
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTI2NTY4M0MxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3Jh
cGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAv
KiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1
Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxNThFQTBGMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFEMTY5NzRERUQwMDZGQUE1QSAvKiBE
aWFnbm9zdGljc0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMjY0RjhCOTE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMjY0RjhCQzE2OTc0REVEMDA2RkFBNUEgLyogbnVtZXJpY19sZXgu
aCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEJEMTY5NzRERUQwMDZGQUE1QSAvKiBwcF91dGls
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QkYxNjk3NERFRDAwNkZBQTVBIC8qIFByZXBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZBQTVBIC8q
IFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOEM4MTY5NzRFMkEw
MDZGQUE1QSAvKiBIYXNoTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUEyNjRGOENBMTY5NzRF
MkEwMDZGQUE1QSAvKiBWYXJpYWJsZVBhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4
Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcz
NCw2ICs1NzksNyBAQAogCQkJCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtz
ICovLAogCQkJCTMxMkJEQjBCMTVGRUNBQjAwMDk3RUJDNyAvKiBDb3B5RmlsZXMgKi8sCiAJCQkJ
MzEyQkRCMEQxNUZFQ0FDRTAwOTdFQkM3IC8qIENvcHlGaWxlcyAqLywKKwkJCQlBMjlCMTVFNjE2
OTc4NDQ1MDAxMTFEOTcgLyogQ29weUZpbGVzICovLAogCQkJKTsKIAkJCWJ1aWxkUnVsZXMgPSAo
CiAJCQkpOwpAQCAtNzg5LDEzICs2MzUsNiBAQAogCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2
OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlEMjhGMTIwMEYzNUEw
MDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjM5RDI5MTEy
MDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
NjEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5ODEy
MDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
OTEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5
RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQy
QTAxMjAwRjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlE
MkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAogCQkJCUZCMzlE
MkE0MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGQjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOSwxNyArNjU4LDYgQEAKIAkJCQlBMjY1NjdCQjE1OUMyMUIxMDAz
OTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY3QkQxNTlD
MjFCMTAwMzk4NTM5IC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NTY3QkYxNTlDMjFCMTAwMzk4NTM5IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RUMxNTlDMjFDRTAwMzk4NTM5IC8qIERpYWdub3N0aWNz
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjdFRTE1OUMyMUNFMDAzOTg1MzkgLyog
RGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTI2NTY3RjAxNTlD
MjFDRTAwMzk4NTM5IC8qIERpcmVjdGl2ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MjY1NjdGMjE1OUMyMUNFMDAzOTg1MzkgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjY1NjdGNTE1OUMyMUNFMDAzOTg1MzkgLyogSW5wdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTI2NTY3RjcxNTlDMjFDRTAwMzk4NTM5IC8qIExleGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUEyNjU2N0Y5MTU5QzIxQ0UwMDM5ODUzOSAvKiBNYWNyby5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMjY1NjdGQjE1OUMyMUNFMDAzOTg1MzkgLyogTWFjcm9FeHBhbmRlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwMzE1OUMyMUNFMDAzOTg1MzkgLyogUHJlcHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyNjU2ODA3MTU5QzIxQ0UwMDM5ODUzOSAv
KiBUb2tlbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjY1NjgwQTE1OUMyMUNFMDAzOTg1Mzkg
LyogVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODM5MTU5QzIzRTEwMDM5
ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4M0Ix
NTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTI2NTY4M0QxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgzNyw2ICs2NjUsMTggQEAKIAkJCQlBMjY1Njg0MDE1
OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1OEVBMEUxNjMwOTY4RDAwNkJF
NUVFIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhB
QzE2OTc0REVEMDA2RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEIyMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEI0MTY5NzRE
RUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMjY0RjhCNjE2OTc0
REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTI2NEY4QjgxNjk3
NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRGOEJBMTY5
NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEy
NjRGOEJFMTY5NzRERUQwMDZGQUE1QSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUEyNjRGOEMzMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTI2NEY4QzkxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hh
bmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCmluZGV4IGNmNzljYTAu
LmEwOTRlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NzkgQEAK
KzIwMTMtMDEtMTAgIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAgICAg
IFtBTkdMRV0gVXBkYXRlIEFOR0xFIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2Mjc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEFOR0xFIHRvIHIxNjQxLgorCisgICAgICAg
IEFOR0xFIHBhcnNlcnMgd2VyZSBnZW5lcmF0ZWQgd2l0aCBCaXNvbiAyLjMuCisKKyAgICAgICAg
QWRkaXRpb25hbGx5LCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB0byBXZWJLaXQncyBB
TkdMRSBidWlsZCBzeXN0ZW0uIE5vdGUgdGhhdCB0aGVzZQorICAgICAgICBjaGFuZ2VzIG9ubHkg
YXBwbHkgdG8gV2ViS2l0J3MgY29weSBvZiBBTkdMRSwgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIHVw
c3RyZWFtZWQgdG8gQU5HTEUuCisgICAgICAgIChhKSBSZW1vdmUgYWxsIGZpbGVzIGluIHRoZSBs
aWJFR0wgYW5kIGxpYkdMRVN2MiBkaXJlY3RvcmllcyBiZWNhdXNlIG5vYm9keSBpcyB1c2luZyB0
aGVtLiAKKyAgICAgICAgICAgIEFkZCBhIFJFQURNRSBpbiBlYWNoIGRpcmVjdG9yeSB0byBleHBs
YWluIHdoeSB0aGVpciBjb250ZW50cyBhcmUgbm90IGNvcGllZCBvdmVyIGZyb20KKyAgICAgICAg
ICAgIEFOR0xFLiBUaGlzIHNpbXBsaWZpZXMgdXBkYXRpbmcgQU5HTEUgaW4gdGhlIGZ1dHVyZS4K
KyAgICAgICAgKGIpIFJlbW92ZSB0aGUgYnVpbGRfYW5nbGUueGNvZGVwcm9qIGZpbGUgdGhhdCBu
by1vbmUgaXMgdXNpbmcuIEl0IGFwcGVhcnMgaXQgd2FzIGNvcGllZAorICAgICAgICAgICAgb3Zl
ciBmcm9tIGEgZ3lwIGJ1aWxkIG9mIEFOR0xFLiBUaGUgTWFjIGJ1aWxkIHVzZXMgQU5HTEUueGNv
ZGVwcm9qLgorICAgICAgICAoYykgUmVtb3ZlIGR1cGxpY2F0ZSBmaWxlIGVudHJpZXMgaW4gQU5H
TEUueGNvZGVwcm9qLiBDaGFuZ2UgaXRzIFhjb2RlIGdyb3VwIHN0cnVjdHVyZSB0bworICAgICAg
ICAgICAgbWF0Y2ggQU5HTEUncyBkaXJlY3Rvcnkgc3RydWN0dXJlLgorICAgICAgICAoZCkgQWRk
IGEgQ29weSBGaWxlcyB0YXNrIHRvIEFOR0xFLnhjb2RlcHJvaiB0byBwdXQgdGhlIGtocnBsYXRm
b3JtLmggaGVhZGVyIGluIHRoZSByaWdodAorICAgICAgICAgICAgcGxhY2Ugc28gU2hhZGVyTGFu
Zy5oIGNhbiBmaW5kIGl0LiBTaGFkZXJMYW5nLmggaXMgY29waWVkIHRvCisgICAgICAgICAgICA8
QnVpbGREaXI+L3Vzci9sb2NhbC9pbmNsdWRlL0FOR0xFL1NoYWRlckxhbmcuaCBkdXJpbmcgdGhl
IENvcHkgSGVhZGVycyB0YXNrLCBhbmQgaXQKKyAgICAgICAgICAgIGluY2x1ZGVzICJLSFIva2hy
cGxhdGZvcm0uaCIuIFRodXMsIHdlIG5lZWQgdG8gY29weSBraHJwbGF0Zm9ybS5oIHRvCisgICAg
ICAgICAgICA8QnVpbGREaXI+L3Vzci9sb2NhbC9pbmNsdWRlL0FOR0xFL0tIUi9raHJwbGF0Zm9y
bS5oLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgbWFrZSBvbmUgYnVpbGQgZml4IGluIEFOR0xF
IHNvdXJjZSB0aGF0IHNob3VsZCBiZSB1cHN0cmVhbWVkIHRvIEFOR0xFOgorICAgICAgICAoMSkg
QmVmb3JlIHRoaXMgcGF0Y2ggaW4gRXhwcmVzc2lvblBhcnNlci55LCB3ZSB0b2dnbGVkIHRoZSAi
LVdwcmFnbWFzIiBmbGFnIHNvIGNvbXBpbGVycworICAgICAgICAgICAgY291bGQgaWdub3JlIHRo
ZSBwcmFnbWFzIHRoYXQgdGhleSBkaWRuJ3QgdW5kZXJzdGFuZCBpbnN0ZWFkIG9mIGdlbmVyYXRp
bmcgYW4gZXJyb3IuCisgICAgICAgICAgICBIb3dldmVyLCBjbGFuZyBkb2VzIG5vdCB1bmRlcnN0
YW5kICItV3ByYWdtYXMiIGl0c2VsZi4gSW5zdGVhZCwgdHQgdW5kZXJzdGFuZHMKKyAgICAgICAg
ICAgICItV3Vua25vd24tcHJhZ21hcyIuIE5vdywgaW5zdGVhZCBvZiB0cnlpbmcgdG8gdGVtcG9y
YXJpbHkgaWdub3JlIHByYWdtYXMsIHdlIGFwcGx5IHRoZQorICAgICAgICAgICAgcmlnaHQgZmxh
Z3MgdG8gdGhlIHJpZ2h0IGNvbXBpbGVyIHZlcnNpb25zLiBUaGUgbmV3IGNvZGUgaW4gRXhwcmVz
c2lvblBhcnNlci55IGxvb2tzCisgICAgICAgICAgICBsaWtlOgorCisgICAgICAgICIiIgorICAg
ICAgICAvLyBUdXJuIG9mZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmdzIHRyaWdnZXJl
ZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgcHBsdmFsIHZhcmlhYmxlLgorICAgICAgICAvLyBPbiBn
Y2MgNC43KywgVGhlIGZsYWcgaXMgY2FsbGVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQiLgorICAg
ICAgICAvLyBPbiBjbGFuZyBhbmQgZ2NjIDwgNC43LCB0aGUgZmxhZyBpcyBjYWxsZWQgIi1XdW5p
bml0aWFsaXplZCIuCisgICAgICAgICNpZiAhZGVmaW5lZChfX2NsYW5nX18pICYmICgoX19HTlVD
X18gPT0gNCAmJiBfX0dOVV9DX01JTk9SX18gPj0gNykgfHwgX19HTlVDX18gPj0gNSkKKyAgICAg
ICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQi
CisgICAgICAgICNlbHNlCisgICAgICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVd1bmluaXRpYWxpemVkIgorICAgICAgICAjZW5kaWYKKyAgICAgICAgIiIiCisKKyAgICAgICAg
KiBBTkdMRS5wbGlzdDoKKyAgICAgICAgKiBBTkdMRS5wcmk6CisgICAgICAgICogQU5HTEUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBpbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFu
Zy5oOgorICAgICAgICAqIHNyYy9idWlsZF9hbmdsZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21tb24vYW5nbGV1dGlscy5oOgorICAgICAgICAq
IHNyYy9jb21tb24vZGVidWcuY3BwOgorICAgICAgICAoZ2w6OlNjb3BlZFBlcmZFdmVudEhlbHBl
cjo6U2NvcGVkUGVyZkV2ZW50SGVscGVyKToKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmg6
CisgICAgICAgICogc3JjL2NvbW1vbi92ZXJzaW9uLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L0NvbXBpbGVyLmNwcDoKKyAgICAgICAgKFRDb21waWxlcjo6SW5pdCk6CisgICAgICAgIChUQ29t
cGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoVENvbXBpbGVyOjpjbGVhclJlc3VsdHMpOgorICAg
ICAgICAoVENvbXBpbGVyOjpjb2xsZWN0QXR0cmlic1VuaWZvcm1zKToKKyAgICAgICAgKFRDb21w
aWxlcjo6ZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9EaWFnbm9zdGljcy5jcHA6CisgICAgICAgIChURGlhZ25vc3RpY3M6OlREaWFnbm9zdGljcyk6
CisgICAgICAgIChURGlhZ25vc3RpY3M6OndyaXRlSW5mbyk6CisgICAgICAgIChURGlhZ25vc3Rp
Y3M6OnByaW50KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuaDoKKyAgICAg
ICAgKFREaWFnbm9zdGljczo6bnVtRXJyb3JzKToKKyAgICAgICAgKFREaWFnbm9zdGljczo6bnVt
V2FybmluZ3MpOgorICAgICAgICAoVERpYWdub3N0aWNzKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9IYXNoTmFtZXMu
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHA6CisgICAg
ICAgIChUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0
cHV0RVNTTC5jcHA6CisgICAgICAgIChUT3V0cHV0RVNTTDo6VE91dHB1dEVTU0wpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9PdXRwdXRFU1NMLmg6CisgICAgICAgIChUT3V0cHV0RVNTTCk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwOgorICAgICAgICAoVE91dHB1dEdM
U0w6OlRPdXRwdXRHTFNMKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oOgor
ICAgICAgICAoVE91dHB1dEdMU0wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRHTFNM
QmFzZS5jcHA6CisgICAgICAgIChUT3V0cHV0R0xTTEJhc2U6OlRPdXRwdXRHTFNMQmFzZSk6Cisg
ICAgICAgIChUT3V0cHV0R0xTTEJhc2U6OndyaXRlVmFyaWFibGVUeXBlKToKKyAgICAgICAgKFRP
dXRwdXRHTFNMQmFzZTo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoVE91dHB1
dEdMU0xCYXNlOjp3cml0ZUNvbnN0YW50VW5pb24pOgorICAgICAgICAoVE91dHB1dEdMU0xCYXNl
Ojp2aXNpdFN5bWJvbCk6CisgICAgICAgIChUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KToK
KyAgICAgICAgKFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoVE91
dHB1dEdMU0xCYXNlOjpnZXRUeXBlTmFtZSk6CisgICAgICAgIChUT3V0cHV0R0xTTEJhc2U6Omhh
c2hOYW1lKToKKyAgICAgICAgKFRPdXRwdXRHTFNMQmFzZTo6aGFzaFZhcmlhYmxlTmFtZSk6Cisg
ICAgICAgIChUT3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oOgorICAgICAgICAoVE91dHB1dEdMU0xCYXNlKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHA6CisgICAgICAgIChzaDo6T3V0
cHV0SExTTDo6T3V0cHV0SExTTCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6aGVhZGVyKToK
KyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChzaDo6
T3V0cHV0SExTTDo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRs
ZUV4Y2Vzc2l2ZUxvb3ApOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmg6Cisg
ICAgICAgIChPdXRwdXRITFNMKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
Y3BwOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29u
dGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayk6CisgICAgICAgIChQYVBhcnNlU3RyaW5ncyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmg6CisgICAgICAgIChUUGFyc2VD
b250ZXh0OjpUUGFyc2VDb250ZXh0KToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6bnVtRXJyb3JzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUmVu
YW1lRnVuY3Rpb24uaDoKKyAgICAgICAgKFJlbmFtZUZ1bmN0aW9uOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXI6
OmdldEhhc2hGdW5jdGlvbik6CisgICAgICAgIChUQ29tcGlsZXI6OmdldE5hbWVNYXApOgorICAg
ICAgICAoVENvbXBpbGVyOjpnZXRTeW1ib2xUYWJsZSk6CisgICAgICAgIChUQ29tcGlsZXIpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKFNoSW5pdEJ1
aWx0SW5SZXNvdXJjZXMpOgorICAgICAgICAoU2hHZXRJbmZvKToKKyAgICAgICAgKFNoR2V0TmFt
ZUhhc2hpbmdFbnRyeSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoK
KyAgICAgICAgKFRUeXBlOjpUVHlwZSk6CisgICAgICAgIChUVHlwZTo6aXNTdHJ1Y3R1cmVDb250
YWluaW5nQXJyYXlzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaDoKKyAg
ICAgICAgKFRTeW1ib2xUYWJsZTo6ZmluZEJ1aWx0SW4pOgorICAgICAgICAoVFN5bWJvbFRhYmxl
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwOgorICAgICAgICAo
VHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JHTFNMLmNwcDoKKyAgICAgICAgKFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9UeXBlcy5oOgorICAgICAgICAoVFR5cGUpOgorICAgICAgICAo
VFB1YmxpY1R5cGUpOgorICAgICAgICAoVFB1YmxpY1R5cGU6OnNldEJhc2ljKToKKyAgICAgICAg
KFRQdWJsaWNUeXBlOjpzZXRBZ2dyZWdhdGUpOgorICAgICAgICAoVFB1YmxpY1R5cGU6OnNldEFy
cmF5KToKKyAgICAgICAgKFRQdWJsaWNUeXBlOjppc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwOgorICAgICAg
ICAoc2g6OlVuZm9sZFNob3J0Q2lyY3VpdDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9WYXJpYWJsZUluZm8uY3BwOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKToKKyAgICAgICAgKFRWYXJpYWJsZUlu
Zm86OlRWYXJpYWJsZUluZm8pOgorICAgICAgICAoQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6Q29s
bGVjdEF0dHJpYnNVbmlmb3Jtcyk6CisgICAgICAgIChDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oOgor
ICAgICAgICAoVFZhcmlhYmxlSW5mbyk6CisgICAgICAgIChDb2xsZWN0QXR0cmlic1VuaWZvcm1z
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFZhcmlhYmxlUGFja2VyOjpHZXROdW1Db21wb25lbnRzUGVyUm93KToKKyAgICAgICAg
KFZhcmlhYmxlUGFja2VyOjpHZXROdW1Sb3dzKToKKyAgICAgICAgKFRWYXJpYWJsZUluZm9Db21w
YXJlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChWYXJpYWJsZVBhY2tlcjo6bWFrZUNvbHVtbkZs
YWdzKToKKyAgICAgICAgKFZhcmlhYmxlUGFja2VyOjpmaWxsQ29sdW1ucyk6CisgICAgICAgIChW
YXJpYWJsZVBhY2tlcjo6c2VhcmNoQ29sdW1uKToKKyAgICAgICAgKFZhcmlhYmxlUGFja2VyOjpD
aGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9WYXJpYWJsZVBhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFZhcmlhYmxlUGFja2VyKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwOgorICAgICAgICAoVFZlcnNpb25H
TFNMOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNM
Lmg6CisgICAgICAgIChUVmVyc2lvbkdMU0wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNs
YW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcueToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwOgorICAgICAgICAoc3RyaW5nX2lucHV0KToKKyAgICAg
ICAgKGdsc2xhbmdfZmluYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19zY2FuKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci9p
bnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1UcmF2ZXJzZXIpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9vc2luY2x1ZGUuaDoKKyAgICAgICAgKE9TX0dldFRMU1ZhbHVlKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHA6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBw
KToKKyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6fkRpYWdub3N0aWNzKToKKyAgICAgICAgKHBw
OjpEaWFnbm9zdGljczo6cmVwb3J0KToKKyAgICAgICAgKHBwOjpEaWFnbm9zdGljczo6c2V2ZXJp
dHkpOgorICAgICAgICAocHA6OkRpYWdub3N0aWNzOjptZXNzYWdlKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25v
c3RpY3MuaC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKERpYWdub3N0aWNzKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcC4KKyAgICAgICAgKHBwKToKKyAgICAgICAg
KHBwOjpEaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RGlyZWN0aXZlSGFuZGxlci5oLgorICAgICAgICAocHApOgorICAgICAgICAoRGlyZWN0aXZlSGFu
ZGxlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJz
ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcC4KKyAgICAgICAgKGdldERpcmVj
dGl2ZSk6CisgICAgICAgIChpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKToKKyAgICAgICAgKGlzRU9E
KToKKyAgICAgICAgKHNraXBVbnRpbEVPRCk6CisgICAgICAgIChpc01hY3JvTmFtZVJlc2VydmVk
KToKKyAgICAgICAgKGlzTWFjcm9QcmVkZWZpbmVkKToKKyAgICAgICAgKHBwKToKKyAgICAgICAg
KERlZmluZWRQYXJzZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OkRlZmluZWRQYXJz
ZXIpOgorICAgICAgICAocHA6OkRlZmluZWRQYXJzZXI6OmxleCk6CisgICAgICAgIChwcDo6RGly
ZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBh
cnNlcjo6bGV4KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZl
KToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKToKKyAgICAgICAg
KHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVW5kZWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2
ZVBhcnNlcjo6cGFyc2VJZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUlm
ZGVmKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKToKKyAgICAg
ICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRWxzZSk6CisgICAgICAgIChwcDo6RGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUVsaWYpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFy
c2VFbmRpZik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVycm9yKToKKyAg
ICAgICAgKHBwOjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlUHJhZ21hKToKKyAgICAgICAgKHBwOjpE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKToKKyAgICAgICAgKHBwOjpEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlVmVyc2lvbik6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpwYXJz
ZUxpbmUpOgorICAgICAgICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6c2tpcHBpbmcpOgorICAgICAg
ICAocHA6OkRpcmVjdGl2ZVBhcnNlcjo6cGFyc2VDb25kaXRpb25hbElmKToKKyAgICAgICAgKHBw
OjpEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKToKKyAgICAgICAgKHBwOjpEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFy
c2VyLmguCisgICAgICAgIChwcCk6CisgICAgICAgIChEaXJlY3RpdmVQYXJzZXIpOgorICAgICAg
ICAoQ29uZGl0aW9uYWxCbG9jayk6CisgICAgICAgIChwcDo6RGlyZWN0aXZlUGFyc2VyOjpDb25k
aXRpb25hbEJsb2NrOjpDb25kaXRpb25hbEJsb2NrKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBh
cnNlci5jcHAuCisgICAgICAgICh5eXN5bnRheF9lcnJvcik6CisgICAgICAgICh5eWxleCk6Cisg
ICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpFeHByZXNzaW9u
UGFyc2VyOjpFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKHBwOjpFeHByZXNzaW9uUGFyc2Vy
OjpwYXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9u
UGFyc2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmguCisgICAgICAgIChwcCk6Cisg
ICAgICAgIChFeHByZXNzaW9uUGFyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueTogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueS4K
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L0lucHV0LmNwcC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpJbnB1dDo6SW5wdXQpOgor
ICAgICAgICAocHA6OklucHV0OjpyZWFkKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0lucHV0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oLgorICAgICAgICAocHApOgorICAgICAg
ICAoSW5wdXQpOgorICAgICAgICAocHA6OklucHV0Ojpjb3VudCk6CisgICAgICAgIChwcDo6SW5w
dXQ6OnN0cmluZyk6CisgICAgICAgIChwcDo6SW5wdXQ6Omxlbmd0aCk6CisgICAgICAgIChMb2Nh
dGlvbik6CisgICAgICAgIChwcDo6SW5wdXQ6OkxvY2F0aW9uOjpMb2NhdGlvbik6CisgICAgICAg
IChwcDo6SW5wdXQ6OnJlYWRMb2MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvTGV4ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwLgorICAgICAgICAocHApOgorICAgICAg
ICAocHA6OkxleGVyOjp+TGV4ZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvTGV4ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmguCisgICAgICAgIChwcCk6CisgICAgICAgIChM
ZXhlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9NYWNyby5jcHAuCisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6TWFjcm86OmVx
dWFscyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvTWFjcm8uaC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpNYWNybzo6TWFjcm8p
OgorICAgICAgICAoTWFjcm8pOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
TWFjcm9FeHBhbmRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcC4KKyAgICAgICAg
KHBwKToKKyAgICAgICAgKFRva2VuTGV4ZXIpOgorICAgICAgICAocHA6OlRva2VuTGV4ZXI6OlRv
a2VuTGV4ZXIpOgorICAgICAgICAocHA6OlRva2VuTGV4ZXI6OmxleCk6CisgICAgICAgIChwcDo6
TWFjcm9FeHBhbmRlcjo6TWFjcm9FeHBhbmRlcik6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRl
cjo6fk1hY3JvRXhwYW5kZXIpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmxleCk6Cisg
ICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6Z2V0VG9rZW4pOgorICAgICAgICAocHA6Ok1hY3Jv
RXhwYW5kZXI6OnVuZ2V0VG9rZW4pOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OmlzTmV4
dFRva2VuTGVmdFBhcmVuKToKKyAgICAgICAgKHBwOjpNYWNyb0V4cGFuZGVyOjpwdXNoTWFjcm8p
OgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5kZXI6OnBvcE1hY3JvKToKKyAgICAgICAgKHBwOjpN
YWNyb0V4cGFuZGVyOjpleHBhbmRNYWNybyk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6
Y29sbGVjdE1hY3JvQXJncyk6CisgICAgICAgIChwcDo6TWFjcm9FeHBhbmRlcjo6cmVwbGFjZU1h
Y3JvUGFyYW1zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhw
YW5kZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvRXhwYW5kZXIuaC4KKyAgICAgICAgKHBwKToKKyAgICAg
ICAgKE1hY3JvRXhwYW5kZXIpOgorICAgICAgICAoTWFjcm9Db250ZXh0KToKKyAgICAgICAgKHBw
OjpNYWNyb0V4cGFuZGVyOjpNYWNyb0NvbnRleHQ6Ok1hY3JvQ29udGV4dCk6CisgICAgICAgIChw
cDo6TWFjcm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0OjplbXB0eSk6CisgICAgICAgIChwcDo6TWFj
cm9FeHBhbmRlcjo6TWFjcm9Db250ZXh0OjpnZXQpOgorICAgICAgICAocHA6Ok1hY3JvRXhwYW5k
ZXI6Ok1hY3JvQ29udGV4dDo6dW5nZXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAuCisgICAg
ICAgIChwcCk6CisgICAgICAgIChQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQcmVw
cm9jZXNzb3JJbXBsOjpQcmVwcm9jZXNzb3JJbXBsKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNz
b3I6OlByZXByb2Nlc3Nvcik6CisgICAgICAgIChwcDo6UHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vz
c29yKToKKyAgICAgICAgKHBwOjpQcmVwcm9jZXNzb3I6OmluaXQpOgorICAgICAgICAocHA6OlBy
ZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8pOgorICAgICAgICAocHA6OlByZXByb2Nlc3Nvcjo6
bGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmguCisgICAgICAgIChwcCk6CisgICAgICAgIChQcmVw
cm9jZXNzb3IpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9j
YXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmguCisgICAgICAgIChwcCk6CisgICAg
ICAgIChwcDo6U291cmNlTG9jYXRpb246OlNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFNvdXJj
ZUxvY2F0aW9uKToKKyAgICAgICAgKHBwOjpTb3VyY2VMb2NhdGlvbjo6ZXF1YWxzKToKKyAgICAg
ICAgKHBwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmNw
cC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKHBwOjpUb2tlbjo6cmVzZXQpOgorICAgICAgICAo
cHA6OlRva2VuOjplcXVhbHMpOgorICAgICAgICAocHA6OlRva2VuOjpzZXRBdFN0YXJ0T2ZMaW5l
KToKKyAgICAgICAgKHBwOjpUb2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKToKKyAgICAgICAgKHBw
OjpUb2tlbjo6c2V0RXhwYW5zaW9uRGlzYWJsZWQpOgorICAgICAgICAocHA6OlRva2VuOjppVmFs
dWUpOgorICAgICAgICAocHA6OlRva2VuOjp1VmFsdWUpOgorICAgICAgICAocHA6OlRva2VuOjpm
VmFsdWUpOgorICAgICAgICAocHA6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmguCisgICAgICAgIChwcCk6
CisgICAgICAgIChwcDo6VG9rZW46OlRva2VuKToKKyAgICAgICAgKFRva2VuKToKKyAgICAgICAg
KHBwOjpUb2tlbjo6YXRTdGFydE9mTGluZSk6CisgICAgICAgIChwcDo6VG9rZW46Omhhc0xlYWRp
bmdTcGFjZSk6CisgICAgICAgIChwcDo6VG9rZW46OmV4cGFuc2lvbkRpc2FibGVkKToKKyAgICAg
ICAgKHBwOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHBwOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bml6ZXIuY3BwLgorICAgICAgICAoeXlfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5X3RyYW5z
X2luZm8pOgorICAgICAgICAoeXlndXRzX3QpOgorICAgICAgICAoeXlfZ2V0X3ByZXZpb3VzX3N0
YXRlKToKKyAgICAgICAgKHl5X3RyeV9OVUxfdHJhbnMpOgorICAgICAgICAoaW5wdXQpOgorICAg
ICAgICAocHByZXN0YXJ0KToKKyAgICAgICAgKHBwX3N3aXRjaF90b19idWZmZXIpOgorICAgICAg
ICAocHBfbG9hZF9idWZmZXJfc3RhdGUpOgorICAgICAgICAocHBfY3JlYXRlX2J1ZmZlcik6Cisg
ICAgICAgIChwcF9kZWxldGVfYnVmZmVyKToKKyAgICAgICAgKHBwX2luaXRfYnVmZmVyKToKKyAg
ICAgICAgKHBwX2ZsdXNoX2J1ZmZlcik6CisgICAgICAgIChwcHB1c2hfYnVmZmVyX3N0YXRlKToK
KyAgICAgICAgKHBwcG9wX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgIChwcGVuc3VyZV9idWZmZXJf
c3RhY2spOgorICAgICAgICAocHBfc2Nhbl9idWZmZXIpOgorICAgICAgICAocHBfc2Nhbl9zdHJp
bmcpOgorICAgICAgICAocHBfc2Nhbl9ieXRlcyk6CisgICAgICAgICh5eV9mYXRhbF9lcnJvcik6
CisgICAgICAgIChwcGdldF9leHRyYSk6CisgICAgICAgIChwcGdldF9saW5lbm8pOgorICAgICAg
ICAocHBnZXRfY29sdW1uKToKKyAgICAgICAgKHBwZ2V0X2luKToKKyAgICAgICAgKHBwZ2V0X291
dCk6CisgICAgICAgIChwcGdldF9sZW5nKToKKyAgICAgICAgKHBwZ2V0X3RleHQpOgorICAgICAg
ICAocHBzZXRfZXh0cmEpOgorICAgICAgICAocHBzZXRfbGluZW5vKToKKyAgICAgICAgKHBwc2V0
X2NvbHVtbik6CisgICAgICAgIChwcHNldF9pbik6CisgICAgICAgIChwcHNldF9vdXQpOgorICAg
ICAgICAocHBnZXRfZGVidWcpOgorICAgICAgICAocHBzZXRfZGVidWcpOgorICAgICAgICAocHBn
ZXRfbHZhbCk6CisgICAgICAgIChwcHNldF9sdmFsKToKKyAgICAgICAgKHBwZ2V0X2xsb2MpOgor
ICAgICAgICAocHBzZXRfbGxvYyk6CisgICAgICAgIChwcGxleF9pbml0KToKKyAgICAgICAgKHBw
bGV4X2luaXRfZXh0cmEpOgorICAgICAgICAoeXlfaW5pdF9nbG9iYWxzKToKKyAgICAgICAgKHBw
bGV4X2Rlc3Ryb3kpOgorICAgICAgICAoeXlfZmxleF9zdHJuY3B5KToKKyAgICAgICAgKHl5X2Zs
ZXhfc3RybGVuKToKKyAgICAgICAgKHBwYWxsb2MpOgorICAgICAgICAocHByZWFsbG9jKToKKyAg
ICAgICAgKHBwZnJlZSk6CisgICAgICAgIChwcCk6CisgICAgICAgIChwcDo6VG9rZW5pemVyOjpU
b2tlbml6ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6flRva2VuaXplcik6CisgICAgICAg
IChwcDo6VG9rZW5pemVyOjppbml0KToKKyAgICAgICAgKHBwOjpUb2tlbml6ZXI6OnNldEZpbGVO
dW1iZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6c2V0TGluZU51bWJlcik6CisgICAgICAg
IChwcDo6VG9rZW5pemVyOjpsZXgpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6aW5pdFNjYW5u
ZXIpOgorICAgICAgICAocHA6OlRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6
ZXIuaC4KKyAgICAgICAgKHBwKToKKyAgICAgICAgKFRva2VuaXplcik6CisgICAgICAgIChDb250
ZXh0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sOiBS
ZW5hbWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW5pemVyLmwuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmM6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9h
dG9tLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21w
aWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YzogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmM6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9nZW5lcmF0ZV9w
YXJzZXIuc2g6IFJlbmFtZWQgZnJvbSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2guCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvbmV3X2ZpbGUuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlMi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHJlcHJv
Y2Vzc29yLnZjcHJvajogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL251bWVyaWNfbGV4Lmg6IEFkZGVkLgorICAgICAgICAocHApOgorICAgICAgICAocHA6Om51
bWVyaWNfYmFzZV9pbnQpOgorICAgICAgICAocHA6Om51bWVyaWNfbGV4X2ludCk6CisgICAgICAg
IChwcDo6bnVtZXJpY19sZXhfZmxvYXQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvcGFyc2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wcF91dGlscy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRpbHMuaC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oOiBSZW1vdmVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jOiBSZW1vdmVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oOiBSZW1vdmVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmM6IFJlbW92ZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
bGliRUdML0NvbmZpZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkVHTC9Db25maWcu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliRUdML0Rpc3BsYXkuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9s
aWJFR0wvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliRUdML1N1cmZhY2UuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9saWJFR0wvbGliRUdMLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliRUdM
L2xpYkVHTC5kZWY6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wucmM6IFJl
bW92ZWQuCisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qOiBSZW1vdmVkLgorICAg
ICAgICAqIHNyYy9saWJFR0wvbWFpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkVH
TC9tYWluLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkVHTC9yZXNvdXJjZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQmxpdC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9CbGl0Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9CdWZmZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL0ZlbmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L0ZlbmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvSW5kZXhEYXRhTWFuYWdlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL2xpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL1Byb2dyYW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3Jh
bUJpbmFyeS5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUXVlcnkuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUXVlcnkuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL1JFQURNRTogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1h
bmFnZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5h
Z2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGli
R0xFU3YyL1RleHR1cmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRl
eERhdGFNYW5hZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1ZlcnRl
eERhdGFNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZjog
UmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYzogUmVtb3ZlZC4K
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2o6IFJlbW92ZWQuCisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9tYWluLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGli
R0xFU3YyL21haW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL21hdGh1dGls
Lmg6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9yZXNvdXJjZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oOiBSZW1vdmVkLgorCiAyMDEyLTEyLTE4ICBNYXgg
VnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQU5HTEVdIFVzZSBvZiB1
bmluaXRpYWxpemVkIG1lbW9yeSBpbiBBcnJheUJvdW5kc0NsYW1wZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCBiM2E4OWZjLi44Zjk1MGU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvRGVyaXZlZFNvdXJjZXMucHJpCkBAIC0xMyw3ICsxMyw3
IEBAIGVxdWFscyhzYW5pdGl6ZWRGaWxlLCAkJHRvU2FuaXRpemVkUGF0aCgkJF9QUk9fRklMRV8p
KTpURU1QTEFURSA9IGRlcml2ZWQKIAogQU5HTEVfRkxFWF9TT1VSQ0VTID0gXAogICAgICQkUFdE
L3NyYy9jb21waWxlci9nbHNsYW5nLmwgXAotICAgICQkUFdEL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5sCisgICAgJCRQV0Qvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIubAogCiBhbmdsZWZsZXgub3V0cHV0ID0gJHtRTUFLRV9GSUxFX0JBU0V9X2xl
eC5jcHAKIGFuZ2xlZmxleC5pbnB1dCA9IEFOR0xFX0ZMRVhfU09VUkNFUwpAQCAtMjIsNyArMjIs
NyBAQCBHRU5FUkFUT1JTICs9IGFuZ2xlZmxleAogCiBBTkdMRV9CSVNPTl9TT1VSQ0VTID0gXAog
ICAgICQkUFdEL3NyYy9jb21waWxlci9nbHNsYW5nLnkgXAotICAgICQkUFdEL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQorICAgICQkUFdEL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CiAKIGFuZ2xlYmlzb25fZGVjbC5v
dXRwdXQgPSAke1FNQUtFX0ZJTEVfQkFTRX1fdGFiLmgKIGFuZ2xlYmlzb25fZGVjbC5pbnB1dCA9
IEFOR0xFX0JJU09OX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L1RhcmdldC5wcmkgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9UYXJnZXQucHJpCmluZGV4IGVh
YTkzNmQuLmI3Nzk1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQpAQCAtMTMsNyAr
MTMsNyBAQCBDT05GSUcgKz0gc3RhdGljbGliCiAKIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNP
VVJDRV9ESVIvc3JjIFwKLSAgICAkJFNPVVJDRV9ESVIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcgXAorICAgICQkU09VUkNFX0RJUi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yIFwKICAg
ICAkJFNPVVJDRV9ESVIvaW5jbHVkZQogCiBIRUFERVJTICs9IFwKQEAgLTMzLDYgKzMzLDcgQEAg
SEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmggXAogICAg
IHNyYy9jb21waWxlci9Gb3JMb29wVW5yb2xsLmggXAogICAgIHNyYy9jb21waWxlci9nbHNsYW5n
LmggXAorICAgIHNyYy9jb21waWxlci9IYXNoTmFtZXMuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0lu
Zm9TaW5rLmggXAogICAgIHNyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmggXAogICAgIHNyYy9j
b21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIFwKQEAgLTQ0LDI4ICs0NSwxOSBAQCBIRUFERVJT
ICs9IFwKICAgICBzcmMvY29tcGlsZXIvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBcCiAgICAgc3Jj
L2NvbXBpbGVyL29zaW5jbHVkZS5oIFwKICAgICBzcmMvY29tcGlsZXIvUHJhZ21hLmggXAotICAg
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NvbXBpbGUuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
aCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaCBcCisg
ICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIFwKKyAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oIFwKKyAgICBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmggXAogICAgIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21l
bW9yeS5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5o
IFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyLmgg
XAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5oIFwK
LSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oIFwKLSAgICBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9NYWNyby5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9N
YWNyb0V4cGFuZGVyLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXBy
b2Nlc3Nvci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2Nh
dGlvbi5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIFwKLSAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIuaCBcCi0gICAgc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wcmVwcm9jZXNzLmggXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5l
ci5oIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIFwKLSAgICBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci90b2tlbnMuaCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhl
ci5oIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvLmggXAorICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5oIFwKKyAgICBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL251bWVyaWNfbGV4LmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvUHJlcHJvY2Vzc29yLmggXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNl
TG9jYXRpb24uaCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIFwKKyAg
ICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oIFwKICAgICBzcmMvY29tcGls
ZXIvT3V0cHV0RVNTTC5oIFwKICAgICBzcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oIFwKICAgICBz
cmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCBcCkBAIC04OCw2ICs4MCw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHNyYy9jb21waWxlci91dGlsLmggXAogICAgIHNyYy9jb21waWxlci9WYWxpZGF0
ZUxpbWl0YXRpb25zLmggXAogICAgIHNyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaCBcCisgICAg
c3JjL2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmggXAogICAgIHNyYy9jb21waWxlci9WZXJzaW9u
R0xTTC5oCiAKIFNPVVJDRVMgKz0gXApAQCAtMTM0LDIzICsxMjcsMTcgQEAgU09VUkNFUyArPSBc
CiAgICAgc3JjL2NvbXBpbGVyL3V0aWwuY3BwIFwKICAgICBzcmMvY29tcGlsZXIvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAgXAogICAgIHNyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwIFwKKyAg
ICBzcmMvY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuY3BwIFwKICAgICBzcmMvY29tcGlsZXIvVmVy
c2lvbkdMU0wuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYyBcCi0g
ICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9t
ZW1vcnkuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NC
YXNlLmNwcCBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFu
ZGxlckJhc2UuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3Rp
dmVQYXJzZXIuY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5j
cHAgXAotICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcCBcCi0gICAg
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIFwKLSAgICBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcCBcCi0gICAgc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcCBcCi0gICAgc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvVG9rZW4uY3BwIFwKLSAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3NjYW5uZXIuYyBcCi0gICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMgXAot
ICAgIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMKKyAgICBzcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5jcHAgXAorICAgIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAgXAorICAgIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvSW5wdXQuY3BwIFwKKyAgICBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmNw
cCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAgXAorICAgIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5jcHAgXAorICAgIHNyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcCBcCisgICAgc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbi5jcHAgXAogCiB3aW4zMjogU09VUkNFUyArPSBzcmMvY29tcGlsZXIvb3Nz
b3VyY2Vfd2luLmNwcAogZWxzZTogU09VUkNFUyArPSBzcmMvY29tcGlsZXIvb3Nzb3VyY2VfcG9z
aXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaAppbmRleCBkODI5MzFlLi40NjIzN2YxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKQEAgLTIzLDYg
KzIzLDggQEAKICNkZWZpbmUgQ09NUElMRVJfRVhQT1JUCiAjZW5kaWYKIAorI2luY2x1ZGUgIktI
Ui9raHJwbGF0Zm9ybS5oIgorCiAvLwogLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRl
bnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8gYW5kIHRoZSBzaGFkaW5nIGxh
bmd1YWdlIGNvbXBpbGVyLgpAQCAtMTEwLDcgKzExMiwxMCBAQCB0eXBlZGVmIGVudW0gewogICBT
SF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIICAgPSAgMHg4Qjg3LAogICBTSF9BQ1RJVkVfQVRU
UklCVVRFUyAgICAgICAgICAgPSAgMHg4Qjg5LAogICBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9M
RU5HVEggPSAgMHg4QjhBLAotICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgPSAgMHg4
QjhCCisgIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDAsCisgIFNIX05B
TUVfTUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCisgIFNIX0hBU0hFRF9OQU1FX01B
WF9MRU5HVEggICAgICA9ICAweDYwMDIsCisgIFNIX0hBU0hFRF9OQU1FU19DT1VOVCAgICAgICAg
ICA9ICAweDYwMDMKIH0gU2hTaGFkZXJJbmZvOwogCiAvLyBDb21waWxlIG9wdGlvbnMuCkBAIC0x
NDQsMTEgKzE0OSwxNCBAQCB0eXBlZGVmIGVudW0gewogICAvLyAtIFRoZSBzaGFkZXIgdHlwZSBp
cyBTSF9GUkFHTUVOVF9TSEFERVIuCiAgIFNIX0RFUEVOREVOQ1lfR1JBUEggPSAweDA0MDAsCiAK
KyAgLy8gRW5mb3JjZSB0aGUgR0xTTCAxLjAxNyBBcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWNraW5n
IHJlc3RyaWN0aW9ucy4KKyAgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUyA9IDB4MDgw
MCwKKwogICAvLyBUaGlzIGZsYWcgZW5zdXJlcyBhbGwgaW5kaXJlY3QgKGV4cHJlc3Npb24tYmFz
ZWQpIGFycmF5IGluZGV4aW5nCiAgIC8vIGlzIGNsYW1wZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUg
YXJyYXkuIFRoaXMgZW5zdXJlcywgZm9yIGV4YW1wbGUsCiAgIC8vIHRoYXQgeW91IGNhbm5vdCBy
ZWFkIG9mZiB0aGUgZW5kIG9mIGEgdW5pZm9ybSwgd2hldGhlciBhbiBhcnJheQogICAvLyB2ZWMy
MzQsIG9yIG1hdDIzNCB0eXBlLgotICBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgPSAw
eDA4MDAKKyAgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTID0gMHgxMDAwCiB9IFNoQ29t
cGlsZU9wdGlvbnM7CiAKIC8vCkBAIC0xNjMsNiArMTcxLDEwIEBAIENPTVBJTEVSX0VYUE9SVCBp
bnQgU2hJbml0aWFsaXplKCk7CiAvLwogQ09NUElMRVJfRVhQT1JUIGludCBTaEZpbmFsaXplKCk7
CiAKKy8vIFRoZSA2NCBiaXRzIGhhc2ggZnVuY3Rpb24uIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMg
dGhlIGlucHV0IHN0cmluZzsgdGhlCisvLyBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBzdHJpbmcg
bGVuZ3RoLgordHlwZWRlZiBraHJvbm9zX3VpbnQ2NF90ICgqU2hIYXNoRnVuY3Rpb242NCkoY29u
c3QgY2hhciosIHVuc2lnbmVkIGludCk7CisKIC8vCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRl
bnQgYnVpbHQtaW4gcmVzb3VyY2VzIChjb25zdGFudHMgYW5kIGV4dGVuc2lvbnMpLgogLy8gVGhl
IG5hbWVzIGZvciB0aGVzZSByZXNvdXJjZXMgaGFzIGJlZW4gb2J0YWluZWQgYnkgc3RyaXBwaW5n
IGdsXy9HTF8uCkBAIC0xODQsNiArMTk2LDExIEBAIHR5cGVkZWYgc3RydWN0CiAgICAgaW50IE9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlczsKICAgICBpbnQgT0VTX0VHTF9pbWFnZV9leHRlcm5hbDsK
ICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOworCisgICAgLy8gTmFtZSBIYXNoaW5nLgor
ICAgIC8vIFNldCBhIDY0IGJpdCBoYXNoIGZ1bmN0aW9uIHRvIGVuYWJsZSB1c2VyLWRlZmluZWQg
bmFtZSBoYXNoaW5nLgorICAgIC8vIERlZmF1bHQgaXMgTlVMTC4KKyAgICBTaEhhc2hGdW5jdGlv
bjY0IEhhc2hGdW5jdGlvbjsKIH0gU2hCdWlsdEluUmVzb3VyY2VzOwogCiAvLwpAQCAtMjcwLDYg
KzI4NywxMSBAQCBDT01QSUxFUl9FWFBPUlQgaW50IFNoQ29tcGlsZSgKIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4KIC8vIFNIX01BUFBFRF9O
QU1FX01BWF9MRU5HVEg6IHRoZSBsZW5ndGggb2YgdGhlIG1hcHBlZCB2YXJpYWJsZSBuYW1lIGlu
Y2x1ZGluZwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG51bGwgdGVybWluYXRp
b24gY2hhcmFjdGVyLgorLy8gU0hfTkFNRV9NQVhfTEVOR1RIOiB0aGUgbWF4IGxlbmd0aCBvZiBh
IHVzZXItZGVmaW5lZCBuYW1lIGluY2x1ZGluZyB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAg
bnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RI
OiB0aGUgbWF4IGxlbmd0aCBvZiBhIGhhc2hlZCBuYW1lIGluY2x1ZGluZyB0aGUKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGwgdGVybWluYXRpb24gY2hhcmFjdGVyLgorLy8gU0hf
SEFTSEVEX05BTUVTX0NPVU5UOiB0aGUgbnVtYmVyIG9mIGhhc2hlZCBuYW1lcyBmcm9tIHRoZSBs
YXRlc3QgY29tcGlsZS4KIC8vIAogLy8gcGFyYW1zOiBSZXF1ZXN0ZWQgcGFyYW1ldGVyCiBDT01Q
SUxFUl9FWFBPUlQgdm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLApAQCAtMzUw
LDYgKzM3MiwyNCBAQCBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdldEFjdGl2ZVVuaWZvcm0oY29u
c3QgU2hIYW5kbGUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciogbWFwcGVkTmFtZSk7CiAKKy8vIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBuYW1l
IGhhc2hpbmcgZW50cnkgZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisvLyBQYXJhbWV0ZXJzOgor
Ly8gaGFuZGxlOiBTcGVjaWZpZXMgdGhlIGNvbXBpbGVyCisvLyBpbmRleDogU3BlY2lmaWVzIHRo
ZSBpbmRleCBvZiB0aGUgbmFtZSBoYXNoaW5nIGVudHJ5IHRvIGJlIHF1ZXJpZWQuCisvLyBuYW1l
OiBSZXR1cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSB1c2VyIGRl
ZmluZWQgbmFtZS4KKy8vICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCBuYW1lIGhhcyBlbm91Z2gg
bWVtb3J5IHRvIGFjY29tb2RhdGUgdGhlIG5hbWUuCisvLyAgICAgICBUaGUgc2l6ZSBvZiB0aGUg
YnVmZmVyIHJlcXVpcmVkIHRvIHN0b3JlIHRoZSB1c2VyIGRlZmluZWQgbmFtZSBjYW4KKy8vICAg
ICAgIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgU2hHZXRJbmZvIHdpdGggU0hfTkFNRV9NQVhfTEVO
R1RILgorLy8gaGFzaGVkTmFtZTogUmV0dXJucyBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcgY29u
dGFpbmluZyB0aGUgaGFzaGVkIG5hbWUgb2YKKy8vICAgICAgICAgICAgIHRoZSB1bmlmb3JtIHZh
cmlhYmxlLCBJdCBpcyBhc3N1bWVkIHRoYXQgaGFzaGVkTmFtZSBoYXMgZW5vdWdoCisvLyAgICAg
ICAgICAgICBtZW1vcnkgdG8gYWNjb21vZGF0ZSB0aGUgbmFtZS4gVGhlIHNpemUgb2YgdGhlIGJ1
ZmZlciByZXF1aXJlZAorLy8gICAgICAgICAgICAgdG8gc3RvcmUgdGhlIG5hbWUgY2FuIGJlIG9i
dGFpbmVkIGJ5IGNhbGxpbmcgU2hHZXRJbmZvIHdpdGgKKy8vICAgICAgICAgICAgIFNIX0hBU0hF
RF9OQU1FX01BWF9MRU5HVEguCitDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdldE5hbWVIYXNoaW5n
RW50cnkoY29uc3QgU2hIYW5kbGUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIqIGhhc2hlZE5hbWUpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2Fu
Z2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTY1ZGI3ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgL2Rldi9u
dWxsCkBAIC0xLDkzNSArMCwwIEBACi0vLyAhJCpVVEY4KiQhCi17Ci0JYXJjaGl2ZVZlcnNpb24g
PSAxOwotCWNsYXNzZXMgPSB7Ci0JfTsKLQlvYmplY3RWZXJzaW9uID0gNDU7Ci0Jb2JqZWN0cyA9
IHsKLQotLyogQmVnaW4gUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJMTU2M0Q5OTE2
QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLyA9IHsKLQkJCWlzYSA9IFBCWEFnZ3JlZ2F0ZVRhcmdl
dDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIg
Ki87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkJ
QTE1RTc4QkVDREZGMjBCQzNGRkYwNDBBIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkJ
QkEyNDZDQTE5NDM1QTlGQThBQzY5MTQ2IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkJ
RTRBM0QzM0NBNDlEMDEzNTUwQjhCQTVGIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCi0JCQkp
OwotCQkJbmFtZSA9IEFsbDsKLQkJCXByb2R1Y3ROYW1lID0gQWxsOwotCQl9OwotLyogRW5kIFBC
WEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCi0JCTA1NTYzQURGRUExNTExNkQ3MjMzMzMyRiAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0ODU3RTE4Nzk5
RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OwotCQkwOEE3OTMzQkQy
Rjc4QTg2QjkwMjAwRjYgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEExMThFNTAwM0U1QzBFMjUzQzUzODM5IC8qIENvbXBpbGVy
LmNwcCAqLzsgfTsKLQkJMEEyMTY5NDkxMDNFMUUyMjhGOUMxMkYwIC8qIEluaXRpYWxpemVEbGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjBDMzk5
OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVEbGwuY3BwICovOyB9OwotCQkwQUMxODk3
RTQ2MUEwRDQ3NThFM0RDRTMgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyN0FFQzkwNjcxMkVDMjM4MDQxNDY0IC8qIFZl
cnNpb25HTFNMLmNwcCAqLzsgfTsKLQkJMEU5NDU2RjQ2NEUxNjM5MkQxQ0NEMDMwIC8qIFZhbGlk
YXRlTGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjE0OEQ5NjdCOEQyODhBODI2N0JGRjNBIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwICovOyB9OwotCQkwRUMwOUIzQjI1NDgyOUY4RjFEOTUyRDMgLyogRm9yTG9vcFVucm9sbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REM5QjY0
N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAgKi87IH07Ci0JCTFFRDFEMkM3
Qzc0QzZCNjI1QUZCMUNDRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjdDMTFFRTEwRkVEMjk3OTkzMUZGQzExIC8qIFZh
cmlhYmxlSW5mby5jcHAgKi87IH07Ci0JCTI5NjQ2NjU2NkQ4QzBGMDIzQTU1Mzc2MCAvKiBTZWFy
Y2hTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjI4QTZERURERjA4REIzNzAzOTRBN0FEIC8qIFNlYXJjaFN5bWJvbC5jcHAgKi87IH07Ci0J
CTJFN0MwRDM4MDRCODMwOEE0OTNEOUI0QiAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjY4QTZBQTgxMTQ5NTcxOEE2OTM4
QzAgLyogZ2xzbGFuZ190YWIuY3BwICovOyB9OwotCQkzMDIxRTBCRjFCQzg0NDJGRjFGMkYyQjQg
LyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzNBNTdDNkQ0MTM3NzNBRUJBM0M0N0E2IC8qIGdsc2xhbmdfbGV4LmNwcCAqLzsg
fTsKLQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1IC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0RjJFRDBEODJEN0JCQ0E0
RTlFRUVBIC8qIEluaXRpYWxpemUuY3BwICovOyB9OwotCQkzMkIxREJDRDZCODNGMjE0NkQ3ODdB
NjIgLyogYXRvbS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAqLzsgfTsKLQkJMzVCRTFCQkVF
NjEzNUExQ0IwNjA4RUE4IC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODA1OEEwQTJBMEEwMjM4Njg2NzUxN0VBIC8qIGNwcHN0cnVj
dC5jICovOyB9OwotCQkzQTk2RTlDQUM4QTI1QUYxNTY0QjY1MkMgLyogbWVtb3J5LmMgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTRGNDQyQTI2MDZGRUM1
NUYxMkEyOEUgLyogbWVtb3J5LmMgKi87IH07Ci0JCTNGMTgzODlCQ0I4OTM3MEE5MzA2NjdGNCAv
KiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyogVHJhbnNsYXRvckdMU0wuY3Bw
ICovOyB9OwotCQk0MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFQUY2RjMxMjZDMkVD
NDM5Nzc4NUMzRiAvKiBpbnRlcm1PdXQuY3BwICovOyB9OwotCQk0QjRCREU3QUQ2MjY2QjM5RUQ0
M0MyRDQgLyogQ29kZUdlbkhMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNMLmNw
cCAqLzsgfTsKLQkJNTBERjAwMDA1Q0M0MjEyRjZGQjEyOTFEIC8qIEludGVybWVkaWF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjdDNDg2QzM3
MEE3MjkzOEZFODE2MEYgLyogSW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKLQkJNTVDQkQ4NzU3M0I4
MDNBMTczQUM5MTI5IC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0VFNzIxNUE3QUI0RUY3MUM5N0QyNTQ1IC8qIHV0aWwuY3BwICovOyB9
OwotCQk1RjdCNTJBNTREQ0U4MTU1RUQ5NEVDRjggLyogT3V0cHV0SExTTC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTVCNUJCMjUyNjgwMjQ3OUUx
OUY5OTMgLyogT3V0cHV0SExTTC5jcHAgKi87IH07Ci0JCTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYx
OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzZDODMxQTc1RUJFMDA5QTk4NjE3OTYgLyogUGFyc2VIZWxwZXIuY3BwICov
OyB9OwotCQk4ODhGMTM4MjQ5OEUyRDc0QUYyODAxQzggLyogZGVidWcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFCQTIzMEZFQTM2NTRCMDMwRTRD
NEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKLQkJODk2QjcyMEJEMjFGNjc0OUE3RDgzRjMwIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU3Q0YxRjgzRTg0MjkwMUM0MkQ0NDgyNSAvKiBNYXBMb25nVmFyaWFibGVO
YW1lcy5jcHAgKi87IH07Ci0JCTkzQTQxQUYwMzZFNUVGODdCMzY2QjU2MyAvKiBUcmFuc2xhdG9y
RVNTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
QTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICovOyB9OwotCQk5
QjExMUI4M0ZCNjM2RkQ1Q0RFQzMyQTAgLyogT3V0cHV0R0xTTEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNERjAxRjAwMkFERTlEQjhBM0VG
NEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLzsgfTsKLQkJOUU4REZFMUNDRUYwMzhCRjJCNjU0
MjhDIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICov
OyB9OwotCQlBMjAxMDgzQjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MUYxNTlDMzFB
MDAwRTU3QkJFIC8qIERpYWdub3N0aWNzLmNwcCAqLzsgfTsKLQkJQTIwMTA4M0MxNTlDMzFBMDAw
RTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MjExNTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2
ZUhhbmRsZXIuY3BwICovOyB9OwotCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyMDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovOyB9
OwotCQlBMjAxMDgzRTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyNTE1OUMz
MUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi87IH07Ci0JCUEyMDEwODQwMTU5
QzMxQTAwMEU1N0JCRSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICov
OyB9OwotCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdCQkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4MkIxNTlDMzFBMDAwRTU3
QkJFIC8qIExleGVyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3QkJFIC8qIE1h
Y3JvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
MDEwODJEMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNyby5jcHAgKi87IH07Ci0JCUEyMDEwODQzMTU5
QzMxQTAwMEU1N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNy
b0V4cGFuZGVyLmNwcCAqLzsgfTsKLQkJQTIwMTA4NDQxNTlDMzFBMDAwRTU3QkJFIC8qIFByZXBy
b2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLzsgfTsKLQkJ
QTIwMTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODM2MTU5QzMxQTAwMEU1N0JCRSAvKiBU
b2tlbi5jcHAgKi87IH07Ci0JCUEyMDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4
MzgxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuaXplci5jcHAgKi87IH07Ci0JCUEyMDEwODYyMTU5
QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg0OTE1OUMzMjRGMDBFNTdC
QkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9OwotCQlBMjAxMDg2MzE1OUMz
MjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEwODRDMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGguY3BwICovOyB9OwotCQlBMjAxMDg2NDE1OUMzMjRGMDBFNTdCQkUgLyogRGVw
ZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMjAxMDg0RTE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5jcHAgKi87IH07Ci0JCUEyMDEwODY1MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRl
bmN5R3JhcGhPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTIwMTA4NTAxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1
dC5jcHAgKi87IH07Ci0JCUEyMDEwODY2MTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3Jh
cGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2Uu
Y3BwICovOyB9OwotCQlBMjAxMDg2NzE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJzaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyMDEw
ODUzMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXRlY3RSZWN1cnNpb24uY3BwICovOyB9OwotCQlBMjAx
MDg2ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTIwMTA4NTUxNTlDMzI0RjAwRTU3QkJFIC8q
IERpYWdub3N0aWNzLmNwcCAqLzsgfTsKLQkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERp
cmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
ICovOyB9OwotCQlBMjAxMDg2QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5jcHAgKi87
IH07Ci0JCUEyMDEwODZCMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
LmNwcCAqLzsgfTsKLQkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4
U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyMDEwODYwMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHAgKi87IH07Ci0JCUEyMDEwODcxMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNj
b250aW51aXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyMDEwODZEMTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAq
LzsgfTsKLQkJQTIwMTA4NzIxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjAxMDg2
RjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLzsgfTsKLQkJQUMy
M0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8q
IFJlbW92ZVRyZWUuY3BwICovOyB9OwotCQlBRDg1NTE3RjA4NkZEQ0VGMzk0N0M0MDMgLyogc3lt
Ym9scy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjAx
M0E3MjQwQkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLzsgfTsKLQkJQjQ4NTg0MTdFNTQz
NjVCRThDREUzOTE5IC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3Nv
dXJjZV9wb3NpeC5jcHAgKi87IH07Ci0JCUI4QkQyNjg1QTE2QjE4OENDREZCMDUyQiAvKiBTaGFk
ZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU2QzdFOTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKLQkJQkVC
QkY0RjA4MTlFQTNEMDM5NzdBOEZDIC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJ
bmZvU2luay5jcHAgKi87IH07Ci0JCUM0QUFCMkJCNDU5NEMwREEzMThEQ0IxQyAvKiBPdXRwdXRF
U1NMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERC
MjkxN0M1QjYyNDcxMjM2NERFNEE3NSAvKiBPdXRwdXRFU1NMLmNwcCAqLzsgfTsKLQkJQzc1RUI5
MjkyQTBEREE0NTU5MkE4QUNGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDhCNzQwMkNDMDdBMDU5RkVGNUVDMzUxIC8qIE91
dHB1dEdMU0wuY3BwICovOyB9OwotCQlDQjdGMEVGMEQ2QTg5RkE4QzRERjU1MTMgLyogY3BwLmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNzU3MDdCMzkz
QjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi87IH07Ci0JCUQ1NkY3RDAwRTlCMTYyRTQxNkQzN0RG
MCAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdMU0wuY3BwICov
OyB9OwotCQlFMUM3QzVERkYwQjJERkVDMDkzODdGNEUgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2NEVBQkU3MzhGQzY2NkE1
RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovOyB9OwotCQlFOEM3MjdBQThFOURDNUU3QjU4ODU3
REYgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5zLmMgKi87IH07Ci0JCUU5OUQ2
RDgwREJGMDVFQ0U3MTA4QjI2RCAvKiBUcmFuc2xhdG9ySExTTC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZDN0Ug
LyogVHJhbnNsYXRvckhMU0wuY3BwICovOyB9OwotCQlGMDk4RjQ2M0VEQUJDRjA3NjkwMDc2Nzgg
Lyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJRjVBRTJB
MjkyREZBRjhDMTU4NDEyQUEyIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAv
KiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUY2QUJENThGOENBQjc2NDFEOEJGRTkzNSAv
KiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCN0U1QjBGMDQ2MzVFNjA5MEYwREU4RUYgLyogU3ltYm9sVGFibGUuY3BwICovOyB9
OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvbnRhaW5l
ckl0ZW1Qcm94eSBzZWN0aW9uICovCi0JCTFGNzI0MjQ5NjEwM0VERjI5Q0MyNUQ4NyAvKiBQQlhD
b250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7
Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJvamVj
dCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcg
PSBBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjE7Ci0JCQlyZW1vdGVJbmZvID0gdHJhbnNsYXRvcl9o
bHNsOwotCQl9OwotCQk1NUQ1RjlCRjcyN0U0QTNCNjYzNzgwMkIgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovID0gewotCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwotCQkJY29udGFp
bmVyUG9ydGFsID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICov
OwotCQkJcHJveHlUeXBlID0gMTsKLQkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gNkY0RkQzNUNC
M0RGQzg5RDcwRUNENDMyOwotCQkJcmVtb3RlSW5mbyA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQl9
OwotCQk2MEQzNTQ2QUMyN0IwOTRENkNBMDRDRDYgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0gewotCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFs
ID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJv
eHlUeXBlID0gMTsKLQkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gNTg5MkM3QTM2OTUzMzA0MzdB
RkU1NzE0OwotCQkJcmVtb3RlSW5mbyA9IHRyYW5zbGF0b3JfZ2xzbDsKLQkJfTsKLS8qIEVuZCBQ
QlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KLQkJMDU2RkVBREM3RDk1QzZENEM5Q0YxMTEzIC8qIHNjYW5uZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
QTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29tcGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwQTNBMjYwRjUz
NzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHJhbnNsYXRvckVTU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwQzlCNDYx
NkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTEyMEFEMEEzQjc2NDJGQjVBOUFFM0E1NiAvKiBWZXJz
aW9uR0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZXJzaW9uR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxMkVBRjAyODMxMUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBvb2xBbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
NTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTgyQkFENTBENEU1OEI4ODRGNUVCOUYzIC8qIEZvckxvb3BVbnJvbGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRm9yTG9vcFVucm9sbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMjhBNkRF
RERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNlYXJjaFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI3QzExRUUx
MEZFRDI5Nzk5MzFGRkMxMSAvKiBWYXJpYWJsZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmFyaWFibGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjdFNEM3RUQw
QjgyRTE4RENCRURGMUM5IC8qIEJhc2VUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlVHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhF
IC8qIG1lbW9yeS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBtZW1vcnkuYzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7
IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU3QzlCNkU2
REI3NTFFMTJBMkY2Q0I2IC8qIEluaXRpYWxpemVHbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
aXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNERERDNzcy
MTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwotCQkzRUU3MjE1QTdBQjRFRjcxQzk3RDI1NDUgLyogdXRpbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJM0Y2OEE2QUE4MTE0OTU3MThBNjkzOEMwIC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPdXRwdXRHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGdsc2xhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xz
bGFuZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0QUJBMjMwRkVBMzY1NEIwMzBF
NEM0RkIgLyogZGVidWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZGVidWcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0RkNGMzJDQjJEOEE0MkM5MzBBNjZCMDAgLyogZ2xzbGFu
Z190YWIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZ2xzbGFuZ190YWIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBjcHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTZDN0U5OUJBNTAwQTg0
QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZGVyTGFu
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3Q0YxRjgzRTg0MjkwMUM0MkQ0
NDgyNSAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MEIy
QTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbXBpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0
IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0SExTTC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1RDk5MzU0QzREODE4N0QzODRDODEyMDcgLyogVmFyaWFibGVJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1REM5QjY0N0UxMEY2NUY2NjE0MkVDQzEgLyogRm9yTG9vcFVucm9sbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGb3JMb29wVW5yb2xsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVEbGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5pdGlhbGl6ZURsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZCQjY2QUI1ODczODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE91dHB1dEVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NkJCQzgyMjRCOUQ4RTIzNEQxMTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
cHJlcHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTY5MjdCRTVEM0My
QzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mb1Npbmsu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RkI3MERDNzRBMjFGQkNENjY1QUJE
RjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdM
U0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3M0E1N0M2RDQxMzc3M0FFQkEz
QzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZ2xzbGFuZ19sZXgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0
NzcgLyogaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3lt
Ym9sVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJN0Q5Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gc3ltYm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MDU4
QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0
cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MUNDNDI0NUE4RTVBQjU1ODRE
MzM2RjMgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODMxMzk5REVFNURB
QkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBtZW1vcnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRp
YWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4NTg0NUZGRjVBOEU2MzM2NDMwODIzNkQgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5QTZGN0IxQUQzOTE4RTY0REY3NkVCMSAvKiBzbGdsb2Jh
bHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTkwMjU0ODQyRDcyOTc1NjcyQzJFOUE5MyAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1dEdMU0wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3V0cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZGVidWcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2
IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlSGVscGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUE1QjVCQjI1MjY4MDI0NzlFMTlGOTkzIC8q
IE91dHB1dEhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlDRUQzQUZGMUU2MUI0NUVFMTAwNTY1NiAvKiBhdG9t
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OUQ0N0IxQUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEwQ0U0
MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
aXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTE2NDRCMDBFOTMw
NEM0MDdGREM1RjQ3IC8qIGxpYnRyYW5zbGF0b3JfZ2xzbC5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJ0cmFuc2xhdG9yX2dsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKLQkJQTIwMTA3RkYxNTlDMzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3Jf
Y29tbW9uIGNvcHkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gImxpYnRyYW5zbGF0
b3JfY29tbW9uIGNvcHkuYSI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0J
CUEyMDEwODFGMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWFnbm9zdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEyMDEwODIwMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyMTE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0
aXZlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXJl
Y3RpdmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MjIx
NTlDMzFBMDAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBMjAxMDgyMzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpcmVjdGl2ZVBhcnNlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI0MTU5QzMxQTAwMEU1N0JCRSAv
KiBEaXJlY3RpdmVQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGly
ZWN0aXZlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI1MTU5
QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEV4cHJlc3Npb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMjAxMDgyNjE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHByZXNzaW9uUGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODI5MTU5QzMxQTAwMEU1N0JCRSAv
KiBJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnB1dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODJBMTU5QzMxQTAwMEU1N0JC
RSAvKiBJbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyQjE1OUMzMUEwMDBFNTdCQkUgLyog
TGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV4ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgyQzE1OUMzMUEwMDBFNTdCQkUg
LyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1h
Y3JvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MkUxNTlDMzFBMDAwRTU3QkJFIC8q
IE1hY3JvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODJGMTU5QzMxQTAwMEU1N0JCRSAvKiBNYWNy
b0V4cGFuZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3Jv
RXhwYW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgzMDE1OUMz
MUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0V4cGFuZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODMxMTU5QzMxQTAwMEU1N0JCRSAvKiBwcF91dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBwcF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
MjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyogUHJlcHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZXByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEyMDEwODMzMTU5QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlcHJvY2Vzc29yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODM1MTU5QzMxQTAwMEU1N0JCRSAvKiBTb3Vy
Y2VMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VMb2Nh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgzNjE1OUMzMUEwMDBF
NTdCQkUgLyogVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgzNzE1OUMzMUEw
MDBFNTdCQkUgLyogVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9r
ZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4MzgxNTlDMzFBMDAwRTU3
QkJFIC8qIFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDgzOTE1
OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg0
ODE1OUMzMjA5MDBFNTdCQkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODRBMTU5QzMy
NEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjAxMDg0QzE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdy
YXBoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lH
cmFwaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODREMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVwZW5kZW5jeUdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEy
MDEwODRFMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg0RjE1OUMzMjRGMDBFNTdC
QkUgLyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVwZW5kZW5jeUdyYXBo
T3V0cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NTExNTlDMzI0
RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTIwMTA4NTIxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaFRy
YXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4
NTMxNTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXRlY3RSZWN1cnNpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMjAxMDg1NDE1OUMzMjRGMDBFNTdCQkUgLyogRGV0ZWN0UmVjdXJz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldGVjdFJlY3Vyc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1NTE1OUMzMjRGMDBFNTdCQkUg
LyogRGlhZ25vc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGlhZ25vc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1NjE1
OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlhZ25vc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIw
MTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlyZWN0aXZlSGFuZGxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3Rp
dmVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpcmVjdGl2ZUhh
bmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NTkxNTlDMzI0RjAw
RTU3QkJFIC8qIEV4dGVuc2lvbkJlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEV4dGVuc2lvbkJlaGF2aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUEyMDEwODVBMTU5QzMyNEYwMEU1N0JCRSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVQYXJzZUNvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1QjE1OUMzMjRGMDBF
NTdCQkUgLyogUHJhZ21hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByYWdt
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdC
QkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuYW1lRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NUUx
NTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODVGMTU5QzMyNEYw
MEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NjAxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTIwMTA4NjExNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODZE
MTU5QzMyNjIwMEU1N0JCRSAvKiBEZXRlY3REaXNjb250aW51aXR5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERldGVjdERpc2NvbnRpbnVpdHkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBMjAxMDg2RTE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0
RGlzY29udGludWl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXRlY3RE
aXNjb250aW51aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEyMDEwODZGMTU5
QzMyNjIwMEU1N0JCRSAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTIwMTA4NzAxNTlDMzI2MjAwRTU3QkJFIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmZvbGRTaG9ydENp
cmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTQ0N0Y3NUYzM0RBNEM0QzEy
M0FDOTUyIC8qIGxpYnRyYW5zbGF0b3JfaGxzbC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSBsaWJ0cmFuc2xhdG9yX2hsc2wuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKLQkJQTUxQzcyOEI2MTVCNDFFMUQ1OUU5OTAyIC8qIHV0aWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTRGMkVEMEQ4MkQ3QkJD
QTRFOUVFRUEgLyogSW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXpl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUE1M0I2NjMyQzc2RjkwNURGMDhF
NTY0IC8qIFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUFFNjVFMTM5QUUxMERFOUVGQUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRTc2
NzRDNTJCREREQjI4QUY1RkZEOUYgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVuaXN0ZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMTQ4RDk2N0I4RDI4OEE4MjY3QkZGM0Eg
LyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxp
bWl0YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJGNUNBMTFFRUE5
MkRGMjM4NEVGRDkzIC8qIENvbnN0YW50VW5pb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRV
bmlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNDM2RUZGMDY5MTNGQ0IxOUMz
NTIyQTcgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdmVUcmVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjU1QjM1OUNGN0U0ODZEQkM0OUJCRjBB
IC8qIE91dHB1dEdMU0xCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEdMU0xCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQ
b29sQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9vbEFsbG9jLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjc1NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmM7IHBhdGggPSBjcHAuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjdCMTEy
N0M3NUI1NzZGQzAwRDc0QUVEIC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjdFNUIwRjA0
NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5
bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNERjAxRjAwMkFE
RTlEQjhBM0VGNEZFIC8qIE91dHB1dEdMU0xCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91
dHB1dEdMU0xCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkUyNTg0ODYw
MDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IG9zc291cmNlX3Bvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzNEQUZG
NkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRyYW5zbGF0b3JITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzQ5
NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5ITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvZGVHZW5ITFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzRGRTk4
OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzhC
RDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBvc2lu
Y2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0VFMEM5MERGNkQ1MDREMUYz
NjI5NzExIC8qIFBhcnNlSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSGVscGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNGMkI2MkUwODIwQzgzMUFGODEyRDAwMCAvKiBi
dWlsZF9hbmdsZS5neXAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gYnVpbGRfYW5nbGUuZ3lwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDRkQxMkM2RTQ2RUJFMDgzOUJCRTUyQjUgLyogcGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMTNDMzY5M0I5
RTQwRDM3RjJGQUIzNEEgLyogdG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHRva2Vucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFy
c2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRy
ZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3ZlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlENTNEREQwQ0RGMTVFRTFERDAxRjFBMjAgLyogVHJhbnNsYXRvckVTU0wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHJhbnNsYXRvckVTU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJREIyOTE3QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gT3V0cHV0RVNTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURE
RDNCN0UzQjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xTTC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlERUFGNkYz
MTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGlu
dGVybU91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURFRUFGQzYxOEEzQjMz
RjFGQkZFMzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1NYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRTNBMjlCNkU5QzIxQjY3QzI1RkYwRDJCIC8qIFRyYW5zbGF0b3JI
TFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JITFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjNFMDlE
QzhFMUJGNUQyOTU4QUFDRURFIC8qIFNlYXJjaFN5bWJvbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFy
Y2hTeW1ib2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjcyN0FFQzkwNjcxMkVD
MjM4MDQxNDY0IC8qIFZlcnNpb25HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZlcnNpb25H
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjc0NjE4RjE4RkU1NDQ4MTE1
MDE3QzQ0IC8qIENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRjdCMjk3MUQ0RUIzODM2Qjk0QjdFQ0FGIC8qIEluZm9TaW5rLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluZm9TaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUY5OUU3MzdEM0ZGRDMwQ0E1RTM1NDE1MCAvKiBjb21tb24uZ3lwaSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBjb21tb24uZ3lw
aTsgcGF0aCA9IC4uL2J1aWxkL2NvbW1vbi5neXBpOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGRjNBQTY5NERGOUE0NDU1QTgxMzIzNEQgLyogc2Nhbm5lci5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGgg
PSBzY2FubmVyLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0vKiBFbmQgUEJYRmlsZVJl
ZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KLQkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZyYW1ld29ya3MgKi8gPSB7
Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJQTVDOTk0RTc0REIxRTYwMzM4RTdCQzExIC8q
IEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJQ0E3MUNCQTYz
M0VGQzYzMTY2QkVDOUYzIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxl
cyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
LQkJfTsKLQkJRkUzNjc5QTA5NTVCMjVFQjdCRjExNkU2IC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQkJMEU4RDY1RjU4NEZE
Qjg0REFBQkQzOTY5IC8qIHByZXByb2Nlc3NvciAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwot
CQkJY2hpbGRyZW4gPSAoCi0JCQkJMEM5QjQ2MTZBNjVBNUFCRUY5MUZENkRDIC8qIGF0b20uYyAq
LywKLQkJCQk5Q0VEM0FGRjFFNjFCNDVFRTEwMDU2NTYgLyogYXRvbS5oICovLAotCQkJCTU4MEIy
QTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8sCi0JCQkJQjc1NzA3QjM5M0I3RUFC
N0REOTk5OUNCIC8qIGNwcC5jICovLAotCQkJCTUyOEZGMjAxODM5QzZGMjMzRTI2RkZEQSAvKiBj
cHAuaCAqLywKLQkJCQk4MDU4QTBBMkEwQTAyMzg2ODY3NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8s
Ci0JCQkJQTIwMTA4NDgxNTlDMzIwOTAwRTU3QkJFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKLQkJ
CQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCi0JCQkJODMxMzk5REVF
NURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAotCQkJCUEyMDEwODFFMTU5QzMxQTAwMEU1
N0JCRSAvKiBuZXcgKi8sCi0JCQkJQ0ZEMTJDNkU0NkVCRTA4MzlCQkU1MkI1IC8qIHBhcnNlci5o
ICovLAotCQkJCTZCQkM4MjI0QjlEOEUyMzREMTE3RkEwQyAvKiBwcmVwcm9jZXNzLmggKi8sCi0J
CQkJRkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLywKLQkJCQkwNTZGRUFE
QzdEOTVDNkQ0QzlDRjExMTMgLyogc2Nhbm5lci5oICovLAotCQkJCTg5QTZGN0IxQUQzOTE4RTY0
REY3NkVCMSAvKiBzbGdsb2JhbHMuaCAqLywKLQkJCQlGMDEzQTcyNDBCREFFOEE2MTQxM0Q4QzAg
Lyogc3ltYm9scy5jICovLAotCQkJCTdEOUNGMzc2REM1Nzk5QjRDNkIzMzMxRSAvKiBzeW1ib2xz
LmggKi8sCi0JCQkJMkQwMDc0NURBOTkxNEZERTI3NEQwM0Q1IC8qIHRva2Vucy5jICovLAotCQkJ
CUQxM0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMuaCAqLywKLQkJCSk7Ci0JCQlwYXRo
ID0gcHJlcHJvY2Vzc29yOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMTk2
REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMjdFNEM3RUQwQjgyRTE4RENCRURGMUM5IC8qIEJhc2VU
eXBlcy5oICovLAotCQkJCUEyMDEwODQ5MTU5QzMyNEYwMEU1N0JCRSAvKiBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5jcHAgKi8sCi0JCQkJQTIwMTA4NEExNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCi0JCQkJQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8q
IENvZGVHZW5HTFNMLmNwcCAqLywKLQkJCQlDNDk1NDlEQ0NBRjQ1MEVCNzYxNTIwRTEgLyogQ29k
ZUdlbkhMU0wuY3BwICovLAotCQkJCUY3NDYxOEYxOEZFNTQ0ODExNTAxN0M0NCAvKiBDb21tb24u
aCAqLywKLQkJCQkwQTExOEU1MDAzRTVDMEUyNTNDNTM4MzkgLyogQ29tcGlsZXIuY3BwICovLAot
CQkJCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVuaW9uLmggKi8sCi0JCQkJ
NEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLywKLQkJCQk5NTI3NkFBNkIz
NkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLywKLQkJCQlBMjAxMDg0QjE1OUMzMjRGMDBFNTdC
QkUgLyogZGVwZ3JhcGggKi8sCi0JCQkJQTIwMTA4NkQxNTlDMzI2MjAwRTU3QkJFIC8qIERldGVj
dERpc2NvbnRpbnVpdHkuY3BwICovLAotCQkJCUEyMDEwODZFMTU5QzMyNjIwMEU1N0JCRSAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggKi8sCi0JCQkJQTIwMTA4NTMxNTlDMzI0RjAwRTU3QkJFIC8q
IERldGVjdFJlY3Vyc2lvbi5jcHAgKi8sCi0JCQkJQTIwMTA4NTQxNTlDMzI0RjAwRTU3QkJFIC8q
IERldGVjdFJlY3Vyc2lvbi5oICovLAotCQkJCUEyMDEwODU1MTU5QzMyNEYwMEU1N0JCRSAvKiBE
aWFnbm9zdGljcy5jcHAgKi8sCi0JCQkJQTIwMTA4NTYxNTlDMzI0RjAwRTU3QkJFIC8qIERpYWdu
b3N0aWNzLmggKi8sCi0JCQkJQTIwMTA4NTcxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhh
bmRsZXIuY3BwICovLAotCQkJCUEyMDEwODU4MTU5QzMyNEYwMEU1N0JCRSAvKiBEaXJlY3RpdmVI
YW5kbGVyLmggKi8sCi0JCQkJQTIwMTA4NTkxNTlDMzI0RjAwRTU3QkJFIC8qIEV4dGVuc2lvbkJl
aGF2aW9yLmggKi8sCi0JCQkJNURDOUI2NDdFMTBGNjVGNjYxNDJFQ0MxIC8qIEZvckxvb3BVbnJv
bGwuY3BwICovLAotCQkJCTE4MkJBRDUwRDRFNThCODg0RjVFQjlGMyAvKiBGb3JMb29wVW5yb2xs
LmggKi8sCi0JCQkJNDk3QzVDMjRFRUY0NjZGQjRCNTBBMjU5IC8qIGdsc2xhbmcuaCAqLywKLQkJ
CQk3M0E1N0M2RDQxMzc3M0FFQkEzQzQ3QTYgLyogZ2xzbGFuZ19sZXguY3BwICovLAotCQkJCTNG
NjhBNkFBODExNDk1NzE4QTY5MzhDMCAvKiBnbHNsYW5nX3RhYi5jcHAgKi8sCi0JCQkJNEZDRjMy
Q0IyRDhBNDJDOTMwQTY2QjAwIC8qIGdsc2xhbmdfdGFiLmggKi8sCi0JCQkJNkU2OTI3QkU1RDND
MkM4MkY4NjExMURGIC8qIEluZm9TaW5rLmNwcCAqLywKLQkJCQlGN0IyOTcxRDRFQjM4MzZCOTRC
N0VDQUYgLyogSW5mb1NpbmsuaCAqLywKLQkJCQlBNTRGMkVEMEQ4MkQ3QkJDQTRFOUVFRUEgLyog
SW5pdGlhbGl6ZS5jcHAgKi8sCi0JCQkJODUxM0ZBQzY5OURCMTU1OEQxRDQ5QTQ4IC8qIEluaXRp
YWxpemUuaCAqLywKLQkJCQk2MEMzOTk4QzlDRTY2REUwQzVCMEZEOTkgLyogSW5pdGlhbGl6ZURs
bC5jcHAgKi8sCi0JCQkJQTBDRTQzNjMxODQ5Mjc2QTMxMTg3QzdCIC8qIEluaXRpYWxpemVEbGwu
aCAqLywKLQkJCQkyRTdDOUI2RTZEQjc1MUUxMkEyRjZDQjYgLyogSW5pdGlhbGl6ZUdsb2JhbHMu
aCAqLywKLQkJCQlBMjAxMDg1QTE1OUMzMjRGMDBFNTdCQkUgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5jcHAgKi8sCi0JCQkJODU4NDVGRkY1QThFNjMzNjQzMDgyMzZEIC8qIEluaXRpYWxpemVQ
YXJzZUNvbnRleHQuaCAqLywKLQkJCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYgLyogSW50ZXJt
ZWRpYXRlLmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJREVBRjZGMzEyNkMyRUM0Mzk3Nzg1QzNGIC8qIGludGVybU91dC5jcHAg
Ki8sCi0JCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAq
LywKLQkJCQkxNTNCRjA2QkYxMkM2RjUwNDk2QzYxNTYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQk1N0NGMUY4M0U4NDI5MDFDNDJENDQ4MjUgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
Y3BwICovLAotCQkJCTgxQ0M0MjQ1QThFNUFCNTU4NEQzMzZGMyAvKiBNYXBMb25nVmFyaWFibGVO
YW1lcy5oICovLAotCQkJCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8sCi0J
CQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICovLAotCQkJCUJFMjU4
NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCi0JCQkJREIyOTE3
QzVCNjI0NzEyMzY0REU0QTc1IC8qIE91dHB1dEVTU0wuY3BwICovLAotCQkJCTZCQjY2QUI1ODcz
ODY4RTIzNjc1QjZEQiAvKiBPdXRwdXRFU1NMLmggKi8sCi0JCQkJNDhCNzQwMkNDMDdBMDU5RkVG
NUVDMzUxIC8qIE91dHB1dEdMU0wuY3BwICovLAotCQkJCTkzRDYxQ0IwQkNFNTRFMDY5RDcxRjky
MCAvKiBPdXRwdXRHTFNMLmggKi8sCi0JCQkJQkNERjAxRjAwMkFERTlEQjhBM0VGNEZFIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCAqLywKLQkJCQlCNTVCMzU5Q0Y3RTQ4NkRCQzQ5QkJGMEEgLyogT3V0
cHV0R0xTTEJhc2UuaCAqLywKLQkJCQk5QTVCNUJCMjUyNjgwMjQ3OUUxOUY5OTMgLyogT3V0cHV0
SExTTC5jcHAgKi8sCi0JCQkJNUEyMTU5OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wu
aCAqLywKLQkJCQlEMkM5QzhFQjRBN0VGRjVCNjdGRjlEQkYgLyogcGFyc2VDb25zdC5jcHAgKi8s
Ci0JCQkJOTc2QzgzMUE3NUVCRTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLywKLQkJ
CQlDRUUwQzkwREY2RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLywKLQkJCQlCNjRF
QUJFNzM4RkM2NjZBNUU0RTJGNDIgLyogUG9vbEFsbG9jLmNwcCAqLywKLQkJCQkxMkVBRjAyODMx
MUVFQTQ3NTNFODI4MTggLyogUG9vbEFsbG9jLmggKi8sCi0JCQkJQTIwMTA4NUIxNTlDMzI0RjAw
RTU3QkJFIC8qIFByYWdtYS5oICovLAotCQkJCTBFOEQ2NUY1ODRGREI4NERBQUJEMzk2OSAvKiBw
cmVwcm9jZXNzb3IgKi8sCi0JCQkJNDg1N0UxODc5OUQzMzJDMzBFRjQ2MEM3IC8qIFF1YWxpZmll
ckFsaXZlLmNwcCAqLywKLQkJCQk5RDQ3QjFBQzgyRTRFRTg1OUFDNTQyNDMgLyogUXVhbGlmaWVy
QWxpdmUuaCAqLywKLQkJCQlCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3ZlVHJlZS5j
cHAgKi8sCi0JCQkJRDQwRjc4Q0I5QkEwQzg5OTIxRkEzMTlEIC8qIFJlbW92ZVRyZWUuaCAqLywK
LQkJCQlBMjAxMDg1QzE1OUMzMjRGMDBFNTdCQkUgLyogUmVuYW1lRnVuY3Rpb24uaCAqLywKLQkJ
CQkyMjhBNkRFRERGMDhEQjM3MDM5NEE3QUQgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKLQkJCQlG
M0UwOURDOEUxQkY1RDI5NThBQUNFREUgLyogU2VhcmNoU3ltYm9sLmggKi8sCi0JCQkJNTZDN0U5
OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUFFNjVFMTM5QUUx
MERFOUVGQUQ4RDVCMSAvKiBTaEhhbmRsZS5oICovLAotCQkJCUI3RTVCMEYwNDYzNUU2MDkwRjBE
RThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCi0JCQkJN0M2QkIxMkFCMDk5NTU2Q0YzNzlENzhG
IC8qIFN5bWJvbFRhYmxlLmggKi8sCi0JCQkJQTIwMTA4NUQxNTlDMzI0RjAwRTU3QkJFIC8qIHRp
bWluZyAqLywKLQkJCQkwQTNBMjYwRjUzNzlBN0UyNjU1RDQwRjMgLyogVHJhbnNsYXRvckVTU0wu
Y3BwICovLAotCQkJCUQ1M0RERDBDREYxNUVFMUREMDFGMUEyMCAvKiBUcmFuc2xhdG9yRVNTTC5o
ICovLAotCQkJCTZGQjcwREM3NEEyMUZCQ0Q2NjVBQkRGOSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAg
Ki8sCi0JCQkJREREM0I3RTNCN0IzNUEwQjg0NjlBQjg3IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8s
Ci0JCQkJQzNEQUZGNkJGMTJCQjdGNDc4NEQ2QzdFIC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywK
LQkJCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBEMkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKLQkJ
CQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAqLywKLQkJCQlBMjAxMDg2RjE1
OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCAqLywKLQkJCQlBMjAxMDg3
MDE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8sCi0JCQkJQUU3Njc0
QzUyQkREREIyOEFGNUZGRDlGIC8qIHVuaXN0ZC5oICovLAotCQkJCTNFRTcyMTVBN0FCNEVGNzFD
OTdEMjU0NSAvKiB1dGlsLmNwcCAqLywKLQkJCQlBNTFDNzI4QjYxNUI0MUUxRDU5RTk5MDIgLyog
dXRpbC5oICovLAotCQkJCUIxNDhEOTY3QjhEMjg4QTgyNjdCRkYzQSAvKiBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcCAqLywKLQkJCQk5MDI1NDg0MkQ3Mjk3NTY3MkMyRTlBOTMgLyogVmFsaWRhdGVM
aW1pdGF0aW9ucy5oICovLAotCQkJCTI3QzExRUUxMEZFRDI5Nzk5MzFGRkMxMSAvKiBWYXJpYWJs
ZUluZm8uY3BwICovLAotCQkJCTVEOTkzNTRDNEQ4MTg3RDM4NEM4MTIwNyAvKiBWYXJpYWJsZUlu
Zm8uaCAqLywKLQkJCQlGNzI3QUVDOTA2NzEyRUMyMzgwNDE0NjQgLyogVmVyc2lvbkdMU0wuY3Bw
ICovLAotCQkJCTEyMEFEMEEzQjc2NDJGQjVBOUFFM0E1NiAvKiBWZXJzaW9uR0xTTC5oICovLAot
CQkJKTsKLQkJCW5hbWUgPSBTb3VyY2U7Ci0JCQlwYXRoID0gY29tcGlsZXI7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwotCQk1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQgPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTE5NkRCNkFCMDA2QkI4MzUw
M0M3RDc4NiAvKiBTb3VyY2UgKi8sCi0JCQkJRTBFREM0MTMwRTdEMzc0MzE4Q0U3MkJFIC8qIFBy
b2R1Y3RzICovLAotCQkJCUIyQzE4NEMzNTQzMTk4QkE1MTU5MkVBNCAvKiBCdWlsZCAqLywKLQkJ
CSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlBMjAxMDgxRTE1OUMzMUEw
MDBFNTdCQkUgLyogbmV3ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9
ICgKLQkJCQlBMjAxMDgxRjE1OUMzMUEwMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwICovLAot
CQkJCUEyMDEwODIwMTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5oICovLAotCQkJCUEy
MDEwODIxMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCAqLywKLQkJCQlB
MjAxMDgyMjE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5oICovLAotCQkJCUEy
MDEwODIzMTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuY3BwICovLAotCQkJCUEy
MDEwODI0MTU5QzMxQTAwMEU1N0JCRSAvKiBEaXJlY3RpdmVQYXJzZXIuaCAqLywKLQkJCQlBMjAx
MDgyNTE1OUMzMUEwMDBFNTdCQkUgLyogRXhwcmVzc2lvblBhcnNlci5jcHAgKi8sCi0JCQkJQTIw
MTA4MjYxNTlDMzFBMDAwRTU3QkJFIC8qIEV4cHJlc3Npb25QYXJzZXIuaCAqLywKLQkJCQlBMjAx
MDgyOTE1OUMzMUEwMDBFNTdCQkUgLyogSW5wdXQuY3BwICovLAotCQkJCUEyMDEwODJBMTU5QzMx
QTAwMEU1N0JCRSAvKiBJbnB1dC5oICovLAotCQkJCUEyMDEwODJCMTU5QzMxQTAwMEU1N0JCRSAv
KiBMZXhlci5jcHAgKi8sCi0JCQkJQTIwMTA4MkMxNTlDMzFBMDAwRTU3QkJFIC8qIExleGVyLmgg
Ki8sCi0JCQkJQTIwMTA4MkQxNTlDMzFBMDAwRTU3QkJFIC8qIE1hY3JvLmNwcCAqLywKLQkJCQlB
MjAxMDgyRTE1OUMzMUEwMDBFNTdCQkUgLyogTWFjcm8uaCAqLywKLQkJCQlBMjAxMDgyRjE1OUMz
MUEwMDBFNTdCQkUgLyogTWFjcm9FeHBhbmRlci5jcHAgKi8sCi0JCQkJQTIwMTA4MzAxNTlDMzFB
MDAwRTU3QkJFIC8qIE1hY3JvRXhwYW5kZXIuaCAqLywKLQkJCQlBMjAxMDgzMTE1OUMzMUEwMDBF
NTdCQkUgLyogcHBfdXRpbHMuaCAqLywKLQkJCQlBMjAxMDgzMjE1OUMzMUEwMDBFNTdCQkUgLyog
UHJlcHJvY2Vzc29yLmNwcCAqLywKLQkJCQlBMjAxMDgzMzE1OUMzMUEwMDBFNTdCQkUgLyogUHJl
cHJvY2Vzc29yLmggKi8sCi0JCQkJQTIwMTA4MzUxNTlDMzFBMDAwRTU3QkJFIC8qIFNvdXJjZUxv
Y2F0aW9uLmggKi8sCi0JCQkJQTIwMTA4MzYxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCAq
LywKLQkJCQlBMjAxMDgzNzE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW4uaCAqLywKLQkJCQlBMjAx
MDgzODE1OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmNwcCAqLywKLQkJCQlBMjAxMDgzOTE1
OUMzMUEwMDBFNTdCQkUgLyogVG9rZW5pemVyLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IG5ldzsK
LQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUEyMDEwODRCMTU5QzMyNEYwMEU1
N0JCRSAvKiBkZXBncmFwaCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4g
PSAoCi0JCQkJQTIwMTA4NEMxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5jcHAg
Ki8sCi0JCQkJQTIwMTA4NEQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaC5oICov
LAotCQkJCUEyMDEwODRFMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVy
LmNwcCAqLywKLQkJCQlBMjAxMDg0RjE1OUMzMjRGMDBFNTdCQkUgLyogRGVwZW5kZW5jeUdyYXBo
QnVpbGRlci5oICovLAotCQkJCUEyMDEwODUwMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBlbmRlbmN5
R3JhcGhPdXRwdXQuY3BwICovLAotCQkJCUEyMDEwODUxMTU5QzMyNEYwMEU1N0JCRSAvKiBEZXBl
bmRlbmN5R3JhcGhPdXRwdXQuaCAqLywKLQkJCQlBMjAxMDg1MjE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwICovLAotCQkJKTsKLQkJCXBhdGggPSBkZXBncmFw
aDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUEyMDEwODVEMTU5QzMyNEYw
MEU1N0JCRSAvKiB0aW1pbmcgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCUEyMDEwODVFMTU5QzMyNEYwMEU1N0JCRSAvKiBSZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcCAqLywKLQkJCQlBMjAxMDg1RjE1OUMzMjRGMDBFNTdCQkUgLyogUmVzdHJp
Y3RGcmFnbWVudFNoYWRlclRpbWluZy5oICovLAotCQkJCUEyMDEwODYwMTU5QzMyNEYwMEU1N0JC
RSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgKi8sCi0JCQkJQTIwMTA4NjExNTlD
MzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggKi8sCi0JCQkpOwot
CQkJcGF0aCA9IHRpbWluZzsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUIy
QzE4NEMzNTQzMTk4QkE1MTU5MkVBNCAvKiBCdWlsZCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxk
X2FuZ2xlLmd5cCAqLywKLQkJCQlGOTlFNzM3RDNGRkQzMENBNUUzNTQxNTAgLyogY29tbW9uLmd5
cGkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IEJ1aWxkOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJRTBFREM0MTMwRTdEMzc0MzE4Q0U3MkJFIC8qIFByb2R1Y3RzICovID0gewot
CQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkzREREQzc3MjE2MjAyQTRE
RTE4MDhCREIgLyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLywKLQkJCQlBMTY0NEIwMEU5MzA0
QzQwN0ZEQzVGNDcgLyogbGlidHJhbnNsYXRvcl9nbHNsLmEgKi8sCi0JCQkJQTQ0N0Y3NUYzM0RB
NEM0QzEyM0FDOTUyIC8qIGxpYnRyYW5zbGF0b3JfaGxzbC5hICovLAotCQkJCUEyMDEwN0ZGMTU5
QzMxM0MwMEU1N0JCRSAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbiBjb3B5LmEgKi8sCi0JCQkpOwot
CQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8q
IEVuZCBQQlhHcm91cCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0
aW9uICovCi0JCTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gOEI4ODE1Q0EyRUZFNjBGRDBDMDM2MUJGIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2dsc2wiICovOwotCQkJYnVpbGRQaGFzZXMg
PSAoCi0JCQkJQkFCQ0U3MjExMDZCNUMxNTI3RUZFRjBEIC8qIFNvdXJjZXMgKi8sCi0JCQkJQ0E3
MUNCQTYzM0VGQzYzMTY2QkVDOUYzIC8qIEZyYW1ld29ya3MgKi8sCi0JCQkpOwotCQkJYnVpbGRS
dWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IHRy
YW5zbGF0b3JfZ2xzbDsKLQkJCXByb2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9nbHNsOwotCQkJcHJv
ZHVjdFJlZmVyZW5jZSA9IEExNjQ0QjAwRTkzMDRDNDA3RkRDNUY0NyAvKiBsaWJ0cmFuc2xhdG9y
X2dsc2wuYSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGli
cmFyeS5zdGF0aWMiOwotCQl9OwotCQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIgLyogdHJhbnNs
YXRvcl9jb21tb24gKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gMzRCQjM4RTNBNzQ0MThCMkEwNjNCNDlFIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2NvbW1vbiIgKi87
Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlFQUEyMkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291
cmNlcyAqLywKLQkJCQlBNUM5OTRFNzREQjFFNjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLywK
LQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJ
CSk7Ci0JCQluYW1lID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQlwcm9kdWN0TmFtZSA9IHRyYW5z
bGF0b3JfY29tbW9uOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgw
OEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29t
LmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0JCUEyMDEwN0RDMTU5
QzMxM0MwMEU1N0JCRSAvKiBwcmVwcm9jZXNzb3IgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVU
YXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gQTIwMTA3RkMxNTlDMzEzQzAwRTU3
QkJFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJwcmVw
cm9jZXNzb3IiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJQTIwMTA3REQxNTlDMzEzQzAw
RTU3QkJFIC8qIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA3RkIxNTlDMzEzQzAwRTU3QkJFIC8qIEZy
YW1ld29ya3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRl
bmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IHByZXByb2Nlc3NvcjsKLQkJCXByb2R1Y3ROYW1l
ID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gQTIwMTA3RkYxNTlD
MzEzQzAwRTU3QkJFIC8qIGxpYnRyYW5zbGF0b3JfY29tbW9uIGNvcHkuYSAqLzsKLQkJCXByb2R1
Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwotCQl9Owot
CQlBODM4RTk1NzRCM0ZGMTQ3OTFEQkRBQjEgLyogdHJhbnNsYXRvcl9obHNsICovID0gewotCQkJ
aXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEM3MUU3
OUM3ODI5RkQ3OTZDRjYyMUI0NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5h
dGl2ZVRhcmdldCAidHJhbnNsYXRvcl9obHNsIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CTA1RjNCQ0E5NTE4NzcwQkUzRjFFMEEzOCAvKiBTb3VyY2VzICovLAotCQkJCUZFMzY3OUEwOTU1
QjI1RUI3QkYxMTZFNiAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAo
Ci0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSB0cmFuc2xhdG9y
X2hsc2w7Ci0JCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfaGxzbDsKLQkJCXByb2R1Y3RSZWZl
cmVuY2UgPSBBNDQ3Rjc1RjMzREE0QzRDMTIzQUM5NTIgLyogbGlidHJhbnNsYXRvcl9obHNsLmEg
Ki87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3Rh
dGljIjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdp
biBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFBy
b2plY3Qgb2JqZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMg
PSB7Ci0JCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gWUVTOwotCQkJfTsK
LQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRTU5RjhGRTRBODA5OUU4RERDQTRDRTcgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJidWlsZF9hbmdsZSIgKi87
Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOwotCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7Ci0JCQlrbm93
blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFpbkdyb3VwID0gNUJCRUZGOUI5MTcz
ODI5N0I5NUM1NjhEOwotCQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0g
IiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTE1NjNEOTkxNkJGREFEODUzMDMyQ0UxQSAvKiBBbGwg
Ki8sCi0JCQkJNkY0RkQzNUNCM0RGQzg5RDcwRUNENDMyIC8qIHRyYW5zbGF0b3JfY29tbW9uICov
LAotCQkJCTU4OTJDN0EzNjk1MzMwNDM3QUZFNTcxNCAvKiB0cmFuc2xhdG9yX2dsc2wgKi8sCi0J
CQkJQTgzOEU5NTc0QjNGRjE0NzkxREJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLywKLQkJCQlB
MjAxMDdEQzE1OUMzMTNDMDBFNTdCQkUgLyogcHJlcHJvY2Vzc29yICovLAotCQkJKTsKLQkJfTsK
LS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCQkwNUYzQkNBOTUxODc3MEJFM0YxRTBBMzggLyogU291cmNlcyAq
LyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTRCNEJERTdBRDYyNjZCMzlFRDQzQzJE
NCAvKiBDb2RlR2VuSExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1RjdCNTJBNTREQ0U4MTU1
RUQ5NEVDRjggLyogT3V0cHV0SExTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFOTlENkQ4MERC
RjA1RUNFNzEwOEIyNkQgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
Mjk2NDY2NTY2RDhDMEYwMjNBNTUzNzYwIC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBMjAxMDg3MTE1OUMzMjYyMDBFNTdCQkUgLyogRGV0ZWN0RGlzY29udGludWl0eS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg3MjE1OUMzMjYyMDBFNTdCQkUgLyogVW5mb2xk
U2hvcnRDaXJjdWl0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlBMjAxMDdERDE1OUMzMTNDMDBFNTdC
QkUgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCUEyMDEwODNC
MTU5QzMxQTAwMEU1N0JCRSAvKiBEaWFnbm9zdGljcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlB
MjAxMDgzQzE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBMjAxMDgzRDE1OUMzMUEwMDBFNTdCQkUgLyogRGlyZWN0aXZlUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODNFMTU5QzMxQTAwMEU1N0JCRSAvKiBFeHByZXNz
aW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODQwMTU5QzMxQTAwMEU1N0JC
RSAvKiBJbnB1dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg0MTE1OUMzMUEwMDBFNTdC
QkUgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NDIxNTlDMzFBMDAwRTU3
QkJFIC8qIE1hY3JvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODQzMTU5QzMxQTAwMEU1
N0JCRSAvKiBNYWNyb0V4cGFuZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODQ0MTU5
QzMxQTAwMEU1N0JCRSAvKiBQcmVwcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIw
MTA4NDUxNTlDMzFBMDAwRTU3QkJFIC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEy
MDEwODQ2MTU5QzMxQTAwMEU1N0JCRSAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0J
CUJBQkNFNzIxMTA2QjVDMTUyN0VGRUYwRCAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJ
ZmlsZXMgPSAoCi0JCQkJRDU2RjdEMDBFOUIxNjJFNDE2RDM3REYwIC8qIENvZGVHZW5HTFNMLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTBFQzA5QjNCMjU0ODI5RjhGMUQ5NTJEMyAvKiBGb3JMb29w
VW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM0QUFCMkJCNDU5NEMwREEzMThEQ0IxQyAv
KiBPdXRwdXRFU1NMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlCMTExQjgzRkI2MzZGRDVDREVD
MzJBMCAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNzVFQjkyOTJB
MEREQTQ1NTkyQThBQ0YgLyogT3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0E0
MUFGMDM2RTVFRjg3QjM2NkI1NjMgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJM0YxODM4OUJDQjg5MzcwQTkzMDY2N0Y0IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTBBQzE4OTdFNDYxQTBENDc1OEUzRENFMyAvKiBWZXJzaW9uR0xTTC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKLQkJfTsKLQkJRUFBMjJDQTYzRkQ1NzJGQ0NCOTEzRDIyIC8qIFNvdXJjZXMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkwOEE3OTMzQkQyRjc4QTg2QjkwMjAw
RjYgLyogQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODg4RjEzODI0OThFMkQ3NEFG
MjgwMUM4IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMwMjFFMEJGMUJDODQ0MkZG
MUYyRjJCNCAvKiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTdDMEQzODA0
QjgzMDhBNDkzRDlCNEIgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkVC
QkY0RjA4MTlFQTNEMDM5NzdBOEZDIC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTMwNjVEMjlFOTdGQUM2RTEyNzM4OEQxNSAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBBMjE2OTQ5MTAzRTFFMjI4RjlDMTJGMCAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTUwREYwMDAwNUNDNDIxMkY2RkIxMjkxRCAvKiBJbnRlcm1lZGlhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDBGQzE4OUI4QTI0NkVERjE0QzJGREUzIC8qIGludGVy
bU91dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGNUFFMkEyOTJERkFGOEMxNTg0MTJBQTIgLyog
SW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODk2QjcyMEJEMjFGNjc0OUE3
RDgzRjMwIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlF
OERGRTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTZGOUY4NzUwMTdBNjhBQkU1RDM5RkYxOSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlFMUM3QzVERkYwQjJERkVDMDkzODdGNEUgLyogUG9vbEFsbG9jLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTA1NTYzQURGRUExNTExNkQ3MjMzMzMyRiAvKiBRdWFsaWZpZXJBbGl2
ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBQzIzRjU4RkREM0M1NUY1Q0ExOEVFRDcgLyogUmVt
b3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCOEJEMjY4NUExNkIxODhDQ0RGQjA1MkIg
LyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGNkFCRDU4RjhDQUI3NjQxRDhC
RkU5MzUgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTVDQkQ4NzU3M0I4
MDNBMTczQUM5MTI5IC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEU5NDU2RjQ2NEUx
NjM5MkQxQ0NEMDMwIC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMUVEMUQyQzdDNzRDNkI2MjVBRkIxQ0NGIC8qIFZhcmlhYmxlSW5mby5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkzMkIxREJDRDZCODNGMjE0NkQ3ODdBNjIgLyogYXRvbS5jIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQ0I3RjBFRjBENkE4OUZBOEM0REY1NTEzIC8qIGNwcC5jIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMzVCRTFCQkVFNjEzNUExQ0IwNjA4RUE4IC8qIGNwcHN0cnVjdC5jIGluIFNvdXJjZXMg
Ki8sCi0JCQkJM0E5NkU5Q0FDOEEyNUFGMTU2NEI2NTJDIC8qIG1lbW9yeS5jIGluIFNvdXJjZXMg
Ki8sCi0JCQkJRjA5OEY0NjNFREFCQ0YwNzY5MDA3Njc4IC8qIHNjYW5uZXIuYyBpbiBTb3VyY2Vz
ICovLAotCQkJCUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMgaW4gU291cmNl
cyAqLywKLQkJCQlFOEM3MjdBQThFOURDNUU3QjU4ODU3REYgLyogdG9rZW5zLmMgaW4gU291cmNl
cyAqLywKLQkJCQlCNDg1ODQxN0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NjIxNTlDMzI0RjAwRTU3QkJFIC8qIEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUEyMDEwODYzMTU5QzMyNEYw
MEU1N0JCRSAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4
NjQxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaEJ1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTIwMTA4NjUxNTlDMzI0RjAwRTU3QkJFIC8qIERlcGVuZGVuY3lHcmFwaE91
dHB1dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMjAxMDg2NjE1OUMzMjRGMDBFNTdCQkUgLyog
RGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4Njcx
NTlDMzI0RjAwRTU3QkJFIC8qIERldGVjdFJlY3Vyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlBMjAxMDg2ODE1OUMzMjRGMDBFNTdCQkUgLyogRGlhZ25vc3RpY3MuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTIwMTA4NjkxNTlDMzI0RjAwRTU3QkJFIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NkExNTlDMzI0RjAwRTU3QkJFIC8qIEluaXRpYWxp
emVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTIwMTA4NkIxNTlDMzI0RjAw
RTU3QkJFIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQTIwMTA4NkMxNTlDMzI0RjAwRTU3QkJFIC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQotLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCi0JCUExNUU3
OEJFQ0RGRjIwQkMzRkZGMDQwQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewotCQkJaXNh
ID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKLQkJCXRhcmdldCA9IDZGNEZEMzVDQjNERkM4OUQ3MEVD
RDQzMiAvKiB0cmFuc2xhdG9yX2NvbW1vbiAqLzsKLQkJCXRhcmdldFByb3h5ID0gNTVENUY5QkY3
MjdFNEEzQjY2Mzc4MDJCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKLQkJfTsKLQkJQkEy
NDZDQTE5NDM1QTlGQThBQzY5MTQ2IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gNTg5MkM3QTM2OTUzMzA0MzdB
RkU1NzE0IC8qIHRyYW5zbGF0b3JfZ2xzbCAqLzsKLQkJCXRhcmdldFByb3h5ID0gNjBEMzU0NkFD
MjdCMDk0RDZDQTA0Q0Q2IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKLQkJfTsKLQkJRTRB
M0QzM0NBNDlEMDEzNTUwQjhCQTVGIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gQTgzOEU5NTc0QjNGRjE0Nzkx
REJEQUIxIC8qIHRyYW5zbGF0b3JfaGxzbCAqLzsKLQkJCXRhcmdldFByb3h5ID0gMUY3MjQyNDk2
MTAzRURGMjlDQzI1RDg3IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKLQkJfTsKLS8qIEVu
ZCBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWlsZENvbmZp
Z3VyYXRpb24gc2VjdGlvbiAqLwotCQkzMjJBOEM2MjQyM0I1OTVFMTFCQUQ0MkQgLyogRGVidWcg
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3Mg
PSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gQWxsOwotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJ
fTsKLQkJNERBNDJBNzhEM0I4NTVDOUNEOEY2NThEIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgK
LQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJIlwiQU5HTEVfQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwXCIiLAotCQkJ
CSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJLiwKLQkJCQkJLi4vaW5jbHVk
ZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQkJfTsK
LQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQk0Rjg1MUY1QkE1RkE0M0U5RTBCOUNCODYgLyog
UmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSBBbGw7Ci0JCQl9OwotCQkJbmFtZSA9IFJl
bGVhc2U7Ci0JCX07Ci0JCTg4QURDOTI4NTUxOUE2Njg4MDhCNTFFRSAvKiBEZWJ1ZyAqLyA9IHsK
LQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJ
CQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJ
T05TID0gKAotCQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAotCQkJCQkiXCJBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBc
IiIsCi0JCQkJKTsKLQkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAotCQkJCQkuLAotCQkJCQku
Li9pbmNsdWRlLAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9OQU1FID0gdHJhbnNsYXRvcl9nbHNsOwot
CQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJOURDNjZFMUZGOTM0OUNEQ0M4RDUyQzQ2
IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWls
ZFNldHRpbmdzID0gewotCQkJCUlOVEVSTUVESUFURV9ESVIgPSAiJChQUk9KRUNUX0RFUklWRURf
RklMRV9ESVIpLyQoQ09ORklHVVJBVElPTikiOwotCQkJCVNIQVJFRF9JTlRFUk1FRElBVEVfRElS
ID0gIiQoU1lNUk9PVCkvRGVyaXZlZFNvdXJjZXMvJChDT05GSUdVUkFUSU9OKSI7Ci0JCQl9Owot
CQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQlBMjAxMDdGRDE1OUMzMTNDMDBFNTdCQkUgLyogRGVi
dWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQkJRVhFQ1VUQUJMRV9QUkVGSVggPSBsaWI7Ci0JCQkJR0NDX1BSRVBST0NFU1NP
Ul9ERUZJTklUSU9OUyA9ICgKLQkJCQkJIlwiQU5HTEVfRElTQUJMRV9UUkFDRVwiIiwKLQkJCQkJ
IlwiQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw9RDNEQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUwwXCIiLAotCQkJCSk7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKLQkJCQkJ
LiwKLQkJCQkJLi4vaW5jbHVkZSwKLQkJCQkpOwotCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xh
dG9yX2NvbW1vbiBjb3B5IjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCUEyMDEw
N0ZFMTU5QzMxM0MwMEU1N0JCRSAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklY
ID0gbGliOwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFO
R0xFX0RJU0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMPUQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhF
QURFUl9TRUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsK
LQkJCQlQUk9EVUNUX05BTUUgPSAidHJhbnNsYXRvcl9jb21tb24gY29weSI7Ci0JCQl9OwotCQkJ
bmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCUFGN0MyQ0QxMEM2RkVBMDc2QjE0MUU2RSAvKiBSZWxl
YXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRp
bmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJCUdDQ19QUkVQUk9DRVNT
T1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0VcIiIsCi0JCQkJ
CSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVfT1BUSU1JWkFU
SU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCi0JCQkJ
CS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQUk9EVUNUX05BTUUgPSB0cmFuc2xh
dG9yX2dsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCUIwOTZGQUYwMzJE
QjE5QUI2MzdEMzhGMCAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGli
OwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJ
U0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJcIkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVM
PUQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQ
Uk9EVUNUX05BTUUgPSB0cmFuc2xhdG9yX2hsc2w7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7
Ci0JCX07Ci0JCUM0NTQ2QjE0QjBFQjVFQjhDNUQzOURDMiAvKiBSZWxlYXNlICovID0gewotCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUlO
VEVSTUVESUFURV9ESVIgPSAiJChQUk9KRUNUX0RFUklWRURfRklMRV9ESVIpLyQoQ09ORklHVVJB
VElPTikiOwotCQkJCVNIQVJFRF9JTlRFUk1FRElBVEVfRElSID0gIiQoU1lNUk9PVCkvRGVyaXZl
ZFNvdXJjZXMvJChDT05GSUdVUkFUSU9OKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0J
CX07Ci0JCUYwMjlFMEQzNjlGQUZFQTQ2QkRBRkNFRSAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlFWEVDVVRB
QkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAot
CQkJCQkiXCJBTkdMRV9ESVNBQkxFX1RSQUNFXCIiLAotCQkJCQkiXCJBTkdMRV9DT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTD1EM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDBcIiIsCi0JCQkJ
KTsKLQkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRl
LAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9OQU1FID0gdHJhbnNsYXRvcl9obHNsOwotCQkJfTsKLQkJ
CW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJRkYwMUNERjQ1OTRFMEZGOUU1ODFCMzE5IC8qIERlYnVn
ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdz
ID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJCUdDQ19QUkVQUk9DRVNTT1Jf
REVGSU5JVElPTlMgPSAoCi0JCQkJCSJcIkFOR0xFX0RJU0FCTEVfVFJBQ0VcIiIsCi0JCQkJCSJc
IkFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMPUQzRENPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMMFwiIiwKLQkJCQkpOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4s
Ci0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJKTsKLQkJCQlQUk9EVUNUX05BTUUgPSB0cmFuc2xhdG9y
X2NvbW1vbjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0vKiBFbmQgWENCdWlsZENv
bmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNl
Y3Rpb24gKi8KLQkJMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovID0gewotCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJOURDNjZF
MUZGOTM0OUNEQ0M4RDUyQzQ2IC8qIERlYnVnICovLAotCQkJCUM0NTQ2QjE0QjBFQjVFQjhDNUQz
OURDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9OwotCQkz
NEJCMzhFM0E3NDQxOEIyQTA2M0I0OUUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhOYXRpdmVUYXJnZXQgInRyYW5zbGF0b3JfY29tbW9uIiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCUZGMDFDREY0
NTk0RTBGRjlFNTgxQjMxOSAvKiBEZWJ1ZyAqLywKLQkJCQk0REE0MkE3OEQzQjg1NUM5Q0Q4RjY1
OEQgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJs
ZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJNzdD
RUZCN0I0MEYwNUIwQTgwNEU2QjJCIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJY
QWdncmVnYXRlVGFyZ2V0ICJBbGwiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlz
dDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMzIyQThDNjI0MjNCNTk1RTExQkFE
NDJEIC8qIERlYnVnICovLAotCQkJCTRGODUxRjVCQTVGQTQzRTlFMEI5Q0I4NiAvKiBSZWxlYXNl
ICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlYnVnOwotCQl9OwotCQk4Qjg4MTVDQTJFRkU2MEZE
MEMwMzYxQkYgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQg
InRyYW5zbGF0b3JfZ2xzbCIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0Owot
CQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQk4OEFEQzkyODU1MTlBNjY4ODA4QjUxRUUg
LyogRGVidWcgKi8sCi0JCQkJQUY3QzJDRDEwQzZGRUEwNzZCMTQxRTZFIC8qIFJlbGVhc2UgKi8s
Ci0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwotCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gRGVidWc7Ci0JCX07Ci0JCUEyMDEwN0ZDMTU5QzMxM0MwMEU1
N0JCRSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAicHJl
cHJvY2Vzc29yIiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWls
ZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCUEyMDEwN0ZEMTU5QzMxM0MwMEU1N0JCRSAvKiBEZWJ1
ZyAqLywKLQkJCQlBMjAxMDdGRTE1OUMzMTNDMDBFNTdCQkUgLyogUmVsZWFzZSAqLywKLQkJCSk7
Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbk5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJQzcxRTc5Qzc4MjlGRDc5NkNGNjIxQjQ0IC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0cmFuc2xhdG9y
X2hsc2wiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29u
ZmlndXJhdGlvbnMgPSAoCi0JCQkJRjAyOUUwRDM2OUZBRkVBNDZCREFGQ0VFIC8qIERlYnVnICov
LAotCQkJCUIwOTZGQUYwMzJEQjE5QUI2MzdEMzhGMCAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0
aW9uTmFtZSA9IERlYnVnOwotCQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlv
biAqLwotCX07Ci0Jcm9vdE9iamVjdCA9IERBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9q
ZWN0IG9iamVjdCAqLzsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vYW5nbGV1dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi9hbmdsZXV0aWxzLmgKaW5kZXggN2Q5MzQ5YS4uZmY5NzMwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKQEAgLTE5LDQgKzE5LDggQEAK
ICNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCiAjZW5kaWYKIAorI2RlZmluZSBWRU5ET1JfSURf
QU1EIDB4MTAwMgorI2RlZmluZSBWRU5ET1JfSURfSU5URUwgMHg4MDg2CisjZGVmaW5lIFZFTkRP
Ul9JRF9OVklESUEgMHgxMERFCisKICNlbmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAppbmRleCBiMjIzOGY5
Li5jNDViMmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2RlYnVnLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVn
LmNwcApAQCAtODQsNiArODQsMTIgQEAgYm9vbCBwZXJmQWN0aXZlKCkKIFNjb3BlZFBlcmZFdmVu
dEhlbHBlcjo6U2NvcGVkUGVyZkV2ZW50SGVscGVyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQog
ewogI2lmICFkZWZpbmVkKEFOR0xFX0RJU0FCTEVfUEVSRikKKyNpZiBkZWZpbmVkKEFOR0xFX0RJ
U0FCTEVfVFJBQ0UpCisgICAgaWYgKCFwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCiAgICAgdmFfbGlzdCB2YXJhcmc7CiAgICAgdmFfc3RhcnQodmFy
YXJnLCBmb3JtYXQpOwogICAgIG91dHB1dCh0cnVlLCByZWludGVycHJldF9jYXN0PFBlcmZPdXRw
dXRGdW5jdGlvbj4oRDNEUEVSRl9CZWdpbkV2ZW50KSwgZm9ybWF0LCB2YXJhcmcpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCmluZGV4IDk4MjhlY2YuLjVmOGY2
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKQEAgLTQy
LDI4ICs0MiwzMCBAQCBuYW1lc3BhY2UgZ2wKICNpZiBkZWZpbmVkKEFOR0xFX0RJU0FCTEVfVFJB
Q0UpICYmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9QRVJGKQogI2RlZmluZSBUUkFDRShtZXNzYWdl
LCAuLi4pICh2b2lkKDApKQogI2Vsc2UKLSNkZWZpbmUgVFJBQ0UobWVzc2FnZSwgLi4uKSBnbDo6
dHJhY2UodHJ1ZSwgInRyYWNlOiAlcyglZCk6ICJtZXNzYWdlIlxuIiwgX19GVU5DVElPTl9fLCBf
X0xJTkVfXywgX19WQV9BUkdTX18pCisjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRy
YWNlKHRydWUsICJ0cmFjZTogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBf
X0xJTkVfXywgIyNfX1ZBX0FSR1NfXykKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIG91dHB1dCBh
IGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIHRv
IGRlbm90ZSBhbiBpdGVtIGluIG5lZWQgb2YgZml4aW5nLgogI2lmIGRlZmluZWQoQU5HTEVfRElT
QUJMRV9UUkFDRSkgJiYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCiAjZGVmaW5lIEZJWE1F
KG1lc3NhZ2UsIC4uLikgKHZvaWQoMCkpCiAjZWxzZQotI2RlZmluZSBGSVhNRShtZXNzYWdlLCAu
Li4pIGdsOjp0cmFjZShmYWxzZSwgImZpeG1lOiAlcyglZCk6ICJtZXNzYWdlIlxuIiwgX19GVU5D
VElPTl9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18pCisjZGVmaW5lIEZJWE1FKG1lc3NhZ2UsIC4u
LikgZ2w6OnRyYWNlKGZhbHNlLCAiZml4bWU6ICVzKCVkKTogIiBtZXNzYWdlICJcbiIsIF9fRlVO
Q1RJT05fXywgX19MSU5FX18sICMjX19WQV9BUkdTX18pCiAjZW5kaWYKIAogLy8gQSBtYWNybyB0
byBvdXRwdXQgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dp
bmcgbG9nLCBpbiBjYXNlIG9mIGVycm9yLgogI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFD
RSkgJiYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCiAjZGVmaW5lIEVSUihtZXNzYWdlLCAu
Li4pICh2b2lkKDApKQogI2Vsc2UKLSNkZWZpbmUgRVJSKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNl
KGZhbHNlLCAiZXJyOiAlcyglZCk6ICJtZXNzYWdlIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVf
XywgX19WQV9BUkdTX18pCisjZGVmaW5lIEVSUihtZXNzYWdlLCAuLi4pIGdsOjp0cmFjZShmYWxz
ZSwgImVycjogJXMoJWQpOiAiIG1lc3NhZ2UgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywg
IyNfX1ZBX0FSR1NfXykKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIGxvZyBhIHBlcmZvcm1hbmNl
IGV2ZW50IGFyb3VuZCBhIHNjb3BlLgogI2lmIGRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkg
JiYgZGVmaW5lZChBTkdMRV9ESVNBQkxFX1BFUkYpCiAjZGVmaW5lIEVWRU5UKG1lc3NhZ2UsIC4u
LikgKHZvaWQoMCkpCi0jZWxzZQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgRVZF
TlQobWVzc2FnZSwgLi4uKSBnbDo6U2NvcGVkUGVyZkV2ZW50SGVscGVyIHNjb3BlZFBlcmZFdmVu
dEhlbHBlciAjIyBfX0xJTkVfXyhfX0ZVTkNUSU9OX18gbWVzc2FnZSAiXG4iLCBfX1ZBX0FSR1Nf
Xyk7CisjZWxzZQorI2RlZmluZSBFVkVOVChtZXNzYWdlLCAuLi4pIGdsOjpTY29wZWRQZXJmRXZl
bnRIZWxwZXIgc2NvcGVkUGVyZkV2ZW50SGVscGVyKG1lc3NhZ2UgIlxuIiwgIyNfX1ZBX0FSR1Nf
Xyk7CiAjZW5kaWYKIAogLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1
dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxvZwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi92ZXJzaW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3ZlcnNpb24uaAppbmRleCBiZGQxNjI0Li5kYmU4Y2UyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3ZlcnNpb24uaApAQCAtMSwxMCArMSwxMiBA
QAogI2RlZmluZSBNQUpPUl9WRVJTSU9OIDEKICNkZWZpbmUgTUlOT1JfVkVSU0lPTiAwCiAjZGVm
aW5lIEJVSUxEX1ZFUlNJT04gMAotI2RlZmluZSBCVUlMRF9SRVZJU0lPTiAxMTY2CisjZGVmaW5l
IEJVSUxEX1JFVklTSU9OIDE2NDEKIAogI2RlZmluZSBTVFJJTkdJRlkoeCkgI3gKICNkZWZpbmUg
TUFDUk9fU1RSSU5HSUZZKHgpIFNUUklOR0lGWSh4KQogCiAjZGVmaW5lIFJFVklTSU9OX1NUUklO
RyBNQUNST19TVFJJTkdJRlkoQlVJTERfUkVWSVNJT04pCiAjZGVmaW5lIFZFUlNJT05fU1RSSU5H
IE1BQ1JPX1NUUklOR0lGWShNQUpPUl9WRVJTSU9OKSAiLiIgTUFDUk9fU1RSSU5HSUZZKE1JTk9S
X1ZFUlNJT04pICIuIiBNQUNST19TVFJJTkdJRlkoQlVJTERfVkVSU0lPTikgIi4iIE1BQ1JPX1NU
UklOR0lGWShCVUlMRF9SRVZJU0lPTikKKworI2RlZmluZSBWRVJTSU9OX0RXT1JEICgoTUFKT1Jf
VkVSU0lPTiA8PCAyNCkgfCAoTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBCVUlMRF9SRVZJU0lPTikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3Bw
CmluZGV4IGRiNWY3MjkuLmRjZThjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUg
ImNvbXBpbGVyL1JlbmFtZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUu
aCIKICNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCIKICNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaCIKICNpbmNsdWRlICJjb21waWxlci9kZXBncmFwaC9EZXBlbmRlbmN5
R3JhcGhPdXRwdXQuaCIKICNpbmNsdWRlICJjb21waWxlci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oIgpAQCAtMTE0LDYgKzExNSw5IEBAIFRDb21waWxlcjo6flRDb21waWxl
cigpCiAKIGJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVz
b3VyY2VzKQogeworICAgIG1heFVuaWZvcm1WZWN0b3JzID0gKHNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUikgPworICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMg
OgorICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKICAgICBUU2Nv
cGVkUG9vbEFsbG9jYXRvciBzY29wZWRBbGxvYygmYWxsb2NhdG9yLCBmYWxzZSk7CiAKICAgICAv
LyBHZW5lcmF0ZSBidWlsdC1pbiBzeW1ib2wgdGFibGUuCkBAIC0xMjEsNiArMTI1LDggQEAgYm9v
bCBUQ29tcGlsZXI6OkluaXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBJbml0RXh0ZW5zaW9uQmVoYXZpb3IocmVzb3VyY2Vz
LCBleHRlbnNpb25CZWhhdmlvcik7CiAKKyAgICBoYXNoRnVuY3Rpb24gPSByZXNvdXJjZXMuSGFz
aEZ1bmN0aW9uOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE5NCwxMSArMjAwLDE5IEBA
IGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3Nb
XSwKICAgICAgICAgLy8gQ2FsbCBtYXBMb25nVmFyaWFibGVOYW1lcygpIGJlZm9yZSBjb2xsZWN0
QXR0cmlic1VuaWZvcm1zKCkgc28gaW4KICAgICAgICAgLy8gY29sbGVjdEF0dHJpYnNVbmlmb3Jt
cygpIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWFwcGVkIHN5bWJvbCBuYW1lcyBhbmQKICAgICAgICAg
Ly8gd2UgY291bGQgY29tcG9zaXRlIG1hcHBlZCBhbmQgb3JpZ2luYWwgdmFyaWFibGUgbmFtZXMu
Ci0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX01BUF9MT05HX1ZB
UklBQkxFX05BTUVTKSkKKyAgICAgICAgLy8gQWxzbywgaWYgd2UgaGFzaCBhbGwgdGhlIG5hbWVz
LCB0aGVuIG5vIG5lZWQgdG8gZG8gdGhpcyBmb3IgbG9uZyBuYW1lcy4KKyAgICAgICAgaWYgKHN1
Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpICYm
IGhhc2hGdW5jdGlvbiA9PSBOVUxMKQogICAgICAgICAgICAgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMo
cm9vdCk7CiAKLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQVRU
UklCVVRFU19VTklGT1JNUykpCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9u
cyAmIFNIX0FUVFJJQlVURVNfVU5JRk9STVMpKSB7CiAgICAgICAgICAgICBjb2xsZWN0QXR0cmli
c1VuaWZvcm1zKHJvb3QpOworICAgICAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU5G
T1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUykgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBl
bmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVy
cm9yLCAidG9vIG1hbnkgdW5pZm9ybXMiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAogICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9JTlRFUk1FRElBVEVfVFJFRSkpCiAgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0
VHJlZShyb290KTsKQEAgLTIyOCw2ICsyNDIsNyBAQCBib29sIFRDb21waWxlcjo6SW5pdEJ1aWx0
SW5TeW1ib2xUYWJsZShjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKIAogdm9p
ZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cygpCiB7CisgICAgYXJyYXlCb3VuZHNDbGFtcGVyLkNs
ZWFudXAoKTsKICAgICBpbmZvU2luay5pbmZvLmVyYXNlKCk7CiAgICAgaW5mb1Npbmsub2JqLmVy
YXNlKCk7CiAgICAgaW5mb1NpbmsuZGVidWcuZXJhc2UoKTsKQEAgLTIzNiw3ICsyNTEsOCBAQCB2
b2lkIFRDb21waWxlcjo6Y2xlYXJSZXN1bHRzKCkKICAgICB1bmlmb3Jtcy5jbGVhcigpOwogCiAg
ICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuQ2xlYW51cCgpOwotICAgIGFycmF5Qm91bmRzQ2xh
bXBlci5DbGVhbnVwKCk7CisKKyAgICBuYW1lTWFwLmNsZWFyKCk7CiB9CiAKIGJvb2wgVENvbXBp
bGVyOjpkZXRlY3RSZWN1cnNpb24oVEludGVybU5vZGUqIHJvb3QpCkBAIC0zMTIsMTAgKzMyOCwx
NiBAQCBib29sIFRDb21waWxlcjo6ZW5mb3JjZVZlcnRleFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9u
cyhUSW50ZXJtTm9kZSogcm9vdCkKIAogdm9pZCBUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5p
Zm9ybXMoVEludGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgQ29sbGVjdEF0dHJpYnNVbmlmb3JtcyBj
b2xsZWN0KGF0dHJpYnMsIHVuaWZvcm1zKTsKKyAgICBDb2xsZWN0QXR0cmlic1VuaWZvcm1zIGNv
bGxlY3QoYXR0cmlicywgdW5pZm9ybXMsIGhhc2hGdW5jdGlvbik7CiAgICAgcm9vdC0+dHJhdmVy
c2UoJmNvbGxlY3QpOwogfQogCitib29sIFRDb21waWxlcjo6ZW5mb3JjZVBhY2tpbmdSZXN0cmlj
dGlvbnMoKQoreworICAgIFZhcmlhYmxlUGFja2VyIHBhY2tlcjsKKyAgICByZXR1cm4gcGFja2Vy
LkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhVbmlmb3JtVmVjdG9ycywgdW5p
Zm9ybXMpOworfQorCiB2b2lkIFRDb21waWxlcjo6bWFwTG9uZ1ZhcmlhYmxlTmFtZXMoVEludGVy
bU5vZGUqIHJvb3QpCiB7CiAgICAgQVNTRVJUKGxvbmdOYW1lTWFwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaWFnbm9zdGljcy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlhZ25vc3RpY3MuY3BwCmluZGV4IDVm
OTNhMDMuLjA2ZjM3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9EaWFnbm9zdGljcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0RpYWdub3N0aWNzLmNwcApAQCAtNiwxMCArNiwxNCBAQAogCiAjaW5jbHVkZSAi
Y29tcGlsZXIvRGlhZ25vc3RpY3MuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1NvdXJjZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1NvdXJjZUxvY2F0aW9uLmgiCiAKLVREaWFnbm9zdGljczo6VERpYWdub3N0aWNzKFRJbmZv
U2luayYgaW5mb1NpbmspIDogbUluZm9TaW5rKGluZm9TaW5rKQorVERpYWdub3N0aWNzOjpURGlh
Z25vc3RpY3MoVEluZm9TaW5rJiBpbmZvU2luaykgOgorICAgIG1JbmZvU2luayhpbmZvU2luayks
CisgICAgbU51bUVycm9ycygwKSwKKyAgICBtTnVtV2FybmluZ3MoMCkKIHsKIH0KIApAQCAtMjMs
OSArMjcsMjMgQEAgdm9pZCBURGlhZ25vc3RpY3M6OndyaXRlSW5mbyhTZXZlcml0eSBzZXZlcml0
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRva2Vu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmEp
CiB7Ci0gICAgVEluZm9TaW5rQmFzZSYgc2luayA9IG1JbmZvU2luay5pbmZvOwotICAgIFRQcmVm
aXhUeXBlIHByZWZpeCA9IHNldmVyaXR5ID09IEVSUk9SID8gRVByZWZpeEVycm9yIDogRVByZWZp
eFdhcm5pbmc7CisgICAgVFByZWZpeFR5cGUgcHJlZml4ID0gRVByZWZpeE5vbmU7CisgICAgc3dp
dGNoIChzZXZlcml0eSkKKyAgICB7CisgICAgICBjYXNlIEVSUk9SOgorICAgICAgICArK21OdW1F
cnJvcnM7CisgICAgICAgIHByZWZpeCA9IEVQcmVmaXhFcnJvcjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIFdBUk5JTkc6CisgICAgICAgICsrbU51bVdhcm5pbmdzOworICAgICAgICBwcmVm
aXggPSBFUHJlZml4V2FybmluZzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CiAKKyAgICBUSW5mb1Np
bmtCYXNlJiBzaW5rID0gbUluZm9TaW5rLmluZm87CiAgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUo
bGluZW51bSkgOiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCiAgICAgc2luay5wcmVm
aXgocHJlZml4KTsKICAgICBzaW5rLmxvY2F0aW9uKEVuY29kZVNvdXJjZUxvYyhsb2MuZmlsZSwg
bG9jLmxpbmUpKTsKQEAgLTQxLDQgKzU5LDUgQEAgdm9pZCBURGlhZ25vc3RpY3M6OnByaW50KElE
IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYg
bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KQog
eworICAgIHdyaXRlSW5mbyhzZXZlcml0eShpZCksIGxvYywgbWVzc2FnZShpZCksIHRleHQsICIi
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9E
aWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdu
b3N0aWNzLmgKaW5kZXggNDNhMTMwNi4uY2I3MWJiMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpYWdub3N0aWNzLmgKQEAgLTcsNyArNyw3IEBACiAj
aWZuZGVmIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCiAjZGVmaW5lIENPTVBJTEVSX0RJQUdOT1NU
SUNTX0hfCiAKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpYWdub3N0aWNz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFzZS5oIgog
CiBjbGFzcyBUSW5mb1Npbms7CiAKQEAgLTE5LDYgKzE5LDkgQEAgY2xhc3MgVERpYWdub3N0aWNz
IDogcHVibGljIHBwOjpEaWFnbm9zdGljcwogCiAgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsg
cmV0dXJuIG1JbmZvU2luazsgfQogCisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJu
IG1OdW1FcnJvcnM7IH0KKyAgICBpbnQgbnVtV2FybmluZ3MoKSBjb25zdCB7IHJldHVybiBtTnVt
V2FybmluZ3M7IH0KKwogICAgIHZvaWQgd3JpdGVJbmZvKFNldmVyaXR5IHNldmVyaXR5LAogICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHBwOjpTb3VyY2VMb2NhdGlvbiYgbG9jLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFzb24sCkBAIC0zNCw2ICszNyw4IEBAIGNs
YXNzIFREaWFnbm9zdGljcyA6IHB1YmxpYyBwcDo6RGlhZ25vc3RpY3MKIAogICBwcml2YXRlOgog
ICAgIFRJbmZvU2luayYgbUluZm9TaW5rOworICAgIGludCBtTnVtRXJyb3JzOworICAgIGludCBt
TnVtV2FybmluZ3M7CiB9OwogCiAjZW5kaWYgIC8vIENPTVBJTEVSX0RJQUdOT1NUSUNTX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZl
SGFuZGxlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0RpcmVjdGl2
ZUhhbmRsZXIuaAppbmRleCAyMWQzZGZjLi45NWNhNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvRGlyZWN0aXZlSGFuZGxlci5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9EaXJlY3RpdmVIYW5kbGVyLmgKQEAgLTks
NyArOSw3IEBACiAKICNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL1ByYWdtYS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlSGFuZGxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oIgogCiBjbGFzcyBURGlhZ25vc3RpY3M7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9IYXNoTmFtZXMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9IYXNoTmFtZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjE0MWUyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0hhc2hOYW1lcy5oCkBAIC0wLDAg
KzEsMTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfSEFTSF9OQU1F
U19IXworI2RlZmluZSBDT01QSUxFUl9IQVNIX05BTUVTX0hfCisKKyNpbmNsdWRlIDxtYXA+CisK
KyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKKworI2RlZmluZSBIQVNIRURfTkFNRV9QUkVGSVggIndlYmdsXyIKKwordHlw
ZWRlZiBzdGQ6Om1hcDxUUGVyc2lzdFN0cmluZywgVFBlcnNpc3RTdHJpbmc+IE5hbWVNYXA7CisK
KyNlbmRpZiAgLy8gQ09NUElMRVJfSEFTSF9OQU1FU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAppbmRleCA5MmM0NTA1
Li45MDMyYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW50ZXJtZWRpYXRlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvSW50ZXJtZWRpYXRlLmNwcApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbWl0
cy5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAorI2luY2x1ZGUgImNvbXBpbGVyL0hhc2hOYW1l
cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvUXVhbGlmaWVyQWxpdmUuaCIKICNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVl
LmgiCkBAIC0xNDQ1LDMgKzE0NDYsMTQgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpw
cm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlIHByb21vdGVUbywgVEludGVybUMKICAgICBy
ZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0
LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQu
aXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCisvLyBzdGF0
aWMKK1RTdHJpbmcgVEludGVybVRyYXZlcnNlcjo6aGFzaChjb25zdCBUU3RyaW5nJiBuYW1lLCBT
aEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKK3sKKyAgICBpZiAoaGFzaEZ1bmN0aW9uID09
IE5VTEwgfHwgbmFtZS5lbXB0eSgpKQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICBraHJvbm9z
X3VpbnQ2NF90IG51bWJlciA9ICgqaGFzaEZ1bmN0aW9uKShuYW1lLmNfc3RyKCksIG5hbWUubGVu
Z3RoKCkpOworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIHN0cmVhbSA8PCBIQVNIRURf
TkFNRV9QUkVGSVggPDwgc3RkOjpoZXggPDwgbnVtYmVyOworICAgIFRTdHJpbmcgaGFzaGVkTmFt
ZSA9IHN0cmVhbS5zdHIoKTsKKyAgICByZXR1cm4gaGFzaGVkTmFtZTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAppbmRleCA2
NGVlOTJkLi4wMzMxNzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0RVNTTC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCkBAIC02LDggKzYsMTEgQEAKIAogI2luY2x1ZGUgImNv
bXBpbGVyL091dHB1dEVTU0wuaCIKIAotVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmspCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaykKK1RPdXRwdXRF
U1NMOjpUT3V0cHV0RVNTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBo
YXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlKQogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaAppbmRleCA0ZmE3M2M4
Li5kZDhjNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0RVNTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRFU1NMLmgKQEAgLTEyLDcgKzEyLDEwIEBACiBjbGFzcyBUT3V0cHV0RVNTTCA6IHB1
YmxpYyBUT3V0cHV0R0xTTEJhc2UKIHsKIHB1YmxpYzoKLSAgICBUT3V0cHV0RVNTTChUSW5mb1Np
bmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0RVNTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5r
LAorICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAg
ICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJp
YWJsZVByZWNpc2lvbihUUHJlY2lzaW9uIHByZWNpc2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKaW5kZXggZGQzMWI0Yi4u
NTg3MzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEdMU0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcApAQCAtNiw4ICs2LDExIEBACiAKICNpbmNsdWRlICJjb21waWxlci9P
dXRwdXRHTFNMLmgiCiAKLVRPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmspCitUT3V0cHV0R0xTTDo6VE91
dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUpCisgICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgaGFzaEZ1bmN0
aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKaW5kZXggMGZlMjM1Ni4uOTAzMDIx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEdMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0
R0xTTC5oCkBAIC0xMiw3ICsxMiwxMCBAQAogY2xhc3MgVE91dHB1dEdMU0wgOiBwdWJsaWMgVE91
dHB1dEdMU0xCYXNlCiB7CiBwdWJsaWM6Ci0gICAgVE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYg
b2JqU2luayk7CisgICAgVE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywKKyAgICAg
ICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAgICAgICAgICAg
ICBOYW1lTWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVj
aXNpb24oVFByZWNpc2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcAppbmRleCAyMTAwZWFhLi4zYzNjOWRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xT
TEJhc2UuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRHTFNMQmFzZS5jcHAKQEAgLTksMzUgKzksNiBAQAogCiBuYW1lc3BhY2UKIHsKLVRTdHJpbmcg
Z2V0VHlwZU5hbWUoY29uc3QgVFR5cGUmIHR5cGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSBvdXQ7
Ci0gICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAibWF0IjsK
LSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodHlwZS5pc1ZlY3RvcigpKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldEJhc2lj
VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgInZl
YyI7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6IG91dCA8PCAiaXZlYyI7IGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOiBvdXQgPDwgImJ2ZWMiOyBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAgICAgICAgICAg
IG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91
dCA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBUU3RyaW5nKG91
dC5jX3N0cigpKTsKLX0KLQogVFN0cmluZyBhcnJheUJyYWNrZXRzKGNvbnN0IFRUeXBlJiB0eXBl
KQogewogICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7CkBAIC02NiwxMCArMzcsMTYgQEAgYm9v
bCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSogbm9kZSkgewogfQogfSAgLy8gbmFtZXNw
YWNlCiAKLVRPdXRwdXRHTFNMQmFzZTo6VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9i
alNpbmspCitUT3V0cHV0R0xTTEJhc2U6OlRPdXRwdXRHTFNMQmFzZShUSW5mb1NpbmtCYXNlJiBv
YmpTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFw
JiBuYW1lTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSks
CiAgICAgICBtT2JqU2luayhvYmpTaW5rKSwKLSAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFs
c2UpCisgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNlKSwKKyAgICAgIG1IYXNoRnVuY3Rp
b24oaGFzaEZ1bmN0aW9uKSwKKyAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAorICAgICAgbVN5bWJv
bFRhYmxlKHN5bWJvbFRhYmxlKQogewogfQogCkBAIC0xMDEsNyArNzgsNyBAQCB2b2lkIFRPdXRw
dXRHTFNMQmFzZTo6d3JpdGVWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUmIHR5cGUpCiAgICAgaWYg
KCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgJiYKICAgICAgICAgKG1EZWNsYXJl
ZFN0cnVjdHMuZmluZCh0eXBlLmdldFR5cGVOYW1lKCkpID09IG1EZWNsYXJlZFN0cnVjdHMuZW5k
KCkpKQogICAgIHsKLSAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgIiA8PCB0eXBlLmdldFR5cGVOYW1l
KCkgPDwgIntcbiI7CisgICAgICAgIG91dCA8PCAic3RydWN0ICIgPDwgaGFzaE5hbWUodHlwZS5n
ZXRUeXBlTmFtZSgpKSA8PCAie1xuIjsKICAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBzdHJ1Y3R1
cmUgPSB0eXBlLmdldFN0cnVjdCgpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IE5VTEwp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6ZSgpOyArK2kp
CkBAIC0xMTAsNyArODcsNyBAQCB2b2lkIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVWYXJpYWJsZVR5
cGUoY29uc3QgVFR5cGUmIHR5cGUpCiAgICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IE5V
TEwpOwogICAgICAgICAgICAgaWYgKHdyaXRlVmFyaWFibGVQcmVjaXNpb24oZmllbGRUeXBlLT5n
ZXRQcmVjaXNpb24oKSkpCiAgICAgICAgICAgICAgICAgb3V0IDw8ICIgIjsKLSAgICAgICAgICAg
IG91dCA8PCBnZXRUeXBlTmFtZSgqZmllbGRUeXBlKSA8PCAiICIgPDwgZmllbGRUeXBlLT5nZXRG
aWVsZE5hbWUoKTsKKyAgICAgICAgICAgIG91dCA8PCBnZXRUeXBlTmFtZSgqZmllbGRUeXBlKSA8
PCAiICIgPDwgaGFzaE5hbWUoZmllbGRUeXBlLT5nZXRGaWVsZE5hbWUoKSk7CiAgICAgICAgICAg
ICBpZiAoZmllbGRUeXBlLT5pc0FycmF5KCkpCiAgICAgICAgICAgICAgICAgb3V0IDw8IGFycmF5
QnJhY2tldHMoKmZpZWxkVHlwZSk7CiAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7CkBAIC0xNDAs
NyArMTE3LDcgQEAgdm9pZCBUT3V0cHV0R0xTTEJhc2U6OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJz
KGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncykKIAogICAgICAgICBjb25zdCBUU3RyaW5nJiBu
YW1lID0gYXJnLT5nZXRTeW1ib2woKTsKICAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpCi0gICAg
ICAgICAgICBvdXQgPDwgIiAiIDw8IG5hbWU7CisgICAgICAgICAgICBvdXQgPDwgIiAiIDw8IGhh
c2hOYW1lKG5hbWUpOwogICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCiAgICAgICAgICAgICBv
dXQgPDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKIApAQCAtMTU3LDcgKzEzNCw3IEBAIGNvbnN0IENv
bnN0YW50VW5pb24qIFRPdXRwdXRHTFNMQmFzZTo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRU
eXBlJiB0eXBlLAogCiAgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQog
ICAgIHsKLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAiKCI7CisgICAgICAg
IG91dCA8PCBoYXNoTmFtZSh0eXBlLmdldFR5cGVOYW1lKCkpIDw8ICIoIjsKICAgICAgICAgY29u
c3QgVFR5cGVMaXN0KiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOwogICAgICAgICBBU1NF
UlQoc3RydWN0dXJlICE9IE5VTEwpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
cnVjdHVyZS0+c2l6ZSgpOyArK2kpCkBAIC0xOTYsNyArMTczLDcgQEAgdm9pZCBUT3V0cHV0R0xT
TEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCiAgICAgaWYgKG1Mb29wVW5y
b2xsLk5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQogICAgICAgICBvdXQgPDwg
bUxvb3BVbnJvbGwuR2V0TG9vcEluZGV4VmFsdWUobm9kZSk7CiAgICAgZWxzZQotICAgICAgICBv
dXQgPDwgbm9kZS0+Z2V0U3ltYm9sKCk7CisgICAgICAgIG91dCA8PCBoYXNoVmFyaWFibGVOYW1l
KG5vZGUtPmdldFN5bWJvbCgpKTsKIAogICAgIGlmIChtRGVjbGFyaW5nVmFyaWFibGVzICYmIG5v
ZGUtPmdldFR5cGUoKS5pc0FycmF5KCkpCiAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKG5v
ZGUtPmdldFR5cGUoKSk7CkBAIC0yNzIsNyArMjQ5LDcgQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6
OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIG91dCA8PCAiLiI7CiAgICAgICAgICAgICAgICAgLy8gVE9E
TyhhbG9rcCk6IEFTU0VSVAotICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRUeXBlKCku
Z2V0RmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8IGhhc2hOYW1lKG5vZGUtPmdl
dFR5cGUoKS5nZXRGaWVsZE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00OTYsNyArNDcz
LDcgQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQWdncmVnYXRlKiBub2RlKQogICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRp
b24uCiAgICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwogICAgICAgICAgICAg
d3JpdGVWYXJpYWJsZVR5cGUobm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCAi
ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOworICAgICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoTmFt
ZShub2RlLT5nZXROYW1lKCkpOwogCiAgICAgICAgICAgICBvdXQgPDwgIigiOwogICAgICAgICAg
ICAgd3JpdGVGdW5jdGlvblBhcmFtZXRlcnMobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CkBAIC01MDks
NyArNDg2LDcgQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQogICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVm
aW5pdGlvbi4KICAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNpdCk7CiAgICAgICAg
ICAgICB3cml0ZVZhcmlhYmxlVHlwZShub2RlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgb3V0
IDw8ICIgIiA8PCBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOworICAg
ICAgICAgICAgb3V0IDw8ICIgIiA8PCBoYXNoRnVuY3Rpb25OYW1lKG5vZGUtPmdldE5hbWUoKSk7
CiAKICAgICAgICAgICAgIGluY3JlbWVudERlcHRoKCk7CiAgICAgICAgICAgICAvLyBGdW5jdGlv
biBkZWZpbml0aW9uIG5vZGUgY29udGFpbnMgb25lIG9yIHR3byBjaGlsZHJlbiBub2RlcwpAQCAt
NTM5LDggKzUxNiw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKICAgICAgICAgICAgIC8vIEZ1bmN0aW9u
IGNhbGwuCiAgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlvbk5hbWUgPSBURnVuY3Rpb246OnVubWFu
Z2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIG91dCA8PCBmdW5jdGlv
bk5hbWUgPDwgIigiOworICAgICAgICAgICAgICAgIG91dCA8PCBoYXNoRnVuY3Rpb25OYW1lKG5v
ZGUtPmdldE5hbWUoKSkgPDwgIigiOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgICAgIHsKQEAgLTYwMSw3ICs1NzcsNyBAQCBi
b29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqIG5vZGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUmIHR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKLSAgICAgICAgICAgICAgICBvdXQgPDwgdHlw
ZS5nZXRUeXBlTmFtZSgpIDw8ICIoIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgaGFzaE5hbWUo
dHlwZS5nZXRUeXBlTmFtZSgpKSA8PCAiKCI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBl
bHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAgICAgICAgICAgewpAQCAtNzQ3LDMgKzcyMyw1
OSBAQCB2b2lkIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRDb2RlQmxvY2soVEludGVybU5vZGUqIG5v
ZGUpIHsKICAgICAgICAgb3V0IDw8ICJ7XG59XG4iOyAgLy8gRW1wdHkgY29kZSBibG9jay4KICAg
ICB9CiB9CisKK1RTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpnZXRUeXBlTmFtZShjb25zdCBUVHlw
ZSYgdHlwZSkKK3sKKyAgICBUSW5mb1NpbmtCYXNlIG91dDsKKyAgICBpZiAodHlwZS5pc01hdHJp
eCgpKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICJtYXQiOworICAgICAgICBvdXQgPDwgdHlwZS5n
ZXROb21pbmFsU2l6ZSgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCAidmVjIjsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEVidEludDogb3V0IDw8ICJpdmVjIjsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVi
dEJvb2w6IG91dCA8PCAiYnZlYyI7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgb3V0IDw8IHR5cGUuZ2V0Tm9taW5h
bFNpemUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgb3V0IDw8IGhhc2hOYW1lKHR5cGUu
Z2V0VHlwZU5hbWUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dCA8PCB0eXBlLmdl
dEJhc2ljU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBUU3RyaW5nKG91dC5jX3N0cigpKTsK
K30KKworVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hOYW1lKGNvbnN0IFRTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKG1IYXNoRnVuY3Rpb24gPT0gTlVMTCB8fCBuYW1lLmVtcHR5KCkpCisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIE5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbU5h
bWVNYXAuZmluZChuYW1lLmNfc3RyKCkpOworICAgIGlmIChpdCAhPSBtTmFtZU1hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuY19zdHIoKTsKKyAgICBUU3RyaW5nIGhhc2hlZE5h
bWUgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKG5hbWUsIG1IYXNoRnVuY3Rpb24pOworICAgIG1O
YW1lTWFwW25hbWUuY19zdHIoKV0gPSBoYXNoZWROYW1lLmNfc3RyKCk7CisgICAgcmV0dXJuIGhh
c2hlZE5hbWU7Cit9CisKK1RTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoVmFyaWFibGVOYW1l
KGNvbnN0IFRTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJ
bihuYW1lKSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICByZXR1cm4gaGFzaE5h
bWUobmFtZSk7Cit9CisKK1RTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoRnVuY3Rpb25OYW1l
KGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSkKK3sKKyAgICBUU3RyaW5nIG5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShtYW5nbGVkX25hbWUpOworICAgIGlmIChtU3ltYm9sVGFibGUu
ZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lKSAhPSBOVUxMIHx8IG5hbWUgPT0gIm1haW4iKQorICAg
ICAgICByZXR1cm4gbmFtZTsKKyAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2Uu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5o
CmluZGV4IGVmZDBiNWYuLjAxZTlkNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCkBAIC0xNiw3ICsxNiwxMCBAQAog
Y2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKIHsKIHB1Ymxp
YzoKLSAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luayk7CisgICAgVE91
dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssCisgICAgICAgICAgICAgICAgICAg
IFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICBOYW1l
TWFwJiBuYW1lTWFwLAorICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKTsKIAogcHJvdGVjdGVkOgogICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVy
biBtT2JqU2luazsgfQpAQCAtMjUsNiArMjgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBi
b29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbiBwcmVjaXNpb24pID0gMDsKICAg
ICB2b2lkIHdyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJn
cyk7CiAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiogd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRU
eXBlJiB0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uKiBwQ29uc3RVbmlvbik7CisgICAgVFN0cmlu
ZyBnZXRUeXBlTmFtZShjb25zdCBUVHlwZSYgdHlwZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSk7CkBAIC0zNyw2ICs0MSwxNSBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2Rl
KTsKIAorCisgICAgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBuYW1lIGlmIGhhc2ggZnVuY3Rpb24g
cG9pbnRlciBpcyBOVUxMOworICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIGhhc2hlZCBuYW1l
LgorICAgIFRTdHJpbmcgaGFzaE5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CisgICAgLy8gU2Ft
ZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIHZhcmlhYmxlcy4K
KyAgICBUU3RyaW5nIGhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CisgICAg
Ly8gU2FtZSBhcyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIGZ1bmN0
aW9ucy4KKyAgICBUU3RyaW5nIGhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xl
ZF9uYW1lKTsKKwogcHJpdmF0ZToKICAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2luazsKICAgICBi
b29sIG1EZWNsYXJpbmdWYXJpYWJsZXM7CkBAIC00OCw2ICs2MSwxMiBAQCBwcml2YXRlOgogICAg
IERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRTdHJ1Y3RzOwogCiAgICAgRm9yTG9vcFVucm9sbCBt
TG9vcFVucm9sbDsKKworICAgIC8vIG5hbWUgaGFzaGluZy4KKyAgICBTaEhhc2hGdW5jdGlvbjY0
IG1IYXNoRnVuY3Rpb247CisgICAgTmFtZU1hcCYgbU5hbWVNYXA7CisKKyAgICBUU3ltYm9sVGFi
bGUmIG1TeW1ib2xUYWJsZTsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRITFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRITFNMLmNwcAppbmRleCBkN2U2OWQzLi5hNDMwNjk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCkBAIC04
Nyw2ICs4Nyw4IEBAIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4
dCkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRyCiAgICAgbUNvbnRhaW5zTG9vcERp
c2NvbnRpbnVpdHkgPSBmYWxzZTsKICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CiAg
ICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFsc2U7CisKKyAgICBtRXhjZXNzaXZlTG9v
cEluZGV4ID0gTlVMTDsKIH0KIAogT3V0cHV0SExTTDo6fk91dHB1dEhMU0woKQpAQCAtNDIwLDI2
ICs0MjIsMTIgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICAgICAgICAgIlxu
IjsKICAgICAgICAgb3V0IDw8ICB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8ICJcbiI7Ci0KLSAg
ICAgICAgLy8gVGhlIHRleHR1cmUgZmV0Y2ggZnVuY3Rpb25zICJmbGlwIiB0aGUgWSBjb29yZGlu
YXRlIGluIG9uZSB3YXkgb3IgYW5vdGhlci4gVGhpcyBpcyBiZWNhdXNlIHRleHR1cmVzIGFyZSBz
dG9yZWQKLSAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBPcGVuR0wgY29udmVudGlvbiwgaS5l
LiAoMCwgMCkgaXMgImJvdHRvbSBsZWZ0IiwgcmF0aGVyIHRoYW4gdGhlIEQzRCBjb252ZW50aW9u
IHdoZXJlICgwLCAwKQotICAgICAgICAvLyBpcyAidG9wIGxlZnQiLiBTaW5jZSB0aGUgSExTTCB0
ZXh0dXJlIGZldGNoIGZ1bmN0aW9ucyBleHBlY3QgdGV4dHVyZXMgdG8gYmUgc3RvcmVkIGFjY29y
ZGluZyB0byB0aGUgRDNECi0gICAgICAgIC8vIGNvbnZlbnRpb24sIHRoZSBZIGNvb3JkaW5hdGUg
cGFzc2VkIHRvIHRoZXNlIGZ1bmN0aW9ucyBpcyBhZGp1c3RlZCB0byBjb21wZW5zYXRlLgotICAg
ICAgICAvLwotICAgICAgICAvLyBUaGUgc2ltcGxlc3QgY2FzZSBpcyB0ZXh0dXJlMkQgd2hlcmUg
dGhlIG1hcHBpbmcgaXMgWSAtPiAxLVksIHdoaWNoIG1hcHMgWzAsIDFdIC0+IFsxLCAwXS4KLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHRleHR1cmUyRFByb2ogZnVuY3Rpb25zIGFyZSBtb3Jl
IGNvbXBsaWNhdGVkIGJlY2F1c2UgdGhlIHByb2plY3Rpb24gZGl2aWRlcyBieSBlaXRoZXIgWiBv
ciBXLiBGb3IgdGhlIHZlYzMKLSAgICAgICAgLy8gY2FzZSwgdGhlIG1hcHBpbmcgaXMgWSAtPiBa
LVkgb3IgWS9aIC0+IDEtWS9aLCB3aGljaCBhZ2FpbiBtYXBzIFswLCAxXSAtPiBbMSwgMF0uCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIEZvciBjdWJlIHRleHR1cmVzIHRoZSBtYXBwaW5nIGlzIFkg
LT4gLVksIHdoaWNoIG1hcHMgWy0xLCAxXSAtPiBbMSwgLTFdLiBUaGlzIGlzIG5vdCBzdWZmaWNp
ZW50IG9uIGl0cyBvd24gZm9yIHRoZQotICAgICAgICAvLyArWSBhbmQgLVkgZmFjZXMsIHdoaWNo
IGFyZSBub3cgb24gdGhlICJ3cm9uZyBzaWRlcyIgb2YgdGhlIGN1YmUuIFRoaXMgaXMgY29tcGVu
c2F0ZWQgZm9yIGJ5IGV4Y2hhbmdpbmcgdGhlCi0gICAgICAgIC8vICtZIGFuZCAtWSBmYWNlcyBl
dmVyeXdoZXJlIGVsc2UgdGhyb3VnaG91dCB0aGUgY29kZS4KICAgICAgICAgCiAgICAgICAgIGlm
IChtVXNlc1RleHR1cmUyRCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0
NCh0LngsIDEgLSB0LnksIDAsIDApKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKICAgICAgICAgICAgICAg
ICAgICAifVxuIgogICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTQ0OCw3
ICs0MzYsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQyIHQs
IGZsb2F0IGxvZClcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIDEgLSB0LnksIDAsIGxvZCkp
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LngsIHQueSwgMCwgbG9kKSk7XG4iCiAgICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAg
ICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBAIC00NTcsMTIgKzQ0NSwxMiBAQCB2b2lkIE91
dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgogICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qocywg
ZmxvYXQ0KHQueCAvIHQueiwgMSAtIHQueSAvIHQueiwgMCwgMCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQu
eiwgMCwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAg
ICAgIlxuIgogICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1w
bGVyMkQgcywgZmxvYXQ0IHQpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCAxIC0g
dC55IC8gdC53LCAwLCAwKSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCiAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAgICB9CkBA
IC00NzEsMTIgKzQ1OSwxMiBAQCB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56
LCAxIC0gdC55IC8gdC56LCAwLCBsb2QpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGxvZCkpO1xu
IgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAgICAgICAgICAgIlxuIgogICAg
ICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQsIGZsb2F0IGxvZClcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIDEg
LSB0LnkgLyB0LncsIDAsIGxvZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgbG9kKSk7XG4iCiAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKICAgICAgICAgICAgICAgICAgICAiXG4iOwogICAgICAg
ICB9CkBAIC00ODUsNyArNDczLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VC
RSBzLCBmbG9hdDMgdClcbiIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCAw
KSk7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9h
dDQodC54LCB0LnksIHQueiwgMCkpO1xuIgogICAgICAgICAgICAgICAgICAgICJ9XG4iCiAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKICAgICAgICAgfQpAQCAtNDk0LDcgKzQ4Miw3IEBAIHZvaWQg
T3V0cHV0SExTTDo6aGVhZGVyKCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClc
biIKICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgLXQueSwgdC56LCBsb2QpKTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwg
dC56LCBsb2QpKTtcbiIKICAgICAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAg
ICAgICJcbiI7CiAgICAgICAgIH0KQEAgLTEzNTIsNyArMTM0MCw3IEBAIGJvb2wgT3V0cHV0SExT
TDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiAg
ICAgICBjYXNlIEVPcFByb3RvdHlwZToKICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyhub2RlLT5nZXRUeXBlKCkp
IDw8ICIgIiA8PCBkZWNvcmF0ZShub2RlLT5nZXROYW1lKCkpIDw8ICIoIjsKKyAgICAgICAgICAg
IG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5v
ZGUtPmdldE5hbWUoKSkgPDwgKG1PdXRwdXRMb2QwRnVuY3Rpb24gPyAiTG9kMCgiIDogIigiKTsK
IAogICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1
ZW5jZSgpOwogCkBAIC0xMzc0LDYgKzEzNjIsMTQgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIAogICAgICAgICAg
ICAgb3V0IDw8ICIpO1xuIjsKIAorICAgICAgICAgICAgLy8gQWxzbyBwcm90b3R5cGUgdGhlIExv
ZDAgdmFyaWFudCBpZiBuZWVkZWQKKyAgICAgICAgICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29u
dGludWl0eSAmJiAhbU91dHB1dExvZDBGdW5jdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBub2Rl
LT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKQEAgLTE4NjIsNyArMTg1OCwyMSBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQogICAgIHN3
aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCiAgICAgewogICAgICAgY2FzZSBFT3BLaWxsOiAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQ7XG4iLCAiIiwgIiIpOyAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEJyZWFrOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnJlYWs7XG4iLCAiIiwg
IiIpOyAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQnJlYWs6CisgICAgICAgIGlmICh2aXNpdCA9
PSBQcmVWaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1FeGNlc3NpdmVMb29wSW5k
ZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ7QnJlYWsiOworICAg
ICAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiID0gdHJ1ZTsgYnJlYWs7fVxuIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgImJy
ZWFrO1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQsICJjb250aW51ZTtcbiIsICIi
LCAiIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BSZXR1cm46CiAgICAgICAgIGlmICh2aXNpdCA9
PSBQcmVWaXNpdCkKQEAgLTIwNTIsMTMgKzIwNjIsMzcgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5k
bGVFeGNlc3NpdmVMb29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAvLyBOb3QgYW4gZXhjZXNzaXZlIGxvb3AKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgVEludGVybVN5bWJvbCAqcmVzdG9yZUluZGV4ID0gbUV4Y2Vzc2l2ZUxvb3BJbmRl
eDsKKyAgICAgICAgICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBpbmRleDsKKworICAgICAgICAg
ICAgb3V0IDw8ICJ7aW50ICI7CisgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICBvdXQgPDwgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAiYm9vbCBCcmVhayI7
CisgICAgICAgICAgICBpbmRleC0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICBvdXQgPDwg
IiA9IGZhbHNlO1xuIjsKKworICAgICAgICAgICAgYm9vbCBmaXJzdExvb3BGcmFnbWVudCA9IHRy
dWU7CisKICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBpbnQgY2xhbXBlZExpbWl0ID0gaW5pdGlhbCArIGluY3JlbWVudCAq
IHN0ZDo6bWluKE1BWF9MT09QX0lURVJBVElPTlMsIGl0ZXJhdGlvbnMpOwogCisgICAgICAgICAg
ICAgICAgaWYgKCFmaXJzdExvb3BGcmFnbWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiaWYoIUJyZWFrIjsKKyAgICAgICAgICAgICAgICAgICAgaW5k
ZXgtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIikge1xuIjsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSBN
QVhfTE9PUF9JVEVSQVRJT05TKSAgIC8vIExhc3QgbG9vcCBmcmFnbWVudAorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7ICAg
Ly8gU3RvcHMgc2V0dGluZyB0aGUgQnJlYWsgZmxhZworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBmb3IoaW50IGluZGV4ID0gaW5pdGlhbDsg
aW5kZXggPCBjbGFtcGVkTGltaXQ7IGluZGV4ICs9IGluY3JlbWVudCkKIAotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZm9yKGludCAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiZm9yKCI7CiAg
ICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICAgICAgICAgIG91
dCA8PCAiID0gIjsKICAgICAgICAgICAgICAgICBvdXQgPDwgaW5pdGlhbDsKQEAgLTIwODUsOSAr
MjExOSwyMCBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEludGVybUxv
b3AgKm5vZGUpCiAgICAgICAgICAgICAgICAgb3V0cHV0TGluZURpcmVjdGl2ZShub2RlLT5nZXRM
aW5lKCkpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiO31cbiI7CiAKKyAgICAgICAgICAgICAg
ICBpZiAoIWZpcnN0TG9vcEZyYWdtZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJ9XG4iOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGZpcnN0TG9vcEZyYWdtZW50ID0gZmFsc2U7CisKICAgICAgICAgICAgICAgICBpbml0aWFs
ICs9IE1BWF9MT09QX0lURVJBVElPTlMgKiBpbmNyZW1lbnQ7CiAgICAgICAgICAgICAgICAgaXRl
cmF0aW9ucyAtPSBNQVhfTE9PUF9JVEVSQVRJT05TOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBvdXQgPDwgIn0iOworCisgICAgICAgICAgICBtRXhjZXNzaXZlTG9v
cEluZGV4ID0gcmVzdG9yZUluZGV4OwogCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEhMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRI
TFNMLmgKaW5kZXggZWEyOGEzYy4uZGM4NDNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5oCkBAIC0xNDQsNiArMTQ0LDggQEAgY2xh
c3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCiAgICAgYm9vbCBtQ29udGFp
bnNMb29wRGlzY29udGludWl0eTsKICAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CiAgICAg
Ym9vbCBtSW5zaWRlRGlzY29udGludW91c0xvb3A7CisKKyAgICBUSW50ZXJtU3ltYm9sICptRXhj
ZXNzaXZlTG9vcEluZGV4OwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKaW5kZXggYjMxMTUyNi4uN2U1ZmNlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VI
ZWxwZXIuY3BwCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogI2luY2x1
ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1NvdXJjZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Nv
dXJjZUxvY2F0aW9uLmgiCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwpAQCAtMTg0LDcgKzE4NCw2IEBA
IHZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCiAgICAgZGlhZ25vc3Rp
Y3Mud3JpdGVJbmZvKHBwOjpEaWFnbm9zdGljczo6RVJST1IsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNyY0xvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKIAotICAgICsrbnVtRXJy
b3JzOwogfQogCiB2b2lkIFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsb2MsCkBA
IC04NDcsMTQgKzg0NiwyNiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShU
SW50ZXJtU3ltYm9sICpub2RlLCBUVHlwZSogdHlwZSwgaW50IHNpemUsCiAvLwogLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KIC8vCi1ib29sIFRQYXJzZUNvbnRleHQ6Om5v
bkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJs
aWNUeXBlJiB0eXBlKQorYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNr
KGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBh
cnJheSkKIHsKLSAgICAvLwotICAgIC8vIE1ha2UgdGhlIHF1YWxpZmllciBtYWtlIHNlbnNlLgot
ICAgIC8vCi0gICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CisgICAgaWYgKHR5
cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KQorICAgIHsKKyAgICAgICAgLy8gTWFrZSB0aGUgcXVh
bGlmaWVyIG1ha2Ugc2Vuc2UuCiAgICAgICAgIHR5cGUucXVhbGlmaWVyID0gRXZxVGVtcG9yYXJ5
OwotICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcg
bXVzdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoYXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJh
eXMgbWF5IG5vdCBiZSBkZWNsYXJlZCBjb25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0
aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAodHlwZS5pc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgInN0cnVjdHVyZXMgY29udGFpbmluZyBhcnJheXMgbWF5IG5vdCBi
ZSBkZWNsYXJlZCBjb25zdGFudCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBpbml0aWFsaXplZCIsIGlk
ZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcihsaW5lLCAidmFyaWFibGVzIHdpdGggcXVhbGlmaWVyICdjb25zdCcg
bXVzdCBiZSBpbml0aWFsaXplZCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CisgICAgICAgIH0KKwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE1MTAsNyArMTUyMSw3IEBAIGludCBQ
YVBhcnNlU3RyaW5ncyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25z
dCBpbnQgbGVuZ3RoW10sCiAKICAgICBnbHNsYW5nX2ZpbmFsaXplKGNvbnRleHQpOwogCi0gICAg
cmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzID09IDApID8gMCA6IDE7
CisgICAgcmV0dXJuIChlcnJvciA9PSAwKSAmJiAoY29udGV4dC0+bnVtRXJyb3JzKCkgPT0gMCkg
PyAwIDogMTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvUGFyc2VIZWxwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9QYXJzZUhlbHBlci5oCmluZGV4IDhkZWU4ZmQuLjY2OGU1MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDcgKzks
NyBAQAogI2luY2x1ZGUgImNvbXBpbGVyL0RpYWdub3N0aWNzLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvRGlyZWN0aXZlSGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRp
YXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3Iu
aCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKICNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJs
ZS5oIgogCkBAIC0zMyw3ICszMyw2IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAgICAg
ICAgIGNvbXBpbGVPcHRpb25zKG9wdGlvbnMpLAogICAgICAgICAgICAgc291cmNlUGF0aChzb3Vy
Y2VQYXRoKSwKICAgICAgICAgICAgIHRyZWVSb290KDApLAotICAgICAgICAgICAgbnVtRXJyb3Jz
KDApLAogICAgICAgICAgICAgbGV4QWZ0ZXJUeXBlKGZhbHNlKSwKICAgICAgICAgICAgIGxvb3BO
ZXN0aW5nTGV2ZWwoMCksCiAgICAgICAgICAgICBzdHJ1Y3ROZXN0aW5nTGV2ZWwoMCksCkBAIC01
Miw3ICs1MSw2IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICBpbnQgY29tcGlsZU9wdGlv
bnM7CiAgICAgY29uc3QgY2hhciogc291cmNlUGF0aDsgICAgICAvLyBQYXRoIG9mIHNvdXJjZSBm
aWxlIG9yIE5VTEwuCiAgICAgVEludGVybU5vZGUqIHRyZWVSb290OyAgICAgICAvLyByb290IG9m
IHBhcnNlIHRyZWUgYmVpbmcgY3JlYXRlZAotICAgIGludCBudW1FcnJvcnM7CiAgICAgYm9vbCBs
ZXhBZnRlclR5cGU7ICAgICAgICAgICAvLyB0cnVlIGlmIHdlJ3ZlIHJlY29nbml6ZWQgYSB0eXBl
LCBzbyBjYW4gb25seSBiZSBsb29raW5nIGZvciBhbiBpZGVudGlmaWVyCiAgICAgaW50IGxvb3BO
ZXN0aW5nTGV2ZWw7ICAgICAgICAvLyAwIGlmIG91dHNpZGUgYWxsIGxvb3BzCiAgICAgaW50IHN0
cnVjdE5lc3RpbmdMZXZlbDsgICAgICAvLyBpbmNyZW1lbnRlZCB3aGlsZSBwYXJzaW5nIGEgc3Ry
dWN0IGRlY2xhcmF0aW9uCkBAIC02Nyw2ICs2NSw3IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsK
ICAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXByb2Nlc3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwog
CisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9y
cygpOyB9CiAgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmlu
Zm9TaW5rKCk7IH0KICAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpy
ZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0
cmFJbmZvPSIiKTsKQEAgLTk4LDcgKzk3LDcgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAg
IGJvb2wgc2FtcGxlckVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlw
ZSwgY29uc3QgY2hhciogcmVhc29uKTsKICAgICBib29sIHN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soaW50IGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSk7CiAgICAgYm9vbCBwYXJhbWV0
ZXJTYW1wbGVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0
IFRUeXBlJiB0eXBlKTsKLSAgICBib29sIG5vbkluaXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUs
IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlKTsKKyAgICBib29sIG5vbklu
aXRDb25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiB0eXBlLCBib29sIGFycmF5KTsKICAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBs
aW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYg
dmFyaWFibGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVhbGlmaWVy
IHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwogICAg
IGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1JlbmFtZUZ1bmN0
aW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rp
b24uaAppbmRleCA5Y2Q2ZTVlLi4zOTA4YmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVuYW1lRnVuY3Rpb24uaApAQCAtMjAsNyArMjAsNyBA
QCBwdWJsaWM6CiAgICAgLCBtT2xkRnVuY3Rpb25OYW1lKG9sZEZ1bmN0aW9uTmFtZSkKICAgICAs
IG1OZXdGdW5jdGlvbk5hbWUobmV3RnVuY3Rpb25OYW1lKSB7fQogCi0gICAgdmlydHVhbCBib29s
IHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSkKICAgICB7CiAgICAgICAgIFRPcGVyYXRvciBvcCA9IG5vZGUtPmdldE9wKCk7CiAgICAgICAg
IGlmICgob3AgPT0gRU9wRnVuY3Rpb24gfHwgb3AgPT0gRU9wRnVuY3Rpb25DYWxsKSAmJiBub2Rl
LT5nZXROYW1lKCkgPT0gbU9sZEZ1bmN0aW9uTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKaW5kZXggM2VhZjE5Zi4uYTJjNWZmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKQEAg
LTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIK
ICNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSGFzaE5h
bWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxl
ci9TeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIgpAQCAt
NjksNiArNzAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRV
bmlmb3JtcygpIGNvbnN0IHsgcmV0dXJuIHVuaWZvcm1zOyB9CiAgICAgaW50IGdldE1hcHBlZE5h
bWVNYXhMZW5ndGgoKSBjb25zdDsKIAorICAgIFNoSGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9CisgICAgTmFtZU1hcCYgZ2V0TmFt
ZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KKyAgICBUU3ltYm9sVGFibGUmIGdldFN5bWJvbFRh
YmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKwogcHJvdGVjdGVkOgogICAgIFNoU2hhZGVy
VHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQogICAgIFNo
U2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQpA
QCAtODksNiArOTQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1l
cyhUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgog
ICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYsIGFmdGVyIGFwcGx5aW5nIHRoZSBwYWNraW5nIHJ1bGVzIGluIHRo
ZSBHTFNMIDEuMDE3IHNwZWMKKyAgICAvLyBBcHBlbmRpeCBBLCBzZWN0aW9uIDcsIHRoZSBzaGFk
ZXIgZG9lcyBub3QgdXNlIHRvbyBtYW55IHVuaWZvcm1zLgorICAgIGJvb2wgZW5mb3JjZVBhY2tp
bmdSZXN0cmljdGlvbnMoKTsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNz
ZXMgdGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgog
ICAgIGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9v
bCBvdXRwdXRHcmFwaCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBu
b3QgdXNlIHNhbXBsZXJzLgpAQCAtMTA2LDYgKzExNCw4IEBAIHByaXZhdGU6CiAgICAgU2hTaGFk
ZXJUeXBlIHNoYWRlclR5cGU7CiAgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7CiAKKyAgICBp
bnQgbWF4VW5pZm9ybVZlY3RvcnM7CisKICAgICAvLyBCdWlsdC1pbiBzeW1ib2wgdGFibGUgZm9y
IHRoZSBnaXZlbiBsYW5ndWFnZSwgc3BlYywgYW5kIHJlc291cmNlcy4KICAgICAvLyBJdCBpcyBw
cmVzZXJ2ZWQgZnJvbSBjb21waWxlLXRvLWNvbXBpbGUuCiAgICAgVFN5bWJvbFRhYmxlIHN5bWJv
bFRhYmxlOwpAQCAtMTIyLDYgKzEzMiwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gQ2FjaGVkIGNv
cHkgb2YgdGhlIHJlZi1jb3VudGVkIHNpbmdsZXRvbi4KICAgICBMb25nTmFtZU1hcCogbG9uZ05h
bWVNYXA7CisKKyAgICAvLyBuYW1lIGhhc2hpbmcuCisgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNo
RnVuY3Rpb247CisgICAgTmFtZU1hcCBuYW1lTWFwOwogfTsKIAogLy8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAppbmRleCA1NmY1
YzdmLi5hYjU2NTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvU2hhZGVyTGFuZy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoYWRlckxhbmcuY3BwCkBAIC0xMjUsNiArMTI1LDkgQEAgdm9pZCBTaEluaXRCdWls
dEluUmVzb3VyY2VzKFNoQnVpbHRJblJlc291cmNlcyogcmVzb3VyY2VzKQogICAgIHJlc291cmNl
cy0+T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMDsKICAgICByZXNvdXJjZXMtPk9FU19FR0xf
aW1hZ2VfZXh0ZXJuYWwgPSAwOwogICAgIHJlc291cmNlcy0+QVJCX3RleHR1cmVfcmVjdGFuZ2xl
ID0gMDsKKworICAgIC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5IGRlZmF1bHQuCisgICAgcmVz
b3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwogfQogCiAvLwpAQCAtMjI0LDYgKzIyNywyMiBA
QCB2b2lkIFNoR2V0SW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoU2hhZGVySW5mbyBwbmFt
ZSwgaW50KiBwYXJhbXMpCiAgICAgICAgIC8vIGhhbmRsZSBhcnJheSBhbmQgc3RydWN0IGRlcmVm
ZXJlbmNlcy4KICAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOwogICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKKyAgICAgICAgKnBhcmFt
cyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNI
X0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6CisgICAgICAgIGlmIChjb21waWxlci0+Z2V0SGFzaEZ1
bmN0aW9uKCkgPT0gTlVMTCkgeworICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyA2NCBiaXRzIGhhc2hpbmcgb3V0cHV0IHJlcXVpcmVzIDE2
IGJ5dGVzIGZvciBoZXggCisgICAgICAgICAgICAvLyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIgSGFzaGVkTmFtZVByZWZpeFtdID0gSEFTSEVEX05BTUVfUFJFRklYOwor
ICAgICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NPVU5UOgor
ICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5hbWVNYXAoKS5zaXplKCk7CisgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpAQCAtMjgzLDMg
KzMwMiw0NiBAQCB2b2lkIFNoR2V0QWN0aXZlVW5pZm9ybShjb25zdCBTaEhhbmRsZSBoYW5kbGUs
CiAgICAgZ2V0VmFyaWFibGVJbmZvKFNIX0FDVElWRV9VTklGT1JNUywKICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlLCBpbmRleCwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lLCBtYXBwZWROYW1l
KTsKIH0KKwordm9pZCBTaEdldE5hbWVIYXNoaW5nRW50cnkoY29uc3QgU2hIYW5kbGUgaGFuZGxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIq
IGhhc2hlZE5hbWUpCit7CisgICAgaWYgKCFoYW5kbGUgfHwgIW5hbWUgfHwgIWhhc2hlZE5hbWUg
fHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBUU2hIYW5kbGVCYXNlKiBiYXNl
ID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBj
b21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoIWNvbXBpbGVyKSByZXR1
cm47CisKKyAgICBjb25zdCBOYW1lTWFwJiBuYW1lTWFwID0gY29tcGlsZXItPmdldE5hbWVNYXAo
KTsKKyAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihuYW1lTWFwLnNpemUoKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIE5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmFtZU1h
cC5iZWdpbigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXg7ICsraSkKKyAgICAgICAg
KytpdDsKKworICAgIHNpemVfdCBsZW4gPSBpdC0+Zmlyc3QubGVuZ3RoKCkgKyAxOworICAgIGlu
dCBtYXhfbGVuID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9OQU1FX01BWF9MRU5HVEgs
ICZtYXhfbGVuKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsZW4pID4gbWF4X2xlbikgewor
ICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyAg
ICBzdHJuY3B5KG5hbWUsIGl0LT5maXJzdC5jX3N0cigpLCBsZW4pOworICAgIC8vIFRvIGJlIG9u
IHRoZSBzYWZlIHNpZGUgaW4gY2FzZSB0aGUgc291cmNlIGlzIGxvbmdlciB0aGFuIGV4cGVjdGVk
LgorICAgIG5hbWVbbGVuXSA9ICdcMCc7CisKKyAgICBsZW4gPSBpdC0+c2Vjb25kLmxlbmd0aCgp
ICsgMTsKKyAgICBtYXhfbGVuID0gMDsKKyAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9IQVNIRURf
TkFNRV9NQVhfTEVOR1RILCAmbWF4X2xlbik7CisgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGVu
KSA+IG1heF9sZW4pIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgbGVuID0gbWF4
X2xlbjsKKyAgICB9CisgICAgc3RybmNweShoYXNoZWROYW1lLCBpdC0+c2Vjb25kLmNfc3RyKCks
IGxlbik7CisgICAgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZSBpbiBjYXNlIHRoZSBzb3VyY2Ug
aXMgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuCisgICAgaGFzaGVkTmFtZVtsZW5dID0gJ1wwJzsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xU
YWJsZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFi
bGUuY3BwCmluZGV4IDY4ZjAyOWQuLjg0N2MxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjAsOSArMjAsMTYgQEAK
IAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAKLS8vCi0vLyBUVHlwZSBoZWxwZXIg
ZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0byBsaXZlLgotLy8KK1RUeXBlOjpUVHlwZShjb25zdCBU
UHVibGljVHlwZSAmcCkgOgorICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5w
cmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChw
Lm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLAorICAgICAg
ICAgICAgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgc3RydWN0dXJl
KDApLCBzdHJ1Y3R1cmVTaXplKDApLCBkZWVwZXN0U3RydWN0TmVzdGluZygwKSwgZmllbGROYW1l
KDApLCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQoreworICAgIGlmIChwLnVzZXJEZWYpIHsKKyAg
ICAgICAgc3RydWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgdHlwZU5h
bWUgPSBOZXdQb29sVFN0cmluZyhwLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkuY19zdHIoKSk7Cisg
ICAgICAgIGNvbXB1dGVEZWVwZXN0U3RydWN0TmVzdGluZygpOworICAgIH0KK30KIAogLy8KIC8v
IFJlY3Vyc2l2ZWx5IGdlbmVyYXRlIG1hbmdsZWQgbmFtZXMuCkBAIC05Miw2ICs5OSwyNSBAQCB2
b2lkIFRUeXBlOjpjb21wdXRlRGVlcGVzdFN0cnVjdE5lc3RpbmcoKQogICAgIGRlZXBlc3RTdHJ1
Y3ROZXN0aW5nID0gMSArIG1heE5lc3Rpbmc7CiB9CiAKK2Jvb2wgVFR5cGU6OmlzU3RydWN0dXJl
Q29udGFpbmluZ0FycmF5cygpIGNvbnN0Cit7CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChUVHlwZUxpc3Q6OmNvbnN0
X2l0ZXJhdG9yIG1lbWJlciA9IHN0cnVjdHVyZS0+YmVnaW4oKTsgbWVtYmVyICE9IHN0cnVjdHVy
ZS0+ZW5kKCk7IG1lbWJlcisrKQorICAgIHsKKyAgICAgICAgaWYgKG1lbWJlci0+dHlwZS0+aXNB
cnJheSgpIHx8CisgICAgICAgICAgICBtZW1iZXItPnR5cGUtPmlzU3RydWN0dXJlQ29udGFpbmlu
Z0FycmF5cygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8KIC8vIER1bXAgZnVuY3Rpb25z
LgogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmgKaW5kZXggMzM2MTZkYy4uYTg5NDk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgKQEAgLTI5OCw2ICsyOTgsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3ltYm9sOwogICAgIH0KIAorICAgIFRTeW1ib2wg
KmZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUpCisgICAgeworICAgICAgICByZXR1cm4g
dGFibGVbMF0tPmZpbmQobmFtZSk7CisgICAgfQorCiAgICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdl
dEdsb2JhbExldmVsKCkgewogICAgICAgICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOwogICAg
ICAgICByZXR1cm4gdGFibGVbMV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcAppbmRleCBkOTBjNzBjLi5hNGYwNDdh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckVTU0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yRVNTTC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAgdm9pZCBUcmFuc2xhdG9yRVNTTDo6
dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7CiAgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVy
KCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CiAKICAgICAvLyBXcml0
ZSB0cmFuc2xhdGVkIHNoYWRlci4KLSAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmspOwor
ICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5h
bWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEVT
U0wpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckdMU0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JHTFNMLmNwcAppbmRleCBiYTM4MTEyLi41ZjNkYmNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xT
TC5jcHAKQEAgLTM5LDYgKzM5LDYgQEAgdm9pZCBUcmFuc2xhdG9yR0xTTDo6dHJhbnNsYXRlKFRJ
bnRlcm1Ob2RlKiByb290KSB7CiAgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xh
bXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CiAKICAgICAvLyBXcml0ZSB0cmFuc2xhdGVk
IHNoYWRlci4KLSAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmspOworICAgIFRPdXRwdXRH
TFNMIG91dHB1dEdMU0woc2luaywgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0
U3ltYm9sVGFibGUoKSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAppbmRleCBlMWExOGZk
Li5kNDU3NjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVHlwZXMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHlw
ZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTEsMTAgKzExLDEyIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvQ29tbW9uLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvZGVidWcuaCIKIAorY2xhc3MgVFR5cGU7CitzdHJ1Y3QgVFB1YmxpY1R5
cGU7CisKIC8vCiAvLyBOZWVkIHRvIGhhdmUgYXNzb2NpYXRpb24gb2YgbGluZSBudW1iZXJzIHRv
IHR5cGVzIGluIGEgbGlzdCBmb3IgYnVpbGRpbmcgc3RydWN0cy4KIC8vCi1jbGFzcyBUVHlwZTsK
IHN0cnVjdCBUVHlwZUxpbmUgewogICAgIFRUeXBlKiB0eXBlOwogICAgIGludCBsaW5lOwpAQCAt
MjcsNTkgKzI5LDE0IEBAIGlubGluZSBUVHlwZUxpc3QqIE5ld1Bvb2xUVHlwZUxpc3QoKQogICAg
IHJldHVybiBuZXcobWVtb3J5KSBUVHlwZUxpc3Q7CiB9CiAKLS8vCi0vLyBUaGlzIGlzIGEgd29y
a2Fyb3VuZCBmb3IgYSBwcm9ibGVtIHdpdGggdGhlIHlhY2Mgc3RhY2ssICBJdCBjYW4ndCBoYXZl
Ci0vLyB0eXBlcyB0aGF0IGl0IHRoaW5rcyBoYXZlIG5vbi10cml2aWFsIGNvbnN0cnVjdG9ycy4g
IEl0IHNob3VsZAotLy8ganVzdCBiZSB1c2VkIHdoaWxlIHJlY29nbml6aW5nIHRoZSBncmFtbWFy
LCBub3QgYW55dGhpbmcgZWxzZS4gIFBvaW50ZXJzCi0vLyBjb3VsZCBiZSB1c2VkLCBidXQgYWxz
byB0cnlpbmcgdG8gYXZvaWQgbG90cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBvdmVyaGVhZC4KLS8v
Ci0vLyBOb3QgYXMgYmFkIGFzIGl0IGxvb2tzLCB0aGVyZSBpcyBubyBhY3R1YWwgYXNzdW1wdGlv
biB0aGF0IHRoZSBmaWVsZHMKLS8vIG1hdGNoIHVwIG9yIGFyZSBuYW1lIHRoZSBzYW1lIG9yIGFu
eXRoaW5nIGxpa2UgdGhhdC4KLS8vCi1jbGFzcyBUUHVibGljVHlwZSB7Ci1wdWJsaWM6Ci0gICAg
VEJhc2ljVHlwZSB0eXBlOwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIFRQcmVjaXNp
b24gcHJlY2lzaW9uOwotICAgIGludCBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBv
ciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7Ci0gICAgYm9vbCBh
cnJheTsKLSAgICBpbnQgYXJyYXlTaXplOwotICAgIFRUeXBlKiB1c2VyRGVmOwotICAgIGludCBs
aW5lOwotCi0gICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0LCBUUXVhbGlmaWVyIHEsIGlu
dCBsbiA9IDApCi0gICAgewotICAgICAgICB0eXBlID0gYnQ7Ci0gICAgICAgIHF1YWxpZmllciA9
IHE7Ci0gICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKLSAgICAgICAgc2l6ZSA9IDE7
Ci0gICAgICAgIG1hdHJpeCA9IGZhbHNlOwotICAgICAgICBhcnJheSA9IGZhbHNlOwotICAgICAg
ICBhcnJheVNpemUgPSAwOwotICAgICAgICB1c2VyRGVmID0gMDsKLSAgICAgICAgbGluZSA9IGxu
OwotICAgIH0KLQotICAgIHZvaWQgc2V0QWdncmVnYXRlKGludCBzLCBib29sIG0gPSBmYWxzZSkK
LSAgICB7Ci0gICAgICAgIHNpemUgPSBzOwotICAgICAgICBtYXRyaXggPSBtOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCi0gICAgewotICAgICAgICBhcnJh
eSA9IGE7Ci0gICAgICAgIGFycmF5U2l6ZSA9IHM7Ci0gICAgfQotfTsKLQogdHlwZWRlZiBUTWFw
PFRUeXBlTGlzdCosIFRUeXBlTGlzdCo+IFRTdHJ1Y3R1cmVNYXA7CiB0eXBlZGVmIFRNYXA8VFR5
cGVMaXN0KiwgVFR5cGVMaXN0Kj46Oml0ZXJhdG9yIFRTdHJ1Y3R1cmVNYXBJdGVyYXRvcjsKKwog
Ly8KIC8vIEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYSB0eXBlLgogLy8KLWNsYXNz
IFRUeXBlIHsKK2NsYXNzIFRUeXBlCit7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQogICAgIFRUeXBlKCkge30KQEAgLTg4LDE2ICs0
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1h
dGlvblR5cGUoMCksIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgZGVlcGVzdFN0cnVj
dE5lc3RpbmcoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKICAgICB7
CiAgICAgfQotICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6Ci0gICAg
ICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihw
LnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJh
eSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCi0gICAgICAgICAgICBtYXhBcnJheVNpemUoMCks
IGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCks
IGRlZXBlc3RTdHJ1Y3ROZXN0aW5nKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVO
YW1lKDApCi0gICAgewotICAgICAgICBpZiAocC51c2VyRGVmKSB7Ci0gICAgICAgICAgICBzdHJ1
Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOwotICAgICAgICAgICAgdHlwZU5hbWUgPSBO
ZXdQb29sVFN0cmluZyhwLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkuY19zdHIoKSk7Ci0gICAgICAg
ICAgICBjb21wdXRlRGVlcGVzdFN0cnVjdE5lc3RpbmcoKTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBleHBsaWNpdCBUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCk7CiAgICAgVFR5cGUoVFR5cGVM
aXN0KiB1c2VyRGVmLCBjb25zdCBUU3RyaW5nJiBuLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmlu
ZWQpIDoKICAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZp
ZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBh
cnJheVNpemUoMCksCiAgICAgICAgICAgICBtYXhBcnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRp
b25UeXBlKDApLCBzdHJ1Y3R1cmUodXNlckRlZiksIHN0cnVjdHVyZVNpemUoMCksIGRlZXBlc3RT
dHJ1Y3ROZXN0aW5nKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkKQEAgLTI4NCw2ICsyMzIs
OCBAQCBwdWJsaWM6CiAgICAgLy8gZGVlcGVzdCBmaWVsZCAobmVzdGluZzIuZmllbGQxLnBvc2l0
aW9uKS4KICAgICBpbnQgZ2V0RGVlcGVzdFN0cnVjdE5lc3RpbmcoKSBjb25zdCB7IHJldHVybiBk
ZWVwZXN0U3RydWN0TmVzdGluZzsgfQogCisgICAgYm9vbCBpc1N0cnVjdHVyZUNvbnRhaW5pbmdB
cnJheXMoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgYnVpbGRNYW5nbGVkTmFtZShU
U3RyaW5nJik7CiAgICAgaW50IGdldFN0cnVjdFNpemUoKSBjb25zdDsKQEAgLTMwOCw0ICsyNTgs
NjEgQEAgcHJvdGVjdGVkOgogICAgIFRTdHJpbmcgKnR5cGVOYW1lOyAgICAgICAgICAvLyBmb3Ig
c3RydWN0dXJlIGZpZWxkIHR5cGUgbmFtZQogfTsKIAorLy8KKy8vIFRoaXMgaXMgYSB3b3JrYXJv
dW5kIGZvciBhIHByb2JsZW0gd2l0aCB0aGUgeWFjYyBzdGFjaywgIEl0IGNhbid0IGhhdmUKKy8v
IHR5cGVzIHRoYXQgaXQgdGhpbmtzIGhhdmUgbm9uLXRyaXZpYWwgY29uc3RydWN0b3JzLiAgSXQg
c2hvdWxkCisvLyBqdXN0IGJlIHVzZWQgd2hpbGUgcmVjb2duaXppbmcgdGhlIGdyYW1tYXIsIG5v
dCBhbnl0aGluZyBlbHNlLiAgUG9pbnRlcnMKKy8vIGNvdWxkIGJlIHVzZWQsIGJ1dCBhbHNvIHRy
eWluZyB0byBhdm9pZCBsb3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLgorLy8KKy8v
IE5vdCBhcyBiYWQgYXMgaXQgbG9va3MsIHRoZXJlIGlzIG5vIGFjdHVhbCBhc3N1bXB0aW9uIHRo
YXQgdGhlIGZpZWxkcworLy8gbWF0Y2ggdXAgb3IgYXJlIG5hbWUgdGhlIHNhbWUgb3IgYW55dGhp
bmcgbGlrZSB0aGF0LgorLy8KK3N0cnVjdCBUUHVibGljVHlwZQoreworICAgIFRCYXNpY1R5cGUg
dHlwZTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICBUUHJlY2lzaW9uIHByZWNpc2lv
bjsKKyAgICBpbnQgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgbWF0cml4LCBu
b3Qgc2l6ZSBvZiBhcnJheQorICAgIGJvb2wgbWF0cml4OworICAgIGJvb2wgYXJyYXk7CisgICAg
aW50IGFycmF5U2l6ZTsKKyAgICBUVHlwZSogdXNlckRlZjsKKyAgICBpbnQgbGluZTsKKworICAg
IHZvaWQgc2V0QmFzaWMoVEJhc2ljVHlwZSBidCwgVFF1YWxpZmllciBxLCBpbnQgbG4gPSAwKQor
ICAgIHsKKyAgICAgICAgdHlwZSA9IGJ0OworICAgICAgICBxdWFsaWZpZXIgPSBxOworICAgICAg
ICBwcmVjaXNpb24gPSBFYnBVbmRlZmluZWQ7CisgICAgICAgIHNpemUgPSAxOworICAgICAgICBt
YXRyaXggPSBmYWxzZTsKKyAgICAgICAgYXJyYXkgPSBmYWxzZTsKKyAgICAgICAgYXJyYXlTaXpl
ID0gMDsKKyAgICAgICAgdXNlckRlZiA9IDA7CisgICAgICAgIGxpbmUgPSBsbjsKKyAgICB9CisK
KyAgICB2b2lkIHNldEFnZ3JlZ2F0ZShpbnQgcywgYm9vbCBtID0gZmFsc2UpCisgICAgeworICAg
ICAgICBzaXplID0gczsKKyAgICAgICAgbWF0cml4ID0gbTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dEFycmF5KGJvb2wgYSwgaW50IHMgPSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkgPSBhOworICAg
ICAgICBhcnJheVNpemUgPSBzOworICAgIH0KKworICAgIGJvb2wgaXNTdHJ1Y3R1cmVDb250YWlu
aW5nQXJyYXlzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdXNlckRlZikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHVzZXJEZWYtPmlzU3RydWN0dXJlQ29udGFpbmluZ0FycmF5cygpOworICAgIH0KK307CisKICNl
bmRpZiAvLyBfVFlQRVNfSU5DTFVERURfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2hvcnRDaXJjdWl0LmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCmluZGV4IDE3ODJl
YmMuLmUyMmE3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTaG9ydENpcmN1aXQuY3BwCkBAIC05NSw5ICs5NSw5IEBAIGJv
b2wgVW5mb2xkU2hvcnRDaXJjdWl0Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJp
bmFyeSAqbm9kZSkKICAgICAgICAgICAgIG1UZW1wb3JhcnlJbmRleCA9IGkgKyAxOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFVuZm9sZFNob3J0
Q2lyY3VpdDo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24gKm5v
ZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFy
aWFibGVJbmZvLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJp
YWJsZUluZm8uY3BwCmluZGV4IDFlOTQ4NmYuLmViNmJlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCkBAIC03Nywy
MyArNzcsMjUgQEAgc3RhdGljIHZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25zdCBUVHlw
ZSYgdHlwZSwKIHN0YXRpYyB2b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRU
eXBlJiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRTdHJpbmcmIG1hcHBlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24pOwogCiAvLyBSZXR1cm5zIGluZm8gZm9yIGFuIGF0dHJpYnV0ZSBvciB1bmlmb3JtLgog
c3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVFN0cmluZyYgbWFwcGVkTmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogewogICAgIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewogICAgICAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5nZXRBcnJheVNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgVFN0cmluZyBsbmFtZSA9IG5hbWUgKyBhcnJh
eUJyYWNrZXRzKGkpOwogICAgICAgICAgICAgICAgIFRTdHJpbmcgbG1hcHBlZE5hbWUgPSBtYXBw
ZWROYW1lICsgYXJyYXlCcmFja2V0cyhpKTsKLSAgICAgICAgICAgICAgICBnZXRVc2VyRGVmaW5l
ZFZhcmlhYmxlSW5mbyh0eXBlLCBsbmFtZSwgbG1hcHBlZE5hbWUsIGluZm9MaXN0KTsKKyAgICAg
ICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyh0eXBlLCBsbmFtZSwgbG1hcHBl
ZE5hbWUsIGluZm9MaXN0LCBoYXNoRnVuY3Rpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8odHlwZSwgbmFt
ZSwgbWFwcGVkTmFtZSwgaW5mb0xpc3QpOworICAgICAgICAgICAgZ2V0VXNlckRlZmluZWRWYXJp
YWJsZUluZm8odHlwZSwgbmFtZSwgbWFwcGVkTmFtZSwgaW5mb0xpc3QsIGhhc2hGdW5jdGlvbik7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBnZXRCdWlsdEluVmFyaWFibGVJbmZv
KHR5cGUsIG5hbWUsIG1hcHBlZE5hbWUsIGluZm9MaXN0KTsKQEAgLTEyNCw3ICsxMjYsOCBAQCB2
b2lkIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8oY29uc3QgVFR5cGUmIHR5cGUsCiB2b2lkIGdldFVz
ZXJEZWZpbmVkVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBtYXBwZWROYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24p
CiB7CiAgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KTsKIApAQCAt
MTMzLDE1ICsxMzYsMjggQEAgdm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhjb25zdCBU
VHlwZSYgdHlwZSwKICAgICAgICAgY29uc3QgVFR5cGUqIGZpZWxkVHlwZSA9ICgqc3RydWN0dXJl
KVtpXS50eXBlOwogICAgICAgICBnZXRWYXJpYWJsZUluZm8oKmZpZWxkVHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUgKyAiLiIgKyBmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkTmFtZSArICIuIiArIGZpZWxkVHlwZS0+Z2V0
RmllbGROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtYXBwZWROYW1lICsgIi4iICsgVEludGVybVRyYXZlcnNlcjo6aGFz
aChmaWVsZFR5cGUtPmdldEZpZWxkTmFtZSgpLCBoYXNoRnVuY3Rpb24pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRnVuY3Rp
b24pOwogICAgIH0KIH0KIAorVFZhcmlhYmxlSW5mbzo6VFZhcmlhYmxlSW5mbygpCit7Cit9CisK
K1RWYXJpYWJsZUluZm86OlRWYXJpYWJsZUluZm8oU2hEYXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSkK
KyAgICA6IHR5cGUodHlwZSksCisgICAgICBzaXplKHNpemUpCit7Cit9CisKIENvbGxlY3RBdHRy
aWJzVW5pZm9ybXM6OkNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVFZhcmlhYmxlSW5mb0xpc3QmIGF0
dHJpYnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRW
YXJpYWJsZUluZm9MaXN0JiB1bmlmb3JtcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhh
c2hGdW5jdGlvbikKICAgICA6IG1BdHRyaWJzKGF0dHJpYnMpLAotICAgICAgbVVuaWZvcm1zKHVu
aWZvcm1zKQorICAgICAgbVVuaWZvcm1zKHVuaWZvcm1zKSwKKyAgICAgIG1IYXNoRnVuY3Rpb24o
aGFzaEZ1bmN0aW9uKQogewogfQogCkBAIC0xOTYsMTAgKzIxMiwxNiBAQCBib29sIENvbGxlY3RB
dHRyaWJzVW5pZm9ybXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlKQogICAgICAgICAgICAgICAgIC8vIGNhbm5vdCBiZSBpbml0aWFsaXplZCBpbiBhIHNoYWRl
ciwgd2UgbXVzdCBoYXZlIG9ubHkKICAgICAgICAgICAgICAgICAvLyBUSW50ZXJtU3ltYm9sIG5v
ZGVzIGluIHRoZSBzZXF1ZW5jZS4KICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFibGUgIT0g
TlVMTCk7CisgICAgICAgICAgICAgICAgVFN0cmluZyBwcm9jZXNzZWRTeW1ib2w7CisgICAgICAg
ICAgICAgICAgaWYgKG1IYXNoRnVuY3Rpb24gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc2VkU3ltYm9sID0gdmFyaWFibGUtPmdldFN5bWJvbCgpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRyYXZl
cnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwgbUhhc2hGdW5jdGlvbik7
CiAgICAgICAgICAgICAgICAgZ2V0VmFyaWFibGVJbmZvKHZhcmlhYmxlLT5nZXRUeXBlKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRPcmlnaW5hbFN5bWJv
bCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0U3ltYm9s
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbUhhc2hGdW5jdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFy
aWFibGVJbmZvLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFi
bGVJbmZvLmgKaW5kZXggNjY3YWNhZi4uNDEzMGE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uaApAQCAtMTMsNiArMTMsOSBA
QAogLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSB2YXJpYWJsZS4KIC8vIEl0IGlzIGN1
cnJlbnRseSBiZWluZyB1c2VkIHRvIHN0b3JlIGluZm8gYWJvdXQgYWN0aXZlIGF0dHJpYnMgYW5k
IHVuaWZvcm1zLgogc3RydWN0IFRWYXJpYWJsZUluZm8geworICAgIFRWYXJpYWJsZUluZm8oU2hE
YXRhVHlwZSB0eXBlLCBpbnQgc2l6ZSk7CisgICAgVFZhcmlhYmxlSW5mbygpOworCiAgICAgVFBl
cnNpc3RTdHJpbmcgbmFtZTsKICAgICBUUGVyc2lzdFN0cmluZyBtYXBwZWROYW1lOwogICAgIFNo
RGF0YVR5cGUgdHlwZTsKQEAgLTI0LDcgKzI3LDggQEAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUVmFy
aWFibGVJbmZvPiBUVmFyaWFibGVJbmZvTGlzdDsKIGNsYXNzIENvbGxlY3RBdHRyaWJzVW5pZm9y
bXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6CiAgICAgQ29sbGVjdEF0dHJp
YnNVbmlmb3JtcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiB1bmlmb3Jtcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdW5pZm9ybXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwogICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKQEAgLTM4LDYgKzQyLDggQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBUVmFyaWFibGVJbmZvTGlzdCYgbUF0dHJpYnM7CiAgICAg
VFZhcmlhYmxlSW5mb0xpc3QmIG1Vbmlmb3JtczsKKworICAgIFNoSGFzaEZ1bmN0aW9uNjQgbUhh
c2hGdW5jdGlvbjsKIH07CiAKICNlbmRpZiAgLy8gQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxl
UGFja2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJs
ZVBhY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwYzRiYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
YXJpYWJsZVBhY2tlci5jcHAKQEAgLTAsMCArMSwyOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisj
aW5jbHVkZSAiY29tcGlsZXIvVmFyaWFibGVQYWNrZXIuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgorCituYW1lc3BhY2UgeworaW50IEdl
dFNvcnRPcmRlcihTaERhdGFUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIFNIX0ZMT0FUX01BVDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBT
SF9GTE9BVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgorICAgICAgICBjYXNlIFNI
X0JPT0xfVkVDNDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMz
OgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMzoK
KyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6CisgICAg
ICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMyOgorICAgICAg
ICAgICAgcmV0dXJuIDU7CisgICAgICAgIGNhc2UgU0hfRkxPQVQ6CisgICAgICAgIGNhc2UgU0hf
SU5UOgorICAgICAgICBjYXNlIFNIX0JPT0w6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRDoK
KyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl9F
WFRFUk5BTF9PRVM6CisgICAgICAgIGNhc2UgU0hfU0FNUExFUl8yRF9SRUNUX0FSQjoKKyAgICAg
ICAgICAgIHJldHVybiA2OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZh
bHNlKTsKKyAgICAgICAgICAgIHJldHVybiA3OworICAgIH0KK30KK30gICAgLy8gbmFtZXNwYWNl
CisKK2ludCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtQ29tcG9uZW50c1BlclJvdyhTaERhdGFUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZF
QzQ6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0
OgorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgorICAg
ICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBj
YXNlIFNIX0ZMT0FUX1ZFQzI6CisgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzI6CisgICAgICAgIGNh
c2UgU0hfQk9PTF9WRUMyOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgU0hf
RkxPQVQ6CisgICAgICAgIGNhc2UgU0hfSU5UOgorICAgICAgICBjYXNlIFNIX0JPT0w6CisgICAg
ICAgIGNhc2UgU0hfU0FNUExFUl8yRDoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSX0NVQkU6Cisg
ICAgICAgIGNhc2UgU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM6CisgICAgICAgIGNhc2UgU0hfU0FN
UExFUl8yRF9SRUNUX0FSQjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiA1OworICAg
IH0KK30KKworaW50IFZhcmlhYmxlUGFja2VyOjpHZXROdW1Sb3dzKFNoRGF0YVR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAg
ICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAg
ICAgIHJldHVybiAzOworICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgorICAgICAgICBjYXNlIFNIX0lO
VF9WRUM0OgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKKyAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUMzOgorICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgorICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgorICAgICAgICBjYXNlIFNIX0lOVF9W
RUMyOgorICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMjoKKyAgICAgICAgY2FzZSBTSF9GTE9BVDoK
KyAgICAgICAgY2FzZSBTSF9JTlQ6CisgICAgICAgIGNhc2UgU0hfQk9PTDoKKyAgICAgICAgY2Fz
ZSBTSF9TQU1QTEVSXzJEOgorICAgICAgICBjYXNlIFNIX1NBTVBMRVJfQ1VCRToKKyAgICAgICAg
Y2FzZSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzoKKyAgICAgICAgY2FzZSBTSF9TQU1QTEVSXzJE
X1JFQ1RfQVJCOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDsKKyAgICB9
Cit9CisKK3N0cnVjdCBUVmFyaWFibGVJbmZvQ29tcGFyZXIgeworICAgIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBUVmFyaWFibGVJbmZvJiBsaHMsIGNvbnN0IFRWYXJpYWJsZUluZm8mIHJocykgY29u
c3QKKyAgICB7CisgICAgICAgIGludCBsaHNTb3J0T3JkZXIgPSBHZXRTb3J0T3JkZXIobGhzLnR5
cGUpOworICAgICAgICBpbnQgcmhzU29ydE9yZGVyID0gR2V0U29ydE9yZGVyKHJocy50eXBlKTsK
KyAgICAgICAgaWYgKGxoc1NvcnRPcmRlciAhPSByaHNTb3J0T3JkZXIpIHsKKyAgICAgICAgICAg
IHJldHVybiBsaHNTb3J0T3JkZXIgPCByaHNTb3J0T3JkZXI7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gU29ydCBieSBsYXJnZXN0IGZpcnN0LgorICAgICAgICByZXR1cm4gbGhzLnNpemUgPiByaHMu
c2l6ZTsKKyAgICB9Cit9OworCit1bnNpZ25lZCBWYXJpYWJsZVBhY2tlcjo6bWFrZUNvbHVtbkZs
YWdzKGludCBjb2x1bW4sIGludCBudW1Db21wb25lbnRzUGVyUm93KQoreworICAgIHJldHVybiAo
KGtDb2x1bW5NYXNrIDw8IChrTnVtQ29sdW1ucyAtIG51bUNvbXBvbmVudHNQZXJSb3cpKSAmCisg
ICAgICAgICAgICAgICAgICAgIGtDb2x1bW5NYXNrKSA+PiBjb2x1bW47Cit9CisKK3ZvaWQgVmFy
aWFibGVQYWNrZXI6OmZpbGxDb2x1bW5zKGludCB0b3BSb3csIGludCBudW1Sb3dzLCBpbnQgY29s
dW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb2x1bW5GbGFn
cyA9IG1ha2VDb2x1bW5GbGFncyhjb2x1bW4sIG51bUNvbXBvbmVudHNQZXJSb3cpOworICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgbnVtUm93czsgKytyKSB7CisgICAgICAgIGludCByb3cgPSB0b3BS
b3cgKyByOworICAgICAgICBBU1NFUlQoKHJvd3NfW3Jvd10gJiBjb2x1bW5GbGFncykgPT0gMCk7
CisgICAgICAgIHJvd3NfW3Jvd10gfD0gY29sdW1uRmxhZ3M7CisgICAgfQorfQorCitib29sIFZh
cmlhYmxlUGFja2VyOjpzZWFyY2hDb2x1bW4oaW50IGNvbHVtbiwgaW50IG51bVJvd3MsIGludCog
ZGVzdFJvdywgaW50KiBkZXN0U2l6ZSkKK3sKKyAgICBBU1NFUlQoZGVzdFJvdyk7CisKKyAgICBm
b3IgKDsgdG9wTm9uRnVsbFJvd18gPCBtYXhSb3dzXyAmJiByb3dzX1t0b3BOb25GdWxsUm93X10g
PT0ga0NvbHVtbk1hc2s7CisgICAgICAgICArK3RvcE5vbkZ1bGxSb3dfKSB7CisgICAgfQorCisg
ICAgZm9yICg7IGJvdHRvbU5vbkZ1bGxSb3dfID49IDAgJiYgcm93c19bYm90dG9tTm9uRnVsbFJv
d19dID09IGtDb2x1bW5NYXNrOworICAgICAgICAgLS1ib3R0b21Ob25GdWxsUm93XykgeworICAg
IH0KKworICAgIGlmIChib3R0b21Ob25GdWxsUm93XyAtIHRvcE5vbkZ1bGxSb3dfICsgMSA8IG51
bVJvd3MpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIGNv
bHVtbkZsYWdzID0gbWFrZUNvbHVtbkZsYWdzKGNvbHVtbiwgMSk7CisgICAgaW50IHRvcEdvb2RS
b3cgPSAwOworICAgIGludCBzbWFsbGVzdEdvb2RUb3AgPSAtMTsKKyAgICBpbnQgc21hbGxlc3RH
b29kU2l6ZSA9IG1heFJvd3NfICsgMTsKKyAgICBpbnQgYm90dG9tUm93ID0gYm90dG9tTm9uRnVs
bFJvd18gKyAxOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBmb3IgKGludCByb3cgPSB0
b3BOb25GdWxsUm93Xzsgcm93IDw9IGJvdHRvbVJvdzsgKytyb3cpIHsKKyAgICAgICAgYm9vbCBy
b3dFbXB0eSA9IHJvdyA8IGJvdHRvbVJvdyA/ICgocm93c19bcm93XSAmIGNvbHVtbkZsYWdzKSA9
PSAwKSA6IGZhbHNlOworICAgICAgICBpZiAocm93RW1wdHkpIHsKKyAgICAgICAgICAgIGlmICgh
Zm91bmQpIHsKKyAgICAgICAgICAgICAgICB0b3BHb29kUm93ID0gcm93OworICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgICAgIGludCBzaXplID0gcm93IC0gdG9w
R29vZFJvdzsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSBudW1Sb3dzICYmIHNpemUgPCBz
bWFsbGVzdEdvb2RTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0R29vZFNpemUg
PSBzaXplOworICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdEdvb2RUb3AgPSB0b3BHb29kUm93
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvdW5kID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNtYWxsZXN0R29vZFRvcCA8IDApIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgICpkZXN0Um93ID0gc21hbGxlc3RH
b29kVG9wOworICAgIGlmIChkZXN0U2l6ZSkgeworICAgICAgICAqZGVzdFNpemUgPSBzbWFsbGVz
dEdvb2RTaXplOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWYXJpYWJsZVBh
Y2tlcjo6Q2hlY2tWYXJpYWJsZXNXaXRoaW5QYWNraW5nTGltaXRzKGludCBtYXhWZWN0b3JzLCBj
b25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKQoreworICAgIEFTU0VSVChtYXhW
ZWN0b3JzID4gMCk7CisgICAgbWF4Um93c18gPSBtYXhWZWN0b3JzOworICAgIHRvcE5vbkZ1bGxS
b3dfID0gMDsKKyAgICBib3R0b21Ob25GdWxsUm93XyA9IG1heFJvd3NfIC0gMTsKKyAgICBUVmFy
aWFibGVJbmZvTGlzdCB2YXJpYWJsZXMoaW5fdmFyaWFibGVzKTsKKworICAgIC8vIEFzIHBlciBH
TFNMIDEuMDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMgYXJlIHBhY2tlZCBpbiBz
cGVjaWZpYworICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6ZSBvZiBhcnJheSwgbGFy
Z2VzdCBmaXJzdC4KKyAgICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2luKCksIHZhcmlhYmxlcy5l
bmQoKSwgVFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOworICAgIHJvd3NfLmNsZWFyKCk7CisgICAg
cm93c18ucmVzaXplKG1heFZlY3RvcnMsIDApOworCisgICAgLy8gUGFja3MgdGhlIDQgY29sdW1u
IHZhcmlhYmxlcy4KKyAgICBzaXplX3QgaWkgPSAwOworICAgIGZvciAoOyBpaSA8IHZhcmlhYmxl
cy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUg
PSB2YXJpYWJsZXNbaWldOworICAgICAgICBpZiAoR2V0TnVtQ29tcG9uZW50c1BlclJvdyh2YXJp
YWJsZS50eXBlKSAhPSA0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICB0b3BOb25GdWxsUm93XyArPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUu
c2l6ZTsKKyAgICB9CisKKyAgICBpZiAodG9wTm9uRnVsbFJvd18gPiBtYXhSb3dzXykgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUGFja3MgdGhlIDMgY29sdW1uIHZh
cmlhYmxlcy4KKyAgICBpbnQgbnVtM0NvbHVtblJvd3MgPSAwOworICAgIGZvciAoOyBpaSA8IHZh
cmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFy
aWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBpZiAoR2V0TnVtQ29tcG9uZW50c1BlclJv
dyh2YXJpYWJsZS50eXBlKSAhPSAzKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBudW0zQ29sdW1uUm93cyArPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFy
aWFibGUuc2l6ZTsKKyAgICB9CisKKyAgICBpZiAodG9wTm9uRnVsbFJvd18gKyBudW0zQ29sdW1u
Um93cyA+IG1heFJvd3NfKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBm
aWxsQ29sdW1ucyh0b3BOb25GdWxsUm93XywgbnVtM0NvbHVtblJvd3MsIDAsIDMpOworCisgICAg
Ly8gUGFja3MgdGhlIDIgY29sdW1uIHZhcmlhYmxlcy4KKyAgICBpbnQgdG9wMkNvbHVtblJvdyA9
IHRvcE5vbkZ1bGxSb3dfICsgbnVtM0NvbHVtblJvd3M7CisgICAgaW50IHR3b0NvbHVtblJvd3NB
dmFpbGFibGUgPSBtYXhSb3dzXyAtIHRvcDJDb2x1bW5Sb3c7CisgICAgaW50IHJvd3NBdmFpbGFi
bGVJbkNvbHVtbnMwMSA9IHR3b0NvbHVtblJvd3NBdmFpbGFibGU7CisgICAgaW50IHJvd3NBdmFp
bGFibGVJbkNvbHVtbnMyMyA9IHR3b0NvbHVtblJvd3NBdmFpbGFibGU7CisgICAgZm9yICg7IGlp
IDwgdmFyaWFibGVzLnNpemUoKTsgKytpaSkgeworICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZv
JiB2YXJpYWJsZSA9IHZhcmlhYmxlc1tpaV07CisgICAgICAgIGlmIChHZXROdW1Db21wb25lbnRz
UGVyUm93KHZhcmlhYmxlLnR5cGUpICE9IDIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGludCBudW1Sb3dzID0gR2V0TnVtUm93cyh2YXJpYWJsZS50eXBlKSAqIHZh
cmlhYmxlLnNpemU7CisgICAgICAgIGlmIChudW1Sb3dzIDw9IHJvd3NBdmFpbGFibGVJbkNvbHVt
bnMwMSkgeworICAgICAgICAgICAgcm93c0F2YWlsYWJsZUluQ29sdW1uczAxIC09IG51bVJvd3M7
CisgICAgICAgIH0gZWxzZSBpZiAobnVtUm93cyA8PSByb3dzQXZhaWxhYmxlSW5Db2x1bW5zMjMp
IHsKKyAgICAgICAgICAgIHJvd3NBdmFpbGFibGVJbkNvbHVtbnMyMyAtPSBudW1Sb3dzOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaW50IG51bVJvd3NVc2VkSW5Db2x1bW5zMDEgPQorICAgICAgICB0d29Db2x1bW5S
b3dzQXZhaWxhYmxlIC0gcm93c0F2YWlsYWJsZUluQ29sdW1uczAxOworICAgIGludCBudW1Sb3dz
VXNlZEluQ29sdW1uczIzID0KKyAgICAgICAgdHdvQ29sdW1uUm93c0F2YWlsYWJsZSAtIHJvd3NB
dmFpbGFibGVJbkNvbHVtbnMyMzsKKyAgICBmaWxsQ29sdW1ucyh0b3AyQ29sdW1uUm93LCBudW1S
b3dzVXNlZEluQ29sdW1uczAxLCAwLCAyKTsKKyAgICBmaWxsQ29sdW1ucyhtYXhSb3dzXyAtIG51
bVJvd3NVc2VkSW5Db2x1bW5zMjMsIG51bVJvd3NVc2VkSW5Db2x1bW5zMjMsCisgICAgICAgICAg
ICAgICAgMiwgMik7CisKKyAgICAvLyBQYWNrcyB0aGUgMSBjb2x1bW4gdmFyaWFibGVzLgorICAg
IGZvciAoOyBpaSA8IHZhcmlhYmxlcy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgY29uc3QgVFZh
cmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaWldOworICAgICAgICBBU1NFUlQoMSA9
PSBHZXROdW1Db21wb25lbnRzUGVyUm93KHZhcmlhYmxlLnR5cGUpKTsKKyAgICAgICAgaW50IG51
bVJvd3MgPSBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpICogdmFyaWFibGUuc2l6ZTsKKyAgICAg
ICAgaW50IHNtYWxsZXN0Q29sdW1uID0gLTE7CisgICAgICAgIGludCBzbWFsbGVzdFNpemUgPSBt
YXhSb3dzXyArIDE7CisgICAgICAgIGludCB0b3BSb3cgPSAtMTsKKyAgICAgICAgZm9yIChpbnQg
Y29sdW1uID0gMDsgY29sdW1uIDwga051bUNvbHVtbnM7ICsrY29sdW1uKSB7CisgICAgICAgICAg
ICBpbnQgcm93ID0gMDsKKyAgICAgICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgICAgIGlm
IChzZWFyY2hDb2x1bW4oY29sdW1uLCBudW1Sb3dzLCAmcm93LCAmc2l6ZSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc2l6ZSA8IHNtYWxsZXN0U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBz
bWFsbGVzdFNpemUgPSBzaXplOworICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdENvbHVtbiA9
IGNvbHVtbjsKKyAgICAgICAgICAgICAgICAgICAgdG9wUm93ID0gcm93OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzbWFsbGVzdENv
bHVtbiA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZpbGxDb2x1bW5zKHRvcFJvdywgbnVtUm93cywgc21hbGxlc3RDb2x1bW4sIDEpOworICAg
IH0KKworICAgIEFTU0VSVCh2YXJpYWJsZXMuc2l6ZSgpID09IGlpKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZhcmlhYmxlUGFja2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVmFyaWFibGVQYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44OTg3MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1ZhcmlhYmxlUGFja2VyLmgKQEAgLTAsMCArMSw0MSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBfVkFSSUFCTEVQQUNLRVJfSU5DTFVERURfCisjZGVmaW5lIF9WQVJJ
QUJMRVBBQ0tFUl9JTkNMVURFRF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlICJjb21w
aWxlci9TaEhhbmRsZS5oIgorCitjbGFzcyBWYXJpYWJsZVBhY2tlciB7CisgcHVibGljOgorICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZhcmlhYmxlcyBwYWNrIGluIG1heFZl
Y3RvcnMgZm9sbG93aW5nCisgICAgLy8gdGhlIHBhY2tpbmcgcnVsZXMgZnJvbSB0aGUgR0xTTCAx
LjAxNyBzcGVjLCBBcHBlbmRpeCBBLCBzZWN0aW9uIDcuCisgICAgYm9vbCBDaGVja1ZhcmlhYmxl
c1dpdGhpblBhY2tpbmdMaW1pdHMoCisgICAgICAgIGludCBtYXhWZWN0b3JzLAorICAgICAgICBj
b25zdCBUVmFyaWFibGVJbmZvTGlzdCYgaW5fdmFyaWFibGVzKTsKKworICAgIC8vIEdldHMgaG93
IG1hbnkgY29tcG9uZW50cyBpbiBhIHJvdyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMg
aW50IEdldE51bUNvbXBvbmVudHNQZXJSb3coU2hEYXRhVHlwZSB0eXBlKTsKKworICAgIC8vIEdl
dHMgaG93IG1hbnkgcm93cyBhIGRhdGEgdHlwZSB0YWtlcy4KKyAgICBzdGF0aWMgaW50IEdldE51
bVJvd3MoU2hEYXRhVHlwZSB0eXBlKTsKKworIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGlu
dCBrTnVtQ29sdW1ucyA9IDQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtDb2x1bW5NYXNr
ID0gKDEgPDwga051bUNvbHVtbnMpIC0gMTsKKworICAgIHVuc2lnbmVkIG1ha2VDb2x1bW5GbGFn
cyhpbnQgY29sdW1uLCBpbnQgbnVtQ29tcG9uZW50c1BlclJvdyk7CisgICAgdm9pZCBmaWxsQ29s
dW1ucyhpbnQgdG9wUm93LCBpbnQgbnVtUm93cywgaW50IGNvbHVtbiwgaW50IG51bUNvbXBvbmVu
dHNQZXJSb3cpOworICAgIGJvb2wgc2VhcmNoQ29sdW1uKGludCBjb2x1bW4sIGludCBudW1Sb3dz
LCBpbnQqIGRlc3RSb3csIGludCogZGVzdFNpemUpOworCisgICAgaW50IHRvcE5vbkZ1bGxSb3df
OworICAgIGludCBib3R0b21Ob25GdWxsUm93XzsKKyAgICBpbnQgbWF4Um93c187CisgICAgc3Rk
Ojp2ZWN0b3I8dW5zaWduZWQ+IHJvd3NfOworfTsKKworI2VuZGlmIC8vIF9WQVJJQUJMRVBBQ0tF
Ul9JTkNMVURFRF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9WZXJzaW9uR0xTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVmVyc2lvbkdMU0wuY3BwCmluZGV4IDI2Y2VlMDUuLjdhODJiYjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOSwx
NyArOSwyMiBAQAogc3RhdGljIGNvbnN0IGludCBHTFNMX1ZFUlNJT05fMTEwID0gMTEwOwogc3Rh
dGljIGNvbnN0IGludCBHTFNMX1ZFUlNJT05fMTIwID0gMTIwOwogCi0vLyBXZSBuZWVkIHRvIHNj
YW4gZm9yIHRocmVlIHRoaW5nczoKKy8vIFdlIG5lZWQgdG8gc2NhbiBmb3IgdGhlIGZvbGxvd2lu
ZzoKIC8vIDEuICJpbnZhcmlhbnQiIGtleXdvcmQ6IFRoaXMgY2FuIG9jY3VyIGluIGJvdGggLSB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMKIC8vICAgIGJ1dCBvbmx5IGF0IHRoZSBnbG9iYWwg
c2NvcGUuCiAvLyAyLiAiZ2xfUG9pbnRDb29yZCIgYnVpbHQtaW4gdmFyaWFibGU6IFRoaXMgY2Fu
IG9ubHkgb2NjdXIgaW4gZnJhZ21lbnQgc2hhZGVyCiAvLyAgICBidXQgaW5zaWRlIGFueSBzY29w
ZS4KIC8vIDMuIENhbGwgdG8gYSBtYXRyaXggY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIG1hdHJp
eCBhcyBhcmd1bWVudC4KIC8vICAgIChUaGVzZSBjb25zdHJ1Y3RvcnMgd2VyZSByZXNlcnZlZCBp
biBHTFNMIHZlcnNpb24gMS4xMC4pCi0vLwotLy8gSWYgaXQgd2VyZW4ndCBmb3IgKDMpIHRoZW4g
d2Ugd291bGQgb25seSBuZWVkIHRvIHNjYW4gdGhlIGdsb2JhbAotLy8gc2NvcGUgb2YgdGhlIHZl
cnRleCBzaGFkZXIuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gc2NhbiB0aGUgZW50aXJlCi0vLyBzaGFk
ZXIgaW4gYm90aCBjYXNlcy4KKy8vIDQuIEFycmF5cyBhcyAib3V0IiBmdW5jdGlvbiBwYXJhbWV0
ZXJzLgorLy8gICAgR0xTTCBzcGVjIHNlY3Rpb24gNi4xLjE6ICJXaGVuIGNhbGxpbmcgYSBmdW5j
dGlvbiwgZXhwcmVzc2lvbnMgdGhhdCBkbworLy8gICAgbm90IGV2YWx1YXRlIHRvIGwtdmFsdWVz
IGNhbm5vdCBiZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBkZWNsYXJlZCBhcworLy8gICAgb3V0IG9y
IGlub3V0LiIKKy8vICAgIEdMU0wgMS4xIHNlY3Rpb24gNS44OiAiT3RoZXIgYmluYXJ5IG9yIHVu
YXJ5IGV4cHJlc3Npb25zLAorLy8gICAgbm9uLWRlcmVmZXJlbmNlZCBhcnJheXMsIGZ1bmN0aW9u
IG5hbWVzLCBzd2l6emxlcyB3aXRoIHJlcGVhdGVkIGZpZWxkcywKKy8vICAgIGFuZCBjb25zdGFu
dHMgY2Fubm90IGJlIGwtdmFsdWVzLiIKKy8vICAgIEdMU0wgMS4yIHJlbGF4ZWQgdGhlIHJlc3Ry
aWN0aW9uIG9uIGFycmF5cywgc2VjdGlvbiA1Ljg6ICJWYXJpYWJsZXMgdGhhdAorLy8gICAgYXJl
IGJ1aWx0LWluIHR5cGVzLCBlbnRpcmUgc3RydWN0dXJlcyBvciBhcnJheXMuLi4gYXJlIGFsbCBs
LXZhbHVlcy4iCiAvLwogLy8gVE9ETyhhbG9rcCk6IFRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzIG9m
IGludmFyaWFudCBkZWNhbGFyYXRpb24gZ2V0IGxvc3QKIC8vIGR1cmluZyBwYXJzaW5nIC0gdGhl
eSBkbyBub3QgZ2V0IGNhcnJpZWQgb3ZlciB0byB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCkBAIC03
OSw2ICs4NCwyNiBAQCBib29sIFRWZXJzaW9uR0xTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUqIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9
CisgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6IHsKKyAgICAgICAgY29uc3QgVEludGVybVNlcXVl
bmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBmb3IgKFRJbnRlcm1T
ZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBhcmFtcy5iZWdpbigpOworICAgICAgICAg
ICAgIGl0ZXIgIT0gcGFyYW1zLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFRJbnRlcm1UeXBlZCogcGFyYW0gPSAoKml0ZXIpLT5nZXRBc1R5cGVkKCk7CisgICAg
ICAgICAgICBpZiAocGFyYW0tPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHBhcmFtLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQpIHx8IChxdWFsaWZpZXIgPT0gIEV2
cUluT3V0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZl
cnNpb24oR0xTTF9WRVJTSU9OXzEyMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBGdWxs
eSBwcm9jZXNzZWQuIE5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCisgICAgICAgIHZpc2l0Q2hp
bGRyZW4gPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CiAgICAgICBjYXNlIEVPcENv
bnN0cnVjdE1hdDI6CiAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CiAgICAgICBjYXNlIEVP
cENvbnN0cnVjdE1hdDQ6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9WZXJzaW9uR0xTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1ZlcnNpb25HTFNMLmgKaW5kZXggMzc2ZmNiOC4uMWMxY2IxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKQEAgLTIy
LDE0ICsyMiwxOCBAQAogLy8gICAtIGMrKyBzdHlsZSBuYW1lIGhpZGluZyBydWxlcy4KIC8vICAg
LSBidWlsdC1pbiB2YXJpYWJsZSBnbF9Qb2ludENvb3JkIGZvciBmcmFnbWVudCBzaGFkZXJzLgog
Ly8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFraW5nIG1hdHJpeCBhcyBhcmd1bWVudC4KKy8v
ICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAvLwogY2xhc3MgVFZlcnNp
b25HTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgogICAgIFRWZXJzaW9u
R0xTTChTaFNoYWRlclR5cGUgdHlwZSk7CiAKLSAgICAvLyBSZXR1cm5zIDEyMCBpZiAiaW52YXJp
YW50IiBrZXl3b3JkLCAiZ2xfUG9pbnRDb29yZCIsIG9yCi0gICAgLy8gbWF0cml4L21hdHJpeCBj
b25zdHJ1Y3RvcnMgYXJlIHVzZWQgaW4gdGhlIHNoYWRlci4gRWxzZSAxMTAgaXMKLSAgICAvLyBy
ZXR1cm5lZC4KKyAgICAvLyBSZXR1cm5zIDEyMCBpZiB0aGUgZm9sbG93aW5nIGlzIHVzZWQgdGhl
IHNoYWRlcjoKKyAgICAvLyAtICJpbnZhcmlhbnQiLAorICAgIC8vIC0gImdsX1BvaW50Q29vcmQi
LAorICAgIC8vIC0gbWF0cml4L21hdHJpeCBjb25zdHJ1Y3RvcnMKKyAgICAvLyAtIGFycmF5ICJv
dXQiIHBhcmFtZXRlcnMKKyAgICAvLyBFbHNlIDExMCBpcyByZXR1cm5lZC4KICAgICBpbnQgZ2V0
VmVyc2lvbigpIHsgcmV0dXJuIG1WZXJzaW9uOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
eW1ib2woVEludGVybVN5bWJvbCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLmwKaW5kZXggYjlhMzAyZC4uODMwMGZmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCkBAIC0zOCw3ICszOCw3IEBA
IFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KICV7
CiAjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNl
SGVscGVyLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3V0aWwuaCIKICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCkBAIC0yNzIsMTQ4ICsyNzIs
MTMgQEAgTyAgICAgICAgICAgWzAtN10KIAogJSUKIAotI2lmICFBTkdMRV9VU0VfTkVXX1BSRVBS
T0NFU1NPUgotZXh0ZXJuICJDIiB7Ci0vLyBQcmVwcm9jZXNzb3IgaW50ZXJmYWNlLgotI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCi0KLWV4dGVybiBpbnQgSW5p
dFByZXByb2Nlc3NvcigpOwotZXh0ZXJuIGludCBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOwotZXh0
ZXJuIHZvaWQgUHJlZGVmaW5lSW50TWFjcm8oY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsK
LQotI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCi0gICAgVFBhcnNlQ29udGV4dCogY29udGV4
dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCi0gICAgc3RydWN0IHl5Z3V0c190KiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKLQotLy8gUHJlcHJvY2Vzc29y
IGNhbGxiYWNrcy4KLXZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQotewotICAg
IFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250ZXh0LT50cmFjZShtc2cpOwotfQotCi12b2lk
IENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiKTsKLX0KLQot
dm9pZCBDUFBTaEluZm9Mb2dNc2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKLSAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7Ci0gICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotfQotCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNvbnN0IGNoYXIg
Km1zZykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+ZXJyb3IoeXls
aW5lbm8sIG1zZywgIiIpOwotICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLX0KLQotdm9pZCBTZXRM
aW5lTnVtYmVyKGludCBsaW5lKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQg
c3RyaW5nID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwp
OwotICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7Ci19Ci0KLXZv
aWQgU2V0U3RyaW5nTnVtYmVyKGludCBzdHJpbmcpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHAp
OwotICAgIGludCBsaW5lID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sIE5VTEws
ICZsaW5lKTsKLSAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOwot
fQotCi1pbnQgR2V0U3RyaW5nTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0g
ICAgaW50IHN0cmluZyA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5n
LCBOVUxMKTsKLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1pbnQgR2V0TGluZU51bWJlcigpCi17
Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGludCBsaW5lID0gMDsKLSAgICBEZWNvZGVT
b3VyY2VMb2MoeXlsaW5lbm8sIE5VTEwsICZsaW5lKTsKLSAgICByZXR1cm4gbGluZTsKLX0KLQot
dm9pZCBJbmNMaW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50
IHN0cmluZyA9IDAsIGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0
cmluZywgJmxpbmUpOwotICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9jKHN0cmluZywgKyts
aW5lKTsKLX0KLQotdm9pZCBEZWNMaW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNw
cCk7Ci0gICAgaW50IHN0cmluZyA9IDAsIGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5
eWxpbmVubywgJnN0cmluZywgJmxpbmUpOwotICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9j
KHN0cmluZywgLS1saW5lKTsKLX0KLQotdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRv
a2VucywgaW50IG51bVRva2VucykKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0KLSAgICBp
ZiAobnVtVG9rZW5zICE9IDQpIHJldHVybjsKLSAgICBpZiAoc3RyY21wKHRva2Vuc1sxXSwgIigi
KSAhPSAwKSByZXR1cm47Ci0gICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikgIT0gMCkgcmV0
dXJuOwotCi0gICAgY29udGV4dC0+aGFuZGxlUHJhZ21hRGlyZWN0aXZlKHl5bGluZW5vLCB0b2tl
bnNbMF0sIHRva2Vuc1syXSk7Ci19Ci0KLXZvaWQgU3RvcmVTdHIoY29uc3QgY2hhciAqc3RyaW5n
KQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBUU3RyaW5nIHN0clNyYzsKLSAgICBz
dHJTcmMgPSBUU3RyaW5nKHN0cmluZyk7Ci0KLSAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0gY29u
dGV4dC0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKLX0KLQotY29uc3QgY2hhciogR2V0U3Ry
ZnJvbVRTdHIodm9pZCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY3BwLT5FcnJN
c2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnLmNfc3RyKCk7Ci0gICAgcmV0dXJuIGNwcC0+RXJyTXNn
OwotfQotCi12b2lkIFJlc2V0VFN0cmluZyh2b2lkKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3Bw
KTsKLSAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0gIiI7Ci19Ci0KLXZvaWQgdXBkYXRlRXh0ZW5z
aW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCi17
Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmhhbmRsZUV4dGVuc2lvbkRp
cmVjdGl2ZSh5eWxpbmVubywgZXh0TmFtZSwgYmVoYXZpb3IpOwotfQotfSAgLy8gZXh0ZXJuICJD
IgotI2VuZGlmICAvLyAhQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKLQogaW50IHN0cmluZ19p
bnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7Ci0gICAg
aW50IGxlbiA9IDA7Ci0KLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogICAgIHBwOjpU
b2tlbiB0b2tlbjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4
KCZ0b2tlbik7Ci0gICAgbGVuID0gdG9rZW4udHlwZSA9PSBwcDo6VG9rZW46OkxBU1QgPyAwIDog
dG9rZW4udmFsdWUuc2l6ZSgpOworICAgIGludCBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tl
bjo6TEFTVCA/IDAgOiB0b2tlbi50ZXh0LnNpemUoKTsKICAgICBpZiAoKGxlbiA+IDApICYmIChs
ZW4gPCBtYXhfc2l6ZSkpCi0gICAgICAgIG1lbWNweShidWYsIHRva2VuLnZhbHVlLmNfc3RyKCks
IGxlbik7CisgICAgICAgIG1lbWNweShidWYsIHRva2VuLnRleHQuY19zdHIoKSwgbGVuKTsKICAg
ICB5eXNldF9saW5lbm8oRW5jb2RlU291cmNlTG9jKHRva2VuLmxvY2F0aW9uLmZpbGUsIHRva2Vu
LmxvY2F0aW9uLmxpbmUpLCB5eXNjYW5uZXIpOwotI2Vsc2UKLSAgICBsZW4gPSB5eWxleF9DUFAo
YnVmLCBtYXhfc2l6ZSk7Ci0jZW5kaWYgIC8vIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAK
ICAgICBpZiAobGVuID49IG1heF9zaXplKQogICAgICAgICBZWV9GQVRBTF9FUlJPUigiSW5wdXQg
YnVmZmVyIG92ZXJmbG93Iik7CkBAIC00NzMsOSArMzM4LDYgQEAgaW50IGdsc2xhbmdfZmluYWxp
emUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAgIGNvbnRleHQtPnNjYW5uZXIgPSBOVUxM
OwogICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiAKLSNpZiAhQU5HTEVfVVNFX05FV19QUkVQ
Uk9DRVNTT1IKLSAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOwotI2VuZGlmCiAgICAgcmV0dXJu
IDA7CiB9CiAKQEAgLTQ4NiwyNyArMzQ4LDE0IEBAIGludCBnbHNsYW5nX3NjYW4oaW50IGNvdW50
LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAogICAgIGNv
bnRleHQtPkFmdGVyRU9GID0gZmFsc2U7CiAKICAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nv
ci4KLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogICAgIGlmICghY29udGV4dC0+cHJl
cHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIDE7
Ci0jZWxzZQotICAgIGlmIChJbml0UHJlcHJvY2Vzc29yKCkpCi0gICAgICAgIHJldHVybiAxOwot
ICAgIGNwcC0+cEMgPSBjb250ZXh0OwotICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsK
LSAgICBpZiAoSW5pdFNjYW5uZXJJbnB1dChjcHAsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCi0g
ICAgICAgIHJldHVybiAxOwotI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgog
CiAgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CiAgICAg
Zm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRCZWhhdmlv
ci5iZWdpbigpOwogICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlvci5lbmQoKTsgKytpdGVyKSB7
Ci0jaWYgQU5HTEVfVVNFX05FV19QUkVQUk9DRVNTT1IKICAgICAgICAgY29udGV4dC0+cHJlcHJv
Y2Vzc29yLnByZWRlZmluZU1hY3JvKGl0ZXItPmZpcnN0LmNfc3RyKCksIDEpOwotI2Vsc2UKLSAg
ICAgICAgUHJlZGVmaW5lSW50TWFjcm8oaXRlci0+Zmlyc3QuY19zdHIoKSwgMSk7Ci0jZW5kaWYK
ICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcueQppbmRleCAzY2FkMzM1Li43Y2Q0OTc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkKQEAgLTM0MCwxOCArMzQw
LDEwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0
UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKiQzLnN0cmluZykuc2l6ZSgpKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHMubnVtID09IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3Qo
ZmllbGRzLm9mZnNldHNbMF0pOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
ZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4
RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOwotICAgICAgICAgICAgICAgICAgICAkJC0+c2V0
VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSkpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9y
U3RyaW5nID0gKiQzLnN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywgJDMubGluZSk7
Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4
KEVPcFZlY3RvclN3aXp6bGUsICQxLCBpbmRleCwgJDIubGluZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lv
bigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3Ry
aW5nOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICQzLmxpbmUpOworICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICQxLCBp
bmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdl
dEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVj
dG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCQx
LT5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKQEAgLTEy
MTEsNyArMTIwMyw3IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQkLnR5cGUpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29u
c3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50
eXBlLCBmYWxzZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CkBAIC0xMjI0LDcgKzEyMTYsNyBAQCBpbml0X2RlY2xh
cmF0b3JfbGlzdAogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygkMy5saW5lLCAkMS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAot
ICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMu
c3RyaW5nLCAkMS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgJCQgPSAkMTsKQEAgLTEyNDIsNyArMTIzNCw3
IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNr
KCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+bm9u
SW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJCA9ICQxOwpAQCAt
MTI5Niw3ICsxMjg4LDcgQEAgc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQkLnR5cGUpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29u
c3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUpKQorICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkJC50
eXBlLCBmYWxzZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgICQkLnR5cGUgPSAkMTsKQEAgLTEzMjcsNyArMTMxOSw3IEBAIHNpbmds
ZV9kZWNsYXJhdGlvbgogICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjaygkMi5saW5lLCAkMSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0
cmluZywgJDEpKQorICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygk
Mi5saW5lLCAqJDIuc3RyaW5nLCAkMSwgdHJ1ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKICAgICAgICAgJCQudHlwZSA9ICQxOwpAQCAtMjAzNyw2ICsyMDI5LDE1IEBAIGV4
dGVybmFsX2RlY2xhcmF0aW9uCiBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgOiBmdW5jdGlvbl9w
cm90b3R5cGUgewogICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gJDEuZnVuY3Rpb247Cisg
ICAgICAgIAorICAgICAgICBjb25zdCBUU3ltYm9sICpidWlsdEluID0gY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKGJ1aWx0SW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQxLmxpbmUsICJidWlsdC1pbiBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZGVmaW5lZCIsIGZ1
bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0
YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24t
PmdldE1hbmdsZWROYW1lKCkpKTsKICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2
RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUg
c2VlbiBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfbGV4LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nX2xleC5jcHAKaW5kZXggYTNiZmExMy4uZjY1MWRmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCkBA
IC02OCw2ICs2OCw3IEBAIHR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7CiB0eXBlZGVmIHVp
bnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwogdHlw
ZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2
NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7CiB0eXBlZGVmIHNo
b3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0zNzgsNyArMzc5LDcgQEAgc3RhdGljIHZvaWQgeXlf
ZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7CiAg
Ki8KICNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCiAJeXlnLT55eXRleHRfcHRyID0geXlf
YnA7IFwKLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5eWxlbmcgPSAo
eXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKIAl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9j
cDsgXAogCSp5eV9jcCA9ICdcMCc7IFwKIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKQEAgLTgw
Nyw3ICs4MDgsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhbmdf
bGV4LmNwcCkuCiAKICNpbmNsdWRlICJjb21waWxlci9nbHNsYW5nLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvUGFyc2VIZWxwZXIuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L1Rva2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdXRpbC5oIgogI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCiAKQEAgLTI5
NDcsMTQ4ICsyOTQ4LDEzIEBAIHZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQogCiAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgogCi0jaWYgIUFOR0xF
X1VTRV9ORVdfUFJFUFJPQ0VTU09SCi1leHRlcm4gIkMiIHsKLS8vIFByZXByb2Nlc3NvciBpbnRl
cmZhY2UuCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKLQot
ZXh0ZXJuIGludCBJbml0UHJlcHJvY2Vzc29yKCk7Ci1leHRlcm4gaW50IEZpbmFsaXplUHJlcHJv
Y2Vzc29yKCk7Ci1leHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1l
LCBpbnQgdmFsdWUpOwotCi0jZGVmaW5lIFNFVFVQX0NPTlRFWFQocHApIFwKLSAgICBUUGFyc2VD
b250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQqKSBwcC0+cEM7IFwKLSAgICBzdHJ1Y3Qg
eXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOwotCi0v
LyBQcmVwcm9jZXNzb3IgY2FsbGJhY2tzLgotdm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFy
ICptc2cpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPnRyYWNlKG1z
Zyk7Ci19Ci0KLXZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sIG1z
ZywgIiIpOwotfQotCi12b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0g
ICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2cs
ICIiKTsKLSAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLXZvaWQgQ1BQRXJyb3JUb0luZm9M
b2coY29uc3QgY2hhciAqbXNnKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKLSAgICBjb250
ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIik7Ci0gICAgY29udGV4dC0+cmVjb3ZlcigpOwot
fQotCi12b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChj
cHApOwotICAgIGludCBzdHJpbmcgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywg
JnN0cmluZywgTlVMTCk7Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBs
aW5lKTsKLX0KLQotdm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50IHN0cmluZykKLXsKLSAgICBTRVRV
UF9DT05URVhUKGNwcCk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIERlY29kZVNvdXJjZUxvYyh5
eWxpbmVubywgTlVMTCwgJmxpbmUpOwotICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9jKHN0
cmluZywgbGluZSk7Ci19Ci0KLWludCBHZXRTdHJpbmdOdW1iZXIoKQotewotICAgIFNFVFVQX0NP
TlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMDsKLSAgICBEZWNvZGVTb3VyY2VMb2MoeXls
aW5lbm8sICZzdHJpbmcsIE5VTEwpOwotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLWludCBHZXRM
aW5lTnVtYmVyKCkKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgaW50IGxpbmUgPSAw
OwotICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgTlVMTCwgJmxpbmUpOwotICAgIHJldHVy
biBsaW5lOwotfQotCi12b2lkIEluY0xpbmVOdW1iZXIoKQotewotICAgIFNFVFVQX0NPTlRFWFQo
Y3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7Ci0gICAgRGVjb2RlU291cmNlTG9j
KHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7Ci0gICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VM
b2Moc3RyaW5nLCArK2xpbmUpOwotfQotCi12b2lkIERlY0xpbmVOdW1iZXIoKQotewotICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKLSAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7Ci0gICAgRGVj
b2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7Ci0gICAgeXlsaW5lbm8gPSBF
bmNvZGVTb3VyY2VMb2Moc3RyaW5nLCAtLWxpbmUpOwotfQotCi12b2lkIEhhbmRsZVByYWdtYShj
b25zdCBjaGFyICoqdG9rZW5zLCBpbnQgbnVtVG9rZW5zKQotewotICAgIFNFVFVQX0NPTlRFWFQo
Y3BwKTsKLQotICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgcmV0dXJuOwotICAgIGlmIChzdHJjbXAo
dG9rZW5zWzFdLCAiKCIpICE9IDApIHJldHVybjsKLSAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwg
IikiKSAhPSAwKSByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5oYW5kbGVQcmFnbWFEaXJlY3RpdmUo
eXlsaW5lbm8sIHRva2Vuc1swXSwgdG9rZW5zWzJdKTsKLX0KLQotdm9pZCBTdG9yZVN0cihjb25z
dCBjaGFyICpzdHJpbmcpCi17Ci0gICAgU0VUVVBfQ09OVEVYVChjcHApOwotICAgIFRTdHJpbmcg
c3RyU3JjOwotICAgIHN0clNyYyA9IFRTdHJpbmcoc3RyaW5nKTsKLQotICAgIGNvbnRleHQtPkhh
c2hFcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnICsgIiAiICsgc3RyU3JjOwotfQotCi1jb25z
dCBjaGFyKiBHZXRTdHJmcm9tVFN0cih2b2lkKQotewotICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsK
LSAgICBjcHAtPkVyck1zZyA9IGNvbnRleHQtPkhhc2hFcnJNc2cuY19zdHIoKTsKLSAgICByZXR1
cm4gY3BwLT5FcnJNc2c7Ci19Ci0KLXZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCi17Ci0gICAgU0VU
VVBfQ09OVEVYVChjcHApOwotICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSAiIjsKLX0KLQotdm9p
ZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFy
KiBiZWhhdmlvcikKLXsKLSAgICBTRVRVUF9DT05URVhUKGNwcCk7Ci0gICAgY29udGV4dC0+aGFu
ZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKHl5bGluZW5vLCBleHROYW1lLCBiZWhhdmlvcik7Ci19Ci19
ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vICFBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgot
CiBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5fdCB5eXNj
YW5uZXIpIHsKLSAgICBpbnQgbGVuID0gMDsKLQotI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VT
U09SCiAgICAgcHA6OlRva2VuIHRva2VuOwogICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnBy
ZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKLSAgICBsZW4gPSB0b2tlbi50eXBlID09IHBwOjpUb2tl
bjo6TEFTVCA/IDAgOiB0b2tlbi52YWx1ZS5zaXplKCk7CisgICAgaW50IGxlbiA9IHRva2VuLnR5
cGUgPT0gcHA6OlRva2VuOjpMQVNUID8gMCA6IHRva2VuLnRleHQuc2l6ZSgpOwogICAgIGlmICgo
bGVuID4gMCkgJiYgKGxlbiA8IG1heF9zaXplKSkKLSAgICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4u
dmFsdWUuY19zdHIoKSwgbGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiwgdG9rZW4udGV4dC5jX3N0
cigpLCBsZW4pOwogICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2ModG9rZW4ubG9jYXRp
b24uZmlsZSwgdG9rZW4ubG9jYXRpb24ubGluZSkseXlzY2FubmVyKTsKLSNlbHNlCi0gICAgbGVu
ID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpOwotI2VuZGlmICAvLyBBTkdMRV9VU0VfTkVXX1BS
RVBST0NFU1NPUgogCiAgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkKICAgICAgICAgWVlfRkFUQUxf
RVJST1IoIklucHV0IGJ1ZmZlciBvdmVyZmxvdyIpOwpAQCAtMzE0OCw5ICszMDE0LDYgQEAgaW50
IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgewogICAgIGNvbnRleHQt
PnNjYW5uZXIgPSBOVUxMOwogICAgIHl5bGV4X2Rlc3Ryb3koc2Nhbm5lcik7CiAKLSNpZiAhQU5H
TEVfVVNFX05FV19QUkVQUk9DRVNTT1IKLSAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOwotI2Vu
ZGlmCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxNjEsMjcgKzMwMjQsMTQgQEAgaW50IGdsc2xh
bmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10sCiAgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKIAogICAgIC8vIEluaXRp
YWxpemUgcHJlcHJvY2Vzc29yLgotI2lmIEFOR0xFX1VTRV9ORVdfUFJFUFJPQ0VTU09SCiAgICAg
aWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQog
ICAgICAgICByZXR1cm4gMTsKLSNlbHNlCi0gICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKLSAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgY3BwLT5wQyA9IGNvbnRleHQ7Ci0gICAgY3BwLT5wYXN0Rmly
c3RTdGF0ZW1lbnQgPSAwOwotICAgIGlmIChJbml0U2Nhbm5lcklucHV0KGNwcCwgY291bnQsIHN0
cmluZywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYgIC8vIEFOR0xFX1VTRV9O
RVdfUFJFUFJPQ0VTU09SCiAKICAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KICAgICBj
b25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9u
QmVoYXZpb3IoKTsKICAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dEJlaGF2aW9yLmJlZ2luKCk7CiAgICAgICAgICBpdGVyICE9IGV4dEJlaGF2aW9y
LmVuZCgpOyArK2l0ZXIpIHsKLSNpZiBBTkdMRV9VU0VfTkVXX1BSRVBST0NFU1NPUgogICAgICAg
ICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oaXRlci0+Zmlyc3QuY19zdHIo
KSwgMSk7Ci0jZWxzZQotICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0
cigpLCAxKTsKLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCmluZGV4IDQ2
YjUxNGEuLjcyY2M4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nX3RhYi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcApAQCAtNzUyLDI2ICs3NTIsMjYgQEAgc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5
cmxpbmVbXSA9CiB7CiAgICAgICAgMCwgICAxNjgsICAgMTY4LCAgIDIwMywgICAyMDYsICAgMjE5
LCAgIDIyNCwgICAyMjksICAgMjM1LCAgIDIzOCwKLSAgICAgMzE3LCAgIDMyMCwgICA0MjksICAg
NDM5LCAgIDQ1MiwgICA0NjAsICAgNTYwLCAgIDU2MywgICA1NzEsICAgNTc1LAotICAgICA1ODIs
ICAgNTg2LCAgIDU5MywgICA1OTksICAgNjA4LCAgIDYxNiwgICA2NzEsICAgNjc4LCAgIDY4OCwg
ICA2OTEsCi0gICAgIDcwMSwgICA3MTEsICAgNzMyLCAgIDczMywgICA3MzQsICAgNzM5LCAgIDc0
MCwgICA3NDksICAgNzYxLCAgIDc2MiwKLSAgICAgNzcwLCAgIDc4MSwgICA3ODUsICAgNzg2LCAg
IDc5NiwgICA4MDYsICAgODE2LCAgIDgyOSwgICA4MzAsICAgODQwLAotICAgICA4NTMsICAgODU3
LCAgIDg2MSwgICA4NjUsICAgODY2LCAgIDg3OSwgICA4ODAsICAgODkzLCAgIDg5NCwgICA5MDcs
Ci0gICAgIDkwOCwgICA5MjUsICAgOTI2LCAgIDkzOSwgICA5NDAsICAgOTQxLCAgIDk0MiwgICA5
NDMsICAgOTQ3LCAgIDk1MCwKLSAgICAgOTYxLCAgIDk2OSwgICA5OTYsICAxMDAxLCAgMTAwOCwg
IDEwNDYsICAxMDQ5LCAgMTA1NiwgIDEwNjQsICAxMDg1LAotICAgIDExMDYsICAxMTE3LCAgMTE0
NiwgIDExNTEsICAxMTYxLCAgMTE2NiwgIDExNzYsICAxMTc5LCAgMTE4MiwgIDExODUsCi0gICAg
MTE5MSwgIDExOTgsICAxMjAxLCAgMTIyMywgIDEyNDEsICAxMjY1LCAgMTI4OCwgIDEyOTIsICAx
MzEwLCAgMTMxOCwKLSAgICAxMzUwLCAgMTM3MCwgIDE0NTksICAxNDY4LCAgMTQ5MSwgIDE0OTQs
ICAxNTAwLCAgMTUwOCwgIDE1MTYsICAxNTI0LAotICAgIDE1MzQsICAxNTQxLCAgMTU0NCwgIDE1
NDcsICAxNTUzLCAgMTU1NiwgIDE1NzEsICAxNTc1LCAgMTU3OSwgIDE1ODMsCi0gICAgMTU5Miwg
IDE1OTcsICAxNjAyLCAgMTYwNywgIDE2MTIsICAxNjE3LCAgMTYyMiwgIDE2MjcsICAxNjMyLCAg
MTYzNywKLSAgICAxNjQzLCAgMTY0OSwgIDE2NTUsICAxNjYwLCAgMTY2NSwgIDE2NzQsICAxNjgz
LCAgMTY4OCwgIDE3MDEsICAxNzAxLAotICAgIDE3MTUsICAxNzE1LCAgMTcyNCwgIDE3MjcsICAx
NzQyLCAgMTc3OCwgIDE3ODIsICAxNzg4LCAgMTc5NiwgIDE4MTIsCi0gICAgMTgxNiwgIDE4MjAs
ICAxODIxLCAgMTgyNywgIDE4MjgsICAxODI5LCAgMTgzMCwgIDE4MzEsICAxODM1LCAgMTgzNiwK
LSAgICAxODM2LCAgMTgzNiwgIDE4NDYsICAxODQ3LCAgMTg1MSwgIDE4NTEsICAxODUyLCAgMTg1
MiwgIDE4NTcsICAxODYwLAotICAgIDE4NzAsICAxODczLCAgMTg3OSwgIDE4ODAsICAxODg0LCAg
MTg5MiwgIDE4OTYsICAxOTA2LCAgMTkxMSwgIDE5MjgsCi0gICAgMTkyOCwgIDE5MzMsICAxOTMz
LCAgMTk0MCwgIDE5NDAsICAxOTQ4LCAgMTk1MSwgIDE5NTcsICAxOTYwLCAgMTk2NiwKLSAgICAx
OTcwLCAgMTk3NywgIDE5ODQsICAxOTkxLCAgMTk5OCwgIDIwMDksICAyMDE4LCAgMjAyMiwgIDIw
MjksICAyMDMyLAotICAgIDIwMzgsICAyMDM4CisgICAgIDMxNywgICAzMjAsICAgNDIxLCAgIDQz
MSwgICA0NDQsICAgNDUyLCAgIDU1MiwgICA1NTUsICAgNTYzLCAgIDU2NywKKyAgICAgNTc0LCAg
IDU3OCwgICA1ODUsICAgNTkxLCAgIDYwMCwgICA2MDgsICAgNjYzLCAgIDY3MCwgICA2ODAsICAg
NjgzLAorICAgICA2OTMsICAgNzAzLCAgIDcyNCwgICA3MjUsICAgNzI2LCAgIDczMSwgICA3MzIs
ICAgNzQxLCAgIDc1MywgICA3NTQsCisgICAgIDc2MiwgICA3NzMsICAgNzc3LCAgIDc3OCwgICA3
ODgsICAgNzk4LCAgIDgwOCwgICA4MjEsICAgODIyLCAgIDgzMiwKKyAgICAgODQ1LCAgIDg0OSwg
ICA4NTMsICAgODU3LCAgIDg1OCwgICA4NzEsICAgODcyLCAgIDg4NSwgICA4ODYsICAgODk5LAor
ICAgICA5MDAsICAgOTE3LCAgIDkxOCwgICA5MzEsICAgOTMyLCAgIDkzMywgICA5MzQsICAgOTM1
LCAgIDkzOSwgICA5NDIsCisgICAgIDk1MywgICA5NjEsICAgOTg4LCAgIDk5MywgIDEwMDAsICAx
MDM4LCAgMTA0MSwgIDEwNDgsICAxMDU2LCAgMTA3NywKKyAgICAxMDk4LCAgMTEwOSwgIDExMzgs
ICAxMTQzLCAgMTE1MywgIDExNTgsICAxMTY4LCAgMTE3MSwgIDExNzQsICAxMTc3LAorICAgIDEx
ODMsICAxMTkwLCAgMTE5MywgIDEyMTUsICAxMjMzLCAgMTI1NywgIDEyODAsICAxMjg0LCAgMTMw
MiwgIDEzMTAsCisgICAgMTM0MiwgIDEzNjIsICAxNDUxLCAgMTQ2MCwgIDE0ODMsICAxNDg2LCAg
MTQ5MiwgIDE1MDAsICAxNTA4LCAgMTUxNiwKKyAgICAxNTI2LCAgMTUzMywgIDE1MzYsICAxNTM5
LCAgMTU0NSwgIDE1NDgsICAxNTYzLCAgMTU2NywgIDE1NzEsICAxNTc1LAorICAgIDE1ODQsICAx
NTg5LCAgMTU5NCwgIDE1OTksICAxNjA0LCAgMTYwOSwgIDE2MTQsICAxNjE5LCAgMTYyNCwgIDE2
MjksCisgICAgMTYzNSwgIDE2NDEsICAxNjQ3LCAgMTY1MiwgIDE2NTcsICAxNjY2LCAgMTY3NSwg
IDE2ODAsICAxNjkzLCAgMTY5MywKKyAgICAxNzA3LCAgMTcwNywgIDE3MTYsICAxNzE5LCAgMTcz
NCwgIDE3NzAsICAxNzc0LCAgMTc4MCwgIDE3ODgsICAxODA0LAorICAgIDE4MDgsICAxODEyLCAg
MTgxMywgIDE4MTksICAxODIwLCAgMTgyMSwgIDE4MjIsICAxODIzLCAgMTgyNywgIDE4MjgsCisg
ICAgMTgyOCwgIDE4MjgsICAxODM4LCAgMTgzOSwgIDE4NDMsICAxODQzLCAgMTg0NCwgIDE4NDQs
ICAxODQ5LCAgMTg1MiwKKyAgICAxODYyLCAgMTg2NSwgIDE4NzEsICAxODcyLCAgMTg3NiwgIDE4
ODQsICAxODg4LCAgMTg5OCwgIDE5MDMsICAxOTIwLAorICAgIDE5MjAsICAxOTI1LCAgMTkyNSwg
IDE5MzIsICAxOTMyLCAgMTk0MCwgIDE5NDMsICAxOTQ5LCAgMTk1MiwgIDE5NTgsCisgICAgMTk2
MiwgIDE5NjksICAxOTc2LCAgMTk4MywgIDE5OTAsICAyMDAxLCAgMjAxMCwgIDIwMTQsICAyMDIx
LCAgMjAyNCwKKyAgICAyMDMwLCAgMjAzMAogfTsKICNlbmRpZgogCkBAIC0yMzYwLDE4ICsyMzYw
LDEwIEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFD
b25zdCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykuc2l6ZSgpKSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHMubnVtID09IDEp
IHsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29u
c3QoZmllbGRzLm9mZnNldHNbMF0pOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQq
IGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSkpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKih5
eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgo
RU9wVmVjdG9yU3dpenpsZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksIGluZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwotICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICooeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN0cmluZzsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAoeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3Rv
clN0cmluZy5zaXplKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgewogICAg
ICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7CkBAIC0zNDMwLDcgKzM0MjIsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENv
bnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwg
Kih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxz
ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IDA7CkBAIC0zNDQ3LDcgKzM0MzksNyBAQCB5eXJlZHVjZToKICAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1KV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICBp
ZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgp
LmxpbmUsICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtKS50eXBlLCB0cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAog
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7CkBAIC0z
NDY5LDcgKzM0NjEsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEp
IC0gKDYpXS5pbnRlcm0pLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykg
LSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENv
bnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0g
KDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAoeXl2YWwuaW50ZXJt
KSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7CkBAIC0zNTMyLDcgKzM1MjQsNyBAQCB5eXJl
ZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENv
bnN0RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxz
ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlw
ZSk7CkBAIC0zNTcxLDcgKzM1NjMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgaWYgKGNvbnRleHQt
PnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2
c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
LCB0cnVlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAoeXl2
YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOwpAQCAtNDUx
Nyw2ICs0NTA5LDE1IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24qIGZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKKyAgICAgICAgCisg
ICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
QnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoYnVpbHRJbikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiYnVpbHQtaW4gZnVuY3Rpb25zIGNhbm5vdCBiZSBy
ZWRlZmluZWQiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBURnVuY3Rpb24q
IHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5m
aW5kKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7CiAgICAgICAgIC8vCiAgICAgICAgIC8v
IE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJz
dCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAppbmRleCBlNjNkNDI1Li43NTgxMmE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVk
aWF0ZS5oCkBAIC0xNiw2ICsxNiw4IEBACiAjaWZuZGVmIF9fSU5URVJNRURJQVRFX0gKICNkZWZp
bmUgX19JTlRFUk1FRElBVEVfSAogCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisK
ICNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNpbmNsdWRlICJjb21waWxlci9UeXBlcy5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL0NvbnN0YW50VW5pb24uaCIKQEAgLTU1MSw2ICs1NTMsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVtZW50RGVwdGgoKSB7ZGVwdGgrKzt9CiAgICAgdm9p
ZCBkZWNyZW1lbnREZXB0aCgpIHtkZXB0aC0tO30KIAorICAgIC8vIFJldHVybiB0aGUgb3JpZ2lu
YWwgbmFtZSBpZiBoYXNoIGZ1bmN0aW9uIHBvaW50ZXIgaXMgTlVMTDsKKyAgICAvLyBvdGhlcndp
c2UgcmV0dXJuIHRoZSBoYXNoZWQgbmFtZS4KKyAgICBzdGF0aWMgVFN0cmluZyBoYXNoKGNvbnN0
IFRTdHJpbmcmIG5hbWUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKTsKKwogICAgIGNv
bnN0IGJvb2wgcHJlVmlzaXQ7CiAgICAgY29uc3QgYm9vbCBpblZpc2l0OwogICAgIGNvbnN0IGJv
b2wgcG9zdFZpc2l0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL29zaW5jbHVkZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L29zaW5jbHVkZS5oCmluZGV4IDFkOTU5MDcuLmFkZjFhM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKQEAgLTI0LDkgKzI0LDcgQEAK
ICNlcnJvciBVbnN1cHBvcnRlZCBwbGF0Zm9ybS4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChBTkdM
RV9VU0VfTlNQUikKLSNpbmNsdWRlICJwcnRocmVhZC5oIgotI2VsaWYgZGVmaW5lZChBTkdMRV9P
U19XSU4pCisjaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCiAjZGVmaW5lIFNUUklDVAogI2RlZmlu
ZSBWQ19FWFRSQUxFQU4gMQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTM0LDcgKzMyLDcgQEAK
ICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8c2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8
ZXJybm8uaD4KLSNlbmRpZiAgLy8gQU5HTEVfVVNFX05TUFIKKyNlbmRpZiAgLy8gQU5HTEVfT1Nf
V0lOCiAKIAogI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCkBAIC00MiwxNiArNDAsMTMgQEAK
IC8vCiAvLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCiAvLwotI2lmIGRlZmluZWQo
QU5HTEVfVVNFX05TUFIpCi10eXBlZGVmIFBSVWludG4gT1NfVExTSW5kZXg7Ci0jZGVmaW5lIE9T
X0lOVkFMSURfVExTX0lOREVYIDB4RkZGRkZGRkYKLSNlbGlmIGRlZmluZWQoQU5HTEVfT1NfV0lO
KQorI2lmIGRlZmluZWQoQU5HTEVfT1NfV0lOKQogdHlwZWRlZiBEV09SRCBPU19UTFNJbmRleDsK
ICNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggKFRMU19PVVRfT0ZfSU5ERVhFUykKICNlbGlm
IGRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCiB0eXBlZGVmIHVuc2lnbmVkIGludCBPU19UTFNJbmRl
eDsKICNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZGRkZGRgotI2VuZGlmICAvLyBB
TkdMRV9VU0VfTlNQUgorI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KIAogT1NfVExTSW5kZXggT1Nf
QWxsb2NUTFNJbmRleCgpOwogYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgs
IHZvaWQgKmxwdlZhbHVlKTsKQEAgLTYwLDkgKzU1LDcgQEAgYm9vbCBPU19GcmVlVExTSW5kZXgo
T1NfVExTSW5kZXggbkluZGV4KTsKIGlubGluZSB2b2lkKiBPU19HZXRUTFNWYWx1ZShPU19UTFNJ
bmRleCBuSW5kZXgpCiB7CiAgICAgQVNTRVJUKG5JbmRleCAhPSBPU19JTlZBTElEX1RMU19JTkRF
WCk7Ci0jaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKLSAgICByZXR1cm4gUFJfR2V0VGhyZWFk
UHJpdmF0ZShuSW5kZXgpOwotI2VsaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjaWYgZGVmaW5l
ZChBTkdMRV9PU19XSU4pCiAgICAgcmV0dXJuIFRsc0dldFZhbHVlKG5JbmRleCk7CiAjZWxpZiBk
ZWZpbmVkKEFOR0xFX09TX1BPU0lYKQogICAgIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljKG5J
bmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
b3Nzb3VyY2VfbnNwci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
b3Nzb3VyY2VfbnNwci5jcHAKaW5kZXggZjYzZDgxZS4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcApA
QCAtMSw0MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gVGhpcyBmaWxlIGNv
bnRhaW5zIHRoZSBuc3ByIHNwZWNpZmljIGZ1bmN0aW9ucwotLy8KLSNpbmNsdWRlICJjb21waWxl
ci9vc2luY2x1ZGUuaCIKLQotLy8KLS8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMK
LS8vCi1PU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKLXsKLSAgICBQUlVpbnRuIGluZGV4
OwotICAgIFBSU3RhdHVzIHN0YXR1cyA9IFBSX05ld1RocmVhZFByaXZhdGVJbmRleCgmaW5kZXgs
IE5VTEwpOwotCi0gICAgaWYgKHN0YXR1cykgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfQWxs
b2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsK
LSAgICAgICAgcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOwotICAgIH0KLQotICAgIHJldHVy
biBpbmRleDsKLX0KLQotYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZv
aWQgKmxwdlZhbHVlKQotewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIElu
ZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUFJfU2V0
VGhyZWFkUHJpdmF0ZShuSW5kZXgsIGxwdlZhbHVlKSA9PSAwOwotfQotCi1ib29sIE9TX0ZyZWVU
TFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCi17Ci0gICAgLy8gQ2FuJ3QgZGVsZXRlIFRMUyBr
ZXlzIHdpdGggbnNwcgotICAgIHJldHVybiB0cnVlOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpYWdub3N0aWNzQmFz
ZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0RpYWdub3N0aWNzQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
M2UyMmUxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcApAQCAtMCwwICsxLDEyNyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jhc2UuaCIKKworI2luY2x1
ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBwcAoreworCitEaWFnbm9zdGljczo6fkRpYWdub3N0
aWNzKCkKK3sKK30KKwordm9pZCBEaWFnbm9zdGljczo6cmVwb3J0KElEIGlkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCit7CisgICAgLy8gVE9ETyhhbG9r
cCk6IEtlZXAgYSBjb3VudCBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzLgorICAgIHByaW50KGlkLCBs
b2MsIHRleHQpOworfQorCitEaWFnbm9zdGljczo6U2V2ZXJpdHkgRGlhZ25vc3RpY3M6OnNldmVy
aXR5KElEIGlkKQoreworICAgIGlmICgoaWQgPiBFUlJPUl9CRUdJTikgJiYgKGlkIDwgRVJST1Jf
RU5EKSkKKyAgICAgICAgcmV0dXJuIEVSUk9SOworCisgICAgaWYgKChpZCA+IFdBUk5JTkdfQkVH
SU4pICYmIChpZCA8IFdBUk5JTkdfRU5EKSkKKyAgICAgICAgcmV0dXJuIFdBUk5JTkc7CisKKyAg
ICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBFUlJPUjsKK30KKworc3RkOjpzdHJpbmcgRGlh
Z25vc3RpY3M6Om1lc3NhZ2UoSUQgaWQpCit7CisgICAgc3dpdGNoIChpZCkKKyAgICB7CisgICAg
ICAvLyBFcnJvcnMgYmVnaW4uCisgICAgICBjYXNlIElOVEVSTkFMX0VSUk9SOgorICAgICAgICAg
IHJldHVybiAiaW50ZXJuYWwgZXJyb3IiOworICAgICAgY2FzZSBPVVRfT0ZfTUVNT1JZOgorICAg
ICAgICAgIHJldHVybiAib3V0IG9mIG1lbW9yeSI7CisgICAgICBjYXNlIElOVkFMSURfQ0hBUkFD
VEVSOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBjaGFyYWN0ZXIiOworICAgICAgY2FzZSBJ
TlZBTElEX05VTUJFUjoKKyAgICAgICAgICByZXR1cm4gImludmFsaWQgbnVtYmVyIjsKKyAgICAg
IGNhc2UgSU5URUdFUl9PVkVSRkxPVzoKKyAgICAgICAgICByZXR1cm4gImludGVnZXIgb3ZlcmZs
b3ciOworICAgICAgY2FzZSBGTE9BVF9PVkVSRkxPVzoKKyAgICAgICAgICByZXR1cm4gImZsb2F0
IG92ZXJmbG93IjsKKyAgICAgIGNhc2UgVE9LRU5fVE9PX0xPTkc6CisgICAgICAgICAgcmV0dXJu
ICJ0b2tlbiB0b28gbG9uZyI7CisgICAgICBjYXNlIElOVkFMSURfRVhQUkVTU0lPTjoKKyAgICAg
ICAgICByZXR1cm4gImludmFsaWQgZXhwcmVzc2lvbiI7CisgICAgICBjYXNlIERJVklTSU9OX0JZ
X1pFUk86CisgICAgICAgICAgcmV0dXJuICJkaXZpc2lvbiBieSB6ZXJvIjsKKyAgICAgIGNhc2Ug
RU9GX0lOX0NPTU1FTlQ6CisgICAgICAgICAgcmV0dXJuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxl
IGZvdW5kIGluIGNvbW1lbnQiOworICAgICAgY2FzZSBVTkVYUEVDVEVEX1RPS0VOOgorICAgICAg
ICAgIHJldHVybiAidW5leHBlY3RlZCB0b2tlbiI7CisgICAgICBjYXNlIERJUkVDVElWRV9JTlZB
TElEX05BTUU6CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGRpcmVjdGl2ZSBuYW1lIjsKKyAg
ICAgIGNhc2UgTUFDUk9fTkFNRV9SRVNFUlZFRDoKKyAgICAgICAgICByZXR1cm4gIm1hY3JvIG5h
bWUgaXMgcmVzZXJ2ZWQiOworICAgICAgY2FzZSBNQUNST19SRURFRklORUQ6CisgICAgICAgICAg
cmV0dXJuICJtYWNybyByZWRlZmluZWQiOworICAgICAgY2FzZSBNQUNST19QUkVERUZJTkVEX1JF
REVGSU5FRDoKKyAgICAgICAgICByZXR1cm4gInByZWRlZmluZWQgbWFjcm8gcmVkZWZpbmVkIjsK
KyAgICAgIGNhc2UgTUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQ6CisgICAgICAgICAgcmV0dXJu
ICJwcmVkZWZpbmVkIG1hY3JvIHVuZGVmaW5lZCI7CisgICAgICBjYXNlIE1BQ1JPX1VOVEVSTUlO
QVRFRF9JTlZPQ0FUSU9OOgorICAgICAgICAgIHJldHVybiAidW50ZXJtaW5hdGVkIG1hY3JvIGlu
dm9jYXRpb24iOworICAgICAgY2FzZSBNQUNST19UT09fRkVXX0FSR1M6CisgICAgICAgICAgcmV0
dXJuICJOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgbWFjcm8iOworICAgICAgY2FzZSBNQUNST19U
T09fTUFOWV9BUkdTOgorICAgICAgICAgIHJldHVybiAiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBt
YWNybyI7CisgICAgICBjYXNlIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUY6CisgICAgICAg
ICAgcmV0dXJuICJ1bmV4cGVjdGVkICNlbmRpZiBmb3VuZCB3aXRob3V0IGEgbWF0Y2hpbmcgI2lm
IjsKKyAgICAgIGNhc2UgQ09ORElUSU9OQUxfRUxTRV9XSVRIT1VUX0lGOgorICAgICAgICAgIHJl
dHVybiAidW5leHBlY3RlZCAjZWxzZSBmb3VuZCB3aXRob3V0IGEgbWF0Y2hpbmcgI2lmIjsKKyAg
ICAgIGNhc2UgQ09ORElUSU9OQUxfRUxTRV9BRlRFUl9FTFNFOgorICAgICAgICAgIHJldHVybiAi
dW5leHBlY3RlZCAjZWxzZSBmb3VuZCBhZnRlciBhbm90aGVyICNlbHNlIjsKKyAgICAgIGNhc2Ug
Q09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGOgorICAgICAgICAgIHJldHVybiAidW5leHBlY3Rl
ZCAjZWxpZiBmb3VuZCB3aXRob3V0IGEgbWF0Y2hpbmcgI2lmIjsKKyAgICAgIGNhc2UgQ09ORElU
SU9OQUxfRUxJRl9BRlRFUl9FTFNFOgorICAgICAgICAgIHJldHVybiAidW5leHBlY3RlZCAjZWxp
ZiBmb3VuZCBhZnRlciAjZWxzZSI7CisgICAgICBjYXNlIENPTkRJVElPTkFMX1VOVEVSTUlOQVRF
RDoKKyAgICAgICAgICByZXR1cm4gInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgZm91bmQgaW4gY29u
ZGl0aW9uYWwgYmxvY2siOworICAgICAgY2FzZSBJTlZBTElEX0VYVEVOU0lPTl9OQU1FOgorICAg
ICAgICAgIHJldHVybiAiaW52YWxpZCBleHRlbnNpb24gbmFtZSI7CisgICAgICBjYXNlIElOVkFM
SURfRVhURU5TSU9OX0JFSEFWSU9SOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBleHRlbnNp
b24gYmVoYXZpb3IiOworICAgICAgY2FzZSBJTlZBTElEX0VYVEVOU0lPTl9ESVJFQ1RJVkU6Cisg
ICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGV4dGVuc2lvbiBkaXJlY3RpdmUiOworICAgICAgY2Fz
ZSBJTlZBTElEX1ZFUlNJT05fTlVNQkVSOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCB2ZXJz
aW9uIG51bWJlciI7CisgICAgICBjYXNlIElOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkU6CisgICAg
ICAgICAgcmV0dXJuICJpbnZhbGlkIHZlcnNpb24gZGlyZWN0aXZlIjsKKyAgICAgIGNhc2UgVkVS
U0lPTl9OT1RfRklSU1RfU1RBVEVNRU5UOgorICAgICAgICByZXR1cm4gIiN2ZXJzaW9uIGRpcmVj
dGl2ZSBtdXN0IG9jY3VyIGJlZm9yZSBhbnl0aGluZyBlbHNlLCAiCisgICAgICAgICAgICAgICAi
ZXhjZXB0IGZvciBjb21tZW50cyBhbmQgd2hpdGUgc3BhY2UiOworICAgICAgY2FzZSBJTlZBTElE
X0xJTkVfTlVNQkVSOgorICAgICAgICAgIHJldHVybiAiaW52YWxpZCBsaW5lIG51bWJlciI7Cisg
ICAgICBjYXNlIElOVkFMSURfRklMRV9OVU1CRVI6CisgICAgICAgICAgcmV0dXJuICJpbnZhbGlk
IGZpbGUgbnVtYmVyIjsKKyAgICAgIGNhc2UgSU5WQUxJRF9MSU5FX0RJUkVDVElWRToKKyAgICAg
ICAgICByZXR1cm4gImludmFsaWQgbGluZSBkaXJlY3RpdmUiOworICAgICAgLy8gRXJyb3JzIGVu
ZC4KKyAgICAgIC8vIFdhcm5pbmdzIGJlZ2luLgorICAgICAgY2FzZSBFT0ZfSU5fRElSRUNUSVZF
OgorICAgICAgICAgIHJldHVybiAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSBmb3VuZCBpbiBkaXJl
Y3RpdmUiOworICAgICAgY2FzZSBDT05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOOgorICAgICAg
ICAgIHJldHVybiAidW5leHBlY3RlZCB0b2tlbiBhZnRlciBjb25kaXRpb25hbCBleHByZXNzaW9u
IjsKKyAgICAgIGNhc2UgVU5SRUNPR05JWkVEX1BSQUdNQToKKyAgICAgICAgICByZXR1cm4gInVu
cmVjb2duaXplZCBwcmFnbWEiOworICAgICAgLy8gV2FybmluZ3MgZW5kLgorICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgIHJldHVybiAiIjsKKyAgICB9
Cit9CisKK30gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NC
YXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiYzQxMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmgKQEAgLTAsMCArMSw4NyBAQAorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCisjZGVmaW5lIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXworCisjaW5jbHVkZSA8c3RyaW5nPgor
CituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFNvdXJjZUxvY2F0aW9uOworCisvLyBCYXNlIGNs
YXNzIGZvciByZXBvcnRpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KKy8vIERlcml2ZWQgY2xhc3Nl
cyBhcmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcgYW5kIHByaW50aW5nIHRoZSBtZXNzYWdl
cy4KK2NsYXNzIERpYWdub3N0aWNzCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFNldmVyaXR5Cisg
ICAgeworICAgICAgICBFUlJPUiwKKyAgICAgICAgV0FSTklORworICAgIH07CisgICAgZW51bSBJ
RAorICAgIHsKKyAgICAgICAgRVJST1JfQkVHSU4sCisgICAgICAgIElOVEVSTkFMX0VSUk9SLAor
ICAgICAgICBPVVRfT0ZfTUVNT1JZLAorICAgICAgICBJTlZBTElEX0NIQVJBQ1RFUiwKKyAgICAg
ICAgSU5WQUxJRF9OVU1CRVIsCisgICAgICAgIElOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgIEZM
T0FUX09WRVJGTE9XLAorICAgICAgICBUT0tFTl9UT09fTE9ORywKKyAgICAgICAgSU5WQUxJRF9F
WFBSRVNTSU9OLAorICAgICAgICBESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICBFT0ZfSU5fQ09N
TUVOVCwKKyAgICAgICAgVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgRElSRUNUSVZFX0lOVkFM
SURfTkFNRSwKKyAgICAgICAgTUFDUk9fTkFNRV9SRVNFUlZFRCwKKyAgICAgICAgTUFDUk9fUkVE
RUZJTkVELAorICAgICAgICBNQUNST19QUkVERUZJTkVEX1JFREVGSU5FRCwKKyAgICAgICAgTUFD
Uk9fUFJFREVGSU5FRF9VTkRFRklORUQsCisgICAgICAgIE1BQ1JPX1VOVEVSTUlOQVRFRF9JTlZP
Q0FUSU9OLAorICAgICAgICBNQUNST19UT09fRkVXX0FSR1MsCisgICAgICAgIE1BQ1JPX1RPT19N
QU5ZX0FSR1MsCisgICAgICAgIENPTkRJVElPTkFMX0VORElGX1dJVEhPVVRfSUYsCisgICAgICAg
IENPTkRJVElPTkFMX0VMU0VfV0lUSE9VVF9JRiwKKyAgICAgICAgQ09ORElUSU9OQUxfRUxTRV9B
RlRFUl9FTFNFLAorICAgICAgICBDT05ESVRJT05BTF9FTElGX1dJVEhPVVRfSUYsCisgICAgICAg
IENPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKKyAgICAgICAgQ09ORElUSU9OQUxfVU5URVJN
SU5BVEVELAorICAgICAgICBJTlZBTElEX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICBJTlZBTElE
X0VYVEVOU0lPTl9CRUhBVklPUiwKKyAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fRElSRUNUSVZF
LAorICAgICAgICBJTlZBTElEX1ZFUlNJT05fTlVNQkVSLAorICAgICAgICBJTlZBTElEX1ZFUlNJ
T05fRElSRUNUSVZFLAorICAgICAgICBWRVJTSU9OX05PVF9GSVJTVF9TVEFURU1FTlQsCisgICAg
ICAgIElOVkFMSURfTElORV9OVU1CRVIsCisgICAgICAgIElOVkFMSURfRklMRV9OVU1CRVIsCisg
ICAgICAgIElOVkFMSURfTElORV9ESVJFQ1RJVkUsCisgICAgICAgIEVSUk9SX0VORCwKKworICAg
ICAgICBXQVJOSU5HX0JFR0lOLAorICAgICAgICBFT0ZfSU5fRElSRUNUSVZFLAorICAgICAgICBD
T05ESVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICBVTlJFQ09HTklaRURfUFJBR01B
LAorICAgICAgICBXQVJOSU5HX0VORAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5EaWFnbm9zdGlj
cygpOworCisgICAgdm9pZCByZXBvcnQoSUQgaWQsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2Ms
IGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgU2V2ZXJpdHkg
c2V2ZXJpdHkoSUQgaWQpOworICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2UoSUQgaWQpOworCisgICAg
dmlydHVhbCB2b2lkIHByaW50KElEIGlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
b3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGV4dCkgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENP
TVBJTEVSX1BSRVBST0NFU1NPUl9ESUFHTk9TVElDU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lZjM1YzZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAKQEAg
LTAsMCArMSwxNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVy
QmFzZS5oIgorCituYW1lc3BhY2UgcHAKK3sKKworRGlyZWN0aXZlSGFuZGxlcjo6fkRpcmVjdGl2
ZUhhbmRsZXIoKQoreworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFu
ZGxlckJhc2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yYWFlZWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5oCkBAIC0w
LDAgKzEsNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9ESVJFQ1RJVkVfSEFORExFUl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElS
RUNUSVZFX0hBTkRMRVJfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIHBwCit7
CisKK3N0cnVjdCBTb3VyY2VMb2NhdGlvbjsKKworLy8gQmFzZSBjbGFzcyBmb3IgaGFuZGxpbmcg
ZGlyZWN0aXZlcy4KKy8vIFByZXByb2Nlc3NvciB1c2VzIHRoaXMgY2xhc3MgdG8gbm90aWZ5IHRo
ZSBjbGllbnRzIGFib3V0IGNlcnRhaW4KKy8vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBEZXJp
dmVkIGNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvcgorLy8gaGFuZGxpbmcgdGhlbSBpbiBhbiBh
cHByb3ByaWF0ZSBtYW5uZXIuCitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyCit7CisgIHB1YmxpYzoK
KyAgICB2aXJ0dWFsIH5EaXJlY3RpdmVIYW5kbGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRXJyb3IoY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgPSAwOworCisgICAgLy8gSGFuZGxlIHBy
YWdtYSBvZiBmb3JtOiAjcHJhZ21hIG5hbWVbKHZhbHVlKV0KKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlUHJhZ21hKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV4dGVuc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmVoYXZpb3IpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVWZXJzaW9uKGNvbnN0IFNvdXJjZUxvY2F0aW9u
JiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pID0gMDsK
K307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfRElSRUNUSVZFX0hBTkRMRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGRmZGY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsOTMyIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgorCisjaW5jbHVkZSA8Y2Fzc2VydD4K
KyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFn
bm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIgorI2luY2x1
ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCisjaW5j
bHVkZSAiVG9rZW4uaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIHsKK2Vu
dW0gRGlyZWN0aXZlVHlwZQoreworICAgIERJUkVDVElWRV9OT05FLAorICAgIERJUkVDVElWRV9E
RUZJTkUsCisgICAgRElSRUNUSVZFX1VOREVGLAorICAgIERJUkVDVElWRV9JRiwKKyAgICBESVJF
Q1RJVkVfSUZERUYsCisgICAgRElSRUNUSVZFX0lGTkRFRiwKKyAgICBESVJFQ1RJVkVfRUxTRSwK
KyAgICBESVJFQ1RJVkVfRUxJRiwKKyAgICBESVJFQ1RJVkVfRU5ESUYsCisgICAgRElSRUNUSVZF
X0VSUk9SLAorICAgIERJUkVDVElWRV9QUkFHTUEsCisgICAgRElSRUNUSVZFX0VYVEVOU0lPTiwK
KyAgICBESVJFQ1RJVkVfVkVSU0lPTiwKKyAgICBESVJFQ1RJVkVfTElORQorfTsKK30gIC8vIG5h
bWVzcGFjZQorCitzdGF0aWMgRGlyZWN0aXZlVHlwZSBnZXREaXJlY3RpdmUoY29uc3QgcHA6OlRv
a2VuKiB0b2tlbikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZURl
ZmluZSgiZGVmaW5lIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVV
bmRlZigidW5kZWYiKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUlm
KCJpZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlSWZkZWYoImlm
ZGVmIik7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVJZm5kZWYoImlm
bmRlZiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxzZSgiZWxz
ZSIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRWxpZigiZWxpZiIp
OworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRW5kaWYoImVuZGlmIik7
CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFcnJvcigiZXJyb3IiKTsK
KyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZVByYWdtYSgicHJhZ21hIik7
CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVFeHRlbnNpb24oImV4dGVu
c2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlVmVyc2lvbigi
dmVyc2lvbiIpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlTGluZSgi
bGluZSIpOworCisgICAgaWYgKHRva2VuLT50eXBlICE9IHBwOjpUb2tlbjo6SURFTlRJRklFUikK
KyAgICAgICAgcmV0dXJuIERJUkVDVElWRV9OT05FOworCisgICAgaWYgKHRva2VuLT50ZXh0ID09
IGtEaXJlY3RpdmVEZWZpbmUpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfREVGSU5FOworICAg
IGVsc2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVVbmRlZikKKyAgICAgICAgcmV0dXJu
IERJUkVDVElWRV9VTkRFRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZl
SWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnRl
eHQgPT0ga0RpcmVjdGl2ZUlmZGVmKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGREVGOwor
ICAgIGVsc2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVJZm5kZWYpCisgICAgICAgIHJl
dHVybiBESVJFQ1RJVkVfSUZOREVGOworICAgIGVsc2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJl
Y3RpdmVFbHNlKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VMU0U7CisgICAgZWxzZSBpZiAo
dG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUVsaWYpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVf
RUxJRjsKKyAgICBlbHNlIGlmICh0b2tlbi0+dGV4dCA9PSBrRGlyZWN0aXZlRW5kaWYpCisgICAg
ICAgIHJldHVybiBESVJFQ1RJVkVfRU5ESUY7CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0g
a0RpcmVjdGl2ZUVycm9yKQorICAgICAgICByZXR1cm4gRElSRUNUSVZFX0VSUk9SOworICAgIGVs
c2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVQcmFnbWEpCisgICAgICAgIHJldHVybiBE
SVJFQ1RJVkVfUFJBR01BOworICAgIGVsc2UgaWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVF
eHRlbnNpb24pCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfRVhURU5TSU9OOworICAgIGVsc2Ug
aWYgKHRva2VuLT50ZXh0ID09IGtEaXJlY3RpdmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gRElS
RUNUSVZFX1ZFUlNJT047CisgICAgZWxzZSBpZiAodG9rZW4tPnRleHQgPT0ga0RpcmVjdGl2ZUxp
bmUpCisgICAgICAgIHJldHVybiBESVJFQ1RJVkVfTElORTsKKworICAgIHJldHVybiBESVJFQ1RJ
VkVfTk9ORTsKK30KKworc3RhdGljIGJvb2wgaXNDb25kaXRpb25hbERpcmVjdGl2ZShEaXJlY3Rp
dmVUeXBlIGRpcmVjdGl2ZSkKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICB7CisgICAg
ICBjYXNlIERJUkVDVElWRV9JRjoKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGREVGOgorICAgICAg
Y2FzZSBESVJFQ1RJVkVfSUZOREVGOgorICAgICAgY2FzZSBESVJFQ1RJVkVfRUxTRToKKyAgICAg
IGNhc2UgRElSRUNUSVZFX0VMSUY6CisgICAgICBjYXNlIERJUkVDVElWRV9FTkRJRjoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIHJlcHJlc2VudHMgRW5kIE9m
IERpcmVjdGl2ZS4KK3N0YXRpYyBib29sIGlzRU9EKGNvbnN0IHBwOjpUb2tlbiogdG9rZW4pCit7
CisgICAgcmV0dXJuICh0b2tlbi0+dHlwZSA9PSAnXG4nKSB8fCAodG9rZW4tPnR5cGUgPT0gcHA6
OlRva2VuOjpMQVNUKTsKK30KKworc3RhdGljIHZvaWQgc2tpcFVudGlsRU9EKHBwOjpMZXhlciog
bGV4ZXIsIHBwOjpUb2tlbiogdG9rZW4pCit7CisgICAgd2hpbGUoIWlzRU9EKHRva2VuKSkKKyAg
ICB7CisgICAgICAgIGxleGVyLT5sZXgodG9rZW4pOworICAgIH0KK30KKworc3RhdGljIGJvb2wg
aXNNYWNyb05hbWVSZXNlcnZlZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKK3sKKyAgICAvLyBO
YW1lcyBwcmVmaXhlZCB3aXRoICJHTF8iIGFyZSByZXNlcnZlZC4KKyAgICBpZiAobmFtZS5zdWJz
dHIoMCwgMykgPT0gIkdMXyIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTmFtZXMg
Y29udGFpbmluZyB0d28gY29uc2VjdXRpdmUgdW5kZXJzY29yZXMgYXJlIHJlc2VydmVkLgorICAg
IGlmIChuYW1lLmZpbmQoIl9fIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBpc01hY3JvUHJl
ZGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHBwOjpNYWNyb1NldCYgbWFjcm9TZXQpCit7CisgICAgcHA6Ok1hY3JvU2V0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFjcm9TZXQuZmluZChuYW1lKTsKKyAgICByZXR1cm4g
aXRlciAhPSBtYWNyb1NldC5lbmQoKSA/IGl0ZXItPnNlY29uZC5wcmVkZWZpbmVkIDogZmFsc2U7
Cit9CisKK25hbWVzcGFjZSBwcAoreworCitjbGFzcyBEZWZpbmVkUGFyc2VyIDogcHVibGljIExl
eGVyCit7CisgIHB1YmxpYzoKKyAgICBEZWZpbmVkUGFyc2VyKExleGVyKiBsZXhlciwKKyAgICAg
ICAgICAgICAgICAgIGNvbnN0IE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAg
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgICAgICBtTGV4ZXIobGV4ZXIpLAorICAg
ICAgICBtTWFjcm9TZXQobWFjcm9TZXQpLAorICAgICAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3Rp
Y3MpCisgICAgeworICAgIH0KKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGxleChU
b2tlbiogdG9rZW4pCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0Rl
ZmluZWQoImRlZmluZWQiKTsKKworICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7CisgICAgICAg
IGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKHRva2VuLT50ZXh0ICE9IGtEZWZpbmVkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGJvb2wgcGFyZW4gPSBmYWxzZTsKKyAgICAgICAgbUxleGVyLT5sZXgo
dG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygnKQorICAgICAgICB7CisgICAg
ICAgICAgICBwYXJlbiA9IHRydWU7CisgICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICBza2lwVW50aWxFT0QobUxl
eGVyLCB0b2tlbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFj
cm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnRleHQp
OworICAgICAgICBzdGQ6OnN0cmluZyBleHByZXNzaW9uID0gaXRlciAhPSBtTWFjcm9TZXQtPmVu
ZCgpID8gIjEiIDogIjAiOworCisgICAgICAgIGlmIChwYXJlbikKKyAgICAgICAgeworICAgICAg
ICAgICAgbUxleGVyLT5sZXgodG9rZW4pOworICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9
ICcpJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAg
ICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tlbik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHZhbGlk
IGRlZmluZWQgb3BlcmF0b3IuCisgICAgICAgIC8vIENvbnZlcnQgdGhlIGN1cnJlbnQgdG9rZW4g
aW50byBhIENPTlNUX0lOVCB0b2tlbi4KKyAgICAgICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6Q09O
U1RfSU5UOworICAgICAgICB0b2tlbi0+dGV4dCA9IGV4cHJlc3Npb247CisgICAgfQorCisgIHBy
aXZhdGU6CisgICAgTGV4ZXIqIG1MZXhlcjsKKyAgICBjb25zdCBNYWNyb1NldCogbU1hY3JvU2V0
OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Cit9OworCitEaXJlY3RpdmVQYXJzZXI6
OkRpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvU2V0KiBtYWNyb1NldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpIDoKKyAg
ICBtUGFzdEZpcnN0U3RhdGVtZW50KGZhbHNlKSwKKyAgICBtVG9rZW5pemVyKHRva2VuaXplciks
CisgICAgbU1hY3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3Mp
LAorICAgIG1EaXJlY3RpdmVIYW5kbGVyKGRpcmVjdGl2ZUhhbmRsZXIpCit7Cit9CisKK3ZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpsZXgoVG9rZW4qIHRva2VuKQoreworICAgIGRvCisgICAgeworICAg
ICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9
PSBUb2tlbjo6UFBfSEFTSCkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyc2VEaXJlY3RpdmUo
dG9rZW4pOworICAgICAgICAgICAgbVBhc3RGaXJzdFN0YXRlbWVudCA9IHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OkxBU1QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghbUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBDb25kaXRpb25hbEJsb2NrJiBibG9jayA9IG1Db25k
aXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5URVJNSU5BVEVELAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxvY2F0aW9uLCBibG9jay50eXBlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChz
a2lwcGluZygpIHx8ICh0b2tlbi0+dHlwZSA9PSAnXG4nKSk7CisKKyAgICBtUGFzdEZpcnN0U3Rh
dGVtZW50ID0gdHJ1ZTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZl
KFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQodG9rZW4tPnR5cGUgPT0gVG9rZW46OlBQX0hB
U0gpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoaXNFT0QodG9rZW4p
KQorICAgIHsKKyAgICAgICAgLy8gRW1wdHkgRGlyZWN0aXZlLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4p
OworCisgICAgLy8gV2hpbGUgaW4gYW4gZXhjbHVkZWQgY29uZGl0aW9uYWwgYmxvY2svZ3JvdXAs
CisgICAgLy8gd2Ugb25seSBwYXJzZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzLgorICAgIGlmIChz
a2lwcGluZygpICYmICFpc0NvbmRpdGlvbmFsRGlyZWN0aXZlKGRpcmVjdGl2ZSkpCisgICAgewor
ICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc3dpdGNoKGRpcmVjdGl2ZSkKKyAgICB7CisgICAgICBjYXNlIERJUkVD
VElWRV9OT05FOgorICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6RElS
RUNUSVZFX0lOVkFMSURfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVy
LCB0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfREVGSU5FOgor
ICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBE
SVJFQ1RJVkVfVU5ERUY6CisgICAgICAgIHBhcnNlVW5kZWYodG9rZW4pOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgorICAgICAgICBwYXJzZUlmKHRva2VuKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKKyAgICAgICAgcGFyc2VJ
ZmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfSUZOREVG
OgorICAgICAgICBwYXJzZUlmbmRlZih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBESVJFQ1RJVkVfRUxTRToKKyAgICAgICAgcGFyc2VFbHNlKHRva2VuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIERJUkVDVElWRV9FTElGOgorICAgICAgICBwYXJzZUVsaWYodG9rZW4p
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgorICAgICAgICBw
YXJzZUVuZGlmKHRva2VuKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERJUkVDVElWRV9F
UlJPUjoKKyAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBESVJFQ1RJVkVfUFJBR01BOgorICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVfRVhURU5TSU9OOgorICAgICAgICBwYXJz
ZUV4dGVuc2lvbih0b2tlbik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBESVJFQ1RJVkVf
VkVSU0lPTjoKKyAgICAgICAgcGFyc2VWZXJzaW9uKHRva2VuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIERJUkVDVElWRV9MSU5FOgorICAgICAgICBwYXJzZUxpbmUodG9rZW4pOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7
CisgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQorICAgIHsKKyAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVPRl9JTl9ESVJFQ1RJVkUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAg
IH0KK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGVmaW5lKFRva2VuKiB0b2tlbikK
K3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfREVGSU5FKTsK
KworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgaWYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpJREVOVElGSUVSKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChpc01hY3JvUHJlZGVmaW5lZCh0b2tlbi0+dGV4dCwgKm1NYWNyb1NldCkpCisgICAg
eworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUFJFREVG
SU5FRF9SRURFRklORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc01h
Y3JvTmFtZVJlc2VydmVkKHRva2VuLT50ZXh0KSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpNQUNST19OQU1FX1JFU0VSVkVELAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIE1hY3JvIG1hY3JvOworICAgIG1hY3JvLnR5cGUgPSBNYWNy
bzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IHRva2VuLT50ZXh0OworCisgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gJygnICYmICF0b2tlbi0+
aGFzTGVhZGluZ1NwYWNlKCkpCisgICAgeworICAgICAgICAvLyBGdW5jdGlvbi1saWtlIG1hY3Jv
LiBDb2xsZWN0IGFyZ3VtZW50cy4KKyAgICAgICAgbWFjcm8udHlwZSA9IE1hY3JvOjprVHlwZUZ1
bmM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cisg
ICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0
b2tlbi0+dGV4dCk7CisKKyAgICAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBH
ZXQgJywnLgorICAgICAgICB9IHdoaWxlICh0b2tlbi0+dHlwZSA9PSAnLCcpOworCisgICAgICAg
IGlmICh0b2tlbi0+dHlwZSAhPSAnKScpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBHZXQgJyknLgorICAgIH0K
KworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRv
a2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSB0b2tlbiBsb2NhdGlvbiBi
ZWNhdXNlIGl0IGlzIHVubmVjZXNzYXJ5IGluIHJlcGxhY2VtZW50CisgICAgICAgIC8vIGxpc3Qu
IFJlc2V0dGluZyBpdCBhbHNvIGFsbG93cyB1cyB0byByZXVzZSBUb2tlbjo6ZXF1YWxzKCkgdG8K
KyAgICAgICAgLy8gY29tcGFyZSBtYWNyb3MuCisgICAgICAgIHRva2VuLT5sb2NhdGlvbiA9IFNv
dXJjZUxvY2F0aW9uKCk7CisgICAgICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2soKnRv
a2VuKTsKKyAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB9CisgICAgaWYgKCFt
YWNyby5yZXBsYWNlbWVudHMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIC8vIFdoaXRlc3BhY2Ug
cHJlY2VkaW5nIHRoZSByZXBsYWNlbWVudCBsaXN0IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YK
KyAgICAgICAgLy8gdGhlIHJlcGxhY2VtZW50IGxpc3QgZm9yIGVpdGhlciBmb3JtIG9mIG1hY3Jv
LgorICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZnJvbnQoKS5zZXRIYXNMZWFkaW5nU3BhY2Uo
ZmFsc2UpOworICAgIH0KKworICAgIC8vIENoZWNrIGZvciBtYWNybyByZWRlZmluaXRpb24uCisg
ICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQobWFjcm8u
bmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSAmJiAhbWFjcm8uZXF1YWxz
KGl0ZXItPnNlY29uZCkpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6TUFDUk9fUkVERUZJTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3JvLm5hbWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1NYWNyb1NldC0+aW5zZXJ0KHN0ZDo6bWFr
ZV9wYWlyKG1hY3JvLm5hbWUsIG1hY3JvKSk7Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZVVuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2Vu
KSA9PSBESVJFQ1RJVkVfVU5ERUYpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYWNyb1NldDo6aXRlcmF0b3IgaXRlciA9IG1N
YWNyb1NldC0+ZmluZCh0b2tlbi0+dGV4dCk7CisgICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5l
bmQoKSkKKyAgICB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQucHJlZGVmaW5lZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JP
X1BSRURFRklORURfVU5ERUZJTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBtTWFjcm9TZXQtPmVyYXNlKGl0ZXIpOworICAgICAgICB9
CisgICAgfQorCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKK30KKwordm9pZCBEaXJlY3Rp
dmVQYXJzZXI6OnBhcnNlSWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3Rp
dmUodG9rZW4pID09IERJUkVDVElWRV9JRik7CisgICAgcGFyc2VDb25kaXRpb25hbElmKHRva2Vu
KTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZkZWYoVG9rZW4qIHRva2VuKQor
eworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRkRFRik7Cisg
ICAgcGFyc2VDb25kaXRpb25hbElmKHRva2VuKTsKK30KKwordm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKTsKKyAgICBwYXJzZUNvbmRpdGlvbmFsSWYodG9rZW4p
OworfQorCit2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNlKFRva2VuKiB0b2tlbikKK3sK
KyAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRUxTRSk7CisKKyAg
ICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTFNFX1dJVEhPVVRfSUYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxT
dGFjay5iYWNrKCk7CisgICAgaWYgKGJsb2NrLnNraXBCbG9jaykKKyAgICB7CisgICAgICAgIC8v
IE5vIGRpYWdub3N0aWNzLiBKdXN0IHNraXAgdGhlIHdob2xlIGxpbmUuCisgICAgICAgIHNraXBV
bnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKGJsb2NrLmZvdW5kRWxzZUdyb3VwKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxTRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBibG9jay5mb3VuZEVsc2VHcm91cCA9IHRydWU7CisgICAgYmxvY2suc2tpcEdy
b3VwID0gYmxvY2suZm91bmRWYWxpZEdyb3VwOworICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9
IHRydWU7CisKKyAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMgYWZ0ZXIgI2Vs
c2UuCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICBpZiAoIWlzRU9EKHRva2VuKSkK
KyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJ
T05BTF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6
ZXIsIHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUVsaWYo
VG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVD
VElWRV9FTElGKTsKKworICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQorICAgIHsK
KyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VM
SUZfV0lUSE9VVF9JRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tl
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb25kaXRpb25hbEJsb2NrJiBibG9j
ayA9IG1Db25kaXRpb25hbFN0YWNrLmJhY2soKTsKKyAgICBpZiAoYmxvY2suc2tpcEJsb2NrKQor
ICAgIHsKKyAgICAgICAgLy8gTm8gZGlhZ25vc3RpY3MuIEp1c3Qgc2tpcCB0aGUgd2hvbGUgbGlu
ZS4KKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRFbHNlR3JvdXApCisgICAgeworICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfRUxJRl9BRlRF
Ul9FTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT50ZXh0KTsKKyAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYmxvY2suZm91bmRWYWxpZEdyb3VwKQorICAg
IHsKKyAgICAgICAgLy8gRG8gbm90IHBhcnNlIHRoZSBleHByZXNzaW9uLgorICAgICAgICAvLyBB
bHNvIGJlIGNhcmVmdWwgbm90IHRvIGVtaXQgYSBkaWFnbm9zdGljLgorICAgICAgICBibG9jay5z
a2lwR3JvdXAgPSB0cnVlOworICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGV4cHJlc3Npb24gPSBwYXJzZUV4
cHJlc3Npb25JZih0b2tlbik7CisgICAgYmxvY2suc2tpcEdyb3VwID0gZXhwcmVzc2lvbiA9PSAw
OworICAgIGJsb2NrLmZvdW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKK30KKwordm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRW5kaWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2Vy
dChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTkRJRik7CisKKyAgICBpZiAobUNv
bmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAg
ICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1Db25kaXRpb25hbFN0YWNrLnBvcF9iYWNrKCk7CisKKyAgICAvLyBXYXJuIGlm
IHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2VuZGlmLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tl
bik7CisgICAgaWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Cisg
ICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgfQorfQorCit2b2lk
IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFcnJvcihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0
KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0VSUk9SKTsKKworICAgIHN0ZDo6b3N0
cmluZ3N0cmVhbSBzdHJlYW07CisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAgICB3aGls
ZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkp
CisgICAgeworICAgICAgICBzdHJlYW0gPDwgKnRva2VuOworICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOworICAgIH0KKyAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlRXJyb3IodG9r
ZW4tPmxvY2F0aW9uLCBzdHJlYW0uc3RyKCkpOworfQorCisvLyBQYXJzZXMgcHJhZ21hIG9mIGZv
cm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXS4KK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVBy
YWdtYShUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX1BSQUdNQSk7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBQUkFH
TUFfTkFNRSwKKyAgICAgICAgTEVGVF9QQVJFTiwKKyAgICAgICAgUFJBR01BX1ZBTFVFLAorICAg
ICAgICBSSUdIVF9QQVJFTgorICAgIH07CisKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBz
dGQ6OnN0cmluZyBuYW1lLCB2YWx1ZTsKKyAgICBpbnQgc3RhdGUgPSBQUkFHTUFfTkFNRTsKKwor
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAn
XG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgc3dp
dGNoKHN0YXRlKyspCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFBSQUdNQV9OQU1FOgorICAg
ICAgICAgICAgbmFtZSA9IHRva2VuLT50ZXh0OworICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAm
JiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBMRUZUX1BBUkVOOgorICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAm
JiAodG9rZW4tPnR5cGUgPT0gJygnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgUFJBR01BX1ZBTFVFOgorICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi0+dGV4dDsKKyAgICAg
ICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElGSUVS
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUklHSFRfUEFSRU46CisgICAg
ICAgICAgICB2YWxpZCA9IHZhbGlkICYmICh0b2tlbi0+dHlwZSA9PSAnKScpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVyLT5sZXgo
dG9rZW4pOworICAgIH0KKworICAgIHZhbGlkID0gdmFsaWQgJiYgKChzdGF0ZSA9PSBQUkFHTUFf
TkFNRSkgfHwgICAgIC8vIEVtcHR5IHByYWdtYS4KKyAgICAgICAgICAgICAgICAgICAgICAoc3Rh
dGUgPT0gTEVGVF9QQVJFTikgfHwgICAgICAvLyBXaXRob3V0IHZhbHVlLgorICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0ZSA9PSBSSUdIVF9QQVJFTiArIDEpKTsgIC8vIFdpdGggdmFsdWUuCisg
ICAgaWYgKCF2YWxpZCkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTlJFQ09HTklaRURfUFJBR01BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbi0+bG9jYXRpb24sIG5hbWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZSA+IFBS
QUdNQV9OQU1FKSAgLy8gRG8gbm90IG5vdGlmeSBmb3IgZW1wdHkgcHJhZ21hLgorICAgIHsKKyAg
ICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVByYWdtYSh0b2tlbi0+bG9jYXRpb24sIG5h
bWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4dGVu
c2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0g
RElSRUNUSVZFX0VYVEVOU0lPTik7CisKKyAgICBlbnVtIFN0YXRlCisgICAgeworICAgICAgICBF
WFRfTkFNRSwKKyAgICAgICAgQ09MT04sCisgICAgICAgIEVYVF9CRUhBVklPUgorICAgIH07CisK
KyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICBzdGQ6OnN0cmluZyBuYW1lLCBiZWhhdmlvcjsK
KyAgICBpbnQgc3RhdGUgPSBFWFRfTkFNRTsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7
CisgICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9r
ZW46OkxBU1QpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBFWFRfTkFNRToKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElEX0VYVEVOU0lPTl9O
QU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQpIG5hbWUgPSB0b2tlbi0+dGV4dDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ09MT046CisgICAgICAgICAgICBpZiAodmFs
aWQgJiYgKHRva2VuLT50eXBlICE9ICc6JykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRVhUX0JFSEFWSU9SOgorICAgICAg
ICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OklOVkFMSURfRVhURU5TSU9OX0JFSEFWSU9SLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFs
aWQpIGJlaGF2aW9yID0gdG9rZW4tPnRleHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHZhbGlkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RP
S0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOworICAgIH0KKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IEVYVF9CRUhB
VklPUiArIDEpKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3Rp
Y3M6OklOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgfQorICAgIGlmICh2YWxpZCkKKyAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhh
bmRsZUV4dGVuc2lvbih0b2tlbi0+bG9jYXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbiogdG9rZW4pCit7CisgICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1ZFUlNJT04pOworCisgICAgaWYg
KG1QYXN0Rmlyc3RTdGF0ZW1lbnQpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6VkVSU0lPTl9OT1RfRklSU1RfU1RBVEVNRU5ULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIFZFUlNJT05fTlVNQkVSCisgICAgfTsK
KworICAgIGJvb2wgdmFsaWQgPSB0cnVlOworICAgIGludCB2ZXJzaW9uID0gMDsKKyAgICBpbnQg
c3RhdGUgPSBWRVJTSU9OX05VTUJFUjsKKworICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Cisg
ICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OkxBU1QpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICB7CisgICAg
ICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfVkVSU0lPTl9O
VU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWxpZCAmJiAhdG9rZW4tPmlWYWx1ZSgmdmVyc2lv
bikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNU
RURfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1Ub2tl
bml6ZXItPmxleCh0b2tlbik7CisgICAgfQorICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gVkVS
U0lPTl9OVU1CRVIgKyAxKSkKKyAgICB7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgdmFsaWQg
PSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkKQorICAgICAgICBtRGlyZWN0aXZlSGFuZGxl
ci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOworfQorCit2b2lkIERp
cmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0b2tlbikKK3sKKyAgICBhc3NlcnQoZ2V0
RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfTElORSk7CisKKyAgICBlbnVtIFN0YXRlCisg
ICAgeworICAgICAgICBMSU5FX05VTUJFUiwKKyAgICAgICAgRklMRV9OVU1CRVIKKyAgICB9Owor
CisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgaW50IGxpbmUgPSAwLCBmaWxlID0gMDsKKyAg
ICBpbnQgc3RhdGUgPSBMSU5FX05VTUJFUjsKKworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBh
bmRlcihtVG9rZW5pemVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7CisgICAgbWFjcm9FeHBh
bmRlci5sZXgodG9rZW4pOworICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUr
KykKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgTElORV9OVU1CRVI6CisgICAgICAgICAgICBp
ZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlZBTElEX0xJTkVfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsaWQgJiYgIXRva2VuLT5p
VmFsdWUoJmxpbmUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAg
ICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEZJTEVfTlVNQkVSOgorICAgICAgICAgICAgaWYgKHZhbGlk
ICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9G
SUxFX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbGlkICYmICF0b2tlbi0+aVZhbHVlKCZm
aWxlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBF
Q1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbWFj
cm9FeHBhbmRlci5sZXgodG9rZW4pOworICAgIH0KKworICAgIGlmICh2YWxpZCAmJiAoc3RhdGUg
IT0gRklMRV9OVU1CRVIpICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUiArIDEpKQorICAgIHsKKyAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfTElORV9ESVJF
Q1RJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9r
ZW4tPnRleHQpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAodmFsaWQp
CisgICAgeworICAgICAgICBtVG9rZW5pemVyLT5zZXRMaW5lTnVtYmVyKGxpbmUpOworICAgICAg
ICBpZiAoc3RhdGUgPT0gRklMRV9OVU1CRVIgKyAxKSBtVG9rZW5pemVyLT5zZXRGaWxlTnVtYmVy
KGZpbGUpOworICAgIH0KK30KKworYm9vbCBEaXJlY3RpdmVQYXJzZXI6OnNraXBwaW5nKCkgY29u
c3QKK3sKKyAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgQ29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5i
YWNrKCk7CisgICAgcmV0dXJuIGJsb2NrLnNraXBCbG9jayB8fCBibG9jay5za2lwR3JvdXA7Cit9
CisKK3ZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUNvbmRpdGlvbmFsSWYoVG9rZW4qIHRva2Vu
KQoreworICAgIENvbmRpdGlvbmFsQmxvY2sgYmxvY2s7CisgICAgYmxvY2sudHlwZSA9IHRva2Vu
LT50ZXh0OworICAgIGJsb2NrLmxvY2F0aW9uID0gdG9rZW4tPmxvY2F0aW9uOworCisgICAgaWYg
KHNraXBwaW5nKCkpCisgICAgeworICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbmFsIGJsb2NrIGlz
IGluc2lkZSBhbm90aGVyIGNvbmRpdGlvbmFsIGdyb3VwCisgICAgICAgIC8vIHdoaWNoIGlzIHNr
aXBwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhpcyB3aG9sZSBibG9jayBpcyBza2lwcGVkLgorICAg
ICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byBwYXJzZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lv
biB0aGF0IG1pZ2h0CisgICAgICAgIC8vIGVtaXQgYSBkaWFnbm9zdGljLgorICAgICAgICBza2lw
VW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgICAgICBibG9jay5za2lwQmxvY2sgPSB0
cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEaXJlY3RpdmVUeXBlIGRpcmVj
dGl2ZSA9IGdldERpcmVjdGl2ZSh0b2tlbik7CisKKyAgICAgICAgaW50IGV4cHJlc3Npb24gPSAw
OworICAgICAgICBzd2l0Y2ggKGRpcmVjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
RElSRUNUSVZFX0lGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklm
KHRva2VuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lG
REVGOgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmZGVmKHRva2Vu
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSRUNUSVZFX0lGTkRFRjoK
KyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbikgPT0g
MCA/IDEgOiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBibG9jay5za2lwR3JvdXAgPSBleHByZXNzaW9uID09IDA7CisgICAgICAgIGJsb2NrLmZv
dW5kVmFsaWRHcm91cCA9IGV4cHJlc3Npb24gIT0gMDsKKyAgICB9CisgICAgbUNvbmRpdGlvbmFs
U3RhY2sucHVzaF9iYWNrKGJsb2NrKTsKK30KKworaW50IERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VF
eHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKQoreworICAgIGFzc2VydCgoZ2V0RGlyZWN0aXZlKHRv
a2VuKSA9PSBESVJFQ1RJVkVfSUYpIHx8CisgICAgICAgICAgIChnZXREaXJlY3RpdmUodG9rZW4p
ID09IERJUkVDVElWRV9FTElGKSk7CisKKyAgICBEZWZpbmVkUGFyc2VyIGRlZmluZWRQYXJzZXIo
bVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOworICAgIE1hY3JvRXhwYW5kZXIg
bWFjcm9FeHBhbmRlcigmZGVmaW5lZFBhcnNlciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwor
ICAgIEV4cHJlc3Npb25QYXJzZXIgZXhwcmVzc2lvblBhcnNlcigmbWFjcm9FeHBhbmRlciwgbURp
YWdub3N0aWNzKTsKKworICAgIGludCBleHByZXNzaW9uID0gMDsKKyAgICBtYWNyb0V4cGFuZGVy
LmxleCh0b2tlbik7CisgICAgZXhwcmVzc2lvblBhcnNlci5wYXJzZSh0b2tlbiwgJmV4cHJlc3Np
b24pOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFmdGVyICNpZiBleHByZXNz
aW9uLgorICAgIGlmICghaXNFT0QodG9rZW4pKQorICAgIHsKKyAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwor
ICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOworICAgIH0KKworICAgIHJl
dHVybiBleHByZXNzaW9uOworfQorCitpbnQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUV4cHJlc3Np
b25JZmRlZihUb2tlbiogdG9rZW4pCit7CisgICAgYXNzZXJ0KChnZXREaXJlY3RpdmUodG9rZW4p
ID09IERJUkVDVElWRV9JRkRFRikgfHwKKyAgICAgICAgICAgKGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX0lGTkRFRikpOworCisgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKKyAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgeworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Cisg
ICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0
LT5maW5kKHRva2VuLT50ZXh0KTsKKyAgICBpbnQgZXhwcmVzc2lvbiA9IGl0ZXIgIT0gbU1hY3Jv
U2V0LT5lbmQoKSA/IDEgOiAwOworCisgICAgLy8gV2FybiBpZiB0aGVyZSBhcmUgdG9rZW5zIGFm
dGVyICNpZmRlZiBleHByZXNzaW9uLgorICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CisgICAg
aWYgKCFpc0VPRCh0b2tlbikpCisgICAgeworICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6Q09ORElUSU9OQUxfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIHNr
aXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7CisgICAgfQorICAgIHJldHVybiBleHByZXNz
aW9uOworfQorCit9ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2
ZVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhN2YwMDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oCkBAIC0wLDAgKzEsODIgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCisKKyNpbmNs
dWRlICJMZXhlci5oIgorI2luY2x1ZGUgIk1hY3JvLmgiCisjaW5jbHVkZSAicHBfdXRpbHMuaCIK
KyNpbmNsdWRlICJTb3VyY2VMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3Mg
RGlhZ25vc3RpY3M7CitjbGFzcyBEaXJlY3RpdmVIYW5kbGVyOworY2xhc3MgVG9rZW5pemVyOwor
CitjbGFzcyBEaXJlY3RpdmVQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKK3sKKyAgcHVibGljOgorICAg
IERpcmVjdGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9TZXQqIG1hY3JvU2V0LAorICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVj
dGl2ZUhhbmRsZXIpOworCisgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOworCisg
IHByaXZhdGU6CisgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERpcmVjdGl2ZVBhcnNl
cik7CisKKyAgICB2b2lkIHBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZURlZmluZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VVbmRlZihUb2tlbiogdG9r
ZW4pOworICAgIHZvaWQgcGFyc2VJZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VJZmRl
ZihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VJZm5kZWYoVG9rZW4qIHRva2VuKTsKKyAg
ICB2b2lkIHBhcnNlRWxzZShUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VFbGlmKFRva2Vu
KiB0b2tlbik7CisgICAgdm9pZCBwYXJzZUVuZGlmKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBw
YXJzZUVycm9yKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCBwYXJzZVByYWdtYShUb2tlbiogdG9r
ZW4pOworICAgIHZvaWQgcGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKTsKKyAgICB2b2lkIHBh
cnNlVmVyc2lvbihUb2tlbiogdG9rZW4pOworICAgIHZvaWQgcGFyc2VMaW5lKFRva2VuKiB0b2tl
bik7CisKKyAgICBib29sIHNraXBwaW5nKCkgY29uc3Q7CisgICAgdm9pZCBwYXJzZUNvbmRpdGlv
bmFsSWYoVG9rZW4qIHRva2VuKTsKKyAgICBpbnQgcGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRv
a2VuKTsKKyAgICBpbnQgcGFyc2VFeHByZXNzaW9uSWZkZWYoVG9rZW4qIHRva2VuKTsKKworICAg
IHN0cnVjdCBDb25kaXRpb25hbEJsb2NrCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyB0eXBl
OworICAgICAgICBTb3VyY2VMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICAgICAgYm9vbCBza2lwQmxv
Y2s7CisgICAgICAgIGJvb2wgc2tpcEdyb3VwOworICAgICAgICBib29sIGZvdW5kVmFsaWRHcm91
cDsKKyAgICAgICAgYm9vbCBmb3VuZEVsc2VHcm91cDsKKworICAgICAgICBDb25kaXRpb25hbEJs
b2NrKCkgOgorICAgICAgICAgICAgc2tpcEJsb2NrKGZhbHNlKSwKKyAgICAgICAgICAgIHNraXBH
cm91cChmYWxzZSksCisgICAgICAgICAgICBmb3VuZFZhbGlkR3JvdXAoZmFsc2UpLAorICAgICAg
ICAgICAgZm91bmRFbHNlR3JvdXAoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07
CisgICAgYm9vbCBtUGFzdEZpcnN0U3RhdGVtZW50OworICAgIHN0ZDo6dmVjdG9yPENvbmRpdGlv
bmFsQmxvY2s+IG1Db25kaXRpb25hbFN0YWNrOworICAgIFRva2VuaXplciogbVRva2VuaXplcjsK
KyAgICBNYWNyb1NldCogbU1hY3JvU2V0OworICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7
CisgICAgRGlyZWN0aXZlSGFuZGxlciogbURpcmVjdGl2ZUhhbmRsZXI7Cit9OworCit9ICAvLyBu
YW1lc3BhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9Q
QVJTRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhNDliOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhw
cmVzc2lvblBhcnNlci5jcHAKQEAgLTAsMCArMSwxOTU0IEBACisvKiBBIEJpc29uIHBhcnNlciwg
bWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24g
Zm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworCisgICBDb3B5cmlnaHQgKEMpIDE5
ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYK
KyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4gICovCisKKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3Jl
YXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJp
c29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRl
cm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQor
ICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJz
aW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYg
eW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxm
LCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0
aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAg
Qmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorCisgICBU
aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBw
YXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxp
ZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCisKKy8q
IEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRv
IGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJl
IGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndp
c2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lk
YWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNz
YXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNF
UiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICov
CisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlC
SVNPTl9WRVJTSU9OICIyLjMiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNL
RUxFVE9OX05BTUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQ
VVJFIDEKKworLyogVXNpbmcgbG9jYXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAK
KworLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KKyNk
ZWZpbmUgeXlwYXJzZSBwcHBhcnNlCisjZGVmaW5lIHl5bGV4ICAgcHBsZXgKKyNkZWZpbmUgeXll
cnJvciBwcGVycm9yCisjZGVmaW5lIHl5bHZhbCAgcHBsdmFsCisjZGVmaW5lIHl5Y2hhciAgcHBj
aGFyCisjZGVmaW5lIHl5ZGVidWcgcHBkZWJ1ZworI2RlZmluZSB5eW5lcnJzIHBwbmVycnMKKwor
CisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZ
UEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBH
REIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVu
dW0geXl0b2tlbnR5cGUgeworICAgICBUT0tfQ09OU1RfSU5UID0gMjU4LAorICAgICBUT0tfT1Bf
T1IgPSAyNTksCisgICAgIFRPS19PUF9BTkQgPSAyNjAsCisgICAgIFRPS19PUF9ORSA9IDI2MSwK
KyAgICAgVE9LX09QX0VRID0gMjYyLAorICAgICBUT0tfT1BfR0UgPSAyNjMsCisgICAgIFRPS19P
UF9MRSA9IDI2NCwKKyAgICAgVE9LX09QX1JJR0hUID0gMjY1LAorICAgICBUT0tfT1BfTEVGVCA9
IDI2NiwKKyAgICAgVE9LX1VOQVJZID0gMjY3CisgICB9OworI2VuZGlmCisvKiBUb2tlbnMuICAq
LworI2RlZmluZSBUT0tfQ09OU1RfSU5UIDI1OAorI2RlZmluZSBUT0tfT1BfT1IgMjU5CisjZGVm
aW5lIFRPS19PUF9BTkQgMjYwCisjZGVmaW5lIFRPS19PUF9ORSAyNjEKKyNkZWZpbmUgVE9LX09Q
X0VRIDI2MgorI2RlZmluZSBUT0tfT1BfR0UgMjYzCisjZGVmaW5lIFRPS19PUF9MRSAyNjQKKyNk
ZWZpbmUgVE9LX09QX1JJR0hUIDI2NQorI2RlZmluZSBUT0tfT1BfTEVGVCAyNjYKKyNkZWZpbmUg
VE9LX1VOQVJZIDI2NworCisKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVj
bGFyYXRpb25zLiAgKi8KKworCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8t
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKy8vIElmIGNs
YW5nIG9yIGdjYy4KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorCisvLyBUdXJuIG9mZiB1bmluaXRp
YWxpemVkIHZhcmlhYmxlIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQg
cHBsdmFsIHZhcmlhYmxlLgorLy8gT24gZ2NjIDQuNyssIFRoZSBmbGFnIGlzIGNhbGxlZCAiLVdt
YXliZS11bmluaXRpYWxpemVkIi4KKy8vIE9uIGNsYW5nIGFuZCBnY2MgPCA0LjcsIHRoZSBmbGFn
IGlzIGNhbGxlZCAiLVd1bmluaXRpYWxpemVkIi4KKyNpZiAhZGVmaW5lZChfX2NsYW5nX18pICYm
ICgoX19HTlVDX18gPT0gNCAmJiBfX0dOVV9DX01JTk9SX18gPj0gNykgfHwgX19HTlVDX18gPj0g
NSkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVk
IgorI2Vsc2UKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmluaXRpYWxpemVk
IgorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDA2NSA0NzAxKQorI2VuZGlmCisKKyNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgi
CisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJE
aWFnbm9zdGljc0Jhc2UuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlRva2VuLmgi
CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBfX2ludDY0IFlZU1RZUEU7CisjZWxz
ZQorI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBpbnRtYXhfdCBZWVNUWVBFOworI2VuZGlm
ICAvLyBfTVNDX1ZFUgorI2RlZmluZSBZWUVOQUJMRV9OTFMgMAorI2RlZmluZSBZWUxUWVBFX0lT
X1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2RlZmluZSBZWVNUWVBF
X0lTX0RFQ0xBUkVEIDEKKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDb250ZXh0Cit7CisgICAgcHA6
OkRpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKyAgICBwcDo6TGV4ZXIqIGxleGVyOworICAgIHBw
OjpUb2tlbiogdG9rZW47CisgICAgaW50KiByZXN1bHQ7Cit9OworfSAgLy8gbmFtZXNwYWNlCisK
Kworc3RhdGljIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCk7Citz
dGF0aWMgdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7
CisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUg
WVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4g
ICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBk
ZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0Ug
MAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZ
VE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCisKKyNpZiAhIGRl
ZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiBp
bnQgWVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2ls
bCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZp
bmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKworLyogQ29weSB0aGUgc2Vjb25k
IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8qIExpbmUgMjE2IG9mIHlhY2Mu
Yy4gICovCisKKworI2lmZGVmIHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVm
IFlZVFlQRV9VSU5UOAordHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UK
K3R5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZ
VFlQRV9JTlQ4Cit0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OworI2VsaWYgKGRlZmlu
ZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5
cGVfaW50ODsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50
MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNl
bmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVf
aW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisK
KyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0la
RV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0la
RV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVCAmJiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCisjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAorIyBlbHNl
CisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2Rl
ZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lmbmRlZiBZWV8KKyMgaWYg
WVlFTkFCTEVfTkxTCisjICBpZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAv
KiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhtc2dpZCkg
ZGdldHRleHQgKCJiaXNvbi1ydW50aW1lIiwgbXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBp
Zm5kZWYgWVlfCisjICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorIyBlbmRpZgorI2VuZGlmCisK
Ky8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwor
I2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19HTlVDX18KKyMgZGVmaW5lIFlZVVNFKGUp
ICgodm9pZCkgKGUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZVVNFKGUpIC8qIGVtcHR5ICovCisjZW5k
aWYKKworLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJv
dXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCisjaWZuZGVmIGxpbnQKKyMgZGVmaW5lIFlZSUQo
bikgKG4pCisjZWxzZQorI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
K3N0YXRpYyBpbnQKK1lZSUQgKGludCBpKQorI2Vsc2UKK3N0YXRpYyBpbnQKK1lZSUQgKGkpCisg
ICAgaW50IGk7CisjZW5kaWYKK3sKKyAgcmV0dXJuIGk7Cit9CisjZW5kaWYKKworI2lmICEgZGVm
aW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisvKiBUaGUgcGFyc2VyIGludm9r
ZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisK
KyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMg
ICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxs
b2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgorIyAgICBpbmNsdWRl
IDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVsaWYg
ZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCisjICAgZWxp
ZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyAgIGVs
c2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgIGlmICEgZGVmaW5lZCBf
QUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICAgIGRlZmlu
ZSBfU1RETElCX0ggMQorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5k
aWYKKyMgZW5kaWYKKworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQYWNpZnkgR0NDJ3Mg
YGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIp
IGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQorIyAgaWZuZGVmIFlZU1RBQ0tf
QUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3Vh
cmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBhbmQgYSBwYWdlIHNp
emUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5Cisg
ICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRs
eSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxv
Y2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUgWVlTVEFDS19BTExP
Q19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisjICBlbmRpZgorIyBl
bHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVmaW5lIFlZU1RBQ0tf
RlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRpZgorIyAgaWYgKGRl
ZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCisgICAgICAgJiYgISAo
KGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKwkgICAgICYmIChkZWZpbmVk
IFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5G
UklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAg
ZGVmaW5lIF9TVERMSUJfSCAxCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlNQUxM
T0MKKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAm
JiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlGUkVFCisjICAgZGVm
aW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIF9TVERM
SUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2b2lkIGZyZWUg
KHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgor
IyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVS
Uk9SX1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYg
KCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisJIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklB
TCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkg
YWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7CisgIHl5
dHlwZV9pbnQxNiB5eXNzOworICBZWVNUWVBFIHl5dnM7CisgIH07CisKKy8qIFRoZSBzaXplIG9m
IHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4g
ICovCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2Mp
IC0gMSkKKworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQg
YWxsIHN0YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RB
Q0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVv
ZiAoWVlTVFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKworLyogQ29weSBD
T1VOVCBvYmplY3RzIGZyb20gRlJPTSB0byBUTy4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u
IGRvCisgICBub3Qgb3ZlcmxhcC4gICovCisjIGlmbmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQg
X19HTlVDX18gJiYgMSA8IF9fR05VQ19fCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291
bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6ZW9m
ICgqKEZyb20pKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJ
CVwKKyAgICAgIGRvCQkJCQlcCisJewkJCQkJXAorCSAgWVlTSVpFX1QgeXlpOwkJCQlcCisJICBm
b3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChG
cm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlIChZWUlEICgwKSkKKyMgIGVuZGlm
CisjIGVuZGlmCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0
aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJ
WkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3Rh
Y2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBB
ZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQK
KyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2spCQkJCQlcCisg
ICAgZG8JCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7
CQkJCQkJXAorCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKKwlT
dGFjayA9ICZ5eXB0ci0+U3RhY2s7CQkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAq
IHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5eW5l
d2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIHdo
aWxlIChZWUlEICgwKSkKKworI2VuZGlmCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9m
IHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDE0CisvKiBZWUxB
U1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMTc1CisK
Ky8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9L
RU5TICAyNworLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmlu
ZSBZWU5OVFMgIDMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5l
IFlZTlJVTEVTICAyNgorLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVm
aW5lIFlZTlNUQVRFUyAgNTIKKworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJv
bCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sg
IDIKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJ
CQkJCVwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRl
W1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3lt
Ym9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAyMywgICAg
IDIsICAgICAyLCAgICAgMiwgICAgMjEsICAgICA4LCAgICAgMiwKKyAgICAgIDI1LCAgICAyNiwg
ICAgMTksICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAyMCwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAxMSwgICAgIDIsICAgIDEyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDcsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDYsICAgICAyLCAgICAyNCwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA5LCAgICAxMCwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDIyCit9OworCisjaWYgWVlERUJVRworLyogWVlQUkhTW1lZTl0gLS0gSW5k
ZXggb2YgdGhlIGZpcnN0IFJIUyBzeW1ib2wgb2YgcnVsZSBudW1iZXIgWVlOIGluCisgICBZWVJI
Uy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cHJoc1tdID0KK3sKKyAgICAgICAw
LCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgMTEsICAgIDE1LCAgICAxOSwgICAgMjMs
ICAgIDI3LAorICAgICAgMzEsICAgIDM1LCAgICAzOSwgICAgNDMsICAgIDQ3LCAgICA1MSwgICAg
NTUsICAgIDU5LCAgICA2MywgICAgNjcsCisgICAgICA3MSwgICAgNzUsICAgIDc5LCAgICA4Miwg
ICAgODUsICAgIDg4LCAgICA5MQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBs
aXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJo
c1tdID0KK3sKKyAgICAgIDI4LCAgICAgMCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgIDMsICAg
IC0xLCAgICAyOSwgICAgIDQsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAgNSwgICAgMjks
ICAgIC0xLCAgICAyOSwgICAgIDYsICAgIDI5LCAgICAtMSwgICAgMjksCisgICAgICAgNywgICAg
MjksICAgIC0xLCAgICAyOSwgICAgIDgsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA5LCAgICAy
OSwKKyAgICAgIC0xLCAgICAyOSwgICAgMTAsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEzLCAg
ICAyOSwgICAgLTEsICAgIDI5LAorICAgICAgMTQsICAgIDI5LCAgICAtMSwgICAgMjksICAgIDEy
LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxMSwgICAgMjksCisgICAgICAtMSwgICAgMjksICAg
IDE1LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNiwgICAgMjksICAgIC0xLCAgICAyOSwKKyAg
ICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDI5LCAgICAxNywgICAgMjksICAgIC0xLCAgICAyOSwg
ICAgMjEsICAgIDI5LAorICAgICAgLTEsICAgIDI5LCAgICAyMCwgICAgMjksICAgIC0xLCAgICAy
OSwgICAgMTksICAgIDI5LCAgICAtMSwgICAgMjMsCisgICAgICAyOSwgICAgLTEsICAgIDI0LCAg
ICAyOSwgICAgLTEsICAgIDE4LCAgICAyOSwgICAgLTEsICAgIDE3LCAgICAyOSwKKyAgICAgIC0x
LCAgICAyNSwgICAgMjksICAgIDI2LCAgICAtMQorfTsKKworLyogWVlSTElORVtZWU5dIC0tIHNv
dXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9Cit7CisgICAgICAgMCwgICAgOTYsICAgIDk2
LCAgIDEwMywgICAxMDQsICAgMTA3LCAgIDExMCwgICAxMTMsICAgMTE2LCAgIDExOSwKKyAgICAg
MTIyLCAgIDEyNSwgICAxMjgsICAgMTMxLCAgIDEzNCwgICAxMzcsICAgMTQwLCAgIDE0MywgICAx
NDYsICAgMTQ5LAorICAgICAxNjIsICAgMTc1LCAgIDE3OCwgICAxODEsICAgMTg0LCAgIDE4Nywg
ICAxOTAKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZ
VE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhl
IHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0
aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpj
b25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIlRP
S19DT05TVF9JTlQiLCAiVE9LX09QX09SIiwKKyAgIlRPS19PUF9BTkQiLCAiJ3wnIiwgIideJyIs
ICInJiciLCAiVE9LX09QX05FIiwgIlRPS19PUF9FUSIsICInPCciLAorICAiJz4nIiwgIlRPS19P
UF9HRSIsICJUT0tfT1BfTEUiLCAiVE9LX09QX1JJR0hUIiwgIlRPS19PUF9MRUZUIiwgIicrJyIs
CisgICInLSciLCAiJyonIiwgIicvJyIsICInJSciLCAiVE9LX1VOQVJZIiwgIichJyIsICInfici
LCAiJygnIiwgIicpJyIsCisgICIkYWNjZXB0IiwgImlucHV0IiwgImV4cHJlc3Npb24iLCAwCit9
OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJ
bnRlcm5hbCB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVN
LiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQoreworICAgICAg
IDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAxMjQsICAgIDk0LCAgICAz
OCwgICAyNjEsCisgICAgIDI2MiwgICAgNjAsICAgIDYyLCAgIDI2MywgICAyNjQsICAgMjY1LCAg
IDI2NiwgICAgNDMsICAgIDQ1LCAgICA0MiwKKyAgICAgIDQ3LCAgICAzNywgICAyNjcsICAgIDMz
LCAgIDEyNiwgICAgNDAsICAgIDQxCit9OworIyBlbmRpZgorCisvKiBZWVIxW1lZTl0gLS0gU3lt
Ym9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjks
ICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwg
ICAgMjksCisgICAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OQorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdo
dCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCisgICAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAg
ICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzCit9OworCisvKiBZWURFRkFD
VFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKKyAg
IFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRv
IGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDI1LAorICAg
ICAgMjQsICAgIDIyLCAgICAyMywgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDI2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAs
ICAgIDE0LCAgICAxMywgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxNywg
ICAgMjEsCisgICAgICAyMCwgICAgMTkKK307CisKKy8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwg
ICAgIDcsICAgICA4Cit9OworCisvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRB
QkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5l
IFlZUEFDVF9OSU5GIC0xMQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7
CisgICAgICA0NiwgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAg
MTIsICAgIDY4LCAgIC0xMSwKKyAgICAgLTExLCAgIC0xMSwgICAtMTEsICAgIDI3LCAgIC0xMSwg
ICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LAorICAgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsCisgICAg
ICA0NiwgICAgNDYsICAgIDQ2LCAgIC0xMSwgICAgODUsICAgMTAxLCAgIDExNiwgICAxMzAsICAg
MTQzLCAgIDE1NCwKKyAgICAgMTU0LCAgIC0xMCwgICAtMTAsICAgLTEwLCAgIC0xMCwgICAgMzcs
ICAgIDM3LCAgICAzMSwgICAgMzEsICAgLTExLAorICAgICAtMTEsICAgLTExCit9OworCisvKiBZ
WVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9b
XSA9Cit7CisgICAgIC0xMSwgICAtMTEsICAgIC0yCit9OworCisvKiBZWVRBQkxFW1lZUEFDVFtT
VEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKKyAgIHBvc2l0
aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGlj
aAorICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qg
c2F5cy4KKyAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KKyNkZWZpbmUgWVlU
QUJMRV9OSU5GIC0xCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9Cit7Cisg
ICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMTQsICAgIDM0LCAgICAzNSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCisgICAgICA1
MSwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgICAxLAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
NCwKKyAgICAgICA1LCAgICAgNiwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAg
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAxNywg
ICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMTks
ICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMgorfTsKKworc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9Cit7CisgICAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAg
ICAgIDIwLCAgICAyMSwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgICAzLAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxNywg
ICAgMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMywKKyAgICAgIDI0LCAgICAy
NSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNiwgICAgIDcsICAgICA4LAorICAg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDgsICAgICA5LAorICAgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksCisgICAgICAyMCwgICAgMjEsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMQorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0g
LS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBz
dGF0ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9
Cit7CisgICAgICAgMCwgICAgIDMsICAgIDE3LCAgICAxOCwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjgsICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAg
MCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisg
ICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyNiwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjks
ICAgIDI5LCAgICAyOSwKKyAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAg
MjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LAorICAgICAgMjksICAgIDI5Cit9OworCisj
ZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXlj
aGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJMAor
CisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290
byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgorCisKKy8qIExp
a2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVt
cG9yYXJpbHkKKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9m
IFlZRVJST1IsIGZvciBHQ0MuCisgICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQg
dmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCisKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJy
bGFiCisKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorCisjZGVmaW5l
IFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKK2RvCQkJCQkJCQlcCisgIGlmICh5eWNoYXIg
PT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXlj
aGFyID0gKFRva2VuKTsJCQkJCQlcCisgICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKKyAg
ICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorICAgICAgWVlQT1BTVEFD
SyAoMSk7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJ
XAorICBlbHNlCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgeXllcnJvciAoY29udGV4
dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisgICAgICBZWUVSUk9S
OwkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAord2hpbGUgKFlZSUQgKDApKQorCisKKyNkZWZpbmUg
WVlURVJST1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CisKKworLyogWVlMTE9DX0RFRkFVTFQg
LS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlz
IDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAg
IHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2Rl
ZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQK
KyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikJCQkJXAorICAgIGRvCQkJ
CQkJCQkJXAorICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisJewkJCQkJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0
X2xpbmUgICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwKKwkgIChDdXJyZW50KS5m
aXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47CVwKKwkgIChDdXJy
ZW50KS5sYXN0X2xpbmUgICAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2xpbmU7CQlcCisJICAo
Q3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9jb2x1bW47CVwK
Kwl9CQkJCQkJCQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgKEN1cnJl
bnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlcCisJICAgIFlZUkhT
TE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9
IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCisJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3Rf
Y29sdW1uOwkJCQlcCisJfQkJCQkJCQkJXAorICAgIHdoaWxlIChZWUlEICgwKSkKKyNlbmRpZgor
CisKKy8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3Ry
ZWFtLgorICAgVGhpcyBtYWNybyB3YXMgbm90IG1hbmRhdGVkIG9yaWdpbmFsbHk6IGRlZmluZSBv
bmx5IGlmIHdlIGtub3cKKyAgIHdlIHdvbid0IGJyZWFrIHVzZXIgY29kZTogd2hlbiB0aGVzZSBh
cmUgdGhlIGxvY2F0aW9ucyB3ZSBrbm93LiAgKi8KKworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklO
VAorIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChG
aWxlLCBMb2MpCQkJXAorICAgICBmcHJpbnRmIChGaWxlLCAiJWQuJWQtJWQuJWQiLAkJCVwKKwkg
ICAgICAoTG9jKS5maXJzdF9saW5lLCAoTG9jKS5maXJzdF9jb2x1bW4sCVwKKwkgICAgICAoTG9j
KS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xP
Q0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKwor
LyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICov
CisKKyNpZmRlZiBZWUxFWF9QQVJBTQorIyBkZWZpbmUgWVlMRVggeXlsZXggKCZ5eWx2YWwsIFlZ
TEVYX1BBUkFNKQorI2Vsc2UKKyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBjb250ZXh0
KQorI2VuZGlmCisKKy8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZ
WURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5URgorIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5G
UklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRm
CisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisg
IGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCit9IHdoaWxlIChZ
WUlEICgwKSkKKworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwg
TG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJ
ICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBU
aXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAor
CQkgIFR5cGUsIFZhbHVlLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJc
biIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9s
IG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQor
c3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5
eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkK
KyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQgeXl0
eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpj
b250ZXh0OworI2VuZGlmCit7CisgIGlmICgheXl2YWx1ZXApCisgICAgcmV0dXJuOworICBZWVVT
RSAoY29udGV4dCk7CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykK
KyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyMg
ZWxzZQorICBZWVVTRSAoeXlvdXRwdXQpOworIyBlbmRpZgorICBzd2l0Y2ggKHl5dHlwZSkKKyAg
ICB7CisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50
IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFs
dWVwLCBDb250ZXh0ICpjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfcHJp
bnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0
cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVw
OworICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKHl5dHlwZSA8IFlZTlRP
S0VOUykKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMgKCIsIHl5dG5hbWVbeXl0
eXBlXSk7CisgIGVsc2UKKyAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5
dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0
eXBlLCB5eXZhbHVlcCwgY29udGV4dCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3Rh
Y2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAg
ICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZv
aWQKK3l5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0
b3ApCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKKyAg
ICB5eXR5cGVfaW50MTYgKmJvdHRvbTsKKyAgICB5eXR5cGVfaW50MTYgKnRvcDsKKyNlbmRpZgor
eworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgYm90dG9tIDw9
IHRvcDsgKytib3R0b20pCisgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqYm90dG9tKTsK
KyAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklO
VChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJ
XAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCit9IHdoaWxlIChZ
WUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2Vk
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CisKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAg
ICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9p
ZAoreXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSwgQ29udGV4dCAq
Y29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXly
dWxlLCBjb250ZXh0KQorICAgIFlZU1RZUEUgKnl5dnNwOworICAgIGludCB5eXJ1bGU7CisgICAg
Q29udGV4dCAqY29udGV4dDsKKyNlbmRpZgoreworICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVd
OworICBpbnQgeXlpOworICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxl
XTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5l
ICVsdSk6XG4iLAorCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworICAvKiBUaGUgc3ltYm9scyBi
ZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQor
ICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAg
ICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwK
KwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkgICAgICAgCQkgICAg
ICAgLCBjb250ZXh0KTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQor
CisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCVwKKyAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCBSdWxlLCBjb250ZXh0KTsg
XAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKy8qIE5vbnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJh
Y2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgc28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2Vy
cyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisj
IGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwg
VHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBU
b3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAq
LworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3Rh
Y2tzLiAgKi8KKyNpZm5kZWYJWVlJTklUREVQVEgKKyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAor
I2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdy
b3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9u
IG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7
IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYKKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8
IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1w
cmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmbmRlZiBZWU1BWERFUFRICisj
IGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5kaWYKKworDAorCisjaWYgWVlFUlJPUl9WRVJC
T1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZp
bmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJl
dHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5
eXN0cikKKyNlbHNlCitzdGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuICh5eXN0cikKKyAgICBjb25z
dCBjaGFyICp5eXN0cjsKKyNlbmRpZgoreworICBZWVNJWkVfVCB5eWxlbjsKKyAgZm9yICh5eWxl
biA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIHl5
bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRl
ZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VS
Q0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRv
IFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGlu
CisgICBZWURFU1QuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5
c3JjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAg
IGNoYXIgKnl5ZGVzdDsKKyAgICBjb25zdCBjaGFyICp5eXNyYzsKKyNlbmRpZgoreworICBjaGFy
ICp5eWQgPSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgo
Knl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQg
LSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5
IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5l
Y2Vzc2FyeQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxl
IGZvciB5eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBp
cyB1bm5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3Bo
ZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3Ns
YXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxs
LCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVz
dWx0CisgICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIg
KGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicp
CisgICAgeworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9
IHl5c3RyOworCisgICAgICBmb3IgKDs7KQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2Fz
ZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwor
CSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19u
b3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoK
KwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsK
KwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXly
ZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CisgICAgZG9fbm90X3N0cmlw
X3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1cm4geXlzdHJsZW4g
KHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsKK30K
KyMgZW5kaWYKKworLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQg
dGhlIHVuZXhwZWN0ZWQgdG9rZW4KKyAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAg
UmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAorICAgaW5jbHVkaW5nIHRoZSB0ZXJt
aW5hdGluZyBudWxsIGJ5dGUuICBJZiBZWVJFU1VMVCBpcyBudWxsLCBkbyBub3QKKyAgIGNvcHkg
YW55dGhpbmc7IGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZQor
ICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJz
eW50YXggZXJyb3IiCisgICBtZXNzYWdlIHdpbGwgZG8uICBSZXR1cm4gWVlTSVpFX01BWElNVU0g
aWYgb3ZlcmZsb3cgb2NjdXJzIGR1cmluZworICAgc2l6ZSBjYWxjdWxhdGlvbi4gICovCitzdGF0
aWMgWVlTSVpFX1QKK3l5c3ludGF4X2Vycm9yIChjaGFyICp5eXJlc3VsdCwgaW50IHl5c3RhdGUs
IGludCB5eWNoYXIpCit7CisgIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisKKyAgaWYgKCEg
KFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQorICAgIHJldHVybiAwOworICBl
bHNlCisgICAgeworICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAg
ICAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXR5cGVdKTsKKyAg
ICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICBZWVNJWkVfVCB5eXNpemUxOwor
ICAgICAgaW50IHl5c2l6ZV9vdmVyZmxvdyA9IDA7CisgICAgICBlbnVtIHsgWVlFUlJPUl9WRVJC
T1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKKyAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1Jf
VkVSQk9TRV9BUkdTX01BWElNVU1dOworICAgICAgaW50IHl5eDsKKworIyBpZiAwCisgICAgICAv
KiBUaGlzIGlzIHNvIHhnZXR0ZXh0IHNlZXMgdGhlIHRyYW5zbGF0YWJsZSBmb3JtYXRzIHRoYXQg
YXJlCisJIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkuICAqLworICAgICAgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVk
ICVzLCBleHBlY3RpbmcgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVk
ICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4
cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKKyAgICAgIFlZXygic3ludGF4
IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKTsK
KyMgZW5kaWYKKyAgICAgIGNoYXIgKnl5Zm10OworICAgICAgY2hhciBjb25zdCAqeXlmOworICAg
ICAgc3RhdGljIGNoYXIgY29uc3QgeXl1bmV4cGVjdGVkW10gPSAic3ludGF4IGVycm9yLCB1bmV4
cGVjdGVkICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBl
eHBlY3RpbmcgJXMiOworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlvcltdID0gIiBvciAlcyI7
CisgICAgICBjaGFyIHl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQKKwkJICAgICsgc2l6ZW9m
IHl5ZXhwZWN0aW5nIC0gMQorCQkgICAgKyAoKFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0g
LSAyKQorCQkgICAgICAgKiAoc2l6ZW9mIHl5b3IgLSAxKSldOworICAgICAgY2hhciBjb25zdCAq
eXlwcmVmaXggPSB5eWV4cGVjdGluZzsKKworICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYg
bmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorCSBZWUNIRUNLLiAgKi8KKyAg
ICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKKworICAgICAgLyogU3RheSB3
aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICBpbnQg
eXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7CisgICAgICBpbnQgeXl4ZW5kID0geXljaGVj
a2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7CisgICAgICBpbnQgeXlj
b3VudCA9IDE7CisKKyAgICAgIHl5YXJnWzBdID0geXl0bmFtZVt5eXR5cGVdOworICAgICAgeXlm
bXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7CisKKyAgICAgIGZvciAoeXl4
ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCisJaWYgKHl5Y2hlY2tbeXl4ICsgeXlu
XSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQorCSAgeworCSAgICBpZiAoeXljb3VudCA9PSBZ
WUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQorCSAgICAgIHsKKwkJeXljb3VudCA9IDE7CisJ
CXl5c2l6ZSA9IHl5c2l6ZTA7CisJCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9
ICdcMCc7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5h
bWVbeXl4XTsKKwkgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5
eXhdKTsKKwkgICAgeXlzaXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKwkgICAg
eXlzaXplID0geXlzaXplMTsKKwkgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmbXQsIHl5cHJlZml4
KTsKKwkgICAgeXlwcmVmaXggPSB5eW9yOworCSAgfQorCisgICAgICB5eWYgPSBZWV8oeXlmb3Jt
YXQpOworICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOworICAgICAgeXlz
aXplX292ZXJmbG93IHw9ICh5eXNpemUxIDwgeXlzaXplKTsKKyAgICAgIHl5c2l6ZSA9IHl5c2l6
ZTE7CisKKyAgICAgIGlmICh5eXNpemVfb3ZlcmZsb3cpCisJcmV0dXJuIFlZU0laRV9NQVhJTVVN
OworCisgICAgICBpZiAoeXlyZXN1bHQpCisJeworCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhh
dCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorCSAgICAgRG9uJ3QgaGF2ZSB1
bmRlZmluZWQgYmVoYXZpb3IgZXZlbiBpZiB0aGUgdHJhbnNsYXRpb24KKwkgICAgIHByb2R1Y2Vk
IGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4gICovCisJICBjaGFyICp5
eXAgPSB5eXJlc3VsdDsKKwkgIGludCB5eWkgPSAwOworCSAgd2hpbGUgKCgqeXlwID0gKnl5Zikg
IT0gJ1wwJykKKwkgICAgeworCSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3Mn
ICYmIHl5aSA8IHl5Y291bnQpCisJCXsKKwkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJn
W3l5aSsrXSk7CisJCSAgeXlmICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB5eXAr
KzsKKwkJICB5eWYrKzsKKwkJfQorCSAgICB9CisJfQorICAgICAgcmV0dXJuIHl5c2l6ZTsKKyAg
ICB9Cit9CisjZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCisMCisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9y
eSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypBUkdTVVNFRCovCisjaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKGNv
bnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCwgQ29udGV4dCAq
Y29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwg
eXl2YWx1ZXAsIGNvbnRleHQpCisgICAgY29uc3QgY2hhciAqeXltc2c7CisgICAgaW50IHl5dHlw
ZTsKKyAgICBZWVNUWVBFICp5eXZhbHVlcDsKKyAgICBDb250ZXh0ICpjb250ZXh0OworI2VuZGlm
Cit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIFlZVVNFIChjb250ZXh0KTsKKworICBpZiAoIXl5
bXNnKQorICAgIHl5bXNnID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywg
eXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworCisgIHN3aXRjaCAoeXl0eXBlKQorICAg
IHsKKworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9Cit9CisMCisKKy8qIFByZXZlbnQg
d2FybmluZ3MgZnJvbSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCisKKyNpZmRlZiBZWVBBUlNF
X1BBUkFNCisjaWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQg
eXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7Cisj
ZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cworaW50IHl5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpOwor
I2Vsc2UKK2ludCB5eXBhcnNlICgpOworI2VuZGlmCisjZW5kaWYgLyogISBZWVBBUlNFX1BBUkFN
ICovCisKKworCisKKworCisvKi0tLS0tLS0tLS0uCit8IHl5cGFyc2UuICB8CitgLS0tLS0tLS0t
LSovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKQorI2Vsc2UK
K2ludAoreXlwYXJzZSAoWVlQQVJTRV9QQVJBTSkKKyAgICB2b2lkICpZWVBBUlNFX1BBUkFNOwor
I2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKENvbnRleHQgKmNvbnRleHQpCisj
ZWxzZQoraW50Cit5eXBhcnNlIChjb250ZXh0KQorICAgIENvbnRleHQgKmNvbnRleHQ7CisjZW5k
aWYKKyNlbmRpZgoreworICAvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworaW50IHl5Y2hh
cjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rLWFoZWFkIHN5bWJvbC4gICov
CitZWVNUWVBFIHl5bHZhbDsKKworLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAg
Ki8KK2ludCB5eW5lcnJzOworCisgIGludCB5eXN0YXRlOworICBpbnQgeXluOworICBpbnQgeXly
ZXN1bHQ7CisgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3Nh
Z2VzIGVuYWJsZWQuICAqLworICBpbnQgeXllcnJzdGF0dXM7CisgIC8qIExvb2stYWhlYWQgdG9r
ZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5
eXRva2VuID0gMDsKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBt
ZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4
XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBz
aXplb2YgeXltc2didWY7CisjZW5kaWYKKworICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRv
b2xzOgorICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAorICAgICBgeXl2cyc6IHJlbGF0
ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25z
LgorCisgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8g
YWxsb3cgeXlvdmVyZmxvdworICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8K
KworICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklU
REVQVEhdOworICB5eXR5cGVfaW50MTYgKnl5c3MgPSB5eXNzYTsKKyAgeXl0eXBlX2ludDE2ICp5
eXNzcDsKKworICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICBZWVNUWVBFIHl5
dnNhW1lZSU5JVERFUFRIXTsKKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOworICBZWVNUWVBFICp5
eXZzcDsKKworCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3Nw
IC09IChOKSkKKworICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIC8q
IFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9u
IGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZUEUgeXl2YWw7CisK
KworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBy
dWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4g
ICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcg
cGFyc2VcbiIpKTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5l
cnJzID0gMDsKKyAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVh
ZC4gICovCisKKyAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KKyAgICAgV2FzdGUgb25l
IGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCisgICAgIHNvIHRoYXQgdGhleSBz
dGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgVGhlIHdhc3Rl
ZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLworCisgIHl5c3NwID0geXlzczsK
KyAgeXl2c3AgPSB5eXZzOworCisgIGdvdG8geXlzZXRzdGF0ZTsKKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5bmV3
c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhl
cmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhhdmUganVzdCBiZWVuIHB1
c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLworICB5
eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0ZTsKKworICBpZiAoeXlz
cyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAgICAvKiBHZXQgdGhlIGN1
cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKyAg
ICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisKKyNpZmRlZiB5eW92ZXJm
bG93CisgICAgICB7CisJLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0
YWNrLiAgVXNlIGNvcGllcyBvZgorCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3Jj
ZSB0aGUgcmVhbCBvbmVzIGludG8KKwkgICBtZW1vcnkuICAqLworCVlZU1RZUEUgKnl5dnMxID0g
eXl2czsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworCisJLyogRWFjaCBzdGFjayBw
b2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBp
biB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNv
bmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQK
KwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJm
bG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6
ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisK
KwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOwor
ICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxP
Q0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyMgZWxzZQorICAgICAgLyogRXh0ZW5k
IHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0
YWNrc2l6ZSkKKwlnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsK
KyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFja3NpemUpCisJeXlzdGFja3NpemUgPSBZWU1B
WERFUFRIOworCisgICAgICB7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24g
eXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlT
VEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhh
dXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAo
eXl2cyk7CisKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2Ep
CisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBu
byB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAg
ICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKwkJICAodW5zaWduZWQgbG9uZyBp
bnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9
IHl5c3NwKQorCVlZQUJPUlQ7CisgICAgfQorCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVy
aW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisKKyAgZ290byB5eWJhY2t1cDsKKworLyotLS0t
LS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKyAg
LyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJl
YWQgYQorICAgICBsb29rLWFoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJl
YWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8g
d2l0aG91dCByZWZlcmVuY2UgdG8gbG9vay1haGVhZCB0b2tlbi4gICovCisgIHl5biA9IHl5cGFj
dFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKyAgICBnb3RvIHl5ZGVmYXVs
dDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBh
bHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3Ig
WVlFT0Ygb3IgYSB2YWxpZCBsb29rLWFoZWFkIHN5bWJvbC4gICovCisgIGlmICh5eWNoYXIgPT0g
WVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9r
ZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IFlZTEVYOworICAgIH0KKworICBpZiAoeXljaGFyIDw9
IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKyAgICAgIFlZ
RFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7CisgICAgfQorICBl
bHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAg
WVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxs
b2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4g
WVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRo
YXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47CisgIGlmICh5eW4gPCAwIHx8IFlZTEFT
VCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKyAgICBnb3RvIHl5ZGVmYXVsdDsK
KyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDw9IDApCisgICAgeworICAgICAgaWYg
KHl5biA9PSAwIHx8IHl5biA9PSBZWVRBQkxFX05JTkYpCisJZ290byB5eWVycmxhYjsKKyAgICAg
IHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKworICBpZiAoeXluID09
IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2lu
Y2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorICAgICBzdGF0dXMuICAqLwor
ICBpZiAoeXllcnJzdGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsKKworICAvKiBTaGlmdCB0aGUg
bG9vay1haGVhZCB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0
b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tl
biB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKyAgICB5eWNo
YXIgPSBZWUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47CisgICorK3l5dnNwID0geXlsdmFsOwor
CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRl
ZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWRlZmF1bHQ6
CisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IDApCisgICAgZ290byB5
eWVycmxhYjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyogeXluIGlzIHRoZSBudW1iZXIgb2Yg
YSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4gPSB5eXIyW3l5bl07CisKKyAgLyog
SWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBh
Y3Rpb246CisgICAgIGAkJCA9ICQxJy4KKworICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcg
bGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRoaXMgYmVoYXZpb3IgaXMgdW5kb2N1
bWVudGVkIGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFz
c2lnbmluZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBh
IGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZB
TCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVu
XTsKKworCisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAgc3dpdGNoICh5eW4pCisgICAgewor
ICAgICAgICBjYXNlIDI6CisKKyAgICB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0
YXRpY19jYXN0PGludD4oKHl5dnNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgWVlBQ0NFUFQ7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgfHwgKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pICYmICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSB8
ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSBeICh5eXZzcFsoMykg
LSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmICh5eXZzcFsoMykgLSAoMyldKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSAhPSAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pID09ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
Pj0gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8PSAoeXl2c3Bb
KDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAgewor
ICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4gKHl5dnNwWygzKSAtICgzKV0p
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA8ICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTU6CisKKyAgICB7CisgICAgICAgICh5eXZhbCkgPSAoeXl2
c3BbKDEpIC0gKDMpXSkgPj4gKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAo
MyldKSA8PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE3OgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIC0gKHl5
dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSArICh5eXZzcFsoMykgLSAo
MyldKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTk6CisKKyAgICB7CisgICAgICAg
IGlmICgoeXl2c3BbKDMpIC0gKDMpXSkgPT0gMCkgeworICAgICAgICAgICAgc3RkOjpvc3RyaW5n
c3RyZWFtIHN0cmVhbTsKKyAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3BbKDEpIC0gKDMpXSkg
PDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICAgICAgc3RkOjpzdHJpbmcg
dGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5y
ZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAg
ICAgICAgICBZWUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsKSA9
ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKKyAgICAgICAgfQorICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMDoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZz
cFsoMykgLSAoMyldKSA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3Ry
ZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICh5eXZzcFsoMSkgLSAoMyldKSA8PCAiIC8gIiA8
PCAoeXl2c3BbKDMpIC0gKDMpXSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3Ry
ZWFtLnN0cigpOworICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKKyAgICAgICAgICAgIFlZ
QUJPUlQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pIC8gKHl5dnNwWygzKSAtICgzKV0pOworICAgICAgICB9CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDIxOgorCisgICAgeworICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygx
KSAtICgzKV0pICogKHl5dnNwWygzKSAtICgzKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICEgKHl5dnNwWygyKSAtICgyKV0p
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsKSA9IH4gKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9IC0gKHl5dnNwWygyKSAtICgyKV0pOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
KSA9ICsgKHl5dnNwWygyKSAtICgyKV0pOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAy
NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMikgLSAoMyldKTsKKyAgICA7
fQorICAgIGJyZWFrOworCisKKy8qIExpbmUgMTI2NyBvZiB5YWNjLmMuICAqLworCisgICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIx
W3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVu
ID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5
dmFsOworCisKKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAg
RGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3Rh
dGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5
LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0g
WVlOVE9LRU5TXSArICp5eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZ
TEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJs
ZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9L
RU5TXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwK
K2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8q
IElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJy
b3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNp
ZiAhIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXgg
ZXJyb3IiKSk7CisjZWxzZQorICAgICAgeworCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vy
cm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOworCWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5
eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkKKwkgIHsKKwkgICAgWVlTSVpFX1Qg
eXlhbGxvYyA9IDIgKiB5eXNpemU7CisJICAgIGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5
eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisJICAgICAgeXlhbGxvYyA9IFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTTsKKwkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorCSAgICAgIFlZ
U1RBQ0tfRlJFRSAoeXltc2cpOworCSAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0Mg
KHl5YWxsb2MpOworCSAgICBpZiAoeXltc2cpCisJICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9j
OworCSAgICBlbHNlCisJICAgICAgeworCQl5eW1zZyA9IHl5bXNnYnVmOworCQl5eW1zZ19hbGxv
YyA9IHNpemVvZiB5eW1zZ2J1ZjsKKwkgICAgICB9CisJICB9CisKKwlpZiAoMCA8IHl5c2l6ZSAm
JiB5eXNpemUgPD0geXltc2dfYWxsb2MpCisJICB7CisJICAgICh2b2lkKSB5eXN5bnRheF9lcnJv
ciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNn
KTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4
IGVycm9yIikpOworCSAgICBpZiAoeXlzaXplICE9IDApCisJICAgICAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3Rh
dHVzID09IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJl
dXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwor
CisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlm
IGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFC
T1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRp
bmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZ
RU1QVFk7CisJfQorICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhl
YWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290
byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkg
YnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2Ug
R0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRo
ZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAg
Y29kZS4gICovCisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsK
KworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rp
b24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVu
KTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB5eXN0
YXRlID0gKnl5c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFi
MSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8Citg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCit5eWVycmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2Vu
IHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAg
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisJ
eworCSAgeXluICs9IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1Qg
JiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJs
ZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQorCX0KKworICAg
ICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUg
ZXJyb3IgdG9rZW4uICAqLworICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisJWVlBQk9SVDsKKwor
CisgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRl
XSwgeXl2c3AsIGNvbnRleHQpOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRl
ID0gKnl5c3NwOworICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisK
KyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBUOworCisgICorK3l5dnNwID0geXls
dmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BS
SU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRl
ID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6
CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoK
KyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5cmV0dXJuOworCisjaWZuZGVmIHl5b3ZlcmZsb3cK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
eXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVz
dGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7Cisg
IHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVy
bjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVPRiAmJiB5eWNoYXIgIT0gWVlFTVBUWSkKKyAgICAgeXlk
ZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKwkJIHl5dG9rZW4sICZ5
eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUg
cnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQ
VC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5
c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAo
IkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7
CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cKKyAgaWYg
KHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5eXNzKTsKKyNlbmRpZgorI2lmIFlZ
RVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgWVlTVEFDS19GUkVF
ICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFrZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCisgIHJl
dHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisKKworCisKKworaW50IHl5bGV4KFlZU1RZUEUqIGx2
YWxwLCBDb250ZXh0KiBjb250ZXh0KQoreworICAgIGludCB0eXBlID0gMDsKKworICAgIHBwOjpU
b2tlbiogdG9rZW4gPSBjb250ZXh0LT50b2tlbjsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpDT05TVF9JTlQ6CisgICAgICB7CisgICAgICAg
IHVuc2lnbmVkIGludCB2YWwgPSAwOworICAgICAgICBpZiAoIXRva2VuLT51VmFsdWUoJnZhbCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpJTlRFR0VSX09WRVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAg
fQorICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwpOworICAgICAgICB0
eXBlID0gVE9LX0NPTlNUX0lOVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNl
IHBwOjpUb2tlbjo6T1BfT1I6IHR5cGUgPSBUT0tfT1BfT1I7IGJyZWFrOworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX0FORDogdHlwZSA9IFRPS19PUF9BTkQ7IGJyZWFrOworICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX05FOiB0eXBlID0gVE9LX09QX05FOyBicmVhazsKKyAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9FUTogdHlwZSA9IFRPS19PUF9FUTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfR0U6IHR5cGUgPSBUT0tfT1BfR0U7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0xFOiB0eXBlID0gVE9LX09QX0xFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9SSUdIVDogdHlwZSA9IFRPS19PUF9SSUdIVDsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfTEVGVDogdHlwZSA9IFRPS19PUF9MRUZUOyBicmVhazsKKyAgICAgIGNhc2UgJ3wn
OiB0eXBlID0gJ3wnOyBicmVhazsKKyAgICAgIGNhc2UgJ14nOiB0eXBlID0gJ14nOyBicmVhazsK
KyAgICAgIGNhc2UgJyYnOiB0eXBlID0gJyYnOyBicmVhazsKKyAgICAgIGNhc2UgJz4nOiB0eXBl
ID0gJz4nOyBicmVhazsKKyAgICAgIGNhc2UgJzwnOiB0eXBlID0gJzwnOyBicmVhazsKKyAgICAg
IGNhc2UgJy0nOiB0eXBlID0gJy0nOyBicmVhazsKKyAgICAgIGNhc2UgJysnOiB0eXBlID0gJysn
OyBicmVhazsKKyAgICAgIGNhc2UgJyUnOiB0eXBlID0gJyUnOyBicmVhazsKKyAgICAgIGNhc2Ug
Jy8nOiB0eXBlID0gJy8nOyBicmVhazsKKyAgICAgIGNhc2UgJyonOiB0eXBlID0gJyonOyBicmVh
azsKKyAgICAgIGNhc2UgJyEnOiB0eXBlID0gJyEnOyBicmVhazsKKyAgICAgIGNhc2UgJ34nOiB0
eXBlID0gJ34nOyBicmVhazsKKyAgICAgIGNhc2UgJygnOiB0eXBlID0gJygnOyBicmVhazsKKyAg
ICAgIGNhc2UgJyknOiB0eXBlID0gJyknOyBicmVhazsKKworICAgICAgZGVmYXVsdDogYnJlYWs7
CisgICAgfQorCisgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0b2tlbiBpZiB0aGUgY3VycmVu
dCBvbmUgaXMgdmFsaWQuCisgICAgaWYgKHR5cGUgIT0gMCkgY29udGV4dC0+bGV4ZXItPmxleCh0
b2tlbik7CisKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCB5eWVycm9yKENvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+
cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKK30KKworbmFtZXNwYWNlIHBwIHsKKwor
RXhwcmVzc2lvblBhcnNlcjo6RXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIsIERpYWdub3N0
aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbURpYWdub3N0aWNz
KGRpYWdub3N0aWNzKQoreworfQorCitib29sIEV4cHJlc3Npb25QYXJzZXI6OnBhcnNlKFRva2Vu
KiB0b2tlbiwgaW50KiByZXN1bHQpCit7CisgICAgQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRl
eHQuZGlhZ25vc3RpY3MgPSBtRGlhZ25vc3RpY3M7CisgICAgY29udGV4dC5sZXhlciA9IG1MZXhl
cjsKKyAgICBjb250ZXh0LnRva2VuID0gdG9rZW47CisgICAgY29udGV4dC5yZXN1bHQgPSByZXN1
bHQ7CisgICAgaW50IHJldCA9IHl5cGFyc2UoJmNvbnRleHQpOworICAgIHN3aXRjaCAocmV0KQor
ICAgIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgYnJlYWs7CisKKyAg
ICAgIGNhc2UgMjoKKyAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok9V
VF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBicmVhazsKKworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVEVSTkFMX0VSUk9SLCB0b2tlbi0+bG9jYXRpb24sICIi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldCA9PSAwOworfQorCit9
ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJkMDU5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hfCisjZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXworCisjaW5jbHVkZSAi
cHBfdXRpbHMuaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xh
c3MgTGV4ZXI7CitzdHJ1Y3QgVG9rZW47CisKK2NsYXNzIEV4cHJlc3Npb25QYXJzZXIKK3sKKyAg
cHVibGljOgorICAgIEV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpOworCisgICAgYm9vbCBwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0
KTsKKworICBwcml2YXRlOgorICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFeHByZXNz
aW9uUGFyc2VyKTsKKworICAgIExleGVyKiBtTGV4ZXI7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFn
bm9zdGljczsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHBy
ZXNzaW9uUGFyc2VyLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0ZGQx
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CkBAIC0wLDAgKzEsMjkwIEBACisvKgor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBH
TFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNzaW9uLgorCitJRiBZT1UgTU9ESUZZIFRISVMgRklM
RSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2gsCitXSElDSCBHRU5FUkFU
RVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gcGFyc2VyLgorKi8KKworJXsK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJh
dGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworLy8gSWYgY2xhbmcgb3IgZ2NjLgorI2lmIGRl
ZmluZWQoX19HTlVDX18pCisKKy8vIFR1cm4gb2ZmIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2Fy
bmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCisv
LyBPbiBnY2MgNC43KywgVGhlIGZsYWcgaXMgY2FsbGVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQi
LgorLy8gT24gY2xhbmcgYW5kIGdjYyA8IDQuNywgdGhlIGZsYWcgaXMgY2FsbGVkICItV3VuaW5p
dGlhbGl6ZWQiLgorI2lmICFkZWZpbmVkKF9fY2xhbmdfXykgJiYgKChfX0dOVUNfXyA9PSA0ICYm
IF9fR05VX0NfTUlOT1JfXyA+PSA3KSB8fCBfX0dOVUNfXyA+PSA1KQorI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBpZ25vcmVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQiCisjZWxzZQorI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VuaW5pdGlhbGl6ZWQiCisjZW5kaWYKKworI2VsaWYg
ZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1IDQ3MDEpCisj
ZW5kaWYKKworI2luY2x1ZGUgIkV4cHJlc3Npb25QYXJzZXIuaCIKKworI2luY2x1ZGUgPGNhc3Nl
cnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgor
I2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX01T
Q19WRVIpCit0eXBlZGVmIF9faW50NjQgWVlTVFlQRTsKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50
Lmg+Cit0eXBlZGVmIGludG1heF90IFlZU1RZUEU7CisjZW5kaWYgIC8vIF9NU0NfVkVSCisjZGVm
aW5lIFlZRU5BQkxFX05MUyAwCisjZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5l
IFlZU1RZUEVfSVNfVFJJVklBTCAxCisjZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorCitu
YW1lc3BhY2Ugeworc3RydWN0IENvbnRleHQKK3sKKyAgICBwcDo6RGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzOworICAgIHBwOjpMZXhlciogbGV4ZXI7CisgICAgcHA6OlRva2VuKiB0b2tlbjsKKyAg
ICBpbnQqIHJlc3VsdDsKK307Cit9ICAvLyBuYW1lc3BhY2UKKyV9CisKKyVwdXJlLXBhcnNlcgor
JW5hbWUtcHJlZml4PSJwcCIKKyVwYXJzZS1wYXJhbSB7Q29udGV4dCAqY29udGV4dH0KKyVsZXgt
cGFyYW0ge0NvbnRleHQgKmNvbnRleHR9CisKKyV7CitzdGF0aWMgaW50IHl5bGV4KFlZU1RZUEUq
IGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKyV9CisKKyV0b2tlbiBUT0tfQ09OU1RfSU5U
CislbGVmdCBUT0tfT1BfT1IKKyVsZWZ0IFRPS19PUF9BTkQKKyVsZWZ0ICd8JworJWxlZnQgJ14n
CislbGVmdCAnJicKKyVsZWZ0IFRPS19PUF9FUSBUT0tfT1BfTkUKKyVsZWZ0ICc8JyAnPicgVE9L
X09QX0xFIFRPS19PUF9HRQorJWxlZnQgVE9LX09QX0xFRlQgVE9LX09QX1JJR0hUCislbGVmdCAn
KycgJy0nCislbGVmdCAnKicgJy8nICclJworJXJpZ2h0IFRPS19VTkFSWQorCislJQorCitpbnB1
dAorICAgIDogZXhwcmVzc2lvbiB7CisgICAgICAgICooY29udGV4dC0+cmVzdWx0KSA9IHN0YXRp
Y19jYXN0PGludD4oJDEpOworICAgICAgICBZWUFDQ0VQVDsKKyAgICB9Cis7CisKK2V4cHJlc3Np
b24KKyAgICA6IFRPS19DT05TVF9JTlQKKyAgICB8IGV4cHJlc3Npb24gVE9LX09QX09SIGV4cHJl
c3Npb24geworICAgICAgICAkJCA9ICQxIHx8ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24g
VE9LX09QX0FORCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSAmJiAkMzsKKyAgICB9Cisg
ICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSB8ICQzOwor
ICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJ14nIGV4cHJlc3Npb24geworICAgICAgICAkJCA9ICQx
IF4gJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJicgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgJiAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9ORSBleHByZXNz
aW9uIHsKKyAgICAgICAgJCQgPSAkMSAhPSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRP
S19PUF9FUSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA9PSAkMzsKKyAgICB9CisgICAg
fCBleHByZXNzaW9uIFRPS19PUF9HRSBleHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSAkMSA+PSAk
MzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uIFRPS19PUF9MRSBleHByZXNzaW9uIHsKKyAgICAg
ICAgJCQgPSAkMSA8PSAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICc+JyBleHByZXNzaW9u
IHsKKyAgICAgICAgJCQgPSAkMSA+ICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJzwnIGV4
cHJlc3Npb24geworICAgICAgICAkJCA9ICQxIDwgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lv
biBUT0tfT1BfUklHSFQgZXhwcmVzc2lvbiB7CisgICAgICAgICQkID0gJDEgPj4gJDM7CisgICAg
fQorICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEVGVCBleHByZXNzaW9uIHsKKyAgICAgICAgJCQg
PSAkMSA8PCAkMzsKKyAgICB9CisgICAgfCBleHByZXNzaW9uICctJyBleHByZXNzaW9uIHsKKyAg
ICAgICAgJCQgPSAkMSAtICQzOworICAgIH0KKyAgICB8IGV4cHJlc3Npb24gJysnIGV4cHJlc3Np
b24geworICAgICAgICAkJCA9ICQxICsgJDM7CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnJScg
ZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7CisgICAgICAgICAgICBzdGQ6Om9z
dHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8
ICQzOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJ
U0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgJCQgPSAkMSAlICQzOworICAgICAgICB9CisgICAgfQorICAg
IHwgZXhwcmVzc2lvbiAnLycgZXhwcmVzc2lvbiB7CisgICAgICAgIGlmICgkMyA9PSAwKSB7Cisg
ICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICAgICAgICAgICAgc3RyZWFt
IDw8ICQxIDw8ICIgLyAiIDw8ICQzOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0
cmVhbS5zdHIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CisgICAgICAgICAgICBZ
WUFCT1JUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQgPSAkMSAvICQzOworICAg
ICAgICB9CisgICAgfQorICAgIHwgZXhwcmVzc2lvbiAnKicgZXhwcmVzc2lvbiB7CisgICAgICAg
ICQkID0gJDEgKiAkMzsKKyAgICB9CisgICAgfCAnIScgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5B
UlkgeworICAgICAgICAkJCA9ICEgJDI7CisgICAgfQorICAgIHwgJ34nIGV4cHJlc3Npb24gJXBy
ZWMgVE9LX1VOQVJZIHsKKyAgICAgICAgJCQgPSB+ICQyOworICAgIH0KKyAgICB8ICctJyBleHBy
ZXNzaW9uICVwcmVjIFRPS19VTkFSWSB7CisgICAgICAgICQkID0gLSAkMjsKKyAgICB9CisgICAg
fCAnKycgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgeworICAgICAgICAkJCA9ICsgJDI7Cisg
ICAgfQorICAgIHwgJygnIGV4cHJlc3Npb24gJyknIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9
Cis7CisKKyUlCisKK2ludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBpbnQgdHlwZSA9IDA7CisKKyAgICBwcDo6VG9rZW4qIHRva2VuID0gY29udGV4dC0+
dG9rZW47CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgICBjYXNlIHBwOjpU
b2tlbjo6Q09OU1RfSU5UOgorICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgdmFsID0gMDsK
KyAgICAgICAgaWYgKCF0b2tlbi0+dVZhbHVlKCZ2YWwpKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5URUdFUl9P
VkVSRkxPVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgKmx2YWxwID0gc3Rh
dGljX2Nhc3Q8WVlTVFlQRT4odmFsKTsKKyAgICAgICAgdHlwZSA9IFRPS19DT05TVF9JTlQ7Cisg
ICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0eXBl
ID0gVE9LX09QX09SOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUg
PSBUT0tfT1BfQU5EOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9ORTogdHlwZSA9
IFRPS19PUF9ORTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBU
T0tfT1BfRVE7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gVE9L
X09QX0dFOyBicmVhazsKKyAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRTogdHlwZSA9IFRPS19P
UF9MRTsgYnJlYWs7CisgICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBUT0tf
T1BfUklHSFQ7IGJyZWFrOworICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBU
T0tfT1BfTEVGVDsgYnJlYWs7CisgICAgICBjYXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7Cisg
ICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7CisgICAgICBjYXNlICcmJzogdHlwZSA9
ICcmJzsgYnJlYWs7CisgICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7CisgICAgICBj
YXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7CisgICAgICBjYXNlICctJzogdHlwZSA9ICctJzsg
YnJlYWs7CisgICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7CisgICAgICBjYXNlICcl
JzogdHlwZSA9ICclJzsgYnJlYWs7CisgICAgICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJlYWs7
CisgICAgICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7CisgICAgICBjYXNlICchJzogdHlw
ZSA9ICchJzsgYnJlYWs7CisgICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7CisgICAg
ICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7CisgICAgICBjYXNlICcpJzogdHlwZSA9ICcp
JzsgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIC8vIEFkdmFu
Y2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlkLgorICAgIGlm
ICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOworCisgICAgcmV0dXJuIHR5
cGU7Cit9CisKK3ZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFz
b24pCit7CisgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6
OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnRva2VuLT5sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYXNvbik7Cit9CisKK25hbWVzcGFjZSBwcCB7CisKK0V4cHJlc3Npb25QYXJzZXI6OkV4cHJl
c3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKKyAg
ICBtTGV4ZXIobGV4ZXIpLAorICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKK3sKK30KKwor
Ym9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KQor
eworICAgIENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURpYWdu
b3N0aWNzOworICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7CisgICAgY29udGV4dC50b2tlbiA9
IHRva2VuOworICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OworICAgIGludCByZXQgPSB5eXBh
cnNlKCZjb250ZXh0KTsKKyAgICBzd2l0Y2ggKHJldCkKKyAgICB7CisgICAgICBjYXNlIDA6Cisg
ICAgICBjYXNlIDE6CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9j
YXRpb24sICIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFz
c2VydChmYWxzZSk7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJ
TlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiByZXQgPT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0lucHV0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvSW5wdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODY4
YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0lucHV0LmNwcApAQCAtMCwwICsxLDU1IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgIklucHV0LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorCituYW1lc3BhY2UgcHAKK3sKKworSW5wdXQ6
OklucHV0KCkgOiBtQ291bnQoMCksIG1TdHJpbmcoMCkKK3sKK30KKworSW5wdXQ6OklucHV0KGlu
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSkg
OgorICAgIG1Db3VudChjb3VudCksCisgICAgbVN0cmluZyhzdHJpbmcpCit7CisgICAgYXNzZXJ0
KG1Db3VudCA+PSAwKTsKKyAgICBtTGVuZ3RoLnJlc2VydmUobUNvdW50KTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1Db3VudDsgKytpKQorICAgIHsKKyAgICAgICAgaW50IGxlbiA9IGxlbmd0
aCA/IGxlbmd0aFtpXSA6IC0xOworICAgICAgICBtTGVuZ3RoLnB1c2hfYmFjayhsZW4gPCAwID8g
c3RkOjpzdHJsZW4obVN0cmluZ1tpXSkgOiBsZW4pOworICAgIH0KK30KKworaW50IElucHV0Ojpy
ZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCit7CisgICAgaW50IG5SZWFkID0gMDsKKyAgICB3
aGlsZSAoKG5SZWFkIDwgbWF4U2l6ZSkgJiYgKG1SZWFkTG9jLnNJbmRleCA8IG1Db3VudCkpCisg
ICAgeworICAgICAgICBpbnQgc2l6ZSA9IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSAtIG1SZWFk
TG9jLmNJbmRleDsKKyAgICAgICAgc2l6ZSA9IHN0ZDo6bWluKHNpemUsIG1heFNpemUpOworICAg
ICAgICBzdGQ6Om1lbWNweShidWYgKyBuUmVhZCwgbVN0cmluZ1ttUmVhZExvYy5zSW5kZXhdICsg
bVJlYWRMb2MuY0luZGV4LCBzaXplKTsKKyAgICAgICAgblJlYWQgKz0gc2l6ZTsKKyAgICAgICAg
bVJlYWRMb2MuY0luZGV4ICs9IHNpemU7CisKKyAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYg
d2UgcmVhY2hlZCB0aGUgZW5kIG9mIGN1cnJlbnQgc3RyaW5nLgorICAgICAgICBpZiAobVJlYWRM
b2MuY0luZGV4ID09IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSkKKyAgICAgICAgeworICAgICAg
ICAgICAgKyttUmVhZExvYy5zSW5kZXg7CisgICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAw
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuUmVhZDsKK30KKworfSAgLy8gbmFtZXNw
YWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvSW5wdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kYWM3MzRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5oCkBAIC0wLDAgKzEsNDggQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9JTlBVVF9IXworI2RlZmlu
ZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKwor
bmFtZXNwYWNlIHBwCit7CisKKy8vIEhvbGRzIGFuZCByZWFkcyBpbnB1dCBmb3IgTGV4ZXIuCitj
bGFzcyBJbnB1dAoreworICBwdWJsaWM6CisgICAgSW5wdXQoKTsKKyAgICBJbnB1dChpbnQgY291
bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOworCisg
ICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbUNvdW50OyB9CisgICAgY29uc3QgY2hhciog
c3RyaW5nKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbVN0cmluZ1tpbmRleF07IH0KKyAgICBp
bnQgbGVuZ3RoKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aFtpbmRleF07IH0KKwor
ICAgIGludCByZWFkKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOworCisgICAgc3RydWN0IExvY2F0
aW9uCisgICAgeworICAgICAgICBpbnQgc0luZGV4OyAgLy8gU3RyaW5nIGluZGV4OworICAgICAg
ICBpbnQgY0luZGV4OyAgLy8gQ2hhciBpbmRleC4KKworICAgICAgICBMb2NhdGlvbigpIDogc0lu
ZGV4KDApLCBjSW5kZXgoMCkgeyB9CisgICAgfTsKKyAgICBjb25zdCBMb2NhdGlvbiYgcmVhZExv
YygpIGNvbnN0IHsgcmV0dXJuIG1SZWFkTG9jOyB9CisKKyAgcHJpdmF0ZToKKyAgICAvLyBJbnB1
dC4KKyAgICBpbnQgbUNvdW50OworICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBtU3RyaW5nOworICAg
IHN0ZDo6dmVjdG9yPGludD4gbUxlbmd0aDsKKworICAgIExvY2F0aW9uIG1SZWFkTG9jOworfTsK
KworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9J
TlBVVF9IXworCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0xleGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdjNjYzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmNwcApAQCAtMCwwICsxLDE2IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkxleGVyLmgiCisKK25hbWVzcGFjZSBwcAorewor
CitMZXhlcjo6fkxleGVyKCkKK3sKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xl
eGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4NWNlYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvTGV4ZXIuaApAQCAtMCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBD
T01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX0xFWEVSX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgVG9rZW47CisKK2NsYXNz
IExleGVyCit7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5MZXhlcigpOworCisgICAgdmlydHVh
bCB2b2lkIGxleChUb2tlbiogdG9rZW4pID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAor
I2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01h
Y3JvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmUzMDg4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9NYWNyby5jcHAKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNs
dWRlICJNYWNyby5oIgorCisjaW5jbHVkZSAiVG9rZW4uaCIKKworbmFtZXNwYWNlIHBwCit7CisK
K2Jvb2wgTWFjcm86OmVxdWFscyhjb25zdCBNYWNybyYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuICh0eXBlID09IG90aGVyLnR5cGUpICYmCisgICAgICAgICAgIChuYW1lID09IG90aGVyLm5h
bWUpICYmCisgICAgICAgICAgIChwYXJhbWV0ZXJzID09IG90aGVyLnBhcmFtZXRlcnMpICYmCisg
ICAgICAgICAgIChyZXBsYWNlbWVudHMgPT0gb3RoZXIucmVwbGFjZW1lbnRzKTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43ZWMwMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5oCkBAIC0wLDAgKzEsNDQg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19I
XworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fSF8KKworI2luY2x1ZGUgPG1h
cD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgcHAK
K3sKKworc3RydWN0IFRva2VuOworCitzdHJ1Y3QgTWFjcm8KK3sKKyAgICBlbnVtIFR5cGUKKyAg
ICB7CisgICAgICAgIGtUeXBlT2JqLAorICAgICAgICBrVHlwZUZ1bmMKKyAgICB9OworICAgIHR5
cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFBhcmFtZXRlcnM7CisgICAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxUb2tlbj4gUmVwbGFjZW1lbnRzOworCisgICAgTWFjcm8oKSA6IHByZWRlZmlu
ZWQoZmFsc2UpLCBkaXNhYmxlZChmYWxzZSksIHR5cGUoa1R5cGVPYmopIHsgfQorICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IE1hY3JvJiBvdGhlcikgY29uc3Q7CisKKyAgICBib29sIHByZWRlZmluZWQ7
CisgICAgbXV0YWJsZSBib29sIGRpc2FibGVkOworCisgICAgVHlwZSB0eXBlOworICAgIHN0ZDo6
c3RyaW5nIG5hbWU7CisgICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIFJlcGxhY2VtZW50
cyByZXBsYWNlbWVudHM7Cit9OworCit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBNYWNy
bz4gTWFjcm9TZXQ7CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTUFDUk9fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9FeHBhbmRlci5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTZjNTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L01hY3JvRXhwYW5kZXIuY3BwCkBAIC0wLDAgKzEsMzcwIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDxzc3RyZWFtPgorCisjaW5jbHVkZSAiRGlhZ25vc3RpY3NCYXNlLmgiCisjaW5jbHVkZSAiVG9r
ZW4uaCIKKworbmFtZXNwYWNlIHBwCit7CisKK2NsYXNzIFRva2VuTGV4ZXIgOiBwdWJsaWMgTGV4
ZXIKK3sKKyBwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUb2tlbj4gVG9rZW5WZWN0
b3I7CisKKyAgICBUb2tlbkxleGVyKFRva2VuVmVjdG9yKiB0b2tlbnMpCisgICAgeworICAgICAg
ICB0b2tlbnMtPnN3YXAobVRva2Vucyk7CisgICAgICAgIG1JdGVyID0gbVRva2Vucy5iZWdpbigp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKQorICAgIHsKKyAg
ICAgICAgaWYgKG1JdGVyID09IG1Ub2tlbnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRva2VuLT5yZXNldCgpOworICAgICAgICAgICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6TEFTVDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICp0b2tlbiA9
ICptSXRlcisrOworICAgICAgICB9CisgICAgfQorCisgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVG9rZW5MZXhlcik7CisKKyAgICBUb2tlblZlY3RvciBtVG9rZW5z
OworICAgIFRva2VuVmVjdG9yOjpjb25zdF9pdGVyYXRvciBtSXRlcjsKK307CisKK01hY3JvRXhw
YW5kZXI6Ok1hY3JvRXhwYW5kZXIoTGV4ZXIqIGxleGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNYWNyb1NldCogbWFjcm9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOgorICAgIG1MZXhlcihsZXhlciksCisgICAgbU1h
Y3JvU2V0KG1hY3JvU2V0KSwKKyAgICBtRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3MpCit7Cit9CisK
K01hY3JvRXhwYW5kZXI6On5NYWNyb0V4cGFuZGVyKCkKK3sKKyAgICBmb3IgKHN0ZDo6c2l6ZV90
IGkgPSAwOyBpIDwgbUNvbnRleHRTdGFjay5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIGRl
bGV0ZSBtQ29udGV4dFN0YWNrW2ldOworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjps
ZXgoVG9rZW4qIHRva2VuKQoreworICAgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgICAgZ2V0
VG9rZW4odG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJ
RklFUikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh0b2tlbi0+ZXhwYW5zaW9u
RGlzYWJsZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIE1hY3JvU2V0Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT50ZXh0KTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gbU1hY3JvU2V0LT5lbmQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNvbnN0IE1hY3JvJiBtYWNybyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaWYgKG1hY3Jv
LmRpc2FibGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiBhIHBhcnRpY3VsYXIgdG9r
ZW4gaXMgbm90IGV4cGFuZGVkLCBpdCBpcyBuZXZlciBleHBhbmRlZC4KKyAgICAgICAgICAgIHRv
a2VuLT5zZXRFeHBhbnNpb25EaXNhYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGlmICgobWFjcm8udHlwZSA9PSBNYWNybzo6a1R5cGVGdW5jKSAmJiAh
aXNOZXh0VG9rZW5MZWZ0UGFyZW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgdGhl
IHRva2VuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWNybyBuYW1lIGlzIG5vdCBhICcoJywKKyAg
ICAgICAgICAgIC8vIHRoaXMgbWFjcm8gc2hvdWxkIG5vdCBiZSBleHBhbmRlZC4KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHVzaE1hY3JvKG1hY3JvLCAqdG9rZW4p
OworICAgIH0KK30KKwordm9pZCBNYWNyb0V4cGFuZGVyOjpnZXRUb2tlbihUb2tlbiogdG9rZW4p
Cit7CisgICAgaWYgKG1SZXNlcnZlVG9rZW4uZ2V0KCkpCisgICAgeworICAgICAgICAqdG9rZW4g
PSAqbVJlc2VydmVUb2tlbjsKKyAgICAgICAgbVJlc2VydmVUb2tlbi5yZXNldCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gRmlyc3QgcG9wIGFsbCBlbXB0eSBtYWNybyBjb250
ZXh0cy4KKyAgICB3aGlsZSAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSAmJiBtQ29udGV4dFN0YWNr
LmJhY2soKS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHBvcE1hY3JvKCk7CisgICAgfQorCisg
ICAgaWYgKCFtQ29udGV4dFN0YWNrLmVtcHR5KCkpCisgICAgeworICAgICAgICAqdG9rZW4gPSBt
Q29udGV4dFN0YWNrLmJhY2soKS0+Z2V0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1MZXhlci0+bGV4KHRva2VuKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjcm9FeHBhbmRlcjo6
dW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKCFtQ29udGV4dFN0YWNr
LmVtcHR5KCkpCisgICAgeworICAgICAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBtQ29udGV4
dFN0YWNrLmJhY2soKTsKKyAgICAgICAgY29udGV4dC0+dW5nZXQoKTsKKyAgICAgICAgYXNzZXJ0
KGNvbnRleHQtPnJlcGxhY2VtZW50c1tjb250ZXh0LT5pbmRleF0gPT0gdG9rZW4pOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBhc3NlcnQoIW1SZXNlcnZlVG9rZW4uZ2V0KCkpOwor
ICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KG5ldyBUb2tlbih0b2tlbikpOworICAgIH0KK30K
KworYm9vbCBNYWNyb0V4cGFuZGVyOjppc05leHRUb2tlbkxlZnRQYXJlbigpCit7CisgICAgVG9r
ZW4gdG9rZW47CisgICAgZ2V0VG9rZW4oJnRva2VuKTsKKworICAgIGJvb2wgbHBhcmVuID0gdG9r
ZW4udHlwZSA9PSAnKCc7CisgICAgdW5nZXRUb2tlbih0b2tlbik7CisKKyAgICByZXR1cm4gbHBh
cmVuOworfQorCitib29sIE1hY3JvRXhwYW5kZXI6OnB1c2hNYWNybyhjb25zdCBNYWNybyYgbWFj
cm8sIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyKQoreworICAgIGFzc2VydCghbWFjcm8uZGlzYWJs
ZWQpOworICAgIGFzc2VydCghaWRlbnRpZmllci5leHBhbnNpb25EaXNhYmxlZCgpKTsKKyAgICBh
c3NlcnQoaWRlbnRpZmllci50eXBlID09IFRva2VuOjpJREVOVElGSUVSKTsKKyAgICBhc3NlcnQo
aWRlbnRpZmllci50ZXh0ID09IG1hY3JvLm5hbWUpOworCisgICAgc3RkOjp2ZWN0b3I8VG9rZW4+
IHJlcGxhY2VtZW50czsKKyAgICBpZiAoIWV4cGFuZE1hY3JvKG1hY3JvLCBpZGVudGlmaWVyLCAm
cmVwbGFjZW1lbnRzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTWFjcm8gaXMg
ZGlzYWJsZWQgZm9yIGV4cGFuc2lvbiB1bnRpbCBpdCBpcyBwb3BwZWQgb2ZmIHRoZSBzdGFjay4K
KyAgICBtYWNyby5kaXNhYmxlZCA9IHRydWU7CisKKyAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQg
PSBuZXcgTWFjcm9Db250ZXh0OworICAgIGNvbnRleHQtPm1hY3JvID0gJm1hY3JvOworICAgIGNv
bnRleHQtPnJlcGxhY2VtZW50cy5zd2FwKHJlcGxhY2VtZW50cyk7CisgICAgbUNvbnRleHRTdGFj
ay5wdXNoX2JhY2soY29udGV4dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWFjcm9F
eHBhbmRlcjo6cG9wTWFjcm8oKQoreworICAgIGFzc2VydCghbUNvbnRleHRTdGFjay5lbXB0eSgp
KTsKKworICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOwor
ICAgIG1Db250ZXh0U3RhY2sucG9wX2JhY2soKTsKKworICAgIGFzc2VydChjb250ZXh0LT5lbXB0
eSgpKTsKKyAgICBhc3NlcnQoY29udGV4dC0+bWFjcm8tPmRpc2FibGVkKTsKKyAgICBjb250ZXh0
LT5tYWNyby0+ZGlzYWJsZWQgPSBmYWxzZTsKKyAgICBkZWxldGUgY29udGV4dDsKK30KKworYm9v
bCBNYWNyb0V4cGFuZGVyOjpleHBhbmRNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50
cykKK3sKKyAgICByZXBsYWNlbWVudHMtPmNsZWFyKCk7CisgICAgaWYgKG1hY3JvLnR5cGUgPT0g
TWFjcm86OmtUeXBlT2JqKQorICAgIHsKKyAgICAgICAgcmVwbGFjZW1lbnRzLT5hc3NpZ24obWFj
cm8ucmVwbGFjZW1lbnRzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
Y3JvLnJlcGxhY2VtZW50cy5lbmQoKSk7CisKKyAgICAgICAgaWYgKG1hY3JvLnByZWRlZmluZWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrTGluZSA9
ICJfX0xJTkVfXyI7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0ZpbGUg
PSAiX19GSUxFX18iOworCisgICAgICAgICAgICBhc3NlcnQocmVwbGFjZW1lbnRzLT5zaXplKCkg
PT0gMSk7CisgICAgICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxhY2VtZW50cy0+ZnJvbnQoKTsK
KyAgICAgICAgICAgIGlmIChtYWNyby5uYW1lID09IGtMaW5lKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICAgICAg
c3RyZWFtIDw8IGlkZW50aWZpZXIubG9jYXRpb24ubGluZTsKKyAgICAgICAgICAgICAgICByZXBs
LnRleHQgPSBzdHJlYW0uc3RyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
IChtYWNyby5uYW1lID09IGtGaWxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0
ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CisgICAgICAgICAgICAgICAgc3RyZWFtIDw8IGlkZW50
aWZpZXIubG9jYXRpb24uZmlsZTsKKyAgICAgICAgICAgICAgICByZXBsLnRleHQgPSBzdHJlYW0u
c3RyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgYXNzZXJ0KG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYyk7CisgICAgICAg
IHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiBhcmdzOworICAgICAgICBhcmdzLnJlc2VydmUobWFjcm8u
cGFyYW1ldGVycy5zaXplKCkpOworICAgICAgICBpZiAoIWNvbGxlY3RNYWNyb0FyZ3MobWFjcm8s
IGlkZW50aWZpZXIsICZhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICByZXBsYWNlTWFjcm9QYXJhbXMobWFjcm8sIGFyZ3MsIHJlcGxhY2VtZW50cyk7CisgICAgfQor
CisgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHJlcGxhY2VtZW50cy0+c2l6ZSgpOyAr
K2kpCisgICAgeworICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxhY2VtZW50cy0+YXQoaSk7Cisg
ICAgICAgIGlmIChpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBmaXJzdCB0
b2tlbiBpbiB0aGUgcmVwbGFjZW1lbnQgbGlzdCBpbmhlcml0cyB0aGUgcGFkZGluZworICAgICAg
ICAgICAgLy8gcHJvcGVydGllcyBvZiB0aGUgaWRlbnRpZmllciB0b2tlbi4KKyAgICAgICAgICAg
IHJlcGwuc2V0QXRTdGFydE9mTGluZShpZGVudGlmaWVyLmF0U3RhcnRPZkxpbmUoKSk7CisgICAg
ICAgICAgICByZXBsLnNldEhhc0xlYWRpbmdTcGFjZShpZGVudGlmaWVyLmhhc0xlYWRpbmdTcGFj
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXBsLmxvY2F0aW9uID0gaWRlbnRpZmllci5sb2Nh
dGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFjcm9FeHBhbmRlcjo6
Y29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+KiBhcmdzKQorewor
ICAgIFRva2VuIHRva2VuOworICAgIGdldFRva2VuKCZ0b2tlbik7CisgICAgYXNzZXJ0KHRva2Vu
LnR5cGUgPT0gJygnKTsKKworICAgIGFyZ3MtPnB1c2hfYmFjayhNYWNyb0FyZygpKTsKKyAgICBm
b3IgKGludCBvcGVuUGFyZW5zID0gMTsgb3BlblBhcmVucyAhPSAwOyApCisgICAgeworICAgICAg
ICBnZXRUb2tlbigmdG9rZW4pOworCisgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva2VuOjpM
QVNUKQorICAgICAgICB7CisgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6TUFDUk9fVU5URVJNSU5BVEVEX0lOVk9DQVRJT04sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyLmxvY2F0aW9uLCBpZGVudGlmaWVyLnRleHQpOworICAg
ICAgICAgICAgLy8gRG8gbm90IGxvc2UgRU9GIHRva2VuLgorICAgICAgICAgICAgdW5nZXRUb2tl
bih0b2tlbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIGlzQXJnID0gZmFsc2U7IC8vIFRydWUgaWYgdG9rZW4gaXMgcGFydCBvZiB0aGUgY3Vy
cmVudCBhcmd1bWVudC4KKyAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICArK29wZW5QYXJlbnM7CisgICAgICAgICAg
ICBpc0FyZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICcpJzoK
KyAgICAgICAgICAgIC0tb3BlblBhcmVuczsKKyAgICAgICAgICAgIGlzQXJnID0gb3BlblBhcmVu
cyAhPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnLCc6CisgICAgICAg
ICAgICAvLyBUaGUgaW5kaXZpZHVhbCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBjb21tYSB0
b2tlbnMsIGJ1dAorICAgICAgICAgICAgLy8gdGhlIGNvbW1hIHRva2VucyBiZXR3ZWVuIG1hdGNo
aW5nIGlubmVyIHBhcmVudGhlc2VzIGRvIG5vdAorICAgICAgICAgICAgLy8gc2VwZXJhdGUgYXJn
dW1lbnRzLgorICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnMgPT0gMSkgYXJncy0+cHVzaF9iYWNr
KE1hY3JvQXJnKCkpOworICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDE7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaXNBcmcgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQXJnKQor
ICAgICAgICB7CisgICAgICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YmFjaygpOworICAg
ICAgICAgICAgLy8gSW5pdGlhbCB3aGl0ZXNwYWNlIGlzIG5vdCBwYXJ0IG9mIHRoZSBhcmd1bWVu
dC4KKyAgICAgICAgICAgIGlmIChhcmcuZW1wdHkoKSkgdG9rZW4uc2V0SGFzTGVhZGluZ1NwYWNl
KGZhbHNlKTsKKyAgICAgICAgICAgIGFyZy5wdXNoX2JhY2sodG9rZW4pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgY29uc3QgTWFjcm86OlBhcmFtZXRlcnMmIHBhcmFtcyA9IG1hY3JvLnBhcmFt
ZXRlcnM7CisgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgZW1wdHkgYXJndW1lbnQsIGl0IGlz
IGVxdWl2YWxlbnQgdG8gbm8gYXJndW1lbnQuCisgICAgaWYgKHBhcmFtcy5lbXB0eSgpICYmIChh
cmdzLT5zaXplKCkgPT0gMSkgJiYgYXJncy0+ZnJvbnQoKS5lbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgYXJncy0+Y2xlYXIoKTsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgdGhlIG51bWJlciBvZiBh
cmd1bWVudHMuCisgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSBwYXJhbXMuc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgRGlhZ25vc3RpY3M6OklEIGlkID0gYXJncy0+c2l6ZSgpIDwgbWFjcm8ucGFyYW1l
dGVycy5zaXplKCkgPworICAgICAgICAgICAgRGlhZ25vc3RpY3M6Ok1BQ1JPX1RPT19GRVdfQVJH
UyA6CisgICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX01BTllfQVJHUzsKKyAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoaWQsIGlkZW50aWZpZXIubG9jYXRpb24sIGlkZW50aWZp
ZXIudGV4dCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBQcmUtZXhw
YW5kIGVhY2ggYXJndW1lbnQgYmVmb3JlIHN1YnN0aXR1dGlvbi4KKyAgICAvLyBUaGlzIHN0ZXAg
ZXhwYW5kcyBlYWNoIGFyZ3VtZW50IGluZGl2aWR1YWxseSBiZWZvcmUgdGhleSBhcmUKKyAgICAv
LyBpbnNlcnRlZCBpbnRvIHRoZSBtYWNybyBib2R5LgorICAgIGZvciAoc3RkOjpzaXplX3QgaSA9
IDA7IGkgPCBhcmdzLT5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIE1hY3JvQXJnJiBhcmcg
PSBhcmdzLT5hdChpKTsKKyAgICAgICAgVG9rZW5MZXhlciBsZXhlcigmYXJnKTsKKyAgICAgICAg
TWFjcm9FeHBhbmRlciBleHBhbmRlcigmbGV4ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsK
KworICAgICAgICBhcmcuY2xlYXIoKTsKKyAgICAgICAgZXhwYW5kZXIubGV4KCZ0b2tlbik7Cisg
ICAgICAgIHdoaWxlICh0b2tlbi50eXBlICE9IFRva2VuOjpMQVNUKQorICAgICAgICB7CisgICAg
ICAgICAgICBhcmcucHVzaF9iYWNrKHRva2VuKTsKKyAgICAgICAgICAgIGV4cGFuZGVyLmxleCgm
dG9rZW4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1h
Y3JvRXhwYW5kZXI6OnJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxNYWNy
b0FyZz4mIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykKK3sKKyAgICBmb3IgKHN0ZDo6c2l6ZV90IGkg
PSAwOyBpIDwgbWFjcm8ucmVwbGFjZW1lbnRzLnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAg
Y29uc3QgVG9rZW4mIHJlcGwgPSBtYWNyby5yZXBsYWNlbWVudHNbaV07CisgICAgICAgIGlmIChy
ZXBsLnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
cGxhY2VtZW50cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUT0RPKGFsb2twKTogT3B0aW1pemUgdGhpcy4KKyAgICAgICAg
Ly8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2ggZm9yIG1hY3JvIHBhcmFtcyBldmVyeSB0aW1l
LgorICAgICAgICAvLyBUaGUgcGFyYW0gaW5kZXggY2FuIGJlIGNhY2hlZCB3aXRoIHRoZSByZXBs
YWNlbWVudCB0b2tlbi4KKyAgICAgICAgTWFjcm86OlBhcmFtZXRlcnM6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBzdGQ6OmZpbmQoCisgICAgICAgICAgICBtYWNyby5wYXJhbWV0ZXJzLmJlZ2luKCks
IG1hY3JvLnBhcmFtZXRlcnMuZW5kKCksIHJlcGwudGV4dCk7CisgICAgICAgIGlmIChpdGVyID09
IG1hY3JvLnBhcmFtZXRlcnMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcGxhY2Vt
ZW50cy0+cHVzaF9iYWNrKHJlcGwpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBzdGQ6OnNpemVfdCBpQXJnID0gc3RkOjpkaXN0YW5jZShtYWNyby5wYXJhbWV0
ZXJzLmJlZ2luKCksIGl0ZXIpOworICAgICAgICBjb25zdCBNYWNyb0FyZyYgYXJnID0gYXJnc1tp
QXJnXTsKKyAgICAgICAgaWYgKGFyZy5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OnNpemVfdCBpUmVwbCA9IHJlcGxhY2Vt
ZW50cy0+c2l6ZSgpOworICAgICAgICByZXBsYWNlbWVudHMtPmluc2VydChyZXBsYWNlbWVudHMt
PmVuZCgpLCBhcmcuYmVnaW4oKSwgYXJnLmVuZCgpKTsKKyAgICAgICAgLy8gVGhlIHJlcGxhY2Vt
ZW50IHRva2VuIGluaGVyaXRzIHBhZGRpbmcgcHJvcGVydGllcyBmcm9tCisgICAgICAgIC8vIG1h
Y3JvIHJlcGxhY2VtZW50IHRva2VuLgorICAgICAgICByZXBsYWNlbWVudHMtPmF0KGlSZXBsKS5z
ZXRIYXNMZWFkaW5nU3BhY2UocmVwbC5oYXNMZWFkaW5nU3BhY2UoKSk7CisgICAgfQorfQorCit9
ICAvLyBuYW1lc3BhY2UgcHAKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWI2NzU3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNy
b0V4cGFuZGVyLmgKQEAgLTAsMCArMSw3NSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09N
UElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BS
RVBST0NFU1NPUl9NQUNST19FWFBBTkRFUl9IXworCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNs
dWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNp
bmNsdWRlICJNYWNyby5oIgorI2luY2x1ZGUgInBwX3V0aWxzLmgiCisKK25hbWVzcGFjZSBwcAor
eworCitjbGFzcyBEaWFnbm9zdGljczsKKworY2xhc3MgTWFjcm9FeHBhbmRlciA6IHB1YmxpYyBM
ZXhlcgoreworICBwdWJsaWM6CisgICAgTWFjcm9FeHBhbmRlcihMZXhlciogbGV4ZXIsIE1hY3Jv
U2V0KiBtYWNyb1NldCwgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKTsKKyAgICB2aXJ0dWFsIH5N
YWNyb0V4cGFuZGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisK
KyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oTWFjcm9FeHBhbmRl
cik7CisKKyAgICB2b2lkIGdldFRva2VuKFRva2VuKiB0b2tlbik7CisgICAgdm9pZCB1bmdldFRv
a2VuKGNvbnN0IFRva2VuJiB0b2tlbik7CisgICAgYm9vbCBpc05leHRUb2tlbkxlZnRQYXJlbigp
OworCisgICAgYm9vbCBwdXNoTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLCBjb25zdCBUb2tlbiYg
aWRlbnRpZmllcik7CisgICAgdm9pZCBwb3BNYWNybygpOworCisgICAgYm9vbCBleHBhbmRNYWNy
byhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYg
aWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2VuPiogcmVw
bGFjZW1lbnRzKTsKKworICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IE1hY3JvQXJnOwor
ICAgIGJvb2wgY29sbGVjdE1hY3JvQXJncyhjb25zdCBNYWNybyYgbWFjcm8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4qIGFyZ3MpOworICAgIHZvaWQgcmVwbGFj
ZU1hY3JvUGFyYW1zKGNvbnN0IE1hY3JvJiBtYWNybywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnZlY3RvcjxNYWNyb0FyZz4mIGFyZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+KiByZXBsYWNlbWVudHMpOworCisgICAgc3Ry
dWN0IE1hY3JvQ29udGV4dAorICAgIHsKKyAgICAgICAgY29uc3QgTWFjcm8qIG1hY3JvOworICAg
ICAgICBzdGQ6OnNpemVfdCBpbmRleDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJlcGxh
Y2VtZW50czsKKworICAgICAgICBNYWNyb0NvbnRleHQoKSA6IG1hY3JvKDApLCBpbmRleCgwKSB7
IH0KKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4ID09IHJlcGxhY2Vt
ZW50cy5zaXplKCk7IH0KKyAgICAgICAgY29uc3QgVG9rZW4mIGdldCgpIHsgcmV0dXJuIHJlcGxh
Y2VtZW50c1tpbmRleCsrXTsgfQorICAgICAgICB2b2lkIHVuZ2V0KCkgeyBhc3NlcnQoaW5kZXgg
PiAwKTsgLS1pbmRleDsgfQorICAgIH07CisKKyAgICBMZXhlciogbUxleGVyOworICAgIE1hY3Jv
U2V0KiBtTWFjcm9TZXQ7CisgICAgRGlhZ25vc3RpY3MqIG1EaWFnbm9zdGljczsKKworICAgIHN0
ZDo6YXV0b19wdHI8VG9rZW4+IG1SZXNlcnZlVG9rZW47CisgICAgc3RkOjp2ZWN0b3I8TWFjcm9D
b250ZXh0Kj4gbUNvbnRleHRTdGFjazsKK307CisKK30gIC8vIG5hbWVzcGFjZSBwcAorI2VuZGlm
ICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTUFDUk9fRVhQQU5ERVJfSF8KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVw
cm9jZXNzb3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmRlMDI0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAKQEAgLTAsMCArMSwxNDIg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiUHJlcHJvY2Vzc29yLmgiCisKKyNpbmNsdWRl
IDxjYXNzZXJ0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJEaWFnbm9zdGljc0Jh
c2UuaCIKKyNpbmNsdWRlICJEaXJlY3RpdmVQYXJzZXIuaCIKKyNpbmNsdWRlICJNYWNyby5oIgor
I2luY2x1ZGUgIk1hY3JvRXhwYW5kZXIuaCIKKyNpbmNsdWRlICJUb2tlbi5oIgorI2luY2x1ZGUg
IlRva2VuaXplci5oIgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFByZXByb2Nlc3Nvcklt
cGwKK3sKKyAgICBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7CisgICAgTWFjcm9TZXQgbWFjcm9T
ZXQ7CisgICAgVG9rZW5pemVyIHRva2VuaXplcjsKKyAgICBEaXJlY3RpdmVQYXJzZXIgZGlyZWN0
aXZlUGFyc2VyOworICAgIE1hY3JvRXhwYW5kZXIgbWFjcm9FeHBhbmRlcjsKKworICAgIFByZXBy
b2Nlc3NvckltcGwoRGlhZ25vc3RpY3MqIGRpYWcsCisgICAgICAgICAgICAgICAgICAgICBEaXJl
Y3RpdmVIYW5kbGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6CisgICAgICAgIGRpYWdub3N0aWNzKGRp
YWcpLAorICAgICAgICB0b2tlbml6ZXIoZGlhZyksCisgICAgICAgIGRpcmVjdGl2ZVBhcnNlcigm
dG9rZW5pemVyLCAmbWFjcm9TZXQsIGRpYWcsIGRpcmVjdGl2ZUhhbmRsZXIpLAorICAgICAgICBt
YWNyb0V4cGFuZGVyKCZkaXJlY3RpdmVQYXJzZXIsICZtYWNyb1NldCwgZGlhZykKKyAgICB7Cisg
ICAgfQorfTsKKworUHJlcHJvY2Vzc29yOjpQcmVwcm9jZXNzb3IoRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGly
ZWN0aXZlSGFuZGxlcikKK3sKKyAgICBtSW1wbCA9IG5ldyBQcmVwcm9jZXNzb3JJbXBsKGRpYWdu
b3N0aWNzLCBkaXJlY3RpdmVIYW5kbGVyKTsKK30KKworUHJlcHJvY2Vzc29yOjp+UHJlcHJvY2Vz
c29yKCkKK3sKKyAgICBkZWxldGUgbUltcGw7Cit9CisKK2Jvb2wgUHJlcHJvY2Vzc29yOjppbml0
KGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aFtdKQorewor
ICAgIHN0YXRpYyBjb25zdCBpbnQga0dMU0xWZXJzaW9uID0gMTAwOworCisgICAgLy8gQWRkIHN0
YW5kYXJkIHByZS1kZWZpbmVkIG1hY3Jvcy4KKyAgICBwcmVkZWZpbmVNYWNybygiX19MSU5FX18i
LCAwKTsKKyAgICBwcmVkZWZpbmVNYWNybygiX19GSUxFX18iLCAwKTsKKyAgICBwcmVkZWZpbmVN
YWNybygiX19WRVJTSU9OX18iLCBrR0xTTFZlcnNpb24pOworICAgIHByZWRlZmluZU1hY3JvKCJH
TF9FUyIsIDEpOworCisgICAgcmV0dXJuIG1JbXBsLT50b2tlbml6ZXIuaW5pdChjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpOworfQorCit2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29u
c3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQoreworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJl
YW07CisgICAgc3RyZWFtIDw8IHZhbHVlOworCisgICAgVG9rZW4gdG9rZW47CisgICAgdG9rZW4u
dHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7CisgICAgdG9rZW4udGV4dCA9IHN0cmVhbS5zdHIoKTsK
KworICAgIE1hY3JvIG1hY3JvOworICAgIG1hY3JvLnByZWRlZmluZWQgPSB0cnVlOworICAgIG1h
Y3JvLnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7CisgICAgbWFjcm8ubmFtZSA9IG5hbWU7CisgICAg
bWFjcm8ucmVwbGFjZW1lbnRzLnB1c2hfYmFjayh0b2tlbik7CisKKyAgICBtSW1wbC0+bWFjcm9T
ZXRbbmFtZV0gPSBtYWNybzsKK30KKwordm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9r
ZW4pCit7CisgICAgYm9vbCB2YWxpZFRva2VuID0gZmFsc2U7CisgICAgd2hpbGUgKCF2YWxpZFRv
a2VuKQorICAgIHsKKyAgICAgICAgbUltcGwtPm1hY3JvRXhwYW5kZXIubGV4KHRva2VuKTsKKyAg
ICAgICAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICAgICAgeworICAgICAgICAgIC8vIFdlIHNo
b3VsZCBub3QgYmUgcmV0dXJuaW5nIGludGVybmFsIHByZXByb2Nlc3NpbmcgdG9rZW5zLgorICAg
ICAgICAgIC8vIENvbnZlcnQgcHJlcHJvY2Vzc2luZyB0b2tlbnMgdG8gY29tcGlsZXIgdG9rZW5z
IG9yIHJlcG9ydAorICAgICAgICAgIC8vIGRpYWdub3N0aWNzLgorICAgICAgICAgIGNhc2UgVG9r
ZW46OlBQX0hBU0g6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBUb2tlbjo6Q09OU1RfSU5UOgorICAgICAgICAgIHsKKyAgICAg
ICAgICAgIGludCB2YWwgPSAwOworICAgICAgICAgICAgaWYgKCF0b2tlbi0+aVZhbHVlKCZ2YWwp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSB0b2tl
biBhcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIC8vIEp1c3QgZW1pdCB0aGUgZGlhZ25vc3Rp
YyBhbmQgcmVzZXQgdmFsdWUgdG8gMC4KKyAgICAgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgICAgICB0b2tlbi0+dGV4dC5hc3NpZ24oIjAiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhbGlkVG9rZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgfQorICAgICAgICAgIGNhc2UgVG9rZW46OkNPTlNUX0ZMT0FUOgorICAgICAgICAg
IHsKKyAgICAgICAgICAgIGZsb2F0IHZhbCA9IDA7CisgICAgICAgICAgICBpZiAoIXRva2VuLT5m
VmFsdWUoJnZhbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRG8gbm90IG1h
cmsgdGhlIHRva2VuIGFzIGludmFsaWQuCisgICAgICAgICAgICAgICAgLy8gSnVzdCBlbWl0IHRo
ZSBkaWFnbm9zdGljIGFuZCByZXNldCB2YWx1ZSB0byAwLjAuCisgICAgICAgICAgICAgICAgbUlt
cGwtPmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkZMT0FUX09WRVJGTE9XLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOworICAgICAgICAgICAgICAgIHRva2VuLT50ZXh0LmFzc2lnbigiMC4wIik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWxpZFRva2VuID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFRva2VuOjpQUF9OVU1CRVI6
CisgICAgICAgICAgICBtSW1wbC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5W
QUxJRF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgVG9rZW46OlBQX09USEVSOgorICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdmFsaWRUb2tl
biA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAg
Ly8gbmFtZXNwYWNlIHBwCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTM1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nl
c3Nvci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1JfSF8KKyNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VT
U09SX1BSRVBST0NFU1NPUl9IXworCisjaW5jbHVkZSAicHBfdXRpbHMuaCIKKworbmFtZXNwYWNl
IHBwCit7CisKK2NsYXNzIERpYWdub3N0aWNzOworY2xhc3MgRGlyZWN0aXZlSGFuZGxlcjsKK3N0
cnVjdCBQcmVwcm9jZXNzb3JJbXBsOworc3RydWN0IFRva2VuOworCitjbGFzcyBQcmVwcm9jZXNz
b3IKK3sKKyAgcHVibGljOgorICAgIFByZXByb2Nlc3NvcihEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MsIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpOworICAgIH5QcmVwcm9jZXNz
b3IoKTsKKworICAgIC8vIGNvdW50OiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBp
biB0aGUgc3RyaW5nIGFuZCBsZW5ndGggYXJyYXlzLgorICAgIC8vIHN0cmluZzogc3BlY2lmaWVz
IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmluZ3MuCisgICAgLy8gbGVuZ3RoOiBzcGVjaWZp
ZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMuCisgICAgLy8gSWYgbGVuZ3RoIGlzIE5VTEws
IGVhY2ggc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgorICAgIC8vIElm
IGxlbmd0aCBpcyBhIHZhbHVlIG90aGVyIHRoYW4gTlVMTCwgaXQgcG9pbnRzIHRvIGFuIGFycmF5
IGNvbnRhaW5pbmcKKyAgICAvLyBhIHN0cmluZyBsZW5ndGggZm9yIGVhY2ggb2YgdGhlIGNvcnJl
c3BvbmRpbmcgZWxlbWVudHMgb2Ygc3RyaW5nLgorICAgIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUg
bGVuZ3RoIGFycmF5IG1heSBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCisgICAgLy8gY29ycmVz
cG9uZGluZyBzdHJpbmcgb3IgYSB2YWx1ZSBsZXNzIHRoYW4gMCB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSBzdHJpbmcKKyAgICAvLyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgYm9vbCBpbml0KGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7Cisg
ICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgorICAgIHZvaWQgcHJlZGVmaW5lTWFjcm8o
Y29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKKworICAgIHZvaWQgbGV4KFRva2VuKiB0b2tl
bik7CisKKyAgcHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJlcHJv
Y2Vzc29yKTsKKworICAgIFByZXByb2Nlc3NvckltcGwqIG1JbXBsOworfTsKKworfSAgLy8gbmFt
ZXNwYWNlIHBwCisjZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUkVQUk9DRVNTT1Jf
SF8KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Tb3VyY2VMb2NhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjY5ODI2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1NvdXJjZUxvY2F0aW9uLmgK
QEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJFUFJP
Q0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
U09VUkNFX0xPQ0FUSU9OX0hfCisKK25hbWVzcGFjZSBwcAoreworCitzdHJ1Y3QgU291cmNlTG9j
YXRpb24KK3sKKyAgICBTb3VyY2VMb2NhdGlvbigpIDogZmlsZSgwKSwgbGluZSgwKSB7IH0KKyAg
ICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50IGwpIDogZmlsZShmKSwgbGluZShsKSB7IH0KKwor
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAoZmlsZSA9PSBvdGhlci5maWxlKSAmJiAobGluZSA9PSBvdGhlci5s
aW5lKTsKKyAgICB9CisKKyAgICBpbnQgZmlsZTsKKyAgICBpbnQgbGluZTsKK307CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNl
TG9jYXRpb24mIHJocykKK3sKKyAgICByZXR1cm4gbGhzLmVxdWFscyhyaHMpOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJj
ZUxvY2F0aW9uJiByaHMpCit7CisgICAgcmV0dXJuICFsaHMuZXF1YWxzKHJocyk7Cit9CisKK30g
IC8vIG5hbWVzcGFjZSBwcAorI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNF
X0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjY3ZjUwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmNwcApAQCAtMCwwICsxLDgz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIlRva2VuLmgiCisKKyNpbmNsdWRlIDxjYXNz
ZXJ0PgorCisjaW5jbHVkZSAibnVtZXJpY19sZXguaCIKKworbmFtZXNwYWNlIHBwCit7CisKK3Zv
aWQgVG9rZW46OnJlc2V0KCkKK3sKKyAgICB0eXBlID0gMDsKKyAgICBmbGFncyA9IDA7CisgICAg
bG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbigpOworICAgIHRleHQuY2xlYXIoKTsKK30KKworYm9v
bCBUb2tlbjo6ZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
KHR5cGUgPT0gb3RoZXIudHlwZSkgJiYKKyAgICAgICAgICAgKGZsYWdzID09IG90aGVyLmZsYWdz
KSAmJgorICAgICAgICAgICAobG9jYXRpb24gPT0gb3RoZXIubG9jYXRpb24pICYmCisgICAgICAg
ICAgICh0ZXh0ID09IG90aGVyLnRleHQpOworfQorCit2b2lkIFRva2VuOjpzZXRBdFN0YXJ0T2ZM
aW5lKGJvb2wgc3RhcnQpCit7CisgICAgaWYgKHN0YXJ0KQorICAgICAgICBmbGFncyB8PSBBVF9T
VEFSVF9PRl9MSU5FOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfkFUX1NUQVJUX09GX0xJ
TkU7Cit9CisKK3ZvaWQgVG9rZW46OnNldEhhc0xlYWRpbmdTcGFjZShib29sIHNwYWNlKQorewor
ICAgIGlmIChzcGFjZSkKKyAgICAgICAgZmxhZ3MgfD0gSEFTX0xFQURJTkdfU1BBQ0U7CisgICAg
ZWxzZQorICAgICAgICBmbGFncyAmPSB+SEFTX0xFQURJTkdfU1BBQ0U7Cit9CisKK3ZvaWQgVG9r
ZW46OnNldEV4cGFuc2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSkKK3sKKyAgICBpZiAoZGlzYWJs
ZSkKKyAgICAgICAgZmxhZ3MgfD0gRVhQQU5TSU9OX0RJU0FCTEVEOworICAgIGVsc2UKKyAgICAg
ICAgZmxhZ3MgJj0gfkVYUEFOU0lPTl9ESVNBQkxFRDsKK30KKworYm9vbCBUb2tlbjo6aVZhbHVl
KGludCogdmFsdWUpIGNvbnN0Cit7CisgICAgYXNzZXJ0KHR5cGUgPT0gQ09OU1RfSU5UKTsKKyAg
ICByZXR1cm4gbnVtZXJpY19sZXhfaW50KHRleHQsIHZhbHVlKTsKK30KKworYm9vbCBUb2tlbjo6
dVZhbHVlKHVuc2lnbmVkIGludCogdmFsdWUpIGNvbnN0Cit7CisgICAgYXNzZXJ0KHR5cGUgPT0g
Q09OU1RfSU5UKTsKKyAgICByZXR1cm4gbnVtZXJpY19sZXhfaW50KHRleHQsIHZhbHVlKTsKK30K
KworYm9vbCBUb2tlbjo6ZlZhbHVlKGZsb2F0KiB2YWx1ZSkgY29uc3QKK3sKKyAgICBhc3NlcnQo
dHlwZSA9PSBDT05TVF9GTE9BVCk7CisgICAgcmV0dXJuIG51bWVyaWNfbGV4X2Zsb2F0KHRleHQs
IHZhbHVlKTsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0
LCBjb25zdCBUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKHRva2VuLmhhc0xlYWRpbmdTcGFjZSgp
KQorICAgICAgICBvdXQgPDwgIiAiOworCisgICAgb3V0IDw8IHRva2VuLnRleHQ7CisgICAgcmV0
dXJuIG91dDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1NTNhZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4u
aApAQCAtMCwwICsxLDEwNiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX1RPS0VOX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9I
XworCisjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJT
b3VyY2VMb2NhdGlvbi5oIgorCituYW1lc3BhY2UgcHAKK3sKKworc3RydWN0IFRva2VuCit7Cisg
ICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBMQVNUID0gMCwgIC8vIEVPRi4KKworICAgICAg
ICBJREVOVElGSUVSID0gMjU4LAorCisgICAgICAgIENPTlNUX0lOVCwKKyAgICAgICAgQ09OU1Rf
RkxPQVQsCisKKyAgICAgICAgT1BfSU5DLAorICAgICAgICBPUF9ERUMsCisgICAgICAgIE9QX0xF
RlQsCisgICAgICAgIE9QX1JJR0hULAorICAgICAgICBPUF9MRSwKKyAgICAgICAgT1BfR0UsCisg
ICAgICAgIE9QX0VRLAorICAgICAgICBPUF9ORSwKKyAgICAgICAgT1BfQU5ELAorICAgICAgICBP
UF9YT1IsCisgICAgICAgIE9QX09SLAorICAgICAgICBPUF9BRERfQVNTSUdOLAorICAgICAgICBP
UF9TVUJfQVNTSUdOLAorICAgICAgICBPUF9NVUxfQVNTSUdOLAorICAgICAgICBPUF9ESVZfQVNT
SUdOLAorICAgICAgICBPUF9NT0RfQVNTSUdOLAorICAgICAgICBPUF9MRUZUX0FTU0lHTiwKKyAg
ICAgICAgT1BfUklHSFRfQVNTSUdOLAorICAgICAgICBPUF9BTkRfQVNTSUdOLAorICAgICAgICBP
UF9YT1JfQVNTSUdOLAorICAgICAgICBPUF9PUl9BU1NJR04sCisKKyAgICAgICAgLy8gUHJlcHJv
Y2Vzc2luZyB0b2tlbiB0eXBlcy4KKyAgICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIHVzZWQgYnkg
dGhlIHByZXByb2Nlc3NvciBpbnRlcm5hbGx5LgorICAgICAgICAvLyBQcmVwcm9jZXNzb3IgY2xp
ZW50cyBtdXN0IG5vdCBkZXBlbmQgb3IgY2hlY2sgZm9yIHRoZW0uCisgICAgICAgIFBQX0hBU0gs
CisgICAgICAgIFBQX05VTUJFUiwKKyAgICAgICAgUFBfT1RIRVIKKyAgICB9OworICAgIGVudW0g
RmxhZ3MKKyAgICB7CisgICAgICAgIEFUX1NUQVJUX09GX0xJTkUgICA9IDEgPDwgMCwKKyAgICAg
ICAgSEFTX0xFQURJTkdfU1BBQ0UgID0gMSA8PCAxLAorICAgICAgICBFWFBBTlNJT05fRElTQUJM
RUQgPSAxIDw8IDIKKyAgICB9OworCisgICAgVG9rZW4oKSA6IHR5cGUoMCksIGZsYWdzKDApIHsg
fQorCisgICAgdm9pZCByZXNldCgpOworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhl
cikgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdG9r
ZW4gb24gbGluZS4KKyAgICAvLyBJdCBkaXNyZWdhcmRzIGFueSBsZWFkaW5nIHdoaXRlc3BhY2Uu
CisgICAgYm9vbCBhdFN0YXJ0T2ZMaW5lKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgQVRfU1RB
UlRfT0ZfTElORSkgIT0gMDsgfQorICAgIHZvaWQgc2V0QXRTdGFydE9mTGluZShib29sIHN0YXJ0
KTsKKworICAgIGJvb2wgaGFzTGVhZGluZ1NwYWNlKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYg
SEFTX0xFQURJTkdfU1BBQ0UpICE9IDA7IH0KKyAgICB2b2lkIHNldEhhc0xlYWRpbmdTcGFjZShi
b29sIHNwYWNlKTsKKworICAgIGJvb2wgZXhwYW5zaW9uRGlzYWJsZWQoKSBjb25zdCB7IHJldHVy
biAoZmxhZ3MgJiBFWFBBTlNJT05fRElTQUJMRUQpICE9IDA7IH0KKyAgICB2b2lkIHNldEV4cGFu
c2lvbkRpc2FibGVkKGJvb2wgZGlzYWJsZSk7CisKKyAgICAvLyBDb252ZXJ0cyB0ZXh0IGludG8g
bnVtZXJpYyB2YWx1ZSBmb3IgQ09OU1RfSU5UIGFuZCBDT05TVF9GTE9BVCB0b2tlbi4KKyAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYXJzZWQgdmFsdWUgY2Fubm90IGZpdCBpbnRvIGFuIGlu
dCBvciBmbG9hdC4KKyAgICBib29sIGlWYWx1ZShpbnQqIHZhbHVlKSBjb25zdDsKKyAgICBib29s
IHVWYWx1ZSh1bnNpZ25lZCBpbnQqIHZhbHVlKSBjb25zdDsKKyAgICBib29sIGZWYWx1ZShmbG9h
dCogdmFsdWUpIGNvbnN0OworCisgICAgaW50IHR5cGU7CisgICAgdW5zaWduZWQgaW50IGZsYWdz
OworICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOworICAgIHN0ZDo6c3RyaW5nIHRleHQ7Cit9
OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRva2VuJiBsaHMsIGNvbnN0IFRva2Vu
JiByaHMpCit7CisgICAgcmV0dXJuIGxocy5lcXVhbHMocmhzKTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhzKQoreworICAgIHJl
dHVybiAhbGhzLmVxdWFscyhyaHMpOworfQorCitleHRlcm4gc3RkOjpvc3RyZWFtJiBvcGVyYXRv
cjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBUb2tlbiYgdG9rZW4pOworCit9ICAvLyBuYW1l
cHNhY2UgcHAKKyNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1RPS0VOX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGE1NzY0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIzNTYgQEAK
KyNsaW5lIDE2ICIuL1Rva2VuaXplci5sIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBp
cyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERPIE5PVCBFRElUIQorCisK
KworI2xpbmUgMTMgIi4vVG9rZW5pemVyLmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQg
c2hvcnQgaW50CisKKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisK
KyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisj
ZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1Jf
VkVSU0lPTiAzNQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxF
WF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lm
aWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBD
IGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQg
QyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisj
aWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2
ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lm
IGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAx
TAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5j
bHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNy
b3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2Rl
ZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMu
aD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWlu
dDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZs
ZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50
MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OworI2Vs
c2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBm
bGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWlu
dDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworI2VuZGlmIC8qICEg
Qzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9N
SU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRl
ZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisj
ZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAg
KC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9N
QVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmlu
ZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9N
QVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgor
I2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkK
KyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAg
ICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9N
QVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEZMRVhJ
TlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3RvcmFnZS1j
bGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisKKyNlbHNl
CS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRl
ZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZWV9VU0Vf
Q09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19j
cGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0IGNvbnN0
CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQt
b2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkg
bmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBpbnRlZ2Vy
IGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRp
dmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQg
Y2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19V
SShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEFuIG9wYXF1ZSBw
b2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9U
WVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKKyNlbmRpZgorCisv
KiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMgZmFyIGJl
bG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCisjZGVmaW5l
IHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCisjZGVmaW5lIHl5
ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IKKyNkZWZp
bmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcgeXlnLT55
eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlzIG1hY3Jv
IHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdlIGRvIGl0IHRoZSBk
aXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCisgKiBkZWZp
bml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQgPSAxICsg
MiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUg
dGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0
YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4KKyAq
LworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZ
U1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZl
biBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09G
X0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQg
cHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUgcHByZXN0YXJ0
KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFSIDAKKwor
LyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVGX1NJWkUK
KyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11
c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhl
IG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZf
U0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZf
WVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBl
ZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisj
aWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9U
Cit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworI2RlZmluZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDIKKworICAgICNkZWZpbmUgWVlfTEVTU19MSU5FTk8obikKKyAgICAK
Ky8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sg
dG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBcCisJCXsg
XAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAgICAgICAg
aW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5FTk8oeXls
ZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQlZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9i
cCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZPUkVfQUNU
SU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKwor
I2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIg
KQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNU
X1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9p
bnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hh
ciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisK
KwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZv
ciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKwor
CS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRp
bmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKwor
CS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRl
ZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZy
ZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsK
KworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYg
c28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50
IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBz
dG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5
eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBh
dCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUg
YWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50
IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQu
ICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworICAg
IAorCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJl
YWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlp
bnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUg
WVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJl
J3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZl
ciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0
cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAq
IHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBv
ZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNl
ZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgcHByZXN0
YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1
c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9C
VUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsKKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZF
Ul9TVEFURSAqLworCisvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBz
dGF0ZXMgaW4gY2FzZSBpbiB0aGUKKyAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVy
IHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAorICogInNjYW5uZXIgc3RhdGUiLgorICoKKyAqIFJl
dHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCisgKi8KKyNkZWZpbmUgWVlfQ1VS
UkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wXSBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKKworLyogU2FtZSBhcyBwcmV2aW91
cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlz
IG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNl
IG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCBwcHJlc3RhcnQgKEZJ
TEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBwcF9zd2l0Y2hfdG9f
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7
CitZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAs
eXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHBwcHVzaF9idWZmZXJf
c3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
K3ZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworc3RhdGlj
IHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRp
YyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRp
YyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIgcHBfZmx1c2hfYnVm
ZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCisKK1lZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3Ry
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICh5
eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
Cit2b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAq
cHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQg
cHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25ld19i
dWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19p
bnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCisgICAg
ICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlf
c2V0X2JvbChhdF9ib2wpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisg
ICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAorCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICBwcF9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0KKworI2RlZmluZSBZWV9BVF9CT0woKSAoWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMg
Ki8KKworI2RlZmluZSBwcHdyYXAobikgMQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsK
KworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3Rh
dGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICx5
eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hh
ciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJl
bnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNwb25k
aW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9SRV9B
Q1RJT04gXAorCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3NpemVf
dCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkq
eXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisKKyNkZWZpbmUgWVlf
TlVNX1JVTEVTIDM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzgKKy8qIFRoaXMgc3RydWN0
IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVj
ZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3Zl
cmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYWNjZXB0Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgMzgsICAgMzYsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCisgICAgICAgIDcsICAg
MzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgIDksCisgICAg
ICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzMsICAgMzMsICAgIDMsICAgIDUsICAg
IDUsCisgICAgICAgIDQsICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAsICAgMzAsICAgMjUs
ICAgMTIsICAgMjMsCisgICAgICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAgIDEsICAgMjYsICAg
MTAsICAgIDksICAgMTEsICAgMTEsCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTQsICAgMTYs
ICAgMTgsICAgMTcsICAgMTUsICAgIDgsICAgMzEsCisgICAgICAgMjEsICAgMzIsICAgMjIsICAg
IDMsICAgIDUsICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAgIDEsCisgICAgICAgMTAsICAgMTEs
ICAgIDAsICAgMTAsICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsCisgICAgICAg
MTAsICAgMTAsICAgIDAKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5
X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAyLCAgICAyLCAgICA0LCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICAxLCAgICA5
LAorICAgICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAg
IDE2LCAgIDE2LAorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE3LCAgIDE3
LCAgICA5LCAgICA5LCAgIDE4LAorICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAxLCAgIDIxLCAg
IDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIxLAorICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAorICAgICAgICA5
LCAgICAxLCAgICA5LCAgIDI1LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAor
CisgICAgICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsCisgICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjQsCisgICAgICAgMjMsICAgMjMsICAgIDksICAgMjYsICAgIDksICAg
IDksICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyN10gPQor
ICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAg
ICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1
LCAgICAxLCAgICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9i
YXNlWzg5XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjQsICAgMjYsICAxNTgs
ICAxNTksICAxNTAsICAxNTksICAxNDUsICAxMjgsCisgICAgICAxNTksICAxMTIsICAgMjMsICAx
NTksICAxMTEsICAgMjEsICAgMjUsICAgMzAsICAgMjksICAgMzYsCisgICAgICAgNDYsICAgMzYs
ICAxMDAsICAgNDUsICAgIDAsICAgMTYsICAgNDcsICAgIDAsICAxNTksICAgODQsCisgICAgICAg
NjUsICAgNzMsICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTks
CisgICAgICAxNTksICAxNTksICAgNjEsICAxNTksICAgIDAsICAxNTksICAgNzMsICAgMzIsICAg
NTYsICAgODMsCisgICAgICAgOTUsICAgNjgsICAgIDAsICAgMzEsICAxNTksICAxNTksICAxNTks
ICAgMTksICAgIDAsICAxNTksCisgICAgICAxNTksICAxNTksICAxNTksICAgIDAsICAxNTksICAx
NTksICAgOTgsICAgIDAsICAxMTAsICAgIDAsCisgICAgICAgIDAsICAxMTcsICAgNTIsICAgOTAs
ICAgODAsICAxNTksICAxNTksICAxMDEsICAgOTcsICAxMTIsCisgICAgICAxMjAsICAxMjMsICAx
NTksICAxNDAsICAgMjgsICAxNDUsICAxNTAsICAxNTIKKyAgICB9IDsKKworc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2RlZls4OV0gPQorICAgIHsgICAwLAorICAgICAgIDgzLCAgICAx
LCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LAorICAgICAgIDIwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDgzLCAgIDg2LCAg
IDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg3LCAg
IDgzLCAgIDgzLCAgIDIwLCAgIDIwLCAgIDQ3LAorICAgICAgIDUwLCAgIDg4LCAgIDIxLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLAorICAgICAgIDgzLCAgIDgzLCAg
IDgzLCAgIDg2LCAgIDgzLCAgIDgzLCAgIDQzLCAgIDQzLCAgIDY3LCAgIDg3LAorICAgICAgIDQ3
LCAgIDUwLCAgIDgzLCAgIDUxLCAgIDg4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDY5LCAgIDcyLAor
ICAgICAgIDgzLCAgIDgzLCAgICAwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzCisgICAg
fSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTg2XSA9CisgICAgeyAg
IDAsCisgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMs
ICAgMTQsICAgMTUsCisgICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAg
MjEsICAgMjIsICAgMjMsICAgMjQsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYs
ICAgMjcsICAgMjksICAgMzAsICAgMjksICAgMzAsCisgICAgICAgMzYsICAgMzksICAgNTksICAg
MzEsICAgNjAsICAgMzEsICAgNDEsICAgNzcsICAgNDQsICAgNDAsCisgICAgICAgNjEsICAgMzcs
ICAgNDUsICAgNDIsICAgNDMsICAgNDMsICAgNDMsICAgNDYsICAgNDcsICAgNzYsCisgICAgICAg
NDgsICAgNDgsICAgNDksICAgNTQsICAgNTUsICAgNTAsICAgNTAsICAgNTEsICAgNTAsICAgNTIs
CisgICAgICAgNTMsICAgNTMsICAgNTMsICAgNTcsICAgNTgsICAgNjIsICAgODEsICAgODEsICAg
ODEsICAgNTAsCisgICAgICAgNDksICAgNDksICAgNjMsICAgNjcsICAgMzIsICAgNjgsICAgNjgs
ICAgNjgsICAgNjYsICAgNTAsCisgICAgICAgNTAsICAgNjcsICAgNjksICAgNjcsICAgNjcsICAg
NTAsICAgNjUsICAgNzEsICAgNzEsICAgNzEsCisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAs
ICAgNzIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsCisKKyAgICAgICA4MywgICA4Mywg
ICA1MCwgICA1MCwgICA1MCwgICA3MywgICA3MywgICA4MywgICA4MywgICA3NCwKKyAgICAgICA3
NCwgICA3NCwgICA2NywgICA2NywgICA2NywgICA4MiwgICA4MiwgICA4MiwgICA1NiwgICA2NywK
KyAgICAgICA3OCwgICA3OCwgICA4MywgICA4MywgICA3OSwgICA3OSwgICA3OSwgICA3OCwgICA3
OCwgICAzOCwKKyAgICAgICAzNSwgICA4MCwgICA4MCwgICA4MCwgICA4MSwgICA4MSwgICA4MSwg
ICA4MiwgICA4MiwgICA4MiwKKyAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICA2
NCwgICAzNCwgICAzMywgICA2NCwgICA2NCwKKyAgICAgICA3MCwgICAzMiwgICA3MCwgICA3MCwg
ICA3MCwgICA3NSwgICA3NSwgICA4MywgICAgNSwgICA4MywKKyAgICAgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MworICAgIH0gOworCitzdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfY2hrWzE4Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAg
ICA0LCAgICA0LAorICAgICAgIDEzLCAgIDE2LCAgIDg1LCAgICAzLCAgIDI2LCAgICA0LCAgIDE3
LCAgIDU4LCAgIDE5LCAgIDE2LAorICAgICAgIDI2LCAgIDEzLCAgIDE5LCAgIDE3LCAgIDE4LCAg
IDE4LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDU0LAorICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIy
LCAgIDIyLCAgIDQ4LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAorICAgICAgIDIxLCAgIDIxLCAg
IDIxLCAgIDI0LCAgIDI0LCAgIDI3LCAgIDczLCAgIDczLCAgIDczLCAgIDIxLAorICAgICAgIDQ5
LCAgIDQ5LCAgIDI3LCAgIDQzLCAgIDMyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDMxLCAgIDQ5LAor
ICAgICAgIDUyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ3LCAgIDMwLCAgIDQ3LCAgIDQ3
LCAgIDQ3LAorICAgICAgIDUyLCAgIDUyLCAgIDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAgIDQ3LCAg
IDUwLCAgIDUwLCAgIDUwLAorCisgICAgICAgNzQsICAgNzQsICAgNzUsICAgNzUsICAgNTAsICAg
NTEsICAgNTEsICAgNzksICAgNzksICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNjcsICAgNjcs
ICAgNjcsICAgNzgsICAgNzgsICAgNzgsICAgMjMsICAgNjcsCisgICAgICAgNjksICAgNjksICAg
ODAsICAgODAsICAgNjksICAgNjksICAgNjksICAgNzIsICAgNzIsICAgMTUsCisgICAgICAgMTIs
ICAgNzIsICAgNzIsICAgNzIsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIsICAgODIsCisg
ICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODYsICAgMTAsICAgIDksICAgODYs
ICAgODYsCisgICAgICAgODcsICAgIDcsICAgODcsICAgODcsICAgODcsICAgODgsICAgODgsICAg
IDUsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMKKyAgICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0
aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4
IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3Rl
ZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5l
IFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyoKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNwZWNpZmljYXRp
b24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgorQmFzZWQgb24gTWljcm9zb2Z0IFZpc3VhbCBT
dHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKK2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4CisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxF
IFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyovCisKKyNpbmNsdWRl
ICJUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkRpYWdub3N0aWNzQmFzZS5oIgorI2luY2x1ZGUg
IlRva2VuLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorLy8gVHJpZ2dlcmVkIGJ5IHRoZSBh
dXRvLWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KKyNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgorI2VuZGlmCisKK3R5cGVkZWYgc3Rk
OjpzdHJpbmcgWVlTVFlQRTsKK3R5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisK
Ky8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0cmlu
ZykgbnVtYmVyLgorI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgorCisjZGVmaW5lIFlZX1VTRVJf
SU5JVCAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXh0cmEtPmxl
YWRpbmdTcGFjZSA9IGZhbHNlOyBcCisgICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRydWU7
ICAgICBcCisgICAgfSB3aGlsZSgwKTsKKworI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0OyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNj
YW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKChz
Y2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJ
bmRleCkpKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAtPSBp
bnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAorICAgICAgICAgICAgKyt5eWZp
bGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVubzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjYW5Mb2MtPmNJ
bmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
IHdoaWxlKDApOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBcCisg
ICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOworCisjZGVmaW5l
IElOSVRJQUwgMAorI2RlZmluZSBDT01NRU5UIDEKKworI2RlZmluZSBZWV9FWFRSQV9UWVBFIHBw
OjpUb2tlbml6ZXI6OkNvbnRleHQqCisKKy8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUgb2YgdGhl
IHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0IHl5Z3V0c190CisgICAgeworCisgICAgLyog
VXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLworICAgIFlZX0VYVFJBX1RZUEUg
eXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBnbG9iYWxz
IGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCisgICAgRklMRSAqeXlp
bl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoqPCBpbmRl
eCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8q
KjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVy
X3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworICAgIGNoYXIgeXlfaG9sZF9jaGFy
OworICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOworICAgIHl5X3NpemVfdCB5eWxlbmdfcjsKKyAg
ICBjaGFyICp5eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0OworICAgIGludCB5eV9zdGFydDsK
KyAgICBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOworICAgIGludCB5eV9zdGFydF9z
dGFja19wdHI7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOworICAgIGludCAqeXlfc3Rh
cnRfc3RhY2s7CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAg
ICBjaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisgICAgaW50IHl5bGluZW5vX3I7Cisg
ICAgaW50IHl5X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5
eV9tb3JlX2ZsYWc7CisgICAgaW50IHl5X21vcmVfbGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZh
bF9yOworCisgICAgWVlMVFlQRSAqIHl5bGxvY19yOworCisgICAgfTsgLyogZW5kIHN0cnVjdCB5
eWd1dHNfdCAqLworCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKKyAgICAvKiBUaGlzIG11c3QgZ28gaGVyZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZ
TFRZUEUgYXJlIGluY2x1ZGVkCisgICAgICogZnJvbSBiaXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAx
LiovCisgICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+eXlsdmFsX3IKKyAgICAKKyAgICAjICAg
IGRlZmluZSB5eWxsb2MgeXlnLT55eWxsb2NfcgorICAgIAoraW50IHBwbGV4X2luaXQgKHl5c2Nh
bl90KiBzY2FubmVyKTsKKworaW50IHBwbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNl
cl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKKworLyogQWNjZXNzb3IgbWV0aG9kcyB0byBn
bG9iYWxzLgorICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5u
ZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KKworaW50IHBwbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCitpbnQgcHBnZXRfZGVidWcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2
b2lkIHBwc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
K1lZX0VYVFJBX1RZUEUgcHBnZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lk
IHBwc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisKK0ZJTEUgKnBwZ2V0X2luICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBw
cHNldF9pbiAgKEZJTEUgKiBpbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICpw
cGdldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X291dCAgKEZJTEUg
KiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworeXlfc2l6ZV90IHBwZ2V0X2xlbmcg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICpwcGdldF90ZXh0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKworaW50IHBwZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3Zv
aWQgcHBzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
CitZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgcHBz
ZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisK
KyAgICAgICBZWUxUWVBFICpwcGdldF9sbG9jICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAK
KyAgICAgICAgdm9pZCBwcHNldF9sbG9jIChZWUxUWVBFICogeXlsbG9jX3BhcmFtICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAgICAKKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwg
YmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCisgKiBzZWN0aW9uIDEuCisgKi8K
KworI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IGludCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgcHB3
cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgeXl0
ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFy
ICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NU
UkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5c2Nhbl90
IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19j
cGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxz
ZQorc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKworI2Vu
ZGlmCisKKy8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8K
KyNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQorI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIK
KyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUg
c3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4g
ZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdl
IG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXls
ZW5nLCAxLCB5eW91dCApCisjZW5kaWYKKworLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGlu
dG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMg
cmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8KKyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlf
SU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXl5
X3NpemVfdCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAo
YyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25d
ID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFy
KSBjOyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRB
TF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0g
bjsgXAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVz
dWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkg
XAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRB
TF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsg
XAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAor
CQl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJl
Y3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50
IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UK
KyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVu
dHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1
cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0
LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgor
I2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0
YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VS
Uk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisvKiBl
bmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisv
KiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28g
dGhlIHVzZXIgY2FuCisgKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlf
REVDTAorI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQorCitleHRlcm4gaW50IHBwbGV4IFwKKyAg
ICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtLFlZTFRZUEUgKiB5eWxsb2NfcGFy
YW0gLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgcHBsZXggXAor
ICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sIFlZTFRZUEUgKiB5eWxsb2Nf
cGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyog
Q29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0
IGFuZCB5eWxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9B
Q1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVk
IGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZ
WV9CUkVBSyBicmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VT
RVJfQUNUSU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxs
IHRoZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9j
dXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIg
aW50IHl5X2FjdDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisKKyAgICAvKiBMaW5lIGNvbW1lbnQgKi8KKworICAgIHl5bHZhbCA9IHl5
bHZhbF9wYXJhbTsKKworICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKKworCWlmICggIXl5Zy0+
eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VTRVJfSU5J
VAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFydCApCisJ
CQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEg
eXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0g
c3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXBwZW5zdXJlX2J1
ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJ
CQkJcHBfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCQl9CisK
KwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxlICggMSAp
CQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7CisKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRp
b24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJ
CSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0
YXJ0OworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5
eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRf
c3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1
cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJ
CQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2Nd
ICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGlu
dCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+
PSA4NCApCisJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0K
KwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9j
dXJyZW50X3N0YXRlICE9IDgzICk7CisJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19j
cG9zOworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsK
KworeXlfZmluZF9hY3Rpb246CisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRl
XTsKKworCQlZWV9ET19CRUZPUkVfQUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwg
aXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9h
Y3QgKQorCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyog
bXVzdCBiYWNrIHVwICovCisJCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9B
Q1RJT04gKi8KKwkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToK
K1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCisvKiBCbG9jayBjb21tZW50ICovCisvKiBMaW5l
IGJyZWFrcyBhcmUganVzdCBjb3VudGVkIC0gbm90IHJldHVybmVkLiAqLworLyogVGhlIGNvbW1l
bnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgc3BhY2UuICovIAorY2FzZSAyOgorWVlfUlVMRV9T
RVRVUAoreyBCRUdJTihDT01NRU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitZWV9SVUxFX1NF
VFVQCisKKwlZWV9CUkVBSworY2FzZSA0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nh
c2UgNToKKy8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7ICsreXls
aW5lbm87IH0KKwlZWV9CUkVBSworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5ZXh0
cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7CisgICAgQkVHSU4oSU5JVElBTCk7Cit9CisJWVlfQlJF
QUsKK2Nhc2UgNzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAvLyAjIGlzIG9ubHkgdmFsaWQgYXQg
c3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCisgICAgeXlsdmFsLT5h
c3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXlleHRyYS0+bGluZVN0YXJ0ID8gcHA6
OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKK30KKwlZWV9CUkVBSworY2Fz
ZSA4OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOworfQorCVlZX0JSRUFLCitjYXNl
IDk6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsKK30KKwlZWV9CUkVBSworY2FzZSAx
MDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfRkxPQVQ7Cit9CisJWVlfQlJFQUsKKy8qIEFu
eXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBu
dW1iZXIuICovCisvKiBSdWxlIHRvIGNhdGNoIGFsbCBpbnZhbGlkIGludGVnZXJzIGFuZCBmbG9h
dHMuICovCitjYXNlIDExOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Cit9CisJWVlf
QlJFQUsKK2Nhc2UgMTI6CitZWV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKK30KKwlZWV9CUkVB
SworY2FzZSAxMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQs
IHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOworfQorCVlZX0JSRUFLCitj
YXNlIDE0OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRUZUOworfQorCVlZX0JSRUFLCitjYXNl
IDE1OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30KKwlZWV9CUkVBSworY2FzZSAx
NjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTc6CitZ
WV9SVUxFX1NFVFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0dFOworfQorCVlZX0JSRUFLCitjYXNlIDE4OgorWVlfUlVM
RV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9FUTsKK30KKwlZWV9CUkVBSworY2FzZSAxOToKK1lZX1JVTEVfU0VU
VVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfTkU7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjA6CitZWV9SVUxFX1NFVFVQCit7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46Ok9QX0FORDsKK30KKwlZWV9CUkVBSworY2FzZSAyMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfWE9SOworfQorCVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9P
UjsKK30KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwt
PmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfQUREX0FT
U0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNDoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfU1VC
X0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
TVVMX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfRElWX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyNzoKK1lZX1JVTEVfU0VUVVAKK3sK
KyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfTU9EX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAyODoKK1lZX1JVTEVfU0VUVVAK
K3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpU
b2tlbjo6T1BfTEVGVF9BU1NJR047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMjk6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBw
cDo6VG9rZW46Ok9QX1JJR0hUX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMDoKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfQU5EX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMToKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfWE9SX0FTU0lHTjsKK30KKwlZWV9CUkVBSworY2FzZSAzMjoK
K1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCVlZX0JSRUFLCitjYXNlIDMz
OgorWVlfUlVMRV9TRVRVUAoreworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Cisg
ICAgcmV0dXJuIHl5dGV4dFswXTsKK30KKwlZWV9CUkVBSworY2FzZSAzNDoKK1lZX1JVTEVfU0VU
VVAKK3sgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQorCVlZX0JSRUFLCitjYXNlIDM1
OgorLyogcnVsZSAzNSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7CisgICAgKyt5
eWxpbmVubzsKKyAgICB5eWx2YWwtPmFzc2lnbigxLCAnXG4nKTsKKyAgICByZXR1cm4gJ1xuJzsK
K30KKwlZWV9CUkVBSworY2FzZSAzNjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICB5eWx2YWwtPmFz
c2lnbigxLCB5eXRleHRbMF0pOworICAgIHJldHVybiBwcDo6VG9rZW46OlBQX09USEVSOworfQor
CVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nhc2UgWVlfU1RBVEVfRU9G
KENPTU1FTlQpOgoreworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBo
YW5kbGluZyBFT0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVh
bGx5LgorICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6Oklu
cHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5k
ZXhNYXggPSBzdGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9j
LT5zSW5kZXggIT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVh
Y2ggaGVyZSBpZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5k
IG9mIHRoZSBpbnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2Fu
TG9jLT5jSW5kZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8g
PSAxOworICAgIH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxp
bmUgPSB5eWxpbmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQg
PT0gQ09NTUVOVCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVy
bWluYXRlKCk7Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzc6CitZWV9SVUxFX1NFVFVQCitFQ0hPOwor
CVlZX0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9m
IHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ft
b3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0g
MTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJ
CSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VU
CisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0g
WVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9y
IGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBi
ZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2Ug
YW5kIGNhbGxlZAorCQkJICogcHBsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJl
CisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJ
CSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQor
CQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJ
CSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJ
CQkgKi8KKwkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5
aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5
X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0
aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4g
aW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRl
cyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0
ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICov
CisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVM
LiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5
eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKwor
CQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0
cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
KCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtu
b3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFu
ZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0
aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4
dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIp
OworCisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQlpZiAo
IHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJ
eXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4
dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKwkJ
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0
aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlcigg
eXlzY2FubmVyICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsK
KwkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJCQlpZiAoIHBw
d3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0
YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVw
CisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBz
byB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdh
bnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJ
CQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxM
IHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXln
LT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9G
KFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJ
CQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJ
CQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9C
X0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0
ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJ
CQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVm
X3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3Rv
IHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlf
RkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBh
Y3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVu
ZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9mIHBwbGV4ICovCisKKy8qIHl5
X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJl
dHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFU
Q0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBj
dXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAq
Lworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3Rl
ciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlf
Y19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25f
Y2hhcnMgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGlu
dGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkg
dG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5
X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJ
CS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJl
YXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09G
X0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQg
cHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJl
dHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1v
cmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZm
ZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55
eXRleHRfcHRyKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kg
KQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8q
IGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0Ys
CisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQl5
eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9
IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICov
CisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwor
CQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKworCQkJaW50IHl5X2Nf
YnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVm
KTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJeXlfc2l6ZV90
IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCisJCQkJaWYgKCBuZXdfc2l6ZSA8PSAw
ICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworCQkJCWVsc2UK
KwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICop
CisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCisJCQkJCXBwcmVh
bGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIg
KTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0
LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9jaF9idWYgKQor
CQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVm
ZmVyIG92ZXJmbG93IiApOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5
X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJfQor
CisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19yZWFk
ID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlf
SU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21v
dmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCWlm
ICggeXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0g
WVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJ
CQlwcHJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJ
cmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQor
CQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAo
KHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBi
eSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5l
d19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2No
YXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFy
ICopIHBwcmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9y
eSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwl5eWctPnl5X25fY2hhcnMgKz0g
bnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUjsKKworCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZlswXTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKiB5eV9nZXRfcHJldmlv
dXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVh
Y2hlZCAqLworCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eWctPnl5X3N0YXJ0OworCisJZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQorCQl7CisJCXJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6
IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQl7CisJCQl5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCXl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7
CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwor
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5z
aWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKworCXJl
dHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRv
IG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCisgKgorICogc3lub3BzaXMK
KyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8K
KyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlw
ZSB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGlu
dCB5eV9pc19qYW07CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOyAvKiBUaGlzIHZhciBtYXkgYmUgdW51c2VkIGRlcGVuZGluZyB1cG9uIG9w
dGlvbnMuICovCisJcmVnaXN0ZXIgY2hhciAqeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwly
ZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9z
dGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCX0KKwl3aGls
ZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVu
dF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJy
ZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg0ICkKKwkJCXl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJ
eXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODMpOworCisJcmV0dXJuIHl5X2lzX2ph
bSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZk
ZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNl
bmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9j
aGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAp
CisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2Fu
dCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwg
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQor
CQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBv
ZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlf
Y19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSAp
CisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBl
bnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRl
ZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5
IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3Ig
aW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJ
ICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1Rf
RU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICov
CisJCQkJCXBwcmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gq
LworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggcHB3
cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJCWlmICggISB5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBf
X2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworI2Vsc2UKKwkJCQkJ
cmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJfQorCisJCQkJY2FzZSBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwljID0gKih1bnNp
Z25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICov
CisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLworCXl5Zy0+
eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJcmV0dXJuIGM7Cit9CisjZW5k
aWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8g
YSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJs
ZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBu
b3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBA
YyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgcHByZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7
CisgICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHBwX2NyZWF0ZV9idWZmZXIoeXlpbixZWV9C
VUZfU0laRSAseXlzY2FubmVyKTsKKwl9CisKKwlwcF9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAq
IEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHBwX3N3aXRjaF90b19idWZm
ZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBm
dW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQlwcHBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJ
cHBwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwlwcGVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVm
ZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyog
Rmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwor
CisJLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBk
dXJpbmcKKwkgKiBFT0YgKHBwd3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0
aGlzIGZsYWcKKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgcHB3cmFwKCkgaXMgY2FsbGVkLCBz
byBpdCdzIHNhZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwl5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHBw
X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5eWctPnl5X25f
Y2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRl
eHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7
CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisvKiogQWxsb2Nh
dGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUg
QSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBz
aXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRl
ZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZl
ciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlf
QlVGRkVSX1NUQVRFIGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHBwYWxsb2Moc2l6
ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkK
KwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1
ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hfYnVmIGhh
cyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQor
CSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLwor
CWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHBwYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNj
YW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4gcHBfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNf
b3VyX2J1ZmZlciA9IDE7CisKKwlwcF9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7CisK
KwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEg
YnVmZmVyIGNyZWF0ZWQgd2l0aCBwcF9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5u
ZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCBwcF9kZWxldGVfYnVmZmVyIChZ
WV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIGIg
KQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3Vy
ZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQlw
cGZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXBwZnJlZSgodm9p
ZCAqKSBiICx5eXNjYW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXpl
cyBhIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRo
YW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHBwcmVzdGFy
dCgpIG9yIGF0IEVPRi4KKyAqLworICAgIHN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyICAoWVlf
QlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworewor
CWludCBvZXJybm8gPSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlwcF9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsK
KworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKwor
ICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHBwX2luaXRfYnVmZmVyIHdh
cyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20gcHByZXN0YXJ0KCkgb3IgdGhyb3VnaCB5
eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRv
IHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NV
UlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+
eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUg
PSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBhbGwgYnVmZmVy
ZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQu
CisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMg
WVlfQ1VSUkVOVF9CVUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLworICAgIHZvaWQgcHBfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlf
bl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFy
YWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9m
LWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0
ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+
eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9
ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9z
dGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkK
KwkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQdXNoZXMgdGhl
IG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCisgKiAgdGhl
IGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKKyAq
ICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KKyAq
ICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHB1c2hf
YnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisJaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcHBlbnN1
cmVfYnVmZmVyX3N0YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBm
cm9tIHBwX3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJ
CXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkvKiBPbmx5IHB1
c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VS
UkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSBwcF9zd2l0Y2hf
dG9fYnVmZmVyLiAqLworCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCXl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRl
bGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxl
bWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCit2b2lkIHBwcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwlwcF9kZWxl
dGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJ
CS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7
CisJCXBwX2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2RpZF9idWZm
ZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlm
IGl0IGRvZXMgbm90IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9u
ZSBwdXNoLgorICovCitzdGF0aWMgdm9pZCBwcGVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICgheXlnLT55
eV9idWZmZXJfc3RhY2spIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIg
ZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwg
ZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkg
KiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKwkJbnVt
X3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSoqKXBwYWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55
eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCh5
eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90
b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0K
KworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEg
cG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cg
c2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBn
cm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKilwcHJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQlu
dW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwg
eXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBwZW5zdXJlX2J1ZmZlcl9zdGFjaygp
IiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5
X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNr
X21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBi
dWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNp
emUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2Nh
dGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9i
dWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVy
KQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAg
IGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6
ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2
ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJCXJldHVybiAwOworCisJYiA9IChZWV9CVUZGRVJf
U1RBVEUpIHBwYWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5l
ciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4gcHBfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7
CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55
eV9jaF9idWYgPSBiYXNlOworCWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0
X2ZpbGUgPSAwOworCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19p
bnRlcmFjdGl2ZSA9IDA7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9
IDA7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwlwcF9zd2l0Y2hf
dG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0
aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8g
cHBsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJh
bSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0
aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICBwcF9zY2FuX2J5
dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNv
bnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAKKwlyZXR1cm4g
cHBfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworfQorCisvKiog
U2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhl
IG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEg
Ynl0ZXMuCisgKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJh
bSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEg
Ynl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1
cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZG
RVJfU1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVf
dCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFU
RSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbiwgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5
IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8K
KwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSBwcGFsbG9jKG4gLHl5c2Nh
bm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWlj
IG1lbW9yeSBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5
dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1ZltfeXlieXRlc19s
ZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWIg
PSBwcF9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiApCisJCVlZX0ZB
VEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiBwcF9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdz
IG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJ
ICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7
CisKKwlyZXR1cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlf
RVhJVF9GQUlMVVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXlj
b25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCSh2b2lkKSBmcHJp
bnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7Cit9
CisKKy8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAq
LworCisjdW5kZWYgeXlsZXNzCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJZG8gXAorCQl7IFwKKwkJ
LyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisgICAgICAgIGludCB5
eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19t
YWNyb19hcmcpO1wKKwkJeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQl5
eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAorCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1ww
JzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCisJCX0gXAorCXdoaWxlICggMCAp
CisKKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1l
bWJlcnMuICovCisKKy8qKiBHZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGZvciB0aGlzIHNjYW5u
ZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworWVlfRVhU
UkFfVFlQRSBwcGdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJu
IHl5ZXh0cmE7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2xpbmVubyAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRf
QlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5bGluZW5v
OworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgICAgCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVS
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHl5Y29sdW1uOworfQor
CisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2Fu
bmVyIG9iamVjdC4KKyAqLworRklMRSAqcHBnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnBwZ2V0X291
dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiog
R2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworeXlfc2l6ZV90IHBwZ2V0X2xlbmcgICh5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1
cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAq
LworCitjaGFyICpwcGdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1
cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRh
IGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVk
IFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCBwcHNldF9leHRyYSAoWVlf
RVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5
eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51
bWJlci4KKyAqIEBwYXJhbSBsaW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK3ZvaWQgcHBzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVtYmVyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxp
ZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJSRU5U
X0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfbGluZW5vIGNhbGxl
ZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWxpbmVubyA9IGxp
bmVfbnVtYmVyOworfQorCisvKiogU2V0IHRoZSBjdXJyZW50IGNvbHVtbi4KKyAqIEBwYXJhbSBs
aW5lX251bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
K3ZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisKKyAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVy
IGV4aXN0cy4gKi8KKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAg
ICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwg
eXlzY2FubmVyKTsgCisgICAgCisgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87Cit9CisKKy8qKiBT
ZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Cisg
KiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAc2VlIHBwX3N3aXRjaF90
b19idWZmZXIKKyAqLwordm9pZCBwcHNldF9pbiAoRklMRSAqICBpbl9zdHIgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHl5aW4gPSBpbl9zdHIgOworfQorCit2b2lkIHBwc2V0X291dCAo
RklMRSAqICBvdXRfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eW91dCA9IG91
dF9zdHIgOworfQorCitpbnQgcHBnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
ICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHBwc2V0X2RlYnVnIChpbnQgIGJk
ZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlfZmxleF9kZWJ1ZyA9IGJkZWJ1
ZyA7Cit9CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgZm9yIHl5bHZhbCBhbmQgeXlsbG9jICovCisK
K1lZU1RZUEUgKiBwcGdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1
cm4geXlsdmFsOworfQorCit2b2lkIHBwc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFt
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07Cit9
CisKK1lZTFRZUEUgKnBwZ2V0X2xsb2MgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJl
dHVybiB5eWxsb2M7Cit9CisgICAgCit2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiAgeXlsbG9j
X3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWxsb2MgPSB5eWxsb2NfcGFy
YW07Cit9CisgICAgCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHBwbGV4X2luaXQgaXMg
c3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcwor
ICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBzY2Fu
bmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBsaWNpdGx5IGhh
bmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jvcy4KKyAqLwor
CitpbnQgcHBsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sKKyAgICBpZiAo
cHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBw
YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0
cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2Ug
YnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwor
ICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7
CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisK
Ky8qIHBwbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcHBsZXhf
aW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5l
ciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEg
KnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBj
YWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBt
dXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFs
dWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHBwYWxsb2MgaW4K
KyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCBwcGxleF9pbml0X2V4dHJhKFlZX0VY
VFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCisKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgcHBzZXRfZXh0cmEgKHl5
X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMg
PT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwcGFsbG9jICggc2l6ZW9m
KCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlmICgqcHRyX3l5
X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2Ug
YnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMu
ICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRz
X3QpKTsKKyAgICAKKyAgICBwcHNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2ds
b2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2Jh
bHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24t
cmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBw
cGxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICovCisKKyAgICB5
eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0g
MDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+eXlfY19idWZf
cCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0
ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5eWctPnl5X3N0
YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gIE5VTEw7CisK
Ky8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAgIHl5aW4gPSBz
dGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChGSUxFICopIDA7
CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3IgZnV0dXJlIHJl
ZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5CisgICAg
ICogcHBsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBwbGV4X2Rl
c3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAq
LworaW50IHBwbGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgLyog
UG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLworCXdoaWxl
KFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJcHBfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXBw
cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0YWNr
IGl0c2VsZi4gKi8KKwlwcGZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJ
eXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0aGUgc3RhcnQg
Y29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICBwcGZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAs
eXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOworCisgICAg
LyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFu
dCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiBwcGxleCgpIGlzIGNhbGxlZCwgaW5p
dGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5l
cik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAq
LworICAgIHBwZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5c2Nhbm5lciA9
IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRp
bmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJu
Y3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJ
czFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRp
YyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsK
KworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnBwYWxsb2MgKHl5X3NpemVfdCAgc2l6
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXpl
ICk7Cit9CisKK3ZvaWQgKnBwcmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUg
Zm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNl
IGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQqIGdl
bmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNlIGJv
dGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJICogYW55
IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9u
cworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVybiAodm9p
ZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCBwcGZyZWUgKHZv
aWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIgKikgcHRyICk7
CS8qIHNlZSBwcHJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZ
VEFCTEVTX05BTUUgInl5dGFibGVzIgorCituYW1lc3BhY2UgcHAgeworCisvLyBUT0RPKGFsb2tw
KTogTWF4aW11bSB0b2tlbiBsZW5ndGggc2hvdWxkIGlkZWFsbHkgYmUgc3BlY2lmaWVkIGJ5Cisv
LyB0aGUgcHJlcHJvY2Vzc29yIGNsaWVudCwgaS5lLiwgdGhlIGNvbXBpbGVyLgorY29uc3Qgc2l6
ZV90IFRva2VuaXplcjo6a01heFRva2VuTGVuZ3RoID0gMjU2OworCitUb2tlbml6ZXI6OlRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQoreworICAgIG1Db250
ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Cit9CisKK1Rva2VuaXplcjo6flRva2VuaXpl
cigpCit7CisgICAgZGVzdHJveVNjYW5uZXIoKTsKK30KKworYm9vbCBUb2tlbml6ZXI6OmluaXQo
aW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtd
KQoreworICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGNvdW50ID4g
MCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOworCisgICAgbUNvbnRleHQuaW5wdXQg
PSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOworICAgIHJldHVybiBpbml0U2Nhbm5lcigp
OworfQorCit2b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJlcihpbnQgZmlsZSkKK3sKKyAgICAv
LyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJlci4KKyAgICAvLyBTZWUgbWFjcm8g
eXlmaWxlbm8uCisgICAgcHBzZXRfY29sdW1uKGZpbGUsbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9r
ZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHBwc2V0X2xpbmVubyhsaW5l
LG1IYW5kbGUpOworfQorCit2b2lkIFRva2VuaXplcjo6bGV4KFRva2VuKiB0b2tlbikKK3sKKyAg
ICB0b2tlbi0+dHlwZSA9IHBwbGV4KCZ0b2tlbi0+dGV4dCwmdG9rZW4tPmxvY2F0aW9uLG1IYW5k
bGUpOworICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkgPiBrTWF4VG9rZW5MZW5ndGgpCisgICAg
eworICAgICAgICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpUT0tF
Tl9UT09fTE9ORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+
bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAgdG9rZW4tPnRleHQuZXJhc2Uoa01heFRv
a2VuTGVuZ3RoKTsKKyAgICB9CisKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4t
PnNldEF0U3RhcnRPZkxpbmUobUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5l
U3RhcnQgPSB0b2tlbi0+dHlwZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdT
cGFjZShtQ29udGV4dC5sZWFkaW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9
IGZhbHNlOworfQorCitib29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgo
bUhhbmRsZSA9PSBOVUxMKSAmJiBwcGxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwmbUhhbmRsZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBwcmVzdGFydCgwLG1IYW5kbGUpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFRva2VuaXplcjo6ZGVzdHJveVNjYW5uZXIoKQorewor
ICAgIGlmIChtSGFuZGxlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIHBwbGV4X2Rl
c3Ryb3kobUhhbmRsZSk7CisgICAgbUhhbmRsZSA9IE5VTEw7Cit9CisKK30gIC8vIG5hbWVzcGFj
ZSBwcAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL1Rva2VuaXplci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jNjAzMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaApAQCAtMCwwICsxLDU4
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5J
WkVSX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKworI2lu
Y2x1ZGUgIklucHV0LmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJwcF91dGlscy5o
IgorCituYW1lc3BhY2UgcHAKK3sKKworY2xhc3MgRGlhZ25vc3RpY3M7CisKK2NsYXNzIFRva2Vu
aXplciA6IHB1YmxpYyBMZXhlcgoreworICBwdWJsaWM6CisgICAgc3RydWN0IENvbnRleHQKKyAg
ICB7CisgICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKKworICAgICAgICBJbnB1dCBp
bnB1dDsKKyAgICAgICAgLy8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2ludHMgdG8uIFRv
a2VuIGxvY2F0aW9uIHNob3VsZCB0cmFjaworICAgICAgICAvLyBzY2FuTG9jIGluc3RlYWQgb2Yg
SW5wdXQ6Om1SZWFkTG9jIGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1lCisgICAgICAg
IC8vIGlmIHRleHQgaXMgYnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQgYnVmZmVyLgor
ICAgICAgICBJbnB1dDo6TG9jYXRpb24gc2NhbkxvYzsKKworICAgICAgICBib29sIGxlYWRpbmdT
cGFjZTsKKyAgICAgICAgYm9vbCBsaW5lU3RhcnQ7CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3Qg
c3RkOjpzaXplX3Qga01heFRva2VuTGVuZ3RoOworCisgICAgVG9rZW5pemVyKERpYWdub3N0aWNz
KiBkaWFnbm9zdGljcyk7CisgICAgflRva2VuaXplcigpOworCisgICAgYm9vbCBpbml0KGludCBj
b3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CisK
KyAgICB2b2lkIHNldEZpbGVOdW1iZXIoaW50IGZpbGUpOworICAgIHZvaWQgc2V0TGluZU51bWJl
cihpbnQgbGluZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CisKKyAg
cHJpdmF0ZToKKyAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVG9rZW5pemVyKTsKKyAg
ICBib29sIGluaXRTY2FubmVyKCk7CisgICAgdm9pZCBkZXN0cm95U2Nhbm5lcigpOworCisgICAg
dm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFuZGxlLgorICAgIENvbnRleHQgbUNvbnRleHQ7
ICAvLyBTY2FubmVyIGV4dHJhLgorfTsKKworfSAgLy8gbmFtZXNwYWNlIHBwCisjZW5kaWYgIC8v
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJfSF8KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5YWU2NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVT
IHByZXByb2Nlc3Nvci4KK0Jhc2VkIG9uIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAgUHJl
cHJvY2Vzc29yIEdyYW1tYXI6CitodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJh
cnkvMnNjeHlzODkuYXNweAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVE
IFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisqLworCisldG9weworLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXJzZXIuc2guIERP
IE5PVCBFRElUIQorfQorCisleworI2luY2x1ZGUgIlRva2VuaXplci5oIgorCisjaW5jbHVkZSAi
RGlhZ25vc3RpY3NCYXNlLmgiCisjaW5jbHVkZSAiVG9rZW4uaCIKKworI2lmIGRlZmluZWQoX19H
TlVDX18pCisvLyBUcmlnZ2VyZWQgYnkgdGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9y
IGZ1bmN0aW9uLgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9y
ZXR1cm4iCisjZW5kaWYKKwordHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwordHlwZWRlZiBw
cDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKworLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4g
dmFyaWFibGUgdG8gdHJhY2sgZmlsZSAoc3RyaW5nKSBudW1iZXIuCisjZGVmaW5lIHl5ZmlsZW5v
IHl5Y29sdW1uCisKKyNkZWZpbmUgWVlfVVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmaWxlbm8g
PSAwOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKKyAgICAg
ICAgeXlleHRyYS0+bGluZVN0YXJ0ID0gdHJ1ZTsgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisj
ZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwOjpJbnB1
dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgcHA6OklucHV0OjpMb2NhdGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAg
ICAgICAgICAgXAorICAgICAgICB3aGlsZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3Vu
dCgpKSAmJiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4
ID49IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KSkpIFwKKyAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgc2NhbkxvYy0+Y0luZGV4IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4
KyspOyAgICBcCisgICAgICAgICAgICArK3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eWxsb2MtPmZp
bGUgPSB5eWZpbGVubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIHl5bGxvYy0+bGluZSA9IHl5bGluZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgc2NhbkxvYy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgWVlfSU5Q
VVQoYnVmLCByZXN1bHQsIG1heFNpemUpIFwKKyAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5y
ZWFkKGJ1ZiwgbWF4U2l6ZSk7CisKKyV9CisKKyVvcHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZl
ci1pbnRlcmFjdGl2ZQorJW9wdGlvbiByZWVudHJhbnQgYmlzb24tYnJpZGdlIGJpc29uLWxvY2F0
aW9ucworJW9wdGlvbiBwcmVmaXg9InBwIgorJW9wdGlvbiBleHRyYS10eXBlPSJwcDo6VG9rZW5p
emVyOjpDb250ZXh0KiIKKyV4IENPTU1FTlQKKworTkVXTElORSAgICAgXG58XHJ8XHJcbgorSURF
TlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVowLTldKgorUFVOQ1RVQVRPUiAgW11bPD4oKXt9List
LyolXnwmfj0hOjssP10KKworREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAtOV0qCitPQ1RB
TF9DT05TVEFOVCAgICAgICAgMFswLTddKgorSEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAt
OWEtZkEtRl0rCisKK0RJR0lUICAgICAgICAgICAgICAgIFswLTldCitFWFBPTkVOVF9QQVJUICAg
ICAgICBbZUVdWystXT97RElHSVR9KworRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4i
e0RJR0lUfSspfCh7RElHSVR9KyIuIikKKworJSUKKworICAgIC8qIExpbmUgY29tbWVudCAqLwor
Ii8vIlteXHJcbl0qCisKKyAgICAvKiBCbG9jayBjb21tZW50ICovCisgICAgLyogTGluZSBicmVh
a3MgYXJlIGp1c3QgY291bnRlZCAtIG5vdCByZXR1cm5lZC4gKi8KKyAgICAvKiBUaGUgY29tbWVu
dCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCisiLyoiIHsgQkVHSU4oQ09NTUVO
VCk7IH0KKzxDT01NRU5UPlteKlxyXG5dKworPENPTU1FTlQ+IioiCis8Q09NTUVOVD57TkVXTElO
RX0geyArK3l5bGluZW5vOyB9Cis8Q09NTUVOVD4iKi8iIHsKKyAgICB5eWV4dHJhLT5sZWFkaW5n
U3BhY2UgPSB0cnVlOworICAgIEJFR0lOKElOSVRJQUwpOworfQorCisjIHsKKyAgICAvLyAjIGlz
IG9ubHkgdmFsaWQgYXQgc3RhcnQgb2YgbGluZSBmb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMu
CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBdKTsKKyAgICByZXR1cm4geXlleHRyYS0+
bGluZVN0YXJ0ID8gcHA6OlRva2VuOjpQUF9IQVNIIDogcHA6OlRva2VuOjpQUF9PVEhFUjsKK30K
Kwore0lERU5USUZJRVJ9IHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Cisg
ICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKK30KKwore0RFQ0lNQUxfQ09OU1RBTlR9
fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7CisgICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0lOVDsK
K30KKworKHtESUdJVH0re0VYUE9ORU5UX1BBUlR9KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VY
UE9ORU5UX1BBUlR9PykgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAg
ICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKK30KKworICAgIC8qIEFueXRoaW5nIHRo
YXQgc3RhcnRzIHdpdGggYSB7RElHSVR9IG9yIC57RElHSVR9IG11c3QgYmUgYSBudW1iZXIuICov
CisgICAgLyogUnVsZSB0byBjYXRjaCBhbGwgaW52YWxpZCBpbnRlZ2VycyBhbmQgZmxvYXRzLiAq
LworKHtESUdJVH0rW19hLXpBLVowLTkuXSopfCgiLiJ7RElHSVR9K1tfYS16QS1aMC05Ll0qKSB7
CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9r
ZW46OlBQX05VTUJFUjsKK30KKworIisrIiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0lOQzsKK30KKyItLSIgeworICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9E
RUM7Cit9CisiPDwiIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVDsKK30KKyI+PiIgeworICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVDsKK30KKyI8
PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9MRTsKK30KKyI+PSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9HRTsKK30KKyI9PSIgeworICAgIHl5bHZh
bC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9FUTsK
K30KKyIhPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9ORTsKK30KKyImJiIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkQ7Cit9CisiXl4iIHsKKyAg
ICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6
T1BfWE9SOworfQorInx8IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwor
ICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX09SOworfQorIis9IiB7CisgICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0FERF9BU1NJR047
Cit9CisiLT0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfU1VCX0FTU0lHTjsKK30KKyIqPSIgeworICAgIHl5bHZhbC0+YXNz
aWduKHl5dGV4dCwgeXlsZW5nKTsKKyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9NVUxfQVNTSUdO
OworfQorIi89IiB7CisgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJl
dHVybiBwcDo6VG9rZW46Ok9QX0RJVl9BU1NJR047Cit9CisiJT0iIHsKKyAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTU9EX0FTU0lH
TjsKK30KKyI8PD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7CisgICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTEVGVF9BU1NJR047Cit9CisiPj49IiB7CisgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hU
X0FTU0lHTjsKK30KKyImPSIgeworICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
KyAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOworfQorIl49IiB7CisgICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOworICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hP
Ul9BU1NJR047Cit9CisifD0iIHsKKyAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfT1JfQVNTSUdOOworfQorCit7UFVOQ1RVQVRPUn0g
eworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5dGV4dFswXSk7CisgICAgcmV0dXJuIHl5dGV4dFsw
XTsKK30KKworWyBcdFx2XGZdKyAgIHsgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsgfQor
Cit7TkVXTElORX0geworICAgICsreXlsaW5lbm87CisgICAgeXlsdmFsLT5hc3NpZ24oMSwgJ1xu
Jyk7CisgICAgcmV0dXJuICdcbic7Cit9CisKKy4geworICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5
dGV4dFswXSk7CisgICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7Cit9CisKKzwqPjw8RU9G
Pj4geworICAgIC8vIFlZX1VTRVJfQUNUSU9OIGlzIG5vdCBpbnZva2VkIGZvciBoYW5kbGluZyBF
T0YuCisgICAgLy8gU2V0IHRoZSBsb2NhdGlvbiBmb3IgRU9GIHRva2VuIG1hbnVhbGx5LgorICAg
IHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5wdXQ7CisgICAgcHA6OklucHV0OjpMb2Nh
dGlvbiogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOworICAgIGludCBzSW5kZXhNYXggPSBz
dGQ6Om1heCgwLCBpbnB1dC0+Y291bnQoKSAtIDEpOworICAgIGlmIChzY2FuTG9jLT5zSW5kZXgg
IT0gc0luZGV4TWF4KQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIG9ubHkgcmVhY2ggaGVyZSBp
ZiB0aGVyZSBhcmUgZW1wdHkgc3RyaW5ncyBhdCB0aGUKKyAgICAgICAgLy8gZW5kIG9mIHRoZSBp
bnB1dC4KKyAgICAgICAgc2NhbkxvYy0+c0luZGV4ID0gc0luZGV4TWF4OyBzY2FuTG9jLT5jSW5k
ZXggPSAwOworICAgICAgICB5eWZpbGVubyA9IHNJbmRleE1heDsgeXlsaW5lbm8gPSAxOworICAg
IH0KKyAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsKKyAgICB5eWxsb2MtPmxpbmUgPSB5eWxp
bmVubzsKKyAgICB5eWx2YWwtPmNsZWFyKCk7CisKKyAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVO
VCkKKyAgICB7CisgICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcDo6U291cmNlTG9jYXRpb24oeXlmaWxlbm8sIHl5bGluZW5vKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7CisgICAgfQorICAgIHl5dGVybWluYXRlKCk7
Cit9CisKKyUlCisKK25hbWVzcGFjZSBwcCB7CisKKy8vIFRPRE8oYWxva3ApOiBNYXhpbXVtIHRv
a2VuIGxlbmd0aCBzaG91bGQgaWRlYWxseSBiZSBzcGVjaWZpZWQgYnkKKy8vIHRoZSBwcmVwcm9j
ZXNzb3IgY2xpZW50LCBpLmUuLCB0aGUgY29tcGlsZXIuCitjb25zdCBzaXplX3QgVG9rZW5pemVy
OjprTWF4VG9rZW5MZW5ndGggPSAyNTY7CisKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0
aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCit7CisgICAgbUNvbnRleHQuZGlhZ25vc3Rp
Y3MgPSBkaWFnbm9zdGljczsKK30KKworVG9rZW5pemVyOjp+VG9rZW5pemVyKCkKK3sKKyAgICBk
ZXN0cm95U2Nhbm5lcigpOworfQorCitib29sIFRva2VuaXplcjo6aW5pdChpbnQgY291bnQsIGNv
bnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCit7CisgICAgaWYg
KGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOworICAgIGlmICgoY291bnQgPiAwKSAmJiAoc3RyaW5n
ID09IDApKSByZXR1cm4gZmFsc2U7CisKKyAgICBtQ29udGV4dC5pbnB1dCA9IElucHV0KGNvdW50
LCBzdHJpbmcsIGxlbmd0aCk7CisgICAgcmV0dXJuIGluaXRTY2FubmVyKCk7Cit9CisKK3ZvaWQg
VG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQoreworICAgIC8vIFdlIHVzZSBjb2x1
bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgorICAgIC8vIFNlZSBtYWNybyB5eWZpbGVuby4KKyAg
ICB5eXNldF9jb2x1bW4oZmlsZSwgbUhhbmRsZSk7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpzZXRM
aW5lTnVtYmVyKGludCBsaW5lKQoreworICAgIHl5c2V0X2xpbmVubyhsaW5lLCBtSGFuZGxlKTsK
K30KKwordm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCit7CisgICAgdG9rZW4tPnR5
cGUgPSB5eWxleCgmdG9rZW4tPnRleHQsICZ0b2tlbi0+bG9jYXRpb24sIG1IYW5kbGUpOworICAg
IGlmICh0b2tlbi0+dGV4dC5zaXplKCkgPiBrTWF4VG9rZW5MZW5ndGgpCisgICAgeworICAgICAg
ICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpUT0tFTl9UT09fTE9O
RywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24s
IHRva2VuLT50ZXh0KTsKKyAgICAgICAgdG9rZW4tPnRleHQuZXJhc2Uoa01heFRva2VuTGVuZ3Ro
KTsKKyAgICB9CisKKyAgICB0b2tlbi0+ZmxhZ3MgPSAwOworCisgICAgdG9rZW4tPnNldEF0U3Rh
cnRPZkxpbmUobUNvbnRleHQubGluZVN0YXJ0KTsKKyAgICBtQ29udGV4dC5saW5lU3RhcnQgPSB0
b2tlbi0+dHlwZSA9PSAnXG4nOworCisgICAgdG9rZW4tPnNldEhhc0xlYWRpbmdTcGFjZShtQ29u
dGV4dC5sZWFkaW5nU3BhY2UpOworICAgIG1Db250ZXh0LmxlYWRpbmdTcGFjZSA9IGZhbHNlOwor
fQorCitib29sIFRva2VuaXplcjo6aW5pdFNjYW5uZXIoKQoreworICAgIGlmICgobUhhbmRsZSA9
PSBOVUxMKSAmJiB5eWxleF9pbml0X2V4dHJhKCZtQ29udGV4dCwgJm1IYW5kbGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICB5eXJlc3RhcnQoMCwgbUhhbmRsZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCit7CisgICAgaWYg
KG1IYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgeXlsZXhfZGVzdHJveSht
SGFuZGxlKTsKKyAgICBtSGFuZGxlID0gTlVMTDsKK30KKworfSAgLy8gbmFtZXNwYWNlIHBwCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvYXRvbS5jIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9hdG9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTU4ZDIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9hdG9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzcgKzAsMCBAQAotLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJ
RElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBp
bgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1z
LCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1
dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0
aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFz
ZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElB
Ci1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlk
ZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5W
SURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVy
IE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRo
ZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRp
c3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRp
b25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91
IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBj
b3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcK
LXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUg
TlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBt
YXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgot
RXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0
cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEg
aGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0
aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhl
ciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVk
LiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRX
QVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElF
RCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVS
IEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBF
VkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1J
TkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUg
VVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRI
RQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVP
UlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFC
SUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
Ly8KLS8vIGF0b20uYwotLy8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3NsZ2xvYmFscy5oIgotCi0jdW5kZWYgbWFsbG9jCi0jdW5kZWYgcmVhbGxvYwotI3Vu
ZGVmIGZyZWUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLSAgICBpbnQgdmFsOwot
ICAgIGNvbnN0IGNoYXIgKnN0cjsKLX0gdG9rZW5zW10gPSB7Ci0gICAgeyBDUFBfQU5EX09QLCAg
ICAgICAgICImJiIgfSwKLSAgICB7IENQUF9BTkRfQVNTSUdOLCAgICAgIiY9IiB9LAotICAgIHsg
Q1BQX1NVQl9BU1NJR04sICAgICAiLT0iIH0sCi0gICAgeyBDUFBfTU9EX0FTU0lHTiwgICAgICIl
PSIgfSwKLSAgICB7IENQUF9BRERfQVNTSUdOLCAgICAgIis9IiB9LAotICAgIHsgQ1BQX0RJVl9B
U1NJR04sICAgICAiLz0iIH0sCi0gICAgeyBDUFBfTVVMX0FTU0lHTiwgICAgICIqPSIgfSwKLSAg
ICB7IENQUF9SSUdIVF9CUkFDS0VULCAgIjo+IiB9LAotICAgIHsgQ1BQX0VRX09QLCAgICAgICAg
ICAiPT0iIH0sCi0gICAgeyBDUFBfWE9SX09QLCAgICAgICAgICJeXiIgfSwgCi0gICAgeyBDUFBf
WE9SX0FTU0lHTiwgICAgICJePSIgfSwgCi0gICAgeyBDUFBfRkxPQVRDT05TVEFOVCwgICI8Zmxv
YXQtY29uc3Q+IiB9LAotICAgIHsgQ1BQX0dFX09QLCAgICAgICAgICAiPj0iIH0sCi0gICAgeyBD
UFBfUklHSFRfT1AsICAgICAgICI+PiIgfSwKLSAgICB7IENQUF9SSUdIVF9BU1NJR04sICAgIj4+
PSIgfSwgCi0gICAgeyBDUFBfSURFTlRJRklFUiwgICAgICI8aWRlbnQ+IiB9LAotICAgIHsgQ1BQ
X0lOVENPTlNUQU5ULCAgICAiPGludC1jb25zdD4iIH0sCi0gICAgeyBDUFBfTEVfT1AsICAgICAg
ICAgICI8PSIgfSwKLSAgICB7IENQUF9MRUZUX09QLCAgICAgICAgIjw8IiB9LAotICAgIHsgQ1BQ
X0xFRlRfQVNTSUdOLCAgICAiPDw9IiB9LAotICAgIHsgQ1BQX0xFRlRfQlJBQ0tFVCwgICAiPDoi
IH0sCi0gICAgeyBDUFBfTEVGVF9CUkFDRSwgICAgICI8JSIgfSwgCi0gICAgeyBDUFBfREVDX09Q
LCAgICAgICAgICItLSIgfSwKLSAgICB7IENQUF9SSUdIVF9CUkFDRSwgICAgIiU+IiB9LCAKLSAg
ICB7IENQUF9ORV9PUCwgICAgICAgICAgIiE9IiB9LAotICAgIHsgQ1BQX09SX09QLCAgICAgICAg
ICAifHwiIH0sCi0gICAgeyBDUFBfT1JfQVNTSUdOLCAgICAgICJ8PSIgfSwgCi0gICAgeyBDUFBf
SU5DX09QLCAgICAgICAgICIrKyIgfSwKLSAgICB7IENQUF9TVFJDT05TVEFOVCwgICAgIjxzdHJp
bmctY29uc3Q+IiB9LAotICAgIHsgQ1BQX1RZUEVJREVOVElGSUVSLCAiPHR5cGUtaWRlbnQ+IiB9
LAotfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0jZGVmaW5lIElOSVRfU1RSSU5HX1RBQkxFX1NJWkUgMTYzODQKLQot
dHlwZWRlZiBzdHJ1Y3QgU3RyaW5nVGFibGVfUmVjIHsKLSAgICBjaGFyICpzdHJpbmdzOwotICAg
IGludCBuZXh0RnJlZTsKLSAgICBpbnQgc2l6ZTsKLX0gU3RyaW5nVGFibGU7Ci0KLS8qCi0gKiBJ
bml0U3RyaW5nVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIHN0cmluZyB0YWJsZS4KLSAqCi0gKi8K
LQotc3RhdGljIGludCBJbml0U3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkKLXsKLSAg
ICBzdGFibGUtPnN0cmluZ3MgPSAoY2hhciAqKSBtYWxsb2MoSU5JVF9TVFJJTkdfVEFCTEVfU0la
RSk7Ci0gICAgaWYgKCFzdGFibGUtPnN0cmluZ3MpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8v
IFplcm8tdGggb2Zmc2V0IG1lYW5zICJlbXB0eSIgc28gZG9uJ3QgdXNlIGl0LgotICAgIHN0YWJs
ZS0+bmV4dEZyZWUgPSAxOwotICAgIHN0YWJsZS0+c2l6ZSA9IElOSVRfU1RSSU5HX1RBQkxFX1NJ
WkU7Ci0gICAgcmV0dXJuIDE7Ci19IC8vIEluaXRTdHJpbmdUYWJsZQotCi0vKgotICogRnJlZVN0
cmluZ1RhYmxlKCkgLSBGcmVlIHRoZSBzdHJpbmcgdGFibGUuCi0gKgotICovCi0KLXN0YXRpYyB2
b2lkIEZyZWVTdHJpbmdUYWJsZShTdHJpbmdUYWJsZSAqc3RhYmxlKQotewotICAgIGlmIChzdGFi
bGUtPnN0cmluZ3MpCi0gICAgICAgIGZyZWUoc3RhYmxlLT5zdHJpbmdzKTsKLSAgICBzdGFibGUt
PnN0cmluZ3MgPSBOVUxMOwotICAgIHN0YWJsZS0+bmV4dEZyZWUgPSAwOwotICAgIHN0YWJsZS0+
c2l6ZSA9IDA7Ci19IC8vIEZyZWVTdHJpbmdUYWJsZQotCi0vKgotICogSGFzaFN0cmluZygpIC0g
SGFzaCBhIHN0cmluZyB3aXRoIHRoZSBiYXNlIGhhc2ggZnVuY3Rpb24uCi0gKgotICovCi0KLXN0
YXRpYyBpbnQgSGFzaFN0cmluZyhjb25zdCBjaGFyICpzKQotewotICAgIGludCBodmFsID0gMDsK
LQotICAgIHdoaWxlICgqcykgewotICAgICAgICBodmFsID0gKGh2YWwqMTM1MDcgKyAqcyoxOTcp
IF4gKGh2YWwgPj4gMik7Ci0gICAgICAgIHMrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGh2YWwgJiAw
eDdmZmZmZmZmOwotfSAvLyBIYXNoU3RyaW5nCi0KLS8qCi0gKiBIYXNoU3RyaW5nMigpIC0gSGFz
aCBhIHN0cmluZyB3aXRoIHRoZSBpbmNyaW1lbnRpbmcgaGFzaCBmdW5jdGlvbi4KLSAqCi0gKi8K
LQotc3RhdGljIGludCBIYXNoU3RyaW5nMihjb25zdCBjaGFyICpzKQotewotICAgIGludCBodmFs
ID0gMDsKLQotICAgIHdoaWxlICgqcykgewotICAgICAgICBodmFsID0gKGh2YWwqNzI5ICsgKnMq
MzcpIF4gKGh2YWwgPj4gMSk7Ci0gICAgICAgIHMrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGh2YWw7
Ci19IC8vIEhhc2hTdHJpbmcyCi0KLS8qCi0gKiBBZGRTdHJpbmcoKSAtIEFkZCBhIHN0cmluZyB0
byBhIHN0cmluZyB0YWJsZS4gIFJldHVybiBpdCdzIG9mZnNldC4KLSAqCi0gKi8KLQotc3RhdGlj
IGludCBBZGRTdHJpbmcoU3RyaW5nVGFibGUgKnN0YWJsZSwgY29uc3QgY2hhciAqcykKLXsKLSAg
ICBpbnQgbGVuLCBsb2M7Ci0gICAgY2hhciAqc3RyOwotCi0gICAgbGVuID0gKGludCkgc3RybGVu
KHMpOwotICAgIHdoaWxlIChzdGFibGUtPm5leHRGcmVlICsgbGVuICsgMSA+PSBzdGFibGUtPnNp
emUpIHsKLSAgICAgICAgYXNzZXJ0KHN0YWJsZS0+c2l6ZSA8IDEwMDAwMDApOwotICAgICAgICBz
dHIgPSAoY2hhciAqKSBtYWxsb2Moc3RhYmxlLT5zaXplKjIpOwotICAgICAgICBtZW1jcHkoc3Ry
LCBzdGFibGUtPnN0cmluZ3MsIHN0YWJsZS0+c2l6ZSk7Ci0gICAgICAgIGZyZWUoc3RhYmxlLT5z
dHJpbmdzKTsKLSAgICAgICAgc3RhYmxlLT5zdHJpbmdzID0gc3RyOwotICAgICAgICBzdGFibGUt
PnNpemUgPSBzdGFibGUtPnNpemUqMjsKLSAgICB9Ci0gICAgbG9jID0gc3RhYmxlLT5uZXh0RnJl
ZTsKLSAgICBzdHJjcHkoJnN0YWJsZS0+c3RyaW5nc1tsb2NdLCBzKTsKLSAgICBzdGFibGUtPm5l
eHRGcmVlICs9IGxlbiArIDE7Ci0gICAgcmV0dXJuIGxvYzsKLX0gLy8gQWRkU3RyaW5nCi0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEhhc2ggdGFibGU6IC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLQotI2RlZmluZSBJTklUX0hBU0hfVEFCTEVfU0laRSAyMDQ3Ci0jZGVmaW5lIEhBU0hfVEFC
TEVfTUFYX0NPTExJU0lPTlMgMwotCi10eXBlZGVmIHN0cnVjdCBIYXNoRW50cnlfUmVjIHsKLSAg
ICBpbnQgaW5kZXg7ICAgICAgLy8gU3RyaW5nIHRhYmxlIG9mZnNldCBvZiBzdHJpbmcgcmVwcmVz
ZW50YXRpb24KLSAgICBpbnQgdmFsdWU7ICAgICAgLy8gQXRvbSAoc3ltYm9sKSB2YWx1ZQotfSBI
YXNoRW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0IEhhc2hUYWJsZV9SZWMgewotICAgIEhhc2hFbnRy
eSAqZW50cnk7Ci0gICAgaW50IHNpemU7Ci0gICAgaW50IGVudHJpZXM7Ci0gICAgaW50IGNvdW50
c1tIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TICsgMV07Ci19IEhhc2hUYWJsZTsKLQotLyoKLSAq
IEluaXRIYXNoVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIGhhc2ggdGFibGUuCi0gKgotICovCi0K
LXN0YXRpYyBpbnQgSW5pdEhhc2hUYWJsZShIYXNoVGFibGUgKmh0YWJsZSwgaW50IGZzaXplKQot
ewotICAgIGludCBpaTsKLQotICAgIGh0YWJsZS0+ZW50cnkgPSAoSGFzaEVudHJ5ICopIG1hbGxv
YyhzaXplb2YoSGFzaEVudHJ5KSpmc2l6ZSk7Ci0gICAgaWYgKCFodGFibGUtPmVudHJ5KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBodGFibGUtPnNpemUgPSBmc2l6ZTsKLSAgICBmb3IgKGlpID0g
MDsgaWkgPCBmc2l6ZTsgaWkrKykgewotICAgICAgICBodGFibGUtPmVudHJ5W2lpXS5pbmRleCA9
IDA7Ci0gICAgICAgIGh0YWJsZS0+ZW50cnlbaWldLnZhbHVlID0gMDsKLSAgICB9Ci0gICAgaHRh
YmxlLT5lbnRyaWVzID0gMDsKLSAgICBmb3IgKGlpID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhf
Q09MTElTSU9OUzsgaWkrKykKLSAgICAgICAgaHRhYmxlLT5jb3VudHNbaWldID0gMDsKLSAgICBy
ZXR1cm4gMTsKLX0gLy8gSW5pdEhhc2hUYWJsZQotCi0vKgotICogRnJlZUhhc2hUYWJsZSgpIC0g
RnJlZSB0aGUgaGFzaCB0YWJsZS4KLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgRnJlZUhhc2hUYWJs
ZShIYXNoVGFibGUgKmh0YWJsZSkKLXsKLSAgICBpZiAoaHRhYmxlLT5lbnRyeSkKLSAgICAgICAg
ZnJlZShodGFibGUtPmVudHJ5KTsKLSAgICBodGFibGUtPmVudHJ5ID0gTlVMTDsKLSAgICBodGFi
bGUtPnNpemUgPSAwOwotICAgIGh0YWJsZS0+ZW50cmllcyA9IDA7Ci19IC8vIEZyZWVIYXNoVGFi
bGUKLQotLyoKLSAqIEVtcHR5KCkgLSBTZWUgaWYgYSBoYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5
LgotICoKLSAqLwotCi1zdGF0aWMgaW50IEVtcHR5KEhhc2hUYWJsZSAqaHRhYmxlLCBpbnQgaGFz
aGxvYykKLXsKLSAgICBhc3NlcnQoaGFzaGxvYyA+PSAwICYmIGhhc2hsb2MgPCBodGFibGUtPnNp
emUpOwotICAgIGlmIChodGFibGUtPmVudHJ5W2hhc2hsb2NdLmluZGV4ID09IDApIHsKLSAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfSAv
LyBFbXB0eQotCi0vKgotICogTWF0Y2goKSAtIFNlZSBpZiBhIGhhc2ggdGFibGUgZW50cnkgaXMg
bWF0Y2hlcyBhIHN0cmluZy4KLSAqCi0gKi8KLQotc3RhdGljIGludCBNYXRjaChIYXNoVGFibGUg
Kmh0YWJsZSwgU3RyaW5nVGFibGUgKnN0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGhhc2hsb2Mp
Ci17Ci0gICAgaW50IHN0cmxvYzsKLQotICAgIHN0cmxvYyA9IGh0YWJsZS0+ZW50cnlbaGFzaGxv
Y10uaW5kZXg7Ci0gICAgaWYgKCFzdHJjbXAocywgJnN0YWJsZS0+c3RyaW5nc1tzdHJsb2NdKSkg
ewotICAgICAgICByZXR1cm4gMTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19IC8vIE1hdGNoCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEF0b20gdGFibGU6
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2RlZmluZSBJTklUX0FUT01fVEFCTEVfU0laRSAx
MDI0Ci0KLQotc3RydWN0IEF0b21UYWJsZV9SZWMgewotICAgIFN0cmluZ1RhYmxlIHN0YWJsZTsg
Ly8gU3RyaW5nIHRhYmxlLgotICAgIEhhc2hUYWJsZSBodGFibGU7ICAgLy8gSGFzaGVzIHN0cmlu
ZyB0byBhdG9tIG51bWJlciBhbmQgdG9rZW4gdmFsdWUuICBNdWx0aXBsZSBzdHJpbmdzIGNhbgot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0aGUgc2FtZSB0b2tlbiB2YWx1ZSBidXQg
ZWFjaCB1bmlxdWUgc3RyaW5nIGlzIGEgdW5pcXVlIGF0b20uCi0gICAgaW50ICphbWFwOyAgICAg
ICAgICAvLyBNYXBzIGF0b20gdmFsdWUgdG8gb2Zmc2V0IGluIHN0cmluZyB0YWJsZS4gIEF0b21z
IGFsbCBtYXAgdG8gdW5pcXVlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmdzIGV4
Y2VwdCBmb3Igc29tZSB1bmRlZmluZWQgdmFsdWVzIGluIHRoZSBsb3dlciwgZml4ZWQgcGFydAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGF0b20gdGFibGUgdGhhdCBtYXAgdG8g
Ijx1bmRlZmluZWQ+Ii4gIFRoZSBsb3dlc3QgMjU2IGF0b21zCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjb3JyZXNwb25kIHRvIHNpbmdsZSBjaGFyYWN0ZXIgQVNDSUkgdmFsdWVzIGV4Y2Vw
dCBmb3IgYWxwaGFudW1lcmljCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXJz
IGFuZCAnXycsIHdoaWNoIGNhbiBiZSBvdGhlciB0b2tlbnMuICBOZXh0IGNvbWUgdGhlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZSB0b2tlbnMgd2l0aCB0aGVpciBhdG9tIHZh
bHVlcyBlcXVhbCB0byB0aGUgdG9rZW4gdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGVuIGNvbWUgcHJlZGVmaW5lZCBhdG9tcywgZm9sbG93ZWQgYnkgdXNlciBzcGVjaWZpZWQg
aWRlbnRpZmllcnMuCi0gICAgaW50ICphcmV2OyAgICAgICAgICAvLyBSZXZlcnNlZCBhdG9tIGZv
ciBzeW1ib2wgdGFibGUgdXNlLgotICAgIGludCBuZXh0RnJlZTsKLSAgICBpbnQgc2l6ZTsKLX07
Ci0KLXN0YXRpYyBBdG9tVGFibGUgbGF0YWJsZSA9IHsgeyBOVUxMLCAwLCAwIH0sIHsgTlVMTCwg
MCwgMCwgezB9IH0sIE5VTEwsIE5VTEwsIDAsIDAgfTsKLUF0b21UYWJsZSAqYXRhYmxlID0gJmxh
dGFibGU7Ci0KLXN0YXRpYyBpbnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBjb25z
dCBjaGFyICpzLCBpbnQgYXRvbSk7Ci0KLS8qCi0gKiBHcm93QXRvbVRhYmxlKCkgLSBHcm93IHRo
ZSBhdG9tIHRhYmxlIHRvIGF0IGxlYXN0ICJzaXplIiBpZiBpdCdzIHNtYWxsZXIuCi0gKgotICov
Ci0KLXN0YXRpYyBpbnQgR3Jvd0F0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IHNpemUp
Ci17Ci0gICAgaW50ICpuZXdtYXAsICpuZXdyZXY7Ci0KLSAgICBpZiAoYXRhYmxlLT5zaXplIDwg
c2l6ZSkgewotICAgICAgICBpZiAoYXRhYmxlLT5hbWFwKSB7Ci0gICAgICAgICAgICBuZXdtYXAg
PSByZWFsbG9jKGF0YWJsZS0+YW1hcCwgc2l6ZW9mKGludCkqc2l6ZSk7Ci0gICAgICAgICAgICBu
ZXdyZXYgPSByZWFsbG9jKGF0YWJsZS0+YXJldiwgc2l6ZW9mKGludCkqc2l6ZSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXdtYXAgPSBtYWxsb2Moc2l6ZW9mKGludCkqc2l6ZSk7
Ci0gICAgICAgICAgICBuZXdyZXYgPSBtYWxsb2Moc2l6ZW9mKGludCkqc2l6ZSk7Ci0gICAgICAg
ICAgICBhdGFibGUtPnNpemUgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbmV3bWFwIHx8
ICFuZXdyZXYpIHsKLSAgICAgICAgICAgIC8qIGZhaWxlZCB0byBncm93IC0tIGVycm9yICovCi0g
ICAgICAgICAgICBpZiAobmV3bWFwKQotICAgICAgICAgICAgICAgIGF0YWJsZS0+YW1hcCA9IG5l
d21hcDsKLSAgICAgICAgICAgIGlmIChuZXdyZXYpCi0gICAgICAgICAgICAgICAgYXRhYmxlLT5h
cmV2ID0gbmV3cmV2OwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAg
IG1lbXNldCgmbmV3bWFwW2F0YWJsZS0+c2l6ZV0sIDAsIChzaXplIC0gYXRhYmxlLT5zaXplKSAq
IHNpemVvZihpbnQpKTsKLSAgICAgICAgbWVtc2V0KCZuZXdyZXZbYXRhYmxlLT5zaXplXSwgMCwg
KHNpemUgLSBhdGFibGUtPnNpemUpICogc2l6ZW9mKGludCkpOwotICAgICAgICBhdGFibGUtPmFt
YXAgPSBuZXdtYXA7Ci0gICAgICAgIGF0YWJsZS0+YXJldiA9IG5ld3JldjsKLSAgICAgICAgYXRh
YmxlLT5zaXplID0gc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19IC8vIEdyb3dBdG9tVGFi
bGUKLQotLyoKLSAqIGxSZXZlcnNlKCkgLSBSZXZlcnNlIHRoZSBib3R0b20gMjAgYml0cyBvZiBh
IDMyIGJpdCBpbnQuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgbFJldmVyc2UoaW50IGZ2YWwpCi17
Ci0gICAgdW5zaWduZWQgaW50IGluID0gZnZhbDsKLSAgICBpbnQgcmVzdWx0ID0gMCwgY250ID0g
MDsKLQotICAgIHdoaWxlKGluKSB7Ci0gICAgICAgIHJlc3VsdCA8PD0gMTsKLSAgICAgICAgcmVz
dWx0IHw9IGluJjE7Ci0gICAgICAgIGluID4+PSAxOwotICAgICAgICBjbnQrKzsKLSAgICB9Ci0K
LSAgICAvLyBEb24ndCB1c2UgYWxsIDMxIGJpdHMuICBPbmUgbWlsbGlvbiBhdG9tcyBpcyBwbGVu
dHkgYW5kIHNvbWV0aW1lcyB0aGUKLSAgICAvLyB1cHBlciBiaXRzIGFyZSB1c2VkIGZvciBvdGhl
ciB0aGluZ3MuCi0KLSAgICBpZiAoY250IDwgMjApCi0gICAgICAgIHJlc3VsdCA8PD0gMjAgLSBj
bnQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0gLy8gbFJldmVyc2UKLQotLyoKLSAqIEFsbG9jYXRl
QXRvbSgpIC0gQWxsb2NhdGUgYSBuZXcgYXRvbS4gIEFzc29jaWF0ZWQgd2l0aCB0aGUgInVuZGVm
aW5lZCIgdmFsdWUgb2YgLTEuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgQWxsb2NhdGVBdG9tKEF0
b21UYWJsZSAqYXRhYmxlKQotewotICAgIGlmIChhdGFibGUtPm5leHRGcmVlID49IGF0YWJsZS0+
c2l6ZSkKLSAgICAgICAgR3Jvd0F0b21UYWJsZShhdGFibGUsIGF0YWJsZS0+bmV4dEZyZWUqMik7
Ci0gICAgYXRhYmxlLT5hbWFwW2F0YWJsZS0+bmV4dEZyZWVdID0gLTE7Ci0gICAgYXRhYmxlLT5h
cmV2W2F0YWJsZS0+bmV4dEZyZWVdID0gbFJldmVyc2UoYXRhYmxlLT5uZXh0RnJlZSk7Ci0gICAg
YXRhYmxlLT5uZXh0RnJlZSsrOwotICAgIHJldHVybiBhdGFibGUtPm5leHRGcmVlIC0gMTsKLX0g
Ly8gQWxsb2NhdGVBdG9tCi0KLS8qCi0gKiBTZXRBdG9tVmFsdWUoKSAtIEFsbG9jYXRlIGEgbmV3
IGF0b20gYXNzb2NpYXRlZCB3aXRoICJoYXNoaW5kZXgiLgotICoKLSAqLwotCi1zdGF0aWMgdm9p
ZCBTZXRBdG9tVmFsdWUoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tbnVtYmVyLCBpbnQgaGFz
aGluZGV4KQotewotICAgIGF0YWJsZS0+YW1hcFthdG9tbnVtYmVyXSA9IGF0YWJsZS0+aHRhYmxl
LmVudHJ5W2hhc2hpbmRleF0uaW5kZXg7Ci0gICAgYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGlu
ZGV4XS52YWx1ZSA9IGF0b21udW1iZXI7Ci19IC8vIFNldEF0b21WYWx1ZQotCi0vKgotICogRmlu
ZEhhc2hMb2MoKSAtIEZpbmQgdGhlIGhhc2ggbG9jYXRpb24gZm9yIHRoaXMgc3RyaW5nLiAgUmV0
dXJuIC0xIGl0IGhhc2ggdGFibGUgaXMgZnVsbC4KLSAqCi0gKi8KLQotc3RhdGljIGludCBGaW5k
SGFzaExvYyhBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaGFz
aGxvYywgaGFzaGRlbHRhLCBjb3VudDsKLSAgICBpbnQgRm91bmRFbXB0eVNsb3QgPSAwOwotICAg
IGludCBjb2xsaXNpb25bSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyArIDFdOwotCi0gICAgaGFz
aGxvYyA9IEhhc2hTdHJpbmcocykgJSBhdGFibGUtPmh0YWJsZS5zaXplOwotICAgIGlmICghRW1w
dHkoJmF0YWJsZS0+aHRhYmxlLCBoYXNobG9jKSkgewotICAgICAgICBpZiAoTWF0Y2goJmF0YWJs
ZS0+aHRhYmxlLCAmYXRhYmxlLT5zdGFibGUsIHMsIGhhc2hsb2MpKQotICAgICAgICAgICAgcmV0
dXJuIGhhc2hsb2M7Ci0gICAgICAgIGNvbGxpc2lvblswXSA9IGhhc2hsb2M7Ci0gICAgICAgIGhh
c2hkZWx0YSA9IEhhc2hTdHJpbmcyKHMpOwotICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIHdo
aWxlIChjb3VudCA8IEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMpIHsKLSAgICAgICAgICAgIGhh
c2hsb2MgPSAoKGhhc2hsb2MgKyBoYXNoZGVsdGEpICYgMHg3ZmZmZmZmZikgJSBhdGFibGUtPmh0
YWJsZS5zaXplOwotICAgICAgICAgICAgaWYgKCFFbXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hs
b2MpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE1hdGNoKCZhdGFibGUtPmh0YWJsZSwgJmF0YWJs
ZS0+c3RhYmxlLCBzLCBoYXNobG9jKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFz
aGxvYzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIEZvdW5kRW1wdHlTbG90ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICBjb2xsaXNpb25bY291
bnRdID0gaGFzaGxvYzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghRm91bmRFbXB0eVNsb3Qp
IHsKLSAgICAgICAgICAgIGlmIChjcHAtPm9wdGlvbnMuRHVtcEF0b21UYWJsZSkgewotICAgICAg
ICAgICAgICAgIGludCBpaTsKLSAgICAgICAgICAgICAgICBjaGFyIHN0clsyMDBdOwotICAgICAg
ICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogSGFzaCBmYWlsZWQgd2l0
aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBoYXNoIHRhYmxlIHNpemUu
ICoqKiIsCi0gICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMp
OwotICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwotCi0gICAgICAgICAgICAg
ICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIioqKiBOZXcgc3RyaW5nIFwiJXNcIiwgaGFz
aD0lMDR4LCBkZWx0YT0lMDR4IiwgcywgY29sbGlzaW9uWzBdLCBoYXNoZGVsdGEpOwotICAgICAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwotICAgICAgICAgICAgICAgIGZvciAoaWkg
PSAwOyBpaSA8PSBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIqKiogQ29sbGlkZXMgb24gdHJ5
ICVkIGF0IGhhc2ggZW50cnkgJTA0eCB3aXRoIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBpaSArIDEsIGNvbGxpc2lvbltpaV0sIEdldEF0b21TdHJpbmcoYXRhYmxlLCBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtjb2xsaXNpb25baWldXS52YWx1ZSkpOwotICAgICAgICAgICAgICAg
ICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBhdGFibGUtPmh0YWJsZS5jb3VudHNbY291bnRdKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIGhhc2hsb2M7Ci19IC8vIEZpbmRIYXNoTG9jCi0KLS8qCi0gKiBJbmNyZWFzZUhhc2hU
YWJsZVNpemUoKQotICoKLSAqLwotCi1zdGF0aWMgaW50IEluY3JlYXNlSGFzaFRhYmxlU2l6ZShB
dG9tVGFibGUgKmF0YWJsZSkKLXsKLSAgICBpbnQgaWksIHN0cmxvYywgb2xkaGFzaGxvYywgdmFs
dWUsIHNpemU7Ci0gICAgQXRvbVRhYmxlIG9sZHRhYmxlOwotICAgIGNoYXIgKnM7Ci0KLSAgICAv
LyBTYXZlIHRoZSBvbGQgYXRvbSB0YWJsZSBhbmQgY3JlYXRlIGEgbmV3IG9uZToKLQotICAgIG9s
ZHRhYmxlID0gKmF0YWJsZTsKLSAgICBzaXplID0gb2xkdGFibGUuaHRhYmxlLnNpemUqMiArIDE7
Ci0gICAgaWYgKCFJbml0QXRvbVRhYmxlKGF0YWJsZSwgc2l6ZSkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgLy8gQWRkIGFsbCB0aGUgZXhpc3RpbmcgdmFsdWVzIHRvIHRoZSBuZXcgYXRvbSB0
YWJsZSBwcmVzZXJ2aW5nIHRoZWlyIGF0b20gdmFsdWVzOgotCi0gICAgZm9yIChpaSA9IGF0YWJs
ZS0+bmV4dEZyZWU7IGlpIDwgb2xkdGFibGUubmV4dEZyZWU7IGlpKyspIHsKLSAgICAgICAgc3Ry
bG9jID0gb2xkdGFibGUuYW1hcFtpaV07Ci0gICAgICAgIHMgPSAmb2xkdGFibGUuc3RhYmxlLnN0
cmluZ3Nbc3RybG9jXTsKLSAgICAgICAgb2xkaGFzaGxvYyA9IEZpbmRIYXNoTG9jKCZvbGR0YWJs
ZSwgcyk7Ci0gICAgICAgIGFzc2VydChvbGRoYXNobG9jID49IDApOwotICAgICAgICB2YWx1ZSA9
IG9sZHRhYmxlLmh0YWJsZS5lbnRyeVtvbGRoYXNobG9jXS52YWx1ZTsKLSAgICAgICAgQWRkQXRv
bUZpeGVkKGF0YWJsZSwgcywgdmFsdWUpOwotICAgIH0KLSAgICBGcmVlQXRvbVRhYmxlKCZvbGR0
YWJsZSk7Ci0gICAgcmV0dXJuIDE7Ci19IC8vIEluY3JlYXNlSGFzaFRhYmxlU2l6ZQotCi0vKgot
ICogTG9va1VwQWRkU3RyaW5nSGFzaCgpIC0gTG9va3VwIGEgc3RyaW5nIGluIHRoZSBoYXNoIHRh
YmxlLiAgSWYgaXQncyBub3QgdGhlcmUsIGFkZCBpdCBhbmQKLSAqICAgICAgICBpbml0aWFsaXpl
IHRoZSBhdG9tIHZhbHVlIGluIHRoZSBoYXNoIHRhYmxlIHRvIDAuICBSZXR1cm4gdGhlIGhhc2gg
dGFibGUgaW5kZXguCi0gKi8KLQotc3RhdGljIGludCBMb29rVXBBZGRTdHJpbmdIYXNoKEF0b21U
YWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpzKQotewotICAgIGludCBoYXNobG9jLCBzdHJsb2M7
Ci0KLSAgICB3aGlsZSgxKSB7Ci0gICAgICAgIGhhc2hsb2MgPSBGaW5kSGFzaExvYyhhdGFibGUs
IHMpOwotICAgICAgICBpZiAoaGFzaGxvYyA+PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIEluY3JlYXNlSGFzaFRhYmxlU2l6ZShhdGFibGUpOwotICAgIH0KLQotICAgIGlmIChFbXB0
eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2MpKSB7Ci0gICAgICAgIGF0YWJsZS0+aHRhYmxlLmVu
dHJpZXMrKzsKLSAgICAgICAgc3RybG9jID0gQWRkU3RyaW5nKCZhdGFibGUtPnN0YWJsZSwgcyk7
Ci0gICAgICAgIGF0YWJsZS0+aHRhYmxlLmVudHJ5W2hhc2hsb2NdLmluZGV4ID0gc3RybG9jOwot
ICAgICAgICBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNobG9jXS52YWx1ZSA9IDA7Ci0gICAgfQot
ICAgIHJldHVybiBoYXNobG9jOwotfSAvLyBMb29rVXBBZGRTdHJpbmdIYXNoCi0KLS8qCi0gKiBM
b29rVXBBZGRTdHJpbmcoKSAtIExvb2t1cCBhIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZS4gIElm
IGl0J3Mgbm90IHRoZXJlLCBhZGQgaXQgYW5kCi0gKiAgICAgICAgaW5pdGlhbGl6ZSB0aGUgYXRv
bSB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZSB0byB0aGUgbmV4dCBhdG9tIG51bWJlci4KLSAqICAg
ICAgICBSZXR1cm4gdGhlIGF0b20gdmFsdWUgb2Ygc3RyaW5nLgotICovCi0KLWludCBMb29rVXBB
ZGRTdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGhh
c2hpbmRleCwgYXRvbTsKLQotICAgIGhhc2hpbmRleCA9IExvb2tVcEFkZFN0cmluZ0hhc2goYXRh
YmxlLCBzKTsKLSAgICBhdG9tID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS52YWx1
ZTsKLSAgICBpZiAoYXRvbSA9PSAwKSB7Ci0gICAgICAgIGF0b20gPSBBbGxvY2F0ZUF0b20oYXRh
YmxlKTsKLSAgICAgICAgU2V0QXRvbVZhbHVlKGF0YWJsZSwgYXRvbSwgaGFzaGluZGV4KTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGF0b207Ci19IC8vIExvb2tVcEFkZFN0cmluZwotCi0vKgotICogR2V0
QXRvbVN0cmluZygpCi0gKgotICovCi0KLWNvbnN0ICBjaGFyICpHZXRBdG9tU3RyaW5nKEF0b21U
YWJsZSAqYXRhYmxlLCBpbnQgYXRvbSkKLXsKLSAgICBpbnQgc29mZnNldDsKLQotICAgIGlmIChh
dG9tID4gMCAmJiBhdG9tIDwgYXRhYmxlLT5uZXh0RnJlZSkgewotICAgICAgICBzb2Zmc2V0ID0g
YXRhYmxlLT5hbWFwW2F0b21dOwotICAgICAgICBpZiAoc29mZnNldCA+IDAgJiYgc29mZnNldCA8
IGF0YWJsZS0+c3RhYmxlLm5leHRGcmVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gJmF0YWJsZS0+
c3RhYmxlLnN0cmluZ3Nbc29mZnNldF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gIjxpbnRlcm5hbCBlcnJvcjogYmFkIHNvZmZzZXQ+IjsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChhdG9tID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiAiPG51
bGwgYXRvbT4iOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGF0b20gPT0gRU9G
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICI8RU9GPiI7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHJldHVybiAiPGludmFsaWQgYXRvbT4iOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfSAvLyBHZXRBdG9tU3RyaW5nCi0KLS8qCi0gKiBHZXRSZXZl
cnNlZEF0b20oKQotICoKLSAqLwotCi1pbnQgR2V0UmV2ZXJzZWRBdG9tKEF0b21UYWJsZSAqYXRh
YmxlLCBpbnQgYXRvbSkKLXsKLSAgICBpZiAoYXRvbSA+IDAgJiYgYXRvbSA8IGF0YWJsZS0+bmV4
dEZyZWUpIHsKLSAgICAgICAgcmV0dXJuIGF0YWJsZS0+YXJldlthdG9tXTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19IC8vIEdldFJldmVyc2VkQXRvbQotCi0vKgot
ICogQWRkQXRvbSgpIC0gQWRkIGEgc3RyaW5nIHRvIHRoZSBhdG9tLCBoYXNoIGFuZCBzdHJpbmcg
dGFibGVzIGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUuCi0gKiAgICAgICAgIFJldHVybiBpdCdz
IGF0b20gaW5kZXguCi0gKi8KLQotaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGNvbnN0
IGNoYXIgKnMpCi17Ci0gICAgaW50IGF0b207Ci0KLSAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgcyk7Ci0gICAgcmV0dXJuIGF0b207Ci19IC8vIEFkZEF0b20KLQotLyoKLSAqIEFk
ZEF0b21GaXhlZCgpIC0gQWRkIGFuIGF0b20gdG8gdGhlIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMg
aWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZS4KLSAqICAgICAgICAgQXNzaWduIGl0IHRoZSBhdG9t
IHZhbHVlIG9mICJhdG9tIi4KLSAqLwotCi1zdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFi
bGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcywgaW50IGF0b20pCi17Ci0gICAgaW50IGhhc2hpbmRl
eCwgbHNpemU7Ci0KLSAgICBoYXNoaW5kZXggPSBMb29rVXBBZGRTdHJpbmdIYXNoKGF0YWJsZSwg
cyk7Ci0gICAgaWYgKGF0YWJsZS0+bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXplIHx8IGF0b20gPj0g
YXRhYmxlLT5zaXplKSB7Ci0gICAgICAgIGxzaXplID0gYXRhYmxlLT5zaXplKjI7Ci0gICAgICAg
IGlmIChsc2l6ZSA8PSBhdG9tKQotICAgICAgICAgICAgbHNpemUgPSBhdG9tICsgMTsKLSAgICAg
ICAgR3Jvd0F0b21UYWJsZShhdGFibGUsIGxzaXplKTsKLSAgICB9Ci0gICAgYXRhYmxlLT5hbWFw
W2F0b21dID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKLSAgICBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbTsKLSAgICAvL2lmIChhdG9t
ID49IGF0YWJsZS0+bmV4dEZyZWUpCi0gICAgLy8gICAgYXRhYmxlLT5uZXh0RnJlZSA9IGF0b20g
KyAxOwotICAgIHdoaWxlIChhdG9tID49IGF0YWJsZS0+bmV4dEZyZWUpIHsKLSAgICAgICAgYXRh
YmxlLT5hcmV2W2F0YWJsZS0+bmV4dEZyZWVdID0gbFJldmVyc2UoYXRhYmxlLT5uZXh0RnJlZSk7
Ci0gICAgICAgIGF0YWJsZS0+bmV4dEZyZWUrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGF0b207Ci19
IC8vIEFkZEF0b21GaXhlZAotCi0vKgotICogSW5pdEF0b21UYWJsZSgpIC0gSW5pdGlhbGl6ZSB0
aGUgYXRvbSB0YWJsZS4KLSAqCi0gKi8KLQotaW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICph
dGFibGUsIGludCBodHNpemUpCi17Ci0gICAgdW5zaWduZWQgaW50IGlpOwotCi0gICAgaHRzaXpl
ID0gaHRzaXplIDw9IDAgPyBJTklUX0hBU0hfVEFCTEVfU0laRSA6IGh0c2l6ZTsKLSAgICBpZiAo
IUluaXRTdHJpbmdUYWJsZSgmYXRhYmxlLT5zdGFibGUpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoIUluaXRIYXNoVGFibGUoJmF0YWJsZS0+aHRhYmxlLCBodHNpemUpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGF0YWJsZS0+bmV4dEZyZWUgPSAwOwotICAgIGF0YWJsZS0+YW1hcCA9
IE5VTEw7Ci0gICAgYXRhYmxlLT5zaXplID0gMDsKLSAgICBHcm93QXRvbVRhYmxlKGF0YWJsZSwg
SU5JVF9BVE9NX1RBQkxFX1NJWkUpOwotICAgIGlmICghYXRhYmxlLT5hbWFwKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vIEluaXRpYWxpemUgbG93ZXIgcGFydCBvZiBhdG9tIHRhYmxlIHRv
ICI8dW5kZWZpbmVkPiIgYXRvbToKLQotICAgIEFkZEF0b21GaXhlZChhdGFibGUsICI8dW5kZWZp
bmVkPiIsIDApOwotICAgIGZvciAoaWkgPSAwOyBpaSA8IEZJUlNUX1VTRVJfVE9LRU5fU1k7IGlp
KyspCi0gICAgICAgIGF0YWJsZS0+YW1hcFtpaV0gPSBhdGFibGUtPmFtYXBbMF07Ci0KLSAgICAv
LyBBZGQgc2luZ2xlIGNoYXJhY3RlciB0b2tlbnMgdG8gdGhlIGF0b20gdGFibGU6Ci0KLSAgICB7
Ci0JCWNvbnN0IGNoYXIgKnMgPSAifiElXiYqKCktKz18LC48Pi8/OzpbXXt9IyI7Ci0gICAgICAg
IGNoYXIgdFsyXTsKLQotICAgICAgICB0WzFdID0gJ1wwJzsKLSAgICAgICAgd2hpbGUgKCpzKSB7
Ci0gICAgICAgICAgICB0WzBdID0gKnM7Ci0gICAgICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxl
LCB0LCBzWzBdKTsKLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IEFkZCBtdWx0aXBsZSBjaGFyYWN0ZXIgc2Nhbm5lciB0b2tlbnMgOgotCi0gICAgZm9yIChpaSA9
IDA7IGlpIDwgc2l6ZW9mKHRva2Vucykvc2l6ZW9mKHRva2Vuc1swXSk7IGlpKyspCi0gICAgICAg
IEFkZEF0b21GaXhlZChhdGFibGUsIHRva2Vuc1tpaV0uc3RyLCB0b2tlbnNbaWldLnZhbCk7Ci0K
LSAgICAvLyBBZGQgZXJyb3Igc3ltYm9sIGlmIHJ1bm5pbmcgaW4gZXJyb3IgbW9kZToKLQotICAg
IGlmIChjcHAtPm9wdGlvbnMuRXJyb3JNb2RlKQotICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxl
LCAiZXJyb3IiLCBFUlJPUl9TWSk7Ci0KLSAgICBBZGRBdG9tKGF0YWJsZSwgIjwqKiogZW5kIGZp
eGVkIGF0b21zICoqKj4iKTsKLQotICAgIHJldHVybiAxOwotfSAvLyBJbml0QXRvbVRhYmxlCi0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vIERlYnVnIFByaW50aW5nIEZ1bmN0aW9uczogLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotLyoKLSAqIFByaW50QXRvbVRhYmxlKCkKLSAqCi0gKi8KLQotdm9pZCBQcmludEF0
b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSkKLXsKLSAgICBpbnQgaWk7Ci0gICAgY2hhciBzdHJb
MjAwXTsKLQotICAgIGZvciAoaWkgPSAwOyBpaSA8IGF0YWJsZS0+bmV4dEZyZWU7IGlpKyspIHsK
LSAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVkOiBcIiVzXCIiLCBpaSwgJmF0
YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2lpXV0pOwotICAgICAgICBDUFBEZWJ1
Z0xvZ01zZyhzdHIpOwotICAgIH0KLSAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiSGFz
aCB0YWJsZTogc2l6ZT0lZCwgZW50cmllcz0lZCwgY29sbGlzaW9ucz0iLAotICAgICAgICAgICBh
dGFibGUtPmh0YWJsZS5zaXplLCBhdGFibGUtPmh0YWJsZS5lbnRyaWVzKTsKLSAgICBDUFBEZWJ1
Z0xvZ01zZyhzdHIpOwotICAgIGZvciAoaWkgPSAwOyBpaSA8IEhBU0hfVEFCTEVfTUFYX0NPTExJ
U0lPTlM7IGlpKyspIHsKLSAgICAgICAgc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiAlZCIs
IGF0YWJsZS0+aHRhYmxlLmNvdW50c1tpaV0pOwotICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIp
OwotICAgIH0KLQotfSAvLyBQcmludEF0b21UYWJsZQotCi0KLS8qCi0gKiBHZXRTdHJpbmdPZkF0
b20oKQotICoKLSAqLwotCi1jaGFyKiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUs
IGludCBhdG9tKQotewotCSBjaGFyKiBjaHJfc3RyOwotCSBjaHJfc3RyPSZhdGFibGUtPnN0YWJs
ZS5zdHJpbmdzW2F0YWJsZS0+YW1hcFthdG9tXV07Ci0JIHJldHVybiBjaHJfc3RyOwotfSAvLyBH
ZXRTdHJpbmdPZkF0b20KLQotLyoKLSAqIEZyZWVBdG9tVGFibGUoKSAtIEZyZWUgdGhlIGF0b20g
dGFibGUgYW5kIGFzc29jaWF0ZWQgbWVtb3J5Ci0gKgotICovCi0KLXZvaWQgRnJlZUF0b21UYWJs
ZShBdG9tVGFibGUgKmF0YWJsZSkKLXsKLSAgICBGcmVlU3RyaW5nVGFibGUoJmF0YWJsZS0+c3Rh
YmxlKTsKLSAgICBGcmVlSGFzaFRhYmxlKCZhdGFibGUtPmh0YWJsZSk7Ci0gICAgaWYgKGF0YWJs
ZS0+YW1hcCkKLSAgICAgICAgZnJlZShhdGFibGUtPmFtYXApOwotICAgIGlmIChhdGFibGUtPmFy
ZXYpCi0gICAgICAgIGZyZWUoYXRhYmxlLT5hcmV2KTsKLSAgICBhdGFibGUtPmFtYXAgPSBOVUxM
OwotICAgIGF0YWJsZS0+YXJldiA9IE5VTEw7Ci0gICAgYXRhYmxlLT5uZXh0RnJlZSA9IDA7Ci0g
ICAgYXRhYmxlLT5zaXplID0gMDsKLX0gLy8gRnJlZUF0b21UYWJsZQotCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8gRW5kIG9mIGF0b20uYyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
YXRvbS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkODRjMzIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9h
dG9tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29y
cG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25z
aWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5
b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9m
IHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRl
cm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5v
dCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3
YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdy
YW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElB
J3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJ
RElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0
ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGlu
IHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0
cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdo
dCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBh
bmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEg
U29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5v
ciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQg
YXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxp
Y2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4s
IGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5
IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtz
IGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhh
cmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMg
QkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5D
TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJ
VExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUg
T1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNI
QUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5U
QUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJF
UFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklE
SUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBD
T05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBP
UiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGF0
b20uaAotLy8KLQotI2lmICFkZWZpbmVkKF9fQVRPTV9IKQotI2RlZmluZSBfX0FUT01fSCAxCi0K
LXR5cGVkZWYgc3RydWN0IEF0b21UYWJsZV9SZWMgQXRvbVRhYmxlOwotCi1leHRlcm4gQXRvbVRh
YmxlICphdGFibGU7Ci0KLWludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQg
aHRzaXplKTsKLXZvaWQgRnJlZUF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSk7Ci1pbnQgQWRk
QXRvbShBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcyk7Ci12b2lkIFByaW50QXRvbVRh
YmxlKEF0b21UYWJsZSAqYXRhYmxlKTsKLWludCBMb29rVXBBZGRTdHJpbmcoQXRvbVRhYmxlICph
dGFibGUsIGNvbnN0IGNoYXIgKnMpOwotY29uc3QgY2hhciAqR2V0QXRvbVN0cmluZyhBdG9tVGFi
bGUgKmF0YWJsZSwgaW50IGF0b20pOwotaW50IEdldFJldmVyc2VkQXRvbShBdG9tVGFibGUgKmF0
YWJsZSwgaW50IGF0b20pOwotY2hhciogR2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxl
LCBpbnQgYXRvbSk7Ci0jZW5kaWYgLy8gIWRlZmluZWQoX19BVE9NX0gpCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29t
cGlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTgwODUzLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29t
cGlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBD
b3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNv
bnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5k
IHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24g
b2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2Ug
dGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8g
bm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29m
dHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkg
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEg
Z3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklE
SUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJO
VklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmli
dXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywg
aW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRp
c3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJp
Z2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0
IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJ
QSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mg
bm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2Vw
dCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3Ig
bGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVp
biwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBt
YXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29y
a3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8g
aGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJ
UyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1J
TkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
VElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9O
RSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQg
U0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURF
TlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwg
UkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5W
SURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9G
IENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZ
IE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8g
Y29tcGlsZS5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19DT01QSUxFX0gpCi0jZGVmaW5lIF9fQ09N
UElMRV9IIDEKLQotaW50IEluaXRDUFBTdHJ1Y3Qodm9pZCk7Ci0KLXR5cGVkZWYgc3RydWN0IE9w
dGlvbnNfUmVjewotICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVTdHJpbmc7Ci0gICAgaW50IEVycm9y
TW9kZTsKLSAgICBpbnQgUXVpZXQ7Ci0JCi0gICAgLy8gRGVidWcgVGhlIENvbXBpbGVyIG9wdGlv
bnM6Ci0gICAgaW50IER1bXBBdG9tVGFibGU7Ci19IE9wdGlvbnM7Ci0KLSNkZWZpbmUgTUFYX0lG
X05FU1RJTkcgIDY0Ci1zdHJ1Y3QgQ1BQU3RydWN0X1JlYyB7Ci0gICAgLy8gUHVibGljIG1lbWJl
cnMKLSAgICBTb3VyY2VMb2MgKnBMYXN0U291cmNlTG9jOyAgLy8gU2V0IGF0IHRoZSBzdGFydCBv
ZiBlYWNoIHN0YXRlbWVudCBieSB0aGUgdHJlZSB3YWxrZXJzCi0gICAgT3B0aW9ucyBvcHRpb25z
OyAgICAgICAgICAgIC8vIENvbXBpbGUgb3B0aW9ucyBhbmQgcGFyYW1ldGVycwotCi0gICAgLy8g
UHJpdmF0ZSBtZW1iZXJzCi0gICAgU291cmNlTG9jIGxhc3RTb3VyY2VMb2M7Ci0KLSAgICAvLyBT
Y2FubmVyIGRhdGE6Ci0KLSAgICBTb3VyY2VMb2MgKnRva2VuTG9jOyAgICAgICAgLy8gU291cmNl
IGxvY2F0aW9uIG9mIG1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIKLSAgICBp
bnQgbW9zdFJlY2VudFRva2VuOyAgICAgICAgLy8gTW9zdCByZWNlbnQgdG9rZW4gc2VlbiBieSB0
aGUgc2Nhbm5lcgotICAgIElucHV0U3JjICpjdXJyZW50SW5wdXQ7Ci0gICAgaW50IHByZXZpb3Vz
X3Rva2VuOwotICAgIGludCBwYXN0Rmlyc3RTdGF0ZW1lbnQ7ICAgICAvLyB1c2VkIHRvIG1ha2Ug
c3VyZSB0aGF0ICN2ZXJzaW9uIGlzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgc2VlbiBpbiB0aGUgZmls
ZSwgaWYgcHJlc2VudAotICAgIAotCXZvaWQgKnBDOyAgICAgICAgICAgICAgICAgICAvLyBzdG9y
aW5nIHRoZSBwYXJzZUNvbnRleHQgb2YgdGhlIGNvbXBpbGUgb2JqZWN0IGluIGNwcC4gIAotICAg
ICAKLSAgICAvLyBQcml2YXRlIG1lbWJlcnM6Ci0gICAgU291cmNlTG9jIGx0b2tlbkxvYzsKLQlp
bnQgaWZkZXB0aDsgICAgICAgICAgICAgICAgLy9jdXJyZW50ICNpZi0jZWxzZS0jZW5kaWYgbmVz
dGluZyBpbiB0aGUgY3BwLmMgZmlsZSAocHJlLXByb2Nlc3NvcikgICAgCi0gICAgaW50IGVsc2Vk
ZXB0aFtNQVhfSUZfTkVTVElOR107Ly9LZWVwIGEgdHJhY2sgb2YgI2lmIGRlcHRoLi5NYXggYWxs
b3dlZCBpcyA2NC4KLSAgICBpbnQgZWxzZXRyYWNrZXI7ICAgICAgICAgICAgLy8jaWYtI2Vsc2Ug
YW5kICNlbmRpZiBjb25zdHJ1Y3RzLi4uQ291bnRlci4KLSAgICBjb25zdCBjaGFyICpFcnJNc2c7
Ci0gICAgaW50IENvbXBpbGVFcnJvcjsgICAgICAgICAgIC8vSW5kaWNhdGUgY29tcGlsZSBlcnJv
ciB3aGVuICNlcnJvciwgI2Vsc2UsI2VsaWYgbWlzbWF0Y2guCi0KLSAgICAvLwotICAgIC8vIEds
b2JhbHMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIFBhUGFyc2VTdHJpbmdzKCkgYW5kIHl5
X2lucHV0KClhbmQgCi0gICAgLy8gYWxzbyBhY3Jvc3MgdGhlIGZpbGVzLihnZW5fZ2xzbGFuZy5j
cHAgYW5kIHNjYW5uZXIuYykKLSAgICAvLwotICAgIGludCBQYVdoaWNoU3RyOyAgICAgICAgICAg
ICAvLyB3aGljaCBzdHJpbmcgd2UncmUgcGFyc2luZwotICAgIGNvbnN0IGludCogUGFTdHJMZW47
ICAgICAgICAvLyBhcnJheSBvZiBsZW5ndGhzIG9mIHRoZSBQYUFyZ3Ygc3RyaW5ncwotICAgIGlu
dCBQYUFyZ2M7ICAgICAgICAgICAgICAgICAvLyBjb3VudCBvZiBzdHJpbmdzIGluIHRoZSBhcnJh
eQotICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBQYUFyZ3Y7ICAvLyBvdXIgYXJyYXkgb2Ygc3RyaW5n
cyB0byBwYXJzZSAgICAKLSAgICB1bnNpZ25lZCBpbnQgdG9rZW5zQmVmb3JlRU9GIDogMTsKLX07
Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChfX0NPTVBJTEVfSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTEwNzZiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChj
KSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElB
Iikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFs
bGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29m
dHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8g
bm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwg
bW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNp
ZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNv
bmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGlu
IHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwg
dG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNv
ZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBi
aW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJ
QSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklE
SUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBp
biBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRo
ZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJ
QQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3Rh
dGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mg
b3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBu
b3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5
IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5W
SURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5z
ZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBP
TiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBM
SU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklO
R0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElP
TiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJ
QUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9T
VCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
T1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJ
RklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9X
RVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZF
TiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gY3BwLmMKLS8vCi0KLSNpbmNs
dWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNpbmNsdWRlICJjb21t
b24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2Jh
bHMuaCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDA1NCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTUyKQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ3MDYpCi0jZW5kaWYKLQotc3RhdGljIGludCBDUFBpZih5eXN0eXBlcHAgKiB5eWx2
YWxwcCk7Ci0KLS8qIERvbid0IHVzZSBtZW1vcnkuYydzIHJlcGxhY2VtZW50cywgYXMgd2UgY2xl
YW4gdXAgcHJvcGVybHkgaGVyZSAqLwotI3VuZGVmIG1hbGxvYwotI3VuZGVmIGZyZWUKLQotc3Rh
dGljIGludCBiaW5kQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGNvbnN0QXRvbSA9IDA7Ci1zdGF0aWMg
aW50IGRlZmF1bHRBdG9tID0gMDsKLXN0YXRpYyBpbnQgZGVmaW5lQXRvbSA9IDA7Ci1zdGF0aWMg
aW50IGRlZmluZWRBdG9tID0gMDsKLXN0YXRpYyBpbnQgZWxzZUF0b20gPSAwOwotc3RhdGljIGlu
dCBlbGlmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVuZGlmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGlm
QXRvbSA9IDA7Ci1zdGF0aWMgaW50IGlmZGVmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGlmbmRlZkF0
b20gPSAwOwotc3RhdGljIGludCBpbmNsdWRlQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGxpbmVBdG9t
ID0gMDsKLXN0YXRpYyBpbnQgcHJhZ21hQXRvbSA9IDA7Ci1zdGF0aWMgaW50IHRleHVuaXRBdG9t
ID0gMDsKLXN0YXRpYyBpbnQgdW5kZWZBdG9tID0gMDsKLXN0YXRpYyBpbnQgZXJyb3JBdG9tID0g
MDsKLXN0YXRpYyBpbnQgX19MSU5FX19BdG9tID0gMDsKLXN0YXRpYyBpbnQgX19GSUxFX19BdG9t
ID0gMDsKLXN0YXRpYyBpbnQgX19WRVJTSU9OX19BdG9tID0gMDsKLXN0YXRpYyBpbnQgdmVyc2lv
bkF0b20gPSAwOwotc3RhdGljIGludCBleHRlbnNpb25BdG9tID0gMDsKLQotc3RhdGljIFNjb3Bl
ICptYWNyb3MgPSAwOwotI2RlZmluZSBNQVhfTUFDUk9fQVJHUyAgNjQKLQotc3RhdGljIFNvdXJj
ZUxvYyBpZmxvYzsgLyogb3V0ZXJtb3N0ICNpZiAqLwotCi1pbnQgSW5pdENQUCh2b2lkKQotewot
ICAgIGNoYXIgICAgICAgIGJ1ZmZlcls2NF0sICp0OwotICAgIGNvbnN0IGNoYXIgICpmOwotCi0g
ICAgLy8gQWRkIHZhcmlvdXMgYXRvbXMgbmVlZGVkIGJ5IHRoZSBDUFAgbGluZSBzY2FubmVyOgot
ICAgIGJpbmRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImJpbmQiKTsKLSAgICBjb25z
dEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiY29uc3QiKTsKLSAgICBkZWZhdWx0QXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZhdWx0Iik7Ci0gICAgZGVmaW5lQXRvbSA9
IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZpbmUiKTsKLSAgICBkZWZpbmVkQXRvbSA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsICJkZWZpbmVkIik7Ci0gICAgZWxpZkF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiZWxpZiIpOwotICAgIGVsc2VBdG9tID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgImVsc2UiKTsKLSAgICBlbmRpZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxl
LCAiZW5kaWYiKTsKLSAgICBpZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaWYiKTsK
LSAgICBpZmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaWZkZWYiKTsKLSAgICBp
Zm5kZWZBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImlmbmRlZiIpOwotICAgIGluY2x1
ZGVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImluY2x1ZGUiKTsKLSAgICBsaW5lQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJsaW5lIik7Ci0gICAgcHJhZ21hQXRvbSA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsICJwcmFnbWEiKTsKLSAgICB0ZXh1bml0QXRvbSA9IExvb2tV
cEFkZFN0cmluZyhhdGFibGUsICJ0ZXh1bml0Iik7Ci0gICAgdW5kZWZBdG9tID0gTG9va1VwQWRk
U3RyaW5nKGF0YWJsZSwgInVuZGVmIik7Ci0JZXJyb3JBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0
YWJsZSwgImVycm9yIik7Ci0gICAgX19MSU5FX19BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgIl9fTElORV9fIik7Ci0gICAgX19GSUxFX19BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgIl9fRklMRV9fIik7Ci0JX19WRVJTSU9OX19BdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgIl9fVkVSU0lPTl9fIik7Ci0gICAgdmVyc2lvbkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRh
YmxlLCAidmVyc2lvbiIpOwotICAgIGV4dGVuc2lvbkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRh
YmxlLCAiZXh0ZW5zaW9uIik7Ci0gICAgbWFjcm9zID0gTmV3U2NvcGVJblBvb2wobWVtX0NyZWF0
ZVBvb2woMCwgMCkpOwotICAgIHN0cmNweShidWZmZXIsICJQUk9GSUxFXyIpOwotICAgIHQgPSBi
dWZmZXIgKyBzdHJsZW4oYnVmZmVyKTsKLSAgICBmID0gY3BwLT5vcHRpb25zLnByb2ZpbGVTdHJp
bmc7Ci0gICAgd2hpbGUgKChpc2FsbnVtKCpmKSB8fCAqZiA9PSAnXycpICYmIHQgPCBidWZmZXIg
KyBzaXplb2YoYnVmZmVyKSAtIDEpCi0gICAgICAgICp0KysgPSB0b3VwcGVyKCpmKyspOwotICAg
ICp0ID0gMDsKLQotICAgIFByZWRlZmluZUludE1hY3JvKCJHTF9FUyIsIDEpOwotICAgIFByZWRl
ZmluZUludE1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwotCi0JcmV0dXJu
IDE7Ci19IC8vIEluaXRDUFAKLQotaW50IEZyZWVDUFAodm9pZCkKLXsKLSAgICBpZiAobWFjcm9z
KQotICAgIHsKLSAgICAgICAgbWVtX0ZyZWVQb29sKG1hY3Jvcy0+cG9vbCk7Ci0gICAgICAgIG1h
Y3JvcyA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLWludCBGaW5hbENQUCh2b2lk
KQotewotCWlmIChjcHAtPmlmZGVwdGgpCi0JCUNQUEVycm9yVG9JbmZvTG9nKCIjaWYgbWlzbWF0
Y2giKTsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBDUFBkZWZpbmUoeXlzdHlwZXBw
ICogeXlsdmFscHApCi17Ci0gICAgaW50IHRva2VuLCBuYW1lLCBhcmdzW01BWF9NQUNST19BUkdT
XSwgYXJnYzsKLSAgICBjb25zdCBjaGFyICptZXNzYWdlOwotICAgIE1hY3JvU3ltYm9sIG1hYzsK
LSAgICBTeW1ib2wgKnN5bWI7Ci0gICAgU291cmNlTG9jIGR1bW15TG9jOwotICAgIG1lbXNldCgm
bWFjLCAwLCBzaXplb2YobWFjKSk7Ci0gICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSBDUFBfSURF
TlRJRklFUikgewotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIpOwotICAgICAg
ICByZXR1cm4gdG9rZW47Ci0gICAgfQotICAgIG5hbWUgPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Ci0g
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgIGlmICh0b2tlbiA9PSAnKCcgJiYgIXl5bHZhbHBwLT5zY19pbnQpIHsKLSAg
ICAgICAgLy8gZ2F0aGVyIGFyZ3VtZW50cwotICAgICAgICBhcmdjID0gMDsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGFyZ2MgPT0gMCAmJiB0b2tlbiA9
PSAnKScpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKSB7
Ci0JCQkJQ1BQRXJyb3JUb0luZm9Mb2coIiNkZWZpbmUiKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdG9rZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXJnYyA8IE1BWF9NQUNS
T19BUkdTKQotICAgICAgICAgICAgICAgIGFyZ3NbYXJnYysrXSA9IHl5bHZhbHBwLT5zY19pZGVu
dDsKLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfSB3aGlsZSAodG9rZW4gPT0gJywnKTsKLSAg
ICAgICAgaWYgKHRva2VuICE9ICcpJykgewotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IiNkZWZpbmUiKTsKLSAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgfQotICAgICAg
ICBtYWMuYXJnYyA9IGFyZ2M7Ci0gICAgICAgIG1hYy5hcmdzID0gbWVtX0FsbG9jKG1hY3Jvcy0+
cG9vbCwgYXJnYyAqIHNpemVvZihpbnQpKTsKLSAgICAgICAgbWVtY3B5KG1hYy5hcmdzLCBhcmdz
LCBhcmdjICogc2l6ZW9mKGludCkpOwotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JfQotICAgIG1hYy5ib2R5ID0g
TmV3VG9rZW5TdHJlYW0oR2V0QXRvbVN0cmluZyhhdGFibGUsIG5hbWUpLCBtYWNyb3MtPnBvb2wp
OwotICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgIGlmICh0b2tlbiA9PSAnXFwn
KSB7Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiVGhlIGxpbmUgY29udGludWF0aW9u
IGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9mIHRoZSBPcGVuR0wgRVMgU2hhZGluZyBMYW5n
dWFnZSIpOwotICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICB9IGVsc2UgaWYgKHRv
a2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xv
ZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gI2RlZmluZSBwcmVwcm9jZXNzb3IgZGlyZWN0
aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfQotICAgICAgICBSZWNvcmRUb2tlbihtYWMuYm9keSwgdG9rZW4sIHl5bHZhbHBwKTsKLSAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgIH07Ci0KLSAgICBzeW1iID0gTG9va1VwU3ltYm9sKG1hY3JvcywgbmFt
ZSk7Ci0gICAgaWYgKHN5bWIpIHsKLSAgICAgICAgaWYgKCFzeW1iLT5kZXRhaWxzLm1hYy51bmRl
ZikgewotICAgICAgICAgICAgLy8gYWxyZWFkeSBkZWZpbmVkIC0tIG5lZWQgdG8gbWFrZSBzdXJl
IHRoZXkgYXJlIGlkZW50aWNhbAotICAgICAgICAgICAgaWYgKHN5bWItPmRldGFpbHMubWFjLmFy
Z2MgIT0gbWFjLmFyZ2MpIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBmb3IgKGFyZ2M9MDsgYXJn
YyA8IG1hYy5hcmdjOyBhcmdjKyspCi0gICAgICAgICAgICAgICAgaWYgKHN5bWItPmRldGFpbHMu
bWFjLmFyZ3NbYXJnY10gIT0gbWFjLmFyZ3NbYXJnY10pCi0gICAgICAgICAgICAgICAgICAgIGdv
dG8gZXJyb3I7Ci0gICAgICAgICAgICBSZXdpbmRUb2tlblN0cmVhbShzeW1iLT5kZXRhaWxzLm1h
Yy5ib2R5KTsKLSAgICAgICAgICAgIFJld2luZFRva2VuU3RyZWFtKG1hYy5ib2R5KTsKLSAgICAg
ICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpbnQgb2xkX2x2YWwsIG9sZF90b2tlbjsKLSAg
ICAgICAgICAgICAgICBvbGRfdG9rZW4gPSBSZWFkVG9rZW4oc3ltYi0+ZGV0YWlscy5tYWMuYm9k
eSwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIG9sZF9sdmFsID0geXlsdmFscHAtPnNjX2lu
dDsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IFJlYWRUb2tlbihtYWMuYm9keSwgeXlsdmFscHAp
OwotICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSBvbGRfdG9rZW4gfHwgeXlsdmFscHAtPnNj
X2ludCAhPSBvbGRfbHZhbCkgeyAKLSAgICAgICAgICAgICAgICBlcnJvcjoKLSAgICAgICAgICAg
ICAgICAgICAgU3RvcmVTdHIoIk1hY3JvIFJlZGVmaW5lZCIpOwotICAgICAgICAgICAgICAgICAg
ICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLG5hbWUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgICAgICAgICBEZWNM
aW5lTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdl
KTsKLSAgICAgICAgICAgICAgICAgICAgSW5jTGluZU51bWJlcigpOwotICAgICAgICAgICAgICAg
ICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7IH0KLSAgICAg
ICAgICAgIH0gd2hpbGUgKHRva2VuID4gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy9GcmVlTWFj
cm8oJnN5bWItPmRldGFpbHMubWFjKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkdW1teUxvYy5m
aWxlID0gMDsKLSAgICAgICAgZHVtbXlMb2MubGluZSA9IDA7Ci0gICAgICAgIHN5bWIgPSBBZGRT
eW1ib2woJmR1bW15TG9jLCBtYWNyb3MsIG5hbWUsIE1BQ1JPX1MpOwotICAgIH0KLSAgICBzeW1i
LT5kZXRhaWxzLm1hYyA9IG1hYzsKLSAgICByZXR1cm4gJ1xuJzsKLX0gLy8gQ1BQZGVmaW5lCi0K
LXN0YXRpYyBpbnQgQ1BQdW5kZWYoeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50IHRv
a2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICBTeW1ib2wgKnN5bWI7Ci0JaWYodG9rZW4gPT0gJ1xuJyl7Ci0JCUNQUEVycm9yVG9J
bmZvTG9nKCIjdW5kZWYiKTsKLQkgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLSAgICBpZiAodG9r
ZW4gIT0gQ1BQX0lERU5USUZJRVIpCi0gICAgICAgICAgZ290byBlcnJvcjsKLSAgICBzeW1iID0g
TG9va1VwU3ltYm9sKG1hY3JvcywgeXlsdmFscHAtPnNjX2lkZW50KTsKLSAgICBpZiAoc3ltYikg
ewotICAgICAgICBzeW1iLT5kZXRhaWxzLm1hYy51bmRlZiA9IDE7Ci0gICAgfQotICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICBpZiAodG9rZW4gIT0gJ1xuJykgewotICAgIGVycm9yOgotICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiI3VuZGVmIik7Ci0gICAgfQotICAgIHJldHVybiB0b2tlbjsKLX0gLy8gQ1BQdW5k
ZWYKLQotLyogQ1BQZWxzZSAtLSBza2lwIGZvcndhcmQgdG8gYXBwcm9wcmlhdGUgc3BvdC4gIFRo
aXMgaXMgYWN0dWFsbHkgdXNlZAotKiogdG8gc2tpcCB0byBhbmQgI2VuZGlmIGFmdGVyIHNlZWlu
ZyBhbiAjZWxzZSwgQU5EIHRvIHNraXAgdG8gYSAjZWxzZSwKLSoqICNlbGlmLCBvciAjZW5kaWYg
YWZ0ZXIgYSAjaWYvI2lmZGVmLyNpZm5kZWYvI2VsaWYgdGVzdCB3YXMgZmFsc2UKLSovCi0KLXN0
YXRpYyBpbnQgQ1BQZWxzZShpbnQgbWF0Y2hlbHNlLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsK
LSAgICBpbnQgYXRvbSxkZXB0aD0wOwotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0
LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JCi0Jd2hpbGUgKHRva2VuID4g
MCkgewotICAgICAgICBpZiAodG9rZW4gIT0gJyMnKSB7Ci0gICAgICAgICAgICB3aGlsZSAodG9r
ZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAo
dG9rZW4gPD0gMCkgeyAvLyBFT0Ygb3IgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgQ1BQRXJy
b3JUb0luZm9Mb2coInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluICNlbHNlIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQkJaWYgKCh0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCkpICE9IENQ
UF9JREVOVElGSUVSKQotCQkJY29udGludWU7Ci0gICAgICAgIGF0b20gPSB5eWx2YWxwcC0+c2Nf
aWRlbnQ7Ci0gICAgICAgIGlmIChhdG9tID09IGlmQXRvbSB8fCBhdG9tID09IGlmZGVmQXRvbSB8
fCBhdG9tID09IGlmbmRlZkF0b20pewotICAgICAgICAgICAgZGVwdGgrKzsgY3BwLT5pZmRlcHRo
Kys7IGNwcC0+ZWxzZXRyYWNrZXIrKzsKLSAgICAgICAgICAgIGlmIChjcHAtPmlmZGVwdGggPiBN
QVhfSUZfTkVTVElORykgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtYXgg
I2lmIG5lc3RpbmcgZGVwdGggZXhjZWVkZWQiKTsKLSAgICAgICAgICAgICAgICBjcHAtPkNvbXBp
bGVFcnJvciA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBzYW5pdHkgY2hlY2sgZWxzZXRyYWNrZXIKLSAgICAgICAgICAgIGlmIChj
cHAtPmVsc2V0cmFja2VyIDwgMCB8fCBjcHAtPmVsc2V0cmFja2VyID49IE1BWF9JRl9ORVNUSU5H
KSB7Ci0gICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIm1pc21hdGNoZWQgI2lmLyNl
bmRpZiBzdGF0ZW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAx
OwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPSAwOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKGF0b20gPT0gZW5kaWZBdG9tKSB7Ci0gICAgICAgICAgICBpZigtLWRlcHRoPDAp
ewotICAgICAgICAgICAgICAgIGlmIChjcHAtPmVsc2V0cmFja2VyKQotICAgICAgICAgICAgICAg
ICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7Ci0gICAgICAgICAgICAgICAgaWYgKGNwcC0+aWZkZXB0
aCkgCi0gICAgICAgICAgICAgICAgICAgIC0tY3BwLT5pZmRlcHRoOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfSAgICAgICAgICAgICAKLSAgICAgICAgICAgIC0tY3BwLT5l
bHNldHJhY2tlcjsKLSAgICAgICAgICAgIC0tY3BwLT5pZmRlcHRoOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKCgoaW50KShtYXRjaGVsc2UpICE9IDApJiYgZGVwdGg9PTApIHsKLQkJCWlm
IChhdG9tID09IGVsc2VBdG9tICkgewotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
ICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICBDUFBXYXJuaW5n
VG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQg
ZW5kIG9mIGlucHV0IGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhw
ZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IAotCQkJCWJyZWFrOwotCQkJfSAKLQkJCWVsc2UgaWYgKGF0b20gPT0gZWxp
ZkF0b20pIHsKLSAgICAgICAgICAgICAgICAvKiB3ZSBkZWNyZW1lbnQgY3BwLT5pZmRlcHRoIGhl
cmUsIGJlY2F1c2UgQ1BQaWYgd2lsbCBpbmNyZW1lbnQKLSAgICAgICAgICAgICAgICAgKiBpdCBh
bmQgd2UgcmVhbGx5IHdhbnQgdG8gbGVhdmUgaXQgYWxvbmUgKi8KLQkJCQlpZiAoY3BwLT5pZmRl
cHRoKXsKLQkJCQkJLS1jcHAtPmlmZGVwdGg7Ci0JCQkJICAgIC0tY3BwLT5lbHNldHJhY2tlcjsK
LQkJCQl9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUGlmKHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgIH0KLQkJfQotICAgICAgICBlbHNlIGlmKChhdG9tPT1lbHNlQXRvbSkgJiYgKCFDaGtDb3Jy
ZWN0RWxzZU5lc3RpbmcoKSkpewotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNl
IGFmdGVyIGEgI2Vsc2UiKTsKLSAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCX07Ci0gICAgcmV0dXJuIHRva2VuOwotfQot
Ci1lbnVtIGV2YWxfcHJlYyB7Ci0gICAgTUlOX1BSRUMsCi0gICAgQ09ORCwgTE9HT1IsIExPR0FO
RCwgT1IsIFhPUiwgQU5ELCBFUVVBTCwgUkVMQVRJT04sIFNISUZULCBBREQsIE1VTCwgVU5BUlks
Ci0gICAgTUFYX1BSRUMKLX07Ci0KLXN0YXRpYyBpbnQgb3BfbG9nb3IoaW50IGEsIGludCBiKSB7
IHJldHVybiBhIHx8IGI7IH0KLXN0YXRpYyBpbnQgb3BfbG9nYW5kKGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSAmJiBiOyB9Ci1zdGF0aWMgaW50IG9wX29yKGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSB8IGI7IH0KLXN0YXRpYyBpbnQgb3BfeG9yKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSBeIGI7
IH0KLXN0YXRpYyBpbnQgb3BfYW5kKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAmIGI7IH0KLXN0
YXRpYyBpbnQgb3BfZXEoaW50IGEsIGludCBiKSB7IHJldHVybiBhID09IGI7IH0KLXN0YXRpYyBp
bnQgb3BfbmUoaW50IGEsIGludCBiKSB7IHJldHVybiBhICE9IGI7IH0KLXN0YXRpYyBpbnQgb3Bf
Z2UoaW50IGEsIGludCBiKSB7IHJldHVybiBhID49IGI7IH0KLXN0YXRpYyBpbnQgb3BfbGUoaW50
IGEsIGludCBiKSB7IHJldHVybiBhIDw9IGI7IH0KLXN0YXRpYyBpbnQgb3BfZ3QoaW50IGEsIGlu
dCBiKSB7IHJldHVybiBhID4gYjsgfQotc3RhdGljIGludCBvcF9sdChpbnQgYSwgaW50IGIpIHsg
cmV0dXJuIGEgPCBiOyB9Ci1zdGF0aWMgaW50IG9wX3NobChpbnQgYSwgaW50IGIpIHsgcmV0dXJu
IGEgPDwgYjsgfQotc3RhdGljIGludCBvcF9zaHIoaW50IGEsIGludCBiKSB7IHJldHVybiBhID4+
IGI7IH0KLXN0YXRpYyBpbnQgb3BfYWRkKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSArIGI7IH0K
LXN0YXRpYyBpbnQgb3Bfc3ViKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAtIGI7IH0KLXN0YXRp
YyBpbnQgb3BfbXVsKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAqIGI7IH0KLXN0YXRpYyBpbnQg
b3BfZGl2KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAvIGI7IH0KLXN0YXRpYyBpbnQgb3BfbW9k
KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAlIGI7IH0KLXN0YXRpYyBpbnQgb3BfcG9zKGludCBh
KSB7IHJldHVybiBhOyB9Ci1zdGF0aWMgaW50IG9wX25lZyhpbnQgYSkgeyByZXR1cm4gLWE7IH0K
LXN0YXRpYyBpbnQgb3BfY21wbChpbnQgYSkgeyByZXR1cm4gfmE7IH0KLXN0YXRpYyBpbnQgb3Bf
bm90KGludCBhKSB7IHJldHVybiAhYTsgfQotCi1zdHJ1Y3QgewotICAgIGludCB0b2tlbiwgcHJl
YywgKCpvcCkoaW50LCBpbnQpOwotfSBiaW5vcFtdID0gewotICAgIHsgQ1BQX09SX09QLCBMT0dP
Uiwgb3BfbG9nb3IgfSwKLSAgICB7IENQUF9BTkRfT1AsIExPR0FORCwgb3BfbG9nYW5kIH0sCi0g
ICAgeyAnfCcsIE9SLCBvcF9vciB9LAotICAgIHsgJ14nLCBYT1IsIG9wX3hvciB9LAotICAgIHsg
JyYnLCBBTkQsIG9wX2FuZCB9LAotICAgIHsgQ1BQX0VRX09QLCBFUVVBTCwgb3BfZXEgfSwKLSAg
ICB7IENQUF9ORV9PUCwgRVFVQUwsIG9wX25lIH0sCi0gICAgeyAnPicsIFJFTEFUSU9OLCBvcF9n
dCB9LAotICAgIHsgQ1BQX0dFX09QLCBSRUxBVElPTiwgb3BfZ2UgfSwKLSAgICB7ICc8JywgUkVM
QVRJT04sIG9wX2x0IH0sCi0gICAgeyBDUFBfTEVfT1AsIFJFTEFUSU9OLCBvcF9sZSB9LAotICAg
IHsgQ1BQX0xFRlRfT1AsIFNISUZULCBvcF9zaGwgfSwKLSAgICB7IENQUF9SSUdIVF9PUCwgU0hJ
RlQsIG9wX3NociB9LAotICAgIHsgJysnLCBBREQsIG9wX2FkZCB9LAotICAgIHsgJy0nLCBBREQs
IG9wX3N1YiB9LAotICAgIHsgJyonLCBNVUwsIG9wX211bCB9LAotICAgIHsgJy8nLCBNVUwsIG9w
X2RpdiB9LAotICAgIHsgJyUnLCBNVUwsIG9wX21vZCB9LAotfTsKLQotc3RydWN0IHsKLSAgICBp
bnQgdG9rZW4sICgqb3ApKGludCk7Ci19IHVub3BbXSA9IHsKLSAgICB7ICcrJywgb3BfcG9zIH0s
Ci0gICAgeyAnLScsIG9wX25lZyB9LAotICAgIHsgJ34nLCBvcF9jbXBsIH0sCi0gICAgeyAnIScs
IG9wX25vdCB9LAotfTsKLQotI2RlZmluZSBBTEVOKEEpIChzaXplb2YoQSkvc2l6ZW9mKEFbMF0p
KQotCi1zdGF0aWMgaW50IGV2YWwoaW50IHRva2VuLCBpbnQgcHJlYywgaW50ICpyZXMsIGludCAq
ZXJyLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgICAgICAgICBpLCB2YWw7Ci0g
ICAgU3ltYm9sICAgICAgKnM7Ci0gICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7Ci0g
ICAgICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZGVmaW5lZEF0b20pIHsKLSAgICAgICAg
ICAgIGludCBuZWVkY2xvc2UgPSAwOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYg
KHRva2VuID09ICcoJykgewotICAgICAgICAgICAgICAgIG5lZWRjbG9zZSA9IDE7Ci0gICAgICAg
ICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRva2VuICE9IENQ
UF9JREVOVElGSUVSKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAq
cmVzID0gKHMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2NfaWRlbnQpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgPyAhcy0+ZGV0YWlscy5tYWMudW5kZWYgOiAwOwotICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOwotICAgICAgICAgICAgaWYgKG5lZWRjbG9zZSkgewotICAgICAgICAgICAgICAg
IGlmICh0b2tlbiAhPSAnKScpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAg
ICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfQotCQl9IGVsc2UgaWYgKE1hY3JvRXhwYW5k
KHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKSB7Ci0JCQl0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXZhbCh0b2tlbiwgcHJlYywgcmVzLCBlcnIsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLQl9IGVsc2UgaWYgKHRv
a2VuID09IENQUF9JTlRDT05TVEFOVCkgewotICAgICAgICAqcmVzID0geXlsdmFscHAtPnNjX2lu
dDsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gJygnKSB7Ci0gICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywgcmVzLCBlcnIsIHl5
bHZhbHBwKTsKLSAgICAgICAgaWYgKCEqZXJyKSB7Ci0gICAgICAgICAgICBpZiAodG9rZW4gIT0g
JyknKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSBBTEVOKHVub3ApIC0gMTsgaSA+
PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmICh1bm9wW2ldLnRva2VuID09IHRva2VuKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID49IDApIHsKLSAg
ICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIHRva2VuID0gZXZhbCh0b2tlbiwgVU5BUlksIHJl
cywgZXJyLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAqcmVzID0gdW5vcFtpXS5vcCgqcmVzKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgd2hpbGUgKCEqZXJyKSB7Ci0gICAgICAgIGlmICh0b2tlbiA9PSAnKScgfHwgdG9r
ZW4gPT0gJ1xuJykgYnJlYWs7Ci0gICAgICAgIGZvciAoaSA9IEFMRU4oYmlub3ApIC0gMTsgaSA+
PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChiaW5vcFtpXS50b2tlbiA9PSB0b2tlbikKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA8IDAgfHwgYmlu
b3BbaV0ucHJlYyA8PSBwcmVjKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHZhbCA9ICpy
ZXM7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBiaW5vcFtpXS5w
cmVjLCByZXMsIGVyciwgeXlsdmFscHApOwotICAgICAgICAKLSAgICAgICAgaWYgKGJpbm9wW2ld
Lm9wID09IG9wX2RpdiB8fCBiaW5vcFtpXS5vcCA9PSBvcF9tb2QpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICgqcmVzID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coInByZXByb2Nlc3NvciBkaXZpZGUgb3IgbW9kdWxvIGJ5IHplcm8iKTsK
LSAgICAgICAgICAgICAgICAqZXJyID0gMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAqcmVzID0gYmlub3BbaV0ub3Ao
dmFsLCAqcmVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRva2VuOwotZXJyb3I6Ci0gICAgQ1BQRXJy
b3JUb0luZm9Mb2coImluY29ycmVjdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIik7Ci0gICAgKmVy
ciA9IDE7Ci0gICAgKnJlcyA9IDA7Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBldmFsCi0KLXN0
YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAgICBpbnQgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAg
IGludCByZXMgPSAwLCBlcnIgPSAwOwotCi0gICAgaWYgKCFjcHAtPmlmZGVwdGgrKykKLSAgICAg
ICAgaWZsb2MgPSAqY3BwLT50b2tlbkxvYzsKLSAgICBpZihjcHAtPmlmZGVwdGggPiBNQVhfSUZf
TkVTVElORyl7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJtYXggI2lmIG5lc3RpbmcgZGVw
dGggZXhjZWVkZWQiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgY3BwLT5lbHNldHJhY2tlcisrOwotICAgIC8vIHNhbml0eSBj
aGVjayBlbHNldHJhY2tlcgotICAgIGlmIChjcHAtPmVsc2V0cmFja2VyIDwgMCB8fCBjcHAtPmVs
c2V0cmFja2VyID49IE1BWF9JRl9ORVNUSU5HKSB7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCJtaXNtYXRjaGVkICNpZi8jZW5kaWYgc3RhdGVtZW50cyIpOwotICAgICAgICBjcHAtPkNvbXBp
bGVFcnJvciA9IDE7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjcHAtPmVsc2VkZXB0
aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7Ci0KLSAgICB0b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9Q
UkVDLCAmcmVzLCAmZXJyLCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2VuICE9ICdcbicpIHsKLSAg
ICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNp
ZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAg
IHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBp
ZiAodG9rZW4gPD0gMCkgeyAvLyBFT0Ygb3IgZXJyb3IKLSAgICAgICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gI2lmIHByZXByb2Nlc3NvciBk
aXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gCi0gICAgaWYgKCFyZXMgJiYgIWVy
cikgewotICAgICAgICB0b2tlbiA9IENQUGVsc2UoMSwgeXlsdmFscHApOwotICAgIH0KLQotICAg
IHJldHVybiB0b2tlbjsKLX0gLy8gQ1BQaWYKLQotc3RhdGljIGludCBDUFBpZmRlZihpbnQgZGVm
aW5lZCwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBpbnQgbmFt
ZSA9IHl5bHZhbHBwLT5zY19pZGVudDsKLSAgICBpZigrK2NwcC0+aWZkZXB0aCA+IE1BWF9JRl9O
RVNUSU5HKXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIm1heCAjaWYgbmVzdGluZyBkZXB0
aCBleGNlZWRlZCIpOwotICAgICAgICBjcHAtPkNvbXBpbGVFcnJvciA9IDE7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICBjcHAtPmVsc2V0cmFja2VyKys7Ci0gICAgLy8gc2FuaXR5IGNo
ZWNrIGVsc2V0cmFja2VyCi0gICAgaWYgKGNwcC0+ZWxzZXRyYWNrZXIgPCAwIHx8IGNwcC0+ZWxz
ZXRyYWNrZXIgPj0gTUFYX0lGX05FU1RJTkcpIHsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
Im1pc21hdGNoZWQgI2lmLyNlbmRpZiBzdGF0ZW1lbnRzIik7Ci0gICAgICAgIGNwcC0+Q29tcGls
ZUVycm9yID0gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGNwcC0+ZWxzZWRlcHRo
W2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsKLQotICAgIGlmICh0b2tlbiAhPSBDUFBfSURFTlRJRklF
UikgewotICAgICAgICAgICAgZGVmaW5lZCA/IENQUEVycm9yVG9JbmZvTG9nKCJpZmRlZiIpOkNQ
UEVycm9yVG9JbmZvTG9nKCJpZm5kZWYiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBTeW1ib2wg
KnMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCBuYW1lKTsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1
cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICBp
ZiAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5l
eHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNpZmRlZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0g
ZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykg
ewotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkg
eyAvLyBFT0Ygb3IgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
InVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluICNpZmRlZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
IC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo
KChzICYmICFzLT5kZXRhaWxzLm1hYy51bmRlZikgPyAxIDogMCkgIT0gZGVmaW5lZCkKLSAgICAg
ICAgICAgIHRva2VuID0gQ1BQZWxzZSgxLCB5eWx2YWxwcCk7Ci0gICAgfQotICAgIHJldHVybiB0
b2tlbjsKLX0gLy8gQ1BQaWZkZWYKLQotc3RhdGljIGludCBDUFBsaW5lKHl5c3R5cGVwcCAqIHl5
bHZhbHBwKSAKLXsKLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCWlmKHRva2VuPT0nXG4nKXsKLQkJRGVjTGluZU51
bWJlcigpOwotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2xpbmUiKTsKLSAgICAgICAgSW5j
TGluZU51bWJlcigpOwotCQlyZXR1cm4gdG9rZW47Ci0JfQotCWVsc2UgaWYgKHRva2VuID09IENQ
UF9JTlRDT05TVEFOVCkgewotCQl5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJv
bF9uYW1lKTsKLQkJU2V0TGluZU51bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAgICAgdG9r
ZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgICAgICAKLQkJaWYgKHRva2VuID09IENQUF9JTlRDT05TVEFOVCkgewotICAgICAgICAg
ICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JCQlTZXRT
dHJpbmdOdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+
Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JCQlpZih0
b2tlbiE9J1xuJykKLQkJCQlDUFBFcnJvclRvSW5mb0xvZygiI2xpbmUiKTsKLSAgICAgICAgfQot
CQllbHNlIGlmICh0b2tlbiA9PSAnXG4nKXsKLQkJCXJldHVybiB0b2tlbjsKLQkJfQotCQllbHNl
ewotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNsaW5lIik7Ci0JCX0KLQl9Ci0JZWxz
ZXsKLSAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2xpbmUiKTsKLQl9Ci0gICAgcmV0dXJu
IHRva2VuOwotfQotCi1zdGF0aWMgaW50IENQUGVycm9yKHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7
Ci0KLQlpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0JCi0gICAgd2hpbGUgKHRv
a2VuICE9ICdcbicpIHsKLSAgICAgICAgaWYgKHRva2VuIDw9IDApewotICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluICNlcnJvciBwcmVwcm9j
ZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfWVsc2UgaWYgKHRva2VuID09IENQUF9GTE9BVENPTlNUQU5UIHx8IHRv
a2VuID09IENQUF9JTlRDT05TVEFOVCl7Ci0gICAgICAgICAgICBTdG9yZVN0cih5eWx2YWxwcC0+
c3ltYm9sX25hbWUpOwotCQl9ZWxzZSBpZih0b2tlbiA9PSBDUFBfSURFTlRJRklFUiB8fCB0b2tl
biA9PSBDUFBfU1RSQ09OU1RBTlQpewotCQkJU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJs
ZSx5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLQkJfWVsc2UgewotCQkgICAgU3RvcmVTdHIoR2V0U3Ry
aW5nT2ZBdG9tKGF0YWJsZSx0b2tlbikpOwotCQl9Ci0JCXRva2VuID0gY3BwLT5jdXJyZW50SW5w
dXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQl9Ci0JRGVjTGluZU51bWJl
cigpOwotCS8vc3RvcmUgdGhpcyBtc2cgaW50byB0aGUgc2hhZGVyJ3MgaW5mb3JtYXRpb24gbG9n
Li5zZXQgdGhlIENvbXBpbGUgRXJyb3IgZmxhZyEhISEKLQltZXNzYWdlPUdldFN0cmZyb21UU3Ry
KCk7Ci0gICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOwotICAgIFJlc2V0VFN0cmluZygpOwot
ICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAgSW5jTGluZU51bWJlcigpOwotICAgIHJldHVy
biAnXG4nOwotfS8vQ1BQZXJyb3IKLQotc3RhdGljIGludCBDUFBwcmFnbWEoeXlzdHlwZXBwICog
eXlsdmFscHApCi17Ci0JY2hhciBTcmNTdHJOYW1lWzJdOwotCWNoYXIqKiBhbGxUb2tlbnM7Ci0J
aW50IHRva2VuQ291bnQgPSAwOwotCWludCBtYXhUb2tlbkNvdW50ID0gMTA7Ci0JY29uc3QgY2hh
ciogU3JjU3RyOwotCWludCBpOwotCi0JaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNj
YW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQkKLQlpZiAodG9rZW49PSdcbicpIHsK
LQkJRGVjTGluZU51bWJlcigpOwotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ByYWdtYSIp
OwotICAgICAgICBJbmNMaW5lTnVtYmVyKCk7Ci0JICAgIHJldHVybiB0b2tlbjsKLQl9Ci0JCi0J
YWxsVG9rZW5zID0gKGNoYXIqKiltYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIG1heFRva2VuQ291bnQp
OwkKLQotCXdoaWxlICh0b2tlbiAhPSAnXG4nKSB7Ci0JCWlmICh0b2tlbkNvdW50ID49IG1heFRv
a2VuQ291bnQpIHsKLQkJCW1heFRva2VuQ291bnQgKj0gMjsKLQkJCWFsbFRva2VucyA9IChjaGFy
KiopcmVhbGxvYygoY2hhcioqKWFsbFRva2Vucywgc2l6ZW9mKGNoYXIqKSAqIG1heFRva2VuQ291
bnQpOwotCQl9Ci0JCXN3aXRjaCAodG9rZW4pIHsKLQkJY2FzZSBDUFBfSURFTlRJRklFUjoKLQkJ
CVNyY1N0ciA9IEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpOwotCQkJ
YWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oU3JjU3RyKSArIDEp
OwotCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIpOwotCQkJYnJlYWs7
Ci0JCWNhc2UgQ1BQX0lOVENPTlNUQU5UOgotCQkJU3JjU3RyID0geXlsdmFscHAtPnN5bWJvbF9u
YW1lOwotCQkJYWxsVG9rZW5zW3Rva2VuQ291bnRdID0gKGNoYXIqKW1hbGxvYyhzdHJsZW4oU3Jj
U3RyKSArIDEpOwotCQkJc3RyY3B5KGFsbFRva2Vuc1t0b2tlbkNvdW50KytdLCBTcmNTdHIpOwot
CQkJYnJlYWs7Ci0JCWNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0JCQlTcmNTdHIgPSB5eWx2YWxw
cC0+c3ltYm9sX25hbWU7Ci0JCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9j
KHN0cmxlbihTcmNTdHIpICsgMSk7Ci0JCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10s
IFNyY1N0cik7Ci0JCQlicmVhazsKLQkJY2FzZSAtMToKLSAgICAgICAgICAgIC8vIEVPRgotICAg
ICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCIjcHJhZ21hIGRpcmVjdGl2ZSBtdXN0IGVuZCB3aXRo
IGEgbmV3bGluZSIpOwkJCQotCQkJZ290byBmcmVlTWVtb3J5QW5kUmV0dXJuVG9rZW47Ci0JCWRl
ZmF1bHQ6Ci0JCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47Ci0JCQlTcmNTdHJOYW1lWzFdID0gJ1ww
JzsKLQkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2MoMik7Ci0JCQlzdHJj
cHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0ck5hbWUpOwotCQl9Ci0JCXRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQl9
Ci0KLQlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2VuQ291bnQpOwot
CQotZnJlZU1lbW9yeUFuZFJldHVyblRva2VuOgotCWZvciAoaSA9IDA7IGkgPCB0b2tlbkNvdW50
OyArK2kpIHsKLQkJZnJlZSAoYWxsVG9rZW5zW2ldKTsKLQl9Ci0JZnJlZSAoYWxsVG9rZW5zKTsJ
Ci0KLQlyZXR1cm4gdG9rZW47ICAgIAotfSAvLyBDUFBwcmFnbWEKLQotI2RlZmluZSBFU1NMX1ZF
UlNJT05fTlVNQkVSIDEwMAotI2RlZmluZSBFU1NMX1ZFUlNJT05fU1RSSU5HICIxMDAiCi0KLXN0
YXRpYyBpbnQgQ1BQdmVyc2lvbih5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLQotICAgIGludCB0
b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0KLSAgICBpZiAoY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPT0gMSkKLSAgICAgICAgQ1BQ
U2hJbmZvTG9nTXNnKCIjdmVyc2lvbiBtdXN0IG9jY3VyIGJlZm9yZSBhbnkgb3RoZXIgc3RhdGVt
ZW50IGluIHRoZSBwcm9ncmFtIik7Ci0KLSAgICBpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVO
dW1iZXIoKTsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7Ci0gICAgICAg
IEluY0xpbmVOdW1iZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLSAgICBpZiAodG9rZW4gIT0g
Q1BQX0lOVENPTlNUQU5UKQotICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI3ZlcnNpb24iKTsK
LQkKLSAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKLQkv
L1NldFZlcnNpb25OdW1iZXIoeXlsdmFscHAtPnNjX2ludCk7Ci0gICAgCi0gICAgaWYgKHl5bHZh
bHBwLT5zY19pbnQgIT0gRVNTTF9WRVJTSU9OX05VTUJFUikKLSAgICAgICAgQ1BQU2hJbmZvTG9n
TXNnKCJWZXJzaW9uIG51bWJlciBub3Qgc3VwcG9ydGVkIGJ5IEVTU0wiKTsKLQotICAgIHRva2Vu
ID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAKLQlpZiAodG9rZW4gPT0gJ1xuJyl7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0JZWxzZXsK
LSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7Ci0JfQotICAgIHJldHVybiB0
b2tlbjsKLX0gLy8gQ1BQdmVyc2lvbgotCi1zdGF0aWMgaW50IENQUGV4dGVuc2lvbih5eXN0eXBl
cHAgKiB5eWx2YWxwcCkKLXsKLQotICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgY2hhciBleHRlbnNpb25OYW1l
W01BWF9TWU1CT0xfTkFNRV9MRU4gKyAxXTsKLQotICAgIGlmKHRva2VuPT0nXG4nKXsKLQkJRGVj
TGluZU51bWJlcigpOwotICAgICAgICBDUFBTaEluZm9Mb2dNc2coImV4dGVuc2lvbiBuYW1lIG5v
dCBzcGVjaWZpZWQiKTsKLSAgICAgICAgSW5jTGluZU51bWJlcigpOwotCQlyZXR1cm4gdG9rZW47
Ci0JfQotCi0gICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVSKQotICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygiI2V4dGVuc2lvbiIpOwotICAgIAotICAgIHN0cm5jcHkoZXh0ZW5zaW9uTmFt
ZSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCksIE1BWF9TWU1CT0xf
TkFNRV9MRU4pOwotICAgIGV4dGVuc2lvbk5hbWVbTUFYX1NZTUJPTF9OQU1FX0xFTl0gPSAnXDAn
OwotCSAgICAKLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2VuICE9ICc6JykgewotICAgICAgICBDUFBT
aEluZm9Mb2dNc2coIic6JyBtaXNzaW5nIGFmdGVyIGV4dGVuc2lvbiBuYW1lIik7Ci0gICAgICAg
IHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgCi0gICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiAhPSBD
UFBfSURFTlRJRklFUikgewotICAgICAgICBDUFBTaEluZm9Mb2dNc2coImJlaGF2aW9yIGZvciBl
eHRlbnNpb24gbm90IHNwZWNpZmllZCIpOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQot
Ci0gICAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoZXh0ZW5zaW9uTmFtZSwgR2V0QXRvbVN0cmlu
ZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwotCi0gICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCWlmICh0b2tlbiA9
PSAnXG4nKXsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQllbHNlewotICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiI2V4dGVuc2lvbiIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUGV4
dGVuc2lvbgotCi1pbnQgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAg
aW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICBjb25zdCBjaGFyICptZXNzYWdlOwotCi0gICAgaWYgKHRva2VuID09IENQ
UF9JREVOVElGSUVSKSB7Ci0gICAgICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZGVmaW5l
QXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQZGVmaW5lKHl5bHZhbHBwKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZWxzZUF0b20pIHsKLQkJCSBpZihD
aGtDb3JyZWN0RWxzZU5lc3RpbmcoKSl7Ci0gICAgICAgICAgICAgICAgIGlmICghY3BwLT5pZmRl
cHRoICl7Ci0gICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgbWlz
bWF0Y2giKTsKLSAgICAgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICBDUFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBm
b2xsb3dpbmcgI2Vsc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGlu
ZSIpOwotICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRv
a2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjaWZkZWYgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLQkJCSAgICAgdG9rZW4g
PSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICB9ZWxzZXsKLSAgICAgICAgICAg
ICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbHNlIGFmdGVyIGEgI2Vsc2UiKTsKLSAgICAgICAg
ICAgICAgICAgY3BwLT5pZmRlcHRoID0gMDsKLSAgICAgICAgICAgICAgICAgY3BwLT5lbHNldHJh
Y2tlciA9IDA7Ci0gICAgICAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsK
LSAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOwotICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICB9Ci0JCX0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lk
ZW50ID09IGVsaWZBdG9tKSB7Ci0gICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCl7Ci0gICAg
ICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZWxpZiBtaXNtYXRjaCIpOwotICAgICAg
ICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwotICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAvLyB0aGlzIHRva2VuIGlzIHJlYWxseSBh
IGRvbnQgY2FyZSwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZWF0IHRoZSB0b2tlbnMKLSAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsgCi0gICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgewotICAgICAgICAg
ICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgeyAvLyBFT0Ygb3Ig
ZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0IHRv
a2VucyBmb2xsb3dpbmcgI2VsaWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEg
bmV3bGluZSIpOwotICAgICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvciA9IDE7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQkJICAgIHRva2VuID0gQ1BQZWxzZSgwLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVuZGlmQXRvbSkgewotICAgICAgICAgICAgIGlm
ICghY3BwLT5pZmRlcHRoKXsKLSAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNl
bmRpZiBtaXNtYXRjaCIpOwotICAgICAgICAgICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwot
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAtLWNwcC0+aWZkZXB0aDsKLQotICAgICAgICAgICAgIGlm
IChjcHAtPmVsc2V0cmFja2VyKQotICAgICAgICAgICAgICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7
Ci0KLQkgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gaWZBdG9tKSB7Ci0gICAg
ICAgICAgICAgdG9rZW4gPSBDUFBpZih5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXls
dmFscHAtPnNjX2lkZW50ID09IGlmZGVmQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQ
aWZkZWYoMSwgeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVu
dCA9PSBpZm5kZWZBdG9tKSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigwLCB5eWx2
YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGxpbmVBdG9t
KSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFBsaW5lKHl5bHZhbHBwKTsKLSAgICAgICAgfSBl
bHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gcHJhZ21hQXRvbSkgewotICAgICAgICAgICAg
IHRva2VuID0gQ1BQcHJhZ21hKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxw
cC0+c2NfaWRlbnQgPT0gdW5kZWZBdG9tKSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFB1bmRl
Zih5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVy
cm9yQXRvbSkgewotICAgICAgICAgICAgIHRva2VuID0gQ1BQZXJyb3IoeXlsdmFscHApOwotICAg
ICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB2ZXJzaW9uQXRvbSkgewotICAg
ICAgICAgICAgdG9rZW4gPSBDUFB2ZXJzaW9uKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgewotICAgICAgICAgICAgdG9r
ZW4gPSBDUFBleHRlbnNpb24oeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgU3RvcmVTdHIoIkludmFsaWQgRGlyZWN0aXZlIik7Ci0gICAgICAgICAgICBTdG9yZVN0cihH
ZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLT5zY19pZGVudCkpOwotICAgICAgICAgICAg
bWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1l
c3NhZ2UpOwotICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgd2hpbGUgKHRva2VuICE9ICdcbicgJiYgdG9rZW4gIT0gMCAmJiB0b2tlbiAhPSBFT0YpIHsK
LQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotCX0KLSAgICAgICAgCi0gICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOwot
Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyByZWFkQ1BQbGluZQotCi12b2lkIEZyZWVNYWNybyhN
YWNyb1N5bWJvbCAqcykgewotICAgIERlbGV0ZVRva2VuU3RyZWFtKHMtPmJvZHkpOwotfQotCi12
b2lkIFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkgewotICAg
IFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswLCAwfTsKLSAgICBTeW1ib2wgKnN5bWJvbCA9IE5VTEw7
Ci0gICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MCwgTlVMTCwgTlVMTCwgMCwgMH07Ci0gICAgeXlz
dHlwZXBwIHZhbCA9IHswLCAwLjAsIDAsIHswfX07Ci0gICAgaW50IGF0b20gPSAwOwotCi0gICAg
bWFjcm8uYm9keSA9IE5ld1Rva2VuU3RyZWFtKG5hbWUsIG1hY3Jvcy0+cG9vbCk7Ci0gICAgdmFs
LnNjX2ludCA9IHZhbHVlOwotICAgIHNucHJpbnRmKHZhbC5zeW1ib2xfbmFtZSwgTUFYX1NZTUJP
TF9OQU1FX0xFTisxLCAiJWQiLCB2YWx1ZSk7Ci0gICAgUmVjb3JkVG9rZW4obWFjcm8uYm9keSwg
Q1BQX0lOVENPTlNUQU5ULCAmdmFsKTsKLSAgICBhdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJs
ZSwgbmFtZSk7Ci0gICAgc3ltYm9sID0gQWRkU3ltYm9sKCZsb2NhdGlvbiwgbWFjcm9zLCBhdG9t
LCBNQUNST19TKTsKLSAgICBzeW1ib2wtPmRldGFpbHMubWFjID0gbWFjcm87Ci19Ci0KLXN0YXRp
YyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgeyByZXR1
cm4gLTE7IH0KLXN0YXRpYyB2b2lkIG5vb3AoSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVw
cCAqIHl5bHZhbHBwKSB7IH0KLQotc3RhdGljIHZvaWQgUHVzaEVvZlNyYygpIHsKLSAgICBJbnB1
dFNyYyAqaW4gPSBtYWxsb2Moc2l6ZW9mKElucHV0U3JjKSk7Ci0gICAgbWVtc2V0KGluLCAwLCBz
aXplb2YoSW5wdXRTcmMpKTsKLSAgICBpbi0+c2NhbiA9IGVvZl9zY2FuOwotICAgIGluLT5nZXRj
aCA9IGVvZl9zY2FuOwotICAgIGluLT51bmdldGNoID0gbm9vcDsKLSAgICBpbi0+cHJldiA9IGNw
cC0+Y3VycmVudElucHV0OwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW47Ci19Ci0KLXN0YXRp
YyB2b2lkIFBvcEVvZlNyYygpIHsKLSAgICBpZiAoY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4gPT0g
ZW9mX3NjYW4pIHsKLSAgICAgICAgSW5wdXRTcmMgKmluID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0g
ICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPnByZXY7Ci0gICAgICAgIGZyZWUoaW4pOwot
ICAgIH0KLX0KLQotc3RhdGljIFRva2VuU3RyZWFtICpQcmVzY2FuTWFjcm9BcmcoVG9rZW5TdHJl
YW0gKmEsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgaW50IHRva2VuOwotICAgIFRva2Vu
U3RyZWFtICpuOwotICAgIFJld2luZFRva2VuU3RyZWFtKGEpOwotICAgIGRvIHsKLSAgICAgICAg
dG9rZW4gPSBSZWFkVG9rZW4oYSwgeXlsdmFscHApOwotICAgICAgICBpZiAodG9rZW4gPT0gQ1BQ
X0lERU5USUZJRVIgJiYgTG9va1VwU3ltYm9sKG1hY3JvcywgeXlsdmFscHAtPnNjX2lkZW50KSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0gd2hpbGUgKHRva2VuID4gMCk7Ci0gICAgaWYgKHRv
a2VuIDw9IDApIHJldHVybiBhOwotICAgIG4gPSBOZXdUb2tlblN0cmVhbSgibWFjcm8gYXJnIiwg
MCk7Ci0gICAgUHVzaEVvZlNyYygpOwotICAgIFJlYWRGcm9tVG9rZW5TdHJlYW0oYSwgMCwgMCk7
Ci0gICAgd2hpbGUgKCh0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCkpID4gMCkgewotICAgICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5U
SUZJRVIgJiYgTWFjcm9FeHBhbmQoeXlsdmFscHAtPnNjX2lkZW50LCB5eWx2YWxwcCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVjb3JkVG9rZW4obiwgdG9rZW4sIHl5bHZhbHBw
KTsKLSAgICB9Ci0gICAgUG9wRW9mU3JjKCk7Ci0gICAgRGVsZXRlVG9rZW5TdHJlYW0oYSk7Ci0g
ICAgcmV0dXJuIG47Ci19IC8vIFByZXNjYW5NYWNyb0FyZwotCi10eXBlZGVmIHN0cnVjdCBNYWNy
b0lucHV0U3JjIHsKLSAgICBJbnB1dFNyYyAgICBiYXNlOwotICAgIE1hY3JvU3ltYm9sICptYWM7
Ci0gICAgVG9rZW5TdHJlYW0gKiphcmdzOwotfSBNYWNyb0lucHV0U3JjOwotCi0vKiBtYWNyb19z
Y2FuIC0tLQotKiogcmV0dXJuIHRoZSBuZXh0IHRva2VuIGZvciBhIG1hY3JvIGV4cGFuaW9uLCBo
YW5kbGluZyBtYWNybyBhcmdzIAotKi8KLXN0YXRpYyBpbnQgbWFjcm9fc2NhbihNYWNyb0lucHV0
U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAgICBpbnQgaTsKLSAgICBpbnQgdG9r
ZW4gPSBSZWFkVG9rZW4oaW4tPm1hYy0+Ym9keSwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiA9
PSBDUFBfSURFTlRJRklFUikgewotICAgICAgICBmb3IgKGkgPSBpbi0+bWFjLT5hcmdjLTE7IGk+
PTA7IGktLSkKLSAgICAgICAgICAgIGlmIChpbi0+bWFjLT5hcmdzW2ldID09IHl5bHZhbHBwLT5z
Y19pZGVudCkgYnJlYWs7Ci0gICAgICAgIGlmIChpID49IDApIHsKLSAgICAgICAgICAgIFJlYWRG
cm9tVG9rZW5TdHJlYW0oaW4tPmFyZ3NbaV0sIHl5bHZhbHBwLT5zY19pZGVudCwgMCk7Ci0gICAg
ICAgICAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodG9rZW4gPiAwKSByZXR1cm4g
dG9rZW47Ci0gICAgaW4tPm1hYy0+YnVzeSA9IDA7Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSBp
bi0+YmFzZS5wcmV2OwotICAgIGlmIChpbi0+YXJncykgewotICAgICAgICBmb3IgKGk9aW4tPm1h
Yy0+YXJnYy0xOyBpPj0wOyBpLS0pCi0gICAgICAgICAgICBEZWxldGVUb2tlblN0cmVhbShpbi0+
YXJnc1tpXSk7Ci0gICAgICAgIGZyZWUoaW4tPmFyZ3MpOwotICAgIH0KLSAgICBmcmVlKGluKTsK
LSAgICByZXR1cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLX0gLy8gbWFjcm9fc2NhbgotCi0vKiBNYWNyb0V4cGFuZAotKiogY2hlY2sgYW4g
aWRlbnRpZmllciAoYXRvbSkgdG8gc2VlIGlmIGl0IGEgbWFjcm8gdGhhdCBzaG91bGQgYmUgZXhw
YW5kZWQuCi0qKiBJZiBpdCBpcywgcHVzaCBhbiBJbnB1dFNyYyB0aGF0IHdpbGwgcHJvZHVjZSB0
aGUgYXBwcm9wcmlhdGUgZXhwYW5zaW9uCi0qKiBhbmQgcmV0dXJuIFRSVUUuICBJZiBub3QsIHJl
dHVybiBGQUxTRS4KLSovCi0KLWludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlwZXBwICog
eXlsdmFscHApCi17Ci0gICAgU3ltYm9sICAgICAgICAgICAgICAqc3ltID0gTG9va1VwU3ltYm9s
KG1hY3JvcywgYXRvbSk7Ci0gICAgTWFjcm9JbnB1dFNyYyAgICAgICAqaW47Ci0gICAgaW50IGks
aiwgdG9rZW4sIGRlcHRoPTA7Ci0gICAgY29uc3QgY2hhciAqbWVzc2FnZTsKLQlpZiAoYXRvbSA9
PSBfX0xJTkVfX0F0b20pIHsKLSAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IEdldExpbmVOdW1i
ZXIoKTsKLSAgICAgICAgc25wcmludGYoeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBNQVhfU1lNQk9M
X05BTUVfTEVOKzEsICIlZCIsIHl5bHZhbHBwLT5zY19pbnQpOwotICAgICAgICBVbmdldFRva2Vu
KENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0g
ICAgaWYgKGF0b20gPT0gX19GSUxFX19BdG9tKSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQg
PSBHZXRTdHJpbmdOdW1iZXIoKTsKLSAgICAgICAgc25wcmludGYoeXlsdmFscHAtPnN5bWJvbF9u
YW1lLCBNQVhfU1lNQk9MX05BTUVfTEVOKzEsICIlZCIsIHl5bHZhbHBwLT5zY19pbnQpOwotICAg
ICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwotICAgICAgICByZXR1
cm4gMTsKLSAgICB9Ci0JaWYgKGF0b20gPT0gX19WRVJTSU9OX19BdG9tKSB7Ci0gICAgICAgIHN0
cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsRVNTTF9WRVJTSU9OX1NUUklORyk7Ci0gICAgICAg
IHl5bHZhbHBwLT5zY19pbnQgPSBhdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0gICAgICAg
IFVuZ2V0VG9rZW4oQ1BQX0lOVENPTlNUQU5ULCB5eWx2YWxwcCk7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIH0KLSAgICBpZiAoIXN5bSB8fCBzeW0tPmRldGFpbHMubWFjLnVuZGVmKSByZXR1cm4g
MDsKLSAgICBpZiAoc3ltLT5kZXRhaWxzLm1hYy5idXN5KSByZXR1cm4gMDsgICAgICAgIC8vIG5v
IHJlY3Vyc2l2ZSBleHBhbnNpb25zCi0gICAgaW4gPSBtYWxsb2Moc2l6ZW9mKCppbikpOwotICAg
IG1lbXNldChpbiwgMCwgc2l6ZW9mKCppbikpOwotICAgIGluLT5iYXNlLnNjYW4gPSAodm9pZCAq
KW1hY3JvX3NjYW47Ci0gICAgaW4tPmJhc2UubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5saW5l
OwotICAgIGluLT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICBpbi0+
bWFjID0gJnN5bS0+ZGV0YWlscy5tYWM7Ci0gICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYXJncykg
ewotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0JCWlmICh0b2tlbiAhPSAnKCcpIHsKLSAgICAgICAgICAgIFVuZ2V0
VG9rZW4odG9rZW4sIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9
IGF0b207Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpbi0+YXJn
cyA9IG1hbGxvYyhpbi0+bWFjLT5hcmdjICogc2l6ZW9mKFRva2VuU3RyZWFtICopKTsKLSAgICAg
ICAgZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKQotICAgICAgICAgICAgaW4tPmFyZ3Nb
aV0gPSBOZXdUb2tlblN0cmVhbSgibWFjcm8gYXJnIiwgMCk7Ci0JCWk9MDtqPTA7Ci0gICAgICAg
IGRvewotICAgICAgICAgICAgZGVwdGggPSAwOwotCQkJd2hpbGUoMSkgewotICAgICAgICAgICAg
ICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgewotICAgICAgICAgICAg
ICAgICAgICBTdG9yZVN0cigiRU9GIGluIE1hY3JvICIpOwotICAgICAgICAgICAgICAgICAgICBT
dG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKLSAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYoKGluLT5tYWMtPmFyZ2M9PTApICYmICh0b2tlbiE9JyknKSkgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDAgJiYgKHRva2VuID09ICcsJyB8fCB0b2tlbiA9
PSAnKScpKSBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBkZXB0aCsr
OwotICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAnKScpIGRlcHRoLS07Ci0gICAgICAgICAg
ICAgICAgUmVjb3JkVG9rZW4oaW4tPmFyZ3NbaV0sIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICAgICAgaj0xOwotCQkJfQotICAgICAgICAgICAgaWYgKHRva2VuID09ICcpJykgewotICAg
ICAgICAgICAgICAgIGlmKChpbi0+bWFjLT5hcmdjPT0xKSAmJmo9PTApCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkrKzsKLQkJfXdoaWxlKGkgPCBpbi0+bWFj
LT5hcmdjKTsKLQotICAgICAgICBpZiAoaSA8IGluLT5tYWMtPmFyZ2MpIHsKLSAgICAgICAgICAg
IFN0b3JlU3RyKCJUb28gZmV3IGFyZ3MgaW4gTWFjcm8gIik7Ci0gICAgICAgICAgICBTdG9yZVN0
cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKLSAgICAgICAgICAgIG1lc3NhZ2U9R2V0
U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAg
ICAgICAgICAgIFJlc2V0VFN0cmluZygpOwotICAgICAgICB9IGVsc2UgaWYgKHRva2VuICE9ICcp
JykgewotICAgICAgICAgICAgZGVwdGg9MDsKLQkJCXdoaWxlICh0b2tlbiA+PSAwICYmIChkZXB0
aCA+IDAgfHwgdG9rZW4gIT0gJyknKSkgewotICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSAn
KScpIGRlcHRoLS07Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGlmICh0
b2tlbiA9PSAnKCcpIGRlcHRoKys7Ci0gICAgICAgICAgICB9Ci0JCQkKLSAgICAgICAgICAgIGlm
ICh0b2tlbiA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAi
KTsKLSAgICAgICAgICAgICAgICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20p
KTsKLSAgICAgICAgICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAgICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIFJlc2V0VFN0
cmluZygpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgU3RvcmVTdHIoIlRvbyBtYW55IGFyZ3MgaW4gTWFjcm8gIik7Ci0gICAgICAgICAgICBT
dG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLGF0b20pKTsKLSAgICAgICAgICAgIG1lc3Nh
Z2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdl
KTsKLSAgICAgICAgICAgIFJlc2V0VFN0cmluZygpOwotCQl9Ci0JCWZvciAoaT0wOyBpPGluLT5t
YWMtPmFyZ2M7IGkrKykgewotICAgICAgICAgICAgaW4tPmFyZ3NbaV0gPSBQcmVzY2FuTWFjcm9B
cmcoaW4tPmFyZ3NbaV0sIHl5bHZhbHBwKTsKLSAgICAgICAgfQotICAgIH0KLSNpZiAwCi0gICAg
cHJpbnRmKCIgIDwlczolZD5mb3VuZCBtYWNybyAlc1xuIiwgR2V0QXRvbVN0cmluZyhhdGFibGUs
IGxvYy5maWxlKSwKLSAgICAgICAgICAgbG9jLmxpbmUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBh
dG9tKSk7Ci0gICAgZm9yIChpPTA7IGk8aW4tPm1hYy0+YXJnYzsgaSsrKSB7Ci0gICAgICAgIHBy
aW50ZigiXHRhcmcgJXMgPSAnIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGluLT5tYWMtPmFyZ3Nb
aV0pKTsKLSAgICAgICAgRHVtcFRva2VuU3RyZWFtKHN0ZG91dCwgaW4tPmFyZ3NbaV0pOwotICAg
ICAgICBwcmludGYoIidcbiIpOwotICAgIH0KLSNlbmRpZgotCS8qcmV0YWluIHRoZSBpbnB1dCBz
b3VyY2UqLwotICAgIGluLT5iYXNlLnByZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAgICBzeW0t
PmRldGFpbHMubWFjLmJ1c3kgPSAxOwotICAgIFJld2luZFRva2VuU3RyZWFtKHN5bS0+ZGV0YWls
cy5tYWMuYm9keSk7Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7Ci0gICAgcmV0
dXJuIDE7Ci19IC8vIE1hY3JvRXhwYW5kCi0KLWludCBDaGtDb3JyZWN0RWxzZU5lc3Rpbmcodm9p
ZCkKLXsKLSAgICAvLyBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIGVsc2V0cmFja2VyIGlzIGlu
IGEgdmFsaWQgcmFuZ2UKLSAgICBpZiAoY3BwLT5lbHNldHJhY2tlciA8IDAgfHwgY3BwLT5lbHNl
dHJhY2tlciA+PSBNQVhfSUZfTkVTVElORykgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBpZiAoY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl0gPT0gMCkgewotICAgICAg
ICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDE7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODAyZTIzZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCisrKyAvZGV2L251bGwKQEAg
LTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIs
IE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBw
bGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVl
bWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24s
IG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQot
Y29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdy
ZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkg
b3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlv
biBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQK
LXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5v
bi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBv
cmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2Us
IHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUs
IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQot
Zm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3
YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhp
cyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBz
dWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUg
bmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jw
b3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4g
dGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBs
aWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGlt
aXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBk
ZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNv
ZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJl
dW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJB
UyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJ
T04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQs
IE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1J
VFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEgg
T1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZP
UiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJ
VFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YK
LVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklT
SU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElP
TiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENB
VVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1O
VklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBjcHAuaAotLy8KLQotI2lmICFkZWZpbmVk
KF9fQ1BQX0gpCi0jZGVmaW5lIF9fQ1BQX0ggMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3BhcnNlci5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aCIKLQotaW50IEluaXRDUFAodm9pZCk7Ci1pbnQgRmluYWxDUFAodm9pZCk7Ci1pbnQgIHJlYWRD
UFBsaW5lKHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLWludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwg
eXlzdHlwZXBwICogeXlsdmFscHApOwotaW50IENoa0NvcnJlY3RFbHNlTmVzdGluZyh2b2lkKTsK
LQotdHlwZWRlZiBzdHJ1Y3QgTWFjcm9TeW1ib2wgewotICAgIGludCBhcmdjOwotICAgIGludCAq
YXJnczsKLSAgICBUb2tlblN0cmVhbSAqYm9keTsKLSAgICB1bnNpZ25lZCBidXN5OjE7Ci0gICAg
dW5zaWduZWQgdW5kZWY6MTsKLX0gTWFjcm9TeW1ib2w7Ci0KLXZvaWQgRnJlZU1hY3JvKE1hY3Jv
U3ltYm9sICopOwotdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQg
dmFsdWUpOwotCi12b2lkICBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpOyAgICAgIC8v
IFByaW50cyBpbmZvcm1hdGlvbiBpbnRvIGRlYnVnIGxvZwotdm9pZCAgQ1BQU2hJbmZvTG9nTXNn
KGNvbnN0IGNoYXIqKTsgICAgICAgICAvLyBTdG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNoLkluZm8u
TG9nCi12b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50
cyB3YXJuaW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKLXZvaWQgIEhhbmRsZVByYWdtYShjb25z
dCBjaGFyKiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVy
Lgotdm9pZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3Ig
TWVzc2FnZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciop
OyAgICAgICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nLgotdm9pZCAg
U3RvcmVTdHIoY29uc3QgY2hhciopOyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmlu
ZyBpbiBQYXJzZSBDb250ZXh0Lgotdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAg
ICAgICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKLXZvaWQgIFNldFN0cmluZ051bWJlcihpbnQp
OyAgICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAotaW50ICAgR2V0TGlu
ZU51bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5n
IE51bWJlci4gCi1pbnQgICBHZXRTdHJpbmdOdW1iZXIodm9pZCk7ICAgICAgICAgICAgICAgIC8v
IEdldCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKLWNvbnN0IGNoYXIqIEdldFN0cmZyb21U
U3RyKHZvaWQpOyAgICAgICAgICAgLy8gQ29udmVydCBUU3RyaW5nIHRvIFN0cmluZy4gIAotdm9p
ZCAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hh
ciogYmVoYXZpb3IpOwotaW50ICAgRnJlZUNQUCh2b2lkKTsKLQotI2VuZGlmIC8vICEoZGVmaW5l
ZChfX0NQUF9IKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDU4Y2ZmMzEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYworKysgL2Rldi9udWxsCkBAIC0x
LDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBs
aWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVt
ZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwg
bW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1j
b25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3Jl
ZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBv
ciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAot
c3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9u
LWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9y
aWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwg
cmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwg
d2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1m
b3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdh
cmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlz
IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1
Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBu
YW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBv
cmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0
aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxp
ZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1p
dGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRl
cml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29m
dHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1
bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFT
IElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElP
TiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwg
TUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlU
UyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBP
VEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9S
IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklU
UzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgot
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9O
IEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FV
U0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5W
SURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIGNwcHN0cnVjdC5jCi0vLwotCi0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKLQotQ1BQU3RydWN0ICAqY3BwICAgICAgPSBOVUxMOwot
c3RhdGljIGludCAgcmVmQ291bnQgPSAwOwotCi1pbnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKTsK
LWludCBSZXNldFByZXByb2Nlc3Nvcih2b2lkKTsKLWludCBGcmVlQ1BQU3RydWN0KHZvaWQpOwot
aW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKHZvaWQpOwotCi0vKgotICogSW5pdENQUFN0cnVjdCgp
IC0gSW5pdGlsYWl6ZSB0aGUgQ1BQIHN0cnVjdHVyZS4KLSAqCi0gKi8KLQotaW50IEluaXRDUFBT
dHJ1Y3Qodm9pZCkKLXsKLSAgICBpbnQgbGVuOwotICAgIGNoYXIgKnA7Ci0KLSAgICBjcHAgPSAo
Q1BQU3RydWN0ICopIG1hbGxvYyhzaXplb2YoQ1BQU3RydWN0KSk7Ci0gICAgaWYgKGNwcCA9PSBO
VUxMKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJlZkNvdW50Kys7Ci0KLSAgICAvLyBJbml0
aWFsaXplIHB1YmxpYyBtZW1iZXJzOgotICAgIGNwcC0+cExhc3RTb3VyY2VMb2MgPSAmY3BwLT5s
YXN0U291cmNlTG9jOwotICAgIAotCXAgPSAoY2hhciAqKSAmY3BwLT5vcHRpb25zOwotICAgIGxl
biA9IHNpemVvZihjcHAtPm9wdGlvbnMpOwotICAgIHdoaWxlICgtLWxlbiA+PSAwKQotICAgICAg
ICBwW2xlbl0gPSAwOwotICAgICAKLSAgICBSZXNldFByZXByb2Nlc3NvcigpOwotICAgIHJldHVy
biAxOwotfSAvLyBJbml0Q1BQU3RydWN0Ci0KLWludCBSZXNldFByZXByb2Nlc3Nvcih2b2lkKQot
ewotICAgIC8vIEluaXRpYWxpemUgcHJpdmF0ZSBtZW1iZXJzOgotCi0gICAgY3BwLT5sYXN0U291
cmNlTG9jLmZpbGUgPSAwOwotICAgIGNwcC0+bGFzdFNvdXJjZUxvYy5saW5lID0gMDsKLSAgICBj
cHAtPnBDID0gMDsKLSAgICBjcHAtPkNvbXBpbGVFcnJvciA9IDA7Ci0gICAgY3BwLT5pZmRlcHRo
ID0gMDsKLSAgICBmb3IoY3BwLT5lbHNldHJhY2tlciA9IDA7IGNwcC0+ZWxzZXRyYWNrZXIgPCBN
QVhfSUZfTkVTVElORzsgY3BwLT5lbHNldHJhY2tlcisrKQotICAgICAgICBjcHAtPmVsc2VkZXB0
aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7Ci0gICAgY3BwLT5lbHNldHJhY2tlciA9IDA7Ci0gICAg
Y3BwLT50b2tlbnNCZWZvcmVFT0YgPSAwOwotICAgIHJldHVybiAxOwotfQotCi0vL0ludGlhbGl6
aW5nIHRoZSBQcmVwcm9jZXNzb3IuCi0KLWludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpCi17Ci0g
ICAjICBkZWZpbmUgQ1BQX1NUVUZGIHRydWUKLSAgICAgICAgIyAgaWZkZWYgQ1BQX1NUVUZGCi0g
ICAgICAgICAgICBGcmVlQ1BQU3RydWN0KCk7Ci0gICAgICAgICAgICBJbml0Q1BQU3RydWN0KCk7
Ci0gICAgICAgICAgICBjcHAtPm9wdGlvbnMuUXVpZXQgPSAxOwotICAgICAgICAgICAgY3BwLT5v
cHRpb25zLnByb2ZpbGVTdHJpbmcgPSAiZ2VuZXJpYyI7Ci0gICAgICAgICAgICBpZiAoIUluaXRB
dG9tVGFibGUoYXRhYmxlLCAwKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAg
ICAgIGlmICghSW5pdFNjYW5uZXIoY3BwKSkKLQkgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAg
ICAjICBlbmRpZgotICByZXR1cm4gMDsgCi19Ci0KLS8vRnJlZUNQUFN0cnVjdCgpIC0gRnJlZSB0
aGUgQ1BQIHN0cnVjdHVyZS4KLQotaW50IEZyZWVDUFBTdHJ1Y3Qodm9pZCkKLXsKLSAgICBpZiAo
cmVmQ291bnQpCi0gICAgewotICAgICAgIGZyZWUoY3BwKTsKLSAgICAgICByZWZDb3VudC0tOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gMTsKLX0KLQotLy9GaW5hbGl6aW5nIHRoZSBQcmVwcm9j
ZXNzb3IuCi0KLWludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKQotewotICAgIyAgZGVmaW5l
IENQUF9TVFVGRiB0cnVlCi0gICAgICAgICMgIGlmZGVmIENQUF9TVFVGRgotICAgICAgICAgICAg
RnJlZUF0b21UYWJsZShhdGFibGUpOwotICAgICAgICAgICAgRnJlZUNQUFN0cnVjdCgpOwotICAg
ICAgICAgICAgRnJlZVNjYW5uZXIoKTsKLSAgICAgICAjICBlbmRpZgotICByZXR1cm4gMDsgCi19
Ci0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBjcHBzdHJ1Y3QuYyAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvZ2VuZXJhdGVfcGFyc2VyLnNoIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9nZW5lcmF0ZV9wYXJzZXIuc2gKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTljNzBiMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvZ2VuZXJh
dGVfcGFyc2VyLnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9iYXNoCisjIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyMgR2VuZXJh
dGVzIHZhcmlvdXMgY29tcG9uZW50cyBvZiBHTFNMIEVTIHByZXByb2Nlc3Nvci4KKworcnVuX2Zs
ZXgoKQoreworaW5wdXRfZmlsZT0kc2NyaXB0X2Rpci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0
X2Rpci8kMgorZmxleCAtLW5vbGluZSAtLW5vdW5pc3RkIC0tb3V0ZmlsZT0kb3V0cHV0X3NvdXJj
ZSAkaW5wdXRfZmlsZQorfQorCitydW5fYmlzb24oKQoreworaW5wdXRfZmlsZT0kc2NyaXB0X2Rp
ci8kMQorb3V0cHV0X3NvdXJjZT0kc2NyaXB0X2Rpci8kMgorYmlzb24gLS1uby1saW5lcyAtLXNr
ZWxldG9uPXlhY2MuYyAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQorfQorCitz
Y3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKKworIyBHZW5lcmF0ZSBwcmVwcm9jZXNzb3IKK3J1bl9m
bGV4IFRva2VuaXplci5sIFRva2VuaXplci5jcHAKK3J1bl9iaXNvbiBFeHByZXNzaW9uUGFyc2Vy
LnkgRXhwcmVzc2lvblBhcnNlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMjk1MjFhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMKKysrIC9kZXYvbnVsbApA
QCAtMSwxNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIw
MDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBz
dXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRp
b24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2Fy
ZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3Qg
YWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWws
IG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhp
cyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1
c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdh
cmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFy
eQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNv
ZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwg
dGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFs
bCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0
aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1D
b3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQg
aW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBp
bXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAot
bGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91
ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElB
IFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBo
ZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlU
QVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1F
TlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9S
Ci1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJ
VEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxF
IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBS
T0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBB
UklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNB
VElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVS
IENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElG
Ci1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZm5kZWYgX01TQ19WRVIK
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL21lbW9yeS5oIgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlOiA0NzA2KQotI2VuZGlmCi0KLS8vIGRlZmF1bHQgYWxpZ25tZW50IGFuZCBjaHVu
a3NpemUsIGlmIGNhbGxlZCB3aXRoIDAgYXJndW1lbnRzCi0jZGVmaW5lIENIVU5LU0laRSAgICAg
ICAoNjQqMTAyNCkKLSNkZWZpbmUgQUxJR04gICAgICAgICAgIDgKLQotLy8gd2UgbmVlZCB0byBj
YWxsIHRoZSBgcmVhbCcgbWFsbG9jIGFuZCBmcmVlLCBub3Qgb3VyIHJlcGxhY2VtZW50cwotI3Vu
ZGVmIG1hbGxvYwotI3VuZGVmIGZyZWUKLQotc3RydWN0IGNodW5rIHsKLSAgICBzdHJ1Y3QgY2h1
bmsgICAgICAgICpuZXh0OwotfTsKLQotc3RydWN0IGNsZWFudXAgewotICAgIHN0cnVjdCBjbGVh
bnVwICAgICAgKm5leHQ7Ci0gICAgdm9pZCAgICAgICAgICAgICAgICAoKmZuKSh2b2lkICopOwot
ICAgIHZvaWQgICAgICAgICAgICAgICAgKmFyZzsKLX07Ci0KLXN0cnVjdCBNZW1vcnlQb29sX3Jl
YyB7Ci0gICAgc3RydWN0IGNodW5rICAgICAgICAqbmV4dDsKLSAgICB1aW50cHRyX3QgICAgICAg
ICAgIGZyZWUsIGVuZDsKLSAgICBzaXplX3QgICAgICAgICAgICAgIGNodW5rc2l6ZTsKLSAgICB1
aW50cHRyX3QgICAgICAgICAgIGFsaWdubWFzazsKLSAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpj
bGVhbnVwOwotfTsKLQotTWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6
ZSwgdW5zaWduZWQgaW50IGFsaWduKQotewotICAgIE1lbW9yeVBvb2wgICpwb29sOwotCi0gICAg
aWYgKGFsaWduID09IDApIGFsaWduID0gQUxJR047Ci0gICAgaWYgKGNodW5rc2l6ZSA9PSAwKSBj
aHVua3NpemUgPSBDSFVOS1NJWkU7Ci0gICAgaWYgKGFsaWduICYgKGFsaWduLTEpKSByZXR1cm4g
MDsKLSAgICBpZiAoY2h1bmtzaXplIDwgc2l6ZW9mKE1lbW9yeVBvb2wpKSByZXR1cm4gMDsKLSAg
ICBpZiAoY2h1bmtzaXplICYgKGFsaWduLTEpKSByZXR1cm4gMDsKLSAgICBpZiAoIShwb29sID0g
bWFsbG9jKGNodW5rc2l6ZSkpKSByZXR1cm4gMDsKLSAgICBwb29sLT5uZXh0ID0gMDsKLSAgICBw
b29sLT5jaHVua3NpemUgPSBjaHVua3NpemU7Ci0gICAgcG9vbC0+YWxpZ25tYXNrID0gKHVpbnRw
dHJfdCkoYWxpZ24pLTE7ICAKLSAgICBwb29sLT5mcmVlID0gKCh1aW50cHRyX3QpKHBvb2wgKyAx
KSArIHBvb2wtPmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrOwotICAgIHBvb2wtPmVuZCA9
ICh1aW50cHRyX3QpcG9vbCArIGNodW5rc2l6ZTsKLSAgICBwb29sLT5jbGVhbnVwID0gMDsKLSAg
ICByZXR1cm4gcG9vbDsKLX0KLQotdm9pZCBtZW1fRnJlZVBvb2woTWVtb3J5UG9vbCAqcG9vbCkK
LXsKLSAgICBzdHJ1Y3QgY2xlYW51cCAgICAgICpjbGVhbnVwOwotICAgIHN0cnVjdCBjaHVuayAg
ICAgICAgKnAsICpuZXh0OwotCi0gICAgZm9yIChjbGVhbnVwID0gcG9vbC0+Y2xlYW51cDsgY2xl
YW51cDsgY2xlYW51cCA9IGNsZWFudXAtPm5leHQpIHsKLSAgICAgICAgY2xlYW51cC0+Zm4oY2xl
YW51cC0+YXJnKTsKLSAgICB9Ci0gICAgZm9yIChwID0gKHN0cnVjdCBjaHVuayAqKXBvb2w7IHA7
IHAgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBwLT5uZXh0OwotICAgICAgICBmcmVlKHApOwot
ICAgIH0KLX0KLQotdm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnBvb2wsIHNpemVfdCBzaXpl
KQotewotICAgIHN0cnVjdCBjaHVuayAqY2g7Ci0gICAgdm9pZCAqcnYgPSAodm9pZCAqKXBvb2wt
PmZyZWU7Ci0gICAgc2l6ZSA9IChzaXplICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGln
bm1hc2s7Ci0gICAgaWYgKHNpemUgPD0gMCkgc2l6ZSA9IHBvb2wtPmFsaWdubWFzazsKLSAgICBw
b29sLT5mcmVlICs9IHNpemU7Ci0gICAgaWYgKHBvb2wtPmZyZWUgPiBwb29sLT5lbmQgfHwgcG9v
bC0+ZnJlZSA8ICh1aW50cHRyX3QpcnYpIHsKLSAgICAgICAgc2l6ZV90IG1pbnJlcSA9IChzaXpl
ICsgc2l6ZW9mKHN0cnVjdCBjaHVuaykgKyBwb29sLT5hbGlnbm1hc2spCi0gICAgICAgICAgICAg
ICAgICAgICAgJiB+cG9vbC0+YWxpZ25tYXNrOwotICAgICAgICBwb29sLT5mcmVlID0gKHVpbnRw
dHJfdClydjsKLSAgICAgICAgaWYgKG1pbnJlcSA+PSBwb29sLT5jaHVua3NpemUpIHsKLSAgICAg
ICAgICAgIC8vIHJlcXVlc3Qgc2l6ZSBpcyB0b28gYmlnIGZvciB0aGUgY2h1bmtzaXplLCBzbyBh
bGxvY2F0ZSBpdCBhcwotICAgICAgICAgICAgLy8gYSBzaW5nbGUgY2h1bmsgb2YgdGhlIHJpZ2h0
IHNpemUKLSAgICAgICAgICAgIGNoID0gbWFsbG9jKG1pbnJlcSk7Ci0gICAgICAgICAgICBpZiAo
IWNoKSByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNoID0gbWFsbG9j
KHBvb2wtPmNodW5rc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIWNoKSByZXR1cm4gMDsKLSAgICAg
ICAgICAgIHBvb2wtPmZyZWUgPSAodWludHB0cl90KWNoICsgbWlucmVxOwotICAgICAgICAgICAg
cG9vbC0+ZW5kID0gKHVpbnRwdHJfdCljaCArIHBvb2wtPmNodW5rc2l6ZTsKLSAgICAgICAgfQot
ICAgICAgICBjaC0+bmV4dCA9IHBvb2wtPm5leHQ7Ci0gICAgICAgIHBvb2wtPm5leHQgPSBjaDsK
LSAgICAgICAgcnYgPSAodm9pZCAqKSgoKHVpbnRwdHJfdCkoY2grMSkgKyBwb29sLT5hbGlnbm1h
c2spICYgfnBvb2wtPmFsaWdubWFzayk7Ci0gICAgfQotICAgIHJldHVybiBydjsKLX0KLQotaW50
IG1lbV9BZGRDbGVhbnVwKE1lbW9yeVBvb2wgKnBvb2wsIHZvaWQgKCpmbikodm9pZCAqKSwgdm9p
ZCAqYXJnKSB7Ci0gICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7Ci0KLSAgICBwb29sLT5mcmVl
ID0gKHBvb2wtPmZyZWUgKyBzaXplb2Yodm9pZCAqKSAtIDEpICYgfihzaXplb2Yodm9pZCAqKS0x
KTsKLSAgICBjbGVhbnVwID0gbWVtX0FsbG9jKHBvb2wsIHNpemVvZihzdHJ1Y3QgY2xlYW51cCkp
OwotICAgIGlmICghY2xlYW51cCkgcmV0dXJuIC0xOwotICAgIGNsZWFudXAtPm5leHQgPSBwb29s
LT5jbGVhbnVwOwotICAgIGNsZWFudXAtPmZuID0gZm47Ci0gICAgY2xlYW51cC0+YXJnID0gYXJn
OwotICAgIHBvb2wtPmNsZWFudXAgPSBjbGVhbnVwOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9t
ZW1vcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbWVtb3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmY2FkYjMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9tZW1vcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJ
QSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4K
LWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRp
b24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhl
c2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2Ug
ZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQot
c29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUg
YnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklE
SUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBO
VklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUK
LSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0
cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9u
cywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSBy
ZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29w
eXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10
ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5W
SURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFy
a3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4
Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMg
b3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhl
cmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhh
dCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIg
d29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4g
Tm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FS
RSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQs
Ci1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBB
TE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZF
TlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5D
SURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVT
RSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUK
LU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZ
IE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklM
SVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwot
I2lmbmRlZiBfX01FTU9SWV9ICi0jZGVmaW5lIF9fTUVNT1JZX0gKLQotI2luY2x1ZGUgPHN0ZGRl
Zi5oPgotCi10eXBlZGVmIHN0cnVjdCBNZW1vcnlQb29sX3JlYyBNZW1vcnlQb29sOwotCi1leHRl
cm4gTWVtb3J5UG9vbCAqbWVtX0NyZWF0ZVBvb2woc2l6ZV90IGNodW5rc2l6ZSwgdW5zaWduZWQg
aW50IGFsaWduKTsKLWV4dGVybiB2b2lkIG1lbV9GcmVlUG9vbChNZW1vcnlQb29sICopOwotZXh0
ZXJuIHZvaWQgKm1lbV9BbGxvYyhNZW1vcnlQb29sICpwLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4g
dm9pZCAqbWVtX1JlYWxsb2MoTWVtb3J5UG9vbCAqcCwgdm9pZCAqb2xkLCBzaXplX3Qgb2xkc2l6
ZSwgc2l6ZV90IG5ld3NpemUpOwotZXh0ZXJuIGludCBtZW1fQWRkQ2xlYW51cChNZW1vcnlQb29s
ICpwLCB2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZyk7Ci0KLSNlbmRpZiAvKiBfX01FTU9S
WV9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3MuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWE3NWE5Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NF
U1NPUl9ESUFHTk9TVElDU19IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi1uYW1lc3BhY2UgcHAK
LXsKLQotc3RydWN0IFNvdXJjZUxvY2F0aW9uOwotCi0vLyBCYXNlIGNsYXNzIGZvciByZXBvcnRp
bmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KLS8vIERlcml2ZWQgY2xhc3NlcyBhcmUgcmVzcG9uc2li
bGUgZm9yIGZvcm1hdHRpbmcgYW5kIHByaW50aW5nIHRoZSBtZXNzYWdlcy4KLWNsYXNzIERpYWdu
b3N0aWNzCi17Ci0gIHB1YmxpYzoKLSAgICBlbnVtIFNldmVyaXR5Ci0gICAgewotICAgICAgICBF
UlJPUiwKLSAgICAgICAgV0FSTklORwotICAgIH07Ci0gICAgZW51bSBJRAotICAgIHsKLSAgICAg
ICAgRVJST1JfQkVHSU4sCi0gICAgICAgIElOVEVSTkFMX0VSUk9SLAotICAgICAgICBPVVRfT0Zf
TUVNT1JZLAotICAgICAgICBJTlZBTElEX0NIQVJBQ1RFUiwKLSAgICAgICAgSU5WQUxJRF9OVU1C
RVIsCi0gICAgICAgIElOVkFMSURfRVhQUkVTU0lPTiwKLSAgICAgICAgRElWSVNJT05fQllfWkVS
TywKLSAgICAgICAgRU9GX0lOX0NPTU1FTlQsCi0gICAgICAgIEVPRl9JTl9ESVJFQ1RJVkUsCi0g
ICAgICAgIFVORVhQRUNURURfVE9LRU4sCi0gICAgICAgIERJUkVDVElWRV9JTlZBTElEX05BTUUs
Ci0gICAgICAgIE1BQ1JPX05BTUVfUkVTRVJWRUQsCi0gICAgICAgIE1BQ1JPX1JFREVGSU5FRCwK
LSAgICAgICAgTUFDUk9fUFJFREVGSU5FRF9SRURFRklORUQsCi0gICAgICAgIE1BQ1JPX1BSRURF
RklORURfVU5ERUZJTkVELAotICAgICAgICBNQUNST19VTlRFUk1JTkFURURfSU5WT0NBVElPTiwK
LSAgICAgICAgTUFDUk9fVE9PX0ZFV19BUkdTLAotICAgICAgICBNQUNST19UT09fTUFOWV9BUkdT
LAotICAgICAgICBDT05ESVRJT05BTF9FTkRJRl9XSVRIT1VUX0lGLAotICAgICAgICBDT05ESVRJ
T05BTF9FTFNFX1dJVEhPVVRfSUYsCi0gICAgICAgIENPTkRJVElPTkFMX0VMU0VfQUZURVJfRUxT
RSwKLSAgICAgICAgQ09ORElUSU9OQUxfRUxJRl9XSVRIT1VUX0lGLAotICAgICAgICBDT05ESVRJ
T05BTF9FTElGX0FGVEVSX0VMU0UsCi0gICAgICAgIENPTkRJVElPTkFMX1VOVEVSTUlOQVRFRCwK
LSAgICAgICAgSU5WQUxJRF9FWFRFTlNJT05fTkFNRSwKLSAgICAgICAgSU5WQUxJRF9FWFRFTlNJ
T05fQkVIQVZJT1IsCi0gICAgICAgIElOVkFMSURfRVhURU5TSU9OX0RJUkVDVElWRSwKLSAgICAg
ICAgSU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9WRVJTSU9OX0RJUkVD
VElWRSwKLSAgICAgICAgSU5WQUxJRF9MSU5FX05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9GSUxF
X05VTUJFUiwKLSAgICAgICAgSU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKLSAgICAgICAgRVJST1Jf
RU5ELAotCi0gICAgICAgIFdBUk5JTkdfQkVHSU4sCi0gICAgICAgIENPTkRJVElPTkFMX1VORVhQ
RUNURURfVE9LRU4sCi0gICAgICAgIFVOUkVDT0dOSVpFRF9QUkFHTUEsCi0gICAgICAgIFdBUk5J
TkdfRU5ECi0gICAgfTsKLQotICAgIHZpcnR1YWwgfkRpYWdub3N0aWNzKCk7Ci0KLSAgICB2b2lk
IHJlcG9ydChJRCBpZCwgY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywgY29uc3Qgc3RkOjpzdHJp
bmcmIHRleHQpOwotCi0gIHByb3RlY3RlZDoKLSAgICBTZXZlcml0eSBzZXZlcml0eShJRCBpZCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoSUQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiB0ZXh0KSA9IDA7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRp
ZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJQUdOT1NUSUNTX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFn
bm9zdGljc0Jhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9uZXcvRGlhZ25vc3RpY3NCYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggN2IzMjU0MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJEaWFnbm9z
dGljcy5oIgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLQotbmFtZXNwYWNlIHBwCi17Ci0KLURpYWdu
b3N0aWNzOjp+RGlhZ25vc3RpY3MoKQotewotfQotCi12b2lkIERpYWdub3N0aWNzOjpyZXBvcnQo
SUQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlTG9jYXRpb24mIGxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCkKLXsK
LSAgICAvLyBUT0RPKGFsb2twKTogS2VlcCBhIGNvdW50IG9mIGVycm9ycyBhbmQgd2FybmluZ3Mu
Ci0gICAgcHJpbnQoaWQsIGxvYywgdGV4dCk7Ci19Ci0KLURpYWdub3N0aWNzOjpTZXZlcml0eSBE
aWFnbm9zdGljczo6c2V2ZXJpdHkoSUQgaWQpCi17Ci0gICAgaWYgKChpZCA+IEVSUk9SX0JFR0lO
KSAmJiAoaWQgPCBFUlJPUl9FTkQpKQotICAgICAgICByZXR1cm4gRVJST1I7Ci0KLSAgICBpZiAo
KGlkID4gV0FSTklOR19CRUdJTikgJiYgKGlkIDwgV0FSTklOR19FTkQpKQotICAgICAgICByZXR1
cm4gV0FSTklORzsKLQotICAgIGFzc2VydChmYWxzZSk7Ci0gICAgcmV0dXJuIEVSUk9SOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0RpcmVjdGl2
ZUhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFhZWVjMi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaXJlY3RpdmVIYW5kbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRElSRUNUSVZFX0hB
TkRMRVJfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9IQU5ETEVS
X0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgU291
cmNlTG9jYXRpb247Ci0KLS8vIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGRpcmVjdGl2ZXMuCi0v
LyBQcmVwcm9jZXNzb3IgdXNlcyB0aGlzIGNsYXNzIHRvIG5vdGlmeSB0aGUgY2xpZW50cyBhYm91
dCBjZXJ0YWluCi0vLyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gRGVyaXZlZCBjbGFzc2VzIGFy
ZSByZXNwb25zaWJsZSBmb3IKLS8vIGhhbmRsaW5nIHRoZW0gaW4gYW4gYXBwcm9wcmlhdGUgbWFu
bmVyLgotY2xhc3MgRGlyZWN0aXZlSGFuZGxlcgotewotICBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
RGlyZWN0aXZlSGFuZGxlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0
IFNvdXJjZUxvY2F0aW9uJiBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBtc2cpID0gMDsKLQotICAgIC8vIEhhbmRsZSBwcmFnbWEgb2YgZm9ybTog
I3ByYWdtYSBuYW1lWyh2YWx1ZSldCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVByYWdtYShjb25z
dCBTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeHRl
bnNpb24oY29uc3QgU291cmNlTG9jYXRpb24mIGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJlaGF2aW9yKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlVmVyc2lvbihjb25zdCBTb3VyY2VMb2NhdGlvbiYgbG9jLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKSA9IDA7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX0RJUkVDVElWRV9I
QU5ETEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5k
bGVyQmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhOTFlMWMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJEaXJlY3RpdmVIYW5kbGVyLmgiCi0KLW5h
bWVzcGFjZSBwcAotewotCi1EaXJlY3RpdmVIYW5kbGVyOjp+RGlyZWN0aXZlSGFuZGxlcigpCi17
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0Rp
cmVjdGl2ZVBhcnNlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NWE5MGUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5OSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIkRpcmVjdGl2ZVBhcnNlci5oIgotCi0j
aW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPHNzdHJlYW0+
Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIkRpcmVjdGl2ZUhhbmRsZXIu
aCIKLSNpbmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCi0jaW5jbHVkZSAiTWFjcm9FeHBhbmRl
ci5oIgotI2luY2x1ZGUgIlRva2VuLmgiCi0jaW5jbHVkZSAiVG9rZW5pemVyLmgiCi0KLW5hbWVz
cGFjZSB7Ci1lbnVtIERpcmVjdGl2ZVR5cGUKLXsKLSAgICBESVJFQ1RJVkVfTk9ORSwKLSAgICBE
SVJFQ1RJVkVfREVGSU5FLAotICAgIERJUkVDVElWRV9VTkRFRiwKLSAgICBESVJFQ1RJVkVfSUYs
Ci0gICAgRElSRUNUSVZFX0lGREVGLAotICAgIERJUkVDVElWRV9JRk5ERUYsCi0gICAgRElSRUNU
SVZFX0VMU0UsCi0gICAgRElSRUNUSVZFX0VMSUYsCi0gICAgRElSRUNUSVZFX0VORElGLAotICAg
IERJUkVDVElWRV9FUlJPUiwKLSAgICBESVJFQ1RJVkVfUFJBR01BLAotICAgIERJUkVDVElWRV9F
WFRFTlNJT04sCi0gICAgRElSRUNUSVZFX1ZFUlNJT04sCi0gICAgRElSRUNUSVZFX0xJTkUKLX07
Ci19ICAvLyBuYW1lc3BhY2UKLQotc3RhdGljIERpcmVjdGl2ZVR5cGUgZ2V0RGlyZWN0aXZlKGNv
bnN0IHBwOjpUb2tlbiogdG9rZW4pCi17Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtE
aXJlY3RpdmVEZWZpbmUoImRlZmluZSIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBr
RGlyZWN0aXZlVW5kZWYoInVuZGVmIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtE
aXJlY3RpdmVJZigiaWYiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZUlmZGVmKCJpZmRlZiIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZl
SWZuZGVmKCJpZm5kZWYiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZUVsc2UoImVsc2UiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVs
aWYoImVsaWYiKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2ZUVuZGlm
KCJlbmRpZiIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRXJyb3Io
ImVycm9yIik7Ci0gICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtEaXJlY3RpdmVQcmFnbWEo
InByYWdtYSIpOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrRGlyZWN0aXZlRXh0ZW5z
aW9uKCJleHRlbnNpb24iKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVjdGl2
ZVZlcnNpb24oInZlcnNpb24iKTsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0RpcmVj
dGl2ZUxpbmUoImxpbmUiKTsKLQotICAgIGlmICh0b2tlbi0+dHlwZSAhPSBwcDo6VG9rZW46OklE
RU5USUZJRVIpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfTk9ORTsKLQotICAgIGlmICh0b2tl
bi0+dmFsdWUgPT0ga0RpcmVjdGl2ZURlZmluZSkKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9E
RUZJTkU7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVVbmRlZikKLSAg
ICAgICAgcmV0dXJuIERJUkVDVElWRV9VTkRFRjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUg
PT0ga0RpcmVjdGl2ZUlmKQotICAgICAgICByZXR1cm4gRElSRUNUSVZFX0lGOwotICAgIGVsc2Ug
aWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlSWZkZWYpCi0gICAgICAgIHJldHVybiBESVJF
Q1RJVkVfSUZERUY7Ci0gICAgZWxzZSBpZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVJZm5k
ZWYpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfSUZOREVGOwotICAgIGVsc2UgaWYgKHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxzZSkKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9FTFNF
OwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlRWxpZikKLSAgICAgICAg
cmV0dXJuIERJUkVDVElWRV9FTElGOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGly
ZWN0aXZlRW5kaWYpCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVfRU5ESUY7Ci0gICAgZWxzZSBp
ZiAodG9rZW4tPnZhbHVlID09IGtEaXJlY3RpdmVFcnJvcikKLSAgICAgICAgcmV0dXJuIERJUkVD
VElWRV9FUlJPUjsKLSAgICBlbHNlIGlmICh0b2tlbi0+dmFsdWUgPT0ga0RpcmVjdGl2ZVByYWdt
YSkKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9QUkFHTUE7Ci0gICAgZWxzZSBpZiAodG9rZW4t
PnZhbHVlID09IGtEaXJlY3RpdmVFeHRlbnNpb24pCi0gICAgICAgIHJldHVybiBESVJFQ1RJVkVf
RVhURU5TSU9OOwotICAgIGVsc2UgaWYgKHRva2VuLT52YWx1ZSA9PSBrRGlyZWN0aXZlVmVyc2lv
bikKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9WRVJTSU9OOwotICAgIGVsc2UgaWYgKHRva2Vu
LT52YWx1ZSA9PSBrRGlyZWN0aXZlTGluZSkKLSAgICAgICAgcmV0dXJuIERJUkVDVElWRV9MSU5F
OwotCi0gICAgcmV0dXJuIERJUkVDVElWRV9OT05FOwotfQotCi1zdGF0aWMgYm9vbCBpc0NvbmRp
dGlvbmFsRGlyZWN0aXZlKERpcmVjdGl2ZVR5cGUgZGlyZWN0aXZlKQotewotICAgIHN3aXRjaCAo
ZGlyZWN0aXZlKQotICAgIHsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgotICAgICAgY2FzZSBE
SVJFQ1RJVkVfSUZERUY6Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Ci0gICAgICBjYXNl
IERJUkVDVElWRV9FTFNFOgotICAgICAgY2FzZSBESVJFQ1RJVkVfRUxJRjoKLSAgICAgIGNhc2Ug
RElSRUNUSVZFX0VORElGOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dG9rZW4gcmVwcmVzZW50cyBFbmQgT2YgRGlyZWN0aXZlLgotc3RhdGljIGJvb2wgaXNFT0QoY29u
c3QgcHA6OlRva2VuKiB0b2tlbikKLXsKLSAgICByZXR1cm4gKHRva2VuLT50eXBlID09ICdcbicp
IHx8ICh0b2tlbi0+dHlwZSA9PSBwcDo6VG9rZW46OkxBU1QpOwotfQotCi1zdGF0aWMgdm9pZCBz
a2lwVW50aWxFT0QocHA6OkxleGVyKiBsZXhlciwgcHA6OlRva2VuKiB0b2tlbikKLXsKLSAgICB3
aGlsZSghaXNFT0QodG9rZW4pKQotICAgIHsKLSAgICAgICAgbGV4ZXItPmxleCh0b2tlbik7Ci0g
ICAgfQotfQotCi1zdGF0aWMgYm9vbCBpc01hY3JvTmFtZVJlc2VydmVkKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lKQotewotICAgIC8vIE5hbWVzIHByZWZpeGVkIHdpdGggIkdMXyIgYXJlIHJlc2Vy
dmVkLgotICAgIGlmIChuYW1lLnN1YnN0cigwLCAzKSA9PSAiR0xfIikKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBOYW1lcyBjb250YWluaW5nIHR3byBjb25zZWN1dGl2ZSB1bmRlcnNj
b3JlcyBhcmUgcmVzZXJ2ZWQuCi0gICAgaWYgKG5hbWUuZmluZCgiX18iKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXN0YXRpYyBib29sIGlzTWFjcm9QcmVkZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHA6Ok1hY3JvU2V0JiBtYWNyb1Nl
dCkKLXsKLSAgICBwcDo6TWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYWNyb1NldC5m
aW5kKG5hbWUpOwotICAgIHJldHVybiBpdGVyICE9IG1hY3JvU2V0LmVuZCgpID8gaXRlci0+c2Vj
b25kLnByZWRlZmluZWQgOiBmYWxzZTsKLX0KLQotbmFtZXNwYWNlIHBwCi17Ci0KLWNsYXNzIERl
ZmluZWRQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKLXsKLSAgcHVibGljOgotICAgIERlZmluZWRQYXJz
ZXIoTGV4ZXIqIGxleGVyLAotICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9TZXQqIG1hY3Jv
U2V0LAotICAgICAgICAgICAgICAgICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6Ci0gICAg
ICAgIG1MZXhlcihsZXhlciksCi0gICAgICAgIG1NYWNyb1NldChtYWNyb1NldCksCi0gICAgICAg
IG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLSAgICB7Ci0gICAgfQotCi0gIHByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKLSAgICB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnN0cmluZyBrRGVmaW5lZCgiZGVmaW5lZCIpOwotCi0gICAgICAgIG1MZXhl
ci0+bGV4KHRva2VuKTsKLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElG
SUVSKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodG9rZW4tPnZhbHVlICE9IGtE
ZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGJvb2wgcGFyZW4gPSBmYWxz
ZTsKLSAgICAgICAgbUxleGVyLT5sZXgodG9rZW4pOwotICAgICAgICBpZiAodG9rZW4tPnR5cGUg
PT0gJygnKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJlbiA9IHRydWU7Ci0gICAgICAgICAg
ICBtTGV4ZXItPmxleCh0b2tlbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodG9rZW4tPnR5
cGUgIT0gVG9rZW46OklERU5USUZJRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAg
ICAgICAgICAgc2tpcFVudGlsRU9EKG1MZXhlciwgdG9rZW4pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIE1hY3JvU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1h
Y3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGV4cHJlc3Np
b24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAiMSIgOiAiMCI7Ci0KLSAgICAgICAgaWYg
KHBhcmVuKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTGV4ZXItPmxleCh0b2tlbik7Ci0gICAg
ICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gJyknKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VO
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICBza2lwVW50aWxFT0QobUxleGVyLCB0b2tl
bik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gV2UgaGF2ZSBhIHZhbGlkIGRlZmluZWQgb3BlcmF0b3IuCi0gICAgICAgIC8v
IENvbnZlcnQgdGhlIGN1cnJlbnQgdG9rZW4gaW50byBhIENPTlNUX0lOVCB0b2tlbi4KLSAgICAg
ICAgdG9rZW4tPnR5cGUgPSBUb2tlbjo6Q09OU1RfSU5UOwotICAgICAgICB0b2tlbi0+dmFsdWUg
PSBleHByZXNzaW9uOwotICAgIH0KLQotICBwcml2YXRlOgotICAgIExleGVyKiBtTGV4ZXI7Ci0g
ICAgY29uc3QgTWFjcm9TZXQqIG1NYWNyb1NldDsKLSAgICBEaWFnbm9zdGljcyogbURpYWdub3N0
aWNzOwotfTsKLQotRGlyZWN0aXZlUGFyc2VyOjpEaXJlY3RpdmVQYXJzZXIoVG9rZW5pemVyKiB0
b2tlbml6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb1NldCogbWFj
cm9TZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RpdmVIYW5k
bGVyKiBkaXJlY3RpdmVIYW5kbGVyKSA6Ci0gICAgbVRva2VuaXplcih0b2tlbml6ZXIpLAotICAg
IG1NYWNyb1NldChtYWNyb1NldCksCi0gICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKLSAg
ICBtRGlyZWN0aXZlSGFuZGxlcihkaXJlY3RpdmVIYW5kbGVyKQotewotfQotCi12b2lkIERpcmVj
dGl2ZVBhcnNlcjo6bGV4KFRva2VuKiB0b2tlbikKLXsKLSAgICBkbwotICAgIHsKLSAgICAgICAg
bVRva2VuaXplci0+bGV4KHRva2VuKTsKLQotICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9r
ZW46OlBQX0hBU0gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlRGlyZWN0aXZlKHRva2Vu
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6TEFTVCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IENvbmRpdGlvbmFsQmxvY2smIGJs
b2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgICAgICAgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9VTlRFUk1JTkFURUQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2subG9jYXRpb24sIGJsb2NrLnR5
cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
IH0gd2hpbGUgKHNraXBwaW5nKCkgfHwgKHRva2VuLT50eXBlID09ICdcbicpKTsKLX0KLQotdm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbikKLXsKLSAgICBh
c3NlcnQodG9rZW4tPnR5cGUgPT0gVG9rZW46OlBQX0hBU0gpOwotCi0gICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKLSAgICBEaXJlY3RpdmVUeXBlIGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZSh0
b2tlbik7Ci0KLSAgICAvLyBXaGlsZSBpbiBhbiBleGNsdWRlZCBjb25kaXRpb25hbCBibG9jay9n
cm91cCwKLSAgICAvLyB3ZSBvbmx5IHBhcnNlIGNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMuCi0gICAg
aWYgKHNraXBwaW5nKCkgJiYgIWlzQ29uZGl0aW9uYWxEaXJlY3RpdmUoZGlyZWN0aXZlKSkKLSAg
ICB7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2goZGlyZWN0aXZlKQotICAgIHsKLSAgICAgIGNhc2Ug
RElSRUNUSVZFX05PTkU6Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpESVJFQ1RJVkVfSU5WQUxJRF9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfREVG
SU5FOgotICAgICAgICBwYXJzZURlZmluZSh0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBESVJFQ1RJVkVfVU5ERUY6Ci0gICAgICAgIHBhcnNlVW5kZWYodG9rZW4pOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0lGOgotICAgICAgICBwYXJzZUlmKHRva2Vu
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKLSAgICAgICAg
cGFyc2VJZmRlZih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVf
SUZOREVGOgotICAgICAgICBwYXJzZUlmbmRlZih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBESVJFQ1RJVkVfRUxTRToKLSAgICAgICAgcGFyc2VFbHNlKHRva2VuKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9FTElGOgotICAgICAgICBwYXJzZUVsaWYo
dG9rZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRElSRUNUSVZFX0VORElGOgotICAg
ICAgICBwYXJzZUVuZGlmKHRva2VuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERJUkVD
VElWRV9FUlJPUjoKLSAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBESVJFQ1RJVkVfUFJBR01BOgotICAgICAgICBwYXJzZVByYWdtYSh0b2tlbik7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJFQ1RJVkVfRVhURU5TSU9OOgotICAgICAg
ICBwYXJzZUV4dGVuc2lvbih0b2tlbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBESVJF
Q1RJVkVfVkVSU0lPTjoKLSAgICAgICAgcGFyc2VWZXJzaW9uKHRva2VuKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIERJUkVDVElWRV9MSU5FOgotICAgICAgICBwYXJzZUxpbmUodG9rZW4p
OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydChmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVyLCB0
b2tlbik7Ci0gICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpMQVNUKQotICAgIHsKLSAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkVPRl9JTl9ESVJFQ1RJVkUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZURlZmluZShUb2tlbiog
dG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0RF
RklORSk7Ci0KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICh0b2tlbi0+dHlw
ZSAhPSBUb2tlbjo6SURFTlRJRklFUikKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGlzTWFjcm9QcmVkZWZpbmVkKHRva2VuLT52YWx1ZSwgKm1NYWNyb1Nl
dCkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFD
Uk9fUFJFREVGSU5FRF9SRURFRklORUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoaXNNYWNyb05hbWVSZXNlcnZlZCh0b2tlbi0+dmFsdWUpKQotICAgIHsKLSAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1BQ1JPX05BTUVfUkVTRVJWRUQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1hY3JvIG1hY3JvOwotICAgIG1hY3Jv
LnR5cGUgPSBNYWNybzo6a1R5cGVPYmo7Ci0gICAgbWFjcm8ubmFtZSA9IHRva2VuLT52YWx1ZTsK
LQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgaWYgKHRva2VuLT50eXBlID09ICco
JyAmJiAhdG9rZW4tPmhhc0xlYWRpbmdTcGFjZSgpKQotICAgIHsKLSAgICAgICAgLy8gRnVuY3Rp
b24tbGlrZSBtYWNyby4gQ29sbGVjdCBhcmd1bWVudHMuCi0gICAgICAgIG1hY3JvLnR5cGUgPSBN
YWNybzo6a1R5cGVGdW5jOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtVG9rZW5pemVyLT5s
ZXgodG9rZW4pOwotICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElG
SUVSKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbWFjcm8ucGFyYW1ldGVy
cy5wdXNoX2JhY2sodG9rZW4tPnZhbHVlKTsKLQotICAgICAgICAgICAgbVRva2VuaXplci0+bGV4
KHRva2VuKTsgIC8vIEdldCAnLCcuCi0gICAgICAgIH0gd2hpbGUgKHRva2VuLT50eXBlID09ICcs
Jyk7Ci0KLSAgICAgICAgaWYgKHRva2VuLT50eXBlICE9ICcpJykKLSAgICAgICAgewotICAgICAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7ICAvLyBH
ZXQgJyknLgotICAgIH0KLQotICAgIHdoaWxlICgodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRv
a2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKLSAgICB7Ci0gICAgICAgIC8vIFJlc2V0IHRoZSB0
b2tlbiBsb2NhdGlvbiBiZWNhdXNlIGl0IGlzIHVubmVjZXNzYXJ5IGluIHJlcGxhY2VtZW50Ci0g
ICAgICAgIC8vIGxpc3QuIFJlc2V0dGluZyBpdCBhbHNvIGFsbG93cyB1cyB0byByZXVzZSBUb2tl
bjo6ZXF1YWxzKCkgdG8KLSAgICAgICAgLy8gY29tcGFyZSBtYWNyb3MuCi0gICAgICAgIHRva2Vu
LT5sb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7Ci0gICAgICAgIG1hY3JvLnJlcGxhY2VtZW50
cy5wdXNoX2JhY2soKnRva2VuKTsKLSAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAg
ICB9Ci0gICAgaWYgKCFtYWNyby5yZXBsYWNlbWVudHMuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAg
IC8vIFdoaXRlc3BhY2UgcHJlY2VkaW5nIHRoZSByZXBsYWNlbWVudCBsaXN0IGlzIG5vdCBjb25z
aWRlcmVkIHBhcnQgb2YKLSAgICAgICAgLy8gdGhlIHJlcGxhY2VtZW50IGxpc3QgZm9yIGVpdGhl
ciBmb3JtIG9mIG1hY3JvLgotICAgICAgICBtYWNyby5yZXBsYWNlbWVudHMuZnJvbnQoKS5zZXRI
YXNMZWFkaW5nU3BhY2UoZmFsc2UpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBtYWNybyBy
ZWRlZmluaXRpb24uCi0gICAgTWFjcm9TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTWFjcm9T
ZXQtPmZpbmQobWFjcm8ubmFtZSk7Ci0gICAgaWYgKGl0ZXIgIT0gbU1hY3JvU2V0LT5lbmQoKSAm
JiAhbWFjcm8uZXF1YWxzKGl0ZXItPnNlY29uZCkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6TUFDUk9fUkVERUZJTkVELAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hY3JvLm5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1NYWNyb1NldC0+
aW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKG1hY3JvLm5hbWUsIG1hY3JvKSk7Ci19Ci0KLXZvaWQgRGly
ZWN0aXZlUGFyc2VyOjpwYXJzZVVuZGVmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0
RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfVU5ERUYpOwotCi0gICAgbVRva2VuaXplci0+
bGV4KHRva2VuKTsKLSAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIpCi0g
ICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RF
RF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTWFjcm9TZXQ6Oml0
ZXJhdG9yIGl0ZXIgPSBtTWFjcm9TZXQtPmZpbmQodG9rZW4tPnZhbHVlKTsKLSAgICBpZiAoaXRl
ciAhPSBtTWFjcm9TZXQtPmVuZCgpKQotICAgIHsKLSAgICAgICAgaWYgKGl0ZXItPnNlY29uZC5w
cmVkZWZpbmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6TUFDUk9fUFJFREVGSU5FRF9VTkRFRklORUQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtTWFjcm9TZXQtPmVyYXNl
KGl0ZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsK
LX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWYoVG9rZW4qIHRva2VuKQotewotICAg
IGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElWRV9JRik7Ci0gICAgcGFyc2VD
b25kaXRpb25hbElmKHRva2VuKTsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZk
ZWYoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJ
UkVDVElWRV9JRkRFRik7Ci0gICAgcGFyc2VDb25kaXRpb25hbElmKHRva2VuKTsKLX0KLQotdm9p
ZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlSWZuZGVmKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3Nl
cnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKTsKLSAgICBwYXJzZUNv
bmRpdGlvbmFsSWYodG9rZW4pOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbHNl
KFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3NlcnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJF
Q1RJVkVfRUxTRSk7Ci0KLSAgICBpZiAobUNvbmRpdGlvbmFsU3RhY2suZW1wdHkoKSkKLSAgICB7
Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9F
TFNFX1dJVEhPVVRfSUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2Nh
dGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRv
a2VuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbmRpdGlvbmFsQmxvY2smIGJs
b2NrID0gbUNvbmRpdGlvbmFsU3RhY2suYmFjaygpOwotICAgIGlmIChibG9jay5za2lwQmxvY2sp
Ci0gICAgewotICAgICAgICAvLyBObyBkaWFnbm9zdGljcy4gSnVzdCBza2lwIHRoZSB3aG9sZSBs
aW5lLgotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmIChibG9jay5mb3VuZEVsc2VHcm91cCkKLSAgICB7Ci0gICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05ESVRJT05BTF9FTFNFX0FG
VEVSX0VMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJsb2NrLmZvdW5kRWxzZUdyb3VwID0gdHJ1
ZTsKLSAgICBibG9jay5za2lwR3JvdXAgPSBibG9jay5mb3VuZFZhbGlkR3JvdXA7Ci0gICAgYmxv
Y2suZm91bmRWYWxpZEdyb3VwID0gdHJ1ZTsKLQotICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIGV4
dHJhIHRva2VucyBhZnRlciAjZWxzZS4KLSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAg
IGlmICghaXNFT0QodG9rZW4pKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQo
RGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX1VORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAg
c2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2VuKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUVsaWYoVG9rZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJl
Y3RpdmUodG9rZW4pID09IERJUkVDVElWRV9FTElGKTsKLQotICAgIGlmIChtQ29uZGl0aW9uYWxT
dGFjay5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OkNPTkRJVElPTkFMX0VMSUZfV0lUSE9VVF9JRiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50
aWxFT0QobVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q29uZGl0aW9uYWxCbG9jayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7Ci0gICAg
aWYgKGJsb2NrLnNraXBCbG9jaykKLSAgICB7Ci0gICAgICAgIC8vIE5vIGRpYWdub3N0aWNzLiBK
dXN0IHNraXAgdGhlIHdob2xlIGxpbmUuCi0gICAgICAgIHNraXBVbnRpbEVPRChtVG9rZW5pemVy
LCB0b2tlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJsb2NrLmZvdW5kRWxz
ZUdyb3VwKQotICAgIHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OkNPTkRJVElPTkFMX0VMSUZfQUZURVJfRUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0Qo
bVRva2VuaXplciwgdG9rZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChibG9j
ay5mb3VuZFZhbGlkR3JvdXApCi0gICAgewotICAgICAgICAvLyBEbyBub3QgcGFyc2UgdGhlIGV4
cHJlc3Npb24uCi0gICAgICAgIC8vIEFsc28gYmUgY2FyZWZ1bCBub3QgdG8gZW1pdCBhIGRpYWdu
b3N0aWMuCi0gICAgICAgIGJsb2NrLnNraXBHcm91cCA9IHRydWU7Ci0gICAgICAgIHNraXBVbnRp
bEVPRChtVG9rZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
bnQgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbklmKHRva2VuKTsKLSAgICBibG9jay5za2lw
R3JvdXAgPSBleHByZXNzaW9uID09IDA7Ci0gICAgYmxvY2suZm91bmRWYWxpZEdyb3VwID0gZXhw
cmVzc2lvbiAhPSAwOwotfQotCi12b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VFbmRpZihUb2tl
biogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZF
X0VORElGKTsKLQotICAgIGlmIChtQ29uZGl0aW9uYWxTdGFjay5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFMX0VORElG
X1dJVEhPVVRfSUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1Db25kaXRpb25hbFN0YWNrLnBvcF9i
YWNrKCk7Ci0KLSAgICAvLyBXYXJuIGlmIHRoZXJlIGFyZSB0b2tlbnMgYWZ0ZXIgI2VuZGlmLgot
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgaWYgKCFpc0VPRCh0b2tlbikpCi0gICAg
ewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6Q09ORElUSU9OQUxf
VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICBza2lwVW50aWxFT0QobVRva2VuaXplciwg
dG9rZW4pOwotICAgIH0KLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXJyb3IoVG9r
ZW4qIHRva2VuKQotewotICAgIGFzc2VydChnZXREaXJlY3RpdmUodG9rZW4pID09IERJUkVDVElW
RV9FUlJPUik7Ci0KLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgbVRva2VuaXpl
ci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0b2tl
bi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICBzdHJlYW0gPDwgKnRva2Vu
OwotICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIH0KLSAgICBtRGlyZWN0aXZl
SGFuZGxlci0+aGFuZGxlRXJyb3IodG9rZW4tPmxvY2F0aW9uLCBzdHJlYW0uc3RyKCkpOwotfQot
Ci0vLyBQYXJzZXMgcHJhZ21hIG9mIGZvcm06ICNwcmFnbWEgbmFtZVsodmFsdWUpXS4KLXZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVByYWdtYShUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0
KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX1BSQUdNQSk7Ci0KLSAgICBlbnVtIFN0
YXRlCi0gICAgewotICAgICAgICBQUkFHTUFfTkFNRSwKLSAgICAgICAgTEVGVF9QQVJFTiwKLSAg
ICAgICAgUFJBR01BX1ZBTFVFLAotICAgICAgICBSSUdIVF9QQVJFTgotICAgIH07Ci0KLSAgICBi
b29sIHZhbGlkID0gdHJ1ZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1lLCB2YWx1ZTsKLSAgICBpbnQg
c3RhdGUgPSBQUkFHTUFfTkFNRTsKLQotICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAg
d2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxB
U1QpKQotICAgIHsKLSAgICAgICAgc3dpdGNoKHN0YXRlKyspCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIFBSQUdNQV9OQU1FOgotICAgICAgICAgICAgbmFtZSA9IHRva2VuLT52YWx1ZTsKLSAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09IFRva2VuOjpJREVOVElG
SUVSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgTEVGVF9QQVJFTjoKLSAg
ICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2VuLT50eXBlID09ICcoJyk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFBSQUdNQV9WQUxVRToKLSAgICAgICAgICAgIHZh
bHVlID0gdG9rZW4tPnZhbHVlOwotICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiAodG9rZW4t
PnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBSSUdIVF9QQVJFTjoKLSAgICAgICAgICAgIHZhbGlkID0gdmFsaWQgJiYgKHRva2Vu
LT50eXBlID09ICcpJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgfQotCi0gICAgdmFsaWQgPSB2
YWxpZCAmJiAoKHN0YXRlID09IFBSQUdNQV9OQU1FKSB8fCAgICAgLy8gRW1wdHkgcHJhZ21hLgot
ICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBMRUZUX1BBUkVOKSB8fCAgICAgIC8vIFdp
dGhvdXQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID09IFJJR0hUX1BBUkVO
ICsgMSkpOyAgLy8gV2l0aCB2YWx1ZS4KLSAgICBpZiAoIXZhbGlkKQotICAgIHsKLSAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVOUkVDT0dOSVpFRF9QUkFHTUEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgbmFtZSk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKHN0YXRlID4gUFJBR01BX05BTUUpICAvLyBEbyBub3Qgbm90aWZ5IGZv
ciBlbXB0eSBwcmFnbWEuCi0gICAgewotICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxl
UHJhZ21hKHRva2VuLT5sb2NhdGlvbiwgbmFtZSwgdmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlRXh0ZW5zaW9uKFRva2VuKiB0b2tlbikKLXsKLSAgICBhc3Nl
cnQoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRVhURU5TSU9OKTsKLQotICAgIGVu
dW0gU3RhdGUKLSAgICB7Ci0gICAgICAgIEVYVF9OQU1FLAotICAgICAgICBDT0xPTiwKLSAgICAg
ICAgRVhUX0JFSEFWSU9SCi0gICAgfTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIHN0
ZDo6c3RyaW5nIG5hbWUsIGJlaGF2aW9yOwotICAgIGludCBzdGF0ZSA9IEVYVF9OQU1FOwotCi0g
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdc
bicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKHN0YXRlKyspCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVYVF9OQU1FOgotICAgICAg
ICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJRklFUikpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25v
c3RpY3M6OklOVkFMSURfRVhURU5TSU9OX05BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQp
IG5hbWUgPSB0b2tlbi0+dmFsdWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IENPTE9OOgotICAgICAgICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSAnOicpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBFWFRfQkVIQVZJT1I6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50
eXBlICE9IFRva2VuOjpJREVOVElGSUVSKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fQkVI
QVZJT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIGJlaGF2aW9yID0gdG9rZW4tPnZhbHVl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlm
ICh2YWxpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6VU5FWFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgfQotICAg
IGlmICh2YWxpZCAmJiAoc3RhdGUgIT0gRVhUX0JFSEFWSU9SICsgMSkpCi0gICAgewotICAgICAg
ICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6SU5WQUxJRF9FWFRFTlNJT05fRElS
RUNUSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRv
a2VuLT52YWx1ZSk7Ci0gICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICh2YWxp
ZCkKLSAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZUV4dGVuc2lvbih0b2tlbi0+bG9j
YXRpb24sIG5hbWUsIGJlaGF2aW9yKTsKLX0KLQotdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNl
VmVyc2lvbihUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNzZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikg
PT0gRElSRUNUSVZFX1ZFUlNJT04pOwotCi0gICAgZW51bSBTdGF0ZQotICAgIHsKLSAgICAgICAg
VkVSU0lPTl9OVU1CRVIKLSAgICB9OwotCi0gICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAgaW50
IHZlcnNpb24gPSAwOwotICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwotCi0gICAgbVRv
a2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYm
ICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN0
YXRlKyspCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFZFUlNJT05fTlVNQkVSOgotICAgICAg
ICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2YWxpZCkg
dmVyc2lvbiA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VU5F
WFBFQ1RFRF9UT0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tl
bi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgfQotICAgIGlmICh2YWxpZCAmJiAoc3RhdGUg
IT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpJTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAg
IHZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICh2YWxpZCkKLSAgICAgICAgbURpcmVjdGl2
ZUhhbmRsZXItPmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsKLX0KLQot
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4pCi17Ci0gICAgYXNz
ZXJ0KGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0xJTkUpOwotCi0gICAgZW51bSBT
dGF0ZQotICAgIHsKLSAgICAgICAgTElORV9OVU1CRVIsCi0gICAgICAgIEZJTEVfTlVNQkVSCi0g
ICAgfTsKLQotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIGludCBsaW5lID0gMCwgZmlsZSA9
IDA7Ci0gICAgaW50IHN0YXRlID0gTElORV9OVU1CRVI7Ci0KLSAgICBNYWNyb0V4cGFuZGVyIG1h
Y3JvRXhwYW5kZXIobVRva2VuaXplciwgbU1hY3JvU2V0LCBtRGlhZ25vc3RpY3MpOwotICAgIG1h
Y3JvRXhwYW5kZXIubGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicp
ICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KHN0YXRlKyspCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIExJTkVfTlVNQkVSOgotICAgICAg
ICAgICAgaWYgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6Q09OU1RfSU5UKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6SU5WQUxJRF9MSU5FX05VTUJFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
dmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2YWxpZCkgbGlu
ZSA9IGF0b2kodG9rZW4tPnZhbHVlLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBGSUxFX05VTUJFUjoKLSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4t
PnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OklOVkFMSURfRklMRV9OVU1CRVIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQpIGZpbGUgPSBhdG9pKHRva2VuLT52YWx1ZS5jX3N0
cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBpZiAodmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNz
LT5yZXBvcnQoRGlhZ25vc3RpY3M6OlVORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAg
ICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBtYWNyb0V4cGFuZGVyLmxleCh0b2tlbik7Ci0gICAg
fQotCi0gICAgaWYgKHZhbGlkICYmIChzdGF0ZSAhPSBGSUxFX05VTUJFUikgJiYgKHN0YXRlICE9
IEZJTEVfTlVNQkVSICsgMSkpCi0gICAgewotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6SU5WQUxJRF9MSU5FX0RJUkVDVElWRSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAgICB2YWxpZCA9
IGZhbHNlOwotICAgIH0KLSAgICBpZiAodmFsaWQpCi0gICAgewotICAgICAgICBtVG9rZW5pemVy
LT5zZXRMaW5lTnVtYmVyKGxpbmUpOwotICAgICAgICBpZiAoc3RhdGUgPT0gRklMRV9OVU1CRVIg
KyAxKSBtVG9rZW5pemVyLT5zZXRGaWxlTnVtYmVyKGZpbGUpOwotICAgIH0KLX0KLQotYm9vbCBE
aXJlY3RpdmVQYXJzZXI6OnNraXBwaW5nKCkgY29uc3QKLXsKLSAgICBpZiAobUNvbmRpdGlvbmFs
U3RhY2suZW1wdHkoKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgQ29uZGl0aW9uYWxCbG9j
ayYgYmxvY2sgPSBtQ29uZGl0aW9uYWxTdGFjay5iYWNrKCk7Ci0gICAgcmV0dXJuIGJsb2NrLnNr
aXBCbG9jayB8fCBibG9jay5za2lwR3JvdXA7Ci19Ci0KLXZvaWQgRGlyZWN0aXZlUGFyc2VyOjpw
YXJzZUNvbmRpdGlvbmFsSWYoVG9rZW4qIHRva2VuKQotewotICAgIENvbmRpdGlvbmFsQmxvY2sg
YmxvY2s7Ci0gICAgYmxvY2sudHlwZSA9IHRva2VuLT52YWx1ZTsKLSAgICBibG9jay5sb2NhdGlv
biA9IHRva2VuLT5sb2NhdGlvbjsKLQotICAgIGlmIChza2lwcGluZygpKQotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBjb25kaXRpb25hbCBibG9jayBpcyBpbnNpZGUgYW5vdGhlciBjb25kaXRpb25h
bCBncm91cAotICAgICAgICAvLyB3aGljaCBpcyBza2lwcGVkLiBBcyBhIGNvbnNlcXVlbmNlIHRo
aXMgd2hvbGUgYmxvY2sgaXMgc2tpcHBlZC4KLSAgICAgICAgLy8gQmUgY2FyZWZ1bCBub3QgdG8g
cGFyc2UgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdGhhdCBtaWdodAotICAgICAgICAvLyBl
bWl0IGEgZGlhZ25vc3RpYy4KLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIsIHRva2Vu
KTsKLSAgICAgICAgYmxvY2suc2tpcEJsb2NrID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgRGlyZWN0aXZlVHlwZSBkaXJlY3RpdmUgPSBnZXREaXJlY3RpdmUodG9rZW4p
OwotCi0gICAgICAgIGludCBleHByZXNzaW9uID0gMDsKLSAgICAgICAgc3dpdGNoIChkaXJlY3Rp
dmUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRjoKLSAgICAgICAgICAg
IGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JZih0b2tlbik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIERJUkVDVElWRV9JRkRFRjoKLSAgICAgICAgICAgIGV4cHJlc3Np
b24gPSBwYXJzZUV4cHJlc3Npb25JZmRlZih0b2tlbik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIERJUkVDVElWRV9JRk5ERUY6Ci0gICAgICAgICAgICBleHByZXNzaW9uID0g
cGFyc2VFeHByZXNzaW9uSWZkZWYodG9rZW4pID09IDAgPyAxIDogMDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYmxvY2suc2tpcEdyb3VwID0gZXhw
cmVzc2lvbiA9PSAwOwotICAgICAgICBibG9jay5mb3VuZFZhbGlkR3JvdXAgPSBleHByZXNzaW9u
ICE9IDA7Ci0gICAgfQotICAgIG1Db25kaXRpb25hbFN0YWNrLnB1c2hfYmFjayhibG9jayk7Ci19
Ci0KLWludCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmKFRva2VuKiB0b2tlbikK
LXsKLSAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGKSB8fAot
ICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfRUxJRikpOwotCi0g
ICAgRGVmaW5lZFBhcnNlciBkZWZpbmVkUGFyc2VyKG1Ub2tlbml6ZXIsIG1NYWNyb1NldCwgbURp
YWdub3N0aWNzKTsKLSAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5kZXIoJmRlZmluZWRQYXJz
ZXIsIG1NYWNyb1NldCwgbURpYWdub3N0aWNzKTsKLSAgICBFeHByZXNzaW9uUGFyc2VyIGV4cHJl
c3Npb25QYXJzZXIoJm1hY3JvRXhwYW5kZXIsIG1EaWFnbm9zdGljcyk7Ci0KLSAgICBpbnQgZXhw
cmVzc2lvbiA9IDA7Ci0gICAgbWFjcm9FeHBhbmRlci5sZXgodG9rZW4pOwotICAgIGV4cHJlc3Np
b25QYXJzZXIucGFyc2UodG9rZW4sICZleHByZXNzaW9uKTsKLQotICAgIC8vIFdhcm4gaWYgdGhl
cmUgYXJlIHRva2VucyBhZnRlciAjaWYgZXhwcmVzc2lvbi4KLSAgICBpZiAoIWlzRU9EKHRva2Vu
KSkKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpDT05E
SVRJT05BTF9VTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4cHJlc3Npb247Ci19Ci0KLWlu
dCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbklmZGVmKFRva2VuKiB0b2tlbikKLXsK
LSAgICBhc3NlcnQoKGdldERpcmVjdGl2ZSh0b2tlbikgPT0gRElSRUNUSVZFX0lGREVGKSB8fAot
ICAgICAgICAgICAoZ2V0RGlyZWN0aXZlKHRva2VuKSA9PSBESVJFQ1RJVkVfSUZOREVGKSk7Ci0K
LSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKLSAgICB7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpVTkVYUEVDVEVEX1RPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT52YWx1ZSk7Ci0gICAgICAgIHNraXBVbnRpbEVPRChtVG9r
ZW5pemVyLCB0b2tlbik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIE1hY3JvU2V0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU1hY3JvU2V0LT5maW5kKHRva2VuLT52YWx1ZSk7Ci0g
ICAgaW50IGV4cHJlc3Npb24gPSBpdGVyICE9IG1NYWNyb1NldC0+ZW5kKCkgPyAxIDogMDsKLQot
ICAgIC8vIFdhcm4gaWYgdGhlcmUgYXJlIHRva2VucyBhZnRlciAjaWZkZWYgZXhwcmVzc2lvbi4K
LSAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwotICAgIGlmICghaXNFT0QodG9rZW4pKQotICAg
IHsKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OkNPTkRJVElPTkFM
X1VORVhQRUNURURfVE9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgc2tpcFVudGlsRU9EKG1Ub2tlbml6ZXIs
IHRva2VuKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4cHJlc3Npb247Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSBwcApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQYXJzZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1YTAxZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVQ
YXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0j
aWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCi0jZGVmaW5l
IENPTVBJTEVSX1BSRVBST0NFU1NPUl9ESVJFQ1RJVkVfUEFSU0VSX0hfCi0KLSNpbmNsdWRlICJM
ZXhlci5oIgotI2luY2x1ZGUgIk1hY3JvLmgiCi0jaW5jbHVkZSAicHBfdXRpbHMuaCIKLSNpbmNs
dWRlICJTb3VyY2VMb2NhdGlvbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgRGlhZ25v
c3RpY3M7Ci1jbGFzcyBEaXJlY3RpdmVIYW5kbGVyOwotY2xhc3MgVG9rZW5pemVyOwotCi1jbGFz
cyBEaXJlY3RpdmVQYXJzZXIgOiBwdWJsaWMgTGV4ZXIKLXsKLSAgcHVibGljOgotICAgIERpcmVj
dGl2ZVBhcnNlcihUb2tlbml6ZXIqIHRva2VuaXplciwKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9TZXQqIG1hY3JvU2V0LAotICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljcyogZGlhZ25v
c3RpY3MsCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhh
bmRsZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwotCi0gIHByaXZh
dGU6Ci0gICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERpcmVjdGl2ZVBhcnNlcik7Ci0K
LSAgICB2b2lkIHBhcnNlRGlyZWN0aXZlKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZURl
ZmluZShUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VVbmRlZihUb2tlbiogdG9rZW4pOwot
ICAgIHZvaWQgcGFyc2VJZihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VJZmRlZihUb2tl
biogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VJZm5kZWYoVG9rZW4qIHRva2VuKTsKLSAgICB2b2lk
IHBhcnNlRWxzZShUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VFbGlmKFRva2VuKiB0b2tl
bik7Ci0gICAgdm9pZCBwYXJzZUVuZGlmKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZUVy
cm9yKFRva2VuKiB0b2tlbik7Ci0gICAgdm9pZCBwYXJzZVByYWdtYShUb2tlbiogdG9rZW4pOwot
ICAgIHZvaWQgcGFyc2VFeHRlbnNpb24oVG9rZW4qIHRva2VuKTsKLSAgICB2b2lkIHBhcnNlVmVy
c2lvbihUb2tlbiogdG9rZW4pOwotICAgIHZvaWQgcGFyc2VMaW5lKFRva2VuKiB0b2tlbik7Ci0K
LSAgICBib29sIHNraXBwaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBwYXJzZUNvbmRpdGlvbmFsSWYo
VG9rZW4qIHRva2VuKTsKLSAgICBpbnQgcGFyc2VFeHByZXNzaW9uSWYoVG9rZW4qIHRva2VuKTsK
LSAgICBpbnQgcGFyc2VFeHByZXNzaW9uSWZkZWYoVG9rZW4qIHRva2VuKTsKLQotICAgIHN0cnVj
dCBDb25kaXRpb25hbEJsb2NrCi0gICAgewotICAgICAgICBzdGQ6OnN0cmluZyB0eXBlOwotICAg
ICAgICBTb3VyY2VMb2NhdGlvbiBsb2NhdGlvbjsKLSAgICAgICAgYm9vbCBza2lwQmxvY2s7Ci0g
ICAgICAgIGJvb2wgc2tpcEdyb3VwOwotICAgICAgICBib29sIGZvdW5kVmFsaWRHcm91cDsKLSAg
ICAgICAgYm9vbCBmb3VuZEVsc2VHcm91cDsKLQotICAgICAgICBDb25kaXRpb25hbEJsb2NrKCkg
OgotICAgICAgICAgICAgc2tpcEJsb2NrKGZhbHNlKSwKLSAgICAgICAgICAgIHNraXBHcm91cChm
YWxzZSksCi0gICAgICAgICAgICBmb3VuZFZhbGlkR3JvdXAoZmFsc2UpLAotICAgICAgICAgICAg
Zm91bmRFbHNlR3JvdXAoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0gICAg
c3RkOjp2ZWN0b3I8Q29uZGl0aW9uYWxCbG9jaz4gbUNvbmRpdGlvbmFsU3RhY2s7Ci0gICAgVG9r
ZW5pemVyKiBtVG9rZW5pemVyOwotICAgIE1hY3JvU2V0KiBtTWFjcm9TZXQ7Ci0gICAgRGlhZ25v
c3RpY3MqIG1EaWFnbm9zdGljczsKLSAgICBEaXJlY3RpdmVIYW5kbGVyKiBtRGlyZWN0aXZlSGFu
ZGxlcjsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQ
Uk9DRVNTT1JfRElSRUNUSVZFX1BBUlNFUl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2Vy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
M2E5Y2U5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTk0MCArMCwwIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4z
LiAgKi8KLQotLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtl
IHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAs
IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKLSAgIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9w
dGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCi0KLS8q
IEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhh
dCBjb250YWlucwotICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBh
bmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBz
byBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQotICAgcGFyc2VyIGdlbmVyYXRvciB1
c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKLSAgIGFzIGEg
cGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUKLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9w
dGlvbikgcmVtb3ZlIHRoaXMKLSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNl
IHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwotICAgQmlzb24gb3V0cHV0IGZpbGVzIHRv
IGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2Ugd2l0
aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgotCi0gICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9u
IHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCi0gICB2ZXJzaW9u
IDIuMiBvZiBCaXNvbi4gICovCi0KLS8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRl
biBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQotICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNv
LWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCi0KLS8qIEFsbCBzeW1ib2xzIGRlZmluZWQg
YmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCi0gICBpbmZyaW5naW5n
IG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwK
LSAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNl
ciBtYWNyb3MuCi0gICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhp
biBpbmNsdWRlIGZpbGVzIHRvCi0gICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsg
dGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgotICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4g
ICovCi0KLS8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCi0jZGVmaW5lIFlZQklTT04gMQot
Ci0vKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCi0K
LS8qIFNrZWxldG9uIG5hbWUuICAqLwotI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIK
LQotLyogUHVyZSBwYXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQVVJFIDEKLQotLyogVXNpbmcgbG9j
YXRpb25zLiAgKi8KLSNkZWZpbmUgWVlMU1BfTkVFREVEIDAKLQotLyogU3Vic3RpdHV0ZSB0aGUg
dmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KLSNkZWZpbmUgeXlwYXJzZSBwcHBhcnNl
Ci0jZGVmaW5lIHl5bGV4ICAgcHBsZXgKLSNkZWZpbmUgeXllcnJvciBwcGVycm9yCi0jZGVmaW5l
IHl5bHZhbCAgcHBsdmFsCi0jZGVmaW5lIHl5Y2hhciAgcHBjaGFyCi0jZGVmaW5lIHl5ZGVidWcg
cHBkZWJ1ZwotI2RlZmluZSB5eW5lcnJzIHBwbmVycnMKLQotCi0vKiBUb2tlbnMuICAqLwotI2lm
bmRlZiBZWVRPS0VOVFlQRQotIyBkZWZpbmUgWVlUT0tFTlRZUEUKLSAgIC8qIFB1dCB0aGUgdG9r
ZW5zIGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2Vy
cwotICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KLSAgIGVudW0geXl0b2tlbnR5cGUgewotICAg
ICBUT0tfQ09OU1RfSU5UID0gMjU4LAotICAgICBUT0tfT1BfT1IgPSAyNTksCi0gICAgIFRPS19P
UF9BTkQgPSAyNjAsCi0gICAgIFRPS19PUF9ORSA9IDI2MSwKLSAgICAgVE9LX09QX0VRID0gMjYy
LAotICAgICBUT0tfT1BfR0UgPSAyNjMsCi0gICAgIFRPS19PUF9MRSA9IDI2NCwKLSAgICAgVE9L
X09QX1JJR0hUID0gMjY1LAotICAgICBUT0tfT1BfTEVGVCA9IDI2NiwKLSAgICAgVE9LX1VOQVJZ
ID0gMjY3Ci0gICB9OwotI2VuZGlmCi0vKiBUb2tlbnMuICAqLwotI2RlZmluZSBUT0tfQ09OU1Rf
SU5UIDI1OAotI2RlZmluZSBUT0tfT1BfT1IgMjU5Ci0jZGVmaW5lIFRPS19PUF9BTkQgMjYwCi0j
ZGVmaW5lIFRPS19PUF9ORSAyNjEKLSNkZWZpbmUgVE9LX09QX0VRIDI2MgotI2RlZmluZSBUT0tf
T1BfR0UgMjYzCi0jZGVmaW5lIFRPS19PUF9MRSAyNjQKLSNkZWZpbmUgVE9LX09QX1JJR0hUIDI2
NQotI2RlZmluZSBUT0tfT1BfTEVGVCAyNjYKLSNkZWZpbmUgVE9LX1VOQVJZIDI2NwotCi0KLQot
Ci0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
X3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotLy8gVHJp
Z2dlcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCi0jcHJhZ21hIEdD
QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKLSNlbGlmIGRlZmluZWQoX01T
Q19WRVIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA2NSA0NzAxKQotI2VuZGlmCi0KLSNp
bmNsdWRlICJFeHByZXNzaW9uUGFyc2VyLmgiCi0KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1
ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgIkRpYWdub3N0aWNz
LmgiCi0jaW5jbHVkZSAiTGV4ZXIuaCIKLSNpbmNsdWRlICJUb2tlbi5oIgotCi0jaWYgZGVmaW5l
ZChfTVNDX1ZFUikKLXR5cGVkZWYgX19pbnQ2NCBZWVNUWVBFOwotI2RlZmluZSBzdHJ0b2xsIF9z
dHJ0b2k2NAotI2Vsc2UKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLXR5cGVkZWYgaW50bWF4X3QgWVlT
VFlQRTsKLSNlbmRpZiAgLy8gX01TQ19WRVIKLSNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKLSNkZWZp
bmUgWVlMVFlQRV9JU19UUklWSUFMIDEKLSNkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNk
ZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0KLW5hbWVzcGFjZSB7Ci1zdHJ1Y3QgQ29udGV4
dAotewotICAgIHBwOjpEaWFnbm9zdGljcyogZGlhZ25vc3RpY3M7Ci0gICAgcHA6OkxleGVyKiBs
ZXhlcjsKLSAgICBwcDo6VG9rZW4qIHRva2VuOwotICAgIGludCogcmVzdWx0OwotfTsKLX0gIC8v
IG5hbWVzcGFjZQotCi0KLXN0YXRpYyBpbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQq
IGNvbnRleHQpOwotc3RhdGljIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBj
aGFyKiByZWFzb24pOwotCi0KLS8qIEVuYWJsaW5nIHRyYWNlcy4gICovCi0jaWZuZGVmIFlZREVC
VUcKLSMgZGVmaW5lIFlZREVCVUcgMAotI2VuZGlmCi0KLS8qIEVuYWJsaW5nIHZlcmJvc2UgZXJy
b3IgbWVzc2FnZXMuICAqLwotI2lmZGVmIFlZRVJST1JfVkVSQk9TRQotIyB1bmRlZiBZWUVSUk9S
X1ZFUkJPU0UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCi0jZWxzZQotIyBkZWZpbmUgWVlF
UlJPUl9WRVJCT1NFIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAq
LwotI2lmbmRlZiBZWVRPS0VOX1RBQkxFCi0jIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKLSNlbmRp
ZgotCi0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFS
RUQKLXR5cGVkZWYgaW50IFlZU1RZUEU7Ci0jIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jz
b2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5kaWYKLQotCi0KLS8qIENv
cHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLQotCi0vKiBMaW5l
IDIxNiBvZiB5YWNjLmMuICAqLwotCi0KLSNpZmRlZiBzaG9ydAotIyB1bmRlZiBzaG9ydAotI2Vu
ZGlmCi0KLSNpZmRlZiBZWVRZUEVfVUlOVDgKLXR5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91
aW50ODsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OwotI2VuZGlm
Ci0KLSNpZmRlZiBZWVRZUEVfSU5UOAotdHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsK
LSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAg
IHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXR5cGVkZWYgc2ln
bmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZWxzZQotdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2lu
dDg7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UMTYKLXR5cGVkZWYgWVlUWVBFX1VJTlQx
NiB5eXR5cGVfdWludDE2OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlw
ZV91aW50MTY7Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQxNgotdHlwZWRlZiBZWVRZUEVf
SU5UMTYgeXl0eXBlX2ludDE2OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQx
NjsKLSNlbmRpZgotCi0jaWZuZGVmIFlZU0laRV9UCi0jIGlmZGVmIF9fU0laRV9UWVBFX18KLSMg
IGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCi0jIGVsaWYgZGVmaW5lZCBzaXplX3QKLSMg
IGRlZmluZSBZWVNJWkVfVCBzaXplX3QKLSMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgaW5jbHVkZSA8c3RkZGVmLmg+
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWVNJWkVfVCBz
aXplX3QKLSMgZWxzZQotIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAotIyBlbmRpZgot
I2VuZGlmCi0KLSNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCi0KLSNpZm5k
ZWYgWVlfCi0jIGlmIFlZRU5BQkxFX05MUwotIyAgaWYgRU5BQkxFX05MUwotIyAgIGluY2x1ZGUg
PGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGRlZmlu
ZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQotIyAgZW5kaWYK
LSMgZW5kaWYKLSMgaWZuZGVmIFlZXwotIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKLSMgZW5k
aWYKLSNlbmRpZgotCi0vKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVz
aW5nIiBFLiAgKi8KLSNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCi0jIGRl
ZmluZSBZWVVTRShlKSAoKHZvaWQpIChlKSkKLSNlbHNlCi0jIGRlZmluZSBZWVVTRShlKSAvKiBl
bXB0eSAqLwotI2VuZGlmCi0KLS8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNz
IHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwotI2lmbmRlZiBsaW50Ci0j
IGRlZmluZSBZWUlEKG4pIChuKQotI2Vsc2UKLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZp
bmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmlu
ZWQgX01TQ19WRVIpCi1zdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKLSNlbHNlCi1zdGF0aWMgaW50
Ci1ZWUlEIChpKQotICAgIGludCBpOwotI2VuZGlmCi17Ci0gIHJldHVybiBpOwotfQotI2VuZGlm
Ci0KLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKLQotLyogVGhl
IHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5
bWJvbHMuICAqLwotCi0jIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgaWYgWVlTVEFDS19V
U0VfQUxMT0NBCi0jICAgaWZkZWYgX19HTlVDX18KLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Mg
X19idWlsdGluX2FsbG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IK
LSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KLSMgICBlbGlmIGRlZmluZWQgX0FJWAotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2Fs
bG9jYQotIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4g
LyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgICBkZWZpbmUgYWxsb2NhIF9h
bGxvY2EKLSMgICBlbHNlCi0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQotIyAgICBp
ZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgIGlmbmRlZiBfU1RETElCX0gK
LSMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKLSMgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICAg
ZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZkZWYgWVlTVEFDS19BTExPQwotICAgLyog
UGFjaWZ5IEdDQydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KLSMgIGRlZmluZSBZWVNU
QUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKLSMgIGlm
bmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVl
IG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCi0gICAgICAg
YW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fu
bm90IHNhZmVseQotICAgICAgIGludm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAg
VXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKLSAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcg
Y29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCi0jICAgZGVmaW5l
IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLwot
IyAgZW5kaWYKLSMgZWxzZQotIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKLSMgIGRl
ZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCi0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVN
Ci0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQotIyAgZW5k
aWYKLSMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAot
ICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0JICAg
ICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCi0jICAgaW5jbHVkZSA8c3Rk
bGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBpZm5kZWYgX1NU
RExJQl9ICi0jICAgIGRlZmluZSBfU1RETElCX0ggMQotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAg
aWZuZGVmIFlZTUFMTE9DCi0jICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwotIyAgIGlmICEgZGVm
aW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCi12b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLwotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZ
RlJFRQotIyAgIGRlZmluZSBZWUZSRUUgZnJlZQotIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEg
ZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
Ci0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYgLyogISBkZWZpbmVkIHl5b3Zl
cmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCi0KLQotI2lmICghIGRlZmluZWQgeXlvdmVyZmxv
dyBcCi0gICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXAotCSB8fCAoZGVmaW5lZCBZWVNU
WVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCi0KLS8qIEEgdHlwZSB0aGF0
IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwotdW5pb24geXlh
bGxvYwotewotICB5eXR5cGVfaW50MTYgeXlzczsKLSAgWVlTVFlQRSB5eXZzOwotICB9OwotCi0v
KiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBh
bmQgdGhlIG5leHQuICAqLwotIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1
bmlvbiB5eWFsbG9jKSAtIDEpCi0KLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVu
b3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAotICAgTiBlbGVtZW50cy4gICovCi0j
IGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKLSAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9p
bnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcCi0gICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0p
Ci0KLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFu
ZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAqLwotIyBpZm5kZWYgWVlDT1BZCi0j
ICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwotIyAgIGRlZmluZSBZWUNPUFko
VG8sIEZyb20sIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENv
dW50KSAqIHNpemVvZiAoKihGcm9tKSkpCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZQ09QWShUbywg
RnJvbSwgQ291bnQpCQlcCi0gICAgICBkbwkJCQkJXAotCXsJCQkJCVwKLQkgIFlZU0laRV9UIHl5
aTsJCQkJXAotCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAotCSAgICAo
VG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKLQl9CQkJCQlcCi0gICAgICB3aGlsZSAoWVlJRCAo
MCkpCi0jICBlbmRpZgotIyBlbmRpZgotCi0vKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQg
bG9jYXRpb24gdG8gdGhlIG5ldyBvbmUuICBUaGUKLSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUg
YW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgotICAgZWxlbWVu
dHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUK
LSAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24g
Zm9yIHRoZSBuZXh0Ci0gICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0
YWNrKQkJCQkJXAotICAgIGRvCQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlZWVNJWkVf
VCB5eW5ld2J5dGVzOwkJCQkJCVwKLQlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNp
emUpOwkJCQlcCi0JU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKLQl5eW5ld2J5dGVzID0g
eXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0J
eXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAotICAgICAgfQkJCQkJ
CQkJCVwKLSAgICB3aGlsZSAoWVlJRCAoMCkpCi0KLSNlbmRpZgotCi0vKiBZWUZJTkFMIC0tIFN0
YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwotI2RlZmluZSBZWUZJTkFM
ICAxNAotLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZ
TEFTVCAgIDE3NQotCi0vKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0j
ZGVmaW5lIFlZTlRPS0VOUyAgMjcKLS8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxz
LiAgKi8KLSNkZWZpbmUgWVlOTlRTICAzCi0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMu
ICAqLwotI2RlZmluZSBZWU5SVUxFUyAgMjYKLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0
ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDUyCi0KLS8qIFlZVFJBTlNMQVRFKFlZTEVYKSAt
LSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwotI2RlZmlu
ZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDI2NwotCi0jZGVmaW5lIFlZVFJB
TlNMQVRFKFlZWCkJCQkJCQlcCi0gICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sg
PyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKLQotLyogWVlUUkFOU0xBVEVbWVlMRVhd
IC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCi1zdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQotewotICAgICAgIDAsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
Ci0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgMjMsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDIxLCAgICAgOCwgICAgIDIsCi0gICAg
ICAyNSwgICAgMjYsICAgIDE5LCAgICAxNywgICAgIDIsICAgIDE4LCAgICAgMiwgICAgMjAsICAg
ICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgMTEsICAgICAyLCAgICAxMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICA3LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
LSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA2LCAg
ICAgMiwgICAgMjQsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAot
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgOSwgICAgMTAsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAyMgotfTsKLQotI2lmIFlZREVCVUcKLS8qIFlZUFJI
U1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZ
TiBpbgotICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9
Ci17Ci0gICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgIDExLCAgICAxNSwg
ICAgMTksICAgIDIzLCAgICAyNywKLSAgICAgIDMxLCAgICAzNSwgICAgMzksICAgIDQzLCAgICA0
NywgICAgNTEsICAgIDU1LCAgICA1OSwgICAgNjMsICAgIDY3LAotICAgICAgNzEsICAgIDc1LCAg
ICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTEKLX07Ci0KLS8qIFlZUkhTIC0tIEEgYC0x
Jy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX2ludDggeXlyaHNbXSA9Ci17Ci0gICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAyOSwgICAg
LTEsICAgICAzLCAgICAtMSwgICAgMjksICAgICA0LCAgICAyOSwKLSAgICAgIC0xLCAgICAyOSwg
ICAgIDUsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA2LCAgICAyOSwgICAgLTEsICAgIDI5LAot
ICAgICAgIDcsICAgIDI5LCAgICAtMSwgICAgMjksICAgICA4LCAgICAyOSwgICAgLTEsICAgIDI5
LCAgICAgOSwgICAgMjksCi0gICAgICAtMSwgICAgMjksICAgIDEwLCAgICAyOSwgICAgLTEsICAg
IDI5LCAgICAxMywgICAgMjksICAgIC0xLCAgICAyOSwKLSAgICAgIDE0LCAgICAyOSwgICAgLTEs
ICAgIDI5LCAgICAxMiwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTEsICAgIDI5LAotICAgICAg
LTEsICAgIDI5LCAgICAxNSwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTYsICAgIDI5LCAgICAt
MSwgICAgMjksCi0gICAgICAxOCwgICAgMjksICAgIC0xLCAgICAyOSwgICAgMTcsICAgIDI5LCAg
ICAtMSwgICAgMjksICAgIDIxLCAgICAyOSwKLSAgICAgIC0xLCAgICAyOSwgICAgMjAsICAgIDI5
LCAgICAtMSwgICAgMjksICAgIDE5LCAgICAyOSwgICAgLTEsICAgIDIzLAotICAgICAgMjksICAg
IC0xLCAgICAyNCwgICAgMjksICAgIC0xLCAgICAxOCwgICAgMjksICAgIC0xLCAgICAxNywgICAg
MjksCi0gICAgICAtMSwgICAgMjUsICAgIDI5LCAgICAyNiwgICAgLTEKLX07Ci0KLS8qIFlZUkxJ
TkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQu
ICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQotewotICAgICAgIDAs
ICAgIDg5LCAgICA4OSwgICAgOTYsICAgIDk3LCAgIDEwMCwgICAxMDMsICAgMTA2LCAgIDEwOSwg
ICAxMTIsCi0gICAgIDExNSwgICAxMTgsICAgMTIxLCAgIDEyNCwgICAxMjcsICAgMTMwLCAgIDEz
MywgICAxMzYsICAgMTM5LCAgIDE0MiwKLSAgICAgMTU1LCAgIDE2OCwgICAxNzEsICAgMTc0LCAg
IDE3NywgICAxODAsICAgMTgzCi19OwotI2VuZGlmCi0KLSNpZiBZWURFQlVHIHx8IFlZRVJST1Jf
VkVSQk9TRSB8fCBZWVRPS0VOX1RBQkxFCi0vKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmlu
ZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KLSAgIEZpcnN0LCB0aGUgdGVybWluYWxz
LCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCi1zdGF0aWMg
Y29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KLXsKLSAgIiRlbmQiLCAiZXJyb3IiLCAiJHVu
ZGVmaW5lZCIsICJUT0tfQ09OU1RfSU5UIiwgIlRPS19PUF9PUiIsCi0gICJUT0tfT1BfQU5EIiwg
Iid8JyIsICInXiciLCAiJyYnIiwgIlRPS19PUF9ORSIsICJUT0tfT1BfRVEiLCAiJzwnIiwKLSAg
Iic+JyIsICJUT0tfT1BfR0UiLCAiVE9LX09QX0xFIiwgIlRPS19PUF9SSUdIVCIsICJUT0tfT1Bf
TEVGVCIsICInKyciLAotICAiJy0nIiwgIicqJyIsICInLyciLCAiJyUnIiwgIlRPS19VTkFSWSIs
ICInISciLCAiJ34nIiwgIicoJyIsICInKSciLAotICAiJGFjY2VwdCIsICJpbnB1dCIsICJleHBy
ZXNzaW9uIiwgMAotfTsKLSNlbmRpZgotCi0jIGlmZGVmIFlZUFJJTlQKLS8qIFlZVE9LTlVNW1lZ
TEVYLU5VTV0gLS0gSW50ZXJuYWwgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRv
a2VuIFlZTEVYLU5VTS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtd
ID0KLXsKLSAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMTI0
LCAgICA5NCwgICAgMzgsICAgMjYxLAotICAgICAyNjIsICAgIDYwLCAgICA2MiwgICAyNjMsICAg
MjY0LCAgIDI2NSwgICAyNjYsICAgIDQzLCAgICA0NSwgICAgNDIsCi0gICAgICA0NywgICAgMzcs
ICAgMjY3LCAgICAzMywgICAxMjYsICAgIDQwLCAgICA0MQotfTsKLSMgZW5kaWYKLQotLyogWVlS
MVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4g
ICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Ci17Ci0gICAgICAgMCwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwKLSAgICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAg
ICAyOSwgICAgMjksICAgIDI5LAotICAgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgMjkKLX07Ci0KLS8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBj
b21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAotICAgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMs
Ci0gICAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMwotfTsK
LQotLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRo
IGluIHN0YXRlCi0gICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21l
dGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9y
LiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Ci17Ci0gICAgICAg
MCwgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAy
LCAgICAyNSwKLSAgICAgIDI0LCAgICAyMiwgICAgMjMsICAgICAwLCAgICAgMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwKLSAgICAgIDEwLCAgICAxNCwgICAgMTMsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDE2LCAg
ICAxOCwgICAgMTcsICAgIDIxLAotICAgICAgMjAsICAgIDE5Ci19OwotCi0vKiBZWURFRkdPVE9b
TlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQot
ewotICAgICAgLTEsICAgICA3LCAgICAgOAotfTsKLQotLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0g
SW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCi0gICBTVEFURS1OVU0u
ICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtMTEKLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlwYWN0W10gPQotewotICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0
NiwgICAgNDYsICAgIDEyLCAgICA2OCwgICAtMTEsCi0gICAgIC0xMSwgICAtMTEsICAgLTExLCAg
ICAyNywgICAtMTEsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwKLSAgICAgIDQ2
LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYs
ICAgIDQ2LAotICAgICAgNDYsICAgIDQ2LCAgICA0NiwgICAtMTEsICAgIDg1LCAgIDEwMSwgICAx
MTYsICAgMTMwLCAgIDE0MywgICAxNTQsCi0gICAgIDE1NCwgICAtMTAsICAgLTEwLCAgIC0xMCwg
ICAtMTAsICAgIDM3LCAgICAzNywgICAgMzEsICAgIDMxLCAgIC0xMSwKLSAgICAgLTExLCAgIC0x
MQotfTsKLQotLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVf
aW50OCB5eXBnb3RvW10gPQotewotICAgICAtMTEsICAgLTExLCAgICAtMgotfTsKLQotLyogWVlU
QUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4g
IElmCi0gICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2Ug
dGhlIHJ1bGUgd2hpY2gKLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3
aGF0IFlZREVGQUNUIHNheXMuCi0gICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICov
Ci0jZGVmaW5lIFlZVEFCTEVfTklORiAtMQotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRh
YmxlW10gPQotewotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIDE0LCAgICAz
NCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLAotICAgICAgNTEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAgMSwKLSAgICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIDMzLCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgICAwLAot
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0g
ICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIKLX07Ci0KLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQotewotICAgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgICAwLCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAgMywKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDI2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMTcsICAgIDE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjMsCi0g
ICAgICAyNCwgICAgMjUsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAotICAgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsCi0gICAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDYsICAgICA3
LCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICA4LCAgICAg
OSwKLSAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LAotICAgICAgMjAsICAgIDIxLCAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKLSAg
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEKLX07Ci0KLS8qIFlZU1RP
U1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCi0g
ICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlzdG9zW10gPQotewotICAgICAgIDAsICAgICAzLCAgICAxNywgICAgMTgsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI4LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjksICAgIDI5
LCAgICAyOSwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAg
ICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjYsICAgIDI5LCAgICAyOSwg
ICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksCi0gICAgICAyOSwgICAgMjksICAgIDI5LCAgICAy
OSwgICAgMjksICAgIDI5LCAgICAyOSwgICAgMjksICAgIDI5LCAgICAyOSwKLSAgICAgIDI5LCAg
ICAyOQotfTsKLQotI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5
eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCi0jZGVmaW5lIFlZRU1QVFkJCSgtMikKLSNkZWZp
bmUgWVlFT0YJCTAKLQotI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCi0jZGVmaW5l
IFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3Js
YWIKLQotCi0vKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVt
YWlucyBoZXJlIHRlbXBvcmFyaWx5Ci0gICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBu
ZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgotICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhh
cyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLwotCi0jZGVmaW5lIFlZRkFJ
TAkJZ290byB5eWVycmxhYgotCi0jZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1
cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCi1kbwkJCQkJCQkJXAot
ICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAotICAgIHsJCQkJCQkJ
CVwKLSAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAotICAgICAgeXlsdmFsID0gKFZhbHVl
KTsJCQkJCQlcCi0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKLSAg
ICAgIFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKLSAgICAgIGdvdG8geXliYWNrdXA7CQkJCQkJXAot
ICAgIH0JCQkJCQkJCVwKLSAgZWxzZQkJCQkJCQkJXAotICAgIHsJCQkJCQkJCVwKLSAgICAgIHl5
ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAot
ICAgICAgWVlFUlJPUjsJCQkJCQkJXAotICAgIH0JCQkJCQkJCVwKLXdoaWxlIChZWUlEICgwKSkK
LQotCi0jZGVmaW5lIFlZVEVSUk9SCTEKLSNkZWZpbmUgWVlFUlJDT0RFCTI1NgotCi0KLS8qIFlZ
TExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05d
LgotICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRvIHRoZSBlbXB0eSBsb2NhdGlvbiB3
aGljaCBlbmRzCi0gICB0aGUgcHJldmlvdXMgc3ltYm9sOiBSSFNbMF0gKGFsd2F5cyBkZWZpbmVk
KS4gICovCi0KLSNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAoKFJocylbS10pCi0jaWZuZGVmIFlZ
TExPQ19ERUZBVUxUCi0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJ
CVwKLSAgICBkbwkJCQkJCQkJCVwKLSAgICAgIGlmIChZWUlEIChOKSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsJCQkJCQkJCVwKLQkgIChD
dXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9saW5lOwlcCi0J
ICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfY29sdW1u
OwlcCi0JICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9s
aW5lOwkJXAotCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9IFlZUkhTTE9DIChSaHMsIE4pLmxh
c3RfY29sdW1uOwlcCi0JfQkJCQkJCQkJXAotICAgICAgZWxzZQkJCQkJCQkJXAotCXsJCQkJCQkJ
CVwKLQkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3VycmVudCkubGFzdF9saW5lICAgPQkJ
XAotCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKLQkgIChDdXJyZW50KS5m
aXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4gPQkJXAotCSAgICBZWVJIU0xPQyAo
UmhzLCAwKS5sYXN0X2NvbHVtbjsJCQkJXAotCX0JCQkJCQkJCVwKLSAgICB3aGlsZSAoWVlJRCAo
MCkpCi0jZW5kaWYKLQotCi0vKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRp
b24gb24gdGhlIHN0cmVhbS4KLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5h
bGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93Ci0gICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6
IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCi0KLSNpZm5kZWYgWVlf
TE9DQVRJT05fUFJJTlQKLSMgaWYgWVlMVFlQRV9JU19UUklWSUFMCi0jICBkZWZpbmUgWVlfTE9D
QVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKLSAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVk
LiVkIiwJCQlcCi0JICAgICAgKExvYykuZmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlc
Ci0JICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFzdF9jb2x1bW4pCi0jIGVsc2UKLSMg
IGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKLSMgZW5kaWYK
LSNlbmRpZgotCi0KLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBh
cmd1bWVudHMuICAqLwotCi0jaWZkZWYgWVlMRVhfUEFSQU0KLSMgZGVmaW5lIFlZTEVYIHl5bGV4
ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKLSNlbHNlCi0jIGRlZmluZSBZWUxFWCB5eWxleCAoJnl5
bHZhbCwgY29udGV4dCkKLSNlbmRpZgotCi0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3Rl
ZC4gICovCi0jaWYgWVlERUJVRwotCi0jIGlmbmRlZiBZWUZQUklOVEYKLSMgIGluY2x1ZGUgPHN0
ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgIGRlZmluZSBZWUZQ
UklOVEYgZnByaW50ZgotIyBlbmRpZgotCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCi1k
byB7CQkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJCVwKLSAgICBZWUZQUklOVEYgQXJnczsJCQkJ
XAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwg
VHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAotZG8gewkJCQkJCQkJCSAgXAotICBpZiAoeXlk
ZWJ1ZykJCQkJCQkJCSAgXAotICAgIHsJCQkJCQkJCQkgIFwKLSAgICAgIFlZRlBSSU5URiAoc3Rk
ZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVy
ciwJCQkJCQkgIFwKLQkJICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBSSU5U
RiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKLSAgICB9CQkJCQkJCQkJICBcCi19IHdoaWxlIChZ
WUlEICgwKSkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmlu
dCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmlu
ZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5
b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIENvbnRl
eHQgKmNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3N5bWJvbF92YWx1ZV9wcmludCAo
eXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCi0gICAgRklMRSAqeXlvdXRwdXQ7
Ci0gICAgaW50IHl5dHlwZTsKLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7Ci0g
ICAgQ29udGV4dCAqY29udGV4dDsKLSNlbmRpZgotewotICBpZiAoIXl5dmFsdWVwKQotICAgIHJl
dHVybjsKLSAgWVlVU0UgKGNvbnRleHQpOwotIyBpZmRlZiBZWVBSSU5UCi0gIGlmICh5eXR5cGUg
PCBZWU5UT0tFTlMpCi0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5
eXZhbHVlcCk7Ci0jIGVsc2UKLSAgWVlVU0UgKHl5b3V0cHV0KTsKLSMgZW5kaWYKLSAgc3dpdGNo
ICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLQlicmVhazsKLSAgICB9Ci19Ci0KLQot
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wg
b24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0j
aWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIHZvaWQKLXl5
X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3Qg
KiBjb25zdCB5eXZhbHVlcCwgQ29udGV4dCAqY29udGV4dCkKLSNlbHNlCi1zdGF0aWMgdm9pZAot
eXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKLSAg
ICBGSUxFICp5eW91dHB1dDsKLSAgICBpbnQgeXl0eXBlOwotICAgIFlZU1RZUEUgY29uc3QgKiBj
b25zdCB5eXZhbHVlcDsKLSAgICBDb250ZXh0ICpjb250ZXh0OwotI2VuZGlmCi17Ci0gIGlmICh5
eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgi
LCB5eXRuYW1lW3l5dHlwZV0pOwotICBlbHNlCi0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50
ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotCi0gIHl5X3N5bWJvbF92YWx1ZV9wcmludCAo
eXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpOwotICBZWUZQUklOVEYgKHl5b3V0
cHV0LCAiKSIpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQg
dGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAotfCBUT1AgKGluY2x1
ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLQotI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZF
UikKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5
dHlwZV9pbnQxNiAqdG9wKQotI2Vsc2UKLXN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoYm90
dG9tLCB0b3ApCi0gICAgeXl0eXBlX2ludDE2ICpib3R0b207Ci0gICAgeXl0eXBlX2ludDE2ICp0
b3A7Ci0jZW5kaWYKLXsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9y
ICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVk
IiwgKmJvdHRvbSk7Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLX0KLQotIyBkZWZpbmUg
WVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKLWRvIHsJCQkJCQkJCVwKLSAgaWYgKHl5
ZGVidWcpCQkJCQkJCVwKLSAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJ
XAotfSB3aGlsZSAoWVlJRCAoMCkpCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcg
dG8gYmUgcmVkdWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwotCi0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9f
RlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1
bGUsIENvbnRleHQgKmNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5X3JlZHVjZV9wcmlu
dCAoeXl2c3AsIHl5cnVsZSwgY29udGV4dCkKLSAgICBZWVNUWVBFICp5eXZzcDsKLSAgICBpbnQg
eXlydWxlOwotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0jZW5kaWYKLXsKLSAgaW50IHl5bnJocyA9
IHl5cjJbeXlydWxlXTsKLSAgaW50IHl5aTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5
eXJsaW5lW3l5cnVsZV07Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkg
cnVsZSAlZCAobGluZSAlbHUpOlxuIiwKLQkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKLSAgLyog
VGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCi0gIGZvciAoeXlpID0gMDsgeXlpIDwgeXlu
cmhzOyB5eWkrKykKLSAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5
eWkgKyAxKTsKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXly
dWxlXSArIHl5aV0sCi0JCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLQkJ
ICAgICAgIAkJICAgICAgICwgY29udGV4dCk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIp
OwotICAgIH0KLX0KLQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCi1kbyB7CQkJ
CQlcCi0gIGlmICh5eWRlYnVnKQkJCQlcCi0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVs
ZSwgY29udGV4dCk7IFwKLX0gd2hpbGUgKFlZSUQgKDApKQotCi0vKiBOb256ZXJvIG1lYW5zIHBy
aW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKLSAgIG11
bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLwotaW50IHl5ZGVidWc7Ci0jZWxzZSAvKiAh
WVlERUJVRyAqLwotIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCi0jIGRlZmluZSBZWV9TWU1CT0xf
UFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKLSMgZGVmaW5lIFlZX1NUQUNLX1BS
SU5UKEJvdHRvbSwgVG9wKQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCi0jZW5kaWYg
LyogIVlZREVCVUcgKi8KLQotCi0vKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhl
IHBhcnNlcidzIHN0YWNrcy4gICovCi0jaWZuZGVmCVlZSU5JVERFUFRICi0jIGRlZmluZSBZWUlO
SVRERVBUSCAyMDAKLSNlbmRpZgotCi0vKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUg
c3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQotICAgaWYgdGhlIGJ1aWx0LWluIHN0
YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCi0KLSAgIERvIG5vdCBtYWtlIHRoaXMgdmFs
dWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCi0gICBZWVNUQUNLX0FM
TE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQotICAgZXZhbHVhdGVkIHdp
dGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCi0KLSNpZm5kZWYg
WVlNQVhERVBUSAotIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAotI2VuZGlmCi0KLQwKLQotI2lm
IFlZRVJST1JfVkVSQk9TRQotCi0jIGlmbmRlZiB5eXN0cmxlbgotIyAgaWYgZGVmaW5lZCBfX0dM
SUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKLSMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCi0j
ICBlbHNlCi0vKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCi0jaWYgKGRlZmluZWQg
X19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAo
Y29uc3QgY2hhciAqeXlzdHIpCi0jZWxzZQotc3RhdGljIFlZU0laRV9UCi15eXN0cmxlbiAoeXlz
dHIpCi0gICAgY29uc3QgY2hhciAqeXlzdHI7Ci0jZW5kaWYKLXsKLSAgWVlTSVpFX1QgeXlsZW47
Ci0gIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCi0gICAgY29udGludWU7
Ci0gIHJldHVybiB5eWxlbjsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5c3Rw
Y3B5Ci0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZp
bmVkIF9HTlVfU09VUkNFCi0jICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQotIyAgZWxzZQotLyog
Q29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWlu
YXRpbmcgJ1wwJyBpbgotICAgWVlERVNULiAgKi8KLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBk
ZWZpbmVkIF9fQzk5X19GVU5DX18gXAotICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoY2hhciAqeXlkZXN0LCBj
b25zdCBjaGFyICp5eXNyYykKLSNlbHNlCi1zdGF0aWMgY2hhciAqCi15eXN0cGNweSAoeXlkZXN0
LCB5eXNyYykKLSAgICBjaGFyICp5eWRlc3Q7Ci0gICAgY29uc3QgY2hhciAqeXlzcmM7Ci0jZW5k
aWYKLXsKLSAgY2hhciAqeXlkID0geXlkZXN0OwotICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsK
LQotICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKLSAgICBjb250aW51ZTsKLQot
ICByZXR1cm4geXlkIC0gMTsKLX0KLSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5dG5h
bWVycgotLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBw
aW5nIGF3YXkgdW5uZWNlc3NhcnkKLSAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQg
aXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQotICAgaGV1cmlzdGljIGlzIHRoYXQgZG91
YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKLSAgIGNvbnRhaW5z
IGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgotICAgYmFj
a3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJF
UyBpcwotICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9m
IHdoYXQgdGhlIHJlc3VsdAotICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVf
VAoteXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIGlmICgq
eXlzdHIgPT0gJyInKQotICAgIHsKLSAgICAgIFlZU0laRV9UIHl5biA9IDA7Ci0gICAgICBjaGFy
IGNvbnN0ICp5eXAgPSB5eXN0cjsKLQotICAgICAgZm9yICg7OykKLQlzd2l0Y2ggKCorK3l5cCkK
LQkgIHsKLQkgIGNhc2UgJ1wnJzoKLQkgIGNhc2UgJywnOgotCSAgICBnb3RvIGRvX25vdF9zdHJp
cF9xdW90ZXM7Ci0KLQkgIGNhc2UgJ1xcJzoKLQkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotCSAg
ICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8K
LQkgIGRlZmF1bHQ6Ci0JICAgIGlmICh5eXJlcykKLQkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsK
LQkgICAgeXluKys7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICciJzoKLQkgICAgaWYgKHl5cmVz
KQotCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotCSAgICByZXR1cm4geXluOwotCSAgfQotICAg
IGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKLSAgICB9Ci0KLSAgaWYgKCEgeXlyZXMpCi0gICAgcmV0
dXJuIHl5c3RybGVuICh5eXN0cik7Ci0KLSAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIp
IC0geXlyZXM7Ci19Ci0jIGVuZGlmCi0KLS8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBt
ZXNzYWdlIGFib3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCi0gICBZWUNIQVIgd2hpbGUgaW4gc3Rh
dGUgWVlTVEFURS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKLSAgIGluY2x1
ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8g
bm90Ci0gICBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgd291bGQgYmUKLSAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBh
biBvcmRpbmFyeSAic3ludGF4IGVycm9yIgotICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZ
U0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKLSAgIHNpemUgY2FsY3VsYXRp
b24uICAqLwotc3RhdGljIFlZU0laRV9UCi15eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQs
IGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQotewotICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVd
OwotCi0gIGlmICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKLSAgICBy
ZXR1cm4gMDsKLSAgZWxzZQotICAgIHsKLSAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAo
eXljaGFyKTsKLSAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVb
eXl0eXBlXSk7Ci0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwotICAgICAgWVlTSVpF
X1QgeXlzaXplMTsKLSAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOwotICAgICAgZW51bSB7
IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07Ci0gICAgICBjaGFyIGNvbnN0ICp5
eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKLSAgICAgIGludCB5eXg7Ci0KLSMg
aWYgMAotICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUg
Zm9ybWF0cyB0aGF0IGFyZQotCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KLSAgICAgIFlZ
Xygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7Ci0gICAgICBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7Ci0gICAgICBZWV8oInN5bnRh
eCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7Ci0gICAg
ICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9y
ICVzIG9yICVzIik7Ci0jIGVuZGlmCi0gICAgICBjaGFyICp5eWZtdDsKLSAgICAgIGNoYXIgY29u
c3QgKnl5ZjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRh
eCBlcnJvciwgdW5leHBlY3RlZCAlcyI7Ci0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVj
dGluZ1tdID0gIiwgZXhwZWN0aW5nICVzIjsKLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3Jb
XSA9ICIgb3IgJXMiOwotICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCi0J
CSAgICArIHNpemVvZiB5eWV4cGVjdGluZyAtIDEKLQkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0Vf
QVJHU19NQVhJTVVNIC0gMikKLQkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKLSAgICAg
IGNoYXIgY29uc3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7Ci0KLSAgICAgIC8qIFN0YXJ0IFlZ
WCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KLQkgWVlD
SEVDSy4gICovCi0gICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0KLSAg
ICAgIC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAq
LwotICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOwotICAgICAgaW50IHl5
eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwot
ICAgICAgaW50IHl5Y291bnQgPSAxOwotCi0gICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBl
XTsKLSAgICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOwotCi0g
ICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQotCWlmICh5eWNo
ZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKLQkgIHsKLQkgICAgaWYg
KHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKLQkgICAgICB7Ci0JCXl5
Y291bnQgPSAxOwotCQl5eXNpemUgPSB5eXNpemUwOwotCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4
cGVjdGVkIC0gMV0gPSAnXDAnOwotCQlicmVhazsKLQkgICAgICB9Ci0JICAgIHl5YXJnW3l5Y291
bnQrK10gPSB5eXRuYW1lW3l5eF07Ci0JICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIg
KDAsIHl5dG5hbWVbeXl4XSk7Ci0JICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5
c2l6ZSk7Ci0JICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0JICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5
Zm10LCB5eXByZWZpeCk7Ci0JICAgIHl5cHJlZml4ID0geXlvcjsKLQkgIH0KLQotICAgICAgeXlm
ID0gWVlfKHl5Zm9ybWF0KTsKLSAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlm
KTsKLSAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7Ci0gICAgICB5
eXNpemUgPSB5eXNpemUxOwotCi0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQotCXJldHVybiBZ
WVNJWkVfTUFYSU1VTTsKLQotICAgICAgaWYgKHl5cmVzdWx0KQotCXsKLQkgIC8qIEF2b2lkIHNw
cmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KLQkgICAg
IERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCi0J
ICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAq
LwotCSAgY2hhciAqeXlwID0geXlyZXN1bHQ7Ci0JICBpbnQgeXlpID0gMDsKLQkgIHdoaWxlICgo
Knl5cCA9ICp5eWYpICE9ICdcMCcpCi0JICAgIHsKLQkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYg
eXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQotCQl7Ci0JCSAgeXlwICs9IHl5dG5hbWVy
ciAoeXlwLCB5eWFyZ1t5eWkrK10pOwotCQkgIHl5ZiArPSAyOwotCQl9Ci0JICAgICAgZWxzZQot
CQl7Ci0JCSAgeXlwKys7Ci0JCSAgeXlmKys7Ci0JCX0KLQkgICAgfQotCX0KLSAgICAgIHJldHVy
biB5eXNpemU7Ci0gICAgfQotfQotI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwotDAotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBSZWxl
YXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKLWAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qQVJHU1VTRUQqLwot
I2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8
IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLXN0YXRpYyB2b2lkCi15
eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1
ZXAsIENvbnRleHQgKmNvbnRleHQpCi0jZWxzZQotc3RhdGljIHZvaWQKLXl5ZGVzdHJ1Y3QgKHl5
bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQotICAgIGNvbnN0IGNoYXIgKnl5bXNnOwot
ICAgIGludCB5eXR5cGU7Ci0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7Ci0gICAgQ29udGV4dCAqY29u
dGV4dDsKLSNlbmRpZgotewotICBZWVVTRSAoeXl2YWx1ZXApOwotICBZWVVTRSAoY29udGV4dCk7
Ci0KLSAgaWYgKCF5eW1zZykKLSAgICB5eW1zZyA9ICJEZWxldGluZyI7Ci0gIFlZX1NZTUJPTF9Q
UklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKLQotICBzd2l0Y2gg
KHl5dHlwZSkKLSAgICB7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0JYnJlYWs7Ci0gICAgfQotfQotDAot
Ci0vKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCi0j
aWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2Nw
bHVzcGx1cwotaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwotI2Vsc2UKLWludCB5
eXBhcnNlICgpOwotI2VuZGlmCi0jZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KLSNpZiBkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKLWludCB5eXBhcnNlIChDb250ZXh0
ICpjb250ZXh0KTsKLSNlbHNlCi1pbnQgeXlwYXJzZSAoKTsKLSNlbmRpZgotI2VuZGlmIC8qICEg
WVlQQVJTRV9QQVJBTSAqLwotCi0KLQotCi0KLQotLyotLS0tLS0tLS0tLgotfCB5eXBhcnNlLiAg
fAotYC0tLS0tLS0tLS0qLwotCi0jaWZkZWYgWVlQQVJTRV9QQVJBTQotI2lmIChkZWZpbmVkIF9f
U1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCi0gICAgIHx8IGRlZmluZWQgX19jcGx1
c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKLWludAoteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9Q
QVJBTSkKLSNlbHNlCi1pbnQKLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCi0gICAgdm9pZCAqWVlQ
QVJTRV9QQVJBTTsKLSNlbmRpZgotI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCi0jaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKLSAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQotaW50Ci15eXBhcnNlIChDb250ZXh0
ICpjb250ZXh0KQotI2Vsc2UKLWludAoteXlwYXJzZSAoY29udGV4dCkKLSAgICBDb250ZXh0ICpj
b250ZXh0OwotI2VuZGlmCi0jZW5kaWYKLXsKLSAgLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAg
Ki8KLWludCB5eWNoYXI7Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVh
ZCBzeW1ib2wuICAqLwotWVlTVFlQRSB5eWx2YWw7Ci0KLS8qIE51bWJlciBvZiBzeW50YXggZXJy
b3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLQotICBpbnQgeXlzdGF0ZTsKLSAgaW50IHl5
bjsKLSAgaW50IHl5cmVzdWx0OwotICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9y
ZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgaW50IHl5ZXJyc3RhdHVzOwotICAvKiBM
b29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIu
ICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIC8qIEJ1ZmZl
ciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLwotICBjaGFy
IHl5bXNnYnVmWzEyOF07Ci0gIGNoYXIgKnl5bXNnID0geXltc2didWY7Ci0gIFlZU0laRV9UIHl5
bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotI2VuZGlmCi0KLSAgLyogVGhyZWUgc3RhY2tz
IGFuZCB0aGVpciB0b29sczoKLSAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcywKLSAgICAg
YHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywKLSAgICAgYHl5bHMnOiByZWxhdGVk
IHRvIGxvY2F0aW9ucy4KLQotICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocnUgc2VwYXJhdGUg
cG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVs
c2V3aGVyZS4gICovCi0KLSAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KLSAgeXl0eXBlX2ludDE2
IHl5c3NhW1lZSU5JVERFUFRIXTsKLSAgeXl0eXBlX2ludDE2ICp5eXNzID0geXlzc2E7Ci0gIHl5
dHlwZV9pbnQxNiAqeXlzc3A7Ci0KLSAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8K
LSAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gIFlZU1RZUEUgKnl5dnMgPSB5eXZzYTsK
LSAgWVlTVFlQRSAqeXl2c3A7Ci0KLQotCi0jZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3Ag
LT0gKE4pLCB5eXNzcCAtPSAoTikpCi0KLSAgWVlTSVpFX1QgeXlzdGFja3NpemUgPSBZWUlOSVRE
RVBUSDsKLQotICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVl
IGFuZCBsb2NhdGlvbiBmcm9tIHRoZQotICAgICBhY3Rpb24gcm91dGluZXMuICAqLwotICBZWVNU
WVBFIHl5dmFsOwotCi0KLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2Yg
dGhlIHJlZHVjZWQgcnVsZS4KLSAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3Vs
ZCBiZSBwb3BwZWQuICAqLwotICBpbnQgeXlsZW4gPSAwOwotCi0gIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7Ci0KLSAgeXlzdGF0ZSA9IDA7Ci0gIHl5ZXJyc3RhdHVz
ID0gMDsKLSAgeXluZXJycyA9IDA7Ci0gIHl5Y2hhciA9IFlZRU1QVFk7CQkvKiBDYXVzZSBhIHRv
a2VuIHRvIGJlIHJlYWQuICAqLwotCi0gIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCi0g
ICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFjawotICAgICBz
byB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCi0g
ICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KLQotICB5
eXNzcCA9IHl5c3M7Ci0gIHl5dnNwID0geXl2czsKLQotICBnb3RvIHl5c2V0c3RhdGU7Ci0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGlu
IHl5c3RhdGUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgotICAvKiBJbiBhbGwgY2FzZXMsIHdo
ZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcwotICAgICBoYXZl
IGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3Rh
Y2tzLiAgKi8KLSAgeXlzc3ArKzsKLQotIHl5c2V0c3RhdGU6Ci0gICp5eXNzcCA9IHl5c3RhdGU7
Ci0KLSAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgewotICAgICAg
LyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVt
ZW50cy4gICovCi0gICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwotCi0j
aWZkZWYgeXlvdmVyZmxvdwotICAgICAgewotCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFs
bG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLQkgICB0aGVzZSBzbyB0aGF0IHRoZSAm
J3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0JICAgbWVtb3J5LiAgKi8KLQlZWVNU
WVBFICp5eXZzMSA9IHl5dnM7Ci0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0KLQotCS8q
IEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRo
ZQotCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRv
IGJlIGEKLQkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0Ci0JICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4g
ICovCi0JeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0JCSAgICAmeXlzczEs
IHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLQkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9m
ICgqeXl2c3ApLAotCi0JCSAgICAmeXlzdGFja3NpemUpOwotCi0JeXlzcyA9IHl5c3MxOwotCXl5
dnMgPSB5eXZzMTsKLSAgICAgIH0KLSNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KLSMgaWZuZGVm
IFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0jIGVsc2UKLSAg
ICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwotICAgICAgaWYgKFlZTUFY
REVQVEggPD0geXlzdGFja3NpemUpCi0JZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgIHl5c3Rh
Y2tzaXplICo9IDI7Ci0gICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQotCXl5c3Rh
Y2tzaXplID0gWVlNQVhERVBUSDsKLQotICAgICAgewotCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOwotCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLQkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RB
Q0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0JaWYgKCEgeXlwdHIpCi0J
ICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5dnMpOwotCi0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0JaWYgKHl5
c3MxICE9IHl5c3NhKQotCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlm
Ci0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNp
emUgLSAxOwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLQotCi0gICAgICBZWURQ
UklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCi0JCSAgKHVu
c2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwotCi0gICAgICBpZiAoeXlzcyArIHl5c3Rh
Y2tzaXplIC0gMSA8PSB5eXNzcCkKLQlZWUFCT1JUOwotICAgIH0KLQotICBZWURQUklOVEYgKChz
dGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCi0gIGdvdG8geXliYWNr
dXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5YmFja3VwLiAgfAotYC0tLS0tLS0tLS0tKi8KLXl5
YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJl
bnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBh
bmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lk
ZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLwot
ICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gIGlmICh5eW4gPT0gWVlQQUNUX05JTkYpCi0gICAg
Z290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2stYWhlYWQgdG9r
ZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCi0KLSAgLyogWVlDSEFSIGlzIGVpdGhl
ciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLwotICBp
ZiAoeXljaGFyID09IFlZRU1QVFkpCi0gICAgewotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAi
UmVhZGluZyBhIHRva2VuOiAiKSk7Ci0gICAgICB5eWNoYXIgPSBZWUxFWDsKLSAgICB9Ci0KLSAg
aWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlF
T0Y7Ci0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikp
OwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXlj
aGFyKTsKLSAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAm
eXlsdmFsLCAmeXlsbG9jKTsKLSAgICB9Ci0KLSAgLyogSWYgdGhlIHByb3BlciBhY3Rpb24gb24g
c2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCi0gICAgIGRldGVjdCBhbiBl
cnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCi0gIHl5biArPSB5eXRva2VuOwotICBpZiAoeXlu
IDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9rZW4pCi0gICAgZ290
byB5eWRlZmF1bHQ7Ci0gIHl5biA9IHl5dGFibGVbeXluXTsKLSAgaWYgKHl5biA8PSAwKQotICAg
IHsKLSAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlUQUJMRV9OSU5GKQotCWdvdG8geXll
cnJsYWI7Ci0gICAgICB5eW4gPSAteXluOwotICAgICAgZ290byB5eXJlZHVjZTsKLSAgICB9Ci0K
LSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gIC8qIENvdW50IHRva2Vu
cyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKLSAgICAg
c3RhdHVzLiAgKi8KLSAgaWYgKHl5ZXJyc3RhdHVzKQotICAgIHl5ZXJyc3RhdHVzLS07Ci0KLSAg
LyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJT
aGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCi0gIC8qIERpc2NhcmQgdGhl
IHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICovCi0gIGlmICh5eWNoYXIgIT0gWVlF
T0YpCi0gICAgeXljaGFyID0gWVlFTVBUWTsKLQotICB5eXN0YXRlID0geXluOwotICAqKyt5eXZz
cCA9IHl5bHZhbDsKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlkZWZhdWx0
IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8Ci1gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwoteXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5biA9PSAw
KQotICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0KLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8Ci1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6Ci0gIC8qIHl5biBpcyB0
aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCi0gIHl5bGVuID0geXlyMlt5
eW5dOwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2
YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICBgJCQgPSAkMScuCi0KLSAgICAgT3RoZXJ3aXNlLCB0
aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgotICAgICBUaGlzIGJlaGF2
aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5
IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5jb25kaXRpb25hbGx5IG1ha2Vz
IHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCi0gICAgIEdDQyB3YXJu
aW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCi0gIHl5dmFsID0g
eXl2c3BbMS15eWxlbl07Ci0KLQotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3aXRjaCAo
eXluKQotICAgIHsKLSAgICAgICAgY2FzZSAyOgotCi0gICAgewotICAgICAgICAqKGNvbnRleHQt
PnJlc3VsdCkgPSBzdGF0aWNfY2FzdDxpbnQ+KCh5eXZzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAg
IFlZQUNDRVBUOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pIHx8ICh5eXZzcFsoMykgLSAoMyldKTsK
LSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNToKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSAmJiAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXSkgfCAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQot
ICBjYXNlIDc6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkg
XiAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDg6Ci0K
LSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgJiAoeXl2c3BbKDMp
IC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDk6Ci0KLSAgICB7Ci0gICAg
ICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgIT0gKHl5dnNwWygzKSAtICgzKV0pOwot
ICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMDoKLQotICAgIHsKLSAgICAgICAgKHl5dmFs
KSA9ICh5eXZzcFsoMSkgLSAoMyldKSA9PSAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAg
ICBicmVhazsKLQotICBjYXNlIDExOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0pID49ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTI6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMp
XSkgPD0gKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAx
MzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSA+ICh5eXZz
cFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTQ6Ci0KLSAgICB7
Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgPCAoeXl2c3BbKDMpIC0gKDMp
XSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE1OgotCi0gICAgewotICAgICAgICAo
eXl2YWwpID0gKHl5dnNwWygxKSAtICgzKV0pID4+ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7
fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTY6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXSkgPDwgKHl5dnNwWygzKSAtICgzKV0pOwotICAgIDt9Ci0gICAgYnJl
YWs7Ci0KLSAgY2FzZSAxNzoKLQotICAgIHsKLSAgICAgICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkg
LSAoMyldKSAtICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICA7fQotICAgIGJyZWFrOwotCi0gIGNh
c2UgMTg6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXSkgKyAo
eXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDE5OgotCi0g
ICAgewotICAgICAgICBpZiAoKHl5dnNwWygzKSAtICgzKV0pID09IDApIHsKLSAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAoeXl2c3Bb
KDEpIC0gKDMpXSkgPDwgIiAlICIgPDwgKHl5dnNwWygzKSAtICgzKV0pOwotICAgICAgICAgICAg
c3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9j
YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19z
dHIoKSk7Ci0gICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgKHl5dmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldKSAlICh5eXZzcFsoMykgLSAoMyldKTsKLSAg
ICAgICAgfQotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAyMDoKLQotICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoMyldKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0gPDwgKHl5dnNwWygxKSAtICgzKV0p
IDw8ICIgLyAiIDw8ICh5eXZzcFsoMykgLSAoMyldKTsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+
cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwotICAg
ICAgICAgICAgWVlBQk9SVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgLyAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgICAgIH0KLSAg
ICA7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjE6Ci0KLSAgICB7Ci0gICAgICAgICh5eXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXSkgKiAoeXl2c3BbKDMpIC0gKDMpXSk7Ci0gICAgO30KLSAgICBi
cmVhazsKLQotICBjYXNlIDIyOgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gISAoeXl2c3Bb
KDIpIC0gKDIpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDIzOgotCi0gICAgewot
ICAgICAgICAoeXl2YWwpID0gfiAoeXl2c3BbKDIpIC0gKDIpXSk7Ci0gICAgO30KLSAgICBicmVh
azsKLQotICBjYXNlIDI0OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gLSAoeXl2c3BbKDIp
IC0gKDIpXSk7Ci0gICAgO30KLSAgICBicmVhazsKLQotICBjYXNlIDI1OgotCi0gICAgewotICAg
ICAgICAoeXl2YWwpID0gKyAoeXl2c3BbKDIpIC0gKDIpXSk7Ci0gICAgO30KLSAgICBicmVhazsK
LQotICBjYXNlIDI2OgotCi0gICAgewotICAgICAgICAoeXl2YWwpID0gKHl5dnNwWygyKSAtICgz
KV0pOwotICAgIDt9Ci0gICAgYnJlYWs7Ci0KLQotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICov
Ci0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgWVlfU1lNQk9MX1BSSU5UICgiLT4g
JCQgPSIsIHl5cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOwotCi0gIFlZUE9QU1RBQ0sgKHl5bGVu
KTsKLSAgeXlsZW4gPSAwOwotICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotCi0gICor
K3l5dnNwID0geXl2YWw7Ci0KLQotICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSBy
ZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0aGF0IGdvZXMgdG8sIGJhc2Vk
IG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKLSAgICAgbnVtYmVy
IHJlZHVjZWQgYnkuICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsKLQotICB5eXN0YXRlID0geXlw
Z290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5
c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQotICAgIHl5c3Rh
dGUgPSB5eXRhYmxlW3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5
eW4gLSBZWU5UT0tFTlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3Rp
bmcgZXJyb3IgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVy
cmxhYjoKLSAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBv
cnQgdGhpcyBlcnJvci4gICovCi0gIGlmICgheXllcnJzdGF0dXMpCi0gICAgewotICAgICAgKyt5
eW5lcnJzOwotI2lmICEgWVlFUlJPUl9WRVJCT1NFCi0gICAgICB5eWVycm9yIChjb250ZXh0LCBZ
WV8oInN5bnRheCBlcnJvciIpKTsKLSNlbHNlCi0gICAgICB7Ci0JWVlTSVpFX1QgeXlzaXplID0g
eXlzeW50YXhfZXJyb3IgKDAsIHl5c3RhdGUsIHl5Y2hhcik7Ci0JaWYgKHl5bXNnX2FsbG9jIDwg
eXlzaXplICYmIHl5bXNnX2FsbG9jIDwgWVlTVEFDS19BTExPQ19NQVhJTVVNKQotCSAgewotCSAg
ICBZWVNJWkVfVCB5eWFsbG9jID0gMiAqIHl5c2l6ZTsKLQkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5
eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKLQkgICAgICB5eWFs
bG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOwotCSAgICBpZiAoeXltc2cgIT0geXltc2didWYp
Ci0JICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0JICAgIHl5bXNnID0gKGNoYXIgKikgWVlT
VEFDS19BTExPQyAoeXlhbGxvYyk7Ci0JICAgIGlmICh5eW1zZykKLQkgICAgICB5eW1zZ19hbGxv
YyA9IHl5YWxsb2M7Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCXl5bXNnID0geXltc2didWY7Ci0J
CXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOwotCSAgICAgIH0KLQkgIH0KLQotCWlmICgw
IDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5eW1zZ19hbGxvYykKLQkgIHsKLQkgICAgKHZvaWQpIHl5
c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKLQkgICAgeXllcnJvciAoY29u
dGV4dCwgeXltc2cpOwotCSAgfQotCWVsc2UKLQkgIHsKLQkgICAgeXllcnJvciAoY29udGV4dCwg
WVlfKCJzeW50YXggZXJyb3IiKSk7Ci0JICAgIGlmICh5eXNpemUgIT0gMCkKLQkgICAgICBnb3Rv
IHl5ZXhoYXVzdGVkbGFiOwotCSAgfQotICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0KLQotICBp
ZiAoeXllcnJzdGF0dXMgPT0gMykKLSAgICB7Ci0gICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBm
YWlsZWQgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBhbgotCSBlcnJvciwgZGlzY2Fy
ZCBpdC4gICovCi0KLSAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0JewotCSAgLyogUmV0dXJu
IGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLQkgIGlmICh5eWNoYXIgPT0gWVlFT0Yp
Ci0JICAgIFlZQUJPUlQ7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIHl5ZGVzdHJ1Y3QgKCJFcnJv
cjogZGlzY2FyZGluZyIsCi0JCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOwotCSAg
eXljaGFyID0gWVlFTVBUWTsKLQl9Ci0gICAgfQotCi0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1
c2UgbG9vay1haGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4u
ICAqLwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQg
ZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21w
aWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlF
UlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4g
dXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5
eWVycm9ybGFiOwotCi0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxl
IHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAgKi8KLSAgWVlQT1BT
VEFDSyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNz
cCk7Ci0gIHl5c3RhdGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K
LXwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlF
UlJPUi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNo
IHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwotCi0gIGZvciAoOzspCi0g
ICAgewotICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwotICAgICAgaWYgKHl5biAhPSBZWVBB
Q1RfTklORikKLQl7Ci0JICB5eW4gKz0gWVlURVJST1I7Ci0JICBpZiAoMCA8PSB5eW4gJiYgeXlu
IDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0JICAgIHsKLQkgICAgICB5
eW4gPSB5eXRhYmxlW3l5bl07Ci0JICAgICAgaWYgKDAgPCB5eW4pCi0JCWJyZWFrOwotCSAgICB9
Ci0JfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3Qg
aGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0gICAgICBpZiAoeXlzc3AgPT0geXlzcykKLQlZ
WUFCT1JUOwotCi0KLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCi0JCSAgeXlz
dG9zW3l5c3RhdGVdLCB5eXZzcCwgY29udGV4dCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAg
ICAgIHl5c3RhdGUgPSAqeXlzc3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OwotICAgIH0KLQotICBpZiAoeXluID09IFlZRklOQUwpCi0gICAgWVlBQ0NFUFQ7Ci0KLSAgKisr
eXl2c3AgPSB5eWx2YWw7Ci0KLQotICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLwotICBZ
WV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOwot
Ci0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNv
bWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15
eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBnb3RvIHl5cmV0dXJuOwotCi0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQg
Y29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15
eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdvdG8geXlyZXR1cm47Ci0KLSNpZm5kZWYg
eXlvdmVyZmxvdwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgotfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJl
LiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwoteXlleGhhdXN0ZWRsYWI6Ci0gIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1
c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAyOwotICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlm
Ci0KLXl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZ
KQotICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAotCQkg
eXl0b2tlbiwgJnl5bHZhbCwgY29udGV4dCk7Ci0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1i
b2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUFCT1JU
IG9yIFlZQUNDRVBULiAgKi8KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICBZWV9TVEFDS19QUklO
VCAoeXlzcywgeXlzc3ApOwotICB3aGlsZSAoeXlzc3AgIT0geXlzcykKLSAgICB7Ci0gICAgICB5
eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCi0JCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
LCBjb250ZXh0KTsKLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwotICAgIH0KLSNpZm5kZWYgeXlvdmVy
ZmxvdwotICBpZiAoeXlzcyAhPSB5eXNzYSkKLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOwotI2Vu
ZGlmCi0jaWYgWVlFUlJPUl9WRVJCT1NFCi0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKLSAgICBZ
WVNUQUNLX0ZSRUUgKHl5bXNnKTsKLSNlbmRpZgotICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2Vk
LiAgKi8KLSAgcmV0dXJuIFlZSUQgKHl5cmVzdWx0KTsKLX0KLQotCi0KLQotCi1pbnQgeXlsZXgo
WVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgaW50IHR5cGUgPSAwOwot
Ci0gICAgcHA6OlRva2VuKiB0b2tlbiA9IGNvbnRleHQtPnRva2VuOwotICAgIHN3aXRjaCAodG9r
ZW4tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoKLSAgICAg
ICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+dmFsdWUuY19zdHIoKSwgTlVMTCwgMCk7Ci0gICAg
ICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBw
cDo6VG9rZW46Ok9QX09SOiB0eXBlID0gVE9LX09QX09SOyBicmVhazsKLSAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBUT0tfT1BfQU5EOyBicmVhazsKLSAgICAgIGNhc2UgcHA6
OlRva2VuOjpPUF9ORTogdHlwZSA9IFRPS19PUF9ORTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpU
b2tlbjo6T1BfRVE6IHR5cGUgPSBUT0tfT1BfRVE7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0dFOiB0eXBlID0gVE9LX09QX0dFOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2Vu
OjpPUF9MRTogdHlwZSA9IFRPS19PUF9MRTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6
T1BfUklHSFQ6IHR5cGUgPSBUT0tfT1BfUklHSFQ7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9r
ZW46Ok9QX0xFRlQ6IHR5cGUgPSBUT0tfT1BfTEVGVDsgYnJlYWs7Ci0gICAgICBjYXNlICd8Jzog
dHlwZSA9ICd8JzsgYnJlYWs7Ci0gICAgICBjYXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7Ci0g
ICAgICBjYXNlICcmJzogdHlwZSA9ICcmJzsgYnJlYWs7Ci0gICAgICBjYXNlICc+JzogdHlwZSA9
ICc+JzsgYnJlYWs7Ci0gICAgICBjYXNlICc8JzogdHlwZSA9ICc8JzsgYnJlYWs7Ci0gICAgICBj
YXNlICctJzogdHlwZSA9ICctJzsgYnJlYWs7Ci0gICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsg
YnJlYWs7Ci0gICAgICBjYXNlICclJzogdHlwZSA9ICclJzsgYnJlYWs7Ci0gICAgICBjYXNlICcv
JzogdHlwZSA9ICcvJzsgYnJlYWs7Ci0gICAgICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7
Ci0gICAgICBjYXNlICchJzogdHlwZSA9ICchJzsgYnJlYWs7Ci0gICAgICBjYXNlICd+JzogdHlw
ZSA9ICd+JzsgYnJlYWs7Ci0gICAgICBjYXNlICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7Ci0gICAg
ICBjYXNlICcpJzogdHlwZSA9ICcpJzsgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwot
ICAgIH0KLQotICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQg
b25lIGlzIHZhbGlkLgotICAgIGlmICh0eXBlICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9r
ZW4pOwotCi0gICAgcmV0dXJuIHR5cGU7Ci19Ci0KLXZvaWQgeXllcnJvcihDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci0gICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLUV4
cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25QYXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGlj
cyogZGlhZ25vc3RpY3MpIDoKLSAgICBtTGV4ZXIobGV4ZXIpLAotICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcykKLXsKLX0KLQotYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiog
dG9rZW4sIGludCogcmVzdWx0KQotewotICAgIENvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0
LmRpYWdub3N0aWNzID0gbURpYWdub3N0aWNzOwotICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7
Ci0gICAgY29udGV4dC50b2tlbiA9IHRva2VuOwotICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0
OwotICAgIGludCByZXQgPSB5eXBhcnNlKCZjb250ZXh0KTsKLSAgICBzd2l0Y2ggKHJldCkKLSAg
ICB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
ICBjYXNlIDI6Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRf
T0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXQgPT0gMDsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25Q
YXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyZDA1OS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25l
dy9FeHByZXNzaW9uUGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1JfRVhQUkVTU0lPTl9QQVJT
RVJfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0VYUFJFU1NJT05fUEFSU0VSX0hf
Ci0KLSNpbmNsdWRlICJwcF91dGlscy5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgRGlh
Z25vc3RpY3M7Ci1jbGFzcyBMZXhlcjsKLXN0cnVjdCBUb2tlbjsKLQotY2xhc3MgRXhwcmVzc2lv
blBhcnNlcgotewotICBwdWJsaWM6Ci0gICAgRXhwcmVzc2lvblBhcnNlcihMZXhlciogbGV4ZXIs
IERpYWdub3N0aWNzKiBkaWFnbm9zdGljcyk7Ci0KLSAgICBib29sIHBhcnNlKFRva2VuKiB0b2tl
biwgaW50KiByZXN1bHQpOwotCi0gIHByaXZhdGU6Ci0gICAgUFBfRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEV4cHJlc3Npb25QYXJzZXIpOwotCi0gICAgTGV4ZXIqIG1MZXhlcjsKLSAgICBEaWFn
bm9zdGljcyogbURpYWdub3N0aWNzOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0jZW5kaWYg
IC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9FWFBSRVNTSU9OX1BBUlNFUl9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
RXhwcmVzc2lvblBhcnNlci55IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci55CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxN2M5ZjA1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIueQorKysgL2Rl
di9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKgotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBj
b250YWlucyB0aGUgWWFjYyBncmFtbWFyIGZvciBHTFNMIEVTIHByZXByb2Nlc3NvciBleHByZXNz
aW9uLgotCi1JRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5l
cmF0ZV9wYXJzZXIuc2gsCi1XSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgcHJlcHJvY2Vzc29y
IGV4cHJlc3Npb24gcGFyc2VyLgotKi8KLQotJXsKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBUaGlzIGZp
bGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEK
LQotI2lmIGRlZmluZWQoX19HTlVDX18pCi0vLyBUb2dnbGUgdGhlIHdhcm5pbmcgZm9yIC1XcHJh
Z21hcyB0byBlbnN1cmUgd2UgZG8gbm90IGJyZWFrIHRoZSBidWlsZAotLy8gd2l0aCBlYXJsaWVy
IGNvbXBpbGVyIHZlcnNpb25zIGJlY2F1c2Ugb2YgdW5rbm93biBwcmFnbWEgb3B0aW9ucy4KLSNw
cmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwcmFnbWFzIgotLy8gVHJpZ2dlcmVkIGJ5
IHRoZSBhdXRvLWdlbmVyYXRlZCBwcGx2YWwgdmFyaWFibGUuCi0jcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyB3YXJu
aW5nICItV3ByYWdtYXMiCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQwNjUgNDcwMSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiRXhwcmVzc2lvblBhcnNl
ci5oIgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUg
PHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIkxleGVyLmgi
Ci0jaW5jbHVkZSAiVG9rZW4uaCIKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi10eXBlZGVmIF9f
aW50NjQgWVlTVFlQRTsKLSNkZWZpbmUgc3RydG9sbCBfc3RydG9pNjQKLSNlbHNlCi0jaW5jbHVk
ZSA8c3RkaW50Lmg+Ci10eXBlZGVmIGludG1heF90IFlZU1RZUEU7Ci0jZW5kaWYgIC8vIF9NU0Nf
VkVSCi0jZGVmaW5lIFlZRU5BQkxFX05MUyAwCi0jZGVmaW5lIFlZTFRZUEVfSVNfVFJJVklBTCAx
Ci0jZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFS
RUQgMQotCi1uYW1lc3BhY2Ugewotc3RydWN0IENvbnRleHQKLXsKLSAgICBwcDo6RGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzOwotICAgIHBwOjpMZXhlciogbGV4ZXI7Ci0gICAgcHA6OlRva2VuKiB0
b2tlbjsKLSAgICBpbnQqIHJlc3VsdDsKLX07Ci19ICAvLyBuYW1lc3BhY2UKLSV9Ci0KLSVwdXJl
LXBhcnNlcgotJW5hbWUtcHJlZml4PSJwcCIKLSVwYXJzZS1wYXJhbSB7Q29udGV4dCAqY29udGV4
dH0KLSVsZXgtcGFyYW0ge0NvbnRleHQgKmNvbnRleHR9Ci0KLSV7Ci1zdGF0aWMgaW50IHl5bGV4
KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZXh0KTsKLXN0YXRpYyB2b2lkIHl5ZXJyb3Io
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKLSV9Ci0KLSV0b2tlbiBUT0tf
Q09OU1RfSU5UCi0lbGVmdCBUT0tfT1BfT1IKLSVsZWZ0IFRPS19PUF9BTkQKLSVsZWZ0ICd8Jwot
JWxlZnQgJ14nCi0lbGVmdCAnJicKLSVsZWZ0IFRPS19PUF9FUSBUT0tfT1BfTkUKLSVsZWZ0ICc8
JyAnPicgVE9LX09QX0xFIFRPS19PUF9HRQotJWxlZnQgVE9LX09QX0xFRlQgVE9LX09QX1JJR0hU
Ci0lbGVmdCAnKycgJy0nCi0lbGVmdCAnKicgJy8nICclJwotJXJpZ2h0IFRPS19VTkFSWQotCi0l
JQotCi1pbnB1dAotICAgIDogZXhwcmVzc2lvbiB7Ci0gICAgICAgICooY29udGV4dC0+cmVzdWx0
KSA9IHN0YXRpY19jYXN0PGludD4oJDEpOwotICAgICAgICBZWUFDQ0VQVDsKLSAgICB9Ci07Ci0K
LWV4cHJlc3Npb24KLSAgICA6IFRPS19DT05TVF9JTlQKLSAgICB8IGV4cHJlc3Npb24gVE9LX09Q
X09SIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxIHx8ICQzOwotICAgIH0KLSAgICB8IGV4
cHJlc3Npb24gVE9LX09QX0FORCBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSAmJiAkMzsK
LSAgICB9Ci0gICAgfCBleHByZXNzaW9uICd8JyBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAk
MSB8ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJ14nIGV4cHJlc3Npb24gewotICAgICAg
ICAkJCA9ICQxIF4gJDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiAnJicgZXhwcmVzc2lvbiB7
Ci0gICAgICAgICQkID0gJDEgJiAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uIFRPS19PUF9O
RSBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSAhPSAkMzsKLSAgICB9Ci0gICAgfCBleHBy
ZXNzaW9uIFRPS19PUF9FUSBleHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSA9PSAkMzsKLSAg
ICB9Ci0gICAgfCBleHByZXNzaW9uIFRPS19PUF9HRSBleHByZXNzaW9uIHsKLSAgICAgICAgJCQg
PSAkMSA+PSAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uIFRPS19PUF9MRSBleHByZXNzaW9u
IHsKLSAgICAgICAgJCQgPSAkMSA8PSAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICc+JyBl
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSAkMSA+ICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Np
b24gJzwnIGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxIDwgJDM7Ci0gICAgfQotICAgIHwg
ZXhwcmVzc2lvbiBUT0tfT1BfUklHSFQgZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gJDEgPj4g
JDM7Ci0gICAgfQotICAgIHwgZXhwcmVzc2lvbiBUT0tfT1BfTEVGVCBleHByZXNzaW9uIHsKLSAg
ICAgICAgJCQgPSAkMSA8PCAkMzsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uICctJyBleHByZXNz
aW9uIHsKLSAgICAgICAgJCQgPSAkMSAtICQzOwotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJysn
IGV4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxICsgJDM7Ci0gICAgfQotICAgIHwgZXhwcmVz
c2lvbiAnJScgZXhwcmVzc2lvbiB7Ci0gICAgICAgIGlmICgkMyA9PSAwKSB7Ci0gICAgICAgICAg
ICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwg
IiAlICIgPDwgJDM7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigp
OwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3Rp
Y3M6OkRJVklTSU9OX0JZX1pFUk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKLSAgICAgICAgICAgIFlZQUJPUlQ7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkJCA9ICQxICUgJDM7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgfCBleHByZXNzaW9uICcvJyBleHByZXNzaW9uIHsKLSAgICAgICAgaWYgKCQzID09
IDApIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgICAg
IHN0cmVhbSA8PCAkMSA8PCAiIC8gIiA8PCAkMzsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRl
eHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwotICAgICAg
ICAgICAgWVlBQk9SVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICQkID0gJDEgLyAk
MzsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGV4cHJlc3Npb24gJyonIGV4cHJlc3Npb24gewot
ICAgICAgICAkJCA9ICQxICogJDM7Ci0gICAgfQotICAgIHwgJyEnIGV4cHJlc3Npb24gJXByZWMg
VE9LX1VOQVJZIHsKLSAgICAgICAgJCQgPSAhICQyOwotICAgIH0KLSAgICB8ICd+JyBleHByZXNz
aW9uICVwcmVjIFRPS19VTkFSWSB7Ci0gICAgICAgICQkID0gfiAkMjsKLSAgICB9Ci0gICAgfCAn
LScgZXhwcmVzc2lvbiAlcHJlYyBUT0tfVU5BUlkgewotICAgICAgICAkJCA9IC0gJDI7Ci0gICAg
fQotICAgIHwgJysnIGV4cHJlc3Npb24gJXByZWMgVE9LX1VOQVJZIHsKLSAgICAgICAgJCQgPSAr
ICQyOwotICAgIH0KLSAgICB8ICcoJyBleHByZXNzaW9uICcpJyB7Ci0gICAgICAgICQkID0gJDI7
Ci0gICAgfQotOwotCi0lJQotCi1pbnQgeXlsZXgoWVlTVFlQRSogbHZhbHAsIENvbnRleHQqIGNv
bnRleHQpCi17Ci0gICAgaW50IHR5cGUgPSAwOwotCi0gICAgcHA6OlRva2VuKiB0b2tlbiA9IGNv
bnRleHQtPnRva2VuOwotICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBwcDo6VG9rZW46OkNPTlNUX0lOVDoKLSAgICAgICAgKmx2YWxwID0gc3RydG9sbCh0b2tlbi0+
dmFsdWUuY19zdHIoKSwgTlVMTCwgMCk7Ci0gICAgICAgIHR5cGUgPSBUT0tfQ09OU1RfSU5UOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX09SOiB0eXBlID0gVE9L
X09QX09SOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9BTkQ6IHR5cGUgPSBUT0tf
T1BfQU5EOyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9ORTogdHlwZSA9IFRPS19P
UF9ORTsgYnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfRVE6IHR5cGUgPSBUT0tfT1Bf
RVE7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0dFOiB0eXBlID0gVE9LX09QX0dF
OyBicmVhazsKLSAgICAgIGNhc2UgcHA6OlRva2VuOjpPUF9MRTogdHlwZSA9IFRPS19PUF9MRTsg
YnJlYWs7Ci0gICAgICBjYXNlIHBwOjpUb2tlbjo6T1BfUklHSFQ6IHR5cGUgPSBUT0tfT1BfUklH
SFQ7IGJyZWFrOwotICAgICAgY2FzZSBwcDo6VG9rZW46Ok9QX0xFRlQ6IHR5cGUgPSBUT0tfT1Bf
TEVGVDsgYnJlYWs7Ci0gICAgICBjYXNlICd8JzogdHlwZSA9ICd8JzsgYnJlYWs7Ci0gICAgICBj
YXNlICdeJzogdHlwZSA9ICdeJzsgYnJlYWs7Ci0gICAgICBjYXNlICcmJzogdHlwZSA9ICcmJzsg
YnJlYWs7Ci0gICAgICBjYXNlICc+JzogdHlwZSA9ICc+JzsgYnJlYWs7Ci0gICAgICBjYXNlICc8
JzogdHlwZSA9ICc8JzsgYnJlYWs7Ci0gICAgICBjYXNlICctJzogdHlwZSA9ICctJzsgYnJlYWs7
Ci0gICAgICBjYXNlICcrJzogdHlwZSA9ICcrJzsgYnJlYWs7Ci0gICAgICBjYXNlICclJzogdHlw
ZSA9ICclJzsgYnJlYWs7Ci0gICAgICBjYXNlICcvJzogdHlwZSA9ICcvJzsgYnJlYWs7Ci0gICAg
ICBjYXNlICcqJzogdHlwZSA9ICcqJzsgYnJlYWs7Ci0gICAgICBjYXNlICchJzogdHlwZSA9ICch
JzsgYnJlYWs7Ci0gICAgICBjYXNlICd+JzogdHlwZSA9ICd+JzsgYnJlYWs7Ci0gICAgICBjYXNl
ICcoJzogdHlwZSA9ICcoJzsgYnJlYWs7Ci0gICAgICBjYXNlICcpJzogdHlwZSA9ICcpJzsgYnJl
YWs7Ci0KLSAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIC8vIEFkdmFuY2UgdG8g
dGhlIG5leHQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgb25lIGlzIHZhbGlkLgotICAgIGlmICh0eXBl
ICE9IDApIGNvbnRleHQtPmxleGVyLT5sZXgodG9rZW4pOwotCi0gICAgcmV0dXJuIHR5cGU7Ci19
Ci0KLXZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pCi17
Ci0gICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVkFM
SURfRVhQUkVTU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNv
bik7Ci19Ci0KLW5hbWVzcGFjZSBwcCB7Ci0KLUV4cHJlc3Npb25QYXJzZXI6OkV4cHJlc3Npb25Q
YXJzZXIoTGV4ZXIqIGxleGVyLCBEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKLSAgICBtTGV4
ZXIobGV4ZXIpLAotICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsKLX0KLQotYm9vbCBF
eHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZW4sIGludCogcmVzdWx0KQotewotICAg
IENvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LmRpYWdub3N0aWNzID0gbURpYWdub3N0aWNz
OwotICAgIGNvbnRleHQubGV4ZXIgPSBtTGV4ZXI7Ci0gICAgY29udGV4dC50b2tlbiA9IHRva2Vu
OwotICAgIGNvbnRleHQucmVzdWx0ID0gcmVzdWx0OwotICAgIGludCByZXQgPSB5eXBhcnNlKCZj
b250ZXh0KTsKLSAgICBzd2l0Y2ggKHJldCkKLSAgICB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICBj
YXNlIDE6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDI6Ci0gICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpPVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24s
ICIiKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydChm
YWxzZSk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5B
TF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHJldHVybiByZXQgPT0gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9J
bnB1dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL25ldy9JbnB1dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZGU5NWYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvSW5wdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJJbnB1dC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgot
I2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLQotbmFtZXNwYWNlIHBwCi17
Ci0KLUlucHV0OjpJbnB1dCgpIDogbUNvdW50KDApLCBtU3RyaW5nKDApCi17Ci19Ci0KLUlucHV0
OjpJbnB1dChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10pIDoKLSAgICBtQ291bnQoY291bnQpLAotICAgIG1TdHJpbmcoc3RyaW5nKQotewot
ICAgIGFzc2VydChtQ291bnQgPj0gMCk7Ci0gICAgbUxlbmd0aC5yZXNlcnZlKG1Db3VudCk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ291bnQ7ICsraSkKLSAgICB7Ci0gICAgICAgIGludCBs
ZW4gPSBsZW5ndGggPyBsZW5ndGhbaV0gOiAtMTsKLSAgICAgICAgbUxlbmd0aC5wdXNoX2JhY2so
bGVuIDwgMCA/IHN0cmxlbihtU3RyaW5nW2ldKSA6IGxlbik7Ci0gICAgfQotfQotCi1pbnQgSW5w
dXQ6OnJlYWQoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKLXsKLSAgICBpbnQgblJlYWQgPSAwOwot
ICAgIHdoaWxlICgoblJlYWQgPCBtYXhTaXplKSAmJiAobVJlYWRMb2Muc0luZGV4IDwgbUNvdW50
KSkKLSAgICB7Ci0gICAgICAgIGludCBzaXplID0gbUxlbmd0aFttUmVhZExvYy5zSW5kZXhdIC0g
bVJlYWRMb2MuY0luZGV4OwotICAgICAgICBzaXplID0gc3RkOjptaW4oc2l6ZSwgbWF4U2l6ZSk7
Ci0gICAgICAgIG1lbWNweShidWYgKyBuUmVhZCwgbVN0cmluZ1ttUmVhZExvYy5zSW5kZXhdICsg
bVJlYWRMb2MuY0luZGV4LCBzaXplKTsKLSAgICAgICAgblJlYWQgKz0gc2l6ZTsKLSAgICAgICAg
bVJlYWRMb2MuY0luZGV4ICs9IHNpemU7Ci0KLSAgICAgICAgLy8gQWR2YW5jZSBzdHJpbmcgaWYg
d2UgcmVhY2hlZCB0aGUgZW5kIG9mIGN1cnJlbnQgc3RyaW5nLgotICAgICAgICBpZiAobVJlYWRM
b2MuY0luZGV4ID09IG1MZW5ndGhbbVJlYWRMb2Muc0luZGV4XSkKLSAgICAgICAgewotICAgICAg
ICAgICAgKyttUmVhZExvYy5zSW5kZXg7Ci0gICAgICAgICAgICBtUmVhZExvYy5jSW5kZXggPSAw
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuUmVhZDsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIHBwCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9JbnB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkYWM3MzRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lucHV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNTT1Jf
SU5QVVRfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0lOUFVUX0hfCi0KLSNpbmNs
dWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBwcAotewotCi0vLyBIb2xkcyBhbmQgcmVhZHMgaW5w
dXQgZm9yIExleGVyLgotY2xhc3MgSW5wdXQKLXsKLSAgcHVibGljOgotICAgIElucHV0KCk7Ci0g
ICAgSW5wdXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKTsKLQotICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQot
ICAgIGNvbnN0IGNoYXIqIHN0cmluZyhpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1TdHJpbmdb
aW5kZXhdOyB9Ci0gICAgaW50IGxlbmd0aChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1MZW5n
dGhbaW5kZXhdOyB9Ci0KLSAgICBpbnQgcmVhZChjaGFyKiBidWYsIGludCBtYXhTaXplKTsKLQot
ICAgIHN0cnVjdCBMb2NhdGlvbgotICAgIHsKLSAgICAgICAgaW50IHNJbmRleDsgIC8vIFN0cmlu
ZyBpbmRleDsKLSAgICAgICAgaW50IGNJbmRleDsgIC8vIENoYXIgaW5kZXguCi0KLSAgICAgICAg
TG9jYXRpb24oKSA6IHNJbmRleCgwKSwgY0luZGV4KDApIHsgfQotICAgIH07Ci0gICAgY29uc3Qg
TG9jYXRpb24mIHJlYWRMb2MoKSBjb25zdCB7IHJldHVybiBtUmVhZExvYzsgfQotCi0gIHByaXZh
dGU6Ci0gICAgLy8gSW5wdXQuCi0gICAgaW50IG1Db3VudDsKLSAgICBjb25zdCBjaGFyKiBjb25z
dCogbVN0cmluZzsKLSAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1MZW5ndGg7Ci0KLSAgICBMb2NhdGlv
biBtUmVhZExvYzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxF
Ul9QUkVQUk9DRVNTT1JfSU5QVVRfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzY2M2VlLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiTGV4ZXIuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLUxleGVyOjp+TGV4ZXIoKQotewotfQot
Ci19ICAvLyBuYW1lc3BhY2UgcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlYjg1Y2VhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwyNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9Q
UkVQUk9DRVNTT1JfTEVYRVJfSF8KLSNkZWZpbmUgQ09NUElMRVJfUFJFUFJPQ0VTU09SX0xFWEVS
X0hfCi0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgVG9rZW47Ci0KLWNsYXNzIExleGVyCi17
Ci0gIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5MZXhlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIGxl
eChUb2tlbiogdG9rZW4pID0gMDsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTEVYRVJfSF8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmUzMDg4Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaW5jbHVkZSAiTWFjcm8uaCIKLQotI2luY2x1ZGUgIlRva2VuLmgiCi0KLW5hbWVzcGFjZSBw
cAotewotCi1ib29sIE1hY3JvOjplcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdAotewot
ICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlKSAmJgotICAgICAgICAgICAobmFtZSA9PSBv
dGhlci5uYW1lKSAmJgotICAgICAgICAgICAocGFyYW1ldGVycyA9PSBvdGhlci5wYXJhbWV0ZXJz
KSAmJgotICAgICAgICAgICAocmVwbGFjZW1lbnRzID09IG90aGVyLnJlcGxhY2VtZW50cyk7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm8uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjMDE0OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElM
RVJfUFJFUFJPQ0VTU09SX01BQ1JPX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9N
QUNST19IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2
ZWN0b3I+Ci0KLW5hbWVzcGFjZSBwcAotewotCi1zdHJ1Y3QgVG9rZW47Ci0KLXN0cnVjdCBNYWNy
bwotewotICAgIGVudW0gVHlwZQotICAgIHsKLSAgICAgICAga1R5cGVPYmosCi0gICAgICAgIGtU
eXBlRnVuYwotICAgIH07Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gUGFy
YW1ldGVyczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRva2VuPiBSZXBsYWNlbWVudHM7Ci0K
LSAgICBNYWNybygpIDogcHJlZGVmaW5lZChmYWxzZSksIGRpc2FibGVkKGZhbHNlKSwgdHlwZShr
VHlwZU9iaikgeyB9Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgTWFjcm8mIG90aGVyKSBjb25zdDsK
LQotICAgIGJvb2wgcHJlZGVmaW5lZDsKLSAgICBtdXRhYmxlIGJvb2wgZGlzYWJsZWQ7Ci0KLSAg
ICBUeXBlIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnM7Ci0gICAgUmVwbGFjZW1lbnRzIHJlcGxhY2VtZW50czsKLX07Ci0KLXR5cGVkZWYgc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIE1hY3JvPiBNYWNyb1NldDsKLQotfSAgLy8gbmFtZXNwYWNlIHBw
Ci0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9NQUNST19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFj
cm9FeHBhbmRlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmU1YTdhZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDM2OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgIk1hY3JvRXhwYW5k
ZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1
ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1ZGUgIlRva2Vu
LmgiCi0KLW5hbWVzcGFjZSBwcAotewotCi1jbGFzcyBUb2tlbkxleGVyIDogcHVibGljIExleGVy
Ci17Ci0gcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VG9rZW4+IFRva2VuVmVjdG9y
OwotCi0gICAgVG9rZW5MZXhlcihUb2tlblZlY3RvciogdG9rZW5zKQotICAgIHsKLSAgICAgICAg
dG9rZW5zLT5zd2FwKG1Ub2tlbnMpOwotICAgICAgICBtSXRlciA9IG1Ub2tlbnMuYmVnaW4oKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGV4KFRva2VuKiB0b2tlbikKLSAgICB7Ci0gICAg
ICAgIGlmIChtSXRlciA9PSBtVG9rZW5zLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0
b2tlbi0+cmVzZXQoKTsKLSAgICAgICAgICAgIHRva2VuLT50eXBlID0gVG9rZW46OkxBU1Q7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAqdG9rZW4gPSAq
bUl0ZXIrKzsKLSAgICAgICAgfQotICAgIH0KLQotIHByaXZhdGU6Ci0gICAgUFBfRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFRva2VuTGV4ZXIpOwotCi0gICAgVG9rZW5WZWN0b3IgbVRva2VuczsK
LSAgICBUb2tlblZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbUl0ZXI7Ci19OwotCi1NYWNyb0V4cGFu
ZGVyOjpNYWNyb0V4cGFuZGVyKExleGVyKiBsZXhlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTWFjcm9TZXQqIG1hY3JvU2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
aWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDoKLSAgICBtTGV4ZXIobGV4ZXIpLAotICAgIG1NYWNy
b1NldChtYWNyb1NldCksCi0gICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKQotewotfQotCi1N
YWNyb0V4cGFuZGVyOjp+TWFjcm9FeHBhbmRlcigpCi17Ci0gICAgd2hpbGUgKCFtQ29udGV4dFN0
YWNrLmVtcHR5KCkpIHBvcE1hY3JvKCk7Ci19Ci0KLXZvaWQgTWFjcm9FeHBhbmRlcjo6bGV4KFRv
a2VuKiB0b2tlbikKLXsKLSAgICB3aGlsZSAodHJ1ZSkKLSAgICB7Ci0gICAgICAgIGdldFRva2Vu
KHRva2VuKTsKLQotICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAodG9rZW4tPmV4cGFuc2lvbkRpc2Fi
bGVkKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBNYWNyb1NldDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1NYWNyb1NldC0+ZmluZCh0b2tlbi0+dmFsdWUpOwotICAgICAgICBpZiAo
aXRlciA9PSBtTWFjcm9TZXQtPmVuZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y29uc3QgTWFjcm8mIG1hY3JvID0gaXRlci0+c2Vjb25kOwotICAgICAgICBpZiAobWFjcm8uZGlz
YWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIGEgcGFydGljdWxhciB0b2tlbiBp
cyBub3QgZXhwYW5kZWQsIGl0IGlzIG5ldmVyIGV4cGFuZGVkLgotICAgICAgICAgICAgdG9rZW4t
PnNldEV4cGFuc2lvbkRpc2FibGVkKHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKChtYWNyby50eXBlID09IE1hY3JvOjprVHlwZUZ1bmMpICYmICFpc05l
eHRUb2tlbkxlZnRQYXJlbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdG9r
ZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hY3JvIG5hbWUgaXMgbm90IGEgJygnLAotICAgICAg
ICAgICAgLy8gdGhpcyBtYWNybyBzaG91bGQgbm90IGJlIGV4cGFuZGVkLgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBwdXNoTWFjcm8obWFjcm8sICp0b2tlbik7Ci0g
ICAgfQotfQotCi12b2lkIE1hY3JvRXhwYW5kZXI6OmdldFRva2VuKFRva2VuKiB0b2tlbikKLXsK
LSAgICBpZiAobVJlc2VydmVUb2tlbi5nZXQoKSkKLSAgICB7Ci0gICAgICAgICp0b2tlbiA9ICpt
UmVzZXJ2ZVRva2VuOwotICAgICAgICBtUmVzZXJ2ZVRva2VuLnJlc2V0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBGaXJzdCBwb3AgYWxsIGVtcHR5IG1hY3JvIGNvbnRleHRz
LgotICAgIHdoaWxlICghbUNvbnRleHRTdGFjay5lbXB0eSgpICYmIG1Db250ZXh0U3RhY2suYmFj
aygpLT5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcG9wTWFjcm8oKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1Db250ZXh0U3RhY2suZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgICp0b2tlbiA9IG1Db250
ZXh0U3RhY2suYmFjaygpLT5nZXQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
bUxleGVyLT5sZXgodG9rZW4pOwotICAgIH0KLX0KLQotdm9pZCBNYWNyb0V4cGFuZGVyOjp1bmdl
dFRva2VuKGNvbnN0IFRva2VuJiB0b2tlbikKLXsKLSAgICBpZiAoIW1Db250ZXh0U3RhY2suZW1w
dHkoKSkKLSAgICB7Ci0gICAgICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3Rh
Y2suYmFjaygpOwotICAgICAgICBjb250ZXh0LT51bmdldCgpOwotICAgICAgICBhc3NlcnQoY29u
dGV4dC0+cmVwbGFjZW1lbnRzW2NvbnRleHQtPmluZGV4XSA9PSB0b2tlbik7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGFzc2VydCghbVJlc2VydmVUb2tlbi5nZXQoKSk7Ci0gICAg
ICAgIG1SZXNlcnZlVG9rZW4ucmVzZXQobmV3IFRva2VuKHRva2VuKSk7Ci0gICAgfQotfQotCi1i
b29sIE1hY3JvRXhwYW5kZXI6OmlzTmV4dFRva2VuTGVmdFBhcmVuKCkKLXsKLSAgICBUb2tlbiB0
b2tlbjsKLSAgICBnZXRUb2tlbigmdG9rZW4pOwotCi0gICAgYm9vbCBscGFyZW4gPSB0b2tlbi50
eXBlID09ICcoJzsKLSAgICB1bmdldFRva2VuKHRva2VuKTsKLQotICAgIHJldHVybiBscGFyZW47
Ci19Ci0KLWJvb2wgTWFjcm9FeHBhbmRlcjo6cHVzaE1hY3JvKGNvbnN0IE1hY3JvJiBtYWNybywg
Y29uc3QgVG9rZW4mIGlkZW50aWZpZXIpCi17Ci0gICAgYXNzZXJ0KCFtYWNyby5kaXNhYmxlZCk7
Ci0gICAgYXNzZXJ0KCFpZGVudGlmaWVyLmV4cGFuc2lvbkRpc2FibGVkKCkpOwotICAgIGFzc2Vy
dChpZGVudGlmaWVyLnR5cGUgPT0gVG9rZW46OklERU5USUZJRVIpOwotICAgIGFzc2VydChpZGVu
dGlmaWVyLnZhbHVlID09IG1hY3JvLm5hbWUpOwotCi0gICAgc3RkOjp2ZWN0b3I8VG9rZW4+IHJl
cGxhY2VtZW50czsKLSAgICBpZiAoIWV4cGFuZE1hY3JvKG1hY3JvLCBpZGVudGlmaWVyLCAmcmVw
bGFjZW1lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTWFjcm8gaXMgZGlz
YWJsZWQgZm9yIGV4cGFuc2lvbiB1bnRpbCBpdCBpcyBwb3BwZWQgb2ZmIHRoZSBzdGFjay4KLSAg
ICBtYWNyby5kaXNhYmxlZCA9IHRydWU7Ci0KLSAgICBNYWNyb0NvbnRleHQqIGNvbnRleHQgPSBu
ZXcgTWFjcm9Db250ZXh0OwotICAgIGNvbnRleHQtPm1hY3JvID0gJm1hY3JvOwotICAgIGNvbnRl
eHQtPnJlcGxhY2VtZW50cy5zd2FwKHJlcGxhY2VtZW50cyk7Ci0gICAgbUNvbnRleHRTdGFjay5w
dXNoX2JhY2soY29udGV4dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFjcm9FeHBh
bmRlcjo6cG9wTWFjcm8oKQotewotICAgIGFzc2VydCghbUNvbnRleHRTdGFjay5lbXB0eSgpKTsK
LQotICAgIE1hY3JvQ29udGV4dCogY29udGV4dCA9IG1Db250ZXh0U3RhY2suYmFjaygpOwotICAg
IG1Db250ZXh0U3RhY2sucG9wX2JhY2soKTsKLQotICAgIGFzc2VydChjb250ZXh0LT5lbXB0eSgp
KTsKLSAgICBhc3NlcnQoY29udGV4dC0+bWFjcm8tPmRpc2FibGVkKTsKLSAgICBjb250ZXh0LT5t
YWNyby0+ZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBkZWxldGUgY29udGV4dDsKLX0KLQotYm9vbCBN
YWNyb0V4cGFuZGVyOjpleHBhbmRNYWNybyhjb25zdCBNYWNybyYgbWFjcm8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cykK
LXsKLSAgICByZXBsYWNlbWVudHMtPmNsZWFyKCk7Ci0gICAgaWYgKG1hY3JvLnR5cGUgPT0gTWFj
cm86OmtUeXBlT2JqKQotICAgIHsKLSAgICAgICAgcmVwbGFjZW1lbnRzLT5hc3NpZ24obWFjcm8u
cmVwbGFjZW1lbnRzLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3Jv
LnJlcGxhY2VtZW50cy5lbmQoKSk7Ci0KLSAgICAgICAgaWYgKG1hY3JvLnByZWRlZmluZWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBrTGluZSA9ICJf
X0xJTkVfXyI7Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcga0ZpbGUgPSAi
X19GSUxFX18iOwotCi0gICAgICAgICAgICBhc3NlcnQocmVwbGFjZW1lbnRzLT5zaXplKCkgPT0g
MSk7Ci0gICAgICAgICAgICBUb2tlbiYgcmVwbCA9IHJlcGxhY2VtZW50cy0+ZnJvbnQoKTsKLSAg
ICAgICAgICAgIGlmIChtYWNyby5uYW1lID09IGtMaW5lKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgICAgICAgICBzdHJl
YW0gPDwgaWRlbnRpZmllci5sb2NhdGlvbi5saW5lOwotICAgICAgICAgICAgICAgIHJlcGwudmFs
dWUgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICht
YWNyby5uYW1lID09IGtGaWxlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIHN0cmVhbTsKLSAgICAgICAgICAgICAgICBzdHJlYW0gPDwgaWRlbnRpZmll
ci5sb2NhdGlvbi5maWxlOwotICAgICAgICAgICAgICAgIHJlcGwudmFsdWUgPSBzdHJlYW0uc3Ry
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgYXNzZXJ0KG1hY3JvLnR5cGUgPT0gTWFjcm86OmtUeXBlRnVuYyk7Ci0gICAgICAgIHN0
ZDo6dmVjdG9yPE1hY3JvQXJnPiBhcmdzOwotICAgICAgICBhcmdzLnJlc2VydmUobWFjcm8ucGFy
YW1ldGVycy5zaXplKCkpOwotICAgICAgICBpZiAoIWNvbGxlY3RNYWNyb0FyZ3MobWFjcm8sIGlk
ZW50aWZpZXIsICZhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBy
ZXBsYWNlTWFjcm9QYXJhbXMobWFjcm8sIGFyZ3MsIHJlcGxhY2VtZW50cyk7Ci0gICAgfQotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlbWVudHMtPnNpemUoKTsgKytpKQotICAg
IHsKLSAgICAgICAgVG9rZW4mIHJlcGwgPSByZXBsYWNlbWVudHMtPmF0KGkpOwotICAgICAgICBp
ZiAoaSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgZmlyc3QgdG9rZW4gaW4g
dGhlIHJlcGxhY2VtZW50IGxpc3QgaW5oZXJpdHMgdGhlIHBhZGRpbmcKLSAgICAgICAgICAgIC8v
IHByb3BlcnRpZXMgb2YgdGhlIGlkZW50aWZpZXIgdG9rZW4uCi0gICAgICAgICAgICByZXBsLnNl
dEF0U3RhcnRPZkxpbmUoaWRlbnRpZmllci5hdFN0YXJ0T2ZMaW5lKCkpOwotICAgICAgICAgICAg
cmVwbC5zZXRIYXNMZWFkaW5nU3BhY2UoaWRlbnRpZmllci5oYXNMZWFkaW5nU3BhY2UoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmVwbC5sb2NhdGlvbiA9IGlkZW50aWZpZXIubG9jYXRpb247Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE1hY3JvRXhwYW5kZXI6OmNvbGxlY3RN
YWNyb0FyZ3MoY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRva2VuJiBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPE1hY3JvQXJnPiogYXJncykKLXsKLSAgICBUb2tl
biB0b2tlbjsKLSAgICBnZXRUb2tlbigmdG9rZW4pOwotICAgIGFzc2VydCh0b2tlbi50eXBlID09
ICcoJyk7Ci0KLSAgICBhcmdzLT5wdXNoX2JhY2soTWFjcm9BcmcoKSk7Ci0gICAgZm9yIChpbnQg
b3BlblBhcmVucyA9IDE7IG9wZW5QYXJlbnMgIT0gMDsgKQotICAgIHsKLSAgICAgICAgZ2V0VG9r
ZW4oJnRva2VuKTsKLQotICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tlbjo6TEFTVCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6Ok1B
Q1JPX1VOVEVSTUlOQVRFRF9JTlZPQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52YWx1ZSk7Ci0gICAgICAgICAg
ICAvLyBEbyBub3QgbG9zZSBFT0YgdG9rZW4uCi0gICAgICAgICAgICB1bmdldFRva2VuKHRva2Vu
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
aXNBcmcgPSBmYWxzZTsgLy8gVHJ1ZSBpZiB0b2tlbiBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGFy
Z3VtZW50LgotICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlICcoJzoKLSAgICAgICAgICAgICsrb3BlblBhcmVuczsKLSAgICAgICAgICAgIGlzQXJn
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJyknOgotICAgICAg
ICAgICAgLS1vcGVuUGFyZW5zOwotICAgICAgICAgICAgaXNBcmcgPSBvcGVuUGFyZW5zICE9IDA7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICcsJzoKLSAgICAgICAgICAgIC8v
IFRoZSBpbmRpdmlkdWFsIGFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hIHRva2Vucywg
YnV0Ci0gICAgICAgICAgICAvLyB0aGUgY29tbWEgdG9rZW5zIGJldHdlZW4gbWF0Y2hpbmcgaW5u
ZXIgcGFyZW50aGVzZXMgZG8gbm90Ci0gICAgICAgICAgICAvLyBzZXBlcmF0ZSBhcmd1bWVudHMu
Ci0gICAgICAgICAgICBpZiAob3BlblBhcmVucyA9PSAxKSBhcmdzLT5wdXNoX2JhY2soTWFjcm9B
cmcoKSk7Ci0gICAgICAgICAgICBpc0FyZyA9IG9wZW5QYXJlbnMgIT0gMTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpc0FyZyA9IHRydWU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNBcmcpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIE1hY3JvQXJnJiBhcmcgPSBhcmdzLT5iYWNrKCk7Ci0gICAgICAgICAg
ICAvLyBJbml0aWFsIHdoaXRlc3BhY2UgaXMgbm90IHBhcnQgb2YgdGhlIGFyZ3VtZW50LgotICAg
ICAgICAgICAgaWYgKGFyZy5lbXB0eSgpKSB0b2tlbi5zZXRIYXNMZWFkaW5nU3BhY2UoZmFsc2Up
OwotICAgICAgICAgICAgYXJnLnB1c2hfYmFjayh0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBjb25zdCBNYWNybzo6UGFyYW1ldGVycyYgcGFyYW1zID0gbWFjcm8ucGFyYW1ldGVyczsK
LSAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBlbXB0eSBhcmd1bWVudCwgaXQgaXMgZXF1aXZh
bGVudCB0byBubyBhcmd1bWVudC4KLSAgICBpZiAocGFyYW1zLmVtcHR5KCkgJiYgKGFyZ3MtPnNp
emUoKSA9PSAxKSAmJiBhcmdzLT5mcm9udCgpLmVtcHR5KCkpCi0gICAgewotICAgICAgICBhcmdz
LT5jbGVhcigpOwotICAgIH0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50
cy4KLSAgICBpZiAoYXJncy0+c2l6ZSgpICE9IHBhcmFtcy5zaXplKCkpCi0gICAgewotICAgICAg
ICBEaWFnbm9zdGljczo6SUQgaWQgPSBhcmdzLT5zaXplKCkgPCBtYWNyby5wYXJhbWV0ZXJzLnNp
emUoKSA/Ci0gICAgICAgICAgICBEaWFnbm9zdGljczo6TUFDUk9fVE9PX0ZFV19BUkdTIDoKLSAg
ICAgICAgICAgIERpYWdub3N0aWNzOjpNQUNST19UT09fTUFOWV9BUkdTOwotICAgICAgICBtRGlh
Z25vc3RpY3MtPnJlcG9ydChpZCwgaWRlbnRpZmllci5sb2NhdGlvbiwgaWRlbnRpZmllci52YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBQcmUtZXhwYW5kIGVh
Y2ggYXJndW1lbnQgYmVmb3JlIHN1YnN0aXR1dGlvbi4KLSAgICAvLyBUaGlzIHN0ZXAgZXhwYW5k
cyBlYWNoIGFyZ3VtZW50IGluZGl2aWR1YWxseSBiZWZvcmUgdGhleSBhcmUKLSAgICAvLyBpbnNl
cnRlZCBpbnRvIHRoZSBtYWNybyBib2R5LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJn
cy0+c2l6ZSgpOyArK2kpCi0gICAgewotICAgICAgICBNYWNyb0FyZyYgYXJnID0gYXJncy0+YXQo
aSk7Ci0gICAgICAgIFRva2VuTGV4ZXIgbGV4ZXIoJmFyZyk7Ci0gICAgICAgIE1hY3JvRXhwYW5k
ZXIgZXhwYW5kZXIoJmxleGVyLCBtTWFjcm9TZXQsIG1EaWFnbm9zdGljcyk7Ci0KLSAgICAgICAg
YXJnLmNsZWFyKCk7Ci0gICAgICAgIGV4cGFuZGVyLmxleCgmdG9rZW4pOwotICAgICAgICB3aGls
ZSAodG9rZW4udHlwZSAhPSBUb2tlbjo6TEFTVCkKLSAgICAgICAgewotICAgICAgICAgICAgYXJn
LnB1c2hfYmFjayh0b2tlbik7Ci0gICAgICAgICAgICBleHBhbmRlci5sZXgoJnRva2VuKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNYWNyb0V4cGFuZGVy
OjpyZXBsYWNlTWFjcm9QYXJhbXMoY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9Bcmc+JiBhcmdz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VG9r
ZW4+KiByZXBsYWNlbWVudHMpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYWNyby5y
ZXBsYWNlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgewotICAgICAgICBjb25zdCBUb2tlbiYgcmVw
bCA9IG1hY3JvLnJlcGxhY2VtZW50c1tpXTsKLSAgICAgICAgaWYgKHJlcGwudHlwZSAhPSBUb2tl
bjo6SURFTlRJRklFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmVwbGFjZW1lbnRzLT5wdXNo
X2JhY2socmVwbCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRPRE8oYWxva3ApOiBPcHRpbWl6ZSB0aGlzLgotICAgICAgICAvLyBUaGVyZSBpcyBubyBu
ZWVkIHRvIHNlYXJjaCBmb3IgbWFjcm8gcGFyYW1zIGV2ZXJ5IHRpbWUuCi0gICAgICAgIC8vIFRo
ZSBwYXJhbSBpbmRleCBjYW4gYmUgY2FjaGVkIHdpdGggdGhlIHJlcGxhY2VtZW50IHRva2VuLgot
ICAgICAgICBNYWNybzo6UGFyYW1ldGVyczo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0ZDo6Zmlu
ZCgKLSAgICAgICAgICAgIG1hY3JvLnBhcmFtZXRlcnMuYmVnaW4oKSwgbWFjcm8ucGFyYW1ldGVy
cy5lbmQoKSwgcmVwbC52YWx1ZSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1hY3JvLnBhcmFtZXRl
cnMuZW5kKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlcGxhY2VtZW50cy0+cHVzaF9iYWNr
KHJlcGwpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXpl
X3QgaUFyZyA9IHN0ZDo6ZGlzdGFuY2UobWFjcm8ucGFyYW1ldGVycy5iZWdpbigpLCBpdGVyKTsK
LSAgICAgICAgY29uc3QgTWFjcm9BcmcmIGFyZyA9IGFyZ3NbaUFyZ107Ci0gICAgICAgIGlmIChh
cmcuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgc2l6ZV90IGlSZXBsID0gcmVwbGFjZW1lbnRzLT5zaXplKCk7Ci0gICAgICAgIHJl
cGxhY2VtZW50cy0+aW5zZXJ0KHJlcGxhY2VtZW50cy0+ZW5kKCksIGFyZy5iZWdpbigpLCBhcmcu
ZW5kKCkpOwotICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgdG9rZW4gaW5oZXJpdHMgcGFkZGlu
ZyBwcm9wZXJ0aWVzIGZyb20KLSAgICAgICAgLy8gbWFjcm8gcmVwbGFjZW1lbnQgdG9rZW4uCi0g
ICAgICAgIHJlcGxhY2VtZW50cy0+YXQoaVJlcGwpLnNldEhhc0xlYWRpbmdTcGFjZShyZXBsLmhh
c0xlYWRpbmdTcGFjZSgpKTsKLSAgICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9NYWNyb0V4cGFuZGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQ1MDRlYmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvTWFjcm9FeHBhbmRlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsNzQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJF
UFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9NQUNST19FWFBBTkRFUl9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rv
cj4KLQotI2luY2x1ZGUgIkxleGVyLmgiCi0jaW5jbHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRlICJw
cF91dGlscy5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgRGlhZ25vc3RpY3M7Ci0KLWNs
YXNzIE1hY3JvRXhwYW5kZXIgOiBwdWJsaWMgTGV4ZXIKLXsKLSAgcHVibGljOgotICAgIE1hY3Jv
RXhwYW5kZXIoTGV4ZXIqIGxleGVyLCBNYWNyb1NldCogbWFjcm9TZXQsIERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcyk7Ci0gICAgdmlydHVhbCB+TWFjcm9FeHBhbmRlcigpOwotCi0gICAgdmlydHVh
bCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwotCi0gIHByaXZhdGU6Ci0gICAgUFBfRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKE1hY3JvRXhwYW5kZXIpOwotCi0gICAgdm9pZCBnZXRUb2tlbihUb2tl
biogdG9rZW4pOwotICAgIHZvaWQgdW5nZXRUb2tlbihjb25zdCBUb2tlbiYgdG9rZW4pOwotICAg
IGJvb2wgaXNOZXh0VG9rZW5MZWZ0UGFyZW4oKTsKLQotICAgIGJvb2wgcHVzaE1hY3JvKGNvbnN0
IE1hY3JvJiBtYWNybywgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIpOwotICAgIHZvaWQgcG9wTWFj
cm8oKTsKLQotICAgIGJvb2wgZXhwYW5kTWFjcm8oY29uc3QgTWFjcm8mIG1hY3JvLAotICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVG9rZW4mIGlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxUb2tlbj4qIHJlcGxhY2VtZW50cyk7Ci0KLSAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPFRva2VuPiBNYWNyb0FyZzsKLSAgICBib29sIGNvbGxlY3RNYWNyb0FyZ3MoY29u
c3QgTWFjcm8mIG1hY3JvLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUb2tlbiYg
aWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TWFjcm9B
cmc+KiBhcmdzKTsKLSAgICB2b2lkIHJlcGxhY2VNYWNyb1BhcmFtcyhjb25zdCBNYWNybyYgbWFj
cm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWFjcm9B
cmc+JiBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRva2Vu
PiogcmVwbGFjZW1lbnRzKTsKLQotICAgIHN0cnVjdCBNYWNyb0NvbnRleHQKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IE1hY3JvKiBtYWNybzsKLSAgICAgICAgc2l6ZV90IGluZGV4OwotICAgICAgICBz
dGQ6OnZlY3RvcjxUb2tlbj4gcmVwbGFjZW1lbnRzOwotCi0gICAgICAgIE1hY3JvQ29udGV4dCgp
IDogbWFjcm8oMCksIGluZGV4KDApIHsgfQotICAgICAgICBib29sIGVtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gaW5kZXggPT0gcmVwbGFjZW1lbnRzLnNpemUoKTsgfQotICAgICAgICBjb25zdCBUb2tl
biYgZ2V0KCkgeyByZXR1cm4gcmVwbGFjZW1lbnRzW2luZGV4KytdOyB9Ci0gICAgICAgIHZvaWQg
dW5nZXQoKSB7IC0taW5kZXg7IH0KLSAgICB9OwotCi0gICAgTGV4ZXIqIG1MZXhlcjsKLSAgICBN
YWNyb1NldCogbU1hY3JvU2V0OwotICAgIERpYWdub3N0aWNzKiBtRGlhZ25vc3RpY3M7Ci0KLSAg
ICBzdGQ6OmF1dG9fcHRyPFRva2VuPiBtUmVzZXJ2ZVRva2VuOwotICAgIHN0ZDo6dmVjdG9yPE1h
Y3JvQ29udGV4dCo+IG1Db250ZXh0U3RhY2s7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNl
bmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX01BQ1JPX0VYUEFOREVSX0hfCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L1ByZXByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyMTkwMWZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJQcmVwcm9j
ZXNzb3IuaCIKLQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2lu
Y2x1ZGUgIkRpYWdub3N0aWNzLmgiCi0jaW5jbHVkZSAiRGlyZWN0aXZlUGFyc2VyLmgiCi0jaW5j
bHVkZSAiTWFjcm8uaCIKLSNpbmNsdWRlICJNYWNyb0V4cGFuZGVyLmgiCi0jaW5jbHVkZSAiVG9r
ZW4uaCIKLSNpbmNsdWRlICJUb2tlbml6ZXIuaCIKLQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVj
dCBQcmVwcm9jZXNzb3JJbXBsCi17Ci0gICAgRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzOwotICAg
IE1hY3JvU2V0IG1hY3JvU2V0OwotICAgIFRva2VuaXplciB0b2tlbml6ZXI7Ci0gICAgRGlyZWN0
aXZlUGFyc2VyIGRpcmVjdGl2ZVBhcnNlcjsKLSAgICBNYWNyb0V4cGFuZGVyIG1hY3JvRXhwYW5k
ZXI7Ci0KLSAgICBQcmVwcm9jZXNzb3JJbXBsKERpYWdub3N0aWNzKiBkaWFnLAotICAgICAgICAg
ICAgICAgICAgICAgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcikgOgotICAgICAg
ICBkaWFnbm9zdGljcyhkaWFnKSwKLSAgICAgICAgdG9rZW5pemVyKGRpYWcpLAotICAgICAgICBk
aXJlY3RpdmVQYXJzZXIoJnRva2VuaXplciwgJm1hY3JvU2V0LCBkaWFnLCBkaXJlY3RpdmVIYW5k
bGVyKSwKLSAgICAgICAgbWFjcm9FeHBhbmRlcigmZGlyZWN0aXZlUGFyc2VyLCAmbWFjcm9TZXQs
IGRpYWcpCi0gICAgewotICAgIH0KLX07Ci0KLVByZXByb2Nlc3Nvcjo6UHJlcHJvY2Vzc29yKERp
YWdub3N0aWNzKiBkaWFnbm9zdGljcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVj
dGl2ZUhhbmRsZXIqIGRpcmVjdGl2ZUhhbmRsZXIpCi17Ci0gICAgbUltcGwgPSBuZXcgUHJlcHJv
Y2Vzc29ySW1wbChkaWFnbm9zdGljcywgZGlyZWN0aXZlSGFuZGxlcik7Ci19Ci0KLVByZXByb2Nl
c3Nvcjo6flByZXByb2Nlc3NvcigpCi17Ci0gICAgZGVsZXRlIG1JbXBsOwotfQotCi1ib29sIFBy
ZXByb2Nlc3Nvcjo6aW5pdChpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBsZW5ndGhbXSkKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IGtHTFNMVmVyc2lvbiA9IDEwMDsK
LQotICAgIC8vIEFkZCBzdGFuZGFyZCBwcmUtZGVmaW5lZCBtYWNyb3MuCi0gICAgcHJlZGVmaW5l
TWFjcm8oIl9fTElORV9fIiwgMCk7Ci0gICAgcHJlZGVmaW5lTWFjcm8oIl9fRklMRV9fIiwgMCk7
Ci0gICAgcHJlZGVmaW5lTWFjcm8oIl9fVkVSU0lPTl9fIiwga0dMU0xWZXJzaW9uKTsKLSAgICBw
cmVkZWZpbmVNYWNybygiR0xfRVMiLCAxKTsKLQotICAgIHJldHVybiBtSW1wbC0+dG9rZW5pemVy
LmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKTsKLX0KLQotdm9pZCBQcmVwcm9jZXNzb3I6OnBy
ZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUsIGludCB2YWx1ZSkKLXsKLSAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8IHZhbHVlOwotCi0gICAgVG9rZW4gdG9r
ZW47Ci0gICAgdG9rZW4udHlwZSA9IFRva2VuOjpDT05TVF9JTlQ7Ci0gICAgdG9rZW4udmFsdWUg
PSBzdHJlYW0uc3RyKCk7Ci0KLSAgICBNYWNybyBtYWNybzsKLSAgICBtYWNyby5wcmVkZWZpbmVk
ID0gdHJ1ZTsKLSAgICBtYWNyby50eXBlID0gTWFjcm86OmtUeXBlT2JqOwotICAgIG1hY3JvLm5h
bWUgPSBuYW1lOwotICAgIG1hY3JvLnJlcGxhY2VtZW50cy5wdXNoX2JhY2sodG9rZW4pOwotCi0g
ICAgbUltcGwtPm1hY3JvU2V0W25hbWVdID0gbWFjcm87Ci19Ci0KLXZvaWQgUHJlcHJvY2Vzc29y
OjpsZXgoVG9rZW4qIHRva2VuKQotewotICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNlOwotICAg
IHdoaWxlICghdmFsaWRUb2tlbikKLSAgICB7Ci0gICAgICAgIG1JbXBsLT5tYWNyb0V4cGFuZGVy
LmxleCh0b2tlbik7Ci0gICAgICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJldHVybmluZyBpbnRlcm5hbCBwcmVwcm9jZXNz
aW5nIHRva2Vucy4KLSAgICAgICAgICAvLyBDb252ZXJ0IHByZXByb2Nlc3NpbmcgdG9rZW5zIHRv
IGNvbXBpbGVyIHRva2VucyBvciByZXBvcnQKLSAgICAgICAgICAvLyBkaWFnbm9zdGljcy4KLSAg
ICAgICAgICBjYXNlIFRva2VuOjpQUF9IQVNIOgotICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVG9rZW46OlBQX05VTUJFUjoKLSAg
ICAgICAgICAgIG1JbXBsLT5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlZBTElE
X05VTUJFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgVG9rZW46OlBQX09USEVSOgotICAgICAgICAgICAgbUltcGwtPmRpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OklOVkFMSURfQ0hBUkFDVEVSLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dmFsdWUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHZhbGlkVG9rZW4g
PSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9QcmVwcm9jZXNzb3IuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmUzNWIyLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nl
c3Nvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
Zm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BSRVBST0NFU1NPUl9IXwotI2RlZmluZSBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfUFJFUFJPQ0VTU09SX0hfCi0KLSNpbmNsdWRlICJwcF91dGlscy5o
IgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgRGlhZ25vc3RpY3M7Ci1jbGFzcyBEaXJlY3Rp
dmVIYW5kbGVyOwotc3RydWN0IFByZXByb2Nlc3NvckltcGw7Ci1zdHJ1Y3QgVG9rZW47Ci0KLWNs
YXNzIFByZXByb2Nlc3NvcgotewotICBwdWJsaWM6Ci0gICAgUHJlcHJvY2Vzc29yKERpYWdub3N0
aWNzKiBkaWFnbm9zdGljcywgRGlyZWN0aXZlSGFuZGxlciogZGlyZWN0aXZlSGFuZGxlcik7Ci0g
ICAgflByZXByb2Nlc3NvcigpOwotCi0gICAgLy8gY291bnQ6IHNwZWNpZmllcyB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIHRoZSBzdHJpbmcgYW5kIGxlbmd0aCBhcnJheXMuCi0gICAgLy8gc3Ry
aW5nOiBzcGVjaWZpZXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncy4KLSAgICAvLyBs
ZW5ndGg6IHNwZWNpZmllcyBhbiBhcnJheSBvZiBzdHJpbmcgbGVuZ3Rocy4KLSAgICAvLyBJZiBs
ZW5ndGggaXMgTlVMTCwgZWFjaCBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBudWxsIHRlcm1pbmF0
ZWQuCi0gICAgLy8gSWYgbGVuZ3RoIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBOVUxMLCBpdCBwb2lu
dHMgdG8gYW4gYXJyYXkgY29udGFpbmluZwotICAgIC8vIGEgc3RyaW5nIGxlbmd0aCBmb3IgZWFj
aCBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBzdHJpbmcuCi0gICAgLy8gRWFjaCBl
bGVtZW50IGluIHRoZSBsZW5ndGggYXJyYXkgbWF5IGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUK
LSAgICAvLyBjb3JyZXNwb25kaW5nIHN0cmluZyBvciBhIHZhbHVlIGxlc3MgdGhhbiAwIHRvIGlu
ZGljYXRlIHRoYXQgdGhlIHN0cmluZwotICAgIC8vIGlzIG51bGwgdGVybWluYXRlZC4KLSAgICBi
b29sIGluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50
IGxlbmd0aFtdKTsKLSAgICAvLyBBZGRzIGEgcHJlLWRlZmluZWQgbWFjcm8uCi0gICAgdm9pZCBw
cmVkZWZpbmVNYWNybyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgdmFsdWUpOwotCi0gICAgdm9pZCBs
ZXgoVG9rZW4qIHRva2VuKTsKLQotICBwcml2YXRlOgotICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihQcmVwcm9jZXNzb3IpOwotCi0gICAgUHJlcHJvY2Vzc29ySW1wbCogbUltcGw7Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgcHAKLSNlbmRpZiAgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09S
X1BSRVBST0NFU1NPUl9IXwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvU291cmNlTG9jYXRp
b24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4MjYxMy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9T
b3VyY2VMb2NhdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfUFJFUFJPQ0VTU09SX1NPVVJDRV9MT0NBVElPTl9IXwot
I2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCi0KLW5hbWVz
cGFjZSBwcAotewotCi1zdHJ1Y3QgU291cmNlTG9jYXRpb24KLXsKLSAgICBTb3VyY2VMb2NhdGlv
bigpIDogZmlsZSgwKSwgbGluZSgwKSB7IH0KLSAgICBTb3VyY2VMb2NhdGlvbihpbnQgZiwgaW50
IGwpIDogZmlsZShmKSwgbGluZShsKSB7IH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFNvdXJj
ZUxvY2F0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoZmlsZSA9PSBv
dGhlci5maWxlKSAmJiAobGluZSA9PSBvdGhlci5saW5lKTsKLSAgICB9Ci0KLSAgICBpbnQgZmls
ZTsKLSAgICBpbnQgbGluZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291
cmNlTG9jYXRpb24mIGxocywgY29uc3QgU291cmNlTG9jYXRpb24mIHJocykKLXsKLSAgICByZXR1
cm4gbGhzLmVxdWFscyhyaHMpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNv
dXJjZUxvY2F0aW9uJiBsaHMsIGNvbnN0IFNvdXJjZUxvY2F0aW9uJiByaHMpCi17Ci0gICAgcmV0
dXJuICFsaHMuZXF1YWxzKHJocyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBwcAotI2VuZGlmICAv
LyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfU09VUkNFX0xPQ0FUSU9OX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tl
bi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9Ub2tlbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MDM4MGMuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvVG9rZW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLSNpbmNsdWRlICJUb2tlbi5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotdm9pZCBU
b2tlbjo6cmVzZXQoKQotewotICAgIHR5cGUgPSAwOwotICAgIGZsYWdzID0gMDsKLSAgICBsb2Nh
dGlvbiA9IFNvdXJjZUxvY2F0aW9uKCk7Ci0gICAgdmFsdWUuY2xlYXIoKTsKLX0KLQotYm9vbCBU
b2tlbjo6ZXF1YWxzKGNvbnN0IFRva2VuJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gKHR5
cGUgPT0gb3RoZXIudHlwZSkgJiYKLSAgICAgICAgICAgKGZsYWdzID09IG90aGVyLmZsYWdzKSAm
JgotICAgICAgICAgICAobG9jYXRpb24gPT0gb3RoZXIubG9jYXRpb24pICYmCi0gICAgICAgICAg
ICh2YWx1ZSA9PSBvdGhlci52YWx1ZSk7Ci19Ci0KLXZvaWQgVG9rZW46OnNldEF0U3RhcnRPZkxp
bmUoYm9vbCBzdGFydCkKLXsKLSAgICBpZiAoc3RhcnQpCi0gICAgICAgIGZsYWdzIHw9IEFUX1NU
QVJUX09GX0xJTkU7Ci0gICAgZWxzZQotICAgICAgICBmbGFncyAmPSB+QVRfU1RBUlRfT0ZfTElO
RTsKLX0KLQotdm9pZCBUb2tlbjo6c2V0SGFzTGVhZGluZ1NwYWNlKGJvb2wgc3BhY2UpCi17Ci0g
ICAgaWYgKHNwYWNlKQotICAgICAgICBmbGFncyB8PSBIQVNfTEVBRElOR19TUEFDRTsKLSAgICBl
bHNlCi0gICAgICAgIGZsYWdzICY9IH5IQVNfTEVBRElOR19TUEFDRTsKLX0KLQotdm9pZCBUb2tl
bjo6c2V0RXhwYW5zaW9uRGlzYWJsZWQoYm9vbCBkaXNhYmxlKQotewotICAgIGlmIChkaXNhYmxl
KQotICAgICAgICBmbGFncyB8PSBFWFBBTlNJT05fRElTQUJMRUQ7Ci0gICAgZWxzZQotICAgICAg
ICBmbGFncyAmPSB+RVhQQU5TSU9OX0RJU0FCTEVEOwotfQotCi1zdGQ6Om9zdHJlYW0mIG9wZXJh
dG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFRva2VuJiB0b2tlbikKLXsKLSAgICBpZiAo
dG9rZW4uaGFzTGVhZGluZ1NwYWNlKCkpCi0gICAgICAgIG91dCA8PCAiICI7Ci0KLSAgICBvdXQg
PDwgdG9rZW4udmFsdWU7Ci0gICAgcmV0dXJuIG91dDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL25ldy9Ub2tlbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvVG9rZW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTIzMTAyMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9I
XwotI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5fSF8KLQotI2luY2x1ZGUgPG9z
dHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiU291cmNlTG9jYXRpb24uaCIK
LQotbmFtZXNwYWNlIHBwCi17Ci0KLXN0cnVjdCBUb2tlbgotewotICAgIGVudW0gVHlwZQotICAg
IHsKLSAgICAgICAgTEFTVCA9IDAsICAvLyBFT0YuCi0KLSAgICAgICAgSURFTlRJRklFUiA9IDI1
OCwKLQotICAgICAgICBDT05TVF9JTlQsCi0gICAgICAgIENPTlNUX0ZMT0FULAotCi0gICAgICAg
IE9QX0lOQywKLSAgICAgICAgT1BfREVDLAotICAgICAgICBPUF9MRUZULAotICAgICAgICBPUF9S
SUdIVCwKLSAgICAgICAgT1BfTEUsCi0gICAgICAgIE9QX0dFLAotICAgICAgICBPUF9FUSwKLSAg
ICAgICAgT1BfTkUsCi0gICAgICAgIE9QX0FORCwKLSAgICAgICAgT1BfWE9SLAotICAgICAgICBP
UF9PUiwKLSAgICAgICAgT1BfQUREX0FTU0lHTiwKLSAgICAgICAgT1BfU1VCX0FTU0lHTiwKLSAg
ICAgICAgT1BfTVVMX0FTU0lHTiwKLSAgICAgICAgT1BfRElWX0FTU0lHTiwKLSAgICAgICAgT1Bf
TU9EX0FTU0lHTiwKLSAgICAgICAgT1BfTEVGVF9BU1NJR04sCi0gICAgICAgIE9QX1JJR0hUX0FT
U0lHTiwKLSAgICAgICAgT1BfQU5EX0FTU0lHTiwKLSAgICAgICAgT1BfWE9SX0FTU0lHTiwKLSAg
ICAgICAgT1BfT1JfQVNTSUdOLAotCi0gICAgICAgIC8vIFByZXByb2Nlc3NpbmcgdG9rZW4gdHlw
ZXMuCi0gICAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSB1c2VkIGJ5IHRoZSBwcmVwcm9jZXNzb3Ig
aW50ZXJuYWxseS4KLSAgICAgICAgLy8gUHJlcHJvY2Vzc29yIGNsaWVudHMgbXVzdCBub3QgZGVw
ZW5kIG9yIGNoZWNrIGZvciB0aGVtLgotICAgICAgICBQUF9IQVNILAotICAgICAgICBQUF9OVU1C
RVIsCi0gICAgICAgIFBQX09USEVSCi0gICAgfTsKLSAgICBlbnVtIEZsYWdzCi0gICAgewotICAg
ICAgICBBVF9TVEFSVF9PRl9MSU5FICAgPSAxIDw8IDAsCi0gICAgICAgIEhBU19MRUFESU5HX1NQ
QUNFICA9IDEgPDwgMSwKLSAgICAgICAgRVhQQU5TSU9OX0RJU0FCTEVEID0gMSA8PCAyCi0gICAg
fTsKLQotICAgIFRva2VuKCkgOiB0eXBlKDApLCBmbGFncygwKSB7IH0KLQotICAgIHZvaWQgcmVz
ZXQoKTsKLSAgICBib29sIGVxdWFscyhjb25zdCBUb2tlbiYgb3RoZXIpIGNvbnN0OwotCi0gICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGxpbmUuCi0gICAg
Ly8gSXQgZGlzcmVnYXJkcyBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlLgotICAgIGJvb2wgYXRTdGFy
dE9mTGluZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEFUX1NUQVJUX09GX0xJTkUpICE9IDA7
IH0KLSAgICB2b2lkIHNldEF0U3RhcnRPZkxpbmUoYm9vbCBzdGFydCk7Ci0KLSAgICBib29sIGhh
c0xlYWRpbmdTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIEhBU19MRUFESU5HX1NQQUNF
KSAhPSAwOyB9Ci0gICAgdm9pZCBzZXRIYXNMZWFkaW5nU3BhY2UoYm9vbCBzcGFjZSk7Ci0KLSAg
ICBib29sIGV4cGFuc2lvbkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgRVhQQU5T
SU9OX0RJU0FCTEVEKSAhPSAwOyB9Ci0gICAgdm9pZCBzZXRFeHBhbnNpb25EaXNhYmxlZChib29s
IGRpc2FibGUpOwotCi0gICAgaW50IHR5cGU7Ci0gICAgdW5zaWduZWQgaW50IGZsYWdzOwotICAg
IFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwotICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwotfTsKLQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUb2tlbiYgbGhzLCBjb25zdCBUb2tlbiYgcmhz
KQotewotICAgIHJldHVybiBsaHMuZXF1YWxzKHJocyk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgVG9rZW4mIGxocywgY29uc3QgVG9rZW4mIHJocykKLXsKLSAgICByZXR1cm4g
IWxocy5lcXVhbHMocmhzKTsKLX0KLQotZXh0ZXJuIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgVG9rZW4mIHRva2VuKTsKLQotfSAgLy8gbmFtZXBzYWNl
IHBwCi0jZW5kaWYgIC8vIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTl9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
VG9rZW5pemVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L1Rva2VuaXplci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDNiYzNkMWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIz
NDQgKzAsMCBAQAotI2xpbmUgMTYgIi4vcHJlcHJvY2Vzc29yL25ldy9Ub2tlbml6ZXIubCIKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgZ2VuZXJhdGVf
cGFyc2VyLnNoLiBETyBOT1QgRURJVCEKLQotCi0KLSNsaW5lIDEzICIuL3ByZXByb2Nlc3Nvci9u
ZXcvVG9rZW5pemVyLmNwcCIKLQotI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50Ci0K
LS8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCi0KLSNkZWZpbmUgRkxF
WF9TQ0FOTkVSCi0jZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCi0jZGVmaW5lIFlZX0ZM
RVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQot
I2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKLSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5k
aWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGls
ZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICov
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAq
LwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJ
TlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMu
aD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KLQotI2lmIGRlZmluZWQgKF9f
U1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotCi0vKiBDOTkg
c2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGlu
dC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0
eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUwotI2RlZmluZSBfX1NURENf
TElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYg
aW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKLXR5cGVk
ZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7
Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwotdHlwZWRlZiB1aW50MzJfdCBmbGV4X3Vp
bnQzMl90OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVm
IHNob3J0IGludCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Ci10eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90Owot
I2VuZGlmIC8qICEgQzk5ICovCi0KLS8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KLSNp
Zm5kZWYgSU5UOF9NSU4KLSNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKLSNl
bmRpZgotI2lmbmRlZiBJTlQxNl9NSU4KLSNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAo
LTMyNzY3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUlOCi0jZGVmaW5lIElOVDMyX01JTiAg
ICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jZW5kaWYKLSNpZm5kZWYgSU5UOF9NQVgKLSNk
ZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQotI2VuZGlmCi0jaWZuZGVmIElOVDE2
X01BWAotI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSNlbmRpZgotI2lm
bmRlZiBJTlQzMl9NQVgKLSNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0
NykKLSNlbmRpZgotI2lmbmRlZiBVSU5UOF9NQVgKLSNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAg
ICAgICAoMjU1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMTZfTUFYCi0jZGVmaW5lIFVJTlQxNl9N
QVggICAgICAgICAgICAgKDY1NTM1VSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0jZGVm
aW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQotI2VuZGlmCi0KLSNlbmRp
ZiAvKiAhIEZMRVhJTlRfSCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLQotLyogVGhlICJjb25z
dCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KLSNkZWZpbmUgWVlfVVNFX0NP
TlNUCi0KLSNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KLQotLyogQzk5IHJlcXVpcmVzIF9fU1RE
Q19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8KLSNpZiBkZWZpbmVkIChfX1NURENfXykKLQotI2Rl
ZmluZSBZWV9VU0VfQ09OU1QKLQotI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2Vu
ZGlmCS8qICEgX19jcGx1c3BsdXMgKi8KLQotI2lmZGVmIFlZX1VTRV9DT05TVAotI2RlZmluZSB5
eWNvbnN0IGNvbnN0Ci0jZWxzZQotI2RlZmluZSB5eWNvbnN0Ci0jZW5kaWYKLQotLyogUmV0dXJu
ZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KLSNkZWZpbmUgWVlfTlVMTCAwCi0KLS8qIFByb21vdGVz
IGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVk
Ci0gKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNo
YXIgaXMgbmVnYXRpdmUsCi0gKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1i
aXQgdW5zaWduZWQgY2hhciwgaGVuY2UgdGhlCi0gKiBkb3VibGUgY2FzdC4KLSAqLwotI2RlZmlu
ZSBZWV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCi0KLS8q
IEFuIG9wYXF1ZSBwb2ludGVyLiAqLwotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAot
I2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAotdHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsK
LSNlbmRpZgotCi0vKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29u
IHZhcnMgZmFyIGJlbG93KQotICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIu
ICovCi0jZGVmaW5lIHl5aW4geXlnLT55eWluX3IKLSNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9y
Ci0jZGVmaW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKLSNkZWZpbmUgeXlsZW5nIHl5Zy0+eXls
ZW5nX3IKLSNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKLSNkZWZpbmUgeXlsaW5lbm8gKFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQotI2RlZmluZSB5eWNvbHVtbiAo
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCi0jZGVmaW5lIHl5X2ZsZXhf
ZGVidWcgeXlnLT55eV9mbGV4X2RlYnVnX3IKLQotLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24u
ICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAotICogYnV0IHdl
IGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1s
ZXNzCi0gKiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVmaW5lIEJFR0lOIHl5Zy0+eXlf
c3RhcnQgPSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBp
bnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0gKiB0byBCRUdJTiB0byByZXR1
cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAotICogY29tcGF0
aWJpbGl0eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIp
Ci0jZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1
bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRl
KSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyogU3BlY2lhbCBhY3Rpb24gbWVh
bmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KLSNkZWZpbmUgWVlfTkVXX0ZJ
TEUgcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCi0KLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZF
Ul9DSEFSIDAKLQotLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KLSNpZm5kZWYg
WVlfQlVGX1NJWkUKLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKLSNlbmRpZgotCi0vKiBUaGUg
c3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFy
YWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgotICovCi0jZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpF
ICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQotCi0jaWZuZGVm
IFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVS
X1NUQVRFCi10eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsK
LSNlbmRpZgotCi0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCi0jZGVmaW5lIFlZX1RZUEVE
RUZfWVlfU0laRV9UCi10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7Ci0jZW5kaWYKLQotI2RlZmlu
ZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAotI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEK
LSNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKLQotICAgICNkZWZpbmUgWVlfTEVTU19MSU5F
Tk8obikKLSAgICAKLS8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFy
YWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KLSNkZWZpbmUgeXlsZXNzKG4pIFwK
LQlkbyBcCi0JCXsgXAotCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICov
IFwKLSAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVT
U19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAotCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsgXAotCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLQkJeXlnLT55eV9jX2J1Zl9wID0g
eXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAotCQlZWV9E
T19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLQkJfSBcCi0Jd2hp
bGUgKCAwICkKLQotI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIg
LCB5eXNjYW5uZXIgKQotCi0jaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKLSNkZWZp
bmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQotc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQotCXsK
LQlGSUxFICp5eV9pbnB1dF9maWxlOwotCi0JY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVm
ZmVyICovCi0JY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQg
YnVmZmVyICovCi0KLQkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1
ZGluZyByb29tIGZvciBFT0IKLQkgKiBjaGFyYWN0ZXJzLgotCSAqLwotCXl5X3NpemVfdCB5eV9i
dWZfc2l6ZTsKLQotCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYs
IG5vdCBpbmNsdWRpbmcgRU9CCi0JICogY2hhcmFjdGVycy4KLQkgKi8KLQl5eV9zaXplX3QgeXlf
bl9jaGFyczsKLQotCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtu
b3cgd2UgY3JlYXRlZCBpdCwKLQkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBh
bmQgc2hvdWxkIGZyZWUoKSBpdCB0bwotCSAqIGRlbGV0ZSBpdC4KLQkgKi8KLQlpbnQgeXlfaXNf
b3VyX2J1ZmZlcjsKLQotCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0
IHNvdXJjZTsgaWYgc28sIGFuZAotCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwg
dGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLQkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1h
a2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0JICogZWFjaCBuZXdsaW5lLgot
CSAqLwotCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKLQotCS8qIFdoZXRoZXIgd2UncmUgY29uc2lk
ZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KLQkgKiBJZiBzbywgJ14nIHJ1
bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKLQkgKiBub3Qu
Ci0JICovCi0JaW50IHl5X2F0X2JvbDsKLQotICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhl
IGxpbmUgY291bnQuICovCi0gICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNv
dW50LiAqLwotICAgIAotCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZl
ciB3aGVuIHdlIHJlYWNoIHRoZQotCSAqIGVuZCBvZiBpdC4KLQkgKi8KLQlpbnQgeXlfZmlsbF9i
dWZmZXI7Ci0KLQlpbnQgeXlfYnVmZmVyX3N0YXR1czsKLQotI2RlZmluZSBZWV9CVUZGRVJfTkVX
IDAKLSNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCi0JLyogV2hlbiBhbiBFT0YncyBiZWVuIHNl
ZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKLQkgKiB0aGVuIHdlIG1h
cmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQotCSAq
IHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBX
ZSBtaWdodAotCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3Vn
aCwgYmVjYXVzZSBvZgotCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0JICoKLQkgKiBXaGVuIHdl
IGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgotCSAq
ICh2aWEgcHByZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2Fubmlu
ZyBieQotCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgotCSAqLwot
I2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgotCi0JfTsKLSNlbmRpZiAvKiAhWVlfU1RS
VUNUX1lZX0JVRkZFUl9TVEFURSAqLwotCi0vKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNz
aW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKLSAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1
dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbAotICogInNjYW5uZXIgc3RhdGUi
LgotICoKLSAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwuCi0gKi8KLSNk
ZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVIgKCB5eWctPnl5X2J1ZmZlcl9zdGFjayBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgID8geXlnLT55eV9idWZmZXJfc3RhY2tbeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wXSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkKLQotLyogU2Ft
ZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVm
ZmVyIHN0YWNrIGlzIG5vdAotICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3Ig
aW50ZXJuYWwgdXNlIG9ubHkuCi0gKi8KLSNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KLQotdm9pZCBw
cHJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBw
cF9zd2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmls
ZSxpbnQgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBwX2RlbGV0ZV9idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSBiICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcHBfZmx1c2hf
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBw
cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotc3RhdGljIHZvaWQgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2xvYWRfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLXN0YXRpYyB2b2lkIHBwX2luaXRfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYixGSUxF
ICpmaWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSBZWV9GTFVTSF9CVUZGRVIg
cHBfZmx1c2hfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpCi0KLVlZX0JVRkZF
Ul9TVEFURSBwcF9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcgKHl5Y29uc3Qg
Y2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLHl5X3NpemVfdCBsZW4gLHl5c2Nhbl90IHl5
c2Nhbm5lciApOwotCi12b2lkICpwcGFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwotdm9pZCAqcHByZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKLXZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi0jZGVm
aW5lIHl5X25ld19idWZmZXIgcHBfY3JlYXRlX2J1ZmZlcgotCi0jZGVmaW5lIHl5X3NldF9pbnRl
cmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAotCXsgXAotCWlmICggISBZWV9DVVJSRU5UX0JVRkZF
UiApeyBcCi0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLQl9IFwKLQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKLQl9Ci0K
LSNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKXtcCi0gICAgICAgIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAot
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwcF9jcmVhdGVf
YnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLQl9IFwKLQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAotCX0KLQotI2RlZmluZSBZWV9B
VF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCi0KLS8qIEJlZ2lu
IHVzZXIgc2VjdDMgKi8KLQotI2RlZmluZSBwcHdyYXAobikgMQotI2RlZmluZSBZWV9TS0lQX1lZ
V1JBUAotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKLQotdHlwZWRlZiBpbnQgeXlf
c3RhdGVfdHlwZTsKLQotI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCi0KLXN0YXRpYyB5eV9z
dGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1z
dGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJl
bnRfc3RhdGUgICx5eXNjYW5fdCB5eXNjYW5uZXIpOwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3Ig
KHl5Y29uc3QgY2hhciBtc2dbXSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLS8qIERvbmUgYWZ0
ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCi0g
KiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgotICovCi0jZGVmaW5lIFlZ
X0RPX0JFRk9SRV9BQ1RJT04gXAotCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0JeXlsZW5n
ID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0JeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlf
Y3A7IFwKLQkqeXlfY3AgPSAnXDAnOyBcCi0JeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7Ci0KLSNk
ZWZpbmUgWVlfTlVNX1JVTEVTIDM3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzgKLS8qIFRo
aXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKLSAgIGJ1dCBpdHMgcHJlc2Vu
Y2UgaXMgbmVjZXNzYXJ5LiAqLwotc3RydWN0IHl5X3RyYW5zX2luZm8KLQl7Ci0JZmxleF9pbnQz
Ml90IHl5X3ZlcmlmeTsKLQlmbGV4X2ludDMyX3QgeXlfbnh0OwotCX07Ci1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgMzgsICAgMzYsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCi0gICAg
ICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAg
IDksCi0gICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzMsICAgMzMsICAgIDMs
ICAgIDUsICAgIDUsCi0gICAgICAgIDQsICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAsICAg
MzAsICAgMjUsICAgMTIsICAgMjMsCi0gICAgICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAgIDEs
ICAgMjYsICAgMTAsICAgIDksICAgMTEsICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgIDksICAg
MTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsICAgMzEsCi0gICAgICAgMjEsICAgMzIs
ICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAgIDEsCi0gICAgICAg
MTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAs
Ci0gICAgICAgMTAsICAgMTAsICAgIDAKLSAgICB9IDsKLQotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X2VjWzI1Nl0gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAotICAgICAgICAyLCAgICAy
LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAg
ICAxLCAgICA5LAotICAgICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE2LAotICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAg
IDE3LCAgIDE3LCAgICA5LCAgICA5LCAgIDE4LAotICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAx
LCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIxLAotICAgICAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAot
ICAgICAgICA5LCAgICAxLCAgICA5LCAgIDI1LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIx
LCAgIDIxLAotCi0gICAgICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsCi0gICAgICAgMjMsICAgMjMsICAgIDksICAgMjYs
ICAgIDksICAgIDksICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0KLSAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMQotICAgIH0gOwotCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0
YVsyN10gPQotICAgIHsgICAwLAotICAgICAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAotICAgICAgICAxLCAgICAxLCAgICA0LCAgICAx
LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzg5XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgMjQsICAg
MjYsICAxNTgsICAxNTksICAxNTAsICAxNTksICAxNDUsICAxMjgsCi0gICAgICAxNTksICAxMTIs
ICAgMjMsICAxNTksICAxMTEsICAgMjEsICAgMjUsICAgMzAsICAgMjksICAgMzYsCi0gICAgICAg
NDYsICAgMzYsICAxMDAsICAgNDUsICAgIDAsICAgMTYsICAgNDcsICAgIDAsICAxNTksICAgODQs
Ci0gICAgICAgNjUsICAgNzMsICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAx
NTksICAxNTksCi0gICAgICAxNTksICAxNTksICAgNjEsICAxNTksICAgIDAsICAxNTksICAgNzMs
ICAgMzIsICAgNTYsICAgODMsCi0gICAgICAgOTUsICAgNjgsICAgIDAsICAgMzEsICAxNTksICAx
NTksICAxNTksICAgMTksICAgIDAsICAxNTksCi0gICAgICAxNTksICAxNTksICAxNTksICAgIDAs
ICAxNTksICAxNTksICAgOTgsICAgIDAsICAxMTAsICAgIDAsCi0gICAgICAgIDAsICAxMTcsICAg
NTIsICAgOTAsICAgODAsICAxNTksICAxNTksICAxMDEsICAgOTcsICAxMTIsCi0gICAgICAxMjAs
ICAxMjMsICAxNTksICAxNDAsICAgMjgsICAxNDUsICAxNTAsICAxNTIKLSAgICB9IDsKLQotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls4OV0gPQotICAgIHsgICAwLAotICAgICAg
IDgzLCAgICAxLCAgIDg0LCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLAotICAgICAgIDIwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLCAgIDgz
LCAgIDg2LCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgz
LCAgIDg3LCAgIDgzLCAgIDgzLCAgIDIwLCAgIDIwLCAgIDQ3LAotICAgICAgIDUwLCAgIDg4LCAg
IDIxLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDg1LCAgIDgzLAotICAgICAgIDgz
LCAgIDgzLCAgIDgzLCAgIDg2LCAgIDgzLCAgIDgzLCAgIDQzLCAgIDQzLCAgIDY3LCAgIDg3LAot
ICAgICAgIDQ3LCAgIDUwLCAgIDgzLCAgIDUxLCAgIDg4LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDY5
LCAgIDcyLAotICAgICAgIDgzLCAgIDgzLCAgICAwLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzCi0gICAgfSA7Ci0KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTg2XSA9
Ci0gICAgeyAgIDAsCi0gICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAg
MTIsICAgMTMsICAgMTQsICAgMTUsCi0gICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMjAs
ICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAgMjUsICAgMjUsICAgMjUsICAg
MjUsICAgMjYsICAgMjcsICAgMjksICAgMzAsICAgMjksICAgMzAsCi0gICAgICAgMzYsICAgMzks
ICAgNTksICAgMzEsICAgNjAsICAgMzEsICAgNDEsICAgNzcsICAgNDQsICAgNDAsCi0gICAgICAg
NjEsICAgMzcsICAgNDUsICAgNDIsICAgNDMsICAgNDMsICAgNDMsICAgNDYsICAgNDcsICAgNzYs
Ci0gICAgICAgNDgsICAgNDgsICAgNDksICAgNTQsICAgNTUsICAgNTAsICAgNTAsICAgNTEsICAg
NTAsICAgNTIsCi0gICAgICAgNTMsICAgNTMsICAgNTMsICAgNTcsICAgNTgsICAgNjIsICAgODEs
ICAgODEsICAgODEsICAgNTAsCi0gICAgICAgNDksICAgNDksICAgNjMsICAgNjcsICAgMzIsICAg
NjgsICAgNjgsICAgNjgsICAgNjYsICAgNTAsCi0gICAgICAgNTAsICAgNjcsICAgNjksICAgNjcs
ICAgNjcsICAgNTAsICAgNjUsICAgNzEsICAgNzEsICAgNzEsCi0gICAgICAgNTAsICAgNTAsICAg
NTAsICAgNTAsICAgNzIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsCi0KLSAgICAgICA4
MywgICA4MywgICA1MCwgICA1MCwgICA1MCwgICA3MywgICA3MywgICA4MywgICA4MywgICA3NCwK
LSAgICAgICA3NCwgICA3NCwgICA2NywgICA2NywgICA2NywgICA4MiwgICA4MiwgICA4MiwgICA1
NiwgICA2NywKLSAgICAgICA3OCwgICA3OCwgICA4MywgICA4MywgICA3OSwgICA3OSwgICA3OSwg
ICA3OCwgICA3OCwgICAzOCwKLSAgICAgICAzNSwgICA4MCwgICA4MCwgICA4MCwgICA4MSwgICA4
MSwgICA4MSwgICA4MiwgICA4MiwgICA4MiwKLSAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwg
ICAyOCwgICA2NCwgICAzNCwgICAzMywgICA2NCwgICA2NCwKLSAgICAgICA3MCwgICAzMiwgICA3
MCwgICA3MCwgICA3MCwgICA3NSwgICA3NSwgICA4MywgICAgNSwgICA4MywKLSAgICAgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKLSAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywKLSAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MwotICAgIH0gOwotCi1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE4Nl0gPQotICAgIHsgICAwLAotICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAz
LCAgICAzLCAgICA0LCAgICA0LAotICAgICAgIDEzLCAgIDE2LCAgIDg1LCAgICAzLCAgIDI2LCAg
ICA0LCAgIDE3LCAgIDU4LCAgIDE5LCAgIDE2LAotICAgICAgIDI2LCAgIDEzLCAgIDE5LCAgIDE3
LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDU0LAotICAgICAgIDIwLCAgIDIwLCAg
IDIwLCAgIDIyLCAgIDIyLCAgIDQ4LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLAotICAgICAgIDIx
LCAgIDIxLCAgIDIxLCAgIDI0LCAgIDI0LCAgIDI3LCAgIDczLCAgIDczLCAgIDczLCAgIDIxLAot
ICAgICAgIDQ5LCAgIDQ5LCAgIDI3LCAgIDQzLCAgIDMyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDMx
LCAgIDQ5LAotICAgICAgIDUyLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQzLCAgIDQ3LCAgIDMwLCAg
IDQ3LCAgIDQ3LCAgIDQ3LAotICAgICAgIDUyLCAgIDUyLCAgIDc1LCAgIDQ3LCAgIDQ3LCAgIDQ3
LCAgIDQ3LCAgIDUwLCAgIDUwLCAgIDUwLAotCi0gICAgICAgNzQsICAgNzQsICAgNzUsICAgNzUs
ICAgNTAsICAgNTEsICAgNTEsICAgNzksICAgNzksICAgNTEsCi0gICAgICAgNTEsICAgNTEsICAg
NjcsICAgNjcsICAgNjcsICAgNzgsICAgNzgsICAgNzgsICAgMjMsICAgNjcsCi0gICAgICAgNjks
ICAgNjksICAgODAsICAgODAsICAgNjksICAgNjksICAgNjksICAgNzIsICAgNzIsICAgMTUsCi0g
ICAgICAgMTIsICAgNzIsICAgNzIsICAgNzIsICAgODEsICAgODEsICAgODEsICAgODIsICAgODIs
ICAgODIsCi0gICAgICAgODQsICAgODQsICAgODQsICAgODQsICAgODQsICAgODYsICAgMTAsICAg
IDksICAgODYsICAgODYsCi0gICAgICAgODcsICAgIDcsICAgODcsICAgODcsICAgODcsICAgODgs
ICAgODgsICAgIDUsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAg
ODMsICAgODMsICAgODMsICAgODMKLSAgICB9IDsKLQotLyogVGhlIGludGVudCBiZWhpbmQgdGhp
cyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9mIFJFSkVDVCB3
aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25v
dF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVk
Ci0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNF
VAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgTGV4IHNw
ZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQgb24gTWljcm9zb2Z0
IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0dHA6Ly9tc2RuLm1p
Y3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlGIFlPVSBNT0RJRlkg
VEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KLSovCi0K
LSNpbmNsdWRlICJUb2tlbml6ZXIuaCIKLQotI2luY2x1ZGUgIkRpYWdub3N0aWNzLmgiCi0jaW5j
bHVkZSAiVG9rZW4uaCIKLQotI2lmIGRlZmluZWQoX19HTlVDX18pCi0vLyBUcmlnZ2VyZWQgYnkg
dGhlIGF1dG8tZ2VuZXJhdGVkIHl5X2ZhdGFsX2Vycm9yIGZ1bmN0aW9uLgotI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCi0jZW5kaWYKLQotdHlwZWRl
ZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwotdHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQ
RTsKLQotLy8gVXNlIHRoZSB1bnVzZWQgeXljb2x1bW4gdmFyaWFibGUgdG8gdHJhY2sgZmlsZSAo
c3RyaW5nKSBudW1iZXIuCi0jZGVmaW5lIHl5ZmlsZW5vIHl5Y29sdW1uCi0KLSNkZWZpbmUgWVlf
VVNFUl9JTklUICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgeXlmaWxlbm8gPSAwOyAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeXlleHRy
YS0+bGVhZGluZ1NwYWNlID0gZmFsc2U7IFwKLSAgICAgICAgeXlleHRyYS0+bGluZVN0YXJ0ID0g
dHJ1ZTsgICAgIFwKLSAgICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX1VTRVJfQUNUSU9OICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIHBwOjpJbnB1dCogaW5wdXQgPSAmeXlleHRyYS0+aW5w
dXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcHA6OklucHV0OjpMb2NhdGlv
biogc2NhbkxvYyA9ICZ5eWV4dHJhLT5zY2FuTG9jOyAgICAgICAgICAgXAotICAgICAgICB3aGls
ZSAoKHNjYW5Mb2MtPnNJbmRleCA8IGlucHV0LT5jb3VudCgpKSAmJiAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAoc2NhbkxvYy0+Y0luZGV4ID49IGlucHV0LT5sZW5ndGgoc2Nhbkxv
Yy0+c0luZGV4KSkpIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc2NhbkxvYy0+Y0luZGV4
IC09IGlucHV0LT5sZW5ndGgoc2NhbkxvYy0+c0luZGV4KyspOyAgICBcCi0gICAgICAgICAgICAr
K3l5ZmlsZW5vOyB5eWxpbmVubyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmZpbGUgPSB5eWZpbGVubzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bGxvYy0+bGluZSA9IHl5bGlu
ZW5vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc2Nhbkxv
Yy0+Y0luZGV4ICs9IHl5bGVuZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIH0gd2hpbGUoMCk7Ci0KLSNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heFNpemUp
IFwKLSAgICByZXN1bHQgPSB5eWV4dHJhLT5pbnB1dC5yZWFkKGJ1ZiwgbWF4U2l6ZSk7Ci0KLSNk
ZWZpbmUgSU5JVElBTCAwCi0jZGVmaW5lIENPTU1FTlQgMQotCi0jZGVmaW5lIFlZX0VYVFJBX1RZ
UEUgcHA6OlRva2VuaXplcjo6Q29udGV4dCoKLQotLyogSG9sZHMgdGhlIGVudGlyZSBzdGF0ZSBv
ZiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCi1zdHJ1Y3QgeXlndXRzX3QKLSAgICB7Ci0KLSAg
ICAvKiBVc2VyLWRlZmluZWQuIE5vdCB0b3VjaGVkIGJ5IGZsZXguICovCi0gICAgWVlfRVhUUkFf
VFlQRSB5eWV4dHJhX3I7Ci0KLSAgICAvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGds
b2JhbHMgZGVjbGFyZWQgaW4gdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4gKi8KLSAgICBGSUxF
ICp5eWluX3IsICp5eW91dF9yOwotICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wOyAvKio8
IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KLSAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21h
eDsgLyoqPCBjYXBhY2l0eSBvZiBzdGFjay4gKi8KLSAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9i
dWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCi0gICAgY2hhciB5eV9ob2xk
X2NoYXI7Ci0gICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0gICAgeXlfc2l6ZV90IHl5bGVuZ19y
OwotICAgIGNoYXIgKnl5X2NfYnVmX3A7Ci0gICAgaW50IHl5X2luaXQ7Ci0gICAgaW50IHl5X3N0
YXJ0OwotICAgIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7Ci0gICAgaW50IHl5X3N0
YXJ0X3N0YWNrX3B0cjsKLSAgICBpbnQgeXlfc3RhcnRfc3RhY2tfZGVwdGg7Ci0gICAgaW50ICp5
eV9zdGFydF9zdGFjazsKLSAgICB5eV9zdGF0ZV90eXBlIHl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
OwotICAgIGNoYXIqIHl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0KLSAgICBpbnQgeXlsaW5lbm9f
cjsKLSAgICBpbnQgeXlfZmxleF9kZWJ1Z19yOwotCi0gICAgY2hhciAqeXl0ZXh0X3I7Ci0gICAg
aW50IHl5X21vcmVfZmxhZzsKLSAgICBpbnQgeXlfbW9yZV9sZW47Ci0KLSAgICBZWVNUWVBFICog
eXlsdmFsX3I7Ci0KLSAgICBZWUxUWVBFICogeXlsbG9jX3I7Ci0KLSAgICB9OyAvKiBlbmQgc3Ry
dWN0IHl5Z3V0c190ICovCi0KLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBh
bmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKLSAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0
aW9uIDEuKi8KLSAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgotICAgIAotICAg
ICMgICAgZGVmaW5lIHl5bGxvYyB5eWctPnl5bGxvY19yCi0gICAgCi1pbnQgcHBsZXhfaW5pdCAo
eXlzY2FuX3QqIHNjYW5uZXIpOwotCi1pbnQgcHBsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQ
RSB1c2VyX2RlZmluZWQseXlzY2FuX3QqIHNjYW5uZXIpOwotCi0vKiBBY2Nlc3NvciBtZXRob2Rz
IHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQg
c2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgcHBsZXhfZGVzdHJveSAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7Ci0KLWludCBwcGdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotWVlfRVhUUkFfVFlQRSBwcGdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0K
LXZvaWQgcHBzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKLQotRklMRSAqcHBnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi12
b2lkIHBwc2V0X2luICAoRklMRSAqIGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLUZJ
TEUgKnBwZ2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLXZvaWQgcHBzZXRfb3V0ICAo
RklMRSAqIG91dF9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotCi15eV9zaXplX3QgcHBnZXRf
bGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0KLWNoYXIgKnBwZ2V0X3RleHQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwotCi1pbnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LQotdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7Ci0KLVlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotdm9p
ZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKLQotICAgICAgIFlZTFRZUEUgKnBwZ2V0X2xsb2MgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwot
ICAgIAotICAgICAgICB2b2lkIHBwc2V0X2xsb2MgKFlZTFRZUEUgKiB5eWxsb2NfcGFyYW0gLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwotICAgIAotLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2Fu
IGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KLSAqIHNlY3Rpb24gMS4K
LSAqLwotCi0jaWZuZGVmIFlZX1NLSVBfWVlXUkFQCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVy
biAiQyIgaW50IHBwd3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci0jZWxzZQotZXh0ZXJuIGlu
dCBwcHdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRl
ZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0
IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci0jZW5kaWYKLQotI2lmZGVmIFlZX05F
RURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlz
Y2FuX3QgeXlzY2FubmVyKTsKLSNlbmRpZgotCi0jaWZuZGVmIFlZX05PX0lOUFVUCi0KLSNpZmRl
ZiBfX2NwbHVzcGx1cwotc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
LSNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLSNlbmRpZgot
Ci0jZW5kaWYKLQotLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFk
LiAqLwotI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCi0jZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUg
ODE5MgotI2VuZGlmCi0KLS8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRv
IHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCi0jaWZuZGVmIEVDSE8KLS8qIFRoaXMgdXNlZCB0byBi
ZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAot
ICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KLSAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0
LCB5eWxlbmcsIDEsIHl5b3V0ICkKLSNlbmRpZgotCi0vKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMg
aXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCi0g
KiBpcyByZXR1cm5lZCBpbiAicmVzdWx0Ii4KLSAqLwotI2lmbmRlZiBZWV9JTlBVVAotI2RlZmlu
ZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAotCQl7IFwKLQkJaW50IGMgPSAnKic7IFwK
LQkJeXlfc2l6ZV90IG47IFwKLQkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0JCQkg
ICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0JCQli
dWZbbl0gPSAoY2hhcikgYzsgXAotCQlpZiAoIGMgPT0gJ1xuJyApIFwKLQkJCWJ1ZltuKytdID0g
KGNoYXIpIGM7IFwKLQkJaWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLQkJCVlZ
X0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotCQlyZXN1
bHQgPSBuOyBcCi0JCX0gXAotCWVsc2UgXAotCQl7IFwKLQkJZXJybm89MDsgXAotCQl3aGlsZSAo
IChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5
aW4pKSBcCi0JCQl7IFwKLQkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAotCQkJCXsgXAotCQkJCVlZ
X0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotCQkJCWJy
ZWFrOyBcCi0JCQkJfSBcCi0JCQllcnJubz0wOyBcCi0JCQljbGVhcmVycih5eWluKTsgXAotCQkJ
fSBcCi0JCX1cCi1cCi0KLSNlbmRpZgotCi0vKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsg
Y29ycmVjdCB1c2FnZSBpcyB0byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KLSAqIHdlIGRvbid0
IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBj
YXVzZQotICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3Rh
dGVtZW50cy4KLSAqLwotI2lmbmRlZiB5eXRlcm1pbmF0ZQotI2RlZmluZSB5eXRlcm1pbmF0ZSgp
IHJldHVybiBZWV9OVUxMCi0jZW5kaWYKLQotLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2gg
c3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dzLiAqLwotI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19J
TkNSCi0jZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUKLSNlbmRpZgotCi0vKiBSZXBvcnQg
YSBmYXRhbCBlcnJvci4gKi8KLSNpZm5kZWYgWVlfRkFUQUxfRVJST1IKLSNkZWZpbmUgWVlfRkFU
QUxfRVJST1IobXNnKSB5eV9mYXRhbF9lcnJvciggbXNnICwgeXlzY2FubmVyKQotI2VuZGlmCi0K
LS8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICov
Ci0KLS8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmlu
ZSBzbyB0aGUgdXNlciBjYW4KLSAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KLSAqLwotI2lmbmRl
ZiBZWV9ERUNMCi0jZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCi0KLWV4dGVybiBpbnQgcHBsZXgg
XAotICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0sWVlMVFlQRSAqIHl5bGxv
Y19wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKLQotI2RlZmluZSBZWV9ERUNMIGludCBwcGxl
eCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSwgWVlMVFlQRSAqIHl5
bGxvY19wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLSNlbmRpZiAvKiAhWVlfREVDTCAqLwot
Ci0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5
eXRleHQgYW5kIHl5bGVuZwotICogaGF2ZSBiZWVuIHNldCB1cC4KLSAqLwotI2lmbmRlZiBZWV9V
U0VSX0FDVElPTgotI2RlZmluZSBZWV9VU0VSX0FDVElPTgotI2VuZGlmCi0KLS8qIENvZGUgZXhl
Y3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovCi0jaWZuZGVmIFlZX0JSRUFLCi0jZGVm
aW5lIFlZX0JSRUFLIGJyZWFrOwotI2VuZGlmCi0KLSNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCi0J
WVlfVVNFUl9BQ1RJT04KLQotLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9l
cyBhbGwgdGhlIHdvcmsuCi0gKi8KLVlZX0RFQ0wKLXsKLQlyZWdpc3RlciB5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7Ci0JcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKLQlyZWdp
c3RlciBpbnQgeXlfYWN0OwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLQotICAgIC8qIExpbmUgY29tbWVudCAqLwotCi0gICAgeXlsdmFs
ID0geXlsdmFsX3BhcmFtOwotCi0gICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwotCi0JaWYgKCAh
eXlnLT55eV9pbml0ICkKLQkJewotCQl5eWctPnl5X2luaXQgPSAxOwotCi0jaWZkZWYgWVlfVVNF
Ul9JTklUCi0JCVlZX1VTRVJfSU5JVDsKLSNlbmRpZgotCi0JCWlmICggISB5eWctPnl5X3N0YXJ0
ICkKLQkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwotCi0JCWlm
ICggISB5eWluICkKLQkJCXl5aW4gPSBzdGRpbjsKLQotCQlpZiAoICEgeXlvdXQgKQotCQkJeXlv
dXQgPSBzdGRvdXQ7Ci0KLQkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotCQkJcHBlbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0KLQkJCQlwcF9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0J
CX0KLQotCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQkJfQotCi0Jd2hpbGUg
KCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLQkJewotCQl5
eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLQotCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KLQkJ
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0KLQkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBw
b3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0JCSAqIHRoZSBjdXJyZW50IHJ1
bi4KLQkJICovCi0JCXl5X2JwID0geXlfY3A7Ci0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+
eXlfc3RhcnQ7Ci15eV9tYXRjaDoKLQkJZG8KLQkJCXsKLQkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlf
YyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3Vy
cmVudF9zdGF0ZV0gKQotCQkJCXsKLQkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0g
eXlfY3VycmVudF9zdGF0ZTsKLQkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9j
cDsKLQkJCQl9Ci0JCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
eXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0JCQkJewotCQkJCXl5X2N1cnJlbnRfc3RhdGUg
PSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0
YXRlID49IDg0ICkKLQkJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0J
CQkJfQotCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCQkrK3l5X2NwOwotCQkJfQotCQl3aGlsZSAo
IHl5X2N1cnJlbnRfc3RhdGUgIT0gODMgKTsKLQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlOwotCi15eV9maW5kX2FjdGlvbjoKLQkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRf
c3RhdGVdOwotCi0JCVlZX0RPX0JFRk9SRV9BQ1RJT047Ci0KLWRvX2FjdGlvbjoJLyogVGhpcyBs
YWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwotCi0JCXN3aXRjaCAo
IHl5X2FjdCApCi0JeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwotCQkJY2FzZSAw
OiAvKiBtdXN0IGJhY2sgdXAgKi8KLQkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVG
T1JFX0FDVElPTiAqLwotCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCQl5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCQkJZ290byB5eV9maW5kX2FjdGlvbjsKLQotY2Fz
ZSAxOgotWVlfUlVMRV9TRVRVUAotCi0JWVlfQlJFQUsKLS8qIEJsb2NrIGNvbW1lbnQgKi8KLS8q
IExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3QgcmV0dXJuZWQuICovCi0vKiBUaGUg
Y29tbWVudCBpcyByZXBsYWNlZCBieSBhIHNpbmdsZSBzcGFjZS4gKi8gCi1jYXNlIDI6Ci1ZWV9S
VUxFX1NFVFVQCi17IEJFR0lOKENPTU1FTlQpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMzoKLVlZX1JV
TEVfU0VUVVAKLQotCVlZX0JSRUFLCi1jYXNlIDQ6Ci1ZWV9SVUxFX1NFVFVQCi0KLQlZWV9CUkVB
SwotY2FzZSA1OgotLyogcnVsZSA1IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsg
Kyt5eWxpbmVubzsgfQotCVlZX0JSRUFLCi1jYXNlIDY6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAg
eXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKLSAgICBCRUdJTihJTklUSUFMKTsKLX0KLQlZ
WV9CUkVBSwotY2FzZSA3OgotWVlfUlVMRV9TRVRVUAotewotICAgIC8vICMgaXMgb25seSB2YWxp
ZCBhdCBzdGFydCBvZiBsaW5lIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KLSAgICB5eWx2
YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwotICAgIHJldHVybiB5eWV4dHJhLT5saW5lU3RhcnQg
PyBwcDo6VG9rZW46OlBQX0hBU0ggOiBwcDo6VG9rZW46OlBQX09USEVSOwotfQotCVlZX0JSRUFL
Ci1jYXNlIDg6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OklERU5USUZJRVI7Ci19Ci0JWVlfQlJFQUsK
LWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5
bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwotfQotCVlZX0JSRUFLCi1j
YXNlIDEwOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKLX0KLQlZWV9CUkVBSwot
LyogQW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIHtESUdJVH0gb3IgLntESUdJVH0gbXVzdCBi
ZSBhIG51bWJlci4gKi8KLS8qIFJ1bGUgdG8gY2F0Y2ggYWxsIGludmFsaWQgaW50ZWdlcnMgYW5k
IGZsb2F0cy4gKi8KLWNhc2UgMTE6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3Np
Z24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OlBQX05VTUJFUjsKLX0K
LQlZWV9CUkVBSwotY2FzZSAxMjoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2ln
bih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfSU5DOwotfQotCVlZ
X0JSRUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5
dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ERUM7Ci19Ci0JWVlfQlJF
QUsKLWNhc2UgMTQ6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0
LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7Ci19Ci0JWVlfQlJFQUsK
LWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1JJR0hUOwotfQotCVlZX0JSRUFLCi1j
YXNlIDE2OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9MRTsKLX0KLQlZWV9CUkVBSwotY2FzZSAx
NzoKLVlZX1JVTEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfR0U7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMTg6Ci1Z
WV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX0VROwotfQotCVlZX0JSRUFLCi1jYXNlIDE5OgotWVlfUlVM
RV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1
cm4gcHA6OlRva2VuOjpPUF9ORTsKLX0KLQlZWV9CUkVBSwotY2FzZSAyMDoKLVlZX1JVTEVfU0VU
VVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfQU5EOwotfQotCVlZX0JSRUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAot
ewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9YT1I7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgMjI6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0g
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46
Ok9QX09SOwotfQotCVlZX0JSRUFLCi1jYXNlIDIzOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9B
RERfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDI0OgotWVlfUlVMRV9TRVRVUAotewotICAg
IHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpP
UF9TVUJfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDI1OgotWVlfUlVMRV9TRVRVUAotewot
ICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2Vu
OjpPUF9NVUxfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDI2OgotWVlfUlVMRV9TRVRVUAot
ewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9ESVZfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDI3OgotWVlfUlVMRV9TRVRV
UAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6
OlRva2VuOjpPUF9NT0RfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDI4OgotWVlfUlVMRV9T
RVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4g
cHA6OlRva2VuOjpPUF9MRUZUX0FTU0lHTjsKLX0KLQlZWV9CUkVBSwotY2FzZSAyOToKLVlZX1JV
TEVfU0VUVVAKLXsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfUklHSFRfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDMwOgot
WVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gcHA6OlRva2VuOjpPUF9BTkRfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNlIDMx
OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOwotfQotCVlZX0JSRUFLCi1jYXNl
IDMyOgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9PUl9BU1NJR047Ci19Ci0JWVlfQlJFQUsKLWNh
c2UgMzM6Ci1ZWV9SVUxFX1NFVFVQCi17Ci0gICAgeXlsdmFsLT5hc3NpZ24oMSwgeXl0ZXh0WzBd
KTsKLSAgICByZXR1cm4geXl0ZXh0WzBdOwotfQotCVlZX0JSRUFLCi1jYXNlIDM0OgotWVlfUlVM
RV9TRVRVUAoteyB5eWV4dHJhLT5sZWFkaW5nU3BhY2UgPSB0cnVlOyB9Ci0JWVlfQlJFQUsKLWNh
c2UgMzU6Ci0vKiBydWxlIDM1IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsKLSAg
ICArK3l5bGluZW5vOwotICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOwotICAgIHJldHVybiAn
XG4nOwotfQotCVlZX0JSRUFLCi1jYXNlIDM2OgotWVlfUlVMRV9TRVRVUAotewotICAgIHl5bHZh
bC0+YXNzaWduKDEsIHl5dGV4dFswXSk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6UFBfT1RIRVI7
Ci19Ci0JWVlfQlJFQUsKLWNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgotY2FzZSBZWV9TVEFU
RV9FT0YoQ09NTUVOVCk6Ci17Ci0gICAgLy8gWVlfVVNFUl9BQ1RJT04gaXMgbm90IGludm9rZWQg
Zm9yIGhhbmRsaW5nIEVPRi4KLSAgICAvLyBTZXQgdGhlIGxvY2F0aW9uIGZvciBFT0YgdG9rZW4g
bWFudWFsbHkuCi0gICAgcHA6OklucHV0KiBpbnB1dCA9ICZ5eWV4dHJhLT5pbnB1dDsKLSAgICBw
cDo6SW5wdXQ6OkxvY2F0aW9uKiBzY2FuTG9jID0gJnl5ZXh0cmEtPnNjYW5Mb2M7Ci0gICAgaW50
IHNJbmRleE1heCA9IHN0ZDo6bWF4KDAsIGlucHV0LT5jb3VudCgpIC0gMSk7Ci0gICAgaWYgKHNj
YW5Mb2MtPnNJbmRleCAhPSBzSW5kZXhNYXgpCi0gICAgewotICAgICAgICAvLyBXZSBjYW4gb25s
eSByZWFjaCBoZXJlIGlmIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIGF0IHRoZQotICAgICAgICAv
LyBlbmQgb2YgdGhlIGlucHV0LgotICAgICAgICBzY2FuTG9jLT5zSW5kZXggPSBzSW5kZXhNYXg7
IHNjYW5Mb2MtPmNJbmRleCA9IDA7Ci0gICAgICAgIHl5ZmlsZW5vID0gc0luZGV4TWF4OyB5eWxp
bmVubyA9IDE7Ci0gICAgfQotICAgIHl5bGxvYy0+ZmlsZSA9IHl5ZmlsZW5vOwotICAgIHl5bGxv
Yy0+bGluZSA9IHl5bGluZW5vOwotICAgIHl5bHZhbC0+Y2xlYXIoKTsKLQotICAgIGlmIChZWV9T
VEFSVCA9PSBDT01NRU5UKQotICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAgICB9Ci0gICAg
eXl0ZXJtaW5hdGUoKTsKLX0KLQlZWV9CUkVBSwotY2FzZSAzNzoKLVlZX1JVTEVfU0VUVVAKLUVD
SE87Ci0JWVlfQlJFQUsKLQotCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKLQkJewotCQkvKiBBbW91
bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLwotCQlpbnQg
eXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0
cikgLSAxOwotCi0JCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4g
Ki8KLQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0JCVlZX1JFU1RPUkVfWVlfTU9SRV9P
RkZTRVQKLQotCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1
cyA9PSBZWV9CVUZGRVJfTkVXICkKLQkJCXsKLQkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZp
bGUgb3IgaW5wdXQgc291cmNlLiAgSXQncwotCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBl
bmVkIGJlY2F1c2UgdGhlIHVzZXIKLQkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNv
dXJjZSBhbmQgY2FsbGVkCi0JCQkgKiBwcGxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBh
c3N1cmUKLQkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91
cgotCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNh
dXNlCi0JCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkg
YQotCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJj
ZS4KLQkJCSAqLwotCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxl
ID0geXlpbjsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9
IFlZX0JVRkZFUl9OT1JNQUw7Ci0JCQl9Ci0KLQkJLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBm
b3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotCQkgKiBvZiB0aGUgZmlyc3QgRU9C
IGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAotCQkgKiBhbHJlYWR5IGhhdmUg
YmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCi0JCSAqIChzaW5jZSBhbGwg
c3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQotCQkgKiBlbmQtb2YtYnVmZmVy
IHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotCQkgKiBpbiBpbnB1dCgpLgot
CQkgKi8KLQkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotCQkJeyAvKiBUaGlzIHdhcyByZWFsbHkg
YSBOVUwuICovCi0JCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7Ci0KLQkJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0K
LQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciAp
OwotCi0JCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKLQkJ
CSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCi0JCQkgKiB5eV9nZXRfcHJldmlvdXNf
c3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKLQkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNu
J3Qga25vdyBob3cgdG8gZGVhbAotCQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWlu
ZyAoYW5kIHdlIGRvbid0Ci0JCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNh
dXNlIHRoZW4gaXQKLQkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KLQkJCSAqLwotCi0JCQl5
eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nh
bm5lcik7Ci0KLQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLQkJ
CWlmICggeXlfbmV4dF9zdGF0ZSApCi0JCQkJewotCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8K
LQkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOwotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9uZXh0X3N0YXRlOwotCQkJCWdvdG8geXlfbWF0Y2g7Ci0JCQkJfQotCi0JCQllbHNlCi0JCQkJ
ewotCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotCQkJCWdvdG8geXlfZmlu
ZF9hY3Rpb247Ci0JCQkJfQotCQkJfQotCi0JCWVsc2Ugc3dpdGNoICggeXlfZ2V0X25leHRfYnVm
ZmVyKCB5eXNjYW5uZXIgKSApCi0JCQl7Ci0JCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0J
CQkJewotCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKLQotCQkJCWlm
ICggcHB3cmFwKHl5c2Nhbm5lciApICkKLQkJCQkJewotCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdl
J3ZlIHRha2VuIGNhcmUgaW4KLQkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBz
ZXQgdXAKLQkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAotCQkJCQkgKiB5eV9jX2J1
Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAotCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2Vs
Zikgd2FudHMgdG8KLQkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhl
Ci0JCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCi0JCQkJCSAqIFlZ
X05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCi0JCQkJCSAqLwotCQkJCQl5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotCQkJCQl5eV9hY3QgPSBZWV9TVEFU
RV9FT0YoWVlfU1RBUlQpOwotCQkJCQlnb3RvIGRvX2FjdGlvbjsKLQkJCQkJfQotCi0JCQkJZWxz
ZQotCQkJCQl7Ci0JCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiAp
Ci0JCQkJCQlZWV9ORVdfRklMRTsKLQkJCQkJfQotCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJY2Fz
ZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0JCQkJeXlnLT55eV9jX2J1Zl9wID0KLQkJCQkJeXln
LT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0JCQkJeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0JCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKLQkJCQlnb3RvIHl5X21hdGNoOwotCi0JCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRD
SDoKLQkJCQl5eWctPnl5X2NfYnVmX3AgPQotCQkJCSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOwotCi0JCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLQkJCQl5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKLQkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247Ci0JCQl9Ci0JCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0Ogot
CQlZWV9GQVRBTF9FUlJPUigKLQkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3It
LW5vIGFjdGlvbiBmb3VuZCIgKTsKLQl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovCi0JCX0g
LyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotfSAvKiBlbmQgb2YgcHBsZXggKi8KLQot
LyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCi0gKgot
ICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKLSAqCUVPQl9BQ1RfTEFT
VF9NQVRDSCAtCi0gKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBm
cm9tIGN1cnJlbnQgcG9zaXRpb24KLSAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmls
ZQotICovCi1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVy
KQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKLQlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWY7Ci0JcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRleHRfcHRyOwotCXJl
Z2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKLQlpbnQgcmV0X3ZhbDsKLQotCWlmICggeXln
LT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+
eXlfbl9jaGFycyArIDFdICkKLQkJWVlfRkFUQUxfRVJST1IoCi0JCSJmYXRhbCBmbGV4IHNjYW5u
ZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOwotCi0JaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQotCQl7IC8qIERvbid0
IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwotCQlpZiAoIHl5
Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09IDEgKQotCQkJ
ewotCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0IsIHNvCi0JCQkg
KiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgotCQkJICovCi0JCQlyZXR1cm4gRU9CX0FDVF9F
TkRfT0ZfRklMRTsKLQkJCX0KLQotCQllbHNlCi0JCQl7Ci0JCQkvKiBXZSBtYXRjaGVkIHNvbWUg
dGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAotCQkJICogcHJvY2VzcyBpdC4KLQkJCSAqLwot
CQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCX0KLQkJfQotCi0JLyogVHJ5IHRvIHJl
YWQgbW9yZSBkYXRhLiAqLwotCi0JLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9m
IGJ1ZmZlci4gKi8KLQludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5
eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7
ICsraSApCi0JCSooZGVzdCsrKSA9ICooc291cmNlKyspOwotCi0JaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkK
LQkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFu
IEVPRiwKLQkJICoganVzdCBmb3JjZSBhbiBFT0YKLQkJICovCi0JCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7Ci0KLQllbHNlCi0JCXsK
LQkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwotCi0JCXdoaWxlICggbnVtX3RvX3Jl
YWQgPD0gMCApCi0JCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBp
dC4gKi8KLQotCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVy
ICovCi0JCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOwotCi0JCQlpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQotCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55eV9j
aF9idWYpOwotCi0JCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQkJCXsKLQkJCQl5eV9z
aXplX3QgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7Ci0KLQkJCQlpZiAoIG5ld19zaXpl
IDw9IDAgKQotCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7Ci0JCQkJ
ZWxzZQotCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOwotCi0JCQkJYi0+eXlfY2hfYnVmID0gKGNo
YXIgKikKLQkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLQkJCQkJ
cHByZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nh
bm5lciApOwotCQkJCX0KLQkJCWVsc2UKLQkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBv
d24gaXQuICovCi0JCQkJYi0+eXlfY2hfYnVmID0gMDsKLQotCQkJaWYgKCAhIGItPnl5X2NoX2J1
ZiApCi0JCQkJWVlfRkFUQUxfRVJST1IoCi0JCQkJImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1
dCBidWZmZXIgb3ZlcmZsb3ciICk7Ci0KLQkJCXl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9i
dWZbeXlfY19idWZfcF9vZmZzZXRdOwotCi0JCQludW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQotCQkJCQkJbnVtYmVyX3RvX21vdmUgLSAxOwotCi0J
CQl9Ci0KLQkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQotCQkJbnVtX3Rv
X3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwotCi0JCS8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwot
CQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJf
dG9fbW92ZV0pLAotCQkJeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOwotCi0JCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLQkJfQot
Ci0JaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0JCXsKLQkJaWYgKCBudW1iZXJfdG9fbW92
ZSA9PSBZWV9NT1JFX0FESiApCi0JCQl7Ci0JCQlyZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklM
RTsKLQkJCXBwcmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLQkJCX0KLQotCQllbHNlCi0JCQl7
Ci0JCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KLQkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJTkc7Ci0J
CQl9Ci0JCX0KLQotCWVsc2UKLQkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjsKLQot
CWlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUpID4gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotCQkvKiBFeHRlbmQgdGhlIGFy
cmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLwotCQl5eV9zaXpl
X3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5
X25fY2hhcnMgPj4gMSk7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0g
KGNoYXIgKikgcHByZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsKLQkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotCX0KLQotCXl5Zy0+eXlfbl9jaGFy
cyArPSBudW1iZXJfdG9fbW92ZTsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09G
X0JVRkZFUl9DSEFSOwotCi0JeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmWzBdOwotCi0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qIHl5X2dldF9w
cmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdh
cyByZWFjaGVkICovCi0KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGU7Ci0JcmVnaXN0ZXIgY2hhciAqeXlfY3A7Ci0gICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7Ci0KLQlmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciAr
IFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0JCXsKLQkJ
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7Ci0JCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLQkJCXsKLQkJ
CXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotCQkJeXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0JCQl9Ci0JCXdoaWxlICggeXlfY2hr
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkK
LQkJCXsKLQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQotCQkJCXl5X2MgPSB5eV9tZXRh
Wyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotCQkJfQotCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQkJfQot
Ci0JcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLS8qIHl5X3RyeV9OVUxfdHJhbnMgLSB0
cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIKLSAqCi0gKiBzeW5v
cHNpcwotICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsK
LSAqLwotICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0
ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5nIHVw
b24gb3B0aW9ucy4gKi8KLQlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
LQotCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0JaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV0gKQotCQl7Ci0JCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJy
ZW50X3N0YXRlOwotCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLQkJfQot
CXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9j
dXJyZW50X3N0YXRlICkKLQkJewotCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5
X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODQgKQotCQkJeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0JCX0KLQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9j
XTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Myk7Ci0KLQlyZXR1cm4geXlf
aXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Ci19Ci0KLSNpZm5kZWYgWVlfTk9fSU5QVVQK
LSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotI2Vsc2UKLSAgICBzdGF0aWMgaW50IGlucHV0ICAoeXlzY2FuX3QgeXlzY2FubmVy
KQotI2VuZGlmCi0KLXsKLQlpbnQgYzsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9o
b2xkX2NoYXI7Ci0KLQlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JVRkZFUl9D
SEFSICkKLQkJewotCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3
ZSB3YW50IHRvIHJldHVybi4KLQkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBj
aGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQotCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2
ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotCQkgKi8KLQkJaWYgKCB5eWctPnl5X2NfYnVm
X3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSApCi0JCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0JCQkqeXlnLT55eV9jX2J1Zl9w
ID0gJ1wwJzsKLQotCQllbHNlCi0JCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLwotCQkJeXlfc2l6
ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLQkJCSsreXln
LT55eV9jX2J1Zl9wOwotCi0JCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKLQkJCQl7Ci0JCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0JCQkJCS8qIFRoaXMg
aGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKLQkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3Vt
dWxhdGVkIGEKLQkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwotCQkJCQkg
KiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0
IGZvciBpbnB1dCgpLAotCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgot
CQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKLQkJCQkJICogdG8gRU9C
X0FDVF9FTkRfT0ZfRklMRS4KLQkJCQkJICovCi0KLQkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1
cy4gKi8KLQkJCQkJcHByZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7Ci0KLQkJCQkJLypGQUxMVEhS
T1VHSCovCi0KLQkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0JCQkJCXsKLQkJCQkJaWYg
KCBwcHdyYXAoeXlzY2FubmVyICkgKQotCQkJCQkJcmV0dXJuIDA7Ci0KLQkJCQkJaWYgKCAhIHl5
Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLQkJCQkJCVlZX05FV19GSUxFOwotI2lm
ZGVmIF9fY3BsdXNwbHVzCi0JCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7Ci0jZWxzZQot
CQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKLSNlbmRpZgotCQkJCQl9Ci0KLQkJCQljYXNl
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLQkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRl
eHRfcHRyICsgb2Zmc2V0OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCWMgPSAq
KHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFy
J3MgKi8KLQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCi0J
eXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7Ci0KLQlyZXR1cm4gYzsKLX0K
LSNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KLQotLyoqIEltbWVkaWF0ZWx5IHN3aXRj
aCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCi0gKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJl
YWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgot
ICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9u
IHRvIEBjIElOSVRJQUwgLgotICovCi0gICAgdm9pZCBwcHJlc3RhcnQgIChGSUxFICogaW5wdXRf
ZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZG
RVIgKXsKLSAgICAgICAgcHBlbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcHBfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotCX0KLQotCXBwX2luaXRfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0JcHBfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVy
LgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0gKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotICAgIHZvaWQgcHBfc3dpdGNoX3Rv
X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0KLQkvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50
aXJlIGZ1bmN0aW9uIGJvZHkKLQkgKiB3aXRoCi0JICoJCXBwcG9wX2J1ZmZlcl9zdGF0ZSgpOwot
CSAqCQlwcHB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOwotICAgICAqLwotCXBwZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5l
d19idWZmZXIgKQotCQlyZXR1cm47Ci0KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJewot
CQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0JCSp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0JcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVy
ICk7Ci0KLQkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dp
dGNoIGR1cmluZwotCSAqIEVPRiAocHB3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0
aW1lIHRoaXMgZmxhZwotCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwcHdyYXAoKSBpcyBjYWxs
ZWQsIHNvIGl0J3Mgc2FmZQotCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotCSAq
LwotCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLX0KLQotc3RhdGljIHZv
aWQgcHBfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCXl5Zy0+
eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLQl5eWct
Pnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9wb3M7Ci0JeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZTsKLQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7Ci19Ci0KLS8qKiBB
bGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUuCi0gKiBAcGFyYW0g
ZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIEBwYXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVm
ZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgYWxs
b2NhdGVkIGJ1ZmZlciBzdGF0ZS4KLSAqLwotICAgIFlZX0JVRkZFUl9TVEFURSBwcF9jcmVhdGVf
YnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsK
LQlZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLQliID0gKFlZX0JVRkZFUl9TVEFURSkgcHBhbGxv
YyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0JaWYgKCAh
IGIgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVh
dGVfYnVmZmVyKCkiICk7Ci0KLQliLT55eV9idWZfc2l6ZSA9IHNpemU7Ci0KLQkvKiB5eV9jaF9i
dWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNh
dXNlCi0JICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCi0J
ICovCi0JYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgcHBhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOwotCWlmICggISBiLT55eV9jaF9idWYgKQotCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwcF9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLQliLT55
eV9pc19vdXJfYnVmZmVyID0gMTsKLQotCXBwX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVy
KTsKLQotCXJldHVybiBiOwotfQotCi0vKiogRGVzdHJveSB0aGUgYnVmZmVyLgotICogQHBhcmFt
IGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHBwX2NyZWF0ZV9idWZmZXIoKQotICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKi8KLSAgICB2b2lkIHBwX2RlbGV0ZV9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLQlpZiAo
ICEgYiApCi0JCXJldHVybjsKLQotCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5v
dCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKLQotCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciAp
Ci0JCXBwZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwotCi0JcHBmcmVl
KCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwotfQotCi0vKiBJbml0aWFsaXplcyBvciByZWluaXRp
YWxpemVzIGEgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1v
cmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKLSAqIHN1Y2ggYXMgZHVyaW5nIGEgcHBy
ZXN0YXJ0KCkgb3IgYXQgRU9GLgotICovCi0gICAgc3RhdGljIHZvaWQgcHBfaW5pdF9idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQot
Ci17Ci0JaW50IG9lcnJubyA9IGVycm5vOwotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLQotCXBwX2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5u
ZXIpOwotCi0JYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0JYi0+eXlfZmlsbF9idWZmZXIgPSAx
OwotCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcHBfaW5pdF9idWZm
ZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSBwcHJlc3RhcnQoKSBvciB0aHJv
dWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KLSAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdh
bnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCi0gICAgICovCi0gICAgaWYgKGIgIT0g
WVlfQ1VSUkVOVF9CVUZGRVIpewotICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOwotICAgICAg
ICBiLT55eV9ic19jb2x1bW4gPSAwOwotICAgIH0KLQotICAgICAgICBiLT55eV9pc19pbnRlcmFj
dGl2ZSA9IDA7Ci0gICAgCi0JZXJybm8gPSBvZXJybm87Ci19Ci0KLS8qKiBEaXNjYXJkIGFsbCBi
dWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNh
bGxlZC4KLSAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxs
eSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIg
b2JqZWN0LgotICovCi0gICAgdm9pZCBwcF9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAg
YiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0JaWYgKCAhIGIgKQotCQlyZXR1cm47Ci0KLQli
LT55eV9uX2NoYXJzID0gMDsKLQotCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVy
IGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0JICogYSB0cmFuc2l0aW9uIHRvIHRoZSBl
bmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLQkgKiBhIGphbSBpbiB0aGF0
IHN0YXRlLgotCSAqLwotCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
LQliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLQliLT55eV9idWZf
cG9zID0gJmItPnl5X2NoX2J1ZlswXTsKLQotCWItPnl5X2F0X2JvbCA9IDE7Ci0JYi0+eXlfYnVm
ZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7Ci0KLQlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZG
RVIgKQotCQlwcF9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLX0KLQotLyoqIFB1c2hl
cyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKLSAq
ICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFj
awotICogIGlmIG5lY2Vzc2FyeS4KLSAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRl
LgotICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBw
cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLQlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlw
cGVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKLQotCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20gcHBfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKLQkJewotCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0J
CSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0JCX0KLQotCS8qIE9u
bHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotCWlmIChZ
WV9DVVJSRU5UX0JVRkZFUikKLQkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0JWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQotCS8qIGNvcGllZCBmcm9tIHBwX3N3
aXRjaF90b19idWZmZXIuICovCi0JcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0J
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotfQotCi0vKiogUmVtb3ZlcyBh
bmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KLSAqICBUaGUgbmV4
dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCi0gKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCi0gKi8KLXZvaWQgcHBwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwotCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCi0JCXJldHVybjsKLQotCXBw
X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0JWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLQlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4g
MCkKLQkJLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLQlpZiAoWVlfQ1VSUkVOVF9CVUZG
RVIpIHsKLQkJcHBfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0JCXl5Zy0+eXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKLQl9Ci19Ci0KLS8qIEFsbG9jYXRlcyB0aGUgc3Rh
Y2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVh
c3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHBwZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FuX3QgeXlzY2FubmVyKQotewotCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0JaWYgKCF5
eWctPnl5X2J1ZmZlcl9zdGFjaykgewotCi0JCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBm
b3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0JCSAqIHNjYW5uZXIg
d2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFu
Ci0JCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCi0gICAgICAgICAqLwot
CQludW1fdG9fYWxsb2MgPSAxOwotCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKiopcHBhbGxvYwotCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotCQkJCQkJCQksIHl5c2Nhbm5lcik7Ci0JCWlmICggISB5
eWctPnl5X2J1ZmZlcl9zdGFjayApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWlj
IG1lbW9yeSBpbiBwcGVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLQkJCQkJCQkJICAKLQkJbWVt
c2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLQkJCQkKLQkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0g
bnVtX3RvX2FsbG9jOwotCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotCQlyZXR1cm47
Ci0JfQotCi0JaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4KSAtIDEpewotCi0JCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBm
b3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkg
Z3JvdyBzaXplICovOwotCi0JCW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCArIGdyb3dfc2l6ZTsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSoqKXBwcmVhbGxvYwotCQkJCQkJCQkoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0JCQkJ
CQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLQkJCQkJ
CQkJLCB5eXNjYW5uZXIpOwotCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotCQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcHBlbnN1cmVfYnVmZmVyX3N0
YWNrKCkiICk7Ci0KLQkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLQkJbWVtc2V0KHl5
Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3Np
emUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLQkJeXlnLT55eV9idWZmZXJf
c3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotCX0KLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBi
dWZmZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFj
dGVyIGJ1ZmZlci4KLSAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCi0gKiBAcGFy
YW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4gCi0gKi8KLVlZX0JVRkZFUl9TVEFURSBwcF9z
Y2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCi17Ci0JWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgCi0JaWYgKCBzaXplIDwgMiB8fAot
CSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotCSAgICAgYmFz
ZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0JCS8qIFRoZXkgZm9yZ290IHRv
IGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLQkJcmV0dXJuIDA7Ci0KLQliID0gKFlZX0JV
RkZFUl9TVEFURSkgcHBhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlz
Y2FubmVyICk7Ci0JaWYgKCAhIGIgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWlj
IG1lbW9yeSBpbiBwcF9zY2FuX2J1ZmZlcigpIiApOwotCi0JYi0+eXlfYnVmX3NpemUgPSBzaXpl
IC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCi0JYi0+eXlfYnVmX3BvcyA9
IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0JYi0+eXlf
aW5wdXRfZmlsZSA9IDA7Ci0JYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotCWItPnl5
X2lzX2ludGVyYWN0aXZlID0gMDsKLQliLT55eV9hdF9ib2wgPSAxOwotCWItPnl5X2ZpbGxfYnVm
ZmVyID0gMDsKLQliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotCXBwX3N3
aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7Ci0KLQlyZXR1cm4gYjsKLX0KLQotLyoqIFNl
dHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2Fs
bCB0byBwcGxleCgpIHdpbGwKLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgotICog
QHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KLSAqIEBwYXJhbSB5
eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2Nh
dGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5
dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHBwX3Nj
YW5fYnl0ZXMoKSBpbnN0ZWFkLgotICovCi1ZWV9CVUZGRVJfU1RBVEUgcHBfc2Nhbl9zdHJpbmcg
KHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIAotCXJl
dHVybiBwcF9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7Ci19Ci0K
LS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVz
LiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29weSBv
ZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICog
QHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBi
eSBAYSBieXRlcy4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICog
QHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKi8KLVlZ
X0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlf
c2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0JWVlfQlVGRkVS
X1NUQVRFIGI7Ci0JY2hhciAqYnVmOwotCXl5X3NpemVfdCBuLCBpOwotICAgIAotCS8qIEdldCBt
ZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidz
LiAqLwotCW4gPSBfeXlieXRlc19sZW4gKyAyOwotCWJ1ZiA9IChjaGFyICopIHBwYWxsb2MobiAs
eXlzY2FubmVyICk7Ci0JaWYgKCAhIGJ1ZiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQotCWZvciAoIGkgPSAwOyBpIDwg
X3l5Ynl0ZXNfbGVuOyArK2kgKQotCQlidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0JYnVmW195eWJ5
dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwot
Ci0JYiA9IHBwX3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotCWlmICggISBiICkKLQkJ
WVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBwX3NjYW5fYnl0ZXMoKSIgKTsKLQotCS8q
IEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cg
aXQKLQkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLQkgKi8KLQliLT55eV9pc19vdXJfYnVmZmVy
ID0gMTsKLQotCXJldHVybiBiOwotfQotCi0jaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQotI2RlZmlu
ZSBZWV9FWElUX0ZBSUxVUkUgMgotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9y
ICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICAJKHZvaWQp
IGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKLQlleGl0KCBZWV9FWElUX0ZBSUxVUkUg
KTsKLX0KLQotLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNv
ZGUuICovCi0KLSN1bmRlZiB5eWxlc3MKLSNkZWZpbmUgeXlsZXNzKG4pIFwKLQlkbyBcCi0JCXsg
XAotCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAgICAg
aW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXls
ZXNzX21hY3JvX2FyZyk7XAotCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBc
Ci0JCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKLQkJeXln
LT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCi0JCSp5eWctPnl5X2NfYnVmX3Ag
PSAnXDAnOyBcCi0JCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKLQkJfSBcCi0Jd2hpbGUg
KCAwICkKLQotLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1
Y3QgbWVtYmVycy4gKi8KLQotLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMg
c2Nhbm5lci4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1Z
WV9FWFRSQV9UWVBFIHBwZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBy
ZXR1cm4geXlleHRyYTsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAq
IEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQgcHBnZXRfbGlu
ZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VS
UkVOVF9CVUZGRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXls
aW5lbm87Ci19Ci0KLS8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KLSAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi1pbnQgcHBnZXRfY29sdW1uICAo
eXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICAKLSAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9C
VUZGRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4geXljb2x1bW47
Ci19Ci0KLS8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgotICovCi1GSUxFICpwcGdldF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5l
cikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNj
YW5uZXI7Ci0gICAgcmV0dXJuIHl5aW47Ci19Ci0KLS8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0u
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqLwotRklMRSAqcHBn
ZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZXR1cm4geXlvdXQ7Ci19Ci0K
LS8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNj
YW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi15eV9zaXplX3QgcHBnZXRfbGVuZyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmV0dXJuIHl5bGVuZzsKLX0KLQotLyoqIEdldCB0
aGUgY3VycmVudCB0b2tlbi4KLSAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0
LgotICovCi0KLWNoYXIgKnBwZ2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHJldHVybiB5eXRleHQ7Ci19Ci0KLS8qKiBTZXQgdGhlIHVzZXItZGVmaW5lZCBkYXRhLiBUaGlz
IGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4KLSAqIEBwYXJhbSB1c2VyX2Rl
ZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Nhbm5lci4KLSAqIEBw
YXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgotICovCi12b2lkIHBwc2V0X2V4dHJh
IChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0g
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwot
ICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOwotfQotCi0vKiogU2V0IHRoZSBjdXJyZW50IGxp
bmUgbnVtYmVyLgotICogQHBhcmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KLSAqLwotdm9pZCBwcHNldF9saW5lbm8gKGludCAgbGluZV9udW1i
ZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotCi0gICAgICAgIC8qIGxpbmVubyBpcyBvbmx5
IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCi0gICAgICAgIGlmICghIFlZX0NV
UlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5lbm8g
Y2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAotICAgIAotICAgIHl5bGluZW5v
ID0gbGluZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgotICogQHBh
cmFtIGxpbmVfbnVtYmVyCi0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4K
LSAqLwotdm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLQotICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBi
dWZmZXIgZXhpc3RzLiAqLwotICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAg
ICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZl
ciIgLCB5eXNjYW5uZXIpOyAKLSAgICAKLSAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKLX0KLQot
LyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJl
bnQKLSAqIGlucHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0u
Ci0gKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KLSAqIEBzZWUgcHBfc3dp
dGNoX3RvX2J1ZmZlcgotICovCi12b2lkIHBwc2V0X2luIChGSUxFICogIGluX3N0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKLXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlpbiA9IGluX3N0ciA7Ci19Ci0KLXZvaWQgcHBzZXRf
b3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5b3V0
ID0gb3V0X3N0ciA7Ci19Ci0KLWludCBwcGdldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
LXsKLSAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Ci19Ci0KLXZvaWQgcHBzZXRfZGVidWcgKGlu
dCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICB5eV9mbGV4X2RlYnVnID0g
YmRlYnVnIDsKLX0KLQotLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2Mg
Ki8KLQotWVlTVFlQRSAqIHBwZ2V0X2x2YWwgICh5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAg
IHJldHVybiB5eWx2YWw7Ci19Ci0KLXZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqICB5eWx2YWxf
cGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJh
bTsKLX0KLQotWVlMVFlQRSAqcHBnZXRfbGxvYyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0g
ICAgcmV0dXJuIHl5bGxvYzsKLX0KLSAgICAKLXZvaWQgcHBzZXRfbGxvYyAoWVlMVFlQRSAqICB5
eWxsb2NfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCi17Ci0gICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5bGxvYyA9IHl5bGxv
Y19wYXJhbTsKLX0KLSAgICAKLS8qIFVzZXItdmlzaWJsZSBBUEkgKi8KLQotLyogcHBsZXhfaW5p
dCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0
IGlzCi0gKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHRha2UgdGhl
IHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCi0gKiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0
bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBvdXIgbWFjcm9zLgot
ICovCi0KLWludCBwcGxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKLQotewotICAg
IGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0g
ICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5f
dCkgcHBhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwgKTsKLQotICAgIGlm
ICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7Ci0gICAgICAgIGVycm5vID0gRU5PTUVNOwotICAg
ICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4
cG9zZSBidWdzIGluIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3IgcmVsZWFzZXMu
ICovCi0gICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1Y3QgeXlndXRz
X3QpKTsKLQotICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRyX3l5X2dsb2JhbHMgKTsK
LX0KLQotLyogcHBsZXhfaW5pdF9leHRyYSBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBw
cGxleF9pbml0LCBidXQgZm9sbG93cyB0aGUKLSAqIGNvbnZlbnRpb24gb2YgdGFraW5nIHRoZSBz
Y2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBOb3RlIGhvd2V2ZXIsIHRoYXQKLSAqIHRoaXMg
aXMgYSAqcG9pbnRlciogdG8gYSBzY2FubmVyLCBhcyBpdCB3aWxsIGJlIGFsbG9jYXRlZCBieSB0
aGlzIGNhbGwgKGFuZAotICogaXMgdGhlIHJlYXNvbiwgdG9vLCB3aHkgdGhpcyBmdW5jdGlvbiBh
bHNvIG11c3QgaGFuZGxlIGl0cyBvd24gZGVjbGFyYXRpb24pLgotICogVGhlIHVzZXIgZGVmaW5l
ZCB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhdmFpbGFibGUgdG8gcHBhbGxv
YyBpbgotICogdGhlIHl5ZXh0cmEgZmllbGQuCi0gKi8KLQotaW50IHBwbGV4X2luaXRfZXh0cmEo
WVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQseXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzICkK
LQotewotICAgIHN0cnVjdCB5eWd1dHNfdCBkdW1teV95eWd1dHM7Ci0KLSAgICBwcHNldF9leHRy
YSAoeXlfdXNlcl9kZWZpbmVkLCAmZHVtbXlfeXlndXRzKTsKLQotICAgIGlmIChwdHJfeXlfZ2xv
YmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIH0KLQkKLSAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHBwYWxsb2MgKCBz
aXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0JCi0gICAgaWYgKCpw
dHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAg
IHJldHVybiAxOwotICAgIH0KLSAgICAKLSAgICAvKiBCeSBzZXR0aW5nIHRvIDB4QUEsIHdlIGV4
cG9zZSBidWdzIGluCi0gICAgeXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciByZWxl
YXNlcy4gKi8KLSAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVjdCB5
eWd1dHNfdCkpOwotICAgIAotICAgIHBwc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICpwdHJf
eXlfZ2xvYmFscyk7Ci0gICAgCi0gICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlf
Z2xvYmFscyApOwotfQotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlz
Y2FubmVyKQotewotICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhl
IG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBm
cm9tIHBwbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KLSAgICAgKi8KLQot
ICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gMDsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190
b3AgPSAwOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7Ci0gICAgeXlnLT55eV9j
X2J1Zl9wID0gKGNoYXIgKikgMDsKLSAgICB5eWctPnl5X2luaXQgPSAwOwotICAgIHl5Zy0+eXlf
c3RhcnQgPSAwOwotCi0gICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAwOwotICAgIHl5Zy0+
eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOwotICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVM
TDsKLQotLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KLSNpZmRlZiBZWV9TVERJTklUCi0gICAgeXlp
biA9IHN0ZGluOwotICAgIHl5b3V0ID0gc3Rkb3V0OwotI2Vsc2UKLSAgICB5eWluID0gKEZJTEUg
KikgMDsKLSAgICB5eW91dCA9IChGSUxFICopIDA7Ci0jZW5kaWYKLQotICAgIC8qIEZvciBmdXR1
cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkK
LSAgICAgKiBwcGxleF9pbml0KCkKLSAgICAgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotLyogcHBs
ZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5l
cnMuICovCi1pbnQgcHBsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLSAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0KLSAg
ICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCi0J
d2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpewotCQlwcF9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSICx5eXNjYW5uZXIgKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
LQkJcHBwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7Ci0JfQotCi0JLyogRGVzdHJveSB0aGUg
c3RhY2sgaXRzZWxmLiAqLwotCXBwZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2FubmVy
KTsKLQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBz
dGFydCBjb25kaXRpb24gc3RhY2suICovCi0gICAgICAgIHBwZnJlZSh5eWctPnl5X3N0YXJ0X3N0
YWNrICx5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9zdGFydF9zdGFjayA9IE5VTEw7Ci0K
LSAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVl
bnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQotICAgICAqIHBwbGV4KCkgaXMgY2FsbGVk
LCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3VyLiAqLwotICAgIHl5X2luaXRfZ2xvYmFscyggeXlz
Y2FubmVyKTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIG1haW4gc3RydWN0IChyZWVudHJhbnQgb25s
eSkuICovCi0gICAgcHBmcmVlICggeXlzY2FubmVyICwgeXlzY2FubmVyICk7Ci0gICAgeXlzY2Fu
bmVyID0gTlVMTDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIEludGVybmFsIHV0aWxpdHkg
cm91dGluZXMuCi0gKi8KLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4
X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCi17Ci0JcmVnaXN0ZXIgaW50IGk7Ci0JZm9yICggaSA9IDA7IGkgPCBuOyArK2kg
KQotCQlzMVtpXSA9IHMyW2ldOwotfQotI2VuZGlmCi0KLSNpZmRlZiBZWV9ORUVEX1NUUkxFTgot
c3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKLXsKLQlyZWdpc3RlciBpbnQgbjsKLQlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkK
LQkJOwotCi0JcmV0dXJuIG47Ci19Ci0jZW5kaWYKLQotdm9pZCAqcHBhbGxvYyAoeXlfc2l6ZV90
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCXJldHVybiAodm9pZCAqKSBtYWxsb2Mo
IHNpemUgKTsKLX0KLQotdm9pZCAqcHByZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBz
aXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQotewotCS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGlu
IHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKLQkgKiBpbXBsZW1lbnRhdGlvbnMgdGhh
dCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCi0JICogdGhhdCB1c2Ugdm9p
ZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgotCSAqIGJlY2F1
c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KLQkg
KiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZl
cnNpb25zCi0JICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0JICovCi0JcmV0dXJu
ICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOwotfQotCi12b2lkIHBwZnJl
ZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKLXsKLQlmcmVlKCAoY2hhciAqKSBw
dHIgKTsJLyogc2VlIHBwcmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCi19Ci0KLSNkZWZp
bmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCi0KLW5hbWVzcGFjZSBwcCB7Ci0KLVRva2VuaXpl
cjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCi17Ci0g
ICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGljczsKLX0KLQotVG9rZW5pemVyOjp+
VG9rZW5pemVyKCkKLXsKLSAgICBkZXN0cm95U2Nhbm5lcigpOwotfQotCi1ib29sIFRva2VuaXpl
cjo6aW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQg
bGVuZ3RoW10pCi17Ci0gICAgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGZhbHNlOwotICAgIGlmICgo
Y291bnQgPiAwKSAmJiAoc3RyaW5nID09IDApKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBtQ29udGV4
dC5pbnB1dCA9IElucHV0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGluaXRT
Y2FubmVyKCk7Ci19Ci0KLXZvaWQgVG9rZW5pemVyOjpzZXRGaWxlTnVtYmVyKGludCBmaWxlKQot
ewotICAgIC8vIFdlIHVzZSBjb2x1bW4gbnVtYmVyIGFzIGZpbGUgbnVtYmVyLgotICAgIC8vIFNl
ZSBtYWNybyB5eWZpbGVuby4KLSAgICBwcHNldF9jb2x1bW4oZmlsZSxtSGFuZGxlKTsKLX0KLQot
dm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCi17Ci0gICAgcHBzZXRfbGlu
ZW5vKGxpbmUsbUhhbmRsZSk7Ci19Ci0KLXZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2Vu
KQotewotICAgIHRva2VuLT50eXBlID0gcHBsZXgoJnRva2VuLT52YWx1ZSwmdG9rZW4tPmxvY2F0
aW9uLG1IYW5kbGUpOwotICAgIHRva2VuLT5mbGFncyA9IDA7Ci0KLSAgICB0b2tlbi0+c2V0QXRT
dGFydE9mTGluZShtQ29udGV4dC5saW5lU3RhcnQpOwotICAgIG1Db250ZXh0LmxpbmVTdGFydCA9
IHRva2VuLT50eXBlID09ICdcbic7Ci0KLSAgICB0b2tlbi0+c2V0SGFzTGVhZGluZ1NwYWNlKG1D
b250ZXh0LmxlYWRpbmdTcGFjZSk7Ci0gICAgbUNvbnRleHQubGVhZGluZ1NwYWNlID0gZmFsc2U7
Ci19Ci0KLWJvb2wgVG9rZW5pemVyOjppbml0U2Nhbm5lcigpCi17Ci0gICAgaWYgKChtSGFuZGxl
ID09IE5VTEwpICYmIHBwbGV4X2luaXRfZXh0cmEoJm1Db250ZXh0LCZtSGFuZGxlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHByZXN0YXJ0KDAsbUhhbmRsZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgVG9rZW5pemVyOjpkZXN0cm95U2Nhbm5lcigpCi17Ci0gICAgaWYg
KG1IYW5kbGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHBsZXhfZGVzdHJveSht
SGFuZGxlKTsKLSAgICBtSGFuZGxlID0gTlVMTDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBwCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGI2NGEyODguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9QUkVQUk9DRVNT
T1JfVE9LRU5JWkVSX0hfCi0jZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9UT0tFTklaRVJf
SF8KLQotI2luY2x1ZGUgIklucHV0LmgiCi0jaW5jbHVkZSAiTGV4ZXIuaCIKLSNpbmNsdWRlICJw
cF91dGlscy5oIgotCi1uYW1lc3BhY2UgcHAKLXsKLQotY2xhc3MgRGlhZ25vc3RpY3M7Ci0KLWNs
YXNzIFRva2VuaXplciA6IHB1YmxpYyBMZXhlcgotewotICBwdWJsaWM6Ci0gICAgc3RydWN0IENv
bnRleHQKLSAgICB7Ci0gICAgICAgIERpYWdub3N0aWNzKiBkaWFnbm9zdGljczsKLQotICAgICAg
ICBJbnB1dCBpbnB1dDsKLSAgICAgICAgLy8gVGhlIGxvY2F0aW9uIHdoZXJlIHl5dGV4dCBwb2lu
dHMgdG8uIFRva2VuIGxvY2F0aW9uIHNob3VsZCB0cmFjawotICAgICAgICAvLyBzY2FuTG9jIGlu
c3RlYWQgb2YgSW5wdXQ6Om1SZWFkTG9jIGJlY2F1c2UgdGhleSBtYXkgbm90IGJlIHRoZSBzYW1l
Ci0gICAgICAgIC8vIGlmIHRleHQgaXMgYnVmZmVyZWQgdXAgaW4gdGhlIHNjYW5uZXIgaW5wdXQg
YnVmZmVyLgotICAgICAgICBJbnB1dDo6TG9jYXRpb24gc2NhbkxvYzsKLQotICAgICAgICBib29s
IGxlYWRpbmdTcGFjZTsKLSAgICAgICAgYm9vbCBsaW5lU3RhcnQ7Ci0gICAgfTsKLQotICAgIFRv
a2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpOwotICAgIH5Ub2tlbml6ZXIoKTsKLQot
ICAgIGJvb2wgaW5pdChpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25z
dCBpbnQgbGVuZ3RoW10pOwotCi0gICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKLSAg
ICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOwotCi0gICAgdmlydHVhbCB2b2lkIGxleChU
b2tlbiogdG9rZW4pOwotCi0gIHByaXZhdGU6Ci0gICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRva2VuaXplcik7Ci0gICAgYm9vbCBpbml0U2Nhbm5lcigpOwotICAgIHZvaWQgZGVzdHJv
eVNjYW5uZXIoKTsKLQotICAgIHZvaWQqIG1IYW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KLSAg
ICBDb250ZXh0IG1Db250ZXh0OyAgLy8gU2Nhbm5lciBleHRyYS4KLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSBwcAotI2VuZGlmICAvLyBDT01QSUxFUl9QUkVQUk9DRVNTT1JfVE9LRU5JWkVSX0hfCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5sIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQwMWM3MzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvVG9rZW5pemVyLmwKKysrIC9kZXYvbnVsbApAQCAt
MSwzMjkgKzAsMCBAQAotLyoKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLVRoaXMgZmlsZSBjb250YWlu
cyB0aGUgTGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMgcHJlcHJvY2Vzc29yLgotQmFzZWQg
b24gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxMCBQcmVwcm9jZXNzb3IgR3JhbW1hcjoKLWh0
dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yc2N4eXM4OS5hc3B4Ci0KLUlG
IFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNl
ci5zaC4KLSovCi0KLSV0b3B7Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVGhpcyBmaWxlIGlzIGF1dG8t
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCi19Ci0KLSV7Ci0j
aW5jbHVkZSAiVG9rZW5pemVyLmgiCi0KLSNpbmNsdWRlICJEaWFnbm9zdGljcy5oIgotI2luY2x1
ZGUgIlRva2VuLmgiCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotLy8gVHJpZ2dlcmVkIGJ5IHRo
ZSBhdXRvLWdlbmVyYXRlZCB5eV9mYXRhbF9lcnJvciBmdW5jdGlvbi4KLSNwcmFnbWEgR0NDIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgotI2VuZGlmCi0KLXR5cGVkZWYg
c3RkOjpzdHJpbmcgWVlTVFlQRTsKLXR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7
Ci0KLS8vIFVzZSB0aGUgdW51c2VkIHl5Y29sdW1uIHZhcmlhYmxlIHRvIHRyYWNrIGZpbGUgKHN0
cmluZykgbnVtYmVyLgotI2RlZmluZSB5eWZpbGVubyB5eWNvbHVtbgotCi0jZGVmaW5lIFlZX1VT
RVJfSU5JVCAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIHl5ZmlsZW5vID0gMDsgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIHl5bGluZW5vID0gMTsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5ZXh0cmEt
PmxlYWRpbmdTcGFjZSA9IGZhbHNlOyBcCi0gICAgICAgIHl5ZXh0cmEtPmxpbmVTdGFydCA9IHRy
dWU7ICAgICBcCi0gICAgfSB3aGlsZSgwKTsKLQotI2RlZmluZSBZWV9VU0VSX0FDVElPTiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0cmEtPmlucHV0
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBwOjpJbnB1dDo6TG9jYXRpb24q
IHNjYW5Mb2MgPSAmeXlleHRyYS0+c2NhbkxvYzsgICAgICAgICAgIFwKLSAgICAgICAgd2hpbGUg
KChzY2FuTG9jLT5zSW5kZXggPCBpbnB1dC0+Y291bnQoKSkgJiYgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgKHNjYW5Mb2MtPmNJbmRleCA+PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2Mt
PnNJbmRleCkpKSBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHNjYW5Mb2MtPmNJbmRleCAt
PSBpbnB1dC0+bGVuZ3RoKHNjYW5Mb2MtPnNJbmRleCsrKTsgICAgXAotICAgICAgICAgICAgKyt5
eWZpbGVubzsgeXlsaW5lbm8gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgeXlsbG9jLT5maWxlID0geXlmaWxlbm87ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5eWxsb2MtPmxpbmUgPSB5eWxpbmVu
bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHNjYW5Mb2Mt
PmNJbmRleCArPSB5eWxlbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9IHdoaWxlKDApOwotCi0jZGVmaW5lIFlZX0lOUFVUKGJ1ZiwgcmVzdWx0LCBtYXhTaXplKSBc
Ci0gICAgcmVzdWx0ID0geXlleHRyYS0+aW5wdXQucmVhZChidWYsIG1heFNpemUpOwotCi0lfQot
Ci0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKLSVvcHRpb24gcmVl
bnRyYW50IGJpc29uLWJyaWRnZSBiaXNvbi1sb2NhdGlvbnMKLSVvcHRpb24gcHJlZml4PSJwcCIK
LSVvcHRpb24gZXh0cmEtdHlwZT0icHA6OlRva2VuaXplcjo6Q29udGV4dCoiCi0leCBDT01NRU5U
Ci0KLU5FV0xJTkUgICAgIFxufFxyfFxyXG4KLUlERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1a
MC05XSoKLVBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCi0KLURFQ0lNQUxf
Q09OU1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoK
LUhFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKwotCi1ESUdJVCAgICAgICAg
ICAgICAgICBbMC05XQotRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKLUZS
QUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCi0K
LSUlCi0KLSAgICAvKiBMaW5lIGNvbW1lbnQgKi8KLSIvLyJbXlxyXG5dKgotCi0gICAgLyogQmxv
Y2sgY29tbWVudCAqLwotICAgIC8qIExpbmUgYnJlYWtzIGFyZSBqdXN0IGNvdW50ZWQgLSBub3Qg
cmV0dXJuZWQuICovCi0gICAgLyogVGhlIGNvbW1lbnQgaXMgcmVwbGFjZWQgYnkgYSBzaW5nbGUg
c3BhY2UuICovIAotIi8qIiB7IEJFR0lOKENPTU1FTlQpOyB9Ci08Q09NTUVOVD5bXipcclxuXSsK
LTxDT01NRU5UPiIqIgotPENPTU1FTlQ+e05FV0xJTkV9IHsgKyt5eWxpbmVubzsgfQotPENPTU1F
TlQ+IiovIiB7Ci0gICAgeXlleHRyYS0+bGVhZGluZ1NwYWNlID0gdHJ1ZTsKLSAgICBCRUdJTihJ
TklUSUFMKTsKLX0KLQotIyB7Ci0gICAgLy8gIyBpcyBvbmx5IHZhbGlkIGF0IHN0YXJ0IG9mIGxp
bmUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgotICAgIHl5bHZhbC0+YXNzaWduKDEsIHl5
dGV4dFswXSk7Ci0gICAgcmV0dXJuIHl5ZXh0cmEtPmxpbmVTdGFydCA/IHBwOjpUb2tlbjo6UFBf
SEFTSCA6IHBwOjpUb2tlbjo6UFBfT1RIRVI7Ci19Ci0KLXtJREVOVElGSUVSfSB7Ci0gICAgeXls
dmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46OklERU5U
SUZJRVI7Ci19Ci0KLXtERUNJTUFMX0NPTlNUQU5UfXx7T0NUQUxfQ09OU1RBTlR9fHtIRVhBREVD
SU1BTF9DT05TVEFOVH0gewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAg
ICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7Ci19Ci0KLSh7RElHSVR9K3tFWFBPTkVOVF9Q
QVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKLSAgICB5eWx2
YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1Rf
RkxPQVQ7Ci19Ci0KLSAgICAvKiBBbnl0aGluZyB0aGF0IHN0YXJ0cyB3aXRoIGEge0RJR0lUfSBv
ciAue0RJR0lUfSBtdXN0IGJlIGEgbnVtYmVyLiAqLwotICAgIC8qIFJ1bGUgdG8gY2F0Y2ggYWxs
IGludmFsaWQgaW50ZWdlcnMgYW5kIGZsb2F0cy4gKi8KLSh7RElHSVR9K1tfYS16QS1aMC05Ll0q
KXwoIi4ie0RJR0lUfStbX2EtekEtWjAtOS5dKikgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4
dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpQUF9OVU1CRVI7Ci19Ci0KLSIrKyIg
ewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRv
a2VuOjpPUF9JTkM7Ci19Ci0iLS0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVu
Zyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfREVDOwotfQotIjw8IiB7Ci0gICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlQ7
Ci19Ci0iPj4iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0
dXJuIHBwOjpUb2tlbjo6T1BfUklHSFQ7Ci19Ci0iPD0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5
eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTEU7Ci19Ci0iPj0iIHsK
LSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tl
bjo6T1BfR0U7Ci19Ci0iPT0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfRVE7Ci19Ci0iIT0iIHsKLSAgICB5eWx2YWwtPmFz
c2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1BfTkU7Ci19Ci0i
JiYiIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBw
OjpUb2tlbjo6T1BfQU5EOwotfQotIl5eIiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5
eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1hPUjsKLX0KLSJ8fCIgewotICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9P
UjsKLX0KLSIrPSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICBy
ZXR1cm4gcHA6OlRva2VuOjpPUF9BRERfQVNTSUdOOwotfQotIi09IiB7Ci0gICAgeXlsdmFsLT5h
c3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX1NVQl9BU1NJ
R047Ci19Ci0iKj0iIHsKLSAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAg
cmV0dXJuIHBwOjpUb2tlbjo6T1BfTVVMX0FTU0lHTjsKLX0KLSIvPSIgewotICAgIHl5bHZhbC0+
YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9ESVZfQVNT
SUdOOwotfQotIiU9IiB7Ci0gICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAg
IHJldHVybiBwcDo6VG9rZW46Ok9QX01PRF9BU1NJR047Ci19Ci0iPDw9IiB7Ci0gICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9QX0xFRlRf
QVNTSUdOOwotfQotIj4+PSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsK
LSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9SSUdIVF9BU1NJR047Ci19Ci0iJj0iIHsKLSAgICB5
eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7Ci0gICAgcmV0dXJuIHBwOjpUb2tlbjo6T1Bf
QU5EX0FTU0lHTjsKLX0KLSJePSIgewotICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5n
KTsKLSAgICByZXR1cm4gcHA6OlRva2VuOjpPUF9YT1JfQVNTSUdOOwotfQotInw9IiB7Ci0gICAg
eXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwotICAgIHJldHVybiBwcDo6VG9rZW46Ok9Q
X09SX0FTU0lHTjsKLX0KLQote1BVTkNUVUFUT1J9IHsKLSAgICB5eWx2YWwtPmFzc2lnbigxLCB5
eXRleHRbMF0pOwotICAgIHJldHVybiB5eXRleHRbMF07Ci19Ci0KLVsgXHRcdlxmXSsgICB7IHl5
ZXh0cmEtPmxlYWRpbmdTcGFjZSA9IHRydWU7IH0KLQote05FV0xJTkV9IHsKLSAgICArK3l5bGlu
ZW5vOwotICAgIHl5bHZhbC0+YXNzaWduKDEsICdcbicpOwotICAgIHJldHVybiAnXG4nOwotfQot
Ci0uIHsKLSAgICB5eWx2YWwtPmFzc2lnbigxLCB5eXRleHRbMF0pOwotICAgIHJldHVybiBwcDo6
VG9rZW46OlBQX09USEVSOwotfQotCi08Kj48PEVPRj4+IHsKLSAgICAvLyBZWV9VU0VSX0FDVElP
TiBpcyBub3QgaW52b2tlZCBmb3IgaGFuZGxpbmcgRU9GLgotICAgIC8vIFNldCB0aGUgbG9jYXRp
b24gZm9yIEVPRiB0b2tlbiBtYW51YWxseS4KLSAgICBwcDo6SW5wdXQqIGlucHV0ID0gJnl5ZXh0
cmEtPmlucHV0OwotICAgIHBwOjpJbnB1dDo6TG9jYXRpb24qIHNjYW5Mb2MgPSAmeXlleHRyYS0+
c2NhbkxvYzsKLSAgICBpbnQgc0luZGV4TWF4ID0gc3RkOjptYXgoMCwgaW5wdXQtPmNvdW50KCkg
LSAxKTsKLSAgICBpZiAoc2NhbkxvYy0+c0luZGV4ICE9IHNJbmRleE1heCkKLSAgICB7Ci0gICAg
ICAgIC8vIFdlIGNhbiBvbmx5IHJlYWNoIGhlcmUgaWYgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3Mg
YXQgdGhlCi0gICAgICAgIC8vIGVuZCBvZiB0aGUgaW5wdXQuCi0gICAgICAgIHNjYW5Mb2MtPnNJ
bmRleCA9IHNJbmRleE1heDsgc2NhbkxvYy0+Y0luZGV4ID0gMDsKLSAgICAgICAgeXlmaWxlbm8g
PSBzSW5kZXhNYXg7IHl5bGluZW5vID0gMTsKLSAgICB9Ci0gICAgeXlsbG9jLT5maWxlID0geXlm
aWxlbm87Ci0gICAgeXlsbG9jLT5saW5lID0geXlsaW5lbm87Ci0gICAgeXlsdmFsLT5jbGVhcigp
OwotCi0gICAgaWYgKFlZX1NUQVJUID09IENPTU1FTlQpCi0gICAgewotICAgICAgICB5eWV4dHJh
LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RU9GX0lOX0NPTU1FTlQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5
ZmlsZW5vLCB5eWxpbmVubyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiIpOwotICAgIH0KLSAgICB5eXRlcm1pbmF0ZSgpOwotfQotCi0lJQotCi1uYW1lc3BhY2UgcHAg
ewotCi1Ub2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhh
bmRsZSgwKQotewotICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7Ci19Ci0K
LVRva2VuaXplcjo6flRva2VuaXplcigpCi17Ci0gICAgZGVzdHJveVNjYW5uZXIoKTsKLX0KLQot
Ym9vbCBUb2tlbml6ZXI6OmluaXQoaW50IGNvdW50LCBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdb
XSwgY29uc3QgaW50IGxlbmd0aFtdKQotewotICAgIGlmIChjb3VudCA8IDApIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoKGNvdW50ID4gMCkgJiYgKHN0cmluZyA9PSAwKSkgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbUNvbnRleHQuaW5wdXQgPSBJbnB1dChjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwotICAg
IHJldHVybiBpbml0U2Nhbm5lcigpOwotfQotCi12b2lkIFRva2VuaXplcjo6c2V0RmlsZU51bWJl
cihpbnQgZmlsZSkKLXsKLSAgICAvLyBXZSB1c2UgY29sdW1uIG51bWJlciBhcyBmaWxlIG51bWJl
ci4KLSAgICAvLyBTZWUgbWFjcm8geXlmaWxlbm8uCi0gICAgeXlzZXRfY29sdW1uKGZpbGUsIG1I
YW5kbGUpOwotfQotCi12b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKLXsK
LSAgICB5eXNldF9saW5lbm8obGluZSwgbUhhbmRsZSk7Ci19Ci0KLXZvaWQgVG9rZW5pemVyOjps
ZXgoVG9rZW4qIHRva2VuKQotewotICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRva2VuLT52YWx1
ZSwgJnRva2VuLT5sb2NhdGlvbiwgbUhhbmRsZSk7Ci0gICAgdG9rZW4tPmZsYWdzID0gMDsKLQot
ICAgIHRva2VuLT5zZXRBdFN0YXJ0T2ZMaW5lKG1Db250ZXh0LmxpbmVTdGFydCk7Ci0gICAgbUNv
bnRleHQubGluZVN0YXJ0ID0gdG9rZW4tPnR5cGUgPT0gJ1xuJzsKLQotICAgIHRva2VuLT5zZXRI
YXNMZWFkaW5nU3BhY2UobUNvbnRleHQubGVhZGluZ1NwYWNlKTsKLSAgICBtQ29udGV4dC5sZWFk
aW5nU3BhY2UgPSBmYWxzZTsKLX0KLQotYm9vbCBUb2tlbml6ZXI6OmluaXRTY2FubmVyKCkKLXsK
LSAgICBpZiAoKG1IYW5kbGUgPT0gTlVMTCkgJiYgeXlsZXhfaW5pdF9leHRyYSgmbUNvbnRleHQs
ICZtSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgeXlyZXN0YXJ0KDAsIG1I
YW5kbGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRva2VuaXplcjo6ZGVzdHJveVNj
YW5uZXIoKQotewotICAgIGlmIChtSGFuZGxlID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHl5bGV4X2Rlc3Ryb3kobUhhbmRsZSk7Ci0gICAgbUhhbmRsZSA9IE5VTEw7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBwcAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9wYXJzZXIuc2ggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9nZW5lcmF0ZV9w
YXJzZXIuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGU5YzcwYjEuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
ZXcvZ2VuZXJhdGVfcGFyc2VyLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyEv
YmluL2Jhc2gKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLQotIyBHZW5lcmF0ZXMgdmFyaW91cyBjb21wb25lbnRzIG9mIEdMU0wgRVMg
cHJlcHJvY2Vzc29yLgotCi1ydW5fZmxleCgpCi17Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQx
Ci1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQyCi1mbGV4IC0tbm9saW5lIC0tbm91bmlzdGQg
LS1vdXRmaWxlPSRvdXRwdXRfc291cmNlICRpbnB1dF9maWxlCi19Ci0KLXJ1bl9iaXNvbigpCi17
Ci1pbnB1dF9maWxlPSRzY3JpcHRfZGlyLyQxCi1vdXRwdXRfc291cmNlPSRzY3JpcHRfZGlyLyQy
Ci1iaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tb3V0cHV0PSRvdXRwdXRfc291
cmNlICRpbnB1dF9maWxlCi19Ci0KLXNjcmlwdF9kaXI9JChkaXJuYW1lICQwKQotCi0jIEdlbmVy
YXRlIHByZXByb2Nlc3NvcgotcnVuX2ZsZXggVG9rZW5pemVyLmwgVG9rZW5pemVyLmNwcAotcnVu
X2Jpc29uIEV4cHJlc3Npb25QYXJzZXIueSBFeHByZXNzaW9uUGFyc2VyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
bmV3X2ZpbGUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9uZXcvbmV3X2ZpbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
YWE1ZmQ4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLSAgICBTb21lIG5ldyBjb2RlIHRoYXQgdXNlcyB0YWJzClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvbmV3X2ZpbGUyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L25ld19maWxlMi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQwZTE2ZGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvbmV3X2ZpbGUyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXNvbWUgb3RoZXIgZmlsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvcHBfdXRp
bHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bmV3L3BwX3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MTY0ZWEuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvcHBfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBwcF91dGlscy5oOiBDb21tb24gcHJlcHJvY2Vzc29yIHV0aWxpdGllcwot
Ci0jaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCi0jZGVmaW5lIENPTVBJ
TEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCi0KLS8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhl
IGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKLS8vIFRoaXMgbXVzdCBi
ZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MuCi0jZGVmaW5l
IFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgXAotICBUeXBlTmFtZShjb25z
dCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgIFwKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlw
ZU5hbWUmKQotCi0jZW5kaWYgLy8gQ09NUElMRVJfUFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbmV3L3ByZXByb2Nlc3Nvci52Y3Byb2ogYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcmVwcm9jZXNzb3IudmNwcm9qCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNmE5NzU5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L3ByZXByb2Nlc3Nvci52Y3By
b2oKKysrIC9kZXYvbnVsbApAQCAtMSwzOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0iV2luZG93cy0xMjUyIj8+Ci08VmlzdWFsU3R1ZGlvUHJvamVjdAotCVByb2plY3RU
eXBlPSJWaXN1YWwgQysrIgotCVZlcnNpb249IjkuMDAiCi0JTmFtZT0icHJlcHJvY2Vzc29yIgot
CVByb2plY3RHVUlEPSJ7RkJFMzJERjMtMEZCMC00RjJGLUE0MjQtMkMyMUJEN0JDMzI1fSIKLQlS
b290TmFtZXNwYWNlPSJwcmVwcm9jZXNzb3IiCi0JS2V5d29yZD0iV2luMzJQcm9qIgotCVRhcmdl
dEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyIKLQk+Ci0JPFBsYXRmb3Jtcz4KLQkJPFBsYXRmb3Jt
Ci0JCQlOYW1lPSJXaW4zMiIKLQkJLz4KLQkJPFBsYXRmb3JtCi0JCQlOYW1lPSJ4NjQiCi0JCS8+
Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8L1Rvb2xGaWxlcz4KLQk8Q29uZmlndXJh
dGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1
dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVy
bWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9u
VHlwZT0iNCIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9t
QnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9y
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJh
dG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0i
MCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUIiCi0JCQkJ
TWluaW1hbFJlYnVpbGQ9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgotCQkJCVJ1
bnRpbWVMaWJyYXJ5PSIxIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5p
bmdMZXZlbD0iNCIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9u
Rm9ybWF0PSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0
NzAyIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxl
clRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01h
a2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0J
CTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0
b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRl
RGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0
IgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgot
CQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9u
cz0idHJ1ZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19MSUIi
Ci0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9
InRydWUiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0
IgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMi
Ci0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MjQ0IgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNMaWJyYXJpYW5Ub29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlu
a1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVp
bGRFdmVudFRvb2wiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9u
Ci0JCQlOYW1lPSJEZWJ1Z3x4NjQiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIp
JChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGly
ZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1
cmF0aW9uVHlwZT0iNCIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
Q3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2Vu
ZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5
R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wiCi0J
CQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz0iV0lOMzI7X0RFQlVHO19MSUIiCi0JCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCi0J
CQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgotCQkJCVVz
ZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlXYXJuQXNF
cnJvcj0idHJ1ZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCURpc2FibGVT
cGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDI0NDs0MjY3OzQ3MDIiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ0xpYnJhcmlhblRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2
ZW50VG9vbCIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJ
CU5hbWU9IlJlbGVhc2V8eDY0IgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQo
UGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVj
dG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJh
dGlvblR5cGU9IjQiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6
YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6
YXRpb249IjIiCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgotCQkJCVByZXBy
b2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0xJQiIKLQkJCQlSdW50aW1lTGlicmFy
eT0iMCIKLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKLQkJCQlVc2VQcmVj
b21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJV2FybkFzRXJyb3I9
InRydWUiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlEaXNhYmxlU3BlY2lm
aWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQyNDQ7NDI2NyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlicmFy
aWFuVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29w
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgot
CQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCTwvQ29uZmlndXJhdGlvbnM+Ci0JPFJlZmVyZW5j
ZXM+Ci0JPC9SZWZlcmVuY2VzPgotCTxGaWxlcz4KLQkJPEZpbHRlcgotCQkJTmFtZT0iU291cmNl
IEZpbGVzIgotCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207
YXNteCIKLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMy
RDc1MkEyRkZ9IgotCQkJPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlhZ25vc3Rp
Y3MuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
XERpcmVjdGl2ZUhhbmRsZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXERpcmVjdGl2ZVBhcnNlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRXhwcmVzc2lvblBhcnNlci5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5wdXQuY3BwIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXExleGVyLmNw
cCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxNYWNy
by5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
TWFjcm9FeHBhbmRlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cUHJlcHJvY2Vzc29yLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW5pemVyLmNwcCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCTwvRmlsdGVyPgotCQk8RmlsdGVyCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiCi0JCQlG
aWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCIKLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5
Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9IgotCQkJPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRGlhZ25vc3RpY3MuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxEaXJlY3RpdmVIYW5kbGVyLmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRGlyZWN0aXZlUGFyc2VyLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRXhwcmVz
c2lvblBhcnNlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXElucHV0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cTGV4ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLlxNYWNyby5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXE1hY3JvRXhwYW5kZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxwcF91dGlscy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFByZXByb2Nlc3Nvci5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFNvdXJjZUxvY2F0aW9uLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVG9rZW4uaCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxUb2tlbml6
ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCTwvRmlsdGVyPgotCTwvRmlsZXM+Ci0JPEdsb2Jh
bHM+Ci0JPC9HbG9iYWxzPgotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xl
eC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9u
dW1lcmljX2xleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDEyNWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL251bWVyaWNfbGV4LmgKQEAgLTAsMCArMSw2MSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKy8vIG51bWVyaWNfbGV4Lmg6IEZ1bmN0aW9ucyB0byBleHRyYWN0IG51bWVyaWMgdmFsdWVz
IGZyb20gc3RyaW5nLgorCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NPUl9OVU1FUklDX0xF
WF9IXworI2RlZmluZSBDT01QSUxFUl9QUkVQUk9DRVNTT1JfTlVNRVJJQ19MRVhfSF8KKworI2lu
Y2x1ZGUgPHNzdHJlYW0+CisKK25hbWVzcGFjZSBwcCB7CisKK2lubGluZSBzdGQ6Omlvczo6Zm10
ZmxhZ3MgbnVtZXJpY19iYXNlX2ludChjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQoreworICAgIGlm
ICgoc3RyLnNpemUoKSA+PSAyKSAmJgorICAgICAgICAoc3RyWzBdID09ICcwJykgJiYKKyAgICAg
ICAgKHN0clsxXSA9PSAneCcgfHwgc3RyWzFdID09ICdYJykpCisgICAgeworICAgICAgICByZXR1
cm4gc3RkOjppb3M6OmhleDsKKyAgICB9CisgICAgZWxzZSBpZiAoKHN0ci5zaXplKCkgPj0gMSkg
JiYgKHN0clswXSA9PSAnMCcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW9zOjpvY3Q7
CisgICAgfQorICAgIHJldHVybiBzdGQ6Omlvczo6ZGVjOworfQorCisvLyBUaGUgZm9sbG93aW5n
IGZ1bmN0aW9ucyBwYXJzZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIGV4dHJhY3QgYSBudW1lcmljYWwK
Ky8vIHZhbHVlIG9mIHRoZSBnaXZlbiB0eXBlLiBUaGVzZSBmdW5jdGlvbnMgYXNzdW1lIHRoYXQg
dGhlIHN0cmluZyBpcworLy8gb2YgdGhlIGNvcnJlY3QgZm9ybS4gVGhleSBjYW4gb25seSBmYWls
IGlmIHRoZSBwYXJzZWQgdmFsdWUgaXMgdG9vIGJpZywKKy8vIGluIHdoaWNoIGNhc2UgZmFsc2Ug
aXMgcmV0dXJuZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+Citib29sIG51bWVyaWNf
bGV4X2ludChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBJbnRUeXBlKiB2YWx1ZSkKK3sKKyAgICBz
dGQ6OmlzdHJpbmdzdHJlYW0gc3RyZWFtKHN0cik7CisgICAgLy8gVGhpcyBzaG91bGQgbm90IGJl
IG5lY2Vzc2FyeSwgYnV0IE1TVlMgaGFzIGEgYnVnZ3kgaW1wbGVtZW50YXRpb24uCisgICAgLy8g
SXQgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBpZiB0aGUgYmFzZSBpcyBub3Qgc3BlY2lmaWVk
LgorICAgIHN0cmVhbS5zZXRmKG51bWVyaWNfYmFzZV9pbnQoc3RyKSwgc3RkOjppb3M6OmJhc2Vm
aWVsZCk7CisKKyAgICBzdHJlYW0gPj4gKCp2YWx1ZSk7CisgICAgcmV0dXJuICFzdHJlYW0uZmFp
bCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Citib29sIG51bWVyaWNfbGV4
X2Zsb2F0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIEZsb2F0VHlwZSogdmFsdWUpCit7CisgICAg
c3RkOjppc3RyaW5nc3RyZWFtIHN0cmVhbShzdHIpOworICAgIC8vIEZvcmNlICJDIiBsb2NhbGUg
c28gdGhhdCBkZWNpbWFsIGNoYXJhY3RlciBpcyBhbHdheXMgJy4nLCBhbmQKKyAgICAvLyBub3Qg
ZGVwZW5kZW50IG9uIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICBzdHJlYW0uaW1idWUoc3RkOjps
b2NhbGU6OmNsYXNzaWMoKSk7CisKKyAgICBzdHJlYW0gPj4gKCp2YWx1ZSk7CisgICAgcmV0dXJu
ICFzdHJlYW0uZmFpbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBwcC4KKyNlbmRpZiAvLyBDT01Q
SUxFUl9QUkVQUk9DRVNTT1JfTlVNRVJJQ19MRVhfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjczNDJiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdo
dCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5W
SURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWlu
c3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElB
IHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91
IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3Rh
bGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBw
ZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0
cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJl
IiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJ
QSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQv
b3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBO
VklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2Yg
TlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1l
cnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1O
ZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBO
VklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5
IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHBy
ZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBi
dXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdl
ZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRo
ZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxp
Y2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklE
RUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhP
VVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlO
RlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklO
QVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBC
RSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFS
WSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8s
IExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwg
TU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUs
IEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0Us
IEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIEJJU09OX1BBUlNF
Ul9ICi0jIGRlZmluZSBCSVNPTl9QQVJTRVJfSAotCi0jaWZuZGVmIHl5c3R5cGVwcAotdHlwZWRl
ZiBzdHJ1Y3QgewotICAgIGludCAgICBzY19pbnQ7Ci0gICAgZmxvYXQgIHNjX2Z2YWw7Ci0gICAg
aW50ICAgIHNjX2lkZW50OwotCWNoYXIgICBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVfTEVO
KzFdOwotfSB5eXN0eXBlcHA7Ci0KLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCi0jZW5k
aWYKLSMgZGVmaW5lCUNQUF9BTkRfT1AJICAgICAgICAyNTcKLSMgZGVmaW5lCUNQUF9TVUJfQVNT
SUdOCSAgICAyNTkKLSMgZGVmaW5lCUNQUF9NT0RfQVNTSUdOCSAgICAyNjAKLSMgZGVmaW5lCUNQ
UF9BRERfQVNTSUdOCTI2MQotIyBkZWZpbmUJQ1BQX0RJVl9BU1NJR04JMjYyCi0jIGRlZmluZQlD
UFBfTVVMX0FTU0lHTgkyNjMKLSMgZGVmaW5lCUNQUF9FUV9PUAkgICAgICAgIDI2NAotIyBkZWZp
bmUgICAgQ1BQX1hPUl9PUCAgICAgICAgIDI2NSAKLSMgZGVmaW5lCUVSUk9SX1NZCSAgICAyNjYK
LSMgZGVmaW5lCUNQUF9GTE9BVENPTlNUQU5UCTI2NwotIyBkZWZpbmUJQ1BQX0dFX09QCSAgICAg
ICAgMjY4Ci0jIGRlZmluZQlDUFBfUklHSFRfT1AgICAgICAgIDI2OQotIyBkZWZpbmUJQ1BQX0lE
RU5USUZJRVIJICAgIDI3MAotIyBkZWZpbmUJQ1BQX0lOVENPTlNUQU5UCSAgICAyNzEKLSMgZGVm
aW5lCUNQUF9MRV9PUAkgICAgICAgIDI3MgotIyBkZWZpbmUJQ1BQX0xFRlRfT1AJICAgICAgICAy
NzMKLSMgZGVmaW5lCUNQUF9ERUNfT1AJMjc0Ci0jIGRlZmluZQlDUFBfTkVfT1AJICAgICAgICAy
NzUKLSMgZGVmaW5lCUNQUF9PUl9PUAkgICAgICAgIDI3NgotIyBkZWZpbmUJQ1BQX0lOQ19PUAkg
ICAgMjc3Ci0jIGRlZmluZQlDUFBfU1RSQ09OU1RBTlQJICAgIDI3OAotIyBkZWZpbmUJQ1BQX1RZ
UEVJREVOVElGSUVSCTI3OQotCi0jIGRlZmluZQlGSVJTVF9VU0VSX1RPS0VOX1NZCTI4OQotCi0j
IGRlZmluZQlDUFBfUklHSFRfQVNTSUdOCSAgICAyODAKLSMgZGVmaW5lCUNQUF9MRUZUX0FTU0lH
TgkgICAgMjgxCi0jIGRlZmluZQlDUFBfQU5EX0FTU0lHTgkyODIKLSMgZGVmaW5lCUNQUF9PUl9B
U1NJR04gIAkyODMKLSMgZGVmaW5lCUNQUF9YT1JfQVNTSUdOCTI4NAotIyBkZWZpbmUJQ1BQX0xF
RlRfQlJBQ0tFVAkyODUKLSMgZGVmaW5lCUNQUF9SSUdIVF9CUkFDS0VUCTI4NgotIyBkZWZpbmUJ
Q1BQX0xFRlRfQlJBQ0UJMjg3Ci0jIGRlZmluZQlDUFBfUklHSFRfQlJBQ0UJMjg4Ci0KLSNlbmRp
ZiAvKiBub3QgQklTT05fUEFSU0VSX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHBfdXRpbHMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE2NGVhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcF91dGls
cy5oCkBAIC0wLDAgKzEsMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBwcF91dGlscy5oOiBDb21t
b24gcHJlcHJvY2Vzc29yIHV0aWxpdGllcworCisjaWZuZGVmIENPTVBJTEVSX1BSRVBST0NFU1NP
Ul9QUFVUSUxTX0hfCisjZGVmaW5lIENPTVBJTEVSX1BSRVBST0NFU1NPUl9QUFVUSUxTX0hfCisK
Ky8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9y
PSBmdW5jdGlvbnMKKy8vIFRoaXMgbXVzdCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJh
dGlvbnMgZm9yIGEgY2xhc3MuCisjZGVmaW5lIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
eXBlTmFtZSkgXAorICBUeXBlTmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgIFwK
KyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQorCisjZW5kaWYgLy8gQ09NUElMRVJf
UFJFUFJPQ0VTU09SX1BQVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MDU2ZGEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
LWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1J
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
Ci1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1l
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAot
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
LVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotZXh0ZXJuIENQUFN0cnVjdCAqY3BwOwotaW50
IEluaXRDUFBTdHJ1Y3Qodm9pZCk7Ci1pbnQgSW5pdFNjYW5uZXIoQ1BQU3RydWN0ICpjcHApOwot
aW50IEluaXRBdG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUsIGludCBodHNpemUpOwotY2hhciog
R2V0U3RyaW5nT2ZBdG9tKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgYXRvbSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5u
ZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c2Nhbm5lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGU4NTNjLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
c2Nhbm5lci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjk4ICswLDAgQEAKLS8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJ
QSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4K
LWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywg
YW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRp
b24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhl
c2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2Ug
ZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQot
c29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUg
YnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklE
SUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBO
VklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUK
LSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0
cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9u
cywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSBy
ZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29w
eXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10
ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5W
SURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFy
a3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4
Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMg
b3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhl
cmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhh
dCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIg
d29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4g
Tm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FS
RSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQs
Ci1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBB
TE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZF
TlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5D
SURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVT
RSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUK
LU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZ
IE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklM
SVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwot
Ly8gc2Nhbm5lci5jCi0vLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkYXJn
Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLQotI2lmIDAKLSAgICAjaW5jbHVkZSA8aWVlZWZwLmg+Ci0jZWxzZQotICAgICNk
ZWZpbmUgaXNpbmZmKHgpICgoKCooaW50ICopJih4KSAmIDB4N2Y4MDAwMDBMKT09MHg3ZjgwMDAw
MEwpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgKCgqKGludCAqKSYoeCkgJiAweDAwN2Zm
ZmZmTCk9PTAwMDAwMDAwMDBMKSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3NsZ2xvYmFscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKLQotdHlwZWRl
ZiBzdHJ1Y3QgU3RyaW5nSW5wdXRTcmMgewotICAgIElucHV0U3JjIGJhc2U7Ci0gICAgY2hhciAq
cDsKLX0gU3RyaW5nSW5wdXRTcmM7Ci0KLXN0YXRpYyBpbnQgU2NhbkZyb21TdHJpbmcoY29uc3Qg
Y2hhciAqcyk7Ci0KLXN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAg
KiB5eWx2YWxwcCkKLXsKLSAgICByZXR1cm4gRU9GOwotfSAvLyBlb2Zfc2NhbgotCi1zdGF0aWMg
dm9pZCBub29wKElucHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkge30K
LQotc3RhdGljIElucHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3Nj
YW4sICZub29wLCAwLCAwIH07Ci0KLXN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5
c3R5cGVwcCAqIHl5bHZhbHBwKTsKLQotI2RlZmluZSBFT0xfU1kgJ1xuJwotCi0jaWYgZGVmaW5l
ZChfTVNDX1ZFUikKLSAgICAjZGVmaW5lIERCR19CUkVBS1BPSU5UKCkgX19hc20gaW50IDMKLSNl
bGlmIGRlZmluZWQoX01fQU1ENjQpCi0gICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIGFzc2Vy
dCghIkRiZ19CcmVha3BvaW50Iik7Ci0jZWxzZQotICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQo
KQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfTV9BTUQ2NCkK
LSAgICBfX2ludDY0IFJEVFNDICggdm9pZCApIHsKLQotICAgICAgICBfX2ludDY0IHY7Ci0gICAg
Ci0gICAgICAgIF9fYXNtIF9fZW1pdCAweDBmCi0gICAgICAgIF9fYXNtIF9fZW1pdCAweDMxCi0g
ICAgICAgIF9fYXNtIG1vdiBkd29yZCBwdHIgdiwgZWF4Ci0gICAgICAgIF9fYXNtIG1vdiBkd29y
ZCBwdHIgdis0LCBlZHgKLSAgICAKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotI2VuZGlmCi0K
LQotaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKQotewotICAgIC8vIEFkZCB2YXJpb3Vz
IGF0b21zIG5lZWRlZCBieSB0aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKLSAgICBpZiAoIUluaXRDUFAo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjcHAtPm1vc3RSZWNlbnRUb2tlbiA9IDA7Ci0g
ICAgY3BwLT50b2tlbkxvYyA9ICZjcHAtPmx0b2tlbkxvYzsKLQotICAgIGNwcC0+bHRva2VuTG9j
LmZpbGUgPSAwOwotICAgIGNwcC0+bHRva2VuTG9jLmxpbmUgPSAwOwotCi0gICAgY3BwLT5jdXJy
ZW50SW5wdXQgPSAmZW9mX2lucHV0c3JjOwotICAgIGNwcC0+cHJldmlvdXNfdG9rZW4gPSAnXG4n
OwotICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKLQotICAgIHJldHVybiAxOwotfSAv
LyBJbml0U2Nhbm5lcgotCi1pbnQgRnJlZVNjYW5uZXIodm9pZCkKLXsKLSAgICByZXR1cm4gKEZy
ZWVDUFAoKSk7Ci19Ci0KLWludCBJbml0U2Nhbm5lcklucHV0KENQUFN0cnVjdCAqY3BwLCBpbnQg
Y291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pCi17
Ci0gICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7
Ci0gICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gbGVu
Z3RoOwotICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8qCi0gKiBzdHJfZ2V0Y2goKQotICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20gbXVsdGlw
bGUgc3RyaW5ncy4KLSAqIHJldHVybnMgdGhlIG5leHQtY2hhciBmcm9tIHRoZSBpbnB1dCBzdHJl
YW0uCi0gKiByZXR1cm5zIEVPRiB3aGVuIHRoZSBjb21wbGV0ZSBzaGFkZXIgaXMgcGFyc2VkLgot
ICovCi1zdGF0aWMgaW50IHN0cl9nZXRjaChTdHJpbmdJbnB1dFNyYyAqaW4pCi17Ci0gICAgZm9y
KDs7KXsKLSAgICAgICBpZiAoKmluLT5wKXsKLSAgICAgICAgICBpZiAoKmluLT5wID09ICdcbicp
IHsKLSAgICAgICAgICAgICBpbi0+YmFzZS5saW5lKys7Ci0gICAgICAgICAgICAgSW5jTGluZU51
bWJlcigpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gKmluLT5wKys7Ci0gICAgICAg
fQotICAgICAgIGlmKCsrKGNwcC0+UGFXaGljaFN0cikgPCBjcHAtPlBhQXJnYyl7Ci0gICAgICAg
ICAgZnJlZShpbik7Ci0gICAgICAgICAgU2V0U3RyaW5nTnVtYmVyKGNwcC0+UGFXaGljaFN0cik7
Ci0gICAgICAgICAgU2V0TGluZU51bWJlcigxKTsKLSAgICAgICAgICBTY2FuRnJvbVN0cmluZyhj
cHAtPlBhQXJndltjcHAtPlBhV2hpY2hTdHJdKTsKLSAgICAgICAgICBpbj0oU3RyaW5nSW5wdXRT
cmMqKWNwcC0+Y3VycmVudElucHV0OwotICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAK
LSAgICAgICB9Ci0gICAgICAgZWxzZXsKLSAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGlu
LT5iYXNlLnByZXY7Ci0gICAgICAgICAgY3BwLT5QYVdoaWNoU3RyPTA7Ci0gICAgICAgICAgZnJl
ZShpbik7Ci0gICAgICAgICAgcmV0dXJuIEVPRjsKLSAgICAgICB9ICAKLSAgICB9Ci19IC8vIHN0
cl9nZXRjaAotCi1zdGF0aWMgdm9pZCBzdHJfdW5nZXRjaChTdHJpbmdJbnB1dFNyYyAqaW4sIGlu
dCBjaCwgeXlzdHlwZXBwICp0eXBlKSB7Ci0gICAgaWYgKGluLT5wWy0xXSA9PSBjaClpbi0+cC0t
OwotICAgIGVsc2UgewotICAgICAgICAqKGluLT5wKT0nXDAnOyAvL3RoaXMgd291bGQgdGFrZSBj
YXJlIG9mIHNoaWZ0aW5nIHRvIHRoZSBwcmV2aW91cyBzdHJpbmcuCi0gICAgICAgIGNwcC0+UGFX
aGljaFN0ci0tOwotICAgIH0gIAotICAgIGlmIChjaCA9PSAnXG4nKSB7Ci0gICAgICAgIGluLT5i
YXNlLmxpbmUtLTsKLSAgICAgICAgRGVjTGluZU51bWJlcigpOwotICAgIH0KLX0gLy8gc3RyX3Vu
Z2V0Y2gKLQotaW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgCi0gICAg
U3RyaW5nSW5wdXRTcmMgKmluID0gbWFsbG9jKHNpemVvZihTdHJpbmdJbnB1dFNyYykpOwotICAg
IG1lbXNldChpbiwgMCwgc2l6ZW9mKFN0cmluZ0lucHV0U3JjKSk7Ci0gICAgaW4tPnAgPSAoY2hh
ciopIHM7Ci0gICAgaW4tPmJhc2UubGluZSA9IDE7Ci0gICAgaW4tPmJhc2Uuc2NhbiA9IGJ5dGVf
c2NhbjsKLSAgICBpbi0+YmFzZS5nZXRjaCA9IChpbnQgKCopKElucHV0U3JjICosIHl5c3R5cGVw
cCAqKSlzdHJfZ2V0Y2g7Ci0gICAgaW4tPmJhc2UudW5nZXRjaCA9ICh2b2lkICgqKShJbnB1dFNy
YyAqLCBpbnQsIHl5c3R5cGVwcCAqKSlzdHJfdW5nZXRjaDsKLSAgICBpbi0+YmFzZS5wcmV2ID0g
Y3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7Ci0K
LSAgICByZXR1cm4gMTsKLX0gLy8gU2NhbkZyb21TdHJpbmc7Ci0KLQotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIEZsb2F0aW5nIHBvaW50IGNvbnN0YW50czogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jZGVmaW5l
IEFQUEVORF9DSEFSX1MoY2gsIHN0ciwgbGVuLCBtYXhfbGVuKSBcCi0gICAgICBpZiAobGVuIDwg
bWF4X2xlbikgeyBcCi0gICAgICAgICAgc3RyW2xlbisrXSA9IGNoOyBcCi0gICAgICB9IGVsc2Ug
aWYgKCFhbHJlYWR5Q29tcGxhaW5lZCkgeyBcCi0gICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
IkJVRkZFUiBPVkVSRkxPVyIpOyBcCi0gICAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAxOyBc
Ci0gICAgICB9Ci0KLS8qCi0gKiBsRmxvYXRDb25zdCgpIC0gU2NhbiBhIGZsb2F0aW5nIHBvaW50
IGNvbnN0YW50LiAgQXNzdW1lcyB0aGF0IHRoZSBzY2FubmVyCi0gKiAgICAgICAgIGhhcyBzZWVu
IGF0IGxlYXN0IG9uZSBkaWdpdCwgZm9sbG93ZWQgYnkgZWl0aGVyIGEgZGVjaW1hbCAnLicgb3Ig
dGhlCi0gKiAgICAgICAgIGxldHRlciAnZScuCi0gKiBjaCAtICcuJyBvciAnZScKLSAqIGxlbiAt
IGxlbmd0aCBvZiBzdHJpbmcgYWxyZWFkeSBjb3BpZWQgaW50byB5eWx2YWxwcC0+c3ltYm9sX25h
bWUuCi0gKi8KLQotc3RhdGljIGludCBsRmxvYXRDb25zdChpbnQgY2gsIGludCBsZW4sIHl5c3R5
cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCBhbHJlYWR5Q29tcGxhaW5lZCA9IDA7Ci0gICAg
YXNzZXJ0KChjaCA9PSAnLicpIHx8IChjaCA9PSAnZScpIHx8IChjaCA9PSAnRScpKTsKLQotICAg
IGlmIChjaCA9PSAnLicpIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgQVBQRU5EX0NIQVJf
UyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwot
ICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLSAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7
Ci0gICAgfQotCi0gICAgLy8gRXhwb25lbnQ6Ci0gICAgaWYgKGNoID09ICdlJyB8fCBjaCA9PSAn
RScpIHsKLSAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBs
ZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICBpZiAoY2ggPT0g
JysnKSB7Ci0gICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25h
bWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9
IGVsc2UgaWYgKGNoID09ICctJykgewotICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXls
dmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykgewot
ICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAg
ICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZ
TUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFWFBPTkVOVCBJTlZB
TElEIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0KLSAgICBhc3NlcnQobGVuIDw9IE1B
WF9TWU1CT0xfTkFNRV9MRU4pOwotICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1ww
JzsKLSAgICB5eWx2YWxwcC0+c2NfZnZhbCA9IChmbG9hdCkgYXRvZl9kb3QoeXlsdmFscHAtPnN5
bWJvbF9uYW1lKTsKLSAgICBpZiAoaXNpbmZmKHl5bHZhbHBwLT5zY19mdmFsKSkgewotICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiRkxPQVQgQ09OU1RBTlQgT1ZFUkZMT1ciKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIENQUF9GTE9BVENPTlNUQU5UOwotfSAvLyBsRmxvYXRDb25zdAotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8gTm9ybWFsIFNjYW5uZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0g
ICAgCi1zdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZh
bHBwKQotewotICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiArIDFdOwotICAgIGlu
dCBhbHJlYWR5Q29tcGxhaW5lZCA9IDA7Ci0gICAgaW50IGxlbiwgY2gsIGlpLCBpdmFsID0gMDsK
LQotICAgIGZvciAoOzspIHsKLSAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IDA7Ci0gICAgICAg
IGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7Ci0gCi0gICAgICAgIHdoaWxlIChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAn
XHInKSB7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gMTsKLSAgICAgICAgICAgIGNo
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNwcC0+bHRva2VuTG9jLmZpbGUgPSBjcHAt
PmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICAgICAgY3BwLT5sdG9rZW5Mb2MubGluZSA9IGNwcC0+
Y3VycmVudElucHV0LT5saW5lOwotICAgICAgICBhbHJlYWR5Q29tcGxhaW5lZCA9IDA7Ci0gICAg
ICAgIGxlbiA9IDA7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBjaDsgLy8gU2luZ2xlIGNoYXJhY3RlciB0b2tlbgotICAgICAgICBj
YXNlIEVPRjoKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgY2FzZSAnQSc6IGNhc2Ug
J0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgotICAgICAgICBjYXNlICdGJzogY2Fz
ZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6Ci0gICAgICAgIGNhc2UgJ0snOiBj
YXNlICdMJzogY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzoKLSAgICAgICAgY2FzZSAnUCc6
IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOgotICAgICAgICBjYXNlICdV
JzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzogY2FzZSAnWSc6Ci0gICAgICAgIGNhc2Ug
J1onOiBjYXNlICdfJzoKLSAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2Fz
ZSAnZCc6IGNhc2UgJ2UnOgotICAgICAgICBjYXNlICdmJzogY2FzZSAnZyc6IGNhc2UgJ2gnOiBj
YXNlICdpJzogY2FzZSAnaic6Ci0gICAgICAgIGNhc2UgJ2snOiBjYXNlICdsJzogY2FzZSAnbSc6
IGNhc2UgJ24nOiBjYXNlICdvJzoKLSAgICAgICAgY2FzZSAncCc6IGNhc2UgJ3EnOiBjYXNlICdy
JzogY2FzZSAncyc6IGNhc2UgJ3QnOgotICAgICAgICBjYXNlICd1JzogY2FzZSAndic6IGNhc2Ug
J3cnOiBjYXNlICd4JzogY2FzZSAneSc6Ci0gICAgICAgIGNhc2UgJ3onOiAgICAgICAgICAgIAot
ICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZh
bHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAgICAgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgfSB3aGlsZSAoKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKLSAgICAg
ICAgICAgICAgICAgICAgIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAotICAgICAgICAgICAg
ICAgICAgICAgY2ggPT0gJ18nKTsKLSAgICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJP
TF9OQU1FX0xFTik7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdc
MCc7Ci0gICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gQ1BQX0lERU5USUZJRVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSAnMCc6Ci0gICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25h
bWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsgIC8vIGhleGFkZWNpbWFsIGludGVnZXIg
Y29uc3RhbnRzCi0gICAgICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5
bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwotICAgICAgICAgICAgICAgIGNo
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgICAgICAgICAgaWYgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAotICAgICAg
ICAgICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgfHwKLSAgICAgICAgICAgICAg
ICAgICAgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaXZhbCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgoaXZhbCA8PSAweDBmZmZmZmZmKSAmJiAobGVuIDwgTUFY
X1NZTUJPTF9OQU1FX0xFTikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWxw
cC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWkgPSBjaCAtICcwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWkgPSBjaCAtICdBJyArIDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnYScgKyAx
MDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXZhbCA9IChpdmFsIDw8IDQpIHwgaWk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCFhbHJlYWR5Q29tcGxhaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCJIRVggQ09OU1RBTlQgT1ZFUkZMT1ciKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhbHJlYWR5Q29tcGxhaW5lZCA9IDE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAg
ICAgICB9IHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkhFWCBD
T05TVEFOVCBJTlZBTElEIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFz
c2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgeXlsdmFs
cHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAg
ICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOwotICAgICAgICAgICAgICAgIHJldHVy
biBDUFBfSU5UQ09OU1RBTlQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49ICcwJyAmJiBj
aCA8PSAnNycpIHsgLy8gb2N0YWwgaW50ZWdlciBjb25zdGFudHMKLSAgICAgICAgICAgICAgICBp
dmFsID0gMDsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgo
aXZhbCA8PSAweDFmZmZmZmZmKSAmJiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnMCc7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpdmFsID0gKGl2YWwgPDwgMykgfCBpaTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghYWxyZWFkeUNvbXBsYWluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCJPQ1QgQ09OU1RBTlQgT1ZFUkZMT1ciKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoID49ICcw
JyAmJiBjaCA8PSAnNycpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0g
J2UnIHx8IGNoID09ICdmJyB8fCBjaCA9PSAnaCcgfHwgY2ggPT0gJ3gnfHwgY2ggPT0gJ0UnKSAK
LSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdChjaCwgbGVuLCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVfTEVOKTsK
LSAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAg
ICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgY2ggPSAnMCc7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guLi4KLSAgICAgICAgY2Fz
ZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0gICAgICAgIGNhc2UgJzUnOiBj
YXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUs
IGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgIH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwotICAgICAgICAgICAgaWYgKGNo
ID09ICcuJyB8fCBjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGxGbG9hdENvbnN0KGNoLCBsZW4sIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVfTEVOKTsKLSAg
ICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgICAg
ICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNo
LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaXZhbCA9IDA7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpaSA9IDA7IGlpIDwgbGVuOyBpaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0g
eXlsdmFscHAtPnN5bWJvbF9uYW1lW2lpXSAtICcwJzsKLSAgICAgICAgICAgICAgICAgICAgaXZh
bCA9IGl2YWwqMTAgKyBjaDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChpdmFsID4gMjE0NzQ4
MzY0KSB8fCAoaXZhbCA9PSAyMTQ3NDgzNjQgJiYgY2ggPj0gOCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJJTlRFR0VSIENPTlNUQU5UIE9WRVJGTE9XIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gaXZh
bDsKLSAgICAgICAgICAgICAgICBpZihpdmFsPT0wKQotICAgICAgICAgICAgICAgICAgIHN0cmNw
eSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIjAiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQ
X0lOVENPTlNUQU5UOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgJy0nOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnLScpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0RFQ19PUDsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9TVUJfQVNTSUdOOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+
dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJy0nOwotICAgICAgICAgICAgfQotICAgICAgICBjYXNlICcrJzoKLSAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJysnKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIENQUF9JTkNfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgewotICAg
ICAgICAgICAgICAgIHJldHVybiBDUFBfQUREX0FTU0lHTjsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcrJzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSAnKic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAg
aWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTVVMX0FTU0lHTjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICcqJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJl
dHVybiBDUFBfTU9EX0FTU0lHTjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz4nKXsK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1JJR0hUX0JSQUNFOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gJyUnOwot
ICAgICAgICAgICAgfQotICAgICAgICBjYXNlICc6JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICBpZiAoY2ggPT0gJz4nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9C
UkFDS0VUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJl
bnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJzonOwotICAgICAgICAgICAgfQotICAgICAgICBjYXNlICdeJzoK
LSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJ14nKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIENQUF9YT1JfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChjaCA9PSAnPScpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfWE9S
X0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICAgICAgICByZXR1cm4gJ14nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgJz0nOgotICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0VRX09Q
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1
dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJz0nOwotICAgICAgICAgICAgfQotICAgICAgICBjYXNlICchJzoKLSAgICAg
ICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIENQUF9ORV9PUDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICchJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
Y2FzZSAnfCc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICd8Jykgewot
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBfT1JfT1A7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBDUFBfT1JfQVNTSUdOOwotICAgICAgICAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiAnfCc7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICBjYXNlICcmJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
ICAgICBpZiAoY2ggPT0gJyYnKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9BTkRfT1A7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPScpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5EX0FTU0lHTjsKLSAgICAgICAgICAgICAg
ICBlbHNlewotICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4g
JyYnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnPCc6
Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICc8JykgewotICAgICAgICAg
ICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ1BQX0xFRlRfQVNTSUdOOwotICAgICAgICAgICAgICAgIGVsc2V7Ci0gICAg
ICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRf
T1A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoY2ggPT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVf
T1A7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09ICclJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTEVGVF9CUkFDRTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJzonKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIENQUF9MRUZUX0JSQUNLRVQ7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2V7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAnPCc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJz4nOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgIGlmIChjaCA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAg
IGlmKGNoID09ICc9JykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9SSUdIVF9BU1NJ
R047Ci0gICAgICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJy
ZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfT1A7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfR0VfT1A7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAnPic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBjYXNlICcu
JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5
JykgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRD
b25zdCgnLicsIDAsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoID09ICcuJykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7IC8v
IFNwZWNpYWwgRU9GIGhhY2sKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcuJzsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIGlmIChjaCA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT0gJ1xuJyAm
JiBjaCAhPSBFT0YpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0YpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1xuJzsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaCAhPSAnKicpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0YpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRU9GIElOIENPTU1FTlQiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0Yp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFT0YgSU4gQ09N
TUVOVCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT0gJy8nKTsKLSAgICAgICAg
ICAgICAgICAvLyBHbyB0cnkgaXQgYWdhaW4uLi4KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2gg
PT0gJz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9ESVZfQVNTSUdOOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gJy8nOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
JyInOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIHdoaWxlIChjaCAhPSAnIicgJiYgY2gg
IT0gJ1xuJyAmJiBjaCAhPSBFT0YpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1xcJykg
ewotICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiVGhlIGxpbmUgY29udGlu
dWF0aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9mIHRoZSBPcGVuR0wgRVMgU2hhZGlu
ZyBMYW5ndWFnZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHN0cmluZ192YWwsIGxl
biwgTUFYX1NUUklOR19MRU4pOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9Owot
ICAgICAgICAgICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1RSSU5HX0xFTik7Ci0gICAgICAgICAgICBz
dHJpbmdfdmFsW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgaWYgKGNoID09ICciJykgewotICAg
ICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHN0cmluZ192YWwpOwotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1RSQ09OU1RBTlQ7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJF
T0wgSU4gU1RSSU5HIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1NZOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8vIGJ5dGVf
c2NhbgotCi1pbnQgeXlsZXhfQ1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpCi17ICAgIAotICAg
IHl5c3R5cGVwcCB5eWx2YWxwcDsKLSAgICBpbnQgdG9rZW4gPSAnXG4nOyAgIAotCi0gICAgZm9y
KDs7KSB7Ci0KLSAgICAgICAgY2hhciogdG9rZW5TdHJpbmcgPSAwOwotICAgICAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCAmeXlsdmFscHApOwot
ICAgICAgICBpZihjaGVja19FT0YodG9rZW4pKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGlmICh0b2tlbiA8IDApIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgbWF5IG5lZWQg
dG8gYmUgaW1wcm92ZWQgdG8gc3VwcG9ydCBVVEYtOAotICAgICAgICAgICAgLy8gY2hhcmFjdGVy
cyBpbiBjb21tZW50cy4KLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJwcmVwcm9jZXNz
b3IgZW5jb3VudGVyZWQgbm9uLUFTQ0lJIGNoYXJhY3RlciBpbiBzaGFkZXIgc291cmNlIik7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4gPT0gJyMn
KSB7Ci0gICAgICAgICAgICBpZiAoY3BwLT5wcmV2aW91c190b2tlbiA9PSAnXG4nfHwgY3BwLT5w
cmV2aW91c190b2tlbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSByZWFkQ1BQbGlu
ZSgmeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGlmKGNoZWNrX0VPRih0b2tlbikpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJl
cHJvY2Vzc29yIGNvbW1hbmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkgYW55IG90aGVyIHN0YXRl
bWVudCBpbiB0aGF0IGxpbmUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBjcHAtPnByZXZpb3VzX3Rva2VuID0gdG9rZW47Ci0g
ICAgICAgIC8vIGV4cGFuZCBtYWNyb3MKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElG
SUVSICYmIE1hY3JvRXhwYW5kKHl5bHZhbHBwLnNjX2lkZW50LCAmeXlsdmFscHApKSB7Ci0gICAg
ICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlbiA9PSAnXG4nKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsKLQotICAgICAg
ICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgICAgIHRva2VuU3RyaW5n
ID0gR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC5zY19pZGVudCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodG9rZW4gPT0gQ1BQX0ZMT0FUQ09OU1RBTlQgfHwgdG9rZW4gPT0gQ1BQX0lOVENP
TlNUQU5UKXsKLSAgICAgICAgICAgIHRva2VuU3RyaW5nID0geXlsdmFscHAuc3ltYm9sX25hbWU7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0cmluZ09m
QXRvbShhdGFibGUsdG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuU3RyaW5n
KSB7Ci0gICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKHRva2VuU3RyaW5nKTsKLSAgICAgICAg
ICAgIGNwcC0+dG9rZW5zQmVmb3JlRU9GID0gMTsKLSAgICAgICAgICAgIGlmIChsZW4gPj0gbWF4
U2l6ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBtYXhTaXplOwotICAgICAgICAgICAgfSBl
bHNlICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIHN0cmNweShidWYsIHRva2VuU3Ry
aW5nKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGVuOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLX0gLy8geXlsZXgKLQotLy9DaGVj
a3MgaWYgdGhlIHRva2VuIGp1c3QgcmVhZCBpcyBFT0Ygb3Igbm90LgotaW50IGNoZWNrX0VPRihp
bnQgdG9rZW4pCi17Ci0gICBpZih0b2tlbj09LTEpewotICAgICAgIGlmKGNwcC0+aWZkZXB0aCA+
MCl7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzc2luZyEhIENvbXBpbGF0
aW9uIHN0b3BwZWQiKTsKLSAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICB9Ci0g
ICAgICByZXR1cm4gMTsKLSAgIH0KLSAgIHJldHVybiAwOwotfQotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vIEVuZCBvZiBzY2FubmVyLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2N2MxZDYuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklE
SUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGlu
Ci1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMs
IGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0
aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRo
ZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNl
IGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEK
LXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRl
IGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJ
RElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIg
TlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhl
Ci0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlz
dHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv
bnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3Ug
cmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNv
cHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwot
dGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBO
VklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1h
cmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1F
eGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRz
IG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBo
ZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRo
YXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVy
IHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQu
IE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdB
UkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE
LAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIg
QUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVW
RU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlO
Q0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBV
U0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhF
Ci1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9S
WSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJ
TElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8K
LS8vIHNjYW5uZXIuaAotLy8KLQotI2lmICFkZWZpbmVkKF9fU0NBTk5FUl9IKQotI2RlZmluZSBf
X1NDQU5ORVJfSCAxCi0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xp
bWl0cy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKLQotLy8g
Tm90IHJlYWxseSBhdG9tIHRhYmxlIHN0dWZmIGJ1dCBuZWVkZWQgZmlyc3QuLi4KLQotdHlwZWRl
ZiBzdHJ1Y3QgU291cmNlTG9jX1JlYyB7Ci0gICAgdW5zaWduZWQgc2hvcnQgZmlsZSwgbGluZTsK
LX0gU291cmNlTG9jOwotCi1pbnQgeXlsZXhfQ1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUpOwot
Ci10eXBlZGVmIHN0cnVjdCBJbnB1dFNyYyB7Ci0gICAgc3RydWN0IElucHV0U3JjCSpwcmV2Owot
ICAgIGludAkJCSgqc2Nhbikoc3RydWN0IElucHV0U3JjICosIHl5c3R5cGVwcCAqKTsKLSAgICBp
bnQJCQkoKmdldGNoKShzdHJ1Y3QgSW5wdXRTcmMgKiwgeXlzdHlwZXBwICopOwotICAgIHZvaWQJ
CSgqdW5nZXRjaCkoc3RydWN0IElucHV0U3JjICosIGludCwgeXlzdHlwZXBwICopOwotICAgIGlu
dAkJCW5hbWU7ICAvKiBhdG9tICovCi0gICAgaW50CQkJbGluZTsKLX0gSW5wdXRTcmM7Ci0KLWlu
dCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nh
bm5lci4gCi1pbnQgSW5pdFNjYW5uZXJJbnB1dChDUFBTdHJ1Y3QgKmNwcCwgaW50IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKLWludCBjaGVj
a19FT0YoaW50KTsgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGhpdCBhIEVPRiBhYnJ1cHRs
eSAKLXZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY29uc3QgY2hhciAqKTsgICAvLyBzdGlja2luZyB0
aGUgbXNnLGxpbmUgaW50byB0aGUgU2hhZGVyJ3MuSW5mby5sb2cKLXZvaWQgU2V0TGluZU51bWJl
cihpbnQpOwotdm9pZCBTZXRTdHJpbmdOdW1iZXIoaW50KTsKLXZvaWQgSW5jTGluZU51bWJlcih2
b2lkKTsKLXZvaWQgRGVjTGluZU51bWJlcih2b2lkKTsKLWludCBGcmVlU2Nhbm5lcih2b2lkKTsg
ICAgICAgICAgICAgICAgIC8vIEZyZWUgdGhlIGNwcCBzY2FubmVyCi0jZW5kaWYgLy8gIShkZWZp
bmVkKF9fU0NBTk5FUl9IKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDYzNDYyNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCisrKyAvZGV2L251
bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMp
IDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEi
KSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3Vy
IGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxs
YXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0
d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBu
b3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBt
b2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lk
ZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1z
LCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29u
YWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4g
dGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0
byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29m
dHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJp
bmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElB
IFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJ
QSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGlu
IGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhl
ciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElB
Ci1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0
ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBv
ciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5v
dAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkg
eW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJ
RElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNl
ZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9O
IEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5H
RU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Us
IE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9O
IFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElB
QkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NU
IFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBP
UiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElG
SUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dF
VkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVO
IElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBzbGdsb2JhbHMuaAotLy8KLQot
I2lmICFkZWZpbmVkKF9fU0xHTE9CQUxTX0gpCi0jZGVmaW5lIF9fU0xHTE9CQUxTX0ggMQotCi10
eXBlZGVmIHN0cnVjdCBDUFBTdHJ1Y3RfUmVjIENQUFN0cnVjdDsKLQotZXh0ZXJuIENQUFN0cnVj
dCAqY3BwOwotCi0jdW5kZWYgIENQUENfREVCVUdfVEhFX0NPTVBJTEVSCi0jaWYgZGVmaW5lZChf
REVCVUcpCi0jZGVmaW5lIENQUENfREVCVUdfVEhFX0NPTVBJTEVSIDEKLSNlbmRpZgotCi0jdW5k
ZWYgIENQUENfRU5BQkxFX1RPT0xTCi0jZGVmaW5lIENQUENfRU5BQkxFX1RPT0xTIDEKLQotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKLSNpbmNsdWRlICJjb21waWxl
ci9wcmVwcm9jZXNzb3IvYXRvbS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIgotI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCIKLSNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3Ivc3ltYm9scy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
b21waWxlLmgiCi0jaWYgIWRlZmluZWQoTk9fUEFSU0VSKQotI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wYXJzZXIuaCIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoTlVMTCkKLSNkZWZp
bmUgTlVMTCAwCi0jZW5kaWYKLQotI2VuZGlmIC8vICEoZGVmaW5lZChfX1NMR0xPQkFMU19IKQot
Ci0KLSAgICAKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjE4YjI1Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYworKysgL2Rldi9udWxsCkBAIC0xLDI4OCAr
MCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRo
aXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRv
IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZp
Y2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0
dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRo
IHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRp
c3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlv
dXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVj
dCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1
c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFs
IE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9k
dWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBv
ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3Jtczsg
cHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlv
dSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVk
aXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0
cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9u
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5v
dGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFy
ZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRv
IGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRp
dmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUg
bWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4g
Ci0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBC
QVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI
RVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0Ug
QU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgot
UFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBT
UEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4g
QU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9P
UiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFO
RCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBI
QVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotLy8KLS8vIHN5bWJvbHMuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0KLSNpZiBkZWZpbmVkKF9NU0Nf
VkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDYpCi0jZW5kaWYKLQotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vIFN5bWJvbCBUYWJsZSBWYXJpYWJsZXM6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1T
Y29wZSAqU2NvcGVMaXN0ID0gTlVMTDsKLVNjb3BlICpDdXJyZW50U2NvcGUgPSBOVUxMOwotU2Nv
cGUgKkdsb2JhbFNjb3BlID0gTlVMTDsKLQotc3RhdGljIHZvaWQgdW5saW5rU2NvcGUodm9pZCAq
X3Njb3BlKSB7Ci0gICAgU2NvcGUgKnNjb3BlID0gX3Njb3BlOwotCi0gICAgaWYgKHNjb3BlLT5u
ZXh0KQotICAgICAgICBzY29wZS0+bmV4dC0+cHJldiA9IHNjb3BlLT5wcmV2OwotICAgIGlmIChz
Y29wZS0+cHJldikKLSAgICAgICAgc2NvcGUtPnByZXYtPm5leHQgPSBzY29wZS0+bmV4dDsKLSAg
ICBlbHNlCi0gICAgICAgIFNjb3BlTGlzdCA9IHNjb3BlLT5uZXh0OwotfQotCi0vKgotICogTmV3
U2NvcGUoKQotICoKLSAqLwotU2NvcGUgKk5ld1Njb3BlSW5Qb29sKE1lbW9yeVBvb2wgKnBvb2wp
Ci17Ci0gICAgU2NvcGUgKmxTY29wZTsKLQotICAgIGxTY29wZSA9IG1lbV9BbGxvYyhwb29sLCBz
aXplb2YoU2NvcGUpKTsKLSAgICBsU2NvcGUtPnBvb2wgPSBwb29sOwotICAgIGxTY29wZS0+cGFy
ZW50ID0gTlVMTDsKLSAgICBsU2NvcGUtPmZ1blNjb3BlID0gTlVMTDsKLSAgICBsU2NvcGUtPnN5
bWJvbHMgPSBOVUxMOwotICAgIAotICAgIGxTY29wZS0+bGV2ZWwgPSAwOwotCi0gICAgbFNjb3Bl
LT5wcm9ncmFtcyA9IE5VTEw7Ci0gICAgaWYgKChsU2NvcGUtPm5leHQgPSBTY29wZUxpc3QpKQot
ICAgICAgICBTY29wZUxpc3QtPnByZXYgPSBsU2NvcGU7Ci0gICAgbFNjb3BlLT5wcmV2ID0gMDsK
LSAgICBTY29wZUxpc3QgPSBsU2NvcGU7Ci0gICAgbWVtX0FkZENsZWFudXAocG9vbCwgdW5saW5r
U2NvcGUsIGxTY29wZSk7Ci0gICAgcmV0dXJuIGxTY29wZTsKLX0gLy8gTmV3U2NvcGUKLQotLyoK
LSAqIFB1c2hTY29wZSgpCi0gKgotICovCi0KLXZvaWQgUHVzaFNjb3BlKFNjb3BlICpmU2NvcGUp
Ci17Ci0gICAgU2NvcGUgKmxTY29wZTsKLQotICAgIGlmIChDdXJyZW50U2NvcGUpIHsKLSAgICAg
ICAgZlNjb3BlLT5sZXZlbCA9IEN1cnJlbnRTY29wZS0+bGV2ZWwgKyAxOwotICAgICAgICBpZiAo
ZlNjb3BlLT5sZXZlbCA9PSAxKSB7Ci0gICAgICAgICAgICBpZiAoIUdsb2JhbFNjb3BlKSB7Ci0g
ICAgICAgICAgICAgICAgLyogSEFDSyAtIENURCAtLSBpZiBHbG9iYWxTY29wZT09TlVMTCBhbmQg
bGV2ZWw9PTEsIHdlJ3JlCi0gICAgICAgICAgICAgICAgICogZGVmaW5pbmcgYSBmdW5jdGlvbiBp
biB0aGUgc3VwZXJnbG9iYWwgc2NvcGUuICBUaGluZ3MKLSAgICAgICAgICAgICAgICAgKiB3aWxs
IGJyZWFrIGlmIHdlIGxlYXZlIHRoZSBsZXZlbCBhcyAxLCBzbyB3ZSBhcmJpdHJhcmlseQotICAg
ICAgICAgICAgICAgICAqIHNldCBpdCB0byAyICovCi0gICAgICAgICAgICAgICAgZlNjb3BlLT5s
ZXZlbCA9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZTY29wZS0+
bGV2ZWwgPj0gMikgewotICAgICAgICAgICAgbFNjb3BlID0gZlNjb3BlOwotICAgICAgICAgICAg
d2hpbGUgKGxTY29wZS0+bGV2ZWwgPiAyKQotICAgICAgICAgICAgICAgIGxTY29wZSA9IGxTY29w
ZS0+bmV4dDsKLSAgICAgICAgICAgIGZTY29wZS0+ZnVuU2NvcGUgPSBsU2NvcGU7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBmU2NvcGUtPmxldmVsID0gMDsKLSAgICB9Ci0gICAg
ZlNjb3BlLT5wYXJlbnQgPSBDdXJyZW50U2NvcGU7Ci0gICAgQ3VycmVudFNjb3BlID0gZlNjb3Bl
OwotfSAvLyBQdXNoU2NvcGUKLQotLyoKLSAqIFBvcFNjb3BlKCkKLSAqCi0gKi8KLQotU2NvcGUg
KlBvcFNjb3BlKHZvaWQpCi17Ci0gICAgU2NvcGUgKmxTY29wZTsKLQotICAgIGxTY29wZSA9IEN1
cnJlbnRTY29wZTsKLSAgICBpZiAoQ3VycmVudFNjb3BlKQotICAgICAgICBDdXJyZW50U2NvcGUg
PSBDdXJyZW50U2NvcGUtPnBhcmVudDsKLSAgICByZXR1cm4gbFNjb3BlOwotfSAvLyBQb3BTY29w
ZQotCi0vKgotICogTmV3U3ltYm9sKCkgLSBBbGxvY2F0ZSBhIG5ldyBzeW1ib2wgbm9kZTsKLSAq
Ci0gKi8KLQotU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUs
IGludCBuYW1lLCBzeW1ib2xraW5kIGtpbmQpCi17Ci0gICAgU3ltYm9sICpsU3ltYjsKLSAgICBj
aGFyICpwY2g7Ci0gICAgdW5zaWduZWQgaW50IGlpOwotCi0gICAgbFN5bWIgPSAoU3ltYm9sICop
IG1lbV9BbGxvYyhmU2NvcGUtPnBvb2wsIHNpemVvZihTeW1ib2wpKTsKLSAgICBsU3ltYi0+bGVm
dCA9IE5VTEw7Ci0gICAgbFN5bWItPnJpZ2h0ID0gTlVMTDsKLSAgICBsU3ltYi0+bmV4dCA9IE5V
TEw7Ci0gICAgbFN5bWItPm5hbWUgPSBuYW1lOwotICAgIGxTeW1iLT5sb2MgPSAqbG9jOwotICAg
IGxTeW1iLT5raW5kID0ga2luZDsKLSAgICAKLSAgICAvLyBDbGVhciB1bmlvbiBhcmVhOgotCi0g
ICAgcGNoID0gKGNoYXIgKikgJmxTeW1iLT5kZXRhaWxzOwotICAgIGZvciAoaWkgPSAwOyBpaSA8
IHNpemVvZihsU3ltYi0+ZGV0YWlscyk7IGlpKyspCi0gICAgICAgICpwY2grKyA9IDA7Ci0gICAg
cmV0dXJuIGxTeW1iOwotfSAvLyBOZXdTeW1ib2wKLQotLyoKLSAqIGxBZGRUb1RyZWUoKSAtIFVz
aW5nIGEgYmluYXJ5IHRyZWUgaXMgbm90IGEgZ29vZCBpZGVhIGZvciBiYXNpYyBhdG9tIHZhbHVl
cyBiZWNhdXNlIHRoZXkKLSAqICAgICAgICAgYXJlIGdlbmVyYXRlZCBpbiBvcmRlci4gIFdlJ2xs
IGZpeCB0aGlzIGxhdGVyIChieSByZXZlcnNpbmcgdGhlIGJpdCBwYXR0ZXJuKS4KLSAqLwotCi1z
dGF0aWMgdm9pZCBsQWRkVG9UcmVlKFN5bWJvbCAqKmZTeW1ib2xzLCBTeW1ib2wgKmZTeW1iKQot
ewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgaW50IGxyZXYsIGZyZXY7Ci0KLSAgICBsU3ltYiA9
ICpmU3ltYm9sczsKLSAgICBpZiAobFN5bWIpIHsKLSAgICAgICAgZnJldiA9IEdldFJldmVyc2Vk
QXRvbShhdGFibGUsIGZTeW1iLT5uYW1lKTsKLSAgICAgICAgd2hpbGUgKGxTeW1iKSB7Ci0gICAg
ICAgICAgICBscmV2ID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgbFN5bWItPm5hbWUpOwotICAg
ICAgICAgICAgaWYgKGxyZXYgPT0gZnJldikgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJHZXRBdG9tU3RyaW5nKGF0YWJsZSwgZlN5bWItPm5hbWUpIik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChs
cmV2ID4gZnJldikgewotICAgICAgICAgICAgICAgICAgICBpZiAobFN5bWItPmxlZnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxTeW1iID0gbFN5bWItPmxlZnQ7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+bGVmdCA9IGZT
eW1iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobFN5
bWItPnJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5yaWdo
dDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxTeW1iLT5yaWdodCA9IGZTeW1iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAqZlN5bWJvbHMgPSBmU3ltYjsKLSAgICB9
Ci19IC8vIGxBZGRUb1RyZWUKLQotCi0vKgotICogQWRkU3ltYm9sKCkgLSBBZGQgYSB2YXJpYWJs
ZSwgdHlwZSwgb3IgZnVuY3Rpb24gbmFtZSB0byBhIHNjb3BlLgotICoKLSAqLwotCi1TeW1ib2wg
KkFkZFN5bWJvbChTb3VyY2VMb2MgKmxvYywgU2NvcGUgKmZTY29wZSwgaW50IGF0b20sIHN5bWJv
bGtpbmQga2luZCkKLXsKLSAgICBTeW1ib2wgKmxTeW1iOwotCi0gICAgaWYgKCFmU2NvcGUpCi0g
ICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKLSAgICBsU3ltYiA9IE5ld1N5bWJvbChsb2Ms
IGZTY29wZSwgYXRvbSwga2luZCk7Ci0gICAgbEFkZFRvVHJlZSgmZlNjb3BlLT5zeW1ib2xzLCBs
U3ltYik7Ci0gICAgcmV0dXJuIGxTeW1iOwotfSAvLyBBZGRTeW1ib2wKLQotCi0vKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiBTeW1ib2wgU2VtYW50aWMgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8q
Ci0gKiBMb29rVXBMb2NhbFN5bWJvbCgpCi0gKgotICovCi0KLVN5bWJvbCAqTG9va1VwTG9jYWxT
eW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pCi17Ci0gICAgU3ltYm9sICpsU3ltYjsKLSAg
ICBpbnQgcm5hbWUsIHJhdG9tOwotCi0gICAgcmF0b20gPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxl
LCBhdG9tKTsKLSAgICBpZiAoIWZTY29wZSkKLSAgICAgICAgZlNjb3BlID0gQ3VycmVudFNjb3Bl
OwotICAgIGxTeW1iID0gZlNjb3BlLT5zeW1ib2xzOwotICAgIHdoaWxlIChsU3ltYikgewotICAg
ICAgICBybmFtZSA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKLSAgICAg
ICAgaWYgKHJuYW1lID09IHJhdG9tKSB7Ci0gICAgICAgICAgICByZXR1cm4gbFN5bWI7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocm5hbWUgPiByYXRvbSkgewotICAgICAgICAg
ICAgICAgIGxTeW1iID0gbFN5bWItPmxlZnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGxTeW1iID0gbFN5bWItPnJpZ2h0OwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfSAvLyBMb29rVXBMb2NhbFN5bWJvbAotCi0vKgot
ICogTG9va1VwU3ltYm9sKCkKLSAqCi0gKi8KLQotU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUg
KmZTY29wZSwgaW50IGF0b20pCi17Ci0gICAgU3ltYm9sICpsU3ltYjsKLQotICAgIGlmICghZlNj
b3BlKQotICAgICAgICBmU2NvcGUgPSBDdXJyZW50U2NvcGU7Ci0gICAgd2hpbGUgKGZTY29wZSkg
ewotICAgICAgICBsU3ltYiA9IExvb2tVcExvY2FsU3ltYm9sKGZTY29wZSwgYXRvbSk7Ci0gICAg
ICAgIGlmIChsU3ltYikKLSAgICAgICAgICAgIHJldHVybiBsU3ltYjsKLSAgICAgICAgZlNjb3Bl
ID0gZlNjb3BlLT5wYXJlbnQ7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfSAvLyBMb29rVXBT
eW1ib2wKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zeW1ib2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTdkMGIwNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCww
IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMg
c29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0
aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRl
cyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRo
ZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0
byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2
ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5W
SURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNl
LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3
aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJv
dmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBt
dXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0
cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFk
ZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhl
Ci1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGlj
ZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBn
cmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFu
eSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUK
LXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5
IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0K
LVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJ
UywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5E
IE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJP
RFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5Z
IFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBE
SVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBX
SEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotLy8KLS8vIHN5bWJvbHMuaAotLy8KLQotI2lmICFkZWZpbmVkKF9fU1lN
Qk9MU19IKQotI2RlZmluZSBfX1NZTUJPTFNfSCAxCi0KLSNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3IvbWVtb3J5LmgiCi0KLXR5cGVkZWYgZW51bSBzeW1ib2xraW5kIHsKLSAgIE1BQ1JP
X1MKLX0gc3ltYm9sa2luZDsKLQotLy8gVHlwZWRlZnMgZm9yIHRoaW5ncyBkZWZpbmVkIGhlcmUg
aW4gInN5bWJvbHMuaCI6Ci0KLXR5cGVkZWYgc3RydWN0IFNjb3BlX1JlYyBTY29wZTsKLXR5cGVk
ZWYgc3RydWN0IFN5bWJvbF9SZWMgU3ltYm9sOwotCi10eXBlZGVmIHN0cnVjdCBTeW1ib2xMaXN0
X1JlYyB7Ci0gICAgc3RydWN0IFN5bWJvbExpc3RfUmVjICpuZXh0OwotICAgIFN5bWJvbCAqc3lt
YjsKLX0gU3ltYm9sTGlzdDsKLQotc3RydWN0IFNjb3BlX1JlYyB7Ci0gICAgU2NvcGUgKm5leHQs
ICpwcmV2OyAgICAgLy8gZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGFsbCBzY29wZXMKLSAgICBTY29w
ZSAqcGFyZW50OwotICAgIFNjb3BlICpmdW5TY29wZTsgICAgICAgIC8vIFBvaW50cyB0byBiYXNl
IHNjb3BlIG9mIGVuY2xvc2luZyBmdW5jdGlvbgotICAgIE1lbW9yeVBvb2wgKnBvb2w7ICAgICAg
IC8vIHBvb2wgdXNlZCBmb3IgYWxsb2NhdGlvbiBpbiB0aGlzIHNjb3BlCi0gICAgU3ltYm9sICpz
eW1ib2xzOwotICAgIAotCWludCBsZXZlbDsgICAgICAgICAgICAgIC8vIDAgPSBzdXBlciBnbG9i
YWxzLCAxID0gZ2xvYmFscywgZXRjLgotCi0gICAgLy8gT25seSB1c2VkIGF0IGdsb2JhbCBzY29w
ZSAobGV2ZWwgMSk6Ci0gICAgU3ltYm9sTGlzdCAqcHJvZ3JhbXM7ICAgLy8gTGlzdCBvZiBwcm9n
cmFtcyBmb3IgdGhpcyBjb21waWxhdGlvbi4KLX07Ci0KLQotLy8gU3ltYm9sIHRhYmxlIGlzIGEg
c2ltcGxlIGJpbmFyeSB0cmVlLgotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5oIiAgICAgICAgLy8gdG8gZ2V0IE1hY3JvU3ltYm9sIGRlZgotCi1zdHJ1Y3QgU3ltYm9sX1Jl
YyB7Ci0gICAgU3ltYm9sICpsZWZ0LCAqcmlnaHQ7Ci0gICAgU3ltYm9sICpuZXh0OwotICAgIGlu
dCBuYW1lOyAgICAgICAvLyBOYW1lIGF0b20KLSAgICBTb3VyY2VMb2MgbG9jOwotICAgIHN5bWJv
bGtpbmQga2luZDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIE1hY3JvU3ltYm9sIG1hYzsKLSAgICB9
IGRldGFpbHM7Ci19OwotCi1leHRlcm4gU2NvcGUgKkN1cnJlbnRTY29wZTsKLWV4dGVybiBTY29w
ZSAqR2xvYmFsU2NvcGU7Ci1leHRlcm4gU2NvcGUgKlNjb3BlTGlzdDsKLQotU2NvcGUgKk5ld1Nj
b3BlSW5Qb29sKE1lbW9yeVBvb2wgKik7Ci0jZGVmaW5lIE5ld1Njb3BlKCkgICAgICBOZXdTY29w
ZUluUG9vbChDdXJyZW50U2NvcGUtPnBvb2wpCi12b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3Bl
KTsKLVNjb3BlICpQb3BTY29wZSh2b2lkKTsKLVN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAq
bG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3ltYm9sa2luZCBraW5kKTsKLVN5bWJvbCAq
QWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgYXRvbSwgc3ltYm9s
a2luZCBraW5kKTsKLVN5bWJvbCAqTG9va1VwTG9jYWxTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50
IGF0b20pOwotU3ltYm9sICpMb29rVXBTeW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwot
Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChfX1NZTUJPTFNfSCkKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NGMwNWUuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwor
KysgL2Rldi9udWxsCkBAIC0xLDQ2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNv
cHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRp
b24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0
aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVz
ZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMg
TlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAg
SWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2Us
IGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgot
Ci1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xs
b3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5
b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29w
eXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNv
ZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUK
LU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJj
ZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRl
IHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3Rp
Y2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlz
Y2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdh
cmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dv
cyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhw
cmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2Vz
Ci1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1
ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGlu
ZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdo
aWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJl
IGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcg
UFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5H
IFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAot
Tk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4g
Q09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5W
SURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVY
RU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVD
VElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09G
VFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFD
VCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhF
UldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIHRva2Vucy5j
Ci0vLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKLSNpbmNsdWRlICJjb21waWxlci91dGlsLmgiCi0K
LSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwNTQpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDE1MikKLSNlbmRpZgotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFByZXByb2Nl
c3NvciBhbmQgVG9rZW4gUmVjb3JkZXIgYW5kIFBsYXliYWNrOiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8qCi0gKiBp
ZHN0cigpCi0gKiBDb3B5IGEgc3RyaW5nIHRvIGEgbWFsbG9jJ2VkIGJsb2NrIGFuZCBjb252ZXJ0
IGl0IGludG8gc29tZXRoaW5nIHN1aXRhYmxlCi0gKiBmb3IgYW4gSUQKLSAqCi0gKi8KLQotc3Rh
dGljIGNoYXIgKmlkc3RyKGNvbnN0IGNoYXIgKmZzdHIsIE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0g
ICAgc2l6ZV90IGxlbjsKLSAgICBjaGFyICpzdHIsICp0OwotICAgIGNvbnN0IGNoYXIgKmY7Ci0K
LSAgICBsZW4gPSBzdHJsZW4oZnN0cik7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICBzdHIgPSAo
Y2hhciAqKSBtYWxsb2MobGVuICsgMSk7Ci0gICAgZWxzZQotICAgICAgICBzdHIgPSAoY2hhciAq
KSBtZW1fQWxsb2MocG9vbCwgbGVuICsgMSk7Ci0gICAgCi0gICAgZm9yIChmPWZzdHIsIHQ9c3Ry
OyAqZjsgZisrKSB7Ci0gICAgICAgIGlmIChpc2FsbnVtKCpmKSkgKnQrKyA9ICpmOwotICAgICAg
ICBlbHNlIGlmICgqZiA9PSAnLicgfHwgKmYgPT0gJy8nKSAqdCsrID0gJ18nOwotICAgIH0KLSAg
ICAqdCA9IDA7Ci0gICAgcmV0dXJuIHN0cjsKLX0gLy8gaWRzdHIKLQotCi0vKgotICogbE5ld0Js
b2NrKCkKLSAqCi0gKi8KLQotc3RhdGljIFRva2VuQmxvY2sgKmxOZXdCbG9jayhUb2tlblN0cmVh
bSAqZlRvaywgTWVtb3J5UG9vbCAqcG9vbCkKLXsKLSAgICBUb2tlbkJsb2NrICpsQmxvY2s7Ci0K
LSAgICBpZiAoIXBvb2wpCi0gICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2NrICopIG1hbGxvYyhz
aXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOwotICAgIGVsc2UKLSAgICAgICAgbEJsb2NrID0gKFRv
a2VuQmxvY2sgKikgbWVtX0FsbG9jKHBvb2wsIHNpemVvZihUb2tlbkJsb2NrKSArIDI1Nik7Ci0g
ICAgbEJsb2NrLT5jb3VudCA9IDA7Ci0gICAgbEJsb2NrLT5jdXJyZW50ID0gMDsKLSAgICBsQmxv
Y2stPmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBsQmxvY2sgKyBzaXplb2YoVG9rZW5CbG9jayk7
Ci0gICAgbEJsb2NrLT5tYXggPSAyNTY7Ci0gICAgbEJsb2NrLT5uZXh0ID0gTlVMTDsKLSAgICBp
ZiAoZlRvay0+aGVhZCkgewotICAgICAgICBmVG9rLT5jdXJyZW50LT5uZXh0ID0gbEJsb2NrOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGZUb2stPmhlYWQgPSBsQmxvY2s7Ci0gICAgfQotICAgIGZU
b2stPmN1cnJlbnQgPSBsQmxvY2s7Ci0gICAgcmV0dXJuIGxCbG9jazsKLX0gLy8gbE5ld0Jsb2Nr
Ci0KLS8qCi0gKiBsQWRkQnl0ZSgpCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIGxBZGRCeXRlKFRv
a2VuU3RyZWFtICpmVG9rLCB1bnNpZ25lZCBjaGFyIGZWYWwpCi17Ci0gICAgVG9rZW5CbG9jayAq
bEJsb2NrOwotICAgIGxCbG9jayA9IGZUb2stPmN1cnJlbnQ7Ci0gICAgaWYgKGxCbG9jay0+Y291
bnQgPj0gbEJsb2NrLT5tYXgpCi0gICAgICAgIGxCbG9jayA9IGxOZXdCbG9jayhmVG9rLCAwKTsK
LSAgICBsQmxvY2stPmRhdGFbbEJsb2NrLT5jb3VudCsrXSA9IGZWYWw7Ci19IC8vIGxBZGRCeXRl
Ci0KLQotCi0vKgotICogbFJlYWRCeXRlKCkgLSBHZXQgdGhlIG5leHQgYnl0ZSBmcm9tIGEgc3Ry
ZWFtLgotICoKLSAqLwotCi1zdGF0aWMgaW50IGxSZWFkQnl0ZShUb2tlblN0cmVhbSAqcFRvaykK
LXsKLSAgICBUb2tlbkJsb2NrICpsQmxvY2s7Ci0gICAgaW50IGx2YWwgPSAtMTsKLQotICAgIGxC
bG9jayA9IHBUb2stPmN1cnJlbnQ7Ci0gICAgaWYgKGxCbG9jaykgewotICAgICAgICBpZiAobEJs
b2NrLT5jdXJyZW50ID49IGxCbG9jay0+Y291bnQpIHsKLSAgICAgICAgICAgIGxCbG9jayA9IGxC
bG9jay0+bmV4dDsKLSAgICAgICAgICAgIGlmIChsQmxvY2spCi0gICAgICAgICAgICAgICAgbEJs
b2NrLT5jdXJyZW50ID0gMDsKLSAgICAgICAgICAgIHBUb2stPmN1cnJlbnQgPSBsQmxvY2s7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGxCbG9jaykKLSAgICAgICAgICAgIGx2YWwgPSBsQmxvY2st
PmRhdGFbbEJsb2NrLT5jdXJyZW50KytdOwotICAgIH0KLSAgICByZXR1cm4gbHZhbDsKLX0gLy8g
bFJlYWRCeXRlCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBHbG9i
YWwgRnVuY3Rpb25zOi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8q
Ci0gKiBOZXdUb2tlblN0cmVhbSgpCi0gKgotICovCi0KLVRva2VuU3RyZWFtICpOZXdUb2tlblN0
cmVhbShjb25zdCBjaGFyICpuYW1lLCBNZW1vcnlQb29sICpwb29sKQotewotICAgIFRva2VuU3Ry
ZWFtICpwVG9rOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICBwVG9rID0gKFRva2VuU3RyZWFt
ICopIG1hbGxvYyhzaXplb2YoVG9rZW5TdHJlYW0pKTsKLSAgICBlbHNlCi0gICAgICAgIHBUb2sg
PSAoVG9rZW5TdHJlYW0qKW1lbV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5TdHJlYW0pKTsKLSAg
ICBwVG9rLT5uZXh0ID0gTlVMTDsKLSAgICBwVG9rLT5uYW1lID0gaWRzdHIobmFtZSwgcG9vbCk7
Ci0gICAgcFRvay0+aGVhZCA9IE5VTEw7Ci0gICAgcFRvay0+Y3VycmVudCA9IE5VTEw7Ci0gICAg
bE5ld0Jsb2NrKHBUb2ssIHBvb2wpOwotICAgIHJldHVybiBwVG9rOwotfSAvLyBOZXdUb2tlblN0
cmVhbQotCi0vKgotICogRGVsZXRlVG9rZW5TdHJlYW0oKQotICoKLSAqLwotCi12b2lkIERlbGV0
ZVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKQotewotICAgIFRva2VuQmxvY2sgKnBCbG9j
aywgKm5CbG9jazsKLQotICAgIGlmIChwVG9rKSB7Ci0gICAgICAgIHBCbG9jayA9IHBUb2stPmhl
YWQ7Ci0gICAgICAgIHdoaWxlIChwQmxvY2spIHsKLSAgICAgICAgICAgIG5CbG9jayA9IHBCbG9j
ay0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUocEJsb2NrKTsKLSAgICAgICAgICAgIHBCbG9jayA9
IG5CbG9jazsKLSAgICAgICAgfQotICAgICAgICBpZiAocFRvay0+bmFtZSkKLSAgICAgICAgICAg
IGZyZWUocFRvay0+bmFtZSk7Ci0gICAgICAgIGZyZWUocFRvayk7Ci0gICAgfQotfSAvLyBEZWxl
dGVUb2tlblN0cmVhbQotCi0vKgotICogUmVjb3JkVG9rZW4oKSAtIEFkZCBhIHRva2VuIHRvIHRo
ZSBlbmQgb2YgYSBsaXN0IGZvciBsYXRlciBwbGF5YmFjayBvciBwcmludG91dC4KLSAqCi0gKi8K
LQotdm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50IHRva2VuLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkKLXsKLSAgICBjb25zdCBjaGFyICpzOwotICAgIGNoYXIgKnN0cj1OVUxM
OwotCi0gICAgaWYgKHRva2VuID4gMjU2KQotICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWdu
ZWQgY2hhcikoKHRva2VuICYgMHg3ZikgKyAweDgwKSk7Ci0gICAgZWxzZQotICAgICAgICBsQWRk
Qnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikodG9rZW4gJiAweDdmKSk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgQ1BQX0lERU5USUZJRVI6Ci0gICAgY2FzZSBDUFBfVFlQRUlERU5U
SUZJRVI6Ci0gICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6Ci0gICAgICAgIHMgPSBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KTsKLSAgICAgICAgd2hpbGUgKCpzKQotICAg
ICAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIpICpzKyspOwotICAgICAgICBs
QWRkQnl0ZShwVG9rLCAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDUFBfRkxPQVRDT05T
VEFOVDoKLSAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKLSAgICAgICAgIHN0cj15eWx2YWxwcC0+
c3ltYm9sX25hbWU7Ci0gICAgICAgICB3aGlsZSAoKnN0cil7Ci0gICAgICAgICAgICBsQWRkQnl0
ZShwVG9rLCAodW5zaWduZWQgY2hhcikgKnN0cisrKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGxB
ZGRCeXRlKHBUb2ssIDApOwotICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnKCc6Ci0gICAgICAg
IGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSh5eWx2YWxwcC0+c2NfaW50ID8gMSA6IDAp
KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19IC8vIFJlY29yZFRva2Vu
Ci0KLS8qCi0gKiBSZXdpbmRUb2tlblN0cmVhbSgpIC0gUmVzZXQgYSB0b2tlbiBzdHJlYW0gaW4g
cHJlcGVyYXRpb24gZm9yIHJlYWRpbmcuCi0gKgotICovCi0KLXZvaWQgUmV3aW5kVG9rZW5TdHJl
YW0oVG9rZW5TdHJlYW0gKnBUb2spCi17Ci0gICAgaWYgKHBUb2stPmhlYWQpIHsKLSAgICAgICAg
cFRvay0+Y3VycmVudCA9IHBUb2stPmhlYWQ7Ci0gICAgICAgIHBUb2stPmN1cnJlbnQtPmN1cnJl
bnQgPSAwOwotICAgIH0KLX0gLy8gUmV3aW5kVG9rZW5TdHJlYW0KLQotLyoKLSAqIFJlYWRUb2tl
bigpIC0gUmVhZCB0aGUgbmV4dCB0b2tlbiBmcm9tIGEgc3RyZWFtLgotICoKLSAqLwotCi1pbnQg
UmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAg
ICBjaGFyIHN5bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9MRU4gKyAxXTsKLSAgICBjaGFyIHN0
cmluZ192YWxbTUFYX1NUUklOR19MRU4gKyAxXTsKLSAgICBpbnQgbHRva2VuLCBsZW47Ci0gICAg
Y2hhciBjaDsKLSAgICBpbnQgYmFzZSwgYWNjdW07Ci0gICAgY2hhciBjaF92YWw7Ci0KLSAgICBs
dG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgaWYgKGx0b2tlbiA+PSAwKSB7Ci0gICAgICAg
IGlmIChsdG9rZW4gPiAxMjcpCi0gICAgICAgICAgICBsdG9rZW4gKz0gMTI4OwotICAgICAgICBz
d2l0Y2ggKGx0b2tlbikgewotICAgICAgICBjYXNlIENQUF9JREVOVElGSUVSOgotICAgICAgICBj
YXNlIENQUF9UWVBFSURFTlRJRklFUjoKLSAgICAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAg
ICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJ2EnICYm
IGNoIDw9ICd6JykgfHwKLSAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0g
J1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXycpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0g
bFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgYXNzZXJ0KGNoID09
ICdcMCcpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRkU3RyaW5n
KGF0YWJsZSwgc3ltYm9sX25hbWUpOwotICAgICAgICAgICAgcmV0dXJuIENQUF9JREVOVElGSUVS
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAg
ICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAgIHdoaWxlICgoY2ggPSBsUmVhZEJ5dGUocFRv
aykpICE9IDApCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TVFJJTkdfTEVOKQotICAg
ICAgICAgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgc3Ry
aW5nX3ZhbFtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExv
b2tVcEFkZFN0cmluZyhhdGFibGUsIHN0cmluZ192YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0gICAgICAgICAgICBsZW4gPSAwOwotICAg
ICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID49
ICcwJyAmJiBjaCA8PSAnOScpfHwoY2g9PSdlJ3x8Y2g9PSdFJ3x8Y2g9PScuJyl8fChjaD09Jysn
fHxjaD09Jy0nKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFY
X1NZTUJPTF9OQU1FX0xFTikgewotICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4r
K10gPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVu
XSA9ICdcMCc7Ci0gICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7Ci0gICAgICAgICAgICBz
dHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHl5
bHZhbHBwLT5zY19mdmFsPShmbG9hdClhdG9mX2RvdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgotICAgICAg
ICAgICAgbGVuID0gMDsKLQkgICAgYWNjdW0gPSAwOwotICAgICAgICAgICAgY2ggPSBsUmVhZEJ5
dGUocFRvayk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJzAnKSB7Ci0gICAgICAgICAgICAgICAg
c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUo
cFRvayk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAnWCcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAg
ICAgICAgIGJhc2UgPSAxNjsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRv
ayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9
IDg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBiYXNlID0gMTA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdoaWxlIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNo
X3ZhbCA9IC0xOwotICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KGNoKSkKLSAgICAgICAgICAg
ICAgICAgICAgY2hfdmFsID0gY2ggLSAnMCc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXN4
ZGlnaXQoY2gpKQotICAgICAgICAgICAgICAgICAgICBjaF92YWwgPSB0b2xvd2VyKGNoKSAtICdh
JyArIDEwOwotCi0gICAgICAgICAgICAgICAgaWYgKGNoX3ZhbCA8IDAgfHwgY2hfdmFsID49IGJh
c2UpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgc3ltYm9s
X25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgYWNjdW0gPSBhY2N1bSAqIGJhc2Ug
KyBjaF92YWw7Ci0gICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAg
IGFzc2VydChjaCA9PSAnXDAnKTsKLSAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9s
X25hbWUsIHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBhY2N1
bTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICcoJzoKLSAgICAgICAgICAgIHl5
bHZhbHBwLT5zY19pbnQgPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbHRva2VuOwotICAgIH0KLSAgICByZXR1cm4gRU9GX1NZ
OwotfSAvLyBSZWFkVG9rZW4KLQotdHlwZWRlZiBzdHJ1Y3QgVG9rZW5JbnB1dFNyYyB7Ci0gICAg
SW5wdXRTcmMgICAgICAgICAgICBiYXNlOwotICAgIFRva2VuU3RyZWFtICAgICAgICAgKnRva2Vu
czsKLSAgICBpbnQgICAgICAgICAgICAgICAgICgqZmluYWwpKENQUFN0cnVjdCAqKTsKLX0gVG9r
ZW5JbnB1dFNyYzsKLQotc3RhdGljIGludCBzY2FuX3Rva2VuKFRva2VuSW5wdXRTcmMgKmluLCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4gPSBSZWFkVG9rZW4oaW4tPnRv
a2VucywgeXlsdmFscHApOwotICAgIGludCAoKmZpbmFsKShDUFBTdHJ1Y3QgKik7Ci0gICAgY3Bw
LT50b2tlbkxvYy0+ZmlsZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOwotICAgIGNwcC0+dG9r
ZW5Mb2MtPmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKLSAgICBpZiAodG9rZW4gPT0g
J1xuJykgewotICAgICAgICBpbi0+YmFzZS5saW5lKys7Ci0gICAgICAgIHJldHVybiB0b2tlbjsK
LSAgICB9Ci0gICAgaWYgKHRva2VuID4gMCkgcmV0dXJuIHRva2VuOwotICAgIGNwcC0+Y3VycmVu
dElucHV0ID0gaW4tPmJhc2UucHJldjsKLSAgICBmaW5hbCA9IGluLT5maW5hbDsKLSAgICBmcmVl
KGluKTsKLSAgICBpZiAoZmluYWwgJiYgIWZpbmFsKGNwcCkpIHJldHVybiAtMTsKLSAgICByZXR1
cm4gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LX0KLQotaW50IFJlYWRGcm9tVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnRzLCBpbnQgbmFtZSwg
aW50ICgqZmluYWwpKENQUFN0cnVjdCAqKSkKLXsKLSAgICBUb2tlbklucHV0U3JjICppbiA9IG1h
bGxvYyhzaXplb2YoVG9rZW5JbnB1dFNyYykpOwotICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKFRv
a2VuSW5wdXRTcmMpKTsKLSAgICBpbi0+YmFzZS5uYW1lID0gbmFtZTsKLSAgICBpbi0+YmFzZS5w
cmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgaW4tPmJhc2Uuc2NhbiA9IChpbnQgKCopKElu
cHV0U3JjICosIHl5c3R5cGVwcCAqKSlzY2FuX3Rva2VuOwotICAgIGluLT5iYXNlLmxpbmUgPSAx
OwotICAgIGluLT50b2tlbnMgPSB0czsKLSAgICBpbi0+ZmluYWwgPSBmaW5hbDsKLSAgICBSZXdp
bmRUb2tlblN0cmVhbSh0cyk7Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmaW4tPmJhc2U7Ci0g
ICAgcmV0dXJuIDE7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IFVuZ290VG9rZW4gewotICAgIElucHV0
U3JjICAgIGJhc2U7Ci0gICAgaW50ICAgICAgICAgdG9rZW47Ci0gICAgeXlzdHlwZXBwICAgICBs
dmFsOwotfSBVbmdvdFRva2VuOwotCi1zdGF0aWMgaW50IHJlZ2V0X3Rva2VuKFVuZ290VG9rZW4g
KnQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9IHQtPnRva2VuOwot
ICAgICp5eWx2YWxwcCA9IHQtPmx2YWw7Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSB0LT5iYXNl
LnByZXY7Ci0gICAgZnJlZSh0KTsKLSAgICByZXR1cm4gdG9rZW47Ci19Ci0KLXZvaWQgVW5nZXRU
b2tlbihpbnQgdG9rZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKSB7Ci0gICAgVW5nb3RUb2tlbiAq
dCA9IG1hbGxvYyhzaXplb2YoVW5nb3RUb2tlbikpOwotICAgIG1lbXNldCh0LCAwLCBzaXplb2Yo
VW5nb3RUb2tlbikpOwotICAgIHQtPnRva2VuID0gdG9rZW47Ci0gICAgdC0+bHZhbCA9ICp5eWx2
YWxwcDsKLSAgICB0LT5iYXNlLnNjYW4gPSAodm9pZCAqKXJlZ2V0X3Rva2VuOwotICAgIHQtPmJh
c2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OwotICAgIHQtPmJhc2UubmFtZSA9IGNwcC0+Y3Vy
cmVudElucHV0LT5uYW1lOwotICAgIHQtPmJhc2UubGluZSA9IGNwcC0+Y3VycmVudElucHV0LT5s
aW5lOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJnQtPmJhc2U7Ci19Ci0KLQotdm9pZCBEdW1w
VG9rZW5TdHJlYW0oRklMRSAqZnAsIFRva2VuU3RyZWFtICpzLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCkgewotICAgIGludCB0b2tlbjsKLSAgICBjaGFyIHN0clsxMDBdOwotCi0gICAgaWYgKGZwID09
IDApIGZwID0gc3Rkb3V0OwotICAgIFJld2luZFRva2VuU3RyZWFtKHMpOwotICAgIHdoaWxlICgo
dG9rZW4gPSBSZWFkVG9rZW4ocywgeXlsdmFscHApKSA+IDApIHsKLSAgICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgICBjYXNlIENQUF9JREVOVElGSUVSOgotICAgICAgICBjYXNlIENQUF9U
WVBFSURFTlRJRklFUjoKLSAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIl
cyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lkZW50KSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6Ci0gICAgICAgICAgICBz
bnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiXCIlc1wiIiwgR2V0QXRvbVN0cmluZyhhdGFibGUs
IHl5bHZhbHBwLT5zY19pZGVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1BQX0ZMT0FUQ09OU1RBTlQ6Ci0gICAgICAgICAgICAvL3ByaW50ZigiJWc5LjYgIiwgeXlsdmFs
cHAtPnNjX2Z2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BQX0lOVENP
TlNUQU5UOgotICAgICAgICAgICAgLy9wcmludGYoIiVkICIsIHl5bHZhbHBwLT5zY19pbnQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodG9r
ZW4gPj0gMTI3KQotICAgICAgICAgICAgICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIl
cyAiLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgdG9rZW4pKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJWMiLCB0b2tlbik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIp
OwotICAgIH0KLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBFbmQgb2YgdG9rZW5zLmMgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGRiZjRhMmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBO
VklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxp
ZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBt
b2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNv
bnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVl
IHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9y
IHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24g
b2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1z
dWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24t
ZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3Jp
Z2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCBy
ZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZv
cm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2Fy
ZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3Vj
aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5h
bWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9y
YXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRo
aXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGll
ZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0
ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVy
aXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0
d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVu
ZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9O
LCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBN
RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRT
IFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9U
SEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1Ig
QU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRT
OyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1V
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lO
RyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04g
QU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVT
RUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJ
RElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gdG9rZW5zLmgKLS8vCi0KLSNpZiAhZGVmaW5l
ZChfX1RPS0VOU19IKQotI2RlZmluZSBfX1RPS0VOU19IIDEKLQotI2luY2x1ZGUgPHN0ZGlvLmg+
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIgotCi0jZGVmaW5lIEVP
Rl9TWSAoLTEpCi0KLXR5cGVkZWYgc3RydWN0IFRva2VuQmxvY2tfUmVjIFRva2VuQmxvY2s7Ci0K
LXR5cGVkZWYgc3RydWN0IFRva2VuU3RyZWFtX1JlYyB7Ci0gICAgc3RydWN0IFRva2VuU3RyZWFt
X1JlYyAqbmV4dDsKLSAgICBjaGFyICpuYW1lOwotICAgIFRva2VuQmxvY2sgKmhlYWQ7Ci0gICAg
VG9rZW5CbG9jayAqY3VycmVudDsKLX0gVG9rZW5TdHJlYW07Ci0KLXN0cnVjdCBUb2tlbkJsb2Nr
X1JlYyB7Ci0gICAgVG9rZW5CbG9jayAqbmV4dDsKLSAgICBpbnQgY3VycmVudDsKLSAgICBpbnQg
Y291bnQ7Ci0gICAgaW50IG1heDsKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotfTsKLQotZXh0
ZXJuIFRva2VuU3RyZWFtIHN0ZGxpYl9jcHBfc3RyZWFtOwotCi0KLVRva2VuU3RyZWFtICpOZXdU
b2tlblN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBNZW1vcnlQb29sICpwb29sKTsKLXZvaWQgRGVs
ZXRlVG9rZW5TdHJlYW0oVG9rZW5TdHJlYW0gKnBUb2spOyAKLXZvaWQgUmVjb3JkVG9rZW4oVG9r
ZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXlsdmFscHApOwotdm9pZCBS
ZXdpbmRUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvayk7Ci1pbnQgUmVhZFRva2VuKFRva2Vu
U3RyZWFtICpwVG9rLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Ci1pbnQgUmVhZEZyb21Ub2tlblN0
cmVhbShUb2tlblN0cmVhbSAqcFRvaywgaW50IG5hbWUsIGludCAoKmZpbmFsKShDUFBTdHJ1Y3Qg
KikpOwotdm9pZCBVbmdldFRva2VuKGludCwgeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0jaWYg
ZGVmaW5lZChDUFBDX0VOQUJMRV9UT09MUykKLQotdm9pZCBEdW1wVG9rZW5TdHJlYW0oRklMRSAq
LCBUb2tlblN0cmVhbSAqLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCk7Ci0KLSNlbmRpZiAvLyBkZWZp
bmVkKENQUENfRU5BQkxFX1RPT0xTKQotCi0jZW5kaWYgLy8gIWRlZmluZWQoX19UT0tFTlNfSCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODliYzhkOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
OTkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQ29uZmlnLmNwcDogSW1wbGVtZW50
cyB0aGUgZWdsOjpDb25maWcgY2xhc3MsIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCwgdHlwZQotLy8g
YW5kIHNpemUgZm9yIGFuIGVnbDo6U3VyZmFjZS4gSW1wbGVtZW50cyBFR0xDb25maWcgYW5kIHJl
bGF0ZWQgZnVuY3Rpb25hbGl0eS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDMuNCBwYWdlIDE1Lgot
Ci0jaW5jbHVkZSAibGliRUdML0NvbmZpZy5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2lu
Y2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi11c2luZyBuYW1l
c3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgZWdsCi17Ci1Db25maWc6OkNvbmZpZyhEM0RESVNQTEFZ
TU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1pbkludGVydmFsLCBFR0xpbnQgbWF4SW50ZXJ2YWws
IEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3Jt
YXQsIEVHTGludCBtdWx0aVNhbXBsZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0
KQotICAgIDogbURpc3BsYXlNb2RlKGRpc3BsYXlNb2RlKSwgbVJlbmRlclRhcmdldEZvcm1hdChy
ZW5kZXJUYXJnZXRGb3JtYXQpLCBtRGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1h
dCksIG1NdWx0aVNhbXBsZShtdWx0aVNhbXBsZSkKLXsKLSAgICBzZXQoZGlzcGxheU1vZGUsIG1p
bkludGVydmFsLCBtYXhJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxG
b3JtYXQsIG11bHRpU2FtcGxlLCB0ZXhXaWR0aCwgdGV4SGVpZ2h0KTsKLX0KLQotdm9pZCBDb25m
aWc6OnNldERlZmF1bHRzKCkKLXsKLSAgICBtQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbVJlZFNpemUg
PSAwOwotICAgIG1HcmVlblNpemUgPSAwOwotICAgIG1CbHVlU2l6ZSA9IDA7Ci0gICAgbUx1bWlu
YW5jZVNpemUgPSAwOwotICAgIG1BbHBoYVNpemUgPSAwOwotICAgIG1BbHBoYU1hc2tTaXplID0g
MDsKLSAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbUJpbmRUb1Rl
eHR1cmVSR0JBID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtQ29sb3JCdWZmZXJUeXBlID0gRUdMX1JH
Ql9CVUZGRVI7Ci0gICAgbUNvbmZpZ0NhdmVhdCA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbUNvbmZp
Z0lEID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtQ29uZm9ybWFudCA9IDA7Ci0gICAgbURlcHRoU2l6
ZSA9IDA7Ci0gICAgbUxldmVsID0gMDsKLSAgICBtTWF0Y2hOYXRpdmVQaXhtYXAgPSBFR0xfTk9O
RTsKLSAgICBtTWF4UEJ1ZmZlcldpZHRoID0gMDsKLSAgICBtTWF4UEJ1ZmZlckhlaWdodCA9IDA7
Ci0gICAgbU1heFBCdWZmZXJQaXhlbHMgPSAwOwotICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSBFR0xf
RE9OVF9DQVJFOwotICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1O
YXRpdmVSZW5kZXJhYmxlID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtTmF0aXZlVmlzdWFsSUQgPSAw
OwotICAgIG1OYXRpdmVWaXN1YWxUeXBlID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtUmVuZGVyYWJs
ZVR5cGUgPSBFR0xfT1BFTkdMX0VTX0JJVDsKLSAgICBtU2FtcGxlQnVmZmVycyA9IDA7Ci0gICAg
bVNhbXBsZXMgPSAwOwotICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgbVN1cmZhY2VUeXBlID0g
RUdMX1dJTkRPV19CSVQ7Ci0gICAgbVRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOwotICAgIG1U
cmFuc3BhcmVudFJlZFZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtVHJhbnNwYXJlbnRHcmVl
blZhbHVlID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtVHJhbnNwYXJlbnRCbHVlVmFsdWUgPSBFR0xf
RE9OVF9DQVJFOwotfQotCi12b2lkIENvbmZpZzo6c2V0KEQzRERJU1BMQVlNT0RFIGRpc3BsYXlN
b2RlLCBFR0xpbnQgbWluSW50ZXJ2YWwsIEVHTGludCBtYXhJbnRlcnZhbCwgRDNERk9STUFUIHJl
bmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11
bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWlnaHQpCi17Ci0gICAgbUJp
bmRUb1RleHR1cmVSR0IgPSBFR0xfRkFMU0U7Ci0gICAgbUJpbmRUb1RleHR1cmVSR0JBID0gRUdM
X0ZBTFNFOwotICAgIHN3aXRjaCAocmVuZGVyVGFyZ2V0Rm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDE2OwotICAgICAgICBt
UmVkU2l6ZSA9IDU7Ci0gICAgICAgIG1HcmVlblNpemUgPSA1OwotICAgICAgICBtQmx1ZVNpemUg
PSA1OwotICAgICAgICBtQWxwaGFTaXplID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAzMjsKLSAgICAgICAg
bVJlZFNpemUgPSAxMDsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDEwOwotICAgICAgICBtQmx1ZVNp
emUgPSAxMDsKLSAgICAgICAgbUFscGhhU2l6ZSA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMzI7Ci0gICAgICAg
IG1SZWRTaXplID0gODsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDg7Ci0gICAgICAgIG1CbHVlU2l6
ZSA9IDg7Ci0gICAgICAgIG1BbHBoYVNpemUgPSA4OwotICAgICAgICBtQmluZFRvVGV4dHVyZVJH
QkEgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAg
ICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKLSAgICAgICAgbVJlZFNpemUgPSA1OwotICAgICAgICBt
R3JlZW5TaXplID0gNjsKLSAgICAgICAgbUJsdWVTaXplID0gNTsKLSAgICAgICAgbUFscGhhU2l6
ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAg
ICAgIG1CdWZmZXJTaXplID0gMzI7Ci0gICAgICAgIG1SZWRTaXplID0gODsKLSAgICAgICAgbUdy
ZWVuU2l6ZSA9IDg7Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDg7Ci0gICAgICAgIG1BbHBoYVNpemUg
PSAwOwotICAgICAgICBtQmluZFRvVGV4dHVyZVJHQiA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsgICAvLyBPdGhlciBmb3JtYXRz
IHNob3VsZCBub3QgYmUgdmFsaWQKLSAgICB9Ci0KLSAgICBtTHVtaW5hbmNlU2l6ZSA9IDA7Ci0g
ICAgbUFscGhhTWFza1NpemUgPSAwOwotICAgIG1Db2xvckJ1ZmZlclR5cGUgPSBFR0xfUkdCX0JV
RkZFUjsKLSAgICBtQ29uZmlnQ2F2ZWF0ID0gKGRpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJU
YXJnZXRGb3JtYXQpID8gRUdMX05PTkUgOiBFR0xfU0xPV19DT05GSUc7Ci0gICAgbUNvbmZpZ0lE
ID0gMDsKLSAgICBtQ29uZm9ybWFudCA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKLQotICAgIHN3aXRj
aCAoZGVwdGhTdGVuY2lsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046
Ci0gICAgICAgIG1EZXB0aFNpemUgPSAwOwotICAgICAgICBtU3RlbmNpbFNpemUgPSAwOwotICAg
ICAgICBicmVhazsKLS8vICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKLS8vICAgICAgbURl
cHRoU2l6ZSA9IDE2OwotLy8gICAgICBtU3RlbmNpbFNpemUgPSAwOwotLy8gICAgICBicmVhazsK
LSAgICAgIGNhc2UgRDNERk1UX0QzMjoKLSAgICAgICAgbURlcHRoU2l6ZSA9IDMyOwotICAgICAg
ICBtU3RlbmNpbFNpemUgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0Qx
NVMxOgotICAgICAgICBtRGVwdGhTaXplID0gMTU7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDE7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAgIG1EZXB0
aFNpemUgPSAyNDsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0gODsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgICAgbURlcHRoU2l6ZSA9IDI0OwotICAgICAg
ICBtU3RlbmNpbFNpemUgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0Qy
NFg0UzQ6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAyNDsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0g
NDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIG1EZXB0
aFNpemUgPSAxNjsKLSAgICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0v
LyAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgotLy8gICAgICBtRGVwdGhTaXplID0gMzI7
Ci0vLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0vLyAgICAgIGJyZWFrOwotLy8gICAgY2FzZSBE
M0RGTVRfRDI0RlM4OgotLy8gICAgICBtRGVwdGhTaXplID0gMjQ7Ci0vLyAgICAgIG1TdGVuY2ls
U2l6ZSA9IDg7Ci0vLyAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICBtTGV2ZWwgPSAwOwotICAgIG1NYXRjaE5hdGl2ZVBpeG1h
cCA9IEVHTF9OT05FOwotICAgIG1NYXhQQnVmZmVyV2lkdGggPSB0ZXhXaWR0aDsKLSAgICBtTWF4
UEJ1ZmZlckhlaWdodCA9IHRleEhlaWdodDsKLSAgICBtTWF4UEJ1ZmZlclBpeGVscyA9IHRleFdp
ZHRoKnRleEhlaWdodDsKLSAgICBtTWF4U3dhcEludGVydmFsID0gbWF4SW50ZXJ2YWw7Ci0gICAg
bU1pblN3YXBJbnRlcnZhbCA9IG1pbkludGVydmFsOwotICAgIG1OYXRpdmVSZW5kZXJhYmxlID0g
RUdMX0ZBTFNFOwotICAgIG1OYXRpdmVWaXN1YWxJRCA9IDA7Ci0gICAgbU5hdGl2ZVZpc3VhbFR5
cGUgPSAwOwotICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKLSAgICBt
U2FtcGxlQnVmZmVycyA9IG11bHRpU2FtcGxlID8gMSA6IDA7Ci0gICAgbVNhbXBsZXMgPSBtdWx0
aVNhbXBsZTsKLSAgICBtU3VyZmFjZVR5cGUgPSBFR0xfUEJVRkZFUl9CSVQgfCBFR0xfV0lORE9X
X0JJVCB8IEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQ7Ci0gICAgbVRyYW5zcGFyZW50
VHlwZSA9IEVHTF9OT05FOwotICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gMDsKLSAgICBtVHJh
bnNwYXJlbnRHcmVlblZhbHVlID0gMDsKLSAgICBtVHJhbnNwYXJlbnRCbHVlVmFsdWUgPSAwOwot
fQotCi1FR0xDb25maWcgQ29uZmlnOjpnZXRIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiAo
RUdMQ29uZmlnKShzaXplX3QpbUNvbmZpZ0lEOwotfQotCi1Tb3J0Q29uZmlnOjpTb3J0Q29uZmln
KGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCkKLSAgICA6IG1XYW50UmVkKGZhbHNlKSwgbVdhbnRH
cmVlbihmYWxzZSksIG1XYW50Qmx1ZShmYWxzZSksIG1XYW50QWxwaGEoZmFsc2UpLCBtV2FudEx1
bWluYW5jZShmYWxzZSkKLXsKLSAgICBzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhhdHRyaWJMaXN0
KTsKLX0KLQotdm9pZCBTb3J0Q29uZmlnOjpzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhjb25zdCBF
R0xpbnQgKmF0dHJpYkxpc3QpCi17Ci0gICAgLy8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdlIDI0
Ci0gICAgLy8gU29ydGluZyBydWxlICMzOiBieSBsYXJnZXIgdG90YWwgbnVtYmVyIG9mIGNvbG9y
IGJpdHMsIG5vdCBjb25zaWRlcmluZwotICAgIC8vIGNvbXBvbmVudHMgdGhhdCBhcmUgMCBvciBk
b24ndC1jYXJlLgotICAgIGZvciAoY29uc3QgRUdMaW50ICphdHRyID0gYXR0cmliTGlzdDsgYXR0
clswXSAhPSBFR0xfTk9ORTsgYXR0ciArPSAyKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJbMV0g
IT0gMCAmJiBhdHRyWzFdICE9IEVHTF9ET05UX0NBUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoYXR0clswXSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBFR0xf
UkVEX1NJWkU6ICAgICAgIG1XYW50UmVkID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRUdMX0dSRUVOX1NJWkU6ICAgICBtV2FudEdyZWVuID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX0JMVUVfU0laRTogICAgICBtV2FudEJsdWUgPSB0cnVlOyBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfU0laRTogICAgIG1XYW50QWxwaGEgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6IG1XYW50THVt
aW5hbmNlID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLUVHTGludCBTb3J0Q29uZmlnOjp3YW50ZWRDb21wb25lbnRzU2l6ZShjb25zdCBDb25maWcg
JmNvbmZpZykgY29uc3QKLXsKLSAgICBFR0xpbnQgdG90YWwgPSAwOwotCi0gICAgaWYgKG1XYW50
UmVkKSAgICAgICB0b3RhbCArPSBjb25maWcubVJlZFNpemU7Ci0gICAgaWYgKG1XYW50R3JlZW4p
ICAgICB0b3RhbCArPSBjb25maWcubUdyZWVuU2l6ZTsKLSAgICBpZiAobVdhbnRCbHVlKSAgICAg
IHRvdGFsICs9IGNvbmZpZy5tQmx1ZVNpemU7Ci0gICAgaWYgKG1XYW50QWxwaGEpICAgICB0b3Rh
bCArPSBjb25maWcubUFscGhhU2l6ZTsKLSAgICBpZiAobVdhbnRMdW1pbmFuY2UpIHRvdGFsICs9
IGNvbmZpZy5tTHVtaW5hbmNlU2l6ZTsKLQotICAgIHJldHVybiB0b3RhbDsKLX0KLQotYm9vbCBT
b3J0Q29uZmlnOjpvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29uZmlnICp5KSBj
b25zdAotewotICAgIHJldHVybiAoKnRoaXMpKCp4LCAqeSk7Ci19Ci0KLWJvb2wgU29ydENvbmZp
Zzo6b3BlcmF0b3IoKShjb25zdCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAmeSkgY29uc3QKLXsK
LSAgICAjZGVmaW5lIFNPUlQoYXR0cmlidXRlKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgaWYgKHguYXR0cmlidXRlICE9IHkuYXR0cmlidXRlKSAgICAgICAgICAgIFwKLSAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIHJldHVybiB4LmF0dHJpYnV0ZSA8IHkuYXR0cmlidXRlOyAgICAgIFwKLSAgICAgICAgfQot
Ci0gICAgTUVUQV9BU1NFUlQoRUdMX05PTkUgPCBFR0xfU0xPV19DT05GSUcgJiYgRUdMX1NMT1df
Q09ORklHIDwgRUdMX05PTl9DT05GT1JNQU5UX0NPTkZJRyk7Ci0gICAgU09SVChtQ29uZmlnQ2F2
ZWF0KTsKLQotICAgIE1FVEFfQVNTRVJUKEVHTF9SR0JfQlVGRkVSIDwgRUdMX0xVTUlOQU5DRV9C
VUZGRVIpOwotICAgIFNPUlQobUNvbG9yQnVmZmVyVHlwZSk7Ci0KLSAgICAvLyBCeSBsYXJnZXIg
dG90YWwgbnVtYmVyIG9mIGNvbG9yIGJpdHMsIG9ubHkgY29uc2lkZXJpbmcgdGhvc2UgdGhhdCBh
cmUgcmVxdWVzdGVkIHRvIGJlID4gMC4KLSAgICBFR0xpbnQgeENvbXBvbmVudHNTaXplID0gd2Fu
dGVkQ29tcG9uZW50c1NpemUoeCk7Ci0gICAgRUdMaW50IHlDb21wb25lbnRzU2l6ZSA9IHdhbnRl
ZENvbXBvbmVudHNTaXplKHkpOwotICAgIGlmICh4Q29tcG9uZW50c1NpemUgIT0geUNvbXBvbmVu
dHNTaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHhDb21wb25lbnRzU2l6ZSA+IHlDb21wb25l
bnRzU2l6ZTsKLSAgICB9Ci0KLSAgICBTT1JUKG1CdWZmZXJTaXplKTsKLSAgICBTT1JUKG1TYW1w
bGVCdWZmZXJzKTsKLSAgICBTT1JUKG1TYW1wbGVzKTsKLSAgICBTT1JUKG1EZXB0aFNpemUpOwot
ICAgIFNPUlQobVN0ZW5jaWxTaXplKTsKLSAgICBTT1JUKG1BbHBoYU1hc2tTaXplKTsKLSAgICBT
T1JUKG1OYXRpdmVWaXN1YWxUeXBlKTsKLSAgICBTT1JUKG1Db25maWdJRCk7Ci0KLSAgICAjdW5k
ZWYgU09SVAotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBXZSdkIGxpa2UgdG8gdXNlIFNv
cnRDb25maWcgdG8gYWxzbyBlbGltaW5hdGUgZHVwbGljYXRlIGNvbmZpZ3MuCi0vLyBUaGlzIHdv
cmtzIGFzIGxvbmcgYXMgd2UgbmV2ZXIgaGF2ZSB0d28gY29uZmlncyB3aXRoIGRpZmZlcmVudCBw
ZXItUkdCLWNvbXBvbmVudCBsYXlvdXRzLAotLy8gYnV0IHRoZSBzYW1lIHRvdGFsLgotLy8gNTU1
MSBhbmQgNTY1IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBSK0crQiBpcyBkaWZmZXJlbnQuCi0vLyA1
NTUxIGFuZCA1NTUgYXJlIGRpZmZlcmVudCBiZWNhdXNlIGJ1ZmZlclNpemUgaXMgZGlmZmVyZW50
LgotY29uc3QgRUdMaW50IENvbmZpZ1NldDo6bVNvcnRBdHRyaWJzW10gPQotewotICAgIEVHTF9S
RURfU0laRSwgMSwKLSAgICBFR0xfR1JFRU5fU0laRSwgMSwKLSAgICBFR0xfQkxVRV9TSVpFLCAx
LAotICAgIEVHTF9MVU1JTkFOQ0VfU0laRSwgMSwKLSAgICAvLyBCVVQgTk9UIEFMUEhBCi0gICAg
RUdMX05PTkUKLX07Ci0KLUNvbmZpZ1NldDo6Q29uZmlnU2V0KCkKLSAgICA6IG1TZXQoU29ydENv
bmZpZyhtU29ydEF0dHJpYnMpKQotewotfQotCi12b2lkIENvbmZpZ1NldDo6YWRkKEQzRERJU1BM
QVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dh
cEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhT
dGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUsIEVHTGludCB0ZXhXaWR0aCwgRUdMaW50
IHRleEhlaWdodCkKLXsKLSAgICBDb25maWcgY29uZmlnKGRpc3BsYXlNb2RlLCBtaW5Td2FwSW50
ZXJ2YWwsIG1heFN3YXBJbnRlcnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxG
b3JtYXQsIG11bHRpU2FtcGxlLCB0ZXhXaWR0aCwgdGV4SGVpZ2h0KTsKLQotICAgIG1TZXQuaW5z
ZXJ0KGNvbmZpZyk7Ci19Ci0KLXNpemVfdCBDb25maWdTZXQ6OnNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBtU2V0LnNpemUoKTsKLX0KLQotYm9vbCBDb25maWdTZXQ6OmdldENvbmZpZ3MoRUdM
Q29uZmlnICpjb25maWdzLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QsIEVHTGludCBjb25maWdT
aXplLCBFR0xpbnQgKm51bUNvbmZpZykKLXsKLSAgICB2ZWN0b3I8Y29uc3QgQ29uZmlnKj4gcGFz
c2VkOwotICAgIHBhc3NlZC5yZXNlcnZlKG1TZXQuc2l6ZSgpKTsKLQotICAgIGZvciAoSXRlcmF0
b3IgY29uZmlnID0gbVNldC5iZWdpbigpOyBjb25maWcgIT0gbVNldC5lbmQoKTsgY29uZmlnKysp
Ci0gICAgewotICAgICAgICBib29sIG1hdGNoID0gdHJ1ZTsKLSAgICAgICAgY29uc3QgRUdMaW50
ICphdHRyaWJ1dGUgPSBhdHRyaWJMaXN0OwotCi0gICAgICAgIHdoaWxlIChhdHRyaWJ1dGVbMF0g
IT0gRUdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYXR0cmlidXRlWzBd
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEVHTF9CVUZGRVJfU0laRTogICAg
ICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUJ1ZmZlclNpemUgPj0gYXR0cmlidXRlWzFdOyAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFf
U0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBoYVNpemUgPj0gYXR0cmli
dXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
RUdMX0JMVUVfU0laRTogICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQmx1ZVNpemUg
Pj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVHTF9HUkVFTl9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+
bUdyZWVuU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBFR0xfUkVEX1NJWkU6ICAgICAgICAgICAgICAgICAgbWF0Y2gg
PSBjb25maWctPm1SZWRTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0RFUFRIX1NJWkU6ICAgICAgICAgICAg
ICAgIG1hdGNoID0gY29uZmlnLT5tRGVwdGhTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9TVEVOQ0lMX1NJWkU6
ICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bVN0ZW5jaWxTaXplID49IGF0dHJpYnV0ZVsx
XTsgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQ09O
RklHX0NBVkVBVDogICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1Db25maWdDYXZlYXQgPT0g
KEVHTGVudW0pIGF0dHJpYnV0ZVsxXTsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRUdMX0NPTkZJR19JRDogICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29uZmln
SUQgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEVHTF9MRVZFTDogICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bUxldmVsID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTkFUSVZFX1JFTkRFUkFCTEU6ICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1OYXRpdmVSZW5kZXJhYmxlID09IChFR0xCb29sZWFuKSBhdHRyaWJ1dGVb
MV07ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX05BVElWRV9WSVNVQUxfVFlQRTog
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tTmF0aXZlVmlzdWFsVHlwZSA9PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9TQU1QTEVTOiAg
ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bVNhbXBsZXMgPj0gYXR0cmlidXRlWzFd
OyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xf
U0FNUExFX0JVRkZFUlM6ICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1TYW1wbGVCdWZmZXJz
ID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRUdMX1NVUkZBQ0VfVFlQRTogICAgICAgICAgICAgIG1hdGNoID0gKGNvbmZpZy0+bVN1
cmZhY2VUeXBlICYgYXR0cmlidXRlWzFdKSA9PSBhdHRyaWJ1dGVbMV07ICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9UWVBFOiAgICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bVRyYW5zcGFyZW50VHlwZSA9PSAoRUdMZW51bSkgYXR0cmlidXRlWzFdOyAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfQkxVRV9WQUxVRTogICAg
bWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudEJsdWVWYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0dSRUVO
X1ZBTFVFOiAgIG1hdGNoID0gY29uZmlnLT5tVHJhbnNwYXJlbnRHcmVlblZhbHVlID09IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BB
UkVOVF9SRURfVkFMVUU6ICAgICBtYXRjaCA9IGNvbmZpZy0+bVRyYW5zcGFyZW50UmVkVmFsdWUg
PT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
R0xfQklORF9UT19URVhUVVJFX1JHQjogICAgICAgbWF0Y2ggPSBjb25maWctPm1CaW5kVG9UZXh0
dXJlUkdCID09IChFR0xCb29sZWFuKSBhdHRyaWJ1dGVbMV07ICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0JBOiAgICAgIG1hdGNoID0gY29uZmlnLT5t
QmluZFRvVGV4dHVyZVJHQkEgPT0gKEVHTEJvb2xlYW4pIGF0dHJpYnV0ZVsxXTsgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVHTF9NSU5fU1dBUF9JTlRFUlZBTDogICAgICAgICBtYXRjaCA9
IGNvbmZpZy0+bU1pblN3YXBJbnRlcnZhbCA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTUFYX1NXQVBfSU5URVJWQUw6ICAgICAg
ICAgbWF0Y2ggPSBjb25maWctPm1NYXhTd2FwSW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpF
OiAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTHVtaW5hbmNlU2l6ZSA+PSBhdHRyaWJ1dGVb
MV07ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9BTFBI
QV9NQVNLX1NJWkU6ICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUFscGhhTWFza1NpemUgPj0g
YXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFR0xfQ09MT1JfQlVGRkVSX1RZUEU6ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1Db2xvckJ1
ZmZlclR5cGUgPT0gKEVHTGVudW0pIGF0dHJpYnV0ZVsxXTsgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX1JFTkRFUkFCTEVfVFlQRTogICAgICAgICAgIG1hdGNoID0gKGNvbmZp
Zy0+bVJlbmRlcmFibGVUeXBlICYgYXR0cmlidXRlWzFdKSA9PSBhdHRyaWJ1dGVbMV07IGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEVHTF9NQVRDSF9OQVRJVkVfUElYTUFQOiAgICAgICBtYXRj
aCA9IGZhbHNlOyBVTklNUExFTUVOVEVEKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQ09ORk9STUFOVDogICAgICAgICAg
ICAgICAgbWF0Y2ggPSAoY29uZmlnLT5tQ29uZm9ybWFudCAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0
cmlidXRlWzFdOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX01BWF9QQlVGRkVS
X1dJRFRIOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTWF4UEJ1ZmZlcldpZHRoID49IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9N
QVhfUEJVRkZFUl9IRUlHSFQ6ICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bU1heFBCdWZmZXJIZWln
aHQgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfTUFYX1BCVUZGRVJfUElYRUxTOiAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NYXhQ
QnVmZmVyUGl4ZWxzID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW1hdGNoKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdHRyaWJ1dGUg
Kz0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcGFzc2VkLnB1c2hfYmFjaygmKmNvbmZpZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoY29uZmlncykKLSAgICB7Ci0gICAgICAgIHNvcnQocGFzc2VkLmJlZ2luKCksIHBhc3Nl
ZC5lbmQoKSwgU29ydENvbmZpZyhhdHRyaWJMaXN0KSk7Ci0KLSAgICAgICAgRUdMaW50IGluZGV4
OwotICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb25maWdTaXplICYmIGluZGV4IDwg
c3RhdGljX2Nhc3Q8RUdMaW50PihwYXNzZWQuc2l6ZSgpKTsgaW5kZXgrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgY29uZmlnc1tpbmRleF0gPSBwYXNzZWRbaW5kZXhdLT5nZXRIYW5kbGUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgICpudW1Db25maWcgPSBpbmRleDsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgKm51bUNvbmZpZyA9IHBhc3NlZC5zaXplKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNvbnN0IGVnbDo6Q29uZmlnICpDb25maWdTZXQ6OmdldChF
R0xDb25maWcgY29uZmlnSGFuZGxlKQotewotICAgIGZvciAoSXRlcmF0b3IgY29uZmlnID0gbVNl
dC5iZWdpbigpOyBjb25maWcgIT0gbVNldC5lbmQoKTsgY29uZmlnKyspCi0gICAgewotICAgICAg
ICBpZiAoY29uZmlnLT5nZXRIYW5kbGUoKSA9PSBjb25maWdIYW5kbGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAmKCpjb25maWcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIE5VTEw7Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0NvbmZpZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25m
aWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2MjZlZC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbmZpZy5oOiBE
ZWZpbmVzIHRoZSBlZ2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0aGUgZm9ybWF0LCB0eXBl
Ci0vLyBhbmQgc2l6ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1lbnRzIEVHTENvbmZpZyBh
bmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgotLy8gW0VHTCAxLjRdIHNlY3Rpb24gMy40IHBhZ2Ug
MTUuCi0KLSNpZm5kZWYgSU5DTFVERV9DT05GSUdfSF8KLSNkZWZpbmUgSU5DTFVERV9DT05GSUdf
SF8KLQotI2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8ZDNk
OS5oPgotCi0jaW5jbHVkZSA8c2V0PgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
LQotbmFtZXNwYWNlIGVnbAotewotY2xhc3MgRGlzcGxheTsKLQotY2xhc3MgQ29uZmlnCi17Ci0g
IHB1YmxpYzoKLSAgICBDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBt
aW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJU
YXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNh
bXBsZSwgRUdMaW50IHRleFdpZHRoLCBFR0xpbnQgdGV4SGVpZ2h0KTsKLQotICAgIHZvaWQgc2V0
RGVmYXVsdHMoKTsKLSAgICB2b2lkIHNldChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdM
aW50IG1pblN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFUIHJl
bmRlclRhcmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11
bHRpU2FtcGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWlnaHQpOwotICAgIEVHTENv
bmZpZyBnZXRIYW5kbGUoKSBjb25zdDsKLQotICAgIGNvbnN0IEQzRERJU1BMQVlNT0RFIG1EaXNw
bGF5TW9kZTsKLSAgICBjb25zdCBEM0RGT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKLSAgICBj
b25zdCBEM0RGT1JNQVQgbURlcHRoU3RlbmNpbEZvcm1hdDsKLSAgICBjb25zdCBFR0xpbnQgbU11
bHRpU2FtcGxlOwotCi0gICAgRUdMaW50IG1CdWZmZXJTaXplOyAgICAgICAgICAgICAgLy8gRGVw
dGggb2YgdGhlIGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtUmVkU2l6ZTsgICAgICAgICAgICAg
ICAgIC8vIEJpdHMgb2YgUmVkIGluIHRoZSBjb2xvciBidWZmZXIKLSAgICBFR0xpbnQgbUdyZWVu
U2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEdyZWVuIGluIHRoZSBjb2xvciBidWZmZXIK
LSAgICBFR0xpbnQgbUJsdWVTaXplOyAgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEJsdWUgaW4g
dGhlIGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtTHVtaW5hbmNlU2l6ZTsgICAgICAgICAgIC8v
IEJpdHMgb2YgTHVtaW5hbmNlIGluIHRoZSBjb2xvciBidWZmZXIKLSAgICBFR0xpbnQgbUFscGhh
U2l6ZTsgICAgICAgICAgICAgICAvLyBCaXRzIG9mIEFscGhhIGluIHRoZSBjb2xvciBidWZmZXIK
LSAgICBFR0xpbnQgbUFscGhhTWFza1NpemU7ICAgICAgICAgICAvLyBCaXRzIG9mIEFscGhhIE1h
c2sgaW4gdGhlIG1hc2sgYnVmZmVyCi0gICAgRUdMQm9vbGVhbiBtQmluZFRvVGV4dHVyZVJHQjsg
ICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0IgdGV4dHVyZXMuCi0gICAgRUdMQm9vbGVhbiBt
QmluZFRvVGV4dHVyZVJHQkE7ICAgLy8gVHJ1ZSBpZiBiaW5kYWJsZSB0byBSR0JBIHRleHR1cmVz
LgotICAgIEVHTGVudW0gbUNvbG9yQnVmZmVyVHlwZTsgICAgICAgIC8vIENvbG9yIGJ1ZmZlciB0
eXBlCi0gICAgRUdMZW51bSBtQ29uZmlnQ2F2ZWF0OyAgICAgICAgICAgLy8gQW55IGNhdmVhdHMg
Zm9yIHRoZSBjb25maWd1cmF0aW9uCi0gICAgRUdMaW50IG1Db25maWdJRDsgICAgICAgICAgICAg
ICAgLy8gVW5pcXVlIEVHTENvbmZpZyBpZGVudGlmaWVyCi0gICAgRUdMaW50IG1Db25mb3JtYW50
OyAgICAgICAgICAgICAgLy8gV2hldGhlciBjb250ZXh0cyBjcmVhdGVkIHdpdGggdGhpcyBjb25m
aWcgYXJlIGNvbmZvcm1hbnQKLSAgICBFR0xpbnQgbURlcHRoU2l6ZTsgICAgICAgICAgICAgICAv
LyBCaXRzIG9mIFogaW4gdGhlIGRlcHRoIGJ1ZmZlcgotICAgIEVHTGludCBtTGV2ZWw7ICAgICAg
ICAgICAgICAgICAgIC8vIEZyYW1lIGJ1ZmZlciBsZXZlbAotICAgIEVHTEJvb2xlYW4gbU1hdGNo
TmF0aXZlUGl4bWFwOyAgIC8vIE1hdGNoIHRoZSBuYXRpdmUgcGl4bWFwIGZvcm1hdAotICAgIEVH
TGludCBtTWF4UEJ1ZmZlcldpZHRoOyAgICAgICAgIC8vIE1heGltdW0gd2lkdGggb2YgcGJ1ZmZl
cgotICAgIEVHTGludCBtTWF4UEJ1ZmZlckhlaWdodDsgICAgICAgIC8vIE1heGltdW0gaGVpZ2h0
IG9mIHBidWZmZXIKLSAgICBFR0xpbnQgbU1heFBCdWZmZXJQaXhlbHM7ICAgICAgICAvLyBNYXhp
bXVtIHNpemUgb2YgcGJ1ZmZlcgotICAgIEVHTGludCBtTWF4U3dhcEludGVydmFsOyAgICAgICAg
IC8vIE1heGltdW0gc3dhcCBpbnRlcnZhbAotICAgIEVHTGludCBtTWluU3dhcEludGVydmFsOyAg
ICAgICAgIC8vIE1pbmltdW0gc3dhcCBpbnRlcnZhbAotICAgIEVHTEJvb2xlYW4gbU5hdGl2ZVJl
bmRlcmFibGU7ICAgIC8vIEVHTF9UUlVFIGlmIG5hdGl2ZSByZW5kZXJpbmcgQVBJcyBjYW4gcmVu
ZGVyIHRvIHN1cmZhY2UKLSAgICBFR0xpbnQgbU5hdGl2ZVZpc3VhbElEOyAgICAgICAgICAvLyBI
YW5kbGUgb2YgY29ycmVzcG9uZGluZyBuYXRpdmUgdmlzdWFsCi0gICAgRUdMaW50IG1OYXRpdmVW
aXN1YWxUeXBlOyAgICAgICAgLy8gTmF0aXZlIHZpc3VhbCB0eXBlIG9mIHRoZSBhc3NvY2lhdGVk
IHZpc3VhbAotICAgIEVHTGludCBtUmVuZGVyYWJsZVR5cGU7ICAgICAgICAgIC8vIFdoaWNoIGNs
aWVudCByZW5kZXJpbmcgQVBJcyBhcmUgc3VwcG9ydGVkLgotICAgIEVHTGludCBtU2FtcGxlQnVm
ZmVyczsgICAgICAgICAgIC8vIE51bWJlciBvZiBtdWx0aXNhbXBsZSBidWZmZXJzCi0gICAgRUdM
aW50IG1TYW1wbGVzOyAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHBp
eGVsCi0gICAgRUdMaW50IG1TdGVuY2lsU2l6ZTsgICAgICAgICAgICAgLy8gQml0cyBvZiBTdGVu
Y2lsIGluIHRoZSBzdGVuY2lsIGJ1ZmZlcgotICAgIEVHTGludCBtU3VyZmFjZVR5cGU7ICAgICAg
ICAgICAgIC8vIFdoaWNoIHR5cGVzIG9mIEVHTCBzdXJmYWNlcyBhcmUgc3VwcG9ydGVkLgotICAg
IEVHTGVudW0gbVRyYW5zcGFyZW50VHlwZTsgICAgICAgIC8vIFR5cGUgb2YgdHJhbnNwYXJlbmN5
IHN1cHBvcnRlZAotICAgIEVHTGludCBtVHJhbnNwYXJlbnRSZWRWYWx1ZTsgICAgIC8vIFRyYW5z
cGFyZW50IHJlZCB2YWx1ZQotICAgIEVHTGludCBtVHJhbnNwYXJlbnRHcmVlblZhbHVlOyAgIC8v
IFRyYW5zcGFyZW50IGdyZWVuIHZhbHVlCi0gICAgRUdMaW50IG1UcmFuc3BhcmVudEJsdWVWYWx1
ZTsgICAgLy8gVHJhbnNwYXJlbnQgYmx1ZSB2YWx1ZQotfTsKLQotLy8gRnVuY3Rpb24gb2JqZWN0
IHVzZWQgYnkgU1RMIHNvcnRpbmcgcm91dGluZXMgZm9yIG9yZGVyaW5nIENvbmZpZ3MgYWNjb3Jk
aW5nIHRvIFtFR0xdIHNlY3Rpb24gMy40LjEgcGFnZSAyNC4KLWNsYXNzIFNvcnRDb25maWcKLXsK
LSAgcHVibGljOgotICAgIGV4cGxpY2l0IFNvcnRDb25maWcoY29uc3QgRUdMaW50ICphdHRyaWJM
aXN0KTsKLQotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDb25maWcgKngsIGNvbnN0IENvbmZp
ZyAqeSkgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENvbmZpZyAmeCwgY29uc3Qg
Q29uZmlnICZ5KSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIHZvaWQgc2NhbkZvcldhbnRlZENv
bXBvbmVudHMoY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKLSAgICBFR0xpbnQgd2FudGVkQ29t
cG9uZW50c1NpemUoY29uc3QgQ29uZmlnICZjb25maWcpIGNvbnN0OwotCi0gICAgYm9vbCBtV2Fu
dFJlZDsKLSAgICBib29sIG1XYW50R3JlZW47Ci0gICAgYm9vbCBtV2FudEJsdWU7Ci0gICAgYm9v
bCBtV2FudEFscGhhOwotICAgIGJvb2wgbVdhbnRMdW1pbmFuY2U7Ci19OwotCi1jbGFzcyBDb25m
aWdTZXQKLXsKLSAgICBmcmllbmQgRGlzcGxheTsKLQotICBwdWJsaWM6Ci0gICAgQ29uZmlnU2V0
KCk7Ci0KLSAgICB2b2lkIGFkZChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TW9kZSwgRUdMaW50IG1p
blN3YXBJbnRlcnZhbCwgRUdMaW50IG1heFN3YXBJbnRlcnZhbCwgRDNERk9STUFUIHJlbmRlclRh
cmdldEZvcm1hdCwgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCwgRUdMaW50IG11bHRpU2Ft
cGxlLCBFR0xpbnQgdGV4V2lkdGgsIEVHTGludCB0ZXhIZWlnaHQpOwotICAgIHNpemVfdCBzaXpl
KCkgY29uc3Q7Ci0gICAgYm9vbCBnZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3Qg
RUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcp
OwotICAgIGNvbnN0IGVnbDo6Q29uZmlnICpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7Ci0K
LSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29uZmlnU2V0KTsKLQot
ICAgIHR5cGVkZWYgc3RkOjpzZXQ8Q29uZmlnLCBTb3J0Q29uZmlnPiBTZXQ7Ci0gICAgdHlwZWRl
ZiBTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIFNldCBtU2V0OwotCi0gICAgc3RhdGljIGNv
bnN0IEVHTGludCBtU29ydEF0dHJpYnNbXTsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIElOQ0xVREVf
Q09ORklHX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjMGI5My4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTI1MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBEaXNwbGF5
LmNwcDogSW1wbGVtZW50cyB0aGUgZWdsOjpEaXNwbGF5IGNsYXNzLCByZXByZXNlbnRpbmcgdGhl
IGFic3RyYWN0Ci0vLyBkaXNwbGF5IG9uIHdoaWNoIGdyYXBoaWNzIGFyZSBkcmF3bi4gSW1wbGVt
ZW50cyBFR0xEaXNwbGF5LgotLy8gW0VHTCAxLjRdIHNlY3Rpb24gMi4xLjIgcGFnZSAzLgotCi0j
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNs
dWRlIDxtYXA+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0
aWxpdGllcy5oIgotCi0jaW5jbHVkZSAibGliRUdML21haW4uaCIKLQotLy8gQ2FuIGFsc28gYmUg
ZW5hYmxlZCBieSBkZWZpbmluZyBGT1JDRV9SRUZfUkFTVCBpbiB0aGUgcHJvamVjdCdzIHByZWRl
ZmluZWQgbWFjcm9zCi0jZGVmaW5lIFJFRl9SQVNUIDAKLQotLy8gVGhlICJEZWJ1ZyBUaGlzIFBp
eGVsLi4uIiBmZWF0dXJlIGluIFBJWCBvZnRlbiBmYWlscyB3aGVuIHVzaW5nIHRoZQotLy8gRDNE
OUV4IGludGVyZmFjZXMuICBJbiBvcmRlciB0byBnZXQgZGVidWcgcGl4ZWwgdG8gd29yayBvbiBh
IFZpc3RhL1dpbiA3Ci0vLyBtYWNoaW5lLCBkZWZpbmUgIkFOR0xFX0VOQUJMRV9EM0Q5RVg9MCIg
aW4geW91ciBwcm9qZWN0IGZpbGUuCi0jaWYgIWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkK
LS8vIEVuYWJsZXMgdXNlIG9mIHRoZSBJRGlyZWN0M0Q5RXggaW50ZXJmYWNlLCB3aGVuIGF2YWls
YWJsZQotI2RlZmluZSBBTkdMRV9FTkFCTEVfRDNEOUVYIDEKLSNlbmRpZiAvLyAhZGVmaW5lZChB
TkdMRV9FTkFCTEVfRDNEOUVYKQotCi1uYW1lc3BhY2UgZWdsCi17Ci1uYW1lc3BhY2UKLXsKLSAg
ICB0eXBlZGVmIHN0ZDo6bWFwPEVHTE5hdGl2ZURpc3BsYXlUeXBlLCBEaXNwbGF5Kj4gRGlzcGxh
eU1hcDsgCi0gICAgRGlzcGxheU1hcCBkaXNwbGF5czsKLX0KLQotZWdsOjpEaXNwbGF5ICpEaXNw
bGF5OjpnZXREaXNwbGF5KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCkKLXsKLSAgICBp
ZiAoZGlzcGxheXMuZmluZChkaXNwbGF5SWQpICE9IGRpc3BsYXlzLmVuZCgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGRpc3BsYXlzW2Rpc3BsYXlJZF07Ci0gICAgfQotCi0gICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gTlVMTDsKLQotICAgIGlmIChkaXNwbGF5SWQgPT0gRUdMX0RFRkFVTFRf
RElTUExBWSkKLSAgICB7Ci0gICAgICAgIGRpc3BsYXkgPSBuZXcgZWdsOjpEaXNwbGF5KGRpc3Bs
YXlJZCwgKEhEQylOVUxMLCBmYWxzZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGRpc3BsYXlJZCA9
PSBFR0xfU09GVFdBUkVfRElTUExBWV9BTkdMRSkKLSAgICB7Ci0gICAgICAgIGRpc3BsYXkgPSBu
ZXcgZWdsOjpEaXNwbGF5KGRpc3BsYXlJZCwgKEhEQylOVUxMLCB0cnVlKTsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENoZWNrIGlmIGRpc3BsYXlJZCBpcyBhIHZh
bGlkIGRpc3BsYXkgZGV2aWNlIGNvbnRleHQKLQotICAgICAgICBkaXNwbGF5ID0gbmV3IGVnbDo6
RGlzcGxheShkaXNwbGF5SWQsIChIREMpZGlzcGxheUlkLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
ZGlzcGxheXNbZGlzcGxheUlkXSA9IGRpc3BsYXk7Ci0gICAgcmV0dXJuIGRpc3BsYXk7Ci19Ci0K
LURpc3BsYXk6OkRpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheUlkLCBIREMgZGV2
aWNlQ29udGV4dCwgYm9vbCBzb2Z0d2FyZSkgOiBtRGMoZGV2aWNlQ29udGV4dCkKLXsKLSAgICBt
RDNkOU1vZHVsZSA9IE5VTEw7Ci0gICAgCi0gICAgbUQzZDkgPSBOVUxMOwotICAgIG1EM2Q5RXgg
PSBOVUxMOwotICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIG1EZXZpY2VFeCA9IE5VTEw7Ci0gICAg
bURldmljZVdpbmRvdyA9IE5VTEw7Ci0KLSAgICBtQWRhcHRlciA9IEQzREFEQVBURVJfREVGQVVM
VDsKLQotICAgICNpZiBSRUZfUkFTVCA9PSAxIHx8IGRlZmluZWQoRk9SQ0VfUkVGX1JBU1QpCi0g
ICAgICAgIG1EZXZpY2VUeXBlID0gRDNEREVWVFlQRV9SRUY7Ci0gICAgI2Vsc2UKLSAgICAgICAg
bURldmljZVR5cGUgPSBEM0RERVZUWVBFX0hBTDsKLSAgICAjZW5kaWYKLQotICAgIG1NaW5Td2Fw
SW50ZXJ2YWwgPSAxOwotICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAxOwotICAgIG1Tb2Z0d2FyZURl
dmljZSA9IHNvZnR3YXJlOwotICAgIG1EaXNwbGF5SWQgPSBkaXNwbGF5SWQ7Ci0gICAgbURldmlj
ZUxvc3QgPSBmYWxzZTsKLX0KLQotRGlzcGxheTo6fkRpc3BsYXkoKQotewotICAgIHRlcm1pbmF0
ZSgpOwotCi0gICAgRGlzcGxheU1hcDo6aXRlcmF0b3IgdGhpc0Rpc3BsYXkgPSBkaXNwbGF5cy5m
aW5kKG1EaXNwbGF5SWQpOwotCi0gICAgaWYgKHRoaXNEaXNwbGF5ICE9IGRpc3BsYXlzLmVuZCgp
KQotICAgIHsKLSAgICAgIGRpc3BsYXlzLmVyYXNlKHRoaXNEaXNwbGF5KTsKLSAgICB9Ci19Ci0K
LWJvb2wgRGlzcGxheTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtU29mdHdhcmVE
ZXZpY2UpCi0gICAgewotICAgICAgbUQzZDlNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgi
c3dpZnRzaGFkZXJfZDNkOS5kbGwiKSk7Ci0gICAgfSAKLSAgICBlbHNlCi0gICAgewotICAgICAg
bUQzZDlNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoVEVYVCgiZDNkOS5kbGwiKSk7Ci0gICAgfQot
ICAgIGlmIChtRDNkOU1vZHVsZSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgdGVybWluYXRlKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIEhSRVNVTFQgKFdJ
TkFQSSAqRGlyZWN0M0RDcmVhdGU5RXhGdW5jKShVSU5ULCBJRGlyZWN0M0Q5RXgqKik7Ci0gICAg
RGlyZWN0M0RDcmVhdGU5RXhGdW5jIERpcmVjdDNEQ3JlYXRlOUV4UHRyID0gcmVpbnRlcnByZXRf
Y2FzdDxEaXJlY3QzRENyZWF0ZTlFeEZ1bmM+KEdldFByb2NBZGRyZXNzKG1EM2Q5TW9kdWxlLCAi
RGlyZWN0M0RDcmVhdGU5RXgiKSk7Ci0KLSAgICAvLyBVc2UgRGlyZWN0M0Q5RXggaWYgYXZhaWxh
YmxlLiBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgdmVyc2lvbiBpcyBsZXNzCi0gICAgLy8gaW5j
bGluZWQgdG8gcmVwb3J0IGEgbG9zdCBjb250ZXh0LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSB1c2Vy
IHN3aXRjaGVzCi0gICAgLy8gZGVza3RvcC4gRGlyZWN0M0Q5RXggaXMgYXZhaWxhYmxlIGluIFdp
bmRvd3MgVmlzdGEgYW5kIGxhdGVyIGlmIHN1aXRhYmxlIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS4K
LSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDlFWCAmJiBEaXJlY3QzRENyZWF0ZTlFeFB0ciAmJiBT
VUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIoRDNEX1NES19WRVJTSU9OLCAmbUQzZDlFeCkp
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1EM2Q5RXgpOwotICAgICAgICBtRDNkOUV4LT5RdWVy
eUludGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtRDNk
OSkpOwotICAgICAgICBBU1NFUlQobUQzZDkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOShEM0RfU0RLX1ZFUlNJT04pOwotICAgIH0KLQot
ICAgIGlmIChtRDNkOSkKLSAgICB7Ci0gICAgICAgIGlmIChtRGMgIT0gTlVMTCkKLSAgICAgICAg
ewotICAgICAgICAvLyAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgd2hp
Y2ggYWRhcHRlciBpbmRleCB0aGUgZGV2aWNlIGNvbnRleHQgY29ycmVzcG9uZHMgdG8KLSAgICAg
ICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotICAgICAgICAKLSAgICAgICAgLy8gR2l2
ZSB1cCBvbiBnZXR0aW5nIGRldmljZSBjYXBzIGFmdGVyIGFib3V0IG9uZSBzZWNvbmQuCi0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVzdWx0ID0gbUQzZDktPkdldERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURl
dmljZUNhcHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gRDNERVJSX05PVEFWQUlMQUJMRSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTbGVlcCgxMDApOyAgIC8vIEdpdmUgdGhlIGRy
aXZlciBzb21lIHRpbWUgdG8gaW5pdGlhbGl6ZS9yZWNvdmVyCi0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkgICAvLyBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSwgRV9PVVRPRk1FTU9SWSwgRDNERVJSX0lOVkFMSURERVZJQ0UsIG9yIGFub3RoZXIgZXJy
b3Igd2UgY2FuJ3QgcmVjb3ZlciBmcm9tCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dGVybWluYXRlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtRGV2aWNl
Q2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPCBEM0RQU19WRVJTSU9OKDIsIDApKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0ZXJtaW5hdGUoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Tk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXaGVuIERp
cmVjdFg5IGlzIHJ1bm5pbmcgd2l0aCBhbiBvbGRlciBEaXJlY3RYOCBkcml2ZXIsIGEgU3RyZXRj
aFJlY3QgZnJvbSBhIHJlZ3VsYXIgdGV4dHVyZSB0byBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBp
cyBub3Qgc3VwcG9ydGVkLgotICAgICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUy
RDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0LgotICAgICAgICBpZiAoKG1EZXZpY2VDYXBzLkRldkNh
cHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NUUkVUQ0hSRUNUX0ZST01fVEVYVFVSRVMpID09IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9OT1RfSU5JVElBTElaRUQsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1N
aW5Td2FwSW50ZXJ2YWwgPSA0OwotICAgICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKLQotICAg
ICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9J
TlRFUlZBTF9JTU1FRElBVEUpIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJ
bnRlcnZhbCwgMCk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFs
LCAwKTt9Ci0gICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBE
M0RQUkVTRU5UX0lOVEVSVkFMX09ORSkgICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1p
bihtTWluU3dhcEludGVydmFsLCAxKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhT
d2FwSW50ZXJ2YWwsIDEpO30KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbklu
dGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPKSAgICAgICB7bU1pblN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDIpOyBtTWF4U3dhcEludGVydmFsID0gc3Rk
OjptYXgobU1heFN3YXBJbnRlcnZhbCwgMik7fQotICAgICAgICBpZiAobURldmljZUNhcHMuUHJl
c2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRSkgICAgIHttTWlu
U3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMyk7IG1NYXhTd2FwSW50
ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAzKTt9Ci0gICAgICAgIGlmIChtRGV2
aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVIp
ICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCA0KTsg
bU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpO30KLQotICAg
ICAgICBtRDNkOS0+R2V0QWRhcHRlcklkZW50aWZpZXIobUFkYXB0ZXIsIDAsICZtQWRhcHRlcklk
ZW50aWZpZXIpOwotCi0gICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXRz
W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGTVRfQTFSNUc1QjUsCi0gICAgICAgIC8v
ICBEM0RGTVRfQTJSMTBHMTBCMTAsICAgLy8gVGhlIGNvbG9yX3JhbXAgY29uZm9ybWFuY2UgdGVz
dCB1c2VzIFJlYWRQaXhlbHMgd2l0aCBVTlNJR05FRF9CWVRFIGNhdXNpbmcgaXQgdG8gdGhpbmsg
dGhhdCByZW5kZXJpbmcgc2tpcHBlZCBhIGNvbG91ciB2YWx1ZS4KLSAgICAgICAgICAgIEQzREZN
VF9BOFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCi0gICAgICAgIC8vICBEM0RG
TVRfWDFSNUc1QjUsICAgICAgLy8gSGFzIG5vIGNvbXBhdGlibGUgT3BlbkdMIEVTIHJlbmRlcmJ1
ZmZlciBmb3JtYXQKLSAgICAgICAgICAgIEQzREZNVF9YOFI4RzhCOAotICAgICAgICB9OwotCi0g
ICAgICAgIGNvbnN0IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXRzW10gPQotICAgICAgICB7
Ci0gICAgICAgICAgICBEM0RGTVRfVU5LTk9XTiwKLSAgICAgICAgLy8gIEQzREZNVF9EMTZfTE9D
S0FCTEUsCi0gICAgICAgICAgICBEM0RGTVRfRDMyLAotICAgICAgICAvLyAgRDNERk1UX0QxNVMx
LAotICAgICAgICAgICAgRDNERk1UX0QyNFM4LAotICAgICAgICAgICAgRDNERk1UX0QyNFg4LAot
ICAgICAgICAvLyAgRDNERk1UX0QyNFg0UzQsCi0gICAgICAgICAgICBEM0RGTVRfRDE2LAotICAg
ICAgICAvLyAgRDNERk1UX0QzMkZfTE9DS0FCTEUsCi0gICAgICAgIC8vICBEM0RGTVRfRDI0RlM4
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2Rl
OwotICAgICAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVu
dERpc3BsYXlNb2RlKTsKLQotICAgICAgICBDb25maWdTZXQgY29uZmlnU2V0OwotCi0gICAgICAg
IGZvciAoaW50IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBzaXplb2YocmVuZGVyVGFy
Z2V0Rm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsgZm9ybWF0SW5kZXgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9IHJlbmRlclRhcmdl
dEZvcm1hdHNbZm9ybWF0SW5kZXhdOwotCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfU1VSRkFDRSwg
cmVuZGVyVGFyZ2V0Rm9ybWF0KTsKLQotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGRlcHRoU3RlbmNpbElu
ZGV4ID0gMDsgZGVwdGhTdGVuY2lsSW5kZXggPCBzaXplb2YoZGVwdGhTdGVuY2lsRm9ybWF0cykg
LyBzaXplb2YoRDNERk9STUFUKTsgZGVwdGhTdGVuY2lsSW5kZXgrKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBk
ZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRoU3RlbmNpbEluZGV4XTsKLSAgICAgICAgICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBEM0RfT0s7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpZihkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfU1VSRkFDRSwg
ZGVwdGhTdGVuY2lsRm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IEQzREZNVF9V
TktOT1dOKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0
LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGVudW1l
cmF0ZSBtdWx0aS1zYW1wbGluZwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmln
U2V0LmFkZChjdXJyZW50RGlzcGxheU1vZGUsIG1NaW5Td2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50
ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNhcHMuTWF4VGV4dHVy
ZVdpZHRoLCBtRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdpdmUgdGhlIHNvcnRlZCBjb25maWdz
IGEgdW5pcXVlIElEIGFuZCBzdG9yZSB0aGVtIGludGVybmFsbHkKLSAgICAgICAgRUdMaW50IGlu
ZGV4ID0gMTsKLSAgICAgICAgZm9yIChDb25maWdTZXQ6Okl0ZXJhdG9yIGNvbmZpZyA9IGNvbmZp
Z1NldC5tU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBjb25maWdTZXQubVNldC5lbmQoKTsgY29uZmln
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmZpZyBjb25maWd1cmF0aW9uID0gKmNvbmZp
ZzsKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ubUNvbmZpZ0lEID0gaW5kZXg7Ci0gICAgICAg
ICAgICBpbmRleCsrOwotCi0gICAgICAgICAgICBtQ29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZp
Z3VyYXRpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkp
Ci0gICAgewotICAgICAgICB0ZXJtaW5hdGUoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwotCi0gICAgc3RhdGljIGNvbnN0IFRD
SEFSIHdpbmRvd05hbWVbXSA9IFRFWFQoIkFuZ2xlSGlkZGVuV2luZG93Iik7Ci0gICAgc3RhdGlj
IGNvbnN0IFRDSEFSIGNsYXNzTmFtZVtdID0gVEVYVCgiU1RBVElDIik7Ci0KLSAgICBtRGV2aWNl
V2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSwgY2xhc3NOYW1lLCB3aW5k
b3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAwLCAwLCAxLCAxLCBIV05EX01FU1NBR0Us
IE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVMTCk7Ci0KLSAgICBpZiAoIWNyZWF0ZURl
dmljZSgpKQotICAgIHsKLSAgICAgICAgdGVybWluYXRlKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBEaXNwbGF5Ojp0ZXJtaW5h
dGUoKQotewotICAgIHdoaWxlICghbVN1cmZhY2VTZXQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAg
IGRlc3Ryb3lTdXJmYWNlKCptU3VyZmFjZVNldC5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICB3aGls
ZSAoIW1Db250ZXh0U2V0LmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZXN0cm95Q29udGV4dCgq
bUNvbnRleHRTZXQuYmVnaW4oKSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRXZlbnRRdWVyeVBv
b2wuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5iYWNrKCktPlJlbGVh
c2UoKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQotCi0gICAg
aWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICAvLyBJZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJl
c2V0IGl0IGZpcnN0IHRvIHByZXZlbnQgbGVhdmluZyB0aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxl
IHN0YXRlCi0gICAgICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXNldERldmljZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+UmVsZWFz
ZSgpOwotICAgICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZUV4
KQotICAgIHsKLSAgICAgICAgbURldmljZUV4LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2VF
eCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EM2Q5KQotICAgIHsKLSAgICAgICAgbUQzZDkt
PlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDkgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGV2
aWNlV2luZG93KQotICAgIHsKLSAgICAgICAgRGVzdHJveVdpbmRvdyhtRGV2aWNlV2luZG93KTsK
LSAgICAgICAgbURldmljZVdpbmRvdyA9IE5VTEw7Ci0gICAgfQotICAgIAotICAgIGlmIChtRDNk
OUV4KQotICAgIHsKLSAgICAgICAgbUQzZDlFeC0+UmVsZWFzZSgpOwotICAgICAgICBtRDNkOUV4
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUQzZDlNb2R1bGUpCi0gICAgewotICAgICAgICBt
RDNkOU1vZHVsZSA9IE5VTEw7Ci0gICAgfQotfQotCi12b2lkIERpc3BsYXk6OnN0YXJ0U2NlbmUo
KQotewotICAgIGlmICghbVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAgICAgIGxvbmcgcmVzdWx0
ID0gbURldmljZS0+QmVnaW5TY2VuZSgpOwotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgZGVmZW5zaXZlIGNoZWNraW5nIGFnYWluc3QgdGhl
IGRldmljZSBiZWluZwotICAgICAgICAgICAgLy8gbG9zdCBhdCB1bmV4cGVjdGVkIHRpbWVzLgot
ICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgRGlzcGxheTo6ZW5kU2NlbmUoKQotewotICAgIGlmIChtU2NlbmVTdGFydGVkKQotICAg
IHsKLSAgICAgICAgLy8gRW5kU2NlbmUgY2FuIGZhaWwgaWYgdGhlIGRldmljZSB3YXMgbG9zdCwg
Zm9yIGV4YW1wbGUgZHVlCi0gICAgICAgIC8vIHRvIGEgVERSIGR1cmluZyBhIGRyYXcgY2FsbC4K
LSAgICAgICAgbURldmljZS0+RW5kU2NlbmUoKTsKLSAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZh
bHNlOwotICAgIH0KLX0KLQotYm9vbCBEaXNwbGF5OjpnZXRDb25maWdzKEVHTENvbmZpZyAqY29u
ZmlncywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50
ICpudW1Db25maWcpCi17Ci0gICAgcmV0dXJuIG1Db25maWdTZXQuZ2V0Q29uZmlncyhjb25maWdz
LCBhdHRyaWJMaXN0LCBjb25maWdTaXplLCBudW1Db25maWcpOwotfQotCi1ib29sIERpc3BsYXk6
OmdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKQotewotICAgIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uID0gbUNv
bmZpZ1NldC5nZXQoY29uZmlnKTsKLQotICAgIHN3aXRjaCAoYXR0cmlidXRlKQotICAgIHsKLSAg
ICAgIGNhc2UgRUdMX0JVRkZFUl9TSVpFOiAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1CdWZmZXJTaXplOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0FM
UEhBX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1BbHBoYVNp
emU7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0JMVUVfU0laRTogICAgICAg
ICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CbHVlU2l6ZTsgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1
ZSA9IGNvbmZpZ3VyYXRpb24tPm1HcmVlblNpemU7ICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1SZWRTaXplOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0RFUFRI
X1NJWkU6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1EZXB0aFNpemU7
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX1NURU5DSUxfU0laRTogICAgICAg
ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdGVuY2lsU2l6ZTsgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAgICAgICAgICp2YWx1ZSA9
IGNvbmZpZ3VyYXRpb24tPm1Db25maWdDYXZlYXQ7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRUdMX0NPTkZJR19JRDogICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24t
Pm1Db25maWdJRDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0xFVkVMOiAg
ICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1MZXZlbDsgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAgICAg
ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1OYXRpdmVSZW5kZXJhYmxlOyAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRUdMX05BVElWRV9WSVNVQUxfVFlQRTogICAgICAgICp2YWx1ZSA9IGNv
bmZpZ3VyYXRpb24tPm1OYXRpdmVWaXN1YWxUeXBlOyAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RUdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1T
YW1wbGVzOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX1NBTVBMRV9CVUZG
RVJTOiAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TYW1wbGVCdWZmZXJzOyAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX1NVUkZBQ0VfVFlQRTogICAgICAgICAgICAg
ICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1TdXJmYWNlVHlwZTsgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1RZUEU6ICAgICAgICAgICp2YWx1ZSA9IGNvbmZp
Z3VyYXRpb24tPm1UcmFuc3BhcmVudFR5cGU7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdM
X1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFu
c3BhcmVudEJsdWVWYWx1ZTsgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0dS
RUVOX1ZBTFVFOiAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudEdyZWVuVmFs
dWU7ICBicmVhazsKLSAgICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX1JFRF9WQUxVRTogICAgICp2
YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1UcmFuc3BhcmVudFJlZFZhbHVlOyAgICBicmVhazsKLSAg
ICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0I6ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3Vy
YXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0JJ
TkRfVE9fVEVYVFVSRV9SR0JBOiAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1CaW5kVG9U
ZXh0dXJlUkdCQTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX01JTl9TV0FQX0lOVEVSVkFM
OiAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NaW5Td2FwSW50ZXJ2YWw7ICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFMOiAgICAgICAgICp2YWx1
ZSA9IGNvbmZpZ3VyYXRpb24tPm1NYXhTd2FwSW50ZXJ2YWw7ICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRUdMX0xVTUlOQU5DRV9TSVpFOiAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRp
b24tPm1MdW1pbmFuY2VTaXplOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0FMUEhB
X01BU0tfU0laRTogICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1BbHBoYU1hc2tT
aXplOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0NPTE9SX0JVRkZFUl9UWVBFOiAg
ICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db2xvckJ1ZmZlclR5cGU7ICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRUdMX1JFTkRFUkFCTEVfVFlQRTogICAgICAgICAgICp2YWx1ZSA9
IGNvbmZpZ3VyYXRpb24tPm1SZW5kZXJhYmxlVHlwZTsgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRUdMX01BVENIX05BVElWRV9QSVhNQVA6ICAgICAgICp2YWx1ZSA9IGZhbHNlOyBVTklNUExF
TUVOVEVEKCk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX0NPTkZPUk1B
TlQ6ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1Db25mb3JtYW50OyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRUdMX01BWF9QQlVGRkVSX1dJRFRIOiAgICAg
ICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1NYXhQQnVmZmVyV2lkdGg7ICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRUdMX01BWF9QQlVGRkVSX0hFSUdIVDogICAgICAgICp2YWx1ZSA9IGNv
bmZpZ3VyYXRpb24tPm1NYXhQQnVmZmVySGVpZ2h0OyAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RUdMX01BWF9QQlVGRkVSX1BJWEVMUzogICAgICAgICp2YWx1ZSA9IGNvbmZpZ3VyYXRpb24tPm1N
YXhQQnVmZmVyUGl4ZWxzOyAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEaXNwbGF5
OjpjcmVhdGVEZXZpY2UoKQotewotICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFy
YW1ldGVycyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOwotICAgIERXT1JEIGJlaGF2
aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNEQ1JFQVRFX05PV0lORE9XQ0hB
TkdFUzsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRl
ciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVf
SEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORyB8IEQzRENSRUFURV9QVVJFREVWSUNFLCAmcHJlc2Vu
dFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVS
Ul9ERVZJQ0VMT1NUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAg
ICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURl
dmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9TT0ZUV0FSRV9WRVJURVhQUk9D
RVNTSU5HLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKLQotICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0
ID09IEQzREVSUl9OT1RBVkFJTEFCTEUgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAobUQzZDlFeCkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZt
RGV2aWNlRXgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQot
ICAgIGluaXRpYWxpemVEZXZpY2UoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBkbyBh
bnkgb25lLXRpbWUgZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyBOT1RFOiB0aGlzIGlzIGFsc28g
bmVlZGVkIGFmdGVyIGEgZGV2aWNlIGxvc3QvcmVzZXQKLS8vIHRvIHJlc2V0IHRoZSBzY2VuZSBz
dGF0dXMgYW5kIGVuc3VyZSB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIHJlc2V0Lgotdm9pZCBEaXNw
bGF5Ojppbml0aWFsaXplRGV2aWNlKCkKLXsKLSAgICAvLyBQZXJtYW5lbnQgbm9uLWRlZmF1bHQg
c3RhdGVzCi0gICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTUFJJVEVFTkFC
TEUsIFRSVUUpOwotICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0xBU1RQSVhFTCwg
RkFMU0UpOwotCi0gICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwotfQotCi1ib29sIERpc3BsYXk6
OnJlc2V0RGV2aWNlKCkKLXsKLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFt
ZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKLQotICAgIEhSRVNVTFQgcmVz
dWx0ID0gRDNEX09LOwotICAgIGJvb2wgbG9zdCA9IHRlc3REZXZpY2VMb3N0KCk7Ci0gICAgaW50
IGF0dGVtcHRzID0gMzsgICAgCi0KLSAgICB3aGlsZSAobG9zdCAmJiBhdHRlbXB0cyA+IDApCi0g
ICAgewotICAgICAgICBpZiAobURldmljZUV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBTbGVl
cCg1MDApOyAgIC8vIEdpdmUgdGhlIGdyYXBoaWNzIGRyaXZlciBzb21lIENQVSB0aW1lCi0gICAg
ICAgICAgICByZXN1bHQgPSBtRGV2aWNlRXgtPlJlc2V0RXgoJnByZXNlbnRQYXJhbWV0ZXJzLCBO
VUxMKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBncmFwaGljcyBk
cml2ZXIgc29tZSBDUFUgdGltZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlRl
c3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX0RFVklDRU5PVFJFU0VUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlJlc2V0KCZwcmVzZW50UGFyYW1ldGVycyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBsb3N0ID0gdGVzdERldmljZUxvc3QoKTsK
LSAgICAgICAgYXR0ZW1wdHMgLS07Ci0gICAgfQotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgRVJSKCJSZXNldC9SZXNldEV4IGZhaWxlZCBtdWx0aXBsZSB0aW1lczog
MHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICAvLyByZXNldCBkZXZpY2UgZGVmYXVsdHMKLSAgICBpbml0aWFs
aXplRGV2aWNlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRUdMU3VyZmFjZSBEaXNwbGF5
OjpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnLCBjb25z
dCBFR0xpbnQgKmF0dHJpYkxpc3QpCi17Ci0gICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9u
ID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKLSAgICBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCA9IEVHTF9GQUxTRTsKLQotICAgIGlmIChhdHRyaWJMaXN0KQotICAgIHsKLSAgICAgICAg
d2hpbGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGF0dHJpYkxpc3RbMF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
RUdMX1JFTkRFUl9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJMaXN0WzFd
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0JBQ0tfQlVG
RkVSOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
RUdMX1NJTkdMRV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7ICAgLy8gUmVuZGVyaW5nIGRpcmVjdGx5IHRvIGZy
b250IGJ1ZmZlciBub3Qgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19T
VVJGQUNFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JURURfTlY6Ci0gICAgICAg
ICAgICAgICAgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IGF0dHJpYkxpc3RbMV07Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0NPTE9SU1BBQ0U6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19TVVJGQUNF
KTsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVkdfQUxQSEFfRk9STUFUOgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRU
UklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF0
dHJpYkxpc3QgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChoYXNFeGlzdGluZ1dp
bmRvd1N1cmZhY2Uod2luZG93KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKHRlc3REZXZpY2VMb3N0
KCkpIAotICAgIHsKLSAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERldmljZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAgIH0KLQotICAgIFN1cmZhY2UgKnN1cmZhY2Ug
PSBuZXcgU3VyZmFjZSh0aGlzLCBjb25maWd1cmF0aW9uLCB3aW5kb3csIHBvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQpOwotCi0gICAgaWYgKCFzdXJmYWNlLT5pbml0aWFsaXplKCkpCi0gICAgewotICAg
ICAgICBkZWxldGUgc3VyZmFjZTsKLSAgICAgICAgcmV0dXJuIEVHTF9OT19TVVJGQUNFOwotICAg
IH0KLQotICAgIG1TdXJmYWNlU2V0Lmluc2VydChzdXJmYWNlKTsKLQotICAgIHJldHVybiBzdWNj
ZXNzKHN1cmZhY2UpOwotfQotCi1FR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZU9mZnNjcmVlblN1
cmZhY2UoRUdMQ29uZmlnIGNvbmZpZywgSEFORExFIHNoYXJlSGFuZGxlLCBjb25zdCBFR0xpbnQg
KmF0dHJpYkxpc3QpCi17Ci0gICAgRUdMaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBF
R0xlbnVtIHRleHR1cmVGb3JtYXQgPSBFR0xfTk9fVEVYVFVSRTsKLSAgICBFR0xlbnVtIHRleHR1
cmVUYXJnZXQgPSBFR0xfTk9fVEVYVFVSRTsKLSAgICBjb25zdCBDb25maWcgKmNvbmZpZ3VyYXRp
b24gPSBtQ29uZmlnU2V0LmdldChjb25maWcpOwotCi0gICAgaWYgKGF0dHJpYkxpc3QpCi0gICAg
ewotICAgICAgICB3aGlsZSAoKmF0dHJpYkxpc3QgIT0gRUdMX05PTkUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoYXR0cmliTGlzdFswXSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBFR0xfV0lEVEg6Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBhdHRyaWJMaXN0
WzFdOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9IRUlH
SFQ6Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gYXR0cmliTGlzdFsxXTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfTEFSR0VTVF9QQlVGRkVSOgotICAg
ICAgICAgICAgICAgIGlmIChhdHRyaWJMaXN0WzFdICE9IEVHTF9GQUxTRSkKLSAgICAgICAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9GT1JNQVQ6Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChhdHRyaWJMaXN0WzFdKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgRUdMX05PX1RFWFRVUkU6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVHTF9URVhU
VVJFX1JHQjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfUkdCQToKLSAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IGF0dHJpYkxpc3RbMV07Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEVHTF9URVhUVVJFX1RBUkdFVDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dHJp
Ykxpc3RbMV0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xf
Tk9fVEVYVFVSRToKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfMkQ6Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVUYXJnZXQgPSBhdHRyaWJMaXN0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0Up
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBFR0xfTUlQTUFQX1RFWFRVUkU6Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYkxp
c3RbMV0gIT0gRUdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0NPTE9SU1BBQ0U6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfVkdfQUxQSEFfRk9STUFUOgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VS
RkFDRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF0dHJpYkxpc3QgKz0gMjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0Up
OwotICAgIH0KLQotICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fU1VSRkFDRSk7Ci0g
ICAgfQotCi0gICAgaWYgKHRleHR1cmVGb3JtYXQgIT0gRUdMX05PX1RFWFRVUkUgJiYgIWdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkgJiYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6Omlz
UG93MihoZWlnaHQpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENI
LCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgaWYgKCh0ZXh0dXJlRm9ybWF0ICE9IEVH
TF9OT19URVhUVVJFICYmIHRleHR1cmVUYXJnZXQgPT0gRUdMX05PX1RFWFRVUkUpIHx8Ci0gICAg
ICAgICh0ZXh0dXJlRm9ybWF0ID09IEVHTF9OT19URVhUVVJFICYmIHRleHR1cmVUYXJnZXQgIT0g
RUdMX05PX1RFWFRVUkUpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAgICBpZiAoIShjb25maWd1cmF0aW9uLT5t
U3VyZmFjZVR5cGUgJiBFR0xfUEJVRkZFUl9CSVQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAgICBpZiAoKHRl
eHR1cmVGb3JtYXQgPT0gRUdMX1RFWFRVUkVfUkdCICYmIGNvbmZpZ3VyYXRpb24tPm1CaW5kVG9U
ZXh0dXJlUkdCICE9IEVHTF9UUlVFKSB8fAotICAgICAgICAodGV4dHVyZUZvcm1hdCA9PSBFR0xf
VEVYVFVSRV9SR0JBICYmIGNvbmZpZ3VyYXRpb24tPm1CaW5kVG9UZXh0dXJlUkdCQSAhPSBFR0xf
VFJVRSkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVH
TF9OT19TVVJGQUNFKTsKLSAgICB9Ci0KLSAgICBpZiAodGVzdERldmljZUxvc3QoKSkgCi0gICAg
ewotICAgICAgICBpZiAoIXJlc3RvcmVMb3N0RGV2aWNlKCkpCi0gICAgICAgICAgICByZXR1cm4g
RUdMX05PX1NVUkZBQ0U7Ci0gICAgfQotCi0gICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJm
YWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHNoYXJlSGFuZGxlLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0
dXJlRm9ybWF0LCB0ZXh0dXJlVGFyZ2V0KTsKLQotICAgIGlmICghc3VyZmFjZS0+aW5pdGlhbGl6
ZSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHN1cmZhY2U7Ci0gICAgICAgIHJldHVybiBFR0xf
Tk9fU1VSRkFDRTsKLSAgICB9Ci0KLSAgICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7Ci0K
LSAgICByZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKLX0KLQotRUdMQ29udGV4dCBEaXNwbGF5Ojpj
cmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpz
aGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKLXsKLSAg
ICBpZiAoIW1EZXZpY2UpCi0gICAgewotICAgICAgICBpZiAoIWNyZWF0ZURldmljZSgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBl
bHNlIGlmICh0ZXN0RGV2aWNlTG9zdCgpKSAgIC8vIExvc3QgZGV2aWNlCi0gICAgewotICAgICAg
ICBpZiAoIXJlc3RvcmVMb3N0RGV2aWNlKCkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnID0gbUNvbmZpZ1NldC5nZXQoY29u
ZmlnSGFuZGxlKTsKLQotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xDcmVhdGVDb250ZXh0
KGNvbmZpZywgc2hhcmVDb250ZXh0LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7Ci0gICAg
bUNvbnRleHRTZXQuaW5zZXJ0KGNvbnRleHQpOwotICAgIG1EZXZpY2VMb3N0ID0gZmFsc2U7Ci0K
LSAgICByZXR1cm4gY29udGV4dDsKLX0KLQotYm9vbCBEaXNwbGF5OjpyZXN0b3JlTG9zdERldmlj
ZSgpCi17Ci0gICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjdHggPSBtQ29udGV4dFNldC5i
ZWdpbigpOyBjdHggIT0gbUNvbnRleHRTZXQuZW5kKCk7IGN0eCsrKQotICAgIHsKLSAgICAgICAg
aWYgKCgqY3R4KS0+aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAvLyBJZiByZXNldCBub3RpZmljYXRpb25zIGhhdmUgYmVlbiByZXF1ZXN0
ZWQsIGFwcGxpY2F0aW9uIG11c3QgZGVsZXRlIGFsbCBjb250ZXh0cyBmaXJzdAotICAgIH0KLSAK
LSAgICAvLyBSZWxlYXNlIHN1cmZhY2UgcmVzb3VyY2VzIHRvIG1ha2UgdGhlIFJlc2V0KCkgc3Vj
Y2VlZAotICAgIGZvciAoU3VyZmFjZVNldDo6aXRlcmF0b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0
LmJlZ2luKCk7IHN1cmZhY2UgIT0gbVN1cmZhY2VTZXQuZW5kKCk7IHN1cmZhY2UrKykKLSAgICB7
Ci0gICAgICAgICgqc3VyZmFjZSktPnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1F
dmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLmJh
Y2soKS0+UmVsZWFzZSgpOwotICAgICAgICBtRXZlbnRRdWVyeVBvb2wucG9wX2JhY2soKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXJlc2V0RGV2aWNlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gUmVzdG9yZSBhbnkgc3VyZmFjZXMgdGhhdCBtYXkgaGF2ZSBi
ZWVuIGxvc3QKLSAgICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFj
ZVNldC5iZWdpbigpOyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCi0g
ICAgewotICAgICAgICAoKnN1cmZhY2UpLT5yZXNldFN3YXBDaGFpbigpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi0KLXZvaWQgRGlzcGxheTo6ZGVzdHJveVN1cmZhY2UoZWdsOjpT
dXJmYWNlICpzdXJmYWNlKQotewotICAgIGRlbGV0ZSBzdXJmYWNlOwotICAgIG1TdXJmYWNlU2V0
LmVyYXNlKHN1cmZhY2UpOwotfQotCi12b2lkIERpc3BsYXk6OmRlc3Ryb3lDb250ZXh0KGdsOjpD
b250ZXh0ICpjb250ZXh0KQotewotICAgIGdsRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAg
bUNvbnRleHRTZXQuZXJhc2UoY29udGV4dCk7Ci19Ci0KLXZvaWQgRGlzcGxheTo6bm90aWZ5RGV2
aWNlTG9zdCgpCi17Ci0gICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjb250ZXh0ID0gbUNv
bnRleHRTZXQuYmVnaW4oKTsgY29udGV4dCAhPSBtQ29udGV4dFNldC5lbmQoKTsgY29udGV4dCsr
KQotICAgIHsKLSAgICAgICAgKCpjb250ZXh0KS0+bWFya0NvbnRleHRMb3N0KCk7Ci0gICAgfQot
ICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKLSAgICBlcnJvcihFR0xfQ09OVEVYVF9MT1NUKTsKLX0K
LQotYm9vbCBEaXNwbGF5Ojppc0RldmljZUxvc3QoKQotewotICAgIHJldHVybiBtRGV2aWNlTG9z
dDsKLX0KLQotYm9vbCBEaXNwbGF5Ojppc0luaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUQzZDkgIT0gTlVMTCAmJiBtQ29uZmlnU2V0LnNpemUoKSA+IDA7Ci19Ci0KLWJvb2wgRGlz
cGxheTo6aXNWYWxpZENvbmZpZyhFR0xDb25maWcgY29uZmlnKQotewotICAgIHJldHVybiBtQ29u
ZmlnU2V0LmdldChjb25maWcpICE9IE5VTEw7Ci19Ci0KLWJvb2wgRGlzcGxheTo6aXNWYWxpZENv
bnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgcmV0dXJuIG1Db250ZXh0U2V0LmZp
bmQoY29udGV4dCkgIT0gbUNvbnRleHRTZXQuZW5kKCk7Ci19Ci0KLWJvb2wgRGlzcGxheTo6aXNW
YWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIHJldHVybiBtU3VyZmFj
ZVNldC5maW5kKHN1cmZhY2UpICE9IG1TdXJmYWNlU2V0LmVuZCgpOwotfQotCi1ib29sIERpc3Bs
YXk6Omhhc0V4aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdykKLXsKLSAgICBmb3IgKFN1
cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNl
ICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCi0gICAgewotICAgICAgICBpZiAoKCpz
dXJmYWNlKS0+Z2V0V2luZG93SGFuZGxlKCkgPT0gd2luZG93KQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotRUdMaW50IERpc3BsYXk6OmdldE1pblN3YXBJbnRlcnZhbCgpCi17Ci0gICAgcmV0dXJu
IG1NaW5Td2FwSW50ZXJ2YWw7Ci19Ci0KLUVHTGludCBEaXNwbGF5OjpnZXRNYXhTd2FwSW50ZXJ2
YWwoKQotewotICAgIHJldHVybiBtTWF4U3dhcEludGVydmFsOwotfQotCi1JRGlyZWN0M0REZXZp
Y2U5ICpEaXNwbGF5OjpnZXREZXZpY2UoKQotewotICAgIGlmICghbURldmljZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghY3JlYXRlRGV2aWNlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXZpY2U7Ci19Ci0KLUQz
RENBUFM5IERpc3BsYXk6OmdldERldmljZUNhcHMoKQotewotICAgIHJldHVybiBtRGV2aWNlQ2Fw
czsKLX0KLQotRDNEQURBUFRFUl9JREVOVElGSUVSOSAqRGlzcGxheTo6Z2V0QWRhcHRlcklkZW50
aWZpZXIoKQotewotICAgIHJldHVybiAmbUFkYXB0ZXJJZGVudGlmaWVyOwotfQotCi1ib29sIERp
c3BsYXk6OnRlc3REZXZpY2VMb3N0KCkKLXsKLSAgICBpZiAobURldmljZUV4KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEZBSUxFRChtRGV2aWNlRXgtPkNoZWNrRGV2aWNlU3RhdGUoTlVMTCkpOwot
ICAgIH0KLSAgICBlbHNlIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEZBSUxF
RChtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7ICAgLy8gTm8gZGV2aWNlIHlldCwgc28gbm8gcmVzZXQgcmVxdWlyZWQKLX0KLQotYm9v
bCBEaXNwbGF5Ojp0ZXN0RGV2aWNlUmVzZXR0YWJsZSgpCi17Ci0gICAgSFJFU1VMVCBzdGF0dXMg
PSBEM0RfT0s7Ci0KLSAgICBpZiAobURldmljZUV4KQotICAgIHsKLSAgICAgICAgc3RhdHVzID0g
bURldmljZUV4LT5DaGVja0RldmljZVN0YXRlKE5VTEwpOwotICAgIH0KLSAgICBlbHNlIGlmICht
RGV2aWNlKQotICAgIHsKLSAgICAgICAgc3RhdHVzID0gbURldmljZS0+VGVzdENvb3BlcmF0aXZl
TGV2ZWwoKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHN0YXR1cykKLSAgICB7Ci0gICAgICBjYXNl
IEQzREVSUl9ERVZJQ0VOT1RSRVNFVDoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRUhVTkc6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotdm9pZCBEaXNwbGF5OjpzeW5jKGJvb2wgYmxvY2spCi17Ci0gICAgSFJF
U1VMVCByZXN1bHQ7Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkqIHF1ZXJ5ID0gYWxsb2NhdGVFdmVu
dFF1ZXJ5KCk7Ci0gICAgaWYgKCFxdWVyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICByZXN1bHQgPSBxdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKLSAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgZG8KLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IHF1
ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOwotCi0gICAgICAgIGlmKGJs
b2NrICYmIHJlc3VsdCA9PSBTX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBLZWVw
IHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwg
Zmlyc3QKLSAgICAgICAgICAgIFNsZWVwKDApOwotICAgICAgICAgICAgLy8gZXhwbGljaXRseSBj
aGVjayBmb3IgZGV2aWNlIGxvc3MKLSAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBzZWVtIHRv
IHJldHVybiBTX0ZBTFNFIGV2ZW4gaWYgdGhlIGRldmljZSBpcyBsb3N0Ci0gICAgICAgICAgICAv
LyBpbnN0ZWFkIG9mIEQzREVSUl9ERVZJQ0VMT1NUIGxpa2UgdGhleSBzaG91bGQKLSAgICAgICAg
ICAgIGlmICh0ZXN0RGV2aWNlTG9zdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IEQzREVSUl9ERVZJQ0VMT1NUOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIHdoaWxlKGJsb2NrICYmIHJlc3VsdCA9PSBTX0ZBTFNFKTsKLQotICAgIGZyZWVF
dmVudFF1ZXJ5KHF1ZXJ5KTsKLQotICAgIGlmIChpc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgbm90aWZ5RGV2aWNlTG9zdCgpOwotICAgIH0KLX0KLQotSURpcmVjdDNE
UXVlcnk5KiBEaXNwbGF5OjphbGxvY2F0ZUV2ZW50UXVlcnkoKQotewotICAgIElEaXJlY3QzRFF1
ZXJ5OSAqcXVlcnkgPSBOVUxMOwotCi0gICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQot
ICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RR
VUVSWVRZUEVfRVZFTlQsICZxdWVyeSk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHF1ZXJ5ID0gbUV2ZW50UXVlcnlQ
b29sLmJhY2soKTsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnBvcF9iYWNrKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHF1ZXJ5OwotfQotCi12b2lkIERpc3BsYXk6OmZyZWVFdmVudFF1ZXJ5KElE
aXJlY3QzRFF1ZXJ5OSogcXVlcnkpCi17Ci0gICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5zaXplKCkg
PiAxMDAwKQotICAgIHsKLSAgICAgICAgcXVlcnktPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLnB1c2hfYmFjayhxdWVyeSk7Ci0gICAg
fQotfQotCi12b2lkIERpc3BsYXk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9y
bWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQotewotICAgIGZvciAoaW50IG11bHRpU2FtcGxl
SW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7
IG11bHRpU2FtcGxlSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQz
ZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxM
KTsKLQotICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VF
REVEKHJlc3VsdCk7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldERYVDFUZXh0dXJlU3Vw
cG9ydCgpCi17Ci0gICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1E
M2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUp
OwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9U
RVhUVVJFLCBEM0RGTVRfRFhUMSkpOwotfQotCi1ib29sIERpc3BsYXk6OmdldERYVDNUZXh0dXJl
U3VwcG9ydCgpCi17Ci0gICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAg
IG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1v
ZGUpOwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQ
RV9URVhUVVJFLCBEM0RGTVRfRFhUMykpOwotfQotCi1ib29sIERpc3BsYXk6OmdldERYVDVUZXh0
dXJlU3VwcG9ydCgpCi17Ci0gICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwot
ICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxh
eU1vZGUpOwotCi0gICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RS
VFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUNSkpOwotfQotCi0vLyB3ZSB1c2UgSU5UWiBmb3IgZGVw
dGggdGV4dHVyZXMgaW4gRGlyZWN0M0Q5Ci0vLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1
cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKLS8vIHNlZSBo
dHRwOi8vYXJhcy1wLmluZm8vdGV4dHMvRDNEOUdQVUhhY2tzLmh0bWwKLWJvb2wgRGlzcGxheTo6
Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Ci17Ci0gICAgRDNERElTUExBWU1PREUgY3Vy
cmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0
ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgYm9vbCBpbnR6ID0gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZN
VF9JTlRaKSk7Ci0gICAgYm9vbCBudWxsID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZv
cm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIEQzREZNVF9OVUxMKSk7Ci0KLSAgICBy
ZXR1cm4gaW50eiAmJiBudWxsOwotfQotCi1ib29sIERpc3BsYXk6OmdldEZsb2F0MzJUZXh0dXJl
U3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCi17Ci0gICAgRDNERElT
UExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxh
eU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgKmZpbHRlcmluZyA9
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBF
X1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkgJiYKLSAgICAgICAgICAgICAgICAgU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJF
VEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKLSAgICAKLSAgICAqcmVuZGVyYWJsZSA9
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBF
X1RFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSkmJgotICAgICAgICAgICAgICAgICAgU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfQ1VC
RVRFWFRVUkUsIEQzREZNVF9BMzJCMzJHMzJSMzJGKSk7Ci0KLSAgICBpZiAoISpmaWx0ZXJpbmcg
JiYgISpyZW5kZXJhYmxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+
Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1v
ZGUuRm9ybWF0LCAwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgotICAg
ICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJF
LCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlzcGxheTo6Z2V0RmxvYXQxNlRleHR1
cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKLXsKLSAgICBEM0RE
SVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNw
bGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7Ci0KLSAgICAqZmlsdGVyaW5n
ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NV
QkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpOwotICAgIAotICAgICpyZW5kZXJhYmxl
ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKSAmJgotICAgICAgICAgICAgICAgICBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NV
QkVURVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpOwotCi0gICAgaWYgKCEqZmlsdGVyaW5n
ICYmICEqcmVuZGVyYWJsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYKLSAg
ICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVS
RSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldEx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7
Ci0gICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNw
bGF5TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9MOCkpOwotfQotCi1ib29sIERpc3BsYXk6OmdldEx1bWlu
YW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQotewotICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnRE
aXNwbGF5TW9kZTsKLSAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAm
Y3VycmVudERpc3BsYXlNb2RlKTsKLQotICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNr
RGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZv
cm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0E4TDgpKTsKLX0KLQotRDNEUE9PTCBE
aXNwbGF5OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdAotewotICAgIGlmIChtRDNk
OUV4ICE9IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoISh1c2FnZSAmIEQzRFVTQUdFX0RZTkFN
SUMpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKLX0KLQotRDNEUE9P
TCBEaXNwbGF5OjpnZXRUZXh0dXJlUG9vbChEV09SRCB1c2FnZSkgY29uc3QKLXsKLSAgICBpZiAo
bUQzZDlFeCAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCEodXNhZ2UgJiAoRDNEVVNBR0Vf
REVQVEhTVEVOQ0lMIHwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBEM0RQT09MX01BTkFHRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwotfQotCi1ib29sIERpc3BsYXk6OmdldEV2ZW50UXVlcnlT
dXBwb3J0KCkKLXsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gYWxsb2NhdGVFdmVudFF1
ZXJ5KCk7Ci0gICAgaWYgKHF1ZXJ5KQotICAgIHsKLSAgICAgICAgZnJlZUV2ZW50UXVlcnkocXVl
cnkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRDNEUFJFU0VOVF9QQVJBTUVURVJTIERpc3Bs
YXk6OmdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpCi17Ci0gICAgRDNEUFJFU0VOVF9QQVJB
TUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwotCi0gICAgLy8gVGhlIGRlZmF1bHQgc3dh
cCBjaGFpbiBpcyBuZXZlciBhY3R1YWxseSB1c2VkLiBTdXJmYWNlIHdpbGwgY3JlYXRlIGEgbmV3
IHN3YXAgY2hhaW4gd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMuCi0gICAgcHJlc2VudFBhcmFt
ZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhl
aWdodCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9
IEZBTFNFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5oRGV2aWNlV2luZG93ID0gbURldmljZVdpbmRvdzsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
UHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7Ci0gICAg
cHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAg
ICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gcHJlc2Vu
dFBhcmFtZXRlcnM7Ci19Ci0KLXZvaWQgRGlzcGxheTo6aW5pdEV4dGVuc2lvblN0cmluZygpCi17
Ci0gICAgSE1PRFVMRSBzd2lmdFNoYWRlciA9IEdldE1vZHVsZUhhbmRsZShURVhUKCJzd2lmdHNo
YWRlcl9kM2Q5LmRsbCIpKTsKLQotICAgIG1FeHRlbnNpb25TdHJpbmcgPSAiIjsKLQotICAgIC8v
IE11bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25zCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAi
RUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNzICI7Ci0KLSAgICAvLyBBTkdMRS1zcGVj
aWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHNoYXJlSGFuZGxlU3VwcG9ydGVkKCkpCi0gICAgewot
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9j
bGllbnRfYnVmZmVyICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FO
R0xFX3F1ZXJ5X3N1cmZhY2VfcG9pbnRlciAiOwotCi0gICAgaWYgKHN3aWZ0U2hhZGVyKQotICAg
IHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3NvZnR3YXJlX2Rpc3Bs
YXkgIjsKLSAgICB9Ci0KLSAgICBpZiAoc2hhcmVIYW5kbGVTdXBwb3J0ZWQoKSkKLSAgICB7Ci0g
ICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJl
XzJkX3NoYXJlX2hhbmRsZSAiOwotICAgIH0KLQotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVH
TF9OVl9wb3N0X3N1Yl9idWZmZXIiOwotCi0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQg
PSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9
IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZy5yZXNp
emUoZW5kKzEpOwotICAgIH0KLX0KLQotY29uc3QgY2hhciAqRGlzcGxheTo6Z2V0RXh0ZW5zaW9u
U3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOwot
fQotCi1ib29sIERpc3BsYXk6OnNoYXJlSGFuZGxlU3VwcG9ydGVkKCkgY29uc3QgCi17Ci0gICAg
Ly8gUElYIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHVzaW5nIHNoYXJlIGhhbmRsZXMsIHNvIGRp
c2FibGUgdGhlbS4KLSAgICByZXR1cm4gaXNEM2Q5RXhEZXZpY2UoKSAmJiAhZ2w6OnBlcmZBY3Rp
dmUoKTsKLX0KLQotLy8gT25seSBEaXJlY3QzRCAxMCByZWFkeSBkZXZpY2VzIHN1cHBvcnQgYWxs
IHRoZSBuZWNlc3NhcnkgdmVydGV4IHRleHR1cmUgZm9ybWF0cy4KLS8vIFdlIHRlc3QgdGhpcyB1
c2luZyBEM0Q5IGJ5IGNoZWNraW5nIHN1cHBvcnQgZm9yIHRoZSBSMTZGIGZvcm1hdC4KLWJvb2wg
RGlzcGxheTo6Z2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdAotewotICAgIGlmICghaXNJ
bml0aWFsaXplZCgpIHx8IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA8IEQzRFBTX1ZF
UlNJT04oMywgMCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
RDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOwotICAgIG1EM2Q5LT5HZXRBZGFwdGVy
RGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwotCi0gICAgSFJFU1VM
VCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9WRVJURVhURVhUVVJF
LCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfUjE2Rik7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVE
KHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGlzcGxheTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQo
KSBjb25zdAotewotICAgIHJldHVybiAhKG1EZXZpY2VDYXBzLlRleHR1cmVDYXBzICYgRDNEUFRF
WFRVUkVDQVBTX1BPVzIpICYmCi0gICAgICAgICAgICEobURldmljZUNhcHMuVGV4dHVyZUNhcHMg
JiBEM0RQVEVYVFVSRUNBUFNfQ1VCRU1BUF9QT1cyKSAmJgotICAgICAgICAgICAhKG1EZXZpY2VD
YXBzLlRleHR1cmVDYXBzICYgRDNEUFRFWFRVUkVDQVBTX05PTlBPVzJDT05ESVRJT05BTCk7Ci19
Ci0KLWJvb2wgRGlzcGxheTo6Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3QKLXsKLSAg
ICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBJRGlyZWN0M0RRdWVyeTkgKnF1ZXJ5ID0gTlVMTDsKLSAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04sICZxdWVy
eSk7Ci0gICAgCi0gICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIHF1ZXJ5KQotICAgIHsKLSAg
ICAgICAgcXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlz
cGxheTo6Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtRGV2aWNl
Q2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPj0gRDNEUFNfVkVSU0lPTigzLCAwKTsgCi19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmN2RiZDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRGlzcGxheS5oOiBEZWZpbmVzIHRoZSBl
Z2w6OkRpc3BsYXkgY2xhc3MsIHJlcHJlc2VudGluZyB0aGUgYWJzdHJhY3QKLS8vIGRpc3BsYXkg
b24gd2hpY2ggZ3JhcGhpY3MgYXJlIGRyYXduLiBJbXBsZW1lbnRzIEVHTERpc3BsYXkuCi0vLyBb
RUdMIDEuNF0gc2VjdGlvbiAyLjEuMiBwYWdlIDMuCi0KLSNpZm5kZWYgSU5DTFVERV9ESVNQTEFZ
X0hfCi0jZGVmaW5lIElOQ0xVREVfRElTUExBWV9IXwotCi0jaWZuZGVmIFdJTjMyX0xFQU5fQU5E
X01FQU4KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2VuZGlmCi0jaW5jbHVkZSA8d2lu
ZG93cy5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDx2
ZWN0b3I+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi0jaW5jbHVkZSAibGli
RUdML0NvbmZpZy5oIgotI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCi0KLW5hbWVzcGFjZSBl
Z2wKLXsKLWNsYXNzIERpc3BsYXkKLXsKLSAgcHVibGljOgotICAgIH5EaXNwbGF5KCk7Ci0KLSAg
ICBib29sIGluaXRpYWxpemUoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOwotCi0gICAgdmlydHVh
bCB2b2lkIHN0YXJ0U2NlbmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kU2NlbmUoKTsKLQotICAg
IHN0YXRpYyBlZ2w6OkRpc3BsYXkgKmdldERpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlz
cGxheUlkKTsKLQotICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xDb25maWcgKmNvbmZpZ3MsIGNvbnN0
IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGludCAqbnVtQ29uZmln
KTsKLSAgICBib29sIGdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKLQotICAgIEVHTFN1cmZhY2UgY3JlYXRlV2luZG93U3Vy
ZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRyaWJM
aXN0KTsKLSAgICBFR0xTdXJmYWNlIGNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoRUdMQ29uZmlnIGNv
bmZpZywgSEFORExFIHNoYXJlSGFuZGxlLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwotICAg
IEVHTENvbnRleHQgY3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBjb25zdCBn
bDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RB
Y2Nlc3MpOwotCi0gICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2Up
OwotICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwotCi0gICAg
Ym9vbCBpc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ZhbGlkQ29uZmlnKEVHTENv
bmZpZyBjb25maWcpOwotICAgIGJvb2wgaXNWYWxpZENvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOwotICAgIGJvb2wgaXNWYWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKLSAg
ICBib29sIGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdyk7Ci0KLSAgICBFR0xp
bnQgZ2V0TWluU3dhcEludGVydmFsKCk7Ci0gICAgRUdMaW50IGdldE1heFN3YXBJbnRlcnZhbCgp
OwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKTsKLSAgICB2aXJ0
dWFsIEQzRENBUFM5IGdldERldmljZUNhcHMoKTsKLSAgICB2aXJ0dWFsIEQzREFEQVBURVJfSURF
TlRJRklFUjkgKmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7Ci0gICAgdmlydHVhbCBib29sIHRlc3RE
ZXZpY2VMb3N0KCk7Ci0gICAgdmlydHVhbCBib29sIHRlc3REZXZpY2VSZXNldHRhYmxlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmMoYm9vbCBibG9jayk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RR
dWVyeTkqIGFsbG9jYXRlRXZlbnRRdWVyeSgpOwotICAgIHZpcnR1YWwgdm9pZCBmcmVlRXZlbnRR
dWVyeShJRGlyZWN0M0RRdWVyeTkqIHF1ZXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0TXVsdGlT
YW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0
dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5n
LCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBi
b29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0VmVydGV4
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEQzRFBPT0wgZ2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBEM0RQT09MIGdldFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgYm9vbCBpc0RldmljZUxv
c3QoKTsKLQotICAgIGJvb2wgaXNEM2Q5RXhEZXZpY2UoKSBjb25zdCB7IHJldHVybiBtRDNkOUV4
ICE9IE5VTEw7IH0KLSAgICBjb25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdDsK
LSAgICBib29sIHNoYXJlSGFuZGxlU3VwcG9ydGVkKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlzcGxheSk7Ci0KLSAgICBEaXNwbGF5KEVHTE5h
dGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCwgSERDIGRldmljZUNvbnRleHQsIGJvb2wgc29mdHdh
cmUpOwotCi0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIGdldERlZmF1bHRQcmVzZW50UGFyYW1l
dGVycygpOwotCi0gICAgYm9vbCByZXN0b3JlTG9zdERldmljZSgpOwotCi0gICAgRUdMTmF0aXZl
RGlzcGxheVR5cGUgbURpc3BsYXlJZDsKLSAgICBjb25zdCBIREMgbURjOwotCi0gICAgSE1PRFVM
RSBtRDNkOU1vZHVsZTsKLSAgICAKLSAgICBVSU5UIG1BZGFwdGVyOwotICAgIEQzRERFVlRZUEUg
bURldmljZVR5cGU7Ci0gICAgSURpcmVjdDNEOSAqbUQzZDk7ICAvLyBBbHdheXMgdmFsaWQgYWZ0
ZXIgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4KLSAgICBJRGlyZWN0M0Q5RXggKm1EM2Q5RXg7
ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgotICAgIElEaXJl
Y3QzRERldmljZTkgKm1EZXZpY2U7Ci0gICAgSURpcmVjdDNERGV2aWNlOUV4ICptRGV2aWNlRXg7
ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgotCi0gICAgLy8g
QSBwb29sIG9mIGV2ZW50IHF1ZXJpZXMgdGhhdCBhcmUgY3VycmVudGx5IHVudXNlZC4KLSAgICBz
dGQ6OnZlY3RvcjxJRGlyZWN0M0RRdWVyeTkqPiBtRXZlbnRRdWVyeVBvb2w7Ci0KLSAgICBEM0RD
QVBTOSBtRGV2aWNlQ2FwczsKLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5IG1BZGFwdGVySWRl
bnRpZmllcjsKLSAgICBIV05EIG1EZXZpY2VXaW5kb3c7Ci0KLSAgICBib29sIG1TY2VuZVN0YXJ0
ZWQ7Ci0gICAgRUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7Ci0gICAgRUdMaW50IG1NaW5Td2FwSW50
ZXJ2YWw7Ci0gICAgYm9vbCBtU29mdHdhcmVEZXZpY2U7Ci0gICAgCi0gICAgdHlwZWRlZiBzdGQ6
OnNldDxTdXJmYWNlKj4gU3VyZmFjZVNldDsKLSAgICBTdXJmYWNlU2V0IG1TdXJmYWNlU2V0Owot
Ci0gICAgQ29uZmlnU2V0IG1Db25maWdTZXQ7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6c2V0PGdsOjpD
b250ZXh0Kj4gQ29udGV4dFNldDsKLSAgICBDb250ZXh0U2V0IG1Db250ZXh0U2V0OwotICAgIGJv
b2wgbURldmljZUxvc3Q7Ci0KLSAgICBib29sIGNyZWF0ZURldmljZSgpOwotICAgIHZvaWQgaW5p
dGlhbGl6ZURldmljZSgpOwotICAgIGJvb2wgcmVzZXREZXZpY2UoKTsKLQotICAgIHZvaWQgaW5p
dEV4dGVuc2lvblN0cmluZygpOwotICAgIHN0ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7Ci19
OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0RJU1BMQVlfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvUkVBRE1FIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZTBmMDdjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvUkVBRE1FCkBAIC0wLDAgKzEgQEAKK1RoaXMgZGlyZWN0b3J5J3MgY29udGVudHMg
YXJlIG5vdCBzeW5jZWQgZnJvbSB0aGUgQU5HTEUgcHJvamVjdCBiZWNhdXNlIG5vIHBsYXRmb3Jt
IGluIFdlYktpdCBuZWVkcyB0aGVtIHlldC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTli
Nzc5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ODIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gU3VyZmFjZS5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6U3VyZmFjZSBjbGFzcywg
cmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNlCi0vLyBzdWNoIGFzIHRoZSBjbGllbnQgYXJl
YSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBiYWNrIGJ1ZmZlcnMuCi0vLyBJbXBsZW1lbnRz
IEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24g
Mi4yIHBhZ2UgMy4KLQotI2luY2x1ZGUgPHRjaGFyLmg+Ci0KLSNpbmNsdWRlICJsaWJFR0wvU3Vy
ZmFjZS5oIgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1RleHR1cmUuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9tYWluLmgiCi0jaW5jbHVkZSAibGliRUdM
L0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgPGR3bWFwaS5oPgotCi1uYW1lc3BhY2UgZWdsCi17Ci0K
LW5hbWVzcGFjZQotewotY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgw
eDAwLCAweDA2KTsKLWNvbnN0IGludCB2ZXJzaW9uV2luZG93czcgPSBNQUtFV09SRCgweDAxLCAw
eDA2KTsKLQotLy8gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlu
IGEgZm9ybWF0IHN1aXRhYmxlIGZvciBvcmRlcmluZwotLy8gY29tcGFyaXNvbi4KLWludCBnZXRD
b21wYXJhYmxlT1NWZXJzaW9uKCkKLXsKLSAgICBEV09SRCB2ZXJzaW9uID0gR2V0VmVyc2lvbigp
OwotICAgIGludCBtYWpvclZlcnNpb24gPSBMT0JZVEUoTE9XT1JEKHZlcnNpb24pKTsKLSAgICBp
bnQgbWlub3JWZXJzaW9uID0gSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7Ci0gICAgcmV0dXJuIE1B
S0VXT1JEKG1pbm9yVmVyc2lvbiwgbWFqb3JWZXJzaW9uKTsKLX0KLX0KLQotU3VyZmFjZTo6U3Vy
ZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSFdORCB3aW5kb3cs
IEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSAKLSAgICA6IG1EaXNwbGF5KGRpc3BsYXkp
LCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0
ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKLXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAg
ICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgbVJl
bmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIG1T
aGFyZUhhbmRsZSA9IE5VTEw7Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1UZXh0dXJlRm9y
bWF0ID0gRUdMX05PX1RFWFRVUkU7Ci0gICAgbVRleHR1cmVUYXJnZXQgPSBFR0xfTk9fVEVYVFVS
RTsKLQotICAgIG1QaXhlbEFzcGVjdFJhdGlvID0gKEVHTGludCkoMS4wICogRUdMX0RJU1BMQVlf
U0NBTElORyk7ICAgLy8gRklYTUU6IERldGVybWluZSBhY3R1YWwgcGl4ZWwgYXNwZWN0IHJhdGlv
Ci0gICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKLSAgICBtU3dhcEJlaGF2aW9y
ID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIHNl
dFN3YXBJbnRlcnZhbCgxKTsKLQotICAgIHN1YmNsYXNzV2luZG93KCk7Ci19Ci0KLVN1cmZhY2U6
OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhBTkRMRSBz
aGFyZUhhbmRsZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVG
b3JtYXQsIEVHTGVudW0gdGV4dHVyZVR5cGUpCi0gICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVdp
bmRvdyhOVUxMKSwgbUNvbmZpZyhjb25maWcpLCBtU2hhcmVIYW5kbGUoc2hhcmVIYW5kbGUpLCBt
V2lkdGgod2lkdGgpLCBtSGVpZ2h0KGhlaWdodCksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKEVH
TF9GQUxTRSkKLXsKLSAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICBtQmFja0J1ZmZlciA9IE5V
TEw7Ci0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5VTEw7
Ci0gICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxMOwotICAgIG1XaW5kb3dTdWJjbGFzc2VkID0g
ZmFsc2U7Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4dHVy
ZUZvcm1hdDsKLSAgICBtVGV4dHVyZVRhcmdldCA9IHRleHR1cmVUeXBlOwotCi0gICAgbVBpeGVs
QXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FMSU5HKTsgICAvLyBG
SVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3QgcmF0aW8KLSAgICBtUmVuZGVyQnVm
ZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BS
RVNFUlZFRDsKLSAgICBtU3dhcEludGVydmFsID0gLTE7Ci0gICAgc2V0U3dhcEludGVydmFsKDEp
OwotfQotCi1TdXJmYWNlOjp+U3VyZmFjZSgpCi17Ci0gICAgdW5zdWJjbGFzc1dpbmRvdygpOwot
ICAgIHJlbGVhc2UoKTsKLX0KLQotYm9vbCBTdXJmYWNlOjppbml0aWFsaXplKCkKLXsKLSAgICBB
U1NFUlQoIW1Td2FwQ2hhaW4gJiYgIW1PZmZzY3JlZW5UZXh0dXJlICYmICFtRGVwdGhTdGVuY2ls
KTsKLQotICAgIGlmICghcmVzZXRTd2FwQ2hhaW4oKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIE1vZGlmeSBwcmVzZW50IHBhcmFtZXRlcnMgZm9yIHRoaXMgd2luZG93LCBpZiB3ZSBh
cmUgY29tcG9zaXRlZCwKLSAgICAvLyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHF1ZXVpbmcg
ZG9uZSBieSBEV00gYmV0d2VlbiBvdXIgY2FsbHMgdG8KLSAgICAvLyBwcmVzZW50IGFuZCB0aGUg
YWN0dWFsIHNjcmVlbi4KLSAgICBpZiAobVdpbmRvdyAmJiAoZ2V0Q29tcGFyYWJsZU9TVmVyc2lv
bigpID49IHZlcnNpb25XaW5kb3dzVmlzdGEpKSB7Ci0gICAgICBCT09MIGlzQ29tcG9zaXRlZDsK
LSAgICAgIEhSRVNVTFQgcmVzdWx0ID0gRHdtSXNDb21wb3NpdGlvbkVuYWJsZWQoJmlzQ29tcG9z
aXRlZCk7Ci0gICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgaXNDb21wb3NpdGVkKSB7Ci0g
ICAgICAgIERXTV9QUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtczsKLSAgICAgICAgbWVt
c2V0KCZwcmVzZW50UGFyYW1zLCAwLCBzaXplb2YocHJlc2VudFBhcmFtcykpOwotICAgICAgICBw
cmVzZW50UGFyYW1zLmNiU2l6ZSA9IHNpemVvZihEV01fUFJFU0VOVF9QQVJBTUVURVJTKTsKLSAg
ICAgICAgcHJlc2VudFBhcmFtcy5jQnVmZmVyID0gMjsKLQotICAgICAgICByZXN1bHQgPSBEd21T
ZXRQcmVzZW50UGFyYW1ldGVycyhtV2luZG93LCAmcHJlc2VudFBhcmFtcyk7Ci0gICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICBFUlIoIlVuYWJsZSB0byBzZXQgcHJlc2VudCBw
YXJhbWV0ZXJzOiAweCUwOFgiLCByZXN1bHQpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFN1cmZhY2U6OnJlbGVhc2UoKQotewotICAgIGlmIChtU3dhcENo
YWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dh
cENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUJhY2tCdWZmZXIpCi0gICAgewotICAg
ICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+
UmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBp
ZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPnJlbGVhc2VUZXhJbWFn
ZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgbVNoYXJlSGFuZGxl
ID0gTlVMTDsKLX0KLQotYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbigpCi17Ci0gICAgaWYg
KCFtV2luZG93KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlc2V0U3dhcENoYWluKG1XaWR0aCwg
bUhlaWdodCk7Ci0gICAgfQotCi0gICAgUkVDVCB3aW5kb3dSZWN0OwotICAgIGlmICghR2V0Q2xp
ZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJndpbmRvd1JlY3QpKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGZhbHNlKTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2ZSB0aGUgd2lu
ZG93IGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiByZXNldFN3YXBDaGFpbih3aW5kb3dSZWN0LnJpZ2h0IC0gd2luZG93UmVjdC5sZWZ0LCB3
aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3QudG9wKTsKLX0KLQotYm9vbCBTdXJmYWNlOjpy
ZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkK
LXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7
Ci0KLSAgICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5kZXIgdGFyZ2V0IHRleHR1cmVzIHRv
IHN5c3RlbSBtZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291cmNlcwotICAgIC8vIGJlZm9yZSBy
ZWFsbG9jYXRpbmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2ggdmlkZW8gbWVtb3J5IGFzIHBvc3Np
YmxlLgotICAgIGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKCk7Ci0KLSAgICBEM0RQUkVT
RU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0gICAgSFJFU1VMVCByZXN1
bHQ7Ci0KLSAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gbUNv
bmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdDsKLSAgICAvLyBXZSBzZXQgQmFja0J1ZmZlckNvdW50
ID0gMSBldmVuIHdoZW4gd2UgdXNlIEQzRFNXQVBFRkZFQ1RfRkxJUEVYLgotICAgIC8vIFdlIGRv
IHRoaXMgYmVjYXVzZSBEaXJlY3RYIGRvY3MgYXJlIGEgYml0IHZhZ3VlIHdoZXRoZXIgdG8gc2V0
IHRoaXMgdG8gMQotICAgIC8vIG9yIDIuIFRoZSBydW50aW1lIHNlZW1zIHRvIGFjY2VwdCAxLCBz
byB3ZSBzcGVjdWxhdGUgdGhhdCBlaXRoZXIgaXQgaXMKLSAgICAvLyBmb3JjaW5nIGl0IHRvIDIg
d2l0aG91dCB0ZWxsaW5nIHVzLCBvciBiZXR0ZXIsIGRvaW5nIHNvbWV0aGluZyBzbWFydAotICAg
IC8vIGJlaGluZCB0aGUgc2NlbmVzIGtub3dpbmcgdGhhdCB3ZSBkb24ndCBuZWVkIG1vcmUuCi0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7Ci0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3MgPSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhE
ZXZpY2VXaW5kb3cgPSBnZXRXaW5kb3dIYW5kbGUoKTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVF1YWxpdHkgPSAwOyAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVbmltcGxl
bWVudGVkCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElT
QU1QTEVfTk9ORTsgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gbVByZXNlbnRJbnRlcnZhbDsKLSAgICBwcmVzZW50
UGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOwotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNr
QnVmZmVyV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0KLSAgICAvLyBSZWxlYXNlIHNwZWNp
ZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5kZXIgdGFyZ2V0
LCB3aGlsZSB0aGUKLSAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlzdHMgZm9yIHRo
ZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgotICAgIGlmIChtU3dhcENoYWlu
KQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENo
YWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUJhY2tCdWZmZXIpCi0gICAgewotICAgICAg
ICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNj
cmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRo
U3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBtU2hhcmVIYW5kbGUgPSBOVUxMOwotICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0g
TlVMTDsKLSAgICBpZiAoIW1XaW5kb3cgJiYgbURpc3BsYXktPnNoYXJlSGFuZGxlU3VwcG9ydGVk
KCkpCi0gICAgewotICAgICAgICBwU2hhcmVIYW5kbGUgPSAmbVNoYXJlSGFuZGxlOwotICAgIH0K
LQotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5C
YWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQz
RFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbU9m
ZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAl
MDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLQotICAgICAgICBpZihpc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxheS0+bm90
aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpvbGRSZW5kZXJUYXJnZXQgPSBtUmVuZGVyVGFyZ2V0OwotCi0gICAgcmVzdWx0ID0gbU9mZnNj
cmVlblRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmbVJlbmRlclRhcmdldCk7Ci0gICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIGlmIChvbGRSZW5kZXJUYXJnZXQpCi0gICAg
ewotICAgICAgICBSRUNUIHJlY3QgPQotICAgICAgICB7Ci0gICAgICAgICAgICAwLCAwLAotICAg
ICAgICAgICAgbVdpZHRoLCBtSGVpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHJlY3Qu
cmlnaHQgPiBzdGF0aWNfY2FzdDxMT05HPihwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lk
dGgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlcldpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlY3QuYm90dG9t
ID4gc3RhdGljX2Nhc3Q8TE9ORz4ocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckhlaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIG1EaXNwbGF5LT5lbmRTY2Vu
ZSgpOwotCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFy
Z2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgewotICAgICAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJz
LCAmbVN3YXBDaGFpbik7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfSU5WQUxJRENBTEwg
fHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKLQotICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnMgb3Igb2Zmc2NyZWVuIHN1cmZhY2Vz
OiAlMDhsWCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZWxlYXNlKCk7Ci0KLSAgICAgICAgICAg
IGlmKGlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbURpc3BsYXktPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdl
dEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7Ci0g
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgaWYgKG1Db25m
aWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRDNERk1UX1VOS05PV04pCi0gICAgewotICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UocHJlc2VudFBhcmFt
ZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
c2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBhcmFtZXRlcnMu
TXVsdGlTYW1wbGVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBGQUxTRSwg
Jm1EZXB0aFN0ZW5jaWwsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01F
TU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0lOVkFM
SURDQUxMKTsKLQotICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNp
bCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYoaXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNl
TG9zdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOwotICAg
IG1IZWlnaHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0OwotCi0gICAgbVBy
ZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
U3VyZmFjZTo6c3dhcFJlY3QoRUdMaW50IHgsIEVHTGludCB5LCBFR0xpbnQgd2lkdGgsIEVHTGlu
dCBoZWlnaHQpCi17Ci0gICAgaWYgKCFtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHggKyB3aWR0aCA+IG1XaWR0aCkKLSAgICB7Ci0gICAg
ICAgIHdpZHRoID0gbVdpZHRoIC0geDsKLSAgICB9Ci0KLSAgICBpZiAoeSArIGhlaWdodCA+IG1I
ZWlnaHQpCi0gICAgewotICAgICAgICBoZWlnaHQgPSBtSGVpZ2h0IC0geTsKLSAgICB9Ci0KLSAg
ICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5n
ZXREZXZpY2UoKTsKLQotICAgIC8vIERpc2FibGUgYWxsIHBpcGVsaW5lIG9wZXJhdGlvbnMKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX0ZBTFNFKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsK
LSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0Up
OwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFM
U0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExf
Tk9ORSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBG
QUxTRSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUs
IDApOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwg
RDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQz
RENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7Ci0gICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7
Ci0gICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICBkZXZpY2UtPlNldFZlcnRl
eFNoYWRlcihOVUxMKTsKLQotICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1CYWNrQnVm
ZmVyKTsKLSAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Ci0KLSAgICBk
ZXZpY2UtPlNldFRleHR1cmUoMCwgbU9mZnNjcmVlblRleHR1cmUpOwotICAgIGRldmljZS0+U2V0
VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsK
LSAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQz
RFRBX1RFWFRVUkUpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNT
X0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgw
LCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAgIGRldmlj
ZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1Q
KTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RU
QUREUkVTU19DTEFNUCk7Ci0gICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZW
Rl9URVgxKTsKLQotICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1I
ZWlnaHQsIDAuMGYsIDEuMGZ9OwotICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsK
LQotICAgIGZsb2F0IHgxID0geCAtIDAuNWY7Ci0gICAgZmxvYXQgeTEgPSAobUhlaWdodCAtIHkg
LSBoZWlnaHQpIC0gMC41ZjsKLSAgICBmbG9hdCB4MiA9ICh4ICsgd2lkdGgpIC0gMC41ZjsKLSAg
ICBmbG9hdCB5MiA9IChtSGVpZ2h0IC0geSkgLSAwLjVmOwotCi0gICAgZmxvYXQgdTEgPSB4IC8g
ZmxvYXQobVdpZHRoKTsKLSAgICBmbG9hdCB2MSA9IHkgLyBmbG9hdChtSGVpZ2h0KTsKLSAgICBm
bG9hdCB1MiA9ICh4ICsgd2lkdGgpIC8gZmxvYXQobVdpZHRoKTsKLSAgICBmbG9hdCB2MiA9ICh5
ICsgaGVpZ2h0KSAvIGZsb2F0KG1IZWlnaHQpOwotCi0gICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7
eDEsIHkxLCAwLjBmLCAxLjBmLCB1MSwgdjJ9LAotICAgICAgICAgICAgICAgICAgICAgICAge3gy
LCB5MSwgMC4wZiwgMS4wZiwgdTIsIHYyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHt4Miwg
eTIsIDAuMGYsIDEuMGYsIHUyLCB2MX0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7eDEsIHky
LCAwLjBmLCAxLjBmLCB1MSwgdjF9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKLQotICAgIG1E
aXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRf
VFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKLSAgICBtRGlzcGxheS0+
ZW5kU2NlbmUoKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKLQotICAgIFJF
Q1QgcmVjdCA9Ci0gICAgewotICAgICAgICB4LCBtSGVpZ2h0IC0geSAtIGhlaWdodCwKLSAgICAg
ICAgeCArIHdpZHRoLCBtSGVpZ2h0IC0geQotICAgIH07Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9
IG1Td2FwQ2hhaW4tPlByZXNlbnQoJnJlY3QsICZyZWN0LCBOVUxMLCBOVUxMLCAwKTsKLQotICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihnbEdldEN1
cnJlbnRDb250ZXh0KCkpOwotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAgICAgY29udGV4
dC0+bWFya0FsbFN0YXRlRGlydHkoKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIG1EaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9
PSBEM0RFUlJfRFJJVkVSSU5URVJOQUxFUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLQotICAgIGNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQotewotICAgIHJl
dHVybiBtV2luZG93OwotfQotCi0KLSNkZWZpbmUga1N1cmZhY2VQcm9wZXJ0eSBfVEVYVCgiRWds
OjpTdXJmYWNlT3duZXIiKQotI2RlZmluZSBrUGFyZW50V25kUHJvYyBfVEVYVCgiRWdsOjpTdXJm
YWNlUGFyZW50V25kUHJvYyIpCi0KLXN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1cmZhY2VXaW5k
b3dQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBh
cmFtKQotewotICBpZiAobWVzc2FnZSA9PSBXTV9TSVpFKQotICB7Ci0gICAgICBTdXJmYWNlKiBz
dXJmID0gcmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4oR2V0UHJvcChod25kLCBrU3VyZmFjZVBy
b3BlcnR5KSk7Ci0gICAgICBpZihzdXJmKQotICAgICAgewotICAgICAgICAgIHN1cmYtPmNoZWNr
Rm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7Ci0gICAgICB9Ci0gIH0KLSAgV05EUFJPQyBwcmV2V25k
RnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQyA+KEdldFByb3AoaHduZCwga1BhcmVudFdu
ZFByb2MpKTsKLSAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHByZXZXbmRGdW5jLCBod25kLCBtZXNz
YWdlLCB3cGFyYW0sIGxwYXJhbSk7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6c3ViY2xhc3NXaW5kb3co
KQotewotICAgIGlmICghbVdpbmRvdykKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBEV09SRCBwcm9jZXNzSWQ7Ci0gICAgRFdPUkQgdGhyZWFkSWQgPSBHZXRXaW5kb3dUaHJl
YWRQcm9jZXNzSWQobVdpbmRvdywgJnByb2Nlc3NJZCk7Ci0gICAgaWYgKHByb2Nlc3NJZCAhPSBH
ZXRDdXJyZW50UHJvY2Vzc0lkKCkgfHwgdGhyZWFkSWQgIT0gR2V0Q3VycmVudFRocmVhZElkKCkp
Ci0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2V0TGFzdEVycm9yKDApOwot
ICAgIExPTkdfUFRSIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nUHRyKG1XaW5kb3csIEdXTFBf
V05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oU3VyZmFjZVdpbmRvd1Byb2MpKTsK
LSAgICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VT
UykKLSAgICB7Ci0gICAgICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBTZXRQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHksIHJl
aW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgU2V0UHJvcChtV2luZG93LCBrUGFy
ZW50V25kUHJvYywgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KG9sZFduZFByb2MpKTsKLSAgICBt
V2luZG93U3ViY2xhc3NlZCA9IHRydWU7Ci19Ci0KLXZvaWQgU3VyZmFjZTo6dW5zdWJjbGFzc1dp
bmRvdygpCi17Ci0gICAgaWYoIW1XaW5kb3dTdWJjbGFzc2VkKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIHVuLXN1YmNsYXNzCi0gICAgTE9OR19QVFIgcGFyZW50V25k
RnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEdldFByb3AobVdpbmRvdywga1BhcmVu
dFduZFByb2MpKTsKLQotICAgIC8vIENoZWNrIHRoZSB3aW5kb3dwcm9jIGlzIHN0aWxsIFN1cmZh
Y2VXaW5kb3dQcm9jLgotICAgIC8vIElmIHRoaXMgYXNzZXJ0IGZhaWxzLCB0aGVuIGl0IGlzIGxp
a2VseSB0aGUgYXBwbGljYXRpb24gaGFzIHN1YmNsYXNzZWQgdGhlCi0gICAgLy8gaHduZCBhcyB3
ZWxsIGFuZCBkaWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250
ZXh0LiBUaGUKLSAgICAvLyBhcHBsaWNhdGlvbiBzaG91bGQgYmUgbW9kaWZpZWQgdG8gZWl0aGVy
IHN1YmNsYXNzIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gRUdMIGNvbnRleHQsIG9y
IHRvIHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIEVHTCBjb250ZXh0LgotICAgIGlm
KHBhcmVudFduZEZ1bmMpCi0gICAgewotICAgICAgICBMT05HX1BUUiBwcmV2V25kRnVuYyA9IFNl
dFdpbmRvd0xvbmdQdHIobVdpbmRvdywgR1dMUF9XTkRQUk9DLCBwYXJlbnRXbmRGdW5jKTsKLSAg
ICAgICAgQVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFN1
cmZhY2VXaW5kb3dQcm9jKSk7Ci0gICAgfQotCi0gICAgUmVtb3ZlUHJvcChtV2luZG93LCBrU3Vy
ZmFjZVByb3BlcnR5KTsKLSAgICBSZW1vdmVQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jKTsK
LSAgICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOwotfQotCi1ib29sIFN1cmZhY2U6OmNoZWNr
Rm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKLXsKLSAgICBSRUNUIGNsaWVudDsKLSAgICBpZiAoIUdl
dENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEdy
b3cgdGhlIGJ1ZmZlciBub3csIGlmIHRoZSB3aW5kb3cgaGFzIGdyb3duLiBXZSBuZWVkIHRvIGdy
b3cgbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbi4KLSAgICBpbnQgY2xpZW50V2lkdGgg
PSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsKLSAgICBpbnQgY2xpZW50SGVpZ2h0ID0gY2xp
ZW50LmJvdHRvbSAtIGNsaWVudC50b3A7Ci0gICAgYm9vbCBzaXplRGlydHkgPSBjbGllbnRXaWR0
aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKLQotICAgIGlm
IChzaXplRGlydHkgfHwgbVByZXNlbnRJbnRlcnZhbERpcnR5KQotICAgIHsKLSAgICAgICAgcmVz
ZXRTd2FwQ2hhaW4oY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCk7Ci0gICAgICAgIGlmIChzdGF0
aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihnZXRDdXJyZW50RHJhd1N1cmZhY2UoKSkgPT0gdGhpcykK
LSAgICAgICAgewotICAgICAgICAgICAgZ2xNYWtlQ3VycmVudChnbEdldEN1cnJlbnRDb250ZXh0
KCksIHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGdldEN1cnJlbnREaXNwbGF5KCkpLCB0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLURXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2
YWwpCi17Ci0gICAgc3dpdGNoKGludGVydmFsKQotICAgIHsKLSAgICAgIGNhc2UgMDogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOwotICAgICAgY2FzZSAxOiByZXR1cm4gRDNE
UFJFU0VOVF9JTlRFUlZBTF9PTkU7Ci0gICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX1RXTzsKLSAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhS
RUU7Ci0gICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7Ci0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0RFRkFVTFQ7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6c3dhcCgpCi17Ci0gICAgcmV0
dXJuIHN3YXBSZWN0KDAsIDAsIG1XaWR0aCwgbUhlaWdodCk7Ci19Ci0KLWJvb2wgU3VyZmFjZTo6
cG9zdFN1YkJ1ZmZlcihFR0xpbnQgeCwgRUdMaW50IHksIEVHTGludCB3aWR0aCwgRUdMaW50IGhl
aWdodCkKLXsKLSAgICBpZiAoIW1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQotICAgIHsKLSAgICAg
ICAgLy8gU3BlYyBpcyBub3QgY2xlYXIgYWJvdXQgaG93IHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQu
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3dhcFJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpnZXRXaWR0aCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1XaWR0aDsKLX0KLQotRUdMaW50IFN1cmZhY2U6OmdldEhlaWdo
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1IZWlnaHQ7Ci19Ci0KLUVHTGludCBTdXJmYWNlOjpp
c1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtUG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgot
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RT
dXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBpZiAobVJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotICAgIH0KLQot
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UK
LUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIGlm
IChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci0KLUlEaXJlY3QzRFRleHR1
cmU5ICpTdXJmYWNlOjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKLXsKLSAgICBpZiAobU9mZnNjcmVl
blRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwotfQotCi12b2lkIFN1cmZhY2U6
OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1Td2FwSW50ZXJ2
YWwgPT0gaW50ZXJ2YWwpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IG1Td2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICBtU3dhcEludGVydmFsID0gc3RkOjptYXgo
bVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1pblN3YXBJbnRlcnZhbCgpKTsKLSAgICBtU3dh
cEludGVydmFsID0gc3RkOjptaW4obVN3YXBJbnRlcnZhbCwgbURpc3BsYXktPmdldE1heFN3YXBJ
bnRlcnZhbCgpKTsKLQotICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobVN3
YXBJbnRlcnZhbCk7Ci0gICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gdHJ1ZTsKLX0KLQotRUdM
ZW51bSBTdXJmYWNlOjpnZXRUZXh0dXJlRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRl
eHR1cmVGb3JtYXQ7Ci19Ci0KLUVHTGVudW0gU3VyZmFjZTo6Z2V0VGV4dHVyZVRhcmdldCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlVGFyZ2V0OwotfQotCi12b2lkIFN1cmZhY2U6OnNl
dEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIG1UZXh0dXJlID0g
dGV4dHVyZTsKLX0KLQotZ2w6OlRleHR1cmUyRCAqU3VyZmFjZTo6Z2V0Qm91bmRUZXh0dXJlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19Ci0KLUQzREZPUk1BVCBTdXJmYWNlOjpn
ZXRGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9y
bWF0OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiZDcwMi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAorKysgL2Rldi9udWxs
CkBAIC0xLDExMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTdXJmYWNlLmg6IERl
ZmluZXMgdGhlIGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJm
YWNlCi0vLyBzdWNoIGFzIHRoZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFu
eSBiYWNrIGJ1ZmZlcnMuCi0vLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVu
Y3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KLQotI2lmbmRlZiBJTkNM
VURFX1NVUkZBQ0VfSF8KLSNkZWZpbmUgSU5DTFVERV9TVVJGQUNFX0hfCi0KLSNkZWZpbmUgRUdM
QVBJCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgVGV4dHVyZTJE
OwotfQotCi1uYW1lc3BhY2UgZWdsCi17Ci1jbGFzcyBEaXNwbGF5OwotY2xhc3MgQ29uZmlnOwot
Ci1jbGFzcyBTdXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3Bs
YXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZCk7Ci0gICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBl
Z2w6OkNvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3aWR0aCwgRUdM
aW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1cmVUYXJnZXQp
OwotCi0gICAgflN1cmZhY2UoKTsKLQotICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwotICAgIHZvaWQg
cmVsZWFzZSgpOwotICAgIGJvb2wgcmVzZXRTd2FwQ2hhaW4oKTsKLQotICAgIEhXTkQgZ2V0V2lu
ZG93SGFuZGxlKCk7Ci0gICAgYm9vbCBzd2FwKCk7Ci0gICAgYm9vbCBwb3N0U3ViQnVmZmVyKEVH
TGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0KTsKLQotICAgIHZp
cnR1YWwgRUdMaW50IGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBFR0xpbnQgZ2V0SGVp
Z2h0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEVHTGludCBpc1Bvc3RTdWJCdWZmZXJTdXBwb3J0
ZWQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRh
cmdldCgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgp
OwotICAgIHZpcnR1YWwgSURpcmVjdDNEVGV4dHVyZTkgKmdldE9mZnNjcmVlblRleHR1cmUoKTsK
LQotICAgIEhBTkRMRSBnZXRTaGFyZUhhbmRsZSgpIHsgcmV0dXJuIG1TaGFyZUhhbmRsZTsgfQot
Ci0gICAgdm9pZCBzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKTsKLSAgICBib29sIGNo
ZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7ICAgLy8gUmV0dXJucyB0cnVlIGlmIHN3YXBjaGFp
biBjaGFuZ2VkIGR1ZSB0byByZXNpemUgb3IgaW50ZXJ2YWwgdXBkYXRlCi0KLSAgICB2aXJ0dWFs
IEVHTGVudW0gZ2V0VGV4dHVyZUZvcm1hdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRUdMZW51bSBn
ZXRUZXh0dXJlVGFyZ2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBEM0RGT1JNQVQgZ2V0Rm9ybWF0
KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRUZXh0dXJlKGdsOjpUZXh0dXJl
MkQgKnRleHR1cmUpOwotICAgIHZpcnR1YWwgZ2w6OlRleHR1cmUyRCAqZ2V0Qm91bmRUZXh0dXJl
KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN1cmZh
Y2UpOwotCi0gICAgRGlzcGxheSAqY29uc3QgbURpc3BsYXk7Ci0gICAgSURpcmVjdDNEU3dhcENo
YWluOSAqbVN3YXBDaGFpbjsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7Ci0g
ICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkqIG1SZW5kZXJUYXJnZXQ7Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkqIG1PZmZzY3JlZW5UZXh0
dXJlOwotCi0gICAgSEFORExFIG1TaGFyZUhhbmRsZTsKLQotICAgIHZvaWQgc3ViY2xhc3NXaW5k
b3coKTsKLSAgICB2b2lkIHVuc3ViY2xhc3NXaW5kb3coKTsKLSAgICBib29sIHJlc2V0U3dhcENo
YWluKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KTsKLSAgICBib29s
IHN3YXBSZWN0KEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0
KTsKLSAgICBzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCk7Ci0K
LSAgICBjb25zdCBIV05EIG1XaW5kb3c7ICAgICAgICAgICAgLy8gV2luZG93IHRoYXQgdGhlIHN1
cmZhY2UgaXMgY3JlYXRlZCBmb3IuCi0gICAgYm9vbCBtV2luZG93U3ViY2xhc3NlZDsgICAgICAg
IC8vIEluZGljYXRlcyB3aGV0aGVyIHdlIHN1Y2Nlc3NmdWxseSBzdWJjbGFzc2VkIG1XaW5kb3cg
Zm9yIFdNX1JFU0laRSBob29raW5nCi0gICAgY29uc3QgZWdsOjpDb25maWcgKm1Db25maWc7ICAg
IC8vIEVHTCBjb25maWcgc3VyZmFjZSB3YXMgY3JlYXRlZCB3aXRoCi0gICAgRUdMaW50IG1IZWln
aHQ7ICAgICAgICAgICAgICAgIC8vIEhlaWdodCBvZiBzdXJmYWNlCi0gICAgRUdMaW50IG1XaWR0
aDsgICAgICAgICAgICAgICAgIC8vIFdpZHRoIG9mIHN1cmZhY2UKLS8vICBFR0xpbnQgaG9yaXpv
bnRhbFJlc29sdXRpb247ICAgLy8gSG9yaXpvbnRhbCBkb3QgcGl0Y2gKLS8vICBFR0xpbnQgdmVy
dGljYWxSZXNvbHV0aW9uOyAgICAgLy8gVmVydGljYWwgZG90IHBpdGNoCi0vLyAgRUdMQm9vbGVh
biBsYXJnZXN0UEJ1ZmZlcjsgICAgIC8vIElmIHRydWUsIGNyZWF0ZSBsYXJnZXN0IHBidWZmZXIg
cG9zc2libGUKLS8vICBFR0xCb29sZWFuIG1pcG1hcFRleHR1cmU7ICAgICAgLy8gVHJ1ZSBpZiB0
ZXh0dXJlIGhhcyBtaXBtYXBzCi0vLyAgRUdMaW50IG1pcG1hcExldmVsOyAgICAgICAgICAgIC8v
IE1pcG1hcCBsZXZlbCB0byByZW5kZXIgdG8KLS8vICBFR0xlbnVtIG11bHRpc2FtcGxlUmVzb2x2
ZTsgICAgLy8gTXVsdGlzYW1wbGUgcmVzb2x2ZSBiZWhhdmlvcgotICAgIEVHTGludCBtUGl4ZWxB
c3BlY3RSYXRpbzsgICAgICAvLyBEaXNwbGF5IGFzcGVjdCByYXRpbwotICAgIEVHTGVudW0gbVJl
bmRlckJ1ZmZlcjsgICAgICAgICAvLyBSZW5kZXIgYnVmZmVyCi0gICAgRUdMZW51bSBtU3dhcEJl
aGF2aW9yOyAgICAgICAgIC8vIEJ1ZmZlciBzd2FwIGJlaGF2aW9yCi0gICAgRUdMZW51bSBtVGV4
dHVyZUZvcm1hdDsgICAgICAgIC8vIEZvcm1hdCBvZiB0ZXh0dXJlOiBSR0IsIFJHQkEsIG9yIG5v
IHRleHR1cmUKLSAgICBFR0xlbnVtIG1UZXh0dXJlVGFyZ2V0OyAgICAgICAgLy8gVHlwZSBvZiB0
ZXh0dXJlOiAyRCBvciBubyB0ZXh0dXJlCi0vLyAgRUdMZW51bSB2Z0FscGhhRm9ybWF0OyAgICAg
ICAgIC8vIEFscGhhIGZvcm1hdCBmb3IgT3BlblZHCi0vLyAgRUdMZW51bSB2Z0NvbG9yU3BhY2U7
ICAgICAgICAgIC8vIENvbG9yIHNwYWNlIGZvciBPcGVuVkcKLSAgICBFR0xpbnQgbVN3YXBJbnRl
cnZhbDsKLSAgICBFR0xpbnQgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQ7Ci0gICAgCi0gICAgRFdP
UkQgbVByZXNlbnRJbnRlcnZhbDsKLSAgICBib29sIG1QcmVzZW50SW50ZXJ2YWxEaXJ0eTsKLSAg
ICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIElOQ0xVREVf
U1VSRkFDRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9saWJFR0wuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDg5ZDJjLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDExODEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbGliRUdMLmNw
cDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgRUdMIGZ1bmN0aW9ucy4KLQotI2luY2x1ZGUgPGV4
Y2VwdGlvbj4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbW1vbi92
ZXJzaW9uLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgotCi0jaW5jbHVkZSAibGliRUdML21haW4uaCIKLSNpbmNsdWRlICJs
aWJFR0wvRGlzcGxheS5oIgotCi0KLWJvb2wgdmFsaWRhdGVEaXNwbGF5KGVnbDo6RGlzcGxheSAq
ZGlzcGxheSkKLXsKLSAgICBpZiAoZGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0RJU1BMQVksIGZhbHNlKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWRpc3BsYXktPmlzSW5pdGlhbGl6ZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVDb25maWcoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBFR0xD
b25maWcgY29uZmlnKQotewotICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghZGlzcGxheS0+aXNW
YWxpZENvbmZpZyhjb25maWcpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
Q09ORklHLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFs
aWRhdGVDb250ZXh0KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZ2w6OkNvbnRleHQgKmNvbnRleHQp
Ci17Ci0gICAgaWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFkaXNwbGF5LT5pc1ZhbGlkQ29udGV4dChj
b250ZXh0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0NPTlRFWFQsIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB2YWxpZGF0ZVN1cmZh
Y2UoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0gICAg
aWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlzcGxheSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCFkaXNwbGF5LT5pc1ZhbGlkU3VyZmFjZShzdXJmYWNlKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZXh0ZXJuICJDIgotewotRUdMaW50IF9fc3Rk
Y2FsbCBlZ2xHZXRFcnJvcih2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0gICAgRUdMaW50
IGVycm9yID0gZWdsOjpnZXRDdXJyZW50RXJyb3IoKTsKLQotICAgIGlmIChlcnJvciAhPSBFR0xf
U1VDQ0VTUykKLSAgICB7Ci0gICAgICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKEVHTF9TVUNDRVNT
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLUVHTERpc3BsYXkgX19zdGRjYWxs
IGVnbEdldERpc3BsYXkoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCkKLXsKLSAgICBF
VkVOVCgiKEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQgPSAweCUwLjhwKSIsIGRpc3Bs
YXlfaWQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICByZXR1cm4gZWdsOjpEaXNwbGF5Ojpn
ZXREaXNwbGF5KGRpc3BsYXlfaWQpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX0RJU1BM
QVkpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsSW5pdGlhbGl6ZShFR0xE
aXNwbGF5IGRweSwgRUdMaW50ICptYWpvciwgRUdMaW50ICptaW5vcikKLXsKLSAgICBFVkVOVCgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50ICptYWpvciA9IDB4JTAuOHAsIEVHTGlu
dCAqbWlub3IgPSAweCUwLjhwKSIsCi0gICAgICAgICAgZHB5LCBtYWpvciwgbWlub3IpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoZHB5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBFR0xfRkFMU0Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nh
c3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIWRpc3BsYXktPmluaXRpYWxp
emUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElB
TElaRUQsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFqb3IpICptYWpv
ciA9IDE7Ci0gICAgICAgIGlmIChtaW5vcikgKm1pbm9yID0gNDsKLQotICAgICAgICByZXR1cm4g
c3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAg
IH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsVGVybWluYXRlKEVHTERpc3BsYXkgZHB5
KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwKSIsIGRweSk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChkcHkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0RJU1BMQVksIEVHTF9GQUxTRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGRpc3BsYXktPnRlcm1pbmF0ZSgpOwot
Ci0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlT
dHJpbmcoRUdMRGlzcGxheSBkcHksIEVHTGludCBuYW1lKQotewotICAgIEVWRU5UKCIoRUdMRGlz
cGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQgbmFtZSA9ICVkKSIsIGRweSwgbmFtZSk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZURpc3BsYXkoZGlz
cGxheSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3dpdGNoIChuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBFR0xfQ0xJ
RU5UX0FQSVM6Ci0gICAgICAgICAgICByZXR1cm4gc3VjY2VzcygiT3BlbkdMX0VTIik7Ci0gICAg
ICAgICAgY2FzZSBFR0xfRVhURU5TSU9OUzoKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5LT5n
ZXRFeHRlbnNpb25TdHJpbmcoKTsKLSAgICAgICAgICBjYXNlIEVHTF9WRU5ET1I6Ci0gICAgICAg
ICAgICByZXR1cm4gc3VjY2VzcygiR29vZ2xlIEluYy4iKTsKLSAgICAgICAgICBjYXNlIEVHTF9W
RVJTSU9OOgotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoIjEuNCAoQU5HTEUgIlZFUlNJT05f
U1RSSU5HIikiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgKGNvbnN0IGNoYXIqKU5VTEwpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGNvbnN0
IGNoYXIqKU5VTEwpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsR2V0Q29u
ZmlncyhFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29uZmlnX3Np
emUsIEVHTGludCAqbnVtX2NvbmZpZykKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0g
MHglMC44cCwgRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgIgotICAgICAgICAgICJFR0xp
bnQgY29uZmlnX3NpemUgPSAlZCwgRUdMaW50ICpudW1fY29uZmlnID0gMHglMC44cCkiLAotICAg
ICAgICAgIGRweSwgY29uZmlncywgY29uZmlnX3NpemUsIG51bV9jb25maWcpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6
OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVEaXNwbGF5KGRpc3BsYXkp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFudW1fY29uZmlnKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjb25zdCBFR0xpbnQgYXR0cmliTGlzdFtdID0gICAge0VHTF9OT05FfTsKLQotICAgICAgICBp
ZiAoIWRpc3BsYXktPmdldENvbmZpZ3MoY29uZmlncywgYXR0cmliTGlzdCwgY29uZmlnX3NpemUs
IG51bV9jb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3Vj
Y2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0K
LX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsQ2hvb3NlQ29uZmlnKEVHTERpc3BsYXkgZHB5
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0LCBFR0xDb25maWcgKmNvbmZpZ3MsIEVHTGludCBj
b25maWdfc2l6ZSwgRUdMaW50ICpudW1fY29uZmlnKQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCwgIgot
ICAgICAgICAgICJFR0xDb25maWcgKmNvbmZpZ3MgPSAweCUwLjhwLCBFR0xpbnQgY29uZmlnX3Np
emUgPSAlZCwgRUdMaW50ICpudW1fY29uZmlnID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwg
YXR0cmliX2xpc3QsIGNvbmZpZ3MsIGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlRGlzcGxheShkaXNwbGF5
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghbnVtX2NvbmZpZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY29uc3QgRUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07Ci0KLSAgICAgICAg
aWYgKCFhdHRyaWJfbGlzdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXR0cmliX2xpc3QgPSBh
dHRyaWJMaXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+Z2V0Q29uZmlncyhjb25m
aWdzLCBhdHRyaWJfbGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpOwotCi0gICAgICAgIHJl
dHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7
Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xHZXRDb25maWdBdHRyaWIoRUdM
RGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAq
dmFsdWUpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZp
ZyBjb25maWcgPSAweCUwLjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCAqdmFsdWUg
PSAweCUwLjhwKSIsCi0gICAgICAgICAgZHB5LCBjb25maWcsIGF0dHJpYnV0ZSwgdmFsdWUpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNf
Y2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVDb25maWco
ZGlzcGxheSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxT
RTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZGlzcGxheS0+Z2V0Q29uZmlnQXR0cmliKGNv
bmZpZywgYXR0cmlidXRlLCB2YWx1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7Ci0gICAgfQotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVXaW5kb3dTdXJm
YWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVXaW5kb3dUeXBl
IHdpbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3Bs
YXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVHTE5hdGl2ZVdp
bmRvd1R5cGUgd2luID0gMHglMC44cCwgIgotICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywgd2luLCBhdHRyaWJfbGlzdCk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0
PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNw
bGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZB
Q0U7Ci0gICAgICAgIH0KLQotICAgICAgICBIV05EIHdpbmRvdyA9IChIV05EKXdpbjsKLQotICAg
ICAgICBpZiAoIUlzV2luZG93KHdpbmRvdykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX05BVElWRV9XSU5ET1csIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBkaXNwbGF5LT5jcmVhdGVXaW5kb3dTdXJmYWNlKHdpbmRvdywg
Y29uZmlnLCBhdHRyaWJfbGlzdCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFD
RSk7Ci0gICAgfQotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQYnVmZmVyU3Vy
ZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRy
aWJfbGlzdCkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29u
ZmlnIGNvbmZpZyA9IDB4JTAuOHAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhw
KSIsCi0gICAgICAgICAgZHB5LCBjb25maWcsIGF0dHJpYl9saXN0KTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZp
ZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBkaXNwbGF5LT5jcmVhdGVPZmZzY3JlZW5TdXJmYWNlKGNv
bmZpZywgTlVMTCwgYXR0cmliX2xpc3QpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NV
UkZBQ0UpOwotICAgIH0KLX0KLQotRUdMU3VyZmFjZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGl4bWFw
U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMTmF0aXZlUGl4bWFw
VHlwZSBwaXhtYXAsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0gICAgRVZFTlQoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xO
YXRpdmVQaXhtYXBUeXBlIHBpeG1hcCA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiY29uc3QgRUdM
aW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHApIiwgZHB5LCBjb25maWcsIHBpeG1hcCwgYXR0cmli
X2xpc3QpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRh
dGVDb25maWcoZGlzcGxheSwgY29uZmlnKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEVHTF9OT19TVVJGQUNFOwotICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX05PX1NVUkZBQ0UpOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVh
biBfX3N0ZGNhbGwgZWdsRGVzdHJveVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ug
c3VyZmFjZSkKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3Vy
ZmFjZSBzdXJmYWNlID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3Bs
YXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1cmZhY2UgPSBzdGF0aWNfY2Fz
dDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFj
ZShkaXNwbGF5LCBlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVH
TF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJG
QUNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNF
LCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+ZGVzdHJveVN1cmZh
Y2UoKGVnbDo6U3VyZmFjZSopc3VyZmFjZSk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdM
X1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVH
TEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5U3VyZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMU3Vy
ZmFjZSBzdXJmYWNlLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKQotewotICAgIEVW
RU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUw
LjhwLCBFR0xpbnQgYXR0cmlidXRlID0gJWQsIEVHTGludCAqdmFsdWUgPSAweCUwLjhwKSIsCi0g
ICAgICAgICAgZHB5LCBzdXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3Vy
ZmFjZSopc3VyZmFjZTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBl
Z2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6Ci0gICAgICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdM
X1ZHX0NPTE9SU1BBQ0U6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19JRDoKLSAgICAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgotICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFj
ZS0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9I
T1JJWk9OVEFMX1JFU09MVVRJT046Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX0xBUkdFU1RfUEJV
RkZFUjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfTUlQTUFQX1RFWFRVUkU6Ci0gICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRUdMX01JUE1BUF9MRVZFTDoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfTVVMVElT
QU1QTEVfUkVTT0xWRToKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfUElYRUxfQVNQRUNUX1JBVElP
OgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9SRU5ERVJfQlVGRkVSOgotICAgICAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEVHTF9TV0FQX0JFSEFWSU9SOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8v
IEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX0ZP
Uk1BVDoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfVEVYVFVSRV9UQVJHRVQ6Ci0gICAgICAgICAg
ICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRUdMX1ZFUlRJQ0FMX1JFU09MVVRJT046Ci0gICAgICAgICAgICBVTklNUExFTUVO
VEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdM
X1dJRFRIOgotICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+Z2V0V2lkdGgoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQ
T1JURURfTlY6Ci0gICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5pc1Bvc3RTdWJCdWZm
ZXJTdXBwb3J0ZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwg
ZWdsUXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1
cmZhY2UsIEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKip2YWx1ZSkKLXsKLSAgICBUUkFDRSgiKEVH
TERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdM
aW50IGF0dHJpYnV0ZSA9ICVkLCB2b2lkICoqdmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAg
ZHB5LCBzdXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5
KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3VyZmFjZSopc3Vy
ZmFjZTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBlZ2xTdXJmYWNl
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEVHTF9EM0RfVEVYVFVSRV8yRF9TSEFSRV9IQU5ETEVfQU5HTEU6Ci0gICAgICAgICAgICAq
dmFsdWUgPSAodm9pZCopIGVnbFN1cmZhY2UtPmdldFNoYXJlSGFuZGxlKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAg
ICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEJpbmRBUEkoRUdMZW51bSBhcGkpCi17
Ci0gICAgRVZFTlQoIihFR0xlbnVtIGFwaSA9IDB4JVgpIiwgYXBpKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChhcGkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEVHTF9P
UEVOR0xfQVBJOgotICAgICAgICAgIGNhc2UgRUdMX09QRU5WR19BUEk6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7ICAgLy8gTm90IHN1cHBv
cnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgY2FzZSBFR0xfT1BFTkdMX0VT
X0FQSToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBlZ2w6OnNldEN1cnJlbnRBUEkoYXBpKTsKLQotICAgICAgICByZXR1cm4gc3Vj
Y2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0K
LX0KLQotRUdMZW51bSBfX3N0ZGNhbGwgZWdsUXVlcnlBUEkodm9pZCkKLXsKLSAgICBFVkVOVCgi
KCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgRUdMZW51bSBBUEkgPSBlZ2w6OmdldEN1
cnJlbnRBUEkoKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhBUEkpOwotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bFdhaXRDbGllbnQodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQot
RUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUmVsZWFzZVRocmVhZCh2b2lkKQotewotICAgIEVWRU5U
KCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2xNYWtlQ3VycmVudChFR0xfTk9f
RElTUExBWSwgRUdMX05PX0NPTlRFWFQsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSk7
Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0
ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGJ1ZnR5cGUs
IEVHTENsaWVudEJ1ZmZlciBidWZmZXIsIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAq
YXR0cmliX2xpc3QpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVH
TGVudW0gYnVmdHlwZSA9IDB4JVgsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIgPSAweCUwLjhwLCAi
Ci0gICAgICAgICAgIkVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgYnVmdHlwZSwgYnVmZmVyLCBj
b25maWcsIGF0dHJpYl9saXN0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAg
ICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChi
dWZ0eXBlICE9IEVHTF9EM0RfVEVYVFVSRV8yRF9TSEFSRV9IQU5ETEVfQU5HTEUgfHwgIWJ1ZmZl
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVS
LCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGlzcGxheS0+
Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShjb25maWcsIChIQU5ETEUpYnVmZmVyLCBhdHRyaWJfbGlz
dCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotfQotCi1F
R0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xTdXJmYWNlQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xT
dXJmYWNlIHN1cmZhY2UsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCB2YWx1ZSkKLXsKLSAgICBF
VkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHgl
MC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgdmFsdWUgPSAlZCkiLAotICAgICAg
ICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+
KGRweSk7Ci0gICAgICAgIGVnbDo6U3VyZmFjZSAqZWdsU3VyZmFjZSA9IHN0YXRpY19jYXN0PGVn
bDo6U3VyZmFjZSo+KHN1cmZhY2UpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVTdXJmYWNlKGRp
c3BsYXksIGVnbFN1cmZhY2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZB
TFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0K
LSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEJpbmRUZXhJ
bWFnZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xpbnQgYnVmZmVyKQot
ewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZh
Y2UgPSAweCUwLjhwLCBFR0xpbnQgYnVmZmVyID0gJWQpIiwgZHB5LCBzdXJmYWNlLCBidWZmZXIp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAgICBlZ2w6OlN1cmZhY2UgKmVnbFN1
cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihzdXJmYWNlKTsKLQotICAgICAgICBp
ZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBlZ2xTdXJmYWNlKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChidWZm
ZXIgIT0gRUdMX0JBQ0tfQlVGRkVSKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSB8fCBlZ2xTdXJmYWNlLT5nZXRXaW5kb3dIYW5k
bGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFD
RSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5nZXRC
b3VuZFRleHR1cmUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUNDRVNTLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVnbFN1cmZh
Y2UtPmdldFRleHR1cmVGb3JtYXQoKSA9PSBFR0xfTk9fVEVYVFVSRSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9GQUxTRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWdsQmluZFRleEltYWdlKGVnbFN1cmZhY2UpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX0ZBTFNFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBl
Z2xSZWxlYXNlVGV4SW1hZ2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdM
aW50IGJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdM
U3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3Vy
ZmFjZSwgYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpT
dXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7
Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoYnVmZmVyICE9IEVHTF9CQUNLX0JVRkZFUikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UgfHwgZWdsU3VyZmFjZS0+
Z2V0V2luZG93SGFuZGxlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWds
U3VyZmFjZS0+Z2V0VGV4dHVyZUZvcm1hdCgpID09IEVHTF9OT19URVhUVVJFKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX0ZBTFNFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBlZ2xTdXJmYWNlLT5n
ZXRCb3VuZFRleHR1cmUoKTsKLQotICAgICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGV4dHVyZS0+cmVsZWFzZVRleEltYWdlKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFM
U0UpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsU3dhcEludGVydmFsKEVH
TERpc3BsYXkgZHB5LCBFR0xpbnQgaW50ZXJ2YWwpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5
IGRweSA9IDB4JTAuOHAsIEVHTGludCBpbnRlcnZhbCA9ICVkKSIsIGRweSwgaW50ZXJ2YWwpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNf
Y2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotCi0gICAgICAgIGlmICghdmFsaWRhdGVEaXNwbGF5
KGRpc3BsYXkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZWdsOjpTdXJmYWNlICpkcmF3X3N1cmZhY2UgPSBzdGF0aWNfY2Fz
dDxlZ2w6OlN1cmZhY2UqPihlZ2w6OmdldEN1cnJlbnREcmF3U3VyZmFjZSgpKTsKLQotICAgICAg
ICBpZiAoZHJhd19zdXJmYWNlID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGRyYXdfc3VyZmFjZS0+c2V0U3dhcEludGVydmFsKGludGVydmFsKTsKLQotICAg
ICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
RkFMU0UpOwotICAgIH0KLX0KLQotRUdMQ29udGV4dCBfX3N0ZGNhbGwgZWdsQ3JlYXRlQ29udGV4
dChFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMQ29udGV4dCBzaGFyZV9jb250
ZXh0LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxh
eSBkcHkgPSAweCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMQ29udGV4dCBz
aGFyZV9jb250ZXh0ID0gMHglMC44cCwgIgotICAgICAgICAgICJjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywgc2hhcmVfY29udGV4dCwgYXR0cmliX2xp
c3QpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGll
bnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgdHdvLgotICAgICAgICBF
R0xpbnQgY2xpZW50X3ZlcnNpb24gPSAxOwotICAgICAgICBib29sIHJlc2V0X25vdGlmaWNhdGlv
biA9IGZhbHNlOwotICAgICAgICBib29sIHJvYnVzdF9hY2Nlc3MgPSBmYWxzZTsKLQotICAgICAg
ICBpZiAoYXR0cmliX2xpc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoY29uc3QgRUdM
aW50KiBhdHRyaWJ1dGUgPSBhdHRyaWJfbGlzdDsgYXR0cmlidXRlWzBdICE9IEVHTF9OT05FOyBh
dHRyaWJ1dGUgKz0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0
dHJpYnV0ZVswXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVH
TF9DT05URVhUX0NMSUVOVF9WRVJTSU9OOgotICAgICAgICAgICAgICAgICAgICBjbGllbnRfdmVy
c2lvbiA9IGF0dHJpYnV0ZVsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEVHTF9DT05URVhUX09QRU5HTF9ST0JVU1RfQUNDRVNTX0VYVDoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVsxXSA9PSBFR0xfVFJVRSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7ICAgLy8gVW5pbXBsZW1lbnRlZAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcm9idXN0X2FjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlWzFdICE9IEVHTF9G
QUxTRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJ
QlVURSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgRUdMX0NPTlRFWFRfT1BFTkdMX1JFU0VUX05PVElGSUNBVElPTl9T
VFJBVEVHWV9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVbMV0gPT0gRUdM
X0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNl
dF9ub3RpZmljYXRpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRy
aWJ1dGVbMV0gIT0gRUdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19DT05URVhU
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoY2xpZW50X3ZlcnNpb24gIT0gMikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoc2hhcmVfY29udGV4dCAmJiBzdGF0aWNfY2FzdDxnbDo6Q29u
dGV4dCo+KHNoYXJlX2NvbnRleHQpLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpICE9IHJl
c2V0X25vdGlmaWNhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7Ci0gICAgICAgIH0KLQotICAgICAgICBF
R0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZpZywgc3RhdGlj
X2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KSwgcmVzZXRfbm90aWZpY2F0aW9uLCBy
b2J1c3RfYWNjZXNzKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIHJldHVy
biBzdWNjZXNzKGNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX05PX0NPTlRFWFQpOwotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX05PX0NPTlRFWFQpOwotICAgIH0KLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWds
RGVzdHJveUNvbnRleHQoRUdMRGlzcGxheSBkcHksIEVHTENvbnRleHQgY3R4KQotewotICAgIEVW
RU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xDb250ZXh0IGN0eCA9IDB4JTAuOHAp
IiwgZHB5LCBjdHgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oY3R4KTsKLQotICAgICAg
ICBpZiAoIXZhbGlkYXRlQ29udGV4dChkaXNwbGF5LCBjb250ZXh0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjdHgg
PT0gRUdMX05PX0NPTlRFWFQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0NPTlRFWFQsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkaXNwbGF5
LT5kZXN0cm95Q29udGV4dChjb250ZXh0KTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xf
VFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdM
Qm9vbGVhbiBfX3N0ZGNhbGwgZWdsTWFrZUN1cnJlbnQoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZh
Y2UgZHJhdywgRUdMU3VyZmFjZSByZWFkLCBFR0xDb250ZXh0IGN0eCkKLXsKLSAgICBFVkVOVCgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBkcmF3ID0gMHglMC44cCwgRUdM
U3VyZmFjZSByZWFkID0gMHglMC44cCwgRUdMQ29udGV4dCBjdHggPSAweCUwLjhwKSIsCi0gICAg
ICAgICAgZHB5LCBkcmF3LCByZWFkLCBjdHgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4o
Y3R4KTsKLSAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2
aWNlKCk7Ci0KLSAgICAgICAgaWYgKCFkZXZpY2UgfHwgZGlzcGxheS0+dGVzdERldmljZUxvc3Qo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgZGlzcGxheS0+bm90aWZ5RGV2aWNlTG9zdCgpOwot
ICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
aXNwbGF5LT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEVHTF9DT05URVhUX0xPU1QsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoY3R4ICE9IEVHTF9OT19DT05URVhUICYmICF2YWxpZGF0ZUNvbnRleHQoZGlzcGxheSwgY29u
dGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoKGRyYXcgIT0gRUdMX05PX1NVUkZBQ0UgJiYgIXZhbGlkYXRlU3Vy
ZmFjZShkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSkpIHx8Ci0gICAg
ICAgICAgICAocmVhZCAhPSBFR0xfTk9fU1VSRkFDRSAmJiAhdmFsaWRhdGVTdXJmYWNlKGRpc3Bs
YXksIHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KHJlYWQpKSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhdyAh
PSByZWFkKQotICAgICAgICB7Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklY
TUUKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6c2V0Q3VycmVudERpc3BsYXkoZHB5KTsKLSAg
ICAgICAgZWdsOjpzZXRDdXJyZW50RHJhd1N1cmZhY2UoZHJhdyk7Ci0gICAgICAgIGVnbDo6c2V0
Q3VycmVudFJlYWRTdXJmYWNlKHJlYWQpOwotCi0gICAgICAgIGdsTWFrZUN1cnJlbnQoY29udGV4
dCwgZGlzcGxheSwgc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZHJhdykpOwotCi0gICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7Ci0gICAgfQotfQotCi1FR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50Q29udGV4
dCh2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBF
R0xDb250ZXh0IGNvbnRleHQgPSBnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0KLSAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fQ09OVEVY
VCk7Ci0gICAgfQotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50U3VyZmFj
ZShFR0xpbnQgcmVhZGRyYXcpCi17Ci0gICAgRVZFTlQoIihFR0xpbnQgcmVhZGRyYXcgPSAlZCki
LCByZWFkZHJhdyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChyZWFkZHJhdyA9PSBF
R0xfUkVBRCkKLSAgICAgICAgewotICAgICAgICAgICAgRUdMU3VyZmFjZSByZWFkID0gZWdsOjpn
ZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHJlYWQp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHJlYWRkcmF3ID09IEVHTF9EUkFXKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFR0xTdXJmYWNlIGRyYXcgPSBlZ2w6OmdldEN1cnJlbnREcmF3
U3VyZmFjZSgpOwotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoZHJhdyk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLX0KLQotRUdMRGlzcGxheSBfX3N0ZGNhbGwg
ZWdsR2V0Q3VycmVudERpc3BsYXkodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgRUdMRGlzcGxheSBkcHkgPSBlZ2w6OmdldEN1cnJlbnREaXNwbGF5
KCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoZHB5KTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9OT19ESVNQTEFZKTsKLSAgICB9Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1
ZXJ5Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGludCBhdHRyaWJ1
dGUsIEVHTGludCAqdmFsdWUpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xp
bnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgY3R4LCBhdHRyaWJ1dGUsIHZh
bHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
c3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KGN0eCk7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZUNvbnRleHQoZGlzcGxheSwgY29udGV4dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcygwKTsKLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xX
YWl0R0wodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
MCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLX0KLQotRUdMQm9v
bGVhbiBfX3N0ZGNhbGwgZWdsV2FpdE5hdGl2ZShFR0xpbnQgZW5naW5lKQotewotICAgIEVWRU5U
KCIoRUdMaW50IGVuZ2luZSA9ICVkKSIsIGVuZ2luZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNz
KDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci19Ci0KLUVHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbFN3YXBCdWZmZXJzKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNl
IHN1cmZhY2UpCi17Ci0gICAgRVZFTlQoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1
cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHApIiwgZHB5LCBzdXJmYWNlKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNw
bGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3Vy
ZmFjZSopc3VyZmFjZTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlU3VyZmFjZShkaXNwbGF5LCBl
Z2xTdXJmYWNlKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChkaXNwbGF5LT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVHTF9GQUxTRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFDRSwgRUdMX0ZB
TFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlZ2xTdXJmYWNlLT5zd2FwKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdM
X0ZBTFNFOwotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xDb3B5QnVmZmVycyhFR0xEaXNw
bGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlLCBFR0xOYXRpdmVQaXhtYXBUeXBlIHRhcmdldCkK
LXsKLSAgICBFVkVOVCgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJm
YWNlID0gMHglMC44cCwgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQgPSAweCUwLjhwKSIsIGRw
eSwgc3VyZmFjZSwgdGFyZ2V0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAg
ZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3Vy
ZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFj
ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZGlzcGxheS0+aXNEZXZpY2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAgICAgICAgcmV0
dXJuIHN1Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0K
LX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUG9zdFN1YkJ1ZmZlck5WKEVHTERpc3BsYXkg
ZHB5LCBFR0xTdXJmYWNlIHN1cmZhY2UsIEVHTGludCB4LCBFR0xpbnQgeSwgRUdMaW50IHdpZHRo
LCBFR0xpbnQgaGVpZ2h0KQotewotICAgIEVWRU5UKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhw
LCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xpbnQgeCA9ICVkLCBFR0xpbnQgeSA9
ICVkLCBFR0xpbnQgd2lkdGggPSAlZCwgRUdMaW50IGhlaWdodCA9ICVkKSIsIGRweSwgc3VyZmFj
ZSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh4
IDwgMCB8fCB5IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWds
OjpEaXNwbGF5Kj4oZHB5KTsKLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gc3Rh
dGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oc3VyZmFjZSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0
ZVN1cmZhY2UoZGlzcGxheSwgZWdsU3VyZmFjZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlzcGxheS0+aXNEZXZp
Y2VMb3N0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVY
VF9MT1NULCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN1cmZhY2UgPT0g
RUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX1NVUkZBQ0UsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWdsU3Vy
ZmFjZS0+cG9zdFN1YkJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBFR0xfRkFMU0U7Ci19
Ci0KLV9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGVn
bEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQotewotICAgIEVWRU5UKCIoY29u
c3QgY2hhciAqcHJvY25hbWUgPSBcIiVzXCIpIiwgcHJvY25hbWUpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0
IGNoYXIgKm5hbWU7Ci0gICAgICAgICAgICBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlIGFkZHJlc3M7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IEV4
dGVuc2lvbiBlZ2xFeHRlbnNpb25zW10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ImVnbFF1
ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWVnbFF1ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRX0sCi0gICAgICAgICAgICB7ImVn
bFBvc3RTdWJCdWZmZXJOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWVnbFBvc3RTdWJCdWZmZXJOVn0sCi0gICAgICAgICAgICB7IiIsIE5VTEx9LAotICAgICAg
ICB9OwotCi0gICAgICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihlZ2xFeHRlbnNp
b25zKSAvIHNpemVvZihFeHRlbnNpb24pOyBleHQrKykKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKHN0cmNtcChwcm9jbmFtZSwgZWdsRXh0ZW5zaW9uc1tleHRdLm5hbWUpID09IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJG
dW5jdGlvblBvaW50ZXJUeXBlKWVnbEV4dGVuc2lvbnNbZXh0XS5hZGRyZXNzOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGdsR2V0UHJvY0FkZHJlc3MocHJvY25h
bWUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpTlVMTCk7Ci0gICAgfQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
MWE1ZTY3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
bGliRUdMLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLUxJQlJBUlkJbGliRUdM
Ci1FWFBPUlRTCi0JZWdsQmluZEFQSSAgICAgICAgICAgICAgICAgICAgICBAMTQKLQllZ2xCaW5k
VGV4SW1hZ2UgICAgICAgICAgICAgICAgIEAyMAotCWVnbENob29zZUNvbmZpZyAgICAgICAgICAg
ICAgICAgQDcKLQllZ2xDb3B5QnVmZmVycyAgICAgICAgICAgICAgICAgIEAzMwotCWVnbENyZWF0
ZUNvbnRleHQgICAgICAgICAgICAgICAgQDIzCi0JZWdsQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRC
dWZmZXIgICAgICAgIEAxOAotCWVnbENyZWF0ZVBidWZmZXJTdXJmYWNlICAgICAgICAgQDEwCi0J
ZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZSAgICAgICAgICBAMTEKLQllZ2xDcmVhdGVXaW5kb3dTdXJm
YWNlICAgICAgICAgIEA5Ci0JZWdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICBAMjQKLQll
Z2xEZXN0cm95U3VyZmFjZSAgICAgICAgICAgICAgIEAxMgotCWVnbEdldENvbmZpZ0F0dHJpYiAg
ICAgICAgICAgICAgQDgKLQllZ2xHZXRDb25maWdzICAgICAgICAgICAgICAgICAgIEA2Ci0JZWds
R2V0Q3VycmVudENvbnRleHQgICAgICAgICAgICBAMjYKLQllZ2xHZXRDdXJyZW50RGlzcGxheSAg
ICAgICAgICAgIEAyOAotCWVnbEdldEN1cnJlbnRTdXJmYWNlICAgICAgICAgICAgQDI3Ci0JZWds
R2V0RGlzcGxheSAgICAgICAgICAgICAgICAgICBAMgotCWVnbEdldEVycm9yICAgICAgICAgICAg
ICAgICAgICAgQDEKLQllZ2xHZXRQcm9jQWRkcmVzcyAgICAgICAgICAgICAgIEAzNAotCWVnbElu
aXRpYWxpemUgICAgICAgICAgICAgICAgICAgQDMKLQllZ2xNYWtlQ3VycmVudCAgICAgICAgICAg
ICAgICAgIEAyNQotCWVnbFF1ZXJ5QVBJICAgICAgICAgICAgICAgICAgICAgQDE1Ci0JZWdsUXVl
cnlDb250ZXh0ICAgICAgICAgICAgICAgICBAMjkKLQllZ2xRdWVyeVN0cmluZyAgICAgICAgICAg
ICAgICAgIEA1Ci0JZWdsUXVlcnlTdXJmYWNlICAgICAgICAgICAgICAgICBAMTMKLQllZ2xSZWxl
YXNlVGV4SW1hZ2UgICAgICAgICAgICAgIEAyMQotCWVnbFJlbGVhc2VUaHJlYWQgICAgICAgICAg
ICAgICAgQDE3Ci0JZWdsU3VyZmFjZUF0dHJpYiAgICAgICAgICAgICAgICBAMTkKLQllZ2xTd2Fw
QnVmZmVycyAgICAgICAgICAgICAgICAgIEAzMgotCWVnbFN3YXBJbnRlcnZhbCAgICAgICAgICAg
ICAgICAgQDIyCi0JZWdsVGVybWluYXRlICAgICAgICAgICAgICAgICAgICBANAotCWVnbFdhaXRD
bGllbnQgICAgICAgICAgICAgICAgICAgQDE2Ci0JZWdsV2FpdEdMICAgICAgICAgICAgICAgICAg
ICAgICBAMzAKLQllZ2xXYWl0TmF0aXZlICAgICAgICAgICAgICAgICAgIEAzMQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLnJjIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9s
aWJFR0wucmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMWYzMmYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wucmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJh
dGVkIHJlc291cmNlIHNjcmlwdC4KLS8vCi0jaW5jbHVkZSAicmVzb3VyY2UuaCIKLQotI2RlZmlu
ZSBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8v
IEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAyIHJlc291cmNlLgotLy8KLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSAiLi4vY29tbW9uL3ZlcnNpb24uaCIKLQotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLSN1bmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCi0KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKLQotI2lmICFkZWZpbmVk
KEFGWF9SRVNPVVJDRV9ETEwpIHx8IGRlZmluZWQoQUZYX1RBUkdfRU5VKQotI2lmZGVmIF9XSU4z
MgotTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0VOR0xJU0hfVVMKLSNwcmFnbWEgY29k
ZV9wYWdlKDEyNTIpCi0jZW5kaWYgLy9fV0lOMzIKLQotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQK
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gVEVYVElOQ0xVREUKLS8vCi0KLTEgVEVYVElO
Q0xVREUgCi1CRUdJTgotICAgICJyZXNvdXJjZS5oXDAiCi1FTkQKLQotMiBURVhUSU5DTFVERSAK
LUJFR0lOCi0gICAgIiNpbmNsdWRlICIiYWZ4cmVzLmgiIlxyXG4iCi0gICAgIiNpbmNsdWRlICIi
Li4vY29tbW9uL3ZlcnNpb24uaCIiXDAiCi1FTkQKLQotMyBURVhUSU5DTFVERSAKLUJFR0lOCi0g
ICAgIlxyXG4iCi0gICAgIlwwIgotRU5ECi0KLSNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VE
Ci0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBWZXJzaW9uCi0vLwotCi1WU19WRVJT
SU9OX0lORk8gVkVSU0lPTklORk8KLSBGSUxFVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZF
UlNJT04sQlVJTERfVkVSU0lPTixCVUlMRF9SRVZJU0lPTgotIFBST0RVQ1RWRVJTSU9OIE1BSk9S
X1ZFUlNJT04sTUlOT1JfVkVSU0lPTixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9OCi0gRklM
RUZMQUdTTUFTSyAweDE3TAotI2lmZGVmIF9ERUJVRwotIEZJTEVGTEFHUyAweDFMCi0jZWxzZQot
IEZJTEVGTEFHUyAweDBMCi0jZW5kaWYKLSBGSUxFT1MgMHg0TAotIEZJTEVUWVBFIDB4MkwKLSBG
SUxFU1VCVFlQRSAweDBMCi1CRUdJTgotICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKLSAgICBC
RUdJTgotICAgICAgICBCTE9DSyAiMDQwOTA0YjAiCi0gICAgICAgIEJFR0lOCi0gICAgICAgICAg
ICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGli
cmFyeSIKLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0g
ICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYkVHTCIKLSAgICAgICAgICAgIFZB
TFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4iCi0g
ICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJFR0wuZGxsIgotICAgICAg
ICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgICAgICBW
QUxVRSAiUHJvZHVjdE5hbWUiLCAiQU5HTEUgbGliRUdMIER5bmFtaWMgTGluayBMaWJyYXJ5Igot
ICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcKLSAgICAg
ICAgRU5ECi0gICAgRU5ECi0gICAgQkxPQ0sgIlZhckZpbGVJbmZvIgotICAgIEJFR0lOCi0gICAg
ICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwCi0gICAgRU5ECi1FTkQKLQotI2Vu
ZGlmICAgIC8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcwotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQotCi0KLSNpZm5kZWYgQVBTVFVESU9fSU5WT0tFRAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
Ci0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMyByZXNvdXJjZS4KLS8vCi0KLQot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLSNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNw
cm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDJkMjkyLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagorKysgL2Rldi9udWxs
CkBAIC0xLDQ0MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dz
LTEyNTIiPz4KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0Ci0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysi
Ci0JVmVyc2lvbj0iOS4wMCIKLQlOYW1lPSJsaWJFR0wiCi0JUHJvamVjdEdVSUQ9IntFNzQ2RkNB
OS02NEMzLTQzM0UtODVFOC05QTVBNjdBQjdFRDZ9IgotCVJvb3ROYW1lc3BhY2U9ImxpYkVHTCIK
LQlLZXl3b3JkPSJXaW4zMlByb2oiCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIgot
CT4KLQk8UGxhdGZvcm1zPgotCQk8UGxhdGZvcm0KLQkJCU5hbWU9IldpbjMyIgotCQkvPgotCQk8
UGxhdGZvcm0KLQkJCU5hbWU9Ing2NCIKLQkJLz4KLQk8L1BsYXRmb3Jtcz4KLQk8VG9vbEZpbGVz
PgotCTwvVG9vbEZpbGVzPgotCTxDb25maWd1cmF0aW9ucz4KLQkJPENvbmZpZ3VyYXRpb24KLQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQo
Q29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIx
IgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGly
ZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIK
LQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JE
TEw7TElCRUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYIgotCQkJ
CU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKLQkJCQlS
dW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJu
aW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5
OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJv
YmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiCi0JCQkJV2FybkFz
RXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJj
ZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21w
aWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25h
bE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGli
IGR4Z3VpZC5saWIgZHdtYXBpLmxpYiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCi0JCQkJTW9k
dWxlRGVmaW5pdGlvbkZpbGU9ImxpYkVHTC5kZWYiCi0JCQkJRGVsYXlMb2FkRExMcz0iZHdtYXBp
LmRsbCIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVt
PSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJl
dmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlm
aWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29s
IgotCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7
Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsm
I3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlO
YW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQo
Q29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3Vy
YXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIx
IgotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkND
dXN0b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5l
cmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlH
ZW5lcmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0
aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIgotCQkJCUFkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4v
aW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5E
T1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlO
TUFYO19TRUNVUkVfU0NMPTAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSI0IgotCQkJCURpc2FibGVTcGVjaWZp
Y1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQyNDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJ
RGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0
aW9uRm9ybWF0PSIzIgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNM
aW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlv
bmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBkeGd1aWQubGliIGR3bWFwaS5saWIiCi0JCQkJTGlu
a0luY3JlbWVudGFsPSIxIgotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJFR0wuZGVmIgot
CQkJCURlbGF5TG9hZERMTHM9ImR3bWFwaS5kbGwiCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0
aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIi
Ci0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9
IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0i
MSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8gb24mI3gw
RDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlv
bk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5kbGwm
cXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwm
cXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJFR0wubGliJnF1b3Q7ICZx
dW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4
MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9u
PgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iRGVidWd8eDY0IgotCQkJT3V0cHV0RGlyZWN0
b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIK
LQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlv
bk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0J
CQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0J
CQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9q
ZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4z
MjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJFR0xfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19E
RVBSRUNBVEU7Tk9NSU5NQVgiCi0JCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCi0JCQkJQmFzaWNS
dW50aW1lQ2hlY2tzPSIzIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgotCQkJCVVzZVByZWNvbXBp
bGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNX
YXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyIgotCQkJCURl
dGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlv
bkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlu
a2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJQWRkaXRpb25h
bERlcGVuZGVuY2llcz0iZDNkOS5saWIgZHhndWlkLmxpYiBkd21hcGkubGliIgotCQkJCUxpbmtJ
bmNyZW1lbnRhbD0iMiIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJ
CQlEZWxheUxvYWRETExzPSJkd21hcGkuZGxsIgotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlv
bj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIx
IgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjE3
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBE
OyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9u
TmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRsbCZx
dW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZx
dW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsgJnF1
b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gw
RDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+
Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCIKLQkJCU91dHB1dERpcmVj
dG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSki
Ci0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRp
b25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgot
CQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0
b21CdWlsZFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0
b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5l
cmF0b3JUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCQlU
YXJnZXRFbnZpcm9ubWVudD0iMyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5z
aW9uPSIyIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikv
Li47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0
aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElCRUdMX0VYUE9SVFM7X0NSVF9T
RUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NMPTAiCi0JCQkJUnVudGltZUxp
YnJhcnk9IjAiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVs
PSI0IgotCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MTAwOzQxMjc7NDE4OTs0MjM5OzQy
NDQ7NDI0NTs0NTEyOzQ3MDIiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJm
YWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCVdhcm5Bc0Vycm9yPSJ0
cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxl
clRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxPcHRpb25z
PSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiBkeGd1aWQu
bGliIGR3bWFwaS5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIgotCQkJCU1vZHVsZURlZmlu
aXRpb25GaWxlPSJsaWJFR0wuZGVmIgotCQkJCURlbGF5TG9hZERMTHM9ImR3bWFwaS5kbGwiCi0J
CQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJ
CQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKLQkJ
CQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249
IjAiCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJ
Q29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGly
KS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZx
dW90OyQoT3V0RGlyKVxsaWJFR0wuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91
dERpcilcbGliRUdMLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29u
ZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIK
LQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQk8L0NvbmZpZ3VyYXRpb25zPgotCTxSZWZlcmVu
Y2VzPgotCTwvUmVmZXJlbmNlcz4KLQk8RmlsZXM+Ci0JCTxGaWx0ZXIKLQkJCU5hbWU9IlNvdXJj
ZSBGaWxlcyIKLQkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNt
O2FzbXgiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEz
MkQ3NTJBMkZGfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXENvbmZpZy5j
cHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXENv
bW1vblxkZWJ1Zy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cRGlzcGxheS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cbGliRUdMLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTdXJmYWNlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CTwvRmlsdGVyPgotCQk8RmlsdGVyCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiCi0JCQlGaWx0ZXI9
Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCIKLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4
MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9IgotCQkJPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cQ29uZmlnLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cRGlzcGxheS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2wuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsZXh0
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGluY2x1ZGVcRUdMXGVnbHBsYXRmb3JtLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXHJlc291cmNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cdmVyc2lvbi5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJPC9GaWx0ZXI+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii5cbGli
RUdMLmRlZiIKLQkJCT4KLQkJPC9GaWxlPgotCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuXGxp
YkVHTC5yYyIKLQkJCT4KLQkJPC9GaWxlPgotCTwvRmlsZXM+Ci0JPEdsb2JhbHM+Ci0JPC9HbG9i
YWxzPgotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvbWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMTA3YmYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9tYWluLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBtYWluLmNwcDogRExMIGVudHJ5IHBvaW50IGFuZCBtYW5hZ2VtZW50IG9mIHRocmVhZC1sb2Nh
bCBkYXRhLgotCi0jaW5jbHVkZSAibGliRUdML21haW4uaCIKLQotI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgotCi1zdGF0aWMgRFdPUkQgY3VycmVudFRMUyA9IFRMU19PVVRfT0ZfSU5ERVhFUzsK
LQotQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaW5zdGFuY2UsIERXT1JEIHJlYXNvbiwg
TFBWT0lEIHJlc2VydmVkKQotewotICAgIHN3aXRjaCAocmVhc29uKQotICAgIHsKLSAgICAgIGNh
c2UgRExMX1BST0NFU1NfQVRUQUNIOgotICAgICAgICB7Ci0jaWYgIWRlZmluZWQoQU5HTEVfRElT
QUJMRV9UUkFDRSkKLSAgICAgICAgICAgIEZJTEUgKmRlYnVnID0gZm9wZW4oVFJBQ0VfT1VUUFVU
X0ZJTEUsICJydCIpOwotCi0gICAgICAgICAgICBpZiAoZGVidWcpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZmNsb3NlKGRlYnVnKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyA9IGZv
cGVuKFRSQUNFX09VVFBVVF9GSUxFLCAid3QiKTsgICAvLyBFcmFzZQotICAgICAgICAgICAgICAg
IGZjbG9zZShkZWJ1Zyk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAgY3Vy
cmVudFRMUyA9IFRsc0FsbG9jKCk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50VExTID09IFRM
U19PVVRfT0ZfSU5ERVhFUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbCB0aHJvdWdo
dCB0byBpbml0aWFsaXplIGluZGV4Ci0gICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBlZ2w6OkN1cnJlbnQgKmN1cnJlbnQgPSAoZWdsOjpDdXJyZW50
KilMb2NhbEFsbG9jKExQVFIsIHNpemVvZihlZ2w6OkN1cnJlbnQpKTsKLQotICAgICAgICAgICAg
aWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUo
Y3VycmVudFRMUywgY3VycmVudCk7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50LT5lcnJvciA9
IEVHTF9TVUNDRVNTOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPkFQSSA9IEVHTF9PUEVOR0xf
RVNfQVBJOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExB
WTsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IEVHTF9OT19TVVJGQUNF
OwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERM
TF9USFJFQURfREVUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0g
VGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBETExf
UFJPQ0VTU19ERVRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBU
bHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRMUyk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotbmFtZXNwYWNlIGVnbAotewotdm9pZCBzZXRDdXJy
ZW50RXJyb3IoRUdMaW50IGVycm9yKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVu
dCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5lcnJvciA9IGVycm9y
OwotfQotCi1FR0xpbnQgZ2V0Q3VycmVudEVycm9yKCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50
ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJl
bnQtPmVycm9yOwotfQotCi12b2lkIHNldEN1cnJlbnRBUEkoRUdMZW51bSBBUEkpCi17Ci0gICAg
Q3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQot
ICAgIGN1cnJlbnQtPkFQSSA9IEFQSTsKLX0KLQotRUdMZW51bSBnZXRDdXJyZW50QVBJKCkKLXsK
LSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMp
OwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPkFQSTsKLX0KLQotdm9pZCBzZXRDdXJyZW50RGlzcGxh
eShFR0xEaXNwbGF5IGRweSkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRs
c0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+ZGlzcGxheSA9IGRweTsKLX0K
LQotRUdMRGlzcGxheSBnZXRDdXJyZW50RGlzcGxheSgpCi17Ci0gICAgQ3VycmVudCAqY3VycmVu
dCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJy
ZW50LT5kaXNwbGF5OwotfQotCi12b2lkIHNldEN1cnJlbnREcmF3U3VyZmFjZShFR0xTdXJmYWNl
IHN1cmZhY2UpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1
ZShjdXJyZW50VExTKTsKLQotICAgIGN1cnJlbnQtPmRyYXdTdXJmYWNlID0gc3VyZmFjZTsKLX0K
LQotRUdMU3VyZmFjZSBnZXRDdXJyZW50RHJhd1N1cmZhY2UoKQotewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4g
Y3VycmVudC0+ZHJhd1N1cmZhY2U7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNlKEVH
TFN1cmZhY2Ugc3VyZmFjZSkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRs
c0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+cmVhZFN1cmZhY2UgPSBzdXJm
YWNlOwotfQotCi1FR0xTdXJmYWNlIGdldEN1cnJlbnRSZWFkU3VyZmFjZSgpCi17Ci0gICAgQ3Vy
cmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAg
IHJldHVybiBjdXJyZW50LT5yZWFkU3VyZmFjZTsKLX0KLX0KLQotdm9pZCBlcnJvcihFR0xpbnQg
ZXJyb3JDb2RlKQotewotICAgIGVnbDo6c2V0Q3VycmVudEVycm9yKGVycm9yQ29kZSk7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML21haW4uaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkMDlkOWU2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvbWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5oOiBNYW5hZ2VtZW50IG9mIHRocmVhZC1sb2NhbCBk
YXRhLgotCi0jaWZuZGVmIExJQkVHTF9NQUlOX0hfCi0jZGVmaW5lIExJQkVHTF9NQUlOX0hfCi0K
LSNkZWZpbmUgRUdMQVBJCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPEVHTC9lZ2xl
eHQuaD4KLQotbmFtZXNwYWNlIGVnbAotewotc3RydWN0IEN1cnJlbnQKLXsKLSAgICBFR0xpbnQg
ZXJyb3I7Ci0gICAgRUdMZW51bSBBUEk7Ci0gICAgRUdMRGlzcGxheSBkaXNwbGF5OwotICAgIEVH
TFN1cmZhY2UgZHJhd1N1cmZhY2U7Ci0gICAgRUdMU3VyZmFjZSByZWFkU3VyZmFjZTsKLX07Ci0K
LXZvaWQgc2V0Q3VycmVudEVycm9yKEVHTGludCBlcnJvcik7Ci1FR0xpbnQgZ2V0Q3VycmVudEVy
cm9yKCk7Ci0KLXZvaWQgc2V0Q3VycmVudEFQSShFR0xlbnVtIEFQSSk7Ci1FR0xlbnVtIGdldEN1
cnJlbnRBUEkoKTsKLQotdm9pZCBzZXRDdXJyZW50RGlzcGxheShFR0xEaXNwbGF5IGRweSk7Ci1F
R0xEaXNwbGF5IGdldEN1cnJlbnREaXNwbGF5KCk7Ci0KLXZvaWQgc2V0Q3VycmVudERyYXdTdXJm
YWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSk7Ci1FR0xTdXJmYWNlIGdldEN1cnJlbnREcmF3U3VyZmFj
ZSgpOwotCi12b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1cmZhY2UpOwot
RUdMU3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKLX0KLQotdm9pZCBlcnJvcihFR0xp
bnQgZXJyb3JDb2RlKTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLWNvbnN0IFQgJmVycm9yKEVHTGlu
dCBlcnJvckNvZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQotewotICAgIGVycm9yKGVycm9yQ29k
ZSk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1j
b25zdCBUICZzdWNjZXNzKGNvbnN0IFQgJnJldHVyblZhbHVlKQotewotICAgIGVnbDo6c2V0Q3Vy
cmVudEVycm9yKEVHTF9TVUNDRVNTKTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQot
I2VuZGlmICAvLyBMSUJFR0xfTUFJTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9yZXNvdXJjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9yZXNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTIxZjRj
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvcmVzb3Vy
Y2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8ve3tOT19ERVBFTkRFTkNJRVN9
fQotLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJhdGVkIGluY2x1ZGUgZmlsZS4KLS8vIFVz
ZWQgYnkgbGliRUdMLnJjCi0KLS8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBvYmplY3Rz
Ci0vLyAKLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi0jaWZuZGVmIEFQU1RVRElPX1JFQURPTkxZ
X1NZTUJPTFMKLSNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNFX1ZBTFVFICAgICAgICAxMDEKLSNk
ZWZpbmUgX0FQU19ORVhUX0NPTU1BTkRfVkFMVUUgICAgICAgICA0MDAwMQotI2RlZmluZSBfQVBT
X05FWFRfQ09OVFJPTF9WQUxVRSAgICAgICAgIDEwMDEKLSNkZWZpbmUgX0FQU19ORVhUX1NZTUVE
X1ZBTFVFICAgICAgICAgICAxMDEKLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTI0OGQ2OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0JsaXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjA0ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIEJsaXQuY3BwOiBTdXJmYWNlIGNvcHkgdXRpbGl0eSBjbGFzcy4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0KLSNpbmNsdWRlIDxkM2R4OS5oPgotCi0j
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgot
Ci1uYW1lc3BhY2UKLXsKLS8vIFN0YW5kYXJkIFZlcnRleCBTaGFkZXIKLS8vIElucHV0IDAgaXMg
dGhlIGhvbW9nZW5vdXMgcG9zaXRpb24uCi0vLyBPdXRwdXRzIHRoZSBob21vZ2Vub3VzIHBvc2l0
aW9uIGFzLWlzLgotLy8gT3V0cHV0cyBhIHRleCBjb29yZCB3aXRoICgwLDApIGluIHRoZSB1cHBl
ci1sZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuIGFuZCAoMSwxKSBpbiB0aGUgYm90dG9tIHJpZ2h0
LgotLy8gQzAuWCBtdXN0IGJlIG5lZ2F0aXZlIGhhbGYtcGl4ZWwgd2lkdGgsIEMwLlkgbXVzdCBi
ZSBoYWxmLXBpeGVsIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgotY29uc3QgY2hhciBzdGFuZGFy
ZHZzW10gPQotInN0cnVjdCBWU19PVVRQVVRcbiIKLSJ7XG4iCi0iICAgIGZsb2F0NCBwb3NpdGlv
biA6IFBPU0lUSU9OO1xuIgotIiAgICBmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDA7XG4iCi0i
fTtcbiIKLSJcbiIKLSJ1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXplIDogYzA7XG4iCi0iXG4i
Ci0iVlNfT1VUUFVUIG1haW4oaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT04pXG4iCi0ie1xu
IgotIiAgICBWU19PVVRQVVQgT3V0O1xuIgotIlxuIgotIiAgICBPdXQucG9zaXRpb24gPSBwb3Np
dGlvbiArIGhhbGZQaXhlbFNpemU7XG4iCi0iICAgIE91dC50ZXhjb29yZCA9IHBvc2l0aW9uICog
ZmxvYXQ0KDAuNSwgLTAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTtcbiIK
LSJcbiIKLSIgICAgcmV0dXJuIE91dDtcbiIKLSJ9XG4iOwotCi0vLyBGbGlwIFkgVmVydGV4IFNo
YWRlcgotLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1dHMg
dGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3JkIHdp
dGggKDAsMSkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgxLDAp
IGluIHRoZSBib3R0b20gcmlnaHQuCi0vLyBDMC5YWSBtdXN0IGJlIHRoZSBoYWxmLXBpeGVsIHdp
ZHRoIGFuZCBoZWlnaHQuIEMwLlpXIG11c3QgYmUgMC4KLWNvbnN0IGNoYXIgZmxpcHl2c1tdID0K
LSJzdHJ1Y3QgVlNfT1VUUFVUXG4iCi0ie1xuIgotIiAgICBmbG9hdDQgcG9zaXRpb24gOiBQT1NJ
VElPTjtcbiIKLSIgICAgZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwO1xuIgotIn07XG4iCi0i
XG4iCi0idW5pZm9ybSBmbG9hdDQgaGFsZlBpeGVsU2l6ZSA6IGMwO1xuIgotIlxuIgotIlZTX09V
VFBVVCBtYWluKGluIGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OKVxuIgotIntcbiIKLSIgICAg
VlNfT1VUUFVUIE91dDtcbiIKLSJcbiIKLSIgICAgT3V0LnBvc2l0aW9uID0gcG9zaXRpb24gKyBo
YWxmUGl4ZWxTaXplO1xuIgotIiAgICBPdXQudGV4Y29vcmQgPSBwb3NpdGlvbiAqIGZsb2F0NCgw
LjUsIDAuNSwgMS4wLCAxLjApICsgZmxvYXQ0KDAuNSwgMC41LCAwLCAwKTtcbiIKLSJcbiIKLSIg
ICAgcmV0dXJuIE91dDtcbiIKLSJ9XG4iOwotCi0vLyBQYXNzdGhyb3VnaCBQaXhlbCBTaGFkZXIK
LS8vIE91dHB1dHMgdGV4dHVyZSAwIHNhbXBsZWQgYXQgdGV4Y29vcmQgMC4KLWNvbnN0IGNoYXIg
cGFzc3Rocm91Z2hwc1tdID0KLSJzYW1wbGVyMkQgdGV4IDogczA7XG4iCi0iXG4iCi0iZmxvYXQ0
IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCi0ie1xuIgotIgly
ZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCi0ifVxuIjsKLQotLy8gTHVtaW5hbmNl
IENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApLnJy
cmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9IDAuCi0v
LyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgotY29uc3QgY2hh
ciBsdW1pbmFuY2Vwc1tdID0KLSJzYW1wbGVyMkQgdGV4IDogczA7XG4iCi0iXG4iCi0idW5pZm9y
bSBmbG9hdDQgbW9kZSA6IGMwO1xuIgotIlxuIgotImZsb2F0NCBtYWluKGZsb2F0NCB0ZXhjb29y
ZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgotIntcbiIKLSIJZmxvYXQ0IHRtcCA9IHRleDJEKHRl
eCwgdGV4Y29vcmQueHkpO1xuIgotIgl0bXAudyA9IHRtcC53ICogbW9kZS54ICsgbW9kZS55O1xu
IgotIglyZXR1cm4gdG1wLnh4eHc7XG4iCi0ifVxuIjsKLQotLy8gUkdCL0EgQ29tcG9uZW50IE1h
c2sgUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApIHdpdGggb3B0aW9u
cyB0byBmb3JjZSBSR0IgPSAwIGFuZC9vciBBID0gMS4KLS8vIFRvIGZvcmNlIFJHQiA9IDAsIHNl
dCBDMC5YID0gMCwgb3RoZXJ3aXNlIEMwLlggPSAxLgotLy8gVG8gZm9yY2UgQSA9IDEsIHNldCBD
MC5aID0gMCwgQzAuVyA9IDEsIG90aGVyd2lzZSBDMC5aID0gMSwgQzAuVyA9IDAuCi1jb25zdCBj
aGFyIGNvbXBvbmVudG1hc2twc1tdID0KLSJzYW1wbGVyMkQgdGV4IDogczA7XG4iCi0iXG4iCi0i
dW5pZm9ybSBmbG9hdDQgbW9kZSA6IGMwO1xuIgotIlxuIgotImZsb2F0NCBtYWluKGZsb2F0NCB0
ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUlxuIgotIntcbiIKLSIJZmxvYXQ0IHRtcCA9IHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpO1xuIgotIgl0bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUueDtc
biIKLSIJdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudztcbiIKLSIJcmV0dXJuIHRtcDtc
biIKLSJ9XG4iOwotCi19Ci0KLW5hbWVzcGFjZSBnbAotewotCi1jb25zdCBjaGFyICogY29uc3Qg
QmxpdDo6bVNoYWRlclNvdXJjZVtdID0KLXsKLSAgICBzdGFuZGFyZHZzLAotICAgIGZsaXB5dnMs
Ci0gICAgcGFzc3Rocm91Z2hwcywKLSAgICBsdW1pbmFuY2VwcywKLSAgICBjb21wb25lbnRtYXNr
cHMKLX07Ci0KLUJsaXQ6OkJsaXQoQ29udGV4dCAqY29udGV4dCkKLSAgOiBtQ29udGV4dChjb250
ZXh0KSwgbVF1YWRWZXJ0ZXhCdWZmZXIoTlVMTCksIG1RdWFkVmVydGV4RGVjbGFyYXRpb24oTlVM
TCksIG1TYXZlZFJlbmRlclRhcmdldChOVUxMKSwgbVNhdmVkRGVwdGhTdGVuY2lsKE5VTEwpLCBt
U2F2ZWRTdGF0ZUJsb2NrKE5VTEwpCi17Ci0gICAgaW5pdEdlb21ldHJ5KCk7Ci0gICAgbWVtc2V0
KG1Db21waWxlZFNoYWRlcnMsIDAsIHNpemVvZihtQ29tcGlsZWRTaGFkZXJzKSk7Ci19Ci0KLUJs
aXQ6On5CbGl0KCkKLXsKLSAgICBpZiAobVNhdmVkU3RhdGVCbG9jaykgbVNhdmVkU3RhdGVCbG9j
ay0+UmVsZWFzZSgpOwotICAgIGlmIChtUXVhZFZlcnRleEJ1ZmZlcikgbVF1YWRWZXJ0ZXhCdWZm
ZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobVF1YWRWZXJ0ZXhEZWNsYXJhdGlvbikgbVF1YWRWZXJ0
ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSEFE
RVJfQ09VTlQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW2ldKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtQ29tcGlsZWRTaGFkZXJzW2ldLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQmxpdDo6aW5pdEdlb21ldHJ5KCkKLXsKLSAgICBz
dGF0aWMgY29uc3QgZmxvYXQgcXVhZFtdID0KLSAgICB7Ci0gICAgICAgIC0xLCAtMSwKLSAgICAg
ICAgLTEsICAxLAotICAgICAgICAgMSwgLTEsCi0gICAgICAgICAxLCAgMQotICAgIH07Ci0KLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZW9mKHF1YWQpLCBEM0RVU0FH
RV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1RdWFkVmVydGV4QnVmZmVyLCBOVUxM
KTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAg
dm9pZCAqbG9ja1B0ciA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gbVF1YWRWZXJ0ZXhCdWZmZXItPkxv
Y2soMCwgMCwgJmxvY2tQdHIsIDApOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpIHx8IGxvY2tQ
dHIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgbWVtY3B5KGxvY2tQdHIsIHF1
YWQsIHNpemVvZihxdWFkKSk7Ci0gICAgbVF1YWRWZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotCi0g
ICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW10gPQotICAgIHsKLSAg
ICAgICAgeyAwLCAwLCBEM0RERUNMVFlQRV9GTE9BVDIsIEQzRERFQ0xNRVRIT0RfREVGQVVMVCwg
RDNEREVDTFVTQUdFX1BPU0lUSU9OLCAwIH0sCi0gICAgICAgIEQzRERFQ0xfRU5EKCkKLSAgICB9
OwotCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50
cywgJm1RdWFkVmVydGV4RGVjbGFyYXRpb24pOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBEM0RTaGFkZXJUeXBlPgot
Ym9vbCBCbGl0OjpzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxl
LAotICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6
OipjcmVhdGVTaGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUqKiksCi0gICAgICAg
ICAgICAgICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRl
cikoRDNEU2hhZGVyVHlwZSopKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOwotCi0gICAgRDNEU2hhZGVyVHlwZSAqc2hhZGVyOwotCi0gICAgaWYgKG1Db21w
aWxlZFNoYWRlcnNbc291cmNlXSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgc2hhZGVyID0gc3Rh
dGljX2Nhc3Q8RDNEU2hhZGVyVHlwZSo+KG1Db21waWxlZFNoYWRlcnNbc291cmNlXSk7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIElEM0RYQnVmZmVyICpzaGFkZXJDb2RlOwotICAg
ICAgICBIUkVTVUxUIGhyID0gRDNEWENvbXBpbGVTaGFkZXIobVNoYWRlclNvdXJjZVtzb3VyY2Vd
LCBzdHJsZW4obVNoYWRlclNvdXJjZVtzb3VyY2VdKSwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9m
aWxlLCAwLCAmc2hhZGVyQ29kZSwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRCho
cikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNvbXBpbGUgJXMgc2hh
ZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUsIChpbnQp
c291cmNlLCBocik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBociA9IChkZXZpY2UtPipjcmVhdGVTaGFkZXIpKHN0YXRpY19jYXN0PGNvbnN0IERXT1JE
Kj4oc2hhZGVyQ29kZS0+R2V0QnVmZmVyUG9pbnRlcigpKSwgJnNoYWRlcik7Ci0gICAgICAgIGlm
IChGQUlMRUQoaHIpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGFkZXJDb2RlLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgJXMgc2hhZGVyIGZvciBibGl0
IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHByb2ZpbGUsIChpbnQpc291cmNlLCBocik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBzaGFkZXJD
b2RlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgbUNvbXBpbGVkU2hhZGVyc1tzb3VyY2VdID0gc2hh
ZGVyOwotICAgIH0KLQotICAgIEhSRVNVTFQgaHIgPSAoZGV2aWNlLT4qc2V0U2hhZGVyKShzaGFk
ZXIpOwotCi0gICAgaWYgKEZBSUxFRChocikpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byBzZXQgJXMgc2hhZGVyIGZvciBibGl0IG9wZXJhdGlvbiAlZCwgZXJyb3IgMHglMDhYLiIsIHBy
b2ZpbGUsIChpbnQpc291cmNlLCBocik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0OjpzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVy
SWQgc2hhZGVyKQotewotICAgIHJldHVybiBzZXRTaGFkZXI8SURpcmVjdDNEVmVydGV4U2hhZGVy
OT4oc2hhZGVyLCBtQ29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDog
InZzXzJfMCIsICZJRGlyZWN0M0REZXZpY2U5OjpDcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0
M0REZXZpY2U5OjpTZXRWZXJ0ZXhTaGFkZXIpOwotfQotCi1ib29sIEJsaXQ6OnNldFBpeGVsU2hh
ZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBp
eGVsU2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJw
c18zXzAiIDogInBzXzJfMCIsICZJRGlyZWN0M0REZXZpY2U5OjpDcmVhdGVQaXhlbFNoYWRlciwg
JklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsKLX0KLQotUkVDVCBCbGl0OjpnZXRT
dXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3QKLXsKLSAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNjKCZkZXNjKTsKLQotICAgIFJF
Q1QgcmVjdDsKLSAgICByZWN0LmxlZnQgPSAwOwotICAgIHJlY3QudG9wID0gMDsKLSAgICByZWN0
LnJpZ2h0ID0gZGVzYy5XaWR0aDsKLSAgICByZWN0LmJvdHRvbSA9IGRlc2MuSGVpZ2h0OwotCi0g
ICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWJvb2wgQmxpdDo6Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQotewotICAgIElEaXJlY3QzRFRl
eHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBnZXRTdXJmYWNl
UmVjdChzb3VyY2UpKTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7Ci0KLSAgICBzYXZlU3RhdGUoKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0
dXJlKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKLQotICAgIHNldFZl
cnRleFNoYWRlcihTSEFERVJfVlNfU1RBTkRBUkQpOwotICAgIHNldFBpeGVsU2hhZGVyKFNIQURF
Ul9QU19QQVNTVEhST1VHSCk7Ci0KLSAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKLSAgICBkZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9MSU5FQVIp
OwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RU
RVhGX0xJTkVBUik7Ci0KLSAgICBzZXRWaWV3cG9ydChnZXRTdXJmYWNlUmVjdChkZXN0KSwgMCwg
MCk7Ci0KLSAgICByZW5kZXIoKTsKLQotICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLQotICAgIHJl
c3RvcmVTdGF0ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6Y29weShJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKLSAgICBEM0RTVVJGQUNFX0RFU0Mg
ZGVzdERlc2M7Ci0gICAgc291cmNlLT5HZXREZXNjKCZzb3VyY2VEZXNjKTsKLSAgICBkZXN0LT5H
ZXREZXNjKCZkZXN0RGVzYyk7Ci0KLSAgICBpZiAoc291cmNlRGVzYy5Gb3JtYXQgPT0gZGVzdERl
c2MuRm9ybWF0ICYmIGRlc3REZXNjLlVzYWdlICYgRDNEVVNBR0VfUkVOREVSVEFSR0VUKSAgIC8v
IENhbiB1c2UgU3RyZXRjaFJlY3QKLSAgICB7Ci0gICAgICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9m
ZnNldCwgeW9mZnNldCwgeG9mZnNldCArIChzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5s
ZWZ0KSwgeW9mZnNldCArIChzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wKX07Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsICZzb3Vy
Y2VSZWN0LCBkZXN0LCAmZGVzdFJlY3QsIEQzRFRFWEZfUE9JTlQpOwotCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmb3JtYXRDb252ZXJ0KHNv
dXJjZSwgc291cmNlUmVjdCwgZGVzdEZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6Zm9ybWF0Q29udmVydChJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3QpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKnRleHR1cmUgPSBjb3B5U3VyZmFj
ZVRvVGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIHNhdmVTdGF0ZSgpOwotCi0gICAgZGV2aWNlLT5T
ZXRUZXh0dXJlKDAsIHRleHR1cmUpOwotICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIGRl
c3QpOwotCi0gICAgc2V0Vmlld3BvcnQoc291cmNlUmVjdCwgeG9mZnNldCwgeW9mZnNldCk7Ci0K
LSAgICBzZXRDb21tb25CbGl0U3RhdGUoKTsKLSAgICBpZiAoc2V0Rm9ybWF0Q29udmVydFNoYWRl
cnMoZGVzdEZvcm1hdCkpCi0gICAgewotICAgICAgICByZW5kZXIoKTsKLSAgICB9Ci0KLSAgICB0
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3RhdGUoKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEJsaXQ6OnNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdMZW51bSBkZXN0
Rm9ybWF0KQotewotICAgIGJvb2wgb2theSA9IHNldFZlcnRleFNoYWRlcihTSEFERVJfVlNfU1RB
TkRBUkQpOwotCi0gICAgc3dpdGNoIChkZXN0Rm9ybWF0KQotICAgIHsKLSAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICBjYXNlIEdMX0JHUkFf
RVhUOgotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICBv
a2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfQ09NUE9ORU5UTUFTSyk7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihT
SEFERVJfUFNfTFVNSU5BTkNFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFv
a2F5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGVudW0geyBY
ID0gMCwgWSA9IDEsIFogPSAyLCBXID0gMyB9OwotCi0gICAgLy8gVGhlIG1lYW5pbmcgb2YgdGhp
cyBjb25zdGFudCBkZXBlbmRzIG9uIHRoZSBzaGFkZXIgdGhhdCB3YXMgc2VsZWN0ZWQuCi0gICAg
Ly8gU2VlIHRoZSBzaGFkZXIgYXNzZW1ibHkgY29kZSBhYm92ZSBmb3IgZGV0YWlscy4KLSAgICBm
bG9hdCBwc0NvbnN0MFs0XSA9IHsgMCwgMCwgMCwgMCB9OwotCi0gICAgc3dpdGNoIChkZXN0Rm9y
bWF0KQotICAgIHsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICBwc0NvbnN0MFtYXSA9IDE7
Ci0gICAgICAgIHBzQ29uc3QwW1pdID0gMTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug
R0xfUkdCOgotICAgICAgICBwc0NvbnN0MFtYXSA9IDE7Ci0gICAgICAgIHBzQ29uc3QwW1ddID0g
MTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgIHBzQ29u
c3QwW1pdID0gMTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgICBwc0NvbnN0MFtZXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBnZXREZXZpY2UoKS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYoMCwg
cHNDb25zdDAsIDEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzRFRleHR1cmU5
ICpCbGl0Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSwg
Y29uc3QgUkVDVCAmc291cmNlUmVjdCkKLXsKLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgewotICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBn
ZXREaXNwbGF5KCk7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
Ci0KLSAgICBEM0RTVVJGQUNFX0RFU0Mgc291cmNlRGVzYzsKLSAgICBzdXJmYWNlLT5HZXREZXNj
KCZzb3VyY2VEZXNjKTsKLQotICAgIC8vIENvcHkgdGhlIHJlbmRlciB0YXJnZXQgaW50byBhIHRl
eHR1cmUKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZTsKLSAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShzb3VyY2VSZWN0LnJpZ2h0IC0gc291cmNlUmVjdC5s
ZWZ0LCBzb3VyY2VSZWN0LmJvdHRvbSAtIHNvdXJjZVJlY3QudG9wLCAxLCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIHNvdXJjZURlc2MuRm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBO
VUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRl
eHR1cmU5KilOVUxMKTsKLSAgICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1
cmZhY2U7Ci0gICAgcmVzdWx0ID0gdGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJl
U3VyZmFjZSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBBU1NF
UlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsKLSAgICAgICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxMKTsKLSAgICB9Ci0K
LSAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJl
Y3Qoc3VyZmFjZSwgJnNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05P
TkUpOwotCi0gICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB0ZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVj
dDNEVGV4dHVyZTkqKU5VTEwpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi12
b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7Ci0KLSAgICBEM0RWSUVXUE9SVDkgdnA7Ci0gICAgdnAuWCAgICAgID0geG9mZnNl
dDsKLSAgICB2cC5ZICAgICAgPSB5b2Zmc2V0OwotICAgIHZwLldpZHRoICA9IHNvdXJjZVJlY3Qu
cmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7Ci0gICAgdnAuSGVpZ2h0ID0gc291cmNlUmVjdC5ib3R0
b20gLSBzb3VyY2VSZWN0LnRvcDsKLSAgICB2cC5NaW5aICAgPSAwLjBmOwotICAgIHZwLk1heFog
ICA9IDEuMGY7Ci0gICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnApOwotCi0gICAgZmxvYXQgaGFs
ZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4wZi92cC5IZWlnaHQsIDAsIDAg
fTsKLSAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBoYWxmUGl4ZWxBZGp1
c3QsIDEpOwotfQotCi12b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0ZSgpCi17Ci0gICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBkZXZpY2UtPlNldERl
cHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9BTFBIQSB8
IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4gfCBE
M0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7Ci0KLSAgICBkZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2aWNlLT5T
ZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOwotICAg
IGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRFWFRVUkUsIEZBTFNFKTsK
LSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQURE
UkVTU19DTEFNUCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERS
RVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOwotCi0gICAgUkVDVCBzY2lzc29yUmVjdCA9IHswfTsg
ICAvLyBTY2lzc29yaW5nIGlzIGRpc2FibGVkIGZvciBmbGlwcGluZywgYnV0IHdlIG5lZWQgdGhp
cyB0byBjYXB0dXJlIGFuZCByZXN0b3JlIHRoZSBvbGQgcmVjdGFuZ2xlCi0gICAgZGV2aWNlLT5T
ZXRTY2lzc29yUmVjdCgmc2Npc3NvclJlY3QpOwotCi0gICAgZm9yKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1T
b3VyY2VGcmVxKGksIDEpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZW5kZXIoKQotewotICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKLSAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNpemVvZihmbG9hdCkp
OwotICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xh
cmF0aW9uKTsKLQotICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLSAgICBociA9IGRldmljZS0+
RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsKLX0KLQotdm9pZCBCbGl0
OjpzYXZlU3RhdGUoKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOwotCi0gICAgSFJFU1VMVCBocjsKLQotICAgIGRldmljZS0+R2V0RGVwdGhTdGVuY2lsU3Vy
ZmFjZSgmbVNhdmVkRGVwdGhTdGVuY2lsKTsKLSAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdldCgw
LCAmbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2NrID09IE5V
TEwpCi0gICAgewotICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgIHNldENvbW1vbkJsaXRTdGF0ZSgp
OwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkdW1teUNvbnN0WzRdID0geyAwLCAwLCAw
LCAwIH07Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0gICAgICAg
IGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEpOwotICAg
ICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2UtPlNldFBp
eGVsU2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEpOwotCi0gICAgICAgIEQzRFZJRVdQ
T1JUOSBkdW1teVZwOwotICAgICAgICBkdW1teVZwLlggPSAwOwotICAgICAgICBkdW1teVZwLlkg
PSAwOwotICAgICAgICBkdW1teVZwLldpZHRoID0gMTsKLSAgICAgICAgZHVtbXlWcC5IZWlnaHQg
PSAxOwotICAgICAgICBkdW1teVZwLk1pblogPSAwOwotICAgICAgICBkdW1teVZwLk1heFogPSAx
OwotCi0gICAgICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJmR1bW15VnApOwotCi0gICAgICAgIGRl
dmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKLQotICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNv
dXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMCk7Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRW
ZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKLQotICAgICAgICBociA9
IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbVNhdmVkU3RhdGVCbG9jayk7Ci0gICAgICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09
IEVfT1VUT0ZNRU1PUlkpOwotICAgIH0KLQotICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9
IE5VTEwpOwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIGhyID0gbVNhdmVkU3RhdGVCbG9jay0+Q2FwdHVyZSgpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7Ci0gICAgfQotfQotCi12b2lkIEJsaXQ6OnJlc3RvcmVTdGF0ZSgpCi17Ci0g
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBkZXZpY2Ut
PlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2lsKTsKLSAgICBpZiAobVNh
dmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWREZXB0aFN0ZW5j
aWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRSZW5kZXJUYXJnZXQpOwot
ICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1TYXZl
ZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBtU2F2ZWRSZW5kZXJUYXJnZXQgPSBO
VUxMOwotICAgIH0KLQotICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwpOwotCi0g
ICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1TYXZlZFN0
YXRlQmxvY2stPkFwcGx5KCk7Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQmxpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
OTI4ZWNkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvQmxpdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gQmxpdC5jcHA6IFN1cmZhY2UgY29weSB1dGlsaXR5IGNsYXNzLgotCi0jaWZuZGVm
IExJQkdMRVNWMl9CTElUX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9CTElUX0hfCi0KLSNpbmNsdWRl
IDxtYXA+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0j
aW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFt
ZXNwYWNlIGdsCi17Ci1jbGFzcyBDb250ZXh0OwotCi1jbGFzcyBCbGl0Ci17Ci0gIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBCbGl0KENvbnRleHQgKmNvbnRleHQpOwotICAgIH5CbGl0KCk7Ci0KLSAg
ICAvLyBDb3B5IGZyb20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgotICAgIC8vIHNv
dXJjZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGlu
IHVwcGVyLWxlZnQpCi0gICAgYm9vbCBjb3B5KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNv
bnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgICAvLyBDb3B5IGZy
b20gc291cmNlIHN1cmZhY2UgdG8gZGVzdCBzdXJmYWNlLgotICAgIC8vIHNvdXJjZVJlY3QsIHhv
ZmZzZXQsIHlvZmZzZXQgYXJlIGluIEQzRCBjb29yZGluYXRlcyAoMCwwIGluIHVwcGVyLWxlZnQp
Ci0gICAgLy8gc291cmNlIGlzIGludGVycHJldGVkIGFzIFJHQkEgYW5kIGRlc3RGb3JtYXQgc3Bl
Y2lmaWVzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3JtYXQuIEZvciBleGFtcGxlLCBpZiBkZXN0Rm9y
bWF0ID0gR0xfUkdCLCB0aGUgYWxwaGEgY2hhbm5lbCB3aWxsIGJlIGZvcmNlZCB0byAwLgotICAg
IGJvb2wgZm9ybWF0Q29udmVydChJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBjb25zdCBSRUNU
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpOwotCi0gICAgLy8gMngyIGJveCBmaWx0ZXIg
c2FtcGxlIGZyb20gc291cmNlIHRvIGRlc3QuCi0gICAgLy8gUmVxdWlyZXMgdGhhdCBzb3VyY2Ug
aXMgUkdCKEEpIGFuZCBkZXN0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgc291cmNlLgotICAgIGJv
b2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0KTsKLQotICBwcml2YXRlOgotICAgIENvbnRleHQgKm1Db250ZXh0OwotCi0gICAgSURp
cmVjdDNEVmVydGV4QnVmZmVyOSAqbVF1YWRWZXJ0ZXhCdWZmZXI7Ci0gICAgSURpcmVjdDNEVmVy
dGV4RGVjbGFyYXRpb245ICptUXVhZFZlcnRleERlY2xhcmF0aW9uOwotCi0gICAgdm9pZCBpbml0
R2VvbWV0cnkoKTsKLQotICAgIGJvb2wgc2V0Rm9ybWF0Q29udmVydFNoYWRlcnMoR0xlbnVtIGRl
c3RGb3JtYXQpOwotCi0gICAgSURpcmVjdDNEVGV4dHVyZTkgKmNvcHlTdXJmYWNlVG9UZXh0dXJl
KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlLCBjb25zdCBSRUNUICZzb3VyY2VSZWN0KTsKLSAg
ICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQpOwotICAgIHZvaWQgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0gICAgUkVD
VCBnZXRTdXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3Q7Ci0KLSAg
ICAvLyBUaGlzIGVudW0gaXMgdXNlZCB0byBpbmRleCBtQ29tcGlsZWRTaGFkZXJzIGFuZCBtU2hh
ZGVyU291cmNlLgotICAgIGVudW0gU2hhZGVySWQKLSAgICB7Ci0gICAgICAgIFNIQURFUl9WU19T
VEFOREFSRCwKLSAgICAgICAgU0hBREVSX1ZTX0ZMSVBZLAotICAgICAgICBTSEFERVJfUFNfUEFT
U1RIUk9VR0gsCi0gICAgICAgIFNIQURFUl9QU19MVU1JTkFOQ0UsCi0gICAgICAgIFNIQURFUl9Q
U19DT01QT05FTlRNQVNLLAotICAgICAgICBTSEFERVJfQ09VTlQKLSAgICB9OwotCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIgKiBjb25zdCBtU2hhZGVyU291cmNlW107Ci0KLSAgICAvLyBUaGlzIGFj
dHVhbGx5IGNvbnRhaW5zIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgb3IgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5IGNhc3RlZCB0byBJVW5rbm93bi4KLSAgICBJVW5rbm93biAqbUNvbXBpbGVkU2hhZGVy
c1tTSEFERVJfQ09VTlRdOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIEQzRFNoYWRlclR5cGU+Ci0g
ICAgYm9vbCBzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjb25zdCBjaGFyICpwcm9maWxlLAot
ICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5OjoqY3Jl
YXRlU2hhZGVyKShjb25zdCBEV09SRCAqLCBEM0RTaGFkZXJUeXBlICoqKSwKLSAgICAgICAgICAg
ICAgICAgICBIUkVTVUxUIChXSU5BUEkgSURpcmVjdDNERGV2aWNlOTo6KnNldFNoYWRlcikoRDNE
U2hhZGVyVHlwZSopKTsKLQotICAgIGJvb2wgc2V0VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRl
cik7Ci0gICAgYm9vbCBzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpOwotICAgIHZvaWQg
cmVuZGVyKCk7Ci0KLSAgICB2b2lkIHNhdmVTdGF0ZSgpOwotICAgIHZvaWQgcmVzdG9yZVN0YXRl
KCk7Ci0gICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1TYXZlZFN0YXRlQmxvY2s7Ci0gICAgSURp
cmVjdDNEU3VyZmFjZTkgKm1TYXZlZFJlbmRlclRhcmdldDsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbVNhdmVkRGVwdGhTdGVuY2lsOwotCi0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJs
aXQpOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0JMSVRfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZGQxMmUzYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQnVmZmVyLmNwcDogSW1wbGVtZW50cyB0
aGUgZ2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9v
cgotLy8gaW5kZXggZGF0YS4gSW1wbGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRl
ZCBmdW5jdGlvbmFsaXR5LgotLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2Ug
MjEuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLW5hbWVzcGFjZSBnbAotewot
Ci1CdWZmZXI6OkJ1ZmZlcihHTHVpbnQgaWQpIDogUmVmQ291bnRPYmplY3QoaWQpCi17Ci0gICAg
bUNvbnRlbnRzID0gTlVMTDsKLSAgICBtU2l6ZSA9IDA7Ci0gICAgbVVzYWdlID0gR0xfRFlOQU1J
Q19EUkFXOwotCi0gICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVN0YXRpY0lu
ZGV4QnVmZmVyID0gTlVMTDsKLSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwotfQotCi1CdWZm
ZXI6On5CdWZmZXIoKQotewotICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLSAgICBkZWxldGUgbVN0
YXRpY1ZlcnRleEJ1ZmZlcjsKLSAgICBkZWxldGUgbVN0YXRpY0luZGV4QnVmZmVyOwotfQotCi12
b2lkIEJ1ZmZlcjo6YnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUs
IEdMZW51bSB1c2FnZSkKLXsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgIHsKLSAgICAgICAgZGVs
ZXRlW10gbUNvbnRlbnRzOwotICAgICAgICBtQ29udGVudHMgPSBOVUxMOwotICAgIH0KLSAgICBl
bHNlIGlmIChzaXplICE9IG1TaXplKQotICAgIHsKLSAgICAgICAgZGVsZXRlW10gbUNvbnRlbnRz
OwotICAgICAgICBtQ29udGVudHMgPSBuZXcgR0x1Ynl0ZVtzaXplXTsKLSAgICAgICAgbWVtc2V0
KG1Db250ZW50cywgMCwgc2l6ZSk7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBz
aXplID4gMCkKLSAgICB7Ci0gICAgICAgIG1lbWNweShtQ29udGVudHMsIGRhdGEsIHNpemUpOwot
ICAgIH0KLQotICAgIG1TaXplID0gc2l6ZTsKLSAgICBtVXNhZ2UgPSB1c2FnZTsKLQotICAgIGlu
dmFsaWRhdGVTdGF0aWNEYXRhKCk7Ci0KLSAgICBpZiAodXNhZ2UgPT0gR0xfU1RBVElDX0RSQVcp
Ci0gICAgewotICAgICAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gbmV3IFN0YXRpY1ZlcnRleEJ1
ZmZlcihnZXREZXZpY2UoKSk7Ci0gICAgICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IG5ldyBTdGF0
aWNJbmRleEJ1ZmZlcihnZXREZXZpY2UoKSk7Ci0gICAgfQotfQotCi12b2lkIEJ1ZmZlcjo6YnVm
ZmVyU3ViRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBtZW1jcHkobUNvbnRlbnRzICsgb2Zmc2V0LCBkYXRhLCBzaXplKTsKLSAg
ICAKLSAgICBpZiAoKG1TdGF0aWNWZXJ0ZXhCdWZmZXIgJiYgbVN0YXRpY1ZlcnRleEJ1ZmZlci0+
c2l6ZSgpICE9IDApIHx8IChtU3RhdGljSW5kZXhCdWZmZXIgJiYgbVN0YXRpY0luZGV4QnVmZmVy
LT5zaXplKCkgIT0gMCkpCi0gICAgewotICAgICAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOwot
ICAgIH0KLQotICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSA9IDA7Ci19Ci0KLVN0YXRpY1ZlcnRleEJ1
ZmZlciAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKQotewotICAgIHJldHVybiBtU3Rh
dGljVmVydGV4QnVmZmVyOwotfQotCi1TdGF0aWNJbmRleEJ1ZmZlciAqQnVmZmVyOjpnZXRTdGF0
aWNJbmRleEJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1TdGF0aWNJbmRleEJ1ZmZlcjsKLX0KLQot
dm9pZCBCdWZmZXI6OmludmFsaWRhdGVTdGF0aWNEYXRhKCkKLXsKLSAgICBkZWxldGUgbVN0YXRp
Y1ZlcnRleEJ1ZmZlcjsKLSAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKLQotICAgIGRl
bGV0ZSBtU3RhdGljSW5kZXhCdWZmZXI7Ci0gICAgbVN0YXRpY0luZGV4QnVmZmVyID0gTlVMTDsK
LQotICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSA9IDA7Ci19Ci0KLS8vIENyZWF0ZXMgc3RhdGljIGJ1
ZmZlcnMgaWYgc3VmZmljaWVudCB1c2VkIGRhdGEgaGFzIGJlZW4gbGVmdCB1bm1vZGlmaWVkCi12
b2lkIEJ1ZmZlcjo6cHJvbW90ZVN0YXRpY1VzYWdlKGludCBkYXRhU2l6ZSkKLXsKLSAgICBpZiAo
IW1TdGF0aWNWZXJ0ZXhCdWZmZXIgJiYgIW1TdGF0aWNJbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSArPSBkYXRhU2l6ZTsKLQotICAgICAgICBpZiAobVVubW9k
aWZpZWREYXRhVXNlID4gMyAqIG1TaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdGlj
VmVydGV4QnVmZmVyID0gbmV3IFN0YXRpY1ZlcnRleEJ1ZmZlcihnZXREZXZpY2UoKSk7Ci0gICAg
ICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhCdWZmZXIoZ2V0RGV2
aWNlKCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNzAxOWM0ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0J1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gQnVmZmVyLmg6IERlZmluZXMgdGhlIGdsOjpCdWZmZXIgY2xhc3MsIHJl
cHJlc2VudGluZyBzdG9yYWdlIG9mIHZlcnRleCBhbmQvb3IKLS8vIGluZGV4IGRhdGEuIEltcGxl
bWVudHMgR0wgYnVmZmVyIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KLS8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuOSBwYWdlIDIxLgotCi0jaWZuZGVmIExJQkdMRVNW
Ml9CVUZGRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0JVRkZFUl9IXwotCi0jaW5jbHVkZSA8Y3N0
ZGRlZj4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRl
ICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBTdGF0
aWNWZXJ0ZXhCdWZmZXI7Ci1jbGFzcyBTdGF0aWNJbmRleEJ1ZmZlcjsKLQotY2xhc3MgQnVmZmVy
IDogcHVibGljIFJlZkNvdW50T2JqZWN0Ci17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBCdWZm
ZXIoR0x1aW50IGlkKTsKLQotICAgIHZpcnR1YWwgfkJ1ZmZlcigpOwotCi0gICAgdm9pZCBidWZm
ZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKTsK
LSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXpl
LCBHTGludHB0ciBvZmZzZXQpOwotCi0gICAgdm9pZCAqZGF0YSgpIHsgcmV0dXJuIG1Db250ZW50
czsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0KLSAgICBHTGVu
dW0gdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KLQotICAgIFN0YXRpY1ZlcnRleEJ1
ZmZlciAqZ2V0U3RhdGljVmVydGV4QnVmZmVyKCk7Ci0gICAgU3RhdGljSW5kZXhCdWZmZXIgKmdl
dFN0YXRpY0luZGV4QnVmZmVyKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOwot
ICAgIHZvaWQgcHJvbW90ZVN0YXRpY1VzYWdlKGludCBkYXRhU2l6ZSk7Ci0KLSAgcHJpdmF0ZToK
LSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQnVmZmVyKTsKLQotICAgIEdMdWJ5dGUgKm1D
b250ZW50czsKLSAgICBHTHNpemVpcHRyIG1TaXplOwotICAgIEdMZW51bSBtVXNhZ2U7Ci0KLSAg
ICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKm1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci0gICAgU3RhdGljSW5k
ZXhCdWZmZXIgKm1TdGF0aWNJbmRleEJ1ZmZlcjsKLSAgICBHTHNpemVpcHRyIG1Vbm1vZGlmaWVk
RGF0YVVzZTsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0JVRkZFUl9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYzYwNzcuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQzMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQ29udGV4dC5jcHA6
IEltcGxlbWVudHMgdGhlIGdsOjpDb250ZXh0IGNsYXNzLCBtYW5hZ2luZyBhbGwgR0wgc3RhdGUg
YW5kIHBlcmZvcm1pbmcKLS8vIHJlbmRlcmluZyBvcGVyYXRpb25zLiBJdCBpcyB0aGUgR0xFUzIg
c3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRUdMQ29udGV4dC4KLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJsaWJF
R0wvRGlzcGxheS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VN
YW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9GZW5jZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
UmVuZGVyQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleERhdGFNYW5h
Z2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCIKLQotI3VuZGVm
IG5lYXIKLSN1bmRlZiBmYXIKLQotbmFtZXNwYWNlIGdsCi17Ci1Db250ZXh0OjpDb250ZXh0KGNv
bnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQs
IGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykgOiBtQ29uZmlnKGNvbmZpZykK
LXsKLSAgICBBU1NFUlQocm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxlbWVudGVk
Ci0KLSAgICBtRGlzcGxheSA9IE5VTEw7Ci0gICAgbURldmljZSA9IE5VTEw7Ci0KLSAgICBtRmVu
Y2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsKLQotICAgIHNldENsZWFyQ29sb3Io
MC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7Ci0KLSAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0g
MS4wZjsKLSAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSAwOwotCi0gICAgbVN0YXRlLmN1
bGxGYWNlID0gZmFsc2U7Ci0gICAgbVN0YXRlLmN1bGxNb2RlID0gR0xfQkFDSzsKLSAgICBtU3Rh
dGUuZnJvbnRGYWNlID0gR0xfQ0NXOwotICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxzZTsKLSAg
ICBtU3RhdGUuZGVwdGhGdW5jID0gR0xfTEVTUzsKLSAgICBtU3RhdGUuYmxlbmQgPSBmYWxzZTsK
LSAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLnNvdXJjZUJs
ZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0g
ICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVSTzsKLSAgICBtU3RhdGUuYmxlbmRFcXVh
dGlvblJHQiA9IEdMX0ZVTkNfQUREOwotICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBH
TF9GVU5DX0FERDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSAwOwotICAgIG1TdGF0ZS5i
bGVuZENvbG9yLmdyZWVuID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0gMDsKLSAg
ICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxUZXN0ID0g
ZmFsc2U7Ci0gICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIG1TdGF0ZS5z
dGVuY2lsUmVmID0gMDsKLSAgICBtU3RhdGUuc3RlbmNpbE1hc2sgPSAtMTsKLSAgICBtU3RhdGUu
c3RlbmNpbFdyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9B
TFdBWVM7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gMDsKLSAgICBtU3RhdGUuc3RlbmNp
bEJhY2tNYXNrID0gLSAxOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IC0xOwot
ICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxQYXNz
RGVwdGhGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBH
TF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0
ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2ls
QmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0Rmls
bCA9IGZhbHNlOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsKLSAgICBt
U3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gMC4wZjsKLSAgICBtU3RhdGUuc2FtcGxlQWxwaGFU
b0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFsc2U7Ci0g
ICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSAxLjBmOwotICAgIG1TdGF0ZS5zYW1wbGVD
b3ZlcmFnZUludmVydCA9IGZhbHNlOwotICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOwot
ICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVlOwotICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQg
PSBHTF9ET05UX0NBUkU7Ci0gICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQg
PSBHTF9ET05UX0NBUkU7Ci0KLSAgICBtU3RhdGUubGluZVdpZHRoID0gMS4wZjsKLQotICAgIG1T
dGF0ZS52aWV3cG9ydFggPSAwOwotICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOwotICAgIG1TdGF0
ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7Ci0gICAgbVN0YXRl
LnZpZXdwb3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0OwotICAgIG1TdGF0
ZS56TmVhciA9IDAuMGY7Ci0gICAgbVN0YXRlLnpGYXIgPSAxLjBmOwotCi0gICAgbVN0YXRlLnNj
aXNzb3JYID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvclkgPSAwOwotICAgIG1TdGF0ZS5zY2lzc29y
V2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsKLSAgICBtU3RhdGUuc2Npc3Nvckhl
aWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsKLQotICAgIG1TdGF0ZS5jb2xvck1h
c2tSZWQgPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IHRydWU7Ci0gICAgbVN0
YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRy
dWU7Ci0gICAgbVN0YXRlLmRlcHRoTWFzayA9IHRydWU7Ci0KLSAgICBpZiAoc2hhcmVDb250ZXh0
ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0
LT5tUmVzb3VyY2VNYW5hZ2VyOwotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5hZGRSZWYoKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IG5ldyBS
ZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAzLjcgcGFnZSA4MzoKLSAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8y
RCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZlIHR3b2RpbWVuc2lvbmFsCi0gICAgLy8gYW5kIGN1
YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNwZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRo
IHRoZW0uCi0gICAgLy8gSW4gb3JkZXIgdGhhdCBhY2Nlc3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0
dXJlcyBub3QgYmUgbG9zdCwgdGhleSBhcmUgdHJlYXRlZCBhcyB0ZXh0dXJlCi0gICAgLy8gb2Jq
ZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMgYXJlIDAuCi0KLSAgICBtVGV4dHVyZTJEWmVyby5zZXQo
bmV3IFRleHR1cmUyRCgwKSk7Ci0gICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1
cmVDdWJlTWFwKDApKTsKLQotICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKLSAgICBiaW5k
QXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcigwKTsKLSAgICBiaW5k
VGV4dHVyZUN1YmVNYXAoMCk7Ci0gICAgYmluZFRleHR1cmUyRCgwKTsKLSAgICBiaW5kUmVhZEZy
YW1lYnVmZmVyKDApOwotICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7Ci0gICAgYmluZFJlbmRl
cmJ1ZmZlcigwKTsKLQotICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7Ci0KLSAgICBtU3Rh
dGUucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IDQ7Ci0g
ICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsKLQotICAgIG1WZXJ0ZXhEYXRh
TWFuYWdlciA9IE5VTEw7Ci0gICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1CbGl0
ID0gTlVMTDsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBtSW52YWxpZEVudW0gPSBm
YWxzZTsKLSAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7Ci0gICAgbUludmFsaWRPcGVyYXRpb24g
PSBmYWxzZTsKLSAgICBtT3V0T2ZNZW1vcnkgPSBmYWxzZTsKLSAgICBtSW52YWxpZEZyYW1lYnVm
ZmVyT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsKLSAg
ICBtQ29udGV4dExvc3QgPSBmYWxzZTsKLSAgICBtUmVzZXRTdGF0dXMgPSBHTF9OT19FUlJPUjsK
LSAgICBtUmVzZXRTdHJhdGVneSA9IChub3RpZnlSZXNldHMgPyBHTF9MT1NFX0NPTlRFWFRfT05f
UkVTRVRfRVhUIDogR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VYVCk7Ci0gICAgbVJvYnVzdEFj
Y2VzcyA9IHJvYnVzdEFjY2VzczsKLQotICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IGZhbHNl
OwotICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0RYVDVU
ZXh0dXJlcyA9IGZhbHNlOwotICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IGZhbHNlOwotICAg
IG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBmYWxzZTsKLSAgICBtTnVtQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXRzID0gMDsKLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7Ci0gICAgbU1h
c2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7Ci0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKLX0K
LQotQ29udGV4dDo6fkNvbnRleHQoKQotewotICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0g
IT0gMCkKLSAgICB7Ci0gICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7Ci0gICAgICAgIGlmIChw
cm9ncmFtT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5yZWxl
YXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIW1GcmFtZWJ1ZmZlck1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVs
ZXRlRmVuY2UobUZlbmNlTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAo
IW1RdWVyeU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFw
LmJlZ2luKCktPmZpcnN0KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBv
cnQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0
LmJlZ2luKCktPnNlY29uZDsKLSAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVs
dGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwotICAgIH0KLQotICAgIGZvciAoaW50IHR5cGUgPSAw
OyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBmb3Ig
KGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTX1ZURjsgc2FtcGxlcisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdGUuc2FtcGxl
clRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykK
LSAgICB7Ci0gICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KE5VTEwpOwotICAg
IH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0g
ICAgewotICAgICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQo
TlVMTCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBRVUVSWV9UWVBFX0NPVU5U
OyBpKyspCi0gICAgewotICAgICAgICBtU3RhdGUuYWN0aXZlUXVlcnlbaV0uc2V0KE5VTEwpOwot
ICAgIH0KLQotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQo
TlVMTCk7Ci0KLSAgICBtVGV4dHVyZTJEWmVyby5zZXQoTlVMTCk7Ci0gICAgbVRleHR1cmVDdWJl
TWFwWmVyby5zZXQoTlVMTCk7Ci0KLSAgICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOwotICAg
IGRlbGV0ZSBtSW5kZXhEYXRhTWFuYWdlcjsKLSAgICBkZWxldGUgbUJsaXQ7Ci0gICAgZGVsZXRl
IG1MaW5lTG9vcElCOwotCi0gICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCi0gICAgewot
ICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAg
bVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwotfQotCi12b2lkIENvbnRleHQ6Om1ha2VDdXJy
ZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAg
IG1EaXNwbGF5ID0gZGlzcGxheTsKLSAgICBtRGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgp
OwotCi0gICAgaWYgKCFtSGFzQmVlbkN1cnJlbnQpCi0gICAgewotICAgICAgICBtRGV2aWNlQ2Fw
cyA9IG1EaXNwbGF5LT5nZXREZXZpY2VDYXBzKCk7Ci0KLSAgICAgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOwotICAgICAgICBtSW5k
ZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5hZ2VyKHRoaXMsIG1EZXZpY2UpOwotICAg
ICAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOwotCi0gICAgICAgIG1TdXBwb3J0c1NoYWRlck1v
ZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA+PSBEM0RQU19WRVJTSU9OKDMs
IDApOwotICAgICAgICBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID0gbURpc3BsYXktPmdldFZlcnRl
eFRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c05vblBvd2VyMlRleHR1cmUgPSBt
RGlzcGxheS0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRz
SW5zdGFuY2luZyA9IG1EaXNwbGF5LT5nZXRJbnN0YW5jaW5nU3VwcG9ydCgpOwotCi0gICAgICAg
IG1NYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oKGludCltRGV2aWNlQ2Fw
cy5NYXhUZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lv
biA9IHN0ZDo6bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRp
bWVuc2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOwotICAgICAgICBtTWF4VGV4dHVyZUxldmVs
ID0gbG9nMihtTWF4VGV4dHVyZURpbWVuc2lvbikgKyAxOwotICAgICAgICBUUkFDRSgiTWF4VGV4
dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249JWQsIE1heFJlbmRlcmJ1
ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVkIiwKLSAgICAgICAgICAgICAgbU1h
eFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1
ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7Ci0KLSAgICAgICAgY29uc3QgRDNERk9S
TUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEQzREZN
VF9BOFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9YOFI4RzhCOCwKLSAgICAgICAgICAgIEQz
REZNVF9SNUc2QjUsCi0gICAgICAgICAgICBEM0RGTVRfRDI0UzgKLSAgICAgICAgfTsKLQotICAg
ICAgICBpbnQgbWF4ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YocmVu
ZGVyQnVmZmVyRm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsgKytpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVMVElTQU1Q
TEVfMTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAgbURpc3BsYXktPmdldE11bHRpU2FtcGxl
U3VwcG9ydChyZW5kZXJCdWZmZXJGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAg
ICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVyQnVmZmVyRm9ybWF0c1tpXV0gPSBtdWx0
aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVf
MTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJM
RSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4
ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQotICAgICAgICBtU3VwcG9ydHNFdmVu
dFF1ZXJpZXMgPSBtRGlzcGxheS0+Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICAgICAgbVN1
cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IG1EaXNwbGF5LT5nZXRPY2NsdXNpb25RdWVyeVN1cHBv
cnQoKTsKLSAgICAgICAgbVN1cHBvcnRzRFhUMVRleHR1cmVzID0gbURpc3BsYXktPmdldERYVDFU
ZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBtRGlzcGxh
eS0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJl
cyA9IG1EaXNwbGF5LT5nZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICAgICAgbVN1cHBvcnRz
RmxvYXQzMlRleHR1cmVzID0gbURpc3BsYXktPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4
dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0
RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmbVN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0x1bWlu
YW5jZVRleHR1cmVzID0gbURpc3BsYXktPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtRGlzcGxheS0+Z2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNEZXB0aFRleHR1
cmVzID0gbURpc3BsYXktPmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKTsKLQotICAgICAgICBtU3Vw
cG9ydHMzMmJpdEluZGljZXMgPSBtRGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAx
Nik7Ci0KLSAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7Ci0gICAgICAg
IGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTnVt
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXRzICs9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN1
cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1OdW1Db21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMgKz0gMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3VwcG9ydHNE
WFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cyArPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5pdEV4dGVuc2lvblN0cmlu
ZygpOwotICAgICAgICBpbml0UmVuZGVyZXJTdHJpbmcoKTsKLQotICAgICAgICBtU3RhdGUudmll
d3BvcnRYID0gMDsKLSAgICAgICAgbVN0YXRlLnZpZXdwb3J0WSA9IDA7Ci0gICAgICAgIG1TdGF0
ZS52aWV3cG9ydFdpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgbVN0YXRlLnZp
ZXdwb3J0SGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgbVN0YXRlLnNj
aXNzb3JYID0gMDsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JZID0gMDsKLSAgICAgICAgbVN0YXRl
LnNjaXNzb3JXaWR0aCA9IHN1cmZhY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgIG1TdGF0ZS5zY2lz
c29ySGVpZ2h0ID0gc3VyZmFjZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgbUhhc0JlZW5DdXJy
ZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBXcmFwIHRoZSBleGlzdGluZyBEaXJlY3QzRCA5
IHJlc291cmNlcyBpbnRvIEdMIG9iamVjdHMgYW5kIGFzc2lnbiB0aGVtIHRvIHRoZSAnMCcgbmFt
ZXMKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVmYXVsdFJlbmRlclRhcmdldCA9IHN1cmZhY2Ut
PmdldFJlbmRlclRhcmdldCgpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwg
PSBzdXJmYWNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1
ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7Ci0gICAgRGVw
dGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWxidWZmZXJaZXJvID0gbmV3IERlcHRoU3RlbmNp
bGJ1ZmZlcihkZXB0aFN0ZW5jaWwpOwotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlclplcm8g
PSBuZXcgRGVmYXVsdEZyYW1lYnVmZmVyKGNvbG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVm
ZmVyWmVybyk7Ci0KLSAgICBzZXRGcmFtZWJ1ZmZlclplcm8oZnJhbWVidWZmZXJaZXJvKTsKLQot
ICAgIGlmIChkZWZhdWx0UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgZGVmYXVsdFJlbmRl
clRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAg
ewotICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgbWFy
a0FsbFN0YXRlRGlydHkoKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHNldCBhbGwgb2Yg
dGhlIHN0YXRlLXJlbGF0ZWQgZGlydHkgZmxhZ3MsIHNvIHRoYXQgYWxsIHN0YXRlIGlzIHNldCBk
dXJpbmcgbmV4dCBwcmUtZHJhdy4KLXZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQot
ewotICAgIGZvciAoaW50IHQgPSAwOyB0IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHQrKykK
LSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlhbFBTW3RdID0gMDsKLSAgICB9Ci0K
LSAgICBmb3IgKGludCB0ID0gMDsgdCA8IE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU19W
VEY7IHQrKykKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkVGV4dHVyZVNlcmlhbFZTW3RdID0gMDsK
LSAgICB9Ci0KLSAgICBtQXBwbGllZFByb2dyYW1TZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkUmVu
ZGVyVGFyZ2V0U2VyaWFsID0gMDsKLSAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gMDsK
LSAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkSUJTZXJp
YWwgPSAwOwotICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwotICAgIG1WaWV3
cG9ydEluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXpl
ZCA9IGZhbHNlOwotCi0gICAgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHko
KTsKLQotICAgIG1DbGVhclN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1DdWxsU3RhdGVEaXJ0eSA9
IHRydWU7Ci0gICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbU1hc2tTdGF0ZURpcnR5
ID0gdHJ1ZTsKLSAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU3RlbmNpbFN0YXRl
RGlydHkgPSB0cnVlOwotICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
bVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7
Ci0gICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRy
dWU7Ci0gICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0gICAgbUNhY2hlZEN1cnJlbnRQcm9n
cmFtID0gTlVMTDsKLX0KLQotdm9pZCBDb250ZXh0OjptYXJrRHhVbmlmb3Jtc0RpcnR5KCkKLXsK
LSAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjptYXJrQ29u
dGV4dExvc3QoKQotewotICAgIGlmIChtUmVzZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRf
T05fUkVTRVRfRVhUKQotICAgICAgICBtUmVzZXRTdGF0dXMgPSBHTF9VTktOT1dOX0NPTlRFWFRf
UkVTRVRfRVhUOwotICAgIG1Db250ZXh0TG9zdCA9IHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
aXNDb250ZXh0TG9zdCgpCi17Ci0gICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUs
IGZsb2F0IGFscGhhKQotewotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0gcmVkOwot
ICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gPSBncmVlbjsKLSAgICBtU3RhdGUuY29s
b3JDbGVhclZhbHVlLmJsdWUgPSBibHVlOwotICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxw
aGEgPSBhbHBoYTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRo
KQotewotICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSBkZXB0aDsKLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpCi17Ci0gICAgbVN0YXRlLnN0ZW5jaWxD
bGVhclZhbHVlID0gc3RlbmNpbDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29s
IGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSAhPSBlbmFibGVkKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLmN1bGxGYWNlID0gZW5hYmxlZDsKLSAgICAgICAgbUN1bGxTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNDdWxsRmFjZUVuYWJsZWQo
KSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuY3VsbEZhY2U7Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0Q3VsbE1vZGUoR0xlbnVtIG1vZGUpCi17Ci0gICAgaWYgKG1TdGF0ZS5jdWxsTW9kZSAh
PSBtb2RlKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmN1bGxNb2RlID0gbW9kZTsKLSAgICAgICAg
bUN1bGxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RnJv
bnRGYWNlKEdMZW51bSBmcm9udCkKLXsKLSAgICBpZiAobVN0YXRlLmZyb250RmFjZSAhPSBmcm9u
dCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5mcm9udEZhY2UgPSBmcm9udDsKLSAgICAgICAgbUZy
b250RmFjZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhU
ZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmRlcHRoVGVzdCAhPSBlbmFibGVk
KQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRlcHRoVGVzdCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1E
ZXB0aFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0RlcHRo
VGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuZGVwdGhUZXN0OwotfQot
Ci12b2lkIENvbnRleHQ6OnNldERlcHRoRnVuYyhHTGVudW0gZGVwdGhGdW5jKQotewotICAgIGlm
IChtU3RhdGUuZGVwdGhGdW5jICE9IGRlcHRoRnVuYykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5k
ZXB0aEZ1bmMgPSBkZXB0aEZ1bmM7Ci0gICAgICAgIG1EZXB0aFN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9h
dCB6RmFyKQotewotICAgIG1TdGF0ZS56TmVhciA9IHpOZWFyOwotICAgIG1TdGF0ZS56RmFyID0g
ekZhcjsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZChib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1TdGF0ZS5ibGVuZCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmJsZW5k
ID0gZW5hYmxlZDsKLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQot
Ci1ib29sIENvbnRleHQ6OmlzQmxlbmRFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0
YXRlLmJsZW5kOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kRmFjdG9ycyhHTGVudW0gc291
cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xlbnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVzdEFs
cGhhKQotewotICAgIGlmIChtU3RhdGUuc291cmNlQmxlbmRSR0IgIT0gc291cmNlUkdCIHx8Ci0g
ICAgICAgIG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhICE9IHNvdXJjZUFscGhhIHx8Ci0gICAgICAg
IG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gZGVzdFJHQiB8fAotICAgICAgICBtU3RhdGUuZGVzdEJs
ZW5kQWxwaGEgIT0gZGVzdEFscGhhKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5k
UkdCID0gc291cmNlUkdCOwotICAgICAgICBtU3RhdGUuZGVzdEJsZW5kUkdCID0gZGVzdFJHQjsK
LSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBzb3VyY2VBbHBoYTsKLSAgICAgICAg
bVN0YXRlLmRlc3RCbGVuZEFscGhhID0gZGVzdEFscGhhOwotICAgICAgICBtQmxlbmRTdGF0ZURp
cnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRDb2xvcihmbG9h
dCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAo
bVN0YXRlLmJsZW5kQ29sb3IucmVkICE9IHJlZCB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xv
ci5ncmVlbiAhPSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlICE9IGJs
dWUgfHwKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYWxwaGEgIT0gYWxwaGEpCi0gICAgewot
ICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5ibGVu
ZENvbG9yLmdyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUgPSBi
bHVlOwotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IGFscGhhOwotICAgICAgICBt
QmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Qmxl
bmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVxdWF0aW9uKQotewot
ICAgIGlmIChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiAhPSByZ2JFcXVhdGlvbiB8fAotICAgICAg
ICBtU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhICE9IGFscGhhRXF1YXRpb24pCi0gICAgewotICAg
ICAgICBtU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IHJnYkVxdWF0aW9uOwotICAgICAgICBtU3Rh
dGUuYmxlbmRFcXVhdGlvbkFscGhhID0gYWxwaGFFcXVhdGlvbjsKLSAgICAgICAgbUJsZW5kU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxUZXN0
KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICE9IGVuYWJsZWQp
Ci0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbFRlc3QgPSBlbmFibGVkOwotICAgICAgICBt
U3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1N0
ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zdGVuY2lsVGVz
dDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2lsRnVu
YywgR0xpbnQgc3RlbmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKQotewotICAgIGlmIChtU3Rh
dGUuc3RlbmNpbEZ1bmMgIT0gc3RlbmNpbEZ1bmMgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxS
ZWYgIT0gc3RlbmNpbFJlZiB8fAotICAgICAgICBtU3RhdGUuc3RlbmNpbE1hc2sgIT0gc3RlbmNp
bE1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZ1bmMgPSBzdGVuY2lsRnVuYzsK
LSAgICAgICAgbVN0YXRlLnN0ZW5jaWxSZWYgPSAoc3RlbmNpbFJlZiA+IDApID8gc3RlbmNpbFJl
ZiA6IDA7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayA9IHN0ZW5jaWxNYXNrOwotICAgICAg
ICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRTdGVuY2lsQmFja1BhcmFtcyhHTGVudW0gc3RlbmNpbEJhY2tGdW5jLCBHTGludCBzdGVuY2ls
QmFja1JlZiwgR0x1aW50IHN0ZW5jaWxCYWNrTWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5j
aWxCYWNrRnVuYyAhPSBzdGVuY2lsQmFja0Z1bmMgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrUmVmICE9IHN0ZW5jaWxCYWNrUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja01h
c2sgIT0gc3RlbmNpbEJhY2tNYXNrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
RnVuYyA9IHN0ZW5jaWxCYWNrRnVuYzsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0g
KHN0ZW5jaWxCYWNrUmVmID4gMCkgPyBzdGVuY2lsQmFja1JlZiA6IDA7Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsQmFja01hc2sgPSBzdGVuY2lsQmFja01hc2s7Ci0gICAgICAgIG1TdGVuY2lsU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxXcml0
ZW1hc2soR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2ls
V3JpdGVtYXNrICE9IHN0ZW5jaWxXcml0ZW1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3Rl
bmNpbFdyaXRlbWFzayA9IHN0ZW5jaWxXcml0ZW1hc2s7Ci0gICAgICAgIG1TdGVuY2lsU3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxCYWNrV3Jp
dGVtYXNrKEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0
ZW5jaWxCYWNrV3JpdGVtYXNrICE9IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotICAgIHsKLSAgICAg
ICAgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gc3RlbmNpbEJhY2tXcml0ZW1hc2s7Ci0g
ICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5j
aWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCi17Ci0gICAgaWYg
KG1TdGF0ZS5zdGVuY2lsRmFpbCAhPSBzdGVuY2lsRmFpbCB8fAotICAgICAgICBtU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbFBhc3NEZXB0aEZhaWwgfHwKLSAgICAgICAgbVN0
YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzICE9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzKQotICAgIHsK
LSAgICAgICAgbVN0YXRlLnN0ZW5jaWxGYWlsID0gc3RlbmNpbEZhaWw7Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxQYXNzRGVwdGhGYWlsOwotICAgICAgICBt
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBzdGVuY2lsUGFzc0RlcHRoUGFzczsKLSAgICAg
ICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6
c2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdMZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBz
dGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mp
Ci17Ci0gICAgaWYgKG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgIT0gc3RlbmNpbEJhY2tGYWlsIHx8
Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgIT0gc3RlbmNpbEJhY2tQ
YXNzRGVwdGhGYWlsIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mg
IT0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnN0ZW5j
aWxCYWNrRmFpbCA9IHN0ZW5jaWxCYWNrRmFpbDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNr
UGFzc0RlcHRoRmFpbCA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsKLSAgICAgICAgbVN0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsKLSAg
ICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0UG9seWdvbk9mZnNldEZpbGwoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUu
cG9seWdvbk9mZnNldEZpbGwgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0RmlsbCA9IGVuYWJsZWQ7Ci0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0
eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzUG9seWdvbk9mZnNldEZpbGxF
bmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOwot
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZhY3Rv
ciwgR0xmbG9hdCB1bml0cykKLXsKLSAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3Ig
IT0gZmFjdG9yIHx8Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMgIT0gdW5pdHMp
Ci0gICAgewotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvciA9IGZhY3RvcjsKLSAg
ICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyA9IHVuaXRzOwotICAgICAgICBtUG9seWdv
bk9mZnNldFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRT
YW1wbGVBbHBoYVRvQ292ZXJhZ2UoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc2Ft
cGxlQWxwaGFUb0NvdmVyYWdlICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc2Ft
cGxlQWxwaGFUb0NvdmVyYWdlID0gZW5hYmxlZDsKLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkg
PSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc1NhbXBsZUFscGhhVG9Db3ZlcmFn
ZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVy
YWdlOwotfQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlICE9IGVuYWJsZWQpCi0gICAgewotICAg
ICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxlU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQ292ZXJh
Z2VFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnNhbXBsZUNvdmVyYWdlOwot
fQotCi12b2lkIENvbnRleHQ6OnNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKEdMY2xhbXBmIHZhbHVl
LCBib29sIGludmVydCkKLXsKLSAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0g
dmFsdWUgfHwKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ICE9IGludmVydCkK
LSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID0gdmFsdWU7Ci0gICAg
ICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCA9IGludmVydDsKLSAgICAgICAgbVNhbXBs
ZVN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRTY2lzc29y
VGVzdChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0ZS5zY2lzc29yVGVzdCAhPSBlbmFi
bGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JUZXN0ID0gZW5hYmxlZDsKLSAgICAg
ICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6
aXNTY2lzc29yVGVzdEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2Npc3Nv
clRlc3Q7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGl0aGVyKGJvb2wgZW5hYmxlZCkKLXsKLSAg
ICBpZiAobVN0YXRlLmRpdGhlciAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmRp
dGhlciA9IGVuYWJsZWQ7Ci0gICAgICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNEaXRoZXJFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVN0YXRlLmRpdGhlcjsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRMaW5lV2lkdGgoR0xmbG9h
dCB3aWR0aCkKLXsKLSAgICBtU3RhdGUubGluZVdpZHRoID0gd2lkdGg7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0R2VuZXJhdGVNaXBtYXBIaW50KEdMZW51bSBoaW50KQotewotICAgIG1TdGF0ZS5n
ZW5lcmF0ZU1pcG1hcEhpbnQgPSBoaW50OwotfQotCi12b2lkIENvbnRleHQ6OnNldEZyYWdtZW50
U2hhZGVyRGVyaXZhdGl2ZUhpbnQoR0xlbnVtIGhpbnQpCi17Ci0gICAgbVN0YXRlLmZyYWdtZW50
U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBoaW50OwotICAgIC8vIFRPRE86IFByb3BhZ2F0ZSB0aGUg
aGludCB0byBzaGFkZXIgdHJhbnNsYXRvciBzbyB3ZSBjYW4gd3JpdGUKLSAgICAvLyBkZHgsIGRk
eF9jb2Fyc2UsIG9yIGRkeF9maW5lIGRlcGVuZGluZyBvbiB0aGUgaGludC4KLSAgICAvLyBJZ25v
cmUgZm9yIG5vdy4gSXQgaXMgdmFsaWQgZm9yIGltcGxlbWVudGF0aW9ucyB0byBpZ25vcmUgaGlu
dC4KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBtU3RhdGUudmlld3BvcnRY
ID0geDsKLSAgICBtU3RhdGUudmlld3BvcnRZID0geTsKLSAgICBtU3RhdGUudmlld3BvcnRXaWR0
aCA9IHdpZHRoOwotICAgIG1TdGF0ZS52aWV3cG9ydEhlaWdodCA9IGhlaWdodDsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChtU3RhdGUuc2Npc3NvclggIT0geCB8fCBt
U3RhdGUuc2Npc3NvclkgIT0geSB8fCAKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCAhPSB3
aWR0aCB8fCBtU3RhdGUuc2Npc3NvckhlaWdodCAhPSBoZWlnaHQpCi0gICAgewotICAgICAgICBt
U3RhdGUuc2Npc3NvclggPSB4OwotICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSB5OwotICAgICAg
ICBtU3RhdGUuc2Npc3NvcldpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1TdGF0ZS5zY2lzc29ySGVp
Z2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0K
LX0KLQotdm9pZCBDb250ZXh0OjpzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJv
b2wgYmx1ZSwgYm9vbCBhbHBoYSkKLXsKLSAgICBpZiAobVN0YXRlLmNvbG9yTWFza1JlZCAhPSBy
ZWQgfHwgbVN0YXRlLmNvbG9yTWFza0dyZWVuICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0ZS5j
b2xvck1hc2tCbHVlICE9IGJsdWUgfHwgbVN0YXRlLmNvbG9yTWFza0FscGhhICE9IGFscGhhKQot
ICAgIHsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza1JlZCA9IHJlZDsKLSAgICAgICAgbVN0YXRl
LmNvbG9yTWFza0dyZWVuID0gZ3JlZW47Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlID0g
Ymx1ZTsKLSAgICAgICAgbVN0YXRlLmNvbG9yTWFza0FscGhhID0gYWxwaGE7Ci0gICAgICAgIG1N
YXNrU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRo
TWFzayhib29sIG1hc2spCi17Ci0gICAgaWYgKG1TdGF0ZS5kZXB0aE1hc2sgIT0gbWFzaykKLSAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSBtYXNrOwotICAgICAgICBtTWFza1N0YXRl
RGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRBY3RpdmVTYW1wbGVy
KHVuc2lnbmVkIGludCBhY3RpdmUpCi17Ci0gICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSBhY3Rp
dmU7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSBjb25z
dAotewotICAgIHJldHVybiBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOwotfQotCi1HTHVpbnQgQ29u
dGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0
YXRlLmRyYXdGcmFtZWJ1ZmZlcjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
ckhhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsK
LX0KLQotR0x1aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0Ojpn
ZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBjb25zdAotewotICAgIFF1ZXJ5ICpxdWVyeU9i
amVjdCA9IE5VTEw7Ci0gICAgCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICBxdWVyeU9iamVjdCA9IG1TdGF0
ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdldCgpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6
Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1Q
TEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKHF1ZXJ5T2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0LT5pZCgpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9v
bCBlbmFibGVkKQotewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQXJy
YXlFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0
OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKQotewotICAgIHJl
dHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07Ci19Ci0KLXZvaWQgQ29udGV4
dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVyICpi
b3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZv
aWQgKnBvaW50ZXIpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1C
b3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7Ci19Ci0KLWNvbnN0IHZvaWQgKkNvbnRleHQ6
OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOwot
fQotCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmli
dXRlcygpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGU7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCi17Ci0gICAgbVN0YXRl
LnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci19Ci0KLUdMaW50IENvbnRleHQ6OmdldFBhY2tB
bGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVudDsKLX0K
LQotdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQotewot
ICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci19Ci0KLUdMaW50IENvbnRl
eHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS51bnBh
Y2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dPcmRlcihi
b29sIHJldmVyc2VSb3dPcmRlcikKLXsKLSAgICBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlciA9
IHJldmVyc2VSb3dPcmRlcjsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRQYWNrUmV2ZXJzZVJvd09y
ZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7Ci19
Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewotICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsKLX0KLQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVBy
b2dyYW0oKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVQcm9ncmFtKCk7
Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCi17Ci0gICAg
cmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVNoYWRlcih0eXBlKTsKLX0KLQotR0x1aW50
IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2Vy
LT5jcmVhdGVUZXh0dXJlKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZm
ZXIoKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5kZXJidWZmZXIo
KTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQotR0x1aW50IENv
bnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbUZyYW1l
YnVmZmVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci0KLSAgICBtRnJhbWVidWZmZXJNYXBb
aGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi1HTHVpbnQgQ29udGV4
dDo6Y3JlYXRlRmVuY2UoKQotewotICAgIEdMdWludCBoYW5kbGUgPSBtRmVuY2VIYW5kbGVBbGxv
Y2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1GZW5jZU1hcFtoYW5kbGVdID0gbmV3IEZlbmNlKG1E
aXNwbGF5KTsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2Vk
IHF1ZXJ5IG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVRdWVyeSgpCi17Ci0gICAgR0x1aW50
IGhhbmRsZSA9IG1RdWVyeUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwotCi0gICAgbVF1ZXJ5
TWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBDb250
ZXh0OjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBpZiAobVJlc291cmNlTWFu
YWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpCi0gICAgewotICAgICAgICBkZXRhY2hCdWZmZXIoYnVm
ZmVyKTsKLSAgICB9Ci0gICAgCi0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlQnVmZmVyKGJ1
ZmZlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpCi17
Ci0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgIG1DYWNoZWRDdXJyZW50UHJvZ3Jh
bSA9IE5VTEw7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSkKLXsKLSAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkKLSAg
ICB7Ci0gICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgbVJlc291
cmNlTWFuYWdlci0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBDb250ZXh0Ojpk
ZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAobVJlc291
cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAg
ICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAgICB9Ci0gICAgCi0gICAgbVJl
c291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAg
IEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1ZmZl
ck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCAhPSBt
RnJhbWVidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcik7Ci0KLSAgICAgICAgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yLnJlbGVh
c2UoZnJhbWVidWZmZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgZGVsZXRlIGZyYW1lYnVmZmVy
T2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GcmFtZWJ1ZmZlck1hcC5lcmFzZShmcmFtZWJ1ZmZl
ck9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWludCBm
ZW5jZSkKLXsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2VPYmplY3QgPSBtRmVuY2VNYXAu
ZmluZChmZW5jZSk7Ci0KLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQot
ICAgIHsKLSAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3Qt
PmZpcnN0KTsKLSAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1G
ZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRl
bGV0ZVF1ZXJ5KEdMdWludCBxdWVyeSkKLXsKLSAgICBRdWVyeU1hcDo6aXRlcmF0b3IgcXVlcnlP
YmplY3QgPSBtUXVlcnlNYXAuZmluZChxdWVyeSk7Ci0gICAgaWYgKHF1ZXJ5T2JqZWN0ICE9IG1R
dWVyeU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeUhhbmRsZUFsbG9jYXRvci5yZWxl
YXNlKHF1ZXJ5T2JqZWN0LT5maXJzdCk7Ci0gICAgICAgIGlmIChxdWVyeU9iamVjdC0+c2Vjb25k
KQotICAgICAgICB7Ci0gICAgICAgICAgICBxdWVyeU9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgbVF1ZXJ5TWFwLmVyYXNlKHF1ZXJ5T2JqZWN0KTsKLSAgICB9
Ci19Ci0KLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QnVmZmVyKEdMdWludCBoYW5kbGUpCi17Ci0gICAg
cmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOwotfQotCi1TaGFkZXIg
KkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsKLX0KLQotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0
UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRQcm9ncmFtKGhhbmRsZSk7Ci19Ci0KLVRleHR1cmUgKkNvbnRleHQ6OmdldFRleHR1cmUoR0x1
aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSho
YW5kbGUpOwotfQotCi1SZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcihHTHVp
bnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZm
ZXIoaGFuZGxlKTsKLX0KLQotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZl
cigpCi17Ci0gICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIp
OwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVyKCkKLXsKLSAg
ICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRB
cnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmFycmF5QnVmZmVy
LnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZEVsZW1lbnRB
cnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmVsZW1lbnRBcnJh
eUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRU
ZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tU
ZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEKTsKLQotICAgIG1TdGF0ZS5zYW1w
bGVyVGV4dHVyZVtURVhUVVJFXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1
cmUodGV4dHVyZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVp
bnQgdGV4dHVyZSkKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0
aW9uKHRleHR1cmUsIFRFWFRVUkVfQ1VCRSk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVb
VEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVy
ZSkpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZyYW1l
YnVmZmVyKQotewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAgIHsK
LSAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigp
OwotICAgIH0KLQotICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKLX0K
LQotdm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikK
LXsKLSAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAgICAg
IG1GcmFtZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAgICB9
Ci0KLSAgICBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7Ci0KLSAgICBtQm91
bmREcmF3RnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZv
aWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAg
IG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihyZW5kZXJidWZm
ZXIpOwotCi0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0UmVuZGVyYnVmZmVyKHJlbmRl
cmJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0p
Ci17Ci0gICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsKLSAg
ICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOyAgICAgICAgICAgICAgIC8vIE11c3Qg
c3dpdGNoIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLCBvdGhlcndpc2UgaXQgb25seSBnZXRzIGZs
YWdnZWQuCi0KLSAgICBpZiAocHJpb3JQcm9ncmFtICE9IHByb2dyYW0pCi0gICAgewotICAgICAg
ICBQcm9ncmFtICpuZXdQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKLSAgICAgICAgUHJvZ3JhbSAqb2xkUHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdl
dFByb2dyYW0ocHJpb3JQcm9ncmFtKTsKLSAgICAgICAgbUNhY2hlZEN1cnJlbnRQcm9ncmFtID0g
TlVMTDsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG5l
d1Byb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5ld1Byb2dyYW0tPmFkZFJlZigpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob2xkUHJvZ3JhbSkKLSAgICAgICAgewot
ICAgICAgICAgICAgb2xkUHJvZ3JhbS0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQot
ewotICAgIC8vIEZyb20gRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5
RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4gIAotICAgIC8vIG9mIHplcm8sIGlmIHRoZSBhY3Rp
dmUgcXVlcnkgb2JqZWN0IG5hbWUgZm9yIDx0YXJnZXQ+IGlzIG5vbi16ZXJvIChmb3IgdGhlICAK
LSAgICAvLyB0YXJnZXRzIEFOWV9TQU1QTEVTX1BBU1NFRF9FWFQgYW5kIEFOWV9TQU1QTEVTX1BB
U1NFRF9DT05TRVJWQVRJVkVfRVhULCBpZiAgCi0gICAgLy8gdGhlIGFjdGl2ZSBxdWVyeSBmb3Ig
ZWl0aGVyIHRhcmdldCBpcyBub24temVybyksIGlmIDxpZD4gaXMgdGhlIG5hbWUgb2YgYW4gCi0g
ICAgLy8gZXhpc3RpbmcgcXVlcnkgb2JqZWN0IHdob3NlIHR5cGUgZG9lcyBub3QgbWF0Y2ggPHRh
cmdldD4sIG9yIGlmIDxpZD4gaXMgdGhlCi0gICAgLy8gYWN0aXZlIHF1ZXJ5IG9iamVjdCBuYW1l
IGZvciBhbnkgcXVlcnkgdHlwZSwgdGhlIGVycm9yIElOVkFMSURfT1BFUkFUSU9OIGlzCi0gICAg
Ly8gZ2VuZXJhdGVkLgotCi0gICAgLy8gRW5zdXJlIG5vIG90aGVyIHF1ZXJpZXMgYXJlIGFjdGl2
ZQotICAgIC8vIE5PVEU6IElmIG90aGVyIHF1ZXJpZXMgdGhhbiBvY2NsdXNpb24gYXJlIHN1cHBv
cnRlZCwgd2Ugd2lsbCBuZWVkIHRvIGNoZWNrCi0gICAgLy8gc2VwYXJhdGVseSB0aGF0OgotICAg
IC8vICAgIGEpIFRoZSBxdWVyeSBJRCBwYXNzZWQgaXMgbm90IHRoZSBjdXJyZW50IGFjdGl2ZSBx
dWVyeSBmb3IgYW55IHRhcmdldC90eXBlCi0gICAgLy8gICAgYikgVGhlcmUgYXJlIG5vIGFjdGl2
ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5kIGluIHRoZSBjYXNlCi0gICAg
Ly8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCi0gICAgLy8gICAgICAgbm8gcXVlcnkgbWF5IGJlIGFj
dGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0YXJnZXRzIGVpdGhlci4KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGlm
IChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFV
RVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVF
UllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVyeSwgdHJ1ZSwgdGFy
Z2V0KTsKLQotICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0YWluZWQgd2l0aCBnbEdlblF1
ZXJpZXMKLSAgICBpZiAoIXF1ZXJ5T2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICAvLyBjaGVjayBmb3IgdHlwZSBt
aXNtYXRjaAotICAgIGlmIChxdWVyeU9iamVjdC0+Z2V0VHlwZSgpICE9IHRhcmdldCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0g
ICAgLy8gc2V0IHF1ZXJ5IGFzIGFjdGl2ZSBmb3Igc3BlY2lmaWVkIHRhcmdldAotICAgIG1TdGF0
ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KHF1ZXJ5T2JqZWN0KTsKLQotICAgIC8vIGJlZ2luIHF1
ZXJ5Ci0gICAgcXVlcnlPYmplY3QtPmJlZ2luKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZW5kUXVl
cnkoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBRdWVyeVR5cGUgcVR5cGU7Ci0KLSAgICBzd2l0Y2gg
KHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAot
ICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0g
ICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUu
YWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOwotCi0gICAgaWYgKHF1ZXJ5T2JqZWN0ID09IE5VTEwp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
IH0KLQotICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsKLQotICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtx
VHlwZV0uc2V0KE5VTEwpOwotfQotCi12b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhG
cmFtZWJ1ZmZlciAqYnVmZmVyKQotewotICAgIGRlbGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07Ci0g
ICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOwotICAgIGlmIChtU3RhdGUuZHJhd0ZyYW1l
YnVmZmVyID09IDApCi0gICAgewotICAgICAgICBtQm91bmREcmF3RnJhbWVidWZmZXIgPSBidWZm
ZXI7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVu
ZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQotewotICAgIFJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKLSAgICByZW5kZXJi
dWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsKLX0KLQotRnJhbWVidWZmZXIg
KkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgRnJh
bWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQo
aGFuZGxlKTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1GZW5jZSAqQ29u
dGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBGZW5jZU1hcDo6aXRl
cmF0b3IgZmVuY2UgPSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKGZlbmNlID09
IG1GZW5jZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmVuY2UtPnNlY29uZDsKLSAgICB9Ci19Ci0K
LVF1ZXJ5ICpDb250ZXh0OjpnZXRRdWVyeSh1bnNpZ25lZCBpbnQgaGFuZGxlLCBib29sIGNyZWF0
ZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgUXVlcnlNYXA6Oml0ZXJhdG9yIHF1ZXJ5ID0gbVF1ZXJ5
TWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChxdWVyeSA9PSBtUXVlcnlNYXAuZW5kKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgaWYgKCFxdWVyeS0+c2Vjb25kICYmIGNyZWF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cXVlcnktPnNlY29uZCA9IG5ldyBRdWVyeShoYW5kbGUsIHR5cGUpOwotICAgICAgICAgICAgcXVl
cnktPnNlY29uZC0+YWRkUmVmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHF1ZXJ5LT5z
ZWNvbmQ7Ci0gICAgfQotfQotCi1CdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOwotfQotCi1CdWZmZXIgKkNvbnRl
eHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVtZW50
QXJyYXlCdWZmZXIuZ2V0KCk7Ci19Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldEN1cnJlbnRQcm9n
cmFtKCkKLXsKLSAgICBpZiAoIW1DYWNoZWRDdXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0gICAgICAg
IG1DYWNoZWRDdXJyZW50UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0obVN0
YXRlLmN1cnJlbnRQcm9ncmFtKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1DYWNoZWRDdXJyZW50UHJv
Z3JhbTsKLX0KLQotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0
aXZlU2FtcGxlciwgVEVYVFVSRV8yRCkpOwotfQotCi1UZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6
Z2V0VGV4dHVyZUN1YmVNYXAoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3Vi
ZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFX0NV
QkUpKTsKLX0KLQotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQg
aW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCi17Ci0gICAgR0x1aW50IHRleGlkID0gbVN0
YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7Ci0KLSAgICBpZiAodGV4aWQg
PT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRl
eHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkK
LSAgICAgICAgewotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
Y2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0KCk7Ci0gICAgICAgICAg
Y2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtz
YW1wbGVyXS5nZXQoKTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0gcG5h
bWUsIEdMYm9vbGVhbiAqcGFyYW1zKQotewotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6ICAgICAgICAgICAqcGFyYW1zID0gR0xfVFJVRTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRV9JTlZFUlQ6ICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aE1hc2s7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5j
b2xvck1hc2tSZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvck1hc2tHcmVlbjsK
LSAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNvbG9yTWFza0JsdWU7Ci0gICAgICAgIHBhcmFt
c1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VsbEZhY2U7
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RklMTDogICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbDsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAqcGFyYW1z
ID0gbVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292
ZXJhZ2U7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnN0ZW5jaWxUZXN0OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhUZXN0
OyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmRpdGhlcjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6ICpwYXJhbXMgPSBtUm9idXN0QWNjZXNzID8g
R0xfVFJVRSA6IEdMX0ZBTFNFOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0Ojpn
ZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpCi17Ci0gICAgLy8gUGxlYXNl
IG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5hbCBnZXRG
bG9hdHYgaW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBhcyBhIGZs
b2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVzCi0gICAg
Ly8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQgd291bGQg
cmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxkIG1ha2Ug
bm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KLSAgICBzd2l0Y2ggKHBu
YW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdl
VmFsdWU7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZz
ZXRGYWN0b3I7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAg
ICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0gPSBnbDo6
QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0gZ2w6OkFM
SUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IGdsOjpBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNbMV0gPSBzdXBwb3J0c1No
YWRlck1vZGVsMygpID8gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zIDogZ2w6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS56TmVhcjsK
LSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZS5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUu
Ymx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgotICAgICAgICBwYXJh
bXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0
ZS5ibGVuZENvbG9yLmdyZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuYmxlbmRDb2xv
ci5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xl
bnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBERVBUSF9D
TEVBUl9WQUxVRSBpcyBub3QgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEludGVnZXJ2IGlt
cGxlbWVudGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9hdCwgZGVz
cGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8vIEdldElu
dGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJlcXVpcmUg
Y29udmVyc2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5vIGRpZmZl
cmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIFlvdSBtYXkgZmluZCBpdCBpbiAKLSAg
ICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRF
WF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlO
R19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1WYXJ5aW5nVmVjdG9y
cygpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
UzogICAqcGFyYW1zID0gZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpwYXJh
bXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01B
WF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9C
SU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6
ICAgICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJhbXMg
PSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOwotICAgICAgLy9j
YXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQg
dG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCi0gICAgICBjYXNlIEdMX0RSQVdf
RlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1
ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJVRkZF
Ul9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNr
UmV2ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOUEFDS19B
TElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdubWVu
dDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJ
TlQ6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50OyAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9I
SU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxSZWY7ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9W
QUxVRV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbE1hc2s7ICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzog
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NU
RU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxQ
YXNzRGVwdGhGYWlsOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNT
X0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBh
c3M7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDogICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJhbXMg
PSBtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
ZXB0aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5E
X1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNvdXJjZUJsZW5k
UkdCOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhB
OiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRBbHBoYTsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuYmxlbmRFcXVhdGlvblJHQjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxf
V1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxXcml0ZW1h
c2s7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRF
TUFTSzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2s7ICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRN
YXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9N
QVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1DdWJl
VGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9DT01QUkVT
U0VEX1RFWFRVUkVfRk9STUFUUzogICAKLSAgICAgICAgcGFyYW1zWzBdID0gbU51bUNvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0czsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9TQU1Q
TEVTX0FOR0xFOgotICAgICAgICB7Ci0gICAgICAgICAgICBHTHNpemVpIG1heFNhbXBsZXMgPSBn
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7Ci0gICAgICAgICAgICBpZiAobWF4U2FtcGxlcyAhPSAw
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtYXhTYW1wbGVzOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6ICAgICAgICAgICAgICAg
ICAgIAotICAgICAgY2FzZSBHTF9TQU1QTEVTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAg
ICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVS
UzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0g
MCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfVFlQRTogICAqcGFyYW1zID0gZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfVFlQRTsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1Jf
UkVBRF9GT1JNQVQ6ICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgewot
ICAgICAgICAgICAgaW50IG1heERpbWVuc2lvbiA9IHN0ZDo6bWF4KGdldE1heGltdW1SZW5kZXJi
dWZmZXJEaW1lbnNpb24oKSwgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSk7Ci0gICAgICAg
ICAgICBwYXJhbXNbMF0gPSBtYXhEaW1lbnNpb247Ci0gICAgICAgICAgICBwYXJhbXNbMV0gPSBt
YXhEaW1lbnNpb247Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3Vw
cG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFy
YW1zKysgPSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOwotICAgICAgICAgICAgICAg
ICpwYXJhbXMrKyA9IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcysrID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0RYVDVU
ZXh0dXJlcygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMrKyA9IEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgICBwYXJh
bXNbMF0gPSBtU3RhdGUudmlld3BvcnRYOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUudmll
d3BvcnRZOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmlld3BvcnRXaWR0aDsKLSAgICAg
ICAgcGFyYW1zWzNdID0gbVN0YXRlLnZpZXdwb3J0SGVpZ2h0OwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5zY2lz
c29yWDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAgICBwYXJh
bXNbMl0gPSBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUu
c2Npc3NvckhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRV9N
T0RFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxNb2RlOyAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JFRF9CSVRTOgotICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOgotICAg
ICAgY2FzZSBHTF9CTFVFX0JJVFM6Ci0gICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJh
bWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
ZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfUkVEX0JJVFM6ICAgKnBh
cmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRSZWRTaXplKCk7ICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICpwYXJhbXMgPSBjb2xvcmJ1ZmZlci0+Z2V0R3JlZW5T
aXplKCk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6ICAqcGFy
YW1zID0gY29sb3JidWZmZXItPmdldEJsdWVTaXplKCk7ICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfQUxQSEFfQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRBbHBoYVNp
emUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBU
SF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotCi0gICAgICAg
ICAgICBpZiAoZGVwdGhidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6UmVuZGVy
YnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsK
LQotICAgICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHN0ZW5jaWxidWZmZXItPmdldFN0ZW5jaWxTaXplKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+
IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBs
ZXJdLmlkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRV
UkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZS5h
Y3RpdmVTYW1wbGVyIDwgMCB8fCBtU3RhdGUuYWN0aXZlU2FtcGxlciA+IGdldE1heGltdW1Db21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVTRVRfTk9USUZJQ0FUSU9O
X1NUUkFURUdZX0VYVDoKLSAgICAgICAgKnBhcmFtcyA9IG1SZXNldFN0cmF0ZWd5OwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgot
ICAgICAgICAqcGFyYW1zID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BST0dS
QU1fQklOQVJZX0ZPUk1BVFNfT0VTOgotICAgICAgICAqcGFyYW1zID0gR0xfUFJPR1JBTV9CSU5B
UllfQU5HTEU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbnRleHQ6Omdl
dFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQg
aW50ICpudW1QYXJhbXMpCi17Ci0gICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBxdWVyeSB0eXBlIHJl
dHVybmVkIGZvciBERVBUSF9DTEVBUl9WQUxVRSBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gICAg
Ly8gaXMgRkxPQVQgcmF0aGVyIHRoYW4gSU5ULCBhcyB3b3VsZCBiZSBzdWdnZXN0ZWQgYnkgdGhl
IEdMIEVTIDIuMCBzcGVjLiBUaGlzIGlzIGR1ZQotICAgIC8vIHRvIHRoZSBmYWN0IHRoYXQgaXQg
aXMgc3RvcmVkIGludGVybmFsbHkgYXMgYSBmbG9hdCwgYW5kIHNvIHdvdWxkIHJlcXVpcmUgY29u
dmVyc2lvbgotICAgIC8vIGlmIHJldHVybmVkIGZyb20gQ29udGV4dDo6Z2V0SW50ZWdlcnYuIFNp
bmNlIHRoaXMgY29udmVyc2lvbiBpcyBhbHJlYWR5IGltcGxlbWVudGVkIAotICAgIC8vIGluIHRo
ZSBjYXNlIHRoYXQgb25lIGNhbGxzIGdsR2V0SW50ZWdlcnYgdG8gcmV0cmlldmUgYSBmbG9hdC10
eXBlZCBzdGF0ZSB2YXJpYWJsZSwgd2UKLSAgICAvLyBwbGFjZSBERVBUSF9DTEVBUl9WQUxVRSB3
aXRoIHRoZSBmbG9hdHMuIFRoaXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2Fs
bGluZwotICAgIC8vIGFwcGxpY2F0aW9uLgotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAgICAgICAgewotICAgICAg
ICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0czsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6Ci0gICAgICBjYXNl
IEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlO
R19WRUNUT1JTOgotICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAg
Y2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpF
OgotICAgICAgY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgY2FzZSBH
TF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JV
RkZFUl9CSU5ESU5HOgotICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAg
Y2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9H
UkFNOgotICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDoKLSAgICAgIGNhc2UgR0xfUEFDS19S
RVZFUlNFX1JPV19PUkRFUl9BTkdMRToKLSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoK
LSAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICBjYXNlIEdMX0ZSQUdN
RU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOgotICAgICAgY2FzZSBHTF9SRURfQklUUzoK
LSAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKLSAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgotICAg
ICAgY2FzZSBHTF9BTFBIQV9CSVRTOgotICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JJVFM6Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRV9NT0RFOgotICAgICAgY2FzZSBHTF9G
Uk9OVF9GQUNFOgotICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRToKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9GVU5DOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfUkVGOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BB
U1NfREVQVEhfUEFTUzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfUkVGOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfUEFTUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzoKLSAgICAgIGNhc2Ug
R0xfQkxFTkRfU1JDX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOgotICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfUkdCOgotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6Ci0g
ICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFV
QVRJT05fQUxQSEE6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOgotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFS
X1ZBTFVFOgotICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOgotICAgICAgY2FzZSBHTF9NQVhf
VEVYVFVSRV9TSVpFOgotICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgot
ICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAg
ICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgotICAgICAgY2FzZSBH
TF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgIGNhc2UgR0xfVEVYVFVS
RV9CSU5ESU5HXzJEOgotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6Ci0g
ICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6Ci0gICAgICBjYXNl
IEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTX09FUzoKLSAgICAgIGNhc2UgR0xfUFJPR1JB
TV9CSU5BUllfRk9STUFUU19PRVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xf
SU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xFOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAg
ewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0g
MjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVklFV1BPUlQ6Ci0g
ICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9
IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6Ci0gICAgICBjYXNlIEdMX1NB
TVBMRV9DT1ZFUkFHRV9JTlZFUlQ6Ci0gICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoKLSAg
ICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAvLyBDVUxMX0ZBQ0UgdGhyb3Vn
aCBESVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNFbmFibGVkLAotICAgICAgY2FzZSBHTF9QT0xZR09O
X09GRlNFVF9GSUxMOiAgICAgIC8vIGJ1dCBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIEdl
dHtUeXBlfXYgcXVlcmllcy4KLSAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdF
OiAvLyBGb3IgdGhpcyBwdXJwb3NlLCB0aGV5IGFyZSB0cmVhdGVkIGhlcmUgYXMgYm9vbC1uYXR1
cmFsCi0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRToKLSAgICAgIGNhc2UgR0xfU0NJU1NP
Ul9URVNUOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6Ci0gICAgICBjYXNlIEdMX0RFUFRI
X1RFU1Q6Ci0gICAgICBjYXNlIEdMX0JMRU5EOgotICAgICAgY2FzZSBHTF9ESVRIRVI6Ci0gICAg
ICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgICp0eXBlID0gR0xfQk9PTDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKLSAgICAgICAgICAgICpudW1QYXJh
bXMgPSA0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09O
X09GRlNFVF9GQUNUT1I6Ci0gICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOgotICAg
ICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NM
RUFSX1ZBTFVFOgotICAgICAgY2FzZSBHTF9MSU5FX1dJRFRIOgotICAgICAgICB7Ci0gICAgICAg
ICAgICAqdHlwZSA9IEdMX0ZMT0FUOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9S
QU5HRToKLSAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgotICAgICAgY2Fz
ZSBHTF9ERVBUSF9SQU5HRToKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9B
VDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgIGNhc2UgR0xfQkxFTkRf
Q09MT1I6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7Ci0gICAgICAg
ICAgICAqbnVtUGFyYW1zID0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8gQXBwbGllcyB0aGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0aCBzdGVuY2ls
IHN1cmZhY2UsIHZpZXdwb3J0IHJlY3RhbmdsZSBhbmQKLS8vIHNjaXNzb3IgcmVjdGFuZ2xlIHRv
IHRoZSBEaXJlY3QzRCA5IGRldmljZQotYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChi
b29sIGlnbm9yZVZpZXdwb3J0KQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVj
dCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8
fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGVyZSBpcyBubyBjb2xv
ciBhdHRhY2htZW50IHdlIG11c3Qgc3ludGhlc2l6ZSBhIE5VTEwgY29sb3JhdHRhY2htZW50Ci0g
ICAgLy8gdG8ga2VlcCB0aGUgRDNEIHJ1bnRpbWUgaGFwcHkuICBUaGlzIHNob3VsZCBvbmx5IGJl
IHBvc3NpYmxlIGlmIGRlcHRoIHRleHR1cmluZy4KLSAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlck9iamVjdCA9IE5VTEw7Ci0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRDb2xvcmJ1
ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyKCk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXROdWxsQ29sb3JidWZmZXIoKTsKLSAgICB9Ci0gICAgaWYgKCFyZW5kZXJidWZmZXJPYmplY3Qp
Ci0gICAgewotICAgICAgICBFUlIoInVuYWJsZSB0byBsb2NhdGUgcmVuZGVyYnVmZmVyIGZvciBG
Qk8uIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHJlbmRlclRh
cmdldENoYW5nZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFs
ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAocmVuZGVyVGFyZ2V0
U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsKQotICAgIHsKLSAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdAotICAg
ICAgICB9Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCByZW5kZXJUYXJnZXQp
OwotICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdldFNlcmlh
bDsKLSAgICAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsgLy8gU2Npc3NvciBhcmVhIG11
c3QgYmUgY2xhbXBlZCB0byByZW5kZXIgdGFyZ2V0J3Mgc2l6ZS0tIHRoaXMgaXMgZGlmZmVyZW50
IGZvciBkaWZmZXJlbnQgcmVuZGVyIHRhcmdldHMuCi0gICAgICAgIHJlbmRlclRhcmdldENoYW5n
ZWQgPSB0cnVlOwotICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB1bnNpZ25lZCBp
bnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVy
U2VyaWFsID0gMDsKLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlw
ZSgpICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVy
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgIGRlcHRoU3Rl
bmNpbCA9IGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICAgICAgaWYgKCFkZXB0
aFN0ZW5jaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2lu
dGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVy
LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdl
dFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIFJlbmRlcmJ1
ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVy
KCk7Ci0gICAgICAgIGRlcHRoU3RlbmNpbCA9IHN0ZW5jaWxidWZmZXItPmdldERlcHRoU3RlbmNp
bCgpOwotICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0ZW5jaWxi
dWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAotICAg
ICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCB8
fAotICAgICAgICAhbURlcHRoU3RlbmNpbEluaXRpYWxpemVkKQotICAgIHsKLSAgICAgICAgbURl
dmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwotICAgICAgICBtQXBw
bGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBs
aWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGRlcHRoU3Rl
bmNpbCkKLSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgIH0KLQot
ICAgIGlmICghbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXplZCB8fCByZW5kZXJUYXJnZXRDaGFu
Z2VkKQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHJl
bmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIGlmICghcmVuZGVy
VGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4
dCBtdXN0IGJlIGxvc3QKLSAgICAgICAgfQotICAgICAgICByZW5kZXJUYXJnZXQtPkdldERlc2Mo
Jm1SZW5kZXJUYXJnZXREZXNjKTsKLSAgICAgICAgbVJlbmRlclRhcmdldERlc2NJbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAg
IEQzRFZJRVdQT1JUOSB2aWV3cG9ydDsKLQotICAgIGZsb2F0IHpOZWFyID0gY2xhbXAwMShtU3Rh
dGUuek5lYXIpOwotICAgIGZsb2F0IHpGYXIgPSBjbGFtcDAxKG1TdGF0ZS56RmFyKTsKLQotICAg
IGlmIChpZ25vcmVWaWV3cG9ydCkKLSAgICB7Ci0gICAgICAgIHZpZXdwb3J0LlggPSAwOwotICAg
ICAgICB2aWV3cG9ydC5ZID0gMDsKLSAgICAgICAgdmlld3BvcnQuV2lkdGggPSBtUmVuZGVyVGFy
Z2V0RGVzYy5XaWR0aDsKLSAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gbVJlbmRlclRhcmdldERl
c2MuSGVpZ2h0OwotICAgICAgICB2aWV3cG9ydC5NaW5aID0gMC4wZjsKLSAgICAgICAgdmlld3Bv
cnQuTWF4WiA9IDEuMGY7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZpZXdwb3J0
LlggPSBjbGFtcChtU3RhdGUudmlld3BvcnRYLCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRl
clRhcmdldERlc2MuV2lkdGgpKTsKLSAgICAgICAgdmlld3BvcnQuWSA9IGNsYW1wKG1TdGF0ZS52
aWV3cG9ydFksIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVuZGVyVGFyZ2V0RGVzYy5IZWlnaHQp
KTsKLSAgICAgICAgdmlld3BvcnQuV2lkdGggPSBjbGFtcChtU3RhdGUudmlld3BvcnRXaWR0aCwg
MEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSAtIHN0YXRpY19j
YXN0PExPTkc+KHZpZXdwb3J0LlgpKTsKLSAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0gY2xhbXAo
bVN0YXRlLnZpZXdwb3J0SGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4obVJlbmRlclRhcmdl
dERlc2MuSGVpZ2h0KSAtIHN0YXRpY19jYXN0PExPTkc+KHZpZXdwb3J0LlkpKTsKLSAgICAgICAg
dmlld3BvcnQuTWluWiA9IHpOZWFyOwotICAgICAgICB2aWV3cG9ydC5NYXhaID0gekZhcjsKLSAg
ICB9Ci0KLSAgICBpZiAodmlld3BvcnQuV2lkdGggPD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0g
MCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgot
ICAgIH0KLQotICAgIGlmIChyZW5kZXJUYXJnZXRDaGFuZ2VkIHx8ICFtVmlld3BvcnRJbml0aWFs
aXplZCB8fCBtZW1jbXAoJnZpZXdwb3J0LCAmbVNldFZpZXdwb3J0LCBzaXplb2YgbVNldFZpZXdw
b3J0KSAhPSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0
KTsKLSAgICAgICAgbVNldFZpZXdwb3J0ID0gdmlld3BvcnQ7Ci0gICAgICAgIG1WaWV3cG9ydElu
aXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKG1TY2lzc29yU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3Rh
dGUuc2Npc3NvclRlc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1QgcmVjdDsKLSAgICAg
ICAgICAgIHJlY3QubGVmdCA9IGNsYW1wKG1TdGF0ZS5zY2lzc29yWCwgMEwsIHN0YXRpY19jYXN0
PExPTkc+KG1SZW5kZXJUYXJnZXREZXNjLldpZHRoKSk7Ci0gICAgICAgICAgICByZWN0LnRvcCA9
IGNsYW1wKG1TdGF0ZS5zY2lzc29yWSwgMEwsIHN0YXRpY19jYXN0PExPTkc+KG1SZW5kZXJUYXJn
ZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNsYW1wKG1TdGF0ZS5z
Y2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgsIDBMLCBzdGF0aWNfY2FzdDxMT05HPihtUmVu
ZGVyVGFyZ2V0RGVzYy5XaWR0aCkpOwotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjbGFtcCht
U3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCwgMEwsIHN0YXRpY19jYXN0PExP
Tkc+KG1SZW5kZXJUYXJnZXREZXNjLkhlaWdodCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
U2Npc3NvclJlY3QoJnJlY3QpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJ
U1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TY2lzc29yU3Rh
dGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0g
JiYgbUR4VW5pZm9ybXNEaXJ0eSkKLSAgICB7Ci0gICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0gICAgICAgIEdM
aW50IGhhbGZQaXhlbFNpemUgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbigpOwotICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwg
LTEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIHh5KTsKLQotICAgICAgICAvLyBUaGVzZSB2YWx1ZXMg
YXJlIHVzZWQgZm9yIGNvbXB1dGluZyBnbF9GcmFnQ29vcmQgaW4gUHJvZ3JhbTo6bGlua1Zhcnlp
bmdzKCkuCi0gICAgICAgIEdMaW50IGNvb3JkID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhDb29yZExv
Y2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0
aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGYsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRo
IC8gMi4wZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3Bv
cnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm00ZnYoY29vcmQsIDEsIHdoeHkpOwotCi0gICAgICAgIEdMaW50IGRlcHRo
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0RHhEZXB0aExvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQg
ZHpbMl0gPSB7KHpGYXIgLSB6TmVhcikgLyAyLjBmLCAoek5lYXIgKyB6RmFyKSAvIDIuMGZ9Owot
ICAgICAgICBwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMmZ2KGRlcHRoLCAxLCBkeik7Ci0KLSAg
ICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldER4RGVwdGhSYW5nZUxv
Y2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgbmVhckZhckRpZmZbM10gPSB7ek5lYXIsIHpGYXIs
IHpGYXIgLSB6TmVhcn07Ci0gICAgICAgIHByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYoZGVw
dGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOwotICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIGZpeGVk
LWZ1bmN0aW9uIHN0YXRlIChjdWxsaW5nLCBkZXB0aCB0ZXN0LCBhbHBoYSBibGVuZGluZywgc3Rl
bmNpbGluZywgZXRjKSB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBw
bHlTdGF0ZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIEZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgR0xpbnQgZnJv
bnRDQ1cgPSBwcm9ncmFtQmluYXJ5LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKLSAgICBHTGlu
dCBjY3cgPSAobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAgIHByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0xaXYoZnJvbnRDQ1csIDEsICZjY3cpOwotCi0gICAgR0xpbnQgcG9pbnRzT3JM
aW5lcyA9IHByb2dyYW1CaW5hcnktPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7Ci0gICAg
R0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwotICAgIHByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsK
LQotICAgIEQzREFEQVBURVJfSURFTlRJRklFUjkgKmlkZW50aWZpZXIgPSBtRGlzcGxheS0+Z2V0
QWRhcHRlcklkZW50aWZpZXIoKTsKLSAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gaWRl
bnRpZmllci0+VmVuZG9ySWQgIT0gMHgxMDAyOwotICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkg
Y2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29sb3IKLSAgICAvLyB3
cml0ZSBtYXNrIGNhbiBjYXVzZSBsYXRlciBkcmF3cyB0byBoYXZlIGluY29ycmVjdCByZXN1bHRz
LiBJbnN0ZWFkLAotICAgIC8vIHNldCBhIG5vbnplcm8gY29sb3Igd3JpdGUgbWFzayBidXQgbW9k
aWZ5IHRoZSBibGVuZCBzdGF0ZSBzbyB0aGF0IG5vCi0gICAgLy8gZHJhd2luZyBpcyBkb25lLgot
ICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFp
bD9pZD0xNjkKLQotICAgIGlmIChtQ3VsbFN0YXRlRGlydHkgfHwgbUZyb250RmFjZURpcnR5KQot
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5jdWxsRmFjZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIGVzMmR4OjpDb252ZXJ0
Q3VsbE1vZGUobVN0YXRlLmN1bGxNb2RlLCBtU3RhdGUuZnJvbnRGYWNlKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1DdWxsU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGF0ZURp
cnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIEQzRFpCX1RS
VUUpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIGVz
MmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuZGVwdGhGdW5jKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGVw
dGhTdGF0ZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF6ZXJvQ29sb3JNYXNrQWxs
b3dlZCAmJiAobU1hc2tTdGF0ZURpcnR5IHx8IG1CbGVuZFN0YXRlRGlydHkpKQotICAgIHsKLSAg
ICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCi0gICAgewotICAgICAg
ICBpZiAobVN0YXRlLmJsZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAgICAgICAg
aWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3RhdGUu
c291cmNlQmxlbmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICYmCi0gICAgICAg
ICAgICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBHTF9DT05TVEFOVF9BTFBIQSAmJiBtU3Rh
dGUuZGVzdEJsZW5kUkdCICE9IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19CTEVO
REZBQ1RPUiwgZXMyZHg6OkNvbnZlcnRDb2xvcihtU3RhdGUuYmxlbmRDb2xvcikpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JB
KHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3Jt
PDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1T
dGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5i
bGVuZENvbG9yLmFscGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwgZXMyZHg6OkNvbnZlcnRCbGVuZEZ1bmMo
bVN0YXRlLnNvdXJjZUJsZW5kUkdCKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19ERVNUQkxFTkQsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0
QmxlbmRSR0IpKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1AsIGVzMmR4OjpDb252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOwot
Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VC
bGVuZEFscGhhIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0
YXRlLmRlc3RCbGVuZEFscGhhIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0
aW9uUkdCICE9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0VQQVJBVEVBTFBIQUJM
RU5ERU5BQkxFLCBUUlVFKTsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NSQ0JMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5z
b3VyY2VCbGVuZEFscGhhKSk7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfREVTVEJMRU5EQUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5k
ZXN0QmxlbmRBbHBoYSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0JMRU5ET1BBTFBIQSwgZXMyZHg6OkNvbnZlcnRCbGVuZE9wKG1TdGF0ZS5ibGVuZEVx
dWF0aW9uQWxwaGEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBB
UkFURUFMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1CbGVuZFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxTdGF0
ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuc3Rl
bmNpbFRlc3QgJiYgZnJhbWVidWZmZXJPYmplY3QtPmhhc1N0ZW5jaWwoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwg
VFJVRSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURF
RFNURU5DSUxNT0RFLCBUUlVFKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVk
IGJ5IEQzRDkKLSAgICAgICAgICAgIGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1df
U1RFTkNJTFJFRiA9IEQzRFJTX1NURU5DSUxSRUY7Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5E
RVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7Ci0g
ICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklU
RU1BU0sgPSBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLOwotICAgICAgICAgICAgaWYgKG1TdGF0ZS5z
dGVuY2lsV3JpdGVtYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fCAKLSAgICAg
ICAgICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwg
Ci0gICAgICAgICAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFj
a01hc2spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9u
dC9iYWNrIHN0ZW5jaWwgd3JpdGVtYXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBt
YXNrIHZhbHVlcyBhcmUgaW52YWxpZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAo
MSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7Ci0KLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNE
UlNfU1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUu
c3RlbmNpbFdyaXRlbWFzayk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZSht
U3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NX
X1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsRnVuYykpOwotCi0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJT
X1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwg
KEdMaW50KW1heFN0ZW5jaWwpID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xf
Q0NXID8gRDNEUlNfU1RFTkNJTE1BU0sgOiBEM0RSU19DQ1dfU1RFTkNJTE1BU0ssIG1TdGF0ZS5z
dGVuY2lsTWFzayk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTEZBSUwgOiBEM0RSU19DQ1dfU1RF
TkNJTEZBSUwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29u
dmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEZhaWwpKTsKLSAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJ
TFpGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0Rl
cHRoRmFpbCkpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMUEFTUyA6IEQzRFJTX0NDV19TVEVOQ0lM
UEFTUywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0
U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcykpOwotCi0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNf
U1RFTkNJTFdSSVRFTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMV1JJVEVNQVNLLCBtU3RhdGUuc3Rl
bmNpbEJhY2tXcml0ZW1hc2spOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NX
X1NURU5DSUxGVU5DLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6
OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMpKTsKLQotICAgICAgICAg
ICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQz
RFJTX1NURU5DSUxSRUYgOiBEM0RSU19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsQmFj
a1JlZiA8IChHTGludCltYXhTdGVuY2lsKSA/IG1TdGF0ZS5zdGVuY2lsQmFja1JlZiA6IG1heFN0
ZW5jaWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250
RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxNQVNL
LCBtU3RhdGUuc3RlbmNpbEJhY2tNYXNrKTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGQUlMIDog
RDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
VyA/IEQzRFJTX1NURU5DSUxaRkFJTCA6IEQzRFJTX0NDV19TVEVOQ0lMWkZBSUwsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3Rh
dGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsKSk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFBBU1Mg
OiBEM0RSU19DQ1dfU1RFTkNJTFBBU1MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlczJkeDo6Q29udmVydFN0ZW5jaWxPcChtU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQ
YXNzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICAgICAgbUZy
b250RmFjZURpcnR5ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1NYXNrU3RhdGVEaXJ0eSkK
LSAgICB7Ci0gICAgICAgIGludCBjb2xvck1hc2sgPSBlczJkeDo6Q29udmVydENvbG9yTWFzayht
U3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JNYXNrR3JlZW4sIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmNvbG9yTWFza0JsdWUs
IG1TdGF0ZS5jb2xvck1hc2tBbHBoYSk7Ci0gICAgICAgIGlmIChjb2xvck1hc2sgPT0gMCAmJiAh
emVyb0NvbG9yTWFza0FsbG93ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEVuYWJsZSBn
cmVlbiBjaGFubmVsLCBidXQgc2V0IGJsZW5kaW5nIHNvIG5vdGhpbmcgd2lsbCBiZSBkcmF3bi4K
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFC
TEUsIEQzRENPTE9SV1JJVEVFTkFCTEVfR1JFRU4pOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgVFJVRSk7Ci0KLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgRDNE
QkxFTkRfT05FKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JM
RU5ET1AsIEQzREJMRU5ET1BfQUREKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVF
TkFCTEUsIGNvbG9yTWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBtU3RhdGUuZGVwdGhNYXNrID8gVFJVRSA6IEZBTFNF
KTsKLQotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
bVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5wb2x5
Z29uT2Zmc2V0RmlsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
ZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKLSAgICAg
ICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
RGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TTE9QRVNDQUxFREVQVEhCSUFTLCAqKChEV09S
RCopJm1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
ZGVwdGhCaWFzID0gbGRleHAobVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cywgLShpbnQpKGRlcHRo
YnVmZmVyLT5nZXREZXB0aFNpemUoKSkpOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQqKSZkZXB0aEJpYXMpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsIDApOwot
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVQVEhCSUFTLCAwKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChtU2FtcGxlU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmICht
U3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBGSVhN
RSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7Ci0gICAgICAg
IH0KLQotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFO
VElBTElBUywgVFJVRSk7Ci0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsKLSAgICAgICAgICAgIGlm
IChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSAwKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IDAuNWY7Ci0KLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTYW1wbGVzKCk7ICsraSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA+
PSB0aHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRocmVzaG9sZCArPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAx
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52
ZXJ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFzazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVM
VElTQU1QTEVNQVNLLCBtYXNrKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFT
SywgMHhGRkZGRkZGRik7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGl0aGVyU3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRp
dGhlciA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxz
ZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihHTGludCBm
aXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERy
YXcpCi17Ci0gICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRU
UklCU107Ci0KLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVy
dGV4RGF0YShmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7Ci0gICAgaWYgKGVy
ciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURldmlj
ZSwgYXR0cmlidXRlcywgZ2V0Q3VycmVudFByb2dyYW0oKSwgaW5zdGFuY2VzLCByZXBlYXREcmF3
KTsKLX0KLQotLy8gQXBwbGllcyB0aGUgaW5kaWNlcyBhbmQgZWxlbWVudCBhcnJheSBiaW5kaW5n
cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLUdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVm
ZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdM
ZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCi17Ci0gICAgR0xlbnVt
IGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBt
U3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBpbmRpY2VzLCBpbmRleEluZm8pOwotCi0g
ICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleEluZm8t
PnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRJbmRpY2VzKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwotICAgICAgICAgICAgbUFw
cGxpZWRJQlNlcmlhbCA9IGluZGV4SW5mby0+c2VyaWFsOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGVycjsKLX0KLQotLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNv
bnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlTaGFk
ZXJzKCkKLXsKLSAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0o
KTsKLSAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOwotCi0gICAgaWYgKHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9
IG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRFZlcnRleFNo
YWRlcjkgKnZlcnRleFNoYWRlciA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleFNoYWRlcigpOwot
ICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0UGl4ZWxTaGFkZXIoKTsKLQotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihw
aXhlbFNoYWRlcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgICAg
IG1BcHBsaWVkUHJvZ3JhbVNlcmlhbCA9IHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpOwotICAg
IH0KLQotICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKLX0KLQotLy8gQXBwbGll
cyB0aGUgdGV4dHVyZXMgYW5kIHNhbXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQotdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKCkKLXsKLSAgICBhcHBseVRleHR1cmVzKFNB
TVBMRVJfUElYRUwpOwotCi0gICAgaWYgKG1TdXBwb3J0c1ZlcnRleFRleHR1cmUpCi0gICAgewot
ICAgICAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfVkVSVEVYKTsKLSAgICB9Ci19Ci0KLS8vIEZv
ciBlYWNoIERpcmVjdDNEIDkgc2FtcGxlciBvZiBlaXRoZXIgdGhlIHBpeGVsIG9yIHZlcnRleCBz
dGFnZSwKLS8vIGxvb2tzIHVwIHRoZSBjb3JyZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdl
IHVuaXQgYW5kIHRleHR1cmUgdHlwZSwKLS8vIGFuZCBzZXRzIHRoZSB0ZXh0dXJlIGFuZCBpdHMg
YWRkcmVzc2luZy9maWx0ZXJpbmcgc3RhdGUgKG9yIE5VTEwgd2hlbiBpbmFjdGl2ZSkuCi12b2lk
IENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKLXsKLSAgICBQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0oKTsKLSAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0g
ICAgaW50IHNhbXBsZXJDb3VudCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgOiBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyAgIC8v
IFJhbmdlIG9mIERpcmVjdDNEIDkgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCi0gICAg
dW5zaWduZWQgaW50ICphcHBsaWVkVGV4dHVyZVNlcmlhbCA9ICh0eXBlID09IFNBTVBMRVJfUElY
RUwpID8gbUFwcGxpZWRUZXh0dXJlU2VyaWFsUFMgOiBtQXBwbGllZFRleHR1cmVTZXJpYWxWUzsK
LSAgICBpbnQgZDNkU2FtcGxlck9mZnNldCA9ICh0eXBlID09IFNBTVBMRVJfUElYRUwpID8gMCA6
IEQzRFZFUlRFWFRFWFRVUkVTQU1QTEVSMDsKLSAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKLQotICAgIGZvciAoaW50IHNhbXBs
ZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4Kysp
Ci0gICAgewotICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1w
bGVyTWFwcGluZyh0eXBlLCBzYW1wbGVySW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdl
IHVuaXQgaW5kZXgKLSAgICAgICAgaW50IGQzZFNhbXBsZXIgPSBzYW1wbGVySW5kZXggKyBkM2RT
YW1wbGVyT2Zmc2V0OwotCi0gICAgICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKLSAgICAgICAg
ewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4KTsKLQotICAgICAgICAgICAg
VGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJl
VHlwZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGV4U2VyaWFsID0gdGV4dHVyZS0+Z2V0
VGV4dHVyZVNlcmlhbCgpOwotCi0gICAgICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxb
c2FtcGxlckluZGV4XSAhPSB0ZXhTZXJpYWwgfHwgdGV4dHVyZS0+aGFzRGlydHlQYXJhbWV0ZXJz
KCkgfHwgdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmQzZFRleHR1cmUgPSB0ZXh0dXJlLT5nZXRU
ZXh0dXJlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZDNkVGV4dHVyZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkVGV4dHVyZVNlcmlhbFtzYW1w
bGVySW5kZXhdICE9IHRleFNlcmlhbCB8fCB0ZXh0dXJlLT5oYXNEaXJ0eVBhcmFtZXRlcnMoKSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdy
YXBTID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB3cmFwVCA9IHRleHR1cmUtPmdldFdyYXBUKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gbWluRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gbWFnRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWFnRmlsdGVyKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1w
bGVyLCBEM0RTQU1QX0FERFJFU1NVLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBTKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9BRERSRVNTViwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwVCkp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNk
U2FtcGxlciwgRDNEU0FNUF9NQUdGSUxURVIsIGVzMmR4OjpDb252ZXJ0TWFnRmlsdGVyKG1hZ0Zp
bHRlcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgRDNEVEVYVFVSRUZJTFRFUlRZUEUgZDNk
TWluRmlsdGVyLCBkM2RNaXBGaWx0ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6
Q29udmVydE1pbkZpbHRlcihtaW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBGaWx0ZXIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0ZXIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQ
RklMVEVSLCBkM2RNaXBGaWx0ZXIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGFwcGxpZWRUZXh0dXJlU2VyaWFsW3NhbXBsZXJJbmRleF0gIT0gdGV4
U2VyaWFsIHx8IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCkpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxl
ciwgZDNkVGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgbURldmljZS0+U2V0VGV4dHVyZShkM2RTYW1wbGVyLCBnZXRJbmNvbXBsZXRlVGV4dHVy
ZSh0ZXh0dXJlVHlwZSktPmdldFRleHR1cmUoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IHRleFNlcmlh
bDsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldERpcnR5KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXBw
bGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSAhPSAwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmUoZDNkU2FtcGxlciwgTlVMTCk7Ci0gICAg
ICAgICAgICAgICAgYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IDA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBzYW1wbGVySW5kZXgg
PSBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJDb3VudDsgc2FtcGxlckluZGV4
KyspCi0gICAgewotICAgICAgICBpZiAoYXBwbGllZFRleHR1cmVTZXJpYWxbc2FtcGxlckluZGV4
XSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlKHNhbXBs
ZXJJbmRleCArIGQzZFNhbXBsZXJPZmZzZXQsIE5VTEwpOwotICAgICAgICAgICAgYXBwbGllZFRl
eHR1cmVTZXJpYWxbc2FtcGxlckluZGV4XSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQotewotICAgIEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKGZy
YW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
Tik7Ci0gICAgfQotCi0gICAgaWYgKGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYg
ZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBHTHNpemVpIG91dHB1dFBp
dGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIG1TdGF0ZS5wYWNrQWxpZ25t
ZW50KTsKLSAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkgY2hlY2sKLSAgICBpZiAoYnVmU2l6ZSkK
LSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZFNpemUgPSBvdXRwdXRQaXRjaCAqIGhlaWdodDsK
LSAgICAgICAgaWYgKHJlcXVpcmVkU2l6ZSA+ICpidWZTaXplKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyLT5n
ZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAg
IHJldHVybjsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdCwgcmV0dXJuIHNpbGVudGx5Ci0gICAg
fQotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNj
KCZkZXNjKTsKLQotICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBM
RV9OT05FKQotICAgIHsKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1
aXJlcyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5k
ZXIgdGFyZ2V0Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQ7
Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5c3RlbVN1cmZhY2UgPSBOVUxMOwotICAgIGJvb2wg
ZGlyZWN0VG9QaXhlbHMgPSAhZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpICYmIGdldFBhY2tBbGln
bm1lbnQoKSA8PSA0ICYmIG1EaXNwbGF5LT5pc0QzZDlFeERldmljZSgpICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5X
aWR0aCAmJiBVSU5UKGhlaWdodCkgPT0gZGVzYy5IZWlnaHQgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9C
R1JBX0VYVCAmJiB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgaWYgKGRpcmVjdFRvUGl4
ZWxzKQotICAgIHsKLSAgICAgICAgLy8gVXNlIHRoZSBwaXhlbHMgcHRyIGFzIGEgc2hhcmVkIGhh
bmRsZSB0byB3cml0ZSBkaXJlY3RseSBpbnRvIGNsaWVudCdzIG1lbW9yeQotICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVz
Yy5IZWlnaHQsIGRlc2MuRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCAm
cGl4ZWxzKTsKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAvLyBUcnkgYWdhaW4gd2l0aG91dCB0aGUgc2hhcmVkIGhhbmRsZQotICAgICAgICAgICAg
ZGlyZWN0VG9QaXhlbHMgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZGly
ZWN0VG9QaXhlbHMpCi0gICAgewotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVPZmZz
Y3JlZW5QbGFpblN1cmZhY2UoZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
UE9PTF9TWVNURU1NRU0sICZzeXN0ZW1TdXJmYWNlLCBOVUxMKTsKLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAg
ICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gbURldmlj
ZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShyZW5kZXJUYXJnZXQsIHN5c3RlbVN1cmZhY2UpOwotICAg
IHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIHJlbmRlclRhcmdldCA9IE5VTEw7Ci0KLSAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxl
YXNlKCk7Ci0KLSAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgRDNEIHdpbGwgc29tZXRpbWVz
IHByb2R1Y2UgbW9yZSBlcnJvcgotICAgICAgICAvLyBjb2RlcyB0aGFuIHRob3NlIGRvY3VtZW50
ZWQuCi0gICAgICAgIGlmIChjaGVja0RldmljZUxvc3QocmVzdWx0KSkKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICB9Ci0KLSAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCi0gICAgewotICAgICAgICBzeXN0
ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSRUNU
IHJlY3Q7Ci0gICAgcmVjdC5sZWZ0ID0gY2xhbXAoeCwgMEwsIHN0YXRpY19jYXN0PExPTkc+KGRl
c2MuV2lkdGgpKTsKLSAgICByZWN0LnRvcCA9IGNsYW1wKHksIDBMLCBzdGF0aWNfY2FzdDxMT05H
PihkZXNjLkhlaWdodCkpOwotICAgIHJlY3QucmlnaHQgPSBjbGFtcCh4ICsgd2lkdGgsIDBMLCBz
dGF0aWNfY2FzdDxMT05HPihkZXNjLldpZHRoKSk7Ci0gICAgcmVjdC5ib3R0b20gPSBjbGFtcCh5
ICsgaGVpZ2h0LCAwTCwgc3RhdGljX2Nhc3Q8TE9ORz4oZGVzYy5IZWlnaHQpKTsKLQotICAgIEQz
RExPQ0tFRF9SRUNUIGxvY2s7Ci0gICAgcmVzdWx0ID0gc3lzdGVtU3VyZmFjZS0+TG9ja1JlY3Qo
JmxvY2ssICZyZWN0LCBEM0RMT0NLX1JFQURPTkxZKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICB7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2Ut
PlJlbGVhc2UoKTsKLQotICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8g
Z2VuZXJhdGUKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNo
YXIqKXBpeGVsczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0
KilwaXhlbHM7Ci0KLSAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7Ci0gICAgaW50IGlucHV0UGl0
Y2g7Ci0gICAgaWYgKGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSkKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3Qu
Ym90dG9tIC0gcmVjdC50b3AgLSAxKTsKLSAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNo
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2UgPSAodW5zaWduZWQgY2hh
ciopbG9jay5wQml0czsKLSAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7Ci0gICAgfQot
Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCi0g
ICAgewotICAgICAgICBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAg
ICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgIHR5cGUgPT0gR0xf
VU5TSUdORURfQllURSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBF
WFRfcmVhZF9mb3JtYXRfYmdyYSwgZ2l2ZW4KLSAgICAgICAgICAgIC8vIGFuIFJHQkEgc291cmNl
IGJ1ZmZlci4gIE5vdGUgdGhhdCBidWZmZXJzIHdpdGggbm8KLSAgICAgICAgICAgIC8vIGFscGhh
IGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KLSAgICAgICAgICAgIG1lbWNweShkZXN0
ICsgaiAqIG91dHB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIHNvdXJjZSArIGogKiBpbnB1
dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIDQp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZmxvYXQgcjsKLSAgICAgICAgICAgIGZsb2F0IGc7Ci0gICAgICAgICAgICBmbG9hdCBi
OwotICAgICAgICAgICAgZmxvYXQgYTsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1h
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0g
Kih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKHJn
YiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAo
cmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9
IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBh
cmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gp
OwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4ODAwMCkgPyAxLjBmIDogMC4w
ZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgw
MDFGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwM0UwKSAqICgxLjBmIC8g
MHgwM0UwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHg3QzAwKSAqICgxLjBm
IC8gMHg3QzAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNv
dXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEg
PSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAg
ICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwot
ICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgw
MDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICog
KDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVk
IGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAw
MEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoeHJn
YiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAg
ICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBq
ICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAw
MDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFy
Z2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7Ci0gICAgICAgICAgICAgICAg
ICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYgLyAweDAwMEZGQzAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAw
MDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwg
cmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAgICAgICAgICByID0g
KigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0
UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAqKChmbG9hdCopKHNvdXJjZSAr
IDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAgICAgICAgICAgICBhID0g
KigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
RDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFu
IHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWJncls0XTsK
LQotICAgICAgICAgICAgICAgICAgICBEM0RYRmxvYXQxNlRvMzJBcnJheShhYmdyLCAoRDNEWEZM
T0FUMTYqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSwgNCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYSA9IGFiZ3JbM107Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBhYmdyWzJd
OwotICAgICAgICAgICAgICAgICAgICBnID0gYWJnclsxXTsKLSAgICAgICAgICAgICAgICAgICAg
ciA9IGFiZ3JbMF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsg
ICAvLyBGSVhNRQotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBq
ICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1
bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3Rb
NCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsg
MC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gg
KyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2ln
bmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICog
aSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVm
KTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAq
IGEgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2Zl
ciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRo
aXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAx
NSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQg
ICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8
ICAgICAgICAzcmQgICAgICAgICB8ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50
ICAgfAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZp
cnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAg
ICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsg
MC41ZikgPDwgMTIpfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
MTUgKiByICsgMC41ZikgPDwgOCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMTUgKiBnICsgMC41ZikgPDwgNCkgfAotICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBiICsgMC41ZikgPDwgMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVf
NV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVz
a3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlv
bgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAg
IDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAg
ICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8g
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBj
YXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwg
YW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQ
aXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICgodW5zaWduZWQgc2hvcnQpKCAgICAgYSArIDAuNWYpIDw8IDE1KSB8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfAotICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwg
NSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsg
MC41ZikgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfRk9STUFUCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV82XzU6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFCi0gICAgICAgICAgICAg
ICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiAr
IDAuNWYpIDw8IDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQp
KDYzICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDExKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN5
c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCi17Ci0gICAgRnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAg
ICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5l
c3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgRFdP
UkQgZmxhZ3MgPSAwOwotCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAg
IHsKLSAgICAgICAgbWFzayAmPSB+R0xfQ09MT1JfQlVGRkVSX0JJVDsKLQotICAgICAgICBpZiAo
ZnJhbWVidWZmZXJPYmplY3QtPmdldENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1RBUkdFVDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAg
ICAgIG1hc2sgJj0gfkdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIGlmIChtU3RhdGUuZGVw
dGhNYXNrICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9O
T05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgR0x1aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLQot
ICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgbWFz
ayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICAgICAgaWYg
KCFkZXB0aFN0ZW5jaWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJEZXB0
aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzYzsKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7
Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgdW5z
aWduZWQgaW50IHN0ZW5jaWxTaXplID0gZHgyZXM6OkdldFN0ZW5jaWxTaXplKGRlc2MuRm9ybWF0
KTsKLSAgICAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0g
MTsKLQotICAgICAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtYXNrICE9IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgaWYgKCFh
cHBseVJlbmRlclRhcmdldCh0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNz
b3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0Ci0gICAgewotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKHVub3JtPDg+KG1T
dGF0ZS5jb2xvckNsZWFyVmFsdWUuYWxwaGEpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5vcm08OD4obVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5ncmVlbiksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4Piht
U3RhdGUuY29sb3JDbGVhclZhbHVlLmJsdWUpKTsKLSAgICBmbG9hdCBkZXB0aCA9IGNsYW1wMDEo
bVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBtU3RhdGUuc3RlbmNp
bENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGR4
MmVzOjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdldERlc2MuRm9ybWF0KSA9PSAwKSB8fCBtU3Rh
dGUuY29sb3JNYXNrQWxwaGE7Ci0KLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xl
YXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9TVEVOQ0lMKSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAmIHN0ZW5jaWxVbm1h
c2tlZCkgIT0gc3RlbmNpbFVubWFza2VkOwotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9y
Q2xlYXIgPSAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQpICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICEobVN0YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JN
YXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3Rh
dGUuY29sb3JNYXNrQmx1ZSAmJiBhbHBoYVVubWFza2VkKTsKLQotICAgIGlmIChuZWVkTWFza2Vk
Q29sb3JDbGVhciB8fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyKQotICAgIHsKLSAgICAgICAgLy8g
U3RhdGUgd2hpY2ggaXMgYWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRo
ZSBjbGVhciBjYWxsIGlzIHNhdmVkLgotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVk
IGluIG9ubHkgc29tZSBwYXRocyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhh
dAotICAgICAgICAvLyAgdGhhdCBwYXRoIGlzIHRha2VuLgotICAgICAgICBIUkVTVUxUIGhyOwot
ICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBociA9IG1EZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwotICAgICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
aHIgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0g
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklM
TF9TT0xJRCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBI
QVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0
RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7Ci0gICAgICAgICAgICBtRGV2aWNl
LT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotICAg
ICAgICAgICAgbURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1As
IEQzRFRPUF9TRUxFQ1RBUkcxKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFn
ZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0FMUEhBT1AsIEQzRFRPUF9T
RUxFQ1RBUkcxKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAs
IEQzRFRTU19BTFBIQUFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAgICAgICAgbURldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZG
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFN0cmVhbVNvdXJjZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGhyID0gbURldmljZS0+RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFT
U0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpOwotCi0gICAgICAgIGlmIChtTWFz
a2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhyID0g
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+Q2FwdHVyZSgpOwotICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pGVU5DLCBEM0RDTVBfQUxXQVlTKTsKLSAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9ERSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfRklMTE1PREUsIEQzREZJTExfU09MSUQpOwotICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsK
LSAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwg
RkFMU0UpOwotICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVF
TkFCTEUsIDApOwotCi0gICAgICAgIGlmIChmbGFncyAmIEQzRENMRUFSX1RBUkdFVCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklU
RUVOQUJMRSwgZXMyZHg6OkNvbnZlcnRDb2xvck1hc2sobVN0YXRlLmNvbG9yTWFza1JlZCwgbVN0
YXRlLmNvbG9yTWFza0dyZWVuLCBtU3RhdGUuY29sb3JNYXNrQmx1ZSwgbVN0YXRlLmNvbG9yTWFz
a0FscGhhKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChmbGFncyAm
IEQzRENMRUFSX1NURU5DSUwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKLSAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxGVU5DLCBEM0RD
TVBfQUxXQVlTKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NU
RU5DSUxSRUYsIHN0ZW5jaWwpOwotICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2spOwotICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEZBSUwsIEQzRFNURU5D
SUxPUF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJT
X1NURU5DSUxaRkFJTCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgbURldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxPUF9SRVBMQUNF
KTsKLSAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGV2
aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hh
ZGVyKE5VTEwpOwotICAgICAgICBtRGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7Ci0gICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NFUEFSQVRFQUxQSEFCTEVOREVOQUJM
RSwgVFJVRSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRT
U19DT0xPUk9QLCBEM0RUT1BfU0VMRUNUQVJHMSk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFRleHR1
cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RGQUNUT1IpOwotICAgICAg
ICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQUxQSEFPUCwgRDNEVE9Q
X1NFTEVDVEFSRzEpOwotICAgICAgICBtRGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBE
M0RUU1NfQUxQSEFBUkcxLCBEM0RUQV9URkFDVE9SKTsKLSAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfVEVYVFVSRUZBQ1RPUiwgY29sb3IpOwotICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIDB4RkZGRkZGRkYpOwotCi0gICAg
ICAgIGZvcihpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZsb2F0IHF1YWRbNF1bNF07ICAgLy8gQSBxdWFkcmlsYXRlcmFsIGNv
dmVyaW5nIHRoZSB0YXJnZXQsIGFsaWduZWQgdG8gbWF0Y2ggdGhlIGVkZ2VzCi0gICAgICAgIHF1
YWRbMF1bMF0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFswXVsxXSA9IG1SZW5kZXJUYXJnZXREZXNj
LkhlaWdodCAtIDAuNWY7Ci0gICAgICAgIHF1YWRbMF1bMl0gPSAwLjBmOwotICAgICAgICBxdWFk
WzBdWzNdID0gMS4wZjsKLQotICAgICAgICBxdWFkWzFdWzBdID0gbVJlbmRlclRhcmdldERlc2Mu
V2lkdGggLSAwLjVmOwotICAgICAgICBxdWFkWzFdWzFdID0gbVJlbmRlclRhcmdldERlc2MuSGVp
Z2h0IC0gMC41ZjsKLSAgICAgICAgcXVhZFsxXVsyXSA9IDAuMGY7Ci0gICAgICAgIHF1YWRbMV1b
M10gPSAxLjBmOwotCi0gICAgICAgIHF1YWRbMl1bMF0gPSAtMC41ZjsKLSAgICAgICAgcXVhZFsy
XVsxXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzJdWzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFsy
XVszXSA9IDEuMGY7Ci0KLSAgICAgICAgcXVhZFszXVswXSA9IG1SZW5kZXJUYXJnZXREZXNjLldp
ZHRoIC0gMC41ZjsKLSAgICAgICAgcXVhZFszXVsxXSA9IC0wLjVmOwotICAgICAgICBxdWFkWzNd
WzJdID0gMC4wZjsKLSAgICAgICAgcXVhZFszXVszXSA9IDEuMGY7Ci0KLSAgICAgICAgbURpc3Bs
YXktPnN0YXJ0U2NlbmUoKTsKLSAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBU
X1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwotCi0gICAgICAgIGlm
IChmbGFncyAmIEQzRENMRUFSX1pCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1pCVUZGRVIsIGNvbG9yLCBkZXB0
aCwgc3RlbmNpbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobU1hc2tlZENsZWFyU2F2ZWRT
dGF0ZSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0
YXRlLT5BcHBseSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGZsYWdzKQotICAg
IHsKLSAgICAgICAgbURldmljZS0+Q2xlYXIoMCwgTlVMTCwgZmxhZ3MsIGNvbG9yLCBkZXB0aCwg
c3RlbmNpbCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1v
ZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAg
ICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgRDNEUFJJTUlUSVZFVFlQRSBw
cmltaXRpdmVUeXBlOwotICAgIGludCBwcmltaXRpdmVDb3VudDsKLQotICAgIGlmKCFlczJkeDo6
Q29udmVydFByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQsICZwcmltaXRpdmVUeXBlLCAmcHJpbWl0
aXZlQ291bnQpKQotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAg
IGlmIChwcmltaXRpdmVDb3VudCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoZmFsc2UpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGFwcGx5U3RhdGUobW9kZSk7Ci0KLSAgICBHTHNpemVpIHJlcGVh
dERyYXcgPSAxOwotICAgIEdMZW51bSBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihmaXJzdCwgY291
bnQsIGluc3RhbmNlcywgJnJlcGVhdERyYXcpOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBhcHBseVNo
YWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7Ci0KLSAgICBpZiAoIWdldEN1cnJlbnRQcm9n
cmFtKCktPmdldFByb2dyYW1CaW5hcnkoKS0+dmFsaWRhdGVTYW1wbGVycyhOVUxMKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0g
ICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQotICAgIHsKLSAgICAgICAgbURpc3BsYXktPnN0
YXJ0U2NlbmUoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkK
LSAgICAgICAgewotICAgICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCBHTF9OT05FLCBOVUxM
LCAwKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbnN0YW5jZXMgPiAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBTdGF0aWNJbmRleEJ1ZmZlciAqY291bnRpbmdJQiA9IG1JbmRleERh
dGFNYW5hZ2VyLT5nZXRDb3VudGluZ0luZGljZXMoY291bnQpOwotICAgICAgICAgICAgaWYgKGNv
dW50aW5nSUIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1BcHBsaWVkSUJT
ZXJpYWwgIT0gY291bnRpbmdJQi0+Z2V0U2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGNvdW50aW5nSUItPmdldEJ1ZmZl
cigpKTsKLSAgICAgICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGNvdW50aW5nSUIt
PmdldFNlcmlhbCgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgcmVwZWF0RHJhdzsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlw
ZSwgMCwgMCwgY291bnQsIDAsIHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgY291bnRpbmcgaW5kZXggYnVmZmVyIGZvciBn
bERyYXdBcnJheXNJbnN0YW5jZWQuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ICAvLyBSZWd1bGFyIGNhc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+RHJhd1By
aW1pdGl2ZShwcmltaXRpdmVUeXBlLCAwLCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIGluc3Rh
bmNlcykKLXsKLSAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFp
bmRpY2VzICYmICFtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBEM0RQUklNSVRJ
VkVUWVBFIHByaW1pdGl2ZVR5cGU7Ci0gICAgaW50IHByaW1pdGl2ZUNvdW50OwotCi0gICAgaWYo
IWVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCwgJnByaW1pdGl2ZVR5cGUs
ICZwcmltaXRpdmVDb3VudCkpCi0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotCi0gICAgaWYgKHByaW1pdGl2ZUNvdW50IDw9IDApCi0gICAgewotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChmYWxzZSkpCi0gICAgewotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwbHlTdGF0ZShtb2RlKTsKLQotICAgIFRyYW5z
bGF0ZWRJbmRleERhdGEgaW5kZXhJbmZvOwotICAgIEdMZW51bSBlcnIgPSBhcHBseUluZGV4QnVm
ZmVyKGluZGljZXMsIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsKLSAgICBpZiAoZXJy
ICE9IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKGVycik7Ci0gICAg
fQotCi0gICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4
SW5mby5taW5JbmRleCArIDE7Ci0gICAgR0xzaXplaSByZXBlYXREcmF3ID0gMTsKLSAgICBlcnIg
PSBhcHBseVZlcnRleEJ1ZmZlcihpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0
YW5jZXMsICZyZXBlYXREcmF3KTsKLSAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKGVycik7Ci0gICAgfQotCi0gICAgYXBwbHlTaGFkZXJzKCk7
Ci0gICAgYXBwbHlUZXh0dXJlcygpOwotCi0gICAgaWYgKCFnZXRDdXJyZW50UHJvZ3JhbSgpLT5n
ZXRQcm9ncmFtQmluYXJ5KCktPnZhbGlkYXRlU2FtcGxlcnMoZmFsc2UpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWN1bGxTa2lwc0RyYXcobW9kZSkpCi0gICAgewotICAgICAgICBtRGlzcGxheS0+c3RhcnRTY2Vu
ZSgpOwotCi0gICAgICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbmRleEluZm8ubWlu
SW5kZXgpOyAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXREcmF3OyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbURldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlw
ZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENv
dW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgcHJpbWl0aXZlQ291bnQpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBJbXBsZW1lbnRzIGdsRmx1c2ggd2hlbiBibG9j
ayBpcyBmYWxzZSwgZ2xGaW5pc2ggd2hlbiBibG9jayBpcyB0cnVlCi12b2lkIENvbnRleHQ6OnN5
bmMoYm9vbCBibG9jaykKLXsKLSAgICBtRGlzcGxheS0+c3luYyhibG9jayk7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCkKLXsKLSAgICAvLyBHZXQgdGhlIHJhdyBpbmRp
Y2VzIGZvciBhbiBpbmRleGVkIGRyYXcKLSAgICBpZiAodHlwZSAhPSBHTF9OT05FICYmIG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCkpCi0gICAgewotICAgICAgICBCdWZmZXIgKmluZGV4
QnVmZmVyID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsKLSAgICAgICAgaW50cHRy
X3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7Ci0gICAgICAg
IGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kZXhCdWZmZXItPmRhdGEo
KSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAgVUlOVCBzdGFydEluZGV4ID0gMDsKLSAgICBib29s
IHN1Y2NlZWRlZCA9IGZhbHNlOwotCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCi0g
ICAgewotICAgICAgICBjb25zdCBpbnQgc3BhY2VOZWVkZWQgPSAoY291bnQgKyAxKSAqIHNpemVv
Zih1bnNpZ25lZCBpbnQpOwotCi0gICAgICAgIGlmICghbUxpbmVMb29wSUIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZp
Y2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQzREZNVF9JTkRFWDMyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtTGluZUxvb3BJQikKLSAgICAgICAgewotICAgICAgICAgICAgbUxp
bmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKTsKLQot
ICAgICAgICAgICAgVUlOVCBvZmZzZXQgPSAwOwotICAgICAgICAgICAgdW5zaWduZWQgaW50ICpk
YXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5l
ZWRlZCwgJm9mZnNldCkpOwotICAgICAgICAgICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDQ7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9uLWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVz
aG9ydCo+KGluZGljZXMpW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGFbY291bnRdID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2Vz
KVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBz
dGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOwot
ICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHNwYWNlTmVlZGVk
ID0gKGNvdW50ICsgMSkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotCi0gICAgICAgIGlmICgh
bUxpbmVMb29wSUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1MaW5lTG9vcElCID0gbmV3IFN0
cmVhbWluZ0luZGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEQz
REZNVF9JTkRFWDE2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtTGluZUxvb3BJQikKLSAg
ICAgICAgewotICAgICAgICAgICAgbUxpbmVMb29wSUItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRl
ZCwgR0xfVU5TSUdORURfU0hPUlQpOwotCi0gICAgICAgICAgICBVSU5UIG9mZnNldCA9IDA7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqZGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNo
b3J0Kj4obUxpbmVMb29wSUItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOwotICAgICAgICAg
ICAgc3RhcnRJbmRleCA9IG9mZnNldCAvIDI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX05PTkU6ICAgLy8gTm9u
LWluZGV4ZWQgZHJhdwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFbaV0gPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGRhdGFbY291bnRdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihp
bmRpY2VzKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBk
YXRhW2NvdW50XSA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRpY2VzKVswXTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFbaV0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpW2ldOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFbY291bnRdID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZGF0YVtjb3VudF0gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihp
bmRpY2VzKVswXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIG1MaW5lTG9vcElCLT51bm1hcCgpOwotICAgICAgICAgICAgICAgIHN1Y2NlZWRlZCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKHN1
Y2NlZWRlZCkKLSAgICB7Ci0gICAgICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1MaW5lTG9v
cElCLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZS0+U2V0SW5k
aWNlcyhtTGluZUxvb3BJQi0+Z2V0QnVmZmVyKCkpOwotICAgICAgICAgICAgbUFwcGxpZWRJQlNl
cmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1E
ZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKEQzRFBUX0xJTkVTVFJJUCwgLW1pbkluZGV4LCBt
aW5JbmRleCwgY291bnQsIHN0YXJ0SW5kZXgsIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgbG9vcGluZyBpbmRleCBidWZmZXIg
Zm9yIEdMX0xJTkVfTE9PUC4iKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRW51bSgpCi17Ci0g
ICAgbUludmFsaWRFbnVtID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlk
VmFsdWUoKQotewotICAgIG1JbnZhbGlkVmFsdWUgPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6
OnJlY29yZEludmFsaWRPcGVyYXRpb24oKQotewotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gdHJ1
ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSgpCi17Ci0gICAgbU91dE9m
TWVtb3J5ID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZm
ZXJPcGVyYXRpb24oKQotewotICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSB0cnVl
OwotfQotCi0vLyBHZXQgb25lIG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5kIGNsZWFyIGl0cyBm
bGFnLCBpZiBhbnkuCi0vLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAxMy4K
LUdMZW51bSBDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1JbnZhbGlkRW51bSkKLSAg
ICB7Ci0gICAgICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9J
TlZBTElEX0VOVU07Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkVmFsdWUpCi0gICAgewotICAg
ICAgICBtSW52YWxpZFZhbHVlID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURf
VkFMVUU7Ci0gICAgfQotCi0gICAgaWYgKG1JbnZhbGlkT3BlcmF0aW9uKQotICAgIHsKLSAgICAg
ICAgbUludmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgaWYgKG1PdXRPZk1lbW9yeSkKLSAgICB7Ci0gICAg
ICAgIG1PdXRPZk1lbW9yeSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVN
T1JZOwotICAgIH0KLQotICAgIGlmIChtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKQotICAg
IHsKLSAgICAgICAgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLUdMZW51bSBDb250ZXh0OjpnZXRSZXNldFN0YXR1
cygpCi17Ci0gICAgaWYgKG1SZXNldFN0YXR1cyA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAg
ICAgIGJvb2wgbG9zdCA9IG1EaXNwbGF5LT50ZXN0RGV2aWNlTG9zdCgpOwotCi0gICAgICAgIGlm
IChsb3N0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtRGlzcGxheS0+bm90aWZ5RGV2aWNlTG9z
dCgpOyAgIC8vIFNldHMgbVJlc2V0U3RhdHVzCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGVu
dW0gc3RhdHVzID0gbVJlc2V0U3RhdHVzOwotCi0gICAgaWYgKG1SZXNldFN0YXR1cyAhPSBHTF9O
T19FUlJPUikKLSAgICB7Ci0gICAgICAgIGlmIChtRGlzcGxheS0+dGVzdERldmljZVJlc2V0dGFi
bGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlc2V0U3RhdHVzID0gR0xfTk9fRVJST1I7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9vbCBD
b250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIChtUmVz
ZXRTdHJhdGVneSA9PSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUKTsKLX0KLQotYm9vbCBD
b250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBw
b3J0c1NoYWRlck1vZGVsMzsKLX0KLQotaW50IENvbnRleHQ6OmdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9W
QVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7Ci19Ci0KLXVuc2ln
bmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25z
dAotewotICAgIHJldHVybiBtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlID8gTUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTX1ZURiA6IDA7Ci19Ci0KLXVuc2lnbmVkIGludCBDb250ZXh0OjpnZXRN
YXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTICsgZ2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCk7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFHTUVO
VF9VTklGT1JNX1ZFQ1RPUlNfU00zIDogTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTI7
Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXROZWFy
ZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25z
dAotewotICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXF1
ZXN0ZWQ7Ci0gICAgfQotCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25zdF9p
dGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKLSAgICBpZiAo
aXRyID09IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNB
TVBMRV8xNl9TQU1QTEVTOyArK2kpCi0gICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0g
JiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJv
b2wgQ29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25zdAotewotICAgIHJldHVybiBt
U3VwcG9ydHNFdmVudFF1ZXJpZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNPY2NsdXNp
b25RdWVyaWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmll
czsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdXBwb3J0c0RYVDFUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBw
b3J0c0RYVDNUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDNUZXh0
dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0RYVDVUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zs
b2F0MzJUZXh0dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJG
aWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVy
OwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXM7
Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBv
cnRzRmxvYXQxNkxpbmVhckZpbHRlcjsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0c0Zsb2F0
MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNGbG9h
dDE2UmVuZGVyYWJsZVRleHR1cmVzOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhSZW5kZXJidWZmZXJE
aW1lbnNpb247Ci19Ci0KLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwotfQotCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11
bVRleHR1cmVMZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlTGV2ZWw7Ci19
Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwotfQotCi1ib29sIENvbnRleHQ6
OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1T
dXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9y
dHNEZXB0aFRleHR1cmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRzRGVwdGhUZXh0
dXJlczsKLX0KLQotYm9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TdXBwb3J0czMyYml0SW5kaWNlczsKLX0KLQotYm9vbCBDb250ZXh0Ojpz
dXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNO
b25Qb3dlcjJUZXh0dXJlOwotfQotCi1ib29sIENvbnRleHQ6OnN1cHBvcnRzSW5zdGFuY2luZygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdXBwb3J0c0luc3RhbmNpbmc7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0gICAgLy8gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjI6Ci0gICAgLy8gSWYgYSBidWZmZXIgb2JqZWN0IGlz
IGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBiaW5kaW5ncyB0byB0aGF0IG9iamVjdCBp
biB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgLy8gKGkuZS4gaW4gdGhlIHRocmVhZCB0aGF0IGNh
bGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRvIHplcm8uCi0KLSAgICBpZiAobVN0YXRl
LmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmFycmF5
QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlC
dWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0
dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAg
ICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgp
ID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICAv
LyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjggcGFnZSA4NDoKLSAgICAvLyBJZiBhIHRl
eHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFzIGlmIGFsbCB0ZXh0dXJlIHVuaXRzIHdo
aWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2JqZWN0IGFyZQotICAgIC8vIHJlYm91bmQg
dG8gdGV4dHVyZSBvYmplY3QgemVybwotCi0gICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBU
RVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBs
ZXIgPSAwOyBzYW1wbGVyIDwgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyBz
YW1wbGVyKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlclRleHR1
cmVbdHlwZV1bc2FtcGxlcl0uaWQoKSA9PSB0ZXh0dXJlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMTI6Ci0gICAgLy8gSWYgYSB0ZXh0dXJlIG9iamVjdCBp
cyBkZWxldGVkIHdoaWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJv
dW5kIGZyYW1lYnVmZmVyLCB0aGVuIGl0IGlzCi0gICAgLy8gYXMgaWYgRnJhbWVidWZmZXJUZXh0
dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBvZiAwLCBmb3IgZWFjaCBhdHRh
Y2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKLSAgICAvLyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4g
dGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KLQotICAgIEZyYW1lYnVmZmVyICpyZWFk
RnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJh
d0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAocmVhZEZyYW1l
YnVmZmVyKQotICAgIHsKLSAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRl
eHR1cmUpOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVm
ZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+
ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNo
RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDQuNCBwYWdlIDEwNzoKLSAgICAvLyBJZiBhIGZyYW1lYnVmZmVyIHRoYXQg
aXMgY3VycmVudGx5IGJvdW5kIHRvIHRoZSB0YXJnZXQgRlJBTUVCVUZGRVIgaXMgZGVsZXRlZCwg
aXQgaXMgYXMgdGhvdWdoCi0gICAgLy8gQmluZEZyYW1lYnVmZmVyIGhhZCBiZWVuIGV4ZWN1dGVk
IHdpdGggdGhlIHRhcmdldCBvZiBGUkFNRUJVRkZFUiBhbmQgZnJhbWVidWZmZXIgb2YgemVyby4K
LQotICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQotICAgIHsK
LSAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0YXRl
LmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmREcmF3
RnJhbWVidWZmZXIoMCk7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1
ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDQuNCBwYWdlIDEwOToKLSAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1
cnJlbnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdo
IEJpbmRSZW5kZXJidWZmZXIKLSAgICAvLyBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJn
ZXQgUkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uCi0KLSAgICBpZiAobVN0YXRlLnJlbmRl
cmJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGJpbmRSZW5kZXJi
dWZmZXIoMCk7Ci0gICAgfQotCi0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40
IHBhZ2UgMTExOgotICAgIC8vIElmIGEgcmVuZGVyYnVmZmVyIG9iamVjdCBpcyBkZWxldGVkIHdo
aWxlIGl0cyBpbWFnZSBpcyBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVm
ZmVyLAotICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgaGFk
IGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAsIGZvciBlYWNoIGF0dGFjaG1l
bnQKLSAgICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdhcyBhdHRhY2hlZCBpbiB0aGUg
Y3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgotCi0gICAgRnJhbWVidWZmZXIgKnJlYWRGcmFt
ZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgIEZyYW1lYnVmZmVyICpkcmF3RnJh
bWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmIChyZWFkRnJhbWVidWZm
ZXIpCi0gICAgewotICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihy
ZW5kZXJidWZmZXIpOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJhd0Zy
YW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGRyYXdGcmFtZWJ1
ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgfQotfQotCi1UZXh0
dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0dXJlVHlwZSB0eXBlKQotewot
ICAgIFRleHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLmdldCgpOwotCi0gICAg
aWYgKHQgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBHTHVieXRlIGNvbG9y
W10gPSB7IDAsIDAsIDAsIDI1NSB9OwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgLy8gZGVmYXVsdCBmYWxscyB0aHJvdWdoIHRvIFRFWFRVUkVfMkQKLQotICAgICAgICAg
IGNhc2UgVEVYVFVSRV8yRDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUZXh0dXJl
MkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQoVGV4dHVyZTo6SU5DT01QTEVURV9URVhU
VVJFX0lEKTsKLSAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgICB0
ID0gaW5jb21wbGV0ZTJkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
VGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKFRleHR1
cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0KLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1
YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBj
b2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwg
MSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBp
bmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdl
TmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAg
ICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3Vi
ZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNv
bG9yKTsKLQotICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1YmU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIG1JbmNvbXBsZXRlVGV4
dHVyZXNbdHlwZV0uc2V0KHQpOwotICAgIH0KLQotICAgIHJldHVybiB0OwotfQotCi1ib29sIENv
bnRleHQ6OmN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKQotewotICAgIHJldHVybiBtU3Rh
dGUuY3VsbEZhY2UgJiYgbVN0YXRlLmN1bGxNb2RlID09IEdMX0ZST05UX0FORF9CQUNLICYmIGlz
VHJpYW5nbGVNb2RlKGRyYXdNb2RlKTsKLX0KLQotYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9k
ZShHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgc3dpdGNoIChkcmF3TW9kZSkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgotICAgICAg
Y2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNl
IEdMX1BPSU5UUzoKLSAgICAgIGNhc2UgR0xfTElORVM6Ci0gICAgICBjYXNlIEdMX0xJTkVfTE9P
UDoKLSAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKQotewotICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOwotCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsw
XSA9IHZhbHVlc1swXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVu
dFZhbHVlWzFdID0gdmFsdWVzWzFdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhd
Lm1DdXJyZW50VmFsdWVbMl0gPSB2YWx1ZXNbMl07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1szXTsKLQotICAgIG1WZXJ0ZXhEYXRh
TWFuYWdlci0+ZGlydHlDdXJyZW50VmFsdWUoaW5kZXgpOwotfQotCi12b2lkIENvbnRleHQ6OnNl
dFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKLXsKLSAg
ICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29yID0gZGl2aXNvcjsKLX0KLQotLy8ga2VlcCBs
aXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIKLS8vIE9FUyBleHRlbnNpb25zCi0vLyBFWFQg
ZXh0ZW5zaW9ucwotLy8gVmVuZG9yIGV4dGVuc2lvbnMKLXZvaWQgQ29udGV4dDo6aW5pdEV4dGVu
c2lvblN0cmluZygpCi17Ci0gICAgbUV4dGVuc2lvblN0cmluZyA9ICIiOwotCi0gICAgLy8gT0VT
IGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAg
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgIjsKLSAg
ICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwgIjsKLSAgICAvL21FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5h
cnkgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOwotICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAiOwotCi0g
ICAgaWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICI7Ci0gICAgfQotICAgIGlm
IChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7Ci0gICAgfQot
ICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1
cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7Ci0gICAgfQotCi0gICAgaWYg
KHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAiOwotICAgIH0KLQotICAgIC8vIE11bHRpLXZl
bmRvciAoRVhUKSBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygp
KQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX29jY2x1c2lvbl9x
dWVyeV9ib29sZWFuICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhU
X3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcm9i
dXN0bmVzcyAiOwotCi0gICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgewotICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQx
ICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4ICI7Ci0gICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVf
c3RvcmFnZSAiOwotCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChz
dXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgIjsKLSAgICB9Ci0KLSAgICBpZiAoc3Vw
cG9ydHNJbnN0YW5jaW5nKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICI7Ci0gICAgfQotCi0gICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOwotCi0gICAgaWYgKHN1cHBv
cnRzRFhUM1RleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBv
cnRzRFhUNVRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgIjsKLSAgICB9Ci0KLSAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX3VzYWdlICI7Ci0gICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7Ci0KLSAgICAvLyBP
dGhlciB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVl
cmllcygpKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfTlZfZmVuY2Ug
IjsKLSAgICB9Ci0KLSAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IG1FeHRlbnNpb25T
dHJpbmcuZmluZF9sYXN0X25vdF9vZignICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6
Om5wb3MpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7Ci0g
ICAgfQotfQotCi1jb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25z
dAotewotICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nLmNfc3RyKCk7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6aW5pdFJlbmRlcmVyU3RyaW5nKCkKLXsKLSAgICBEM0RBREFQVEVSX0lERU5USUZJRVI5
ICppZGVudGlmaWVyID0gbURpc3BsYXktPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7Ci0KLSAgICBt
UmVuZGVyZXJTdHJpbmcgPSAiQU5HTEUgKCI7Ci0gICAgbVJlbmRlcmVyU3RyaW5nICs9IGlkZW50
aWZpZXItPkRlc2NyaXB0aW9uOwotICAgIG1SZW5kZXJlclN0cmluZyArPSAiKSI7Ci19Ci0KLWNv
bnN0IGNoYXIgKkNvbnRleHQ6OmdldFJlbmRlcmVyU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVJlbmRlcmVyU3RyaW5nLmNfc3RyKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1l
YnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kx
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZ
MCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xiaXRmaWVsZCBtYXNrKQotewotICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIg
PSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCBy
ZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
IHx8Ci0gICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0
ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAg
aWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGludCByZWFk
QnVmZmVyV2lkdGggPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRo
KCk7Ci0gICAgaW50IHJlYWRCdWZmZXJIZWlnaHQgPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyKCktPmdldEhlaWdodCgpOwotICAgIGludCBkcmF3QnVmZmVyV2lkdGggPSBkcmF3RnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCk7Ci0gICAgaW50IGRyYXdCdWZm
ZXJIZWlnaHQgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEhlaWdodCgp
OwotCi0gICAgUkVDVCBzb3VyY2VSZWN0OwotICAgIFJFQ1QgZGVzdFJlY3Q7Ci0KLSAgICBpZiAo
c3JjWDAgPCBzcmNYMSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gwOwot
ICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LmxlZnQg
PSBkc3RYMDsKLSAgICAgICAgZGVzdFJlY3QucmlnaHQgPSBkc3RYMTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RS
ZWN0LmxlZnQgPSBkc3RYMTsKLSAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gwOwotICAg
ICAgICBkZXN0UmVjdC5yaWdodCA9IGRzdFgwOwotICAgIH0KLQotICAgIGlmIChzcmNZMCA8IHNy
Y1kxKQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSBzcmNZMTsKLSAgICAgICAg
ZGVzdFJlY3QuYm90dG9tID0gZHN0WTE7Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTA7
Ci0gICAgICAgIGRlc3RSZWN0LnRvcCA9IGRzdFkwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHNyY1kwOwotICAgICAgICBkZXN0UmVjdC5ib3R0
b20gPSBkc3RZMDsKLSAgICAgICAgc291cmNlUmVjdC50b3AgPSBzcmNZMTsKLSAgICAgICAgZGVz
dFJlY3QudG9wID0gZHN0WTE7Ci0gICAgfQotCi0gICAgUkVDVCBzb3VyY2VTY2lzc29yZWRSZWN0
ID0gc291cmNlUmVjdDsKLSAgICBSRUNUIGRlc3RTY2lzc29yZWRSZWN0ID0gZGVzdFJlY3Q7Ci0K
LSAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQotICAgIHsKLSAgICAgICAgLy8gT25seSB3cml0
ZSB0byBwYXJ0cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgd2hpY2ggcGFzcyB0aGUg
c2Npc3NvciB0ZXN0Ci0gICAgICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgZGVzdFJlY3QgaXMgbm93
IGluIEQzRC1zdHlsZSBjb29yZGluYXRlcywgc28gdGhlICp0b3AqIG9mIHRoZQotICAgICAgICAv
LyByZWN0IHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHNjaXNzb3JZLCByYXRoZXIgdGhhbiB0aGUg
Ym90dG9tLgotICAgICAgICBpZiAoZGVzdFJlY3QubGVmdCA8IG1TdGF0ZS5zY2lzc29yWCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNzb3JYIC0gZGVzdFJl
Y3QubGVmdDsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LmxlZnQgPSBtU3RhdGUuc2Np
c3Nvclg7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmxlZnQgKz0geERpZmY7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QucmlnaHQgPiBtU3RhdGUuc2Npc3Nvclgg
KyBtU3RhdGUuc2Npc3NvcldpZHRoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeERpZmYg
PSBkZXN0UmVjdC5yaWdodCAtIChtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRo
KTsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnJpZ2h0ID0gbVN0YXRlLnNjaXNzb3JY
ICsgbVN0YXRlLnNjaXNzb3JXaWR0aDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qu
cmlnaHQgLT0geERpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QudG9wIDwg
bVN0YXRlLnNjaXNzb3JZKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSBtU3Rh
dGUuc2Npc3NvclkgLSBkZXN0UmVjdC50b3A7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVj
dC50b3AgPSBtU3RhdGUuc2Npc3Nvclk7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0
LnRvcCArPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC5ib3R0b20g
PiBtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHlEaWZmID0gZGVzdFJlY3QuYm90dG9tIC0gKG1TdGF0ZS5zY2lzc29yWSAr
IG1TdGF0ZS5zY2lzc29ySGVpZ2h0KTsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LmJv
dHRvbSA9IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0OwotICAgICAgICAg
ICAgc291cmNlU2Npc3NvcmVkUmVjdC5ib3R0b20gLT0geURpZmY7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQgPSBmYWxzZTsKLSAgICBib29sIGJsaXREZXB0
aFN0ZW5jaWwgPSBmYWxzZTsKLQotICAgIFJFQ1Qgc291cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VT
Y2lzc29yZWRSZWN0OwotICAgIFJFQ1QgZGVzdFRyaW1tZWRSZWN0ID0gZGVzdFNjaXNzb3JlZFJl
Y3Q7Ci0KLSAgICAvLyBUaGUgc291cmNlICYgZGVzdGluYXRpb24gcmVjdGFuZ2xlcyBhbHNvIG1h
eSBuZWVkIHRvIGJlIHRyaW1tZWQgaWYgdGhleSBmYWxsIG91dCBvZiB0aGUgYm91bmRzIG9mIAot
ICAgIC8vIHRoZSBhY3R1YWwgZHJhdyBhbmQgcmVhZCBzdXJmYWNlcy4KLSAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QubGVmdCA8IDApCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSAwIC0gc291
cmNlVHJpbW1lZFJlY3QubGVmdDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCA9IDA7
Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ICs9IHhEaWZmOwotICAgIH0KLQotICAgIGlm
IChzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA+IHJlYWRCdWZmZXJXaWR0aCkKLSAgICB7Ci0gICAg
ICAgIGludCB4RGlmZiA9IHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gcmVhZEJ1ZmZlcldpZHRo
OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA9IHJlYWRCdWZmZXJXaWR0aDsKLSAg
ICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChz
b3VyY2VUcmltbWVkUmVjdC50b3AgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gMCAt
IHNvdXJjZVRyaW1tZWRSZWN0LnRvcDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wID0g
MDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnRvcCArPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBp
ZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tID4gcmVhZEJ1ZmZlckhlaWdodCkKLSAgICB7Ci0g
ICAgICAgIGludCB5RGlmZiA9IHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHJlYWRCdWZmZXJI
ZWlnaHQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWln
aHQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLT0geURpZmY7Ci0gICAgfQotCi0g
ICAgaWYgKGRlc3RUcmltbWVkUmVjdC5sZWZ0IDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB4RGlm
ZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QubGVmdDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0Lmxl
ZnQgPSAwOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ICs9IHhEaWZmOwotICAgIH0K
LQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QucmlnaHQgPiBkcmF3QnVmZmVyV2lkdGgpCi0gICAg
ewotICAgICAgICBpbnQgeERpZmYgPSBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkcmF3QnVmZmVy
V2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCA9IGRyYXdCdWZmZXJXaWR0aDsK
LSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7Ci0gICAgfQotCi0gICAg
aWYgKGRlc3RUcmltbWVkUmVjdC50b3AgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0g
MCAtIGRlc3RUcmltbWVkUmVjdC50b3A7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgPSAw
OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgKz0geURpZmY7Ci0gICAgfQotCi0gICAg
aWYgKGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPiBkcmF3QnVmZmVySGVpZ2h0KQotICAgIHsKLSAg
ICAgICAgaW50IHlEaWZmID0gZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAtIGRyYXdCdWZmZXJIZWln
aHQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPSBkcmF3QnVmZmVySGVpZ2h0Owot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLT0geURpZmY7Ci0gICAgfQotCi0gICAg
Ym9vbCBwYXJ0aWFsQnVmZmVyQ29weSA9IGZhbHNlOwotICAgIGlmIChzb3VyY2VUcmltbWVkUmVj
dC5ib3R0b20gLSBzb3VyY2VUcmltbWVkUmVjdC50b3AgPCByZWFkQnVmZmVySGVpZ2h0IHx8Ci0g
ICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gc291cmNlVHJpbW1lZFJlY3QubGVmdCA8
IHJlYWRCdWZmZXJXaWR0aCB8fCAKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAtIGRl
c3RUcmltbWVkUmVjdC50b3AgPCBkcmF3QnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC5yaWdodCAtIGRlc3RUcmltbWVkUmVjdC5sZWZ0IDwgZHJhd0J1ZmZlcldpZHRoIHx8
Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC50
b3AgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0
LmxlZnQgIT0gMCkKLSAgICB7Ci0gICAgICAgIHBhcnRpYWxCdWZmZXJDb3B5ID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCi0gICAgewotICAgICAg
ICBjb25zdCBib29sIHZhbGlkUmVhZFR5cGUgPSByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyVHlwZSgpID09IEdMX1RFWFRVUkVfMkQgfHwKLSAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSOwotICAgICAgICBjb25z
dCBib29sIHZhbGlkRHJhd1R5cGUgPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlw
ZSgpID09IEdMX1RFWFRVUkVfMkQgfHwKLSAgICAgICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXJUeXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSOwotICAgICAgICBpZiAoIXZhbGlk
UmVhZFR5cGUgfHwgIXZhbGlkRHJhd1R5cGUgfHwKLSAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
RVJSKCJDb2xvciBidWZmZXIgZm9ybWF0IGNvbnZlcnNpb24gaW4gQmxpdEZyYW1lYnVmZmVyQU5H
TEUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAocGFydGlhbEJ1ZmZlckNvcHkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXRTYW1w
bGVzKCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0
cnVlOwotCi0gICAgfQotCi0gICAgaWYgKG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdM
X1NURU5DSUxfQlVGRkVSX0JJVCkpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlYWRE
U0J1ZmZlciA9IE5VTEw7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVM
TDsKLQotICAgICAgICAvLyBXZSBzdXBwb3J0IE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCwgYW5k
IGRvIG5vdCBzdXBwb3J0IGEgc2VwYXJhdGVseSBhdHRhY2hlZCBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIHNvIGlmIHdlIGhhdmUKLSAgICAgICAgLy8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2ls
IGJ1ZmZlciwgaXQgd2lsbCBiZSB0aGUgc2FtZSBidWZmZXIuCi0KLSAgICAgICAgaWYgKG1hc2sg
JiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhi
dWZmZXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlcigpLT5nZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgcmVhZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigp
OwotICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXNr
ICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVh
ZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRT
dGVuY2lsYnVmZmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdl
dFN0ZW5jaWxidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVhZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0Zy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAocGFydGlhbEJ1ZmZlckNvcHkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVSUigiT25seSB3aG9sZS1idWZmZXIgZGVwdGggYW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBv
cnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gb25seSB3aG9sZS1idWZmZXIgY29waWVzIGFyZSBw
ZXJtaXR0ZWQKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHJhd0RTQnVmZmVyICYmIGRyYXdE
U0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApIHx8IAotICAgICAgICAgICAgKHJlYWREU0J1ZmZl
ciAmJiByZWFkRFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwpCi0gICAg
ewotICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAgICBpZiAoYmxpdFJlbmRl
clRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIHJlYWRS
ZW5kZXJUYXJnZXQgPSByZWFkRnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOwotICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkqIGRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3RnJhbWVidWZm
ZXItPmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRSZW5kZXJUYXJnZXQsICZzb3VyY2VUcmltbWVkUmVjdCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdS
ZW5kZXJUYXJnZXQsICZkZXN0VHJpbW1lZFJlY3QsIEQzRFRFWEZfTk9ORSk7Ci0KLSAgICAgICAg
ICAgIHJlYWRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGRyYXdSZW5kZXJU
YXJnZXQtPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFp
bGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChibGl0RGVw
dGhTdGVuY2lsKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogcmVh
ZERlcHRoU3RlbmNpbCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSogZHJhd0RlcHRoU3RlbmNpbCA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZS0+U3RyZXRjaFJlY3QocmVhZERlcHRoU3RlbmNpbCwgTlVMTCwgZHJhd0RlcHRoU3Rl
bmNpbCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICAgICAgcmVhZERlcHRoU3RlbmNp
bC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgZHJhd0RlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwot
Ci0gICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJl
dHVybmVkICV4LiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjpWZXJ0
ZXhEZWNsYXJhdGlvbkNhY2hlKCkgOiBtTWF4THJ1KDApCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQotICAgIHsKLSAgICAgICAg
bVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Ci0gICAgICAgIG1W
ZXJ0ZXhEZWNsQ2FjaGVbaV0ubHJ1Q291bnQgPSAwOwotICAgIH0KLX0KLQotVmVydGV4RGVjbGFy
YXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKQotewotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uLT5SZWxl
YXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlOjphcHBseURlY2xhcmF0aW9uKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVHJhbnNsYXRl
ZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW10sIFByb2dyYW0gKnByb2dyYW0sIEdMc2l6ZWkgaW5zdGFu
Y2VzLCBHTHNpemVpICpyZXBlYXREcmF3KQotewotICAgICpyZXBlYXREcmF3ID0gMTsKLQotICAg
IGludCBpbmRleGVkQXR0cmlidXRlID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgIGludCBpbnN0
YW5jZWRBdHRyaWJ1dGUgPSBNQVhfVkVSVEVYX0FUVFJJQlM7Ci0KLSAgICBpZiAoaW5zdGFuY2Vz
ID4gMCkKLSAgICB7Ci0gICAgICAgIC8vIEZpbmQgYW4gaW5kZXhlZCBhdHRyaWJ1dGUgdG8gYmUg
bWFwcGVkIHRvIEQzRCBzdHJlYW0gMAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRl
c1tpXS5hY3RpdmUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRB
dHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkQXR0cmlidXRlID0g
aTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChpbnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0u
ZGl2aXNvciAhPSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpbnN0YW5jZWRBdHRyaWJ1dGUgPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgYnJlYWs7ICAgLy8gRm91bmQgYm90
aCBhbiBpbmRleGVkIGFuZCBpbnN0YW5jZWQgYXR0cmlidXRlCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoaW5kZXhlZEF0dHJpYnV0ZSA9PSBNQVhfVkVSVEVYX0FUVFJJ
QlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9W
RVJURVhfQVRUUklCUyArIDFdOwotICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICplbGVtZW50ID0gJmVs
ZW1lbnRzWzBdOwotCi0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0t
PmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzdHJlYW0gPSBpOwotCi0gICAgICAgICAgICBp
ZiAoaW5zdGFuY2VzID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBEdWUg
dG8gYSBidWcgb24gQVRJIGNhcmRzIHdlIGNhbid0IGVuYWJsZSBpbnN0YW5jaW5nIHdoZW4gbm9u
ZSBvZiB0aGUgYXR0cmlidXRlcyBhcmUgaW5zdGFuY2VkLgotICAgICAgICAgICAgICAgIGlmIChp
bnN0YW5jZWRBdHRyaWJ1dGUgPT0gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgKnJlcGVhdERyYXcgPSBpbnN0YW5jZXM7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpID09IGluZGV4ZWRBdHRyaWJ1dGUpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSAwKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBpbmRleGVk
QXR0cmlidXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
VUlOVCBmcmVxdWVuY3kgPSAxOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA9PSAwKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0Vf
SU5ERVhFRERBVEEgfCBpbnN0YW5jZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmcmVxdWVuY3kgPSBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgYXR0cmli
dXRlc1tpXS5kaXZpc29yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoc3Ry
ZWFtLCBmcmVxdWVuY3kpOwotICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJsZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsICE9IGF0dHJpYnV0ZXNbaV0uc2VyaWFsIHx8
Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgIT0gYXR0cmlidXRl
c1tpXS5zdHJpZGUgfHwKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNl
dCAhPSBhdHRyaWJ1dGVzW2ldLm9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZShzdHJlYW0sIGF0dHJpYnV0ZXNbaV0udmVydGV4QnVm
ZmVyLCBhdHRyaWJ1dGVzW2ldLm9mZnNldCwgYXR0cmlidXRlc1tpXS5zdHJpZGUpOwotICAgICAg
ICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0uc2VyaWFsID0gYXR0cmlidXRlc1tpXS5zZXJp
YWw7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRWQnNbc3RyZWFtXS5zdHJpZGUgPSBhdHRyaWJ1
dGVzW2ldLnN0cmlkZTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNl
dCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBl
bGVtZW50LT5TdHJlYW0gPSBzdHJlYW07Ci0gICAgICAgICAgICBlbGVtZW50LT5PZmZzZXQgPSAw
OwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsKLSAgICAg
ICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKLSAgICAgICAg
ICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAgICAgICAgICAg
ZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7
Ci0gICAgICAgICAgICBlbGVtZW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW5z
dGFuY2VzID09IDAgfHwgaW5zdGFuY2VkQXR0cmlidXRlID09IE1BWF9WRVJURVhfQVRUUklCUykK
LSAgICB7Ci0gICAgICAgIGlmIChtSW5zdGFuY2luZ0VuYWJsZWQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGks
IDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVN
RU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOwotICAgICooZWxlbWVudCsrKSA9IGVuZDsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykK
LSAgICB7Ci0gICAgICAgIFZlcnRleERlY2xDYWNoZUVudHJ5ICplbnRyeSA9ICZtVmVydGV4RGVj
bENhY2hlW2ldOwotICAgICAgICBpZiAobWVtY21wKGVudHJ5LT5jYWNoZWRFbGVtZW50cywgZWxl
bWVudHMsIChlbGVtZW50IC0gZWxlbWVudHMpICogc2l6ZW9mKEQzRFZFUlRFWEVMRU1FTlQ5KSkg
PT0gMCAmJiBlbnRyeS0+dmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGVudHJ5LT5scnVDb3VudCA9ICsrbU1heExydTsKLSAgICAgICAgICAgIGlmKGVudHJ5LT52ZXJ0
ZXhEZWNsYXJhdGlvbiAhPSBtTGFzdFNldFZEZWNsKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0VmVydGV4RGVjbGFyYXRpb24oZW50cnktPnZlcnRleERlY2xhcmF0
aW9uKTsKLSAgICAgICAgICAgICAgICBtTGFzdFNldFZEZWNsID0gZW50cnktPnZlcnRleERlY2xh
cmF0aW9uOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZXJ0ZXhEZWNsQ2FjaGVFbnRyeSAqbGFzdENhY2hl
ID0gbVZlcnRleERlY2xDYWNoZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRF
WF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVj
bENhY2hlW2ldLmxydUNvdW50IDwgbGFzdENhY2hlLT5scnVDb3VudCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbGFzdENhY2hlID0gJm1WZXJ0ZXhEZWNsQ2FjaGVbaV07Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBOVUxMKQotICAg
IHsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAg
ICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKLSAgICAgICAgLy8gbUxh
c3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBzbyB3ZSBkb24ndCBoYXZlIHRv
IHdvcnJ5Ci0gICAgICAgIC8vIGFib3V0IGl0LgotICAgIH0KLQotICAgIG1lbWNweShsYXN0Q2Fj
aGUtPmNhY2hlZEVsZW1lbnRzLCBlbGVtZW50cywgKGVsZW1lbnQgLSBlbGVtZW50cykgKiBzaXpl
b2YoRDNEVkVSVEVYRUxFTUVOVDkpKTsKLSAgICBkZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xhcmF0
aW9uKGVsZW1lbnRzLCAmbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgZGV2aWNl
LT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKLSAg
ICBtTGFzdFNldFZEZWNsID0gbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICBsYXN0
Q2FjaGUtPmxydUNvdW50ID0gKyttTWF4THJ1OwotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwot
fQotCi12b2lkIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6Om1hcmtTdGF0ZURpcnR5KCkKLXsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgbUFwcGxpZWRWQnNbaV0uc2VyaWFsID0gMDsKLSAgICB9Ci0KLSAgICBtTGFzdFNldFZE
ZWNsID0gTlVMTDsKLSAgICBtSW5zdGFuY2luZ0VuYWJsZWQgPSB0cnVlOyAgIC8vIEZvcmNlcyBp
dCB0byBiZSBkaXNhYmxlZCB3aGVuIG5vdCB1c2VkCi19Ci0KLX0KLQotZXh0ZXJuICJDIgotewot
Z2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBj
b25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCBy
b2J1c3RBY2Nlc3MpCi17Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNoYXJl
Q29udGV4dCwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwotfQotCi12b2lkIGdsRGVzdHJv
eUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCi17Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci0K
LSAgICBpZiAoY29udGV4dCA9PSBnbDo6Z2V0Q29udGV4dCgpKQotICAgIHsKLSAgICAgICAgZ2w6
Om1ha2VDdXJyZW50KE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIH0KLX0KLQotdm9pZCBnbE1ha2VD
dXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6
U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBnbDo6bWFrZUN1cnJlbnQoY29udGV4dCwgZGlzcGxh
eSwgc3VyZmFjZSk7Ci19Ci0KLWdsOjpDb250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCkKLXsK
LSAgICByZXR1cm4gZ2w6OmdldENvbnRleHQoKTsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRkNDdjZTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Db250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NjEgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gQ29udGV4dC5oOiBEZWZpbmVzIHRoZSBnbDo6Q29udGV4dCBj
bGFzcywgbWFuYWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nCi0vLyByZW5kZXJpbmcg
b3BlcmF0aW9ucy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVH
TENvbnRleHQuCi0KLSNpZm5kZWYgTElCR0xFU1YyX0NPTlRFWFRfSF8KLSNkZWZpbmUgTElCR0xF
U1YyX0NPTlRFWFRfSF8KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZGVmaW5lIEVHTEFQSQotI2luY2x1ZGUg
PEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVk
ZSA8aGFzaF9tYXA+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUg
ImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1h
bmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgiCi0KLW5hbWVz
cGFjZSBlZ2wKLXsKLWNsYXNzIERpc3BsYXk7Ci1jbGFzcyBTdXJmYWNlOwotY2xhc3MgQ29uZmln
OwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLXN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwotc3Ry
dWN0IFRyYW5zbGF0ZWRJbmRleERhdGE7Ci0KLWNsYXNzIEJ1ZmZlcjsKLWNsYXNzIFNoYWRlcjsK
LWNsYXNzIFByb2dyYW07Ci1jbGFzcyBUZXh0dXJlOwotY2xhc3MgVGV4dHVyZTJEOwotY2xhc3Mg
VGV4dHVyZUN1YmVNYXA7Ci1jbGFzcyBGcmFtZWJ1ZmZlcjsKLWNsYXNzIFJlbmRlcmJ1ZmZlcjsK
LWNsYXNzIFJlbmRlcmJ1ZmZlclN0b3JhZ2U7Ci1jbGFzcyBDb2xvcmJ1ZmZlcjsKLWNsYXNzIERl
cHRoYnVmZmVyOwotY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXI7Ci1jbGFzcyBTdGVuY2lsYnVm
ZmVyOwotY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotY2xhc3MgVmVydGV4RGF0YU1hbmFnZXI7
Ci1jbGFzcyBJbmRleERhdGFNYW5hZ2VyOwotY2xhc3MgQmxpdDsKLWNsYXNzIEZlbmNlOwotY2xh
c3MgUXVlcnk7Ci0KLWVudW0KLXsKLSAgICBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgPSAyNTYs
Ci0gICAgRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMgPSAxNiwKLSAgICBEM0Q5X01BWF9JTlRfQ09O
U1RBTlRTID0gMTYsCi0KLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBNQVhfVkVS
VEVYX1VOSUZPUk1fVkVDVE9SUyA9IEQzRDlfTUFYX0ZMT0FUX0NPTlNUQU5UUyAtIDIsICAgLy8g
UmVzZXJ2ZSBzcGFjZSBmb3IgZHhfSGFsZlBpeGVsU2l6ZSBhbmQgZHhfRGVwdGhSYW5nZS4KLSAg
ICBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMiA9IDgsCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9SU19T
TTMgPSAxMCwKLSAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LAotICAgIE1BWF9WRVJU
RVhfVEVYVFVSRV9JTUFHRV9VTklUU19WVEYgPSA0LCAgIC8vIEZvciBkZXZpY2VzIHN1cHBvcnRp
bmcgdmVydGV4IHRleHR1cmUgZmV0Y2gKLSAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUU19WVEYgPSBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUU19WVEYsICAgIAotICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00y
ID0gMzIgLSAzLCAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBkeF9Db29yZCwgZHhfRGVwdGgsIGFu
ZCBkeF9EZXB0aFJhbmdlLiBkeF9Qb2ludE9yTGluZXMgYW5kIGR4X0Zyb250Q0NXIHVzZSBzZXBh
cmF0ZSBib29sIHJlZ2lzdGVycy4KLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NN
MyA9IDIyNCAtIDMsCi0gICAgTUFYX0RSQVdfQlVGRkVSUyA9IDEsCi0KLSAgICBJTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX0ZPUk1BVCA9IEdMX1JHQiwKLSAgICBJTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX1RZUEUgPSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNQotfTsKLQotZW51bSBRdWVyeVR5
cGUKLXsKLSAgICBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQsCi0gICAgUVVFUllfQU5ZX1NBTVBM
RVNfUEFTU0VEX0NPTlNFUlZBVElWRSwKLQotICAgIFFVRVJZX1RZUEVfQ09VTlQKLX07Ci0KLWNv
bnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NSU4gPSAxLjBmOwotY29uc3QgZmxv
YXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWCA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NQVhfU00yID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRV9NQVhfU00zID0gNjQuMGY7Ci0KLXN0cnVjdCBDb2xvcgotewotICAgIGZsb2F0
IHJlZDsKLSAgICBmbG9hdCBncmVlbjsKLSAgICBmbG9hdCBibHVlOwotICAgIGZsb2F0IGFscGhh
OwotfTsKLQotLy8gSGVscGVyIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgc2luZ2xlIHZlcnRleCBh
dHRyaWJ1dGUKLWNsYXNzIFZlcnRleEF0dHJpYnV0ZQotewotICBwdWJsaWM6Ci0gICAgVmVydGV4
QXR0cmlidXRlKCkgOiBtVHlwZShHTF9GTE9BVCksIG1TaXplKDApLCBtTm9ybWFsaXplZChmYWxz
ZSksIG1TdHJpZGUoMCksIG1Qb2ludGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURp
dmlzb3IoMCkKLSAgICB7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMF0gPSAwLjBmOwotICAgICAg
ICBtQ3VycmVudFZhbHVlWzFdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsyXSA9IDAu
MGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbM10gPSAxLjBmOwotICAgIH0KLQotICAgIGludCB0
eXBlU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1UeXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9m
KEdMYnl0ZSk7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgcmV0dXJuIG1TaXpl
ICogc2l6ZW9mKEdMdWJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6ICAgICAgICAgIHJl
dHVybiBtU2l6ZSAqIHNpemVvZihHTHNob3J0KTsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOiByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1c2hvcnQpOwotICAgICAgICAgIGNhc2Ug
R0xfRklYRUQ6ICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZpeGVkKTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9h
dCk7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIG1TaXplICogc2l6
ZW9mKEdMZmxvYXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgR0xzaXplaSBzdHJpZGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1TdHJpZGUgPyBtU3RyaWRlIDogdHlwZVNpemUo
KTsKLSAgICB9Ci0KLSAgICAvLyBGcm9tIGdsVmVydGV4QXR0cmliUG9pbnRlcgotICAgIEdMZW51
bSBtVHlwZTsKLSAgICBHTGludCBtU2l6ZTsKLSAgICBib29sIG1Ob3JtYWxpemVkOwotICAgIEdM
c2l6ZWkgbVN0cmlkZTsgICAvLyAwIG1lYW5zIG5hdHVyYWwgc3RyaWRlCi0KLSAgICB1bmlvbgot
ICAgIHsKLSAgICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7Ci0gICAgICAgIGludHB0cl90IG1P
ZmZzZXQ7Ci0gICAgfTsKLQotICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUJvdW5kQnVmZmVy
OyAgIC8vIENhcHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIGlzIGNhbGxlZC4KLQot
ICAgIGJvb2wgbUFycmF5RW5hYmxlZDsgICAvLyBGcm9tIGdsRW5hYmxlL0Rpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheQotICAgIGZsb2F0IG1DdXJyZW50VmFsdWVbNF07ICAgLy8gRnJvbSBnbFZlcnRl
eEF0dHJpYgotICAgIHVuc2lnbmVkIGludCBtRGl2aXNvcjsKLX07Ci0KLXR5cGVkZWYgVmVydGV4
QXR0cmlidXRlIFZlcnRleEF0dHJpYnV0ZUFycmF5W01BWF9WRVJURVhfQVRUUklCU107Ci0KLS8v
IEhlbHBlciBzdHJ1Y3R1cmUgdG8gc3RvcmUgYWxsIHJhdyBzdGF0ZQotc3RydWN0IFN0YXRlCi17
Ci0gICAgQ29sb3IgY29sb3JDbGVhclZhbHVlOwotICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1
ZTsKLSAgICBpbnQgc3RlbmNpbENsZWFyVmFsdWU7Ci0KLSAgICBib29sIGN1bGxGYWNlOwotICAg
IEdMZW51bSBjdWxsTW9kZTsKLSAgICBHTGVudW0gZnJvbnRGYWNlOwotICAgIGJvb2wgZGVwdGhU
ZXN0OwotICAgIEdMZW51bSBkZXB0aEZ1bmM7Ci0gICAgYm9vbCBibGVuZDsKLSAgICBHTGVudW0g
c291cmNlQmxlbmRSR0I7Ci0gICAgR0xlbnVtIGRlc3RCbGVuZFJHQjsKLSAgICBHTGVudW0gc291
cmNlQmxlbmRBbHBoYTsKLSAgICBHTGVudW0gZGVzdEJsZW5kQWxwaGE7Ci0gICAgR0xlbnVtIGJs
ZW5kRXF1YXRpb25SR0I7Ci0gICAgR0xlbnVtIGJsZW5kRXF1YXRpb25BbHBoYTsKLSAgICBDb2xv
ciBibGVuZENvbG9yOwotICAgIGJvb2wgc3RlbmNpbFRlc3Q7Ci0gICAgR0xlbnVtIHN0ZW5jaWxG
dW5jOwotICAgIEdMaW50IHN0ZW5jaWxSZWY7Ci0gICAgR0x1aW50IHN0ZW5jaWxNYXNrOwotICAg
IEdMZW51bSBzdGVuY2lsRmFpbDsKLSAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7Ci0g
ICAgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhQYXNzOwotICAgIEdMdWludCBzdGVuY2lsV3JpdGVt
YXNrOwotICAgIEdMZW51bSBzdGVuY2lsQmFja0Z1bmM7Ci0gICAgR0xpbnQgc3RlbmNpbEJhY2tS
ZWY7Ci0gICAgR0x1aW50IHN0ZW5jaWxCYWNrTWFzazsKLSAgICBHTGVudW0gc3RlbmNpbEJhY2tG
YWlsOwotICAgIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7Ci0gICAgR0xlbnVtIHN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsKLSAgICBHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2s7
Ci0gICAgYm9vbCBwb2x5Z29uT2Zmc2V0RmlsbDsKLSAgICBHTGZsb2F0IHBvbHlnb25PZmZzZXRG
YWN0b3I7Ci0gICAgR0xmbG9hdCBwb2x5Z29uT2Zmc2V0VW5pdHM7Ci0gICAgYm9vbCBzYW1wbGVB
bHBoYVRvQ292ZXJhZ2U7Ci0gICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKLSAgICBHTGNsYW1wZiBz
YW1wbGVDb3ZlcmFnZVZhbHVlOwotICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7Ci0gICAg
Ym9vbCBzY2lzc29yVGVzdDsKLSAgICBib29sIGRpdGhlcjsKLQotICAgIEdMZmxvYXQgbGluZVdp
ZHRoOwotCi0gICAgR0xlbnVtIGdlbmVyYXRlTWlwbWFwSGludDsKLSAgICBHTGVudW0gZnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludDsKLQotICAgIEdMaW50IHZpZXdwb3J0WDsKLSAgICBHTGlu
dCB2aWV3cG9ydFk7Ci0gICAgR0xzaXplaSB2aWV3cG9ydFdpZHRoOwotICAgIEdMc2l6ZWkgdmll
d3BvcnRIZWlnaHQ7Ci0gICAgZmxvYXQgek5lYXI7Ci0gICAgZmxvYXQgekZhcjsKLQotICAgIEdM
aW50IHNjaXNzb3JYOwotICAgIEdMaW50IHNjaXNzb3JZOwotICAgIEdMc2l6ZWkgc2Npc3Nvcldp
ZHRoOwotICAgIEdMc2l6ZWkgc2Npc3NvckhlaWdodDsKLQotICAgIGJvb2wgY29sb3JNYXNrUmVk
OwotICAgIGJvb2wgY29sb3JNYXNrR3JlZW47Ci0gICAgYm9vbCBjb2xvck1hc2tCbHVlOwotICAg
IGJvb2wgY29sb3JNYXNrQWxwaGE7Ci0gICAgYm9vbCBkZXB0aE1hc2s7Ci0KLSAgICB1bnNpZ25l
ZCBpbnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3RpdmUgdGV4dHVyZSB1bml0IHNlbGVjdG9yIC0g
R0xfVEVYVFVSRTAKLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGFycmF5QnVmZmVyOwotICAg
IEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyOwotICAgIEdMdWludCBy
ZWFkRnJhbWVidWZmZXI7Ci0gICAgR0x1aW50IGRyYXdGcmFtZWJ1ZmZlcjsKLSAgICBCaW5kaW5n
UG9pbnRlcjxSZW5kZXJidWZmZXI+IHJlbmRlcmJ1ZmZlcjsKLSAgICBHTHVpbnQgY3VycmVudFBy
b2dyYW07Ci0KLSAgICBWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlW01BWF9WRVJURVhf
QVRUUklCU107Ci0gICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gc2FtcGxlclRleHR1cmVbVEVY
VFVSRV9UWVBFX0NPVU5UXVtNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU19WVEZdOwot
ICAgIEJpbmRpbmdQb2ludGVyPFF1ZXJ5PiBhY3RpdmVRdWVyeVtRVUVSWV9UWVBFX0NPVU5UXTsK
LQotICAgIEdMaW50IHVucGFja0FsaWdubWVudDsKLSAgICBHTGludCBwYWNrQWxpZ25tZW50Owot
ICAgIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlcjsKLX07Ci0KLS8vIEhlbHBlciBjbGFzcyB0byBj
b25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMKLWNsYXNzIFZlcnRleERlY2xh
cmF0aW9uQ2FjaGUKLXsKLSAgcHVibGljOgotICAgIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUoKTsK
LSAgICB+VmVydGV4RGVjbGFyYXRpb25DYWNoZSgpOwotCi0gICAgR0xlbnVtIGFwcGx5RGVjbGFy
YXRpb24oSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJp
YnV0ZXNbXSwgUHJvZ3JhbSAqcHJvZ3JhbSwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJl
cGVhdERyYXcpOwotCi0gICAgdm9pZCBtYXJrU3RhdGVEaXJ0eSgpOwotCi0gIHByaXZhdGU6Ci0g
ICAgVUlOVCBtTWF4THJ1OwotCi0gICAgZW51bSB7IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRS
SUVTID0gMzIgfTsKLQotICAgIHN0cnVjdCBWQkRhdGEKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGludCBzZXJpYWw7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdHJpZGU7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBvZmZzZXQ7Ci0gICAgfTsKLQotICAgIFZCRGF0YSBtQXBwbGllZFZCc1tNQVhfVkVS
VEVYX0FUVFJJQlNdOwotICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqbUxhc3RTZXRW
RGVjbDsKLSAgICBib29sIG1JbnN0YW5jaW5nRW5hYmxlZDsKLQotICAgIHN0cnVjdCBWZXJ0ZXhE
ZWNsQ2FjaGVFbnRyeQotICAgIHsKLSAgICAgICAgRDNEVkVSVEVYRUxFTUVOVDkgY2FjaGVkRWxl
bWVudHNbTUFYX1ZFUlRFWF9BVFRSSUJTICsgMV07Ci0gICAgICAgIFVJTlQgbHJ1Q291bnQ7Ci0g
ICAgICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSAqdmVydGV4RGVjbGFyYXRpb247Ci0g
ICAgfSBtVmVydGV4RGVjbENhY2hlW05VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTXTsKLX07
Ci0KLWNsYXNzIENvbnRleHQKLXsKLSAgcHVibGljOgotICAgIENvbnRleHQoY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKLQotICAgIH5Db250ZXh0KCk7Ci0KLSAgICB2
b2lkIG1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJm
YWNlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotICAgIHZvaWQg
bWFya0R4VW5pZm9ybXNEaXJ0eSgpOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtDb250ZXh0TG9z
dCgpOwotICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwotCi0gICAgLy8gU3RhdGUgbWFuaXB1bGF0
aW9uCi0gICAgdm9pZCBzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0
IGJsdWUsIGZsb2F0IGFscGhhKTsKLQotICAgIHZvaWQgc2V0Q2xlYXJEZXB0aChmbG9hdCBkZXB0
aCk7Ci0KLSAgICB2b2lkIHNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCk7Ci0KLSAgICB2b2lk
IHNldEN1bGxGYWNlKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0N1bGxGYWNlRW5hYmxlZCgp
IGNvbnN0OwotCi0gICAgdm9pZCBzZXRDdWxsTW9kZShHTGVudW0gbW9kZSk7Ci0KLSAgICB2b2lk
IHNldEZyb250RmFjZShHTGVudW0gZnJvbnQpOwotCi0gICAgdm9pZCBzZXREZXB0aFRlc3QoYm9v
bCBlbmFibGVkKTsKLSAgICBib29sIGlzRGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0OwotCi0gICAg
dm9pZCBzZXREZXB0aEZ1bmMoR0xlbnVtIGRlcHRoRnVuYyk7Ci0KLSAgICB2b2lkIHNldERlcHRo
UmFuZ2UoZmxvYXQgek5lYXIsIGZsb2F0IHpGYXIpOwotICAgIAotICAgIHZvaWQgc2V0QmxlbmQo
Ym9vbCBlbmFibGVkKTsKLSAgICBib29sIGlzQmxlbmRFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHNldEJsZW5kRmFjdG9ycyhHTGVudW0gc291cmNlUkdCLCBHTGVudW0gZGVzdFJHQiwgR0xl
bnVtIHNvdXJjZUFscGhhLCBHTGVudW0gZGVzdEFscGhhKTsKLSAgICB2b2lkIHNldEJsZW5kQ29s
b3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpOwotICAg
IHZvaWQgc2V0QmxlbmRFcXVhdGlvbihHTGVudW0gcmdiRXF1YXRpb24sIEdMZW51bSBhbHBoYUVx
dWF0aW9uKTsKLQotICAgIHZvaWQgc2V0U3RlbmNpbFRlc3QoYm9vbCBlbmFibGVkKTsKLSAgICBi
b29sIGlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFN0ZW5jaWxQ
YXJhbXMoR0xlbnVtIHN0ZW5jaWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNp
bE1hc2spOwotICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tQYXJhbXMoR0xlbnVtIHN0ZW5jaWxCYWNr
RnVuYywgR0xpbnQgc3RlbmNpbEJhY2tSZWYsIEdMdWludCBzdGVuY2lsQmFja01hc2spOwotICAg
IHZvaWQgc2V0U3RlbmNpbFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzayk7Ci0gICAg
dm9pZCBzZXRTdGVuY2lsQmFja1dyaXRlbWFzayhHTHVpbnQgc3RlbmNpbEJhY2tXcml0ZW1hc2sp
OwotICAgIHZvaWQgc2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBHTGVu
dW0gc3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcyk7Ci0g
ICAgdm9pZCBzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwg
R0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0Rl
cHRoUGFzcyk7Ci0KLSAgICB2b2lkIHNldFBvbHlnb25PZmZzZXRGaWxsKGJvb2wgZW5hYmxlZCk7
Ci0gICAgYm9vbCBpc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsK
LQotICAgIHZvaWQgc2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGJvb2wgZW5hYmxlZCk7Ci0gICAg
Ym9vbCBpc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQg
c2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFibGVkKTsKLSAgICBib29sIGlzU2FtcGxlQ292ZXJh
Z2VFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFNhbXBsZUNvdmVyYWdlUGFyYW1zKEdM
Y2xhbXBmIHZhbHVlLCBib29sIGludmVydCk7Ci0KLSAgICB2b2lkIHNldFNjaXNzb3JUZXN0KGJv
b2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBzZXREaXRoZXIoYm9vbCBlbmFibGVkKTsKLSAgICBib29sIGlzRGl0aGVyRW5hYmxl
ZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRMaW5lV2lkdGgoR0xmbG9hdCB3aWR0aCk7Ci0KLSAg
ICB2b2lkIHNldEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCk7Ci0gICAgdm9pZCBzZXRG
cmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50KEdMZW51bSBoaW50KTsKLQotICAgIHZvaWQgc2V0
Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOwotCi0gICAgdm9pZCBzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZvaWQgc2V0Q29sb3JNYXNrKGJv
b2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwotICAgIHZvaWQgc2V0
RGVwdGhNYXNrKGJvb2wgbWFzayk7Ci0KLSAgICB2b2lkIHNldEFjdGl2ZVNhbXBsZXIodW5zaWdu
ZWQgaW50IGFjdGl2ZSk7Ci0KLSAgICBHTHVpbnQgZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkg
Y29uc3Q7Ci0gICAgR0x1aW50IGdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OwotICAg
IEdMdWludCBnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdDsKLQotICAgIEdMdWludCBnZXRB
cnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0OwotCi0gICAgR0x1aW50IGdldEFjdGl2ZVF1ZXJ5KEdM
ZW51bSB0YXJnZXQpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpOwotICAgIGNvbnN0IFZlcnRl
eEF0dHJpYnV0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7
Ci0gICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBC
dWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpOwotICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7Ci0KLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGVBcnJheSAmZ2V0VmVydGV4QXR0cmlidXRlcygpOwotCi0gICAgdm9pZCBzZXRVbnBhY2tBbGln
bm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKLSAgICBHTGludCBnZXRVbnBhY2tBbGlnbm1lbnQoKSBj
b25zdDsKLQotICAgIHZvaWQgc2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpOwotICAg
IEdMaW50IGdldFBhY2tBbGlnbm1lbnQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UGFja1JldmVy
c2VSb3dPcmRlcihib29sIHJldmVyc2VSb3dPcmRlcik7Ci0gICAgYm9vbCBnZXRQYWNrUmV2ZXJz
ZVJvd09yZGVyKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGVzZSBjcmVhdGUgIGFuZCBkZXN0cm95IG1l
dGhvZHMgYXJlIG1lcmVseSBwYXNzLXRocm91Z2hzIHRvIAotICAgIC8vIFJlc291cmNlTWFuYWdl
ciwgd2hpY2ggb3ducyB0aGVzZSBvYmplY3QgdHlwZXMKLSAgICBHTHVpbnQgY3JlYXRlQnVmZmVy
KCk7Ci0gICAgR0x1aW50IGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7Ci0gICAgR0x1aW50IGNy
ZWF0ZVByb2dyYW0oKTsKLSAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwotICAgIEdMdWludCBj
cmVhdGVSZW5kZXJidWZmZXIoKTsKLQotICAgIHZvaWQgZGVsZXRlQnVmZmVyKEdMdWludCBidWZm
ZXIpOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpOwotICAgIHZvaWQgZGVs
ZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKEdMdWlu
dCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVm
ZmVyKTsKLQotICAgIC8vIEZyYW1lYnVmZmVycyBhcmUgb3duZWQgYnkgdGhlIENvbnRleHQsIHNv
IHRoZXNlIG1ldGhvZHMgZG8gbm90IHBhc3MgdGhyb3VnaAotICAgIEdMdWludCBjcmVhdGVGcmFt
ZWJ1ZmZlcigpOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVy
KTsKLQotICAgIC8vIEZlbmNlcyBhcmUgb3duZWQgYnkgdGhlIENvbnRleHQuCi0gICAgR0x1aW50
IGNyZWF0ZUZlbmNlKCk7Ci0gICAgdm9pZCBkZWxldGVGZW5jZShHTHVpbnQgZmVuY2UpOwotICAg
IAotICAgIC8vIFF1ZXJpZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0OwotICAgIEdMdWludCBj
cmVhdGVRdWVyeSgpOwotICAgIHZvaWQgZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KTsKLQotICAg
IHZvaWQgYmluZEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOwotICAgIHZvaWQgYmluZEVsZW1l
bnRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlMkQoR0x1
aW50IHRleHR1cmUpOwotICAgIHZvaWQgYmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0dXJl
KTsKLSAgICB2b2lkIGJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKLSAg
ICB2b2lkIGJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKLSAgICB2b2lk
IGJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0gICAgdm9pZCB1c2VQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKLQotICAgIHZvaWQgYmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgcXVlcnkpOwotICAgIHZvaWQgZW5kUXVlcnkoR0xlbnVtIHRhcmdldCk7Ci0KLSAg
ICB2b2lkIHNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpOwotCi0g
ICAgdm9pZCBzZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJlbmRl
cmJ1ZmZlcik7Ci0KLSAgICB2b2lkIHNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlcyk7Ci0gICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWlu
dCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwotCi0gICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50
IGhhbmRsZSk7Ci0gICAgRmVuY2UgKmdldEZlbmNlKEdMdWludCBoYW5kbGUpOwotICAgIFNoYWRl
ciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOwotICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1
aW50IGhhbmRsZSk7Ci0gICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAg
ICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUmVuZGVy
YnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUXVlcnkgKmdldFF1
ZXJ5KEdMdWludCBoYW5kbGUsIGJvb2wgY3JlYXRlLCBHTGVudW0gdHlwZSk7Ci0KLSAgICBCdWZm
ZXIgKmdldEFycmF5QnVmZmVyKCk7Ci0gICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIo
KTsKLSAgICBQcm9ncmFtICpnZXRDdXJyZW50UHJvZ3JhbSgpOwotICAgIFRleHR1cmUyRCAqZ2V0
VGV4dHVyZTJEKCk7Ci0gICAgVGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJlTWFwKCk7Ci0g
ICAgVGV4dHVyZSAqZ2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1
cmVUeXBlIHR5cGUpOwotICAgIEZyYW1lYnVmZmVyICpnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAg
ICBGcmFtZWJ1ZmZlciAqZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBib29sIGdldEZsb2F0
dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7Ci0gICAgYm9vbCBnZXRJbnRlZ2VydihH
TGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVt
IHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcyk7Ci0KLSAgICBib29sIGdldFF1ZXJ5UGFyYW1ldGVy
SW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMp
OwotCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVm
U2l6ZSwgdm9pZCogcGl4ZWxzKTsKLSAgICB2b2lkIGNsZWFyKEdMYml0ZmllbGQgbWFzayk7Ci0g
ICAgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNp
emVpIGluc3RhbmNlcyk7Ci0gICAgdm9pZCBzeW5jKGJvb2wgYmxvY2spOyAgIC8vIGZsdXNoL2Zp
bmlzaAotCi0gICAgdm9pZCBkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4KTsKLQotICAgIHZvaWQgcmVjb3Jk
SW52YWxpZEVudW0oKTsKLSAgICB2b2lkIHJlY29yZEludmFsaWRWYWx1ZSgpOwotICAgIHZvaWQg
cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpOwotICAgIHZvaWQgcmVjb3JkT3V0T2ZNZW1vcnkoKTsK
LSAgICB2b2lkIHJlY29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOwotCi0gICAgR0xl
bnVtIGdldEVycm9yKCk7Ci0gICAgR0xlbnVtIGdldFJlc2V0U3RhdHVzKCk7Ci0gICAgdmlydHVh
bCBib29sIGlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCk7Ci0KLSAgICBib29sIHN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygp
IGNvbnN0OwotICAgIHVuc2lnbmVkIGludCBnZXRNYXhpbXVtVmVydGV4VGV4dHVyZUltYWdlVW5p
dHMoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMoKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpIGNv
bnN0OwotICAgIGludCBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0OwotICAgIGlu
dCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4
aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpIGNvbnN0OwotICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JN
QVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKLSAgICBjb25zdCBjaGFyICpnZXRFeHRl
bnNpb25TdHJpbmcoKSBjb25zdDsKLSAgICBjb25zdCBjaGFyICpnZXRSZW5kZXJlclN0cmluZygp
IGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25zdDsKLSAgICBib29s
IHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNEWFQx
VGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRFhUM1RleHR1cmVzKCkgY29uc3Q7
Ci0gICAgYm9vbCBzdXBwb3J0c0RYVDVUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9y
dHNGbG9hdDMyVGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzRmxvYXQzMkxpbmVh
ckZpbHRlcigpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1
cmVzKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpIGNvbnN0Owot
ICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkgY29uc3Q7Ci0gICAgYm9vbCBz
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBv
cnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNl
QWxwaGFUZXh0dXJlcygpIGNvbnN0OwotICAgIGJvb2wgc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkg
Y29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0OwotICAgIGJvb2wg
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0luc3Rh
bmNpbmcoKSBjb25zdDsKLQotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBH
TGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZ
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spOwotCi0gICAgQmxp
dCAqZ2V0QmxpdHRlcigpIHsgcmV0dXJuIG1CbGl0OyB9Ci0KLSAgICBjb25zdCBEM0RDQVBTOSAm
Z2V0RGV2aWNlQ2FwcygpIHsgcmV0dXJuIG1EZXZpY2VDYXBzOyB9Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29udGV4dCk7Ci0KLSAgICBib29sIGFwcGx5UmVu
ZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpOwotICAgIHZvaWQgYXBwbHlTdGF0ZShHTGVu
dW0gZHJhd01vZGUpOwotICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihHTGludCBmaXJzdCwg
R0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIEdMc2l6ZWkgKnJlcGVhdERyYXcpOwot
ICAgIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICpp
bmRleEluZm8pOwotICAgIHZvaWQgYXBwbHlTaGFkZXJzKCk7Ci0gICAgdm9pZCBhcHBseVRleHR1
cmVzKCk7Ci0gICAgdm9pZCBhcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpOwotCi0gICAg
dm9pZCBkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBkZXRhY2hUZXh0dXJl
KEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFt
ZWJ1ZmZlcik7Ci0gICAgdm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZl
cik7Ci0KLSAgICBUZXh0dXJlICpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0dXJlVHlwZSB0eXBl
KTsKLQotICAgIGJvb2wgY3VsbFNraXBzRHJhdyhHTGVudW0gZHJhd01vZGUpOwotICAgIGJvb2wg
aXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKTsKLQotICAgIHZvaWQgaW5pdEV4dGVuc2lv
blN0cmluZygpOwotICAgIHZvaWQgaW5pdFJlbmRlcmVyU3RyaW5nKCk7Ci0KLSAgICBjb25zdCBl
Z2w6OkNvbmZpZyAqY29uc3QgbUNvbmZpZzsKLSAgICBlZ2w6OkRpc3BsYXkgKm1EaXNwbGF5Owot
ICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7Ci0KLSAgICBTdGF0ZSBtU3RhdGU7Ci0KLSAg
ICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlMkQ+IG1UZXh0dXJlMkRaZXJvOwotICAgIEJpbmRpbmdQ
b2ludGVyPFRleHR1cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXBaZXJvOwotCi0gICAgdHlwZWRl
ZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgRnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1hcDsK
LSAgICBGcmFtZWJ1ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9y
IG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHR5cGVkZWYgc3RkZXh0OjpoYXNo
X21hcDxHTHVpbnQsIEZlbmNlKj4gRmVuY2VNYXA7Ci0gICAgRmVuY2VNYXAgbUZlbmNlTWFwOwot
ICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVm
IHN0ZGV4dDo6aGFzaF9tYXA8R0x1aW50LCBRdWVyeSo+IFF1ZXJ5TWFwOwotICAgIFF1ZXJ5TWFw
IG1RdWVyeU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yOwot
Ci0gICAgc3RkOjpzdHJpbmcgbUV4dGVuc2lvblN0cmluZzsKLSAgICBzdGQ6OnN0cmluZyBtUmVu
ZGVyZXJTdHJpbmc7Ci0KLSAgICBWZXJ0ZXhEYXRhTWFuYWdlciAqbVZlcnRleERhdGFNYW5hZ2Vy
OwotICAgIEluZGV4RGF0YU1hbmFnZXIgKm1JbmRleERhdGFNYW5hZ2VyOwotCi0gICAgQmxpdCAq
bUJsaXQ7Ci0KLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqbUxpbmVMb29wSUI7Ci0gICAgCi0g
ICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gbUluY29tcGxldGVUZXh0dXJlc1tURVhUVVJFX1RZ
UEVfQ09VTlRdOwotCi0gICAgLy8gUmVjb3JkZWQgZXJyb3JzCi0gICAgYm9vbCBtSW52YWxpZEVu
dW07Ci0gICAgYm9vbCBtSW52YWxpZFZhbHVlOwotICAgIGJvb2wgbUludmFsaWRPcGVyYXRpb247
Ci0gICAgYm9vbCBtT3V0T2ZNZW1vcnk7Ci0gICAgYm9vbCBtSW52YWxpZEZyYW1lYnVmZmVyT3Bl
cmF0aW9uOwotCi0gICAgLy8gQ3VycmVudC9sb3N0IGNvbnRleHQgZmxhZ3MKLSAgICBib29sIG1I
YXNCZWVuQ3VycmVudDsKLSAgICBib29sIG1Db250ZXh0TG9zdDsKLSAgICBHTGVudW0gbVJlc2V0
U3RhdHVzOwotICAgIEdMZW51bSBtUmVzZXRTdHJhdGVneTsKLSAgICBib29sIG1Sb2J1c3RBY2Nl
c3M7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRUZXh0dXJlU2VyaWFsUFNbTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFRleHR1cmVTZXJpYWxW
U1tNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGXTsKLSAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWRQcm9ncmFtU2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRh
cmdldFNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsK
LSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2VyaWFsOwotICAgIHVuc2ln
bmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAgIGJvb2wgbURlcHRoU3RlbmNpbEluaXRpYWxp
emVkOwotICAgIGJvb2wgbVZpZXdwb3J0SW5pdGlhbGl6ZWQ7Ci0gICAgRDNEVklFV1BPUlQ5IG1T
ZXRWaWV3cG9ydDsKLSAgICBib29sIG1SZW5kZXJUYXJnZXREZXNjSW5pdGlhbGl6ZWQ7Ci0gICAg
RDNEU1VSRkFDRV9ERVNDIG1SZW5kZXJUYXJnZXREZXNjOwotICAgIGJvb2wgbUR4VW5pZm9ybXNE
aXJ0eTsKLSAgICBQcm9ncmFtICptQ2FjaGVkQ3VycmVudFByb2dyYW07Ci0gICAgRnJhbWVidWZm
ZXIgKm1Cb3VuZERyYXdGcmFtZWJ1ZmZlcjsKLQotICAgIGJvb2wgbVN1cHBvcnRzU2hhZGVyTW9k
ZWwzOwotICAgIGJvb2wgbVN1cHBvcnRzVmVydGV4VGV4dHVyZTsKLSAgICBib29sIG1TdXBwb3J0
c05vblBvd2VyMlRleHR1cmU7Ci0gICAgYm9vbCBtU3VwcG9ydHNJbnN0YW5jaW5nOwotICAgIGlu
dCAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJlRGltZW5z
aW9uOwotICAgIGludCAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwotICAgIGludCAgbU1heFRl
eHR1cmVMZXZlbDsKLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxl
U3VwcG9ydDsKLSAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwotICAgIGJvb2wgbVN1
cHBvcnRzRXZlbnRRdWVyaWVzOwotICAgIGJvb2wgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllczsK
LSAgICBib29sIG1TdXBwb3J0c0RYVDFUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0RYVDNU
ZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0RYVDVUZXh0dXJlczsKLSAgICBib29sIG1TdXBw
b3J0c0Zsb2F0MzJUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0
ZXI7Ci0gICAgYm9vbCBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzOwotICAgIGJv
b2wgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzOwotICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNkxp
bmVhckZpbHRlcjsKLSAgICBib29sIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7
Ci0gICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKLSAgICBib29sIG1TdXBwb3J0
c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVz
OwotICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwotICAgIGludCBtTnVtQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzOwotCi0gICAgLy8gc3RhdGUgY2FjaGluZyBmbGFncwotICAgIGJvb2wg
bUNsZWFyU3RhdGVEaXJ0eTsKLSAgICBib29sIG1DdWxsU3RhdGVEaXJ0eTsKLSAgICBib29sIG1E
ZXB0aFN0YXRlRGlydHk7Ci0gICAgYm9vbCBtTWFza1N0YXRlRGlydHk7Ci0gICAgYm9vbCBtUGl4
ZWxQYWNraW5nU3RhdGVEaXJ0eTsKLSAgICBib29sIG1CbGVuZFN0YXRlRGlydHk7Ci0gICAgYm9v
bCBtU3RlbmNpbFN0YXRlRGlydHk7Ci0gICAgYm9vbCBtUG9seWdvbk9mZnNldFN0YXRlRGlydHk7
Ci0gICAgYm9vbCBtU2Npc3NvclN0YXRlRGlydHk7Ci0gICAgYm9vbCBtU2FtcGxlU3RhdGVEaXJ0
eTsKLSAgICBib29sIG1Gcm9udEZhY2VEaXJ0eTsKLSAgICBib29sIG1EaXRoZXJTdGF0ZURpcnR5
OwotCi0gICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKm1NYXNrZWRDbGVhclNhdmVkU3RhdGU7Ci0K
LSAgICBEM0RDQVBTOSBtRGV2aWNlQ2FwczsKLQotICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291
cmNlTWFuYWdlcjsKLQotICAgIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUgbVZlcnRleERlY2xhcmF0
aW9uQ2FjaGU7Ci19OwotfQotCi1leHRlcm4gIkMiCi17Ci0vLyBFeHBvcnRlZCBmdW5jdGlvbnMg
Zm9yIHVzZSBieSBFR0wKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKLXZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6
Q29udGV4dCAqY29udGV4dCk7Ci12b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKLWdsOjpD
b250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci1fX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5j
dGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnBy
b2NuYW1lKTsKLWJvb2wgX19zdGRjYWxsIGdsQmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSk7Ci19Ci0KLSNlbmRpZiAgIC8vIElOQ0xVREVfQ09OVEVYVF9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTRkMTIzOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGZW5jZS5jcHA6IEltcGxlbWVudHMgdGhlIGds
OjpGZW5jZSBjbGFzcywgd2hpY2ggc3VwcG9ydHMgdGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4K
LQotI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLUZlbmNlOjpGZW5jZShlZ2w6OkRpc3BsYXkqIGRp
c3BsYXkpCi17Ci0gICAgbURpc3BsYXkgPSBkaXNwbGF5OwotICAgIG1RdWVyeSA9IE5VTEw7Ci0g
ICAgbUNvbmRpdGlvbiA9IEdMX05PTkU7Ci0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotfQotCi1G
ZW5jZTo6fkZlbmNlKCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCi0gICAgewotICAgICAg
ICBtRGlzcGxheS0+ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICB9Ci19Ci0KLUdMYm9vbGVh
biBGZW5jZTo6aXNGZW5jZSgpCi17Ci0gICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBB
IG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVu
Y2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgotICAgIHJldHVybiBt
UXVlcnkgIT0gTlVMTDsKLX0KLQotdm9pZCBGZW5jZTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikKLXsKLSAgICBpZiAoIW1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeSA9IG1EaXNwbGF5
LT5hbGxvY2F0ZUV2ZW50UXVlcnkoKTsKLSAgICAgICAgaWYgKCFtUXVlcnkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQp
OwotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICBtQ29uZGl0aW9uID0gY29u
ZGl0aW9uOwotICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIEZlbmNlOjp0
ZXN0RmVuY2UoKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQotCi0gICAg
SFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNER0VUREFUQV9GTFVT
SCk7Ci0KLSAgICBpZiAoY2hlY2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgewotICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOwotICAgIG1TdGF0dXMgPSBy
ZXN1bHQgPT0gU19PSzsKLSAgICByZXR1cm4gbVN0YXR1czsKLX0KLQotdm9pZCBGZW5jZTo6Zmlu
aXNoRmVuY2UoKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0
ZXN0RmVuY2UoKSkKLSAgICB7Ci0gICAgICAgIFNsZWVwKDApOwotICAgIH0KLX0KLQotdm9pZCBG
ZW5jZTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYg
KG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgICAg
Y2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEdMX05W
X2ZlbmNlIHNwZWM6Ci0gICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBo
YXMgYmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJl
dHVybmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCi0gICAgICAgICAg
ICAvLyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBz
dGF0dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNl
LgotICAgICAgICAgICAgaWYgKG1TdGF0dXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIDApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hl
Y2tEZXZpY2VMb3N0KHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
U19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBtU3RhdHVzID0gcmVzdWx0
ID09IFNfT0s7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdHVzOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdMX0ZFTkNFX0NP
TkRJVElPTl9OVjoKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IG1Db25kaXRpb247Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk2MjZjYjAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gRmVuY2UuaDogRGVmaW5lcyB0aGUgZ2w6OkZl
bmNlIGNsYXNzLCB3aGljaCBzdXBwb3J0cyB0aGUgR0xfTlZfZmVuY2UgZXh0ZW5zaW9uLgotCi0j
aWZuZGVmIExJQkdMRVNWMl9GRU5DRV9IXwotI2RlZmluZSBMSUJHTEVTVjJfRkVOQ0VfSF8KLQot
I2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNk
OS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNwYWNlIGVnbAot
ewotY2xhc3MgRGlzcGxheTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIEZlbmNlCi17
Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZShlZ2w6OkRpc3BsYXkqIGRpc3BsYXkpOwot
ICAgIHZpcnR1YWwgfkZlbmNlKCk7Ci0KLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwotICAgIHZv
aWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7Ci0gICAgR0xib29sZWFuIHRlc3RGZW5jZSgp
OwotICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKTsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihGZW5jZSk7Ci0KLSAgICBlZ2w6OkRpc3BsYXkqIG1EaXNwbGF5OwotICAgIElEaXJl
Y3QzRFF1ZXJ5OSogbVF1ZXJ5OwotICAgIEdMZW51bSBtQ29uZGl0aW9uOwotICAgIEdMYm9vbGVh
biBtU3RhdHVzOwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfRkVOQ0VfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZm
ZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZDQyODMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1MDkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
RnJhbWVidWZmZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6RnJhbWVidWZmZXIgY2xhc3MuIElt
cGxlbWVudHMgR0wgZnJhbWVidWZmZXIKLS8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25h
bGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA1LgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvVGV4dHVyZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotbmFtZXNw
YWNlIGdsCi17Ci0KLUZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbUNvbG9yYnVm
ZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLX0KLQotRnJhbWVidWZmZXI6On5GcmFtZWJ1
ZmZlcigpCi17Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgbURlcHRo
YnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChO
VUxMKTsKLSAgICBtTnVsbENvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci19Ci0KLVJlbmRl
cmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1
aW50IGhhbmRsZSkgY29uc3QKLXsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7Ci0gICAgUmVuZGVyYnVmZmVyICpidWZmZXIgPSBOVUxMOwotCi0gICAgaWYgKHR5
cGUgPT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7Ci0gICAgfQotICAgIGVsc2UgaWYg
KElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHR5cGUpKQotICAgIHsKLSAgICAgICAgYnVmZmVyID0g
Y29udGV4dC0+Z2V0VGV4dHVyZShoYW5kbGUpLT5nZXRSZW5kZXJidWZmZXIodHlwZSk7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGJ1ZmZlcjsKLX0KLQotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIoR0xl
bnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcikKLXsKLSAgICBtQ29sb3JidWZmZXJUeXBlID0g
KGNvbG9yYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbUNvbG9yYnVmZmVyUG9p
bnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7Ci19Ci0KLXZv
aWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhi
dWZmZXIpCi17Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZlciAhPSAwKSA/IHR5
cGUgOiBHTF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1
ZmZlcih0eXBlLCBkZXB0aGJ1ZmZlcikpOwotfQotCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRTdGVu
Y2lsYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcikKLXsKLSAgICBtU3Rl
bmNpbGJ1ZmZlclR5cGUgPSAoc3RlbmNpbGJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwot
ICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0
ZW5jaWxidWZmZXIpKTsKLX0KLQotdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoVGV4dHVyZShHTHVp
bnQgdGV4dHVyZSkKLXsKLSAgICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1
cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCi0gICAgewot
ICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbUNvbG9yYnVmZmVy
UG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIu
aWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5
cGUpKQotICAgIHsKLSAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAg
IG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtU3RlbmNp
bGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0
KG1TdGVuY2lsYnVmZmVyVHlwZSkpCi0gICAgewotICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUg
PSBHTF9OT05FOwotICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAg
IH0KLX0KLQotdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5k
ZXJidWZmZXIpCi17Ci0gICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJi
dWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgewotICAg
ICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbUNvbG9yYnVmZmVyUG9p
bnRlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQo
KSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
Ci0gICAgewotICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbURl
cHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0g
R0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xf
Tk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci19
Ci0KLXVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCkKLXsK
LSAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQo
KTsKLQotICAgIGlmIChjb2xvcmJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb2xvcmJ1
ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXQoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZm
ZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gTlVMTDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNl
OSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwotICAgIAotICAg
IGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQotICAgIHsKLSAgICAgICAgZGVwdGhzdGVuY2lsYnVm
ZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOwotICAgIH0KLQotICAgIGlmIChkZXB0
aHN0ZW5jaWxidWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZGVwdGhzdGVuY2lsYnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdW5z
aWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpCi17Ci0gICAgUmVu
ZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAg
ICBpZiAoZGVwdGhidWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZGVwdGhidWZmZXItPmdl
dFNlcmlhbCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBpbnQgRnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAq
c3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKLQotICAgIGlmIChz
dGVuY2lsYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXItPmdldFNl
cmlhbCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1SZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRDb2xvcmJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50
ZXIuZ2V0KCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
KCkKLXsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKLX0KLQotUmVuZGVy
YnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKLX0KLQotUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0TnVsbENvbG9yYnVmZmVyKCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKm51bGxidWZmZXIg
ID0gbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0gICAgUmVuZGVyYnVmZmVyICpkZXB0
aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7Ci0KLSAgICBpZiAoIWRlcHRoYnVmZmVyKQotICAg
IHsKLSAgICAgICAgRVJSKCJVbmV4cGVjdGVkIG51bGwgZGVwdGhidWZmZXIgZm9yIGRlcHRoLW9u
bHkgRkJPLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBHTHNpemVpIHdp
ZHRoICA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZGVw
dGhidWZmZXItPmdldEhlaWdodCgpOwotCi0gICAgaWYgKCFudWxsYnVmZmVyIHx8Ci0gICAgICAg
IHdpZHRoICE9IG51bGxidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IG51bGxidWZmZXIt
PmdldEhlaWdodCgpKQotICAgIHsKLSAgICAgICAgbnVsbGJ1ZmZlciA9IG5ldyBSZW5kZXJidWZm
ZXIoMCwgbmV3IENvbG9yYnVmZmVyKHdpZHRoLCBoZWlnaHQsIEdMX05PTkUsIDApKTsKLSAgICAg
ICAgbU51bGxDb2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG51bGxidWZmZXIpOwotICAgIH0KLQotICAg
IHJldHVybiBudWxsYnVmZmVyOwotfQotCi1HTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVm
ZmVyVHlwZSgpCi17Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGU7Ci19Ci0KLUdMZW51bSBG
cmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkKLXsKLSAgICByZXR1cm4gbURlcHRoYnVm
ZmVyVHlwZTsKLX0KLQotR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZSgp
Ci17Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKLX0KLQotR0x1aW50IEZyYW1lYnVm
ZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSgpCi17Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBv
aW50ZXIuaWQoKTsKLX0KLQotR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckhhbmRs
ZSgpCi17Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKTsKLX0KLQotR0x1aW50
IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbVN0
ZW5jaWxidWZmZXJQb2ludGVyLmlkKCk7Ci19Ci0KLWJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5j
aWwoKQotewotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKLSAgICB7Ci0g
ICAgICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlck9iamVjdCA9IGdldFN0ZW5jaWxidWZm
ZXIoKTsKLQotICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlck9iamVjdCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxTaXplKCkgPiAw
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1HTGVudW0gRnJh
bWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCi17Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGhlaWdodCA9IDA7
Ci0gICAgaW50IHNhbXBsZXMgPSAtMTsKLSAgICBib29sIG1pc3NpbmdBdHRhY2htZW50ID0gdHJ1
ZTsKLQotICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCi0gICAgewotICAgICAg
ICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIoKTsKLQotICAgICAg
ICBpZiAoIWNvbG9yYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdldEhlaWdodCgp
ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUNvbG9yYnVmZmVy
VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ2w6
OklzQ29sb3JSZW5kZXJhYmxlKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBjb2xvcmJ1ZmZlci0+Z2V0SW50
ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQgPSBjb2xvcmJ1
ZmZlci0+Z2V0RDNERm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoaW50
ZXJuYWxmb3JtYXQpIHx8Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQUxQ
SEEgfHwKLSAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgfHwK
LSAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKGR4MmVzOjpJc0Zsb2F0
MzJGb3JtYXQoZDNkZm9ybWF0KSAmJiAhY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJs
ZVRleHR1cmVzKCkpIHx8Ci0gICAgICAgICAgICAgICAgKGR4MmVzOjpJc0Zsb2F0MTZGb3JtYXQo
ZDNkZm9ybWF0KSAmJiAhY29udGV4dC0+c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVz
KCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGR4MmVzOjpJ
c0RlcHRoVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpIHx8IGR4MmVzOjpJc1N0ZW5jaWxUZXh0dXJl
Rm9ybWF0KGQzZGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgo
KTsKLSAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICBz
YW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgbWlzc2luZ0F0dGFj
aG1lbnQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0g
TlVMTDsKLSAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBOVUxMOwotCi0gICAgaWYg
KG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIGRlcHRoYnVmZmVy
ID0gZ2V0RGVwdGhidWZmZXIoKTsKLQotICAgICAgICBpZiAoIWRlcHRoYnVmZmVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpID09
IDAgfHwgZGVwdGhidWZmZXItPmdldEhlaWdodCgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVm
ZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0
KG1EZXB0aGJ1ZmZlclR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RGT1JNQVQgZDNk
Zm9ybWF0ID0gZGVwdGhidWZmZXItPmdldEQzREZvcm1hdCgpOwotCi0gICAgICAgICAgICAvLyBk
ZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUK
LSAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfQVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFkeDJlczo6
SXNEZXB0aFRleHR1cmVGb3JtYXQoZDNkZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWlzc2luZ0F0dGFj
aG1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gZGVwdGhidWZmZXItPmdldFdp
ZHRoKCk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0g
ICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAg
ICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAod2lkdGggIT0gZGVwdGhidWZmZXItPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGRlcHRoYnVm
ZmVyLT5nZXRIZWlnaHQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FOR0xF
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9O
T05FKQotICAgIHsKLSAgICAgICAgc3RlbmNpbGJ1ZmZlciA9IGdldFN0ZW5jaWxidWZmZXIoKTsK
LQotICAgICAgICBpZiAoIXN0ZW5jaWxidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKSA9PSAwIHx8IHN0ZW5jaWxidWZm
ZXItPmdldEhlaWdodCgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2lsYnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2ls
YnVmZmVyVHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEQzREZPUk1BVCBkM2Rmb3JtYXQg
PSBzdGVuY2lsYnVmZmVyLT5nZXREM0RGb3JtYXQoKTsKLQotICAgICAgICAgICAgLy8gdGV4dHVy
ZSBzdGVuY2lsIGF0dGFjaG1lbnRzIGNvbWUgYWxvbmcgYXMgcGFydAotICAgICAgICAgICAgLy8g
b2YgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICsgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKLSAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFkeDJlczo6SXNT
dGVuY2lsVGV4dHVyZUZvcm1hdChkM2Rmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtaXNzaW5nQXR0YWNo
bWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgd2lkdGggPSBzdGVuY2lsYnVmZmVyLT5nZXRX
aWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7
Ci0gICAgICAgICAgICBzYW1wbGVzID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAg
ICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmICh3aWR0aCAhPSBzdGVuY2lsYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBz
dGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElT
QU1QTEVfQU5HTEU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBpZiB3ZSBoYXZlIGJvdGgg
YSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHRoZXkgbXVzdCByZWZlciB0byB0aGUgc2FtZSBv
YmplY3QKLSAgICAvLyBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgcGFja2VkX2RlcHRoX3N0ZW5jaWwg
YW5kIG5vdCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbAotICAgIGlmIChkZXB0aGJ1ZmZlciAm
JiBzdGVuY2lsYnVmZmVyICYmIChkZXB0aGJ1ZmZlciAhPSBzdGVuY2lsYnVmZmVyKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICB9Ci0KLSAg
ICAvLyB3ZSBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGF0dGFjaG1lbnQgdG8gYmUgY29tcGxl
dGUKLSAgICBpZiAobWlzc2luZ0F0dGFjaG1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwotfQotCi1EZWZhdWx0RnJhbWVidWZmZXI6
OkRlZmF1bHRGcmFtZWJ1ZmZlcihDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIsIERlcHRoU3RlbmNp
bGJ1ZmZlciAqZGVwdGhTdGVuY2lsKQotewotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG5l
dyBSZW5kZXJidWZmZXIoMCwgY29sb3JidWZmZXIpKTsKLQotICAgIFJlbmRlcmJ1ZmZlciAqZGVw
dGhTdGVuY2lsUmVuZGVyYnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigwLCBkZXB0aFN0ZW5jaWwp
OwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7
Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIp
OwotCi0gICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZFUjsKLSAgICBtRGVwdGhi
dWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkgIT0g
MCkgPyBHTF9SRU5ERVJCVUZGRVIgOiBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9
IChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXplKCkgIT0gMCkgPyBHTF9S
RU5ERVJCVUZGRVIgOiBHTF9OT05FOwotfQotCi1pbnQgRnJhbWVidWZmZXI6OmdldFNhbXBsZXMo
KQotewotICAgIGlmIChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCk7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotR0xl
bnVtIERlZmF1bHRGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKLXsKLSAgICAvLyBUaGUgZGVm
YXVsdCBmcmFtZWJ1ZmZlciBzaG91bGQgYWx3YXlzIGJlIGNvbXBsZXRlCi0gICAgQVNTRVJUKEZy
YW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSk7Ci0K
LSAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkOWMyYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw5OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGcmFtZWJ1ZmZlci5oOiBE
ZWZpbmVzIHRoZSBnbDo6RnJhbWVidWZmZXIgY2xhc3MuIEltcGxlbWVudHMgR0wgZnJhbWVidWZm
ZXIKLS8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAu
MjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA1LgotCi0jaWZuZGVmIExJQkdMRVNWMl9GUkFNRUJVRkZF
Ul9IXwotI2RlZmluZSBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KLQotI2RlZmluZSBHTF9BUElD
QUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci1jbGFzcyBDb2xvcmJ1
ZmZlcjsKLWNsYXNzIERlcHRoYnVmZmVyOwotY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIERl
cHRoU3RlbmNpbGJ1ZmZlcjsKLQotY2xhc3MgRnJhbWVidWZmZXIKLXsKLSAgcHVibGljOgotICAg
IEZyYW1lYnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIH5GcmFtZWJ1ZmZlcigpOwotCi0gICAgdm9p
ZCBzZXRDb2xvcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyKTsKLSAgICB2
b2lkIHNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhidWZmZXIpOwotICAg
IHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIp
OwotCi0gICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRl
dGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVw
dGhTdGVuY2lsKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7
Ci0gICAgdW5zaWduZWQgaW50IGdldERlcHRoYnVmZmVyU2VyaWFsKCk7Ci0gICAgdW5zaWduZWQg
aW50IGdldFN0ZW5jaWxidWZmZXJTZXJpYWwoKTsKLQotICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29s
b3JidWZmZXIoKTsKLSAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7Ci0gICAgUmVu
ZGVyYnVmZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7Ci0gICAgUmVuZGVyYnVmZmVyICpnZXROdWxs
Q29sb3JidWZmZXIoKTsKLQotICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKLSAgICBH
TGVudW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7Ci0gICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJU
eXBlKCk7Ci0KLSAgICBHTHVpbnQgZ2V0Q29sb3JidWZmZXJIYW5kbGUoKTsKLSAgICBHTHVpbnQg
Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbGJ1ZmZlckhhbmRs
ZSgpOwotCi0gICAgYm9vbCBoYXNTdGVuY2lsKCk7Ci0gICAgaW50IGdldFNhbXBsZXMoKTsKLQot
ICAgIHZpcnR1YWwgR0xlbnVtIGNvbXBsZXRlbmVzcygpOwotCi0gIHByb3RlY3RlZDoKLSAgICBH
TGVudW0gbUNvbG9yYnVmZmVyVHlwZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+
IG1Db2xvcmJ1ZmZlclBvaW50ZXI7Ci0KLSAgICBHTGVudW0gbURlcHRoYnVmZmVyVHlwZTsKLSAg
ICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1EZXB0aGJ1ZmZlclBvaW50ZXI7Ci0KLSAg
ICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1
ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOwotCi0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVy
YnVmZmVyPiBtTnVsbENvbG9yYnVmZmVyUG9pbnRlcjsKLQotICBwcml2YXRlOgotICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7Ci0KLSAgICBSZW5kZXJidWZmZXIgKmxv
b2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3Q7Ci19Owot
Ci1jbGFzcyBEZWZhdWx0RnJhbWVidWZmZXIgOiBwdWJsaWMgRnJhbWVidWZmZXIKLXsKLSAgcHVi
bGljOgotICAgIERlZmF1bHRGcmFtZWJ1ZmZlcihDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIsIERl
cHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2lsKTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGNv
bXBsZXRlbmVzcygpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KERlZmF1bHRGcmFtZWJ1ZmZlcik7Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9G
UkFNRUJVRkZFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjNDk4ZjhhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIEhhbmRsZUFsbG9jYXRvci5jcHA6IEltcGxlbWVu
dHMgdGhlIGdsOjpIYW5kbGVBbGxvY2F0b3IgY2xhc3MsIHdoaWNoIGlzIHVzZWQKLS8vIHRvIGFs
bG9jYXRlIEdMIGhhbmRsZXMuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9y
LmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQot
SGFuZGxlQWxsb2NhdG9yOjpIYW5kbGVBbGxvY2F0b3IoKSA6IG1CYXNlVmFsdWUoMSksIG1OZXh0
VmFsdWUoMSkKLXsKLX0KLQotSGFuZGxlQWxsb2NhdG9yOjp+SGFuZGxlQWxsb2NhdG9yKCkKLXsK
LX0KLQotdm9pZCBIYW5kbGVBbGxvY2F0b3I6OnNldEJhc2VIYW5kbGUoR0x1aW50IHZhbHVlKQot
ewotICAgIEFTU0VSVChtQmFzZVZhbHVlID09IG1OZXh0VmFsdWUpOwotICAgIG1CYXNlVmFsdWUg
PSB2YWx1ZTsKLSAgICBtTmV4dFZhbHVlID0gdmFsdWU7Ci19Ci0KLUdMdWludCBIYW5kbGVBbGxv
Y2F0b3I6OmFsbG9jYXRlKCkKLXsKLSAgICBpZiAobUZyZWVWYWx1ZXMuc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgR0x1aW50IGhhbmRsZSA9IG1GcmVlVmFsdWVzLmJhY2soKTsKLSAgICAgICAgbUZy
ZWVWYWx1ZXMucG9wX2JhY2soKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICB9Ci0gICAg
cmV0dXJuIG1OZXh0VmFsdWUrKzsKLX0KLQotdm9pZCBIYW5kbGVBbGxvY2F0b3I6OnJlbGVhc2Uo
R0x1aW50IGhhbmRsZSkKLXsKLSAgICBpZiAoaGFuZGxlID09IG1OZXh0VmFsdWUgLSAxKQotICAg
IHsKLSAgICAgICAgLy8gRG9uJ3QgZHJvcCBiZWxvdyBiYXNlIHZhbHVlCi0gICAgICAgIGlmKG1O
ZXh0VmFsdWUgPiBtQmFzZVZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtTmV4dFZhbHVl
LS07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy8gT25seSBm
cmVlIGhhbmRsZXMgdGhhdCB3ZSBvd24gLSBkb24ndCBkcm9wIGJlbG93IHRoZSBiYXNlIHZhbHVl
Ci0gICAgICAgIGlmIChoYW5kbGUgPj0gbUJhc2VWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbUZyZWVWYWx1ZXMucHVzaF9iYWNrKGhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFu
ZGxlQWxsb2NhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hh
bmRsZUFsbG9jYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTJlMTY4Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxl
QWxsb2NhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwotCi0vLyBIYW5kbGVBbGxvY2F0b3IuaDogRGVmaW5lcyB0aGUgZ2w6OkhhbmRsZUFsbG9j
YXRvciBjbGFzcywgd2hpY2ggaXMgdXNlZCB0bwotLy8gYWxsb2NhdGUgR0wgaGFuZGxlcy4KLQot
I2lmbmRlZiBMSUJHTEVTVjJfSEFORExFQUxMT0NBVE9SX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9I
QU5ETEVBTExPQ0FUT1JfSF8KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+Ci0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotY2xhc3MgSGFuZGxlQWxsb2NhdG9yCi17Ci0gIHB1
YmxpYzoKLSAgICBIYW5kbGVBbGxvY2F0b3IoKTsKLSAgICB2aXJ0dWFsIH5IYW5kbGVBbGxvY2F0
b3IoKTsKLQotICAgIHZvaWQgc2V0QmFzZUhhbmRsZShHTHVpbnQgdmFsdWUpOwotCi0gICAgR0x1
aW50IGFsbG9jYXRlKCk7Ci0gICAgdm9pZCByZWxlYXNlKEdMdWludCBoYW5kbGUpOwotCi0gIHBy
aXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEhhbmRsZUFsbG9jYXRvcik7Ci0K
LSAgICBHTHVpbnQgbUJhc2VWYWx1ZTsKLSAgICBHTHVpbnQgbU5leHRWYWx1ZTsKLSAgICB0eXBl
ZGVmIHN0ZDo6dmVjdG9yPEdMdWludD4gSGFuZGxlTGlzdDsKLSAgICBIYW5kbGVMaXN0IG1GcmVl
VmFsdWVzOwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfSEFORExFQUxMT0NBVE9S
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0lu
ZGV4RGF0YU1hbmFnZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9JbmRleERhdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Rj
MGFlZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0luZGV4RGF0YU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8vIEluZGV4RGF0YU1hbmFnZXIuY3BwOiBEZWZpbmVzIHRoZSBJ
bmRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKLS8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xh
dGlvbiBwcm9jZXNzIGZvciBpbmRleCBidWZmZXJzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0lu
ZGV4RGF0YU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdW5zaWduZWQg
aW50IEluZGV4QnVmZmVyOjptQ3VycmVudFNlcmlhbCA9IDE7Ci0KLUluZGV4RGF0YU1hbmFnZXI6
OkluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlKSA6IG1EZXZpY2UoZGV2aWNlKQotewotICAgIG1TdHJlYW1pbmdCdWZmZXJTaG9ydCA9IG5l
dyBTdHJlYW1pbmdJbmRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX0lOREVYX0JVRkZFUl9TSVpF
LCBEM0RGTVRfSU5ERVgxNik7Ci0KLSAgICBpZiAoY29udGV4dC0+c3VwcG9ydHMzMmJpdEluZGlj
ZXMoKSkKLSAgICB7Ci0gICAgICAgIG1TdHJlYW1pbmdCdWZmZXJJbnQgPSBuZXcgU3RyZWFtaW5n
SW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lO
REVYMzIpOwotCi0gICAgICAgIGlmICghbVN0cmVhbWluZ0J1ZmZlckludCkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gRG9uJ3QgbGVhdmUgaXQgaW4gYSBoYWxmLWluaXRpYWxpemVkIHN0YXRl
Ci0gICAgICAgICAgICBkZWxldGUgbVN0cmVhbWluZ0J1ZmZlclNob3J0OwotICAgICAgICAgICAg
bVN0cmVhbWluZ0J1ZmZlclNob3J0ID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBtU3RyZWFtaW5nQnVmZmVySW50ID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1TdHJlYW1pbmdCdWZmZXJTaG9ydCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVk
IHRvIGFsbG9jYXRlIHRoZSBzdHJlYW1pbmcgaW5kZXggYnVmZmVyKHMpLiIpOwotICAgIH0KLQot
ICAgIG1Db3VudGluZ0J1ZmZlciA9IE5VTEw7Ci19Ci0KLUluZGV4RGF0YU1hbmFnZXI6On5JbmRl
eERhdGFNYW5hZ2VyKCkKLXsKLSAgICBkZWxldGUgbVN0cmVhbWluZ0J1ZmZlclNob3J0OwotICAg
IGRlbGV0ZSBtU3RyZWFtaW5nQnVmZmVySW50OwotICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZmZXI7
Ci19Ci0KLXZvaWQgY29udmVydEluZGljZXMoR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0
LCBHTHNpemVpIGNvdW50LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgaWYgKHR5cGUgPT0gR0xfVU5T
SUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IEdMdWJ5dGUgKmluID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1Ynl0ZSo+KGlucHV0KTsKLSAgICAgICAgR0x1c2hvcnQgKm91dCA9IHN0YXRp
Y19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKLQotICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRbaV0gPSBpbltpXTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCkK
LSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIHNpemVvZihHTHVp
bnQpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCkKLSAg
ICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIHNpemVvZihHTHVzaG9y
dCkpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBJbmRleFR5cGU+Ci12b2lkIGNvbXB1dGVSYW5nZShjb25zdCBJbmRleFR5cGUgKmluZGljZXMs
IEdMc2l6ZWkgY291bnQsIEdMdWludCAqbWluSW5kZXgsIEdMdWludCAqbWF4SW5kZXgpCi17Ci0g
ICAgKm1pbkluZGV4ID0gaW5kaWNlc1swXTsKLSAgICAqbWF4SW5kZXggPSBpbmRpY2VzWzBdOwot
Ci0gICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAg
IGlmICgqbWluSW5kZXggPiBpbmRpY2VzW2ldKSAqbWluSW5kZXggPSBpbmRpY2VzW2ldOwotICAg
ICAgICBpZiAoKm1heEluZGV4IDwgaW5kaWNlc1tpXSkgKm1heEluZGV4ID0gaW5kaWNlc1tpXTsK
LSAgICB9Ci19Ci0KLXZvaWQgY29tcHV0ZVJhbmdlKEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMdWludCAqbWluSW5kZXgsIEdMdWludCAqbWF4SW5k
ZXgpCi17Ci0gICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAg
IGNvbXB1dGVSYW5nZShzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oaW5kaWNlcyksIGNvdW50
LCBtaW5JbmRleCwgbWF4SW5kZXgpOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX1VO
U0lHTkVEX0lOVCkKLSAgICB7Ci0gICAgICAgIGNvbXB1dGVSYW5nZShzdGF0aWNfY2FzdDxjb25z
dCBHTHVpbnQqPihpbmRpY2VzKSwgY291bnQsIG1pbkluZGV4LCBtYXhJbmRleCk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpCi0gICAgewotICAgICAgICBj
b21wdXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKSwgY291bnQs
IG1pbkluZGV4LCBtYXhJbmRleCk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLX0K
LQotR0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdGEoR0xlbnVtIHR5cGUs
IEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYnVmZmVyLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIFRy
YW5zbGF0ZWRJbmRleERhdGEgKnRyYW5zbGF0ZWQpCi17Ci0gICAgaWYgKCFtU3RyZWFtaW5nQnVm
ZmVyU2hvcnQpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLSAgICB9
Ci0KLSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSA/IEQz
REZNVF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTY7Ci0gICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5kaWNlcyk7Ci0gICAgYm9vbCBhbGlnbmVkT2Zmc2V0
ID0gZmFsc2U7Ci0KLSAgICBpZiAoYnVmZmVyICE9IE5VTEwpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICBh
bGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAlIHNpemVvZihHTHVieXRlKSA9PSAwKTsgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IGFsaWduZWRPZmZzZXQgPSAob2Zmc2V0
ICUgc2l6ZW9mKEdMdXNob3J0KSA9PSAwKTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6ICAgYWxpZ25lZE9mZnNldCA9IChvZmZzZXQgJSBzaXplb2YoR0x1aW50KSA9PSAw
KTsgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBhbGlnbmVkT2Zm
c2V0ID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZVNpemUodHlwZSkgKiBj
b3VudCArIG9mZnNldCA+IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihidWZmZXItPnNpemUoKSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGluZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4o
YnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0OwotICAgIH0KLQotICAgIFN0cmVhbWluZ0luZGV4QnVm
ZmVyICpzdHJlYW1pbmdCdWZmZXIgPSAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpID8gbVN0cmVh
bWluZ0J1ZmZlckludCA6IG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKLQotICAgIFN0YXRpY0luZGV4
QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZmZXItPmdldFN0YXRpY0luZGV4QnVm
ZmVyKCkgOiBOVUxMOwotICAgIEluZGV4QnVmZmVyICppbmRleEJ1ZmZlciA9IHN0cmVhbWluZ0J1
ZmZlcjsKLSAgICBVSU5UIHN0cmVhbU9mZnNldCA9IDA7Ci0KLSAgICBpZiAoc3RhdGljQnVmZmVy
ICYmIHN0YXRpY0J1ZmZlci0+bG9va3VwVHlwZSh0eXBlKSAmJiBhbGlnbmVkT2Zmc2V0KQotICAg
IHsKLSAgICAgICAgaW5kZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXI7Ci0gICAgICAgIHN0cmVhbU9m
ZnNldCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwUmFuZ2Uob2Zmc2V0LCBjb3VudCwgJnRyYW5zbGF0
ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOwotCi0gICAgICAgIGlmIChzdHJl
YW1PZmZzZXQgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChv
ZmZzZXQgLyB0eXBlU2l6ZSh0eXBlKSkgKiBpbmRleFNpemUoZm9ybWF0KTsKLSAgICAgICAgICAg
IGNvbXB1dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4
LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOwotICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5hZGRS
YW5nZShvZmZzZXQsIGNvdW50LCB0cmFuc2xhdGVkLT5taW5JbmRleCwgdHJhbnNsYXRlZC0+bWF4
SW5kZXgsIHN0cmVhbU9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgaW50IGNvbnZlcnRDb3VudCA9IGNvdW50OwotCi0gICAgICAgIGlmIChzdGF0aWNC
dWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXItPnNpemUoKSA9
PSAwICYmIGFsaWduZWRPZmZzZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5k
ZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXI7Ci0gICAgICAgICAgICAgICAgY29udmVydENvdW50ID0g
YnVmZmVyLT5zaXplKCkgLyB0eXBlU2l6ZSh0eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBidWZmZXItPmludmFsaWRh
dGVTdGF0aWNEYXRhKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGljQnVmZmVyID0gTlVMTDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgKm91dHB1dCA9IE5VTEw7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoaW5kZXhCdWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGluZGV4QnVmZmVyLT5yZXNlcnZlU3BhY2UoY29udmVydENvdW50ICogaW5kZXhTaXplKGZvcm1h
dCksIHR5cGUpOwotICAgICAgICAgICAgb3V0cHV0ID0gaW5kZXhCdWZmZXItPm1hcChpbmRleFNp
emUoZm9ybWF0KSAqIGNvbnZlcnRDb3VudCwgJnN0cmVhbU9mZnNldCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbWFwIGluZGV4IGJ1ZmZlci4iKTsKLSAgICAgICAgICAgIHJldHVy
biBHTF9PVVRfT0ZfTUVNT1JZOwotICAgICAgICB9Ci0KLSAgICAgICAgY29udmVydEluZGljZXMo
dHlwZSwgc3RhdGljQnVmZmVyID8gYnVmZmVyLT5kYXRhKCkgOiBpbmRpY2VzLCBjb252ZXJ0Q291
bnQsIG91dHB1dCk7Ci0gICAgICAgIGluZGV4QnVmZmVyLT51bm1hcCgpOwotCi0gICAgICAgIGNv
bXB1dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAm
dHJhbnNsYXRlZC0+bWF4SW5kZXgpOwotCi0gICAgICAgIGlmIChzdGF0aWNCdWZmZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyB0eXBlU2l6ZSh0eXBl
KSkgKiBpbmRleFNpemUoZm9ybWF0KTsKLSAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+YWRkUmFu
Z2Uob2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsIHRyYW5zbGF0ZWQtPm1heElu
ZGV4LCBzdHJlYW1PZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdHJhbnNsYXRlZC0+
aW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Ci0gICAgdHJhbnNsYXRlZC0+
c2VyaWFsID0gaW5kZXhCdWZmZXItPmdldFNlcmlhbCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0
SW5kZXggPSBzdHJlYW1PZmZzZXQgLyBpbmRleFNpemUoZm9ybWF0KTsKLQotICAgIGlmIChidWZm
ZXIpCi0gICAgewotICAgICAgICBidWZmZXItPnByb21vdGVTdGF0aWNVc2FnZShjb3VudCAqIHR5
cGVTaXplKHR5cGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXN0
ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OmluZGV4U2l6ZShEM0RGT1JNQVQgZm9ybWF0KSBj
b25zdAotewotICAgIHJldHVybiAoZm9ybWF0ID09IEQzREZNVF9JTkRFWDMyKSA/IHNpemVvZih1
bnNpZ25lZCBpbnQpIDogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLX0KLQotc3RkOjpzaXplX3Qg
SW5kZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgIHJldHVybiBz
aXplb2YoR0x1aW50KTsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBzaXpl
b2YoR0x1c2hvcnQpOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgcmV0dXJuIHNpemVv
ZihHTHVieXRlKTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBzaXplb2Yo
R0x1c2hvcnQpOwotICAgIH0KLX0KLQotU3RhdGljSW5kZXhCdWZmZXIgKkluZGV4RGF0YU1hbmFn
ZXI6OmdldENvdW50aW5nSW5kaWNlcyhHTHNpemVpIGNvdW50KQotewotICAgIGlmIChjb3VudCA8
PSA2NTUzNikgICAvLyAxNi1iaXQgaW5kaWNlcwotICAgIHsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IHNwYWNlTmVlZGVkID0gY291bnQgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwotCi0g
ICAgICAgIGlmICghbUNvdW50aW5nQnVmZmVyIHx8IG1Db3VudGluZ0J1ZmZlci0+c2l6ZSgpIDwg
c3BhY2VOZWVkZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZm
ZXI7Ci0gICAgICAgICAgICBtQ291bnRpbmdCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhCdWZmZXIo
bURldmljZSk7Ci0gICAgICAgICAgICBtQ291bnRpbmdCdWZmZXItPnJlc2VydmVTcGFjZShzcGFj
ZU5lZWRlZCwgR0xfVU5TSUdORURfU0hPUlQpOwotCi0gICAgICAgICAgICBVSU5UIG9mZnNldDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQqPihtQ291bnRpbmdCdWZmZXItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOwotICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgbUNvdW50aW5nQnVmZmVyLT51bm1hcCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKG1TdHJlYW1pbmdCdWZmZXJJbnQpICAgLy8gMzIt
Yml0IGluZGljZXMgc3VwcG9ydGVkCi0gICAgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
c3BhY2VOZWVkZWQgPSBjb3VudCAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotCi0gICAgICAgIGlm
ICghbUNvdW50aW5nQnVmZmVyIHx8IG1Db3VudGluZ0J1ZmZlci0+c2l6ZSgpIDwgc3BhY2VOZWVk
ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZmZXI7Ci0gICAg
ICAgICAgICBtQ291bnRpbmdCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhCdWZmZXIobURldmljZSk7
Ci0gICAgICAgICAgICBtQ291bnRpbmdCdWZmZXItPnJlc2VydmVTcGFjZShzcGFjZU5lZWRlZCwg
R0xfVU5TSUdORURfSU5UKTsKLQotICAgICAgICAgICAgVUlOVCBvZmZzZXQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgKmRhdGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtQ291bnRp
bmdCdWZmZXItPm1hcChzcGFjZU5lZWRlZCwgJm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChkYXRhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvcihpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YVtpXSA9IGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIG1Db3VudGluZ0J1ZmZlci0+dW5tYXAoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIHJldHVybiBOVUxMOwotICAgIAotICAgIHJldHVybiBt
Q291bnRpbmdCdWZmZXI7Ci19Ci0KLUluZGV4QnVmZmVyOjpJbmRleEJ1ZmZlcihJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UsIFVJTlQgc2l6ZSwgRDNERk9STUFUIGZvcm1hdCkgOiBtRGV2aWNlKGRl
dmljZSksIG1CdWZmZXJTaXplKHNpemUpLCBtSW5kZXhCdWZmZXIoTlVMTCkKLXsKLSAgICBpZiAo
c2l6ZSA+IDApCi0gICAgewotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXREaXNwbGF5KCktPmdl
dEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSk7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihzaXplLCBEM0RV
U0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZLCBmb3JtYXQsIHBvb2wsICZtSW5kZXhC
dWZmZXIsIE5VTEwpOwotICAgICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKLQotICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT3V0IG9m
IG1lbW9yeSBhbGxvY2F0aW5nIGFuIGluZGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotSW5kZXhCdWZmZXI6On5JbmRleEJ1ZmZlcigpCi17Ci0g
ICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFz
ZSgpOwotICAgIH0KLX0KLQotSURpcmVjdDNESW5kZXhCdWZmZXI5ICpJbmRleEJ1ZmZlcjo6Z2V0
QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluZGV4QnVmZmVyOwotfQotCi11bnNpZ25l
ZCBpbnQgSW5kZXhCdWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXJp
YWw7Ci19Ci0KLXVuc2lnbmVkIGludCBJbmRleEJ1ZmZlcjo6aXNzdWVTZXJpYWwoKQotewotICAg
IHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwotfQotCi12b2lkIEluZGV4QnVmZmVyOjp1bm1hcCgp
Ci17Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+
VW5sb2NrKCk7Ci0gICAgfQotfQotCi1TdHJlYW1pbmdJbmRleEJ1ZmZlcjo6U3RyZWFtaW5nSW5k
ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIGluaXRpYWxTaXplLCBEM0RG
T1JNQVQgZm9ybWF0KSA6IEluZGV4QnVmZmVyKGRldmljZSwgaW5pdGlhbFNpemUsIGZvcm1hdCkK
LXsKLSAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Ci19Ci0KLVN0cmVhbWluZ0luZGV4QnVmZmVyOjp+
U3RyZWFtaW5nSW5kZXhCdWZmZXIoKQotewotfQotCi12b2lkICpTdHJlYW1pbmdJbmRleEJ1ZmZl
cjo6bWFwKFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KQotewotICAgIHZvaWQgKm1h
cFB0ciA9IE5VTEw7Ci0KLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtSW5kZXhCdWZmZXItPkxvY2sobVdyaXRlUG9zaXRpb24sIHJlcXVpcmVk
U3BhY2UsICZtYXBQdHIsIEQzRExPQ0tfTk9PVkVSV1JJVEUpOwotICAgICAKLSAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIiBMb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICAgICAgfQotCi0gICAgICAgICpvZmZzZXQgPSBtV3JpdGVQb3NpdGlvbjsKLSAgICAgICAg
bVdyaXRlUG9zaXRpb24gKz0gcmVxdWlyZWRTcGFjZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFw
UHRyOwotfQotCi12b2lkIFN0cmVhbWluZ0luZGV4QnVmZmVyOjpyZXNlcnZlU3BhY2UoVUlOVCBy
ZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSkKLXsKLSAgICBpZiAocmVxdWlyZWRTcGFjZSA+IG1C
dWZmZXJTaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtSW5kZXhC
dWZmZXIgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSBzdGQ6Om1h
eChyZXF1aXJlZFNwYWNlLCAyICogbUJ1ZmZlclNpemUpOwotCi0gICAgICAgIEQzRFBPT0wgcG9v
bCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNB
R0VfV1JJVEVPTkxZKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJ
bmRleEJ1ZmZlcihtQnVmZmVyU2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRF
T05MWSwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlQgPyBEM0RGTVRfSU5ERVgzMiA6IEQzREZNVF9J
TkRFWDE2LCBwb29sLCAmbUluZGV4QnVmZmVyLCBOVUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlz
c3VlU2VyaWFsKCk7Ci0gICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVm
ZmVyIG9mIHNpemUgJWx1LiIsIG1CdWZmZXJTaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1X
cml0ZVBvc2l0aW9uID0gMDsKLSAgICB9Ci0gICAgZWxzZSBpZiAobVdyaXRlUG9zaXRpb24gKyBy
ZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpICAgLy8gUmVjeWNsZQotICAgIHsKLSAgICAgICAg
dm9pZCAqZHVtbXk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQz
RExPQ0tfRElTQ0FSRCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0KLSAgICAg
ICAgbVdyaXRlUG9zaXRpb24gPSAwOwotICAgIH0KLX0KLQotU3RhdGljSW5kZXhCdWZmZXI6OlN0
YXRpY0luZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSkgOiBJbmRleEJ1ZmZlcihk
ZXZpY2UsIDAsIEQzREZNVF9VTktOT1dOKQotewotICAgIG1DYWNoZVR5cGUgPSBHTF9OT05FOwot
fQotCi1TdGF0aWNJbmRleEJ1ZmZlcjo6flN0YXRpY0luZGV4QnVmZmVyKCkKLXsKLX0KLQotdm9p
ZCAqU3RhdGljSW5kZXhCdWZmZXI6Om1hcChVSU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQgKm9mZnNl
dCkKLXsKLSAgICB2b2lkICptYXBQdHIgPSBOVUxMOwotCi0gICAgaWYgKG1JbmRleEJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKDAsIHJl
cXVpcmVkU3BhY2UsICZtYXBQdHIsIDApOwotICAgICAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIiBMb2NrIGZhaWxlZCB3aXRoIGVycm9y
IDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQot
Ci0gICAgICAgICpvZmZzZXQgPSAwOwotICAgIH0KLQotICAgIHJldHVybiBtYXBQdHI7Ci19Ci0K
LXZvaWQgU3RhdGljSW5kZXhCdWZmZXI6OnJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2Us
IEdMZW51bSB0eXBlKQotewotICAgIGlmICghbUluZGV4QnVmZmVyICYmIG1CdWZmZXJTaXplID09
IDApCi0gICAgewotICAgICAgICBEM0RQT09MIHBvb2wgPSBnZXREaXNwbGF5KCktPmdldEJ1ZmZl
clBvb2woRDNEVVNBR0VfV1JJVEVPTkxZKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihyZXF1aXJlZFNwYWNlLCBEM0RVU0FHRV9XUklURU9OTFks
IHR5cGUgPT0gR0xfVU5TSUdORURfSU5UID8gRDNERk1UX0lOREVYMzIgOiBEM0RGTVRfSU5ERVgx
NiwgcG9vbCwgJm1JbmRleEJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgIG1TZXJpYWwgPSBpc3N1ZVNl
cmlhbCgpOwotICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBv
ZiBzaXplICVsdS4iLCBtQnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQnVmZmVy
U2l6ZSA9IHJlcXVpcmVkU3BhY2U7Ci0gICAgICAgIG1DYWNoZVR5cGUgPSB0eXBlOwotICAgIH0K
LSAgICBlbHNlIGlmIChtSW5kZXhCdWZmZXIgJiYgbUJ1ZmZlclNpemUgPj0gcmVxdWlyZWRTcGFj
ZSAmJiBtQ2FjaGVUeXBlID09IHR5cGUpCi0gICAgewotICAgICAgICAvLyBBbHJlYWR5IGFsbG9j
YXRlZAotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU3RhdGljIGluZGV4IGJ1
ZmZlcnMgY2FuJ3QgYmUgcmVzaXplZAotfQotCi1ib29sIFN0YXRpY0luZGV4QnVmZmVyOjpsb29r
dXBUeXBlKEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBtQ2FjaGVUeXBlID09IHR5cGU7Ci19
Ci0KLVVJTlQgU3RhdGljSW5kZXhCdWZmZXI6Omxvb2t1cFJhbmdlKGludHB0cl90IG9mZnNldCwg
R0xzaXplaSBjb3VudCwgVUlOVCAqbWluSW5kZXgsIFVJTlQgKm1heEluZGV4KQotewotICAgIElu
ZGV4UmFuZ2UgcmFuZ2UgPSB7b2Zmc2V0LCBjb3VudH07Ci0KLSAgICBzdGQ6Om1hcDxJbmRleFJh
bmdlLCBJbmRleFJlc3VsdD46Oml0ZXJhdG9yIHJlcyA9IG1DYWNoZS5maW5kKHJhbmdlKTsKLSAg
ICAKLSAgICBpZiAocmVzID09IG1DYWNoZS5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0KLSAgICAqbWluSW5kZXggPSByZXMtPnNlY29uZC5taW5JbmRleDsKLSAgICAq
bWF4SW5kZXggPSByZXMtPnNlY29uZC5tYXhJbmRleDsKLSAgICByZXR1cm4gcmVzLT5zZWNvbmQu
c3RyZWFtT2Zmc2V0OwotfQotCi12b2lkIFN0YXRpY0luZGV4QnVmZmVyOjphZGRSYW5nZShpbnRw
dHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQsIFVJTlQgbWluSW5kZXgsIFVJTlQgbWF4SW5kZXgs
IFVJTlQgc3RyZWFtT2Zmc2V0KQotewotICAgIEluZGV4UmFuZ2UgaW5kZXhSYW5nZSA9IHtvZmZz
ZXQsIGNvdW50fTsKLSAgICBJbmRleFJlc3VsdCBpbmRleFJlc3VsdCA9IHttaW5JbmRleCwgbWF4
SW5kZXgsIHN0cmVhbU9mZnNldH07Ci0gICAgbUNhY2hlW2luZGV4UmFuZ2VdID0gaW5kZXhSZXN1
bHQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvSW5kZXhEYXRhTWFuYWdlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGMxZDQxNjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9JbmRleERhdGFNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gSW5kZXhEYXRhTWFuYWdlci5oOiBEZWZpbmVzIHRoZSBJ
bmRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKLS8vIHJ1bnMgdGhlIEJ1ZmZlciB0cmFuc2xh
dGlvbiBwcm9jZXNzIGZvciBpbmRleCBidWZmZXJzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9JTkRF
WERBVEFNQU5BR0VSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9JTkRFWERBVEFNQU5BR0VSX0hfCi0K
LSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2RlZmluZSBHTF9BUElD
QUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgotCi1uYW1lc3BhY2UKLXsKLSAgICBlbnVtIHsgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0la
RSA9IDQwOTYgKiBzaXplb2YoR0x1aW50KSB9OwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLQotc3Ry
dWN0IFRyYW5zbGF0ZWRJbmRleERhdGEKLXsKLSAgICBVSU5UIG1pbkluZGV4OwotICAgIFVJTlQg
bWF4SW5kZXg7Ci0gICAgVUlOVCBzdGFydEluZGV4OwotCi0gICAgSURpcmVjdDNESW5kZXhCdWZm
ZXI5ICppbmRleEJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgc2VyaWFsOwotfTsKLQotY2xhc3Mg
SW5kZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAgIEluZGV4QnVmZmVyKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSwgVUlOVCBzaXplLCBEM0RGT1JNQVQgZm9ybWF0KTsKLSAgICB2aXJ0dWFsIH5J
bmRleEJ1ZmZlcigpOwotCi0gICAgVUlOVCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNp
emU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgKm1hcChVSU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQgKm9m
ZnNldCkgPSAwOwotICAgIHZvaWQgdW5tYXAoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2ZVNw
YWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpID0gMDsKLQotICAgIElEaXJlY3Qz
REluZGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IGdldFNl
cmlhbCgpIGNvbnN0OwotCi0gIHByb3RlY3RlZDoKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpjb25z
dCBtRGV2aWNlOwotCi0gICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhCdWZmZXI7Ci0g
ICAgVUlOVCBtQnVmZmVyU2l6ZTsKLQotICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOwotICAgIHN0
YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50
IG1DdXJyZW50U2VyaWFsOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKEluZGV4QnVmZmVyKTsKLX07Ci0KLWNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVyIDogcHVi
bGljIEluZGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlcihJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFVJTlQgaW5pdGlhbFNpemUsIEQzREZPUk1BVCBmb3Jt
YXQpOwotICAgIH5TdHJlYW1pbmdJbmRleEJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCB2b2lkICpt
YXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBVSU5UIG1Xcml0ZVBvc2l0aW9uOwotfTsKLQotY2xhc3MgU3RhdGljSW5kZXhCdWZm
ZXIgOiBwdWJsaWMgSW5kZXhCdWZmZXIKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFN0YXRp
Y0luZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7Ci0gICAgflN0YXRpY0luZGV4
QnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgKm1hcChVSU5UIHJlcXVpcmVkU3BhY2UsIFVJ
TlQgKm9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVk
U3BhY2UsIEdMZW51bSB0eXBlKTsKLQotICAgIGJvb2wgbG9va3VwVHlwZShHTGVudW0gdHlwZSk7
Ci0gICAgVUlOVCBsb29rdXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQsIFVJ
TlQgKm1pbkluZGV4LCBVSU5UICptYXhJbmRleCk7ICAgLy8gUmV0dXJucyB0aGUgb2Zmc2V0IGlu
dG8gdGhlIGluZGV4IGJ1ZmZlciwgb3IgLTEgaWYgbm90IGZvdW5kCi0gICAgdm9pZCBhZGRSYW5n
ZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQsIFVJTlQgbWluSW5kZXgsIFVJTlQgbWF4
SW5kZXgsIFVJTlQgc3RyZWFtT2Zmc2V0KTsKLQotICBwcml2YXRlOgotICAgIEdMZW51bSBtQ2Fj
aGVUeXBlOwotICAgIAotICAgIHN0cnVjdCBJbmRleFJhbmdlCi0gICAgewotICAgICAgICBpbnRw
dHJfdCBvZmZzZXQ7Ci0gICAgICAgIEdMc2l6ZWkgY291bnQ7Ci0KLSAgICAgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgSW5kZXhSYW5nZSYgcmhzKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAob2Zmc2V0ICE9IHJocy5vZmZzZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG9mZnNldCA8IHJocy5vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoY291bnQgIT0gcmhzLmNvdW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBjb3VudCA8IHJocy5jb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgSW5kZXhSZXN1bHQK
LSAgICB7Ci0gICAgICAgIFVJTlQgbWluSW5kZXg7Ci0gICAgICAgIFVJTlQgbWF4SW5kZXg7Ci0g
ICAgICAgIFVJTlQgc3RyZWFtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBzdGQ6Om1hcDxJbmRleFJh
bmdlLCBJbmRleFJlc3VsdD4gbUNhY2hlOwotfTsKLQotY2xhc3MgSW5kZXhEYXRhTWFuYWdlcgot
ewotICBwdWJsaWM6Ci0gICAgSW5kZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJRGly
ZWN0M0REZXZpY2U5ICpldmljZSk7Ci0gICAgdmlydHVhbCB+SW5kZXhEYXRhTWFuYWdlcigpOwot
Ci0gICAgR0xlbnVtIHByZXBhcmVJbmRleERhdGEoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQs
IEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIFRyYW5z
bGF0ZWRJbmRleERhdGEgKnRyYW5zbGF0ZWQpOwotICAgIFN0YXRpY0luZGV4QnVmZmVyICpnZXRD
b3VudGluZ0luZGljZXMoR0xzaXplaSBjb3VudCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oSW5kZXhEYXRhTWFuYWdlcik7Ci0KLSAgICBzdGQ6OnNpemVfdCB0
eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7Ci0gICAgc3RkOjpzaXplX3QgaW5kZXhTaXplKEQz
REZPUk1BVCBmb3JtYXQpIGNvbnN0OwotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURl
dmljZTsKLQotICAgIFN0cmVhbWluZ0luZGV4QnVmZmVyICptU3RyZWFtaW5nQnVmZmVyU2hvcnQ7
Ci0gICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKm1TdHJlYW1pbmdCdWZmZXJJbnQ7Ci0gICAgU3Rh
dGljSW5kZXhCdWZmZXIgKm1Db3VudGluZ0J1ZmZlcjsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8g
TElCR0xFU1YyX0lOREVYREFUQU1BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmMjhhOWQ4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MDcgKzAsMCBAQAotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gUHJvZ3JhbS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpQcm9n
cmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cwotLy8gYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjgu
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNw
YWNlIGdsCi17Ci1jb25zdCBjaGFyICogY29uc3QgZ19mYWtlcGF0aCA9ICJDOlxcZmFrZXBhdGgi
OwotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6bUN1cnJlbnRTZXJpYWwgPSAxOwotCi1BdHRyaWJ1
dGVCaW5kaW5nczo6QXR0cmlidXRlQmluZGluZ3MoKQotewotfQotCi1BdHRyaWJ1dGVCaW5kaW5n
czo6fkF0dHJpYnV0ZUJpbmRpbmdzKCkKLXsKLX0KLQotSW5mb0xvZzo6SW5mb0xvZygpIDogbUlu
Zm9Mb2coTlVMTCkKLXsKLX0KLQotSW5mb0xvZzo6fkluZm9Mb2coKQotewotICAgIGRlbGV0ZVtd
IG1JbmZvTG9nOwotfQotCi0KLWludCBJbmZvTG9nOjpnZXRMZW5ndGgoKSBjb25zdAotewotICAg
IGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQotfQot
Ci12b2lkIEluZm9Mb2c6OmdldExvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZykKLXsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgaWYgKGJ1ZlNpemUg
PiAwKQotICAgIHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xvZykpOwot
ICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0
aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLS8vIGFwcGVu
ZCBhIHNhbnRpemVkIG1lc3NhZ2UgdG8gdGhlIHByb2dyYW0gaW5mbyBsb2cuCi0vLyBUaGUgRDNE
IGNvbXBpbGVyIGluY2x1ZGVzIGEgZmFrZSBmaWxlIHBhdGggaW4gc29tZSBvZiB0aGUgd2Fybmlu
ZyBvciBlcnJvciAKLS8vIG1lc3NhZ2VzLCBzbyBsZXRzIHJlbW92ZSBhbGwgb2NjdXJyZW5jZXMg
b2YgdGhpcyBmYWtlIGZpbGUgcGF0aCBmcm9tIHRoZSBsb2cuCi12b2lkIEluZm9Mb2c6OmFwcGVu
ZFNhbml0aXplZChjb25zdCBjaGFyICptZXNzYWdlKQotewotICAgIHN0ZDo6c3RyaW5nIG1zZyht
ZXNzYWdlKTsKLQotICAgIHNpemVfdCBmb3VuZDsKLSAgICBkbwotICAgIHsKLSAgICAgICAgZm91
bmQgPSBtc2cuZmluZChnX2Zha2VwYXRoKTsKLSAgICAgICAgaWYgKGZvdW5kICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKQotICAgICAgICB7Ci0gICAgICAgICAgICBtc2cuZXJhc2UoZm91bmQsIHN0cmxl
bihnX2Zha2VwYXRoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKGZvdW5kICE9IHN0
ZDo6c3RyaW5nOjpucG9zKTsKLQotICAgIGFwcGVuZCgiJXNcbiIsIG1zZy5jX3N0cigpKTsKLX0K
LQotdm9pZCBJbmZvTG9nOjphcHBlbmQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gICAg
aWYgKCFmb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciBp
bmZvWzEwMjRdOwotCi0gICAgdmFfbGlzdCB2YXJhcmc7Ci0gICAgdmFfc3RhcnQodmFyYXJnLCBm
b3JtYXQpOwotICAgIHZzbnByaW50ZihpbmZvLCBzaXplb2YoaW5mbyksIGZvcm1hdCwgdmFyYXJn
KTsKLSAgICB2YV9lbmQodmFyYXJnKTsKLQotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVu
KGluZm8pOwotCi0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIG1JbmZvTG9nID0g
bmV3IGNoYXJbaW5mb0xlbmd0aCArIDFdOwotICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8p
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzaXplX3QgbG9nTGVuZ3RoID0gc3Ry
bGVuKG1JbmZvTG9nKTsKLSAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbG9nTGVuZ3Ro
ICsgaW5mb0xlbmd0aCArIDFdOwotICAgICAgICBzdHJjcHkobmV3TG9nLCBtSW5mb0xvZyk7Ci0g
ICAgICAgIHN0cmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8pOwotCi0gICAgICAgIGRlbGV0
ZVtdIG1JbmZvTG9nOwotICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKLSAgICB9Ci19Ci0KLXZv
aWQgSW5mb0xvZzo6cmVzZXQoKQotewotICAgIGlmIChtSW5mb0xvZykKLSAgICB7Ci0gICAgICAg
IGRlbGV0ZSBbXSBtSW5mb0xvZzsKLSAgICAgICAgbUluZm9Mb2cgPSBOVUxMOwotICAgIH0KLX0K
LQotUHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5k
bGUpIDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFs
KGlzc3VlU2VyaWFsKCkpCi17Ci0gICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICBtVmVy
dGV4U2hhZGVyID0gTlVMTDsKLSAgICBtUHJvZ3JhbUJpbmFyeSA9IE5VTEw7Ci0gICAgbURlbGV0
ZVN0YXR1cyA9IGZhbHNlOwotICAgIG1SZWZDb3VudCA9IDA7Ci19Ci0KLVByb2dyYW06On5Qcm9n
cmFtKCkKLXsKLSAgICB1bmxpbmsodHJ1ZSk7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlciAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLQot
ICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1GcmFnbWVu
dFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFk
ZXIoU2hhZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZF
UlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRl
eFNoYWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+
YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1G
cmFnbWVudFNoYWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOwotICAgICAgICBtRnJhZ21l
bnRTaGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpz
aGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIp
Ci0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhT
aGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAg
ICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJhZ21lbnRT
aGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICB9
Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQ
cm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICht
VmVydGV4U2hhZGVyID8gMSA6IDApICsgKG1GcmFnbWVudFNoYWRlciA/IDEgOiAwKTsKLX0KLQot
dm9pZCBBdHRyaWJ1dGVCaW5kaW5nczo6YmluZEF0dHJpYnV0ZUxvY2F0aW9uKEdMdWludCBpbmRl
eCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBpZiAoaW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlMpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtQXR0cmlidXRlQmluZGluZ1tpXS5lcmFz
ZShuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1BdHRyaWJ1dGVCaW5kaW5nW2luZGV4XS5p
bnNlcnQobmFtZSk7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmJpbmRBdHRyaWJ1dGVMb2Nh
dGlvbihHTHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgbUF0dHJpYnV0ZUJp
bmRpbmdzLmJpbmRBdHRyaWJ1dGVMb2NhdGlvbihpbmRleCwgbmFtZSk7Ci19Ci0KLS8vIExpbmtz
IHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBhbmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5n
IHVwIHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGlsaW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0
ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5ncywgYW5kIGNvbGxlY3RpbmcKLS8vIGEgbGlz
dCBvZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjpsaW5rKCkKLXsKLSAgICB1bmxpbmsoZmFsc2Up
OwotCi0gICAgbUluZm9Mb2cucmVzZXQoKTsKLQotICAgIG1Qcm9ncmFtQmluYXJ5ID0gbmV3IFBy
b2dyYW1CaW5hcnk7Ci0gICAgaWYgKCFtUHJvZ3JhbUJpbmFyeS0+bGluayhtSW5mb0xvZywgbUF0
dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIpKQotICAgIHsK
LSAgICAgICAgdW5saW5rKGZhbHNlKTsKLSAgICB9Ci19Ci0KLWludCBBdHRyaWJ1dGVCaW5kaW5n
czo6Z2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKLXsK
LSAgICBmb3IgKGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0
aW9uXS5maW5kKG5hbWUpICE9IG1BdHRyaWJ1dGVCaW5kaW5nW2xvY2F0aW9uXS5lbmQoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBSZXR1cm5zIHRoZSBwcm9ncmFtIG9iamVjdCB0byBh
biB1bmxpbmtlZCBzdGF0ZSwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCi12
b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCi17Ci0gICAgaWYgKGRlc3Ryb3kpICAg
Ly8gT2JqZWN0IGJlaW5nIGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRT
aGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgp
OwotICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtVmVydGV4U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4U2hh
ZGVyLT5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIGRl
bGV0ZSBtUHJvZ3JhbUJpbmFyeTsKLSAgICAgICAgbVByb2dyYW1CaW5hcnkgPSBOVUxMOwotICAg
IH0KLX0KLQotUHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSgpCi17Ci0g
ICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5OwotfQotCi12b2lkIFByb2dyYW06OnNldFByb2dyYW1C
aW5hcnkoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKLXsKLSAgICB1bmxpbmsoZmFsc2Up
OwotICAgIG1Qcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbUJpbmFyeTsKLX0KLQotdm9pZCBQcm9ncmFt
OjpyZWxlYXNlKCkKLXsKLSAgICBtUmVmQ291bnQtLTsKLQotICAgIGlmIChtUmVmQ291bnQgPT0g
MCAmJiBtRGVsZXRlU3RhdHVzKQotICAgIHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVs
ZXRlUHJvZ3JhbShtSGFuZGxlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YWRkUmVmKCkK
LXsKLSAgICBtUmVmQ291bnQrKzsKLX0KLQotdW5zaWduZWQgaW50IFByb2dyYW06OmdldFJlZkNv
dW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlZkNvdW50OwotfQotCi11bnNpZ25lZCBpbnQg
UHJvZ3JhbTo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNlcmlhbDsKLX0KLQot
dW5zaWduZWQgaW50IFByb2dyYW06Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJl
bnRTZXJpYWwrKzsKLX0KLQotaW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAot
ewotICAgIHJldHVybiBtSW5mb0xvZy5nZXRMZW5ndGgoKTsKLX0KLQotdm9pZCBQcm9ncmFtOjpn
ZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9n
KQotewotICAgIHJldHVybiBtSW5mb0xvZy5nZXRMb2coYnVmU2l6ZSwgbGVuZ3RoLCBpbmZvTG9n
KTsKLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3Vu
dCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycykKLXsKLSAgICBpbnQgdG90YWwgPSAw
OwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90YWwgPCBt
YXhDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBtVmVydGV4
U2hhZGVyLT5nZXRIYW5kbGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRvdGFsKys7Ci0gICAg
fQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAgICB7Ci0gICAgICAgIGlmICh0b3RhbCA8
IG1heENvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9IG1GcmFn
bWVudFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbCsrOwot
ICAgIH0KLQotICAgIGlmIChjb3VudCkKLSAgICB7Ci0gICAgICAgICpjb3VudCA9IHRvdGFsOwot
ICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAq
dHlwZSwgR0xjaGFyICpuYW1lKQotewotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0g
ICAgICAgIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGUoaW5kZXgsIGJ1ZnNpemUs
IGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGlmIChidWZzaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZVswXSA9ICdc
MCc7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgICpsZW5ndGggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgKnR5cGUgPSBH
TF9OT05FOwotICAgICAgICAqc2l6ZSA9IDE7Ci0gICAgfQotfQotCi1HTGludCBQcm9ncmFtOjpn
ZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCi17Ci0gICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3Vu
dCgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19
Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCi17Ci0gICAg
aWYgKG1Qcm9ncmFtQmluYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9ncmFtQmluYXJ5
LT5nZXRBY3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmdldEFjdGl2ZVVu
aWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xp
bnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAgIGlmIChtUHJvZ3Jh
bUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZl
VW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPiAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBuYW1lWzBdID0gJ1wwJzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZW5n
dGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGggPSAwOwotICAgICAgICB9Ci0KLSAg
ICAgICAgKnNpemUgPSAwOwotICAgICAgICAqdHlwZSA9IEdMX05PTkU7Ci0gICAgfQotfQotCi1H
TGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotewotICAgIGlmIChtUHJvZ3Jh
bUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZl
VW5pZm9ybUNvdW50KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgp
Ci17Ci0gICAgaWYgKG1Qcm9ncmFtQmluYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9n
cmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpmbGFn
Rm9yRGVsZXRpb24oKQotewotICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOwotfQotCi1ib29sIFBy
b2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURlbGV0
ZVN0YXR1czsKLX0KLQotdm9pZCBQcm9ncmFtOjp2YWxpZGF0ZSgpCi17Ci0gICAgbUluZm9Mb2cu
cmVzZXQoKTsKLQotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIG1Qcm9n
cmFtQmluYXJ5LT52YWxpZGF0ZShtSW5mb0xvZyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIG1JbmZvTG9nLmFwcGVuZCgiUHJvZ3JhbSBoYXMgbm90IGJlZW4gc3VjY2Vzc2Z1bGx5
IGxpbmtlZC4iKTsKLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25z
dAotewotICAgIGlmIChtUHJvZ3JhbUJpbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUHJv
Z3JhbUJpbmFyeS0+aXNWYWxpZGF0ZWQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjQ0NzMxZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBQcm9ncmFtLmg6IERlZmluZXMgdGhlIGdsOjpQcm9ncmFtIGNsYXNz
LiBJbXBsZW1lbnRzIEdMIHByb2dyYW0gb2JqZWN0cwotLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25h
bGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCi0KLSNpZm5k
ZWYgTElCR0xFU1YyX1BST0dSQU1fSF8KLSNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KLQot
I2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHNldD4KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFJlc291cmNlTWFuYWdlcjsKLWNsYXNzIEZy
YWdtZW50U2hhZGVyOwotY2xhc3MgVmVydGV4U2hhZGVyOwotCi1leHRlcm4gY29uc3QgY2hhciAq
IGNvbnN0IGdfZmFrZXBhdGg7Ci0KLWNsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzCi17Ci0gIHB1Ymxp
YzoKLSAgICBBdHRyaWJ1dGVCaW5kaW5ncygpOwotICAgIH5BdHRyaWJ1dGVCaW5kaW5ncygpOwot
Ci0gICAgdm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFy
ICpuYW1lKTsKLSAgICBpbnQgZ2V0QXR0cmlidXRlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbUF0
dHJpYnV0ZUJpbmRpbmdbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLX07Ci0KLWNsYXNzIEluZm9Mb2cK
LXsKLSAgcHVibGljOgotICAgIEluZm9Mb2coKTsKLSAgICB+SW5mb0xvZygpOwotCi0gICAgaW50
IGdldExlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0TG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKLQotICAgIHZvaWQgYXBwZW5kU2FuaXRpemVk
KGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIgKmluZm8s
IC4uLik7Ci0gICAgdm9pZCByZXNldCgpOwotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihJbmZvTG9nKTsKLSAgICBjaGFyICptSW5mb0xvZzsKLX07Ci0KLWNsYXNzIFBy
b2dyYW0KLXsKLSAgcHVibGljOgotICAgIFByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2Vy
LCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIH5Qcm9ncmFtKCk7Ci0KLSAgICBib29sIGF0dGFjaFNo
YWRlcihTaGFkZXIgKnNoYWRlcik7Ci0gICAgYm9vbCBkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFk
ZXIpOwotICAgIGludCBnZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpIGNvbnN0OwotCi0gICAgdm9p
ZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lKTsK
LQotICAgIHZvaWQgbGluaygpOwotICAgIHZvaWQgc2V0UHJvZ3JhbUJpbmFyeShQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5
KCk7Ci0KLSAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0SW5m
b0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7Ci0g
ICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xzaXplaSAqY291
bnQsIEdMdWludCAqc2hhZGVycyk7Ci0KLSAgICB2b2lkIGdldEFjdGl2ZUF0dHJpYnV0ZShHTHVp
bnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwg
R0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpOwotICAgIEdMaW50IGdldEFjdGl2ZUF0dHJpYnV0
ZUNvdW50KCk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7Ci0KLSAg
ICB2b2lkIGdldEFjdGl2ZVVuaWZvcm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsK
LSAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKLSAgICBHTGludCBnZXRBY3RpdmVV
bmlmb3JtTWF4TGVuZ3RoKCk7Ci0KLSAgICB2b2lkIGFkZFJlZigpOwotICAgIHZvaWQgcmVsZWFz
ZSgpOwotICAgIHVuc2lnbmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OwotICAgIHZvaWQgZmxh
Z0ZvckRlbGV0aW9uKCk7Ci0gICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0Owot
Ci0gICAgdm9pZCB2YWxpZGF0ZSgpOwotICAgIGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKLQot
ICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKLQotICAgIHZvaWQgdW5saW5rKGJvb2wg
ZGVzdHJveSA9IGZhbHNlKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwo
KTsKLQotICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7Ci0gICAgVmVydGV4U2hh
ZGVyICptVmVydGV4U2hhZGVyOwotCi0gICAgQXR0cmlidXRlQmluZGluZ3MgbUF0dHJpYnV0ZUJp
bmRpbmdzOwotCi0gICAgUHJvZ3JhbUJpbmFyeSogbVByb2dyYW1CaW5hcnk7Ci0gICAgYm9vbCBt
RGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvZ3JhbSBjYW4g
YmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKLQotICAgIHVuc2lnbmVkIGludCBtUmVm
Q291bnQ7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKLQotICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7Ci0KLSAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNv
dXJjZU1hbmFnZXI7Ci0gICAgY29uc3QgR0x1aW50IG1IYW5kbGU7Ci0KLSAgICBJbmZvTG9nIG1J
bmZvTG9nOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dSQU1fSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzI4ZTUxLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDgwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIFByb2dyYW0uY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVt
ZW50cyBHTCBwcm9ncmFtIG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgot
Ci0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpZiAhZGVmaW5lZChBTkdMRV9DT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTCkKLSNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCi0jZW5kaWYKLQotbmFtZXNw
YWNlIGdsCi17Ci1zdGQ6OnN0cmluZyBzdHIoaW50IGkpCi17Ci0gICAgY2hhciBidWZmZXJbMjBd
OwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOwotICAgIHJl
dHVybiBidWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0
ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlw
ZSksIF9uYW1lKF9uYW1lKSwgbmFtZShQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShf
bmFtZSkpLCBhcnJheVNpemUoYXJyYXlTaXplKQotewotICAgIGludCBieXRlcyA9IFVuaWZvcm1J
bnRlcm5hbFNpemUodHlwZSkgKiBhcnJheVNpemU7Ci0gICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBj
aGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAgIGRpcnR5ID0gdHJ1
ZTsKLX0KLQotVW5pZm9ybTo6flVuaWZvcm0oKQotewotICAgIGRlbGV0ZVtdIGRhdGE7Ci19Ci0K
LWJvb2wgVW5pZm9ybTo6aXNBcnJheSgpCi17Ci0gICAgcmV0dXJuIF9uYW1lLmNvbXBhcmUoMCwg
MywgImFyXyIpID09IDA7Ci19Ci0KLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNv
bnN0IHN0ZDo6c3RyaW5nICZfbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGlu
dCBpbmRleCkgCi0gICAgOiBuYW1lKFByb2dyYW1CaW5hcnk6OnVuZGVjb3JhdGVVbmlmb3JtKF9u
YW1lKSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQotewotfQotCi1Qcm9ncmFtQmlu
YXJ5OjpQcm9ncmFtQmluYXJ5KCkKLXsKLSAgICBtRGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAg
ICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7
Ci0gICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9IE5V
TEw7Ci0KLSAgICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbVNl
bWFudGljSW5kZXhbaW5kZXhdID0gLTE7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpbmRleCsrKQotICAgIHsKLSAgICAg
ICAgbVNhbXBsZXJzUFNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRG
OyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbVNhbXBsZXJzVlNbaW5kZXhdLmFjdGl2ZSA9IGZh
bHNlOwotICAgIH0KLQotICAgIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlID0gMDsKLSAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gMDsKLQotICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0x
OwotICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKLSAgICBtRHhDb29yZExvY2F0aW9uID0gLTE7
Ci0gICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RnJvbnRDQ1dMb2Nh
dGlvbiA9IC0xOwotICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IC0xOwotfQotCi1Qcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCi17Ci0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUp
Ci0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobUNvbnN0YW50VGFibGVQUykKLSAgICB7
Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAo
bUNvbnN0YW50VGFibGVWUykKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlJlbGVh
c2UoKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQotICAgIHsKLSAg
ICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5iYWNrKCk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFj
aygpOwotICAgIH0KLX0KLQotSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpQcm9ncmFtQmluYXJ5Ojpn
ZXRQaXhlbFNoYWRlcigpCi17Ci0gICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7Ci19Ci0KLUlE
aXJlY3QzRFZlcnRleFNoYWRlcjkgKlByb2dyYW1CaW5hcnk6OmdldFZlcnRleFNoYWRlcigpCi17
Ci0gICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOwotfQotCi1HTHVpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBpZiAobmFt
ZSkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTGlua2VkQXR0
cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotaW50IFByb2dyYW1CaW5hcnk6OmdldFNlbWFu
dGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQotewotICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRl
eCA+PSAwICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLSAgICAKLSAg
ICByZXR1cm4gbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXhdOwotfQotCi0vLyBSZXR1cm5z
IG9uZSBtb3JlIHRoYW4gdGhlIGhpZ2hlc3Qgc2FtcGxlciBpbmRleCB1c2VkLgotR0xpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0VXNlZFNhbXBsZXJSYW5nZShTYW1wbGVyVHlwZSB0eXBlKQotewotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJfUElYRUw6Ci0gICAgICAg
IHJldHVybiBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwotICAgICAgY2FzZSBTQU1QTEVSX1ZFUlRF
WDoKLSAgICAgICAgcmV0dXJuIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
Ci0vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGV4dHVyZSBpbWFnZSB1bml0ICgwLTE5KSBj
b3JyZXNwb25kaW5nIHRvIGEgRGlyZWN0M0QgOSBzYW1wbGVyCi0vLyBpbmRleCAoMC0xNSBmb3Ig
dGhlIHBpeGVsIHNoYWRlciBhbmQgMC0zIGZvciB0aGUgdmVydGV4IHNoYWRlcikuCi1HTGludCBQ
cm9ncmFtQmluYXJ5OjpnZXRTYW1wbGVyTWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4KQotewotICAgIEdMaW50IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0x
OwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgU0FNUExFUl9QSVhFTDoK
LSAgICAgICAgQVNTRVJUKHNhbXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnNQUykvc2l6ZW9m
KG1TYW1wbGVyc1BTWzBdKSk7Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRl
eF0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2dpY2FsVGV4dHVyZVVuaXQgPSBt
U2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFTU0VS
VChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNWU1sw
XSkpOwotCi0gICAgICAgIGlmIChtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbG9naWNhbFRleHR1cmVVbml0ID0gbVNhbXBsZXJzVlNbc2Ft
cGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChsb2dpY2Fs
VGV4dHVyZVVuaXQgPj0gMCAmJiBsb2dpY2FsVGV4dHVyZVVuaXQgPCAoR0xpbnQpZ2V0Q29udGV4
dCgpLT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19
Ci0KLS8vIFJldHVybnMgdGhlIHRleHR1cmUgdHlwZSBmb3IgYSBnaXZlbiBEaXJlY3QzRCA5IHNh
bXBsZXIgdHlwZSBhbmQKLS8vIGluZGV4ICgwLTE1IGZvciB0aGUgcGl4ZWwgc2hhZGVyIGFuZCAw
LTMgZm9yIHRoZSB2ZXJ0ZXggc2hhZGVyKS4KLVRleHR1cmVUeXBlIFByb2dyYW1CaW5hcnk6Omdl
dFNhbXBsZXJUZXh0dXJlVHlwZShTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxl
ckluZGV4KQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIFNBTVBMRVJf
UElYRUw6Ci0gICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzUFMp
L3NpemVvZihtU2FtcGxlcnNQU1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS50ZXh0dXJlVHlwZTsKLSAgICAgIGNhc2UgU0FNUExFUl9WRVJURVg6Ci0gICAgICAgIEFT
U0VSVChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBsZXJzVlMpL3NpemVvZihtU2FtcGxlcnNW
U1swXSkpOwotICAgICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUp
OwotICAgICAgICByZXR1cm4gbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZTsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRFWFRV
UkVfMkQ7Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6
OnN0cmluZyBuYW1lKQotewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOwotCi0gICAg
Ly8gU3RyaXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vi
c2NyaXB0Ci0gICAgc2l6ZV90IG9wZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNp
emVfdCBjbG9zZSA9IG5hbWUuZmluZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3Rk
OjpzdHJpbmc6Om5wb3MgJiYgY2xvc2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAg
ICAgICBzdWJzY3JpcHQgPSBhdG9pKG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAg
ICAgICAgbmFtZS5lcmFzZShvcGVuKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5p
Zm9ybXMgPSBtVW5pZm9ybUluZGV4LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2Nh
dGlvbiA9IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCi0gICAgewotICAg
ICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAg
ICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIC0xOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVu
aWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQg
PiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0
WzFdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRb
M10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9C
T09MKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEg
bm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFu
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudDsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRp
b24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQot
ICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
LQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOwotCi0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAg
ICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAg
ICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAg
ewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkg
dW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjpt
aW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykK
LSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBz
dGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLQotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAg
ICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAg
ICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAzOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQot
ICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsK
LQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFy
cmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0
ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDM7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDM7ICsraSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdM
X1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0
KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDQsCi0gICAgICAg
ICAgICAgICB2LCA0ICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBp
bnQgc3JjSGVpZ2h0Pgotdm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSkKLXsKLSAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0V2lkdGgs
IHNyY1dpZHRoKTsKLSAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwg
c3JjSGVpZ2h0KTsKLQotICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCi0g
ICAgewotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgdGFyZ2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVb
eSAqIHNyY1dpZHRoICsgeF07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2xlYXIgdW5maWxs
ZWQgcmlnaHQgc2lkZQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lkdGg7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0g
KFQpMDsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBjbGVhciB1bmZpbGxlZCBib3R0b20uCi0g
ICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwy
LDIsMj4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSA4OwotICAgICAgICB2YWx1
ZSArPSA0OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQzKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0
YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291
bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4g
YXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0g
ICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEy
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRy
YW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0
YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZhbHVlICs9IDk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0g
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXpl
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0g
MTY7Ci0gICAgICAgIHZhbHVlICs9IDE2OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAg
ICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICog
Y291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JP
T0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4q
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50Owot
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0g
KGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAgICB7Ci0g
ICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAg
ICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihh
cnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogMiwKLSAgICAgICAgICAgICAgIHYsIDIg
KiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAgICAgR0xib29sZWFuICpi
b29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAyOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgKiAyOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2W2ldID09IDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfSU5UX1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFy
Z2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBj
b3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
aW50KSAqIDMsCi0gICAgICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMp
Ci0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXpl
OwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24t
YXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0g
c3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IChHTGJvb2xlYW4qKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMzsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xf
VFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiA0LAotICAgICAgICAgICAgICAg
diwgNCAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5
U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXpl
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJvb2xl
YW4gKmJvb2xQYXJhbXMgPSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAqIDQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFM
U0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZv
cm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQot
ewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKLQotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZm
ZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewotICAgICAgICBpbnQg
cmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0VW5pZm9ybS0+dHlwZSk7
Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAodGFy
Z2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAg
ICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1h
dHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBj
b3VudCA9IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUp
OwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGludGVybmFsQ291bnQgPSBVbmlmb3JtSW50ZXJu
YWxDb21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dp
dGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gKEdMYm9vbGVhbiopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRl
cm5hbENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6
IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAg
ICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50ICogc2l6ZW9mKEdMZmxvYXQpLAotICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5h
bENvdW50OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmdldFVu
aWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykK
LXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRl
eC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07Ci0KLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVm
ZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50
IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUp
OwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRh
cmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAg
ICAgICB7Ci0gICAgICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1z
LCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA4KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzoKLSAgICAgICAgewotICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50
LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgY291bnQgPSBVbmlmb3JtRXh0ZXJuYWxDb21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnRlcm5hbENvdW50
ID0gVW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+
dHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
aW50ZXJuYWxDb3VudDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludClib29sUGFyYW1zW2ldOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBpbnRlcm5hbENvdW50
OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gKEdMaW50KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIGludGVybmFsQ291
bnQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVv
ZihHTGludCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3Jtcygp
Ci17Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4
KyspCi0gICAgewotICAgICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7Ci0gICAg
fQotfQotCi0vLyBBcHBsaWVzIGFsbCB0aGUgdW5pZm9ybXMgc2V0IGZvciB0aGlzIHByb2dyYW0g
b2JqZWN0IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm1zKCkKLXsKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3Ig
dWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyAr
K3ViKSB7Ci0gICAgICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7Ci0KLSAgICAgICAg
aWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYXJy
YXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotICAgICAgICAgICAgR0xmbG9hdCAq
ZiA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhOwotICAgICAgICAgICAgR0xpbnQgKmkg
PSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0gICAgICAgICAgICBHTGJvb2xlYW4gKmIg
PSAoR0xib29sZWFuKil0YXJnZXRVbmlmb3JtLT5kYXRhOwotCi0gICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQk9PTDogICAgICAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwg
MSwgYik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5
VW5pZm9ybW5idih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIDIsIGIpOyAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6ICBhcHBseVVuaWZvcm1uYnYodGFyZ2V0VW5p
Zm9ybSwgYXJyYXlTaXplLCAzLCBiKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Qk9PTF9WRUM0OiAgYXBwbHlVbmlmb3JtbmJ2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6ZSwgNCwg
Yik7ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwg
Zik7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExF
Ul8yRDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KHRhcmdldFVuaWZvcm0sIGFycmF5
U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOiAg
IGFwcGx5VW5pZm9ybTJpdih0YXJnZXRVbmlmb3JtLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYodGFy
Z2V0VW5pZm9ybSwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfSU5UX1ZFQzQ6ICAgYXBwbHlVbmlmb3JtNGl2KHRhcmdldFVuaWZvcm0sIGFycmF5U2l6
ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIENvbXBpbGVz
IHRoZSBITFNMIGNvZGUgb2YgdGhlIGF0dGFjaGVkIHNoYWRlcnMgaW50byBleGVjdXRhYmxlIGJp
bmFyaWVzCi1JRDNEMTBCbG9iICpQcm9ncmFtQmluYXJ5Ojpjb21waWxlVG9CaW5hcnkoSW5mb0xv
ZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgSUQzRFhD
b25zdGFudFRhYmxlICoqY29uc3RhbnRUYWJsZSkKLXsKLSAgICBpZiAoIWhsc2wpCi0gICAgewot
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEV09SRCByZXN1bHQ7Ci0gICAgVUlO
VCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAocGVyZkFj
dGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKLSNpZmRl
ZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUw7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9O
OwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRo
KCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291
cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAg
ICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNv
dXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3Mg
fD0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7Ci0gICAgICAgIHNvdXJjZVRleHQg
PSBobHNsOwotICAgIH0KLQotICAgIElEM0QxMEJsb2IgKmJpbmFyeSA9IE5VTEw7Ci0gICAgSUQz
RDEwQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICByZXN1bHQgPSBEM0RDb21waWxlKGhs
c2wsIHN0cmxlbihobHNsKSwgZ19mYWtlcGF0aCwgTlVMTCwgTlVMTCwgIm1haW4iLCBwcm9maWxl
LCBmbGFncywgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7Ci0KLSAgICBpZiAoZXJyb3JNZXNz
YWdlKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKill
cnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAgICBpbmZvTG9nLmFwcGVu
ZFNhbml0aXplZChtZXNzYWdlKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAg
ICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVh
c2UoKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLQotICAgIHJlc3VsdCA9IEQzRFhHZXRTaGFkZXJDb25zdGFudFRhYmxl
KHN0YXRpY19jYXN0PGNvbnN0IERXT1JEKj4oYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCkpLCBj
b25zdGFudFRhYmxlKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYmluYXJ5LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpbmFyeTsKLX0KLQotLy8gUGFja3MgdmFy
eWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGht
IGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXgg
QSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlp
bmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dyYW1CaW5hcnk6OnBh
Y2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0
ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IGNvbnRl
eHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5
aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+
dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09
IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
ciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBt
ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAm
KnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdW
ZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsg
eCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
cnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1ty
ICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVt
biA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwg
c3BhY2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bHVtbiA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcg
PSByOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBu
OyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNv
bCA9IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3Vs
ZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBu
dW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJzID0gMDsKLQotICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICB7Ci0gICAgICAg
IGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBw
YWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlcnMrKzsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJp
bmFyeTo6bGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIHN0ZDo6c3RyaW5nJiBwaXhlbEhM
U0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQotewotICAgIGlmIChwaXhlbEhMU0wuZW1w
dHkoKSB8fCB2ZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gUmVzZXQgdGhlIHZhcnlpbmcgcmVnaXN0ZXIgYXNzaWdubWVudHMK
LSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBmcmFnVmFyID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyBmcmFnVmFyICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IGZyYWdWYXIrKykKLSAgICB7Ci0gICAgICAgIGZyYWdWYXItPnJlZyA9IC0xOwotICAg
ICAgICBmcmFnVmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciB2dHhWYXIgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2dHhWYXIg
IT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZ0eFZhcisrKQotICAgIHsKLSAgICAg
ICAgdnR4VmFyLT5yZWcgPSAtMTsKLSAgICAgICAgdnR4VmFyLT5jb2wgPSAtMTsKLSAgICB9Ci0K
LSAgICAvLyBNYXAgdGhlIHZhcnlpbmdzIHRvIHRoZSByZWdpc3RlciBmaWxlCi0gICAgY29uc3Qg
VmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTX1NNM11bNF0gPSB7TlVMTH07Ci0g
ICAgaW50IHJlZ2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVu
dFNoYWRlcik7Ci0KLSAgICBpZiAocmVnaXN0ZXJzIDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVj
bGFyYXRpb25zCi0gICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICBjb25z
dCBib29sIHNtMyA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCk7Ci0gICAgY29uc3Qg
aW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3Jz
KCk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzID09IG1heFZhcnlpbmdWZWN0b3JzICYmIGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
byB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7Ci0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBm
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQotICAgIHsKLSAgICAgICAg
Ym9vbCBtYXRjaGVkID0gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBlICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+
c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1h
dGNoIHRoYXQgb2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKLSAgICAgICAgICAg
ICAgICBvdXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7Ci0KLSAgICAgICAgICAgICAgICBtYXRjaGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghbWF0Y2hlZCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2
YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9
IChzbTMgPyAiQ09MT1IiIDogIlRFWENPT1JEIik7Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJzdHJ1
Y3QgVlNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGludCBzZW1h
bnRpY0luZGV4ID0gMDsKLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1
dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0
ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVDogICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiB2ZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2ZXJ0ZXhITFNMICs9IGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkg
KyAiIDogVEVYQ09PUkQiICsgc3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7Ci0KLSAgICAgICAg
c2VtYW50aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAg
fQotCi0gICAgdmVydGV4SExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0g
ICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9T
SVRJT047XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAg
ICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNr
aW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIp
ICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAg
ICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGlj
ICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAodmVydGV4U2hhZGVy
LT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICAi
e1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgdmVydGV4
SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9
ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEp
ICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5z
cG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRl
Y29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAg
dmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VU
UFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlv
bi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IC0oZ2xf
UG9zaXRpb24ueSArIGR4X0hhbGZQaXhlbFNpemUueSAqIGdsX1Bvc2l0aW9uLncpO1xuIgotICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24u
eiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKLQotICAgIGlmICh2ZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIg
KyBzdHIoKGludClBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7Ci0g
ICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0g
ICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRp
b247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcg
PSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWlu
Zy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBy
b3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJl
Z2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAm
JiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hh
cmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIi4iOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2goeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCAr
PSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjog
dmVydGV4SExTTCArPSAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogdmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgdmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsi
ICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmVy
dGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAg
ICBwaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntc
biI7Ci0gICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBq
KTsKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IHYiICsgbiAr
ICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0g
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKLSAgICAgICAgaWYgKHNtMykgewot
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Q
b2ludENvb3JkIDogVEVYQ09PUkQwO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09V
VFBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQ0IGdsX0NvbG9yWzFdIDogQ09MT1I7XG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIK
LSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJQU19PVVRQVVQgbWFp
bihQU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChzbTMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBv
cy55ICsgMC41O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIGR4X0Nvb3JkIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQv
MiwgY2VudGVyLnggYW5kIGNlbnRlci55LiBTZWUgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQo
KQotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQu
Z2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfQ29vcmQueCArIGR4X0Nvb3JkLno7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJh
Z0Nvb3JkLnkgKiByaHcpICogZHhfQ29vcmQueSArIGR4X0Nvb3JkLnc7XG4iOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChp
bnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCi0g
ICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnggPSBpbnB1dC5n
bF9Qb2ludENvb3JkLng7XG4iOwotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENv
b3JkLnkgPSAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOwotICAgIH0KLQotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8fCAoZHhfRnJv
bnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAwLjApKTtcbiI7
Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBq
KTsKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5h
bWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsg
c3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiAr
IG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAi
XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiIgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfQ29sb3JbMF0g
PSBnbF9Db2xvclswXTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdt
ZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCi17
Ci0gICAgaWYgKCFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZlcnRl
eFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc0NvbXBpbGVkKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgcGl4ZWxITFNMID0gZnJhZ21l
bnRTaGFkZXItPmdldEhMU0woKTsKLSAgICBzdGQ6OnN0cmluZyB2ZXJ0ZXhITFNMID0gdmVydGV4
U2hhZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCBwaXhl
bEhMU0wsIHZlcnRleEhMU0wsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBn
ZXRDb250ZXh0KCk7Ci0gICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1
cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNo
YXIgKnBpeGVsUHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNf
M18wIiA6ICJwc18yXzAiOwotCi0gICAgSUQzRDEwQmxvYiAqdmVydGV4QmluYXJ5ID0gY29tcGls
ZVRvQmluYXJ5KGluZm9Mb2csIHZlcnRleEhMU0wuY19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1D
b25zdGFudFRhYmxlVlMpOwotICAgIElEM0QxMEJsb2IgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRv
QmluYXJ5KGluZm9Mb2csIHBpeGVsSExTTC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3Rh
bnRUYWJsZVBTKTsKLQotICAgIGlmICh2ZXJ0ZXhCaW5hcnkgJiYgcGl4ZWxCaW5hcnkpCi0gICAg
ewotICAgICAgICBIUkVTVUxUIHZlcnRleFJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNo
YWRlcigoRFdPUkQqKXZlcnRleEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVZlcnRleEV4
ZWN1dGFibGUpOwotICAgICAgICBIUkVTVUxUIHBpeGVsUmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
UGl4ZWxTaGFkZXIoKERXT1JEKilwaXhlbEJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCAmbVBp
eGVsRXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgaWYgKHZlcnRleFJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCBwaXhlbFJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRCh2ZXJ0
ZXhSZXN1bHQpICYmIFNVQ0NFRURFRChwaXhlbFJlc3VsdCkpOwotCi0gICAgICAgIHZlcnRleEJp
bmFyeS0+UmVsZWFzZSgpOwotICAgICAgICBwaXhlbEJpbmFyeS0+UmVsZWFzZSgpOwotICAgICAg
ICB2ZXJ0ZXhCaW5hcnkgPSBOVUxMOwotICAgICAgICBwaXhlbEJpbmFyeSA9IE5VTEw7Ci0KLSAg
ICAgICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlICYmIG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghbGlua0F0dHJpYnV0ZXMoaW5mb0xvZywgYXR0cmlidXRlQmlu
ZGluZ3MsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKCFsaW5rVW5pZm9ybXMoaW5mb0xvZywgR0xfRlJBR01FTlRfU0hBREVSLCBtQ29uc3RhbnRU
YWJsZVBTKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbGlua1VuaWZvcm1zKGluZm9Mb2csIEdM
X1ZFUlRFWF9TSEFERVIsIG1Db25zdGFudFRhYmxlVlMpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
dGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVhZHktZGVjb3JhdGVkIGJlY2F1c2Ug
Z2xfIGFuZCBkeF8KLSAgICAgICAgICAgIC8vIGFyZSByZXNlcnZlZCBwcmVmaXhlcywgYW5kIGRv
IG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgotICAgICAgICAgICAgbUR4RGVwdGhS
YW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aFJhbmdlIik7Ci0gICAg
ICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIp
OwotICAgICAgICAgICAgbUR4Q29vcmRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhf
Q29vcmQiKTsKLSAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciKTsKLSAgICAgICAgICAg
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRz
T3JMaW5lcyIpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5tYXJrRHhVbmlmb3Jtc0RpcnR5KCk7
Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi0vLyBEZXRlcm1pbmVzIHRoZSBtYXBwaW5nIGJldHdlZW4gR0wgYXR0
cmlidXRlcyBhbmQgRGlyZWN0M0QgOSB2ZXJ0ZXggc3RyZWFtIHVzYWdlIGluZGljZXMKLWJvb2wg
UHJvZ3JhbUJpbmFyeTo6bGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0
cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21l
bnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQotewotICAgIHVuc2lnbmVkIGlu
dCB1c2VkTG9jYXRpb25zID0gMDsKLQotICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUg
YSBiaW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0
cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0g
dmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAg
ICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5n
KGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNl
dCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1M
aW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUg
c2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0ZTsKLQotICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVz
KSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0
cigpLCBsb2NhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0gMSA8PCAobG9jYXRp
b24gKyBpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIExpbmsg
YXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChB
dHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQo
KTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVC
aW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAg
aWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24K
LSAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJp
YnV0ZS0+dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZp
cnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRUUklCUyk7Ci0K
LSAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFibGVJbmRleCAr
IHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRy
aWJ1dGUtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAg
Ly8gRmFpbCB0byBsaW5rCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1MaW5rZWRBdHRy
aWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7ICkKLSAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+
Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsK
LSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCByID0g
MDsgciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5kZXhb
YXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKEluZm9Mb2cg
JmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJs
ZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlv
bjsKLQotICAgIGNvbnN0YW50VGFibGUtPkdldERlc2MoJmNvbnN0YW50VGFibGVEZXNjcmlwdGlv
bik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBjb25zdGFudEluZGV4ID0gMDsgY29uc3RhbnRJ
bmRleCA8IGNvbnN0YW50VGFibGVEZXNjcmlwdGlvbi5Db25zdGFudHM7IGNvbnN0YW50SW5kZXgr
KykKLSAgICB7Ci0gICAgICAgIEQzRFhIQU5ETEUgY29uc3RhbnRIYW5kbGUgPSBjb25zdGFudFRh
YmxlLT5HZXRDb25zdGFudCgwLCBjb25zdGFudEluZGV4KTsKLQotICAgICAgICBEM0RYQ09OU1RB
TlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgICAgICBVSU5UIGRlc2NyaXB0aW9uQ291
bnQgPSAxOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnN0YW50VGFibGUtPkdldENvbnN0
YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNvbnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlv
bkNvdW50KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBp
ZiAoIWRlZmluZVVuaWZvcm0oaW5mb0xvZywgc2hhZGVyLCBjb25zdGFudEhhbmRsZSwgY29uc3Rh
bnREZXNjcmlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBBZGRzIHRoZSBkZXNj
cmlwdGlvbiBvZiBhIGNvbnN0YW50IGZvdW5kIGluIHRoZSBiaW5hcnkgc2hhZGVyIHRvIHRoZSBs
aXN0IG9mIHVuaWZvcm1zCi0vLyBSZXR1cm5zIHRydWUgaWYgc3VjY2VzZnVsICh1bmlmb3JtIG5v
dCBhbHJlYWR5IGRlZmluZWQpCi1ib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oSW5m
b0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRI
YW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6
OnN0cmluZyBuYW1lKQotewotICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0
ID09IEQzRFhSU19TQU1QTEVSKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyQ291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgRDNEWEhBTkRMRSBwc0NvbnN0YW50ID0gbUNvbnN0YW50VGFibGVQUy0+
R2V0Q29uc3RhbnRCeU5hbWUoTlVMTCwgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAg
ICAgICAgIEQzRFhIQU5ETEUgdnNDb25zdGFudCA9IG1Db25zdGFudFRhYmxlVlMtPkdldENvbnN0
YW50QnlOYW1lKE5VTEwsIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSk7Ci0KLSAgICAgICAgICAg
IGlmIChwc0NvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzYW1wbGVySW5kZXggPSBtQ29uc3RhbnRUYWJsZVBTLT5HZXRTYW1wbGVySW5kZXgocHND
b25zdGFudCkgKyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50
RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDog
VEVYVFVSRV8yRDsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4
XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBs
ZXJSYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQaXhlbCBz
aGFkZXIgc2FtcGxlciBjb3VudCBleGNlZWRzIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICglZCku
IiwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodnNDb25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gbUNvbnN0YW50VGFibGVWUy0+R2V0U2FtcGxl
ckluZGV4KHZzQ29uc3RhbnQpICsgaTsKLQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5k
ZXggPCBnZXRDb250ZXh0KCktPmdldE1heGltdW1WZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxl
ckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBE
M0RYUFRfU0FNUExFUkNVQkUpID8gVEVYVFVSRV9DVUJFIDogVEVYVFVSRV8yRDsKLSAgICAgICAg
ICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQg
PSAwOwotICAgICAgICAgICAgICAgICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6
bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgc2FtcGxlciBjb3Vu
dCBleGNlZWRzIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAoJWQpLiIsIGdldENvbnRl
eHQoKS0+Z2V0TWF4aW11bVZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uQ2xhc3Mp
Ci0gICAgewotICAgICAgY2FzZSBEM0RYUENfU1RSVUNUOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5TdHJ1Y3RNZW1iZXJzOyBmaWVsZCsrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxl
UFMtPkdldENvbnN0YW50KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgRDNEWENPTlNUQU5UX0RFU0MgZmllbGREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAg
ICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLQotICAgICAgICAgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhh
bmRsZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBzdHJ1Y3RJbmRleCA9IChjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
ID4gMSkgPyAoIlsiICsgc3RyKGFycmF5SW5kZXgpICsgIl0iKSA6ICIiOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShpbmZvTG9nLCBzaGFkZXIsIGZpZWxkSGFuZGxl
LCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3Ry
dWN0SW5kZXggKyAiLiIpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICBjYXNlIEQzRFhQQ19TQ0FMQVI6Ci0gICAgICBjYXNlIEQzRFhQQ19WRUNUT1I6
Ci0gICAgICBjYXNlIEQzRFhQQ19NQVRSSVhfQ09MVU1OUzoKLSAgICAgIGNhc2UgRDNEWFBDX09C
SkVDVDoKLSAgICAgICAgcmV0dXJuIGRlZmluZVVuaWZvcm0oc2hhZGVyLCBjb25zdGFudERlc2Ny
aXB0aW9uLCBuYW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lKTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25z
dCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3RkOjpzdHJp
bmcgJl9uYW1lKQotewotICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBjcmVhdGVVbmlmb3JtKGNvbnN0
YW50RGVzY3JpcHRpb24sIF9uYW1lKTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5l
ZAotICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUp
OwotICAgIEdMZW51bSB0eXBlID0gdW5pZm9ybS0+dHlwZTsKLQotICAgIGlmIChsb2NhdGlvbiA+
PSAwKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHVuaWZvcm07Ci0gICAgICAgIHVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIH0KLQotICAgIGlm
IChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKSB1bmlmb3JtLT5wcy5zZXQoY29uc3RhbnRE
ZXNjcmlwdGlvbik7Ci0gICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKSAgIHVuaWZv
cm0tPnZzLnNldChjb25zdGFudERlc2NyaXB0aW9uKTsKLQotICAgIGlmIChsb2NhdGlvbiA+PSAw
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuaWZvcm0tPnR5cGUgPT0gdHlwZTsKLSAgICB9Ci0K
LSAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwotICAgIHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKLQotICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgdW5pZm9ybS0+YXJyYXlTaXplOyArK2kpCi0gICAgewotICAgICAgICBtVW5p
Zm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oX25hbWUsIGksIHVuaWZvcm1JbmRl
eCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1Vbmlmb3JtICpQcm9ncmFtQmlu
YXJ5OjpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2Ny
aXB0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50RGVz
Y3JpcHRpb24uUm93cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBEM0RYUFRfU0FNUExFUjJEOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBMRVJfMkQsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0
aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNEWFBUX1NB
TVBMRVJDVUJFOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVt
bnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlm
b3JtKEdMX1NBTVBMRVJfQ1VCRSwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfQk9PTDoKLSAgICAgICAg
ICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MLCBfbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIG5ldyBVbmlmb3JtKEdMX0JPT0xfVkVDMiwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24u
RWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9C
T09MX1ZFQzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfQk9PTF9WRUM0LCBfbmFtZSwgY29u
c3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEQzRFhQVF9JTlQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24u
Q29sdW1ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3
IFVuaWZvcm0oR0xfSU5ULCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0g
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMyLCBfbmFt
ZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVF9WRUMzLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBVbmlmb3JtKEdM
X0lOVF9WRUM0LCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9BVDoKLSAgICAgICAgICAgIHN3aXRj
aCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVCwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9GTE9BVF9WRUMyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50
cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZF
QzMsIF9uYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVDNCwgX25hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxz
ZSBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzID09IGNvbnN0YW50RGVzY3JpcHRpb24uQ29s
dW1ucykgIC8vIFNxdWFyZSBtYXRyaWNlcwotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25zdGFu
dERlc2NyaXB0aW9uLlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9B
VDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Sb3dzKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9B
VF9NQVQyLCBfbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX01BVDMsIF9uYW1lLCBjb25z
dGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4g
bmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgX25hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxl
bWVudHMpOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVj
b3JhdGUKLXN0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0
IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIp
ICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICJfIiArIG5hbWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYW1lOwotfQotCi1z
dGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5Ojp1bmRlY29yYXRlVW5pZm9ybShjb25zdCBzdGQ6OnN0
cmluZyAmX25hbWUpCi17Ci0gICAgc3RkOjpzdHJpbmcgbmFtZSA9IF9uYW1lOwotICAgIAotICAg
IC8vIFJlbW92ZSBhbnkgc3RydWN0dXJlIGZpZWxkIGRlY29yYXRpb24KLSAgICBzaXplX3QgcG9z
ID0gMDsKLSAgICB3aGlsZSAoKHBvcyA9IG5hbWUuZmluZCgiLl8iLCBwb3MpKSAhPSBzdGQ6OnN0
cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAgIG5hbWUucmVwbGFjZShwb3MsIDIsICIuIik7Ci0g
ICAgfQotCi0gICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIGRlY29yYXRpb24KLSAgICBpZiAobmFt
ZVswXSA9PSAnXycpCi0gICAgewotICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMSk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiYXJfIikgPT0gMCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5h
bWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtbmJ2KFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGludCB3aWR0aCwgY29uc3QgR0xib29sZWFuICp2
KQotewotICAgIGZsb2F0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMgKiA0XTsKLSAg
ICBCT09MIGJvb2xWZWN0b3JbRDNEOV9NQVhfQk9PTF9DT05TVEFOVFNdOwotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4ID49IDAgfHwgdGFyZ2V0VW5pZm9ybS0+dnMuZmxv
YXQ0SW5kZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9G
TE9BVF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqIDwgd2lkdGgpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbaSAqIDQgKyBqXSA9ICh2W2kgKiB3aWR0
aCArIGpdID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB2ZWN0b3JbaSAqIDQgKyBqXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLmJvb2xJ
bmRleCA+PSAwIHx8IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwKQotICAgIHsKLSAg
ICAgICAgaW50IHBzQ291bnQgPSB0YXJnZXRVbmlmb3JtLT5wcy5ib29sSW5kZXggPj0gMCA/IHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQgOiAwOwotICAgICAgICBpbnQgdnNDb3VudCA9
IHRhcmdldFVuaWZvcm0tPnZzLmJvb2xJbmRleCA+PSAwID8gdGFyZ2V0VW5pZm9ybS0+dnMucmVn
aXN0ZXJDb3VudCA6IDA7Ci0gICAgICAgIGludCBjb3B5Q291bnQgPSBzdGQ6Om1pbihjb3VudCAq
IHdpZHRoLCBzdGQ6Om1heChwc0NvdW50LCB2c0NvdW50KSk7Ci0gICAgICAgIEFTU0VSVChjb3B5
Q291bnQgPD0gRDNEOV9NQVhfQk9PTF9DT05TVEFOVFMpOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvcHlDb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sVmVjdG9y
W2ldID0gdltpXSAhPSBHTF9GQUxTRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wcy5mbG9hdDRJbmRleCA+PSAwKQotICAgIHsKLSAgICAgICAgbURldmljZS0+
U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXgsIHZl
Y3RvciwgdGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotICAgICAgICAK
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMuYm9vbEluZGV4ID49IDApCi0gICAgewotICAgICAg
ICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Qih0YXJnZXRVbmlmb3JtLT5wcy5ib29s
SW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAg
IH0KLSAgICAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXggPj0gMCkKLSAg
ICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52cy5mbG9hdDRJbmRleCwgdmVjdG9yLCB0YXJnZXRVbmlmb3JtLT52cy5yZWdpc3RlckNv
dW50KTsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5k
ZXggPj0gMCkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Qih0YXJnZXRVbmlmb3JtLT52cy5ib29sSW5kZXgsIGJvb2xWZWN0b3IsIHRhcmdldFVuaWZvcm0t
PnZzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBs
eVVuaWZvcm1uZnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKLXsK
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAg
IG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0
NEluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5wcy5yZWdpc3RlckNvdW50KTsKLSAgICB9Ci0KLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCkKLSAgICB7Ci0gICAgICAgIG1E
ZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52cy5mbG9hdDRJ
bmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtMWl2KFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewot
ICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwotICAgIEQzRFhW
RUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZF
Q1RPUjQoKGZsb2F0KXZbaV0sIDAsIDAsIDApOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRVbmlm
b3JtLT5wcy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnBzLnNhbXBsZXJJbmRleCA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzLnNhbXBsZXJJbmRleDsKLQotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBmaXJzdEluZGV4ICsgaTsK
LQotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtU2Ft
cGxlcnNQU1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxvYXQ0SW5kZXggPj0g
MCk7Ci0gICAgICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wcy5mbG9hdDRJbmRleCwgKGNvbnN0IGZsb2F0Kil2ZWN0b3IsIHRhcmdldFVuaWZv
cm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dnMuc2FtcGxlckluZGV4ID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnMuc2FtcGxlckluZGV4OwotCi0g
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGZpcnN0SW5kZXgg
KyBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUU19WVEYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9
IHZbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnZz
LmZsb2F0NEluZGV4ID49IDApOwotICAgICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2
ZWN0b3IsIHRhcmdldFVuaWZvcm0tPnZzLnJlZ2lzdGVyQ291bnQpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlm
b3JtMml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFMpOwot
ICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFOVFNdOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ld
ID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKLQotICAgICAg
ICB2ICs9IDI7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNv
dW50LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMaW50ICp2KQotewotICAgIEFTU0VSVChjb3VudCA8PSBEM0Q5X01BWF9GTE9BVF9D
T05TVEFOVFMpOwotICAgIEQzRFhWRUNUT1I0IHZlY3RvcltEM0Q5X01BWF9GTE9BVF9DT05TVEFO
VFNdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAg
ICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxv
YXQpdlsyXSwgMCk7Ci0KLSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAgIGFwcGx5VW5pZm9y
bW5pdih0YXJnZXRVbmlmb3JtLCBjb3VudCwgdmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybTRpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBBU1NFUlQoY291
bnQgPD0gRDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTKTsKLSAgICBEM0RYVkVDVE9SNCB2ZWN0b3Jb
RDNEOV9NQVhfRkxPQVRfQ09OU1RBTlRTXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2
WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChmbG9hdCl2WzNdKTsKLQotICAgICAgICB2
ICs9IDQ7Ci0gICAgfQotCi0gICAgYXBwbHlVbmlmb3Jtbml2KHRhcmdldFVuaWZvcm0sIGNvdW50
LCB2ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbUJpbmFyeTo6
YXBwbHlVbmlmb3Jtbml2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEQzRFhWRUNUT1I0ICp2ZWN0b3IpCi17Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzLnJl
Z2lzdGVyQ291bnQpCi0gICAgewotICAgICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cHMuZmxv
YXQ0SW5kZXggPj0gMCk7Ci0gICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnBzLmZsb2F0NEluZGV4LCAoY29uc3QgZmxvYXQgKil2ZWN0b3IsIHRh
cmdldFVuaWZvcm0tPnBzLnJlZ2lzdGVyQ291bnQpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT52cy5yZWdpc3RlckNvdW50KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRhcmdldFVu
aWZvcm0tPnZzLmZsb2F0NEluZGV4ID49IDApOwotICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhT
aGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnMuZmxvYXQ0SW5kZXgsIChjb25zdCBmbG9h
dCAqKXZlY3RvciwgdGFyZ2V0VW5pZm9ybS0+dnMucmVnaXN0ZXJDb3VudCk7Ci0gICAgfQotfQot
Ci1ib29sIFByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKCkgY29uc3QgCi17Ci0gICAgcmV0dXJu
IG1WYWxpZGF0ZWQ7Ci19Ci0KLXZvaWQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmlidXRl
KEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpz
aXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKLXsKLSAgICAvLyBTa2lwIG92ZXIgaW5h
Y3RpdmUgYXR0cmlidXRlcwotICAgIHVuc2lnbmVkIGludCBhY3RpdmVBdHRyaWJ1dGUgPSAwOwot
ICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGU7Ci0gICAgZm9yIChhdHRyaWJ1dGUgPSAwOyBhdHRy
aWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAg
aWYgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdGl2ZUF0
dHJpYnV0ZSA9PSBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKLSAgICB9Ci0KLSAgICBpZiAoYnVmc2l6
ZSA+IDApCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZV0ubmFtZS5jX3N0cigpOwotCi0gICAgICAgIHN0cm5jcHkobmFtZSwgc3Ry
aW5nLCBidWZzaXplKTsKLSAgICAgICAgbmFtZVtidWZzaXplIC0gMV0gPSAnXDAnOwotCi0gICAg
ICAgIGlmIChsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICpsZW5ndGggPSBzdHJsZW4o
bmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc2l6ZSA9IDE7ICAgLy8gQWx3YXlzIGEg
c2luZ2xlICd0eXBlJyBpbnN0YW5jZQotCi0gICAgKnR5cGUgPSBtTGlua2VkQXR0cmlidXRlW2F0
dHJpYnV0ZV0udHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlQXR0cmli
dXRlQ291bnQoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1
dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLUdMaW50IFByb2dyYW1C
aW5hcnk6OmdldEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpCi17Ci0gICAgaW50IG1heExlbmd0
aCA9IDA7Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQotICAgIHsKLSAgICAgICAg
aWYgKCFtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lLmVtcHR5KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KChpbnQpKG1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUubGVuZ3RoKCkgKyAxKSwgbWF4TGVuZ3RoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtYXhMZW5ndGg7Ci19Ci0KLXZvaWQgUHJvZ3Jh
bUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUp
Ci17Ci0gICAgLy8gU2tpcCBvdmVyIGludGVybmFsIHVuaWZvcm1zCi0gICAgdW5zaWduZWQgaW50
IGFjdGl2ZVVuaWZvcm0gPSAwOwotICAgIHVuc2lnbmVkIGludCB1bmlmb3JtOwotICAgIGZvciAo
dW5pZm9ybSA9IDA7IHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtKyspCi0gICAg
ewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lLmNvbXBhcmUoMCwgMywgImR4
XyIpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYWN0aXZlVW5pZm9ybSsrOwotICAgIH0K
LQotICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVz
dCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLQotICAgIGlmIChidWZz
aXplID4gMCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IG1Vbmlmb3Jtc1t1
bmlmb3JtXS0+bmFtZTsKLQotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1dLT5pc0FycmF5
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZyArPSAiWzBdIjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0cm5jcHkobmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZnNpemUpOwotICAgICAg
ICBuYW1lW2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAg
ICAgewotICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgICpzaXplID0gbVVuaWZvcm1zW3VuaWZvcm1dLT5hcnJheVNpemU7Ci0KLSAgICAq
dHlwZSA9IG1Vbmlmb3Jtc1t1bmlmb3JtXS0+dHlwZTsKLX0KLQotR0xpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotCi0gICAg
dW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3Jtczsg
dW5pZm9ybUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAobVVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0tPm5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQot
R0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpCi17Ci0gICAg
aW50IG1heExlbmd0aCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5p
Zm9ybXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVu
aWZvcm1JbmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAg
IGlmICghbVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuZW1wdHkoKSAmJiBtVW5pZm9ybXNb
dW5pZm9ybUluZGV4XS0+bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gKGludCkobVVuaWZvcm1zW3VuaWZvcm1JbmRleF0t
Pm5hbWUubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbdW5pZm9ybUlu
ZGV4XS0+aXNBcnJheSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxlbmd0aCAr
PSAzOyAgLy8gQ291bnRpbmcgaW4gIlswXSIuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
YXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIG1heExlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gbWF4TGVuZ3RoOwotfQotCi12b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlk
YXRlKEluZm9Mb2cgJmluZm9Mb2cpCi17Ci0gICAgYXBwbHlVbmlmb3JtcygpOwotICAgIGlmICgh
dmFsaWRhdGVTYW1wbGVycygmaW5mb0xvZykpCi0gICAgewotICAgICAgICBtVmFsaWRhdGVkID0g
ZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1WYWxpZGF0ZWQgPSB0cnVl
OwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZVNhbXBsZXJzKEluZm9M
b2cgKmluZm9Mb2cpCi17Ci0gICAgLy8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBw
cm9ncmFtIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAg
IC8vIHRleHR1cmUgaW1hZ2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwg
dGhlbiBWYWxpZGF0ZVByb2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFu
ZCBEcmF3RWxlbWVudHMgd2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0K
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGdl
dENvbnRleHQoKS0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsKLSAgICBU
ZXh0dXJlVHlwZSB0ZXh0dXJlVW5pdFR5cGVbTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFNfVlRGXTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFNfVlRGOyArK2kpCi0gICAgewotICAgICAgICB0ZXh0dXJlVW5p
dFR5cGVbaV0gPSBURVhUVVJFX1VOS05PV047Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOyArK2kpCi0gICAgewotICAgICAg
ICBpZiAobVNhbXBsZXJzUFNbaV0uYWN0aXZlKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpbnQgdW5pdCA9IG1TYW1wbGVyc1BTW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHVuaXQgPj0gbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5mb0xvZykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxl
ciB1bmlmb3JtICglZCkgZXhjZWVkcyBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyAo
JWQpIiwgdW5pdCwgbWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodGV4dHVyZVVuaXRUeXBlW3VuaXRdICE9IFRFWFRVUkVfVU5LTk9XTikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzUFNbaV0udGV4dHVy
ZVR5cGUgIT0gdGV4dHVyZVVuaXRUeXBlW3VuaXRdKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZm9Mb2cpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGluZm9Mb2ctPmFwcGVuZCgiU2FtcGxlcnMgb2YgY29uZmxpY3Rp
bmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0ICglZCkuIiwgdW5p
dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVVbml0VHlwZVt1bml0XSA9
IG1TYW1wbGVyc1BTW2ldLnRleHR1cmVUeXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyc1ZTW2ldLmFjdGl2ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHVuaXQgPSBtU2FtcGxlcnNWU1tp
XS5sb2dpY2FsVGV4dHVyZVVuaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh1bml0
ID49IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGluZm9Mb2cpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBpbmZvTG9nLT5hcHBlbmQoIlNhbXBsZXIgdW5pZm9ybSAoJWQpIGV4Y2VlZHMgTUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgKCVkKSIsIHVuaXQsIG1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRleHR1cmVVbml0VHlw
ZVt1bml0XSAhPSBURVhUVVJFX1VOS05PV04pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1TYW1wbGVyc1ZTW2ldLnRleHR1cmVUeXBlICE9IHRleHR1cmVVbml0VHlwZVt1bml0
XSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvTG9nKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLT5h
cHBlbmQoIlNhbXBsZXJzIG9mIGNvbmZsaWN0aW5nIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHRl
eHR1cmUgaW1hZ2UgdW5pdCAoJWQpLiIsIHVuaXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlVW5pdFR5cGVbdW5pdF0gPSBtU2FtcGxlcnNWU1tpXS50ZXh0dXJlVHlwZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1HTGludCBQcm9ncmFtQmluYXJ5OjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4RGVwdGhM
b2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RHhDb29yZExvY2F0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbUR4Q29vcmRMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3Jh
bUJpbmFyeTo6Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtRHhIYWxmUGl4ZWxTaXplTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6Omdl
dER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeEZyb250Q0NXTG9j
YXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW1CaW5hcnk6OmdldER4UG9pbnRzT3JMaW5lc0xvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbUJpbmFyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTljNWUyLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFByb2dyYW0uaDogRGVmaW5lcyB0aGUgZ2w6OlByb2dyYW0gY2xhc3MuIEltcGxlbWVu
dHMgR0wgcHJvZ3JhbSBvYmplY3RzCi0vLyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3Bl
bkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwLjMgcGFnZSAyOC4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfUFJPR1JBTV9CSU5BUllfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hf
Ci0KLSNpbmNsdWRlIDxkM2R4OS5oPgotI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFk
ZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsK
LWNsYXNzIEZyYWdtZW50U2hhZGVyOwotY2xhc3MgVmVydGV4U2hhZGVyOwotCi0vLyBIZWxwZXIg
c3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQotc3RydWN0IFVuaWZv
cm0KLXsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmX25hbWUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUpOwotCi0gICAgflVuaWZvcm0oKTsKLQotICAgIGJvb2wg
aXNBcnJheSgpOwotCi0gICAgY29uc3QgR0xlbnVtIHR5cGU7Ci0gICAgY29uc3Qgc3RkOjpzdHJp
bmcgX25hbWU7ICAgLy8gRGVjb3JhdGVkIG5hbWUKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1l
OyAgICAvLyBVbmRlY29yYXRlZCBuYW1lCi0gICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5U2l6
ZTsKLQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgYm9vbCBkaXJ0eTsKLQotICAgIHN0
cnVjdCBSZWdpc3RlckluZm8KLSAgICB7Ci0gICAgICAgIFJlZ2lzdGVySW5mbygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZsb2F0NEluZGV4ID0gLTE7Ci0gICAgICAgICAgICBzYW1wbGVySW5k
ZXggPSAtMTsKLSAgICAgICAgICAgIGJvb2xJbmRleCA9IC0xOwotICAgICAgICAgICAgcmVnaXN0
ZXJDb3VudCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldChjb25zdCBEM0RYQ09O
U1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAg
c3dpdGNoKGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJTZXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgRDNEWFJTX0JPT0w6ICAgIGJvb2xJbmRleCA9IGNvbnN0YW50RGVz
Y3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
WFJTX0ZMT0FUNDogIGZsb2F0NEluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3Rlcklu
ZGV4OyAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNEWFJTX1NBTVBMRVI6IHNhbXBsZXJJ
bmRleCA9IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IDAgfHwgcmVnaXN0ZXJDb3Vu
dCA9PSAoaW50KWNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudCk7Ci0gICAgICAgICAg
ICByZWdpc3RlckNvdW50ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckNvdW50OwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW50IGZsb2F0NEluZGV4OwotICAgICAgICBpbnQgc2FtcGxlcklu
ZGV4OwotICAgICAgICBpbnQgYm9vbEluZGV4OwotCi0gICAgICAgIGludCByZWdpc3RlckNvdW50
OwotICAgIH07Ci0KLSAgICBSZWdpc3RlckluZm8gcHM7Ci0gICAgUmVnaXN0ZXJJbmZvIHZzOwot
fTsKLQotLy8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9m
IHVuaWZvcm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KLXsKLSAg
ICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJl9uYW1lLCB1bnNpZ25lZCBpbnQg
ZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKLQotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0g
ICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7Ci0gICAgdW5zaWduZWQgaW50IGluZGV4OwotfTsKLQot
Ly8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUgc3Rh
dGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KLWNsYXNzIFByb2dyYW1C
aW5hcnkKLXsKLSAgcHVibGljOgotICAgIFByb2dyYW1CaW5hcnkoKTsKLSAgICB+UHJvZ3JhbUJp
bmFyeSgpOwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigpOwot
ICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOwotCi0gICAgR0x1
aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwotICAgIGludCBnZXRT
ZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7Ci0KLSAgICBHTGludCBnZXRTYW1wbGVy
TWFwcGluZyhTYW1wbGVyVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4KTsKLSAg
ICBUZXh0dXJlVHlwZSBnZXRTYW1wbGVyVGV4dHVyZVR5cGUoU2FtcGxlclR5cGUgdHlwZSwgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgR0xpbnQgZ2V0VXNlZFNhbXBsZXJSYW5nZShT
YW1wbGVyVHlwZSB0eXBlKTsKLQotICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0
cmluZyBuYW1lKTsKLSAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBz
ZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wg
c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQg
KnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTRp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotCi0gICAg
Ym9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxv
YXQgKnBhcmFtcyk7Ci0gICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOwotCi0gICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdl
TG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREeENvb3JkTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeEhh
bGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4RnJvbnRDQ1dMb2Nh
dGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCkgY29u
c3Q7Ci0KLSAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICB2b2lkIGFwcGx5VW5pZm9y
bXMoKTsKLQotICAgIGJvb2wgbGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVC
aW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
ciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFk
ZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOwot
Ci0gICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpu
YW1lKTsKLSAgICBHTGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAgIEdMaW50IGdl
dEFjdGl2ZUF0dHJpYnV0ZU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBnZXRBY3RpdmVVbmlmb3Jt
KEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpz
aXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwotCi0g
ICAgdm9pZCB2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKTsKLSAgICBib29sIHZhbGlkYXRlU2Ft
cGxlcnMoSW5mb0xvZyAqaW5mb0xvZyk7Ci0gICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0Owot
Ci0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCi0gICAgc3RhdGljIHN0ZDo6
c3RyaW5nIHVuZGVjb3JhdGVVbmlmb3JtKGNvbnN0IHN0ZDo6c3RyaW5nICZfbmFtZSk7ICAgLy8g
UmVtb3ZlIGxlYWRpbmcgdW5kZXJzY29yZQotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFByb2dyYW1CaW5hcnkpOwotCi0gICAgSUQzRDEwQmxvYiAqY29tcGlsZVRv
QmluYXJ5KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnBy
b2ZpbGUsIElEM0RYQ29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwotCi0gICAgaW50IHBh
Y2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7Ci0gICAgYm9vbCBsaW5rVmFyeWluZ3Mo
SW5mb0xvZyAmaW5mb0xvZywgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZl
cnRleEhMU0wsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpOwotCi0gICAgYm9vbCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hh
ZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwotCi0gICAg
Ym9vbCBsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgSUQzRFhD
b25zdGFudFRhYmxlICpjb25zdGFudFRhYmxlKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oSW5m
b0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3QgRDNEWEhBTkRMRSAmY29uc3RhbnRI
YW5kbGUsIGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6
OnN0cmluZyBuYW1lID0gIiIpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVy
LCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUpOwotICAgIFVuaWZvcm0gKmNyZWF0ZVVuaWZvcm0oY29uc3QgRDNEWENP
TlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybW5mdihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25z
dCBHTGZsb2F0ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTFpdihVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVu
aWZvcm0yaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xp
bnQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtM2l2KFVuaWZvcm0gKnRhcmdldFVuaWZvcm0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9ybTRp
dihVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7
Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgRDNEWFZFQ1RPUjQgKnZlY3Rvcik7Ci0gICAgdm9pZCBhcHBseVVuaWZv
cm1uYnYoVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgR0xzaXplaSBjb3VudCwgaW50IHdpZHRoLCBj
b25zdCBHTGJvb2xlYW4gKnYpOwotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKLQot
ICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKLSAgICBJRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKLQotICAgIC8vIFRoZXNlIGFyZSBv
bmx5IHVzZWQgZHVyaW5nIGxpbmtpbmcuCi0gICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3Rh
bnRUYWJsZVBTOwotICAgIElEM0RYQ29uc3RhbnRUYWJsZSAqbUNvbnN0YW50VGFibGVWUzsKLQot
ICAgIEF0dHJpYnV0ZSBtTGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107Ci0gICAg
aW50IG1TZW1hbnRpY0luZGV4W01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBzdHJ1Y3QgU2Ft
cGxlcgotICAgIHsKLSAgICAgICAgYm9vbCBhY3RpdmU7Ci0gICAgICAgIEdMaW50IGxvZ2ljYWxU
ZXh0dXJlVW5pdDsKLSAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7Ci0gICAgfTsKLQot
ICAgIFNhbXBsZXIgbVNhbXBsZXJzUFNbTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAgIFNh
bXBsZXIgbVNhbXBsZXJzVlNbTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTX1ZURl07Ci0g
ICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwotICAgIEdMdWludCBtVXNlZFBpeGVs
U2FtcGxlclJhbmdlOwotCi0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9y
bUFycmF5OwotICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZl
Y3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVu
aWZvcm1JbmRleDsKLQotICAgIEdMaW50IG1EeERlcHRoUmFuZ2VMb2NhdGlvbjsKLSAgICBHTGlu
dCBtRHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1EeENvb3JkTG9jYXRpb247Ci0gICAgR0xp
bnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRp
b247Ci0gICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uOwotCi0gICAgYm9vbCBtVmFs
aWRhdGVkOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGVkZGE1Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTI4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBRdWVyeS5jcHA6IEltcGxlbWVu
dHMgdGhlIGdsOjpRdWVyeSBjbGFzcwotCi0jaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiCi0K
LSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotUXVlcnk6
OlF1ZXJ5KEdMdWludCBpZCwgR0xlbnVtIHR5cGUpIDogUmVmQ291bnRPYmplY3QoaWQpCi17IAot
ICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwotICAgIG1SZXN1bHQg
PSBHTF9GQUxTRTsKLSAgICBtVHlwZSA9IHR5cGU7Ci19Ci0KLVF1ZXJ5Ojp+UXVlcnkoKQotewot
ICAgIGlmIChtUXVlcnkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1RdWVyeS0+UmVsZWFzZSgp
OwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KLX0KLQotdm9pZCBRdWVyeTo6YmVnaW4o
KQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGlmIChGQUlMRUQo
Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04sICZtUXVlcnkp
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3Vl
KEQzRElTU1VFX0JFR0lOKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotfQotCi12
b2lkIFF1ZXJ5OjplbmQoKQotewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgSFJF
U1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICAKLSAgICBtU3RhdHVzID0gR0xfRkFMU0U7Ci0gICAgbVJl
c3VsdCA9IEdMX0ZBTFNFOwotfQotCi1HTHVpbnQgUXVlcnk6OmdldFJlc3VsdCgpCi17Ci0gICAg
aWYgKG1RdWVyeSAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgd2hpbGUgKCF0ZXN0UXVlcnkoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgU2xlZXAoMCk7Ci0gICAgICAgICAgICAvLyBleHBsaWNp
dGx5IGNoZWNrIGZvciBkZXZpY2UgbG9zcwotICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIHNl
ZW0gdG8gcmV0dXJuIFNfRkFMU0UgZXZlbiBpZiB0aGUgZGV2aWNlIGlzIGxvc3QKLSAgICAgICAg
ICAgIC8vIGluc3RlYWQgb2YgRDNERVJSX0RFVklDRUxPU1QgbGlrZSB0aGV5IHNob3VsZAotICAg
ICAgICAgICAgaWYgKGdsOjpnZXREaXNwbGF5KCktPnRlc3REZXZpY2VMb3N0KCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OmdldERpc3BsYXkoKS0+bm90aWZ5RGV2aWNlTG9z
dCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAoR0x1aW50KW1S
ZXN1bHQ7Ci19Ci0KLUdMYm9vbGVhbiBRdWVyeTo6aXNSZXN1bHRBdmFpbGFibGUoKQotewotICAg
IGlmIChtUXVlcnkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHRlc3RRdWVyeSgpOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gbVN0YXR1czsKLX0KLQotR0xlbnVtIFF1ZXJ5OjpnZXRUeXBlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVR5cGU7Ci19Ci0KLUdMYm9vbGVhbiBRdWVyeTo6dGVzdFF1
ZXJ5KCkKLXsKLSAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQot
ICAgIHsKLSAgICAgICAgRFdPUkQgbnVtUGl4ZWxzID0gMDsKLQotICAgICAgICBIUkVTVUxUIGhy
ZXMgPSBtUXVlcnktPkdldERhdGEoJm51bVBpeGVscywgc2l6ZW9mKERXT1JEKSwgRDNER0VUREFU
QV9GTFVTSCk7Ci0gICAgICAgIGlmIChocmVzID09IFNfT0spCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1TdGF0dXMgPSBHTF9UUlVFOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1UeXBlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9F
WFQ6Ci0gICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUg
OiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoZWNrRGV2aWNlTG9zdChocmVzKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbVN0YXR1czsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfVFJVRTsgLy8gcHJldmVudCBibG9ja2luZyB3aGVuIHF1ZXJ5IGlzIG51bGwKLX0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVl
cnkuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzNTdhMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUXVlcnkuaDogRGVmaW5lcyB0aGUgZ2w6
OlF1ZXJ5IGNsYXNzCi0KLSNpZm5kZWYgTElCR0xFU1YyX1FVRVJZX0hfCi0jZGVmaW5lIExJQkdM
RVNWMl9RVUVSWV9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KLSNpbmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgot
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQot
Y2xhc3MgUXVlcnkgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKLXsKLSAgcHVibGljOgotICAgIFF1
ZXJ5KEdMdWludCBpZCwgR0xlbnVtIHR5cGUpOwotICAgIHZpcnR1YWwgflF1ZXJ5KCk7Ci0KLSAg
ICB2b2lkIGJlZ2luKCk7Ci0gICAgdm9pZCBlbmQoKTsKLSAgICBHTHVpbnQgZ2V0UmVzdWx0KCk7
Ci0gICAgR0xib29sZWFuIGlzUmVzdWx0QXZhaWxhYmxlKCk7Ci0KLSAgICBHTGVudW0gZ2V0VHlw
ZSgpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFF1
ZXJ5KTsKLQotICAgIEdMYm9vbGVhbiB0ZXN0UXVlcnkoKTsKLQotICAgIElEaXJlY3QzRFF1ZXJ5
OSogbVF1ZXJ5OwotICAgIEdMZW51bSBtVHlwZTsKLSAgICBHTGJvb2xlYW4gbVN0YXR1czsKLSAg
ICBHTGludCBtUmVzdWx0OwotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfUVVFUllf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUkVB
RE1FIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SRUFETUUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3ZDNmNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUkVBRE1FCkBAIC0wLDAgKzEg
QEAKK1RoaXMgZGlyZWN0b3J5J3MgY29udGVudHMgYXJlIG5vdCBzeW5jZWQgZnJvbSB0aGUgQU5H
TEUgcHJvamVjdCBiZWNhdXNlIG5vIHBsYXRmb3JtIGluIFdlYktpdCBuZWVkcyB0aGVtIHlldC4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRiOTExZTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTc3
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlcmJ1ZmZlci5jcHA6IHRoZSBn
bDo6UmVuZGVyYnVmZmVyIGNsYXNzIGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCi0vLyBDb2xvcmJ1
ZmZlciwgRGVwdGhidWZmZXIgYW5kIFN0ZW5jaWxidWZmZXIuIEltcGxlbWVudHMgR0wgcmVuZGVy
YnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDQuNC4zIHBhZ2UgMTA4LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvVGV4dHVyZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6bUN1cnJl
bnRTZXJpYWwgPSAxOwotCi1SZW5kZXJidWZmZXJJbnRlcmZhY2U6OlJlbmRlcmJ1ZmZlckludGVy
ZmFjZSgpCi17Ci19Ci0KLS8vIFRoZSBkZWZhdWx0IGNhc2UgZm9yIGNsYXNzZXMgaW5oZXJpdGVk
IGZyb20gUmVuZGVyYnVmZmVySW50ZXJmYWNlIGlzIG5vdCB0bwotLy8gbmVlZCB0byBkbyBhbnl0
aGluZyB1cG9uIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIHBhcmVudCBSZW5kZXJidWZmZXIg
aW5jcmVtZW50aW5nCi0vLyBvciBkZWNyZW1lbnRpbmcuIAotdm9pZCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci19Ci0KLXZv
aWQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkKLXsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0UmVkU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4MmVzOjpHZXRSZWRTaXplKGdldEQzREZvcm1hdCgp
KTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0R3JlZW5TaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZHgyZXM6OkdldEdyZWVuU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19
Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEJsdWVTaXplKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZHgyZXM6OkdldEJsdWVTaXplKGdldEQzREZvcm1hdCgpKTsKLX0KLQotR0x1
aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0QWxwaGFTaXplKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZHgyZXM6OkdldEFscGhhU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBS
ZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldERlcHRoU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGR4MmVzOjpHZXREZXB0aFNpemUoZ2V0RDNERm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVySW50ZXJmYWNlOjpnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGR4
MmVzOjpHZXRTdGVuY2lsU2l6ZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLS8vLy8vIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLwotCi1SZW5kZXJidWZmZXJUZXh0
dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0
YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCi17Ci0gICAgbVRleHR1cmUyRC5zZXQodGV4dHVyZSk7
Ci19Ci0KLVJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6flJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpCi17
Ci0gICAgbVRleHR1cmUyRC5zZXQoTlVMTCk7Ci19Ci0KLS8vIFRleHR1cmVzIG5lZWQgdG8gbWFp
bnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKLS8vIFJl
bmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVy
ZSBvZiBhIHJlZmVyZW5jZS4KLXZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjphZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1UZXh0dXJlMkQtPmFkZFByb3h5
UmVmKHByb3h5KTsKLX0KLQotdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVhc2VQcm94
eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1UZXh0dXJlMkQtPnJlbGVhc2VQ
cm94eShwcm94eSk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8v
IGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOwotfQotCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhl
IHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldERlcHRo
U3RlbmNpbChtVGFyZ2V0KTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgoMCk7Ci19
Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRIZWlnaHQoKSBjb25zdAotewot
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQoMCk7Ci19Ci0KLUdMZW51bSBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7Ci19Ci0KLUQzREZPUk1BVCBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0
dXJlMkQtPmdldEQzREZvcm1hdCgwKTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldFNhbXBsZXMoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBp
bnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVy
biBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7Ci19Ci0KLS8vLy8v
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCi0KLVJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0
dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKLXsK
LSAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOwotfQotCi1SZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDo6flJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCkKLXsKLSAgICBtVGV4dHVy
ZUN1YmVNYXAuc2V0KE5VTEwpOwotfQotCi0vLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRo
ZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCi0vLyBSZW5kZXJidWZm
ZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSBy
ZWZlcmVuY2UuCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1UZXh0dXJlQ3ViZU1hcC0+YWRkUHJv
eHlSZWYocHJveHkpOwotfQotCi12b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtVGV4dHVyZUN1YmVN
YXAtPnJlbGVhc2VQcm94eShwcm94eSk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24g
c3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQot
SURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJU
YXJnZXQoKQotewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldCht
VGFyZ2V0KTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAg
cmV0dXJuIE5VTEw7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6Omdl
dFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRXaWR0aChH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwotfQotCi1HTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldEhlaWdodChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAp
OwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9y
bWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZv
cm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwotfQotCi1EM0RGT1JNQVQg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RDNERm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldFNhbXBsZXMoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBpbnQg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOwotfQot
Ci0vLy8vLy8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLwotCi1SZW5kZXJidWZm
ZXI6OlJlbmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlckludGVyZmFjZSAqaW5zdGFu
Y2UpIDogUmVmQ291bnRPYmplY3QoaWQpCi17Ci0gICAgQVNTRVJUKGluc3RhbmNlICE9IE5VTEwp
OwotICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOwotfQotCi1SZW5kZXJidWZmZXI6On5SZW5kZXJi
dWZmZXIoKQotewotICAgIGRlbGV0ZSBtSW5zdGFuY2U7Ci19Ci0KLS8vIFRoZSBSZW5kZXJidWZm
ZXJJbnRlcmZhY2UgY29udGFpbmVkIGluIHRoaXMgUmVuZGVyYnVmZmVyIG1heSBuZWVkIHRvIG1h
aW50YWluCi0vLyBpdHMgb3duIHJlZmVyZW5jZSBjb3VudCwgc28gd2UgcGFzcyBpdCBvbiBoZXJl
Lgotdm9pZCBSZW5kZXJidWZmZXI6OmFkZFJlZigpIGNvbnN0Ci17Ci0gICAgbUluc3RhbmNlLT5h
ZGRQcm94eVJlZih0aGlzKTsKLQotICAgIFJlZkNvdW50T2JqZWN0OjphZGRSZWYoKTsKLX0KLQot
dm9pZCBSZW5kZXJidWZmZXI6OnJlbGVhc2UoKSBjb25zdAotewotICAgIG1JbnN0YW5jZS0+cmVs
ZWFzZVByb3h5KHRoaXMpOwotCi0gICAgUmVmQ291bnRPYmplY3Q6OnJlbGVhc2UoKTsKLX0KLQot
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
OjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRh
cmdldCgpOwotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5
ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0gICAgcmV0dXJuIG1JbnN0YW5j
ZS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci19Ci0KLUdMc2l6ZWkgUmVuZGVyYnVmZmVyOjpnZXRXaWR0
aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0V2lkdGgoKTsKLX0KLQotR0xz
aXplaSBSZW5kZXJidWZmZXI6OmdldEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0SGVpZ2h0KCk7Ci19Ci0KLUdMZW51bSBSZW5kZXJidWZmZXI6OmdldEludGVybmFs
Rm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRJbnRlcm5hbEZvcm1h
dCgpOwotfQotCi1EM0RGT1JNQVQgUmVuZGVyYnVmZmVyOjpnZXREM0RGb3JtYXQoKSBjb25zdAot
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEQzREZvcm1hdCgpOwotfQotCi1HTHVpbnQgUmVu
ZGVyYnVmZmVyOjpnZXRSZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5n
ZXRSZWRTaXplKCk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXI6OmdldEdyZWVuU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0R3JlZW5TaXplKCk7Ci19Ci0KLUdMdWlu
dCBSZW5kZXJidWZmZXI6OmdldEJsdWVTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRCbHVlU2l6ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRBbHBoYVNp
emUoKSBjb25zdAotewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEFscGhhU2l6ZSgpOwotfQot
Ci1HTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXREZXB0aFNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldERlcHRoU2l6ZSgpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVyOjpn
ZXRTdGVuY2lsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U3RlbmNp
bFNpemUoKTsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXI6OmdldFNhbXBsZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFNhbXBsZXMoKTsKLX0KLQotdW5zaWduZWQgaW50
IFJlbmRlcmJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluc3RhbmNl
LT5nZXRTZXJpYWwoKTsKLX0KLQotdm9pZCBSZW5kZXJidWZmZXI6OnNldFN0b3JhZ2UoUmVuZGVy
YnVmZmVyU3RvcmFnZSAqbmV3U3RvcmFnZSkKLXsKLSAgICBBU1NFUlQobmV3U3RvcmFnZSAhPSBO
VUxMKTsKLQotICAgIGRlbGV0ZSBtSW5zdGFuY2U7Ci0gICAgbUluc3RhbmNlID0gbmV3U3RvcmFn
ZTsKLX0KLQotUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNl
cmlhbChpc3N1ZVNlcmlhbCgpKQotewotICAgIG1XaWR0aCA9IDA7Ci0gICAgbUhlaWdodCA9IDA7
Ci0gICAgbUludGVybmFsRm9ybWF0ID0gR0xfUkdCQTQ7Ci0gICAgbUQzREZvcm1hdCA9IEQzREZN
VF9BOFI4RzhCODsKLSAgICBtU2FtcGxlcyA9IDA7Ci19Ci0KLVJlbmRlcmJ1ZmZlclN0b3JhZ2U6
On5SZW5kZXJidWZmZXJTdG9yYWdlKCkKLXsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBv
biBzdXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNl
Ci1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0UmVuZGVyVGFyZ2V0
KCkKLXsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBz
dXJmYWNlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1J
RGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RGVwdGhTdGVuY2lsKCkK
LXsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotR0xzaXplaSBSZW5kZXJidWZmZXJTdG9yYWdlOjpn
ZXRXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1XaWR0aDsKLX0KLQotR0xzaXplaSBSZW5k
ZXJidWZmZXJTdG9yYWdlOjpnZXRIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtSGVpZ2h0
OwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBj
b25zdAotewotICAgIHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7Ci19Ci0KLUQzREZPUk1BVCBSZW5k
ZXJidWZmZXJTdG9yYWdlOjpnZXREM0RGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtRDNE
Rm9ybWF0OwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFNhbXBsZXMoKSBj
b25zdAotewotICAgIHJldHVybiBtU2FtcGxlczsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmdldFNlcmlhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TZXJpYWw7Ci19
Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpCi17Ci0g
ICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgZmlyc3RT
ZXJpYWwgPSBtQ3VycmVudFNlcmlhbDsKLSAgICBtQ3VycmVudFNlcmlhbCArPSA2OwotICAgIHJl
dHVybiBmaXJzdFNlcmlhbDsKLX0KLQotQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKElEaXJlY3Qz
RFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpIDogbVJlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi17
Ci0gICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+QWRk
UmVmKCk7Ci0KLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgICAgICBy
ZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLQotICAgICAgICBtV2lkdGggPSBk
ZXNjcmlwdGlvbi5XaWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsK
LSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZHgyZXM6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0
KGRlc2NyaXB0aW9uLkZvcm1hdCk7Ci0gICAgICAgIG1EM0RGb3JtYXQgPSBkZXNjcmlwdGlvbi5G
b3JtYXQ7Ci0gICAgICAgIG1TYW1wbGVzID0gZHgyZXM6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1w
bGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7Ci0gICAgfQotfQotCi1Db2xvcmJ1
ZmZlcjo6Q29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIHNhbXBsZXMpIDogbVJlbmRlclRhcmdldChOVUxMKQotewotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRDNERk9STUFUIHJlcXVlc3RlZEZv
cm1hdCA9IGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAgaW50
IHN1cHBvcnRlZFNhbXBsZXMgPSBnZXRDb250ZXh0KCktPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7Ci0KLSAgICBpZiAoc3VwcG9ydGVkU2FtcGxl
cyA9PSAtMSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotCi0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCi0g
ICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0
KHdpZHRoLCBoZWlnaHQsIHJlcXVlc3RlZEZvcm1hdCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkdldE11bHRpc2FtcGxlVHlwZUZy
b21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLCAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5V
TEwpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIG1XaWR0aCA9IHdp
ZHRoOwotICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0
OwotICAgIG1EM0RGb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Ci0gICAgbVNhbXBsZXMgPSBzdXBw
b3J0ZWRTYW1wbGVzOwotfQotCi1Db2xvcmJ1ZmZlcjo6fkNvbG9yYnVmZmVyKCkKLXsKLSAgICBp
ZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsKLSAgICB9Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNh
bGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFj
ZTkgKkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLURlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhT
dGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRoU3Rl
bmNpbChkZXB0aFN0ZW5jaWwpCi17Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAg
ICAgIGRlcHRoU3RlbmNpbC0+QWRkUmVmKCk7Ci0KLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRl
c2NyaXB0aW9uOwotICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsK
LQotICAgICAgICBtV2lkdGggPSBkZXNjcmlwdGlvbi5XaWR0aDsKLSAgICAgICAgbUhlaWdodCA9
IGRlc2NyaXB0aW9uLkhlaWdodDsKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZHgyZXM6OkNv
bnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbVNh
bXBsZXMgPSBkeDJlczo6R2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoZGVzY3JpcHRpb24u
TXVsdGlTYW1wbGVUeXBlKTsgCi0gICAgICAgIG1EM0RGb3JtYXQgPSBkZXNjcmlwdGlvbi5Gb3Jt
YXQ7Ci0gICAgfQotfQotCi1EZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihp
bnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxM
OwotICAgIAotICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0gZ2V0Q29udGV4dCgpLT5nZXROZWFy
ZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGTVRfRDI0UzgsIHNhbXBsZXMpOwotCi0gICAgaWYgKHN1
cHBvcnRlZFNhbXBsZXMgPT0gLTEpCi0gICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBlczJkeDo6
R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZB
TFNFLCAmbURlcHRoU3RlbmNpbCwgMCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewot
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
fQotCi0gICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICBtSW50
ZXJuYWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICBtRDNERm9ybWF0ID0g
RDNERk1UX0QyNFM4OwotICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLX0KLQotRGVw
dGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKCkKLXsKLSAgICBpZiAobURlcHRo
U3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICB9
Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRo
U3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKLXsKLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotICAgIH0KLQotICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsOwotfQotCi1EZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURp
cmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhT
dGVuY2lsKQotewotICAgIGlmIChkZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgICAvLyBJZiB0aGUgcmVuZGVyYnVmZmVy
IHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9u
ZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlCi0gICAgfQotfQotCi1EZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpIDogRGVwdGhTdGVuY2lsYnVmZmVyKHdpZHRo
LCBoZWlnaHQsIHNhbXBsZXMpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAg
ICAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgICAvLyBJZiB0aGUg
cmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdp
bGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBp
biAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Z2xSZW5kZXJidWZmZXJTdG9yYWdlCi0gICAgfQotfQotCi1EZXB0aGJ1ZmZlcjo6fkRlcHRoYnVm
ZmVyKCkKLXsKLX0KLQotU3RlbmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJm
YWNlOSAqZGVwdGhTdGVuY2lsKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCi17
Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9
IEdMX1NURU5DSUxfSU5ERVg4OyAgIC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBh
cmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCBy
ZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKLSAgICB9Ci19
Ci0KLVN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBH
THNpemVpIHNhbXBsZXMpIDogRGVwdGhTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBs
ZXMpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtSW50ZXJuYWxG
b3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgICAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFt
ZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUg
dmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCi0g
ICAgfQotfQotCi1TdGVuY2lsYnVmZmVyOjp+U3RlbmNpbGJ1ZmZlcigpCi17Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmQ1ZGRiLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVu
ZGVyYnVmZmVyLmg6IERlZmluZXMgdGhlIHdyYXBwZXIgY2xhc3MgZ2w6OlJlbmRlcmJ1ZmZlciwg
YXMgd2VsbCBhcyB0aGUKLS8vIGNsYXNzIGhpZXJhcmNoeSB1c2VkIHRvIHN0b3JlIGl0cyBjb250
ZW50czogUmVuZGVyYnVmZmVyU3RvcmFnZSwgQ29sb3JidWZmZXIsCi0vLyBEZXB0aFN0ZW5jaWxi
dWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRl
cmJ1ZmZlcgotLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4KLQotI2lmbmRlZiBMSUJHTEVTVjJfUkVO
REVSQlVGRkVSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KLQotI2RlZmlu
ZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgot
Ci0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBUZXh0dXJlMkQ7Ci1jbGFzcyBU
ZXh0dXJlQ3ViZU1hcDsKLWNsYXNzIFJlbmRlcmJ1ZmZlcjsKLWNsYXNzIENvbG9yYnVmZmVyOwot
Y2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotCi1jbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UK
LXsKLSAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlckludGVyZmFjZSgpOwotCi0gICAgdmlydHVh
bCB+UmVuZGVyYnVmZmVySW50ZXJmYWNlKCkge307Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpID0gMDsKLSAgICB2aXJ0dWFsIElEaXJlY3Qz
RFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0V2lkdGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdCA9IDA7Ci0KLSAgICBHTHVpbnQgZ2V0
UmVkU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRHcmVlblNpemUoKSBjb25zdDsKLSAgICBH
THVpbnQgZ2V0Qmx1ZVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29u
c3Q7Ci0gICAgR0x1aW50IGdldERlcHRoU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRTdGVu
Y2lsU2l6ZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkg
Y29uc3QgPSAwOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJl
bmRlcmJ1ZmZlckludGVyZmFjZSk7Ci19OwotCi1jbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQg
OiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCi17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKLQotICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0K
LSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3Jt
YXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEKTsKLQotICAgIEJpbmRpbmdQ
b2ludGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7Ci19Owot
Ci1jbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJ
bnRlcmZhY2UKLXsKLSAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKLQotICAgIHZpcnR1YWwgflJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0
IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpOwotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdl
dCgpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgIHZp
cnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgR0xzaXplaSBnZXRI
ZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRTZXJpYWwoKSBjb25zdDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7Ci0KLSAgICBCaW5kaW5nUG9p
bnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBHTGVudW0gbVRhcmdl
dDsKLX07Ci0KLS8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMg
Y3JlYXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKLS8vIGlzIGNhbGxlZC4gVGhl
IHNwZWNpZmljIGNvbmNyZXRlIHR5cGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbnRlcm5hbCBm
b3JtYXQgaXMKLS8vIGNvbG91ciBkZXB0aCwgc3RlbmNpbCBvciBwYWNrZWQgZGVwdGgvc3RlbmNp
bC4KLWNsYXNzIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJm
YWNlCi17Ci0gIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJTdG9yYWdlKCk7Ci0KLSAgICB2aXJ0
dWFsIH5SZW5kZXJidWZmZXJTdG9yYWdlKCkgPSAwOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RT
dXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNl
OSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygp
IGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0K
LSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZUN1YmVTZXJpYWxzKCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIEdMc2l6ZWkg
bVdpZHRoOwotICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBHTGVudW0gbUludGVybmFsRm9ybWF0
OwotICAgIEQzREZPUk1BVCBtRDNERm9ybWF0OwotICAgIEdMc2l6ZWkgbVNhbXBsZXM7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyU3RvcmFn
ZSk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKLQotICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7Ci19OwotCi0vLyBSZW5kZXJidWZmZXIgaW1wbGVtZW50
cyB0aGUgR0wgcmVuZGVyYnVmZmVyIG9iamVjdC4KLS8vIEl0J3Mgb25seSBhIHByb3h5IGZvciBh
IFJlbmRlcmJ1ZmZlckludGVyZmFjZSBpbnN0YW5jZTsgdGhlIGludGVybmFsIG9iamVjdAotLy8g
Y2FuIGNoYW5nZSB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY2FsbGVkLgotY2xh
c3MgUmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Ci17Ci0gIHB1YmxpYzoKLSAg
ICBSZW5kZXJidWZmZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKnN0b3JhZ2Up
OwotCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyKCk7Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgZnJvbSBSZWZDb3VudE9iamVjdCBhcmUgb3ZlcmxvYWRlZCBoZXJlIGJlY2F1c2UKLSAgICAv
LyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biBjb3VudCBvZiByZWZlcmVuY2Vz
IHRvIHRoZW0gdmlhCi0gICAgLy8gUmVuZGVyYnVmZmVycy9SZW5kZXJidWZmZXJUZXh0dXJlcy4g
VGhlc2UgZnVuY3Rpb25zIGludm9rZSB0aG9zZQotICAgIC8vIHJlZmVyZW5jZSBjb3VudGluZyBm
dW5jdGlvbnMgb24gdGhlIFJlbmRlcmJ1ZmZlckludGVyZmFjZS4KLSAgICB2b2lkIGFkZFJlZigp
IGNvbnN0OwotICAgIHZvaWQgcmVsZWFzZSgpIGNvbnN0OwotCi0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldFJlbmRlclRhcmdldCgpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0
ZW5jaWwoKTsKLQotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OwotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Owot
ICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0UmVkU2l6
ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRHcmVlblNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQg
Z2V0Qmx1ZVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29uc3Q7Ci0g
ICAgR0x1aW50IGdldERlcHRoU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRTdGVuY2lsU2l6
ZSgpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OwotCi0gICAgdW5zaWdu
ZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTdG9yYWdlKFJlbmRlcmJ1
ZmZlclN0b3JhZ2UgKm5ld1N0b3JhZ2UpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBSZW5kZXJidWZmZXJJbnRlcmZhY2Ug
Km1JbnN0YW5jZTsKLX07Ci0KLWNsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZl
clN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IENvbG9yYnVmZmVyKElEaXJlY3Qz
RFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOwotICAgIENvbG9yYnVmZmVyKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAg
dmlydHVhbCB+Q29sb3JidWZmZXIoKTsKLQotICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldCgpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKENvbG9yYnVmZmVyKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUmVuZGVyVGFy
Z2V0OwotfTsKLQotY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZl
clN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IERlcHRoU3RlbmNpbGJ1ZmZlcihJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKLSAgICBEZXB0aFN0ZW5jaWxidWZmZXIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLSAgICB+
RGVwdGhTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXREZXB0aFN0ZW5jaWwoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkg
Km1EZXB0aFN0ZW5jaWw7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oRGVwdGhTdGVuY2lsYnVmZmVyKTsKLX07Ci0KLWNsYXNzIERlcHRoYnVmZmVyIDogcHVibGlj
IERlcHRoU3RlbmNpbGJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGVwdGhidWZm
ZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7Ci0gICAgRGVwdGhidWZmZXIoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLSAgICB2aXJ0
dWFsIH5EZXB0aGJ1ZmZlcigpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKERlcHRoYnVmZmVyKTsKLX07Ci0KLWNsYXNzIFN0ZW5jaWxidWZmZXIgOiBwdWJsaWMg
RGVwdGhTdGVuY2lsYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdGVuY2lsYnVm
ZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwotICAgIFN0ZW5jaWxidWZmZXIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLSAgICB2
aXJ0dWFsIH5TdGVuY2lsYnVmZmVyKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oU3RlbmNpbGJ1ZmZlcik7Ci19OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVT
VjJfUkVOREVSQlVGRkVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFlMjYzNTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIw
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlc291cmNlTWFuYWdlci5jcHA6IElt
cGxlbWVudHMgdGhlIGdsOjpSZXNvdXJjZU1hbmFnZXIgY2xhc3MsIHdoaWNoIHRyYWNrcyBhbmQg
Ci0vLyByZXRyaWV2ZXMgb2JqZWN0cyB3aGljaCBtYXkgYmUgc2hhcmVkIGJ5IG11bHRpcGxlIENv
bnRleHRzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotCi1uYW1lc3BhY2Ug
Z2wKLXsKLVJlc291cmNlTWFuYWdlcjo6UmVzb3VyY2VNYW5hZ2VyKCkKLXsKLSAgICBtUmVmQ291
bnQgPSAxOwotfQotCi1SZXNvdXJjZU1hbmFnZXI6On5SZXNvdXJjZU1hbmFnZXIoKQotewotICAg
IHdoaWxlICghbUJ1ZmZlck1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlQnVmZmVy
KG1CdWZmZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOwotICAgIH0KLQotICAgIHdoaWxlICghbVByb2dy
YW1NYXAuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVByb2dyYW0obVByb2dyYW1NYXAu
YmVnaW4oKS0+Zmlyc3QpOwotICAgIH0KLQotICAgIHdoaWxlICghbVNoYWRlck1hcC5lbXB0eSgp
KQotICAgIHsKLSAgICAgICAgZGVsZXRlU2hhZGVyKG1TaGFkZXJNYXAuYmVnaW4oKS0+Zmlyc3Qp
OwotICAgIH0KLQotICAgIHdoaWxlICghbVJlbmRlcmJ1ZmZlck1hcC5lbXB0eSgpKQotICAgIHsK
LSAgICAgICAgZGVsZXRlUmVuZGVyYnVmZmVyKG1SZW5kZXJidWZmZXJNYXAuYmVnaW4oKS0+Zmly
c3QpOwotICAgIH0KLQotICAgIHdoaWxlICghbVRleHR1cmVNYXAuZW1wdHkoKSkKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZVRleHR1cmUobVRleHR1cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOwotICAgIH0K
LX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmFkZFJlZigpCi17Ci0gICAgbVJlZkNvdW50Kys7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpyZWxlYXNlKCkKLXsKLSAgICBpZiAoLS1tUmVm
Q291bnQgPT0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIH0KLX0KLQotLy8g
UmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKLUdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNy
ZWF0ZUJ1ZmZlcigpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1CdWZmZXJIYW5kbGVBbGxvY2F0
b3IuYWxsb2NhdGUoKTsKLQotICAgIG1CdWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICBy
ZXR1cm4gaGFuZGxlOwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBzaGFkZXIvcHJvZ3JhbSBu
YW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCi17
Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yLmFsbG9j
YXRlKCk7Ci0KLSAgICBpZiAodHlwZSA9PSBHTF9WRVJURVhfU0hBREVSKQotICAgIHsKLSAgICAg
ICAgbVNoYWRlck1hcFtoYW5kbGVdID0gbmV3IFZlcnRleFNoYWRlcih0aGlzLCBoYW5kbGUpOwot
ICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7Ci0g
ICAgICAgIG1TaGFkZXJNYXBbaGFuZGxlXSA9IG5ldyBGcmFnbWVudFNoYWRlcih0aGlzLCBoYW5k
bGUpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICByZXR1cm4gaGFuZGxl
OwotfQotCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBwcm9ncmFtL3NoYWRlciBuYW1lCi1HTHVpbnQg
UmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0g
bVByb2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1Qcm9ncmFt
TWFwW2hhbmRsZV0gPSBuZXcgUHJvZ3JhbSh0aGlzLCBoYW5kbGUpOwotCi0gICAgcmV0dXJuIGhh
bmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgdGV4dHVyZSBuYW1lCi1HTHVpbnQgUmVz
b3VyY2VNYW5hZ2VyOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBHTHVpbnQgaGFuZGxlID0gbVRl
eHR1cmVIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1UZXh0dXJlTWFwW2hhbmRs
ZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVz
ZWQgcmVuZGVyYnVmZmVyIG5hbWUKLUdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpCi17Ci0gICAgR0x1aW50IGhhbmRsZSA9IG1SZW5kZXJidWZmZXJIYW5kbGVBbGxv
Y2F0b3IuYWxsb2NhdGUoKTsKLQotICAgIG1SZW5kZXJidWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7
Ci0KLSAgICByZXR1cm4gaGFuZGxlOwotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRl
QnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0gICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJP
YmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKLQotICAgIGlmIChidWZmZXJPYmplY3Qg
IT0gbUJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIG1CdWZmZXJIYW5kbGVBbGxvY2F0
b3IucmVsZWFzZShidWZmZXJPYmplY3QtPmZpcnN0KTsKLSAgICAgICAgaWYgKGJ1ZmZlck9iamVj
dC0+c2Vjb25kKSBidWZmZXJPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAgICBtQnVm
ZmVyTWFwLmVyYXNlKGJ1ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTWFu
YWdlcjo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpCi17Ci0gICAgU2hhZGVyTWFwOjppdGVy
YXRvciBzaGFkZXJPYmplY3QgPSBtU2hhZGVyTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChz
aGFkZXJPYmplY3QgIT0gbVNoYWRlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFk
ZXJPYmplY3QtPnNlY29uZC0+Z2V0UmVmQ291bnQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHNoYWRlck9iamVjdC0+
Zmlyc3QpOwotICAgICAgICAgICAgZGVsZXRlIHNoYWRlck9iamVjdC0+c2Vjb25kOwotICAgICAg
ICAgICAgbVNoYWRlck1hcC5lcmFzZShzaGFkZXJPYmplY3QpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmZsYWdG
b3JEZWxldGlvbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdl
cjo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBQcm9ncmFtTWFwOjppdGVy
YXRvciBwcm9ncmFtT2JqZWN0ID0gbVByb2dyYW1NYXAuZmluZChwcm9ncmFtKTsKLQotICAgIGlm
IChwcm9ncmFtT2JqZWN0ICE9IG1Qcm9ncmFtTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgaWYg
KHByb2dyYW1PYmplY3QtPnNlY29uZC0+Z2V0UmVmQ291bnQoKSA9PSAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHByb2dyYW1P
YmplY3QtPmZpcnN0KTsKLSAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtT2JqZWN0LT5zZWNvbmQ7
Ci0gICAgICAgICAgICBtUHJvZ3JhbU1hcC5lcmFzZShwcm9ncmFtT2JqZWN0KTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsgCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5z
ZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJl
c291cmNlTWFuYWdlcjo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBUZXh0
dXJlTWFwOjppdGVyYXRvciB0ZXh0dXJlT2JqZWN0ID0gbVRleHR1cmVNYXAuZmluZCh0ZXh0dXJl
KTsKLQotICAgIGlmICh0ZXh0dXJlT2JqZWN0ICE9IG1UZXh0dXJlTWFwLmVuZCgpKQotICAgIHsK
LSAgICAgICAgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3IucmVsZWFzZSh0ZXh0dXJlT2JqZWN0LT5m
aXJzdCk7Ci0gICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0LT5zZWNvbmQpIHRleHR1cmVPYmplY3Qt
PnNlY29uZC0+cmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZU1hcC5lcmFzZSh0ZXh0dXJlT2Jq
ZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVSZW5kZXJidWZm
ZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9y
IHJlbmRlcmJ1ZmZlck9iamVjdCA9IG1SZW5kZXJidWZmZXJNYXAuZmluZChyZW5kZXJidWZmZXIp
OwotCi0gICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgp
KQotICAgIHsKLSAgICAgICAgbVJlbmRlcmJ1ZmZlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHJl
bmRlcmJ1ZmZlck9iamVjdC0+Zmlyc3QpOwotICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0
LT5zZWNvbmQpIHJlbmRlcmJ1ZmZlck9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7Ci0gICAgICAg
IG1SZW5kZXJidWZmZXJNYXAuZXJhc2UocmVuZGVyYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci19Ci0K
LUJ1ZmZlciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRCdWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkK
LXsKLSAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZlciA9IG1CdWZmZXJNYXAuZmluZChoYW5k
bGUpOwotCi0gICAgaWYgKGJ1ZmZlciA9PSBtQnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBi
dWZmZXItPnNlY29uZDsKLSAgICB9Ci19Ci0KLVNoYWRlciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRT
aGFkZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNo
YWRlciA9IG1TaGFkZXJNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHNoYWRlciA9PSBtU2hh
ZGVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBzaGFkZXItPnNlY29uZDsKLSAgICB9Ci19Ci0KLVRl
eHR1cmUgKlJlc291cmNlTWFuYWdlcjo6Z2V0VGV4dHVyZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQot
ewotICAgIGlmIChoYW5kbGUgPT0gMCkgcmV0dXJuIE5VTEw7Ci0KLSAgICBUZXh0dXJlTWFwOjpp
dGVyYXRvciB0ZXh0dXJlID0gbVRleHR1cmVNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKHRl
eHR1cmUgPT0gbVRleHR1cmVNYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRleHR1cmUtPnNlY29uZDsK
LSAgICB9Ci19Ci0KLVByb2dyYW0gKlJlc291cmNlTWFuYWdlcjo6Z2V0UHJvZ3JhbSh1bnNpZ25l
ZCBpbnQgaGFuZGxlKQotewotICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW0gPSBtUHJv
Z3JhbU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAocHJvZ3JhbSA9PSBtUHJvZ3JhbU1hcC5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vjb25kOwotICAgIH0KLX0KLQotUmVuZGVyYnVm
ZmVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxl
KQotewotICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVyID0gbVJlbmRl
cmJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAocmVuZGVyYnVmZmVyID09IG1SZW5k
ZXJidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmJ1ZmZlci0+c2Vjb25kOwotICAg
IH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OnNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFu
ZGxlLCBSZW5kZXJidWZmZXIgKmJ1ZmZlcikKLXsKLSAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRs
ZV0gPSBidWZmZXI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja0J1ZmZlckFsbG9j
YXRpb24odW5zaWduZWQgaW50IGJ1ZmZlcikKLXsKLSAgICBpZiAoYnVmZmVyICE9IDAgJiYgIWdl
dEJ1ZmZlcihidWZmZXIpKQotICAgIHsKLSAgICAgICAgQnVmZmVyICpidWZmZXJPYmplY3QgPSBu
ZXcgQnVmZmVyKGJ1ZmZlcik7Ci0gICAgICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IGJ1ZmZlck9i
amVjdDsKLSAgICAgICAgYnVmZmVyT2JqZWN0LT5hZGRSZWYoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UmVzb3VyY2VNYW5hZ2VyOjpjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBU
ZXh0dXJlVHlwZSB0eXBlKQotewotICAgIGlmICghZ2V0VGV4dHVyZSh0ZXh0dXJlKSAmJiB0ZXh0
dXJlICE9IDApCi0gICAgewotICAgICAgICBUZXh0dXJlICp0ZXh0dXJlT2JqZWN0OwotCi0gICAg
ICAgIGlmICh0eXBlID09IFRFWFRVUkVfMkQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRleHR1
cmVPYmplY3QgPSBuZXcgVGV4dHVyZTJEKHRleHR1cmUpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gVEVYVFVSRV9DVUJFKQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZXh0
dXJlT2JqZWN0ID0gbmV3IFRleHR1cmVDdWJlTWFwKHRleHR1cmUpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0g
dGV4dHVyZU9iamVjdDsKLSAgICAgICAgdGV4dHVyZU9iamVjdC0+YWRkUmVmKCk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKEdM
dWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciAhPSAwICYmICFnZXRS
ZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAq
cmVuZGVyYnVmZmVyT2JqZWN0ID0gbmV3IFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIsIG5ldyBD
b2xvcmJ1ZmZlcigwLCAwLCBHTF9SR0JBNCwgMCkpOwotICAgICAgICBtUmVuZGVyYnVmZmVyTWFw
W3JlbmRlcmJ1ZmZlcl0gPSByZW5kZXJidWZmZXJPYmplY3Q7Ci0gICAgICAgIHJlbmRlcmJ1ZmZl
ck9iamVjdC0+YWRkUmVmKCk7Ci0gICAgfQotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTE4NWZjOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTA0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlc291cmNlTWFuYWdl
ci5oIDogRGVmaW5lcyB0aGUgUmVzb3VyY2VNYW5hZ2VyIGNsYXNzLCB3aGljaCB0cmFja3Mgb2Jq
ZWN0cwotLy8gc2hhcmVkIGJ5IG11bHRpcGxlIEdMIGNvbnRleHRzLgotCi0jaWZuZGVmIExJQkdM
RVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdF
Ul9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2lu
Y2x1ZGUgPGhhc2hfbWFwPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xh
c3MgQnVmZmVyOwotY2xhc3MgU2hhZGVyOwotY2xhc3MgUHJvZ3JhbTsKLWNsYXNzIFRleHR1cmU7
Ci1jbGFzcyBSZW5kZXJidWZmZXI7Ci0KLWVudW0gVGV4dHVyZVR5cGUKLXsKLSAgICBURVhUVVJF
XzJELAotICAgIFRFWFRVUkVfQ1VCRSwKLQotICAgIFRFWFRVUkVfVFlQRV9DT1VOVCwKLSAgICBU
RVhUVVJFX1VOS05PV04KLX07Ci0KLWVudW0gU2FtcGxlclR5cGUKLXsKLSAgICBTQU1QTEVSX1BJ
WEVMLAotICAgIFNBTVBMRVJfVkVSVEVYCi19OwotCi1jbGFzcyBSZXNvdXJjZU1hbmFnZXIKLXsK
LSAgcHVibGljOgotICAgIFJlc291cmNlTWFuYWdlcigpOwotICAgIH5SZXNvdXJjZU1hbmFnZXIo
KTsKLQotICAgIHZvaWQgYWRkUmVmKCk7Ci0gICAgdm9pZCByZWxlYXNlKCk7Ci0KLSAgICBHTHVp
bnQgY3JlYXRlQnVmZmVyKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7
Ci0gICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKLSAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgp
OwotICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLQotICAgIHZvaWQgZGVsZXRlQnVm
ZmVyKEdMdWludCBidWZmZXIpOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIp
OwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7Ci0gICAgdm9pZCBkZWxl
dGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihH
THVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5k
bGUpOwotICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOwotICAgIFByb2dyYW0g
KmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7Ci0gICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVp
bnQgaGFuZGxlKTsKLSAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFu
ZGxlKTsKLSAgICAKLSAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5k
ZXJidWZmZXIgKnJlbmRlcmJ1ZmZlcik7Ci0KLSAgICB2b2lkIGNoZWNrQnVmZmVyQWxsb2NhdGlv
bih1bnNpZ25lZCBpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGNoZWNrVGV4dHVyZUFsbG9jYXRpb24o
R0x1aW50IHRleHR1cmUsIFRleHR1cmVUeXBlIHR5cGUpOwotICAgIHZvaWQgY2hlY2tSZW5kZXJi
dWZmZXJBbGxvY2F0aW9uKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlc291cmNlTWFuYWdlcik7Ci0KLSAgICBzdGQ6OnNp
emVfdCBtUmVmQ291bnQ7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1aW50LCBC
dWZmZXIqPiBCdWZmZXJNYXA7Ci0gICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7Ci0gICAgSGFuZGxl
QWxsb2NhdG9yIG1CdWZmZXJIYW5kbGVBbGxvY2F0b3I7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6
aGFzaF9tYXA8R0x1aW50LCBTaGFkZXIqPiBTaGFkZXJNYXA7Ci0gICAgU2hhZGVyTWFwIG1TaGFk
ZXJNYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZGV4dDo6aGFzaF9tYXA8R0x1aW50LCBQcm9ncmFtKj4g
UHJvZ3JhbU1hcDsKLSAgICBQcm9ncmFtTWFwIG1Qcm9ncmFtTWFwOwotICAgIEhhbmRsZUFsbG9j
YXRvciBtUHJvZ3JhbVNoYWRlckhhbmRsZUFsbG9jYXRvcjsKLQotICAgIHR5cGVkZWYgc3RkZXh0
OjpoYXNoX21hcDxHTHVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOwotICAgIFRleHR1cmVNYXAg
bVRleHR1cmVNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1UZXh0dXJlSGFuZGxlQWxsb2NhdG9y
OwotCi0gICAgdHlwZWRlZiBzdGRleHQ6Omhhc2hfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOwotICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwot
ICAgIEhhbmRsZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOwotfTsKLQot
fQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1N2ZkM2Q1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4NCAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTaGFkZXIuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgIGRlcml2ZWQgY2xhc3NlcwotLy8gVmVydGV4U2hh
ZGVyIGFuZCBGcmFnbWVudFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2JqZWN0cyBhbmQg
cmVsYXRlZAotLy8gZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4x
MCBwYWdlIDI0IGFuZCBzZWN0aW9uIDMuOCBwYWdlIDg0LgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1NoYWRlci5oIgotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFk
ZXJsYW5nLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdm9pZCAqU2hhZGVyOjptRnJhZ21l
bnRDb21waWxlciA9IE5VTEw7Ci12b2lkICpTaGFkZXI6Om1WZXJ0ZXhDb21waWxlciA9IE5VTEw7
Ci0KLVNoYWRlcjo6U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRs
ZSkgOiBtSGFuZGxlKGhhbmRsZSksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKLXsKLSAgICBt
U291cmNlID0gTlVMTDsKLSAgICBtSGxzbCA9IE5VTEw7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwot
Ci0gICAgdW5jb21waWxlKCk7Ci0gICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7Ci0KLSAgICBtUmVm
Q291bnQgPSAwOwotICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKLX0KLQotU2hhZGVyOjp+U2hh
ZGVyKCkKLXsKLSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAg
IGRlbGV0ZVtdIG1JbmZvTG9nOwotfQotCi1HTHVpbnQgU2hhZGVyOjpnZXRIYW5kbGUoKSBjb25z
dAotewotICAgIHJldHVybiBtSGFuZGxlOwotfQotCi12b2lkIFNoYWRlcjo6c2V0U291cmNlKEdM
c2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpCi17
Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsKLSAgICBpbnQgdG90YWxMZW5ndGggPSAwOwotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGxlbmd0
aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGgg
Kz0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgdG90YWxMZW5ndGggKz0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIG1Tb3VyY2UgPSBuZXcgY2hhclt0b3RhbExlbmd0aCArIDFdOwotICAgIGNo
YXIgKmNvZGUgPSBtU291cmNlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgIHsKLSAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKLQotICAgICAgICBpZiAobGVuZ3Ro
ICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmdMZW5ndGgg
PSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0cmxlbihzdHJpbmdbaV0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3RybmNweShjb2RlLCBzdHJpbmdbaV0sIHN0cmluZ0xlbmd0aCk7Ci0gICAgICAg
IGNvZGUgKz0gc3RyaW5nTGVuZ3RoOwotICAgIH0KLQotICAgIG1Tb3VyY2VbdG90YWxMZW5ndGhd
ID0gJ1wwJzsKLX0KLQotaW50IFNoYWRlcjo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9Ci19
Ci0KLXZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICppbmZvTG9nKQotewotICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICBpZiAoYnVm
U2l6ZSA+IDApCi0gICAgewotICAgICAgICBpZiAobUluZm9Mb2cpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9n
KSk7Ci0gICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAo
bGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0KLX0KLQotaW50
IFNoYWRlcjo6Z2V0U291cmNlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1Tb3VyY2UpCi0g
ICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICBy
ZXR1cm4gc3RybGVuKG1Tb3VyY2UpICsgMTsKLSAgICB9Ci19Ci0KLWludCBTaGFkZXI6OmdldFRy
YW5zbGF0ZWRTb3VyY2VMZW5ndGgoKSBjb25zdAotewotICAgIGlmICghbUhsc2wpCi0gICAgewot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4g
c3RybGVuKG1IbHNsKSArIDE7Ci0gICAgfQotfQotCi12b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1w
bChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpi
dWZmZXIpCi17Ci0gICAgaW50IGluZGV4ID0gMDsKLQotICAgIGlmIChidWZTaXplID4gMCkKLSAg
ICB7Ci0gICAgICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ID0g
c3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOwotICAgICAgICAgICAg
bWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBidWZm
ZXJbaW5kZXhdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAg
ICAgKmxlbmd0aCA9IGluZGV4OwotICAgIH0KLX0KLQotdm9pZCBTaGFkZXI6OmdldFNvdXJjZShH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQotewotICAgIGdl
dFNvdXJjZUltcGwobVNvdXJjZSwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwotfQotCi12b2lk
IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgY2hhciAqYnVmZmVyKQotewotICAgIGdldFNvdXJjZUltcGwobUhsc2wsIGJ1ZlNpemUs
IGxlbmd0aCwgYnVmZmVyKTsKLX0KLQotYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQotewotICAg
IHJldHVybiBtSGxzbCAhPSBOVUxMOwotfQotCi1jb25zdCBjaGFyICpTaGFkZXI6OmdldEhMU0wo
KQotewotICAgIHJldHVybiBtSGxzbDsKLX0KLQotdm9pZCBTaGFkZXI6OmFkZFJlZigpCi17Ci0g
ICAgbVJlZkNvdW50Kys7Ci19Ci0KLXZvaWQgU2hhZGVyOjpyZWxlYXNlKCkKLXsKLSAgICBtUmVm
Q291bnQtLTsKLQotICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQotICAg
IHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOwotICAg
IH0KLX0KLQotdW5zaWduZWQgaW50IFNoYWRlcjo6Z2V0UmVmQ291bnQoKSBjb25zdAotewotICAg
IHJldHVybiBtUmVmQ291bnQ7Ci19Ci0KLWJvb2wgU2hhZGVyOjppc0ZsYWdnZWRGb3JEZWxldGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZWxldGVTdGF0dXM7Ci19Ci0KLXZvaWQgU2hhZGVy
OjpmbGFnRm9yRGVsZXRpb24oKQotewotICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOwotfQotCi0v
LyBQZXJmb3JtIGEgb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNoYWRlciBjb21waWxl
ciAob3IgYWZ0ZXIgYmVpbmcgZGVzdHJ1Y3RlZCBieSByZWxlYXNlQ29tcGlsZXIpCi12b2lkIFNo
YWRlcjo6aW5pdGlhbGl6ZUNvbXBpbGVyKCkKLXsKLSAgICBpZiAoIW1GcmFnbWVudENvbXBpbGVy
KQotICAgIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IFNoSW5pdGlhbGl6ZSgpOwotCi0gICAgICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBy
ZXNvdXJjZXM7Ci0gICAgICAgICAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZyZXNvdXJjZXMp
OwotICAgICAgICAgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLQotICAgICAg
ICAgICAgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSBNQVhfVkVSVEVYX0FUVFJJQlM7Ci0g
ICAgICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBNQVhfVkVSVEVY
X1VOSUZPUk1fVkVDVE9SUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9y
cyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwotICAgICAgICAgICAgcmVz
b3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gY29udGV4dC0+Z2V0TWF4aW11bVZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKCk7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyA9IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCk7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMg
PSBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhGcmFn
bWVudFVuaWZvcm1WZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZl
Y3RvcnMoKTsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IE1BWF9EUkFX
X0JVRkZFUlM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
ID0gMTsKLSAgICAgICAgICAgIC8vIHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0g
Z2V0RGlzcGxheSgpLT5pc0QzZDlFeERldmljZSgpID8gMSA6IDA7IC8vIFRPRE86IGNvbW1lbnRl
ZCBvdXQgdW50aWwgdGhlIGV4dGVuc2lvbiBpcyBhY3R1YWxseSBzdXBwb3J0ZWQuCi0KLSAgICAg
ICAgICAgIG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihTSF9GUkFHTUVO
VF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIFNIX0hMU0xfT1VUUFVULCAmcmVzb3VyY2VzKTsKLSAg
ICAgICAgICAgIG1WZXJ0ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfVkVSVEVY
X1NIQURFUiwgU0hfR0xFUzJfU1BFQywgU0hfSExTTF9PVVRQVVQsICZyZXNvdXJjZXMpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIFNoYWRlcjo6cmVsZWFzZUNvbXBpbGVyKCkKLXsKLSAg
ICBTaERlc3RydWN0KG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBTaERlc3RydWN0KG1WZXJ0ZXhD
b21waWxlcik7Ci0KLSAgICBtRnJhZ21lbnRDb21waWxlciA9IE5VTEw7Ci0gICAgbVZlcnRleENv
bXBpbGVyID0gTlVMTDsKLQotICAgIFNoRmluYWxpemUoKTsKLX0KLQotdm9pZCBTaGFkZXI6OnBh
cnNlVmFyeWluZ3MoKQotewotICAgIGlmIChtSGxzbCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNo
YXIgKmlucHV0ID0gc3Ryc3RyKG1IbHNsLCAiLy8gVmFyeWluZ3MiKSArIDEyOwotCi0gICAgICAg
IHdoaWxlKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgdmFyeWluZ1R5cGVbMjU2
XTsKLSAgICAgICAgICAgIGNoYXIgdmFyeWluZ05hbWVbMjU2XTsKLQotICAgICAgICAgICAgaW50
IG1hdGNoZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0aWMgJTI1NXMgJTI1NXMiLCB2YXJ5aW5nVHlw
ZSwgdmFyeWluZ05hbWUpOwotCi0gICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSAyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBjaGFyICphcnJheSA9IHN0cnN0cih2YXJ5aW5nTmFtZSwgIlsiKTsKLSAgICAgICAgICAg
IGludCBzaXplID0gMTsKLQotICAgICAgICAgICAgaWYgKGFycmF5KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHNpemUgPSBhdG9pKGFycmF5ICsgMSk7Ci0gICAgICAgICAgICAgICAg
KmFycmF5ID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVZhcnlpbmdzLnB1
c2hfYmFjayhWYXJ5aW5nKHBhcnNlVHlwZSh2YXJ5aW5nVHlwZSksIHZhcnlpbmdOYW1lLCBzaXpl
LCBhcnJheSAhPSBOVUxMKSk7Ci0KLSAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlucHV0LCAi
OyIpICsgMjsKLSAgICAgICAgfQotCi0gICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gc3Ryc3RyKG1I
bHNsLCAiR0xfVVNFU19GUkFHX0NPT1JEIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcm9udEZh
Y2luZyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gTlVMTDsKLSAg
ICAgICAgbVVzZXNQb2ludFNpemUgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX1BPSU5UX1NJWkUi
KSAhPSBOVUxMOwotICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9V
U0VTX1BPSU5UX0NPT1JEIikgIT0gTlVMTDsKLSAgICB9Ci19Ci0KLS8vIGluaXRpYWxpemUvY2xl
YW4gdXAgcHJldmlvdXMgc3RhdGUKLXZvaWQgU2hhZGVyOjp1bmNvbXBpbGUoKQotewotICAgIC8v
IHNldCBieSBjb21waWxlVG9ITFNMCi0gICAgZGVsZXRlW10gbUhsc2w7Ci0gICAgbUhsc2wgPSBO
VUxMOwotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQotICAg
IC8vIHNldCBieSBwYXJzZVZhcnlpbmdzCi0gICAgbVZhcnlpbmdzLmNsZWFyKCk7Ci0KLSAgICBt
VXNlc0ZyYWdDb29yZCA9IGZhbHNlOwotICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBmYWxzZTsKLSAg
ICBtVXNlc1BvaW50U2l6ZSA9IGZhbHNlOwotICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwot
fQotCi12b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcikKLXsKLSAgICAv
LyBlbnN1cmUgd2UgZG9uJ3QgcGFzcyBhIE5VTEwgc291cmNlIHRvIHRoZSBjb21waWxlcgotICAg
IGNoYXIgKnNvdXJjZSA9ICJcMCI7Ci0gICAgaWYgKG1Tb3VyY2UpCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBtU291cmNlOwotICAgIH0KLQotICAgIC8vIGVuc3VyZSB0aGUgY29tcGlsZXIgaXMg
bG9hZGVkCi0gICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7Ci0KLSAgICBpbnQgY29tcGlsZU9wdGlv
bnMgPSBTSF9PQkpFQ1RfQ09ERTsKLSAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoOwotICAgIGlm
IChwZXJmQWN0aXZlKCkpCi0gICAgewotICAgICAgICBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgo
KTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlLCBzdHJsZW4o
c291cmNlKSk7Ci0gICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0xJTkVfRElSRUNUSVZFUzsK
LSAgICB9Ci0KLSAgICBpbnQgcmVzdWx0OwotICAgIGlmIChzb3VyY2VQYXRoLmVtcHR5KCkpCi0g
ICAgewotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZzb3VyY2UsIDEsIGNv
bXBpbGVPcHRpb25zKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29uc3QgY2hh
ciogc291cmNlU3RyaW5nc1syXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNvdXJjZVBhdGgu
Y19zdHIoKSwKLSAgICAgICAgICAgIHNvdXJjZQotICAgICAgICB9OwotCi0gICAgICAgIHJlc3Vs
dCA9IFNoQ29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5ncywgMiwgY29tcGlsZU9wdGlvbnMg
fCBTSF9TT1VSQ0VfUEFUSCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCkKLSAgICB7Ci0gICAg
ICAgIGludCBvYmpDb2RlTGVuID0gMDsKLSAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9P
QkpFQ1RfQ09ERV9MRU5HVEgsICZvYmpDb2RlTGVuKTsKLSAgICAgICAgbUhsc2wgPSBuZXcgY2hh
cltvYmpDb2RlTGVuXTsKLSAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCBtSGxzbCk7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGludCBpbmZvTG9nTGVuID0gMDsKLSAg
ICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9JTkZPX0xPR19MRU5HVEgsICZpbmZvTG9nTGVu
KTsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hhcltpbmZvTG9nTGVuXTsKLSAgICAgICAgU2hH
ZXRJbmZvTG9nKGNvbXBpbGVyLCBtSW5mb0xvZyk7Ci0KLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBt
SW5mb0xvZyk7Ci0gICAgfQotfQotCi1HTGVudW0gU2hhZGVyOjpwYXJzZVR5cGUoY29uc3Qgc3Rk
OjpzdHJpbmcgJnR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gImZsb2F0IikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQy
IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMyOwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09ICJmbG9hdDMiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZF
QzM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0NCIpCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQyeDIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9G
TE9BVF9NQVQzOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDR4NCIpCi0gICAg
ewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotCi0gICAgcmV0dXJuIEdMX05PTkU7Ci19Ci0KLS8vIHRydWUgaWYgdmFyeWluZyB4
IGhhcyBhIGhpZ2hlciBwcmlvcml0eSBpbiBwYWNraW5nIHRoYW4geQotYm9vbCBTaGFkZXI6OmNv
bXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpCi17Ci0gICAg
aWYoeC50eXBlID09IHkudHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4LnNpemUgPiB5LnNp
emU7Ci0gICAgfQotCi0gICAgc3dpdGNoICh4LnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OiByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAg
ICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMzoKLSAgICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZh
bHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgc3dpdGNo
KHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJu
IGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVy
biBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJl
dHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1WZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1h
bmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkK
LXsKLX0KLQotVmVydGV4U2hhZGVyOjp+VmVydGV4U2hhZGVyKCkKLXsKLX0KLQotR0xlbnVtIFZl
cnRleFNoYWRlcjo6Z2V0VHlwZSgpCi17Ci0gICAgcmV0dXJuIEdMX1ZFUlRFWF9TSEFERVI7Ci19
Ci0KLXZvaWQgVmVydGV4U2hhZGVyOjp1bmNvbXBpbGUoKQotewotICAgIFNoYWRlcjo6dW5jb21w
aWxlKCk7Ci0KLSAgICAvLyBzZXQgYnkgUGFyc2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMu
Y2xlYXIoKTsKLX07Ci0KLXZvaWQgVmVydGV4U2hhZGVyOjpjb21waWxlKCkKLXsKLSAgICB1bmNv
bXBpbGUoKTsKLQotICAgIGNvbXBpbGVUb0hMU0wobVZlcnRleENvbXBpbGVyKTsKLSAgICBwYXJz
ZUF0dHJpYnV0ZXMoKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7Ci19Ci0KLWludCBWZXJ0ZXhTaGFk
ZXI6OmdldFNlbWFudGljSW5kZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0dHJpYnV0ZU5hbWUpCi17
Ci0gICAgaWYgKCFhdHRyaWJ1dGVOYW1lLmVtcHR5KCkpCi0gICAgewotICAgICAgICBpbnQgc2Vt
YW50aWNJbmRleCA9IDA7Ci0gICAgICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0
dHJpYnV0ZSA9IG1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5l
bmQoKTsgYXR0cmlidXRlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUt
Pm5hbWUgPT0gYXR0cmlidXRlTmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VtYW50aWNJbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2VtYW50
aWNJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgVmVydGV4U2hhZGVyOjpwYXJzZUF0
dHJpYnV0ZXMoKQotewotICAgIGNvbnN0IGNoYXIgKmhsc2wgPSBnZXRITFNMKCk7Ci0gICAgaWYg
KGhsc2wpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihobHNsLCAi
Ly8gQXR0cmlidXRlcyIpICsgMTQ7Ci0KLSAgICAgICAgd2hpbGUodHJ1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVUeXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIGF0
dHJpYnV0ZU5hbWVbMjU2XTsKLQotICAgICAgICAgICAgaW50IG1hdGNoZXMgPSBzc2NhbmYoaW5w
dXQsICJzdGF0aWMgJTI1NXMgXyUyNTVzIiwgYXR0cmlidXRlVHlwZSwgYXR0cmlidXRlTmFtZSk7
Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1BdHRyaWJ1dGVz
LnB1c2hfYmFjayhBdHRyaWJ1dGUocGFyc2VUeXBlKGF0dHJpYnV0ZVR5cGUpLCBhdHRyaWJ1dGVO
YW1lKSk7Ci0KLSAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlucHV0LCAiOyIpICsgMjsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotRnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKFJlc291
cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBTaGFkZXIobWFuYWdlciwgaGFu
ZGxlKQotewotfQotCi1GcmFnbWVudFNoYWRlcjo6fkZyYWdtZW50U2hhZGVyKCkKLXsKLX0KLQot
R0xlbnVtIEZyYWdtZW50U2hhZGVyOjpnZXRUeXBlKCkKLXsKLSAgICByZXR1cm4gR0xfRlJBR01F
TlRfU0hBREVSOwotfQotCi12b2lkIEZyYWdtZW50U2hhZGVyOjpjb21waWxlKCkKLXsKLSAgICB1
bmNvbXBpbGUoKTsKLQotICAgIGNvbXBpbGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIpOwotICAg
IHBhcnNlVmFyeWluZ3MoKTsKLSAgICBtVmFyeWluZ3Muc29ydChjb21wYXJlVmFyeWluZyk7Ci19
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1No
YWRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwODNlYy4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTY2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFNoYWRlci5oOiBEZWZp
bmVzIHRoZSBhYnN0cmFjdCBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZl
ZAotLy8gY2xhc3NlcyBWZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1lbnRz
IEdMIHNoYWRlciBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdM
IEVTIDIuMC4yNF0gc2VjdGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24KLS8vIDMuOCBwYWdl
IDg0LgotCi0jaWZuZGVmIExJQkdMRVNWMl9TSEFERVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1NI
QURFUl9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNp
bmNsdWRlIDxkM2R4OS5oPgotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0j
aW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsK
LXN0cnVjdCBWYXJ5aW5nCi17Ci0gICAgVmFyeWluZyhHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUsIGludCBzaXplLCBib29sIGFycmF5KQotICAgICAgICA6IHR5cGUodHlwZSks
IG5hbWUobmFtZSksIHNpemUoc2l6ZSksIGFycmF5KGFycmF5KSwgcmVnKC0xKSwgY29sKC0xKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwot
ICAgIGludCBzaXplOyAgIC8vIE51bWJlciBvZiAndHlwZScgZWxlbWVudHMKLSAgICBib29sIGFy
cmF5OwotCi0gICAgaW50IHJlZzsgICAgLy8gRmlyc3QgdmFyeWluZyByZWdpc3RlciwgYXNzaWdu
ZWQgZHVyaW5nIGxpbmsKLSAgICBpbnQgY29sOyAgICAvLyBGaXJzdCByZWdpc3RlciBlbGVtZW50
LCBhc3NpZ25lZCBkdXJpbmcgbGluawotfTsKLQotdHlwZWRlZiBzdGQ6Omxpc3Q8VmFyeWluZz4g
VmFyeWluZ0xpc3Q7Ci0KLWNsYXNzIFNoYWRlcgotewotICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFt
QmluYXJ5OwotCi0gIHB1YmxpYzoKLSAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2Vy
LCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIHZpcnR1YWwgflNoYWRlcigpOwotCi0gICAgdmlydHVh
bCBHTGVudW0gZ2V0VHlwZSgpID0gMDsKLSAgICBHTHVpbnQgZ2V0SGFuZGxlKCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGRlbGV0ZVNvdXJjZSgpOwotICAgIHZvaWQgc2V0U291cmNlKEdMc2l6ZWkgY291
bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpOwotICAgIGludCBn
ZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKLSAgICBpbnQgZ2V0U291cmNl
TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Ci0gICAgaW50IGdldFRyYW5zbGF0ZWRTb3VyY2VM
ZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZT
aXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
Y29tcGlsZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5jb21waWxlKCk7Ci0gICAgYm9vbCBp
c0NvbXBpbGVkKCk7Ci0gICAgY29uc3QgY2hhciAqZ2V0SExTTCgpOwotCi0gICAgdm9pZCBhZGRS
ZWYoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291bnQo
KSBjb25zdDsKLSAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7Ci0gICAgdm9p
ZCBmbGFnRm9yRGVsZXRpb24oKTsKLQotICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigp
OwotCi0gIHByb3RlY3RlZDoKLSAgICB2b2lkIHBhcnNlVmFyeWluZ3MoKTsKLQotICAgIHZvaWQg
Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcik7Ci0KLSAgICB2b2lkIGdldFNvdXJjZUltcGwo
Y2hhciAqc291cmNlLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVm
ZmVyKTsKLQotICAgIHN0YXRpYyBHTGVudW0gcGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0
eXBlKTsKLSAgICBzdGF0aWMgYm9vbCBjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBj
b25zdCBWYXJ5aW5nICZ5KTsKLQotICAgIFZhcnlpbmdMaXN0IG1WYXJ5aW5nczsKLQotICAgIGJv
b2wgbVVzZXNGcmFnQ29vcmQ7Ci0gICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOwotICAgIGJvb2wg
bVVzZXNQb2ludFNpemU7Ci0gICAgYm9vbCBtVXNlc1BvaW50Q29vcmQ7Ci0KLSAgICBzdGF0aWMg
dm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7Ci0gICAgc3RhdGljIHZvaWQgKm1WZXJ0ZXhDb21waWxl
cjsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXIpOwot
Ci0gICAgdm9pZCBpbml0aWFsaXplQ29tcGlsZXIoKTsKLQotICAgIGNvbnN0IEdMdWludCBtSGFu
ZGxlOwotICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7ICAgICAvLyBOdW1iZXIgb2YgcHJvZ3Jh
bSBvYmplY3RzIHRoaXMgc2hhZGVyIGlzIGF0dGFjaGVkIHRvCi0gICAgYm9vbCBtRGVsZXRlU3Rh
dHVzOyAgICAgICAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2hhZGVyIGNhbiBiZSBk
ZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQotCi0gICAgY2hhciAqbVNvdXJjZTsKLSAgICBj
aGFyICptSGxzbDsKLSAgICBjaGFyICptSW5mb0xvZzsKLQotICAgIFJlc291cmNlTWFuYWdlciAq
bVJlc291cmNlTWFuYWdlcjsKLX07Ci0KLXN0cnVjdCBBdHRyaWJ1dGUKLXsKLSAgICBBdHRyaWJ1
dGUoKSA6IHR5cGUoR0xfTk9ORSksIG5hbWUoIiIpCi0gICAgewotICAgIH0KLQotICAgIEF0dHJp
YnV0ZShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIDogdHlwZSh0eXBlKSwg
bmFtZShuYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0
cmluZyBuYW1lOwotfTsKLQotdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0
ZUFycmF5OwotCi1jbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCi17Ci0gICAgZnJp
ZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7Ci0KLSAgcHVibGljOgotICAgIFZlcnRleFNoYWRlcihS
ZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwotCi0gICAgflZlcnRleFNo
YWRlcigpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBjb21waWxlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwotICAgIGludCBnZXRT
ZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKLQotICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOwotCi0gICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZXMoKTsKLQotICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVz
OwotfTsKLQotY2xhc3MgRnJhZ21lbnRTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCi17Ci0gIHB1Ymxp
YzoKLSAgICBGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBo
YW5kbGUpOwotCi0gICAgfkZyYWdtZW50U2hhZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRUeXBlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKTsKLQotICBwcml2YXRlOgotICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFnbWVudFNoYWRlcik7Ci19OwotfQotCi0jZW5k
aWYgICAvLyBMSUJHTEVTVjJfU0hBREVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmZmMjQ1My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkwOSArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0vLyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1
cmUgY2xhc3MgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMKLS8vIFRleHR1cmUyRCBhbmQgVGV4dHVy
ZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZCByZWxhdGVkCi0vLyBm
dW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0KLSNpbmNsdWRlIDxkM2R4OXRleC5oPgot
Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGludHJpbi5oPgotCi0jaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0JsaXQu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLQotbmFtZXNwYWNlIGdsCi17
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6Om1DdXJyZW50VGV4dHVyZVNlcmlhbCA9IDE7
Ci0KLXN0YXRpYyBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlKQotewotICAgIGlmIChJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9JTlRaOwotICAgIH0KLSAgICBlbHNlIGlmIChmb3Jt
YXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgICAgICAgIGZv
cm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEM0RGTVRfRFhUMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpCi0gICAgewotICAgICAgICByZXR1cm4gRDNE
Rk1UX0RYVDM7Ci0gICAgfQotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQ1Owot
ICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEQzREZNVF9BMzJCMzJHMzJSMzJGOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdM
X0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEQzREZNVF9BMTZCMTZHMTZS
MTZGOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAg
ewotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRSAmJiBnZXRDb250ZXh0KCktPnN1
cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9MODsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVN
SU5BTkNFX0FMUEhBICYmIGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1
cmVzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThMODsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfUkdCKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci0KLSAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4
OwotfQotCi1zdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBm
b3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzd2l0Y2goZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRDNERk1UX0w4OgotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6
Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RG
T1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCi17Ci0g
ICAgRFdPUkQgZDNkdXNhZ2UgPSAwOwotCi0gICAgaWYgKGQzZGZtdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJTDsKLSAgICB9
Ci0gICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKElzVGV4dHVyZUZvcm1hdFJlbmRlcmFi
bGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xF
KSkpCi0gICAgewotICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7Ci0g
ICAgfQotICAgIHJldHVybiBkM2R1c2FnZTsKLX0KLQotSW1hZ2U6OkltYWdlKCkKLXsKLSAgICBt
V2lkdGggPSAwOyAKLSAgICBtSGVpZ2h0ID0gMDsKLSAgICBtRm9ybWF0ID0gR0xfTk9ORTsKLSAg
ICBtVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0KLSAgICBtU3VyZmFjZSA9IE5VTEw7Ci0KLSAg
ICBtRGlydHkgPSBmYWxzZTsKLQotICAgIG1EM0RQb29sID0gRDNEUE9PTF9TWVNURU1NRU07Ci0g
ICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotfQotCi1JbWFnZTo6fkltYWdlKCkKLXsK
LSAgICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwot
ICAgIH0KLX0KLQotYm9vbCBJbWFnZTo6cmVkZWZpbmUoR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlLCBib29sIGZvcmNlUmVsZWFzZSkKLXsK
LSAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8Ci0gICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8
Ci0gICAgICAgIG1Gb3JtYXQgIT0gZm9ybWF0IHx8Ci0gICAgICAgIG1UeXBlICE9IHR5cGUgfHwK
LSAgICAgICAgZm9yY2VSZWxlYXNlKQotICAgIHsKLSAgICAgICAgbVdpZHRoID0gd2lkdGg7Ci0g
ICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7Ci0gICAg
ICAgIG1UeXBlID0gdHlwZTsKLSAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0
IHdpbGwgYmUgdXNlZAotICAgICAgICBtRDNERm9ybWF0ID0gQ29udmVydFRleHR1cmVGb3JtYXRU
eXBlKG1Gb3JtYXQsIG1UeXBlKTsKLQotICAgICAgICBpZiAobVN1cmZhY2UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3VyZmFjZSA9
IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OmNyZWF0ZVN1cmZhY2UoKQotewotICAgIGlm
KG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElEaXJlY3Qz
RFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3
U3VyZmFjZSA9IE5VTEw7Ci0gICAgY29uc3QgRDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZ
U1RFTU1FTTsKLSAgICBjb25zdCBEM0RGT1JNQVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7
Ci0gICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBEM0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZl
ciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBt
SGVpZ2h0ICE9IDApCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKLSAgICAg
ICAgR0xzaXplaSByZXF1ZXN0V2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVz
dEhlaWdodCA9IG1IZWlnaHQ7Ci0gICAgICAgIGlmIChJc0NvbXByZXNzZWQobUZvcm1hdCkgJiYg
KG1XaWR0aCAlIDQgIT0gMCB8fCBtSGVpZ2h0ICUgNCAhPSAwKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYm9vbCBpc011bHQ0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgdXBzYW1wbGVDb3Vu
dCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoIWlzTXVsdDQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmVxdWVzdFdpZHRoIDw8PSAxOwotICAgICAgICAgICAgICAgIHJlcXVlc3RI
ZWlnaHQgPDw9IDE7Ci0gICAgICAgICAgICAgICAgdXBzYW1wbGVDb3VudCsrOwotICAgICAgICAg
ICAgICAgIGlmIChyZXF1ZXN0V2lkdGggJSA0ID09IDAgJiYgcmVxdWVzdEhlaWdodCAlIDQgPT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlzTXVsdDQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxldmVsVG9G
ZXRjaCA9IHVwc2FtcGxlQ291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdo
dCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgZDNkRm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2xUb1VzZSwgJm5ld1RleHR1cmUs
IE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIHN1cmZh
Y2UgZmFpbGVkLiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVs
VG9GZXRjaCwgJm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0g
ICAgfQotCi0gICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwotICAgIG1EaXJ0eSA9IGZhbHNlOwot
ICAgIG1EM0RQb29sID0gcG9vbFRvVXNlOwotfQotCi1IUkVTVUxUIEltYWdlOjpsb2NrKEQzRExP
Q0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KQotewotICAgIGNyZWF0ZVN1
cmZhY2UoKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotCi0g
ICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gbVN1cmZhY2UtPkxvY2tS
ZWN0KGxvY2tlZFJlY3QsIHJlY3QsIDApOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotCi0gICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBJbWFnZTo6dW5sb2NrKCkKLXsKLSAgICBpZiAobVN1cmZhY2UpCi0gICAg
ewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgfQotfQotCi1ib29sIEltYWdlOjpp
c1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gSXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KLUQzREZPUk1BVCBJbWFnZTo6Z2V0
RDNERm9ybWF0KCkgY29uc3QKLXsKLSAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0
aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0Ci0gICAgLy8gd2hpY2ggd291bGQg
YmUgYSBidWcgYnkgdGhlIGNhbGxlcgotICAgIEFTU0VSVChtRDNERm9ybWF0ICE9IEQzREZNVF9V
TktOT1dOKTsKLQotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1JRGlyZWN0M0RTdXJmYWNl
OSAqSW1hZ2U6OmdldFN1cmZhY2UoKQotewotICAgIGNyZWF0ZVN1cmZhY2UoKTsKLQotICAgIHJl
dHVybiBtU3VyZmFjZTsKLX0KLQotdm9pZCBJbWFnZTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UpCi17Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAg
ICAgRDNEWExvYWRTdXJmYWNlRnJvbVN1cmZhY2Uoc3VyZmFjZSwgTlVMTCwgTlVMTCwgbVN1cmZh
Y2UsIE5VTEwsIE5VTEwsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgIG1TdXJmYWNlLT5S
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgc3VyZmFj
ZS0+R2V0RGVzYygmZGVzYyk7Ci0gICAgQVNTRVJUKGRlc2MuUG9vbCA9PSBEM0RQT09MX01BTkFH
RUQpOwotCi0gICAgbVN1cmZhY2UgPSBzdXJmYWNlOwotICAgIG1EM0RQb29sID0gZGVzYy5Qb29s
OwotfQotCi12b2lkIEltYWdlOjp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0
U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi17Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UgPSBn
ZXRTdXJmYWNlKCk7Ci0KLSAgICBpZiAoc291cmNlU3VyZmFjZSAmJiBzb3VyY2VTdXJmYWNlICE9
IGRlc3RTdXJmYWNlKQotICAgIHsKLSAgICAgICAgUkVDVCByZWN0OwotICAgICAgICByZWN0Lmxl
ZnQgPSB4b2Zmc2V0OwotICAgICAgICByZWN0LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAgIHJlY3Qu
cmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgICAgIHJlY3QuYm90dG9tID0geW9mZnNldCAr
IGhlaWdodDsKLQotICAgICAgICBpZiAobUQzRFBvb2wgPT0gRDNEUE9PTF9NQU5BR0VEKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21T
dXJmYWNlKGRlc3RTdXJmYWNlLCBOVUxMLCAmcmVjdCwgc291cmNlU3VyZmFjZSwgTlVMTCwgJnJl
Y3QsIEQzRFhfRklMVEVSX0JPWCwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gVXBkYXRlU3VyZmFjZTogc291cmNlIG11c3QgYmUgU1lTVEVNTUVNLCBkZXN0IG11c3QgYmUg
REVGQVVMVCBwb29scyAKLSAgICAgICAgICAgIFBPSU5UIHBvaW50ID0ge3JlY3QubGVmdCwgcmVj
dC50b3B9OwotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+VXBkYXRl
U3VyZmFjZShzb3VyY2VTdXJmYWNlLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci0vLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zm
c2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5w
dXQKLS8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCi12b2lkIEltYWdlOjpsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQotewotICAgIFJFQ1QgbG9ja1JlY3QgPQotICAg
IHsKLSAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKLSAgICAgICAgeG9mZnNldCArIHdpZHRoLCB5
b2Zmc2V0ICsgaGVpZ2h0Ci0gICAgfTsKLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKLSAg
ICBIUkVTVUxUIHJlc3VsdCA9IGxvY2soJmxvY2tlZCwgJmxvY2tSZWN0KTsKLSAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR0xzaXpl
aSBpbnB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBtRm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQpOwotCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgIGlmIChzdXBwb3J0c1NTRTIoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkQWxwaGFEYXRhU1NFMih3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGxvYWRBbHBoYURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgbG9hZEx1bWluYW5jZURh
dGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2Vk
LnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBsb2FkTHVt
aW5hbmNlQWxwaGFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBsb2Fk
UkdCVUJ5dGVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNTU0UyKCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZFJH
QkFVQnl0ZURhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBsb2FkQkdSQURhdGEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OgotICAgICAgICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX1JHQjoKLSAgICAgICAgICAgIGxvYWRSR0I1NjVEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAg
ICBzd2l0Y2ggKG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgICAgICAgICBsb2FkUkdCQTQ0NDREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2gg
KG1Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICBsb2FkUkdCQTU1NTFEYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9GTE9BVDoKLSAgICAgICAgc3dpdGNoIChtRm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwg
YXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECi0gICAgICAgICAgY2FzZSBHTF9BTFBI
QToKLSAgICAgICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICBsb2FkTHVtaW5h
bmNlRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0
YSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgICAgICBsb2FkUkdCRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0g
ICAgICAgIHN3aXRjaCAobUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIC8vIGZsb2F0IHRl
eHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVk
IHRoYXQgd2F5IGluIEQzRAotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICBs
b2FkQWxwaGFIYWxmRmxvYXREYXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXRE
YXRhKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQToKLSAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
ICAgbG9hZFJHQkhhbGZGbG9hdERhdGEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgfQotCi0gICAgdW5sb2NrKCk7Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLSAgICAKLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17
Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBp
bnQgKmRlc3QgPSBOVUxMOwotICAgIF9fbTEyOGkgemVyb1dpZGUgPSBfbW1fc2V0emVyb19zaTEy
OCgpOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwotCi0gICAgICAgIGludCB4OwotICAgICAgICAvLyBNYWtlIG91dHB1dCB3cml0ZXMgYWxp
Z25lZAotICAgICAgICBmb3IgKHggPSAwOyAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZk
ZXN0W3hdKSAmIDB4RikgIT0gMCAmJiB4IDwgd2lkdGgpOyB4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRlc3RbeF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNvdXJjZVt4XSkgPDwg
MjQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKDsgeCArIDcgPCB3aWR0aDsgeCArPSA4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBfX20xMjhpIHNvdXJjZURhdGEgPSBfbW1fbG9hZGxfZXBp
NjQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVt4XSkpOwotICAgICAg
ICAgICAgLy8gSW50ZXJsZWF2ZSBlYWNoIGJ5dGUgdG8gMTZiaXQsIG1ha2UgdGhlIGxvd2VyIGJ5
dGUgdG8gemVybwotICAgICAgICAgICAgc291cmNlRGF0YSA9IF9tbV91bnBhY2tsb19lcGk4KHpl
cm9XaWRlLCBzb3VyY2VEYXRhKTsKLSAgICAgICAgICAgIC8vIEludGVybGVhdmUgZWFjaCAxNmJp
dCB0byAzMmJpdCwgbWFrZSB0aGUgbG93ZXIgMTZiaXQgdG8gemVybwotICAgICAgICAgICAgX19t
MTI4aSBsbyA9IF9tbV91bnBhY2tsb19lcGkxNih6ZXJvV2lkZSwgc291cmNlRGF0YSk7Ci0gICAg
ICAgICAgICBfX20xMjhpIGhpID0gX21tX3VucGFja2hpX2VwaTE2KHplcm9XaWRlLCBzb3VyY2VE
YXRhKTsKLQotICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19t
MTI4aSo+KCZkZXN0W3hdKSwgbG8pOwotICAgICAgICAgICAgX21tX3N0b3JlX3NpMTI4KHJlaW50
ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0W3ggKyA0XSksIGhpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIEhhbmRsZSB0aGUgcmVtYWluZGVyCi0gICAgICAgIGZvciAoOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFt4XSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGludD4oc291cmNlW3hdKSA8PCAyNDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZEFscGhhRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9
IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAq
c291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7
Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaDsKLQotICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5h
dGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2Vb
eF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSAgIC8vIEw4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0g
ICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxv
YXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAw
eDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBm
bHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRp
dmUpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAg
ICAgICAgCi0gICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1h
dAotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNl
WzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBd
OwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNw
eShkZXN0LCBzb3VyY2UsIHdpZHRoICogMik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNv
dXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNl
WzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
NTY1RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAxRikg
Pj4gMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3RTApID4+
IDMpIHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyAr
IDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0g
MTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgX19tMTI4aSBick1hc2sgPSBfbW1f
c2V0MV9lcGkzMigweDAwZmYwMGZmKTsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsKLSAgICAgICAgaW50IHggPSAwOwotCi0gICAgICAgIC8vIE1ha2Ugb3V0cHV0IHdyaXRl
cyBhbGlnbmVkCi0gICAgICAgIGZvciAoeCA9IDA7ICgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oJmRlc3RbeF0pICYgMTUpICE9IDApICYmIHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgwMGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZm
MDApOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICg7IHggKyAzIDwgd2lkdGg7IHggKz0gNCkK
LSAgICAgICAgewotICAgICAgICAgICAgX19tMTI4aSBzb3VyY2VEYXRhID0gX21tX2xvYWR1X3Np
MTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbeF0pKTsKLSAgICAg
ICAgICAgIC8vIE1hc2sgb3V0IGcgYW5kIGEsIHdoaWNoIGRvbid0IGNoYW5nZQotICAgICAgICAg
ICAgX19tMTI4aSBnYUNvbXBvbmVudHMgPSBfbW1fYW5kbm90X3NpMTI4KGJyTWFzaywgc291cmNl
RGF0YSk7Ci0gICAgICAgICAgICAvLyBNYXNrIG91dCBiIGFuZCByCi0gICAgICAgICAgICBfX20x
MjhpIGJyQ29tcG9uZW50cyA9IF9tbV9hbmRfc2kxMjgoc291cmNlRGF0YSwgYnJNYXNrKTsKLSAg
ICAgICAgICAgIC8vIFN3YXAgYiBhbmQgcgotICAgICAgICAgICAgX19tMTI4aSBiclN3YXBwZWQg
PSBfbW1fc2h1ZmZsZWhpX2VwaTE2KF9tbV9zaHVmZmxlbG9fZXBpMTYoYnJDb21wb25lbnRzLCBf
TU1fU0hVRkZMRSgyLCAzLCAwLCAxKSksIF9NTV9TSFVGRkxFKDIsIDMsIDAsIDEpKTsKLSAgICAg
ICAgICAgIF9fbTEyOGkgcmVzdWx0ID0gX21tX29yX3NpMTI4KGdhQ29tcG9uZW50cywgYnJTd2Fw
cGVkKTsKLSAgICAgICAgICAgIF9tbV9zdG9yZV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEy
OGkqPigmZGVzdFt4XSksIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQZXJmb3Jt
IGxlZnRvdmVyIHdyaXRlcwotICAgICAgICBmb3IgKDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAg
ICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhm
ZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5
dGVEYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbeF0gPSAoX3JvdGwocmdiYSwgMTYpICYgMHgw
MGZmMDBmZikgfCAocmdiYSAmIDB4ZmYwMGZmMDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJj
ZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwg
MCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2Jh
ICYgMHhGMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEg
JiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJn
YmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAw
eDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+
IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4
KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNd
ID0gKHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRSR0JBRmxvYXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAg
ICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0
aCAqIDE2KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBSGFsZkZsb2F0RGF0YShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQkdSQURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsK
LSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBtZW1jcHko
ZGVzdCwgc291cmNlLCB3aWR0aCo0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRDb21w
cmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk
ICppbnB1dCkgewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9m
ZnNldCAlIDQgPT0gMCk7Ci0KLSAgICBSRUNUIGxvY2tSZWN0ID0gewotICAgICAgICB4b2Zmc2V0
LCB5b2Zmc2V0LAotICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWlnaHQKLSAg
ICB9OwotCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0g
bG9jaygmbG9ja2VkLCAmbG9ja1JlY3QpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6ZSA9IENvbXB1
dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtRm9ybWF0KTsKLSAgICBHTHNpemVpIGlu
cHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtRm9ybWF0KTsKLSAgICBp
bnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByb3dzOyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2Vk
LnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlu
cHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9Ci0KLSAgICB1bmxvY2soKTsKLX0KLQotLy8g
VGhpcyBpbXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUg
aW50ZXJuYWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIElt
YWdlOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwot
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXREYXRhID0gTlVMTDsKLSAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNj
cmlwdGlvbik7Ci0gICAgCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZU9mZnNj
cmVlblBsYWluU3VyZmFjZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0LCBk
ZXNjcmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xfU1lTVEVNTUVNLCAmcmVuZGVyVGFyZ2V0RGF0YSwg
TlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGRl
dmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShyZW5kZXJUYXJnZXQsIHJlbmRlclRhcmdldERhdGEp
OwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgRVJSKCJHZXRSZW5k
ZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdl
dERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNlUmVjdCA9IHt4LCB5LCB4ICsgd2lkdGgsIHkgKyBo
ZWlnaHR9OwotICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9mZnNldCwgeG9mZnNldCAr
IHdpZHRoLCB5b2Zmc2V0ICsgaGVpZ2h0fTsKLQotICAgIGlmIChpc1JlbmRlcmFibGVGb3JtYXQo
KSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGdl
dFN1cmZhY2UoKSwgTlVMTCwgJmRlc3RSZWN0LCByZW5kZXJUYXJnZXREYXRhLCBOVUxMLCAmc291
cmNlUmVjdCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb3B5aW5nIHN1cmZhY2Vz
IHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7Ci0gICAgICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRDNETE9DS0VEX1JFQ1Qg
c291cmNlTG9jayA9IHswfTsKLSAgICAgICAgcmVzdWx0ID0gcmVuZGVyVGFyZ2V0RGF0YS0+TG9j
a1JlY3QoJnNvdXJjZUxvY2ssICZzb3VyY2VSZWN0LCAwKTsKLQotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhl
IHNvdXJjZSBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAg
ICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBEM0RMT0NLRURfUkVD
VCBkZXN0TG9jayA9IHswfTsKLSAgICAgICAgcmVzdWx0ID0gbG9jaygmZGVzdExvY2ssICZkZXN0
UmVjdCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2Ug
KHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdl
dERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2NrLnBCaXRzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQg
Y2hhciopc291cmNlTG9jay5wQml0czsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSAodW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
ZGVzY3JpcHRpb24uRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeF0g
PSBzb3VyY2VbeCAqIDQgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBE
M0RGTVRfQThMODoKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSBzb3VyY2VbeCAq
IDQgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMV0gPSBz
b3VyY2VbeCAqIDQgKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToK
LSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFt4XSA9IHJlZCB8IChyZWQgPj4gNSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VM
b2NrLlBpdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRj
aDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICBzd2l0Y2goZ2V0RDNE
Rm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfTDg6Ci0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIg
KyAxXSAmIDB4N0M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IChyZWQg
PDwgMSkgfCAocmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9BOEw4OgotICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
cihpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3gg
KiAyICsgMV0gJiAweDdDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIg
KyAwXSA9IChyZWQgPDwgMSkgfCAocmVkID4+IDQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCAqIDIgKyAxXSA9IChzaWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Qg
Kz0gZGVzdExvY2suUGl0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdW5sb2NrKCk7Ci0gICAg
ICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICB9Ci0KLSAgICByZW5kZXJU
YXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0KLSAgICBtRGlydHkgPSB0cnVlOwotfQotCi1UZXh0dXJl
U3RvcmFnZTo6VGV4dHVyZVN0b3JhZ2UoRFdPUkQgdXNhZ2UpCi0gICAgOiBtRDNEVXNhZ2UodXNh
Z2UpLAotICAgICAgbUQzRFBvb2woZ2V0RGlzcGxheSgpLT5nZXRUZXh0dXJlUG9vbCh1c2FnZSkp
LAotICAgICAgbVRleHR1cmVTZXJpYWwoaXNzdWVUZXh0dXJlU2VyaWFsKCkpCi17Ci19Ci0KLVRl
eHR1cmVTdG9yYWdlOjp+VGV4dHVyZVN0b3JhZ2UoKQotewotfQotCi1ib29sIFRleHR1cmVTdG9y
YWdlOjppc1JlbmRlclRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAo
RDNEVVNBR0VfUkVOREVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsKLX0K
LQotYm9vbCBUZXh0dXJlU3RvcmFnZTo6aXNNYW5hZ2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
KG1EM0RQb29sID09IEQzRFBPT0xfTUFOQUdFRCk7Ci19Ci0KLUQzRFBPT0wgVGV4dHVyZVN0b3Jh
Z2U6OmdldFBvb2woKSBjb25zdAotewotICAgIHJldHVybiBtRDNEUG9vbDsKLX0KLQotRFdPUkQg
VGV4dHVyZVN0b3JhZ2U6OmdldFVzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUQzRFVzYWdl
OwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2U6OmdldFRleHR1cmVTZXJpYWwoKSBj
b25zdAotewotICAgIHJldHVybiBtVGV4dHVyZVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFRl
eHR1cmVTdG9yYWdlOjppc3N1ZVRleHR1cmVTZXJpYWwoKQotewotICAgIHJldHVybiBtQ3VycmVu
dFRleHR1cmVTZXJpYWwrKzsKLX0KLQotVGV4dHVyZTo6VGV4dHVyZShHTHVpbnQgaWQpIDogUmVm
Q291bnRPYmplY3QoaWQpCi17Ci0gICAgbU1pbkZpbHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJ
TkVBUjsKLSAgICBtTWFnRmlsdGVyID0gR0xfTElORUFSOwotICAgIG1XcmFwUyA9IEdMX1JFUEVB
VDsKLSAgICBtV3JhcFQgPSBHTF9SRVBFQVQ7Ci0gICAgbURpcnR5UGFyYW1ldGVycyA9IHRydWU7
Ci0gICAgbVVzYWdlID0gR0xfTk9ORTsKLSAgICAKLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwot
Ci0gICAgbUltbXV0YWJsZSA9IGZhbHNlOwotfQotCi1UZXh0dXJlOjp+VGV4dHVyZSgpCi17Ci19
Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZh
bGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZp
bHRlcikKLXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJF
U1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU1pbkZpbHRlciAhPSBmaWx0ZXIp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZpbHRlcjsKLSAg
ICAgICAgICAgICAgICBtRGlydHlQYXJhbWV0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1
bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVy
ZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCi17Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0g
ICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IGZpbHRlcikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtTWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgICAg
IG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUg
dXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFMoR0xl
bnVtIHdyYXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQ
RUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJST1JF
RF9SRVBFQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFMgIT0gd3JhcCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFMgPSB3cmFwOwotICAgICAgICAgICAg
ICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3Rh
dGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQo
R0xlbnVtIHdyYXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
UkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJS
T1JFRF9SRVBFQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtV3JhcFQgIT0gd3JhcCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtV3JhcFQgPSB3cmFwOwotICAgICAgICAg
ICAgICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHVzYWdl
IHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFVz
YWdlKEdMZW51bSB1c2FnZSkKLXsKLSAgICBzd2l0Y2ggKHVzYWdlKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfTk9ORToKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRToK
LSAgICAgICAgbVVzYWdlID0gdXNhZ2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmU6
OmdldE1pbkZpbHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NaW5GaWx0ZXI7Ci19Ci0KLUdM
ZW51bSBUZXh0dXJlOjpnZXRNYWdGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtTWFnRmls
dGVyOwotfQotCi1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAotewotICAgIHJldHVy
biBtV3JhcFM7Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1XcmFwVDsKLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldFVzYWdlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVVzYWdlOwotfQotCi12b2lkIFRleHR1cmU6OnNldEltYWdlKEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpCi17Ci0gICAg
aWYgKHBpeGVscyAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAs
IGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXRUeXBlKCks
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4
ZWxzICE9IE5VTEwpCi0gICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAs
IDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHBpeGVscyk7Ci0gICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIFRleHR1cmU6OnN1Yklt
YWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWFnZSkKLXsKLSAgICBpZiAocGl4ZWxzICE9
IE5VTEwpCi0gICAgewotICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotICAgICAgICBt
RGlydHlJbWFnZXMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltYWdlKQotewotICAgIGlmIChw
aXhlbHMgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpUZXh0dXJlOjpnZXRUZXh0dXJlKCkKLXsKLSAgICBpZiAoIWlzU2FtcGxl
ckNvbXBsZXRlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAv
LyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0
b3JhZ2UoZmFsc2UpID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9
Ci0KLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKTsK
LX0KLQotYm9vbCBUZXh0dXJlOjpoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdAotewotICAgIHJl
dHVybiBtRGlydHlQYXJhbWV0ZXJzOwotfQotCi1ib29sIFRleHR1cmU6Omhhc0RpcnR5SW1hZ2Vz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbURpcnR5SW1hZ2VzOwotfQotCi12b2lkIFRleHR1cmU6
OnJlc2V0RGlydHkoKQotewotICAgIG1EaXJ0eVBhcmFtZXRlcnMgPSBmYWxzZTsKLSAgICBtRGly
dHlJbWFnZXMgPSBmYWxzZTsKLX0KLQotdW5zaWduZWQgaW50IFRleHR1cmU6OmdldFRleHR1cmVT
ZXJpYWwoKQotewotICAgIFRleHR1cmVTdG9yYWdlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZShmYWxz
ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgOiAw
OwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51
bSB0YXJnZXQpCi17Ci0gICAgVGV4dHVyZVN0b3JhZ2UgKnRleHR1cmUgPSBnZXRTdG9yYWdlKHRy
dWUpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KHRhcmdldCkgOiAwOwotfQotCi1ib29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbUltbXV0YWJsZTsKLX0KLQotR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgaWYgKChpc1Bv
dzIod2lkdGgpICYmIGlzUG93MihoZWlnaHQpKSB8fCBnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4aW11bSBu
dW1iZXIgb2YgbGV2ZWxzCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vIE9wZW5H
TCBFUyAyLjAgd2l0aG91dCBHTF9PRVNfdGV4dHVyZV9ucG90IGRvZXMgbm90IHBlcm1pdCBOUE9U
IG1pcG1hcHMuCi0gICAgICAgIHJldHVybiAxOwotICAgIH0KLX0KLQotR0xpbnQgVGV4dHVyZTo6
Y3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGlv
bkxldmVscyhzaXplLCBzaXplKTsKLX0KLQotaW50IFRleHR1cmU6OmxldmVsQ291bnQoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0
TGV2ZWxDb3VudCgpIDogMDsKLX0KLQotQmxpdCAqVGV4dHVyZTo6Z2V0QmxpdHRlcigpCi17Ci0g
ICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dC0+
Z2V0QmxpdHRlcigpOwotfQotCi1ib29sIFRleHR1cmU6OmNvcHlUb1JlbmRlclRhcmdldChJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9t
TWFuYWdlZCkKLXsKLSAgICBpZiAoc291cmNlICYmIGRlc3QpCi0gICAgewotICAgICAgICBIUkVT
VUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoZnJvbU1hbmFnZWQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKGRlc3QsIE5VTEwsIE5V
TEwsIHNvdXJjZSwgTlVMTCwgTlVMTCwgRDNEWF9GSUxURVJfQk9YLCAwKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IGdldERpc3BsYXkoKTsKLSAgICAgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGRpc3BsYXktPmdldERldmljZSgpOwotCi0gICAgICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgp
OwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzb3VyY2UsIE5VTEws
IGRlc3QsIE5VTEwsIEQzRFRFWEZfTk9ORSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVRleHR1cmVTdG9yYWdlMkQ6OlRleHR1cmVTdG9yYWdlMkQoSURpcmVjdDNEVGV4dHVy
ZTkgKnN1cmZhY2VUZXh0dXJlKSA6IFRleHR1cmVTdG9yYWdlKEQzRFVTQUdFX1JFTkRFUlRBUkdF
VCksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwo
KSkKLXsKLSAgICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOwotfQotCi1UZXh0dXJlU3RvcmFn
ZTJEOjpUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEQzREZPUk1BVCBmb3JtYXQsIERXT1JE
IHVzYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZSh1c2Fn
ZSksIG1SZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwo
KSkKLXsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgLy8gaWYgdGhlIHdpZHRoIG9yIGhlaWdo
dCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRl
IHRleHR1cmUKLSAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2Qg
dGV4dHVyZSBjcmVhdGlvbgotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKLSAgICB7
Ci0gICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBs
ZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwot
Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7Ci0gICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotVGV4dHVyZVN0b3JhZ2UyRDo6flRleHR1cmVTdG9yYWdlMkQoKQotewot
ICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0g
ICAgfQotfQotCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCi0vLyBjYWxsZXIg
bXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHN1cmZhY2UKLUlEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlU3RvcmFnZTJEOjpnZXRTdXJmYWNlTGV2ZWwoaW50IGxldmVsKQotewotICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKLQotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZl
bCwgJnN1cmZhY2UpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0K
LQotICAgIHJldHVybiBzdXJmYWNlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1
cmVTdG9yYWdlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRleHR1
cmU7Ci19Ci0KLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTJEOjpnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNl
cmlhbDsKLX0KLQotVGV4dHVyZTJEOjpUZXh0dXJlMkQoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQp
Ci17Ci0gICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICBt
Q29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7Ci19Ci0KLVRleHR1
cmUyRDo6flRleHR1cmUyRCgpCi17Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotCi0g
ICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLSAgICAKLSAg
ICBpZiAobVN1cmZhY2UpCi0gICAgewotICAgICAgICBtU3VyZmFjZS0+c2V0Qm91bmRUZXh0dXJl
KE5VTEwpOwotICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBXZSBuZWVk
IHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGlu
ZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3ZSBkbyBub3QgYXR0
ZW1wdCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkgd2hpY2gg
aGFzIGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQotdm9pZCBUZXh0dXJl
MkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGlmICht
UHJveHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAgaWYgKG1Qcm94eVJl
ZnMgPT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotfQotCi1HTGVudW0g
VGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFXzJE
OwotfQotCi1HTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17
Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAg
ICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCk7Ci0gICAgZWxzZQotICAg
ICAgICByZXR1cm4gMDsKLX0KLQotR0xzaXplaSBUZXh0dXJlMkQ6OmdldEhlaWdodChHTGludCBs
ZXZlbCkgY29uc3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0SGVpZ2h0KCk7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0
SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJy
YXlbbGV2ZWxdLmdldEZvcm1hdCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7
Ci19Ci0KLUQzREZPUk1BVCBUZXh0dXJlMkQ6OmdldEQzREZvcm1hdChHTGludCBsZXZlbCkgY29u
c3QKLXsKLSAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMp
Ci0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047Ci19Ci0KLXZvaWQgVGV4dHVyZTJE
OjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgcmVsZWFzZVRleEltYWdlKCk7
Ci0KLSAgICBib29sIHJlZGVmaW5lZCA9IG1JbWFnZUFycmF5W2xldmVsXS5yZWRlZmluZShmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIGZhbHNlKTsKLQotICAgIGlmIChtVGV4U3RvcmFnZSAm
JiByZWRlZmluZWQpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
SW1hZ2VBcnJheVtpXS5tYXJrRGlydHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGV0ZSBt
VGV4U3RvcmFnZTsKLSAgICAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwotICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewot
ICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci0K
LSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFy
cmF5W2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJm
YWNlICpzdXJmYWNlKQotewotICAgIHJlbGVhc2VUZXhJbWFnZSgpOwotCi0gICAgR0xlbnVtIGZv
cm1hdDsKLQotICAgIHN3aXRjaChzdXJmYWNlLT5nZXRGb3JtYXQoKSkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgZm9ybWF0ID0gR0xf
UkdCOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1JbWFnZUFycmF5WzBdLnJlZGVm
aW5lKGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIEdM
X1VOU0lHTkVEX0JZVEUsIHRydWUpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQoc3VyZmFjZS0+Z2V0T2Zmc2NyZWVuVGV4
dHVyZSgpKTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgbVN1cmZhY2UgPSBzdXJm
YWNlOwotICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUodGhpcyk7Ci19Ci0KLXZvaWQgVGV4
dHVyZTJEOjpyZWxlYXNlVGV4SW1hZ2UoKQotewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0g
ICAgICAgIG1TdXJmYWNlLT5zZXRCb3VuZFRleHR1cmUoTlVMTCk7Ci0gICAgICAgIG1TdXJmYWNl
ID0gTlVMTDsKLQotICAgICAgICBpZiAobVRleFN0b3JhZ2UpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICAgICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsK
LSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2ldLnJlZGVmaW5lKEdMX1JHQkEsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdl
KEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICByZWRlZmlu
ZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwot
Ci0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUlt
YWdlQXJyYXlbbGV2ZWxdKTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQotewotICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0U3VyZmFjZSgp
ICE9IE5VTEwpOwotCi0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RMZXZlbCA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNl
TGV2ZWwobGV2ZWwpOwotCi0gICAgICAgIGlmIChkZXN0TGV2ZWwpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtsZXZlbF07Ci0gICAgICAgICAgICBp
bWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQpOwotCi0gICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
IGltYWdlLT5tYXJrQ2xlYW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJl
MkQ6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKSkKLSAg
ICB7Ci0gICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkICpwaXhlbHMpCi17Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAm
bUltYWdlQXJyYXlbbGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJl
MkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCi17
Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVy
VGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigi
RmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgcmVkZWZpbmVJbWFnZShsZXZl
bCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFKTsKLSAgIAotICAgIGlm
ICghbUltYWdlQXJyYXlbbGV2ZWxdLmlzUmVuZGVyYWJsZUZvcm1hdCgpKQotICAgIHsKLSAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVu
ZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVu
ZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdl
dCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ubWFy
a0NsZWFuKCk7Ci0KLSAgICAgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2
ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVj
dDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAgICAgICBzb3VyY2VS
ZWN0LnJpZ2h0ID0geCArIHdpZHRoOwotICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5Owot
ICAgICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IG1UZXhTdG9yYWdlLT5nZXRT
dXJmYWNlTGV2ZWwobGV2ZWwpOwotCi0gICAgICAgICAgICBpZiAoZGVzdCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmNvcHkocmVuZGVyVGFyZ2V0LCBzb3Vy
Y2VSZWN0LCBmb3JtYXQsIDAsIDAsIGRlc3QpOwotICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbmRlclRhcmdl
dC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNv
dXJjZSkKLXsKLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLmdl
dFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS5nZXRIZWln
aHQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1JbWFnZUFy
cmF5W2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1Nh
bXBsZXJDb21wbGV0ZSgpKSkKLSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS5jb3B5
KHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7Ci0g
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwotCi0gICAgICAgIGlmIChsZXZl
bCA8IGxldmVsQ291bnQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0
OwotICAgICAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAgICAgICAgICAgIHNvdXJjZVJl
Y3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Ci0g
ICAgICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7Ci0KLQotICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVs
KGxldmVsKTsKLQotICAgICAgICAgICAgaWYgKGRlc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZ2V0QmxpdHRlcigpLT5jb3B5KHJlbmRlclRhcmdldCwgc291cmNlUmVjdCwgbUlt
YWdlQXJyYXlbMF0uZ2V0Rm9ybWF0KCksIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgICAg
ICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotfQotCi12b2lkIFRleHR1cmUyRDo6
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RG
b3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBl
KGludGVybmFsZm9ybWF0KTsKLSAgICBEM0RGT1JNQVQgZDNkZm10ID0gQ29udmVydFRleHR1cmVG
b3JtYXRUeXBlKGZvcm1hdCwgdHlwZSk7Ci0gICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRUZXh0dXJl
VXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsK
LSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgZDNkZm10LCBk
M2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KLSAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLnJlZGVmaW5lKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlw
ZSwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gMSk7Ci0gICAg
ICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKLSAgICB9Ci0KLSAgICBmb3Ig
KGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFM7IGxldmVsKyspCi0gICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0ucmVkZWZp
bmUoR0xfTk9ORSwgMCwgMCwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAg
aWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMg
PSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxl
dmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsKTsKLSAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXS5zZXRNYW5hZ2VkU3VyZmFjZShzdXJmYWNlKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgc2FtcGxpbmcgY29tcGxl
dGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBwYWdlIDg1LgotYm9vbCBU
ZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBHTHNpemVpIHdpZHRo
ID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFn
ZUFycmF5WzBdLmdldEhlaWdodCgpOwotCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9
IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBtaXBt
YXBwaW5nID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCi0gICAgewotICAgICAg
Y2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBp
bmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNh
c2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQ
X0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBpZiAoKGdldEludGVybmFs
Rm9ybWF0KDApID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxp
bmVhckZpbHRlcigpKSB8fAotICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoMCkgPT0gR0xfSEFM
Rl9GTE9BVF9PRVMgJiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVy
KCkpKQotICAgIHsKLSAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1p
bkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGJvb2wgbnBvdFN1cHBvcnQgPSBnZXRDb250ZXh0KCktPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpOwotCi0gICAgaWYgKCFucG90U3VwcG9ydCkKLSAgICB7Ci0gICAg
ICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lkdGgp
KSB8fAotICAgICAgICAgICAgKGdldFdyYXBUKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQ
b3cyKGhlaWdodCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWlwbWFwcGluZykKLSAgICB7Ci0gICAgICAgIGlmICgh
bnBvdFN1cHBvcnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaXNQb3cyKHdpZHRoKSB8
fCAhaXNQb3cyKGhlaWdodCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpc01pcG1h
cENvbXBsZXRlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUZXN0cyBmb3IgMkQgdGV4
dHVyZSAobWlwbWFwKSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMu
Ny4xMCBwYWdlIDgxLgotYm9vbCBUZXh0dXJlMkQ6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAot
ewotICAgIGlmIChpc0ltbXV0YWJsZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0g
ICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKTsKLQotICAgIGlm
ICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGludCBxID0gbG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSk7Ci0K
LSAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCi0gICAgewotICAg
ICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBd
LmdldEZvcm1hdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmdldFR5cGUoKSAhPSBtSW1h
Z2VBcnJheVswXS5nZXRUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0uZ2V0V2lkdGgo
KSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZl
bF0uZ2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZl
bCkpOwotfQotCi1ib29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKLX0K
LQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0QmFzZVRleHR1
cmUoKSA6IE5VTEw7Ci19Ci0KLS8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVz
b3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMKLXZvaWQgVGV4dHVyZTJEOjpjcmVhdGVUZXh0
dXJlKCkKLXsKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0uZ2V0V2lkdGgoKTsK
LSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLmdldEhlaWdodCgpOwotICAgIEdM
aW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgIEQzREZPUk1B
VCBkM2RmbXQgPSBtSW1hZ2VBcnJheVswXS5nZXREM0RGb3JtYXQoKTsKLSAgICBEV09SRCBkM2R1
c2FnZSA9IEdldFRleHR1cmVVc2FnZShkM2RmbXQsIG1Vc2FnZSwgZmFsc2UpOwotCi0gICAgZGVs
ZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IFRleHR1cmVTdG9yYWdlMkQo
bGV2ZWxzLCBkM2RmbXQsIGQzZHVzYWdlLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAKLSAgICBpZiAo
bVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxl
dmVsQ291bnQoKTsKLQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3Vy
ZmFjZSA9IG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwpOwotICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLnNldE1hbmFnZWRTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6
OnVwZGF0ZVRleHR1cmUoKQotewotICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAg
ICAgICAgSW1hZ2UgKmltYWdlID0gJm1JbWFnZUFycmF5W2xldmVsXTsKLQotICAgICAgICBpZiAo
aW1hZ2UtPmlzRGlydHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29tbWl0UmVjdChsZXZl
bCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLmdldFdpZHRoKCksIG1JbWFnZUFycmF5W2xldmVs
XS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIFRleHR1cmVTdG9yYWdlMkQgKm5ld1RleFN0
b3JhZ2UgPSBOVUxMOwotCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCkgIT0gMCAm
JiBtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSAhPSAwKQotICAgIHsKLSAgICAgICAgR0xzaXpl
aSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCk7Ci0gICAgICAgIEdMc2l6ZWkgaGVp
Z2h0ID0gbUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdMaW50IGxldmVscyA9
IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBEM0RGT1JNQVQgZDNkZm10
ID0gbUltYWdlQXJyYXlbMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgICAgIERXT1JEIGQzZHVzYWdl
ID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSk7Ci0KLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZTJE
KGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgaWYg
KG1UZXhTdG9yYWdlICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZXZlbHMg
PSBsZXZlbENvdW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2UgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOwotICAgICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVs
KGkpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291
cmNlLCBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpKQotICAgICAgICAgICAgICAgIHsgICAKLSAg
ICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICBpZiAo
ZGVzdCkgZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZGVzdCkg
ZGVzdC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsKLQot
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1p
cG1hcHMoKQotewotICAgIGlmICghZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1
cmUoKSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBdLmdldFdpZHRo
KCkpIHx8ICFpc1BvdzIobUltYWdlQXJyYXlbMF0uZ2V0SGVpZ2h0KCkpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNl
dCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCi0gICAgdW5z
aWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmdldFdpZHRoKCksIG1J
bWFnZUFycmF5WzBdLmdldEhlaWdodCgpKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7
IGkgPD0gcTsgaSsrKQotICAgIHsKLSAgICAgICAgcmVkZWZpbmVJbWFnZShpLCBtSW1hZ2VBcnJh
eVswXS5nZXRGb3JtYXQoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUlt
YWdlQXJyYXlbMF0uZ2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS5nZXRIZWlnaHQoKSA+PiBpLCAxKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVswXS5nZXRUeXBlKCkpOwotICAgIH0KLQotICAg
IGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gbVRleFN0b3JhZ2UtPmdl
dFN1cmZhY2VMZXZlbChpIC0gMSk7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93
ZXIgPSBtVGV4U3RvcmFnZS0+Z2V0U3VyZmFjZUxldmVsKGkpOwotCi0gICAgICAgICAgICBpZiAo
dXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwot
ICAgICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7Ci0KLSAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtDbGVhbigpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ldLmdldFN1cmZhY2Uo
KSA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKEZBSUxF
RChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtpXS5nZXRTdXJmYWNlKCks
IE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2kgLSAxXS5nZXRTdXJmYWNlKCksIE5VTEwsIE5VTEws
IEQzRFhfRklMVEVSX0JPWCwgMCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVS
UigiIGZhaWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBpIC0gMSwgaSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLm1hcmtEaXJ0eSgpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1SZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVm
ZmVyICopTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwp
Ci0gICAgewotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQo
KSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJnZXQpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbUNvbG9yYnVmZmVyUHJveHk7Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpCi17Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKLQotICAgIC8v
IGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3Rv
cmFnZSh0cnVlKSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQot
Ci0gICAgdXBkYXRlVGV4dHVyZSgpOwotICAgIAotICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBh
IGRlcHRoIHRleHR1cmUKLSAgICBpZiAoaXNEZXB0aCgwKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFN1cmZhY2VMZXZlbCgw
KTsKLX0KLQotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgotLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4
dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBBU1NFUlQodGFy
Z2V0ID09IEdMX1RFWFRVUkVfMkQpOwotCi0gICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRl
eHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCi0gICAg
ewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0K
LSAgICAvLyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSBhIGRlcHRoIHRleHR1cmUKLSAgICBpZiAo
IWlzRGVwdGgoMCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0
dXJuIG1UZXhTdG9yYWdlLT5nZXRTdXJmYWNlTGV2ZWwoMCk7Ci19Ci0KLVRleHR1cmVTdG9yYWdl
ICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCi17Ci0gICAgaWYgKCFt
VGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJn
ZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKLX0KLQotVGV4dHVyZVN0b3JhZ2VDdWJlTWFw
OjpUZXh0dXJlU3RvcmFnZUN1YmVNYXAoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdP
UkQgdXNhZ2UsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2UodXNhZ2UpLCBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWwoUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygp
KQotewotICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9z
aXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKLSAg
ICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVh
dGlvbgotICAgIGlmIChzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBv
b2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcDo6flRleHR1cmVTdG9yYWdlQ3ViZU1hcCgpCi17Ci0gICAgaWYgKG1UZXh0dXJlKQotICAg
IHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLS8vIEluY3JlbWVu
dHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0
dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKLXsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAobVRleHR1cmUpCi0g
ICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShlczJkeDo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpLCBsZXZlbCwgJnN1cmZhY2UpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiBz
dXJmYWNlOwotfQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlQ3ViZU1h
cDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQot
dW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNl
cmlhbCArIFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKLX0KLQotVGV4dHVyZUN1
YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQotewotICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7
Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1GYWNlUHJveHlSZWZz
W2ldID0gMDsKLSAgICB9Ci19Ci0KLVRleHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXAoKQot
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgbUZhY2VQ
cm94aWVzW2ldID0gTlVMTDsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAg
bVRleFN0b3JhZ2UgPSBOVUxMOwotfQotCi0vLyBXZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQg
b2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJzIGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9y
IHRoaXMgdGV4dHVyZSwgc28gdGhhdCB0aGUgdGV4dHVyZSBpcyBub3QgZGVsZXRlZCB3aGlsZSAK
LS8vIHByb3h5IHJlZmVyZW5jZXMgc3RpbGwgZXhpc3QuIElmIHRoZSByZWZlcmVuY2UgY291bnQg
ZHJvcHMgdG8gemVybywKLS8vIHdlIHNldCBvdXIgcHJveHkgcG9pbnRlciBOVUxMLCBzbyB0aGF0
IGEgbmV3IGF0dGVtcHQgYXQgcmVmZXJlbmNpbmcKLS8vIHdpbGwgY2F1c2UgcmVjcmVhdGlvbi4K
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBp
ZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNb
aV0rKzsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsr
KQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID4gMCkKLSAgICAgICAgICAgICAg
ICBtRmFjZVByb3h5UmVmc1tpXS0tOwotCi0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNb
aV0gPT0gMCkKLSAgICAgICAgICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci19Ci0KLUdMc2l6ZWkgVGV4dHVy
ZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewot
ICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0V2lkdGgo
KTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1HTHNpemVpIFRleHR1cmVDdWJl
TWFwOjpnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Ci17Ci0gICAg
aWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICBy
ZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5nZXRIZWlnaHQoKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1HTGVudW0gVGV4dHVyZUN1YmVNYXA6
OmdldEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewot
ICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0uZ2V0Rm9ybWF0
KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQotRDNERk9STUFUIFRl
eHR1cmVDdWJlTWFwOjpnZXREM0RGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0Ci17Ci0gICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS5n
ZXREM0RGb3JtYXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsK
LX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdl
KDAsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAg
IHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NZ
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KQotewotICAgIHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0
SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdlKDMsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLX0KLQotdm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdlKDUsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKLX0K
LQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgcmVkZWZpbmVJ
bWFnZShmYWNlSW5kZXgoZmFjZSksIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VO
U0lHTkVEX0JZVEUpOwotCi0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6
ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0pOwotfQotCi12
b2lkIFRleHR1cmVDdWJlTWFwOjpjb21taXRSZWN0KGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Ci17Ci0gICAgQVNTRVJUKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRTdXJmYWNlKCkgIT0g
TlVMTCk7Ci0KLSAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgewotICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdExldmVsID0gbVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKTsKLSAgICAg
ICAgQVNTRVJUKGRlc3RMZXZlbCAhPSBOVUxMKTsKLQotICAgICAgICBpZiAoZGVzdExldmVsICE9
IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJh
eVtmYWNlXVtsZXZlbF07Ci0gICAgICAgICAgICBpbWFnZS0+dXBkYXRlU3VyZmFjZShkZXN0TGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgICAgICBkZXN0
TGV2ZWwtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgaWYgKFRleHR1cmU6
OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdl
QXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpCi0gICAgewotICAgICAgICBjb21taXRS
ZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgfQotfQotCi0vLyBUZXN0cyBmb3IgY3ViZSBtYXAgc2FtcGxpbmcgY29tcGxl
dGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjguMiBwYWdlIDg2LgotYm9vbCBU
ZXh0dXJlQ3ViZU1hcDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAotewotICAgIGludCBzaXpl
ID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKLQotICAgIGJvb2wgbWlwbWFwcGluZzsK
LQotICAgIHN3aXRjaCAobU1pbkZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6
Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgbWlwbWFwcGluZyA9IGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAgICAg
ICBtaXBtYXBwaW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKChnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAp
ID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
cigpKSB8fAotICAgICAgICAoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkpCi0gICAgewotICAgICAgICBpZiAobU1hZ0ZpbHRl
ciAhPSBHTF9ORUFSRVNUIHx8IChtTWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbU1pbkZpbHRl
ciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpc1BvdzIoc2l6ZSkg
JiYgIWdldENvbnRleHQoKS0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAg
ICAgICBpZiAoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9UT19FREdFIHx8IGdldFdyYXBUKCkgIT0g
R0xfQ0xBTVBfVE9fRURHRSB8fCBtaXBtYXBwaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1pcG1hcHBpbmcpCi0g
ICAgewotICAgICAgICBpZiAoIWlzQ3ViZUNvbXBsZXRlKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBpZiAoIWlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkpICAgLy8gQWxzbyB0ZXN0cyBmb3IgaXND
dWJlQ29tcGxldGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGVzdHMgZm9yIGN1YmUg
dGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBw
YWdlIDgxLgotYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDdWJlQ29tcGxldGUoKSBjb25zdAotewot
ICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS5nZXRXaWR0aCgpIDw9IDAgfHwgbUltYWdlQXJyYXlb
MF1bMF0uZ2V0SGVpZ2h0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBm
YWNlID0gMTsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJh
eVtmYWNlXVswXS5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCkgfHwK
LSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLmdldFdpZHRoKCkgIT0gbUltYWdlQXJy
YXlbMF1bMF0uZ2V0SGVpZ2h0KCkgfHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBd
LmdldEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1hdCgpIHx8Ci0gICAgICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS5nZXRUeXBlKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0u
Z2V0VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
aXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdAotewotICAgIGlmIChpc0ltbXV0YWJsZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFpc0N1YmVDb21w
bGV0ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdMc2l6
ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLmdldFdpZHRoKCk7Ci0KLSAgICBpbnQgcSA9IGxv
ZzIoc2l6ZSk7Ci0KLSAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5nZXRGb3Jt
YXQoKSAhPSBtSW1hZ2VBcnJheVswXVswXS5nZXRGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0uZ2V0VHlwZSgpICE9IG1JbWFnZUFycmF5WzBd
WzBdLmdldFR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVts
ZXZlbF0uZ2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXh0dXJlQ3ViZU1h
cDo6aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAotewotICAg
IHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOwot
fQotCi1JRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlVGV4dHVy
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldEJh
c2VUZXh0dXJlKCkgOiBOVUxMOwotfQotCi0vLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0ZXh0
dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4aXN0
aW5nIG9uZQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgR0xz
aXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKLSAgICBHTGludCBsZXZl
bHMgPSBjcmVhdGlvbkxldmVscyhzaXplLCAwKTsKLSAgICBEM0RGT1JNQVQgZDNkZm10ID0gbUlt
YWdlQXJyYXlbMF1bMF0uZ2V0RDNERm9ybWF0KCk7Ci0gICAgRFdPUkQgZDNkdXNhZ2UgPSBHZXRU
ZXh0dXJlVXNhZ2UoZDNkZm10LCBtVXNhZ2UsIGZhbHNlKTsKLQotICAgIGRlbGV0ZSBtVGV4U3Rv
cmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAobGV2ZWxz
LCBkM2RmbXQsIGQzZHVzYWdlLCBzaXplKTsKLQotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5h
Z2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0g
bVRleFN0b3JhZ2UtPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCArIGZhY2UsIGxldmVsKTsKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVts
ZXZlbF0uc2V0TWFuYWdlZFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjp1cGRhdGVUZXh0dXJlKCkKLXsKLSAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0g
ICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEltYWdlICppbWFnZSA9ICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZl
bF07Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIDAsIDAsIGltYWdlLT5nZXRX
aWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKQot
ewotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7Ci0KLSAg
ICBpZiAobUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKSAhPSAwKQotICAgIHsKLSAgICAgICAg
R0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0uZ2V0V2lkdGgoKTsKLSAgICAgICAgR0xp
bnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSwgMCk7Ci0gICAgICAgIEQzREZPUk1BVCBk
M2RmbXQgPSBtSW1hZ2VBcnJheVswXVswXS5nZXREM0RGb3JtYXQoKTsKLSAgICAgICAgRFdPUkQg
ZDNkdXNhZ2UgPSBHZXRUZXh0dXJlVXNhZ2UoZDNkZm10LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFLCB0cnVlKTsKLQotICAgICAgICBuZXdUZXhTdG9yYWdlID0gbmV3IFRleHR1cmVT
dG9yYWdlQ3ViZU1hcChsZXZlbHMsIGQzZGZtdCwgZDNkdXNhZ2UsIHNpemUpOwotCi0gICAgICAg
IGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGV2
ZWxzID0gbGV2ZWxDb3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBm
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZXZlbHM7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpzb3VyY2UgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7Ci0gICAgICAgICAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gbmV3VGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZh
Y2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjb3B5VG9SZW5kZXJUYXJnZXQoZGVzdCwgc291cmNlLCBtVGV4U3RvcmFn
ZS0+aXNNYW5hZ2VkKCkpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c291cmNlKSBzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRl
c3QpIGRlc3QtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChkZXN0KSBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAg
IG1UZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewot
ICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCB0eXBlKTsKLQotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxz
LCAmbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOwotfQotCi11bnNpZ25lZCBpbnQgVGV4
dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkKLXsKLSAgICBNRVRBX0FTU0VSVChH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1ggPT0gMSk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOwotICAgIE1FVEFfQVNT
RVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCA9PSAzKTsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNCk7Ci0gICAgTUVU
QV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YID09IDUpOwotCi0gICAgcmV0dXJuIGZhY2UgLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1h
Z2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgYm9vbCByZWRlZmluZWQgPSBtSW1h
Z2VBcnJheVtmYWNlXVtsZXZlbF0ucmVkZWZpbmUoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBl
LCBmYWxzZSk7Ci0KLSAgICBpZiAobVRleFN0b3JhZ2UgJiYgcmVkZWZpbmVkKQotICAgIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBm
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFy
a0RpcnR5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgbVRl
eFN0b3JhZ2U7Ci0gICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKLQotICAgICAgICBtRGlydHlJ
bWFnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkK
LXsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5k
ZXJUYXJnZXQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZmFj
ZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgs
IGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdMX1VOU0lHTkVEX0JZVEUpOwotCi0gICAg
aWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQoKSkK
LSAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2Vz
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFn
ZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5tYXJrQ2xlYW4oKTsKLQotICAgICAgICBB
U1NFUlQod2lkdGggPT0gaGVpZ2h0KTsKLQotICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVs
IDwgbGV2ZWxDb3VudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7
Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OwotICAgICAgICAgICAgc291cmNlUmVj
dC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAg
ICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKLQotICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2Uo
dGFyZ2V0LCBsZXZlbCk7Ci0KLSAgICAgICAgICAgIGlmIChkZXN0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJl
Y3QsIGZvcm1hdCwgMCwgMCwgZGVzdCk7Ci0gICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpCi17Ci0gICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXS5nZXRXaWR0aCgpOwotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUg
fHwgeW9mZnNldCArIGhlaWdodCA+IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRl
clRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBpZiAoIXJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIg
dGFyZ2V0LiIpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwotCi0g
ICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5pc1JlbmRlcmFibGVGb3JtYXQo
KSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkKLSAgICB7Ci0gICAg
ICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0
dXJlKCk7Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQg
PSB4OwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0g
eSArIGhlaWdodDsKLQotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QgPSBtVGV4
U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7Ci0KLSAgICAgICAgICAg
IGlmIChkZXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+
Y29weShyZW5kZXJUYXJnZXQsIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmdldEZvcm1h
dCgpLCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxl
YXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3RvcmFnZShHTHNpemVp
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpCi17Ci0gICAgR0xl
bnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBHTGVu
dW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgRDNERk9STUFU
IGQzZGZtdCA9IENvbnZlcnRUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpOwotICAgIERX
T1JEIGQzZHVzYWdlID0gR2V0VGV4dHVyZVVzYWdlKGQzZGZtdCwgbVVzYWdlLCBmYWxzZSk7Ci0K
LSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgVGV4dHVyZVN0
b3JhZ2VDdWJlTWFwKGxldmVscywgZDNkZm10LCBkM2R1c2FnZSwgc2l6ZSk7Ci0gICAgbUltbXV0
YWJsZSA9IHRydWU7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBs
ZXZlbCsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNl
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5yZWRl
ZmluZShmb3JtYXQsIHNpemUsIHNpemUsIHR5cGUsIHRydWUpOwotICAgICAgICAgICAgc2l6ZSA9
IHN0ZDo6bWF4KDEsIHNpemUgPj4gMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFM7IGxldmVsKyspCi0gICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7
IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
LnJlZGVmaW5lKEdMX05PTkUsIDAsIDAsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0g
ICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgZmFj
ZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2
ZWwpOwotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zZXRNYW5hZ2Vk
U3VyZmFjZShzdXJmYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKCkKLXsKLSAgICBpZiAoIWlzQ3Vi
ZUNvbXBsZXRlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgIH0KLQotICAgIGlmICghZ2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBdWzBd
LmdldFdpZHRoKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUHVyZ2UgYXJyYXkg
bGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJh
dGVkIG1pcG1hcCBsZXZlbHMuCi0gICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKG1JbWFnZUFycmF5
WzBdWzBdLmdldFdpZHRoKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsg
ZisrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZWRlZmluZUltYWdlKGYsIGksIG1JbWFnZUFycmF5
W2ZdWzBdLmdldEZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1heChtSW1hZ2VBcnJheVtmXVswXS5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS5nZXRXaWR0aCgp
ID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtm
XVswXS5nZXRUeXBlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1UZXhTdG9yYWdl
ICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBtVGV4U3RvcmFnZS0+Z2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaS0xKTsKLSAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBtVGV4U3RvcmFnZS0+Z2V0
Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZiwgaSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0
ZXIodXBwZXIsIGxvd2VyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAo
bG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKLQotICAgICAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2ZdW2ldLm1hcmtDbGVhbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwg
NjsgZisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBxOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1JbWFnZUFy
cmF5W2ZdW2ldLmdldFN1cmZhY2UoKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChGQUlMRUQoRDNEWExvYWRTdXJmYWNlRnJv
bVN1cmZhY2UobUltYWdlQXJyYXlbZl1baV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBtSW1h
Z2VBcnJheVtmXVtpIC0gMV0uZ2V0U3VyZmFjZSgpLCBOVUxMLCBOVUxMLCBEM0RYX0ZJTFRFUl9C
T1gsIDApKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigiIGZh
aWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBpIC0gMSwgaSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0ubWFya0RpcnR5KCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAqVGV4dHVy
ZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICghSXND
dWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFyZ2V0KTsKLQotICAgIGlmIChtRmFj
ZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNl
XSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KHRoaXMsIHRhcmdldCkpOwotICAgIH0KLQotICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07
Ci19Ci0KLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KLS8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1
cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBBU1NFUlQo
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKLQotICAgIC8vIGVuc3VyZSB0aGUgdW5k
ZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBO
VUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdXBkYXRlVGV4
dHVyZSgpOwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0Q3ViZU1hcFN1cmZhY2Uo
dGFyZ2V0LCAwKTsKLX0KLQotVGV4dHVyZVN0b3JhZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQotewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRl
clRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAg
ICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRl
eFN0b3JhZ2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVGV4dHVyZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxM2ExNjIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MjcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gVGV4dHVyZS5oOiBEZWZpbmVzIHRoZSBhYnN0cmFjdCBnbDo6VGV4dHVyZSBjbGFzcyBhbmQg
aXRzIGNvbmNyZXRlIGRlcml2ZWQKLS8vIGNsYXNzZXMgVGV4dHVyZTJEIGFuZCBUZXh0dXJlQ3Vi
ZU1hcC4gSW1wbGVtZW50cyBHTCB0ZXh0dXJlIG9iamVjdHMgYW5kCi0vLyByZWxhdGVkIGZ1bmN0
aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNyBwYWdlIDYzLgotCi0jaWZu
ZGVmIExJQkdMRVNWMl9URVhUVVJFX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9URVhUVVJFX0hfCi0K
LSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgot
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9S
ZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVz
cGFjZSBlZ2wKLXsKLWNsYXNzIFN1cmZhY2U7Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotY2xhc3Mg
QmxpdDsKLWNsYXNzIEZyYW1lYnVmZmVyOwotCi1lbnVtCi17Ci0gICAgLy8gVGhlc2UgYXJlIHRo
ZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQKLSAgICAvLyBUaGUgYWN0
dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGRldmljZSBjYXBzCi0gICAgLy8gYW5kIHNo
b3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9TSVpFID0gMTYzODQsCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RF
WFRVUkVfU0laRSA9IDE2Mzg0LAotCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQotfTsKLQotY2xhc3MgSW1h
Z2UKLXsKLSAgcHVibGljOgotICAgIEltYWdlKCk7Ci0gICAgfkltYWdlKCk7Ci0KLSAgICBib29s
IHJlZGVmaW5lKEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gdHlwZSwgYm9vbCBmb3JjZVJlbGVhc2UpOwotICAgIHZvaWQgbWFya0RpcnR5KCkge21E
aXJ0eSA9IHRydWU7fQotICAgIHZvaWQgbWFya0NsZWFuKCkge21EaXJ0eSA9IGZhbHNlO30KLQot
ICAgIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7Ci0gICAgRDNERk9STUFUIGdldEQz
REZvcm1hdCgpIGNvbnN0OwotCi0gICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHtyZXR1cm4g
bVdpZHRoO30KLSAgICBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0IHtyZXR1cm4gbUhlaWdodDt9
Ci0gICAgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0IHtyZXR1cm4gbUZvcm1hdDt9Ci0gICAgR0xl
bnVtIGdldFR5cGUoKSBjb25zdCB7cmV0dXJuIG1UeXBlO30KLSAgICBib29sIGlzRGlydHkoKSBj
b25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFN1cmZhY2UoKTsKLQotICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UpOwotICAgIHZvaWQgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwotCi0gICAgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsK
LQotICAgIHZvaWQgbG9hZEFscGhhRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2Fk
QWxwaGFEYXRhU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhRmxv
YXREYXRhKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0
RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlRGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFu
Y2VGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lk
IGxvYWRMdW1pbmFuY2VBbHBoYURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKSBj
b25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERh
dGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQlVC
eXRlRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1RGF0YShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OwotICAgIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAgICB2
b2lkIGxvYWRSR0JBNDQ0NERhdGEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJH
QkE1NTUxRGF0YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCQUZsb2F0RGF0
YShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEJHUkFEYXRhKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwotICAgIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKLQotICAgIHZvaWQgY29weShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2UpOwotCi0gICAgdm9pZCBjcmVh
dGVTdXJmYWNlKCk7Ci0KLSAgICBIUkVTVUxUIGxvY2soRDNETE9DS0VEX1JFQ1QgKmxvY2tlZFJl
Y3QsIGNvbnN0IFJFQ1QgKnJlY3QpOwotICAgIHZvaWQgdW5sb2NrKCk7Ci0KLSAgICBHTHNpemVp
IG1XaWR0aDsKLSAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xlbnVtIG1Gb3JtYXQ7Ci0gICAg
R0xlbnVtIG1UeXBlOwotCi0gICAgYm9vbCBtRGlydHk7Ci0KLSAgICBEM0RQT09MIG1EM0RQb29s
OyAgIC8vIGNhbiBvbmx5IGJlIEQzRFBPT0xfU1lTVEVNTUVNIG9yIEQzRFBPT0xfTUFOQUdFRCBz
aW5jZSBpdCBuZWVkcyB0byBiZSBsb2NrYWJsZS4KLSAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsK
LQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptU3VyZmFjZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVT
dG9yYWdlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlU3RvcmFnZShEV09SRCB1
c2FnZSk7Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpOwotCi0gICAgYm9vbCBpc1Jl
bmRlclRhcmdldCgpIGNvbnN0OwotICAgIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgRDNE
UE9PTCBnZXRQb29sKCkgY29uc3Q7Ci0gICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKLSAgICB1
bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7Ci0K
LSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2Up
OwotCi0gICAgY29uc3QgRFdPUkQgbUQzRFVzYWdlOwotICAgIGNvbnN0IEQzRFBPT0wgbUQzRFBv
b2w7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVRleHR1cmVTZXJpYWw7Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIGludCBpc3N1ZVRleHR1cmVTZXJpYWwoKTsKLQotICAgIHN0YXRpYyB1bnNpZ25l
ZCBpbnQgbUN1cnJlbnRUZXh0dXJlU2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZSA6IHB1Ymxp
YyBSZWZDb3VudE9iamVjdAotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZShHTHVp
bnQgaWQpOwotCi0gICAgdmlydHVhbCB+VGV4dHVyZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGFk
ZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsKLQotICAgIHZp
cnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKLQotICAgIGJvb2wgc2V0TWluRmls
dGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIp
OwotICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0V3JhcFQoR0xl
bnVtIHdyYXApOwotICAgIGJvb2wgc2V0VXNhZ2UoR0xlbnVtIHVzYWdlKTsKLQotICAgIEdMZW51
bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7
Ci0gICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7Ci0gICAgR0xlbnVtIGdldFdyYXBUKCkgY29u
c3Q7Ci0gICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNT
YW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7Ci0KLSAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KmdldFRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsK
LQotICAgIGJvb2wgaGFzRGlydHlQYXJhbWV0ZXJzKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNEaXJ0
eUltYWdlcygpIGNvbnN0OwotICAgIHZvaWQgcmVzZXREaXJ0eSgpOwotICAgIHVuc2lnbmVkIGlu
dCBnZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KTsKLQotICAgIGJvb2wgaXNJbW11dGFibGUoKSBjb25zdDsKLQot
ICAgIHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nh
c3Q8R0x1aW50PigtMSk7ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlv
biB0aW1lLiBUaGUgdmFsdWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0
ZXJlZCB3aXRoIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgotCi0gIHByb3RlY3RlZDoKLSAgICB2b2lk
IHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFn
ZSAqaW1hZ2UpOwotICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
YWdlKTsKLSAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1hZ2UpOwotICAgIGJvb2wgc3ViSW1hZ2VDb21wcmVz
c2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzLCBJbWFnZSAqaW1hZ2UpOwotCi0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0OwotICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdM
c2l6ZWkgc2l6ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
Z2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1
cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0gMDsKLSAgICB2aXJ0dWFsIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkgPSAwOwotCi0gICAg
aW50IGxldmVsQ291bnQoKSBjb25zdDsKLQotICAgIHN0YXRpYyBCbGl0ICpnZXRCbGl0dGVyKCk7
Ci0gICAgc3RhdGljIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsKLQotICAg
IEdMZW51bSBtTWluRmlsdGVyOwotICAgIEdMZW51bSBtTWFnRmlsdGVyOwotICAgIEdMZW51bSBt
V3JhcFM7Ci0gICAgR0xlbnVtIG1XcmFwVDsKLSAgICBib29sIG1EaXJ0eVBhcmFtZXRlcnM7Ci0g
ICAgR0xlbnVtIG1Vc2FnZTsKLQotICAgIGJvb2wgbURpcnR5SW1hZ2VzOwotCi0gICAgYm9vbCBt
SW1tdXRhYmxlOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmUpOwotCi0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJl
bmRlclRhcmdldCkgPSAwOwotfTsKLQotY2xhc3MgVGV4dHVyZVN0b3JhZ2UyRCA6IHB1YmxpYyBU
ZXh0dXJlU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZVN0b3JhZ2Uy
RChJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUpOwotICAgIFRleHR1cmVTdG9yYWdl
MkQoaW50IGxldmVscywgRDNERk9STUFUIGZvcm1hdCwgRFdPUkQgdXNhZ2UsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTJEKCk7Ci0KLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCk7Ci0gICAgSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0Owot
Ci0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdl
MkQpOwotCi0gICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOwotICAgIGNvbnN0IHVuc2ln
bmVkIGludCBtUmVuZGVyVGFyZ2V0U2VyaWFsOwotfTsKLQotY2xhc3MgVGV4dHVyZTJEIDogcHVi
bGljIFRleHR1cmUKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUyRChHTHVpbnQg
aWQpOwotCi0gICAgflRleHR1cmUyRCgpOwotCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0Owot
Ci0gICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgR0xzaXplaSBn
ZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1h
dChHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgRDNERk9STUFUIGdldEQzREZvcm1hdChHTGludCBs
ZXZlbCkgY29uc3Q7Ci0gICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Owot
ICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEltYWdl
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0g
ICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9p
ZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21w
bGV0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7Ci0KLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZl
ciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOwotCi0gIHByb3RlY3RlZDoKLSAgICBm
cmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOwotICAgIHZpcnR1YWwgSURpcmVjdDNE
U3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIElE
aXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7Ci0KLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKLQotICAgIHZp
cnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAg
dmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Ci0K
LSAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKLQotICAgIHZvaWQgcmVkZWZpbmVJ
bWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSB0eXBlKTsKLSAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLQotICAgIEltYWdlIG1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMU107Ci0KLSAgICBUZXh0dXJlU3RvcmFnZTJEICptVGV4U3RvcmFnZTsKLSAgICBlZ2w6OlN1
cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2Ug
Y291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBi
ZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWlu
IGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdv
dWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8g
cG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVy
IHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1
dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRl
cmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0gICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7
Ci19OwotCi1jbGFzcyBUZXh0dXJlU3RvcmFnZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZVN0b3Jh
Z2UKLXsKLSAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlQ3ViZU1hcChpbnQgbGV2ZWxzLCBE
M0RGT1JNQVQgZm9ybWF0LCBEV09SRCB1c2FnZSwgaW50IHNpemUpOwotCi0gICAgdmlydHVhbCB+
VGV4dHVyZVN0b3JhZ2VDdWJlTWFwKCk7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7Ci0gICAgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0OwotCi0g
IHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlQ3Vi
ZU1hcCk7Ci0KLSAgICBJRGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOwotICAgIGNvbnN0
IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7Ci19OwotCi1jbGFzcyBUZXh0
dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBU
ZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpOwotCi0gICAgflRleHR1cmVDdWJlTWFwKCk7Ci0KLSAg
ICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQg
cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBH
TGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7Ci0gICAgCi0gICAgR0xzaXplaSBnZXRXaWR0aChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgR0xzaXplaSBnZXRIZWlnaHQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZv
cm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgRDNERk9STUFUIGdl
dEQzREZvcm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7Ci0gICAgYm9vbCBp
c0NvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldElt
YWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3Na
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0KLSAgICB2b2lkIHNldENvbXByZXNzZWRJbWFn
ZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsK
LQotICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1
YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
RnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcHMoKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xl
bnVtIHRhcmdldCk7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVudW0g
ZmFjZSk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0
dXJlQ3ViZU1hcDsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJn
ZXQoR0xlbnVtIHRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZUN1YmVNYXApOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVy
ZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1
cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpn
ZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKLQotICAgIGJvb2wgaXNDdWJlQ29tcGxldGUo
KSBjb25zdDsKLSAgICBib29sIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZh
Y2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZh
Y2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSk7Ci0KLSAgICBJbWFnZSBtSW1hZ2VBcnJheVs2XVtJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwotCi0gICAgVGV4dHVyZVN0b3JhZ2VDdWJl
TWFwICptVGV4U3RvcmFnZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNl
IGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8g
YmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFp
biBhIGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3
b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8v
IHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRl
ciB0byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBi
dXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5k
ZXJidWZmZXIgKm1GYWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlS
ZWZzWzZdOwotfTsKLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3MGY0NzVmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNzg0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFZlcnRleERhdGFNYW5h
Z2VyLmg6IERlZmluZXMgdGhlIFZlcnRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKLS8vIHJ1
bnMgdGhlIEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzLgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1ZlcnRleERhdGFNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi92ZXJ0ZXhjb252ZXJzaW9uLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL0luZGV4RGF0YU1hbmFnZXIuaCIKLQotbmFtZXNwYWNlCi17Ci0g
ICAgZW51bSB7IElOSVRJQUxfU1RSRUFNX0JVRkZFUl9TSVpFID0gMTAyNCoxMDI0IH07Ci0gICAg
Ly8gVGhpcyBoYXMgdG8gYmUgYXQgbGVhc3QgNGsgb3IgZWxzZSBpdCBmYWlscyBvbiBBVEkgY2Fy
ZHMuCi0gICAgZW51bSB7IENPTlNUQU5UX1ZFUlRFWF9CVUZGRVJfU0laRSA9IDQwOTYgfTsKLX0K
LQotbmFtZXNwYWNlIGdsCi17Ci11bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOjptQ3VycmVudFNl
cmlhbCA9IDE7Ci0KLWludCBlbGVtZW50c0luQnVmZmVyKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlLCBpbnQgc2l6ZSkKLXsKLSAgICBpbnQgc3RyaWRlID0gYXR0cmlidXRlLnN0cmlk
ZSgpOwotICAgIHJldHVybiAoc2l6ZSAtIGF0dHJpYnV0ZS5tT2Zmc2V0ICUgc3RyaWRlICsgKHN0
cmlkZSAtIGF0dHJpYnV0ZS50eXBlU2l6ZSgpKSkgLyBzdHJpZGU7Ci19Ci0KLVZlcnRleERhdGFN
YW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UpIDogbUNvbnRleHQoY29udGV4dCksIG1EZXZpY2UoZGV2aWNlKQotewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAg
ICAgICBtRGlydHlDdXJyZW50VmFsdWVbaV0gPSB0cnVlOwotICAgICAgICBtQ3VycmVudFZhbHVl
QnVmZmVyW2ldID0gTlVMTDsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0gPSAwOwot
ICAgIH0KLQotICAgIGNvbnN0IEQzRENBUFM5ICZjYXBzID0gY29udGV4dC0+Z2V0RGV2aWNlQ2Fw
cygpOwotICAgIGNoZWNrVmVydGV4Q2FwcyhjYXBzLkRlY2xUeXBlcyk7Ci0KLSAgICBtU3RyZWFt
aW5nQnVmZmVyID0gbmV3IFN0cmVhbWluZ1ZlcnRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX1NU
UkVBTV9CVUZGRVJfU0laRSk7Ci0KLSAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXIpCi0gICAgewot
ICAgICAgICBFUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSB0aGUgc3RyZWFtaW5nIHZlcnRleCBidWZm
ZXIuIik7Ci0gICAgfQotfQotCi1WZXJ0ZXhEYXRhTWFuYWdlcjo6flZlcnRleERhdGFNYW5hZ2Vy
KCkKLXsKLSAgICBkZWxldGUgbVN0cmVhbWluZ0J1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBkZWxldGUgbUN1
cnJlbnRWYWx1ZUJ1ZmZlcltpXTsKLSAgICB9Ci19Ci0KLXN0ZDo6c2l6ZV90IFZlcnRleERhdGFN
YW5hZ2VyOjp3cml0ZUF0dHJpYnV0ZURhdGEoQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1ZmZl
ciwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0
cmlidXRlLCBHTHNpemVpIGluc3RhbmNlcykKLXsKLSAgICBCdWZmZXIgKmJ1ZmZlciA9IGF0dHJp
YnV0ZS5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KLSAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWJ1
dGUuc3RyaWRlKCk7Ci0gICAgaW50IGVsZW1lbnRTaXplID0gYXR0cmlidXRlLnR5cGVTaXplKCk7
Ci0gICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZjb252ZXJ0ZXIgPSBmb3JtYXRDb252ZXJ0ZXIo
YXR0cmlidXRlKTsKLSAgICBzdGQ6OnNpemVfdCBzdHJlYW1PZmZzZXQgPSAwOwotCi0gICAgdm9p
ZCAqb3V0cHV0ID0gTlVMTDsKLSAgICAKLSAgICBpZiAodmVydGV4QnVmZmVyKQotICAgIHsKLSAg
ICAgICAgb3V0cHV0ID0gdmVydGV4QnVmZmVyLT5tYXAoYXR0cmlidXRlLCBzcGFjZVJlcXVpcmVk
KGF0dHJpYnV0ZSwgY291bnQsIGluc3RhbmNlcyksICZzdHJlYW1PZmZzZXQpOwotICAgIH0KLQot
ICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIG1h
cCB2ZXJ0ZXggYnVmZmVyLiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgY29u
c3QgY2hhciAqaW5wdXQgPSBOVUxMOwotCi0gICAgaWYgKGJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IGludCBvZmZzZXQgPSBhdHRyaWJ1dGUubU9mZnNldDsKLQotICAgICAgICBpbnB1dCA9IHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0
dHJpYnV0ZS5tUG9pbnRlcik7Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0
dHJpYnV0ZS5tRGl2aXNvciA9PSAwKQotICAgIHsKLSAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJp
ZGUgKiBzdGFydDsKLSAgICB9Ci0KLSAgICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0
U3RyaWRlID09IGVsZW1lbnRTaXplKQotICAgIHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5w
dXQsIGNvdW50ICogaW5wdXRTdHJpZGUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1
dCk7Ci0gICAgfQotCi0gICAgdmVydGV4QnVmZmVyLT51bm1hcCgpOwotCi0gICAgcmV0dXJuIHN0
cmVhbU9mZnNldDsKLX0KLQotR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4
RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJh
bnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMpCi17Ci0gICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAg
Y29uc3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJmF0dHJpYnMgPSBtQ29udGV4dC0+Z2V0VmVydGV4
QXR0cmlidXRlcygpOwotICAgIFByb2dyYW0gKnByb2dyYW0gPSBtQ29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW0oKTsKLSAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+
Z2V0UHJvZ3JhbUJpbmFyeSgpOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBh
dHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKLSAg
ICB7Ci0gICAgICAgIHRyYW5zbGF0ZWRbYXR0cmlidXRlSW5kZXhdLmFjdGl2ZSA9IChwcm9ncmFt
QmluYXJ5LT5nZXRTZW1hbnRpY0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7Ci0gICAgfQot
Ci0gICAgLy8gRGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBzdG9yYWdlIHNpemUgcGVyIHVzZWQgYnVm
ZmVyLCBhbmQgaW52YWxpZGF0ZSBzdGF0aWMgYnVmZmVycyB0aGF0IGRvbid0IGNvbnRhaW4gbWF0
Y2hpbmcgYXR0cmlidXRlcwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5hY3RpdmUgJiYgYXR0
cmlic1tpXS5tQXJyYXlFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXIgKmJ1
ZmZlciA9IGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyLmdldCgpOwotICAgICAgICAgICAgU3RhdGlj
VmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZmZXItPmdldFN0YXRpY1Zl
cnRleEJ1ZmZlcigpIDogTlVMTDsKLQotICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyLT5zaXplKCkgPT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50
ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVk
KGF0dHJpYnNbaV0sIHRvdGFsQ291bnQsIDApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmlic1tp
XSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHN0YXRpYyBidWZmZXIgZG9lc24ndCBoYXZlIG1hdGNoaW5nIGF0dHJpYnV0ZXMsIHNvIGZhbGwg
YmFjayB0byB1c2luZyB0aGUgc3RyZWFtaW5nIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAv
LyBBZGQgdGhlIHNwYWNlIG9mIGFsbCBwcmV2aW91cyBhdHRyaWJ1dGVzIGJlbG9uZ2luZyB0byB0
aGUgaW52YWxpZGF0ZWQgc3RhdGljIGJ1ZmZlciB0byB0aGUgc3RyZWFtaW5nIGJ1ZmZlcgotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBwcmV2aW91cyA9IDA7IHByZXZpb3VzIDwgaTsgcHJl
dmlvdXMrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zbGF0ZWRbcHJldmlvdXNdLmFjdGl2ZSAmJiBhdHRyaWJzW3ByZXZpb3VzXS5tQXJy
YXlFbmFibGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJ1ZmZlciAqcHJldmlvdXNCdWZmZXIgPSBhdHRyaWJzW3ByZXZpb3VzXS5tQm91
bmRCdWZmZXIuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGljVmVydGV4
QnVmZmVyICpwcmV2aW91c1N0YXRpY0J1ZmZlciA9IHByZXZpb3VzQnVmZmVyID8gcHJldmlvdXNC
dWZmZXItPmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpIDogTlVMTDsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIgPT0gcHJldmlvdXNTdGF0aWNCdWZmZXIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtU3RyZWFtaW5nQnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHNwYWNlUmVxdWlyZWQoYXR0
cmlic1twcmV2aW91c10sIGNvdW50LCBpbnN0YW5jZXMpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBtU3RyZWFtaW5nQnVmZmVyLT5hZGRSZXF1aXJlZFNw
YWNlKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tpXSwgY291bnQsIGluc3RhbmNlcykpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICAgICAg
ICAgICAgICB9ICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1TdHJlYW1pbmdCdWZmZXItPmFkZFJlcXVpcmVkU3BhY2Uo
c3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCBjb3VudCwgaW5zdGFuY2VzKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSByZXF1aXJlZCBzcGFj
ZSBwZXIgdXNlZCBidWZmZXIKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRU
UklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0
dHJpYnNbaV0ubUFycmF5RW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyICpi
dWZmZXIgPSBhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgIEFycmF5
VmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZmZXItPmdldFN0YXRpY1Zl
cnRleEJ1ZmZlcigpIDogTlVMTDsKLSAgICAgICAgICAgIEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0
ZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXIgPyBzdGF0aWNCdWZmZXIgOiBtU3RyZWFtaW5nQnVmZmVy
OwotCi0gICAgICAgICAgICBpZiAodmVydGV4QnVmZmVyKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHZlcnRleEJ1ZmZlci0+cmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBlcmZvcm0gdGhlIHZlcnRleCBkYXRh
IHRyYW5zbGF0aW9ucwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpKyspCi0gICAgewotICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5hY3RpdmUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJzW2ldLm1Cb3VuZEJ1
ZmZlci5nZXQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyICYmIGF0dHJpYnNbaV0u
bVBvaW50ZXIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gZXJyb3IgdGhhdCB3b3VsZCBub3JtYWxseSByZXN1
bHQgaW4gYSBjcmFzaCwgYnV0IHdlIGNhdGNoIGl0IGFuZCByZXR1cm4gYW4gZXJyb3IKLSAgICAg
ICAgICAgICAgICAgICAgRVJSKCJBbiBlbmFibGVkIHZlcnRleCBhcnJheSBoYXMgbm8gYnVmZmVy
IGFuZCBubyBwb2ludGVyLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9PUEVSQVRJT047Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29uc3Qg
Rm9ybWF0Q29udmVydGVyICZjb252ZXJ0ZXIgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmlic1tpXSk7
Ci0KLSAgICAgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKnN0YXRpY0J1ZmZlciA9IGJ1
ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxMOwotICAgICAgICAg
ICAgICAgIEFycmF5VmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXIgPyBz
dGF0aWNCdWZmZXIgOiBzdGF0aWNfY2FzdDxBcnJheVZlcnRleEJ1ZmZlcio+KG1TdHJlYW1pbmdC
dWZmZXIpOwotCi0gICAgICAgICAgICAgICAgc3RkOjpzaXplX3Qgc3RyZWFtT2Zmc2V0ID0gLTE7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gc3RhdGljQnVmZmVyLT5sb29rdXBB
dHRyaWJ1dGUoYXR0cmlic1tpXSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbU9m
ZnNldCA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ29udmVydCB0aGUgZW50aXJlIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydEluZGV4ID0gYXR0cmlic1tp
XS5tT2Zmc2V0IC8gYXR0cmlic1tpXS5zdHJpZGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyZWFtT2Zmc2V0ID0gd3JpdGVBdHRyaWJ1dGVEYXRhKHN0YXRpY0J1ZmZlciwgLXN0YXJ0
SW5kZXgsIHRvdGFsQ291bnQsIGF0dHJpYnNbaV0sIDApOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbU9mZnNldCAhPSAtMSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ICs9IChh
dHRyaWJzW2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ldLnN0cmlkZSgpKSAqIGNvbnZlcnRlci5vdXRw
dXRFbGVtZW50U2l6ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlcyA9
PSAwIHx8IGF0dHJpYnNbaV0ubURpdmlzb3IgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgKz0gc3RhcnQgKiBj
b252ZXJ0ZXIub3V0cHV0RWxlbWVudFNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0
ID0gd3JpdGVBdHRyaWJ1dGVEYXRhKG1TdHJlYW1pbmdCdWZmZXIsIHN0YXJ0LCBjb3VudCwgYXR0
cmlic1tpXSwgaW5zdGFuY2VzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoc3RyZWFtT2Zmc2V0ID09IC0xKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS52ZXJ0ZXhCdWZmZXIgPSB2ZXJ0ZXhCdWZmZXIt
PmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2VyaWFsID0gdmVy
dGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmRp
dmlzb3IgPSBhdHRyaWJzW2ldLm1EaXZpc29yOwotCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS50eXBlID0gY29udmVydGVyLmQzZERlY2xUeXBlOwotICAgICAgICAgICAgICAgIHRyYW5z
bGF0ZWRbaV0uc3RyaWRlID0gY29udmVydGVyLm91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0ub2Zmc2V0ID0gc3RyZWFtT2Zmc2V0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgh
bUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXJbaV0gPSBuZXcgU3RyZWFtaW5nVmVydGV4QnVmZmVy
KG1EZXZpY2UsIENPTlNUQU5UX1ZFUlRFWF9CVUZGRVJfU0laRSk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgU3RyZWFtaW5nVmVydGV4QnVmZmVyICpidWZmZXIgPSBtQ3Vy
cmVudFZhbHVlQnVmZmVyW2ldOwotCi0gICAgICAgICAgICAgICAgaWYgKG1EaXJ0eUN1cnJlbnRW
YWx1ZVtpXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCByZXF1aXJlZFNwYWNlID0gNCAqIHNpemVvZihmbG9hdCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJ1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShyZXF1aXJlZFNwYWNlKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyLT5yZXNlcnZlUmVxdWlyZWRTcGFjZSgpOwotICAgICAgICAgICAgICAgICAg
ICBmbG9hdCAqZGF0YSA9IHN0YXRpY19jYXN0PGZsb2F0Kj4oYnVmZmVyLT5tYXAoVmVydGV4QXR0
cmlidXRlKCksIHJlcXVpcmVkU3BhY2UsICZtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXSkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YVswXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVswXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFs
dWVbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdID0gYXR0cmlic1tpXS5tQ3Vy
cmVudFZhbHVlWzJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVszXSA9IGF0dHJpYnNb
aV0ubUN1cnJlbnRWYWx1ZVszXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+dW5t
YXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EaXJ0eUN1cnJlbnRWYWx1ZVtpXSA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS52ZXJ0ZXhCdWZmZXIgPSBtQ3VycmVudFZhbHVlQnVmZmVy
W2ldLT5nZXRCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnNlcmlhbCA9
IG1DdXJyZW50VmFsdWVCdWZmZXJbaV0tPmdldFNlcmlhbCgpOwotICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uZGl2aXNvciA9IDA7Ci0KLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ld
LnR5cGUgPSBEM0RERUNMVFlQRV9GTE9BVDQ7Ci0gICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtp
XS5zdHJpZGUgPSAwOwotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ub2Zmc2V0ID0gbUN1
cnJlbnRWYWx1ZU9mZnNldHNbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsK
LSAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0ubUFycmF5RW5h
YmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJzW2ld
Lm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQotICAgICAgICAgICAgaWYgKGJ1ZmZlcikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBidWZmZXItPnByb21vdGVTdGF0aWNVc2FnZShjb3VudCAq
IGF0dHJpYnNbaV0udHlwZVNpemUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXN0ZDo6c2l6ZV90IFZlcnRleERhdGFN
YW5hZ2VyOjpzcGFjZVJlcXVpcmVkKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6
OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGVs
ZW1lbnRTaXplID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0K
LSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gZWxlbWVudFNpemUgKiBjb3VudDsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnRTaXplICogKChpbnN0YW5jZXMgKyBhdHRyaWIubURp
dmlzb3IgLSAxKSAvIGF0dHJpYi5tRGl2aXNvcik7Ci0gICAgfQotfQotCi0vLyBNYXBwaW5nIGZy
b20gT3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0byBEM0QgZGVjbCB0eXBlOgotLy8KLS8v
IEJZVEUgICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0KQotLy8gQllURS1ub3JtICAgICAgICAg
ICAgRkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hP
UlQtbm9ybSkKLS8vIFVOU0lHTkVEX0JZVEUgICAgICAgIFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNI
T1JUIChDYXN0KQotLy8gVU5TSUdORURfQllURS1ub3JtICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9y
IEZMT0FUIChOb3JtYWxpemUpCi0vLyBTSE9SVCAgICAgICAgICAgICAgICBTSE9SVCAoSWRlbnRp
dHkpCi0vLyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxP
QVQgKE5vcm1hbGl6ZSkKLS8vIFVOU0lHTkVEX1NIT1JUICAgICAgIEZMT0FUIChDYXN0KQotLy8g
VU5TSUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9y
bWFsaXplKQotLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkgRkxPQVQgKEZpeGVkVG9GbG9hdCkKLS8v
IEZMT0FUICAgICAgICAgICAgICAgIEZMT0FUIChJZGVudGl0eSkKLQotLy8gR0xUb0NUeXBlIG1h
cHMgZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRoZSBDIHR5cGVkZWYuIAotdGVtcGxhdGUg
PEdMZW51bSBHTFR5cGU+IHN0cnVjdCBHTFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgR0xUb0NUeXBlPEdMX0JZVEU+IHsgdHlwZWRlZiBHTGJ5dGUgdHlwZTsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfQllURT4geyB0eXBlZGVmIEdMdWJ5dGUg
dHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+IHsgdHlwZWRl
ZiBHTHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lH
TkVEX1NIT1JUPiB7IHR5cGVkZWYgR0x1c2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBHTFRvQ1R5cGU8R0xfRklYRUQ+IHsgdHlwZWRlZiBHTHVpbnQgdHlwZTsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRkxPQVQ+IHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7IH07
Ci0KLS8vIFRoaXMgZGlmZmVycyBmcm9tIEQzRERFQ0xUWVBFIGluIHRoYXQgaXQgaXMgdW5zaXpl
ZC4gKFNpemUgZXhwYW5zaW9uIGlzIGFwcGxpZWQgbGFzdC4pCi1lbnVtIEQzRFZlcnRleFR5cGUK
LXsKLSAgICBEM0RWVF9GTE9BVCwKLSAgICBEM0RWVF9TSE9SVCwKLSAgICBEM0RWVF9TSE9SVF9O
T1JNLAotICAgIEQzRFZUX1VCWVRFLAotICAgIEQzRFZUX1VCWVRFX05PUk0sCi0gICAgRDNEVlRf
VVNIT1JUX05PUk0KLX07Ci0KLS8vIEQzRFRvQ1R5cGUgbWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlw
ZSAoYXMgZW51bSBEM0RWZXJ0ZXhUeXBlKSB0byB0aGUgY29ycmVzcG9uZGluZyBDIHR5cGUuCi10
ZW1wbGF0ZSA8dW5zaWduZWQgaW50IEQzRFR5cGU+IHN0cnVjdCBEM0RUb0NUeXBlIHsgfTsKLQot
dGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9h
dCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsg
dHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNE
VlRfU0hPUlRfTk9STT4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFX05PUk0+IHsgdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlw
ZTxEM0RWVF9VU0hPUlRfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHR5cGU7IH07Ci0K
LS8vIEVuY29kZSB0aGUgdHlwZS9zaXplIGNvbWJpbmF0aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBG
b3IgZWFjaCB0eXBlL3NpemUgaXQgZXhwYW5kcyB0byBhIHdpZGVuZXIgdGhhdCB3aWxsIHByb3Zp
ZGUgdGhlIGFwcHJvcHJpYXRlIGZpbmFsIHNpemUuCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5
cGUsIGludCBzaXplPgotc3RydWN0IFdpZGVuUnVsZQotewotfTsKLQotdGVtcGxhdGUgPGludCBz
aXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX0ZMT0FULCBzaXplPiAgICAgICAgICA6IGdsOjpO
b1dpZGVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxE
M0RWVF9TSE9SVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9Owot
dGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNp
emU+ICAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+
IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEUsIHNpemU+ICAgICAgICAgIDogZ2w6OldpZGVu
VG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxE
M0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9Owot
dGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBz
aXplPiAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7IH07Ci0KLS8vIFZlcnRleFR5cGVGbGFn
cyBlbmNvZGVzIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGUgZmxhZyBhbmQgdmVydGV4IGRlY2xhcmF0
aW9uIGZsYWcgZm9yIGVhY2ggRDNEIHZlcnRleCB0eXBlICYgc2l6ZSBjb21iaW5hdGlvbi4KLXRl
bXBsYXRlIDx1bnNpZ25lZCBpbnQgZDNkdHlwZSwgaW50IHNpemU+Ci1zdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzCi17Ci19OwotCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNhcGZsYWcsIHVuc2lnbmVk
IGludCBkZWNsZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKLXsKLSAgICBlbnVt
IHsgY2FwZmxhZyA9IGNhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcgPSBkZWNsZmxhZyB9
OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
MT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDI+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMz4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX1NIT1JULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQ
RV9TSE9SVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
U0hPUlQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4g
eyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JN
LCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZ
UEVfU0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0
TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVGbGFnczxEM0RWVF9VQllURSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBT
X1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZVEU0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVy
PEQzRERUQ0FQU19VQllURTROLCBEM0RERUNMVFlQRV9VQllURTROPiB7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JN
LCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xU
WVBFX1VTSE9SVDROPiB7IH07Ci0KLQotLy8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBl
ICYgbm9ybWFsaXplZCBmbGFnIHRvIHByZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0
eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBlbnVtcykuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwg
Ym9vbCBub3JtYWxpemVkPgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nCi17Ci19OwotCi10ZW1w
bGF0ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJyZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQ
cmVmZXJyZWQ+Ci1zdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmdCYXNlCi17Ci0gICAgZW51bSB7IHBy
ZWZlcnJlZCA9IFByZWZlcnJlZCB9OwotICAgIGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07
Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFs
c2U+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
U0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmc8R0xfVU5TSUdORURfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBl
TWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElk
ZW50aXR5LCBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5T
SUdORURfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8
RDNEVlRfVUJZVEVfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3Jt
YWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFs
c2U+ICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9T
SE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAg
ICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9G
TE9BVD4geyB9OyAgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJ
R05FRF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9VU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXpl
Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
RklYRUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+
IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkVG9GbG9hdAotdGVtcGxhdGUgPGJv
b2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxp
emVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZGVudGl0eQotCi0KLS8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0g
ZmxhZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVyc2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29u
dmVyc2lvbiBydWxlIChDYXN0LCBOb3JtYWxpemUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgot
Ly8gVGhlIGNvbnZlcnNpb24gcnVsZXMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhj
b252ZXJzaW9uLmguCi0KLS8vIEFsbW9zdCBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAo
aW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGFjdHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxU
PiBrbm93cyBpdCdzIGFuIGlkZW50aXR5IG1hcHBpbmcpLgotdGVtcGxhdGUgPEdMZW51bSBmcm9t
VHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBpbnQgdG9UeXBlPgotc3RydWN0IENvbnZl
cnNpb25SdWxlIDogZ2w6OkNhc3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwg
dHlwZW5hbWUgRDNEVG9DVHlwZTx0b1R5cGU+Ojp0eXBlPgotewotfTsKLQotLy8gQWxsIGNvbnZl
cnNpb25zIGZyb20gbm9ybWFsaXplZCB0eXBlcyB0byBmbG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBv
cGVyYXRvci4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVs
ZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBH
TFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07Ci0KLS8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlz
YXRpb24gZm9yIHRoaXMgc28gdGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9m
IHRoZSBnZW5lcmljIG5vcm1hbGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVj
dCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVk
VG9GbG9hdDxHTGludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVs
ZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVs
dFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMg
KGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRl
IDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0
YWdlMgotewotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFs
dWVzU3RhZ2UyPFQsIHRydWU+ICA6IGdsOjpOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwg
ZmFsc2U+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8VD4geyB9OwotCi0vLyBXb3JrIG91dCB0
aGUgZGVmYXVsdCB2YWx1ZSBydWxlIGZvciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMg
dHlwZSkgYW5kIAotdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4KLXN0cnVjdCBE
ZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxp
emVkPgotewotfTsKLQotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRW
ZXJ0ZXhWYWx1ZXM8ZmxvYXQsIG5vcm1hbGl6ZWQ+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8
ZmxvYXQ+IHsgfTsKLQotLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRv
IGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNp
b24uCi0vLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBh
bGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
VXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNr
IH07IH07Ci0KLS8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3Bl
bkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZl
cnNpb24sCi0vLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRl
IFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2Fw
IGZsYWcKLS8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRl
eCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJv
b2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJl
bmNlUnVsZT4KLXN0cnVjdCBDb252ZXJ0ZXIKLSAgICA6IGdsOjpWZXJ0ZXhEYXRhQ29udmVydGVy
PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZy
b21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlLCBzaXplPiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGlu
Zzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5j
ZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6
dHlwZSwgbm9ybWFsaXplZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7IGQzZHR5cGUgPSBQ
cmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46
OnR5cGUgfTsKLSAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6
ZmluYWxXaWR0aCB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBl
RmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcg
PSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Ci19OwotCi0v
LyBJbml0aWFsaXNlIGEgVHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5TTEFUSU9OKHR5cGUs
IG5vcm0sIHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBl
LCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpm
aW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0
eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihDb252ZXJ0ZXI8dHlw
ZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAgfQotCi0jZGVmaW5l
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBzaXplKSAgICBcCi0g
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQ+Ojpj
YXBmbGFnLCBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZl
cnJlZCksICAgICAgICBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIFVz
ZUZhbGxiYWNrKSAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1Jf
VFlQRSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZ
UEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVf
Tk9STV9TSVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgdHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVl
LCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDQpIH0sICAg
ICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKHR5cGUp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZ
UEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0
KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZh
bHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgfQotCi1jb25z
dCBWZXJ0ZXhEYXRhTWFuYWdlcjo6VHJhbnNsYXRpb25EZXNjcmlwdGlvbiBWZXJ0ZXhEYXRhTWFu
YWdlcjo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsy
XVs0XSA9IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxp
emVkXVtzaXplLTFdCi17Ci0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUpLAotICAg
IFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9CWVRFKSwKLSAgICBUUkFOU0xBVElP
TlNfRk9SX1RZUEUoR0xfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJ
R05FRF9TSE9SVCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xfRklYRUQp
LAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZMT0FUKQotfTsKLQotdm9p
ZCBWZXJ0ZXhEYXRhTWFuYWdlcjo6Y2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcykKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTOyBpKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7
IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsg
PCA0OyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMgJiBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtQXR0cmlidXRlVHlwZXNbaV1bal1ba10gPSBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLmZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIFRoaXMgaXMgdXNlZCB0byBpbmRl
eCBtQXR0cmlidXRlVHlwZXMgYW5kIG1Qb3NzaWJsZVRyYW5zbGF0aW9ucy4KLXVuc2lnbmVkIGlu
dCBWZXJ0ZXhEYXRhTWFuYWdlcjo6dHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdAotewotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOwotICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6
IHJldHVybiAyOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7Ci0gICAg
ICBjYXNlIEdMX0ZJWEVEOiByZXR1cm4gNDsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1
OwotCi0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKLSAgICB9Ci19Ci0K
LVZlcnRleEJ1ZmZlcjo6VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3Rk
OjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncykgOiBtRGV2aWNlKGRldmljZSksIG1WZXJ0
ZXhCdWZmZXIoTlVMTCkKLXsKLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgICBEM0RQ
T09MIHBvb2wgPSBnZXREaXNwbGF5KCktPmdldEJ1ZmZlclBvb2wodXNhZ2VGbGFncyk7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZSwgdXNh
Z2VGbGFncywgMCwgcG9vbCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOwotICAgICAgICBtU2VyaWFs
ID0gaXNzdWVTZXJpYWwoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2
ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1WZXJ0ZXhCdWZmZXI6On5WZXJ0ZXhCdWZmZXIoKQotewotICAgIGlmIChtVmVydGV4QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIH0KLX0KLQot
dm9pZCBWZXJ0ZXhCdWZmZXI6OnVubWFwKCkKLXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotICAgIH0KLX0KLQotSURpcmVj
dDNEVmVydGV4QnVmZmVyOSAqVmVydGV4QnVmZmVyOjpnZXRCdWZmZXIoKSBjb25zdAotewotICAg
IHJldHVybiBtVmVydGV4QnVmZmVyOwotfQotCi11bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOjpn
ZXRTZXJpYWwoKSBjb25zdAotewotICAgIHJldHVybiBtU2VyaWFsOwotfQotCi11bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2Vy
aWFsKys7Ci19Ci0KLUFycmF5VmVydGV4QnVmZmVyOjpBcnJheVZlcnRleEJ1ZmZlcihJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERXT1JEIHVzYWdlRmxhZ3MpIDog
VmVydGV4QnVmZmVyKGRldmljZSwgc2l6ZSwgdXNhZ2VGbGFncykKLXsKLSAgICBtQnVmZmVyU2l6
ZSA9IHNpemU7Ci0gICAgbVdyaXRlUG9zaXRpb24gPSAwOwotICAgIG1SZXF1aXJlZFNwYWNlID0g
MDsKLX0KLQotQXJyYXlWZXJ0ZXhCdWZmZXI6On5BcnJheVZlcnRleEJ1ZmZlcigpCi17Ci19Ci0K
LXZvaWQgQXJyYXlWZXJ0ZXhCdWZmZXI6OmFkZFJlcXVpcmVkU3BhY2UoVUlOVCByZXF1aXJlZFNw
YWNlKQotewotICAgIG1SZXF1aXJlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Ci19Ci0KLVN0cmVh
bWluZ1ZlcnRleEJ1ZmZlcjo6U3RyZWFtaW5nVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkg
KmRldmljZSwgc3RkOjpzaXplX3QgaW5pdGlhbFNpemUpIDogQXJyYXlWZXJ0ZXhCdWZmZXIoZGV2
aWNlLCBpbml0aWFsU2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSkK
LXsKLX0KLQotU3RyZWFtaW5nVmVydGV4QnVmZmVyOjp+U3RyZWFtaW5nVmVydGV4QnVmZmVyKCkK
LXsKLX0KLQotdm9pZCAqU3RyZWFtaW5nVmVydGV4QnVmZmVyOjptYXAoY29uc3QgVmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90
ICpvZmZzZXQpCi17Ci0gICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKLQotICAgIGlmIChtVmVydGV4
QnVmZmVyKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5M
b2NrKG1Xcml0ZVBvc2l0aW9uLCByZXF1aXJlZFNwYWNlLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZF
UldSSVRFKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgICpvZmZz
ZXQgPSBtV3JpdGVQb3NpdGlvbjsKLSAgICAgICAgbVdyaXRlUG9zaXRpb24gKz0gcmVxdWlyZWRT
cGFjZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIFN0cmVhbWluZ1Zl
cnRleEJ1ZmZlcjo6cmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKQotewotICAgIGlmIChtUmVxdWlyZWRT
cGFjZSA+IG1CdWZmZXJTaXplKQotICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJ1ZmZlclNp
emUgPSBzdGQ6Om1heChtUmVxdWlyZWRTcGFjZSwgMyAqIG1CdWZmZXJTaXplIC8gMik7ICAgLy8g
MS41IHggbUJ1ZmZlclNpemUgaXMgYXJiaXRyYXJ5IGFuZCBzaG91bGQgYmUgY2hlY2tlZCB0byBz
ZWUgd2UgZG9uJ3QgaGF2ZSB0b28gbWFueSByZWFsbG9jYXRpb25zLgotCi0gICAgICAgIEQzRFBP
T0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9EWU5BTUlDIHwg
RDNEVVNBR0VfV1JJVEVPTkxZKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVWZXJ0ZXhCdWZmZXIobUJ1ZmZlclNpemUsIEQzRFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FH
RV9XUklURU9OTFksIDAsIHBvb2wsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKLSAgICAgICAgbVNl
cmlhbCA9IGlzc3VlU2VyaWFsKCk7Ci0gICAgCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2
ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIG1CdWZmZXJTaXplKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKLSAgICB9Ci0gICAgZWxzZSBpZiAobVdyaXRlUG9z
aXRpb24gKyBtUmVxdWlyZWRTcGFjZSA+IG1CdWZmZXJTaXplKSAgIC8vIFJlY3ljbGUKLSAgICB7
Ci0gICAgICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lk
ICpkdW1teTsKLSAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBE
M0RMT0NLX0RJU0NBUkQpOwotICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Ci0gICAgfQotCi0gICAgbVJl
cXVpcmVkU3BhY2UgPSAwOwotfQotCi1TdGF0aWNWZXJ0ZXhCdWZmZXI6OlN0YXRpY1ZlcnRleEJ1
ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogQXJyYXlWZXJ0ZXhCdWZmZXIoZGV2aWNl
LCAwLCBEM0RVU0FHRV9XUklURU9OTFkpCi17Ci19Ci0KLVN0YXRpY1ZlcnRleEJ1ZmZlcjo6flN0
YXRpY1ZlcnRleEJ1ZmZlcigpCi17Ci19Ci0KLXZvaWQgKlN0YXRpY1ZlcnRleEJ1ZmZlcjo6bWFw
KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNw
YWNlLCBzdGQ6OnNpemVfdCAqc3RyZWFtT2Zmc2V0KQotewotICAgIHZvaWQgKm1hcFB0ciA9IE5V
TEw7Ci0KLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhtV3JpdGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFjZSwg
Jm1hcFB0ciwgMCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCBy
ZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBp
bnQgYXR0cmlidXRlT2Zmc2V0ID0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUuc3RyaWRl
KCk7Ci0gICAgICAgIFZlcnRleEVsZW1lbnQgZWxlbWVudCA9IHthdHRyaWJ1dGUubVR5cGUsIGF0
dHJpYnV0ZS5tU2l6ZSwgYXR0cmlidXRlLnN0cmlkZSgpLCBhdHRyaWJ1dGUubU5vcm1hbGl6ZWQs
IGF0dHJpYnV0ZU9mZnNldCwgbVdyaXRlUG9zaXRpb259OwotICAgICAgICBtQ2FjaGUucHVzaF9i
YWNrKGVsZW1lbnQpOwotCi0gICAgICAgICpzdHJlYW1PZmZzZXQgPSBtV3JpdGVQb3NpdGlvbjsK
LSAgICAgICAgbVdyaXRlUG9zaXRpb24gKz0gcmVxdWlyZWRTcGFjZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIFN0YXRpY1ZlcnRleEJ1ZmZlcjo6cmVzZXJ2ZVJlcXVp
cmVkU3BhY2UoKQotewotICAgIGlmICghbVZlcnRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAw
KQotICAgIHsKLSAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQ
b29sKEQzRFVTQUdFX1dSSVRFT05MWSk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlVmVydGV4QnVmZmVyKG1SZXF1aXJlZFNwYWNlLCBEM0RVU0FHRV9XUklURU9OTFks
IDAsIHBvb2wsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKLSAgICAgICAgbVNlcmlhbCA9IGlzc3Vl
U2VyaWFsKCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Yg
c2l6ZSAlbHUuIiwgbVJlcXVpcmVkU3BhY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJ1ZmZl
clNpemUgPSBtUmVxdWlyZWRTcGFjZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobVZlcnRleEJ1ZmZl
ciAmJiBtQnVmZmVyU2l6ZSA+PSBtUmVxdWlyZWRTcGFjZSkKLSAgICB7Ci0gICAgICAgIC8vIEFs
cmVhZHkgYWxsb2NhdGVkCi0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsgICAvLyBTdGF0
aWMgdmVydGV4IGJ1ZmZlcnMgY2FuJ3QgYmUgcmVzaXplZAotCi0gICAgbVJlcXVpcmVkU3BhY2Ug
PSAwOwotfQotCi1zdGQ6OnNpemVfdCBTdGF0aWNWZXJ0ZXhCdWZmZXI6Omxvb2t1cEF0dHJpYnV0
ZShjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGludCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IG1DYWNoZS5zaXplKCk7IGVsZW1lbnQrKykKLSAg
ICB7Ci0gICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0udHlwZSA9PSBhdHRyaWJ1dGUubVR5cGUg
JiYKLSAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zaXplID09IGF0dHJpYnV0ZS5tU2l6ZSAm
JgotICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnN0cmlkZSA9PSBhdHRyaWJ1dGUuc3RyaWRl
KCkgJiYKLSAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxpemVkID09IGF0dHJpYnV0
ZS5tTm9ybWFsaXplZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50
XS5hdHRyaWJ1dGVPZmZzZXQgPT0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUuc3RyaWRl
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1DYWNoZVtlbGVtZW50
XS5zdHJlYW1PZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLWNvbnN0IFZlcnRleERhdGFNYW5hZ2VyOjpGb3JtYXRDb252ZXJ0ZXIg
JlZlcnRleERhdGFNYW5hZ2VyOjpmb3JtYXRDb252ZXJ0ZXIoY29uc3QgVmVydGV4QXR0cmlidXRl
ICZhdHRyaWJ1dGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5k
ZXgoYXR0cmlidXRlLm1UeXBlKV1bYXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNp
emUgLSAxXTsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVmVydGV4RGF0YU1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODU3NTkxYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleERhdGFNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gVmVydGV4RGF0YU1hbmFnZXIuaDogRGVmaW5l
cyB0aGUgVmVydGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAotLy8gcnVucyB0aGUgQnVmZmVy
IHRyYW5zbGF0aW9uIHByb2Nlc3MuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1ZFUlRFWERBVEFNQU5B
R0VSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXwotCi0jaW5jbHVk
ZSA8dmVjdG9yPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQot
bmFtZXNwYWNlIGdsCi17Ci0KLXN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCi17Ci0gICAgYm9v
bCBhY3RpdmU7Ci0KLSAgICBEM0RERUNMVFlQRSB0eXBlOwotICAgIFVJTlQgb2Zmc2V0OwotICAg
IFVJTlQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9pbnRl
ciBhdCBhbGwKLQotICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKnZlcnRleEJ1ZmZlcjsKLSAg
ICB1bnNpZ25lZCBpbnQgc2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBkaXZpc29yOwotfTsKLQot
Y2xhc3MgVmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBWZXJ0ZXhCdWZmZXIoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKTsK
LSAgICB2aXJ0dWFsIH5WZXJ0ZXhCdWZmZXIoKTsKLQotICAgIHZvaWQgdW5tYXAoKTsKLQotICAg
IElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OwotICAgIHVuc2lnbmVk
IGludCBnZXRTZXJpYWwoKSBjb25zdDsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgSURpcmVjdDNERGV2
aWNlOSAqY29uc3QgbURldmljZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptVmVydGV4
QnVmZmVyOwotCi0gICAgdW5zaWduZWQgaW50IG1TZXJpYWw7Ci0gICAgc3RhdGljIHVuc2lnbmVk
IGludCBpc3N1ZVNlcmlhbCgpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJp
YWw7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4QnVm
ZmVyKTsKLX07Ci0KLWNsYXNzIEFycmF5VmVydGV4QnVmZmVyIDogcHVibGljIFZlcnRleEJ1ZmZl
cgotewotICBwdWJsaWM6Ci0gICAgQXJyYXlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKTsKLSAgICB+QXJyYXlW
ZXJ0ZXhCdWZmZXIoKTsKLQotICAgIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
QnVmZmVyU2l6ZTsgfQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0
ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqc3Ry
ZWFtT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNlKCkg
PSAwOwotICAgIHZvaWQgYWRkUmVxdWlyZWRTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UpOwotCi0g
IHByb3RlY3RlZDoKLSAgICBzdGQ6OnNpemVfdCBtQnVmZmVyU2l6ZTsKLSAgICBzdGQ6OnNpemVf
dCBtV3JpdGVQb3NpdGlvbjsKLSAgICBzdGQ6OnNpemVfdCBtUmVxdWlyZWRTcGFjZTsKLX07Ci0K
LWNsYXNzIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciA6IHB1YmxpYyBBcnJheVZlcnRleEJ1ZmZlcgot
ewotICBwdWJsaWM6Ci0gICAgU3RyZWFtaW5nVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkg
KmRldmljZSwgc3RkOjpzaXplX3QgaW5pdGlhbFNpemUpOwotICAgIH5TdHJlYW1pbmdWZXJ0ZXhC
dWZmZXIoKTsKLQotICAgIHZvaWQgKm1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKnN0cmVhbU9mZnNldCk7
Ci0gICAgdm9pZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgpOwotfTsKLQotY2xhc3MgU3RhdGljVmVy
dGV4QnVmZmVyIDogcHVibGljIEFycmF5VmVydGV4QnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBTdGF0aWNWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKTsKLSAg
ICB+U3RhdGljVmVydGV4QnVmZmVyKCk7Ci0KLSAgICB2b2lkICptYXAoY29uc3QgVmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6c2l6ZV90
ICpzdHJlYW1PZmZzZXQpOwotICAgIHZvaWQgcmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKLQotICAg
IHN0ZDo6c2l6ZV90IGxvb2t1cEF0dHJpYnV0ZShjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YnV0ZSk7ICAgLy8gUmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIHZlcnRleCBidWZmZXIsIG9y
IC0xIGlmIG5vdCBmb3VuZAotCi0gIHByaXZhdGU6Ci0gICAgc3RydWN0IFZlcnRleEVsZW1lbnQK
LSAgICB7Ci0gICAgICAgIEdMZW51bSB0eXBlOwotICAgICAgICBHTGludCBzaXplOwotICAgICAg
ICBHTHNpemVpIHN0cmlkZTsKLSAgICAgICAgYm9vbCBub3JtYWxpemVkOwotICAgICAgICBpbnQg
YXR0cmlidXRlT2Zmc2V0OwotCi0gICAgICAgIHN0ZDo6c2l6ZV90IHN0cmVhbU9mZnNldDsKLSAg
ICB9OwotCi0gICAgc3RkOjp2ZWN0b3I8VmVydGV4RWxlbWVudD4gbUNhY2hlOwotfTsKLQotY2xh
c3MgVmVydGV4RGF0YU1hbmFnZXIKLXsKLSAgcHVibGljOgotICAgIFZlcnRleERhdGFNYW5hZ2Vy
KENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkgKmJhY2tlbmQpOwotICAgIHZpcnR1
YWwgflZlcnRleERhdGFNYW5hZ2VyKCk7Ci0KLSAgICB2b2lkIGRpcnR5Q3VycmVudFZhbHVlKGlu
dCBpbmRleCkgeyBtRGlydHlDdXJyZW50VmFsdWVbaW5kZXhdID0gdHJ1ZTsgfQotCi0gICAgR0xl
bnVtIHByZXBhcmVWZXJ0ZXhEYXRhKEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xh
dGVkQXR0cmlidXRlICpvdXRBdHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVydGV4RGF0YU1hbmFnZXIpOwotCi0g
ICAgc3RkOjpzaXplX3Qgc3BhY2VSZXF1aXJlZChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
Yiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSBjb25zdDsKLSAgICBzdGQ6
OnNpemVfdCB3cml0ZUF0dHJpYnV0ZURhdGEoQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1ZmZl
ciwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0
cmlidXRlLCBHTHNpemVpIGluc3RhbmNlcyk7Ci0KLSAgICBDb250ZXh0ICpjb25zdCBtQ29udGV4
dDsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpjb25zdCBtRGV2aWNlOwotCi0gICAgU3RyZWFtaW5n
VmVydGV4QnVmZmVyICptU3RyZWFtaW5nQnVmZmVyOwotCi0gICAgYm9vbCBtRGlydHlDdXJyZW50
VmFsdWVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXIgKm1D
dXJyZW50VmFsdWVCdWZmZXJbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBzdGQ6OnNpemVfdCBt
Q3VycmVudFZhbHVlT2Zmc2V0c1tNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgLy8gQXR0cmli
dXRlIGZvcm1hdCBjb252ZXJzaW9uCi0gICAgc3RydWN0IEZvcm1hdENvbnZlcnRlcgotICAgIHsK
LSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgc3RkOjpzaXplX3Qgb3V0cHV0RWxlbWVu
dFNpemU7Ci0gICAgICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0IHZvaWQgKmluLCBzdGQ6
OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7Ci0gICAgICAgIEQzRERF
Q0xUWVBFIGQzZERlY2xUeXBlOwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9B
VFRSSUJfVFlQRVMgPSA2IH07Ci0KLSAgICBGb3JtYXRDb252ZXJ0ZXIgbUF0dHJpYnV0ZVR5cGVz
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgICAvLyBbR0wgdHlwZXMgYXMgZW51
bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0KLSAgICBzdHJ1
Y3QgVHJhbnNsYXRpb25EZXNjcmlwdGlvbgotICAgIHsKLSAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7
Ci0gICAgICAgIEZvcm1hdENvbnZlcnRlciBwcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICBG
b3JtYXRDb252ZXJ0ZXIgZmFsbGJhY2tDb252ZXJzaW9uOwotICAgIH07Ci0KLSAgICAvLyBUaGlz
IHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgotICAgIHN0YXRpYyBj
b25zdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xf
VkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5
IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLQotICAgIHZvaWQgY2hlY2tWZXJ0
ZXhDYXBzKERXT1JEIGRlY2xUeXBlcyk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdM
ZW51bSB0eXBlKSBjb25zdDsKLSAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmZvcm1hdENvbnZl
cnRlcihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkgY29uc3Q7Ci19OwotCi19Ci0K
LSNlbmRpZiAgIC8vIExJQkdMRVNWMl9WRVJURVhEQVRBTUFOQUdFUl9IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmEyNTNkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDY5NzUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbGliR0xFU3YyLmNwcDog
SW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgT3BlbkdMIEVTIDIuMCBmdW5jdGlvbnMuCi0KLSNkZWZp
bmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2ds
MmV4dC5oPgotCi0jaW5jbHVkZSA8ZXhjZXB0aW9uPgotI2luY2x1ZGUgPGxpbWl0cz4KLQotI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvRmVuY2UuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9TaGFkZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9RdWVyeS5oIgotCi1ib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwIHx8
IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChnbDo6Z2V0Q29udGV4dCgpICYmIGdsOjpnZXRDb250ZXh0KCktPnN1
cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKGxldmVsID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAoZ2w6OmlzUG93Mih3aWR0aCkgJiYgZ2w6OmlzUG93MihoZWlnaHQp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5h
dGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRz
ZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCi0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDoKLSAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSwgZmFsc2UpOwotICAgIH0KLQotICAgIC8vIGludmFsaWQgPHR5cGU+IC0+IHNldHMgSU5WQUxJ
RF9FTlVNCi0gICAgLy8gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0
cyBJTlZBTElEX09QRVJBVElPTgotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBj
YXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0g
ICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQot
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV82XzU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAgIH0KLX0KLWJvb2wgdmFsaWRh
dGVTdWJJbWFnZVBhcmFtczJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0
dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVz
c2VkKGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3Jt
YXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
aWYgKGNvbXByZXNzZWQpCi0gICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdp
ZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fAotICAgICAgICAgICAgKGhlaWdodCAlIDQg
IT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KDApKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lk
dGgobGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWln
aHQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUs
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB2YWxpZGF0ZVN1
YkltYWdlUGFyYW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0
dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2Vk
ICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAg
IGlmIChmb3JtYXQgIT0gR0xfTk9ORSAmJiBmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCkKLSAg
ICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0
V2lkdGgodGFyZ2V0LCAwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVp
Z2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgo
dGFyZ2V0LCBsZXZlbCkgfHwKLSAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdl
dEhlaWdodCh0YXJnZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IGNoZWNrIGZvciBjb21iaW5hdGlvbnMgb2YgZm9ybWF0IGFuZCB0eXBlIHRoYXQgYXJlIHZhbGlk
IGZvciBSZWFkUGl4ZWxzCi1ib29sIHZhbGlkUmVhZEZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBH
TF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgotICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIGdsOjpJTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotZXh0ZXJuICJDIgotewotCi12b2lkIF9fc3RkY2FsbCBnbEFjdGl2
ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGV4dHVyZSA9
IDB4JVgpIiwgdGV4dHVyZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0ZXh0dXJlIDwgR0xfVEVYVFVSRTAgfHwg
dGV4dHVyZSA+IEdMX1RFWFRVUkUwICsgY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMoKSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNv
bnRleHQtPnNldEFjdGl2ZVNhbXBsZXIodGV4dHVyZSAtIEdMX1RFWFRVUkUwKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bEF0dGFjaFNoYWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVO
VCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBz
aGFkZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3Qg
PSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UHJvZ3JhbShzaGFkZXIpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5hdHRhY2hTaGFkZXIoc2hhZGVyT2JqZWN0KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmVnaW5RdWVyeUVYVChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaWQpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1
aW50ICVkKSIsIHRhcmdldCwgaWQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0VYVDogCi0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZF
X0VYVDoKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGlkID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iZWdpblF1ZXJ5KHRhcmdldCwgaWQpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsQmluZEF0dHJpYkxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgs
IGNvbnN0IEdMY2hhciogbmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQs
IEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsIHByb2dy
YW0sIGluZGV4LCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3RybmNtcChuYW1lLCAiZ2xfIiwgMykgPT0g
MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0
LT5iaW5kQXR0cmlidXRlTG9jYXRpb24oaW5kZXgsIG5hbWUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZl
cihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgYnVmZmVyKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMdWludCBidWZmZXIgPSAlZCkiLCB0YXJnZXQsIGJ1ZmZlcik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kQXJyYXlCdWZmZXIo
YnVmZmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEVsZW1l
bnRBcnJheUJ1ZmZlcihidWZmZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0x1aW50IGZyYW1lYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBmcmFtZWJ1ZmZlcik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYg
dGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURf
RlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FO
R0xFIHx8IHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kUmVhZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9EUkFX
X0ZSQU1FQlVGRkVSX0FOR0xFIHx8IHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kRHJhd0ZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYLCBHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCByZW5kZXJidWZm
ZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJV
RkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xCaW5kVGV4dHVyZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgdGV4dHVyZSA9ICVkKSIsIHRhcmdldCwg
dGV4dHVyZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQotICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QgJiYg
dGV4dHVyZU9iamVjdC0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0ICYmIHRleHR1cmUgIT0gMCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlMkQodGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmVDdWJlTWFwKHRleHR1cmUpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJs
ZW5kQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xj
bGFtcGYgYWxwaGEpCi17Ci0gICAgRVZFTlQoIihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYg
Z3JlZW4gPSAlZiwgR0xjbGFtcGYgYmx1ZSA9ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCi0g
ICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBnbDo6Q29udGV4dCogY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRC
bGVuZENvbG9yKGdsOjpjbGFtcDAxKHJlZCksIGdsOjpjbGFtcDAxKGdyZWVuKSwgZ2w6OmNsYW1w
MDEoYmx1ZSksIGdsOjpjbGFtcDAxKGFscGhhKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uKEdM
ZW51bSBtb2RlKQotewotICAgIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGUsIG1vZGUpOwot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShHTGVudW0gbW9kZVJH
QiwgR0xlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlUkdCID0gMHgl
WCwgR0xlbnVtIG1vZGVBbHBoYSA9IDB4JVgpIiwgbW9kZVJHQiwgbW9kZUFscGhhKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlUkdCKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GVU5DX0FERDoKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6Ci0g
ICAgICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1vZGVBbHBoYSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6Ci0gICAgICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOgotICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRFcXVhdGlvbihtb2Rl
UkdCLCBtb2RlQWxwaGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5jKEdMZW51bSBzZmFjdG9yLCBHTGVu
dW0gZGZhY3RvcikKLXsKLSAgICBnbEJsZW5kRnVuY1NlcGFyYXRlKHNmYWN0b3IsIGRmYWN0b3Is
IHNmYWN0b3IsIGRmYWN0b3IpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVuY1NlcGFy
YXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVt
IGRzdEFscGhhKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHNyY1JHQiA9IDB4JVgsIEdMZW51bSBk
c3RSR0IgPSAweCVYLCBHTGVudW0gc3JjQWxwaGEgPSAweCVYLCBHTGVudW0gZHN0QWxwaGEgPSAw
eCVYKSIsCi0gICAgICAgICAgc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3JjUkdCKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9aRVJPOgotICAgICAgICAgIGNhc2UgR0xfT05FOgotICAgICAgICAgIGNh
c2UgR0xfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjoK
LSAgICAgICAgICBjYXNlIEdMX0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19EU1RfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEE6Ci0gICAgICAgICAgY2Fz
ZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOgot
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X0NPTlNUQU5UX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SOgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEFf
U0FUVVJBVEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzd2l0Y2ggKGRzdFJHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAg
ICAgICAgICBjYXNlIEdMX09ORToKLSAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKLSAgICAg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9EU1Rf
Q09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgotICAgICAgICAg
IGNhc2UgR0xfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBI
QToKLSAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9N
SU5VU19EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKLSAgICAg
ICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdM
X0NPTlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FM
UEhBOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dp
dGNoIChzcmNBbHBoYSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAgICAg
ICAgICBjYXNlIEdMX09ORToKLSAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKLSAgICAgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQ09M
T1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgotICAgICAgICAgIGNh
c2UgR0xfU1JDX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToK
LSAgICAgICAgICBjYXNlIEdMX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKLSAgICAgICAg
ICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX0NP
TlNUQU5UX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
OgotICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChkc3RBbHBoYSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNlIEdMX09ORToKLSAg
ICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19T
UkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBH
TF9PTkVfTUlOVVNfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOgotICAg
ICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0RT
VF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQSEE6Ci0gICAgICAg
ICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19D
T05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgotICAgICAg
ICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjb25zdGFudENvbG9yVXNlZCA9IChz
cmNSR0IgPT0gR0xfQ09OU1RBTlRfQ09MT1IgfHwgc3JjUkdCID09IEdMX09ORV9NSU5VU19DT05T
VEFOVF9DT0xPUiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJHQiA9
PSBHTF9DT05TVEFOVF9DT0xPUiB8fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SKTsKLQotICAgICAgICBib29sIGNvbnN0YW50QWxwaGFVc2VkID0gKHNyY1JHQiA9PSBHTF9D
T05TVEFOVF9BTFBIQSB8fCBzcmNSR0IgPT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UkdCID09IEdMX0NPTlNUQU5U
X0FMUEhBIHx8IGRzdFJHQiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpOwotCi0gICAg
ICAgIGlmIChjb25zdGFudENvbG9yVXNlZCAmJiBjb25zdGFudEFscGhhVXNlZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgRVJSKCJTaW11bHRhbmVvdXMgdXNlIG9mIEdMX0NPTlNUQU5UX0FMUEhB
L0dMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSBhbmQgR0xfQ09OU1RBTlRfQ09MT1IvR0xfT05F
X01JTlVTX0NPTlNUQU5UX0NPTE9SIGludmFsaWQgdW5kZXIgV2ViR0wiKTsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVu
ZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xC
dWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhLCBHTGVudW0gdXNhZ2UpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHAsIEdMZW51
bSB1c2FnZSA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3dpdGNoICh1c2FnZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RS
QVc6Ci0gICAgICAgICAgY2FzZSBHTF9TVEFUSUNfRFJBVzoKLSAgICAgICAgICBjYXNlIEdMX0RZ
TkFNSUNfRFJBVzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1
ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9
IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAg
YnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZl
ci0+YnVmZmVyRGF0YShkYXRhLCBzaXplLCB1c2FnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCdWZmZXJTdWJEYXRh
KEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBH
THZvaWQqIGRhdGEpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnRw
dHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEg
PSAweCUwLjhwKSIsCi0gICAgICAgICAgdGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoc2l6ZSA8IDAgfHwgb2Zmc2V0IDwgMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6
Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZ
X0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKChzaXplX3Qpc2l6ZSArIG9mZnNldCA+IGJ1ZmZlci0+
c2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnVmZmVyLT5idWZm
ZXJTdWJEYXRhKGRhdGEsIHNpemUsIG9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0xlbnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYKSIsIHRhcmdldCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0g
R0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYg
dGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURf
RlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xDbGVhcihHTGJpdGZpZWxkIG1hc2spCi17Ci0gICAgRVZFTlQoIihH
TGJpdGZpZWxkIG1hc2sgPSAlWCkiLCBtYXNrKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+Y2xlYXIobWFz
ayk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xDbGVhckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdM
Y2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKQotewotICAgIEVWRU5UKCIoR0xjbGFtcGYgcmVk
ID0gJWYsIEdMY2xhbXBmIGdyZWVuID0gJWYsIEdMY2xhbXBmIGJsdWUgPSAlZiwgR0xjbGFtcGYg
YWxwaGEgPSAlZikiLAotICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+c2V0Q2xlYXJDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xDbGVhckRlcHRoZihHTGNsYW1wZiBkZXB0aCkKLXsKLSAgICBFVkVOVCgiKEdMY2xhbXBm
IGRlcHRoID0gJWYpIiwgZGVwdGgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVhckRlcHRoKGRl
cHRoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbENsZWFyU3RlbmNpbChHTGludCBzKQotewotICAgIEVWRU5UKCIoR0xp
bnQgcyA9ICVkKSIsIHMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRDbGVhclN0ZW5jaWwocyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xDb2xvck1hc2soR0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xl
YW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKQotewotICAgIEVWRU5UKCIoR0xib29sZWFuIHJlZCA9
ICVkLCBHTGJvb2xlYW4gZ3JlZW4gPSAlZCwgR0xib29sZWFuIGJsdWUgPSAlZCwgR0xib29sZWFu
IGFscGhhID0gJWQpIiwKLSAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldENvbG9yTWFzayhyZWQgPT0gR0xfVFJVRSwgZ3JlZW4gPT0gR0xfVFJV
RSwgYmx1ZSA9PSBHTF9UUlVFLCBhbHBoYSA9PSBHTF9UUlVFKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvbXBpbGVT
aGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCki
LCBzaGFkZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5n
ZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVy
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Y29tcGlsZSgpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3Nl
ZFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCBHTHZvaWQqIGRhdGEpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xp
bnQgbGV2ZWwgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0
aCA9ICVkLCAiIAotICAgICAgICAgICJHTHNpemVpIGhlaWdodCA9ICVkLCBHTGludCBib3JkZXIg
PSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44
cCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGJvcmRlciAhPSAw
IHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoaW50ZXJuYWxm
b3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0g
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJvcmRlciAhPSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAg
IGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxl
dmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11
bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1o6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQt
PmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5z
aW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQn
cyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRo
aXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVk
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoaW1hZ2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlm
ICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZElt
YWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNp
emUsIGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCi17Ci0g
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQg
eG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKLSAgICAgICAgICAiR0xzaXplaSB3
aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgIgot
ICAgICAgICAgICJHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAw
eCUwLjhwKSIsCi0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCAhdmFsaWRJbWFn
ZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IGRhdGEgPT0gTlVMTCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4
aW11bVRleHR1cmVMZXZlbCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9T
M1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRo
ZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhv
dWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3Mg
YXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSAh
PSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoeG9mZnNldCAlIDQgIT0gMCB8fCB5
b2Zmc2V0ICUgNCAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIHdlIHdhaXQgdG8gY2hlY2sgdGhlIG9mZnNl
dHMgdW50aWwgdGhpcyBwb2ludCwgYmVjYXVzZSB0aGUgbXVsdGlwbGUtb2YtZm91ciByZXN0cmlj
dGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGRvZXMgbm90IGV4aXN0IHVubGVzcyBEWFQgdGV4dHVyZXMgYXJlIHN1cHBvcnRlZC4KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJ
bWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBmb3JtYXQsIHRleHR1cmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwg
aGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHRleHR1cmUp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1h
Z2VDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpCi17
Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xl
bnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgIgotICAgICAgICAgICJHTGludCB4ID0gJWQsIEdM
aW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGlu
dCBib3JkZXIgPSAlZCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhp
bXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBz
d2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVt
VGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWln
aHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCAhPSBo
ZWlnaHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigp
ID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0
TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoZnJh
bWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoKTsKLSAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1hdCA9
IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAgICAgICAgICAgLy8gW09wZW5HTCBF
UyAyLjAuMjRdIHRhYmxlIDMuOQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAg
ICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEEgJiYKLSAgICAgICAgICAgICAg
ICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQiAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1NjUgJiYKLSAgICAgICAgICAgICAgICAgICAg
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCOF9PRVMgJiYKLSAgICAgICAgICAgICAgICAgICAg
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAg
ICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAg
IGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAg
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQx
NjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3Vw
cG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsK
LQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxl
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRleHR1cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ29weVRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0g
JWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAg
IkdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkg
aGVpZ2h0ID0gJWQpIiwKLSAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKCFn
bDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0
czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0
czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotCi0gICAgICAgICAg
ICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLSAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZl
ckZvcm1hdCA9IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgIGdsOjpU
ZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKLSAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0
ID0gR0xfUkdCQTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3Vi
SW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2
ZWwsIEdMX05PTkUsIHRleDJkKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1h
Z2VQYXJhbXMKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1h
dCA9IHRleDJkLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCk7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IHRleDJkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3Vi
ZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwg
R0xfTk9ORSwgdGV4Y3ViZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQg
PSB0ZXhjdWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxl
IDMuOQotICAgICAgICAgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9BTFBIQSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1HTHVp
bnQgX19zdGRjYWxsIGdsQ3JlYXRlUHJvZ3JhbSh2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotR0x1
aW50IF9fc3RkY2FsbCBnbENyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKLXsKLSAgICBFVkVOVCgi
KEdMZW51bSB0eXBlID0gMHglWCkiLCB0eXBlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfU0hBREVSOgotICAgICAgICAgICAgICAgIHJldHVybiBj
b250ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwgMCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbEN1bGxGYWNlKEdMZW51bSBtb2RlKQot
ewotICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBzd2l0Y2ggKG1vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X0ZST05UOgotICAgICAgICAgIGNhc2UgR0xfQkFDSzoKLSAgICAgICAgICBjYXNlIEdMX0ZST05U
X0FORF9CQUNLOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldEN1bGxNb2RlKG1vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUJ1ZmZlcnMoR0xzaXplaSBu
LCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwg
Y29uc3QgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBuLCBidWZmZXJzKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVCdWZmZXIo
YnVmZmVyc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVGZW5jZXNOVihHTHNp
emVpIG4sIGNvbnN0IEdMdWludCogZmVuY2VzKQotewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0g
JWQsIGNvbnN0IEdMdWludCogZmVuY2VzID0gMHglMC44cCkiLCBuLCBmZW5jZXMpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNl
KGZlbmNlc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycykKLXsKLSAgICBFVkVOVCgiKEdM
c2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwgbiwg
ZnJhbWVidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZnJhbWVidWZmZXJzW2ldICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcnNbaV0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVByb2dyYW0o
R0x1aW50IHByb2dyYW0pCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHBy
b2dyYW0pOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFt
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXNFWFQoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQgKmlk
cykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQgKmlkcyA9IDB4
JTAuOHApIiwgbiwgaWRzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5kZWxldGVRdWVyeShpZHNbaV0pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsRGVsZXRlUmVuZGVyYnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogcmVuZGVyYnVm
ZmVycykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIHJlbmRl
cmJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIHJlbmRlcmJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihy
ZW5kZXJidWZmZXJzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVNoYWRlcihH
THVpbnQgc2hhZGVyKQotewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRl
cik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXIgPT0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVy
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRQcm9ncmFt
KHNoYWRlcikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbERlbGV0ZVRleHR1cmVzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcykKLXsK
LSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIHRleHR1cmVzID0gMHgl
MC44cCkiLCBuLCB0ZXh0dXJlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRleHR1cmVzW2ldICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1cmVzW2ldKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aEZ1bmMoR0xlbnVtIGZ1
bmMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gZnVuYyA9IDB4JVgpIiwgZnVuYyk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZnVuYykKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfTkVWRVI6Ci0gICAgICAgICAgY2FzZSBHTF9BTFdBWVM6Ci0gICAgICAgICAgY2FzZSBH
TF9MRVNTOgotICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgotICAgICAgICAgIGNhc2UgR0xfRVFV
QUw6Ci0gICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgotICAgICAgICAgIGNhc2UgR0xfR0VRVUFM
OgotICAgICAgICAgIGNhc2UgR0xfTk9URVFVQUw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXREZXB0aEZ1bmMoZnVuYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aE1hc2soR0xi
b29sZWFuIGZsYWcpCi17Ci0gICAgRVZFTlQoIihHTGJvb2xlYW4gZmxhZyA9ICVkKSIsIGZsYWcp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aE1hc2soZmxhZyAhPSBHTF9GQUxTRSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xEZXB0aFJhbmdlZihHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcikKLXsKLSAgICBF
VkVOVCgiKEdMY2xhbXBmIHpOZWFyID0gJWYsIEdMY2xhbXBmIHpGYXIgPSAlZikiLCB6TmVhciwg
ekZhcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsRGV0YWNoU2hhZGVyKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKQotewotICAg
IEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IHNoYWRlciA9ICVkKSIsIHByb2dy
YW0sIHNoYWRlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLQotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250
ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVy
T2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBnbDo6U2hhZGVyICpzaGFkZXJCeVByb2dyYW1IYW5kbGU7Ci0gICAgICAgICAgICAgICAgc2hh
ZGVyQnlQcm9ncmFtSGFuZGxlID0gY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pOwotICAgICAg
ICAgICAgICAgIGlmICghc2hhZGVyQnlQcm9ncmFtSGFuZGxlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzaGFk
ZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1CeVNoYWRlckhhbmRsZSA9IGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CeVNoYWRlckhhbmRsZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdC0+ZGV0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbERpc2FibGUoR0xlbnVtIGNhcCkKLXsKLSAgICBFVkVOVCgiKEdM
ZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoY2FwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0Q3VsbEZhY2UoZmFsc2UpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5zZXRQb2x5Z29u
T2Zmc2V0RmlsbChmYWxzZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1Q
TEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShm
YWxzZSk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAg
ICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2UoZmFsc2UpOyAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTY2lzc29yVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KGZh
bHNlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhUZXN0KGZhbHNlKTsgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5zZXRCbGVuZChmYWxzZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhl
cihmYWxzZSk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCkKLXsK
LSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkKSIsIGluZGV4KTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4LCBmYWxzZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkKLXsKLSAg
ICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBj
b3VudCA9ICVkKSIsIG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGlmIChjb3VudCA8IDAgfHwgZmlyc3QgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUo
R0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3Vu
dCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBHTHNpemVpIHByaW1jb3VudCA9ICVkKSIsIG1vZGUsIGZpcnN0
LCBjb3VudCwgcHJpbWNvdW50KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50
IDwgMCB8fCBmaXJzdCA8IDAgfHwgcHJpbWNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHByaW1jb3VudCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMo
bW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
RHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29u
c3QgR0x2b2lkKiBpbmRpY2VzKQotewotICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBH
THNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBpbmRp
Y2VzID0gMHglMC44cCkiLAotICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAgICAK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsZW1l
bnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVtZW50
c0luc3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwg
Y29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBFVkVOVCgi
KEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4
JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHAsIEdMc2l6ZWkgcHJpbWNvdW50ID0g
JWQpIiwKLSAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgcHJpbWNvdW50KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCBwcmltY291bnQgPCAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJpbWNvdW50ID4gMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7ICAgIAotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCBwcmltY291
bnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRW5hYmxlKEdMZW51bSBjYXApCi17Ci0gICAg
RVZFTlQoIihHTGVudW0gY2FwID0gMHglWCkiLCBjYXApOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5z
ZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0Nv
dmVyYWdlKHRydWUpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRl
c3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9U
RVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0
aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCkKLXsK
LSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkKSIsIGluZGV4KTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4LCB0cnVlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEVu
ZFF1ZXJ5RVhUKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgRVZFTlQoIkdMZW51bSB0YXJnZXQgPSAw
eCVYKSIsIHRhcmdldCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAK
LSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgot
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lbmRRdWVyeSh0YXJn
ZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsRmluaXNoRmVuY2VOVihHTHVpbnQgZmVuY2UpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgZmVuY2UgPSAlZCkiLCBmZW5jZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSogZmVuY2VP
YmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7Ci0KLSAgICAgICAgICAgIGlmIChmZW5j
ZU9iamVjdCA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZlbmNlT2JqZWN0LT5maW5pc2hGZW5jZSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRmluaXNoKHZvaWQpCi17Ci0g
ICAgRVZFTlQoIigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bmModHJ1ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xG
bHVzaCh2b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW5jKGZh
bHNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVy
YnVmZmVyKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRh
Y2htZW50ID0gMHglWCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCA9IDB4JVgsICIKLSAgICAg
ICAgICAiR0x1aW50IHJlbmRlcmJ1ZmZlciA9ICVkKSIsIHRhcmdldCwgYXR0YWNobWVudCwgcmVu
ZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFN
RUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAg
ICAgICAgICAgIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSICYmIHJl
bmRlcmJ1ZmZlciAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsK
LSAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIo
KTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRG
cmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJh
d0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250
ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCAmJiByZW5k
ZXJidWZmZXIgIT0gMCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0NPTE9SX0FUVEFDSE1FTlQwOgotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xv
cmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAg
ICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5k
ZXJidWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3Rl
bmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRl
eHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsKQotewotICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0xlbnVtIHRleHRh
cmdldCA9IDB4JVgsICIKLSAgICAgICAgICAiR0x1aW50IHRleHR1cmUgPSAlZCwgR0xpbnQgbGV2
ZWwgPSAlZCkiLCB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVS
ICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoYXR0YWNo
bWVudCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6Ci0g
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRleHR1
cmUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0YXJnZXQgPSBHTF9O
T05FOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXggPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1
cmUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRleCA9PSBOVUxMKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRleHRhcmdl
dCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmUyRCAq
Pih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQo
MCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6
OlRleHR1cmVDdWJlTWFwICo+KHRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
Y3ViZS0+aXNDb21wcmVzc2VkKHRleHRhcmdldCwgbGV2ZWwpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobGV2ZWwg
IT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAg
ICAgICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAg
ICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVm
ZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdl
dERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCB8fCAhZnJhbWVidWZmZXIpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOiAgZnJhbWVidWZm
ZXItPnNldENvbG9yYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhi
dWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlQ6IGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKHRleHRh
cmdldCwgdGV4dHVyZSk7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRnJvbnRGYWNl
KEdMZW51bSBtb2RlKQotewotICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1vZGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0NXOgotICAgICAgICAgIGNhc2UgR0xfQ0NXOgotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZyb250RmFjZShtb2RlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xHZW5CdWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBidWZmZXJzKQotewotICAg
IEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogYnVmZmVycyA9IDB4JTAuOHApIiwgbiwg
YnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQt
PmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21w
cmVzc2VkKDApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgwKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1gsIDApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGV4Y3ViZS0+Z2VuZXJhdGVN
aXBtYXBzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2VuRmVuY2VzTlYoR0xz
aXplaSBuLCBHTHVpbnQqIGZlbmNlcykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBH
THVpbnQqIGZlbmNlcyA9IDB4JTAuOHApIiwgbiwgZmVuY2VzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVGZW5j
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwg
R0x1aW50KiBmcmFtZWJ1ZmZlcnMpCi17Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1
aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGZyYW1lYnVmZmVycyk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJzW2ldID0gY29u
dGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdlblF1
ZXJpZXNFWFQoR0xzaXplaSBuLCBHTHVpbnQqIGlkcykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkg
biA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwgaWRzKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVy
eSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2VuUmVuZGVyYnVmZmVycyhHTHNpemVpIG4s
IEdMdWludCogcmVuZGVyYnVmZmVycykKLXsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBH
THVpbnQqIHJlbmRlcmJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIHJlbmRlcmJ1ZmZlcnMpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlcnNbaV0g
PSBjb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bEdlblRleHR1cmVzKEdMc2l6ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykKLXsKLSAgICBFVkVOVCgi
KEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHRleHR1cmVzID0gIDB4JTAuOHApIiwgbiwgdGV4dHVy
ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVz
W2ldID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
R2V0QWN0aXZlQXR0cmliKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIg
Km5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXgg
PSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkgKmxlbmd0aCA9IDB4JTAuOHAsICIK
LSAgICAgICAgICAiR0xpbnQgKnNpemUgPSAweCUwLjhwLCBHTGVudW0gKnR5cGUgPSAlMC44cCwg
R0xjaGFyICpuYW1lID0gJTAuOHApIiwKLSAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmc2l6
ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVpbnQpcHJvZ3JhbU9iamVjdC0+Z2V0
QWN0aXZlQXR0cmlidXRlQ291bnQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZShpbmRleCwgYnVmc2l6ZSwgbGVu
Z3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm0oR0x1aW50
IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgs
IEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSkKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBpbmRleCA9ICVkLCBHTHNpemVpIGJ1ZnNpemUg
PSAlZCwgIgotICAgICAgICAgICJHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGludCogc2l6
ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hhciogbmFtZSA9IDB4JTAu
OHApIiwKLSAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0
eXBlLCBuYW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGluZGV4ID49IChHTHVpbnQpcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5n
ZXRBY3RpdmVVbmlmb3JtKGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQg
X19zdGRjYWxsIGdsR2V0QXR0YWNoZWRTaGFkZXJzKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1h
eGNvdW50LCBHTHNpemVpKiBjb3VudCwgR0x1aW50KiBzaGFkZXJzKQotewotICAgIEVWRU5UKCIo
R0x1aW50IHByb2dyYW0gPSAlZCwgR0xzaXplaSBtYXhjb3VudCA9ICVkLCBHTHNpemVpKiBjb3Vu
dCA9IDB4JTAuOHAsIEdMdWludCogc2hhZGVycyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBwcm9n
cmFtLCBtYXhjb3VudCwgY291bnQsIHNoYWRlcnMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAobWF4Y291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRl
eHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVj
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVy
KHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dGFjaGVkU2hh
ZGVycyhtYXhjb3VudCwgY291bnQsIHNoYWRlcnMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLWludCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJMb2NhdGlv
bihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQotewotICAgIEVWRU5UKCIoR0x1
aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gJXMpIiwgcHJvZ3JhbSwgbmFt
ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LQotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiBwcm9ncmFtQmluYXJ5LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgLTEpOwotICAgIH0KLQotICAgIHJldHVybiAtMTsK
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVh
biogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xib29sZWFu
KiBwYXJhbXMgPSAweCUwLjhwKSIsICBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29u
dGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQ
YXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAgICAgICAgICAg
ICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0
IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFt
ZXRlcnMgdG8gcmV0dXJuCi0KLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9G
TE9BVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZs
b2F0UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcg
R0xmbG9hdFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZs
b2F0dihwbmFtZSwgZmxvYXRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAg
ICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOwotCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bnRQYXJhbXNbaV0gPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9
IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
YnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAg
ICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghYnVmZmVyKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAi
MCIgaXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9CVUZGRVJfVVNBR0U6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+
dXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9C
VUZGRVJfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXplKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xHZXRFcnJvcih2
b2lkKQotewotICAgIEVWRU5UKCIoKSIpOwotCi0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotCi0gICAgaWYgKGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1
cm4gY29udGV4dC0+Z2V0RXJyb3IoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0RmVuY2Vpdk5WKEdMdWludCBmZW5jZSwgR0xlbnVt
IHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZlbmNlID0gJWQs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50ICpwYXJhbXMgPSAweCUwLjhwKSIsIGZlbmNlLCBw
bmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAKLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNv
bnRleHQtPmdldEZlbmNlKGZlbmNlKTsKLQotICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09
IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmVuY2VPYmpl
Y3QtPmdldEZlbmNlaXYocG5hbWUsIHBhcmFtcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGbG9hdHYoR0xlbnVt
IHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gcG5hbWUgPSAw
eCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIShjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotCi0gICAg
ICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCi0KLSAgICAgICAgICAgICAgICBpZiAobmF0
aXZlVHlwZSA9PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYm9v
bFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJh
bXNbaV0gPT0gR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gMC4wZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7
Ci0gICAgICAgICAgICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOwot
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJh
bXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IChHTGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51
bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50
KiBwYXJhbXMgPSAweCUwLjhwKSIsCi0gICAgICAgICAgdGFyZ2V0LCBhdHRhY2htZW50LCBwbmFt
ZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJn
ZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFN
RUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09
IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEdMZW51
bSBhdHRhY2htZW50VHlwZTsKLSAgICAgICAgICAgIEdMdWludCBhdHRhY2htZW50SGFuZGxlOwot
ICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOiAgICAKLSAgICAgICAgICAgICAgICBhdHRh
Y2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsKLSAgICAgICAg
ICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFu
ZGxlKCk7IAotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIX0FUVEFDSE1FTlQ6ICAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsKLSAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
OiAgIAotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudE9iamVjdFR5
cGU7ICAgLy8gVHlwZSBjYXRlZ29yeQotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRUeXBlID09
IEdMX05PTkUgfHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5
cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRl
eHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfVEVYVFVSRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAg
ICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIg
fHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgotICAgICAgICAgICAgICAgIGlm
IChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7IC8vIEZyYW1lYnVmZmVyVGV4dHVyZTJE
IHdpbGwgbm90IGFsbG93IGxldmVsIHRvIGJlIHNldCB0byBhbnl0aGluZyBlbHNlIGluIEdMIEVT
IDIuMAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6
Ci0gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1h
cFRleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudFR5cGU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotR0xlbnVtIF9fc3RkY2FsbCBnbEdldEdyYXBoaWNzUmVzZXRTdGF0
dXNFWFQodm9pZCkKLXsKLSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Z2V0UmVz
ZXRTdGF0dXMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXJ2
KEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHBuYW1lLCBwYXJhbXMpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIShjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgcGFyYW1zKSkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1z
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFy
ZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5
cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ld
ID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAg
ICAgICAgICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0K
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFt
cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBu
dW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBuYW1lID09IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9SX0NM
RUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdM
X0JMRU5EX0NPTE9SKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZGKSAq
IGZsb2F0UGFyYW1zW2ldIC0gMS4wZikgLyAyLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29yKGZs
b2F0UGFyYW1zW2ldICsgMC41KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBh
cmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9n
cmFtaXYoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAg
ICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMZW51bSBwbmFtZSA9ICVkLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwot
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dy
YW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkgIT0gTlVMTDsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkFMSURBVEVfU1RBVFVT
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc1ZhbGlkYXRlZCgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTkZPX0xP
R19MRU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldElu
Zm9Mb2dMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQVRUQUNIRURfU0hBREVSUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0QXR0YWNoZWRTaGFkZXJzQ291bnQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX0FUVFJJQlVURVM6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZUF0dHJpYnV0ZUNvdW50KCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNUzoKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3Qt
PmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfTEVOR1RIX09FUzoKLSAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtSW5mb0xvZyhHTHVpbnQgcHJv
Z3JhbSwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogaW5mb2xvZykK
LXsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVk
LCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIGluZm9sb2cgPSAweCUwLjhwKSIs
Ci0gICAgICAgICAgcHJvZ3JhbSwgYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBy
b2dyYW1PYmplY3QtPmdldEluZm9Mb2coYnVmc2l6ZSwgbGVuZ3RoLCBpbmZvbG9nKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEdldFF1ZXJ5aXZFWFQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFy
YW1zKQotewotICAgIEVWRU5UKCJHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0g
MHglWCwgR0xpbnQgKnBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwYXJhbXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0UXVlcnlPYmplY3R1aXZFWFQoR0x1aW50IGlkLCBHTGVudW0gcG5hbWUsIEdMdWlu
dCAqcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJWQsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMdWludCAqcGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9RVUVSWV9S
RVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UXVl
cnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKTsK
LQotICAgICAgICAgICAgaWYgKCFxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkocXVlcnlPYmplY3Qt
PmdldFR5cGUoKSkgPT0gaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgc3dpdGNoKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1FV
RVJZX1JFU1VMVF9FWFQ6Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3Qt
PmdldFJlc3VsdCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUOgotICAgICAgICAgICAgICAgIHBhcmFtc1sw
XSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2YWlsYWJsZSgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVChmYWxz
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFt
cyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKSA9PSAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
ciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5k
bGUoKSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1dJRFRIOiAgICAgICAgICAgKnBhcmFtcyA9
IHJlbmRlcmJ1ZmZlci0+Z2V0V2lkdGgoKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkVOREVSQlVGRkVSX0hFSUdIVDogICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDogKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0
SW50ZXJuYWxGb3JtYXQoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVG
RkVSX1JFRF9TSVpFOiAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0UmVkU2l6ZSgp
OyAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0dSRUVO
X1NJWkU6ICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7ICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JMVUVfU0laRTogICAg
ICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6ICAgICAgKnBhcmFt
cyA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7ICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6ICAgICAgKnBhcmFtcyA9IHJlbmRl
cmJ1ZmZlci0+Z2V0RGVwdGhTaXplKCk7ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRTogICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+
Z2V0U3RlbmNpbFNpemUoKTsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVS
QlVGRkVSX1NBTVBMRVNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldE1h
eFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJpdihHTHVpbnQgc2hhZGVyLCBHTGVudW0gcG5hbWUsIEdM
aW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMZW51bSBw
bmFtZSA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBzaGFkZXIsIHBuYW1lLCBwYXJh
bXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFk
ZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1NIQURFUl9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBzaGFkZXJPYmplY3QtPmdldFR5cGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVMRVRFX1NUQVRVUzoKLSAgICAgICAgICAgICAgICAqcGFy
YW1zID0gc2hhZGVyT2JqZWN0LT5pc0ZsYWdnZWRGb3JEZWxldGlvbigpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QSUxFX1NUQVRVUzoKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2JqZWN0LT5pc0NvbXBpbGVkKCkgPyBHTF9UUlVF
IDogR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNl
IEdMX0lORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2Jq
ZWN0LT5nZXRJbmZvTG9nTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBzaGFkZXJPYmplY3QtPmdldFNvdXJjZUxlbmd0aCgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0Vf
TEVOR1RIX0FOR0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzaGFkZXJPYmplY3QtPmdl
dFRyYW5zbGF0ZWRTb3VyY2VMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJJbmZvTG9nKEdMdWlu
dCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9s
b2cpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9
ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIGluZm9sb2cgPSAweCUwLjhw
KSIsCi0gICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIGluZm9sb2cpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRl
ck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAgICAgICAgICBpZiAo
IXNoYWRlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRl
ck9iamVjdC0+Z2V0SW5mb0xvZyhidWZzaXplLCBsZW5ndGgsIGluZm9sb2cpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lz
aW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lzaW9uKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHNoYWRlcnR5cGUgPSAweCVYLCBHTGVudW0gcHJlY2lzaW9udHlwZSA9IDB4JVgsIEdM
aW50KiByYW5nZSA9IDB4JTAuOHAsIEdMaW50KiBwcmVjaXNpb24gPSAweCUwLjhwKSIsCi0gICAg
ICAgICAgc2hhZGVydHlwZSwgcHJlY2lzaW9udHlwZSwgcmFuZ2UsIHByZWNpc2lvbik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2hhZGVydHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgICBjYXNlIEdMX0ZSQUdNRU5U
X1NIQURFUjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAocHJlY2lzaW9udHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfTE9X
X0ZMT0FUOgotICAgICAgICAgIGNhc2UgR0xfTUVESVVNX0ZMT0FUOgotICAgICAgICAgIGNhc2Ug
R0xfSElHSF9GTE9BVDoKLSAgICAgICAgICAgIC8vIEFzc3VtZSBJRUVFIDc1NCBwcmVjaXNpb24K
LSAgICAgICAgICAgIHJhbmdlWzBdID0gMTI3OwotICAgICAgICAgICAgcmFuZ2VbMV0gPSAxMjc7
Ci0gICAgICAgICAgICAqcHJlY2lzaW9uID0gMjM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0xPV19JTlQ6Ci0gICAgICAgICAgY2FzZSBHTF9NRURJVU1fSU5UOgotICAg
ICAgICAgIGNhc2UgR0xfSElHSF9JTlQ6Ci0gICAgICAgICAgICAvLyBTb21lIChtb3N0KSBoYXJk
d2FyZSBvbmx5IHN1cHBvcnRzIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgbnVtYmVy
cywKLSAgICAgICAgICAgIC8vIHdoaWNoIGNhbiBhY2N1cmF0ZWx5IHJlcHJlc2VudCBpbnRlZ2Vy
cyB1cCB0byArLy0xNjc3NzIxNgotICAgICAgICAgICAgcmFuZ2VbMF0gPSAyNDsKLSAgICAgICAg
ICAgIHJhbmdlWzFdID0gMjQ7Ci0gICAgICAgICAgICAqcHJlY2lzaW9uID0gMDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFNoYWRlclNvdXJjZShHTHVpbnQgc2hhZGVy
LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpCi17Ci0g
ICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCBHTHNp
emVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIHNvdXJjZSA9IDB4JTAuOHApIiwKLSAgICAg
ICAgICBzaGFkZXIsIGJ1ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBj
b250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmpl
Y3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0
LT5nZXRTb3VyY2UoYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2UpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xz
aXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCBzaGFk
ZXIgPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAs
IEdMY2hhciogc291cmNlID0gMHglMC44cCkiLAotICAgICAgICAgIHNoYWRlciwgYnVmc2l6ZSwg
bGVuZ3RoLCBzb3VyY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFk
ZXIpOwotCi0gICAgICAgICAgICBpZiAoIXNoYWRlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzaGFkZXJPYmplY3QtPmdldFRyYW5zbGF0ZWRTb3VyY2Uo
YnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLWNvbnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZyhH
TGVudW0gbmFtZSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBuYW1lID0gMHglWCkiLCBuYW1lKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBzd2l0Y2ggKG5hbWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX1ZFTkRPUjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIkdv
b2dsZSBJbmMuIjsKLSAgICAgICAgICBjYXNlIEdMX1JFTkRFUkVSOgotICAgICAgICAgICAgcmV0
dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRSZW5kZXJlclN0
cmluZygpIDogIkFOR0xFIik7Ci0gICAgICAgICAgY2FzZSBHTF9WRVJTSU9OOgotICAgICAgICAg
ICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoQU5HTEUgIlZFUlNJT05fU1RSSU5H
IikiOwotICAgICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAg
ICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIlZF
UlNJT05fU1RSSU5HIikiOwotICAgICAgICAgIGNhc2UgR0xfRVhURU5TSU9OUzoKLSAgICAgICAg
ICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0RXh0
ZW5zaW9uU3RyaW5nKCkgOiAiIik7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIChHTHVieXRlKilOVUxMKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKEdMdWJ5dGUqKU5VTEwpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5h
bWUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdl
dCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwotCi0gICAg
ICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWFnRmlsdGVyKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklM
VEVSOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNaW5G
aWx0ZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVy
ZS0+Z2V0V3JhcFMoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfVDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
dGV4dHVyZS0+Z2V0V3JhcFQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVRfRVhUOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCkodGV4dHVyZS0+aXNJbW11dGFibGUoKSA/IEdMX1RSVUUgOiBH
TF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
dGV4dHVyZS0+Z2V0VXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVy
ZTsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1hZ0ZpbHRlcigpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUjoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluRmlsdGVyKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1M6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBTKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1Q6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFC
TEVfRk9STUFUX0VYVDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+aXNJbW11
dGFibGUoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRVc2FnZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0blVuaWZvcm1mdkVYVChH
THVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xmbG9hdCog
cGFyYW1zKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHAp
IiwKLSAgICAgICAgICBwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZlNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAw
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dy
YW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRV
bmlmb3JtZnYobG9jYXRpb24sICZidWZTaXplLCBwYXJhbXMpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtZnYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0
aW9uLCBHTGZsb2F0KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVk
LCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHByb2dy
YW0sIGxvY2F0aW9uLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmlu
YXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtZnYo
bG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3Jh
bSA9ICVkLCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xpbnQq
IHBhcmFtcyA9IDB4JTAuOHApIiwgCi0gICAgICAgICAgcHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNp
emUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChidWZTaXplIDwgMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFt
KTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
cHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCAmYnVmU2l6ZSwgcGFyYW1zKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWl2KEdMdWludCBw
cm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJWQsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMaW50KiBwYXJhbXMgPSAw
eCUwLjhwKSIsIHByb2dyYW0sIGxvY2F0aW9uLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jh
bSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW0g
KnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0
LT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5nZXRVbmlmb3JtaXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci1pbnQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUxvY2F0aW9uKEdMdWludCBwcm9ncmFtLCBjb25z
dCBHTGNoYXIqIG5hbWUpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBjb25z
dCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsIHByb2dyYW0sIG5hbWUpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChzdHJzdHIobmFtZSwgImdsXyIpID09IG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCAtMSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1Mb2NhdGlvbihuYW1l
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgLTEpOwotICAgIH0KLQotICAg
IHJldHVybiAtMTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVp
bnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKQotewotICAgIEVWRU5UKCIo
R0x1aW50IGluZGV4ID0gJWQsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9
IDB4JTAuOHApIiwgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0
VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
RU5BQkxFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRl
Lm1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVNpemU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9TVFJJREU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0
YXRlLm1TdHJpZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdClhdHRyaWJTdGF0ZS5tVHlwZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdM
X1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubUJvdW5kQnVmZmVyLmlkKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9WRVJU
RVhfQVRUUklCOgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmli
U3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJ
U09SX0FOR0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0
ZS5tRGl2aXNvcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRWZXJ0ZXhBdHRyaWJpdihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBh
cmFtcykKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAw
eCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBpbmRleCwgcG5hbWUsIHBhcmFtcyk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
U3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
YXR0cmliU3RhdGUubUFycmF5RW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9TSVpFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU2l6ZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklC
X0FSUkFZX1NUUklERToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVN0
cmlkZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0
YXRlLm1UeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKGF0dHJpYlN0YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0
ZS5tQm91bmRCdWZmZXIuaWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6Ci0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBjdXJyZW50VmFsdWUgPSBhdHRyaWJTdGF0ZS5tQ3VycmVudFZhbHVlW2ldOwot
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGN1cnJlbnRWYWx1ZSA+IDAu
MGYgPyBmbG9vcihjdXJyZW50VmFsdWUgKyAwLjVmKSA6IGNlaWwoY3VycmVudFZhbHVlIC0gMC41
ZikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGludClhdHRyaWJTdGF0ZS5tRGl2aXNvcjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcikKLXsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHZvaWQq
KiBwb2ludGVyID0gMHglMC44cCkiLCBpbmRleCwgcG5hbWUsIHBvaW50ZXIpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChwbmFtZSAhPSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5U
RVIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwb2ludGVyID0gY29uc3Rf
Y2FzdDxHTHZvaWQqPihjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xIaW50KEdMZW51bSB0YXJnZXQsIEdMZW51bSBtb2RlKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBtb2RlID0gMHglWCkiLCB0YXJnZXQsIG1vZGUp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1vZGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0ZBU1RFU1Q6Ci0gICAgICAgICAgY2FzZSBHTF9OSUNFU1Q6Ci0gICAg
ICAgICAgY2FzZSBHTF9ET05UX0NBUkU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IAotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgICAgICAgaWYgKGNvbnRleHQpIGNv
bnRleHQtPnNldEdlbmVyYXRlTWlwbWFwSGludChtb2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6Ci0g
ICAgICAgICAgICBpZiAoY29udGV4dCkgY29udGV4dC0+c2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0
aXZlSGludChtb2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGds
SXNCdWZmZXIoR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBidWZmZXIgPSAl
ZCkiLCBidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYm
IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyT2JqZWN0
ID0gY29udGV4dC0+Z2V0QnVmZmVyKGJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIGlmIChidWZmZXJP
YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNF
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNh
bGwgZ2xJc0VuYWJsZWQoR0xlbnVtIGNhcCkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBjYXAgPSAw
eCVYKSIsIGNhcCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoY2FwKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmlzQ3VsbEZhY2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZT
RVRfRklMTDogICAgICByZXR1cm4gY29udGV4dC0+aXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQo
KTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IHJldHVy
biBjb250ZXh0LT5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1Nh
bXBsZUNvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVT
VDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2Npc3NvclRlc3RFbmFibGVkKCk7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC0+aXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9URVNUOiAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RlcHRoVGVzdEVuYWJsZWQo
KTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LT5pc0JsZW5kRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhF
UjogICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzRGl0aGVyRW5hYmxlZCgpOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
R0xib29sZWFuIF9fc3RkY2FsbCBnbElzRmVuY2VOVihHTHVpbnQgZmVuY2UpCi17Ci0gICAgRVZF
TlQoIihHTHVpbnQgZmVuY2UgPSAlZCkiLCBmZW5jZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVu
Y2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7Ci0KLSAgICAgICAgICAgIGlmIChm
ZW5jZU9iamVjdCA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZlbmNlT2Jq
ZWN0LT5pc0ZlbmNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZB
TFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBmcmFtZWJ1ZmZlciA9ICVkKSIsIGZyYW1lYnVmZmVyKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCAmJiBmcmFtZWJ1ZmZlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdl
dEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVy
T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxT
RSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRj
YWxsIGdsSXNQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIEVWRU5UKCIoR0x1aW50IHBy
b2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCAmJiBwcm9ncmFtKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAg
ICAgIGlmIChwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1H
TGJvb2xlYW4gX19zdGRjYWxsIGdsSXNRdWVyeUVYVChHTHVpbnQgaWQpCi17Ci0gICAgRVZFTlQo
IihHTHVpbnQgaWQgPSAlZCkiLCBpZCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChp
ZCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgICAg
IH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05F
KTsKLQotICAgICAgICAgICAgaWYgKHF1ZXJ5T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZB
TFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNSZW5kZXJidWZmZXIoR0x1aW50IHJl
bmRlcmJ1ZmZlcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCBy
ZW5kZXJidWZmZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYm
IHJlbmRlcmJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
cmVuZGVyYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZl
cik7Ci0KLSAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1NoYWRlcihHTHVpbnQg
c2hhZGVyKQotewotICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQgJiYgc2hhZGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRT
aGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKHNoYWRlck9iamVjdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwotICAgIH0KLQotICAg
IHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBnbElzVGV4dHVyZShH
THVpbnQgdGV4dHVyZSkKLXsKLSAgICBFVkVOVCgiKEdMdWludCB0ZXh0dXJlID0gJWQpIiwgdGV4
dHVyZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQgJiYgdGV4dHVy
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmVPYmplY3QgPSBj
b250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOwotCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9i
amVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0Up
OwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xM
aW5lV2lkdGgoR0xmbG9hdCB3aWR0aCkKLXsKLSAgICBFVkVOVCgiKEdMZmxvYXQgd2lkdGggPSAl
ZikiLCB3aWR0aCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8PSAwLjBm
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRMaW5lV2lkdGgod2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsTGlua1Byb2dyYW0o
R0x1aW50IHByb2dyYW0pCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHBy
b2dyYW0pOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dy
YW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+bGluaygpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUGl4ZWxTdG9y
ZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgcG5hbWUsIHBhcmFtKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dp
dGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tf
QUxJR05NRU5UOgotICAgICAgICAgICAgICAgIGlmIChwYXJhbSAhPSAxICYmIHBhcmFtICE9IDIg
JiYgcGFyYW0gIT0gNCAmJiBwYXJhbSAhPSA4KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFVucGFja0FsaWdubWVudChwYXJh
bSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSBHTF9QQUNL
X0FMSUdOTUVOVDoKLSAgICAgICAgICAgICAgICBpZiAocGFyYW0gIT0gMSAmJiBwYXJhbSAhPSAy
ICYmIHBhcmFtICE9IDQgJiYgcGFyYW0gIT0gOCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYWNrQWxpZ25tZW50KHBhcmFt
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tf
UkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGFj
a1JldmVyc2VSb3dPcmRlcihwYXJhbSAhPSAwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUG9seWdvbk9mZnNldChHTGZs
b2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cykKLXsKLSAgICBFVkVOVCgiKEdMZmxvYXQgZmFjdG9y
ID0gJWYsIEdMZmxvYXQgdW5pdHMgPSAlZikiLCBmYWN0b3IsIHVuaXRzKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0UG9seWdvbk9mZnNldFBhcmFtcyhmYWN0b3IsIHVuaXRzKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFJl
YWRuUGl4ZWxzRVhUKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xzaXplaSBidWZTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHZvaWQgKmRhdGEpCi17Ci0gICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAl
ZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCAiCi0gICAgICAgICAg
IkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6
ZSA9IDB4JWQsIEdMdm9pZCAqZGF0YSA9IDB4JTAuOHApIiwKLSAgICAgICAgICB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIGRhdGEpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgYnVmU2l6ZSA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghdmFsaWRSZWFkRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsICZidWZTaXplLCBkYXRhKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFJlYWRQaXhlbHMoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKQotewot
ICAgIEVWRU5UKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAl
ZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgotICAgICAgICAgICJHTGVudW0gZm9ybWF0ID0gMHgl
WCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKLSAgICAg
ICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsICBwaXhlbHMpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghdmFsaWRSZWFkRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IE5VTEwsIHBpeGVscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIodm9pZCkKLXsK
LSAgICBFVkVOVCgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OlNoYWRlcjo6
cmVsZWFzZUNvbXBpbGVyKCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9
IDB4JVgsIEdMc2l6ZWkgc2FtcGxlcyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVY
LCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKLSAgICAgICAgICB0
YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JFTkRFUkJVRkZFUjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAm
JiAhZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAmJiAhZ2w6OklzU3RlbmNp
bFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVzIDwgMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4
dC0+Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpIHx8IAotICAgICAgICAgICAgICAg
IGhlaWdodCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSB8fAot
ICAgICAgICAgICAgICAgIHNhbXBsZXMgPiBjb250ZXh0LT5nZXRNYXhTdXBwb3J0ZWRTYW1wbGVz
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTHVpbnQgaGFuZGxlID0g
Y29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxl
ID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJT
dG9yYWdlKG5ldyBnbDo6RGVwdGhidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAg
ICAgICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCNTY1Ogot
ICAgICAgICAgICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QkE4X09FUzoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9yYWdl
KG5ldyBnbDo6Q29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBs
ZXMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0lOREVYODoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9y
YWdlKG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShu
ZXcgZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVBTkdMRSh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2
YWx1ZSwgR0xib29sZWFuIGludmVydCkKLXsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0g
JWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoZ2w6OmNsYW1wMDEodmFsdWUpLCBpbnZlcnQg
PT0gR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTZXRGZW5jZU5WKEdMdWludCBmZW5jZSwgR0xlbnVtIGNv
bmRpdGlvbikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBmZW5jZSA9ICVkLCBHTGVudW0gY29uZGl0
aW9uID0gMHglWCkiLCBmZW5jZSwgY29uZGl0aW9uKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAg
ICAgaWYgKGNvbmRpdGlvbiAhPSBHTF9BTExfQ09NUExFVEVEX05WKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVu
Y2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7Ci0KLSAgICAgICAgICAgIGlmIChm
ZW5jZU9iamVjdCA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGZlbmNlT2JqZWN0LT5zZXRGZW5jZShjb25kaXRpb24pOyAgICAKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFNjaXNz
b3IoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVk
LCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGdsOjpDb250ZXh0KiBjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldFNjaXNzb3JQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJC
aW5hcnkoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51bSBiaW5hcnlmb3Jt
YXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKLXsKLSAgICBFVkVOVCgi
KEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMgPSAweCUwLjhwLCBHTGVudW0g
YmluYXJ5Zm9ybWF0ID0gMHglWCwgIgotICAgICAgICAgICJjb25zdCBHTHZvaWQqIGJpbmFyeSA9
IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwKLSAgICAgICAgICBuLCBzaGFkZXJzLCBi
aW5hcnlmb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Ly8gTm8gYmluYXJ5IHNoYWRlciBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFNoYWRlclNvdXJjZShHTHVpbnQgc2hhZGVyLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpCi17
Ci0gICAgRVZFTlQoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29u
c3QgR0xjaGFyKiogc3RyaW5nID0gMHglMC44cCwgY29uc3QgR0xpbnQqIGxlbmd0aCA9IDB4JTAu
OHApIiwKLSAgICAgICAgICBzaGFkZXIsIGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9i
amVjdCA9IGNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAgICAgICAgICBpZiAoIXNo
YWRlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0UHJvZ3JhbShzaGFkZXIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZXRTb3VyY2UoY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBH
TGludCByZWYsIEdMdWludCBtYXNrKQotewotICAgIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShHTF9G
Uk9OVF9BTkRfQkFDSywgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xT
dGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBH
THVpbnQgbWFzaykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSBmYWNlID0gMHglWCwgR0xlbnVtIGZ1
bmMgPSAweCVYLCBHTGludCByZWYgPSAlZCwgR0x1aW50IG1hc2sgPSAlZCkiLCBmYWNlLCBmdW5j
LCByZWYsIG1hc2spOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGZhY2UpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICAgIGNhc2UgR0xfQkFD
SzoKLSAgICAgICAgICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChmdW5jKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9ORVZFUjoKLSAgICAgICAgICBjYXNlIEdMX0FMV0FZUzoKLSAgICAg
ICAgICBjYXNlIEdMX0xFU1M6Ci0gICAgICAgICAgY2FzZSBHTF9MRVFVQUw6Ci0gICAgICAgICAg
Y2FzZSBHTF9FUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKLSAgICAgICAgICBjYXNl
IEdMX0dSRUFURVI6Ci0gICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8IGZhY2UgPT0gR0xfRlJPTlRf
QU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Rl
bmNpbFBhcmFtcyhmdW5jLCByZWYsIG1hc2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tQYXJhbXMo
ZnVuYywgcmVmLCBtYXNrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxNYXNrKEdM
dWludCBtYXNrKQotewotICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVF9BTkRfQkFD
SywgbWFzayk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVu
dW0gZmFjZSwgR0x1aW50IG1hc2spCi17Ci0gICAgRVZFTlQoIihHTGVudW0gZmFjZSA9IDB4JVgs
IEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgbWFzayk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoZmFjZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6Ci0g
ICAgICAgICAgY2FzZSBHTF9CQUNLOgotICAgICAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBm
YWNlID09IEdMX0ZST05UX0FORF9CQUNLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0ZW5jaWxXcml0ZW1hc2sobWFzayk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFD
SykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsQmFj
a1dyaXRlbWFzayhtYXNrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxPcChHTGVu
dW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCi17Ci0gICAgZ2xTdGVuY2lsT3BT
ZXBhcmF0ZShHTF9GUk9OVF9BTkRfQkFDSywgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xTdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWws
IEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKQotewotICAgIEVWRU5UKCIoR0xlbnVtIGZhY2Ug
PSAweCVYLCBHTGVudW0gZmFpbCA9IDB4JVgsIEdMZW51bSB6ZmFpbCA9IDB4JVgsIEdMZW51bSB6
cGFzID0gMHglWHMpIiwKLSAgICAgICAgICBmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGZhY2UpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX0ZST05UOgotICAgICAgICAgIGNhc2UgR0xfQkFDSzoKLSAgICAgICAgICBjYXNl
IEdMX0ZST05UX0FORF9CQUNLOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgc3dpdGNoIChmYWlsKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9a
RVJPOgotICAgICAgICAgIGNhc2UgR0xfS0VFUDoKLSAgICAgICAgICBjYXNlIEdMX1JFUExBQ0U6
Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSOgotICAgICAgICAgIGNhc2UgR0xfREVDUjoKLSAgICAg
ICAgICBjYXNlIEdMX0lOVkVSVDoKLSAgICAgICAgICBjYXNlIEdMX0lOQ1JfV1JBUDoKLSAgICAg
ICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN3aXRjaCAoemZhaWwpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9LRUVQOgotICAgICAgICAgIGNhc2UgR0xfUkVQ
TEFDRToKLSAgICAgICAgICBjYXNlIEdMX0lOQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSOgot
ICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgotICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQOgot
ICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh6cGFzcykKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNlIEdMX0tFRVA6Ci0gICAgICAgICAgY2FzZSBH
TF9SRVBMQUNFOgotICAgICAgICAgIGNhc2UgR0xfSU5DUjoKLSAgICAgICAgICBjYXNlIEdMX0RF
Q1I6Ci0gICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSX1dS
QVA6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoZmFjZSA9PSBHTF9GUk9OVCB8fCBmYWNlID09IEdMX0ZST05UX0FORF9CQUNL
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxPcGVy
YXRpb25zKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChmYWNlID09IEdMX0JBQ0sgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFDSykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsQmFja09wZXJhdGlv
bnMoZmFpbCwgemZhaWwsIHpwYXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGdsVGVz
dEZlbmNlTlYoR0x1aW50IGZlbmNlKQotewotICAgIEVWRU5UKCIoR0x1aW50IGZlbmNlID0gJWQp
IiwgZmVuY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0
RmVuY2UoZmVuY2UpOwotCi0gICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIEdMX1RSVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmVu
Y2VPYmplY3QtPnRlc3RGZW5jZSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gR0xfVFJVRTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
KiBwaXhlbHMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2
ZWwgPSAlZCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBH
THNpemVpIGhlaWdodCA9ICVkLCAiCi0gICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVu
dW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVs
cyA9ICAweCUwLjhwKSIsCi0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IEdMaW50KGZvcm1h
dCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB2YWxpZGF0ZSA8dHlwZT4gYnkgaXRzZWxm
ICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAg
ICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB2YWxpZGF0
ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKLSAgICAgICAgLy8gLSBpbnZhbGlkIDxm
b3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCi0gICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0
Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgotICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVz
c2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIg
IT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAg
ICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+
PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1h
eGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9aOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250
ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURp
bWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0
c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRz
RFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVY
VFVSRV8yRCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSBh
bmQgbXVsdGlwbGUgbGV2ZWxzLAotICAgICAgICAgICAgICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90
ZXh0dXJlIGRvZXMgbm90Ci0gICAgICAgICAgICAgICAgaWYgKHBpeGVscyAhPSBOVUxMIHx8IGxl
dmVsICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zs
b2F0MzJUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxv
YXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0
ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVy
ZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBp
eGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBj
b250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0
ZXJmKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKLXsKLSAgICBn
bFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKEdMaW50KXBhcmFtKTsKLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNv
bnN0IEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFt
ZSwgKEdMaW50KSpwYXJhbXMpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmko
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKLXsKLSAgICBFVkVOVCgi
KEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCBwYXJhbSA9
ICVkKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1
cmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKLSAgICAgICAgICAgICAgICBpZiAo
IXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1p
bkZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01B
R19GSUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdM
ZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToK
LSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyaXYoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW1zKQotewotICAgIGds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCAqcGFyYW1zKTsKLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAg
RVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBsZXZlbHMgPSAlZCwgR0xlbnVt
IGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdo
dCA9ICVkKSIsCi0gICAgICAgICAgIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
VEVYVFVSRV8yRCAmJiB0YXJnZXQgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxzIDwgMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQICYmIHdpZHRo
ICE9IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxldmVscyAhPSAxICYmIGxldmVs
cyAhPSBnbDo6bG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSkgKyAxKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9
Ci0KLSAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9y
bWF0KTsKLSAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3Jt
YXQpOwotCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTk9ORSB8fCB0eXBlID09IEdMX05PTkUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhp
bXVtVGV4dHVyZURpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IGNv
bnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4
dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGV2ZWxzICE9
IDEgJiYgIWNvbnRleHQtPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIo
aGVpZ2h0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1JHQkEzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQz
MlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQTE2
Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFy
Z2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAvLyBBTkdMRV9kZXB0aF90ZXh0dXJlIG9ubHkgc3VwcG9ydHMg
MS1sZXZlbCB0ZXh0dXJlcwotICAgICAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlIHx8IHRleHR1
cmUtPmlkKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPnN0b3Jh
Z2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlIHx8IHRleHR1cmUtPmlkKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHRleHR1cmUtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCog
cGl4ZWxzKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVs
ID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAg
ICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1h
dCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgIgotICAgICAgICAgICJjb25zdCBHTHZvaWQq
IHBpeGVscyA9IDB4JTAuOHApIiwKLSAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9m
ZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHhvZmZzZXQgPCB3aWR0
aCB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHlvZmZzZXQgPCBoZWln
aHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3Jt
YXQsIHR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGlzIHNl
dCBieSBoZWxwZXIgZnVuY3Rpb24KLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1U
ZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChm
b3JtYXQgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09
IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0Rl
cHRoVGV4dHVyZShmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
T0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVf
ZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh3aWR0
aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAg
ICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKGZhbHNlLCB3aWR0aCwgaGVp
Z2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsZXZlbCwgZm9ybWF0LCB0ZXh0dXJlKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhv
ZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdGV4dHVyZSkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFm
KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgpCi17Ci0gICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9u
LCAxLCAmeCk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4
JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9
IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xZnYobG9jYXRpb24sIGNv
dW50LCB2KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4KQotewotICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgMSwg
JngpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQotewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwg
bG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQt
PmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmKEdMaW50IGxvY2F0
aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKLXsKLSAgICBHTGZsb2F0IHh5WzJdID0ge3gsIHl9
OwotCi0gICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5KTsKLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlv
biwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0
LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2Nh
dGlvbiwgR0xpbnQgeCwgR0xpbnQgeSkKLXsKLSAgICBHTGludCB4eVs0XSA9IHt4LCB5fTsKLQot
ICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHkpOwotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50KiB2KQotewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBj
b3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
KCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dy
YW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdM
ZmxvYXQgeSwgR0xmbG9hdCB6KQotewotICAgIEdMZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9Owot
Ci0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5eik7Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdM
c2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24s
IGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW0tPmdldFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGlu
dCB4LCBHTGludCB5LCBHTGludCB6KQotewotICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsK
LQotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHl6KTsKLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCogdikKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3Vu
dCwgdik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJv
Z3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBw
cm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4
LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAgIEdMZmxvYXQgeHl6d1s0
XSA9IHt4LCB5LCB6LCB3fTsKLQotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwgKEdMZmxv
YXQqKSZ4eXp3KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIEVWRU5UKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0g
MHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwg
Y291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGko
R0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpCi17Ci0g
ICAgR0xpbnQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKLQotICAgIGdsVW5pZm9ybTRpdihsb2Nh
dGlvbiwgMSwgKEdMaW50KikmeHl6dyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCi17Ci0gICAg
RVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdM
aW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFy
eSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRpdihs
b2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBFVkVOVCgiKEdMaW50IGxv
Y2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVk
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwg
Y291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
Y291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW0tPmdldFBy
b2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQotewot
ICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJv
b2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAot
ICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gcHJvZ3JhbS0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVl
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpCi17Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCog
dmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFu
c3Bvc2UgIT0gR0xfRkFMU0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dy
YW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtLT5nZXRQcm9ncmFtQmluYXJ5KCk7Ci0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBjb3VudCwgdmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dy
YW0gPSAlZCkiLCBwcm9ncmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocHJvZ3JhbSAh
PSAwICYmICFwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsKLSAgICBFVkVOVCgi
KEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT52
YWxpZGF0ZSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZsb2F0
IHgpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwg
aW5kZXgsIHgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCAwLCAwLCAxIH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQot
ewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9
IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7
IHZhbHVlc1swXSwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmKEdMdWludCBpbmRleCwg
R0xmbG9hdCB4LCBHTGZsb2F0IHkpCi17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
R0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4LCB5KTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmdihH
THVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBFVkVOVCgiKEdMdWlu
dCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2
YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZhbHVlc1sx
XSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2
YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBH
TGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmKSIsIGluZGV4LCB4
LCB5LCB6KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgMSB9OwotICAg
ICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bFZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKLXsK
LSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAw
eCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2
YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0
LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGYo
R0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcp
Ci17Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxv
YXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHks
IHosIHcpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQotewot
ICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4
JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChp
bmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWIoaW5kZXgsIHZhbHVlcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwot
ICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoR0x1
aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKLXsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9
ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4LCBkaXZpc29yKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBl
LCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCogcHRy
KQotewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMaW50IHNpemUgPSAlZCwgR0xl
bnVtIHR5cGUgPSAweCVYLCAiCi0gICAgICAgICAgIkdMYm9vbGVhbiBub3JtYWxpemVkID0gJWQs
IEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCogcHRyID0gMHglMC44cCkiLAotICAg
ICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHB0cik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
QllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBH
TF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgIGNh
c2UgR0xfRklYRUQ6Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdHJpZGUgPCAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwg
c2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xfVFJVRSksIHN0cmlkZSwgcHRyKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbFZpZXdwb3J0KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQotewotICAgIEVWRU5UKCIoR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkg
d2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zZXRWaWV3cG9ydFBhcmFtcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQg
c3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgx
LCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xi
aXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQotewotICAgIEVWRU5UKCIoR0xpbnQgc3JjWDAg
PSAlZCwgR0xpbnQgc3JjWTAgPSAlZCwgR0xpbnQgc3JjWDEgPSAlZCwgR0xpbnQgc3JjWTEgPSAl
ZCwgIgotICAgICAgICAgICJHTGludCBkc3RYMCA9ICVkLCBHTGludCBkc3RZMCA9ICVkLCBHTGlu
dCBkc3RYMSA9ICVkLCBHTGludCBkc3RZMSA9ICVkLCAiCi0gICAgICAgICAgIkdMYml0ZmllbGQg
bWFzayA9IDB4JVgsIEdMZW51bSBmaWx0ZXIgPSAweCVYKSIsCi0gICAgICAgICAgc3JjWDAsIHNy
Y1kwLCBzcmNYMSwgc3JjWDEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0
ZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8
IEdMX1NURU5DSUxfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpKSAhPSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoc3JjWDEgLSBzcmNYMCAhPSBkc3RYMSAtIGRzdFgwIHx8IHNy
Y1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZMCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJTY2FsaW5nIGFuZCBmbGlwcGluZyBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9y
dGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVy
SGFuZGxlKCkgPT0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0cyB3aXRoIHRoZSBzYW1lIHNvdXJjZSBh
bmQgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBs
ZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5ibGl0RnJh
bWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEs
IGRzdFkxLCBtYXNrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhl
bHMpCi17Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAl
ZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgIgotICAgICAgICAgICJHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgR0xpbnQg
Ym9yZGVyID0gJWQsICIKLSAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0
eXBlID0gMHgleCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCi0gICAgICAgICAg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUJpbmFyeU9FUyhHTHVpbnQgcHJvZ3Jh
bSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCB2b2lkICpiaW5hcnkpCi17
Ci0gICAgRVZFTlQoIihHTGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJ1ZlNpemUgPSAlcywgbGVuZ3Ro
ID0gMHglMC44cCwgYmluYXJ5Rm9ybWF0ID0gMHglMC44cCwgYmluYXJ5ID0gMHglMC44cCkiLAot
ICAgICAgICAgIHByb2dyYW0sIGJ1ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dy
YW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKLQotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICpiaW5hcnlGb3JtYXQgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKLQotICAgICAg
ICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqbGVuZ3Ro
ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1CaW5hcnlPRVMoR0x1aW50IHBy
b2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpCi17Ci0gICAgRVZFTlQoIihH
TGVudW0gcHJvZ3JhbSA9IDB4JVgsIGJpbmFyeUZvcm1hdCA9IDB4JXgsIGJpbmFyeSA9IDB4JTAu
OHAsIGxlbmd0aCA9ICVkKSIsCi0gICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5h
cnksIGxlbmd0aCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiaW5hcnlGb3JtYXQgIT0gR0xfUFJPR1JBTV9CSU5B
UllfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFByb2dyYW1CaW5hcnkoTlVMTCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotX19lZ2xNdXN0Q2FzdFRv
UHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVzcyhjb25z
dCBjaGFyICpwcm9jbmFtZSkKLXsKLSAgICBzdHJ1Y3QgRXh0ZW5zaW9uCi0gICAgewotICAgICAg
ICBjb25zdCBjaGFyICpuYW1lOwotICAgICAgICBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlv
blBvaW50ZXJUeXBlIGFkZHJlc3M7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBFeHRlbnNp
b24gZ2xFeHRlbnNpb25zW10gPQotICAgIHsKLSAgICAgICAgeyJnbFRleEltYWdlM0RPRVMiLCAo
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFRleEltYWdlM0RPRVN9
LAotICAgICAgICB7ImdsQmxpdEZyYW1lYnVmZmVyQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFfSwKLSAgICAgICAg
eyJnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFIiwgKF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVBTkdMRX0sCi0gICAgICAgIHsiZ2xEZWxldGVGZW5jZXNOViIsIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRGVsZXRlRmVuY2VzTlZ9LAotICAgICAgICB7Imds
R2VuRmVuY2VzTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSln
bEdlbkZlbmNlc05WfSwKLSAgICAgICAgeyJnbElzRmVuY2VOViIsIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsSXNGZW5jZU5WfSwKLSAgICAgICAgeyJnbFRlc3RG
ZW5jZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXN0
RmVuY2VOVn0sCi0gICAgICAgIHsiZ2xHZXRGZW5jZWl2TlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldEZlbmNlaXZOVn0sCi0gICAgICAgIHsiZ2xGaW5p
c2hGZW5jZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xG
aW5pc2hGZW5jZU5WfSwKLSAgICAgICAgeyJnbFNldEZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRv
UHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFNldEZlbmNlTlZ9LAotICAgICAgICB7ImdsR2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEV9LAotICAgICAg
ICB7ImdsVGV4U3RvcmFnZTJERVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xUZXhTdG9yYWdlMkRFWFR9LAotICAgICAgICB7ImdsR2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0VYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWds
R2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVH0sCi0gICAgICAgIHsiZ2xSZWFkblBpeGVsc0VYVCIs
IChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUmVhZG5QaXhlbHNF
WFR9LAotICAgICAgICB7ImdsR2V0blVuaWZvcm1mdkVYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9w
ZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0blVuaWZvcm1mdkVYVH0sCi0gICAgICAgIHsiZ2xH
ZXRuVW5pZm9ybWl2RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5
cGUpZ2xHZXRuVW5pZm9ybWl2RVhUfSwKLSAgICAgICAgeyJnbEdlblF1ZXJpZXNFWFQiLCAoX19l
Z2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdlblF1ZXJpZXNFWFR9LAot
ICAgICAgICB7ImdsRGVsZXRlUXVlcmllc0VYVCIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5j
dGlvblBvaW50ZXJUeXBlKWdsRGVsZXRlUXVlcmllc0VYVH0sCi0gICAgICAgIHsiZ2xJc1F1ZXJ5
RVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xJc1F1ZXJ5
RVhUfSwKLSAgICAgICAgeyJnbEJlZ2luUXVlcnlFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSlnbEJlZ2luUXVlcnlFWFR9LAotICAgICAgICB7ImdsRW5kUXVl
cnlFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEVuZFF1
ZXJ5RVhUfSwKLSAgICAgICAgeyJnbEdldFF1ZXJ5aXZFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldFF1ZXJ5aXZFWFR9LAotICAgICAgICB7ImdsR2V0
UXVlcnlPYmplY3R1aXZFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSlnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUfSwKLSAgICAgICAgeyJnbFZlcnRleEF0dHJpYkRp
dmlzb3JBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWds
VmVydGV4QXR0cmliRGl2aXNvckFOR0xFfSwKLSAgICAgICAgeyJnbERyYXdBcnJheXNJbnN0YW5j
ZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJh
d0FycmF5c0luc3RhbmNlZEFOR0xFfSwKLSAgICAgICAgeyJnbERyYXdFbGVtZW50c0luc3RhbmNl
ZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCi0gICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VT
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFt
QmluYXJ5T0VTfSwKLSAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9Owot
Ci0gICAgZm9yIChpbnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXpl
b2YoRXh0ZW5zaW9uKTsgZXh0KyspCi0gICAgewotICAgICAgICBpZiAoc3RyY21wKHByb2NuYW1l
LCBnbEV4dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xFeHRlbnNp
b25zW2V4dF0uYWRkcmVzczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwot
fQotCi0vLyBOb24tcHVibGljIGZ1bmN0aW9ucyB1c2VkIGJ5IEVHTAotCi1ib29sIF9fc3RkY2Fs
bCBnbEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0gICAgRVZFTlQoIihl
Z2w6OlN1cmZhY2UqIHN1cmZhY2UgPSAweCUwLjhwKSIsCi0gICAgICAgICAgc3VyZmFjZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmVPYmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKLQotICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRhYmxlKCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlYTc3NjliLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBA
Ci1MSUJSQVJZIGxpYkdMRVN2MgotRVhQT1JUUwotICAgIGdsQWN0aXZlVGV4dHVyZSAgICAgICAg
ICAgICAgICAgQDEKLSAgICBnbEF0dGFjaFNoYWRlciAgICAgICAgICAgICAgICAgIEAyCi0gICAg
Z2xCaW5kQXR0cmliTG9jYXRpb24gICAgICAgICAgICBAMwotICAgIGdsQmluZEJ1ZmZlciAgICAg
ICAgICAgICAgICAgICAgQDQKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAgIEA1
Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyICAgICAgICAgICAgICBANgotICAgIGdsQmluZFRleHR1
cmUgICAgICAgICAgICAgICAgICAgQDcKLSAgICBnbEJsZW5kQ29sb3IgICAgICAgICAgICAgICAg
ICAgIEA4Ci0gICAgZ2xCbGVuZEVxdWF0aW9uICAgICAgICAgICAgICAgICBAOQotICAgIGdsQmxl
bmRFcXVhdGlvblNlcGFyYXRlICAgICAgICAgQDEwCi0gICAgZ2xCbGVuZEZ1bmMgICAgICAgICAg
ICAgICAgICAgICBAMTEKLSAgICBnbEJsZW5kRnVuY1NlcGFyYXRlICAgICAgICAgICAgIEAxMgot
ICAgIGdsQnVmZmVyRGF0YSAgICAgICAgICAgICAgICAgICAgQDEzCi0gICAgZ2xCdWZmZXJTdWJE
YXRhICAgICAgICAgICAgICAgICBAMTQKLSAgICBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgICAg
ICAgIEAxNQotICAgIGdsQ2xlYXIgICAgICAgICAgICAgICAgICAgICAgICAgQDE2Ci0gICAgZ2xD
bGVhckNvbG9yICAgICAgICAgICAgICAgICAgICBAMTcKLSAgICBnbENsZWFyRGVwdGhmICAgICAg
ICAgICAgICAgICAgIEAxOAotICAgIGdsQ2xlYXJTdGVuY2lsICAgICAgICAgICAgICAgICAgQDE5
Ci0gICAgZ2xDb2xvck1hc2sgICAgICAgICAgICAgICAgICAgICBAMjAKLSAgICBnbENvbXBpbGVT
aGFkZXIgICAgICAgICAgICAgICAgIEAyMQotICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQgICAg
ICAgICAgQDIyCi0gICAgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCAgICAgICBAMjMKLSAgICBn
bENvcHlUZXhJbWFnZTJEICAgICAgICAgICAgICAgIEAyNAotICAgIGdsQ29weVRleFN1YkltYWdl
MkQgICAgICAgICAgICAgQDI1Ci0gICAgZ2xDcmVhdGVQcm9ncmFtICAgICAgICAgICAgICAgICBA
MjYKLSAgICBnbENyZWF0ZVNoYWRlciAgICAgICAgICAgICAgICAgIEAyNwotICAgIGdsQ3VsbEZh
Y2UgICAgICAgICAgICAgICAgICAgICAgQDI4Ci0gICAgZ2xEZWxldGVCdWZmZXJzICAgICAgICAg
ICAgICAgICBAMjkKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycyAgICAgICAgICAgIEAzMAotICAg
IGdsRGVsZXRlUHJvZ3JhbSAgICAgICAgICAgICAgICAgQDMyCi0gICAgZ2xEZWxldGVSZW5kZXJi
dWZmZXJzICAgICAgICAgICBAMzMKLSAgICBnbERlbGV0ZVNoYWRlciAgICAgICAgICAgICAgICAg
IEAzNAotICAgIGdsRGVsZXRlVGV4dHVyZXMgICAgICAgICAgICAgICAgQDMxCi0gICAgZ2xEZXB0
aEZ1bmMgICAgICAgICAgICAgICAgICAgICBAMzYKLSAgICBnbERlcHRoTWFzayAgICAgICAgICAg
ICAgICAgICAgIEAzNwotICAgIGdsRGVwdGhSYW5nZWYgICAgICAgICAgICAgICAgICAgQDM4Ci0g
ICAgZ2xEZXRhY2hTaGFkZXIgICAgICAgICAgICAgICAgICBAMzUKLSAgICBnbERpc2FibGUgICAg
ICAgICAgICAgICAgICAgICAgIEAzOQotICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICAg
ICAgQDQwCi0gICAgZ2xEcmF3QXJyYXlzICAgICAgICAgICAgICAgICAgICBANDEKLSAgICBnbERy
YXdFbGVtZW50cyAgICAgICAgICAgICAgICAgIEA0MgotICAgIGdsRW5hYmxlICAgICAgICAgICAg
ICAgICAgICAgICAgQDQzCi0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgICBANDQK
LSAgICBnbEZpbmlzaCAgICAgICAgICAgICAgICAgICAgICAgIEA0NQotICAgIGdsRmx1c2ggICAg
ICAgICAgICAgICAgICAgICAgICAgQDQ2Ci0gICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciAg
ICAgICBANDcKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEICAgICAgICAgIEA0OAotICAgIGds
RnJvbnRGYWNlICAgICAgICAgICAgICAgICAgICAgQDQ5Ci0gICAgZ2xHZW5CdWZmZXJzICAgICAg
ICAgICAgICAgICAgICBANTAKLSAgICBnbEdlbkZyYW1lYnVmZmVycyAgICAgICAgICAgICAgIEA1
MgotICAgIGdsR2VuUmVuZGVyYnVmZmVycyAgICAgICAgICAgICAgQDUzCi0gICAgZ2xHZW5UZXh0
dXJlcyAgICAgICAgICAgICAgICAgICBANTQKLSAgICBnbEdlbmVyYXRlTWlwbWFwICAgICAgICAg
ICAgICAgIEA1MQotICAgIGdsR2V0QWN0aXZlQXR0cmliICAgICAgICAgICAgICAgQDU1Ci0gICAg
Z2xHZXRBY3RpdmVVbmlmb3JtICAgICAgICAgICAgICBANTYKLSAgICBnbEdldEF0dGFjaGVkU2hh
ZGVycyAgICAgICAgICAgIEA1NwotICAgIGdsR2V0QXR0cmliTG9jYXRpb24gICAgICAgICAgICAg
QDU4Ci0gICAgZ2xHZXRCb29sZWFudiAgICAgICAgICAgICAgICAgICBANTkKLSAgICBnbEdldEJ1
ZmZlclBhcmFtZXRlcml2ICAgICAgICAgIEA2MAotICAgIGdsR2V0RXJyb3IgICAgICAgICAgICAg
ICAgICAgICAgQDYxCi0gICAgZ2xHZXRGbG9hdHYgICAgICAgICAgICAgICAgICAgICBANjIKLSAg
ICBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2ICAgQDYzCi0gICAgZ2xHZXRJ
bnRlZ2VydiAgICAgICAgICAgICAgICAgICBANjQKLSAgICBnbEdldFByb2dyYW1JbmZvTG9nICAg
ICAgICAgICAgIEA2NgotICAgIGdsR2V0UHJvZ3JhbWl2ICAgICAgICAgICAgICAgICAgQDY1Ci0g
ICAgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiAgICBANjcKLSAgICBnbEdldFNoYWRlcklu
Zm9Mb2cgICAgICAgICAgICAgIEA2OQotICAgIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0ICAg
ICAgQDcwCi0gICAgZ2xHZXRTaGFkZXJTb3VyY2UgICAgICAgICAgICAgICBANzEKLSAgICBnbEdl
dFNoYWRlcml2ICAgICAgICAgICAgICAgICAgIEA2OAotICAgIGdsR2V0U3RyaW5nICAgICAgICAg
ICAgICAgICAgICAgQDcyCi0gICAgZ2xHZXRUZXhQYXJhbWV0ZXJmdiAgICAgICAgICAgICBANzMK
LSAgICBnbEdldFRleFBhcmFtZXRlcml2ICAgICAgICAgICAgIEA3NAotICAgIGdsR2V0VW5pZm9y
bUxvY2F0aW9uICAgICAgICAgICAgQDc3Ci0gICAgZ2xHZXRVbmlmb3JtZnYgICAgICAgICAgICAg
ICAgICBANzUKLSAgICBnbEdldFVuaWZvcm1pdiAgICAgICAgICAgICAgICAgIEA3NgotICAgIGds
R2V0VmVydGV4QXR0cmliUG9pbnRlcnYgICAgICAgQDgwCi0gICAgZ2xHZXRWZXJ0ZXhBdHRyaWJm
diAgICAgICAgICAgICBANzgKLSAgICBnbEdldFZlcnRleEF0dHJpYml2ICAgICAgICAgICAgIEA3
OQotICAgIGdsSGludCAgICAgICAgICAgICAgICAgICAgICAgICAgQDgxCi0gICAgZ2xJc0J1ZmZl
ciAgICAgICAgICAgICAgICAgICAgICBAODIKLSAgICBnbElzRW5hYmxlZCAgICAgICAgICAgICAg
ICAgICAgIEA4MwotICAgIGdsSXNGcmFtZWJ1ZmZlciAgICAgICAgICAgICAgICAgQDg0Ci0gICAg
Z2xJc1Byb2dyYW0gICAgICAgICAgICAgICAgICAgICBAODUKLSAgICBnbElzUmVuZGVyYnVmZmVy
ICAgICAgICAgICAgICAgIEA4NgotICAgIGdsSXNTaGFkZXIgICAgICAgICAgICAgICAgICAgICAg
QDg3Ci0gICAgZ2xJc1RleHR1cmUgICAgICAgICAgICAgICAgICAgICBAODgKLSAgICBnbExpbmVX
aWR0aCAgICAgICAgICAgICAgICAgICAgIEA4OQotICAgIGdsTGlua1Byb2dyYW0gICAgICAgICAg
ICAgICAgICAgQDkwCi0gICAgZ2xQaXhlbFN0b3JlaSAgICAgICAgICAgICAgICAgICBAOTEKLSAg
ICBnbFBvbHlnb25PZmZzZXQgICAgICAgICAgICAgICAgIEA5MgotICAgIGdsUmVhZFBpeGVscyAg
ICAgICAgICAgICAgICAgICAgQDkzCi0gICAgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgICAgICAg
ICBAOTQKLSAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgICAgICAgICAgIEA5NQotICAgIGdsU2Ft
cGxlQ292ZXJhZ2UgICAgICAgICAgICAgICAgQDk2Ci0gICAgZ2xTY2lzc29yICAgICAgICAgICAg
ICAgICAgICAgICBAOTcKLSAgICBnbFNoYWRlckJpbmFyeSAgICAgICAgICAgICAgICAgIEA5OAot
ICAgIGdsU2hhZGVyU291cmNlICAgICAgICAgICAgICAgICAgQDk5Ci0gICAgZ2xTdGVuY2lsRnVu
YyAgICAgICAgICAgICAgICAgICBAMTAwCi0gICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlICAgICAg
ICAgICBAMTAxCi0gICAgZ2xTdGVuY2lsTWFzayAgICAgICAgICAgICAgICAgICBAMTAyCi0gICAg
Z2xTdGVuY2lsTWFza1NlcGFyYXRlICAgICAgICAgICBAMTAzCi0gICAgZ2xTdGVuY2lsT3AgICAg
ICAgICAgICAgICAgICAgICBAMTA0Ci0gICAgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAgICAgICAgICAg
ICBAMTA1Ci0gICAgZ2xUZXhJbWFnZTJEICAgICAgICAgICAgICAgICAgICBAMTA2Ci0gICAgZ2xU
ZXhQYXJhbWV0ZXJmICAgICAgICAgICAgICAgICBAMTA3Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmdiAg
ICAgICAgICAgICAgICBAMTA4Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpICAgICAgICAgICAgICAgICBA
MTA5Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpdiAgICAgICAgICAgICAgICBAMTEwCi0gICAgZ2xUZXhT
dWJJbWFnZTJEICAgICAgICAgICAgICAgICBAMTExCi0gICAgZ2xVbmlmb3JtMWYgICAgICAgICAg
ICAgICAgICAgICBAMTEyCi0gICAgZ2xVbmlmb3JtMWZ2ICAgICAgICAgICAgICAgICAgICBAMTEz
Ci0gICAgZ2xVbmlmb3JtMWkgICAgICAgICAgICAgICAgICAgICBAMTE0Ci0gICAgZ2xVbmlmb3Jt
MWl2ICAgICAgICAgICAgICAgICAgICBAMTE1Ci0gICAgZ2xVbmlmb3JtMmYgICAgICAgICAgICAg
ICAgICAgICBAMTE2Ci0gICAgZ2xVbmlmb3JtMmZ2ICAgICAgICAgICAgICAgICAgICBAMTE3Ci0g
ICAgZ2xVbmlmb3JtMmkgICAgICAgICAgICAgICAgICAgICBAMTE4Ci0gICAgZ2xVbmlmb3JtMml2
ICAgICAgICAgICAgICAgICAgICBAMTE5Ci0gICAgZ2xVbmlmb3JtM2YgICAgICAgICAgICAgICAg
ICAgICBAMTIwCi0gICAgZ2xVbmlmb3JtM2Z2ICAgICAgICAgICAgICAgICAgICBAMTIxCi0gICAg
Z2xVbmlmb3JtM2kgICAgICAgICAgICAgICAgICAgICBAMTIyCi0gICAgZ2xVbmlmb3JtM2l2ICAg
ICAgICAgICAgICAgICAgICBAMTIzCi0gICAgZ2xVbmlmb3JtNGYgICAgICAgICAgICAgICAgICAg
ICBAMTI0Ci0gICAgZ2xVbmlmb3JtNGZ2ICAgICAgICAgICAgICAgICAgICBAMTI1Ci0gICAgZ2xV
bmlmb3JtNGkgICAgICAgICAgICAgICAgICAgICBAMTI2Ci0gICAgZ2xVbmlmb3JtNGl2ICAgICAg
ICAgICAgICAgICAgICBAMTI3Ci0gICAgZ2xVbmlmb3JtTWF0cml4MmZ2ICAgICAgICAgICAgICBA
MTI4Ci0gICAgZ2xVbmlmb3JtTWF0cml4M2Z2ICAgICAgICAgICAgICBAMTI5Ci0gICAgZ2xVbmlm
b3JtTWF0cml4NGZ2ICAgICAgICAgICAgICBAMTMwCi0gICAgZ2xVc2VQcm9ncmFtICAgICAgICAg
ICAgICAgICAgICBAMTMxCi0gICAgZ2xWYWxpZGF0ZVByb2dyYW0gICAgICAgICAgICAgICBAMTMy
Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIxZiAgICAgICAgICAgICAgICBAMTMzCi0gICAgZ2xWZXJ0ZXhB
dHRyaWIxZnYgICAgICAgICAgICAgICBAMTM0Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIyZiAgICAgICAg
ICAgICAgICBAMTM1Ci0gICAgZ2xWZXJ0ZXhBdHRyaWIyZnYgICAgICAgICAgICAgICBAMTM2Ci0g
ICAgZ2xWZXJ0ZXhBdHRyaWIzZiAgICAgICAgICAgICAgICBAMTM3Ci0gICAgZ2xWZXJ0ZXhBdHRy
aWIzZnYgICAgICAgICAgICAgICBAMTM4Ci0gICAgZ2xWZXJ0ZXhBdHRyaWI0ZiAgICAgICAgICAg
ICAgICBAMTM5Ci0gICAgZ2xWZXJ0ZXhBdHRyaWI0ZnYgICAgICAgICAgICAgICBAMTQwCi0gICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyICAgICAgICAgICBAMTQxCi0gICAgZ2xWaWV3cG9ydCAgICAg
ICAgICAgICAgICAgICAgICBAMTQyCi0KLSAgICA7IEV4dGVuc2lvbnMKLSAgICBnbFRleEltYWdl
M0RPRVMgICAgICAgICAgICAgICAgIEAxNDMKLSAgICBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFICAg
ICAgICAgIEAxNDkKLSAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFIEAx
NTAKLSAgICBnbERlbGV0ZUZlbmNlc05WICAgICAgICAgICAgICAgIEAxNTEKLSAgICBnbEZpbmlz
aEZlbmNlTlYgICAgICAgICAgICAgICAgIEAxNTIKLSAgICBnbEdlbkZlbmNlc05WICAgICAgICAg
ICAgICAgICAgIEAxNTMKLSAgICBnbEdldEZlbmNlaXZOViAgICAgICAgICAgICAgICAgIEAxNTQK
LSAgICBnbElzRmVuY2VOViAgICAgICAgICAgICAgICAgICAgIEAxNTUKLSAgICBnbFNldEZlbmNl
TlYgICAgICAgICAgICAgICAgICAgIEAxNTYKLSAgICBnbFRlc3RGZW5jZU5WICAgICAgICAgICAg
ICAgICAgIEAxNTcKLSAgICBnbEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSBAMTU5Ci0g
ICAgZ2xUZXhTdG9yYWdlMkRFWFQgICAgICAgICAgICAgICBAMTYwCi0gICAgZ2xHZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzRVhUICAgICBAMTYxCi0gICAgZ2xSZWFkblBpeGVsc0VYVCAgICAgICAgICAg
ICAgICBAMTYyCi0gICAgZ2xHZXRuVW5pZm9ybWZ2RVhUICAgICAgICAgICAgICBAMTYzCi0gICAg
Z2xHZXRuVW5pZm9ybWl2RVhUICAgICAgICAgICAgICBAMTY0Ci0gICAgZ2xHZW5RdWVyaWVzRVhU
ICAgICAgICAgICAgICAgICBAMTY1Ci0gICAgZ2xEZWxldGVRdWVyaWVzRVhUICAgICAgICAgICAg
ICBAMTY2Ci0gICAgZ2xJc1F1ZXJ5RVhUICAgICAgICAgICAgICAgICAgICBAMTY3Ci0gICAgZ2xC
ZWdpblF1ZXJ5RVhUICAgICAgICAgICAgICAgICBAMTY4Ci0gICAgZ2xFbmRRdWVyeUVYVCAgICAg
ICAgICAgICAgICAgICBAMTY5Ci0gICAgZ2xHZXRRdWVyeWl2RVhUICAgICAgICAgICAgICAgICBA
MTcwCi0gICAgZ2xHZXRRdWVyeU9iamVjdHVpdkVYVCAgICAgICAgICBAMTcxCi0gICAgZ2xWZXJ0
ZXhBdHRyaWJEaXZpc29yQU5HTEUgICAgICBAMTcyCi0gICAgZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
QU5HTEUgICAgICBAMTczCi0gICAgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSAgICBAMTc0
Ci0KLSAgICA7IEVHTCBkZXBlbmRlbmNpZXMKLSAgICBnbENyZWF0ZUNvbnRleHQgICAgICAgICAg
ICAgICAgIEAxNDQgTk9OQU1FCi0gICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAgICBA
MTQ1IE5PTkFNRQotICAgIGdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICAgQDE0NiBOT05B
TUUKLSAgICBnbEdldEN1cnJlbnRDb250ZXh0ICAgICAgICAgICAgIEAxNDcgTk9OQU1FCi0gICAg
Z2xHZXRQcm9jQWRkcmVzcyAgICAgICAgICAgICAgICBAMTQ4IE5PTkFNRQotICAgIGdsQmluZFRl
eEltYWdlICAgICAgICAgICAgICAgICAgQDE1OCBOT05BTUUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBhZDIxZTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAs
MCBAQAotLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJhdGVkIHJlc291cmNlIHNjcmlwdC4K
LS8vCi0jaW5jbHVkZSAicmVzb3VyY2UuaCIKLQotI2RlZmluZSBBUFNUVURJT19SRUFET05MWV9T
WU1CT0xTCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIEdlbmVyYXRlZCBmcm9tIHRoZSBU
RVhUSU5DTFVERSAyIHJlc291cmNlLgotLy8KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVk
ZSAiLi4vY29tbW9uL3ZlcnNpb24uaCIKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSN1bmRlZiBB
UFNUVURJT19SRUFET05MWV9TWU1CT0xTCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBFbmds
aXNoIChVLlMuKSByZXNvdXJjZXMKLQotI2lmICFkZWZpbmVkKEFGWF9SRVNPVVJDRV9ETEwpIHx8
IGRlZmluZWQoQUZYX1RBUkdfRU5VKQotI2lmZGVmIF9XSU4zMgotTEFOR1VBR0UgTEFOR19FTkdM
SVNILCBTVUJMQU5HX0VOR0xJU0hfVVMKLSNwcmFnbWEgY29kZV9wYWdlKDEyNTIpCi0jZW5kaWYg
Ly9fV0lOMzIKLQotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLwotLy8gVEVYVElOQ0xVREUKLS8vCi0KLTEgVEVYVElOQ0xVREUgCi1CRUdJTgotICAgICJy
ZXNvdXJjZS5oXDAiCi1FTkQKLQotMiBURVhUSU5DTFVERSAKLUJFR0lOCi0gICAgIiNpbmNsdWRl
ICIiYWZ4cmVzLmgiIlxyXG4iCi0gICAgIiNpbmNsdWRlICIiLi4vY29tbW9uL3ZlcnNpb24uaCIi
XDAiCi1FTkQKLQotMyBURVhUSU5DTFVERSAKLUJFR0lOCi0gICAgIlxyXG4iCi0gICAgIlwwIgot
RU5ECi0KLSNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VECi0KLQotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vCi0vLyBWZXJzaW9uCi0vLwotCi1WU19WRVJTSU9OX0lORk8gVkVSU0lPTklORk8K
LSBGSUxFVkVSU0lPTiBNQUpPUl9WRVJTSU9OLE1JTk9SX1ZFUlNJT04sQlVJTERfVkVSU0lPTixC
VUlMRF9SRVZJU0lPTgotIFBST0RVQ1RWRVJTSU9OIE1BSk9SX1ZFUlNJT04sTUlOT1JfVkVSU0lP
TixCVUlMRF9WRVJTSU9OLEJVSUxEX1JFVklTSU9OCi0gRklMRUZMQUdTTUFTSyAweDE3TAotI2lm
ZGVmIF9ERUJVRwotIEZJTEVGTEFHUyAweDFMCi0jZWxzZQotIEZJTEVGTEFHUyAweDBMCi0jZW5k
aWYKLSBGSUxFT1MgMHg0TAotIEZJTEVUWVBFIDB4MkwKLSBGSUxFU1VCVFlQRSAweDBMCi1CRUdJ
TgotICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKLSAgICBCRUdJTgotICAgICAgICBCTE9DSyAi
MDQwOTA0YjAiCi0gICAgICAgIEJFR0lOCi0gICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0
aW9uIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSIKLSAgICAgICAgICAg
IFZBTFVFICJGaWxlVmVyc2lvbiIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgICAgICBWQUxVRSAi
SW50ZXJuYWxOYW1lIiwgImxpYkdMRVN2MiIKLSAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHly
aWdodCIsICJDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4iCi0gICAgICAgICAgICBWQUxV
RSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJHTEVTdjIuZGxsIgotICAgICAgICAgICAgVkFMVUUg
IlByaXZhdGVCdWlsZCIsIFZFUlNJT05fU1RSSU5HCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVj
dE5hbWUiLCAiQU5HTEUgbGliR0xFU3YyIER5bmFtaWMgTGluayBMaWJyYXJ5IgotICAgICAgICAg
ICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgVkVSU0lPTl9TVFJJTkcKLSAgICAgICAgRU5ECi0g
ICAgRU5ECi0gICAgQkxPQ0sgIlZhckZpbGVJbmZvIgotICAgIEJFR0lOCi0gICAgICAgIFZBTFVF
ICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwCi0gICAgRU5ECi1FTkQKLQotI2VuZGlmICAgIC8v
IEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCi0KLSNp
Zm5kZWYgQVBTVFVESU9fSU5WT0tFRAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBHZW5l
cmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMyByZXNvdXJjZS4KLS8vCi0KLQotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLSNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9q
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9q
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTdkNGU5Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagorKysg
L2Rldi9udWxsCkBAIC0xLDU2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJXaW5kb3dzLTEyNTIiPz4KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0Ci0JUHJvamVjdFR5cGU9IlZp
c3VhbCBDKysiCi0JVmVyc2lvbj0iOS4wMCIKLQlOYW1lPSJsaWJHTEVTdjIiCi0JUHJvamVjdEdV
SUQ9IntCNTg3MUE3QS05NjhDLTQyRTMtQTMzQi05ODFFNkY0NDhFNzh9IgotCVJvb3ROYW1lc3Bh
Y2U9ImxpYkdMRVN2MiIKLQlLZXl3b3JkPSJXaW4zMlByb2oiCi0JVGFyZ2V0RnJhbWV3b3JrVmVy
c2lvbj0iMTMxMDcyIgotCT4KLQk8UGxhdGZvcm1zPgotCQk8UGxhdGZvcm0KLQkJCU5hbWU9Ildp
bjMyIgotCQkvPgotCQk8UGxhdGZvcm0KLQkJCU5hbWU9Ing2NCIKLQkJLz4KLQk8L1BsYXRmb3Jt
cz4KLQk8VG9vbEZpbGVzPgotCTwvVG9vbEZpbGVzPgotCTxDb25maWd1cmF0aW9ucz4KLQkJPENv
bmZpZ3VyYXRpb24KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIk
KFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0
b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJ
Q2hhcmFjdGVyU2V0PSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZl
bnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIwIgotCQkJCUFkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikv
Li4vLi4vaW5jbHVkZSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVH
O19XSU5ET1dTO19VU1JETEw7TElCR0xFU1YyX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVD
QVRFO05PTUlOTUFYIgotCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgotCQkJCUJhc2ljUnVudGlt
ZUNoZWNrcz0iMyIKLQkJCQlSdW50aW1lTGlicmFyeT0iMSIKLQkJCQlVc2VQcmVjb21waWxlZEhl
YWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMiIKLQkJCQlEZXRlY3Q2
NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9ImZhbHNlIgotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ9IjQiCi0JCQkJV2FybkFzRXJyb3I9InRydWUiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q1ByZUxpbmtFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0xpbmtlclRv
b2wiCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9TQUZFU0VIIgotCQkJCUFkZGl0aW9uYWxEZXBl
bmRlbmNpZXM9ImQzZDkubGliIEQzZHg5LmxpYiBkM2Rjb21waWxlci5saWIiCi0JCQkJTGlua0lu
Y3JlbWVudGFsPSIyIgotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIgot
CQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0J
CQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9u
PSIwIgotCQkJCVRhcmdldE1hY2hpbmU9IjEiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0FMaW5rVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJW
Q0Z4Q29wVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJ
Q29tbWFuZExpbmU9IkBlY2hvIG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGly
KS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZx
dW90OyQoT3V0RGlyKVxsaWJHTEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwu
LlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDsk
KE91dERpcilcbGliR0xFU3YyLmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGli
XCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYj
eDBBOyIKLQkJCS8+Ci0JCTwvQ29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5h
bWU9IlJlbGVhc2V8V2luMzIiCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChD
b25maWd1cmF0aW9uTmFtZSkiCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJh
dGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEi
Ci0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1
c3RvbUJ1aWxkVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVy
YXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdl
bmVyYXRvclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRp
b249IjIiCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjIiCi0JCQkJQWRkaXRpb25hbElu
Y2x1ZGVEaXJlY3Rvcmllcz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9p
bmNsdWRlIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRP
V1M7X1VTUkRMTDtMSUJHTEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9N
SU5NQVg7X1NFQ1VSRV9TQ0w9MCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMCIKLQkJCQlVc2VQcmVj
b21waWxlZEhlYWRlcj0iMCIKLQkJCQlXYXJuaW5nTGV2ZWw9IjQiCi0JCQkJRGlzYWJsZVNwZWNp
ZmljV2FybmluZ3M9IjQxMDA7NDEyNzs0MTg5OzQyMzk7NDI0NDs0MjQ1OzQ1MTI7NDcwMjs0NzE4
IgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJ
bmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCQlXYXJuQXNFcnJvcj0idHJ1ZSIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1NBRkVTRUgiCi0JCQkJ
QWRkaXRpb25hbERlcGVuZGVuY2llcz0iZDNkOS5saWIgRDNkeDkubGliIGQzZGNvbXBpbGVyLmxp
YiIKLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmll
cz0iZmFsc2UiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJ
R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlP
cHRpbWl6ZVJlZmVyZW5jZXM9IjIiCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKLQkJCQlS
YW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAi
Ci0JCQkJVGFyZ2V0TWFjaGluZT0iMSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxp
bmtUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhD
b3BUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0J
CQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21t
YW5kTGluZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5c
Li5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7
JChPdXREaXIpXGxpYkdMRVN2Mi5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0
RGlyKVxsaWJHTEVTdjIubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChD
b25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7
IgotCQkJLz4KLQkJPC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0i
RGVidWd8eDY0IgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1O
YW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQ
bGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29uZmlndXJhdGlvblR5cGU9
IjIiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJl
QnVpbGRFdmVudFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxk
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJCVRhcmdldEVu
dmlyb25tZW50PSIzIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJCQlPcHRpbWl6YXRpb249IjAiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll
cz0iJChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVBy
ZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJH
TEVTVjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVgiCi0JCQkJTWlu
aW1hbFJlYnVpbGQ9InRydWUiCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgotCQkJCVJ1bnRp
bWVMaWJyYXJ5PSIxIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCVdhcm5pbmdM
ZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEwMDs0MTI3OzQxODk7NDIz
OTs0MjQ0OzQyNDU7NDUxMjs0NzAyOzQ3MTgiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVBy
b2JsZW1zPSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJCVdhcm5B
c0Vycm9yPSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3Vy
Y2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29t
cGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9u
YWxPcHRpb25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5Lmxp
YiBEM2R4OS5saWIgZDNkY29tcGlsZXIubGliIgotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKLQkJ
CQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliR0xFU3YyLmRlZiIKLQkJCQlHZW5lcmF0ZURlYnVn
SW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNl
QWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRN
YWNoaW5lPSIxNyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNC
c2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVj
aG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29u
ZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxp
YkdMRVN2Mi5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3Vy
YXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVT
djIubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9u
TmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJ
PC9Db25maWd1cmF0aW9uPgotCQk8Q29uZmlndXJhdGlvbgotCQkJTmFtZT0iUmVsZWFzZXx4NjQi
Ci0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpXCQoQ29u
ZmlndXJhdGlvbk5hbWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFt
ZSlcJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNo
YXJhY3RlclNldD0iMSIKLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKLQkJCT4KLQkJ
CTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2Vi
U2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
TUlETFRvb2wiCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGltaXphdGlvbj0iMiIKLQkJCQlJbmxp
bmVGdW5jdGlvbkV4cGFuc2lvbj0iMiIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
PSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJl
cHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdM
RVNWMl9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWDtfU0VDVVJFX1ND
TD0wIgotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIw
IgotCQkJCVdhcm5pbmdMZXZlbD0iNCIKLQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDEw
MDs0MTI3OzQxODk7NDIzOTs0MjQ0OzQyNDU7NDUxMjs0NzAyOzQ3MTgiCi0JCQkJRGV0ZWN0NjRC
aXRQb3J0YWJpbGl0eVByb2JsZW1zPSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0
PSIzIgotCQkJCVdhcm5Bc0Vycm9yPSJ0cnVlIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1l
PSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQ
cmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29s
IgotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvU0FGRVNFSCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5k
ZW5jaWVzPSJkM2Q5LmxpYiBEM2R4OS5saWIgZDNkY29tcGlsZXIubGliIgotCQkJCUxpbmtJbmNy
ZW1lbnRhbD0iMSIKLQkJCQlJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPSJmYWxzZSIKLQkJCQlN
b2R1bGVEZWZpbml0aW9uRmlsZT0ibGliR0xFU3YyLmRlZiIKLQkJCQlHZW5lcmF0ZURlYnVnSW5m
b3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCU9wdGltaXplUmVmZXJlbmNl
cz0iMiIKLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRk
cmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNo
aW5lPSIxNyIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJ
CQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNCc2NN
YWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29sIgotCQkJLz4K
LQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgotCQkJPFRvb2wK
LQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGluZT0iQGVjaG8g
b24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmln
dXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxpYkdM
RVN2Mi5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJHTEVTdjIu
bGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFt
ZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJLz4KLQkJPC9D
b25maWd1cmF0aW9uPgotCTwvQ29uZmlndXJhdGlvbnM+Ci0JPFJlZmVyZW5jZXM+Ci0JPC9SZWZl
cmVuY2VzPgotCTxGaWxlcz4KLQkJPEZpbHRlcgotCQkJTmFtZT0iU291cmNlIEZpbGVzIgotCQkJ
RmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCIKLQkJCVVu
aXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Igot
CQkJPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQmxpdC5jcHAiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmNwcCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxDb250ZXh0LmNwcCIK
LQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9u
XGRlYnVnLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLlxGZW5jZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cRnJhbWVidWZmZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXEhhbmRsZUFsbG9jYXRvci5jcHAiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5kZXhEYXRhTWFuYWdlci5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3Yy
LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxt
YWluLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
LlxQcm9ncmFtLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxQcm9ncmFtQmluYXJ5LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLlxRdWVyeS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxSZWZDb3VudE9iamVjdC5jcHAiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVuZGVyYnVmZmVy
LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxS
ZXNvdXJjZU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuXFNoYWRlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVyZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cdXRpbGl0aWVzLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxWZXJ0ZXhEYXRhTWFuYWdlci5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQk8L0ZpbHRlcj4KLQkJPEZpbHRlcgotCQkJTmFtZT0iSGVhZGVy
IEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJ
ZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJsaXQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxCdWZmZXIuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxDb250ZXh0LmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cRmVuY2UuaCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNs
dWRlXEdMRVMyXGdsMi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMmV4dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbmNsdWRlXEdMRVMyXGdsMnBsYXRm
b3JtLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5c
SGFuZGxlQWxsb2NhdG9yLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii5cSW5kZXhEYXRhTWFuYWdlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYXRodXRpbC5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtQmluYXJ5LmgiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUXVlcnkuaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXFJl
ZkNvdW50T2JqZWN0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii5cUmVuZGVyYnVmZmVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5ccmVzb3VyY2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxSZXNvdXJjZU1hbmFnZXIuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTaGFkZXIuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxUZXh0dXJlLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cdXRpbGl0aWVzLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblx2
ZXJzaW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cdmVydGV4Y29udmVyc2lvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXFZlcnRleERhdGFNYW5hZ2VyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQk8L0ZpbHRlcj4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJHTEVTdjIuZGVmIgot
CQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLnJj
IgotCQkJPgotCQk8L0ZpbGU+Ci0JPC9GaWxlcz4KLQk8R2xvYmFscz4KLQk8L0dsb2JhbHM+Ci08
L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL21haW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0ZDI3Ny4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0K
LS8vIG1haW4uY3BwOiBETEwgZW50cnkgcG9pbnQgYW5kIG1hbmFnZW1lbnQgb2YgdGhyZWFkLWxv
Y2FsIGRhdGEuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUg
ImxpYkVHTC9TdXJmYWNlLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIK
LQotc3RhdGljIERXT1JEIGN1cnJlbnRUTFMgPSBUTFNfT1VUX09GX0lOREVYRVM7Ci0KLUJPT0wg
V0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCBy
ZXNlcnZlZCkKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikKLSAgICB7Ci0gICAgICBjYXNlIERMTF9Q
Uk9DRVNTX0FUVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgY3VycmVudFRMUyA9IFRsc0Fs
bG9jKCk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50VExTID09IFRMU19PVVRfT0ZfSU5ERVhF
UykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbCB0aHJvdWdodCB0byBpbml0aWFsaXpl
IGluZGV4Ci0gICAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6Q3VycmVudCAqY3VycmVudCA9IChnbDo6Q3VycmVudCopTG9jYWxBbGxvYyhMUFRS
LCBzaXplb2YoZ2w6OkN1cnJlbnQpKTsKLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGxzU2V0VmFsdWUoY3VycmVudFRMUywgY3VycmVu
dCk7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50LT5jb250ZXh0ID0gTlVMTDsKLSAgICAgICAg
ICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHZvaWQgKmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsK
LQotICAgICAgICAgICAgaWYgKGN1cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgTG9jYWxGcmVlKChITE9DQUwpY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKLSAgICAgICAg
ewotICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwot
Ci0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgVGxzRnJlZShjdXJyZW50VExTKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBUUlVFOwotfQot
Ci1uYW1lc3BhY2UgZ2wKLXsKLXZvaWQgbWFrZUN1cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCi17Ci0gICAgQ3VycmVu
dCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIGN1
cnJlbnQtPmNvbnRleHQgPSBjb250ZXh0OwotICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBkaXNwbGF5
OwotCi0gICAgaWYgKGNvbnRleHQgJiYgZGlzcGxheSAmJiBzdXJmYWNlKQotICAgIHsKLSAgICAg
ICAgY29udGV4dC0+bWFrZUN1cnJlbnQoZGlzcGxheSwgc3VyZmFjZSk7Ci0gICAgfQotfQotCi1D
b250ZXh0ICpnZXRDb250ZXh0KCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQq
KVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmNvbnRleHQ7
Ci19Ci0KLUNvbnRleHQgKmdldE5vbkxvc3RDb250ZXh0KCkKLXsKLSAgICBDb250ZXh0ICpjb250
ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIAotICAgIGlmIChjb250ZXh0KQotICAgIHsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi1lZ2w6OkRpc3BsYXkg
KmdldERpc3BsYXkoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKLX0KLQot
SURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCkKLXsKLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBnZXREaXNwbGF5KCk7Ci0KLSAgICByZXR1cm4gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci19
Ci0KLWJvb2wgY2hlY2tEZXZpY2VMb3N0KEhSRVNVTFQgZXJyb3JDb2RlKQotewotICAgIGVnbDo6
RGlzcGxheSAqZGlzcGxheSA9IE5VTEw7Ci0KLSAgICBpZiAoaXNEZXZpY2VMb3N0RXJyb3IoZXJy
b3JDb2RlKSkKLSAgICB7Ci0gICAgICAgIGRpc3BsYXkgPSBnbDo6Z2V0RGlzcGxheSgpOwotICAg
ICAgICBkaXNwbGF5LT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci19Ci0KLS8vIFJlY29yZHMgYW4gZXJyb3IgY29k
ZQotdm9pZCBlcnJvcihHTGVudW0gZXJyb3JDb2RlKQotewotICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2xHZXRDdXJyZW50Q29udGV4dCgpOwotCi0gICAgaWYgKGNvbnRleHQpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGVycm9yQ29kZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
SU5WQUxJRF9FTlVNOgotICAgICAgICAgICAgY29udGV4dC0+cmVjb3JkSW52YWxpZEVudW0oKTsK
LSAgICAgICAgICAgIFRSQUNFKCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIGVudW1cbiIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9JTlZBTElEX1ZBTFVFOgot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3JkSW52YWxpZFZhbHVlKCk7Ci0gICAgICAgICAgICBU
UkFDRSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCB2YWx1ZVxuIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0lOVkFMSURfT1BFUkFUSU9OOgotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3JkSW52YWxpZE9wZXJhdGlvbigpOwotICAgICAgICAgICAgVFJBQ0Uo
Ilx0ISBFcnJvciBnZW5lcmF0ZWQ6IGludmFsaWQgb3BlcmF0aW9uXG4iKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfT1VUX09GX01FTU9SWToKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY29yZE91dE9mTWVtb3J5KCk7Ci0gICAgICAgICAgICBUUkFDRSgiXHQhIEVycm9y
IGdlbmVyYXRlZDogb3V0IG9mIG1lbW9yeVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCk7Ci0gICAgICAgICAg
ICBUUkFDRSgiXHQhIEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBmcmFtZWJ1ZmZlciBvcGVyYXRp
b25cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9tYWluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDg0OGEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWlu
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBtYWluLmg6IE1hbmFnZW1lbnQgb2YgdGhyZWFkLWxvY2FsIGRhdGEuCi0KLSNpZm5kZWYgTElC
R0xFU1YyX01BSU5fSF8KLSNkZWZpbmUgTElCR0xFU1YyX01BSU5fSF8KLQotI2RlZmluZSBHTF9B
UElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+
Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5o
IgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1z
dHJ1Y3QgQ3VycmVudAotewotICAgIENvbnRleHQgKmNvbnRleHQ7Ci0gICAgZWdsOjpEaXNwbGF5
ICpkaXNwbGF5OwotfTsKLQotdm9pZCBtYWtlQ3VycmVudChDb250ZXh0ICpjb250ZXh0LCBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7Ci0KLUNvbnRleHQgKmdl
dENvbnRleHQoKTsKLUNvbnRleHQgKmdldE5vbkxvc3RDb250ZXh0KCk7Ci1lZ2w6OkRpc3BsYXkg
KmdldERpc3BsYXkoKTsKLQotSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7Ci0KLWJvb2wg
Y2hlY2tEZXZpY2VMb3N0KEhSRVNVTFQgZXJyb3JDb2RlKTsKLX0KLQotdm9pZCBlcnJvcihHTGVu
dW0gZXJyb3JDb2RlKTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLWNvbnN0IFQgJmVycm9yKEdMZW51
bSBlcnJvckNvZGUsIGNvbnN0IFQgJnJldHVyblZhbHVlKQotewotICAgIGVycm9yKGVycm9yQ29k
ZSk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNW
Ml9NQUlOX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL21hdGh1dGlsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21h
dGh1dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYjIyNTAuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWF0
aHV0aWwuaDogTWF0aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCi0KLSNpZm5kZWYg
TElCR0xFU1YyX01BVEhVVElMX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXwotCi0j
aW5jbHVkZSA8aW50cmluLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLQotbmFtZXNwYWNlIGdsCi17Ci1pbmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCi17Ci0gICAg
cmV0dXJuICh4ICYgKHggLSAxKSkgPT0gMCAmJiAoeCAhPSAwKTsKLX0KLQotaW5saW5lIGludCBs
b2cyKGludCB4KQotewotICAgIGludCByID0gMDsKLSAgICB3aGlsZSAoKHggPj4gcikgPiAxKSBy
Kys7Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5z
aWduZWQgaW50IHgpCi17Ci0gICAgaWYgKHggIT0gMCkgeC0tOwotICAgIHggfD0geCA+PiAxOwot
ICAgIHggfD0geCA+PiAyOwotICAgIHggfD0geCA+PiA0OwotICAgIHggfD0geCA+PiA4OwotICAg
IHggfD0geCA+PiAxNjsKLSAgICB4Kys7Ci0KLSAgICByZXR1cm4geDsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgTUlOLCB0eXBlbmFtZSBNQVg+Ci1pbmxpbmUgVCBjbGFtcChU
IHgsIE1JTiBtaW4sIE1BWCBtYXgpCi17Ci0gICAgcmV0dXJuIHggPCBtaW4gPyBtaW4gOiAoeCA+
IG1heCA/IG1heCA6IHgpOwotfQotCi1pbmxpbmUgZmxvYXQgY2xhbXAwMShmbG9hdCB4KQotewot
ICAgIHJldHVybiBjbGFtcCh4LCAwLjBmLCAxLjBmKTsKLX0KLQotdGVtcGxhdGU8Y29uc3QgaW50
IG4+Ci1pbmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0IHgpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgaW50IG1heCA9IDB4RkZGRkZGRkYgPj4gKDMyIC0gbik7Ci0KLSAgICBpZiAoeCA+IDEp
Ci0gICAgewotICAgICAgICByZXR1cm4gbWF4OwotICAgIH0KLSAgICBlbHNlIGlmICh4IDwgMCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gKHVuc2lnbmVkIGludCkobWF4ICogeCArIDAuNWYpOwotICAgIH0KLX0KLQotaW5s
aW5lIGJvb2wgc3VwcG9ydHNTU0UyKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBjaGVja2VkID0gZmFs
c2U7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHMgPSBmYWxzZTsKLQotICAgIGlmIChjaGVja2Vk
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRzOwotICAgIH0KLQotICAgIGludCBpbmZv
WzRdOwotICAgIF9fY3B1aWQoaW5mbywgMCk7Ci0gICAgCi0gICAgaWYgKGluZm9bMF0gPj0gMSkK
LSAgICB7Ci0gICAgICAgIF9fY3B1aWQoaW5mbywgMSk7Ci0KLSAgICAgICAgc3VwcG9ydHMgPSAo
aW5mb1szXSA+PiAyNikgJiAxOwotICAgIH0KLQotICAgIGNoZWNrZWQgPSB0cnVlOwotCi0gICAg
cmV0dXJuIHN1cHBvcnRzOwotfQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFUSFVUSUxf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVz
b3VyY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVzb3VyY2Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlhZGFhZC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNCArMCwwIEBACi0vL3t7Tk9fREVQRU5ERU5DSUVTfX0KLS8vIE1pY3Jvc29m
dCBWaXN1YWwgQysrIGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUuCi0vLyBVc2VkIGJ5IGxpYkdMRVN2
Mi5yYwotCi0vLyBOZXh0IGRlZmF1bHQgdmFsdWVzIGZvciBuZXcgb2JqZWN0cwotLy8gCi0jaWZk
ZWYgQVBTVFVESU9fSU5WT0tFRAotI2lmbmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCi0j
ZGVmaW5lIF9BUFNfTkVYVF9SRVNPVVJDRV9WQUxVRSAgICAgICAgMTAxCi0jZGVmaW5lIF9BUFNf
TkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgNDAwMDEKLSNkZWZpbmUgX0FQU19ORVhUX0NPTlRS
T0xfVkFMVUUgICAgICAgICAxMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9TWU1FRF9WQUxVRSAgICAg
ICAgICAgMTAxCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhN2M2MmQ5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvdXRpbGl0aWVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMzUgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gdXRpbGl0aWVzLmNwcDogQ29udmVyc2lvbiBmdW5jdGlv
bnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNs
dWRlIDx3aW5kb3dzLmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0K
LW5hbWVzcGFjZSBnbAotewotCi0vLyBUaGlzIGlzIGhvdyBtdWNoIGRhdGEgdGhlIGFwcGxpY2F0
aW9uIGV4cGVjdHMgZm9yIGEgdW5pZm9ybQotaW50IFVuaWZvcm1FeHRlcm5hbENvbXBvbmVudENv
dW50KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX0JPT0w6Ci0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAg
ICBjYXNlIEdMX1NBTVBMRVJfMkQ6Ci0gICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKLSAgICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgotICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAgICAgICByZXR1cm4gMjsK
LSAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAg
ICBjYXNlIEdMX0JPT0xfVkVDMzoKLSAgICAgICAgICByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xf
Qk9PTF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgY2FzZSBHTF9JTlRf
VkVDNDoKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgICByZXR1cm4gNDsKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgICByZXR1cm4gOTsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKLSAgICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRo
aXMgaXMgaG93IG11Y2ggZGF0YSB3ZSBhY3R1YWxseSBzdG9yZSBmb3IgYSB1bmlmb3JtCi1pbnQg
VW5pZm9ybUludGVybmFsQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNhc2UgR0xfSU5UOgot
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgotICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Ci0g
ICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgIGNhc2Ug
R0xfSU5UX1ZFQzI6Ci0gICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMz
OgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMzOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgICAgIHJldHVybiA0OwotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOgotICAgICAgICAgIHJldHVybiAxMjsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKLSAgICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUdMZW51bSBVbmlmb3Jt
Q29tcG9uZW50VHlwZShHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2godHlwZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKLSAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMzOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICAgICAgcmV0dXJu
IEdMX0JPT0w7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMy
OgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0Ogot
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAg
IGNhc2UgR0xfSU5UOgotICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgotICAgICAgY2FzZSBHTF9T
QU1QTEVSX0NVQkU6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRf
VkVDMzoKLSAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6Ci0gICAgICAgICAgcmV0dXJuIEdMX0lOVDsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfTk9ORTsKLX0KLQotc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51bSB0
eXBlKQotewotICAgIHN3aXRjaCh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQk9PTDogIHJl
dHVybiBzaXplb2YoR0xpbnQpOwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIHNpemVvZihH
TGZsb2F0KTsKLSAgICAgIGNhc2UgR0xfSU5UOiAgIHJldHVybiBzaXplb2YoR0xpbnQpOwotICAg
ICAgZGVmYXVsdDogICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCi17Ci0gICAgcmV0
dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpKSAqIFVu
aWZvcm1JbnRlcm5hbENvbXBvbmVudENvdW50KHR5cGUpOwotfQotCi1zaXplX3QgVW5pZm9ybUV4
dGVybmFsU2l6ZShHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNp
emUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVW5pZm9ybUV4dGVybmFsQ29tcG9uZW50
Q291bnQodHlwZSk7Ci19Ci0KLWludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0eXBlKQotewot
ICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAg
IGNhc2UgR0xfSU5UOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVD
MzoKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgot
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAg
ICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMjoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0g
ICAgICAgIHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICByZXR1
cm4gNDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLWludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKQot
ewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0gICAgICAg
IHJldHVybiAwOwotICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAg
ICAgIGNhc2UgR0xfSU5UOgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfQk9PTF9W
RUMyOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoK
LSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNl
IEdMX0lOVF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgY2FzZSBHTF9C
T09MX1ZFQzM6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHJldHVybiAzOwot
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAg
ICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICBy
ZXR1cm4gNDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQg
aW50ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRz
U2l6ZSkKLXsKLSAgICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUpOwotCi0gICAg
dW5zaWduZWQgaW50IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1h
eCgpID4+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cyAtIGFsbG9j
YXRpb25TaXplKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYml0c1NpemUg
LSBhbGxvY2F0aW9uU2l6ZSArIDE7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICgoKmJpdHMgJiBt
YXNrKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAqYml0cyB8PSBtYXNrOwotICAgICAg
ICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLQotICAgICAgICBtYXNrIDw8PSAxOwotICAgIH0K
LQotICAgIHJldHVybiAtMTsKLX0KLQotR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0
aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBB
U1NFUlQoYWxpZ25tZW50ID4gMCAmJiBpc1BvdzIoYWxpZ25tZW50KSk7Ci0KLSAgICBHTHNpemVp
IHJhd1BpdGNoID0gQ29tcHV0ZVBpeGVsU2l6ZShmb3JtYXQsIHR5cGUpICogd2lkdGg7Ci0gICAg
cmV0dXJuIChyYXdQaXRjaCArIGFsaWdubWVudCAtIDEpICYgfihhbGlnbm1lbnQgLSAxKTsKLX0K
LQotR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBm
b3JtYXQpCi17Ci0gICAgcmV0dXJuIENvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgMSwgZm9y
bWF0KTsKLX0KLQotR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgcmV0dXJuIDgg
KiAoR0xzaXplaSljZWlsKChmbG9hdCl3aWR0aCAvIDQuMGYpICogKEdMc2l6ZWkpY2VpbCgoZmxv
YXQpaGVpZ2h0IC8gNC4wZik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gMTYgKiAoR0xzaXplaSljZWlsKChmbG9h
dCl3aWR0aCAvIDQuMGYpICogKEdMc2l6ZWkpY2VpbCgoZmxvYXQpaGVpZ2h0IC8gNC4wZik7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLX0KLQotYm9vbCBJc0Nv
bXByZXNzZWQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBpZihmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFIHx8Ci0gICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfQU5HTEUpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBJc0Rl
cHRoVGV4dHVyZShHTGVudW0gZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gR0xfREVQVEhf
Q09NUE9ORU5UIHx8Ci0gICAgICAgIGZvcm1hdCA9PSBHTF9ERVBUSF9TVEVOQ0lMX09FUykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFu
IEltYWdlCi1pbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkK
LXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6ICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwotICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwot
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiByZXR1cm4gc2l6ZW9mKHVuc2lnbmVk
IGNoYXIpICogMjsKLSAgICAgICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAgcmV0dXJuIHNp
emVvZih1bnNpZ25lZCBjaGFyKSAqIDM7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAg
ICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiA0OwotICAgICAgICAgIGNhc2UgR0xf
QkdSQV9FWFQ6ICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogNDsKLSAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToK
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YodW5z
aWduZWQgc2hvcnQpOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBp
bnQpOwotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcmV0dXJuIHNpemVvZihm
bG9hdCk7Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAgIHJldHVybiBzaXplb2Yo
ZmxvYXQpOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiByZXR1cm4gc2l6ZW9m
KGZsb2F0KSAqIDI7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBz
aXplb2YoZmxvYXQpICogMzsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcmV0
dXJuIHNpemVvZihmbG9hdCkgKiA0OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VT
OgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6ICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7
Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6IHJldHVybiBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpICogMjsKLSAgICAgICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAgcmV0dXJu
IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiAzOwotICAgICAgICAgIGNhc2UgR0xfUkdCQTogICAg
ICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDQ7Ci0gICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wg
SXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KQotewotICAgIHJldHVybiAodGFy
Z2V0ID49IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aKTsKLX0KLQotYm9vbCBJc0ludGVybmFsVGV4dHVyZVRh
cmdldChHTGVudW0gdGFyZ2V0KQotewotICAgIHJldHVybiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8y
RCB8fCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCk7Ci19Ci0KLUdMZW51bSBFeHRyYWN0
Rm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9y
bWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1JHQjsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQkE7Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6ICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOwotICAgICAgY2FzZSBHTF9SR0JB
OF9PRVM6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTsKLSAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOiAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRV9B
TFBIQTsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6ICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDogICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0FMUEhBOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9T
M1RDX0RYVDFfRVhUOiAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDsK
LSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6ICAgcmV0dXJuIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFOiByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTog
cmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIEdM
X1JHQkEzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOwotICAgICAg
Y2FzZSBHTF9SR0IzMkZfRVhUOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOwot
ICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
QUxQSEE7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6ICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9MVU1JTkFOQ0U7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6
ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7Ci0gICAgICBjYXNlIEdMX1JHQkEx
NkZfRVhUOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOwotICAgICAgY2FzZSBH
TF9SR0IxNkZfRVhUOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOwotICAgICAg
Y2FzZSBHTF9BTFBIQTE2Rl9FWFQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQUxQSEE7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBH
TF9MVU1JTkFOQ0U7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6ICAgICAg
ICAgIHJldHVybiBHTF9MVU1JTkFOQ0VfQUxQSEE7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDog
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CR1JBX0VYVDsKLSAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMTY6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVO
VDsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOiAgICAgICAgICAgcmV0dXJu
IEdMX0RFUFRIX0NPTVBPTkVOVDsKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
ICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX1NURU5DSUxfT0VTOwotICAgICAgZGVmYXVsdDog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsgICAvLyBVbnN1
cHBvcnRlZAotICAgIH0KLX0KLQotR0xlbnVtIEV4dHJhY3RUeXBlKEdMZW51bSBpbnRlcm5hbGZv
cm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfUkdCNTY1OiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NI
T1JUXzVfNl81OwotICAgICAgY2FzZSBHTF9SR0JBNDogICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDsKLSAgICAgIGNhc2UgR0xfUkdCNV9B
MTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzE7Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOF9BTFBIQThfRVhUOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9VTlNJ
R05FRF9CWVRFOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOiAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDogICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOiAgIHJldHVybiBHTF9VTlNJR05FRF9CWVRF
OwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOiByZXR1cm4g
R0xfVU5TSUdORURfQllURTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRTogcmV0dXJuIEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgICBjYXNlIEdMX1JHQkEzMkZf
RVhUOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICAgIGNhc2UgR0xf
UkdCMzJGX0VYVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAg
Y2FzZSBHTF9BTFBIQTMyRl9FWFQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6ICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GTE9BVDsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDogICAgICAgICAg
cmV0dXJuIEdMX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9F
WFQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKLSAgICAg
IGNhc2UgR0xfQUxQSEExNkZfRVhUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0hBTEZf
RkxPQVRfT0VTOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOiAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfSEFMRl9GTE9BVF9PRVM7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QTE2Rl9FWFQ6ICAgICAgICAgIHJldHVybiBHTF9IQUxGX0ZMT0FUX09FUzsKLSAgICAgIGNhc2Ug
R0xfQkdSQThfRVhUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0JZ
VEU7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OiAgICAgICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9TSE9SVDsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VT
OiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKLSAgICAgIGNhc2UgR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF8yNF84X09F
UzsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX05PTkU7ICAgLy8gVW5zdXBwb3J0ZWQKLSAgICB9Ci19Ci0KLWJvb2wgSXNDb2xvclJlbmRl
cmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToK
LSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgIGNh
c2UgR0xfUkdCQThfT0VTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBJc0RlcHRoUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQp
Ci17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdC
NTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTklNUExFTUVO
VEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElzU3RlbmNpbFJl
bmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAgIHN3aXRjaCAoaW50ZXJuYWxm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgIGNhc2Ug
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2Fz
ZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfQotCi1uYW1lc3BhY2UgZXMyZHgKLXsKLQotRDNEQ01QRlVOQyBDb252
ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbikKLXsKLSAgICBEM0RDTVBGVU5DIGQzZENv
bXAgPSBEM0RDTVBfQUxXQVlTOwotICAgIHN3aXRjaCAoY29tcGFyaXNvbikKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX05FVkVSOiAgICBkM2RDb21wID0gRDNEQ01QX05FVkVSOyAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0FMV0FZUzogICBkM2RDb21wID0gRDNEQ01QX0FMV0FZUzsgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xFU1M6ICAgICBkM2RDb21wID0gRDNEQ01QX0xFU1M7ICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xFUVVBTDogICBkM2RDb21wID0gRDNEQ01QX0xF
U1NFUVVBTDsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VRVUFMOiAgICBkM2RDb21wID0gRDNE
Q01QX0VRVUFMOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dSRUFURVI6ICBkM2RDb21w
ID0gRDNEQ01QX0dSRUFURVI7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFUVVBTDogICBk
M2RDb21wID0gRDNEQ01QX0dSRUFURVJFUVVBTDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05PVEVR
VUFMOiBkM2RDb21wID0gRDNEQ01QX05PVEVRVUFMOyAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RDb21wOwotfQotCi1EM0RD
T0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKQotewotICAgIHJldHVybiBEM0RDT0xP
Ul9SR0JBKGdsOjp1bm9ybTw4Pihjb2xvci5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjp1bm9ybTw4Pihjb2xvci5ncmVlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OnVub3JtPDg+KGNvbG9yLmJsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9y
bTw4Pihjb2xvci5hbHBoYSkpOwotfQotCi1EM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51
bSBibGVuZCkKLXsKLSAgICBEM0RCTEVORCBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87Ci0KLSAg
ICBzd2l0Y2ggKGJsZW5kKQotICAgIHsKLSAgICAgIGNhc2UgR0xfWkVSTzogICAgICAgICAgICAg
ICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1pFUk87ICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfT05FOiAgICAgICAgICAgICAgICAgICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX09O
RTsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1JDX0NPTE9SOiAgICAgICAgICAg
ICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX1NSQ0NPTE9SOyAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfT05FX01JTlVTX1NSQ19DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNS
Q0NPTE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOiAgICAgICAgICAgICAg
ICBkM2RCbGVuZCA9IEQzREJMRU5EX0RFU1RDT0xPUjsgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfT05FX01JTlVTX0RTVF9DT0xPUjogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RD
T0xPUjsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICBk
M2RCbGVuZCA9IEQzREJMRU5EX1NSQ0FMUEhBOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
T05FX01JTlVTX1NSQ19BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVlNSQ0FMUEhB
OyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICBkM2RC
bGVuZCA9IEQzREJMRU5EX0RFU1RBTFBIQTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05F
X01JTlVTX0RTVF9BTFBIQTogICAgICBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkRFU1RBTFBIQTsg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6ICAgICAgICAgICBkM2RCbGVu
ZCA9IEQzREJMRU5EX0JMRU5ERkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01J
TlVTX0NPTlNUQU5UX0NPTE9SOiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6ICAgICAgICAgICBkM2RCbGVuZCA9
IEQzREJMRU5EX0JMRU5ERkFDVE9SOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfT05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBOiBkM2RCbGVuZCA9IEQzREJMRU5EX0lOVkJMRU5ERkFDVE9SOyBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOiAgICAgICBkM2RCbGVuZCA9IEQz
REJMRU5EX1NSQ0FMUEhBU0FUOyAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQzZEJsZW5kOwotfQotCi1EM0RCTEVORE9QIENvbnZl
cnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKQotewotICAgIEQzREJMRU5ET1AgZDNkQmxlbmRPcCA9
IEQzREJMRU5ET1BfQUREOwotCi0gICAgc3dpdGNoIChibGVuZE9wKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfRlVOQ19BREQ6ICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNk
QmxlbmRPcCA9IEQzREJMRU5ET1BfU1VCVFJBQ1Q7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9G
VU5DX1JFVkVSU0VfU1VCVFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1JFVlNVQlRSQUNU
OyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGQzZEJsZW5kT3A7Ci19Ci0KLUQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51
bSBzdGVuY2lsT3ApCi17Ci0gICAgRDNEU1RFTkNJTE9QIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5D
SUxPUF9LRUVQOwotCi0gICAgc3dpdGNoIChzdGVuY2lsT3ApCi0gICAgewotICAgICAgY2FzZSBH
TF9aRVJPOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9aRVJPOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfS0VFUDogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfS0VF
UDsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFUExBQ0U6ICAgZDNkU3RlbmNpbE9wID0gRDNE
U1RFTkNJTE9QX1JFUExBQ0U7IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSOiAgICAgIGQzZFN0
ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9JTkNSU0FUOyBicmVhazsKLSAgICAgIGNhc2UgR0xfREVD
UjogICAgICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfREVDUlNBVDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0lOVkVSVDogICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOVkVSVDsg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9JTkNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5D
SUxPUF9JTkNSOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVDUl9XUkFQOiBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfREVDUjsgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RTdGVuY2lsT3A7Ci19Ci0KLUQzRFRFWFRV
UkVBRERSRVNTIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCkKLXsKLSAgICBEM0RURVhU
VVJFQUREUkVTUyBkM2RXcmFwID0gRDNEVEFERFJFU1NfV1JBUDsKLQotICAgIHN3aXRjaCAod3Jh
cCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDogICAgICAgICAgICBkM2RXcmFwID0gRDNE
VEFERFJFU1NfV1JBUDsgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRTogICAg
IGQzZFdyYXAgPSBEM0RUQUREUkVTU19DTEFNUDsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NSVJS
T1JFRF9SRVBFQVQ6ICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX01JUlJPUjsgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBkM2RXcmFwOwot
fQotCi1EM0RDVUxMIENvbnZlcnRDdWxsTW9kZShHTGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9u
dEZhY2UpCi17Ci0gICAgRDNEQ1VMTCBjdWxsID0gRDNEQ1VMTF9DQ1c7Ci0gICAgc3dpdGNoIChj
dWxsRmFjZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZST05UOgotICAgICAgICBjdWxsID0gKGZy
b250RmFjZSA9PSBHTF9DQ1cgPyBEM0RDVUxMX0NXIDogRDNEQ1VMTF9DQ1cpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQkFDSzoKLSAgICAgICAgY3VsbCA9IChmcm9udEZhY2UgPT0g
R0xfQ0NXID8gRDNEQ1VMTF9DQ1cgOiBEM0RDVUxMX0NXKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0ZST05UX0FORF9CQUNLOgotICAgICAgICBjdWxsID0gRDNEQ1VMTF9OT05FOyAv
LyBjdWxsaW5nIHdpbGwgYmUgaGFuZGxlZCBkdXJpbmcgZHJhdwotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1bGw7Ci19
Ci0KLUQzRENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSBjdWJlRmFjZSkKLXsK
LSAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWDsK
LQotICAgIHN3aXRjaCAoY3ViZUZhY2UpCi0gICAgewotICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgIGZhY2UgPSBEM0RDVUJFTUFQX0ZBQ0VfUE9TSVRJ
VkVfWDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWDoKLSAgICAgICAgZmFjZSA9IEQzRENVQkVNQVBfRkFDRV9ORUdBVElWRV9YOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgot
ICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1k7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGZh
Y2UgPSBEM0RDVUJFTUFQX0ZBQ0VfTkVHQVRJVkVfWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgZmFjZSA9IEQzRENV
QkVNQVBfRkFDRV9QT1NJVElWRV9aOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBmYWNlID0gRDNEQ1VCRU1BUF9GQUNF
X05FR0FUSVZFX1o7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFjZTsKLX0KLQotRFdPUkQgQ29udmVydENvbG9yTWFz
ayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIHJl
dHVybiAocmVkICAgPyBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAotICAgICAgICAg
ICAoZ3JlZW4gPyBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAotICAgICAgICAgICAo
Ymx1ZSAgPyBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkgfAotICAgICAgICAgICAoYWxw
aGEgPyBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIDogMCk7Ci19Ci0KLUQzRFRFWFRVUkVGSUxU
RVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcikKLXsKLSAgICBEM0RURVhU
VVJFRklMVEVSVFlQRSBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgIHN3aXRjaCAo
bWFnRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0g
RDNEVEVYRl9QT0lOVDsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0
ZXIgPSBEM0RURVhGX0xJTkVBUjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgIH0KLQotICAgIHJldHVybiBkM2RNYWdGaWx0ZXI7Ci19Ci0KLXZvaWQgQ29udmVydE1p
bkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmls
dGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKQotewotICAgIHN3aXRjaCAo
bWluRmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1p
bkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhG
X05PTkU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgICpk
M2RNaW5GaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQz
RFRFWEZfTk9ORTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAg
ICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQz
RFRFWEZfTElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAg
ICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIg
PSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9N
SVBNQVBfTElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0g
ICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAg
ICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udmVydFByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2
ZVR5cGUsIEdMc2l6ZWkgZWxlbWVudENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RQUklNSVRJVkVUWVBFICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50
KQotewotICAgIHN3aXRjaCAocHJpbWl0aXZlVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1BP
SU5UUzoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9QT0lOVExJU1Q7Ci0gICAg
ICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0xJTkVTOgotICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJ
TkVMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLyAyOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTElORV9MT09QOgotICAgICAgICAqZDNkUHJp
bWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50
ID0gZWxlbWVudENvdW50IC0gMTsgICAvLyBEM0QgZG9lc24ndCBzdXBwb3J0IGxpbmUgbG9vcHMs
IHNvIHdlIGRyYXcgdGhlIGxhc3QgbGluZSBzZXBhcmF0ZWx5Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MSU5FX1NUUklQOgotICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBU
X0xJTkVTVFJJUDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC0g
MTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKLSAgICAgICAgKmQz
ZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRUxJU1Q7Ci0gICAgICAgICpkM2RQcmltaXRp
dmVDb3VudCA9IGVsZW1lbnRDb3VudCAvIDM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9UUklBTkdMRV9TVFJJUDoKLSAgICAgICAgKmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklB
TkdMRVNUUklQOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLSAy
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgotICAgICAgICAq
ZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFRkFOOwotICAgICAgICAqZDNkUHJpbWl0
aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAg
ICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAg
Y2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0
dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAg
IHJldHVybiBEM0RGTVRfUjVHNkI1OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAg
ICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OiAgICAgICAKLSAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6IHJldHVybiBEM0RGTVRfRDI0Uzg7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgIH0KLX0K
LQotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNp
emVpIHNhbXBsZXMpCi17Ci0gICAgaWYgKHNhbXBsZXMgPD0gMSkKLSAgICAgICAgcmV0dXJuIEQz
RE1VTFRJU0FNUExFX05PTkU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FN
UExFX1RZUEUpc2FtcGxlczsKLX0KLQotfQotCi1uYW1lc3BhY2UgZHgyZXMKLXsKLQotdW5zaWdu
ZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KQotewotICAgIGlm
IChzdGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDg7
Ci0gICAgfQotICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNE
Rk1UX0QyNEZTODoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gODsK
LSAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2Fz
ZSBEM0RGTVRfRDE1UzE6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfRDE2
X0xPQ0tBQkxFOgotICAgICAgY2FzZSBEM0RGTVRfRDMyOgotICAgICAgY2FzZSBEM0RGTVRfRDI0
WDg6Ci0gICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgotICAgICAgY2FzZSBEM0RGTVRf
RDE2OgotICAgICAgICByZXR1cm4gMDsKLSAgICAvL2Nhc2UgRDNERk1UX0QzMl9MT0NLQUJMRTog
IHJldHVybiAwOyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAvL2Nhc2UgRDNERk1UX1M4X0xP
Q0tBQkxFOiAgIHJldHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEFscGhhU2l6
ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7
Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0g
ICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBj
YXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZN
VF9BMVI1RzVCNToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhC
ODoKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRS
ZWRTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVy
biAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAz
MjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMTA7Ci0g
ICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Ogot
ICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgY2Fz
ZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gNTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldEdyZWVuU2l6ZShEM0RG
T1JNQVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gMTY7Ci0gICAg
ICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMzI7Ci0gICAgICBj
YXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDEwOwotICAgICAgY2FzZSBE
M0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0
dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgcmV0dXJuIDU7Ci0g
ICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiA2OwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0Qmx1ZVNp
emUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2
OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwot
ICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAxMDsKLSAgICAg
IGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAg
ICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICBjYXNlIEQz
REZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiA1OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1B
VCBkZXB0aEZvcm1hdCkKLXsKLSAgICBpZiAoZGVwdGhGb3JtYXQgPT0gRDNERk1UX0lOVFopCi0g
ICAgewotICAgICAgICByZXR1cm4gMjQ7Ci0gICAgfQotICAgIHN3aXRjaCAoZGVwdGhGb3JtYXQp
Ci0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOiAgcmV0dXJuIDE2OwotICAg
ICAgY2FzZSBEM0RGTVRfRDMyOiAgICAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RG
TVRfRDE1UzE6ICAgICAgICAgcmV0dXJuIDE1OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6ICAg
ICAgICAgcmV0dXJuIDI0OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6ICAgICAgICAgcmV0dXJu
IDI0OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDogICAgICAgcmV0dXJuIDI0OwotICAgICAg
Y2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRf
RDMyRl9MT0NLQUJMRTogcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OiAgICAg
ICAgcmV0dXJuIDI0OwotICAgIC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDMy
OyAgIC8vIEQzRDlFeCBvbmx5Ci0gICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1
cm4gMDsgICAgLy8gRDNEOUV4IG9ubHkKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBJc0Zsb2F0MzJGb3JtYXQoRDNERk9STUFUIHN1
cmZhY2VGb3JtYXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEM0RGTVRfUjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0cxNlIxNkY6Ci0gICAgICBjYXNl
IEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNl
IEQzREZNVF9SMzJGOgotICAgICAgY2FzZSBEM0RGTVRfRzMyUjMyRjoKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgSXNGbG9hdDE2Rm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0
KQotewotICAgIHN3aXRjaChzdXJmYWNlRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1U
X1IxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9HMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTE2
QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEQzREZNVF9SMzJG
OgotICAgICAgY2FzZSBEM0RGTVRfRzMyUjMyRjoKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkcz
MlIzMkY6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVC
NToKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQotewot
ICAgIHJldHVybiAoc3VyZmFjZUZvcm1hdCA9PSBEM0RGTVRfSU5UWik7Ci19Ci0KLWJvb2wgSXNT
dGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICByZXR1
cm4gKHN1cmZhY2VGb3JtYXQgPT0gRDNERk1UX0lOVFopOwotfQotCi1HTHNpemVpIEdldFNhbXBs
ZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKLXsKLSAgICBp
ZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gdHlwZTsKLX0KLQotR0xlbnVtIENvbnZlcnRCYWNr
QnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAg
IGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBE
M0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVH
NkI1OiAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0
dXJuIEdMX1JHQjhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhT
dGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsK
LSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2
OgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01Q
T05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgIH0KLQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLX0KLQotfQot
Ci1zdGQ6OnN0cmluZyBnZXRUZW1wUGF0aCgpCi17Ci0gICAgY2hhciBwYXRoW01BWF9QQVRIXTsK
LSAgICBEV09SRCBwYXRoTGVuID0gR2V0VGVtcFBhdGhBKHNpemVvZihwYXRoKSAvIHNpemVvZihw
YXRoWzBdKSwgcGF0aCk7Ci0gICAgaWYgKHBhdGhMZW4gPT0gMCkKLSAgICB7Ci0gICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwotICAgIH0KLQotICAg
IFVJTlQgdW5pcXVlID0gR2V0VGVtcEZpbGVOYW1lQShwYXRoLCAic2giLCAwLCBwYXRoKTsKLSAg
ICBpZiAodW5pcXVlID09IDApCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBhdGg7Ci19
Ci0KLXZvaWQgd3JpdGVGaWxlKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGNvbnRlbnQs
IHNpemVfdCBzaXplKQotewotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihwYXRoLCAidyIpOwotICAg
IGlmICghZmlsZSkKLSAgICB7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBmd3JpdGUoY29udGVudCwgc2l6ZW9mKGNoYXIpLCBzaXplLCBmaWxl
KTsKLSAgICBmY2xvc2UoZmlsZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2YyMjQxOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3V0aWxpdGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vIHV0aWxpdGllcy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcy4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKLSNk
ZWZpbmUgTElCR0xFU1YyX1VUSUxJVElFU19ICi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2luY2x1ZGUgPGQz
ZDkuaD4KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRa
ID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwotY29uc3QgRDNE
Rk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcs
J0wnKSkpOwotCi1uYW1lc3BhY2UgZ2wKLXsKLQotc3RydWN0IENvbG9yOwotCi1pbnQgVW5pZm9y
bUV4dGVybmFsQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpOwotaW50IFVuaWZvcm1JbnRlcm5h
bENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKLUdMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlw
ZShHTGVudW0gdHlwZSk7Ci1zaXplX3QgVW5pZm9ybUludGVybmFsU2l6ZShHTGVudW0gdHlwZSk7
Ci1zaXplX3QgVW5pZm9ybUV4dGVybmFsU2l6ZShHTGVudW0gdHlwZSk7Ci1pbnQgVmFyaWFibGVS
b3dDb3VudChHTGVudW0gdHlwZSk7Ci1pbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlw
ZSk7Ci0KLWludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1bnNp
Z25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSk7Ci0KLWludCBD
b21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKLUdMc2l6ZWkgQ29t
cHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCBhbGlnbm1lbnQpOwotR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lk
dGgsIEdMZW51bSBmb3JtYXQpOwotR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOwotYm9vbCBJc0NvbXByZXNz
ZWQoR0xlbnVtIGZvcm1hdCk7Ci1ib29sIElzRGVwdGhUZXh0dXJlKEdMZW51bSBmb3JtYXQpOwot
Ym9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotYm9vbCBJc0ludGVy
bmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKLUdMZW51bSBFeHRyYWN0Rm9ybWF0KEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCk7Ci1HTGVudW0gRXh0cmFjdFR5cGUoR0xlbnVtIGludGVybmFs
Zm9ybWF0KTsKLQotYm9vbCBJc0NvbG9yUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQp
OwotYm9vbCBJc0RlcHRoUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOwotYm9vbCBJ
c1N0ZW5jaWxSZW5kZXJhYmxlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7Ci0KLX0KLQotbmFtZXNw
YWNlIGVzMmR4Ci17Ci0KLUQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBh
cmlzb24pOwotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7Ci1EM0RCTEVO
RCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7Ci1EM0RCTEVORE9QIENvbnZlcnRCbGVu
ZE9wKEdMZW51bSBibGVuZE9wKTsKLUQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51
bSBzdGVuY2lsT3ApOwotRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdMZW51
bSB3cmFwKTsKLUQzRENVTEwgQ29udmVydEN1bGxNb2RlKEdMZW51bSBjdWxsRmFjZSwgR0xlbnVt
IGZyb250RmFjZSk7Ci1EM0RDVUJFTUFQX0ZBQ0VTIENvbnZlcnRDdWJlRmFjZShHTGVudW0gY3Vi
ZUZhY2UpOwotRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9v
bCBibHVlLCBib29sIGFscGhhKTsKLUQzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0
ZXIoR0xlbnVtIG1hZ0ZpbHRlcik7Ci12b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZp
bHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRF
UlRZUEUgKmQzZE1pcEZpbHRlcik7Ci1ib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBw
cmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEUFJJTUlUSVZFVFlQRSAqZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRp
dmVDb3VudCk7Ci1EM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9y
bWF0KTsKLUQzRE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMo
R0xzaXplaSBzYW1wbGVzKTsKLQotfQotCi1uYW1lc3BhY2UgZHgyZXMKLXsKLUdMdWludCBHZXRB
bHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWludCBHZXRSZWRTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0R3JlZW5TaXplKEQzREZPUk1BVCBjb2xvckZv
cm1hdCk7Ci1HTHVpbnQgR2V0Qmx1ZVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWlu
dCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KTsKLUdMdWludCBHZXRTdGVuY2ls
U2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Ci1ib29sIElzRmxvYXQzMkZvcm1hdChEM0RG
T1JNQVQgc3VyZmFjZUZvcm1hdCk7Ci1ib29sIElzRmxvYXQxNkZvcm1hdChEM0RGT1JNQVQgc3Vy
ZmFjZUZvcm1hdCk7Ci1ib29sIElzRGVwdGhUZXh0dXJlRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNl
Rm9ybWF0KTsKLWJvb2wgSXNTdGVuY2lsVGV4dHVyZUZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZv
cm1hdCk7Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElT
QU1QTEVfVFlQRSB0eXBlKTsKLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZP
Uk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFU
IGZvcm1hdCk7Ci0KLX0KLQotc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKTsKLXZvaWQgd3JpdGVG
aWxlKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKLQot
aW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJyb3IoSFJFU1VMVCBlcnJvckNvZGUpCi17Ci0gICAg
c3dpdGNoIChlcnJvckNvZGUpCi0gICAgewotICAgICAgY2FzZSBEM0RFUlJfRFJJVkVSSU5URVJO
QUxFUlJPUjoKLSAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6Ci0gICAgICBjYXNlIEQzREVS
Ul9ERVZJQ0VIVU5HOgotICAgICAgY2FzZSBEM0RFUlJfREVWSUNFUkVNT1ZFRDoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfTsKLQotI2VuZGlmICAvLyBMSUJHTEVTVjJfVVRJTElUSUVTX0gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdmVydGV4Y29udmVyc2lvbi5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi92ZXJ0ZXhjb252ZXJzaW9uLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYjhiODkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi92ZXJ0ZXhjb252ZXJzaW9uLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gdmVy
dGV4Y29udmVyc2lvbi5oOiBBIGxpYnJhcnkgb2YgdmVydGV4IGNvbnZlcnNpb24gY2xhc3NlcyB0
aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkCi0vLyB0aGUgRm9ybWF0Q29udmVydGVyIG9iamVjdHMg
dXNlZCBieSB0aGUgYnVmZmVyIGNvbnZlcnNpb24gc3lzdGVtLgotCi0jaWZuZGVmIExJQkdMRVNW
Ml9WRVJURVhDT05WRVJTSU9OX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9WRVJURVhDT05WRVJTSU9O
X0hfCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGxpbWl0cz4KLQotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiIC8vIERlZmluZXMgSW5kZXgKLQotbmFtZXNwYWNlIGdsCi17
Ci0KLS8vIENvbnZlcnNpb24gdHlwZXM6Ci0vLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTog
dHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSwgZmFsc2Ugb3RoZXJ3aXNlCi0v
LyBzdGF0aWMgVSBjb252ZXJ0KFQpOiBjb252ZXJ0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUg
aW5wdXQgdHlwZSB0byB0aGUgb3V0cHV0IHR5cGUKLS8vIHR5cGVkZWYgLi4uIE91dHB1dFR5cGU6
IHRoZSB0eXBlIHByb2R1Y2VkIGJ5IHRoaXMgY29udmVyc2lvbgotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLXN0cnVjdCBJZGVudGl0eQotewotICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0g
dHJ1ZTsKLQotICAgIHR5cGVkZWYgVCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFQgY29udmVy
dChUIHgpCi0gICAgewotICAgICAgICByZXR1cm4geDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgRnJvbVQsIGNsYXNzIFRvVD4KLXN0cnVjdCBDYXN0Ci17Ci0gICAgc3RhdGljIGNvbnN0
IGJvb2wgaWRlbnRpdHkgPSBmYWxzZTsKLQotICAgIHR5cGVkZWYgVG9UIE91dHB1dFR5cGU7Ci0K
LSAgICBzdGF0aWMgVG9UIGNvbnZlcnQoRnJvbVQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUb1Q+KHgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3Ry
dWN0IENhc3Q8VCwgVD4KLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IHRydWU7
Ci0KLSAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBUIGNvbnZlcnQoVCB4
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IE5vcm1hbGl6ZQotewotICAgIHN0YXRpYyBjb25z
dCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7
Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChUIHgpCi0gICAgewotICAgICAgICB0eXBlZGVm
IHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0gICAgICAgIGZsb2F0IGYgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oeCk7Ci0KLSAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIGNvbnN0IGZsb2F0ID0+IFZDMjAwOCBjb21wdXRlcyBpdCBhdCBjb21waWxl
IHRpbWUKLSAgICAgICAgICAgIC8vIHN0YXRpYyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0
ZXMgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0IGhlcmUsIHN0b3JlcyBpdCB0byBtZW1vcnkgd2l0
aCBzdGF0aWMgZ3VhcmQgYW5kIGFsbCB0aGF0LgotICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2
aXNvciA9IDEuMGYvKDIqc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkrMSk7Ci0gICAgICAg
ICAgICByZXR1cm4gKDIqZisxKSpkaXZpc29yOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGYvTkw6Om1heCgpOwotICAgICAgICB9Ci0gICAg
fQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEZyb21UeXBlLCBzdGQ6OnNpemVfdCBTY2FsZUJpdHM+
Ci1zdHJ1Y3QgRml4ZWRUb0Zsb2F0Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkg
PSBmYWxzZTsKLQotICAgIHR5cGVkZWYgZmxvYXQgT3V0cHV0VHlwZTsKLQotICAgIHN0YXRpYyBm
bG9hdCBjb252ZXJ0KEZyb21UeXBlIHgpCi0gICAgewotICAgICAgICBjb25zdCBmbG9hdCBkaXZp
c29yID0gMS4wZiAvIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxGcm9tVHlwZT4oMSkg
PDwgU2NhbGVCaXRzKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KSAqIGRp
dmlzb3I7Ci0gICAgfQotfTsKLQotLy8gV2lkZW4gdHlwZXM6Ci0vLyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IGluaXRpYWxXaWR0aDogbnVtYmVyIG9mIGNvbXBvbmVudHMgYmVmb3JlIGNvbnZl
cnNpb24KLS8vIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmluYWxXaWR0aDogbnVtYmVyIG9m
IGNvbXBvbmVudHMgYWZ0ZXIgY29udmVyc2lvbgotCi0vLyBGbG9hdCBpcyBzdXBwb3J0ZWQgYXQg
YW55IHNpemUuCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KLXN0cnVjdCBOb1dpZGVuCi17Ci0g
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47Ci0gICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSBOOwotfTsKLQotLy8gU0hPUlQsIG5vcm0t
U0hPUlQsIG5vcm0tVU5TSUdORURfU0hPUlQgYXJlIHN1cHBvcnRlZCBidXQgb25seSB3aXRoIDIg
b3IgNCBjb21wb25lbnRzCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KLXN0cnVjdCBXaWRlblRv
RXZlbgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwot
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTisoTiYxKTsKLX07Ci0K
LXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgotc3RydWN0IFdpZGVuVG9Gb3VyCi17Ci0gICAgc3Rh
dGljIGNvbnN0IHN0ZDo6c2l6ZV90IGluaXRpYWxXaWR0aCA9IE47Ci0gICAgc3RhdGljIGNvbnN0
IHN0ZDo6c2l6ZV90IGZpbmFsV2lkdGggPSA0OwotfTsKLQotLy8gTW9zdCB0eXBlcyBoYXZlIDAg
YW5kIDEgdGhhdCBhcmUganVzdCB0aGF0LgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgU2lt
cGxlRGVmYXVsdFZhbHVlcwotewotICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUPigwKTsgfQotICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KDEpOyB9Ci19OwotCi0vLyBCdXQgbm9ybWFsaXNlZCB0eXBlcyBvbmx5IHN0b3JlIFswLDFdIG9y
IFstMSwxXSBzbyAxLjAgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIG1heCB2YWx1ZS4KLXRlbXBsYXRl
IDxjbGFzcyBUPgotc3RydWN0IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzCi17Ci0gICAgc3RhdGlj
IFQgemVybygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDApOyB9Ci0gICAgc3RhdGljIFQgb25l
KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KLX07Ci0KLS8vIENv
bnZlcnRlcjoKLS8vIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5OiB0cnVlIGlmIHRoaXMgaXMg
YW4gaWRlbnRpdHkgdHJhbnNmb3JtICh3aXRoIG5vIHdpZGVuaW5nKQotLy8gc3RhdGljIGNvbnN0
IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHBlciBvdXRwdXQgdmVydGV4
Ci0vLyBzdGF0aWMgdm9pZCBjb252ZXJ0QXJyYXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90
IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTogY29udmVydCBhbiBhcnJheSBvZiB2
ZXJ0aWNlcy4gSW5wdXQgbWF5IGJlIHN0cmlkZWQsIGJ1dCBvdXRwdXQgd2lsbCBiZSB1bnN0cmlk
ZWQuCi0KLXRlbXBsYXRlIDxjbGFzcyBJblQsIGNsYXNzIFdpZGVuUnVsZSwgY2xhc3MgQ29udmVy
dGVyLCBjbGFzcyBEZWZhdWx0VmFsdWVSdWxlID0gU2ltcGxlRGVmYXVsdFZhbHVlczxJblQ+ID4K
LXN0cnVjdCBWZXJ0ZXhEYXRhQ29udmVydGVyCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDb252
ZXJ0ZXI6Ok91dHB1dFR5cGUgT3V0cHV0VHlwZTsKLSAgICB0eXBlZGVmIEluVCBJbnB1dFR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IChXaWRlblJ1bGU6OmluaXRpYWxX
aWR0aCA9PSBXaWRlblJ1bGU6OmZpbmFsV2lkdGgpICYmIENvbnZlcnRlcjo6aWRlbnRpdHk7Ci0g
ICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZpbmFsU2l6ZSA9IFdpZGVuUnVsZTo6ZmluYWxX
aWR0aCAqIHNpemVvZihPdXRwdXRUeXBlKTsKLQotICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJh
eShjb25zdCBJbnB1dFR5cGUgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4s
IE91dHB1dFR5cGUgKm91dCkKLSAgICB7Ci0gICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7
IGkgPCBuOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IElucHV0VHlwZSAqZWlu
ID0gcG9pbnRlckFkZEJ5dGVzKGluLCBpICogc3RyaWRlKTsKLQotICAgICAgICAgICAgY29weUNv
bXBvbmVudChvdXQsIGVpbiwgMCwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVl
UnVsZTo6emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAxLCBz
dGF0aWNfY2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAgICAg
ICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDIsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+
KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwotICAgICAgICAgICAgY29weUNvbXBvbmVudChv
dXQsIGVpbiwgMywgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6b25l
KCkpKTsKLQotICAgICAgICAgICAgb3V0ICs9IFdpZGVuUnVsZTo6ZmluYWxXaWR0aDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRBcnJheShjb25zdCB2b2lkICpp
biwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydEFycmF5KHN0YXRpY19jYXN0PGNvbnN0IElucHV0VHlwZSo+
KGluKSwgc3RyaWRlLCBuLCBzdGF0aWNfY2FzdDxPdXRwdXRUeXBlKj4ob3V0KSk7Ci0gICAgfQot
Ci0gIHByaXZhdGU6Ci0gICAgLy8gQWR2YW5jZSB0aGUgZ2l2ZW4gcG9pbnRlciBieSBhIG51bWJl
ciBvZiBieXRlcyAobm90IHBvaW50ZWQtdG8gZWxlbWVudHMpLgotICAgIHRlbXBsYXRlIDxjbGFz
cyBUPgotICAgIHN0YXRpYyBUICpwb2ludGVyQWRkQnl0ZXMoVCAqYmFzZVB0ciwgc3RkOjpzaXpl
X3QgbnVtQnl0ZXMpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlUHRyKSArIG51bUJ5dGVzKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBjb3B5Q29tcG9uZW50KE91dHB1dFR5cGUgKm91dCwgY29uc3Qg
SW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3QgZWxlbWVudGluZGV4LCBPdXRwdXRUeXBlIGRlZmF1
bHR2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChXaWRlblJ1bGU6OmZpbmFsV2lkdGggPiBlbGVt
ZW50aW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChXaWRlblJ1bGU6OmluaXRpYWxX
aWR0aCA+IGVsZW1lbnRpbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRb
ZWxlbWVudGluZGV4XSA9IENvbnZlcnRlcjo6Y29udmVydChpbltlbGVtZW50aW5kZXhdKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXRbZWxlbWVudGluZGV4XSA9IGRlZmF1bHR2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1ZFUlRFWENP
TlZFUlNJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNjUwMGY0NC4uYjRhYTRlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTI3MTEsMjQgKzI3MTEsMTcgQEAgaWYgKFdURl9VU0VfM0Rf
R1JBUEhJQ1MpCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9w
YXJzZUNvbnN0LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvUGFyc2VIZWxwZXIuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9Qb29sQWxsb2MuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKLSAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwotICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21l
bW9yeS5jCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpYWdub3N0aWNzQmFzZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlSGFuZGxlckJh
c2UuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0RpcmVjdGl2ZVBhcnNlci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRXhwcmVzc2lvblBhcnNlci5j
cHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvSW5wdXQuY3BwCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0xleGVyLmNwcAotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAKLSAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcv
TWFjcm9FeHBhbmRlci5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvUHJlcHJvY2Vzc29yLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9uZXcvVG9rZW5pemVyLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYwotICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCisg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
RGlhZ25vc3RpY3NCYXNlLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRsZXJCYXNlLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2
ZVBhcnNlci5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmNw
cAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL01hY3JvLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL01hY3JvRXhwYW5kZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAKQEAgLTI3NDMsNiArMjcz
Niw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZVBhY2tlci5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNM
LmNwcAogICAgICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE0NTE4ODkuLjU4ZjBkNzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxMy0wMS0xMCAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9i
ZS5jb20+CisKKyAgICAgICAgW0FOR0xFXSBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyNzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgQU5HTEUgdG8g
cjE2NDEuCisKKyAgICAgICAgVXBkYXRlIHRoZSBmaWxlcyB1c2VkIGluIHRoZSBFRkwgYW5kIEdU
SyBidWlsZHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorCiAyMDEzLTAxLTEwICBKb2huIE1lbGxvciAgPGpvaG5tZUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgRml4IHNjYWxlIG9mIHNjcmVlbi53aWR0aCwgd2luZG93Lm91dGVyV2lkdGggYW5k
IEBtZWRpYSBkZXZpY2Utd2lkdGggd2hlbiBwYWdlIHNjYWxlIG5vdCBhcHBsaWVkIGluIGNvbXBv
c2l0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2ZDRhMDI2Li42MzVkOTk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYzMTIsNDggKzYzMTIsMzIgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmNwcCBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1Bvb2xBbGxvYy5oIFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUHJh
Z21hLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvYXRvbS5jIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jb21waWxlLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3BwLmMgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMgXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbGVuZ3RoX2xpbWl0cy5oIFwKLQlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jIFwK
LQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L25ldy9EaWFnbm9zdGljc0Jhc2UuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaWFnbm9zdGljcy5oIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9EaXJlY3RpdmVIYW5kbGVy
QmFzZS5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L0RpcmVjdGl2ZUhhbmRsZXIuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0aXZlUGFyc2VyLmNwcCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9uZXcvRGlyZWN0
aXZlUGFyc2VyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvbmV3L0V4cHJlc3Npb25QYXJzZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9FeHByZXNzaW9uUGFyc2VyLmggXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L0lu
cHV0LmNwcCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9uZXcvSW5wdXQuaCBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9uZXcvTGV4ZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9MZXhlci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyby5jcHAgXAotCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L01hY3JvLmgg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3
L01hY3JvRXhwYW5kZXIuY3BwIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL25ldy9NYWNyb0V4cGFuZGVyLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1ByZXByb2Nlc3Nvci5jcHAgXAot
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1By
ZXByb2Nlc3Nvci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL25ldy9Tb3VyY2VMb2NhdGlvbi5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL25ldy9Ub2tlbi5jcHAgXAotCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2VuLmggXAotCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbmV3L1Rva2Vu
aXplci5jcHAgXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvbmV3L1Rva2VuaXplci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL25ldy9wcF91dGlscy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oIFwKLQlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCBcCi0JU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMg
XAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3NsZ2xvYmFscy5oIFwKLQlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3N5bWJvbHMuYyBcCi0JU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmggXAotCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMgXAotCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbnVtZXJpY19sZXguaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9z
dGljc0Jhc2UuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpYWdub3N0aWNzLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuY3BwIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZUhhbmRs
ZXJCYXNlLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNw
cCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9F
eHByZXNzaW9uUGFyc2VyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvSW5wdXQuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0lucHV0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0xleGVyLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uY3BwIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL01hY3JvLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm9F
eHBhbmRlci5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvTWFjcm9FeHBhbmRlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAgXAorCVNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9j
YXRpb24uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbi5jcHAgXAorCVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvVG9rZW4uaCBcCisJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BwX3V0aWxzLmggXAogCVNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHAgXAogCVNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIFwKIAlT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCAwZDA4MTViLi5kZjcwOWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEz
LTAxLTEwICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBbQU5H
TEVdIFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNjI3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byByMTY0MS4KKworICAgICAgICAqIFBs
YXRmb3JtRWZsLmNtYWtlOiBBZGQgQU5HTEUvaW5jbHVkZSB0byB0aGUgaW5jbHVkZSBkaXJlY3Rv
cmllcyBsaXN0IGJlY2F1c2UgU2hhZGVyTGFuZy5oCisgICAgICAgIG5vdyBpbmNsdWRlcyAiS0hS
L2tocnBsYXRmb3JtLmgiLCB3aGljaCBpcyBsb2NhdGVkIGluIEFOR0xFL2luY2x1ZGUvS0hSL2to
cnBsYXRmb3JtLmguCisKIDIwMTMtMDEtMTAgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhl
LmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBBZGQgZ3N0cmVhbWVyIDEuMC41IHRv
IGpoYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDQ3Mzk1YzIuLmE0NThlZDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNzgsNiArNzgsNyBAQCBpZiAoV1RGX1VTRV8zRF9H
UkFQSElDUykKICAgICBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMiCiAgICAgICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCisgICAgICAgICIke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9pbmNsdWRlIgogICAgICAgICAiJHtUSElSRFBBUlRZX0RJUn0v
QU5HTEUvaW5jbHVkZS9HTFNMQU5HIgogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzM0
Y2U5Yi4uODU4ZDQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTEwICBN
YXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KKworICAgICAgICBbQU5HTEVdIFVwZGF0
ZSBBTkdMRSBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjI3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSBBTkdMRSB0byByMTY0MS4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOiBBZGQgQU5HTEUvaW5jbHVkZSB0byB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBsaXN0
IGJlY2F1c2UgU2hhZGVyTGFuZy5oCisgICAgICAgIG5vdyBpbmNsdWRlcyAiS0hSL2tocnBsYXRm
b3JtLmgiLCB3aGljaCBpcyBsb2NhdGVkIGluIEFOR0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3Jt
LmguCisKIDIwMTMtMDEtMTAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgRW5zdXJlIHRoYXQgV2ViUGFnZVByb3h5J3Mgbm90aW9uIG9mIHBhZ2VTY2Fs
ZUZhY3RvciBpcyByZXNldCBvbiBkaWRDb21taXRMb2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IGM1N2MyOGUuLmVhNDEwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0x
OTUsNiArMTk1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAK
IGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVE
RV9ESVJFQ1RPUklFUworICAgICAgICAiJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvaW5jbHVkZSIK
ICAgICAgICAgIiR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL2luY2x1ZGUvR0xTTEFORyIKICAgICAp
CiBlbmRpZiAoKQo=
</data>
<flag name="review"
          id="200131"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="200132"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182676</attachid>
            <date>2013-01-14 18:43:13 -0800</date>
            <delta_ts>2013-01-14 18:49:28 -0800</delta_ts>
            <desc>Attempted build fix - testing EWS</desc>
            <filename>bug-106274-20130115134013.patch</filename>
            <type>text/plain</type>
            <size>7930</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5Njk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggMDExZjFlY2UwZDc0MDQyYzY5ZmI3NTZlZmE3ZjNkZmZjYmE2MDBlOC4uMmUyN2YyZGM3ODMw
NzkwMjA0M2EwYTdkMTViZmJhMzhlZGViOTZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTE0ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBbQU5HTEVdIFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjI3NAorCisgICAgICAg
IFVucmV2aWV3ZWQgYXR0ZW1wdGVkIGJ1aWxkIGZpeC4KKworICAgICAgICBSZW1vdmUgdGhlIGNv
cHkgZmlsZXMgc3RhZ2UuIE1ha2Uga2hycGxhdGZvcm0uaCBhIHB1YmxpYyBoZWFkZXIuCisKKyAg
ICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluY2x1
ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6CisKIDIwMTMtMDEtMTQgIE1heCBWdWpvdmljICA8bXZ1
am92aWNAYWRvYmUuY29tPgogCiAgICAgICAgIFtBTkdMRV0gVXBkYXRlIEFOR0xFIGluIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAxZjU2OGQ5YTJhZmY2MGM1NmUxNWYzNGU0MTI3Nzg1ODI4ZjdlZTJiLi4z
MWNjMTg4ZjNhZjQ3Y2M4NmFjOTU5YzRmYzIyYjdmNmYwZGExNjMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEzLTAxLTE0ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbQU5HTEVdIFVwZGF0ZSBBTkdMRSBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjI3NAorCisgICAgICAgIFVucmV2aWV3
ZWQgYXR0ZW1wdGVkIGJ1aWxkIGZpeC4KKworICAgICAgICBUaGUga2hycGxhdGZvcm0uaCBmaWxl
IGlzIG5vdyBhIHB1YmxpYyBoZWFkZXIgd2l0aG91dCBhIGRpcmVjdG9yeQorICAgICAgICBwcmVm
aXguIFVwZGF0ZSB0aGUgaW5jbHVkZSBwYXRoIHRvIGxvb2sgaW4gdGhlIHJpZ2h0IHBsYWNlLgor
CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisKIDIwMTMtMDEtMTQgIE1heCBWdWpvdmlj
ICA8bXZ1am92aWNAYWRvYmUuY29tPgogCiAgICAgICAgIFtBTkdMRV0gVXBkYXRlIEFOR0xFIGlu
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDYzZmVkZDFkNjFhZmI3MmRkZDg2NmMyMTg0ZjZkMjI5NjNi
OTY5YmEuLmFjMTE2ZjRlNmMwNjI0MGVmZjliNmU3NTNhNTE2MzE4ODk3YmVmYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wMS0xNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CisKKyAgICAgICAgW0FOR0xFXSBVcGRhdGUgQU5HTEUgaW4gV2ViS2l0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyNzQKKworICAgICAg
ICBVbnJldmlld2VkIGF0dGVtcHRlZCBidWlsZCBmaXguCisKKyAgICAgICAgVGhlIGtocnBsYXRm
b3JtLmggZmlsZSBpcyBub3cgYSBwdWJsaWMgaGVhZGVyIHdpdGhvdXQgYSBkaXJlY3RvcnkKKyAg
ICAgICAgcHJlZml4LiBVcGRhdGUgdGhlIGluY2x1ZGUgcGF0aCB0byBsb29rIGluIHRoZSByaWdo
dCBwbGFjZS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorCiAyMDEzLTAxLTE0ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xMjUyNDcxMD4gVXBkYXRlIHNhbmRib3ggcnVsZXMgYWZ0ZXIgcjEyODAwMwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNTExM2I3OTljYzM0MDA3OTJjZDA2MjFmMWY1MTZkNGQwYTczMDkxNi4uMmQz
MTk1YTgxZjRlNjliOTFiYzMwYWRmMDY3NmNhOGRkYTIwNjM0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC03MCw3ICs3MCw3IEBACiAJCUEyNjRGOEM4MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM1
MTY5NzRFMkEwMDZGQUE1QSAvKiBIYXNoTmFtZXMuaCAqLzsgfTsKIAkJQTI2NEY4QzkxNjk3NEUy
QTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEyNjRGOEM2MTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJs
ZVBhY2tlci5jcHAgKi87IH07CiAJCUEyNjRGOENBMTY5NzRFMkEwMDZGQUE1QSAvKiBWYXJpYWJs
ZVBhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTI2NEY4QzcxNjk3NEUyQTAwNkZBQTVBIC8qIFZhcmlhYmxlUGFja2VyLmggKi87IH07Ci0JCUEy
NjRGOENEMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTI2NEY4Q0MxNjk3NjJBQTAwNkZBQTVBIC8q
IGtocnBsYXRmb3JtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJ
QTI2NEY4Q0QxNjk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY0RjhDQzE2OTc2MkFBMDA2RkFBNUEg
Lyoga2hycGxhdGZvcm0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CiAJCUEyNjU2N0JCMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdCMDE1OUMy
MUIxMDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuY3BwICovOyB9OwogCQlBMjY1NjdCQzE1OUMyMUIx
MDAzOTg1MzkgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEyNjU2N0IxMTU5QzIxQjEwMDM5ODUzOSAvKiBEaWFnbm9zdGljcy5o
ICovOyB9OwogCQlBMjY1NjdCRDE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMjY1NjdC
MjE1OUMyMUIxMDAzOTg1MzkgLyogRGlyZWN0aXZlSGFuZGxlci5jcHAgKi87IH07CkBAIC04OSw3
ICs4OSw2IEBACiAJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMjY1NjgzNjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5oICovOyB9OwogCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0
ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTI2NTY4MzcxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVy
VGltaW5nLmNwcCAqLzsgfTsKIAkJQTI2NTY4NDMxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0
VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMjY1NjgzODE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaCAqLzsgfTsKLQkJQTI5QjE1RTgxNjk3ODQ1NzAwMTExRDk3IC8qIGtocnBsYXRm
b3JtLmggaW4gQ29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEy
NjRGOENDMTY5NzYyQUEwMDZGQUE1QSAvKiBraHJwbGF0Zm9ybS5oICovOyB9OwogCQlGQjM5RDI3
MTEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENv
ZGVHZW5HTFNMLmNwcCAqLzsgfTsKIAkJRkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAgKi87IH07CiAJCUZCMzlEMjc5MTIwMEYz
NUEwMDA4OEU2OSAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3Bw
ICovOyB9OwpAQCAtMTMyLDE2ICsxMzEsNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAxOwogCQl9OwotCQlBMjlCMTVFNjE2OTc4NDQ1MDAxMTFEOTcg
LyogQ29weUZpbGVzICovID0gewotCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDEyOwotCQkJZHN0UGF0aCA9IHVzci9sb2NhbC9pbmNsdWRlL0tI
UjsKLQkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKLQkJCWZpbGVzID0gKAotCQkJCUEyOUIxNUU4
MTY5Nzg0NTcwMDExMUQ5NyAvKiBraHJwbGF0Zm9ybS5oIGluIENvcHlGaWxlcyAqLywKLQkJCSk7
Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIC8qIEVu
ZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRmlsZVJl
ZmVyZW5jZSBzZWN0aW9uICovCkBAIC01MjEsNiArNTEwLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQlGQjM5RDc2RTEyMDExMEZDMDAwODhF
NjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NEY4Q0QxNjk3NjJBQTAw
NkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MEQ5QjEwMzEyRTEx
RENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkw
RDlCMTA2MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTBEOUIxMDcxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJzICovLApA
QCAtNTYzLDcgKzU1Myw2IEBACiAJCQkJQTI2NEY4QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2Vu
aXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QzgxNjk3NEUyQTAwNkZBQTVBIC8qIEhh
c2hOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0ExNjk3NEUyQTAwNkZBQTVBIC8q
IFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2
RkFBNUEgLyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTc5LDcgKzU2OCw2IEBA
CiAJCQkJRkIzOUQwQ0YxMjAwRjBFMzAwMDg4RTY5IC8qIEZyYW1ld29ya3MgKi8sCiAJCQkJMzEy
QkRCMEIxNUZFQ0FCMDAwOTdFQkM3IC8qIENvcHlGaWxlcyAqLywKIAkJCQkzMTJCREIwRDE1RkVD
QUNFMDA5N0VCQzcgLyogQ29weUZpbGVzICovLAotCQkJCUEyOUIxNUU2MTY5Nzg0NDUwMDExMUQ5
NyAvKiBDb3B5RmlsZXMgKi8sCiAJCQkpOwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFu
Zy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcu
aAppbmRleCA0NjIzN2YxZjIwMWEyODEzZDY2Mjg4ZjEyZDEwYTczYTgwZWNiYTMzLi4yMmUxMjg0
MzJlNGMyZjdmM2QxNTg4YjZiYWE4ZmM5Y2M2Mzc4ZDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKQEAgLTIzLDcgKzIz
LDcgQEAKICNkZWZpbmUgQ09NUElMRVJfRVhQT1JUCiAjZW5kaWYKIAotI2luY2x1ZGUgIktIUi9r
aHJwbGF0Zm9ybS5oIgorI2luY2x1ZGUgImtocnBsYXRmb3JtLmgiCiAKIC8vCiAvLyBUaGlzIGlz
IHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBhNDU4ZWQ0ZGNmMjI1NDEzNjgxM2JmMzBmMWIw
ZWM3MTc2ZjM4YTA4Li40ZGI2ZDU1Y2NhN2JkZjM2NzMzMDlkZjliMWRjMmRkZDQ1ODE2MDdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTc4LDcgKzc4LDcgQEAgaWYgKFdURl9VU0VfM0Rf
R1JBUEhJQ1MpCiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzIgogICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgotICAgICAgICAiJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvaW5jbHVkZSIKKyAgICAgICAgIiR7VEhJUkRQQVJUWV9ESVJ9
L0FOR0xFL2luY2x1ZGUvS0hSIgogICAgICAgICAiJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvaW5j
bHVkZS9HTFNMQU5HIgogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmlu
ZGV4IGVhNDEwMzU5MjFhZmNjMzZkNTNhY2UwZWYyNzRmN2YzZTQzY2E2NjYuLjQwNzZjODUzNjNk
OTZhMmEwZjA0N2NmMDMwYTIzNGIxM2ZiZmNmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC0xOTUsNyArMTk1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9S
SUVTCiAKIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgIGxpc3QoQVBQRU5EIFdlYktpdDJf
SU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAiJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvaW5j
bHVkZSIKKyAgICAgICAgIiR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL2luY2x1ZGUvS0hSIgogICAg
ICAgICAiJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvaW5jbHVkZS9HTFNMQU5HIgogICAgICkKIGVu
ZGlmICgpCg==
</data>
<flag name="commit-queue"
          id="200783"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>